diff --git a/pull_request_template.md b/.github/pull_request_template.md similarity index 100% rename from pull_request_template.md rename to .github/pull_request_template.md diff --git a/.github/workflows/lint-frontend.yml b/.github/workflows/lint-frontend.yml index 1403396359..de1e8866b2 100644 --- a/.github/workflows/lint-frontend.yml +++ b/.github/workflows/lint-frontend.yml @@ -2,8 +2,6 @@ name: Lint frontend on: pull_request: - paths: - - 'invokeai/frontend/web/**' types: - 'ready_for_review' - 'opened' @@ -11,8 +9,6 @@ on: push: branches: - 'main' - paths: - - 'invokeai/frontend/web/**' merge_group: workflow_dispatch: diff --git a/.github/workflows/style-checks.yml b/.github/workflows/style-checks.yml index 8aceb6469e..96e1df406b 100644 --- a/.github/workflows/style-checks.yml +++ b/.github/workflows/style-checks.yml @@ -1,13 +1,14 @@ -name: Black # TODO: add isort and flake8 later +name: style checks +# just formatting and flake8 for now +# TODO: add isort later on: - pull_request: {} + pull_request: push: - branches: master - tags: "*" + branches: main jobs: - test: + black: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 @@ -19,9 +20,8 @@ jobs: - name: Install dependencies with pip run: | - pip install --upgrade pip wheel - pip install .[test] + pip install black flake8 Flake8-pyproject # - run: isort --check-only . - run: black --check . - # - run: flake8 + - run: flake8 diff --git a/.github/workflows/test-invoke-pip-skip.yml b/.github/workflows/test-invoke-pip-skip.yml deleted file mode 100644 index 004b46d5a8..0000000000 --- a/.github/workflows/test-invoke-pip-skip.yml +++ /dev/null @@ -1,50 +0,0 @@ -name: Test invoke.py pip - -# This is a dummy stand-in for the actual tests -# we don't need to run python tests on non-Python changes -# But PRs require passing tests to be mergeable - -on: - pull_request: - paths: - - '**' - - '!pyproject.toml' - - '!invokeai/**' - - '!tests/**' - - 'invokeai/frontend/web/**' - merge_group: - workflow_dispatch: - -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - -jobs: - matrix: - if: github.event.pull_request.draft == false - strategy: - matrix: - python-version: - - '3.10' - pytorch: - - linux-cuda-11_7 - - linux-rocm-5_2 - - linux-cpu - - macos-default - - windows-cpu - include: - - pytorch: linux-cuda-11_7 - os: ubuntu-22.04 - - pytorch: linux-rocm-5_2 - os: ubuntu-22.04 - - pytorch: linux-cpu - os: ubuntu-22.04 - - pytorch: macos-default - os: macOS-12 - - pytorch: windows-cpu - os: windows-2022 - name: ${{ matrix.pytorch }} on ${{ matrix.python-version }} - runs-on: ${{ matrix.os }} - steps: - - name: skip - run: echo "no build required" diff --git a/.github/workflows/test-invoke-pip.yml b/.github/workflows/test-invoke-pip.yml index 40be0a529e..6086d10069 100644 --- a/.github/workflows/test-invoke-pip.yml +++ b/.github/workflows/test-invoke-pip.yml @@ -3,16 +3,7 @@ on: push: branches: - 'main' - paths: - - 'pyproject.toml' - - 'invokeai/**' - - '!invokeai/frontend/web/**' pull_request: - paths: - - 'pyproject.toml' - - 'invokeai/**' - - 'tests/**' - - '!invokeai/frontend/web/**' types: - 'ready_for_review' - 'opened' @@ -65,10 +56,23 @@ jobs: id: checkout-sources uses: actions/checkout@v3 + - name: Check for changed python files + id: changed-files + uses: tj-actions/changed-files@v37 + with: + files_yaml: | + python: + - 'pyproject.toml' + - 'invokeai/**' + - '!invokeai/frontend/web/**' + - 'tests/**' + - name: set test prompt to main branch validation + if: steps.changed-files.outputs.python_any_changed == 'true' run: echo "TEST_PROMPTS=tests/validate_pr_prompt.txt" >> ${{ matrix.github-env }} - name: setup python + if: steps.changed-files.outputs.python_any_changed == 'true' uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} @@ -76,6 +80,7 @@ jobs: cache-dependency-path: pyproject.toml - name: install invokeai + if: steps.changed-files.outputs.python_any_changed == 'true' env: PIP_EXTRA_INDEX_URL: ${{ matrix.extra-index-url }} run: > @@ -83,6 +88,7 @@ jobs: --editable=".[test]" - name: run pytest + if: steps.changed-files.outputs.python_any_changed == 'true' id: run-pytest run: pytest diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2b16b274d6..9ef8b79e77 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -8,3 +8,10 @@ repos: language: system entry: black types: [python] + + - id: flake8 + name: flake8 + stages: [commit] + language: system + entry: flake8 + types: [python] diff --git a/README.md b/README.md index 3ca1ca1f26..f10c372545 100644 --- a/README.md +++ b/README.md @@ -161,7 +161,7 @@ the command `npm install -g yarn` if needed) _For Windows/Linux with an NVIDIA GPU:_ ```terminal - pip install "InvokeAI[xformers]" --use-pep517 --extra-index-url https://download.pytorch.org/whl/cu117 + pip install "InvokeAI[xformers]" --use-pep517 --extra-index-url https://download.pytorch.org/whl/cu118 ``` _For Linux with an AMD GPU:_ @@ -184,8 +184,9 @@ the command `npm install -g yarn` if needed) 6. Configure InvokeAI and install a starting set of image generation models (you only need to do this once): ```terminal - invokeai-configure + invokeai-configure --root . ``` + Don't miss the dot at the end! 7. Launch the web server (do it every time you run InvokeAI): @@ -193,15 +194,9 @@ the command `npm install -g yarn` if needed) invokeai-web ``` -8. Build Node.js assets +8. Point your browser to http://localhost:9090 to bring up the web interface. - ```terminal - cd invokeai/frontend/web/ - yarn vite build - ``` - -9. Point your browser to http://localhost:9090 to bring up the web interface. -10. Type `banana sushi` in the box on the top left and click `Invoke`. +9. Type `banana sushi` in the box on the top left and click `Invoke`. Be sure to activate the virtual environment each time before re-launching InvokeAI, using `source .venv/bin/activate` or `.venv\Scripts\activate`. @@ -311,13 +306,30 @@ InvokeAI. The second will prepare the 2.3 directory for use with 3.0. You may now launch the WebUI in the usual way, by selecting option [1] from the launcher script -#### Migration Caveats +#### Migrating Images The migration script will migrate your invokeai settings and models, including textual inversion models, LoRAs and merges that you may have installed previously. However it does **not** migrate the generated -images stored in your 2.3-format outputs directory. You will need to -manually import selected images into the 3.0 gallery via drag-and-drop. +images stored in your 2.3-format outputs directory. To do this, you +need to run an additional step: + +1. From a working InvokeAI 3.0 root directory, start the launcher and +enter menu option [8] to open the "developer's console". + +2. At the developer's console command line, type the command: + +```bash +invokeai-import-images +``` + +3. This will lead you through the process of confirming the desired + source and destination for the imported images. The images will + appear in the gallery board of your choice, and contain the + original prompt, model name, and other parameters used to generate + the image. + +(Many kudos to **techjedi** for contributing this script.) ## Hardware Requirements diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh index d45ed3d7ef..6d776feb0e 100755 --- a/docker/docker-entrypoint.sh +++ b/docker/docker-entrypoint.sh @@ -29,8 +29,8 @@ configure() { echo "To reconfigure InvokeAI, delete the above file." echo "======================================================================" else - mkdir -p ${INVOKEAI_ROOT} - chown --recursive ${USER} ${INVOKEAI_ROOT} + mkdir -p "${INVOKEAI_ROOT}" + chown --recursive ${USER} "${INVOKEAI_ROOT}" gosu ${USER} invokeai-configure --yes --default_only fi } @@ -50,16 +50,16 @@ fi if [[ -v "PUBLIC_KEY" ]] && [[ ! -d "${HOME}/.ssh" ]]; then apt-get update apt-get install -y openssh-server - pushd $HOME + pushd "$HOME" mkdir -p .ssh - echo ${PUBLIC_KEY} > .ssh/authorized_keys + echo "${PUBLIC_KEY}" > .ssh/authorized_keys chmod -R 700 .ssh popd service ssh start fi -cd ${INVOKEAI_ROOT} +cd "${INVOKEAI_ROOT}" # Run the CMD as the Container User (not root). exec gosu ${USER} "$@" diff --git a/docs/assets/features/upscale-dialog.png b/docs/assets/features/upscale-dialog.png index 3ba0136545..937bda9db3 100644 Binary files a/docs/assets/features/upscale-dialog.png and b/docs/assets/features/upscale-dialog.png differ diff --git a/docs/features/POSTPROCESS.md b/docs/features/POSTPROCESS.md index 22ef51e109..33a2d19412 100644 --- a/docs/features/POSTPROCESS.md +++ b/docs/features/POSTPROCESS.md @@ -4,35 +4,13 @@ title: Postprocessing # :material-image-edit: Postprocessing -## Intro - -This extension provides the ability to restore faces and upscale images. +This sections details the ability to improve faces and upscale images. ## Face Fixing -The default face restoration module is GFPGAN. The default upscale is -Real-ESRGAN. For an alternative face restoration module, see -[CodeFormer Support](#codeformer-support) below. +As of InvokeAI 3.0, the easiest way to improve faces created during image generation is through the Inpainting functionality of the Unified Canvas. Simply add the image containing the faces that you would like to improve to the canvas, mask the face to be improved and run the invocation. For best results, make sure to use an inpainting specific model; these are usually identified by the "-inpainting" term in the model name. -As of version 1.14, environment.yaml will install the Real-ESRGAN package into -the standard install location for python packages, and will put GFPGAN into a -subdirectory of "src" in the InvokeAI directory. Upscaling with Real-ESRGAN -should "just work" without further intervention. Simply indicate the desired scale on -the popup in the Web GUI. - -**GFPGAN** requires a series of downloadable model files to work. These are -loaded when you run `invokeai-configure`. If GFPAN is failing with an -error, please run the following from the InvokeAI directory: - -```bash -invokeai-configure -``` - -If you do not run this script in advance, the GFPGAN module will attempt to -download the models files the first time you try to perform facial -reconstruction. - -### Upscaling +## Upscaling Open the upscaling dialog by clicking on the "expand" icon located above the image display area in the Web UI: @@ -41,82 +19,23 @@ above the image display area in the Web UI: ![upscale1](../assets/features/upscale-dialog.png) -There are three different upscaling parameters that you can -adjust. The first is the scale itself, either 2x or 4x. +The default upscaling option is Real-ESRGAN x2 Plus, which will scale your image by a factor of two. This means upscaling a 512x512 image will result in a new 1024x1024 image. -The second is the "Denoising Strength." Higher values will smooth out -the image and remove digital chatter, but may lose fine detail at -higher values. +Other options are the x4 upscalers, which will scale your image by a factor of 4. -Third, "Upscale Strength" allows you to adjust how the You can set the -scaling stength between `0` and `1.0` to control the intensity of the -scaling. AI upscalers generally tend to smooth out texture details. If -you wish to retain some of those for natural looking results, we -recommend using values between `0.5 to 0.8`. - -[This figure](../assets/features/upscaling-montage.png) illustrates -the effects of denoising and strength. The original image was 512x512, -4x scaled to 2048x2048. The "original" version on the upper left was -scaled using simple pixel averaging. The remainder use the ESRGAN -upscaling algorithm at different levels of denoising and strength. - -
-![upscaling](../assets/features/upscaling-montage.png){ width=720 } -
- -Both denoising and strength default to 0.75. - -### Face Restoration - -InvokeAI offers alternative two face restoration algorithms, -[GFPGAN](https://github.com/TencentARC/GFPGAN) and -[CodeFormer](https://huggingface.co/spaces/sczhou/CodeFormer). These -algorithms improve the appearance of faces, particularly eyes and -mouths. Issues with faces are less common with the latest set of -Stable Diffusion models than with the original 1.4 release, but the -restoration algorithms can still make a noticeable improvement in -certain cases. You can also apply restoration to old photographs you -upload. - -To access face restoration, click the "smiley face" icon in the -toolbar above the InvokeAI image panel. You will be presented with a -dialog that offers a choice between the two algorithm and sliders that -allow you to adjust their parameters. Alternatively, you may open the -left-hand accordion panel labeled "Face Restoration" and have the -restoration algorithm of your choice applied to generated images -automatically. - - -Like upscaling, there are a number of parameters that adjust the face -restoration output. GFPGAN has a single parameter, `strength`, which -controls how much the algorithm is allowed to adjust the -image. CodeFormer has two parameters, `strength`, and `fidelity`, -which together control the quality of the output image as described in -the [CodeFormer project -page](https://shangchenzhou.com/projects/CodeFormer/). Default values -are 0.75 for both parameters, which achieves a reasonable balance -between changing the image too much and not enough. - -[This figure](../assets/features/restoration-montage.png) illustrates -the effects of adjusting GFPGAN and CodeFormer parameters. - -
-![upscaling](../assets/features/restoration-montage.png){ width=720 } -
!!! note - GFPGAN and Real-ESRGAN are both memory intensive. In order to avoid crashes and memory overloads + Real-ESRGAN is memory intensive. In order to avoid crashes and memory overloads during the Stable Diffusion process, these effects are applied after Stable Diffusion has completed its work. In single image generations, you will see the output right away but when you are using multiple - iterations, the images will first be generated and then upscaled and face restored after that + iterations, the images will first be generated and then upscaled after that process is complete. While the image generation is taking place, you will still be able to preview the base images. ## How to disable -If, for some reason, you do not wish to load the GFPGAN and/or ESRGAN libraries, -you can disable them on the invoke.py command line with the `--no_restore` and -`--no_esrgan` options, respectively. +If, for some reason, you do not wish to load the ESRGAN libraries, +you can disable them on the invoke.py command line with the `--no_esrgan` options. diff --git a/docs/installation/010_INSTALL_AUTOMATED.md b/docs/installation/010_INSTALL_AUTOMATED.md index 9b66fcbd83..0937c07bca 100644 --- a/docs/installation/010_INSTALL_AUTOMATED.md +++ b/docs/installation/010_INSTALL_AUTOMATED.md @@ -264,7 +264,7 @@ experimental versions later. you can create several levels of subfolders and drop your models into whichever ones you want. - - ***Autoimport FolderLICENSE*** + - ***LICENSE*** At the bottom of the screen you will see a checkbox for accepting the CreativeML Responsible AI Licenses. You need to accept the license @@ -471,7 +471,7 @@ Then type the following commands: === "NVIDIA System" ```bash - pip install torch torchvision --force-reinstall --extra-index-url https://download.pytorch.org/whl/cu117 + pip install torch torchvision --force-reinstall --extra-index-url https://download.pytorch.org/whl/cu118 pip install xformers ``` diff --git a/docs/installation/020_INSTALL_MANUAL.md b/docs/installation/020_INSTALL_MANUAL.md index c0fb4c046f..a68e5b1414 100644 --- a/docs/installation/020_INSTALL_MANUAL.md +++ b/docs/installation/020_INSTALL_MANUAL.md @@ -148,7 +148,7 @@ manager, please follow these steps: === "CUDA (NVidia)" ```bash - pip install "InvokeAI[xformers]" --use-pep517 --extra-index-url https://download.pytorch.org/whl/cu117 + pip install "InvokeAI[xformers]" --use-pep517 --extra-index-url https://download.pytorch.org/whl/cu118 ``` === "ROCm (AMD)" @@ -192,8 +192,10 @@ manager, please follow these steps: your outputs. ```terminal - invokeai-configure + invokeai-configure --root . ``` + + Don't miss the dot at the end of the command! The script `invokeai-configure` will interactively guide you through the process of downloading and installing the weights files needed for InvokeAI. @@ -225,12 +227,6 @@ manager, please follow these steps: !!! warning "Make sure that the virtual environment is activated, which should create `(.venv)` in front of your prompt!" - === "CLI" - - ```bash - invokeai - ``` - === "local Webserver" ```bash @@ -243,6 +239,12 @@ manager, please follow these steps: invokeai --web --host 0.0.0.0 ``` + === "CLI" + + ```bash + invokeai + ``` + If you choose the run the web interface, point your browser at http://localhost:9090 in order to load the GUI. @@ -310,7 +312,7 @@ installation protocol (important!) === "CUDA (NVidia)" ```bash - pip install -e .[xformers] --use-pep517 --extra-index-url https://download.pytorch.org/whl/cu117 + pip install -e .[xformers] --use-pep517 --extra-index-url https://download.pytorch.org/whl/cu118 ``` === "ROCm (AMD)" @@ -354,7 +356,7 @@ you can do so using this unsupported recipe: mkdir ~/invokeai conda create -n invokeai python=3.10 conda activate invokeai -pip install InvokeAI[xformers] --use-pep517 --extra-index-url https://download.pytorch.org/whl/cu117 +pip install InvokeAI[xformers] --use-pep517 --extra-index-url https://download.pytorch.org/whl/cu118 invokeai-configure --root ~/invokeai invokeai --root ~/invokeai --web ``` diff --git a/docs/installation/030_INSTALL_CUDA_AND_ROCM.md b/docs/installation/030_INSTALL_CUDA_AND_ROCM.md index 3d3445e3a0..314043f538 100644 --- a/docs/installation/030_INSTALL_CUDA_AND_ROCM.md +++ b/docs/installation/030_INSTALL_CUDA_AND_ROCM.md @@ -34,11 +34,11 @@ directly from NVIDIA. **Do not try to install Ubuntu's nvidia-cuda-toolkit package. It is out of date and will cause conflicts among the NVIDIA driver and binaries.** -Go to [CUDA Toolkit 11.7 -Downloads](https://developer.nvidia.com/cuda-11-7-0-download-archive), -and use the target selection wizard to choose your operating system, -hardware platform, and preferred installation method (e.g. "local" -versus "network"). +Go to [CUDA Toolkit +Downloads](https://developer.nvidia.com/cuda-downloads), and use the +target selection wizard to choose your operating system, hardware +platform, and preferred installation method (e.g. "local" versus +"network"). This will provide you with a downloadable install file or, depending on your choices, a recipe for downloading and running a install shell @@ -61,7 +61,7 @@ Runtime Site](https://developer.nvidia.com/nvidia-container-runtime) When installing torch and torchvision manually with `pip`, remember to provide the argument `--extra-index-url -https://download.pytorch.org/whl/cu117` as described in the [Manual +https://download.pytorch.org/whl/cu118` as described in the [Manual Installation Guide](020_INSTALL_MANUAL.md). ## :simple-amd: ROCm diff --git a/docs/installation/050_INSTALLING_MODELS.md b/docs/installation/050_INSTALLING_MODELS.md index ce2004e841..d1c0cfacca 100644 --- a/docs/installation/050_INSTALLING_MODELS.md +++ b/docs/installation/050_INSTALLING_MODELS.md @@ -124,7 +124,7 @@ installation. Examples: invokeai-model-install --list controlnet # (install the model at the indicated URL) -invokeai-model-install --add http://civitai.com/2860 +invokeai-model-install --add https://civitai.com/api/download/models/128713 # (delete the named model) invokeai-model-install --delete sd-1/main/analog-diffusion @@ -170,4 +170,4 @@ elsewhere on disk and they will be autoimported. You can also create subfolders and organize them as you wish. The location of the autoimport directories are controlled by settings -in `invokeai.yaml`. See [Configuration](../features/CONFIGURATION.md). \ No newline at end of file +in `invokeai.yaml`. See [Configuration](../features/CONFIGURATION.md). diff --git a/docs/installation/070_INSTALL_XFORMERS.md b/docs/installation/070_INSTALL_XFORMERS.md index be54a3ee86..849f9d1ddc 100644 --- a/docs/installation/070_INSTALL_XFORMERS.md +++ b/docs/installation/070_INSTALL_XFORMERS.md @@ -28,18 +28,21 @@ command line, then just be sure to activate it's virtual environment. Then run the following three commands: ```sh -pip install xformers==0.0.16rc425 -pip install triton +pip install xformers~=0.0.19 +pip install triton # WON'T WORK ON WINDOWS python -m xformers.info output ``` The first command installs `xformers`, the second installs the `triton` training accelerator, and the third prints out the `xformers` -installation status. If all goes well, you'll see a report like the +installation status. On Windows, please omit the `triton` package, +which is not available on that platform. + +If all goes well, you'll see a report like the following: ```sh -xFormers 0.0.16rc425 +xFormers 0.0.20 memory_efficient_attention.cutlassF: available memory_efficient_attention.cutlassB: available memory_efficient_attention.flshattF: available @@ -48,22 +51,28 @@ memory_efficient_attention.smallkF: available memory_efficient_attention.smallkB: available memory_efficient_attention.tritonflashattF: available memory_efficient_attention.tritonflashattB: available +indexing.scaled_index_addF: available +indexing.scaled_index_addB: available +indexing.index_select: available +swiglu.dual_gemm_silu: available +swiglu.gemm_fused_operand_sum: available swiglu.fused.p.cpp: available is_triton_available: True is_functorch_available: False -pytorch.version: 1.13.1+cu117 +pytorch.version: 2.0.1+cu118 pytorch.cuda: available -gpu.compute_capability: 8.6 -gpu.name: NVIDIA RTX A2000 12GB +gpu.compute_capability: 8.9 +gpu.name: NVIDIA GeForce RTX 4070 build.info: available -build.cuda_version: 1107 -build.python_version: 3.10.9 -build.torch_version: 1.13.1+cu117 +build.cuda_version: 1108 +build.python_version: 3.10.11 +build.torch_version: 2.0.1+cu118 build.env.TORCH_CUDA_ARCH_LIST: 5.0+PTX 6.0 6.1 7.0 7.5 8.0 8.6 build.env.XFORMERS_BUILD_TYPE: Release build.env.XFORMERS_ENABLE_DEBUG_ASSERTIONS: None build.env.NVCC_FLAGS: None -build.env.XFORMERS_PACKAGE_FROM: wheel-v0.0.16rc425 +build.env.XFORMERS_PACKAGE_FROM: wheel-v0.0.20 +build.nvcc_version: 11.8.89 source.privacy: open source ``` @@ -83,14 +92,14 @@ installed from source. These instructions were written for a system running Ubuntu 22.04, but other Linux distributions should be able to adapt this recipe. -#### 1. Install CUDA Toolkit 11.7 +#### 1. Install CUDA Toolkit 11.8 You will need the CUDA developer's toolkit in order to compile and install xFormers. **Do not try to install Ubuntu's nvidia-cuda-toolkit package.** It is out of date and will cause conflicts among the NVIDIA driver and binaries. Instead install the CUDA Toolkit package provided -by NVIDIA itself. Go to [CUDA Toolkit 11.7 -Downloads](https://developer.nvidia.com/cuda-11-7-0-download-archive) +by NVIDIA itself. Go to [CUDA Toolkit 11.8 +Downloads](https://developer.nvidia.com/cuda-11-8-0-download-archive) and use the target selection wizard to choose your platform and Linux distribution. Select an installer type of "runfile (local)" at the last step. @@ -101,17 +110,17 @@ example, the install script recipe for Ubuntu 22.04 running on a x86_64 system is: ``` -wget https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda_11.7.0_515.43.04_linux.run -sudo sh cuda_11.7.0_515.43.04_linux.run +wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run +sudo sh cuda_11.8.0_520.61.05_linux.run ``` Rather than cut-and-paste this example, We recommend that you walk through the toolkit wizard in order to get the most up to date installer for your system. -#### 2. Confirm/Install pyTorch 1.13 with CUDA 11.7 support +#### 2. Confirm/Install pyTorch 2.01 with CUDA 11.8 support -If you are using InvokeAI 2.3 or higher, these will already be +If you are using InvokeAI 3.0.2 or higher, these will already be installed. If not, you can check whether you have the needed libraries using a quick command. Activate the invokeai virtual environment, either by entering the "developer's console", or manually with a @@ -124,7 +133,7 @@ Then run the command: python -c 'exec("import torch\nprint(torch.__version__)")' ``` -If it prints __1.13.1+cu117__ you're good. If not, you can install the +If it prints __1.13.1+cu118__ you're good. If not, you can install the most up to date libraries with this command: ```sh diff --git a/docs/installation/INSTALLATION.md b/docs/installation/INSTALLATION.md index b6f251fe48..ec5e2492b6 100644 --- a/docs/installation/INSTALLATION.md +++ b/docs/installation/INSTALLATION.md @@ -25,10 +25,10 @@ This method is recommended for experienced users and developers #### [Docker Installation](040_INSTALL_DOCKER.md) This method is recommended for those familiar with running Docker containers ### Other Installation Guides - - [PyPatchMatch](installation/060_INSTALL_PATCHMATCH.md) - - [XFormers](installation/070_INSTALL_XFORMERS.md) - - [CUDA and ROCm Drivers](installation/030_INSTALL_CUDA_AND_ROCM.md) - - [Installing New Models](installation/050_INSTALLING_MODELS.md) + - [PyPatchMatch](060_INSTALL_PATCHMATCH.md) + - [XFormers](070_INSTALL_XFORMERS.md) + - [CUDA and ROCm Drivers](030_INSTALL_CUDA_AND_ROCM.md) + - [Installing New Models](050_INSTALLING_MODELS.md) ## :fontawesome-solid-computer: Hardware Requirements diff --git a/flake.nix b/flake.nix index 1f35c02c6e..3ccc665812 100644 --- a/flake.nix +++ b/flake.nix @@ -34,6 +34,10 @@ cudaPackages.cudnn cudaPackages.cuda_nvrtc cudatoolkit + pkgconfig + libconfig + cmake + blas freeglut glib gperf @@ -42,6 +46,12 @@ libGLU linuxPackages.nvidia_x11 python + (opencv4.override { + enableGtk3 = true; + enableFfmpeg = true; + enableCuda = true; + enableUnfree = true; + }) stdenv.cc stdenv.cc.cc.lib xorg.libX11 diff --git a/installer/lib/installer.py b/installer/lib/installer.py index 545d99ab0b..aaf5779801 100644 --- a/installer/lib/installer.py +++ b/installer/lib/installer.py @@ -348,7 +348,7 @@ class InvokeAiInstance: introduction() - from invokeai.frontend.install import invokeai_configure + from invokeai.frontend.install.invokeai_configure import invokeai_configure # NOTE: currently the config script does its own arg parsing! this means the command-line switches # from the installer will also automatically propagate down to the config script. @@ -407,7 +407,7 @@ def get_pip_from_venv(venv_path: Path) -> str: :rtype: str """ - pip = "Scripts\pip.exe" if OS == "Windows" else "bin/pip" + pip = "Scripts\\pip.exe" if OS == "Windows" else "bin/pip" return str(venv_path.expanduser().resolve() / pip) @@ -463,10 +463,10 @@ def get_torch_source() -> (Union[str, None], str): url = "https://download.pytorch.org/whl/cpu" if device == "cuda": - url = "https://download.pytorch.org/whl/cu117" + url = "https://download.pytorch.org/whl/cu118" optional_modules = "[xformers,onnx-cuda]" if device == "cuda_and_dml": - url = "https://download.pytorch.org/whl/cu117" + url = "https://download.pytorch.org/whl/cu118" optional_modules = "[xformers,onnx-directml]" # in all other cases, Torch wheels should be coming from PyPi as of Torch 1.13 diff --git a/installer/lib/main.py b/installer/lib/main.py index 4f1372652b..5c9e6f8229 100644 --- a/installer/lib/main.py +++ b/installer/lib/main.py @@ -49,7 +49,7 @@ if __name__ == "__main__": try: inst.install(**args.__dict__) - except KeyboardInterrupt as exc: + except KeyboardInterrupt: print("\n") print("Ctrl-C pressed. Aborting.") print("Come back soon!") diff --git a/installer/lib/messages.py b/installer/lib/messages.py index e6362b75d0..c5a39dc91c 100644 --- a/installer/lib/messages.py +++ b/installer/lib/messages.py @@ -70,7 +70,7 @@ def confirm_install(dest: Path) -> bool: ) else: print(f"InvokeAI will be installed in {dest}") - dest_confirmed = not Confirm.ask(f"Would you like to pick a different location?", default=False) + dest_confirmed = not Confirm.ask("Would you like to pick a different location?", default=False) console.line() return dest_confirmed @@ -90,7 +90,7 @@ def dest_path(dest=None) -> Path: dest = Path(dest).expanduser().resolve() else: dest = Path.cwd().expanduser().resolve() - prev_dest = dest.expanduser().resolve() + prev_dest = init_path = dest dest_confirmed = confirm_install(dest) @@ -109,9 +109,9 @@ def dest_path(dest=None) -> Path: ) console.line() - print(f"[orange3]Please select the destination directory for the installation:[/] \[{browse_start}]: ") + console.print(f"[orange3]Please select the destination directory for the installation:[/] \\[{browse_start}]: ") selected = prompt( - f">>> ", + ">>> ", complete_in_thread=True, completer=path_completer, default=str(browse_start) + os.sep, @@ -134,14 +134,14 @@ def dest_path(dest=None) -> Path: try: dest.mkdir(exist_ok=True, parents=True) return dest - except PermissionError as exc: - print( + except PermissionError: + console.print( f"Failed to create directory {dest} due to insufficient permissions", style=Style(color="red"), highlight=True, ) - except OSError as exc: - console.print_exception(exc) + except OSError: + console.print_exception() if Confirm.ask("Would you like to try again?"): dest_path(init_path) diff --git a/installer/readme.txt b/installer/readme.txt index 5138d0cd52..b9a97e2093 100644 --- a/installer/readme.txt +++ b/installer/readme.txt @@ -8,16 +8,13 @@ Preparations: to work. Instructions are given here: https://invoke-ai.github.io/InvokeAI/installation/INSTALL_AUTOMATED/ - NOTE: At this time we do not recommend Python 3.11. We recommend - Version 3.10.9, which has been extensively tested with InvokeAI. - Before you start the installer, please open up your system's command line window (Terminal or Command) and type the commands: python --version If all is well, it will print "Python 3.X.X", where the version number - is at least 3.9.1, and less than 3.11. + is at least 3.9.*, and not higher than 3.11.*. If this works, check the version of the Python package manager, pip: diff --git a/invokeai/app/api/dependencies.py b/invokeai/app/api/dependencies.py index d609ce3be2..39642df19b 100644 --- a/invokeai/app/api/dependencies.py +++ b/invokeai/app/api/dependencies.py @@ -1,8 +1,6 @@ # Copyright (c) 2022 Kyle Schouviller (https://github.com/kyle0654) -from typing import Optional from logging import Logger -import os from invokeai.app.services.board_image_record_storage import ( SqliteBoardImageRecordStorage, ) @@ -30,6 +28,7 @@ from ..services.invoker import Invoker from ..services.processor import DefaultInvocationProcessor from ..services.sqlite import SqliteItemStorage from ..services.model_manager_service import ModelManagerService +from ..services.invocation_stats import InvocationStatsService from .events import FastAPIEventService @@ -45,7 +44,7 @@ def check_internet() -> bool: try: urllib.request.urlopen(host, timeout=1) return True - except: + except Exception: return False @@ -55,7 +54,7 @@ logger = InvokeAILogger.getLogger() class ApiDependencies: """Contains and initializes all dependencies for the API""" - invoker: Optional[Invoker] = None + invoker: Invoker @staticmethod def initialize(config: InvokeAIAppConfig, event_handler_id: int, logger: Logger = logger): @@ -68,8 +67,9 @@ class ApiDependencies: output_folder = config.output_path # TODO: build a file/path manager? - db_location = config.db_path - db_location.parent.mkdir(parents=True, exist_ok=True) + db_path = config.db_path + db_path.parent.mkdir(parents=True, exist_ok=True) + db_location = str(db_path) graph_execution_manager = SqliteItemStorage[GraphExecutionState]( filename=db_location, table_name="graph_executions" @@ -128,6 +128,7 @@ class ApiDependencies: graph_execution_manager=graph_execution_manager, processor=DefaultInvocationProcessor(), configuration=config, + performance_statistics=InvocationStatsService(graph_execution_manager), logger=logger, ) diff --git a/invokeai/app/api/routers/board_images.py b/invokeai/app/api/routers/board_images.py index 6cb073ca7c..8e36a682d2 100644 --- a/invokeai/app/api/routers/board_images.py +++ b/invokeai/app/api/routers/board_images.py @@ -1,24 +1,30 @@ -from fastapi import Body, HTTPException, Path, Query +from fastapi import Body, HTTPException from fastapi.routing import APIRouter -from invokeai.app.services.board_record_storage import BoardRecord, BoardChanges -from invokeai.app.services.image_record_storage import OffsetPaginatedResults -from invokeai.app.services.models.board_record import BoardDTO -from invokeai.app.services.models.image_record import ImageDTO +from pydantic import BaseModel, Field from ..dependencies import ApiDependencies board_images_router = APIRouter(prefix="/v1/board_images", tags=["boards"]) +class AddImagesToBoardResult(BaseModel): + board_id: str = Field(description="The id of the board the images were added to") + added_image_names: list[str] = Field(description="The image names that were added to the board") + + +class RemoveImagesFromBoardResult(BaseModel): + removed_image_names: list[str] = Field(description="The image names that were removed from their board") + + @board_images_router.post( "/", - operation_id="create_board_image", + operation_id="add_image_to_board", responses={ 201: {"description": "The image was added to a board successfully"}, }, status_code=201, ) -async def create_board_image( +async def add_image_to_board( board_id: str = Body(description="The id of the board to add to"), image_name: str = Body(description="The name of the image to add"), ): @@ -28,27 +34,79 @@ async def create_board_image( board_id=board_id, image_name=image_name ) return result - except Exception as e: - raise HTTPException(status_code=500, detail="Failed to add to board") + except Exception: + raise HTTPException(status_code=500, detail="Failed to add image to board") @board_images_router.delete( "/", - operation_id="remove_board_image", + operation_id="remove_image_from_board", responses={ 201: {"description": "The image was removed from the board successfully"}, }, status_code=201, ) -async def remove_board_image( - board_id: str = Body(description="The id of the board"), - image_name: str = Body(description="The name of the image to remove"), +async def remove_image_from_board( + image_name: str = Body(description="The name of the image to remove", embed=True), ): - """Deletes a board_image""" + """Removes an image from its board, if it had one""" try: - result = ApiDependencies.invoker.services.board_images.remove_image_from_board( - board_id=board_id, image_name=image_name - ) + result = ApiDependencies.invoker.services.board_images.remove_image_from_board(image_name=image_name) return result - except Exception as e: - raise HTTPException(status_code=500, detail="Failed to update board") + except Exception: + raise HTTPException(status_code=500, detail="Failed to remove image from board") + + +@board_images_router.post( + "/batch", + operation_id="add_images_to_board", + responses={ + 201: {"description": "Images were added to board successfully"}, + }, + status_code=201, + response_model=AddImagesToBoardResult, +) +async def add_images_to_board( + board_id: str = Body(description="The id of the board to add to"), + image_names: list[str] = Body(description="The names of the images to add", embed=True), +) -> AddImagesToBoardResult: + """Adds a list of images to a board""" + try: + added_image_names: list[str] = [] + for image_name in image_names: + try: + ApiDependencies.invoker.services.board_images.add_image_to_board( + board_id=board_id, image_name=image_name + ) + added_image_names.append(image_name) + except Exception: + pass + return AddImagesToBoardResult(board_id=board_id, added_image_names=added_image_names) + except Exception: + raise HTTPException(status_code=500, detail="Failed to add images to board") + + +@board_images_router.post( + "/batch/delete", + operation_id="remove_images_from_board", + responses={ + 201: {"description": "Images were removed from board successfully"}, + }, + status_code=201, + response_model=RemoveImagesFromBoardResult, +) +async def remove_images_from_board( + image_names: list[str] = Body(description="The names of the images to remove", embed=True), +) -> RemoveImagesFromBoardResult: + """Removes a list of images from their board, if they had one""" + try: + removed_image_names: list[str] = [] + for image_name in image_names: + try: + ApiDependencies.invoker.services.board_images.remove_image_from_board(image_name=image_name) + removed_image_names.append(image_name) + except Exception: + pass + return RemoveImagesFromBoardResult(removed_image_names=removed_image_names) + except Exception: + raise HTTPException(status_code=500, detail="Failed to remove images from board") diff --git a/invokeai/app/api/routers/boards.py b/invokeai/app/api/routers/boards.py index 69f4a8b3a7..630135f236 100644 --- a/invokeai/app/api/routers/boards.py +++ b/invokeai/app/api/routers/boards.py @@ -37,7 +37,7 @@ async def create_board( try: result = ApiDependencies.invoker.services.boards.create(board_name=board_name) return result - except Exception as e: + except Exception: raise HTTPException(status_code=500, detail="Failed to create board") @@ -50,7 +50,7 @@ async def get_board( try: result = ApiDependencies.invoker.services.boards.get_dto(board_id=board_id) return result - except Exception as e: + except Exception: raise HTTPException(status_code=404, detail="Board not found") @@ -73,7 +73,7 @@ async def update_board( try: result = ApiDependencies.invoker.services.boards.update(board_id=board_id, changes=changes) return result - except Exception as e: + except Exception: raise HTTPException(status_code=500, detail="Failed to update board") @@ -105,7 +105,7 @@ async def delete_board( deleted_board_images=deleted_board_images, deleted_images=[], ) - except Exception as e: + except Exception: raise HTTPException(status_code=500, detail="Failed to delete board") diff --git a/invokeai/app/api/routers/images.py b/invokeai/app/api/routers/images.py index 498a1139e4..72ce94e9cf 100644 --- a/invokeai/app/api/routers/images.py +++ b/invokeai/app/api/routers/images.py @@ -1,31 +1,31 @@ import io from typing import Optional +from PIL import Image from fastapi import Body, HTTPException, Path, Query, Request, Response, UploadFile from fastapi.responses import FileResponse from fastapi.routing import APIRouter -from PIL import Image +from pydantic import BaseModel, Field from invokeai.app.invocations.metadata import ImageMetadata from invokeai.app.models.image import ImageCategory, ResourceOrigin from invokeai.app.services.image_record_storage import OffsetPaginatedResults -from invokeai.app.services.item_storage import PaginatedResults from invokeai.app.services.models.image_record import ( ImageDTO, ImageRecordChanges, ImageUrlsDTO, ) - from ..dependencies import ApiDependencies images_router = APIRouter(prefix="/v1/images", tags=["images"]) + # images are immutable; set a high max-age IMAGE_MAX_AGE = 31536000 @images_router.post( - "/", + "/upload", operation_id="upload_image", responses={ 201: {"description": "The image was uploaded successfully"}, @@ -55,7 +55,7 @@ async def upload_image( if crop_visible: bbox = pil_image.getbbox() pil_image = pil_image.crop(bbox) - except: + except Exception: # Error opening the image raise HTTPException(status_code=415, detail="Failed to read image") @@ -73,11 +73,11 @@ async def upload_image( response.headers["Location"] = image_dto.image_url return image_dto - except Exception as e: + except Exception: raise HTTPException(status_code=500, detail="Failed to create image") -@images_router.delete("/{image_name}", operation_id="delete_image") +@images_router.delete("/i/{image_name}", operation_id="delete_image") async def delete_image( image_name: str = Path(description="The name of the image to delete"), ) -> None: @@ -85,7 +85,7 @@ async def delete_image( try: ApiDependencies.invoker.services.images.delete(image_name) - except Exception as e: + except Exception: # TODO: Does this need any exception handling at all? pass @@ -97,13 +97,13 @@ async def clear_intermediates() -> int: try: count_deleted = ApiDependencies.invoker.services.images.delete_intermediates() return count_deleted - except Exception as e: + except Exception: raise HTTPException(status_code=500, detail="Failed to clear intermediates") pass @images_router.patch( - "/{image_name}", + "/i/{image_name}", operation_id="update_image", response_model=ImageDTO, ) @@ -115,12 +115,12 @@ async def update_image( try: return ApiDependencies.invoker.services.images.update(image_name, image_changes) - except Exception as e: + except Exception: raise HTTPException(status_code=400, detail="Failed to update image") @images_router.get( - "/{image_name}", + "/i/{image_name}", operation_id="get_image_dto", response_model=ImageDTO, ) @@ -131,12 +131,12 @@ async def get_image_dto( try: return ApiDependencies.invoker.services.images.get_dto(image_name) - except Exception as e: + except Exception: raise HTTPException(status_code=404) @images_router.get( - "/{image_name}/metadata", + "/i/{image_name}/metadata", operation_id="get_image_metadata", response_model=ImageMetadata, ) @@ -147,12 +147,13 @@ async def get_image_metadata( try: return ApiDependencies.invoker.services.images.get_metadata(image_name) - except Exception as e: + except Exception: raise HTTPException(status_code=404) -@images_router.get( - "/{image_name}/full", +@images_router.api_route( + "/i/{image_name}/full", + methods=["GET", "HEAD"], operation_id="get_image_full", response_class=Response, responses={ @@ -182,12 +183,12 @@ async def get_image_full( ) response.headers["Cache-Control"] = f"max-age={IMAGE_MAX_AGE}" return response - except Exception as e: + except Exception: raise HTTPException(status_code=404) @images_router.get( - "/{image_name}/thumbnail", + "/i/{image_name}/thumbnail", operation_id="get_image_thumbnail", response_class=Response, responses={ @@ -211,12 +212,12 @@ async def get_image_thumbnail( response = FileResponse(path, media_type="image/webp", content_disposition_type="inline") response.headers["Cache-Control"] = f"max-age={IMAGE_MAX_AGE}" return response - except Exception as e: + except Exception: raise HTTPException(status_code=404) @images_router.get( - "/{image_name}/urls", + "/i/{image_name}/urls", operation_id="get_image_urls", response_model=ImageUrlsDTO, ) @@ -233,7 +234,7 @@ async def get_image_urls( image_url=image_url, thumbnail_url=thumbnail_url, ) - except Exception as e: + except Exception: raise HTTPException(status_code=404) @@ -265,3 +266,62 @@ async def list_image_dtos( ) return image_dtos + + +class DeleteImagesFromListResult(BaseModel): + deleted_images: list[str] + + +@images_router.post("/delete", operation_id="delete_images_from_list", response_model=DeleteImagesFromListResult) +async def delete_images_from_list( + image_names: list[str] = Body(description="The list of names of images to delete", embed=True), +) -> DeleteImagesFromListResult: + try: + deleted_images: list[str] = [] + for image_name in image_names: + try: + ApiDependencies.invoker.services.images.delete(image_name) + deleted_images.append(image_name) + except Exception: + pass + return DeleteImagesFromListResult(deleted_images=deleted_images) + except Exception: + raise HTTPException(status_code=500, detail="Failed to delete images") + + +class ImagesUpdatedFromListResult(BaseModel): + updated_image_names: list[str] = Field(description="The image names that were updated") + + +@images_router.post("/star", operation_id="star_images_in_list", response_model=ImagesUpdatedFromListResult) +async def star_images_in_list( + image_names: list[str] = Body(description="The list of names of images to star", embed=True), +) -> ImagesUpdatedFromListResult: + try: + updated_image_names: list[str] = [] + for image_name in image_names: + try: + ApiDependencies.invoker.services.images.update(image_name, changes=ImageRecordChanges(starred=True)) + updated_image_names.append(image_name) + except Exception: + pass + return ImagesUpdatedFromListResult(updated_image_names=updated_image_names) + except Exception: + raise HTTPException(status_code=500, detail="Failed to star images") + + +@images_router.post("/unstar", operation_id="unstar_images_in_list", response_model=ImagesUpdatedFromListResult) +async def unstar_images_in_list( + image_names: list[str] = Body(description="The list of names of images to unstar", embed=True), +) -> ImagesUpdatedFromListResult: + try: + updated_image_names: list[str] = [] + for image_name in image_names: + try: + ApiDependencies.invoker.services.images.update(image_name, changes=ImageRecordChanges(starred=False)) + updated_image_names.append(image_name) + except Exception: + pass + return ImagesUpdatedFromListResult(updated_image_names=updated_image_names) + except Exception: + raise HTTPException(status_code=500, detail="Failed to unstar images") diff --git a/invokeai/app/api/routers/models.py b/invokeai/app/api/routers/models.py index 2f59f1dd0f..b6c1edbbe1 100644 --- a/invokeai/app/api/routers/models.py +++ b/invokeai/app/api/routers/models.py @@ -104,8 +104,12 @@ async def update_model( ): # model manager moved model path during rename - don't overwrite it info.path = new_info.get("path") + # replace empty string values with None/null to avoid phenomenon of vae: '' + info_dict = info.dict() + info_dict = {x: info_dict[x] if info_dict[x] else None for x in info_dict.keys()} + ApiDependencies.invoker.services.model_manager.update_model( - model_name=model_name, base_model=base_model, model_type=model_type, model_attributes=info.dict() + model_name=model_name, base_model=base_model, model_type=model_type, model_attributes=info_dict ) model_raw = ApiDependencies.invoker.services.model_manager.list_model( diff --git a/invokeai/app/api/routers/sessions.py b/invokeai/app/api/routers/sessions.py index e4ba2a353e..d5624048e8 100644 --- a/invokeai/app/api/routers/sessions.py +++ b/invokeai/app/api/routers/sessions.py @@ -1,12 +1,13 @@ # Copyright (c) 2022 Kyle Schouviller (https://github.com/kyle0654) -from typing import Annotated, List, Optional, Union +from typing import Annotated, Optional, Union from fastapi import Body, HTTPException, Path, Query, Response from fastapi.routing import APIRouter from pydantic.fields import Field -from ...invocations import * +# Importing * is bad karma but needed here for node detection +from ...invocations import * # noqa: F401 F403 from ...invocations.baseinvocation import BaseInvocation from ...services.graph import ( Edge, diff --git a/invokeai/app/api_app.py b/invokeai/app/api_app.py index 6b875d37ce..0a31116878 100644 --- a/invokeai/app/api_app.py +++ b/invokeai/app/api_app.py @@ -1,6 +1,5 @@ # Copyright (c) 2022-2023 Kyle Schouviller (https://github.com/kyle0654) and the InvokeAI Team import asyncio -import sys from inspect import signature import logging @@ -17,35 +16,30 @@ from fastapi_events.middleware import EventHandlerASGIMiddleware from pathlib import Path from pydantic.schema import schema -# This should come early so that modules can log their initialization properly from .services.config import InvokeAIAppConfig from ..backend.util.logging import InvokeAILogger -app_config = InvokeAIAppConfig.get_config() -app_config.parse_args() -logger = InvokeAILogger.getLogger(config=app_config) from invokeai.version.invokeai_version import __version__ -# we call this early so that the message appears before -# other invokeai initialization messages -if app_config.version: - print(f"InvokeAI version {__version__}") - sys.exit(0) - import invokeai.frontend.web as web_dir import mimetypes from .api.dependencies import ApiDependencies from .api.routers import sessions, models, images, boards, board_images, app_info from .api.sockets import SocketIO -from .invocations.baseinvocation import BaseInvocation - +from .invocations.baseinvocation import BaseInvocation, _InputField, _OutputField, UIConfigBase import torch -import invokeai.backend.util.hotfixes +import invokeai.backend.util.hotfixes # noqa: F401 (monkeypatching on import) if torch.backends.mps.is_available(): - import invokeai.backend.util.mps_fixes + import invokeai.backend.util.mps_fixes # noqa: F401 (monkeypatching on import) + + +app_config = InvokeAIAppConfig.get_config() +app_config.parse_args() +logger = InvokeAILogger.getLogger(config=app_config) + # fix for windows mimetypes registry entries being borked # see https://github.com/invoke-ai/InvokeAI/discussions/3684#discussioncomment-6391352 @@ -134,6 +128,11 @@ def custom_openapi(): # This could break in some cases, figure out a better way to do it output_type_titles[schema_key] = output_schema["title"] + # Add Node Editor UI helper schemas + ui_config_schemas = schema([UIConfigBase, _InputField, _OutputField], ref_prefix="#/components/schemas/") + for schema_key, output_schema in ui_config_schemas["definitions"].items(): + openapi_schema["components"]["schemas"][schema_key] = output_schema + # Add a reference to the output type to additionalProperties of the invoker schema for invoker in all_invocations: invoker_name = invoker.__name__ @@ -225,13 +224,16 @@ def invoke_api(): # replace uvicorn's loggers with InvokeAI's for consistent appearance for logname in ["uvicorn.access", "uvicorn"]: - l = logging.getLogger(logname) - l.handlers.clear() + log = logging.getLogger(logname) + log.handlers.clear() for ch in logger.handlers: - l.addHandler(ch) + log.addHandler(ch) loop.run_until_complete(server.serve()) if __name__ == "__main__": - invoke_api() + if app_config.version: + print(f"InvokeAI version {__version__}") + else: + invoke_api() diff --git a/invokeai/app/cli/completer.py b/invokeai/app/cli/completer.py index fd10034dd7..086d8713d7 100644 --- a/invokeai/app/cli/completer.py +++ b/invokeai/app/cli/completer.py @@ -145,10 +145,10 @@ def set_autocompleter(services: InvocationServices) -> Completer: completer = Completer(services.model_manager) readline.set_completer(completer.complete) - # pyreadline3 does not have a set_auto_history() method try: readline.set_auto_history(True) - except: + except AttributeError: + # pyreadline3 does not have a set_auto_history() method pass readline.set_pre_input_hook(completer._pre_input_hook) readline.set_completer_delims(" ") diff --git a/invokeai/app/cli_app.py b/invokeai/app/cli_app.py index bad95bb559..dfde3d1f58 100644 --- a/invokeai/app/cli_app.py +++ b/invokeai/app/cli_app.py @@ -13,16 +13,8 @@ from pydantic.fields import Field # This should come early so that the logger can pick up its configuration options from .services.config import InvokeAIAppConfig from invokeai.backend.util.logging import InvokeAILogger - -config = InvokeAIAppConfig.get_config() -config.parse_args() -logger = InvokeAILogger().getLogger(config=config) from invokeai.version.invokeai_version import __version__ -# we call this early so that the message appears before other invokeai initialization messages -if config.version: - print(f"InvokeAI version {__version__}") - sys.exit(0) from invokeai.app.services.board_image_record_storage import ( SqliteBoardImageRecordStorage, @@ -37,6 +29,7 @@ from invokeai.app.services.image_record_storage import SqliteImageRecordStorage from invokeai.app.services.images import ImageService, ImageServiceDependencies from invokeai.app.services.resource_name import SimpleNameService from invokeai.app.services.urls import LocalUrlService +from invokeai.app.services.invocation_stats import InvocationStatsService from .services.default_graphs import default_text_to_image_graph_id, create_system_graphs from .services.latent_storage import DiskLatentsStorage, ForwardCacheLatentsStorage @@ -61,10 +54,15 @@ from .services.processor import DefaultInvocationProcessor from .services.sqlite import SqliteItemStorage import torch -import invokeai.backend.util.hotfixes +import invokeai.backend.util.hotfixes # noqa: F401 (monkeypatching on import) if torch.backends.mps.is_available(): - import invokeai.backend.util.mps_fixes + import invokeai.backend.util.mps_fixes # noqa: F401 (monkeypatching on import) + + +config = InvokeAIAppConfig.get_config() +config.parse_args() +logger = InvokeAILogger().getLogger(config=config) class CliCommand(BaseModel): @@ -311,6 +309,7 @@ def invoke_cli(): graph_library=SqliteItemStorage[LibraryGraph](filename=db_location, table_name="graphs"), graph_execution_manager=graph_execution_manager, processor=DefaultInvocationProcessor(), + performance_statistics=InvocationStatsService(graph_execution_manager), logger=logger, configuration=config, ) @@ -480,4 +479,7 @@ def invoke_cli(): if __name__ == "__main__": - invoke_cli() + if config.version: + print(f"InvokeAI version {__version__}") + else: + invoke_cli() diff --git a/invokeai/app/invocations/baseinvocation.py b/invokeai/app/invocations/baseinvocation.py index 758ab2e787..6094c868d9 100644 --- a/invokeai/app/invocations/baseinvocation.py +++ b/invokeai/app/invocations/baseinvocation.py @@ -3,15 +3,366 @@ from __future__ import annotations from abc import ABC, abstractmethod +from enum import Enum from inspect import signature -from typing import TYPE_CHECKING, Dict, List, Literal, TypedDict, get_args, get_type_hints +from typing import ( + TYPE_CHECKING, + AbstractSet, + Any, + Callable, + ClassVar, + Mapping, + Optional, + Type, + TypeVar, + Union, + get_args, + get_type_hints, +) -from pydantic import BaseConfig, BaseModel, Field +from pydantic import BaseModel, Field +from pydantic.fields import Undefined +from pydantic.typing import NoArgAnyCallable if TYPE_CHECKING: from ..services.invocation_services import InvocationServices +class FieldDescriptions: + denoising_start = "When to start denoising, expressed a percentage of total steps" + denoising_end = "When to stop denoising, expressed a percentage of total steps" + cfg_scale = "Classifier-Free Guidance scale" + scheduler = "Scheduler to use during inference" + positive_cond = "Positive conditioning tensor" + negative_cond = "Negative conditioning tensor" + noise = "Noise tensor" + clip = "CLIP (tokenizer, text encoder, LoRAs) and skipped layer count" + unet = "UNet (scheduler, LoRAs)" + vae = "VAE" + cond = "Conditioning tensor" + controlnet_model = "ControlNet model to load" + vae_model = "VAE model to load" + lora_model = "LoRA model to load" + main_model = "Main model (UNet, VAE, CLIP) to load" + sdxl_main_model = "SDXL Main model (UNet, VAE, CLIP1, CLIP2) to load" + sdxl_refiner_model = "SDXL Refiner Main Modde (UNet, VAE, CLIP2) to load" + onnx_main_model = "ONNX Main model (UNet, VAE, CLIP) to load" + lora_weight = "The weight at which the LoRA is applied to each model" + compel_prompt = "Prompt to be parsed by Compel to create a conditioning tensor" + raw_prompt = "Raw prompt text (no parsing)" + sdxl_aesthetic = "The aesthetic score to apply to the conditioning tensor" + skipped_layers = "Number of layers to skip in text encoder" + seed = "Seed for random number generation" + steps = "Number of steps to run" + width = "Width of output (px)" + height = "Height of output (px)" + control = "ControlNet(s) to apply" + denoised_latents = "Denoised latents tensor" + latents = "Latents tensor" + strength = "Strength of denoising (proportional to steps)" + core_metadata = "Optional core metadata to be written to image" + interp_mode = "Interpolation mode" + torch_antialias = "Whether or not to apply antialiasing (bilinear or bicubic only)" + fp32 = "Whether or not to use full float32 precision" + precision = "Precision to use" + tiled = "Processing using overlapping tiles (reduce memory consumption)" + detect_res = "Pixel resolution for detection" + image_res = "Pixel resolution for output image" + safe_mode = "Whether or not to use safe mode" + scribble_mode = "Whether or not to use scribble mode" + scale_factor = "The factor by which to scale" + num_1 = "The first number" + num_2 = "The second number" + mask = "The mask to use for the operation" + + +class Input(str, Enum): + """ + The type of input a field accepts. + - `Input.Direct`: The field must have its value provided directly, when the invocation and field \ + are instantiated. + - `Input.Connection`: The field must have its value provided by a connection. + - `Input.Any`: The field may have its value provided either directly or by a connection. + """ + + Connection = "connection" + Direct = "direct" + Any = "any" + + +class UIType(str, Enum): + """ + Type hints for the UI. + If a field should be provided a data type that does not exactly match the python type of the field, \ + use this to provide the type that should be used instead. See the node development docs for detail \ + on adding a new field type, which involves client-side changes. + """ + + # region Primitives + Integer = "integer" + Float = "float" + Boolean = "boolean" + String = "string" + Array = "array" + Image = "ImageField" + Latents = "LatentsField" + Conditioning = "ConditioningField" + Control = "ControlField" + Color = "ColorField" + ImageCollection = "ImageCollection" + ConditioningCollection = "ConditioningCollection" + ColorCollection = "ColorCollection" + LatentsCollection = "LatentsCollection" + IntegerCollection = "IntegerCollection" + FloatCollection = "FloatCollection" + StringCollection = "StringCollection" + BooleanCollection = "BooleanCollection" + # endregion + + # region Models + MainModel = "MainModelField" + SDXLMainModel = "SDXLMainModelField" + SDXLRefinerModel = "SDXLRefinerModelField" + ONNXModel = "ONNXModelField" + VaeModel = "VaeModelField" + LoRAModel = "LoRAModelField" + ControlNetModel = "ControlNetModelField" + UNet = "UNetField" + Vae = "VaeField" + CLIP = "ClipField" + # endregion + + # region Iterate/Collect + Collection = "Collection" + CollectionItem = "CollectionItem" + # endregion + + # region Misc + FilePath = "FilePath" + Enum = "enum" + # endregion + + +class UIComponent(str, Enum): + """ + The type of UI component to use for a field, used to override the default components, which are \ + inferred from the field type. + """ + + None_ = "none" + Textarea = "textarea" + Slider = "slider" + + +class _InputField(BaseModel): + """ + *DO NOT USE* + This helper class is used to tell the client about our custom field attributes via OpenAPI + schema generation, and Typescript type generation from that schema. It serves no functional + purpose in the backend. + """ + + input: Input + ui_hidden: bool + ui_type: Optional[UIType] + ui_component: Optional[UIComponent] + + +class _OutputField(BaseModel): + """ + *DO NOT USE* + This helper class is used to tell the client about our custom field attributes via OpenAPI + schema generation, and Typescript type generation from that schema. It serves no functional + purpose in the backend. + """ + + ui_hidden: bool + ui_type: Optional[UIType] + + +def InputField( + *args: Any, + default: Any = Undefined, + default_factory: Optional[NoArgAnyCallable] = None, + alias: Optional[str] = None, + title: Optional[str] = None, + description: Optional[str] = None, + exclude: Optional[Union[AbstractSet[Union[int, str]], Mapping[Union[int, str], Any], Any]] = None, + include: Optional[Union[AbstractSet[Union[int, str]], Mapping[Union[int, str], Any], Any]] = None, + const: Optional[bool] = None, + gt: Optional[float] = None, + ge: Optional[float] = None, + lt: Optional[float] = None, + le: Optional[float] = None, + multiple_of: Optional[float] = None, + allow_inf_nan: Optional[bool] = None, + max_digits: Optional[int] = None, + decimal_places: Optional[int] = None, + min_items: Optional[int] = None, + max_items: Optional[int] = None, + unique_items: Optional[bool] = None, + min_length: Optional[int] = None, + max_length: Optional[int] = None, + allow_mutation: bool = True, + regex: Optional[str] = None, + discriminator: Optional[str] = None, + repr: bool = True, + input: Input = Input.Any, + ui_type: Optional[UIType] = None, + ui_component: Optional[UIComponent] = None, + ui_hidden: bool = False, + **kwargs: Any, +) -> Any: + """ + Creates an input field for an invocation. + + This is a wrapper for Pydantic's [Field](https://docs.pydantic.dev/1.10/usage/schema/#field-customization) \ + that adds a few extra parameters to support graph execution and the node editor UI. + + :param Input input: [Input.Any] The kind of input this field requires. \ + `Input.Direct` means a value must be provided on instantiation. \ + `Input.Connection` means the value must be provided by a connection. \ + `Input.Any` means either will do. + + :param UIType ui_type: [None] Optionally provides an extra type hint for the UI. \ + In some situations, the field's type is not enough to infer the correct UI type. \ + For example, model selection fields should render a dropdown UI component to select a model. \ + Internally, there is no difference between SD-1, SD-2 and SDXL model fields, they all use \ + `MainModelField`. So to ensure the base-model-specific UI is rendered, you can use \ + `UIType.SDXLMainModelField` to indicate that the field is an SDXL main model field. + + :param UIComponent ui_component: [None] Optionally specifies a specific component to use in the UI. \ + The UI will always render a suitable component, but sometimes you want something different than the default. \ + For example, a `string` field will default to a single-line input, but you may want a multi-line textarea instead. \ + For this case, you could provide `UIComponent.Textarea`. + + : param bool ui_hidden: [False] Specifies whether or not this field should be hidden in the UI. + """ + return Field( + *args, + default=default, + default_factory=default_factory, + alias=alias, + title=title, + description=description, + exclude=exclude, + include=include, + const=const, + gt=gt, + ge=ge, + lt=lt, + le=le, + multiple_of=multiple_of, + allow_inf_nan=allow_inf_nan, + max_digits=max_digits, + decimal_places=decimal_places, + min_items=min_items, + max_items=max_items, + unique_items=unique_items, + min_length=min_length, + max_length=max_length, + allow_mutation=allow_mutation, + regex=regex, + discriminator=discriminator, + repr=repr, + input=input, + ui_type=ui_type, + ui_component=ui_component, + ui_hidden=ui_hidden, + **kwargs, + ) + + +def OutputField( + *args: Any, + default: Any = Undefined, + default_factory: Optional[NoArgAnyCallable] = None, + alias: Optional[str] = None, + title: Optional[str] = None, + description: Optional[str] = None, + exclude: Optional[Union[AbstractSet[Union[int, str]], Mapping[Union[int, str], Any], Any]] = None, + include: Optional[Union[AbstractSet[Union[int, str]], Mapping[Union[int, str], Any], Any]] = None, + const: Optional[bool] = None, + gt: Optional[float] = None, + ge: Optional[float] = None, + lt: Optional[float] = None, + le: Optional[float] = None, + multiple_of: Optional[float] = None, + allow_inf_nan: Optional[bool] = None, + max_digits: Optional[int] = None, + decimal_places: Optional[int] = None, + min_items: Optional[int] = None, + max_items: Optional[int] = None, + unique_items: Optional[bool] = None, + min_length: Optional[int] = None, + max_length: Optional[int] = None, + allow_mutation: bool = True, + regex: Optional[str] = None, + discriminator: Optional[str] = None, + repr: bool = True, + ui_type: Optional[UIType] = None, + ui_hidden: bool = False, + **kwargs: Any, +) -> Any: + """ + Creates an output field for an invocation output. + + This is a wrapper for Pydantic's [Field](https://docs.pydantic.dev/1.10/usage/schema/#field-customization) \ + that adds a few extra parameters to support graph execution and the node editor UI. + + :param UIType ui_type: [None] Optionally provides an extra type hint for the UI. \ + In some situations, the field's type is not enough to infer the correct UI type. \ + For example, model selection fields should render a dropdown UI component to select a model. \ + Internally, there is no difference between SD-1, SD-2 and SDXL model fields, they all use \ + `MainModelField`. So to ensure the base-model-specific UI is rendered, you can use \ + `UIType.SDXLMainModelField` to indicate that the field is an SDXL main model field. + + : param bool ui_hidden: [False] Specifies whether or not this field should be hidden in the UI. \ + """ + return Field( + *args, + default=default, + default_factory=default_factory, + alias=alias, + title=title, + description=description, + exclude=exclude, + include=include, + const=const, + gt=gt, + ge=ge, + lt=lt, + le=le, + multiple_of=multiple_of, + allow_inf_nan=allow_inf_nan, + max_digits=max_digits, + decimal_places=decimal_places, + min_items=min_items, + max_items=max_items, + unique_items=unique_items, + min_length=min_length, + max_length=max_length, + allow_mutation=allow_mutation, + regex=regex, + discriminator=discriminator, + repr=repr, + ui_type=ui_type, + ui_hidden=ui_hidden, + **kwargs, + ) + + +class UIConfigBase(BaseModel): + """ + Provides additional node configuration to the UI. + This is used internally by the @tags and @title decorator logic. You probably want to use those + decorators, though you may add this class to a node definition to specify the title and tags. + """ + + tags: Optional[list[str]] = Field(default_factory=None, description="The tags to display in the UI") + title: Optional[str] = Field(default=None, description="The display name of the node") + + class InvocationContext: services: InvocationServices graph_execution_state_id: str @@ -39,6 +390,20 @@ class BaseInvocationOutput(BaseModel): return tuple(subclasses) +class RequiredConnectionException(Exception): + """Raised when an field which requires a connection did not receive a value.""" + + def __init__(self, node_id: str, field_name: str): + super().__init__(f"Node {node_id} missing connections for field {field_name}") + + +class MissingInputException(Exception): + """Raised when an field which requires some input, but did not receive a value.""" + + def __init__(self, node_id: str, field_name: str): + super().__init__(f"Node {node_id} missing value or connection for field {field_name}") + + class BaseInvocation(ABC, BaseModel): """A node to process inputs and produce outputs. May use dependency injection in __init__ to receive providers. @@ -76,70 +441,81 @@ class BaseInvocation(ABC, BaseModel): def get_output_type(cls): return signature(cls.invoke).return_annotation + class Config: + @staticmethod + def schema_extra(schema: dict[str, Any], model_class: Type[BaseModel]) -> None: + uiconfig = getattr(model_class, "UIConfig", None) + if uiconfig and hasattr(uiconfig, "title"): + schema["title"] = uiconfig.title + if uiconfig and hasattr(uiconfig, "tags"): + schema["tags"] = uiconfig.tags + @abstractmethod def invoke(self, context: InvocationContext) -> BaseInvocationOutput: """Invoke with provided context and return outputs.""" pass - # fmt: off - id: str = Field(description="The id of this node. Must be unique among all nodes.") - is_intermediate: bool = Field(default=False, description="Whether or not this node is an intermediate node.") - # fmt: on + def __init__(self, **data): + # nodes may have required fields, that can accept input from connections + # on instantiation of the model, we need to exclude these from validation + restore = dict() + try: + field_names = list(self.__fields__.keys()) + for field_name in field_names: + # if the field is required and may get its value from a connection, exclude it from validation + field = self.__fields__[field_name] + _input = field.field_info.extra.get("input", None) + if _input in [Input.Connection, Input.Any] and field.required: + if field_name not in data: + restore[field_name] = self.__fields__.pop(field_name) + # instantiate the node, which will validate the data + super().__init__(**data) + finally: + # restore the removed fields + for field_name, field in restore.items(): + self.__fields__[field_name] = field + + def invoke_internal(self, context: InvocationContext) -> BaseInvocationOutput: + for field_name, field in self.__fields__.items(): + _input = field.field_info.extra.get("input", None) + if field.required and not hasattr(self, field_name): + if _input == Input.Connection: + raise RequiredConnectionException(self.__fields__["type"].default, field_name) + elif _input == Input.Any: + raise MissingInputException(self.__fields__["type"].default, field_name) + return self.invoke(context) + + id: str = InputField(description="The id of this node. Must be unique among all nodes.") + is_intermediate: bool = InputField( + default=False, description="Whether or not this node is an intermediate node.", input=Input.Direct + ) + UIConfig: ClassVar[Type[UIConfigBase]] -# TODO: figure out a better way to provide these hints -# TODO: when we can upgrade to python 3.11, we can use the`NotRequired` type instead of `total=False` -class UIConfig(TypedDict, total=False): - type_hints: Dict[ - str, - Literal[ - "integer", - "float", - "boolean", - "string", - "enum", - "image", - "latents", - "model", - "control", - "image_collection", - "vae_model", - "lora_model", - ], - ] - tags: List[str] - title: str +T = TypeVar("T", bound=BaseInvocation) -class CustomisedSchemaExtra(TypedDict): - ui: UIConfig +def title(title: str) -> Callable[[Type[T]], Type[T]]: + """Adds a title to the invocation. Use this to override the default title generation, which is based on the class name.""" + + def wrapper(cls: Type[T]) -> Type[T]: + uiconf_name = cls.__qualname__ + ".UIConfig" + if not hasattr(cls, "UIConfig") or cls.UIConfig.__qualname__ != uiconf_name: + cls.UIConfig = type(uiconf_name, (UIConfigBase,), dict()) + cls.UIConfig.title = title + return cls + + return wrapper -class InvocationConfig(BaseConfig): - """Customizes pydantic's BaseModel.Config class for use by Invocations. +def tags(*tags: str) -> Callable[[Type[T]], Type[T]]: + """Adds tags to the invocation. Use this to improve the streamline finding the invocation in the UI.""" - Provide `schema_extra` a `ui` dict to add hints for generated UIs. + def wrapper(cls: Type[T]) -> Type[T]: + uiconf_name = cls.__qualname__ + ".UIConfig" + if not hasattr(cls, "UIConfig") or cls.UIConfig.__qualname__ != uiconf_name: + cls.UIConfig = type(uiconf_name, (UIConfigBase,), dict()) + cls.UIConfig.tags = list(tags) + return cls - `tags` - - A list of strings, used to categorise invocations. - - `type_hints` - - A dict of field types which override the types in the invocation definition. - - Each key should be the name of one of the invocation's fields. - - Each value should be one of the valid types: - - `integer`, `float`, `boolean`, `string`, `enum`, `image`, `latents`, `model` - - ```python - class Config(InvocationConfig): - schema_extra = { - "ui": { - "tags": ["stable-diffusion", "image"], - "type_hints": { - "initial_image": "image", - }, - }, - } - ``` - """ - - schema_extra: CustomisedSchemaExtra + return wrapper diff --git a/invokeai/app/invocations/collections.py b/invokeai/app/invocations/collections.py index 01c003da96..65bce2737e 100644 --- a/invokeai/app/invocations/collections.py +++ b/invokeai/app/invocations/collections.py @@ -3,58 +3,25 @@ from typing import Literal import numpy as np -from pydantic import Field, validator +from pydantic import validator -from invokeai.app.models.image import ImageField +from invokeai.app.invocations.primitives import IntegerCollectionOutput from invokeai.app.util.misc import SEED_MAX, get_random_seed -from .baseinvocation import BaseInvocation, BaseInvocationOutput, InvocationConfig, InvocationContext, UIConfig - - -class IntCollectionOutput(BaseInvocationOutput): - """A collection of integers""" - - type: Literal["int_collection"] = "int_collection" - - # Outputs - collection: list[int] = Field(default=[], description="The int collection") - - -class FloatCollectionOutput(BaseInvocationOutput): - """A collection of floats""" - - type: Literal["float_collection"] = "float_collection" - - # Outputs - collection: list[float] = Field(default=[], description="The float collection") - - -class ImageCollectionOutput(BaseInvocationOutput): - """A collection of images""" - - type: Literal["image_collection"] = "image_collection" - - # Outputs - collection: list[ImageField] = Field(default=[], description="The output images") - - class Config: - schema_extra = {"required": ["type", "collection"]} +from .baseinvocation import BaseInvocation, InputField, InvocationContext, tags, title +@title("Integer Range") +@tags("collection", "integer", "range") class RangeInvocation(BaseInvocation): """Creates a range of numbers from start to stop with step""" type: Literal["range"] = "range" # Inputs - start: int = Field(default=0, description="The start of the range") - stop: int = Field(default=10, description="The stop of the range") - step: int = Field(default=1, description="The step of the range") - - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Range", "tags": ["range", "integer", "collection"]}, - } + start: int = InputField(default=0, description="The start of the range") + stop: int = InputField(default=10, description="The stop of the range") + step: int = InputField(default=1, description="The step of the range") @validator("stop") def stop_gt_start(cls, v, values): @@ -62,76 +29,44 @@ class RangeInvocation(BaseInvocation): raise ValueError("stop must be greater than start") return v - def invoke(self, context: InvocationContext) -> IntCollectionOutput: - return IntCollectionOutput(collection=list(range(self.start, self.stop, self.step))) + def invoke(self, context: InvocationContext) -> IntegerCollectionOutput: + return IntegerCollectionOutput(collection=list(range(self.start, self.stop, self.step))) +@title("Integer Range of Size") +@tags("range", "integer", "size", "collection") class RangeOfSizeInvocation(BaseInvocation): """Creates a range from start to start + size with step""" type: Literal["range_of_size"] = "range_of_size" # Inputs - start: int = Field(default=0, description="The start of the range") - size: int = Field(default=1, description="The number of values") - step: int = Field(default=1, description="The step of the range") + start: int = InputField(default=0, description="The start of the range") + size: int = InputField(default=1, description="The number of values") + step: int = InputField(default=1, description="The step of the range") - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Sized Range", "tags": ["range", "integer", "size", "collection"]}, - } - - def invoke(self, context: InvocationContext) -> IntCollectionOutput: - return IntCollectionOutput(collection=list(range(self.start, self.start + self.size, self.step))) + def invoke(self, context: InvocationContext) -> IntegerCollectionOutput: + return IntegerCollectionOutput(collection=list(range(self.start, self.start + self.size, self.step))) +@title("Random Range") +@tags("range", "integer", "random", "collection") class RandomRangeInvocation(BaseInvocation): """Creates a collection of random numbers""" type: Literal["random_range"] = "random_range" # Inputs - low: int = Field(default=0, description="The inclusive low value") - high: int = Field(default=np.iinfo(np.int32).max, description="The exclusive high value") - size: int = Field(default=1, description="The number of values to generate") - seed: int = Field( + low: int = InputField(default=0, description="The inclusive low value") + high: int = InputField(default=np.iinfo(np.int32).max, description="The exclusive high value") + size: int = InputField(default=1, description="The number of values to generate") + seed: int = InputField( ge=0, le=SEED_MAX, description="The seed for the RNG (omit for random)", default_factory=get_random_seed, ) - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Random Range", "tags": ["range", "integer", "random", "collection"]}, - } - - def invoke(self, context: InvocationContext) -> IntCollectionOutput: + def invoke(self, context: InvocationContext) -> IntegerCollectionOutput: rng = np.random.default_rng(self.seed) - return IntCollectionOutput(collection=list(rng.integers(low=self.low, high=self.high, size=self.size))) - - -class ImageCollectionInvocation(BaseInvocation): - """Load a collection of images and provide it as output.""" - - # fmt: off - type: Literal["image_collection"] = "image_collection" - - # Inputs - images: list[ImageField] = Field( - default=[], description="The image collection to load" - ) - # fmt: on - - def invoke(self, context: InvocationContext) -> ImageCollectionOutput: - return ImageCollectionOutput(collection=self.images) - - class Config(InvocationConfig): - schema_extra = { - "ui": { - "type_hints": { - "title": "Image Collection", - "images": "image_collection", - } - }, - } + return IntegerCollectionOutput(collection=list(rng.integers(low=self.low, high=self.high, size=self.size))) diff --git a/invokeai/app/invocations/compel.py b/invokeai/app/invocations/compel.py index 279640439b..7c5ddf815d 100644 --- a/invokeai/app/invocations/compel.py +++ b/invokeai/app/invocations/compel.py @@ -1,56 +1,40 @@ -from typing import Literal, Optional, Union, List, Annotated -from pydantic import BaseModel, Field import re - -from .baseinvocation import BaseInvocation, BaseInvocationOutput, InvocationContext, InvocationConfig -from .model import ClipField - -from ...backend.util.devices import torch_dtype -from ...backend.stable_diffusion.diffusion import InvokeAIDiffuserComponent -from ...backend.model_management import BaseModelType, ModelType, SubModelType, ModelPatcher +from dataclasses import dataclass +from typing import List, Literal, Union import torch from compel import Compel, ReturnedEmbeddingsType from compel.prompt_parser import Blend, Conjunction, CrossAttentionControlSubstitute, FlattenedPrompt, Fragment -from ...backend.util.devices import torch_dtype -from ...backend.model_management import ModelType -from ...backend.model_management.models import ModelNotFoundException +from invokeai.app.invocations.primitives import ConditioningField, ConditioningOutput + +from invokeai.backend.stable_diffusion.diffusion.shared_invokeai_diffusion import ( + BasicConditioningInfo, + SDXLConditioningInfo, +) + +from ...backend.model_management.models import ModelType from ...backend.model_management.lora import ModelPatcher +from ...backend.model_management.models import ModelNotFoundException from ...backend.stable_diffusion.diffusion import InvokeAIDiffuserComponent -from .baseinvocation import BaseInvocation, BaseInvocationOutput, InvocationConfig, InvocationContext +from ...backend.util.devices import torch_dtype +from .baseinvocation import ( + BaseInvocation, + BaseInvocationOutput, + FieldDescriptions, + Input, + InputField, + InvocationContext, + OutputField, + UIComponent, + tags, + title, +) from .model import ClipField -from dataclasses import dataclass - - -class ConditioningField(BaseModel): - conditioning_name: Optional[str] = Field(default=None, description="The name of conditioning data") - - class Config: - schema_extra = {"required": ["conditioning_name"]} - - -@dataclass -class BasicConditioningInfo: - # type: Literal["basic_conditioning"] = "basic_conditioning" - embeds: torch.Tensor - extra_conditioning: Optional[InvokeAIDiffuserComponent.ExtraConditioningInfo] - # weight: float - # mode: ConditioningAlgo - - -@dataclass -class SDXLConditioningInfo(BasicConditioningInfo): - # type: Literal["sdxl_conditioning"] = "sdxl_conditioning" - pooled_embeds: torch.Tensor - add_time_ids: torch.Tensor - - -ConditioningInfoType = Annotated[Union[BasicConditioningInfo, SDXLConditioningInfo], Field(discriminator="type")] @dataclass class ConditioningFieldData: - conditionings: List[Union[BasicConditioningInfo, SDXLConditioningInfo]] + conditionings: List[BasicConditioningInfo] # unconditioned: Optional[torch.Tensor] @@ -60,32 +44,26 @@ class ConditioningFieldData: # PerpNeg = "perp_neg" -class CompelOutput(BaseInvocationOutput): - """Compel parser output""" - - # fmt: off - type: Literal["compel_output"] = "compel_output" - - conditioning: ConditioningField = Field(default=None, description="Conditioning") - # fmt: on - - +@title("Compel Prompt") +@tags("prompt", "compel") class CompelInvocation(BaseInvocation): """Parse prompt using compel package to conditioning.""" type: Literal["compel"] = "compel" - prompt: str = Field(default="", description="Prompt") - clip: ClipField = Field(None, description="Clip to use") - - # Schema customisation - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Prompt (Compel)", "tags": ["prompt", "compel"], "type_hints": {"model": "model"}}, - } + prompt: str = InputField( + default="", + description=FieldDescriptions.compel_prompt, + ui_component=UIComponent.Textarea, + ) + clip: ClipField = InputField( + title="CLIP", + description=FieldDescriptions.clip, + input=Input.Connection, + ) @torch.no_grad() - def invoke(self, context: InvocationContext) -> CompelOutput: + def invoke(self, context: InvocationContext) -> ConditioningOutput: tokenizer_info = context.services.model_manager.get_model( **self.clip.tokenizer.dict(), context=context, @@ -109,12 +87,15 @@ class CompelInvocation(BaseInvocation): name = trigger[1:-1] try: ti_list.append( - context.services.model_manager.get_model( - model_name=name, - base_model=self.clip.text_encoder.base_model, - model_type=ModelType.TextualInversion, - context=context, - ).context.model + ( + name, + context.services.model_manager.get_model( + model_name=name, + base_model=self.clip.text_encoder.base_model, + model_type=ModelType.TextualInversion, + context=context, + ).context.model, + ) ) except ModelNotFoundException: # print(e) @@ -164,7 +145,7 @@ class CompelInvocation(BaseInvocation): conditioning_name = f"{context.graph_execution_state_id}_{self.id}_conditioning" context.services.latents.save(conditioning_name, conditioning_data) - return CompelOutput( + return ConditioningOutput( conditioning=ConditioningField( conditioning_name=conditioning_name, ), @@ -172,7 +153,15 @@ class CompelInvocation(BaseInvocation): class SDXLPromptInvocationBase: - def run_clip_raw(self, context, clip_field, prompt, get_pooled): + def run_clip_compel( + self, + context: InvocationContext, + clip_field: ClipField, + prompt: str, + get_pooled: bool, + lora_prefix: str, + zero_on_empty: bool, + ): tokenizer_info = context.services.model_manager.get_model( **clip_field.tokenizer.dict(), context=context, @@ -182,79 +171,21 @@ class SDXLPromptInvocationBase: context=context, ) - def _lora_loader(): - for lora in clip_field.loras: - lora_info = context.services.model_manager.get_model(**lora.dict(exclude={"weight"}), context=context) - yield (lora_info.context.model, lora.weight) - del lora_info - return - - # loras = [(context.services.model_manager.get_model(**lora.dict(exclude={"weight"})).context.model, lora.weight) for lora in self.clip.loras] - - ti_list = [] - for trigger in re.findall(r"<[a-zA-Z0-9., _-]+>", prompt): - name = trigger[1:-1] - try: - ti_list.append( - context.services.model_manager.get_model( - model_name=name, - base_model=clip_field.text_encoder.base_model, - model_type=ModelType.TextualInversion, - context=context, - ).context.model - ) - except ModelNotFoundException: - # print(e) - # import traceback - # print(traceback.format_exc()) - print(f'Warn: trigger: "{trigger}" not found') - - with ModelPatcher.apply_lora_text_encoder( - text_encoder_info.context.model, _lora_loader() - ), ModelPatcher.apply_ti(tokenizer_info.context.model, text_encoder_info.context.model, ti_list) as ( - tokenizer, - ti_manager, - ), ModelPatcher.apply_clip_skip( - text_encoder_info.context.model, clip_field.skipped_layers - ), text_encoder_info as text_encoder: - text_inputs = tokenizer( - prompt, - padding="max_length", - max_length=tokenizer.model_max_length, - truncation=True, - return_tensors="pt", - ) - text_input_ids = text_inputs.input_ids - prompt_embeds = text_encoder( - text_input_ids.to(text_encoder.device), - output_hidden_states=True, + # return zero on empty + if prompt == "" and zero_on_empty: + cpu_text_encoder = text_encoder_info.context.model + c = torch.zeros( + (1, cpu_text_encoder.config.max_position_embeddings, cpu_text_encoder.config.hidden_size), + dtype=text_encoder_info.context.cache.precision, ) if get_pooled: - c_pooled = prompt_embeds[0] + c_pooled = torch.zeros( + (1, cpu_text_encoder.config.hidden_size), + dtype=c.dtype, + ) else: c_pooled = None - c = prompt_embeds.hidden_states[-2] - - del tokenizer - del text_encoder - del tokenizer_info - del text_encoder_info - - c = c.detach().to("cpu") - if c_pooled is not None: - c_pooled = c_pooled.detach().to("cpu") - - return c, c_pooled, None - - def run_clip_compel(self, context, clip_field, prompt, get_pooled): - tokenizer_info = context.services.model_manager.get_model( - **clip_field.tokenizer.dict(), - context=context, - ) - text_encoder_info = context.services.model_manager.get_model( - **clip_field.text_encoder.dict(), - context=context, - ) + return c, c_pooled, None def _lora_loader(): for lora in clip_field.loras: @@ -270,12 +201,15 @@ class SDXLPromptInvocationBase: name = trigger[1:-1] try: ti_list.append( - context.services.model_manager.get_model( - model_name=name, - base_model=clip_field.text_encoder.base_model, - model_type=ModelType.TextualInversion, - context=context, - ).context.model + ( + name, + context.services.model_manager.get_model( + model_name=name, + base_model=clip_field.text_encoder.base_model, + model_type=ModelType.TextualInversion, + context=context, + ).context.model, + ) ) except ModelNotFoundException: # print(e) @@ -283,8 +217,8 @@ class SDXLPromptInvocationBase: # print(traceback.format_exc()) print(f'Warn: trigger: "{trigger}" not found') - with ModelPatcher.apply_lora_text_encoder( - text_encoder_info.context.model, _lora_loader() + with ModelPatcher.apply_lora( + text_encoder_info.context.model, _lora_loader(), lora_prefix ), ModelPatcher.apply_ti(tokenizer_info.context.model, text_encoder_info.context.model, ti_list) as ( tokenizer, ti_manager, @@ -331,35 +265,37 @@ class SDXLPromptInvocationBase: return c, c_pooled, ec +@title("SDXL Compel Prompt") +@tags("sdxl", "compel", "prompt") class SDXLCompelPromptInvocation(BaseInvocation, SDXLPromptInvocationBase): """Parse prompt using compel package to conditioning.""" type: Literal["sdxl_compel_prompt"] = "sdxl_compel_prompt" - prompt: str = Field(default="", description="Prompt") - style: str = Field(default="", description="Style prompt") - original_width: int = Field(1024, description="") - original_height: int = Field(1024, description="") - crop_top: int = Field(0, description="") - crop_left: int = Field(0, description="") - target_width: int = Field(1024, description="") - target_height: int = Field(1024, description="") - clip: ClipField = Field(None, description="Clip to use") - clip2: ClipField = Field(None, description="Clip2 to use") - - # Schema customisation - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "SDXL Prompt (Compel)", "tags": ["prompt", "compel"], "type_hints": {"model": "model"}}, - } + prompt: str = InputField(default="", description=FieldDescriptions.compel_prompt, ui_component=UIComponent.Textarea) + style: str = InputField(default="", description=FieldDescriptions.compel_prompt, ui_component=UIComponent.Textarea) + original_width: int = InputField(default=1024, description="") + original_height: int = InputField(default=1024, description="") + crop_top: int = InputField(default=0, description="") + crop_left: int = InputField(default=0, description="") + target_width: int = InputField(default=1024, description="") + target_height: int = InputField(default=1024, description="") + clip: ClipField = InputField(description=FieldDescriptions.clip, input=Input.Connection) + clip2: ClipField = InputField(description=FieldDescriptions.clip, input=Input.Connection) @torch.no_grad() - def invoke(self, context: InvocationContext) -> CompelOutput: - c1, c1_pooled, ec1 = self.run_clip_compel(context, self.clip, self.prompt, False) + def invoke(self, context: InvocationContext) -> ConditioningOutput: + c1, c1_pooled, ec1 = self.run_clip_compel( + context, self.clip, self.prompt, False, "lora_te1_", zero_on_empty=True + ) if self.style.strip() == "": - c2, c2_pooled, ec2 = self.run_clip_compel(context, self.clip2, self.prompt, True) + c2, c2_pooled, ec2 = self.run_clip_compel( + context, self.clip2, self.prompt, True, "lora_te2_", zero_on_empty=True + ) else: - c2, c2_pooled, ec2 = self.run_clip_compel(context, self.clip2, self.style, True) + c2, c2_pooled, ec2 = self.run_clip_compel( + context, self.clip2, self.style, True, "lora_te2_", zero_on_empty=True + ) original_size = (self.original_height, self.original_width) crop_coords = (self.crop_top, self.crop_left) @@ -381,39 +317,34 @@ class SDXLCompelPromptInvocation(BaseInvocation, SDXLPromptInvocationBase): conditioning_name = f"{context.graph_execution_state_id}_{self.id}_conditioning" context.services.latents.save(conditioning_name, conditioning_data) - return CompelOutput( + return ConditioningOutput( conditioning=ConditioningField( conditioning_name=conditioning_name, ), ) +@title("SDXL Refiner Compel Prompt") +@tags("sdxl", "compel", "prompt") class SDXLRefinerCompelPromptInvocation(BaseInvocation, SDXLPromptInvocationBase): """Parse prompt using compel package to conditioning.""" type: Literal["sdxl_refiner_compel_prompt"] = "sdxl_refiner_compel_prompt" - style: str = Field(default="", description="Style prompt") # TODO: ? - original_width: int = Field(1024, description="") - original_height: int = Field(1024, description="") - crop_top: int = Field(0, description="") - crop_left: int = Field(0, description="") - aesthetic_score: float = Field(6.0, description="") - clip2: ClipField = Field(None, description="Clip to use") - - # Schema customisation - class Config(InvocationConfig): - schema_extra = { - "ui": { - "title": "SDXL Refiner Prompt (Compel)", - "tags": ["prompt", "compel"], - "type_hints": {"model": "model"}, - }, - } + style: str = InputField( + default="", description=FieldDescriptions.compel_prompt, ui_component=UIComponent.Textarea + ) # TODO: ? + original_width: int = InputField(default=1024, description="") + original_height: int = InputField(default=1024, description="") + crop_top: int = InputField(default=0, description="") + crop_left: int = InputField(default=0, description="") + aesthetic_score: float = InputField(default=6.0, description=FieldDescriptions.sdxl_aesthetic) + clip2: ClipField = InputField(description=FieldDescriptions.clip, input=Input.Connection) @torch.no_grad() - def invoke(self, context: InvocationContext) -> CompelOutput: - c2, c2_pooled, ec2 = self.run_clip_compel(context, self.clip2, self.style, True) + def invoke(self, context: InvocationContext) -> ConditioningOutput: + # TODO: if there will appear lora for refiner - write proper prefix + c2, c2_pooled, ec2 = self.run_clip_compel(context, self.clip2, self.style, True, "", zero_on_empty=False) original_size = (self.original_height, self.original_width) crop_coords = (self.crop_top, self.crop_left) @@ -434,117 +365,7 @@ class SDXLRefinerCompelPromptInvocation(BaseInvocation, SDXLPromptInvocationBase conditioning_name = f"{context.graph_execution_state_id}_{self.id}_conditioning" context.services.latents.save(conditioning_name, conditioning_data) - return CompelOutput( - conditioning=ConditioningField( - conditioning_name=conditioning_name, - ), - ) - - -class SDXLRawPromptInvocation(BaseInvocation, SDXLPromptInvocationBase): - """Pass unmodified prompt to conditioning without compel processing.""" - - type: Literal["sdxl_raw_prompt"] = "sdxl_raw_prompt" - - prompt: str = Field(default="", description="Prompt") - style: str = Field(default="", description="Style prompt") - original_width: int = Field(1024, description="") - original_height: int = Field(1024, description="") - crop_top: int = Field(0, description="") - crop_left: int = Field(0, description="") - target_width: int = Field(1024, description="") - target_height: int = Field(1024, description="") - clip: ClipField = Field(None, description="Clip to use") - clip2: ClipField = Field(None, description="Clip2 to use") - - # Schema customisation - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "SDXL Prompt (Raw)", "tags": ["prompt", "compel"], "type_hints": {"model": "model"}}, - } - - @torch.no_grad() - def invoke(self, context: InvocationContext) -> CompelOutput: - c1, c1_pooled, ec1 = self.run_clip_raw(context, self.clip, self.prompt, False) - if self.style.strip() == "": - c2, c2_pooled, ec2 = self.run_clip_raw(context, self.clip2, self.prompt, True) - else: - c2, c2_pooled, ec2 = self.run_clip_raw(context, self.clip2, self.style, True) - - original_size = (self.original_height, self.original_width) - crop_coords = (self.crop_top, self.crop_left) - target_size = (self.target_height, self.target_width) - - add_time_ids = torch.tensor([original_size + crop_coords + target_size]) - - conditioning_data = ConditioningFieldData( - conditionings=[ - SDXLConditioningInfo( - embeds=torch.cat([c1, c2], dim=-1), - pooled_embeds=c2_pooled, - add_time_ids=add_time_ids, - extra_conditioning=ec1, - ) - ] - ) - - conditioning_name = f"{context.graph_execution_state_id}_{self.id}_conditioning" - context.services.latents.save(conditioning_name, conditioning_data) - - return CompelOutput( - conditioning=ConditioningField( - conditioning_name=conditioning_name, - ), - ) - - -class SDXLRefinerRawPromptInvocation(BaseInvocation, SDXLPromptInvocationBase): - """Parse prompt using compel package to conditioning.""" - - type: Literal["sdxl_refiner_raw_prompt"] = "sdxl_refiner_raw_prompt" - - style: str = Field(default="", description="Style prompt") # TODO: ? - original_width: int = Field(1024, description="") - original_height: int = Field(1024, description="") - crop_top: int = Field(0, description="") - crop_left: int = Field(0, description="") - aesthetic_score: float = Field(6.0, description="") - clip2: ClipField = Field(None, description="Clip to use") - - # Schema customisation - class Config(InvocationConfig): - schema_extra = { - "ui": { - "title": "SDXL Refiner Prompt (Raw)", - "tags": ["prompt", "compel"], - "type_hints": {"model": "model"}, - }, - } - - @torch.no_grad() - def invoke(self, context: InvocationContext) -> CompelOutput: - c2, c2_pooled, ec2 = self.run_clip_raw(context, self.clip2, self.style, True) - - original_size = (self.original_height, self.original_width) - crop_coords = (self.crop_top, self.crop_left) - - add_time_ids = torch.tensor([original_size + crop_coords + (self.aesthetic_score,)]) - - conditioning_data = ConditioningFieldData( - conditionings=[ - SDXLConditioningInfo( - embeds=c2, - pooled_embeds=c2_pooled, - add_time_ids=add_time_ids, - extra_conditioning=ec2, # or None - ) - ] - ) - - conditioning_name = f"{context.graph_execution_state_id}_{self.id}_conditioning" - context.services.latents.save(conditioning_name, conditioning_data) - - return CompelOutput( + return ConditioningOutput( conditioning=ConditioningField( conditioning_name=conditioning_name, ), @@ -555,21 +376,18 @@ class ClipSkipInvocationOutput(BaseInvocationOutput): """Clip skip node output""" type: Literal["clip_skip_output"] = "clip_skip_output" - clip: ClipField = Field(None, description="Clip with skipped layers") + clip: ClipField = OutputField(default=None, description=FieldDescriptions.clip, title="CLIP") +@title("CLIP Skip") +@tags("clipskip", "clip", "skip") class ClipSkipInvocation(BaseInvocation): """Skip layers in clip text_encoder model.""" type: Literal["clip_skip"] = "clip_skip" - clip: ClipField = Field(None, description="Clip to use") - skipped_layers: int = Field(0, description="Number of layers to skip in text_encoder") - - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "CLIP Skip", "tags": ["clip", "skip"]}, - } + clip: ClipField = InputField(description=FieldDescriptions.clip, input=Input.Connection, title="CLIP") + skipped_layers: int = InputField(default=0, description=FieldDescriptions.skipped_layers) def invoke(self, context: InvocationContext) -> ClipSkipInvocationOutput: self.clip.skipped_layers += self.skipped_layers diff --git a/invokeai/app/invocations/controlnet_image_processors.py b/invokeai/app/invocations/controlnet_image_processors.py index d2b2d44526..c594a84fb3 100644 --- a/invokeai/app/invocations/controlnet_image_processors.py +++ b/invokeai/app/invocations/controlnet_image_processors.py @@ -26,79 +26,31 @@ from controlnet_aux.util import HWC3, ade_palette from PIL import Image from pydantic import BaseModel, Field, validator -from ...backend.model_management import BaseModelType, ModelType -from ..models.image import ImageCategory, ImageField, ResourceOrigin -from .baseinvocation import BaseInvocation, BaseInvocationOutput, InvocationConfig, InvocationContext -from ..models.image import ImageOutput, PILInvocationConfig +from invokeai.app.invocations.primitives import ImageField, ImageOutput -CONTROLNET_DEFAULT_MODELS = [ - ########################################### - # lllyasviel sd v1.5, ControlNet v1.0 models - ############################################## - "lllyasviel/sd-controlnet-canny", - "lllyasviel/sd-controlnet-depth", - "lllyasviel/sd-controlnet-hed", - "lllyasviel/sd-controlnet-seg", - "lllyasviel/sd-controlnet-openpose", - "lllyasviel/sd-controlnet-scribble", - "lllyasviel/sd-controlnet-normal", - "lllyasviel/sd-controlnet-mlsd", - ############################################# - # lllyasviel sd v1.5, ControlNet v1.1 models - ############################################# - "lllyasviel/control_v11p_sd15_canny", - "lllyasviel/control_v11p_sd15_openpose", - "lllyasviel/control_v11p_sd15_seg", - # "lllyasviel/control_v11p_sd15_depth", # broken - "lllyasviel/control_v11f1p_sd15_depth", - "lllyasviel/control_v11p_sd15_normalbae", - "lllyasviel/control_v11p_sd15_scribble", - "lllyasviel/control_v11p_sd15_mlsd", - "lllyasviel/control_v11p_sd15_softedge", - "lllyasviel/control_v11p_sd15s2_lineart_anime", - "lllyasviel/control_v11p_sd15_lineart", - "lllyasviel/control_v11p_sd15_inpaint", - # "lllyasviel/control_v11u_sd15_tile", - # problem (temporary?) with huffingface "lllyasviel/control_v11u_sd15_tile", - # so for now replace "lllyasviel/control_v11f1e_sd15_tile", - "lllyasviel/control_v11e_sd15_shuffle", - "lllyasviel/control_v11e_sd15_ip2p", - "lllyasviel/control_v11f1e_sd15_tile", - ################################################# - # thibaud sd v2.1 models (ControlNet v1.0? or v1.1? - ################################################## - "thibaud/controlnet-sd21-openpose-diffusers", - "thibaud/controlnet-sd21-canny-diffusers", - "thibaud/controlnet-sd21-depth-diffusers", - "thibaud/controlnet-sd21-scribble-diffusers", - "thibaud/controlnet-sd21-hed-diffusers", - "thibaud/controlnet-sd21-zoedepth-diffusers", - "thibaud/controlnet-sd21-color-diffusers", - "thibaud/controlnet-sd21-openposev2-diffusers", - "thibaud/controlnet-sd21-lineart-diffusers", - "thibaud/controlnet-sd21-normalbae-diffusers", - "thibaud/controlnet-sd21-ade20k-diffusers", - ############################################## - # ControlNetMediaPipeface, ControlNet v1.1 - ############################################## - # ["CrucibleAI/ControlNetMediaPipeFace", "diffusion_sd15"], # SD 1.5 - # diffusion_sd15 needs to be passed to from_pretrained() as subfolder arg - # hacked t2l to split to model & subfolder if format is "model,subfolder" - "CrucibleAI/ControlNetMediaPipeFace,diffusion_sd15", # SD 1.5 - "CrucibleAI/ControlNetMediaPipeFace", # SD 2.1? -] -CONTROLNET_NAME_VALUES = Literal[tuple(CONTROLNET_DEFAULT_MODELS)] -CONTROLNET_MODE_VALUES = Literal[tuple(["balanced", "more_prompt", "more_control", "unbalanced"])] +from ...backend.model_management import BaseModelType +from ..models.image import ImageCategory, ResourceOrigin +from .baseinvocation import ( + BaseInvocation, + BaseInvocationOutput, + FieldDescriptions, + InputField, + Input, + InvocationContext, + OutputField, + UIType, + tags, + title, +) + + +CONTROLNET_MODE_VALUES = Literal["balanced", "more_prompt", "more_control", "unbalanced"] CONTROLNET_RESIZE_VALUES = Literal[ - tuple( - [ - "just_resize", - "crop_resize", - "fill_resize", - "just_resize_simple", - ] - ) + "just_resize", + "crop_resize", + "fill_resize", + "just_resize_simple", ] @@ -110,9 +62,8 @@ class ControlNetModelField(BaseModel): class ControlField(BaseModel): - image: ImageField = Field(default=None, description="The control image") - control_model: Optional[ControlNetModelField] = Field(default=None, description="The ControlNet model to use") - # control_weight: Optional[float] = Field(default=1, description="weight given to controlnet") + image: ImageField = Field(description="The control image") + control_model: ControlNetModelField = Field(description="The ControlNet model to use") control_weight: Union[float, List[float]] = Field(default=1, description="The weight given to the ControlNet") begin_step_percent: float = Field( default=0, ge=0, le=1, description="When the ControlNet is first applied (% of total steps)" @@ -135,60 +86,39 @@ class ControlField(BaseModel): raise ValueError("Control weights must be within -1 to 2 range") return v - class Config: - schema_extra = { - "required": ["image", "control_model", "control_weight", "begin_step_percent", "end_step_percent"], - "ui": { - "type_hints": { - "control_weight": "float", - "control_model": "controlnet_model", - # "control_weight": "number", - } - }, - } - class ControlOutput(BaseInvocationOutput): """node output for ControlNet info""" - # fmt: off type: Literal["control_output"] = "control_output" - control: ControlField = Field(default=None, description="The control info") - # fmt: on + + # Outputs + control: ControlField = OutputField(description=FieldDescriptions.control) +@title("ControlNet") +@tags("controlnet") class ControlNetInvocation(BaseInvocation): """Collects ControlNet info to pass to other nodes""" - # fmt: off type: Literal["controlnet"] = "controlnet" - # Inputs - image: ImageField = Field(default=None, description="The control image") - control_model: ControlNetModelField = Field(default="lllyasviel/sd-controlnet-canny", - description="control model used") - control_weight: Union[float, List[float]] = Field(default=1.0, description="The weight given to the ControlNet") - begin_step_percent: float = Field(default=0, ge=-1, le=2, - description="When the ControlNet is first applied (% of total steps)") - end_step_percent: float = Field(default=1, ge=0, le=1, - description="When the ControlNet is last applied (% of total steps)") - control_mode: CONTROLNET_MODE_VALUES = Field(default="balanced", description="The control mode used") - resize_mode: CONTROLNET_RESIZE_VALUES = Field(default="just_resize", description="The resize mode used") - # fmt: on - class Config(InvocationConfig): - schema_extra = { - "ui": { - "title": "ControlNet", - "tags": ["controlnet", "latents"], - "type_hints": { - "model": "model", - "control": "control", - # "cfg_scale": "float", - "cfg_scale": "number", - "control_weight": "float", - }, - }, - } + # Inputs + image: ImageField = InputField(description="The control image") + control_model: ControlNetModelField = InputField( + default="lllyasviel/sd-controlnet-canny", description=FieldDescriptions.controlnet_model, input=Input.Direct + ) + control_weight: Union[float, List[float]] = InputField( + default=1.0, description="The weight given to the ControlNet", ui_type=UIType.Float + ) + begin_step_percent: float = InputField( + default=0, ge=-1, le=2, description="When the ControlNet is first applied (% of total steps)" + ) + end_step_percent: float = InputField( + default=1, ge=0, le=1, description="When the ControlNet is last applied (% of total steps)" + ) + control_mode: CONTROLNET_MODE_VALUES = InputField(default="balanced", description="The control mode used") + resize_mode: CONTROLNET_RESIZE_VALUES = InputField(default="just_resize", description="The resize mode used") def invoke(self, context: InvocationContext) -> ControlOutput: return ControlOutput( @@ -204,19 +134,13 @@ class ControlNetInvocation(BaseInvocation): ) -class ImageProcessorInvocation(BaseInvocation, PILInvocationConfig): +class ImageProcessorInvocation(BaseInvocation): """Base class for invocations that preprocess images for ControlNet""" - # fmt: off type: Literal["image_processor"] = "image_processor" - # Inputs - image: ImageField = Field(default=None, description="The image to process") - # fmt: on - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Image Processor", "tags": ["image", "processor"]}, - } + # Inputs + image: ImageField = InputField(description="The image to process") def run_processor(self, image): # superclass just passes through image without processing @@ -255,20 +179,20 @@ class ImageProcessorInvocation(BaseInvocation, PILInvocationConfig): ) -class CannyImageProcessorInvocation(ImageProcessorInvocation, PILInvocationConfig): +@title("Canny Processor") +@tags("controlnet", "canny") +class CannyImageProcessorInvocation(ImageProcessorInvocation): """Canny edge detection for ControlNet""" - # fmt: off type: Literal["canny_image_processor"] = "canny_image_processor" - # Input - low_threshold: int = Field(default=100, ge=0, le=255, description="The low threshold of the Canny pixel gradient (0-255)") - high_threshold: int = Field(default=200, ge=0, le=255, description="The high threshold of the Canny pixel gradient (0-255)") - # fmt: on - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Canny Processor", "tags": ["controlnet", "canny", "image", "processor"]}, - } + # Input + low_threshold: int = InputField( + default=100, ge=0, le=255, description="The low threshold of the Canny pixel gradient (0-255)" + ) + high_threshold: int = InputField( + default=200, ge=0, le=255, description="The high threshold of the Canny pixel gradient (0-255)" + ) def run_processor(self, image): canny_processor = CannyDetector() @@ -276,23 +200,19 @@ class CannyImageProcessorInvocation(ImageProcessorInvocation, PILInvocationConfi return processed_image -class HedImageProcessorInvocation(ImageProcessorInvocation, PILInvocationConfig): +@title("HED (softedge) Processor") +@tags("controlnet", "hed", "softedge") +class HedImageProcessorInvocation(ImageProcessorInvocation): """Applies HED edge detection to image""" - # fmt: off type: Literal["hed_image_processor"] = "hed_image_processor" - # Inputs - detect_resolution: int = Field(default=512, ge=0, description="The pixel resolution for detection") - image_resolution: int = Field(default=512, ge=0, description="The pixel resolution for the output image") - # safe not supported in controlnet_aux v0.0.3 - # safe: bool = Field(default=False, description="whether to use safe mode") - scribble: bool = Field(default=False, description="Whether to use scribble mode") - # fmt: on - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Softedge(HED) Processor", "tags": ["controlnet", "softedge", "hed", "image", "processor"]}, - } + # Inputs + detect_resolution: int = InputField(default=512, ge=0, description=FieldDescriptions.detect_res) + image_resolution: int = InputField(default=512, ge=0, description=FieldDescriptions.image_res) + # safe not supported in controlnet_aux v0.0.3 + # safe: bool = InputField(default=False, description=FieldDescriptions.safe_mode) + scribble: bool = InputField(default=False, description=FieldDescriptions.scribble_mode) def run_processor(self, image): hed_processor = HEDdetector.from_pretrained("lllyasviel/Annotators") @@ -307,21 +227,17 @@ class HedImageProcessorInvocation(ImageProcessorInvocation, PILInvocationConfig) return processed_image -class LineartImageProcessorInvocation(ImageProcessorInvocation, PILInvocationConfig): +@title("Lineart Processor") +@tags("controlnet", "lineart") +class LineartImageProcessorInvocation(ImageProcessorInvocation): """Applies line art processing to image""" - # fmt: off type: Literal["lineart_image_processor"] = "lineart_image_processor" - # Inputs - detect_resolution: int = Field(default=512, ge=0, description="The pixel resolution for detection") - image_resolution: int = Field(default=512, ge=0, description="The pixel resolution for the output image") - coarse: bool = Field(default=False, description="Whether to use coarse mode") - # fmt: on - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Lineart Processor", "tags": ["controlnet", "lineart", "image", "processor"]}, - } + # Inputs + detect_resolution: int = InputField(default=512, ge=0, description=FieldDescriptions.detect_res) + image_resolution: int = InputField(default=512, ge=0, description=FieldDescriptions.image_res) + coarse: bool = InputField(default=False, description="Whether to use coarse mode") def run_processor(self, image): lineart_processor = LineartDetector.from_pretrained("lllyasviel/Annotators") @@ -331,23 +247,16 @@ class LineartImageProcessorInvocation(ImageProcessorInvocation, PILInvocationCon return processed_image -class LineartAnimeImageProcessorInvocation(ImageProcessorInvocation, PILInvocationConfig): +@title("Lineart Anime Processor") +@tags("controlnet", "lineart", "anime") +class LineartAnimeImageProcessorInvocation(ImageProcessorInvocation): """Applies line art anime processing to image""" - # fmt: off type: Literal["lineart_anime_image_processor"] = "lineart_anime_image_processor" - # Inputs - detect_resolution: int = Field(default=512, ge=0, description="The pixel resolution for detection") - image_resolution: int = Field(default=512, ge=0, description="The pixel resolution for the output image") - # fmt: on - class Config(InvocationConfig): - schema_extra = { - "ui": { - "title": "Lineart Anime Processor", - "tags": ["controlnet", "lineart", "anime", "image", "processor"], - }, - } + # Inputs + detect_resolution: int = InputField(default=512, ge=0, description=FieldDescriptions.detect_res) + image_resolution: int = InputField(default=512, ge=0, description=FieldDescriptions.image_res) def run_processor(self, image): processor = LineartAnimeDetector.from_pretrained("lllyasviel/Annotators") @@ -359,21 +268,17 @@ class LineartAnimeImageProcessorInvocation(ImageProcessorInvocation, PILInvocati return processed_image -class OpenposeImageProcessorInvocation(ImageProcessorInvocation, PILInvocationConfig): +@title("Openpose Processor") +@tags("controlnet", "openpose", "pose") +class OpenposeImageProcessorInvocation(ImageProcessorInvocation): """Applies Openpose processing to image""" - # fmt: off type: Literal["openpose_image_processor"] = "openpose_image_processor" - # Inputs - hand_and_face: bool = Field(default=False, description="Whether to use hands and face mode") - detect_resolution: int = Field(default=512, ge=0, description="The pixel resolution for detection") - image_resolution: int = Field(default=512, ge=0, description="The pixel resolution for the output image") - # fmt: on - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Openpose Processor", "tags": ["controlnet", "openpose", "image", "processor"]}, - } + # Inputs + hand_and_face: bool = InputField(default=False, description="Whether to use hands and face mode") + detect_resolution: int = InputField(default=512, ge=0, description=FieldDescriptions.detect_res) + image_resolution: int = InputField(default=512, ge=0, description=FieldDescriptions.image_res) def run_processor(self, image): openpose_processor = OpenposeDetector.from_pretrained("lllyasviel/Annotators") @@ -386,22 +291,18 @@ class OpenposeImageProcessorInvocation(ImageProcessorInvocation, PILInvocationCo return processed_image -class MidasDepthImageProcessorInvocation(ImageProcessorInvocation, PILInvocationConfig): +@title("Midas (Depth) Processor") +@tags("controlnet", "midas", "depth") +class MidasDepthImageProcessorInvocation(ImageProcessorInvocation): """Applies Midas depth processing to image""" - # fmt: off type: Literal["midas_depth_image_processor"] = "midas_depth_image_processor" - # Inputs - a_mult: float = Field(default=2.0, ge=0, description="Midas parameter `a_mult` (a = a_mult * PI)") - bg_th: float = Field(default=0.1, ge=0, description="Midas parameter `bg_th`") - # depth_and_normal not supported in controlnet_aux v0.0.3 - # depth_and_normal: bool = Field(default=False, description="whether to use depth and normal mode") - # fmt: on - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Midas (Depth) Processor", "tags": ["controlnet", "midas", "depth", "image", "processor"]}, - } + # Inputs + a_mult: float = InputField(default=2.0, ge=0, description="Midas parameter `a_mult` (a = a_mult * PI)") + bg_th: float = InputField(default=0.1, ge=0, description="Midas parameter `bg_th`") + # depth_and_normal not supported in controlnet_aux v0.0.3 + # depth_and_normal: bool = InputField(default=False, description="whether to use depth and normal mode") def run_processor(self, image): midas_processor = MidasDetector.from_pretrained("lllyasviel/Annotators") @@ -415,20 +316,16 @@ class MidasDepthImageProcessorInvocation(ImageProcessorInvocation, PILInvocation return processed_image -class NormalbaeImageProcessorInvocation(ImageProcessorInvocation, PILInvocationConfig): +@title("Normal BAE Processor") +@tags("controlnet", "normal", "bae") +class NormalbaeImageProcessorInvocation(ImageProcessorInvocation): """Applies NormalBae processing to image""" - # fmt: off type: Literal["normalbae_image_processor"] = "normalbae_image_processor" - # Inputs - detect_resolution: int = Field(default=512, ge=0, description="The pixel resolution for detection") - image_resolution: int = Field(default=512, ge=0, description="The pixel resolution for the output image") - # fmt: on - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Normal BAE Processor", "tags": ["controlnet", "normal", "bae", "image", "processor"]}, - } + # Inputs + detect_resolution: int = InputField(default=512, ge=0, description=FieldDescriptions.detect_res) + image_resolution: int = InputField(default=512, ge=0, description=FieldDescriptions.image_res) def run_processor(self, image): normalbae_processor = NormalBaeDetector.from_pretrained("lllyasviel/Annotators") @@ -438,22 +335,18 @@ class NormalbaeImageProcessorInvocation(ImageProcessorInvocation, PILInvocationC return processed_image -class MlsdImageProcessorInvocation(ImageProcessorInvocation, PILInvocationConfig): +@title("MLSD Processor") +@tags("controlnet", "mlsd") +class MlsdImageProcessorInvocation(ImageProcessorInvocation): """Applies MLSD processing to image""" - # fmt: off type: Literal["mlsd_image_processor"] = "mlsd_image_processor" - # Inputs - detect_resolution: int = Field(default=512, ge=0, description="The pixel resolution for detection") - image_resolution: int = Field(default=512, ge=0, description="The pixel resolution for the output image") - thr_v: float = Field(default=0.1, ge=0, description="MLSD parameter `thr_v`") - thr_d: float = Field(default=0.1, ge=0, description="MLSD parameter `thr_d`") - # fmt: on - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "MLSD Processor", "tags": ["controlnet", "mlsd", "image", "processor"]}, - } + # Inputs + detect_resolution: int = InputField(default=512, ge=0, description=FieldDescriptions.detect_res) + image_resolution: int = InputField(default=512, ge=0, description=FieldDescriptions.image_res) + thr_v: float = InputField(default=0.1, ge=0, description="MLSD parameter `thr_v`") + thr_d: float = InputField(default=0.1, ge=0, description="MLSD parameter `thr_d`") def run_processor(self, image): mlsd_processor = MLSDdetector.from_pretrained("lllyasviel/Annotators") @@ -467,22 +360,18 @@ class MlsdImageProcessorInvocation(ImageProcessorInvocation, PILInvocationConfig return processed_image -class PidiImageProcessorInvocation(ImageProcessorInvocation, PILInvocationConfig): +@title("PIDI Processor") +@tags("controlnet", "pidi") +class PidiImageProcessorInvocation(ImageProcessorInvocation): """Applies PIDI processing to image""" - # fmt: off type: Literal["pidi_image_processor"] = "pidi_image_processor" - # Inputs - detect_resolution: int = Field(default=512, ge=0, description="The pixel resolution for detection") - image_resolution: int = Field(default=512, ge=0, description="The pixel resolution for the output image") - safe: bool = Field(default=False, description="Whether to use safe mode") - scribble: bool = Field(default=False, description="Whether to use scribble mode") - # fmt: on - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "PIDI Processor", "tags": ["controlnet", "pidi", "image", "processor"]}, - } + # Inputs + detect_resolution: int = InputField(default=512, ge=0, description=FieldDescriptions.detect_res) + image_resolution: int = InputField(default=512, ge=0, description=FieldDescriptions.image_res) + safe: bool = InputField(default=False, description=FieldDescriptions.safe_mode) + scribble: bool = InputField(default=False, description=FieldDescriptions.scribble_mode) def run_processor(self, image): pidi_processor = PidiNetDetector.from_pretrained("lllyasviel/Annotators") @@ -496,26 +385,19 @@ class PidiImageProcessorInvocation(ImageProcessorInvocation, PILInvocationConfig return processed_image -class ContentShuffleImageProcessorInvocation(ImageProcessorInvocation, PILInvocationConfig): +@title("Content Shuffle Processor") +@tags("controlnet", "contentshuffle") +class ContentShuffleImageProcessorInvocation(ImageProcessorInvocation): """Applies content shuffle processing to image""" - # fmt: off type: Literal["content_shuffle_image_processor"] = "content_shuffle_image_processor" - # Inputs - detect_resolution: int = Field(default=512, ge=0, description="The pixel resolution for detection") - image_resolution: int = Field(default=512, ge=0, description="The pixel resolution for the output image") - h: Optional[int] = Field(default=512, ge=0, description="Content shuffle `h` parameter") - w: Optional[int] = Field(default=512, ge=0, description="Content shuffle `w` parameter") - f: Optional[int] = Field(default=256, ge=0, description="Content shuffle `f` parameter") - # fmt: on - class Config(InvocationConfig): - schema_extra = { - "ui": { - "title": "Content Shuffle Processor", - "tags": ["controlnet", "contentshuffle", "image", "processor"], - }, - } + # Inputs + detect_resolution: int = InputField(default=512, ge=0, description=FieldDescriptions.detect_res) + image_resolution: int = InputField(default=512, ge=0, description=FieldDescriptions.image_res) + h: Optional[int] = InputField(default=512, ge=0, description="Content shuffle `h` parameter") + w: Optional[int] = InputField(default=512, ge=0, description="Content shuffle `w` parameter") + f: Optional[int] = InputField(default=256, ge=0, description="Content shuffle `f` parameter") def run_processor(self, image): content_shuffle_processor = ContentShuffleDetector() @@ -531,17 +413,12 @@ class ContentShuffleImageProcessorInvocation(ImageProcessorInvocation, PILInvoca # should work with controlnet_aux >= 0.0.4 and timm <= 0.6.13 -class ZoeDepthImageProcessorInvocation(ImageProcessorInvocation, PILInvocationConfig): +@title("Zoe (Depth) Processor") +@tags("controlnet", "zoe", "depth") +class ZoeDepthImageProcessorInvocation(ImageProcessorInvocation): """Applies Zoe depth processing to image""" - # fmt: off type: Literal["zoe_depth_image_processor"] = "zoe_depth_image_processor" - # fmt: on - - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Zoe (Depth) Processor", "tags": ["controlnet", "zoe", "depth", "image", "processor"]}, - } def run_processor(self, image): zoe_depth_processor = ZoeDetector.from_pretrained("lllyasviel/Annotators") @@ -549,20 +426,16 @@ class ZoeDepthImageProcessorInvocation(ImageProcessorInvocation, PILInvocationCo return processed_image -class MediapipeFaceProcessorInvocation(ImageProcessorInvocation, PILInvocationConfig): +@title("Mediapipe Face Processor") +@tags("controlnet", "mediapipe", "face") +class MediapipeFaceProcessorInvocation(ImageProcessorInvocation): """Applies mediapipe face processing to image""" - # fmt: off type: Literal["mediapipe_face_processor"] = "mediapipe_face_processor" - # Inputs - max_faces: int = Field(default=1, ge=1, description="Maximum number of faces to detect") - min_confidence: float = Field(default=0.5, ge=0, le=1, description="Minimum confidence for face detection") - # fmt: on - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Mediapipe Processor", "tags": ["controlnet", "mediapipe", "image", "processor"]}, - } + # Inputs + max_faces: int = InputField(default=1, ge=1, description="Maximum number of faces to detect") + min_confidence: float = InputField(default=0.5, ge=0, le=1, description="Minimum confidence for face detection") def run_processor(self, image): # MediaPipeFaceDetector throws an error if image has alpha channel @@ -574,23 +447,19 @@ class MediapipeFaceProcessorInvocation(ImageProcessorInvocation, PILInvocationCo return processed_image -class LeresImageProcessorInvocation(ImageProcessorInvocation, PILInvocationConfig): +@title("Leres (Depth) Processor") +@tags("controlnet", "leres", "depth") +class LeresImageProcessorInvocation(ImageProcessorInvocation): """Applies leres processing to image""" - # fmt: off type: Literal["leres_image_processor"] = "leres_image_processor" - # Inputs - thr_a: float = Field(default=0, description="Leres parameter `thr_a`") - thr_b: float = Field(default=0, description="Leres parameter `thr_b`") - boost: bool = Field(default=False, description="Whether to use boost mode") - detect_resolution: int = Field(default=512, ge=0, description="The pixel resolution for detection") - image_resolution: int = Field(default=512, ge=0, description="The pixel resolution for the output image") - # fmt: on - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Leres (Depth) Processor", "tags": ["controlnet", "leres", "depth", "image", "processor"]}, - } + # Inputs + thr_a: float = InputField(default=0, description="Leres parameter `thr_a`") + thr_b: float = InputField(default=0, description="Leres parameter `thr_b`") + boost: bool = InputField(default=False, description="Whether to use boost mode") + detect_resolution: int = InputField(default=512, ge=0, description=FieldDescriptions.detect_res) + image_resolution: int = InputField(default=512, ge=0, description=FieldDescriptions.image_res) def run_processor(self, image): leres_processor = LeresDetector.from_pretrained("lllyasviel/Annotators") @@ -605,21 +474,16 @@ class LeresImageProcessorInvocation(ImageProcessorInvocation, PILInvocationConfi return processed_image -class TileResamplerProcessorInvocation(ImageProcessorInvocation, PILInvocationConfig): - # fmt: off - type: Literal["tile_image_processor"] = "tile_image_processor" - # Inputs - #res: int = Field(default=512, ge=0, le=1024, description="The pixel resolution for each tile") - down_sampling_rate: float = Field(default=1.0, ge=1.0, le=8.0, description="Down sampling rate") - # fmt: on +@title("Tile Resample Processor") +@tags("controlnet", "tile") +class TileResamplerProcessorInvocation(ImageProcessorInvocation): + """Tile resampler processor""" - class Config(InvocationConfig): - schema_extra = { - "ui": { - "title": "Tile Resample Processor", - "tags": ["controlnet", "tile", "resample", "image", "processor"], - }, - } + type: Literal["tile_image_processor"] = "tile_image_processor" + + # Inputs + # res: int = InputField(default=512, ge=0, le=1024, description="The pixel resolution for each tile") + down_sampling_rate: float = InputField(default=1.0, ge=1.0, le=8.0, description="Down sampling rate") # tile_resample copied from sd-webui-controlnet/scripts/processor.py def tile_resample( @@ -648,20 +512,12 @@ class TileResamplerProcessorInvocation(ImageProcessorInvocation, PILInvocationCo return processed_image -class SegmentAnythingProcessorInvocation(ImageProcessorInvocation, PILInvocationConfig): +@title("Segment Anything Processor") +@tags("controlnet", "segmentanything") +class SegmentAnythingProcessorInvocation(ImageProcessorInvocation): """Applies segment anything processing to image""" - # fmt: off type: Literal["segment_anything_processor"] = "segment_anything_processor" - # fmt: on - - class Config(InvocationConfig): - schema_extra = { - "ui": { - "title": "Segment Anything Processor", - "tags": ["controlnet", "segment", "anything", "sam", "image", "processor"], - }, - } def run_processor(self, image): # segment_anything_processor = SamDetector.from_pretrained("ybelkada/segment-anything", subfolder="checkpoints") diff --git a/invokeai/app/invocations/cv.py b/invokeai/app/invocations/cv.py index bd3a4adbe4..f318434211 100644 --- a/invokeai/app/invocations/cv.py +++ b/invokeai/app/invocations/cv.py @@ -5,40 +5,22 @@ from typing import Literal import cv2 as cv import numpy from PIL import Image, ImageOps -from pydantic import BaseModel, Field +from invokeai.app.invocations.primitives import ImageField, ImageOutput -from invokeai.app.models.image import ImageCategory, ImageField, ResourceOrigin -from .baseinvocation import BaseInvocation, InvocationContext, InvocationConfig -from .image import ImageOutput +from invokeai.app.models.image import ImageCategory, ResourceOrigin +from .baseinvocation import BaseInvocation, InputField, InvocationContext, tags, title -class CvInvocationConfig(BaseModel): - """Helper class to provide all OpenCV invocations with additional config""" - - # Schema customisation - class Config(InvocationConfig): - schema_extra = { - "ui": { - "tags": ["cv", "image"], - }, - } - - -class CvInpaintInvocation(BaseInvocation, CvInvocationConfig): +@title("OpenCV Inpaint") +@tags("opencv", "inpaint") +class CvInpaintInvocation(BaseInvocation): """Simple inpaint using opencv.""" - # fmt: off type: Literal["cv_inpaint"] = "cv_inpaint" # Inputs - image: ImageField = Field(default=None, description="The image to inpaint") - mask: ImageField = Field(default=None, description="The mask to use when inpainting") - # fmt: on - - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "OpenCV Inpaint", "tags": ["opencv", "inpaint"]}, - } + image: ImageField = InputField(description="The image to inpaint") + mask: ImageField = InputField(description="The mask to use when inpainting") def invoke(self, context: InvocationContext) -> ImageOutput: image = context.services.images.get_pil_image(self.image.image_name) diff --git a/invokeai/app/invocations/generate.py b/invokeai/app/invocations/generate.py deleted file mode 100644 index d48c9f922e..0000000000 --- a/invokeai/app/invocations/generate.py +++ /dev/null @@ -1,251 +0,0 @@ -# Copyright (c) 2022 Kyle Schouviller (https://github.com/kyle0654) - -from functools import partial -from typing import Literal, Optional, get_args - -import torch -from pydantic import Field - -from invokeai.app.models.image import ColorField, ImageCategory, ImageField, ResourceOrigin -from invokeai.app.util.misc import SEED_MAX, get_random_seed -from invokeai.backend.generator.inpaint import infill_methods - -from ...backend.generator import Inpaint, InvokeAIGenerator -from ...backend.stable_diffusion import PipelineIntermediateState -from ..util.step_callback import stable_diffusion_step_callback -from .baseinvocation import BaseInvocation, InvocationConfig, InvocationContext -from .image import ImageOutput - -from ...backend.model_management.lora import ModelPatcher -from ...backend.stable_diffusion.diffusers_pipeline import StableDiffusionGeneratorPipeline -from .model import UNetField, VaeField -from .compel import ConditioningField -from contextlib import contextmanager, ExitStack, ContextDecorator - -SAMPLER_NAME_VALUES = Literal[tuple(InvokeAIGenerator.schedulers())] -INFILL_METHODS = Literal[tuple(infill_methods())] -DEFAULT_INFILL_METHOD = "patchmatch" if "patchmatch" in get_args(INFILL_METHODS) else "tile" - - -from .latent import get_scheduler - - -class OldModelContext(ContextDecorator): - model: StableDiffusionGeneratorPipeline - - def __init__(self, model): - self.model = model - - def __enter__(self): - return self.model - - def __exit__(self, *exc): - return False - - -class OldModelInfo: - name: str - hash: str - context: OldModelContext - - def __init__(self, name: str, hash: str, model: StableDiffusionGeneratorPipeline): - self.name = name - self.hash = hash - self.context = OldModelContext( - model=model, - ) - - -class InpaintInvocation(BaseInvocation): - """Generates an image using inpaint.""" - - type: Literal["inpaint"] = "inpaint" - - positive_conditioning: Optional[ConditioningField] = Field(description="Positive conditioning for generation") - negative_conditioning: Optional[ConditioningField] = Field(description="Negative conditioning for generation") - seed: int = Field( - ge=0, le=SEED_MAX, description="The seed to use (omit for random)", default_factory=get_random_seed - ) - steps: int = Field(default=30, gt=0, description="The number of steps to use to generate the image") - width: int = Field( - default=512, - multiple_of=8, - gt=0, - description="The width of the resulting image", - ) - height: int = Field( - default=512, - multiple_of=8, - gt=0, - description="The height of the resulting image", - ) - cfg_scale: float = Field( - default=7.5, - ge=1, - description="The Classifier-Free Guidance, higher values may result in a result closer to the prompt", - ) - scheduler: SAMPLER_NAME_VALUES = Field(default="euler", description="The scheduler to use") - unet: UNetField = Field(default=None, description="UNet model") - vae: VaeField = Field(default=None, description="Vae model") - - # Inputs - image: Optional[ImageField] = Field(description="The input image") - strength: float = Field(default=0.75, gt=0, le=1, description="The strength of the original image") - fit: bool = Field( - default=True, - description="Whether or not the result should be fit to the aspect ratio of the input image", - ) - - # Inputs - mask: Optional[ImageField] = Field(description="The mask") - seam_size: int = Field(default=96, ge=1, description="The seam inpaint size (px)") - seam_blur: int = Field(default=16, ge=0, description="The seam inpaint blur radius (px)") - seam_strength: float = Field(default=0.75, gt=0, le=1, description="The seam inpaint strength") - seam_steps: int = Field(default=30, ge=1, description="The number of steps to use for seam inpaint") - tile_size: int = Field(default=32, ge=1, description="The tile infill method size (px)") - infill_method: INFILL_METHODS = Field( - default=DEFAULT_INFILL_METHOD, - description="The method used to infill empty regions (px)", - ) - inpaint_width: Optional[int] = Field( - default=None, - multiple_of=8, - gt=0, - description="The width of the inpaint region (px)", - ) - inpaint_height: Optional[int] = Field( - default=None, - multiple_of=8, - gt=0, - description="The height of the inpaint region (px)", - ) - inpaint_fill: Optional[ColorField] = Field( - default=ColorField(r=127, g=127, b=127, a=255), - description="The solid infill method color", - ) - inpaint_replace: float = Field( - default=0.0, - ge=0.0, - le=1.0, - description="The amount by which to replace masked areas with latent noise", - ) - - # Schema customisation - class Config(InvocationConfig): - schema_extra = { - "ui": {"tags": ["stable-diffusion", "image"], "title": "Inpaint"}, - } - - def dispatch_progress( - self, - context: InvocationContext, - source_node_id: str, - intermediate_state: PipelineIntermediateState, - ) -> None: - stable_diffusion_step_callback( - context=context, - intermediate_state=intermediate_state, - node=self.dict(), - source_node_id=source_node_id, - ) - - def get_conditioning(self, context, unet): - positive_cond_data = context.services.latents.get(self.positive_conditioning.conditioning_name) - c = positive_cond_data.conditionings[0].embeds.to(device=unet.device, dtype=unet.dtype) - extra_conditioning_info = positive_cond_data.conditionings[0].extra_conditioning - - negative_cond_data = context.services.latents.get(self.negative_conditioning.conditioning_name) - uc = negative_cond_data.conditionings[0].embeds.to(device=unet.device, dtype=unet.dtype) - - return (uc, c, extra_conditioning_info) - - @contextmanager - def load_model_old_way(self, context, scheduler): - def _lora_loader(): - for lora in self.unet.loras: - lora_info = context.services.model_manager.get_model( - **lora.dict(exclude={"weight"}), - context=context, - ) - yield (lora_info.context.model, lora.weight) - del lora_info - return - - unet_info = context.services.model_manager.get_model( - **self.unet.unet.dict(), - context=context, - ) - vae_info = context.services.model_manager.get_model( - **self.vae.vae.dict(), - context=context, - ) - - with vae_info as vae, ModelPatcher.apply_lora_unet(unet_info.context.model, _lora_loader()), unet_info as unet: - device = context.services.model_manager.mgr.cache.execution_device - dtype = context.services.model_manager.mgr.cache.precision - - pipeline = StableDiffusionGeneratorPipeline( - vae=vae, - text_encoder=None, - tokenizer=None, - unet=unet, - scheduler=scheduler, - safety_checker=None, - feature_extractor=None, - requires_safety_checker=False, - precision="float16" if dtype == torch.float16 else "float32", - execution_device=device, - ) - - yield OldModelInfo( - name=self.unet.unet.model_name, - hash="", - model=pipeline, - ) - - def invoke(self, context: InvocationContext) -> ImageOutput: - image = None if self.image is None else context.services.images.get_pil_image(self.image.image_name) - mask = None if self.mask is None else context.services.images.get_pil_image(self.mask.image_name) - - # Get the source node id (we are invoking the prepared node) - graph_execution_state = context.services.graph_execution_manager.get(context.graph_execution_state_id) - source_node_id = graph_execution_state.prepared_source_mapping[self.id] - - scheduler = get_scheduler( - context=context, - scheduler_info=self.unet.scheduler, - scheduler_name=self.scheduler, - ) - - with self.load_model_old_way(context, scheduler) as model: - conditioning = self.get_conditioning(context, model.context.model.unet) - - outputs = Inpaint(model).generate( - conditioning=conditioning, - scheduler=scheduler, - init_image=image, - mask_image=mask, - step_callback=partial(self.dispatch_progress, context, source_node_id), - **self.dict( - exclude={"positive_conditioning", "negative_conditioning", "scheduler", "image", "mask"} - ), # Shorthand for passing all of the parameters above manually - ) - - # Outputs is an infinite iterator that will return a new InvokeAIGeneratorOutput object - # each time it is called. We only need the first one. - generator_output = next(outputs) - - image_dto = context.services.images.create( - image=generator_output.image, - image_origin=ResourceOrigin.INTERNAL, - image_category=ImageCategory.GENERAL, - session_id=context.graph_execution_state_id, - node_id=self.id, - is_intermediate=self.is_intermediate, - ) - - return ImageOutput( - image=ImageField(image_name=image_dto.image_name), - width=image_dto.width, - height=image_dto.height, - ) diff --git a/invokeai/app/invocations/image.py b/invokeai/app/invocations/image.py index 3f40ea3cbe..f4a1648196 100644 --- a/invokeai/app/invocations/image.py +++ b/invokeai/app/invocations/image.py @@ -1,69 +1,31 @@ # Copyright (c) 2022 Kyle Schouviller (https://github.com/kyle0654) +from pathlib import Path from typing import Literal, Optional +import cv2 import numpy -from PIL import Image, ImageFilter, ImageOps, ImageChops -from pydantic import Field -from pathlib import Path -from typing import Union +from PIL import Image, ImageChops, ImageFilter, ImageOps + from invokeai.app.invocations.metadata import CoreMetadata -from ..models.image import ( - ImageCategory, - ImageField, - ResourceOrigin, - PILInvocationConfig, - ImageOutput, - MaskOutput, -) -from .baseinvocation import ( - BaseInvocation, - InvocationContext, - InvocationConfig, -) -from invokeai.backend.image_util.safety_checker import SafetyChecker +from invokeai.app.invocations.primitives import ImageField, ImageOutput from invokeai.backend.image_util.invisible_watermark import InvisibleWatermark +from invokeai.backend.image_util.safety_checker import SafetyChecker + +from ..models.image import ImageCategory, ResourceOrigin +from .baseinvocation import BaseInvocation, FieldDescriptions, InputField, InvocationContext, tags, title -class LoadImageInvocation(BaseInvocation): - """Load an image and provide it as output.""" - - # fmt: off - type: Literal["load_image"] = "load_image" - - # Inputs - image: Optional[ImageField] = Field( - default=None, description="The image to load" - ) - # fmt: on - - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Load Image", "tags": ["image", "load"]}, - } - - def invoke(self, context: InvocationContext) -> ImageOutput: - image = context.services.images.get_pil_image(self.image.image_name) - - return ImageOutput( - image=ImageField(image_name=self.image.image_name), - width=image.width, - height=image.height, - ) - - +@title("Show Image") +@tags("image") class ShowImageInvocation(BaseInvocation): """Displays a provided image, and passes it forward in the pipeline.""" + # Metadata type: Literal["show_image"] = "show_image" # Inputs - image: Optional[ImageField] = Field(default=None, description="The image to show") - - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Show Image", "tags": ["image", "show"]}, - } + image: ImageField = InputField(description="The image to show") def invoke(self, context: InvocationContext) -> ImageOutput: image = context.services.images.get_pil_image(self.image.image_name) @@ -79,24 +41,20 @@ class ShowImageInvocation(BaseInvocation): ) -class ImageCropInvocation(BaseInvocation, PILInvocationConfig): +@title("Crop Image") +@tags("image", "crop") +class ImageCropInvocation(BaseInvocation): """Crops an image to a specified box. The box can be outside of the image.""" - # fmt: off + # Metadata type: Literal["img_crop"] = "img_crop" # Inputs - image: Optional[ImageField] = Field(default=None, description="The image to crop") - x: int = Field(default=0, description="The left x coordinate of the crop rectangle") - y: int = Field(default=0, description="The top y coordinate of the crop rectangle") - width: int = Field(default=512, gt=0, description="The width of the crop rectangle") - height: int = Field(default=512, gt=0, description="The height of the crop rectangle") - # fmt: on - - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Crop Image", "tags": ["image", "crop"]}, - } + image: ImageField = InputField(description="The image to crop") + x: int = InputField(default=0, description="The left x coordinate of the crop rectangle") + y: int = InputField(default=0, description="The top y coordinate of the crop rectangle") + width: int = InputField(default=512, gt=0, description="The width of the crop rectangle") + height: int = InputField(default=512, gt=0, description="The height of the crop rectangle") def invoke(self, context: InvocationContext) -> ImageOutput: image = context.services.images.get_pil_image(self.image.image_name) @@ -120,31 +78,31 @@ class ImageCropInvocation(BaseInvocation, PILInvocationConfig): ) -class ImagePasteInvocation(BaseInvocation, PILInvocationConfig): +@title("Paste Image") +@tags("image", "paste") +class ImagePasteInvocation(BaseInvocation): """Pastes an image into another image.""" - # fmt: off + # Metadata type: Literal["img_paste"] = "img_paste" # Inputs - base_image: Optional[ImageField] = Field(default=None, description="The base image") - image: Optional[ImageField] = Field(default=None, description="The image to paste") - mask: Optional[ImageField] = Field(default=None, description="The mask to use when pasting") - x: int = Field(default=0, description="The left x coordinate at which to paste the image") - y: int = Field(default=0, description="The top y coordinate at which to paste the image") - # fmt: on - - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Paste Image", "tags": ["image", "paste"]}, - } + base_image: ImageField = InputField(description="The base image") + image: ImageField = InputField(description="The image to paste") + mask: Optional[ImageField] = InputField( + default=None, + description="The mask to use when pasting", + ) + x: int = InputField(default=0, description="The left x coordinate at which to paste the image") + y: int = InputField(default=0, description="The top y coordinate at which to paste the image") def invoke(self, context: InvocationContext) -> ImageOutput: base_image = context.services.images.get_pil_image(self.base_image.image_name) image = context.services.images.get_pil_image(self.image.image_name) - mask = ( - None if self.mask is None else ImageOps.invert(context.services.images.get_pil_image(self.mask.image_name)) - ) + mask = None + if self.mask is not None: + mask = context.services.images.get_pil_image(self.mask.image_name) + mask = ImageOps.invert(mask.convert("L")) # TODO: probably shouldn't invert mask here... should user be required to do it? min_x = min(0, self.x) @@ -172,23 +130,19 @@ class ImagePasteInvocation(BaseInvocation, PILInvocationConfig): ) -class MaskFromAlphaInvocation(BaseInvocation, PILInvocationConfig): +@title("Mask from Alpha") +@tags("image", "mask") +class MaskFromAlphaInvocation(BaseInvocation): """Extracts the alpha channel of an image as a mask.""" - # fmt: off + # Metadata type: Literal["tomask"] = "tomask" # Inputs - image: Optional[ImageField] = Field(default=None, description="The image to create the mask from") - invert: bool = Field(default=False, description="Whether or not to invert the mask") - # fmt: on + image: ImageField = InputField(description="The image to create the mask from") + invert: bool = InputField(default=False, description="Whether or not to invert the mask") - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Mask From Alpha", "tags": ["image", "mask", "alpha"]}, - } - - def invoke(self, context: InvocationContext) -> MaskOutput: + def invoke(self, context: InvocationContext) -> ImageOutput: image = context.services.images.get_pil_image(self.image.image_name) image_mask = image.split()[-1] @@ -204,28 +158,24 @@ class MaskFromAlphaInvocation(BaseInvocation, PILInvocationConfig): is_intermediate=self.is_intermediate, ) - return MaskOutput( - mask=ImageField(image_name=image_dto.image_name), + return ImageOutput( + image=ImageField(image_name=image_dto.image_name), width=image_dto.width, height=image_dto.height, ) -class ImageMultiplyInvocation(BaseInvocation, PILInvocationConfig): +@title("Multiply Images") +@tags("image", "multiply") +class ImageMultiplyInvocation(BaseInvocation): """Multiplies two images together using `PIL.ImageChops.multiply()`.""" - # fmt: off + # Metadata type: Literal["img_mul"] = "img_mul" # Inputs - image1: Optional[ImageField] = Field(default=None, description="The first image to multiply") - image2: Optional[ImageField] = Field(default=None, description="The second image to multiply") - # fmt: on - - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Multiply Images", "tags": ["image", "multiply"]}, - } + image1: ImageField = InputField(description="The first image to multiply") + image2: ImageField = InputField(description="The second image to multiply") def invoke(self, context: InvocationContext) -> ImageOutput: image1 = context.services.images.get_pil_image(self.image1.image_name) @@ -252,21 +202,17 @@ class ImageMultiplyInvocation(BaseInvocation, PILInvocationConfig): IMAGE_CHANNELS = Literal["A", "R", "G", "B"] -class ImageChannelInvocation(BaseInvocation, PILInvocationConfig): +@title("Extract Image Channel") +@tags("image", "channel") +class ImageChannelInvocation(BaseInvocation): """Gets a channel from an image.""" - # fmt: off + # Metadata type: Literal["img_chan"] = "img_chan" # Inputs - image: Optional[ImageField] = Field(default=None, description="The image to get the channel from") - channel: IMAGE_CHANNELS = Field(default="A", description="The channel to get") - # fmt: on - - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Image Channel", "tags": ["image", "channel"]}, - } + image: ImageField = InputField(description="The image to get the channel from") + channel: IMAGE_CHANNELS = InputField(default="A", description="The channel to get") def invoke(self, context: InvocationContext) -> ImageOutput: image = context.services.images.get_pil_image(self.image.image_name) @@ -292,21 +238,17 @@ class ImageChannelInvocation(BaseInvocation, PILInvocationConfig): IMAGE_MODES = Literal["L", "RGB", "RGBA", "CMYK", "YCbCr", "LAB", "HSV", "I", "F"] -class ImageConvertInvocation(BaseInvocation, PILInvocationConfig): +@title("Convert Image Mode") +@tags("image", "convert") +class ImageConvertInvocation(BaseInvocation): """Converts an image to a different mode.""" - # fmt: off + # Metadata type: Literal["img_conv"] = "img_conv" # Inputs - image: Optional[ImageField] = Field(default=None, description="The image to convert") - mode: IMAGE_MODES = Field(default="L", description="The mode to convert to") - # fmt: on - - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Convert Image", "tags": ["image", "convert"]}, - } + image: ImageField = InputField(description="The image to convert") + mode: IMAGE_MODES = InputField(default="L", description="The mode to convert to") def invoke(self, context: InvocationContext) -> ImageOutput: image = context.services.images.get_pil_image(self.image.image_name) @@ -329,22 +271,19 @@ class ImageConvertInvocation(BaseInvocation, PILInvocationConfig): ) -class ImageBlurInvocation(BaseInvocation, PILInvocationConfig): +@title("Blur Image") +@tags("image", "blur") +class ImageBlurInvocation(BaseInvocation): """Blurs an image""" - # fmt: off + # Metadata type: Literal["img_blur"] = "img_blur" # Inputs - image: Optional[ImageField] = Field(default=None, description="The image to blur") - radius: float = Field(default=8.0, ge=0, description="The blur radius") - blur_type: Literal["gaussian", "box"] = Field(default="gaussian", description="The type of blur") - # fmt: on - - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Blur Image", "tags": ["image", "blur"]}, - } + image: ImageField = InputField(description="The image to blur") + radius: float = InputField(default=8.0, ge=0, description="The blur radius") + # Metadata + blur_type: Literal["gaussian", "box"] = InputField(default="gaussian", description="The type of blur") def invoke(self, context: InvocationContext) -> ImageOutput: image = context.services.images.get_pil_image(self.image.image_name) @@ -390,23 +329,19 @@ PIL_RESAMPLING_MAP = { } -class ImageResizeInvocation(BaseInvocation, PILInvocationConfig): +@title("Resize Image") +@tags("image", "resize") +class ImageResizeInvocation(BaseInvocation): """Resizes an image to specific dimensions""" - # fmt: off + # Metadata type: Literal["img_resize"] = "img_resize" # Inputs - image: Optional[ImageField] = Field(default=None, description="The image to resize") - width: Union[int, None] = Field(ge=64, multiple_of=8, description="The width to resize to (px)") - height: Union[int, None] = Field(ge=64, multiple_of=8, description="The height to resize to (px)") - resample_mode: PIL_RESAMPLING_MODES = Field(default="bicubic", description="The resampling mode") - # fmt: on - - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Resize Image", "tags": ["image", "resize"]}, - } + image: ImageField = InputField(description="The image to resize") + width: int = InputField(default=512, ge=64, multiple_of=8, description="The width to resize to (px)") + height: int = InputField(default=512, ge=64, multiple_of=8, description="The height to resize to (px)") + resample_mode: PIL_RESAMPLING_MODES = InputField(default="bicubic", description="The resampling mode") def invoke(self, context: InvocationContext) -> ImageOutput: image = context.services.images.get_pil_image(self.image.image_name) @@ -434,22 +369,22 @@ class ImageResizeInvocation(BaseInvocation, PILInvocationConfig): ) -class ImageScaleInvocation(BaseInvocation, PILInvocationConfig): +@title("Scale Image") +@tags("image", "scale") +class ImageScaleInvocation(BaseInvocation): """Scales an image by a factor""" - # fmt: off + # Metadata type: Literal["img_scale"] = "img_scale" # Inputs - image: Optional[ImageField] = Field(default=None, description="The image to scale") - scale_factor: Optional[float] = Field(default=2.0, gt=0, description="The factor by which to scale the image") - resample_mode: PIL_RESAMPLING_MODES = Field(default="bicubic", description="The resampling mode") - # fmt: on - - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Scale Image", "tags": ["image", "scale"]}, - } + image: ImageField = InputField(description="The image to scale") + scale_factor: float = InputField( + default=2.0, + gt=0, + description="The factor by which to scale the image", + ) + resample_mode: PIL_RESAMPLING_MODES = InputField(default="bicubic", description="The resampling mode") def invoke(self, context: InvocationContext) -> ImageOutput: image = context.services.images.get_pil_image(self.image.image_name) @@ -479,28 +414,24 @@ class ImageScaleInvocation(BaseInvocation, PILInvocationConfig): ) -class ImageLerpInvocation(BaseInvocation, PILInvocationConfig): +@title("Lerp Image") +@tags("image", "lerp") +class ImageLerpInvocation(BaseInvocation): """Linear interpolation of all pixels of an image""" - # fmt: off + # Metadata type: Literal["img_lerp"] = "img_lerp" # Inputs - image: Optional[ImageField] = Field(default=None, description="The image to lerp") - min: int = Field(default=0, ge=0, le=255, description="The minimum output value") - max: int = Field(default=255, ge=0, le=255, description="The maximum output value") - # fmt: on - - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Image Linear Interpolation", "tags": ["image", "linear", "interpolation", "lerp"]}, - } + image: ImageField = InputField(description="The image to lerp") + min: int = InputField(default=0, ge=0, le=255, description="The minimum output value") + max: int = InputField(default=255, ge=0, le=255, description="The maximum output value") def invoke(self, context: InvocationContext) -> ImageOutput: image = context.services.images.get_pil_image(self.image.image_name) image_arr = numpy.asarray(image, dtype=numpy.float32) / 255 - image_arr = image_arr * (self.max - self.min) + self.max + image_arr = image_arr * (self.max - self.min) + self.min lerp_image = Image.fromarray(numpy.uint8(image_arr)) @@ -520,25 +451,18 @@ class ImageLerpInvocation(BaseInvocation, PILInvocationConfig): ) -class ImageInverseLerpInvocation(BaseInvocation, PILInvocationConfig): +@title("Inverse Lerp Image") +@tags("image", "ilerp") +class ImageInverseLerpInvocation(BaseInvocation): """Inverse linear interpolation of all pixels of an image""" - # fmt: off + # Metadata type: Literal["img_ilerp"] = "img_ilerp" # Inputs - image: Optional[ImageField] = Field(default=None, description="The image to lerp") - min: int = Field(default=0, ge=0, le=255, description="The minimum input value") - max: int = Field(default=255, ge=0, le=255, description="The maximum input value") - # fmt: on - - class Config(InvocationConfig): - schema_extra = { - "ui": { - "title": "Image Inverse Linear Interpolation", - "tags": ["image", "linear", "interpolation", "inverse"], - }, - } + image: ImageField = InputField(description="The image to lerp") + min: int = InputField(default=0, ge=0, le=255, description="The minimum input value") + max: int = InputField(default=255, ge=0, le=255, description="The maximum input value") def invoke(self, context: InvocationContext) -> ImageOutput: image = context.services.images.get_pil_image(self.image.image_name) @@ -564,21 +488,19 @@ class ImageInverseLerpInvocation(BaseInvocation, PILInvocationConfig): ) -class ImageNSFWBlurInvocation(BaseInvocation, PILInvocationConfig): +@title("Blur NSFW Image") +@tags("image", "nsfw") +class ImageNSFWBlurInvocation(BaseInvocation): """Add blur to NSFW-flagged images""" - # fmt: off + # Metadata type: Literal["img_nsfw"] = "img_nsfw" # Inputs - image: Optional[ImageField] = Field(default=None, description="The image to check") - metadata: Optional[CoreMetadata] = Field(default=None, description="Optional core metadata to be written to the image") - # fmt: on - - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Blur NSFW Images", "tags": ["image", "nsfw", "checker"]}, - } + image: ImageField = InputField(description="The image to check") + metadata: Optional[CoreMetadata] = InputField( + default=None, description=FieldDescriptions.core_metadata, ui_hidden=True + ) def invoke(self, context: InvocationContext) -> ImageOutput: image = context.services.images.get_pil_image(self.image.image_name) @@ -615,22 +537,20 @@ class ImageNSFWBlurInvocation(BaseInvocation, PILInvocationConfig): return caution.resize((caution.width // 2, caution.height // 2)) -class ImageWatermarkInvocation(BaseInvocation, PILInvocationConfig): +@title("Add Invisible Watermark") +@tags("image", "watermark") +class ImageWatermarkInvocation(BaseInvocation): """Add an invisible watermark to an image""" - # fmt: off + # Metadata type: Literal["img_watermark"] = "img_watermark" # Inputs - image: Optional[ImageField] = Field(default=None, description="The image to check") - text: str = Field(default='InvokeAI', description="Watermark text") - metadata: Optional[CoreMetadata] = Field(default=None, description="Optional core metadata to be written to the image") - # fmt: on - - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Add Invisible Watermark", "tags": ["image", "watermark", "invisible"]}, - } + image: ImageField = InputField(description="The image to check") + text: str = InputField(default="InvokeAI", description="Watermark text") + metadata: Optional[CoreMetadata] = InputField( + default=None, description=FieldDescriptions.core_metadata, ui_hidden=True + ) def invoke(self, context: InvocationContext) -> ImageOutput: image = context.services.images.get_pil_image(self.image.image_name) @@ -650,3 +570,334 @@ class ImageWatermarkInvocation(BaseInvocation, PILInvocationConfig): width=image_dto.width, height=image_dto.height, ) + + +@title("Mask Edge") +@tags("image", "mask", "inpaint") +class MaskEdgeInvocation(BaseInvocation): + """Applies an edge mask to an image""" + + type: Literal["mask_edge"] = "mask_edge" + + # Inputs + image: ImageField = InputField(description="The image to apply the mask to") + edge_size: int = InputField(description="The size of the edge") + edge_blur: int = InputField(description="The amount of blur on the edge") + low_threshold: int = InputField(description="First threshold for the hysteresis procedure in Canny edge detection") + high_threshold: int = InputField( + description="Second threshold for the hysteresis procedure in Canny edge detection" + ) + + def invoke(self, context: InvocationContext) -> ImageOutput: + mask = context.services.images.get_pil_image(self.image.image_name) + + npimg = numpy.asarray(mask, dtype=numpy.uint8) + npgradient = numpy.uint8(255 * (1.0 - numpy.floor(numpy.abs(0.5 - numpy.float32(npimg) / 255.0) * 2.0))) + npedge = cv2.Canny(npimg, threshold1=self.low_threshold, threshold2=self.high_threshold) + npmask = npgradient + npedge + npmask = cv2.dilate(npmask, numpy.ones((3, 3), numpy.uint8), iterations=int(self.edge_size / 2)) + + new_mask = Image.fromarray(npmask) + + if self.edge_blur > 0: + new_mask = new_mask.filter(ImageFilter.BoxBlur(self.edge_blur)) + + new_mask = ImageOps.invert(new_mask) + + image_dto = context.services.images.create( + image=new_mask, + image_origin=ResourceOrigin.INTERNAL, + image_category=ImageCategory.MASK, + node_id=self.id, + session_id=context.graph_execution_state_id, + is_intermediate=self.is_intermediate, + ) + + return ImageOutput( + image=ImageField(image_name=image_dto.image_name), + width=image_dto.width, + height=image_dto.height, + ) + + +@title("Combine Mask") +@tags("image", "mask", "multiply") +class MaskCombineInvocation(BaseInvocation): + """Combine two masks together by multiplying them using `PIL.ImageChops.multiply()`.""" + + type: Literal["mask_combine"] = "mask_combine" + + # Inputs + mask1: ImageField = InputField(description="The first mask to combine") + mask2: ImageField = InputField(description="The second image to combine") + + def invoke(self, context: InvocationContext) -> ImageOutput: + mask1 = context.services.images.get_pil_image(self.mask1.image_name).convert("L") + mask2 = context.services.images.get_pil_image(self.mask2.image_name).convert("L") + + combined_mask = ImageChops.multiply(mask1, mask2) + + image_dto = context.services.images.create( + image=combined_mask, + image_origin=ResourceOrigin.INTERNAL, + image_category=ImageCategory.GENERAL, + node_id=self.id, + session_id=context.graph_execution_state_id, + is_intermediate=self.is_intermediate, + ) + + return ImageOutput( + image=ImageField(image_name=image_dto.image_name), + width=image_dto.width, + height=image_dto.height, + ) + + +@title("Color Correct") +@tags("image", "color") +class ColorCorrectInvocation(BaseInvocation): + """ + Shifts the colors of a target image to match the reference image, optionally + using a mask to only color-correct certain regions of the target image. + """ + + type: Literal["color_correct"] = "color_correct" + + # Inputs + image: ImageField = InputField(description="The image to color-correct") + reference: ImageField = InputField(description="Reference image for color-correction") + mask: Optional[ImageField] = InputField(default=None, description="Mask to use when applying color-correction") + mask_blur_radius: float = InputField(default=8, description="Mask blur radius") + + def invoke(self, context: InvocationContext) -> ImageOutput: + pil_init_mask = None + if self.mask is not None: + pil_init_mask = context.services.images.get_pil_image(self.mask.image_name).convert("L") + + init_image = context.services.images.get_pil_image(self.reference.image_name) + + result = context.services.images.get_pil_image(self.image.image_name).convert("RGBA") + + # if init_image is None or init_mask is None: + # return result + + # Get the original alpha channel of the mask if there is one. + # Otherwise it is some other black/white image format ('1', 'L' or 'RGB') + # pil_init_mask = ( + # init_mask.getchannel("A") + # if init_mask.mode == "RGBA" + # else init_mask.convert("L") + # ) + pil_init_image = init_image.convert("RGBA") # Add an alpha channel if one doesn't exist + + # Build an image with only visible pixels from source to use as reference for color-matching. + init_rgb_pixels = numpy.asarray(init_image.convert("RGB"), dtype=numpy.uint8) + init_a_pixels = numpy.asarray(pil_init_image.getchannel("A"), dtype=numpy.uint8) + init_mask_pixels = numpy.asarray(pil_init_mask, dtype=numpy.uint8) + + # Get numpy version of result + np_image = numpy.asarray(result.convert("RGB"), dtype=numpy.uint8) + + # Mask and calculate mean and standard deviation + mask_pixels = init_a_pixels * init_mask_pixels > 0 + np_init_rgb_pixels_masked = init_rgb_pixels[mask_pixels, :] + np_image_masked = np_image[mask_pixels, :] + + if np_init_rgb_pixels_masked.size > 0: + init_means = np_init_rgb_pixels_masked.mean(axis=0) + init_std = np_init_rgb_pixels_masked.std(axis=0) + gen_means = np_image_masked.mean(axis=0) + gen_std = np_image_masked.std(axis=0) + + # Color correct + np_matched_result = np_image.copy() + np_matched_result[:, :, :] = ( + ( + ( + (np_matched_result[:, :, :].astype(numpy.float32) - gen_means[None, None, :]) + / gen_std[None, None, :] + ) + * init_std[None, None, :] + + init_means[None, None, :] + ) + .clip(0, 255) + .astype(numpy.uint8) + ) + matched_result = Image.fromarray(np_matched_result, mode="RGB") + else: + matched_result = Image.fromarray(np_image, mode="RGB") + + # Blur the mask out (into init image) by specified amount + if self.mask_blur_radius > 0: + nm = numpy.asarray(pil_init_mask, dtype=numpy.uint8) + nmd = cv2.erode( + nm, + kernel=numpy.ones((3, 3), dtype=numpy.uint8), + iterations=int(self.mask_blur_radius / 2), + ) + pmd = Image.fromarray(nmd, mode="L") + blurred_init_mask = pmd.filter(ImageFilter.BoxBlur(self.mask_blur_radius)) + else: + blurred_init_mask = pil_init_mask + + multiplied_blurred_init_mask = ImageChops.multiply(blurred_init_mask, result.split()[-1]) + + # Paste original on color-corrected generation (using blurred mask) + matched_result.paste(init_image, (0, 0), mask=multiplied_blurred_init_mask) + + image_dto = context.services.images.create( + image=matched_result, + image_origin=ResourceOrigin.INTERNAL, + image_category=ImageCategory.GENERAL, + node_id=self.id, + session_id=context.graph_execution_state_id, + is_intermediate=self.is_intermediate, + ) + + return ImageOutput( + image=ImageField(image_name=image_dto.image_name), + width=image_dto.width, + height=image_dto.height, + ) + + +@title("Image Hue Adjustment") +@tags("image", "hue", "hsl") +class ImageHueAdjustmentInvocation(BaseInvocation): + """Adjusts the Hue of an image.""" + + type: Literal["img_hue_adjust"] = "img_hue_adjust" + + # Inputs + image: ImageField = InputField(description="The image to adjust") + hue: int = InputField(default=0, description="The degrees by which to rotate the hue, 0-360") + + def invoke(self, context: InvocationContext) -> ImageOutput: + pil_image = context.services.images.get_pil_image(self.image.image_name) + + # Convert image to HSV color space + hsv_image = numpy.array(pil_image.convert("HSV")) + + # Convert hue from 0..360 to 0..256 + hue = int(256 * ((self.hue % 360) / 360)) + + # Increment each hue and wrap around at 255 + hsv_image[:, :, 0] = (hsv_image[:, :, 0] + hue) % 256 + + # Convert back to PIL format and to original color mode + pil_image = Image.fromarray(hsv_image, mode="HSV").convert("RGBA") + + image_dto = context.services.images.create( + image=pil_image, + image_origin=ResourceOrigin.INTERNAL, + image_category=ImageCategory.GENERAL, + node_id=self.id, + is_intermediate=self.is_intermediate, + session_id=context.graph_execution_state_id, + ) + + return ImageOutput( + image=ImageField( + image_name=image_dto.image_name, + ), + width=image_dto.width, + height=image_dto.height, + ) + + +@title("Image Luminosity Adjustment") +@tags("image", "luminosity", "hsl") +class ImageLuminosityAdjustmentInvocation(BaseInvocation): + """Adjusts the Luminosity (Value) of an image.""" + + type: Literal["img_luminosity_adjust"] = "img_luminosity_adjust" + + # Inputs + image: ImageField = InputField(description="The image to adjust") + luminosity: float = InputField( + default=1.0, ge=0, le=1, description="The factor by which to adjust the luminosity (value)" + ) + + def invoke(self, context: InvocationContext) -> ImageOutput: + pil_image = context.services.images.get_pil_image(self.image.image_name) + + # Convert PIL image to OpenCV format (numpy array), note color channel + # ordering is changed from RGB to BGR + image = numpy.array(pil_image.convert("RGB"))[:, :, ::-1] + + # Convert image to HSV color space + hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) + + # Adjust the luminosity (value) + hsv_image[:, :, 2] = numpy.clip(hsv_image[:, :, 2] * self.luminosity, 0, 255) + + # Convert image back to BGR color space + image = cv2.cvtColor(hsv_image, cv2.COLOR_HSV2BGR) + + # Convert back to PIL format and to original color mode + pil_image = Image.fromarray(image[:, :, ::-1], "RGB").convert("RGBA") + + image_dto = context.services.images.create( + image=pil_image, + image_origin=ResourceOrigin.INTERNAL, + image_category=ImageCategory.GENERAL, + node_id=self.id, + is_intermediate=self.is_intermediate, + session_id=context.graph_execution_state_id, + ) + + return ImageOutput( + image=ImageField( + image_name=image_dto.image_name, + ), + width=image_dto.width, + height=image_dto.height, + ) + + +@title("Image Saturation Adjustment") +@tags("image", "saturation", "hsl") +class ImageSaturationAdjustmentInvocation(BaseInvocation): + """Adjusts the Saturation of an image.""" + + type: Literal["img_saturation_adjust"] = "img_saturation_adjust" + + # Inputs + image: ImageField = InputField(description="The image to adjust") + saturation: float = InputField(default=1.0, ge=0, le=1, description="The factor by which to adjust the saturation") + + def invoke(self, context: InvocationContext) -> ImageOutput: + pil_image = context.services.images.get_pil_image(self.image.image_name) + + # Convert PIL image to OpenCV format (numpy array), note color channel + # ordering is changed from RGB to BGR + image = numpy.array(pil_image.convert("RGB"))[:, :, ::-1] + + # Convert image to HSV color space + hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) + + # Adjust the saturation + hsv_image[:, :, 1] = numpy.clip(hsv_image[:, :, 1] * self.saturation, 0, 255) + + # Convert image back to BGR color space + image = cv2.cvtColor(hsv_image, cv2.COLOR_HSV2BGR) + + # Convert back to PIL format and to original color mode + pil_image = Image.fromarray(image[:, :, ::-1], "RGB").convert("RGBA") + + image_dto = context.services.images.create( + image=pil_image, + image_origin=ResourceOrigin.INTERNAL, + image_category=ImageCategory.GENERAL, + node_id=self.id, + is_intermediate=self.is_intermediate, + session_id=context.graph_execution_state_id, + ) + + return ImageOutput( + image=ImageField( + image_name=image_dto.image_name, + ), + width=image_dto.width, + height=image_dto.height, + ) diff --git a/invokeai/app/invocations/infill.py b/invokeai/app/invocations/infill.py index cd5b2f9a11..fea418567b 100644 --- a/invokeai/app/invocations/infill.py +++ b/invokeai/app/invocations/infill.py @@ -5,18 +5,13 @@ from typing import Literal, Optional, get_args import numpy as np import math from PIL import Image, ImageOps -from pydantic import Field +from invokeai.app.invocations.primitives import ImageField, ImageOutput, ColorField -from invokeai.app.invocations.image import ImageOutput from invokeai.app.util.misc import SEED_MAX, get_random_seed from invokeai.backend.image_util.patchmatch import PatchMatch -from ..models.image import ColorField, ImageCategory, ImageField, ResourceOrigin -from .baseinvocation import ( - BaseInvocation, - InvocationConfig, - InvocationContext, -) +from ..models.image import ImageCategory, ResourceOrigin +from .baseinvocation import BaseInvocation, InputField, InvocationContext, title, tags def infill_methods() -> list[str]: @@ -95,7 +90,7 @@ def tile_fill_missing(im: Image.Image, tile_size: int = 16, seed: Optional[int] return im # Find all invalid tiles and replace with a random valid tile - replace_count = (tiles_mask == False).sum() + replace_count = (tiles_mask is False).sum() rng = np.random.default_rng(seed=seed) tiles_all[np.logical_not(tiles_mask)] = filtered_tiles[rng.choice(filtered_tiles.shape[0], replace_count), :, :, :] @@ -114,21 +109,20 @@ def tile_fill_missing(im: Image.Image, tile_size: int = 16, seed: Optional[int] return si +@title("Solid Color Infill") +@tags("image", "inpaint") class InfillColorInvocation(BaseInvocation): """Infills transparent areas of an image with a solid color""" type: Literal["infill_rgba"] = "infill_rgba" - image: Optional[ImageField] = Field(default=None, description="The image to infill") - color: ColorField = Field( + + # Inputs + image: ImageField = InputField(description="The image to infill") + color: ColorField = InputField( default=ColorField(r=127, g=127, b=127, a=255), description="The color to use to infill", ) - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Color Infill", "tags": ["image", "inpaint", "color", "infill"]}, - } - def invoke(self, context: InvocationContext) -> ImageOutput: image = context.services.images.get_pil_image(self.image.image_name) @@ -153,25 +147,23 @@ class InfillColorInvocation(BaseInvocation): ) +@title("Tile Infill") +@tags("image", "inpaint") class InfillTileInvocation(BaseInvocation): """Infills transparent areas of an image with tiles of the image""" type: Literal["infill_tile"] = "infill_tile" - image: Optional[ImageField] = Field(default=None, description="The image to infill") - tile_size: int = Field(default=32, ge=1, description="The tile size (px)") - seed: int = Field( + # Input + image: ImageField = InputField(description="The image to infill") + tile_size: int = InputField(default=32, ge=1, description="The tile size (px)") + seed: int = InputField( ge=0, le=SEED_MAX, description="The seed to use for tile generation (omit for random)", default_factory=get_random_seed, ) - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Tile Infill", "tags": ["image", "inpaint", "tile", "infill"]}, - } - def invoke(self, context: InvocationContext) -> ImageOutput: image = context.services.images.get_pil_image(self.image.image_name) @@ -194,17 +186,15 @@ class InfillTileInvocation(BaseInvocation): ) +@title("PatchMatch Infill") +@tags("image", "inpaint") class InfillPatchMatchInvocation(BaseInvocation): """Infills transparent areas of an image using the PatchMatch algorithm""" type: Literal["infill_patchmatch"] = "infill_patchmatch" - image: Optional[ImageField] = Field(default=None, description="The image to infill") - - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Patch Match Infill", "tags": ["image", "inpaint", "patchmatch", "infill"]}, - } + # Inputs + image: ImageField = InputField(description="The image to infill") def invoke(self, context: InvocationContext) -> ImageOutput: image = context.services.images.get_pil_image(self.image.image_name) diff --git a/invokeai/app/invocations/latent.py b/invokeai/app/invocations/latent.py index 3edbe86150..e12cc18f42 100644 --- a/invokeai/app/invocations/latent.py +++ b/invokeai/app/invocations/latent.py @@ -5,15 +5,32 @@ from typing import List, Literal, Optional, Union import einops import torch -from diffusers import ControlNetModel +import torchvision.transforms as T from diffusers.image_processor import VaeImageProcessor +from diffusers.models.attention_processor import ( + AttnProcessor2_0, + LoRAAttnProcessor2_0, + LoRAXFormersAttnProcessor, + XFormersAttnProcessor, +) +from diffusers.schedulers import DPMSolverSDEScheduler from diffusers.schedulers import SchedulerMixin as Scheduler -from pydantic import BaseModel, Field, validator +from pydantic import validator +from torchvision.transforms.functional import resize as tv_resize from invokeai.app.invocations.metadata import CoreMetadata +from invokeai.app.invocations.primitives import ( + ImageField, + ImageOutput, + LatentsField, + LatentsOutput, + build_latents_output, +) +from invokeai.app.util.controlnet_utils import prepare_control_image from invokeai.app.util.step_callback import stable_diffusion_step_callback from invokeai.backend.model_management.models import ModelType, SilenceWarnings +from ...backend.model_management.models import BaseModelType from ...backend.model_management.lora import ModelPatcher from ...backend.stable_diffusion import PipelineIntermediateState from ...backend.stable_diffusion.diffusers_pipeline import ( @@ -24,57 +41,25 @@ from ...backend.stable_diffusion.diffusers_pipeline import ( ) from ...backend.stable_diffusion.diffusion.shared_invokeai_diffusion import PostprocessingSettings from ...backend.stable_diffusion.schedulers import SCHEDULER_MAP -from ...backend.model_management import ModelPatcher -from ...backend.util.devices import choose_torch_device, torch_dtype, choose_precision -from ..models.image import ImageCategory, ImageField, ResourceOrigin -from .baseinvocation import BaseInvocation, BaseInvocationOutput, InvocationConfig, InvocationContext +from ...backend.util.devices import choose_precision, choose_torch_device +from ..models.image import ImageCategory, ResourceOrigin +from .baseinvocation import ( + BaseInvocation, + FieldDescriptions, + Input, + InputField, + InvocationContext, + UIType, + tags, + title, +) from .compel import ConditioningField from .controlnet_image_processors import ControlField -from .image import ImageOutput from .model import ModelInfo, UNetField, VaeField -from invokeai.app.util.controlnet_utils import prepare_control_image - -from diffusers.models.attention_processor import ( - AttnProcessor2_0, - LoRAAttnProcessor2_0, - LoRAXFormersAttnProcessor, - XFormersAttnProcessor, -) - DEFAULT_PRECISION = choose_precision(choose_torch_device()) -class LatentsField(BaseModel): - """A latents field used for passing latents between invocations""" - - latents_name: Optional[str] = Field(default=None, description="The name of the latents") - - class Config: - schema_extra = {"required": ["latents_name"]} - - -class LatentsOutput(BaseInvocationOutput): - """Base class for invocations that output latents""" - - # fmt: off - type: Literal["latents_output"] = "latents_output" - - # Inputs - latents: LatentsField = Field(default=None, description="The output latents") - width: int = Field(description="The width of the latents in pixels") - height: int = Field(description="The height of the latents in pixels") - # fmt: on - - -def build_latents_output(latents_name: str, latents: torch.Tensor): - return LatentsOutput( - latents=LatentsField(latents_name=latents_name), - width=latents.size()[3] * 8, - height=latents.size()[2] * 8, - ) - - SAMPLER_NAME_VALUES = Literal[tuple(list(SCHEDULER_MAP.keys()))] @@ -82,6 +67,7 @@ def get_scheduler( context: InvocationContext, scheduler_info: ModelInfo, scheduler_name: str, + seed: int, ) -> Scheduler: scheduler_class, scheduler_extra_config = SCHEDULER_MAP.get(scheduler_name, SCHEDULER_MAP["ddim"]) orig_scheduler_info = context.services.model_manager.get_model( @@ -98,6 +84,11 @@ def get_scheduler( **scheduler_extra_config, "_backup": scheduler_config, } + + # make dpmpp_sde reproducable(seed can be passed only in initializer) + if scheduler_class is DPMSolverSDEScheduler: + scheduler_config["noise_sampler_seed"] = seed + scheduler = scheduler_class.from_config(scheduler_config) # hack copied over from generate.py @@ -106,25 +97,37 @@ def get_scheduler( return scheduler -# Text to image -class TextToLatentsInvocation(BaseInvocation): - """Generates latents from conditionings.""" +@title("Denoise Latents") +@tags("latents", "denoise", "txt2img", "t2i", "t2l", "img2img", "i2i", "l2l") +class DenoiseLatentsInvocation(BaseInvocation): + """Denoises noisy latents to decodable images""" - type: Literal["t2l"] = "t2l" + type: Literal["denoise_latents"] = "denoise_latents" # Inputs - # fmt: off - positive_conditioning: Optional[ConditioningField] = Field(description="Positive conditioning for generation") - negative_conditioning: Optional[ConditioningField] = Field(description="Negative conditioning for generation") - noise: Optional[LatentsField] = Field(description="The noise to use") - steps: int = Field(default=10, gt=0, description="The number of steps to use to generate the image") - cfg_scale: Union[float, List[float]] = Field(default=7.5, ge=1, description="The Classifier-Free Guidance, higher values may result in a result closer to the prompt", ) - scheduler: SAMPLER_NAME_VALUES = Field(default="euler", description="The scheduler to use" ) - unet: UNetField = Field(default=None, description="UNet submodel") - control: Union[ControlField, list[ControlField]] = Field(default=None, description="The control to use") - # seamless: bool = Field(default=False, description="Whether or not to generate an image that can tile without seams", ) - # seamless_axes: str = Field(default="", description="The axes to tile the image on, 'x' and/or 'y'") - # fmt: on + positive_conditioning: ConditioningField = InputField( + description=FieldDescriptions.positive_cond, input=Input.Connection + ) + negative_conditioning: ConditioningField = InputField( + description=FieldDescriptions.negative_cond, input=Input.Connection + ) + noise: Optional[LatentsField] = InputField(description=FieldDescriptions.noise, input=Input.Connection) + steps: int = InputField(default=10, gt=0, description=FieldDescriptions.steps) + cfg_scale: Union[float, List[float]] = InputField( + default=7.5, ge=1, description=FieldDescriptions.cfg_scale, ui_type=UIType.Float + ) + denoising_start: float = InputField(default=0.0, ge=0, le=1, description=FieldDescriptions.denoising_start) + denoising_end: float = InputField(default=1.0, ge=0, le=1, description=FieldDescriptions.denoising_end) + scheduler: SAMPLER_NAME_VALUES = InputField(default="euler", description=FieldDescriptions.scheduler) + unet: UNetField = InputField(description=FieldDescriptions.unet, input=Input.Connection) + control: Union[ControlField, list[ControlField]] = InputField( + default=None, description=FieldDescriptions.control, input=Input.Connection + ) + latents: Optional[LatentsField] = InputField(description=FieldDescriptions.latents, input=Input.Connection) + mask: Optional[ImageField] = InputField( + default=None, + description=FieldDescriptions.mask, + ) @validator("cfg_scale") def ge_one(cls, v): @@ -138,33 +141,20 @@ class TextToLatentsInvocation(BaseInvocation): raise ValueError("cfg_scale must be greater than 1") return v - # Schema customisation - class Config(InvocationConfig): - schema_extra = { - "ui": { - "title": "Text To Latents", - "tags": ["latents"], - "type_hints": { - "model": "model", - "control": "control", - # "cfg_scale": "float", - "cfg_scale": "number", - }, - }, - } - # TODO: pass this an emitter method or something? or a session for dispatching? def dispatch_progress( self, context: InvocationContext, source_node_id: str, intermediate_state: PipelineIntermediateState, + base_model: BaseModelType, ) -> None: stable_diffusion_step_callback( context=context, intermediate_state=intermediate_state, node=self.dict(), source_node_id=source_node_id, + base_model=base_model, ) def get_conditioning_data( @@ -172,13 +162,14 @@ class TextToLatentsInvocation(BaseInvocation): context: InvocationContext, scheduler, unet, + seed, ) -> ConditioningData: positive_cond_data = context.services.latents.get(self.positive_conditioning.conditioning_name) - c = positive_cond_data.conditionings[0].embeds.to(device=unet.device, dtype=unet.dtype) - extra_conditioning_info = positive_cond_data.conditionings[0].extra_conditioning + c = positive_cond_data.conditionings[0].to(device=unet.device, dtype=unet.dtype) + extra_conditioning_info = c.extra_conditioning negative_cond_data = context.services.latents.get(self.negative_conditioning.conditioning_name) - uc = negative_cond_data.conditionings[0].embeds.to(device=unet.device, dtype=unet.dtype) + uc = negative_cond_data.conditionings[0].to(device=unet.device, dtype=unet.dtype) conditioning_data = ConditioningData( unconditioned_embeddings=uc, @@ -198,7 +189,8 @@ class TextToLatentsInvocation(BaseInvocation): # for ddim scheduler eta=0.0, # ddim_eta # for ancestral and sde schedulers - generator=torch.Generator(device=unet.device).manual_seed(0), + # flip all bits to have noise different from initial + generator=torch.Generator(device=unet.device).manual_seed(seed ^ 0xFFFFFFFF), ) return conditioning_data @@ -231,7 +223,6 @@ class TextToLatentsInvocation(BaseInvocation): safety_checker=None, feature_extractor=None, requires_safety_checker=False, - precision="float16" if unet.dtype == torch.float16 else "float32", ) def prep_control_data( @@ -310,110 +301,83 @@ class TextToLatentsInvocation(BaseInvocation): # MultiControlNetModel has been refactored out, just need list[ControlNetData] return control_data - @torch.no_grad() - def invoke(self, context: InvocationContext) -> LatentsOutput: - with SilenceWarnings(): - noise = context.services.latents.get(self.noise.latents_name) + # original idea by https://github.com/AmericanPresidentJimmyCarter + # TODO: research more for second order schedulers timesteps + def init_scheduler(self, scheduler, device, steps, denoising_start, denoising_end): + num_inference_steps = steps + if scheduler.config.get("cpu_only", False): + scheduler.set_timesteps(num_inference_steps, device="cpu") + timesteps = scheduler.timesteps.to(device=device) + else: + scheduler.set_timesteps(num_inference_steps, device=device) + timesteps = scheduler.timesteps - # Get the source node id (we are invoking the prepared node) - graph_execution_state = context.services.graph_execution_manager.get(context.graph_execution_state_id) - source_node_id = graph_execution_state.prepared_source_mapping[self.id] + # apply denoising_start + t_start_val = int(round(scheduler.config.num_train_timesteps * (1 - denoising_start))) + t_start_idx = len(list(filter(lambda ts: ts >= t_start_val, timesteps))) + timesteps = timesteps[t_start_idx:] + if scheduler.order == 2 and t_start_idx > 0: + timesteps = timesteps[1:] - def step_callback(state: PipelineIntermediateState): - self.dispatch_progress(context, source_node_id, state) + # save start timestep to apply noise + init_timestep = timesteps[:1] - def _lora_loader(): - for lora in self.unet.loras: - lora_info = context.services.model_manager.get_model( - **lora.dict(exclude={"weight"}), - context=context, - ) - yield (lora_info.context.model, lora.weight) - del lora_info - return + # apply denoising_end + t_end_val = int(round(scheduler.config.num_train_timesteps * (1 - denoising_end))) + t_end_idx = len(list(filter(lambda ts: ts >= t_end_val, timesteps))) + if scheduler.order == 2 and t_end_idx > 0: + t_end_idx += 1 + timesteps = timesteps[:t_end_idx] - unet_info = context.services.model_manager.get_model( - **self.unet.unet.dict(), - context=context, - ) - with ExitStack() as exit_stack, ModelPatcher.apply_lora_unet( - unet_info.context.model, _lora_loader() - ), unet_info as unet: - noise = noise.to(device=unet.device, dtype=unet.dtype) + # calculate step count based on scheduler order + num_inference_steps = len(timesteps) + if scheduler.order == 2: + num_inference_steps += num_inference_steps % 2 + num_inference_steps = num_inference_steps // 2 - scheduler = get_scheduler( - context=context, - scheduler_info=self.unet.scheduler, - scheduler_name=self.scheduler, - ) + return num_inference_steps, timesteps, init_timestep - pipeline = self.create_pipeline(unet, scheduler) - conditioning_data = self.get_conditioning_data(context, scheduler, unet) + def prep_mask_tensor(self, mask, context, lantents): + if mask is None: + return None - control_data = self.prep_control_data( - model=pipeline, - context=context, - control_input=self.control, - latents_shape=noise.shape, - # do_classifier_free_guidance=(self.cfg_scale >= 1.0)) - do_classifier_free_guidance=True, - exit_stack=exit_stack, - ) - - # TODO: Verify the noise is the right size - result_latents, result_attention_map_saver = pipeline.latents_from_embeddings( - latents=torch.zeros_like(noise, dtype=torch_dtype(unet.device)), - noise=noise, - num_inference_steps=self.steps, - conditioning_data=conditioning_data, - control_data=control_data, # list[ControlNetData] - callback=step_callback, - ) - - # https://discuss.huggingface.co/t/memory-usage-by-later-pipeline-stages/23699 - result_latents = result_latents.to("cpu") - torch.cuda.empty_cache() - - name = f"{context.graph_execution_state_id}__{self.id}" - context.services.latents.save(name, result_latents) - return build_latents_output(latents_name=name, latents=result_latents) - - -class LatentsToLatentsInvocation(TextToLatentsInvocation): - """Generates latents using latents as base image.""" - - type: Literal["l2l"] = "l2l" - - # Inputs - latents: Optional[LatentsField] = Field(description="The latents to use as a base image") - strength: float = Field(default=0.7, ge=0, le=1, description="The strength of the latents to use") - - # Schema customisation - class Config(InvocationConfig): - schema_extra = { - "ui": { - "title": "Latent To Latents", - "tags": ["latents"], - "type_hints": { - "model": "model", - "control": "control", - "cfg_scale": "number", - }, - }, - } + mask_image = context.services.images.get_pil_image(mask.image_name) + if mask_image.mode != "L": + # FIXME: why do we get passed an RGB image here? We can only use single-channel. + mask_image = mask_image.convert("L") + mask_tensor = image_resized_to_grid_as_tensor(mask_image, normalize=False) + if mask_tensor.dim() == 3: + mask_tensor = mask_tensor.unsqueeze(0) + mask_tensor = tv_resize(mask_tensor, lantents.shape[-2:], T.InterpolationMode.BILINEAR) + return 1 - mask_tensor @torch.no_grad() def invoke(self, context: InvocationContext) -> LatentsOutput: with SilenceWarnings(): # this quenches NSFW nag from diffusers - noise = context.services.latents.get(self.noise.latents_name) - latent = context.services.latents.get(self.latents.latents_name) + seed = None + noise = None + if self.noise is not None: + noise = context.services.latents.get(self.noise.latents_name) + seed = self.noise.seed + + if self.latents is not None: + latents = context.services.latents.get(self.latents.latents_name) + if seed is None: + seed = self.latents.seed + else: + latents = torch.zeros_like(noise) + + if seed is None: + seed = 0 + + mask = self.prep_mask_tensor(self.mask, context, latents) # Get the source node id (we are invoking the prepared node) graph_execution_state = context.services.graph_execution_manager.get(context.graph_execution_state_id) source_node_id = graph_execution_state.prepared_source_mapping[self.id] def step_callback(state: PipelineIntermediateState): - self.dispatch_progress(context, source_node_id, state) + self.dispatch_progress(context, source_node_id, state, self.unet.unet.base_model) def _lora_loader(): for lora in self.unet.loras: @@ -432,44 +396,48 @@ class LatentsToLatentsInvocation(TextToLatentsInvocation): with ExitStack() as exit_stack, ModelPatcher.apply_lora_unet( unet_info.context.model, _lora_loader() ), unet_info as unet: - noise = noise.to(device=unet.device, dtype=unet.dtype) - latent = latent.to(device=unet.device, dtype=unet.dtype) + latents = latents.to(device=unet.device, dtype=unet.dtype) + if noise is not None: + noise = noise.to(device=unet.device, dtype=unet.dtype) + if mask is not None: + mask = mask.to(device=unet.device, dtype=unet.dtype) scheduler = get_scheduler( context=context, scheduler_info=self.unet.scheduler, scheduler_name=self.scheduler, + seed=seed, ) pipeline = self.create_pipeline(unet, scheduler) - conditioning_data = self.get_conditioning_data(context, scheduler, unet) + conditioning_data = self.get_conditioning_data(context, scheduler, unet, seed) control_data = self.prep_control_data( model=pipeline, context=context, control_input=self.control, - latents_shape=noise.shape, + latents_shape=latents.shape, # do_classifier_free_guidance=(self.cfg_scale >= 1.0)) do_classifier_free_guidance=True, exit_stack=exit_stack, ) - # TODO: Verify the noise is the right size - initial_latents = ( - latent if self.strength < 1.0 else torch.zeros_like(latent, device=unet.device, dtype=latent.dtype) - ) - - timesteps, _ = pipeline.get_img2img_timesteps( - self.steps, - self.strength, + num_inference_steps, timesteps, init_timestep = self.init_scheduler( + scheduler, device=unet.device, + steps=self.steps, + denoising_start=self.denoising_start, + denoising_end=self.denoising_end, ) result_latents, result_attention_map_saver = pipeline.latents_from_embeddings( - latents=initial_latents, + latents=latents, timesteps=timesteps, + init_timestep=init_timestep, noise=noise, - num_inference_steps=self.steps, + seed=seed, + mask=mask, + num_inference_steps=num_inference_steps, conditioning_data=conditioning_data, control_data=control_data, # list[ControlNetData] callback=step_callback, @@ -481,32 +449,32 @@ class LatentsToLatentsInvocation(TextToLatentsInvocation): name = f"{context.graph_execution_state_id}__{self.id}" context.services.latents.save(name, result_latents) - return build_latents_output(latents_name=name, latents=result_latents) + return build_latents_output(latents_name=name, latents=result_latents, seed=seed) -# Latent to image +@title("Latents to Image") +@tags("latents", "image", "vae") class LatentsToImageInvocation(BaseInvocation): """Generates an image from latents.""" type: Literal["l2i"] = "l2i" # Inputs - latents: Optional[LatentsField] = Field(description="The latents to generate an image from") - vae: VaeField = Field(default=None, description="Vae submodel") - tiled: bool = Field(default=False, description="Decode latents by overlaping tiles (less memory consumption)") - fp32: bool = Field(DEFAULT_PRECISION == "float32", description="Decode in full precision") - metadata: Optional[CoreMetadata] = Field( - default=None, description="Optional core metadata to be written to the image" + latents: LatentsField = InputField( + description=FieldDescriptions.latents, + input=Input.Connection, + ) + vae: VaeField = InputField( + description=FieldDescriptions.vae, + input=Input.Connection, + ) + tiled: bool = InputField(default=False, description=FieldDescriptions.tiled) + fp32: bool = InputField(default=DEFAULT_PRECISION == "float32", description=FieldDescriptions.fp32) + metadata: CoreMetadata = InputField( + default=None, + description=FieldDescriptions.core_metadata, + ui_hidden=True, ) - - # Schema customisation - class Config(InvocationConfig): - schema_extra = { - "ui": { - "title": "Latents To Image", - "tags": ["latents", "image"], - }, - } @torch.no_grad() def invoke(self, context: InvocationContext) -> ImageOutput: @@ -584,24 +552,30 @@ class LatentsToImageInvocation(BaseInvocation): LATENTS_INTERPOLATION_MODE = Literal["nearest", "linear", "bilinear", "bicubic", "trilinear", "area", "nearest-exact"] +@title("Resize Latents") +@tags("latents", "resize") class ResizeLatentsInvocation(BaseInvocation): """Resizes latents to explicit width/height (in pixels). Provided dimensions are floor-divided by 8.""" type: Literal["lresize"] = "lresize" # Inputs - latents: Optional[LatentsField] = Field(description="The latents to resize") - width: Union[int, None] = Field(default=512, ge=64, multiple_of=8, description="The width to resize to (px)") - height: Union[int, None] = Field(default=512, ge=64, multiple_of=8, description="The height to resize to (px)") - mode: LATENTS_INTERPOLATION_MODE = Field(default="bilinear", description="The interpolation mode") - antialias: bool = Field( - default=False, description="Whether or not to antialias (applied in bilinear and bicubic modes only)" + latents: LatentsField = InputField( + description=FieldDescriptions.latents, + input=Input.Connection, ) - - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Resize Latents", "tags": ["latents", "resize"]}, - } + width: int = InputField( + ge=64, + multiple_of=8, + description=FieldDescriptions.width, + ) + height: int = InputField( + ge=64, + multiple_of=8, + description=FieldDescriptions.width, + ) + mode: LATENTS_INTERPOLATION_MODE = InputField(default="bilinear", description=FieldDescriptions.interp_mode) + antialias: bool = InputField(default=False, description=FieldDescriptions.torch_antialias) def invoke(self, context: InvocationContext) -> LatentsOutput: latents = context.services.latents.get(self.latents.latents_name) @@ -623,26 +597,24 @@ class ResizeLatentsInvocation(BaseInvocation): name = f"{context.graph_execution_state_id}__{self.id}" # context.services.latents.set(name, resized_latents) context.services.latents.save(name, resized_latents) - return build_latents_output(latents_name=name, latents=resized_latents) + return build_latents_output(latents_name=name, latents=resized_latents, seed=self.latents.seed) +@title("Scale Latents") +@tags("latents", "resize") class ScaleLatentsInvocation(BaseInvocation): """Scales latents by a given factor.""" type: Literal["lscale"] = "lscale" # Inputs - latents: Optional[LatentsField] = Field(description="The latents to scale") - scale_factor: float = Field(gt=0, description="The factor by which to scale the latents") - mode: LATENTS_INTERPOLATION_MODE = Field(default="bilinear", description="The interpolation mode") - antialias: bool = Field( - default=False, description="Whether or not to antialias (applied in bilinear and bicubic modes only)" + latents: LatentsField = InputField( + description=FieldDescriptions.latents, + input=Input.Connection, ) - - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Scale Latents", "tags": ["latents", "scale"]}, - } + scale_factor: float = InputField(gt=0, description=FieldDescriptions.scale_factor) + mode: LATENTS_INTERPOLATION_MODE = InputField(default="bilinear", description=FieldDescriptions.interp_mode) + antialias: bool = InputField(default=False, description=FieldDescriptions.torch_antialias) def invoke(self, context: InvocationContext) -> LatentsOutput: latents = context.services.latents.get(self.latents.latents_name) @@ -665,25 +637,26 @@ class ScaleLatentsInvocation(BaseInvocation): name = f"{context.graph_execution_state_id}__{self.id}" # context.services.latents.set(name, resized_latents) context.services.latents.save(name, resized_latents) - return build_latents_output(latents_name=name, latents=resized_latents) + return build_latents_output(latents_name=name, latents=resized_latents, seed=self.latents.seed) +@title("Image to Latents") +@tags("latents", "image", "vae") class ImageToLatentsInvocation(BaseInvocation): """Encodes an image into latents.""" type: Literal["i2l"] = "i2l" # Inputs - image: Optional[ImageField] = Field(description="The image to encode") - vae: VaeField = Field(default=None, description="Vae submodel") - tiled: bool = Field(default=False, description="Encode latents by overlaping tiles(less memory consumption)") - fp32: bool = Field(DEFAULT_PRECISION == "float32", description="Decode in full precision") - - # Schema customisation - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Image To Latents", "tags": ["latents", "image"]}, - } + image: ImageField = InputField( + description="The image to encode", + ) + vae: VaeField = InputField( + description=FieldDescriptions.vae, + input=Input.Connection, + ) + tiled: bool = InputField(default=False, description=FieldDescriptions.tiled) + fp32: bool = InputField(default=DEFAULT_PRECISION == "float32", description=FieldDescriptions.fp32) @torch.no_grad() def invoke(self, context: InvocationContext) -> LatentsOutput: @@ -746,4 +719,4 @@ class ImageToLatentsInvocation(BaseInvocation): name = f"{context.graph_execution_state_id}__{self.id}" latents = latents.to("cpu") context.services.latents.save(name, latents) - return build_latents_output(latents_name=name, latents=latents) + return build_latents_output(latents_name=name, latents=latents, seed=None) diff --git a/invokeai/app/invocations/math.py b/invokeai/app/invocations/math.py index 32b1ab2a39..13e3d92f52 100644 --- a/invokeai/app/invocations/math.py +++ b/invokeai/app/invocations/math.py @@ -2,134 +2,83 @@ from typing import Literal -from pydantic import BaseModel, Field import numpy as np -from .baseinvocation import ( - BaseInvocation, - BaseInvocationOutput, - InvocationContext, - InvocationConfig, -) +from invokeai.app.invocations.primitives import IntegerOutput + +from .baseinvocation import BaseInvocation, FieldDescriptions, InputField, InvocationContext, tags, title -class MathInvocationConfig(BaseModel): - """Helper class to provide all math invocations with additional config""" - - # Schema customisation - class Config(InvocationConfig): - schema_extra = { - "ui": { - "tags": ["math"], - } - } - - -class IntOutput(BaseInvocationOutput): - """An integer output""" - - # fmt: off - type: Literal["int_output"] = "int_output" - a: int = Field(default=None, description="The output integer") - # fmt: on - - -class FloatOutput(BaseInvocationOutput): - """A float output""" - - # fmt: off - type: Literal["float_output"] = "float_output" - param: float = Field(default=None, description="The output float") - # fmt: on - - -class AddInvocation(BaseInvocation, MathInvocationConfig): +@title("Add Integers") +@tags("math") +class AddInvocation(BaseInvocation): """Adds two numbers""" - # fmt: off type: Literal["add"] = "add" - a: int = Field(default=0, description="The first number") - b: int = Field(default=0, description="The second number") - # fmt: on - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Add", "tags": ["math", "add"]}, - } + # Inputs + a: int = InputField(default=0, description=FieldDescriptions.num_1) + b: int = InputField(default=0, description=FieldDescriptions.num_2) - def invoke(self, context: InvocationContext) -> IntOutput: - return IntOutput(a=self.a + self.b) + def invoke(self, context: InvocationContext) -> IntegerOutput: + return IntegerOutput(a=self.a + self.b) -class SubtractInvocation(BaseInvocation, MathInvocationConfig): +@title("Subtract Integers") +@tags("math") +class SubtractInvocation(BaseInvocation): """Subtracts two numbers""" - # fmt: off type: Literal["sub"] = "sub" - a: int = Field(default=0, description="The first number") - b: int = Field(default=0, description="The second number") - # fmt: on - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Subtract", "tags": ["math", "subtract"]}, - } + # Inputs + a: int = InputField(default=0, description=FieldDescriptions.num_1) + b: int = InputField(default=0, description=FieldDescriptions.num_2) - def invoke(self, context: InvocationContext) -> IntOutput: - return IntOutput(a=self.a - self.b) + def invoke(self, context: InvocationContext) -> IntegerOutput: + return IntegerOutput(a=self.a - self.b) -class MultiplyInvocation(BaseInvocation, MathInvocationConfig): +@title("Multiply Integers") +@tags("math") +class MultiplyInvocation(BaseInvocation): """Multiplies two numbers""" - # fmt: off type: Literal["mul"] = "mul" - a: int = Field(default=0, description="The first number") - b: int = Field(default=0, description="The second number") - # fmt: on - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Multiply", "tags": ["math", "multiply"]}, - } + # Inputs + a: int = InputField(default=0, description=FieldDescriptions.num_1) + b: int = InputField(default=0, description=FieldDescriptions.num_2) - def invoke(self, context: InvocationContext) -> IntOutput: - return IntOutput(a=self.a * self.b) + def invoke(self, context: InvocationContext) -> IntegerOutput: + return IntegerOutput(a=self.a * self.b) -class DivideInvocation(BaseInvocation, MathInvocationConfig): +@title("Divide Integers") +@tags("math") +class DivideInvocation(BaseInvocation): """Divides two numbers""" - # fmt: off type: Literal["div"] = "div" - a: int = Field(default=0, description="The first number") - b: int = Field(default=0, description="The second number") - # fmt: on - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Divide", "tags": ["math", "divide"]}, - } + # Inputs + a: int = InputField(default=0, description=FieldDescriptions.num_1) + b: int = InputField(default=0, description=FieldDescriptions.num_2) - def invoke(self, context: InvocationContext) -> IntOutput: - return IntOutput(a=int(self.a / self.b)) + def invoke(self, context: InvocationContext) -> IntegerOutput: + return IntegerOutput(a=int(self.a / self.b)) +@title("Random Integer") +@tags("math") class RandomIntInvocation(BaseInvocation): """Outputs a single random integer.""" - # fmt: off type: Literal["rand_int"] = "rand_int" - low: int = Field(default=0, description="The inclusive low value") - high: int = Field( - default=np.iinfo(np.int32).max, description="The exclusive high value" - ) - # fmt: on - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Random Integer", "tags": ["math", "random", "integer"]}, - } + # Inputs + low: int = InputField(default=0, description="The inclusive low value") + high: int = InputField(default=np.iinfo(np.int32).max, description="The exclusive high value") - def invoke(self, context: InvocationContext) -> IntOutput: - return IntOutput(a=np.random.randint(self.low, self.high)) + def invoke(self, context: InvocationContext) -> IntegerOutput: + return IntegerOutput(a=np.random.randint(self.low, self.high)) diff --git a/invokeai/app/invocations/metadata.py b/invokeai/app/invocations/metadata.py index 3588ef4ebe..679c610750 100644 --- a/invokeai/app/invocations/metadata.py +++ b/invokeai/app/invocations/metadata.py @@ -1,27 +1,34 @@ -from typing import Literal, Optional, Union +from typing import Literal, Optional -from pydantic import BaseModel, Field +from pydantic import Field from invokeai.app.invocations.baseinvocation import ( BaseInvocation, BaseInvocationOutput, - InvocationConfig, + InputField, InvocationContext, + OutputField, + tags, + title, ) from invokeai.app.invocations.controlnet_image_processors import ControlField from invokeai.app.invocations.model import LoRAModelField, MainModelField, VAEModelField +from invokeai.app.util.model_exclude_null import BaseModelExcludeNull + +from ...version import __version__ -class LoRAMetadataField(BaseModel): +class LoRAMetadataField(BaseModelExcludeNull): """LoRA metadata for an image generated in InvokeAI.""" lora: LoRAModelField = Field(description="The LoRA model") weight: float = Field(description="The weight of the LoRA model") -class CoreMetadata(BaseModel): +class CoreMetadata(BaseModelExcludeNull): """Core generation metadata for an image generated in InvokeAI.""" + app_version: str = Field(default=__version__, description="The version of InvokeAI used to generate this image") generation_mode: str = Field( description="The generation mode that output this image", ) @@ -40,37 +47,40 @@ class CoreMetadata(BaseModel): model: MainModelField = Field(description="The main model used for inference") controlnets: list[ControlField] = Field(description="The ControlNets used for inference") loras: list[LoRAMetadataField] = Field(description="The LoRAs used for inference") - vae: Union[VAEModelField, None] = Field( + vae: Optional[VAEModelField] = Field( default=None, description="The VAE used for decoding, if the main model's default was not used", ) # Latents-to-Latents - strength: Union[float, None] = Field( + strength: Optional[float] = Field( default=None, description="The strength used for latents-to-latents", ) - init_image: Union[str, None] = Field(default=None, description="The name of the initial image") + init_image: Optional[str] = Field(default=None, description="The name of the initial image") # SDXL - positive_style_prompt: Union[str, None] = Field(default=None, description="The positive style prompt parameter") - negative_style_prompt: Union[str, None] = Field(default=None, description="The negative style prompt parameter") + positive_style_prompt: Optional[str] = Field(default=None, description="The positive style prompt parameter") + negative_style_prompt: Optional[str] = Field(default=None, description="The negative style prompt parameter") # SDXL Refiner - refiner_model: Union[MainModelField, None] = Field(default=None, description="The SDXL Refiner model used") - refiner_cfg_scale: Union[float, None] = Field( + refiner_model: Optional[MainModelField] = Field(default=None, description="The SDXL Refiner model used") + refiner_cfg_scale: Optional[float] = Field( default=None, description="The classifier-free guidance scale parameter used for the refiner", ) - refiner_steps: Union[int, None] = Field(default=None, description="The number of steps used for the refiner") - refiner_scheduler: Union[str, None] = Field(default=None, description="The scheduler used for the refiner") - refiner_aesthetic_store: Union[float, None] = Field( + refiner_steps: Optional[int] = Field(default=None, description="The number of steps used for the refiner") + refiner_scheduler: Optional[str] = Field(default=None, description="The scheduler used for the refiner") + refiner_positive_aesthetic_store: Optional[float] = Field( default=None, description="The aesthetic score used for the refiner" ) - refiner_start: Union[float, None] = Field(default=None, description="The start value used for refiner denoising") + refiner_negative_aesthetic_store: Optional[float] = Field( + default=None, description="The aesthetic score used for the refiner" + ) + refiner_start: Optional[float] = Field(default=None, description="The start value used for refiner denoising") -class ImageMetadata(BaseModel): +class ImageMetadata(BaseModelExcludeNull): """An image's generation metadata""" metadata: Optional[dict] = Field( @@ -85,66 +95,86 @@ class MetadataAccumulatorOutput(BaseInvocationOutput): type: Literal["metadata_accumulator_output"] = "metadata_accumulator_output" - metadata: CoreMetadata = Field(description="The core metadata for the image") + metadata: CoreMetadata = OutputField(description="The core metadata for the image") +@title("Metadata Accumulator") +@tags("metadata") class MetadataAccumulatorInvocation(BaseInvocation): """Outputs a Core Metadata Object""" type: Literal["metadata_accumulator"] = "metadata_accumulator" - generation_mode: str = Field( + generation_mode: str = InputField( description="The generation mode that output this image", ) - positive_prompt: str = Field(description="The positive prompt parameter") - negative_prompt: str = Field(description="The negative prompt parameter") - width: int = Field(description="The width parameter") - height: int = Field(description="The height parameter") - seed: int = Field(description="The seed used for noise generation") - rand_device: str = Field(description="The device used for random number generation") - cfg_scale: float = Field(description="The classifier-free guidance scale parameter") - steps: int = Field(description="The number of steps used for inference") - scheduler: str = Field(description="The scheduler used for inference") - clip_skip: int = Field( + positive_prompt: str = InputField(description="The positive prompt parameter") + negative_prompt: str = InputField(description="The negative prompt parameter") + width: int = InputField(description="The width parameter") + height: int = InputField(description="The height parameter") + seed: int = InputField(description="The seed used for noise generation") + rand_device: str = InputField(description="The device used for random number generation") + cfg_scale: float = InputField(description="The classifier-free guidance scale parameter") + steps: int = InputField(description="The number of steps used for inference") + scheduler: str = InputField(description="The scheduler used for inference") + clip_skip: int = InputField( description="The number of skipped CLIP layers", ) - model: MainModelField = Field(description="The main model used for inference") - controlnets: list[ControlField] = Field(description="The ControlNets used for inference") - loras: list[LoRAMetadataField] = Field(description="The LoRAs used for inference") - strength: Union[float, None] = Field( + model: MainModelField = InputField(description="The main model used for inference") + controlnets: list[ControlField] = InputField(description="The ControlNets used for inference") + loras: list[LoRAMetadataField] = InputField(description="The LoRAs used for inference") + strength: Optional[float] = InputField( default=None, description="The strength used for latents-to-latents", ) - init_image: Union[str, None] = Field(default=None, description="The name of the initial image") - vae: Union[VAEModelField, None] = Field( + init_image: Optional[str] = InputField( + default=None, + description="The name of the initial image", + ) + vae: Optional[VAEModelField] = InputField( default=None, description="The VAE used for decoding, if the main model's default was not used", ) # SDXL - positive_style_prompt: Union[str, None] = Field(default=None, description="The positive style prompt parameter") - negative_style_prompt: Union[str, None] = Field(default=None, description="The negative style prompt parameter") + positive_style_prompt: Optional[str] = InputField( + default=None, + description="The positive style prompt parameter", + ) + negative_style_prompt: Optional[str] = InputField( + default=None, + description="The negative style prompt parameter", + ) # SDXL Refiner - refiner_model: Union[MainModelField, None] = Field(default=None, description="The SDXL Refiner model used") - refiner_cfg_scale: Union[float, None] = Field( + refiner_model: Optional[MainModelField] = InputField( + default=None, + description="The SDXL Refiner model used", + ) + refiner_cfg_scale: Optional[float] = InputField( default=None, description="The classifier-free guidance scale parameter used for the refiner", ) - refiner_steps: Union[int, None] = Field(default=None, description="The number of steps used for the refiner") - refiner_scheduler: Union[str, None] = Field(default=None, description="The scheduler used for the refiner") - refiner_aesthetic_store: Union[float, None] = Field( - default=None, description="The aesthetic score used for the refiner" + refiner_steps: Optional[int] = InputField( + default=None, + description="The number of steps used for the refiner", + ) + refiner_scheduler: Optional[str] = InputField( + default=None, + description="The scheduler used for the refiner", + ) + refiner_positive_aesthetic_store: Optional[float] = InputField( + default=None, + description="The aesthetic score used for the refiner", + ) + refiner_negative_aesthetic_store: Optional[float] = InputField( + default=None, + description="The aesthetic score used for the refiner", + ) + refiner_start: Optional[float] = InputField( + default=None, + description="The start value used for refiner denoising", ) - refiner_start: Union[float, None] = Field(default=None, description="The start value used for refiner denoising") - - class Config(InvocationConfig): - schema_extra = { - "ui": { - "title": "Metadata Accumulator", - "tags": ["image", "metadata", "generation"], - }, - } def invoke(self, context: InvocationContext) -> MetadataAccumulatorOutput: """Collects and outputs a CoreMetadata object""" diff --git a/invokeai/app/invocations/model.py b/invokeai/app/invocations/model.py index c19e5c5c9a..cecca78651 100644 --- a/invokeai/app/invocations/model.py +++ b/invokeai/app/invocations/model.py @@ -1,10 +1,21 @@ import copy -from typing import List, Literal, Optional, Union +from typing import List, Literal, Optional from pydantic import BaseModel, Field from ...backend.model_management import BaseModelType, ModelType, SubModelType -from .baseinvocation import BaseInvocation, BaseInvocationOutput, InvocationConfig, InvocationContext +from .baseinvocation import ( + BaseInvocation, + BaseInvocationOutput, + FieldDescriptions, + InputField, + Input, + InvocationContext, + OutputField, + UIType, + tags, + title, +) class ModelInfo(BaseModel): @@ -39,13 +50,11 @@ class VaeField(BaseModel): class ModelLoaderOutput(BaseInvocationOutput): """Model loader output""" - # fmt: off type: Literal["model_loader_output"] = "model_loader_output" - unet: UNetField = Field(default=None, description="UNet submodel") - clip: ClipField = Field(default=None, description="Tokenizer and text_encoder submodels") - vae: VaeField = Field(default=None, description="Vae submodel") - # fmt: on + unet: UNetField = OutputField(description=FieldDescriptions.unet, title="UNet") + clip: ClipField = OutputField(description=FieldDescriptions.clip, title="CLIP") + vae: VaeField = OutputField(description=FieldDescriptions.vae, title="VAE") class MainModelField(BaseModel): @@ -63,24 +72,17 @@ class LoRAModelField(BaseModel): base_model: BaseModelType = Field(description="Base model") +@title("Main Model Loader") +@tags("model") class MainModelLoaderInvocation(BaseInvocation): """Loads a main model, outputting its submodels.""" type: Literal["main_model_loader"] = "main_model_loader" - model: MainModelField = Field(description="The model to load") + # Inputs + model: MainModelField = InputField(description=FieldDescriptions.main_model, input=Input.Direct) # TODO: precision? - # Schema customisation - class Config(InvocationConfig): - schema_extra = { - "ui": { - "title": "Model Loader", - "tags": ["model", "loader"], - "type_hints": {"model": "model"}, - }, - } - def invoke(self, context: InvocationContext) -> ModelLoaderOutput: base_model = self.model.base_model model_name = self.model.model_name @@ -155,22 +157,6 @@ class MainModelLoaderInvocation(BaseInvocation): loras=[], skipped_layers=0, ), - clip2=ClipField( - tokenizer=ModelInfo( - model_name=model_name, - base_model=base_model, - model_type=model_type, - submodel=SubModelType.Tokenizer2, - ), - text_encoder=ModelInfo( - model_name=model_name, - base_model=base_model, - model_type=model_type, - submodel=SubModelType.TextEncoder2, - ), - loras=[], - skipped_layers=0, - ), vae=VaeField( vae=ModelInfo( model_name=model_name, @@ -188,30 +174,27 @@ class LoraLoaderOutput(BaseInvocationOutput): # fmt: off type: Literal["lora_loader_output"] = "lora_loader_output" - unet: Optional[UNetField] = Field(default=None, description="UNet submodel") - clip: Optional[ClipField] = Field(default=None, description="Tokenizer and text_encoder submodels") + unet: Optional[UNetField] = OutputField(default=None, description=FieldDescriptions.unet, title="UNet") + clip: Optional[ClipField] = OutputField(default=None, description=FieldDescriptions.clip, title="CLIP") # fmt: on +@title("LoRA Loader") +@tags("lora", "model") class LoraLoaderInvocation(BaseInvocation): """Apply selected lora to unet and text_encoder.""" type: Literal["lora_loader"] = "lora_loader" - lora: Union[LoRAModelField, None] = Field(default=None, description="Lora model name") - weight: float = Field(default=0.75, description="With what weight to apply lora") - - unet: Optional[UNetField] = Field(description="UNet model for applying lora") - clip: Optional[ClipField] = Field(description="Clip model for applying lora") - - class Config(InvocationConfig): - schema_extra = { - "ui": { - "title": "Lora Loader", - "tags": ["lora", "loader"], - "type_hints": {"lora": "lora_model"}, - }, - } + # Inputs + lora: LoRAModelField = InputField(description=FieldDescriptions.lora_model, input=Input.Direct, title="LoRA") + weight: float = InputField(default=0.75, description=FieldDescriptions.lora_weight) + unet: Optional[UNetField] = InputField( + default=None, description=FieldDescriptions.unet, input=Input.Connection, title="UNet" + ) + clip: Optional[ClipField] = InputField( + default=None, description=FieldDescriptions.clip, input=Input.Connection, title="CLIP" + ) def invoke(self, context: InvocationContext) -> LoraLoaderOutput: if self.lora is None: @@ -262,6 +245,101 @@ class LoraLoaderInvocation(BaseInvocation): return output +class SDXLLoraLoaderOutput(BaseInvocationOutput): + """SDXL LoRA Loader Output""" + + # fmt: off + type: Literal["sdxl_lora_loader_output"] = "sdxl_lora_loader_output" + + unet: Optional[UNetField] = OutputField(default=None, description=FieldDescriptions.unet, title="UNet") + clip: Optional[ClipField] = OutputField(default=None, description=FieldDescriptions.clip, title="CLIP 1") + clip2: Optional[ClipField] = OutputField(default=None, description=FieldDescriptions.clip, title="CLIP 2") + # fmt: on + + +@title("SDXL LoRA Loader") +@tags("sdxl", "lora", "model") +class SDXLLoraLoaderInvocation(BaseInvocation): + """Apply selected lora to unet and text_encoder.""" + + type: Literal["sdxl_lora_loader"] = "sdxl_lora_loader" + + lora: LoRAModelField = InputField(description=FieldDescriptions.lora_model, input=Input.Direct, title="LoRA") + weight: float = Field(default=0.75, description=FieldDescriptions.lora_weight) + unet: Optional[UNetField] = Field( + default=None, description=FieldDescriptions.unet, input=Input.Connection, title="UNET" + ) + clip: Optional[ClipField] = Field( + default=None, description=FieldDescriptions.clip, input=Input.Connection, title="CLIP 1" + ) + clip2: Optional[ClipField] = Field( + default=None, description=FieldDescriptions.clip, input=Input.Connection, title="CLIP 2" + ) + + def invoke(self, context: InvocationContext) -> SDXLLoraLoaderOutput: + if self.lora is None: + raise Exception("No LoRA provided") + + base_model = self.lora.base_model + lora_name = self.lora.model_name + + if not context.services.model_manager.model_exists( + base_model=base_model, + model_name=lora_name, + model_type=ModelType.Lora, + ): + raise Exception(f"Unknown lora name: {lora_name}!") + + if self.unet is not None and any(lora.model_name == lora_name for lora in self.unet.loras): + raise Exception(f'Lora "{lora_name}" already applied to unet') + + if self.clip is not None and any(lora.model_name == lora_name for lora in self.clip.loras): + raise Exception(f'Lora "{lora_name}" already applied to clip') + + if self.clip2 is not None and any(lora.model_name == lora_name for lora in self.clip2.loras): + raise Exception(f'Lora "{lora_name}" already applied to clip2') + + output = SDXLLoraLoaderOutput() + + if self.unet is not None: + output.unet = copy.deepcopy(self.unet) + output.unet.loras.append( + LoraInfo( + base_model=base_model, + model_name=lora_name, + model_type=ModelType.Lora, + submodel=None, + weight=self.weight, + ) + ) + + if self.clip is not None: + output.clip = copy.deepcopy(self.clip) + output.clip.loras.append( + LoraInfo( + base_model=base_model, + model_name=lora_name, + model_type=ModelType.Lora, + submodel=None, + weight=self.weight, + ) + ) + + if self.clip2 is not None: + output.clip2 = copy.deepcopy(self.clip2) + output.clip2.loras.append( + LoraInfo( + base_model=base_model, + model_name=lora_name, + model_type=ModelType.Lora, + submodel=None, + weight=self.weight, + ) + ) + + return output + + class VAEModelField(BaseModel): """Vae model field""" @@ -272,29 +350,23 @@ class VAEModelField(BaseModel): class VaeLoaderOutput(BaseInvocationOutput): """Model loader output""" - # fmt: off type: Literal["vae_loader_output"] = "vae_loader_output" - vae: VaeField = Field(default=None, description="Vae model") - # fmt: on + # Outputs + vae: VaeField = OutputField(description=FieldDescriptions.vae, title="VAE") +@title("VAE Loader") +@tags("vae", "model") class VaeLoaderInvocation(BaseInvocation): """Loads a VAE model, outputting a VaeLoaderOutput""" type: Literal["vae_loader"] = "vae_loader" - vae_model: VAEModelField = Field(description="The VAE to load") - - # Schema customisation - class Config(InvocationConfig): - schema_extra = { - "ui": { - "title": "VAE Loader", - "tags": ["vae", "loader"], - "type_hints": {"vae_model": "vae_model"}, - }, - } + # Inputs + vae_model: VAEModelField = InputField( + description=FieldDescriptions.vae_model, input=Input.Direct, ui_type=UIType.VaeModel, title="VAE" + ) def invoke(self, context: InvocationContext) -> VaeLoaderOutput: base_model = self.vae_model.base_model diff --git a/invokeai/app/invocations/noise.py b/invokeai/app/invocations/noise.py index fff0f29f14..d1dd320ee8 100644 --- a/invokeai/app/invocations/noise.py +++ b/invokeai/app/invocations/noise.py @@ -1,19 +1,23 @@ # Copyright (c) 2023 Kyle Schouviller (https://github.com/kyle0654) & the InvokeAI Team -import math from typing import Literal -from pydantic import Field, validator import torch -from invokeai.app.invocations.latent import LatentsField +from pydantic import validator +from invokeai.app.invocations.latent import LatentsField from invokeai.app.util.misc import SEED_MAX, get_random_seed + from ...backend.util.devices import choose_torch_device, torch_dtype from .baseinvocation import ( BaseInvocation, BaseInvocationOutput, - InvocationConfig, + FieldDescriptions, + InputField, InvocationContext, + OutputField, + tags, + title, ) """ @@ -61,62 +65,53 @@ Nodes class NoiseOutput(BaseInvocationOutput): """Invocation noise output""" - # fmt: off - type: Literal["noise_output"] = "noise_output" + type: Literal["noise_output"] = "noise_output" # Inputs - noise: LatentsField = Field(default=None, description="The output noise") - width: int = Field(description="The width of the noise in pixels") - height: int = Field(description="The height of the noise in pixels") - # fmt: on + noise: LatentsField = OutputField(default=None, description=FieldDescriptions.noise) + width: int = OutputField(description=FieldDescriptions.width) + height: int = OutputField(description=FieldDescriptions.height) -def build_noise_output(latents_name: str, latents: torch.Tensor): +def build_noise_output(latents_name: str, latents: torch.Tensor, seed: int): return NoiseOutput( - noise=LatentsField(latents_name=latents_name), + noise=LatentsField(latents_name=latents_name, seed=seed), width=latents.size()[3] * 8, height=latents.size()[2] * 8, ) +@title("Noise") +@tags("latents", "noise") class NoiseInvocation(BaseInvocation): """Generates latent noise.""" type: Literal["noise"] = "noise" # Inputs - seed: int = Field( + seed: int = InputField( ge=0, le=SEED_MAX, - description="The seed to use", + description=FieldDescriptions.seed, default_factory=get_random_seed, ) - width: int = Field( + width: int = InputField( default=512, multiple_of=8, gt=0, - description="The width of the resulting noise", + description=FieldDescriptions.width, ) - height: int = Field( + height: int = InputField( default=512, multiple_of=8, gt=0, - description="The height of the resulting noise", + description=FieldDescriptions.height, ) - use_cpu: bool = Field( + use_cpu: bool = InputField( default=True, description="Use CPU for noise generation (for reproducible results across platforms)", ) - # Schema customisation - class Config(InvocationConfig): - schema_extra = { - "ui": { - "title": "Noise", - "tags": ["latents", "noise"], - }, - } - @validator("seed", pre=True) def modulo_seed(cls, v): """Returns the seed modulo (SEED_MAX + 1) to ensure it is within the valid range.""" @@ -132,4 +127,4 @@ class NoiseInvocation(BaseInvocation): ) name = f"{context.graph_execution_state_id}__{self.id}" context.services.latents.save(name, noise) - return build_noise_output(latents_name=name, latents=noise) + return build_noise_output(latents_name=name, latents=noise, seed=self.seed) diff --git a/invokeai/app/invocations/onnx.py b/invokeai/app/invocations/onnx.py index 2bec128b87..3e65c1e55d 100644 --- a/invokeai/app/invocations/onnx.py +++ b/invokeai/app/invocations/onnx.py @@ -1,37 +1,42 @@ # Copyright (c) 2023 Borisov Sergey (https://github.com/StAlKeR7779) -from contextlib import ExitStack +import inspect +import re + +# from contextlib import ExitStack from typing import List, Literal, Optional, Union -import re -import inspect - -from pydantic import BaseModel, Field, validator -import torch import numpy as np -from diffusers import ControlNetModel, DPMSolverMultistepScheduler +import torch from diffusers.image_processor import VaeImageProcessor -from diffusers.schedulers import SchedulerMixin as Scheduler - -from ..models.image import ImageCategory, ImageField, ResourceOrigin -from ...backend.model_management import ONNXModelPatcher -from ...backend.util import choose_torch_device -from .baseinvocation import BaseInvocation, BaseInvocationOutput, InvocationConfig, InvocationContext -from .compel import ConditioningField -from .controlnet_image_processors import ControlField -from .image import ImageOutput -from .model import ModelInfo, UNetField, VaeField +from pydantic import BaseModel, Field, validator +from tqdm import tqdm from invokeai.app.invocations.metadata import CoreMetadata -from invokeai.backend import BaseModelType, ModelType, SubModelType +from invokeai.app.invocations.primitives import ConditioningField, ConditioningOutput, ImageField, ImageOutput from invokeai.app.util.step_callback import stable_diffusion_step_callback +from invokeai.backend import BaseModelType, ModelType, SubModelType + +from ...backend.model_management import ONNXModelPatcher from ...backend.stable_diffusion import PipelineIntermediateState - -from tqdm import tqdm -from .model import ClipField -from .latent import LatentsField, LatentsOutput, build_latents_output, get_scheduler, SAMPLER_NAME_VALUES -from .compel import CompelOutput - +from ...backend.util import choose_torch_device +from ..models.image import ImageCategory, ResourceOrigin +from .baseinvocation import ( + BaseInvocation, + BaseInvocationOutput, + FieldDescriptions, + InputField, + Input, + InvocationContext, + OutputField, + UIComponent, + UIType, + tags, + title, +) +from .controlnet_image_processors import ControlField +from .latent import SAMPLER_NAME_VALUES, LatentsField, LatentsOutput, build_latents_output, get_scheduler +from .model import ClipField, ModelInfo, UNetField, VaeField ORT_TO_NP_TYPE = { "tensor(bool)": np.bool_, @@ -51,21 +56,22 @@ ORT_TO_NP_TYPE = { PRECISION_VALUES = Literal[tuple(list(ORT_TO_NP_TYPE.keys()))] +@title("ONNX Prompt (Raw)") +@tags("onnx", "prompt") class ONNXPromptInvocation(BaseInvocation): type: Literal["prompt_onnx"] = "prompt_onnx" - prompt: str = Field(default="", description="Prompt") - clip: ClipField = Field(None, description="Clip to use") + prompt: str = InputField(default="", description=FieldDescriptions.raw_prompt, ui_component=UIComponent.Textarea) + clip: ClipField = InputField(description=FieldDescriptions.clip, input=Input.Connection) - def invoke(self, context: InvocationContext) -> CompelOutput: + def invoke(self, context: InvocationContext) -> ConditioningOutput: tokenizer_info = context.services.model_manager.get_model( **self.clip.tokenizer.dict(), ) text_encoder_info = context.services.model_manager.get_model( **self.clip.text_encoder.dict(), ) - with tokenizer_info as orig_tokenizer, text_encoder_info as text_encoder, ExitStack() as stack: - # loras = [(stack.enter_context(context.services.model_manager.get_model(**lora.dict(exclude={"weight"}))), lora.weight) for lora in self.clip.loras] + with tokenizer_info as orig_tokenizer, text_encoder_info as text_encoder: # , ExitStack() as stack: loras = [ (context.services.model_manager.get_model(**lora.dict(exclude={"weight"})).context.model, lora.weight) for lora in self.clip.loras @@ -76,18 +82,14 @@ class ONNXPromptInvocation(BaseInvocation): name = trigger[1:-1] try: ti_list.append( - # stack.enter_context( - # context.services.model_manager.get_model( - # model_name=name, - # base_model=self.clip.text_encoder.base_model, - # model_type=ModelType.TextualInversion, - # ) - # ) - context.services.model_manager.get_model( - model_name=name, - base_model=self.clip.text_encoder.base_model, - model_type=ModelType.TextualInversion, - ).context.model + ( + name, + context.services.model_manager.get_model( + model_name=name, + base_model=self.clip.text_encoder.base_model, + model_type=ModelType.TextualInversion, + ).context.model, + ) ) except Exception: # print(e) @@ -131,7 +133,7 @@ class ONNXPromptInvocation(BaseInvocation): # TODO: hacky but works ;D maybe rename latents somehow? context.services.latents.save(conditioning_name, (prompt_embeds, None)) - return CompelOutput( + return ConditioningOutput( conditioning=ConditioningField( conditioning_name=conditioning_name, ), @@ -139,25 +141,48 @@ class ONNXPromptInvocation(BaseInvocation): # Text to image +@title("ONNX Text to Latents") +@tags("latents", "inference", "txt2img", "onnx") class ONNXTextToLatentsInvocation(BaseInvocation): """Generates latents from conditionings.""" type: Literal["t2l_onnx"] = "t2l_onnx" # Inputs - # fmt: off - positive_conditioning: Optional[ConditioningField] = Field(description="Positive conditioning for generation") - negative_conditioning: Optional[ConditioningField] = Field(description="Negative conditioning for generation") - noise: Optional[LatentsField] = Field(description="The noise to use") - steps: int = Field(default=10, gt=0, description="The number of steps to use to generate the image") - cfg_scale: Union[float, List[float]] = Field(default=7.5, ge=1, description="The Classifier-Free Guidance, higher values may result in a result closer to the prompt", ) - scheduler: SAMPLER_NAME_VALUES = Field(default="euler", description="The scheduler to use" ) - precision: PRECISION_VALUES = Field(default = "tensor(float16)", description="The precision to use when generating latents") - unet: UNetField = Field(default=None, description="UNet submodel") - control: Union[ControlField, list[ControlField]] = Field(default=None, description="The control to use") - # seamless: bool = Field(default=False, description="Whether or not to generate an image that can tile without seams", ) - # seamless_axes: str = Field(default="", description="The axes to tile the image on, 'x' and/or 'y'") - # fmt: on + positive_conditioning: ConditioningField = InputField( + description=FieldDescriptions.positive_cond, + input=Input.Connection, + ) + negative_conditioning: ConditioningField = InputField( + description=FieldDescriptions.negative_cond, + input=Input.Connection, + ) + noise: LatentsField = InputField( + description=FieldDescriptions.noise, + input=Input.Connection, + ) + steps: int = InputField(default=10, gt=0, description=FieldDescriptions.steps) + cfg_scale: Union[float, List[float]] = InputField( + default=7.5, + ge=1, + description=FieldDescriptions.cfg_scale, + ui_type=UIType.Float, + ) + scheduler: SAMPLER_NAME_VALUES = InputField( + default="euler", description=FieldDescriptions.scheduler, input=Input.Direct + ) + precision: PRECISION_VALUES = InputField(default="tensor(float16)", description=FieldDescriptions.precision) + unet: UNetField = InputField( + description=FieldDescriptions.unet, + input=Input.Connection, + ) + control: Optional[Union[ControlField, list[ControlField]]] = InputField( + default=None, + description=FieldDescriptions.control, + ui_type=UIType.Control, + ) + # seamless: bool = InputField(default=False, description="Whether or not to generate an image that can tile without seams", ) + # seamless_axes: str = InputField(default="", description="The axes to tile the image on, 'x' and/or 'y'") @validator("cfg_scale") def ge_one(cls, v): @@ -171,20 +196,6 @@ class ONNXTextToLatentsInvocation(BaseInvocation): raise ValueError("cfg_scale must be greater than 1") return v - # Schema customisation - class Config(InvocationConfig): - schema_extra = { - "ui": { - "tags": ["latents"], - "type_hints": { - "model": "model", - "control": "control", - # "cfg_scale": "float", - "cfg_scale": "number", - }, - }, - } - # based on # https://github.com/huggingface/diffusers/blob/3ebbaf7c96801271f9e6c21400033b6aa5ffcf29/src/diffusers/pipelines/stable_diffusion/pipeline_onnx_stable_diffusion.py#L375 def invoke(self, context: InvocationContext) -> LatentsOutput: @@ -217,6 +228,7 @@ class ONNXTextToLatentsInvocation(BaseInvocation): context=context, scheduler_info=self.unet.scheduler, scheduler_name=self.scheduler, + seed=0, # TODO: refactor this node ) def torch2numpy(latent: torch.Tensor): @@ -246,7 +258,7 @@ class ONNXTextToLatentsInvocation(BaseInvocation): unet_info = context.services.model_manager.get_model(**self.unet.unet.dict()) - with unet_info as unet, ExitStack() as stack: + with unet_info as unet: # , ExitStack() as stack: # loras = [(stack.enter_context(context.services.model_manager.get_model(**lora.dict(exclude={"weight"}))), lora.weight) for lora in self.unet.loras] loras = [ (context.services.model_manager.get_model(**lora.dict(exclude={"weight"})).context.model, lora.weight) @@ -304,26 +316,28 @@ class ONNXTextToLatentsInvocation(BaseInvocation): # Latent to image +@title("ONNX Latents to Image") +@tags("latents", "image", "vae", "onnx") class ONNXLatentsToImageInvocation(BaseInvocation): """Generates an image from latents.""" type: Literal["l2i_onnx"] = "l2i_onnx" # Inputs - latents: Optional[LatentsField] = Field(description="The latents to generate an image from") - vae: VaeField = Field(default=None, description="Vae submodel") - metadata: Optional[CoreMetadata] = Field( - default=None, description="Optional core metadata to be written to the image" + latents: LatentsField = InputField( + description=FieldDescriptions.denoised_latents, + input=Input.Connection, ) - # tiled: bool = Field(default=False, description="Decode latents by overlaping tiles(less memory consumption)") - - # Schema customisation - class Config(InvocationConfig): - schema_extra = { - "ui": { - "tags": ["latents", "image"], - }, - } + vae: VaeField = InputField( + description=FieldDescriptions.vae, + input=Input.Connection, + ) + metadata: Optional[CoreMetadata] = InputField( + default=None, + description=FieldDescriptions.core_metadata, + ui_hidden=True, + ) + # tiled: bool = InputField(default=False, description="Decode latents by overlaping tiles(less memory consumption)") def invoke(self, context: InvocationContext) -> ImageOutput: latents = context.services.latents.get(self.latents.latents_name) @@ -377,89 +391,13 @@ class ONNXModelLoaderOutput(BaseInvocationOutput): # fmt: off type: Literal["model_loader_output_onnx"] = "model_loader_output_onnx" - unet: UNetField = Field(default=None, description="UNet submodel") - clip: ClipField = Field(default=None, description="Tokenizer and text_encoder submodels") - vae_decoder: VaeField = Field(default=None, description="Vae submodel") - vae_encoder: VaeField = Field(default=None, description="Vae submodel") + unet: UNetField = OutputField(default=None, description=FieldDescriptions.unet, title="UNet") + clip: ClipField = OutputField(default=None, description=FieldDescriptions.clip, title="CLIP") + vae_decoder: VaeField = OutputField(default=None, description=FieldDescriptions.vae, title="VAE Decoder") + vae_encoder: VaeField = OutputField(default=None, description=FieldDescriptions.vae, title="VAE Encoder") # fmt: on -class ONNXSD1ModelLoaderInvocation(BaseInvocation): - """Loading submodels of selected model.""" - - type: Literal["sd1_model_loader_onnx"] = "sd1_model_loader_onnx" - - model_name: str = Field(default="", description="Model to load") - # TODO: precision? - - # Schema customisation - class Config(InvocationConfig): - schema_extra = { - "ui": {"tags": ["model", "loader"], "type_hints": {"model_name": "model"}}, # TODO: rename to model_name? - } - - def invoke(self, context: InvocationContext) -> ONNXModelLoaderOutput: - model_name = "stable-diffusion-v1-5" - base_model = BaseModelType.StableDiffusion1 - - # TODO: not found exceptions - if not context.services.model_manager.model_exists( - model_name=model_name, - base_model=BaseModelType.StableDiffusion1, - model_type=ModelType.ONNX, - ): - raise Exception(f"Unkown model name: {model_name}!") - - return ONNXModelLoaderOutput( - unet=UNetField( - unet=ModelInfo( - model_name=model_name, - base_model=base_model, - model_type=ModelType.ONNX, - submodel=SubModelType.UNet, - ), - scheduler=ModelInfo( - model_name=model_name, - base_model=base_model, - model_type=ModelType.ONNX, - submodel=SubModelType.Scheduler, - ), - loras=[], - ), - clip=ClipField( - tokenizer=ModelInfo( - model_name=model_name, - base_model=base_model, - model_type=ModelType.ONNX, - submodel=SubModelType.Tokenizer, - ), - text_encoder=ModelInfo( - model_name=model_name, - base_model=base_model, - model_type=ModelType.ONNX, - submodel=SubModelType.TextEncoder, - ), - loras=[], - ), - vae_decoder=VaeField( - vae=ModelInfo( - model_name=model_name, - base_model=base_model, - model_type=ModelType.ONNX, - submodel=SubModelType.VaeDecoder, - ), - ), - vae_encoder=VaeField( - vae=ModelInfo( - model_name=model_name, - base_model=base_model, - model_type=ModelType.ONNX, - submodel=SubModelType.VaeEncoder, - ), - ), - ) - - class OnnxModelField(BaseModel): """Onnx model field""" @@ -468,22 +406,17 @@ class OnnxModelField(BaseModel): model_type: ModelType = Field(description="Model Type") +@title("ONNX Model Loader") +@tags("onnx", "model") class OnnxModelLoaderInvocation(BaseInvocation): """Loads a main model, outputting its submodels.""" type: Literal["onnx_model_loader"] = "onnx_model_loader" - model: OnnxModelField = Field(description="The model to load") - - # Schema customisation - class Config(InvocationConfig): - schema_extra = { - "ui": { - "title": "Onnx Model Loader", - "tags": ["model", "loader"], - "type_hints": {"model": "model"}, - }, - } + # Inputs + model: OnnxModelField = InputField( + description=FieldDescriptions.onnx_main_model, input=Input.Direct, ui_type=UIType.ONNXModel + ) def invoke(self, context: InvocationContext) -> ONNXModelLoaderOutput: base_model = self.model.base_model diff --git a/invokeai/app/invocations/param_easing.py b/invokeai/app/invocations/param_easing.py index f910e5379c..70baa85817 100644 --- a/invokeai/app/invocations/param_easing.py +++ b/invokeai/app/invocations/param_easing.py @@ -1,73 +1,61 @@ import io -from typing import Literal, Optional, Any +from typing import Literal, Optional -# from PIL.Image import Image -import PIL.Image -from matplotlib.ticker import MaxNLocator -from matplotlib.figure import Figure - -from pydantic import BaseModel, Field -import numpy as np import matplotlib.pyplot as plt +import numpy as np +import PIL.Image from easing_functions import ( - LinearInOut, - QuadEaseInOut, - QuadEaseIn, - QuadEaseOut, - CubicEaseInOut, - CubicEaseIn, - CubicEaseOut, - QuarticEaseInOut, - QuarticEaseIn, - QuarticEaseOut, - QuinticEaseInOut, - QuinticEaseIn, - QuinticEaseOut, - SineEaseInOut, - SineEaseIn, - SineEaseOut, - CircularEaseIn, - CircularEaseInOut, - CircularEaseOut, - ExponentialEaseInOut, - ExponentialEaseIn, - ExponentialEaseOut, - ElasticEaseIn, - ElasticEaseInOut, - ElasticEaseOut, BackEaseIn, BackEaseInOut, BackEaseOut, BounceEaseIn, BounceEaseInOut, BounceEaseOut, + CircularEaseIn, + CircularEaseInOut, + CircularEaseOut, + CubicEaseIn, + CubicEaseInOut, + CubicEaseOut, + ElasticEaseIn, + ElasticEaseInOut, + ElasticEaseOut, + ExponentialEaseIn, + ExponentialEaseInOut, + ExponentialEaseOut, + LinearInOut, + QuadEaseIn, + QuadEaseInOut, + QuadEaseOut, + QuarticEaseIn, + QuarticEaseInOut, + QuarticEaseOut, + QuinticEaseIn, + QuinticEaseInOut, + QuinticEaseOut, + SineEaseIn, + SineEaseInOut, + SineEaseOut, ) +from matplotlib.ticker import MaxNLocator -from .baseinvocation import ( - BaseInvocation, - BaseInvocationOutput, - InvocationContext, - InvocationConfig, -) -from ...backend.util.logging import InvokeAILogger -from .collections import FloatCollectionOutput +from invokeai.app.invocations.primitives import FloatCollectionOutput + +from .baseinvocation import BaseInvocation, InputField, InvocationContext, tags, title +@title("Float Range") +@tags("math", "range") class FloatLinearRangeInvocation(BaseInvocation): """Creates a range""" type: Literal["float_range"] = "float_range" # Inputs - start: float = Field(default=5, description="The first value of the range") - stop: float = Field(default=10, description="The last value of the range") - steps: int = Field(default=30, description="number of values to interpolate over (including start and stop)") - - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Linear Range (Float)", "tags": ["math", "float", "linear", "range"]}, - } + start: float = InputField(default=5, description="The first value of the range") + stop: float = InputField(default=10, description="The last value of the range") + steps: int = InputField(default=30, description="number of values to interpolate over (including start and stop)") def invoke(self, context: InvocationContext) -> FloatCollectionOutput: param_list = list(np.linspace(self.start, self.stop, self.steps)) @@ -108,37 +96,32 @@ EASING_FUNCTIONS_MAP = { "BounceInOut": BounceEaseInOut, } -EASING_FUNCTION_KEYS: Any = Literal[tuple(list(EASING_FUNCTIONS_MAP.keys()))] +EASING_FUNCTION_KEYS = Literal[tuple(list(EASING_FUNCTIONS_MAP.keys()))] # actually I think for now could just use CollectionOutput (which is list[Any] +@title("Step Param Easing") +@tags("step", "easing") class StepParamEasingInvocation(BaseInvocation): """Experimental per-step parameter easing for denoising steps""" type: Literal["step_param_easing"] = "step_param_easing" # Inputs - # fmt: off - easing: EASING_FUNCTION_KEYS = Field(default="Linear", description="The easing function to use") - num_steps: int = Field(default=20, description="number of denoising steps") - start_value: float = Field(default=0.0, description="easing starting value") - end_value: float = Field(default=1.0, description="easing ending value") - start_step_percent: float = Field(default=0.0, description="fraction of steps at which to start easing") - end_step_percent: float = Field(default=1.0, description="fraction of steps after which to end easing") + easing: EASING_FUNCTION_KEYS = InputField(default="Linear", description="The easing function to use") + num_steps: int = InputField(default=20, description="number of denoising steps") + start_value: float = InputField(default=0.0, description="easing starting value") + end_value: float = InputField(default=1.0, description="easing ending value") + start_step_percent: float = InputField(default=0.0, description="fraction of steps at which to start easing") + end_step_percent: float = InputField(default=1.0, description="fraction of steps after which to end easing") # if None, then start_value is used prior to easing start - pre_start_value: Optional[float] = Field(default=None, description="value before easing start") + pre_start_value: Optional[float] = InputField(default=None, description="value before easing start") # if None, then end value is used prior to easing end - post_end_value: Optional[float] = Field(default=None, description="value after easing end") - mirror: bool = Field(default=False, description="include mirror of easing function") + post_end_value: Optional[float] = InputField(default=None, description="value after easing end") + mirror: bool = InputField(default=False, description="include mirror of easing function") # FIXME: add alt_mirror option (alternative to default or mirror), or remove entirely - # alt_mirror: bool = Field(default=False, description="alternative mirroring by dual easing") - show_easing_plot: bool = Field(default=False, description="show easing plot") - # fmt: on - - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Param Easing By Step", "tags": ["param", "step", "easing"]}, - } + # alt_mirror: bool = InputField(default=False, description="alternative mirroring by dual easing") + show_easing_plot: bool = InputField(default=False, description="show easing plot") def invoke(self, context: InvocationContext) -> FloatCollectionOutput: log_diagnostics = False diff --git a/invokeai/app/invocations/params.py b/invokeai/app/invocations/params.py deleted file mode 100644 index 513eb8762f..0000000000 --- a/invokeai/app/invocations/params.py +++ /dev/null @@ -1,83 +0,0 @@ -# Copyright (c) 2023 Kyle Schouviller (https://github.com/kyle0654) - -from typing import Literal - -from pydantic import Field - -from invokeai.app.invocations.prompt import PromptOutput - -from .baseinvocation import BaseInvocation, BaseInvocationOutput, InvocationConfig, InvocationContext -from .math import FloatOutput, IntOutput - -# Pass-through parameter nodes - used by subgraphs - - -class ParamIntInvocation(BaseInvocation): - """An integer parameter""" - - # fmt: off - type: Literal["param_int"] = "param_int" - a: int = Field(default=0, description="The integer value") - # fmt: on - - class Config(InvocationConfig): - schema_extra = { - "ui": {"tags": ["param", "integer"], "title": "Integer Parameter"}, - } - - def invoke(self, context: InvocationContext) -> IntOutput: - return IntOutput(a=self.a) - - -class ParamFloatInvocation(BaseInvocation): - """A float parameter""" - - # fmt: off - type: Literal["param_float"] = "param_float" - param: float = Field(default=0.0, description="The float value") - # fmt: on - - class Config(InvocationConfig): - schema_extra = { - "ui": {"tags": ["param", "float"], "title": "Float Parameter"}, - } - - def invoke(self, context: InvocationContext) -> FloatOutput: - return FloatOutput(param=self.param) - - -class StringOutput(BaseInvocationOutput): - """A string output""" - - type: Literal["string_output"] = "string_output" - text: str = Field(default=None, description="The output string") - - -class ParamStringInvocation(BaseInvocation): - """A string parameter""" - - type: Literal["param_string"] = "param_string" - text: str = Field(default="", description="The string value") - - class Config(InvocationConfig): - schema_extra = { - "ui": {"tags": ["param", "string"], "title": "String Parameter"}, - } - - def invoke(self, context: InvocationContext) -> StringOutput: - return StringOutput(text=self.text) - - -class ParamPromptInvocation(BaseInvocation): - """A prompt input parameter""" - - type: Literal["param_prompt"] = "param_prompt" - prompt: str = Field(default="", description="The prompt value") - - class Config(InvocationConfig): - schema_extra = { - "ui": {"tags": ["param", "prompt"], "title": "Prompt"}, - } - - def invoke(self, context: InvocationContext) -> PromptOutput: - return PromptOutput(prompt=self.prompt) diff --git a/invokeai/app/invocations/primitives.py b/invokeai/app/invocations/primitives.py new file mode 100644 index 0000000000..f32cb14f3a --- /dev/null +++ b/invokeai/app/invocations/primitives.py @@ -0,0 +1,493 @@ +# Copyright (c) 2023 Kyle Schouviller (https://github.com/kyle0654) + +from typing import Literal, Optional, Tuple + +from pydantic import BaseModel, Field +import torch + +from .baseinvocation import ( + BaseInvocation, + BaseInvocationOutput, + FieldDescriptions, + Input, + InputField, + InvocationContext, + OutputField, + UIComponent, + UIType, + tags, + title, +) + +""" +Primitives: Boolean, Integer, Float, String, Image, Latents, Conditioning, Color +- primitive nodes +- primitive outputs +- primitive collection outputs +""" + +# region Boolean + + +class BooleanOutput(BaseInvocationOutput): + """Base class for nodes that output a single boolean""" + + type: Literal["boolean_output"] = "boolean_output" + a: bool = OutputField(description="The output boolean") + + +class BooleanCollectionOutput(BaseInvocationOutput): + """Base class for nodes that output a collection of booleans""" + + type: Literal["boolean_collection_output"] = "boolean_collection_output" + + # Outputs + collection: list[bool] = OutputField( + default_factory=list, description="The output boolean collection", ui_type=UIType.BooleanCollection + ) + + +@title("Boolean Primitive") +@tags("primitives", "boolean") +class BooleanInvocation(BaseInvocation): + """A boolean primitive value""" + + type: Literal["boolean"] = "boolean" + + # Inputs + a: bool = InputField(default=False, description="The boolean value") + + def invoke(self, context: InvocationContext) -> BooleanOutput: + return BooleanOutput(a=self.a) + + +@title("Boolean Primitive Collection") +@tags("primitives", "boolean", "collection") +class BooleanCollectionInvocation(BaseInvocation): + """A collection of boolean primitive values""" + + type: Literal["boolean_collection"] = "boolean_collection" + + # Inputs + collection: list[bool] = InputField( + default=False, description="The collection of boolean values", ui_type=UIType.BooleanCollection + ) + + def invoke(self, context: InvocationContext) -> BooleanCollectionOutput: + return BooleanCollectionOutput(collection=self.collection) + + +# endregion + +# region Integer + + +class IntegerOutput(BaseInvocationOutput): + """Base class for nodes that output a single integer""" + + type: Literal["integer_output"] = "integer_output" + a: int = OutputField(description="The output integer") + + +class IntegerCollectionOutput(BaseInvocationOutput): + """Base class for nodes that output a collection of integers""" + + type: Literal["integer_collection_output"] = "integer_collection_output" + + # Outputs + collection: list[int] = OutputField( + default_factory=list, description="The int collection", ui_type=UIType.IntegerCollection + ) + + +@title("Integer Primitive") +@tags("primitives", "integer") +class IntegerInvocation(BaseInvocation): + """An integer primitive value""" + + type: Literal["integer"] = "integer" + + # Inputs + a: int = InputField(default=0, description="The integer value") + + def invoke(self, context: InvocationContext) -> IntegerOutput: + return IntegerOutput(a=self.a) + + +@title("Integer Primitive Collection") +@tags("primitives", "integer", "collection") +class IntegerCollectionInvocation(BaseInvocation): + """A collection of integer primitive values""" + + type: Literal["integer_collection"] = "integer_collection" + + # Inputs + collection: list[int] = InputField( + default=0, description="The collection of integer values", ui_type=UIType.IntegerCollection + ) + + def invoke(self, context: InvocationContext) -> IntegerCollectionOutput: + return IntegerCollectionOutput(collection=self.collection) + + +# endregion + +# region Float + + +class FloatOutput(BaseInvocationOutput): + """Base class for nodes that output a single float""" + + type: Literal["float_output"] = "float_output" + a: float = OutputField(description="The output float") + + +class FloatCollectionOutput(BaseInvocationOutput): + """Base class for nodes that output a collection of floats""" + + type: Literal["float_collection_output"] = "float_collection_output" + + # Outputs + collection: list[float] = OutputField( + default_factory=list, description="The float collection", ui_type=UIType.FloatCollection + ) + + +@title("Float Primitive") +@tags("primitives", "float") +class FloatInvocation(BaseInvocation): + """A float primitive value""" + + type: Literal["float"] = "float" + + # Inputs + param: float = InputField(default=0.0, description="The float value") + + def invoke(self, context: InvocationContext) -> FloatOutput: + return FloatOutput(a=self.param) + + +@title("Float Primitive Collection") +@tags("primitives", "float", "collection") +class FloatCollectionInvocation(BaseInvocation): + """A collection of float primitive values""" + + type: Literal["float_collection"] = "float_collection" + + # Inputs + collection: list[float] = InputField( + default=0, description="The collection of float values", ui_type=UIType.FloatCollection + ) + + def invoke(self, context: InvocationContext) -> FloatCollectionOutput: + return FloatCollectionOutput(collection=self.collection) + + +# endregion + +# region String + + +class StringOutput(BaseInvocationOutput): + """Base class for nodes that output a single string""" + + type: Literal["string_output"] = "string_output" + text: str = OutputField(description="The output string") + + +class StringCollectionOutput(BaseInvocationOutput): + """Base class for nodes that output a collection of strings""" + + type: Literal["string_collection_output"] = "string_collection_output" + + # Outputs + collection: list[str] = OutputField( + default_factory=list, description="The output strings", ui_type=UIType.StringCollection + ) + + +@title("String Primitive") +@tags("primitives", "string") +class StringInvocation(BaseInvocation): + """A string primitive value""" + + type: Literal["string"] = "string" + + # Inputs + text: str = InputField(default="", description="The string value", ui_component=UIComponent.Textarea) + + def invoke(self, context: InvocationContext) -> StringOutput: + return StringOutput(text=self.text) + + +@title("String Primitive Collection") +@tags("primitives", "string", "collection") +class StringCollectionInvocation(BaseInvocation): + """A collection of string primitive values""" + + type: Literal["string_collection"] = "string_collection" + + # Inputs + collection: list[str] = InputField( + default=0, description="The collection of string values", ui_type=UIType.StringCollection + ) + + def invoke(self, context: InvocationContext) -> StringCollectionOutput: + return StringCollectionOutput(collection=self.collection) + + +# endregion + +# region Image + + +class ImageField(BaseModel): + """An image primitive field""" + + image_name: str = Field(description="The name of the image") + + +class ImageOutput(BaseInvocationOutput): + """Base class for nodes that output a single image""" + + type: Literal["image_output"] = "image_output" + image: ImageField = OutputField(description="The output image") + width: int = OutputField(description="The width of the image in pixels") + height: int = OutputField(description="The height of the image in pixels") + + +class ImageCollectionOutput(BaseInvocationOutput): + """Base class for nodes that output a collection of images""" + + type: Literal["image_collection_output"] = "image_collection_output" + + # Outputs + collection: list[ImageField] = OutputField( + default_factory=list, description="The output images", ui_type=UIType.ImageCollection + ) + + +@title("Image Primitive") +@tags("primitives", "image") +class ImageInvocation(BaseInvocation): + """An image primitive value""" + + # Metadata + type: Literal["image"] = "image" + + # Inputs + image: ImageField = InputField(description="The image to load") + + def invoke(self, context: InvocationContext) -> ImageOutput: + image = context.services.images.get_pil_image(self.image.image_name) + + return ImageOutput( + image=ImageField(image_name=self.image.image_name), + width=image.width, + height=image.height, + ) + + +@title("Image Primitive Collection") +@tags("primitives", "image", "collection") +class ImageCollectionInvocation(BaseInvocation): + """A collection of image primitive values""" + + type: Literal["image_collection"] = "image_collection" + + # Inputs + collection: list[ImageField] = InputField( + default=0, description="The collection of image values", ui_type=UIType.ImageCollection + ) + + def invoke(self, context: InvocationContext) -> ImageCollectionOutput: + return ImageCollectionOutput(collection=self.collection) + + +# endregion + +# region Latents + + +class LatentsField(BaseModel): + """A latents tensor primitive field""" + + latents_name: str = Field(description="The name of the latents") + seed: Optional[int] = Field(default=None, description="Seed used to generate this latents") + + +class LatentsOutput(BaseInvocationOutput): + """Base class for nodes that output a single latents tensor""" + + type: Literal["latents_output"] = "latents_output" + + latents: LatentsField = OutputField( + description=FieldDescriptions.latents, + ) + width: int = OutputField(description=FieldDescriptions.width) + height: int = OutputField(description=FieldDescriptions.height) + + +class LatentsCollectionOutput(BaseInvocationOutput): + """Base class for nodes that output a collection of latents tensors""" + + type: Literal["latents_collection_output"] = "latents_collection_output" + + collection: list[LatentsField] = OutputField( + default_factory=list, + description=FieldDescriptions.latents, + ui_type=UIType.LatentsCollection, + ) + + +@title("Latents Primitive") +@tags("primitives", "latents") +class LatentsInvocation(BaseInvocation): + """A latents tensor primitive value""" + + type: Literal["latents"] = "latents" + + # Inputs + latents: LatentsField = InputField(description="The latents tensor", input=Input.Connection) + + def invoke(self, context: InvocationContext) -> LatentsOutput: + latents = context.services.latents.get(self.latents.latents_name) + + return build_latents_output(self.latents.latents_name, latents) + + +@title("Latents Primitive Collection") +@tags("primitives", "latents", "collection") +class LatentsCollectionInvocation(BaseInvocation): + """A collection of latents tensor primitive values""" + + type: Literal["latents_collection"] = "latents_collection" + + # Inputs + collection: list[LatentsField] = InputField( + default=0, description="The collection of latents tensors", ui_type=UIType.LatentsCollection + ) + + def invoke(self, context: InvocationContext) -> LatentsCollectionOutput: + return LatentsCollectionOutput(collection=self.collection) + + +def build_latents_output(latents_name: str, latents: torch.Tensor, seed: Optional[int] = None): + return LatentsOutput( + latents=LatentsField(latents_name=latents_name, seed=seed), + width=latents.size()[3] * 8, + height=latents.size()[2] * 8, + ) + + +# endregion + +# region Color + + +class ColorField(BaseModel): + """A color primitive field""" + + r: int = Field(ge=0, le=255, description="The red component") + g: int = Field(ge=0, le=255, description="The green component") + b: int = Field(ge=0, le=255, description="The blue component") + a: int = Field(ge=0, le=255, description="The alpha component") + + def tuple(self) -> Tuple[int, int, int, int]: + return (self.r, self.g, self.b, self.a) + + +class ColorOutput(BaseInvocationOutput): + """Base class for nodes that output a single color""" + + type: Literal["color_output"] = "color_output" + color: ColorField = OutputField(description="The output color") + + +class ColorCollectionOutput(BaseInvocationOutput): + """Base class for nodes that output a collection of colors""" + + type: Literal["color_collection_output"] = "color_collection_output" + + # Outputs + collection: list[ColorField] = OutputField( + default_factory=list, description="The output colors", ui_type=UIType.ColorCollection + ) + + +@title("Color Primitive") +@tags("primitives", "color") +class ColorInvocation(BaseInvocation): + """A color primitive value""" + + type: Literal["color"] = "color" + + # Inputs + color: ColorField = InputField(default=ColorField(r=0, g=0, b=0, a=255), description="The color value") + + def invoke(self, context: InvocationContext) -> ColorOutput: + return ColorOutput(color=self.color) + + +# endregion + +# region Conditioning + + +class ConditioningField(BaseModel): + """A conditioning tensor primitive value""" + + conditioning_name: str = Field(description="The name of conditioning tensor") + + +class ConditioningOutput(BaseInvocationOutput): + """Base class for nodes that output a single conditioning tensor""" + + type: Literal["conditioning_output"] = "conditioning_output" + + conditioning: ConditioningField = OutputField(description=FieldDescriptions.cond) + + +class ConditioningCollectionOutput(BaseInvocationOutput): + """Base class for nodes that output a collection of conditioning tensors""" + + type: Literal["conditioning_collection_output"] = "conditioning_collection_output" + + # Outputs + collection: list[ConditioningField] = OutputField( + default_factory=list, + description="The output conditioning tensors", + ui_type=UIType.ConditioningCollection, + ) + + +@title("Conditioning Primitive") +@tags("primitives", "conditioning") +class ConditioningInvocation(BaseInvocation): + """A conditioning tensor primitive value""" + + type: Literal["conditioning"] = "conditioning" + + conditioning: ConditioningField = InputField(description=FieldDescriptions.cond, input=Input.Connection) + + def invoke(self, context: InvocationContext) -> ConditioningOutput: + return ConditioningOutput(conditioning=self.conditioning) + + +@title("Conditioning Primitive Collection") +@tags("primitives", "conditioning", "collection") +class ConditioningCollectionInvocation(BaseInvocation): + """A collection of conditioning tensor primitive values""" + + type: Literal["conditioning_collection"] = "conditioning_collection" + + # Inputs + collection: list[ConditioningField] = InputField( + default=0, description="The collection of conditioning tensors", ui_type=UIType.ConditioningCollection + ) + + def invoke(self, context: InvocationContext) -> ConditioningCollectionOutput: + return ConditioningCollectionOutput(collection=self.collection) + + +# endregion diff --git a/invokeai/app/invocations/prompt.py b/invokeai/app/invocations/prompt.py index 83a397ddcf..acdb821456 100644 --- a/invokeai/app/invocations/prompt.py +++ b/invokeai/app/invocations/prompt.py @@ -1,59 +1,28 @@ from os.path import exists -from typing import Literal, Optional +from typing import Literal, Optional, Union import numpy as np -from pydantic import Field, validator +from dynamicprompts.generators import CombinatorialPromptGenerator, RandomPromptGenerator +from pydantic import validator -from .baseinvocation import BaseInvocation, BaseInvocationOutput, InvocationConfig, InvocationContext -from dynamicprompts.generators import RandomPromptGenerator, CombinatorialPromptGenerator - - -class PromptOutput(BaseInvocationOutput): - """Base class for invocations that output a prompt""" - - # fmt: off - type: Literal["prompt"] = "prompt" - - prompt: str = Field(default=None, description="The output prompt") - # fmt: on - - class Config: - schema_extra = { - "required": [ - "type", - "prompt", - ] - } - - -class PromptCollectionOutput(BaseInvocationOutput): - """Base class for invocations that output a collection of prompts""" - - # fmt: off - type: Literal["prompt_collection_output"] = "prompt_collection_output" - - prompt_collection: list[str] = Field(description="The output prompt collection") - count: int = Field(description="The size of the prompt collection") - # fmt: on - - class Config: - schema_extra = {"required": ["type", "prompt_collection", "count"]} +from invokeai.app.invocations.primitives import StringCollectionOutput + +from .baseinvocation import BaseInvocation, InputField, InvocationContext, UIComponent, UIType, tags, title +@title("Dynamic Prompt") +@tags("prompt", "collection") class DynamicPromptInvocation(BaseInvocation): """Parses a prompt using adieyal/dynamicprompts' random or combinatorial generator""" type: Literal["dynamic_prompt"] = "dynamic_prompt" - prompt: str = Field(description="The prompt to parse with dynamicprompts") - max_prompts: int = Field(default=1, description="The number of prompts to generate") - combinatorial: bool = Field(default=False, description="Whether to use the combinatorial generator") - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Dynamic Prompt", "tags": ["prompt", "dynamic"]}, - } + # Inputs + prompt: str = InputField(description="The prompt to parse with dynamicprompts", ui_component=UIComponent.Textarea) + max_prompts: int = InputField(default=1, description="The number of prompts to generate") + combinatorial: bool = InputField(default=False, description="Whether to use the combinatorial generator") - def invoke(self, context: InvocationContext) -> PromptCollectionOutput: + def invoke(self, context: InvocationContext) -> StringCollectionOutput: if self.combinatorial: generator = CombinatorialPromptGenerator() prompts = generator.generate(self.prompt, max_prompts=self.max_prompts) @@ -61,27 +30,26 @@ class DynamicPromptInvocation(BaseInvocation): generator = RandomPromptGenerator() prompts = generator.generate(self.prompt, num_images=self.max_prompts) - return PromptCollectionOutput(prompt_collection=prompts, count=len(prompts)) + return StringCollectionOutput(collection=prompts) +@title("Prompts from File") +@tags("prompt", "file") class PromptsFromFileInvocation(BaseInvocation): """Loads prompts from a text file""" - # fmt: off - type: Literal['prompt_from_file'] = 'prompt_from_file' + type: Literal["prompt_from_file"] = "prompt_from_file" # Inputs - file_path: str = Field(description="Path to prompt text file") - pre_prompt: Optional[str] = Field(description="String to prepend to each prompt") - post_prompt: Optional[str] = Field(description="String to append to each prompt") - start_line: int = Field(default=1, ge=1, description="Line in the file to start start from") - max_prompts: int = Field(default=1, ge=0, description="Max lines to read from file (0=all)") - # fmt: on - - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Prompts From File", "tags": ["prompt", "file"]}, - } + file_path: str = InputField(description="Path to prompt text file", ui_type=UIType.FilePath) + pre_prompt: Optional[str] = InputField( + default=None, description="String to prepend to each prompt", ui_component=UIComponent.Textarea + ) + post_prompt: Optional[str] = InputField( + default=None, description="String to append to each prompt", ui_component=UIComponent.Textarea + ) + start_line: int = InputField(default=1, ge=1, description="Line in the file to start start from") + max_prompts: int = InputField(default=1, ge=0, description="Max lines to read from file (0=all)") @validator("file_path") def file_path_exists(cls, v): @@ -89,7 +57,14 @@ class PromptsFromFileInvocation(BaseInvocation): raise ValueError(FileNotFoundError) return v - def promptsFromFile(self, file_path: str, pre_prompt: str, post_prompt: str, start_line: int, max_prompts: int): + def promptsFromFile( + self, + file_path: str, + pre_prompt: Union[str, None], + post_prompt: Union[str, None], + start_line: int, + max_prompts: int, + ): prompts = [] start_line -= 1 end_line = start_line + max_prompts @@ -103,8 +78,8 @@ class PromptsFromFileInvocation(BaseInvocation): break return prompts - def invoke(self, context: InvocationContext) -> PromptCollectionOutput: + def invoke(self, context: InvocationContext) -> StringCollectionOutput: prompts = self.promptsFromFile( self.file_path, self.pre_prompt, self.post_prompt, self.start_line, self.max_prompts ) - return PromptCollectionOutput(prompt_collection=prompts, count=len(prompts)) + return StringCollectionOutput(collection=prompts) diff --git a/invokeai/app/invocations/sdxl.py b/invokeai/app/invocations/sdxl.py index 7dfceba853..4efe30a3d9 100644 --- a/invokeai/app/invocations/sdxl.py +++ b/invokeai/app/invocations/sdxl.py @@ -1,62 +1,55 @@ -import torch -import inspect -from tqdm import tqdm -from typing import List, Literal, Optional, Union - -from pydantic import Field, validator +from typing import Literal from ...backend.model_management import ModelType, SubModelType -from invokeai.app.util.step_callback import stable_diffusion_xl_step_callback -from .baseinvocation import BaseInvocation, BaseInvocationOutput, InvocationConfig, InvocationContext - -from .model import UNetField, ClipField, VaeField, MainModelField, ModelInfo -from .compel import ConditioningField -from .latent import LatentsField, SAMPLER_NAME_VALUES, LatentsOutput, get_scheduler, build_latents_output +from .baseinvocation import ( + BaseInvocation, + BaseInvocationOutput, + FieldDescriptions, + Input, + InputField, + InvocationContext, + OutputField, + UIType, + tags, + title, +) +from .model import ClipField, MainModelField, ModelInfo, UNetField, VaeField class SDXLModelLoaderOutput(BaseInvocationOutput): """SDXL base model loader output""" - # fmt: off type: Literal["sdxl_model_loader_output"] = "sdxl_model_loader_output" - unet: UNetField = Field(default=None, description="UNet submodel") - clip: ClipField = Field(default=None, description="Tokenizer and text_encoder submodels") - clip2: ClipField = Field(default=None, description="Tokenizer and text_encoder submodels") - vae: VaeField = Field(default=None, description="Vae submodel") - # fmt: on + unet: UNetField = OutputField(description=FieldDescriptions.unet, title="UNet") + clip: ClipField = OutputField(description=FieldDescriptions.clip, title="CLIP 1") + clip2: ClipField = OutputField(description=FieldDescriptions.clip, title="CLIP 2") + vae: VaeField = OutputField(description=FieldDescriptions.vae, title="VAE") class SDXLRefinerModelLoaderOutput(BaseInvocationOutput): """SDXL refiner model loader output""" - # fmt: off type: Literal["sdxl_refiner_model_loader_output"] = "sdxl_refiner_model_loader_output" - unet: UNetField = Field(default=None, description="UNet submodel") - clip2: ClipField = Field(default=None, description="Tokenizer and text_encoder submodels") - vae: VaeField = Field(default=None, description="Vae submodel") - # fmt: on - # fmt: on + + unet: UNetField = OutputField(description=FieldDescriptions.unet, title="UNet") + clip2: ClipField = OutputField(description=FieldDescriptions.clip, title="CLIP 2") + vae: VaeField = OutputField(description=FieldDescriptions.vae, title="VAE") +@title("SDXL Main Model Loader") +@tags("model", "sdxl") class SDXLModelLoaderInvocation(BaseInvocation): """Loads an sdxl base model, outputting its submodels.""" type: Literal["sdxl_model_loader"] = "sdxl_model_loader" - model: MainModelField = Field(description="The model to load") + # Inputs + model: MainModelField = InputField( + description=FieldDescriptions.sdxl_main_model, input=Input.Direct, ui_type=UIType.SDXLMainModel + ) # TODO: precision? - # Schema customisation - class Config(InvocationConfig): - schema_extra = { - "ui": { - "title": "SDXL Model Loader", - "tags": ["model", "loader", "sdxl"], - "type_hints": {"model": "model"}, - }, - } - def invoke(self, context: InvocationContext) -> SDXLModelLoaderOutput: base_model = self.model.base_model model_name = self.model.model_name @@ -129,24 +122,21 @@ class SDXLModelLoaderInvocation(BaseInvocation): ) +@title("SDXL Refiner Model Loader") +@tags("model", "sdxl", "refiner") class SDXLRefinerModelLoaderInvocation(BaseInvocation): """Loads an sdxl refiner model, outputting its submodels.""" type: Literal["sdxl_refiner_model_loader"] = "sdxl_refiner_model_loader" - model: MainModelField = Field(description="The model to load") + # Inputs + model: MainModelField = InputField( + description=FieldDescriptions.sdxl_refiner_model, + input=Input.Direct, + ui_type=UIType.SDXLRefinerModel, + ) # TODO: precision? - # Schema customisation - class Config(InvocationConfig): - schema_extra = { - "ui": { - "title": "SDXL Refiner Model Loader", - "tags": ["model", "loader", "sdxl_refiner"], - "type_hints": {"model": "refiner_model"}, - }, - } - def invoke(self, context: InvocationContext) -> SDXLRefinerModelLoaderOutput: base_model = self.model.base_model model_name = self.model.model_name @@ -201,506 +191,3 @@ class SDXLRefinerModelLoaderInvocation(BaseInvocation): ), ), ) - - -# Text to image -class SDXLTextToLatentsInvocation(BaseInvocation): - """Generates latents from conditionings.""" - - type: Literal["t2l_sdxl"] = "t2l_sdxl" - - # Inputs - # fmt: off - positive_conditioning: Optional[ConditioningField] = Field(description="Positive conditioning for generation") - negative_conditioning: Optional[ConditioningField] = Field(description="Negative conditioning for generation") - noise: Optional[LatentsField] = Field(description="The noise to use") - steps: int = Field(default=10, gt=0, description="The number of steps to use to generate the image") - cfg_scale: Union[float, List[float]] = Field(default=7.5, ge=1, description="The Classifier-Free Guidance, higher values may result in a result closer to the prompt", ) - scheduler: SAMPLER_NAME_VALUES = Field(default="euler", description="The scheduler to use" ) - unet: UNetField = Field(default=None, description="UNet submodel") - denoising_end: float = Field(default=1.0, gt=0, le=1, description="") - # control: Union[ControlField, list[ControlField]] = Field(default=None, description="The control to use") - # seamless: bool = Field(default=False, description="Whether or not to generate an image that can tile without seams", ) - # seamless_axes: str = Field(default="", description="The axes to tile the image on, 'x' and/or 'y'") - # fmt: on - - @validator("cfg_scale") - def ge_one(cls, v): - """validate that all cfg_scale values are >= 1""" - if isinstance(v, list): - for i in v: - if i < 1: - raise ValueError("cfg_scale must be greater than 1") - else: - if v < 1: - raise ValueError("cfg_scale must be greater than 1") - return v - - # Schema customisation - class Config(InvocationConfig): - schema_extra = { - "ui": { - "title": "SDXL Text To Latents", - "tags": ["latents"], - "type_hints": { - "model": "model", - # "cfg_scale": "float", - "cfg_scale": "number", - }, - }, - } - - def dispatch_progress( - self, - context: InvocationContext, - source_node_id: str, - sample, - step, - total_steps, - ) -> None: - stable_diffusion_xl_step_callback( - context=context, - node=self.dict(), - source_node_id=source_node_id, - sample=sample, - step=step, - total_steps=total_steps, - ) - - # based on - # https://github.com/huggingface/diffusers/blob/3ebbaf7c96801271f9e6c21400033b6aa5ffcf29/src/diffusers/pipelines/stable_diffusion/pipeline_onnx_stable_diffusion.py#L375 - @torch.no_grad() - def invoke(self, context: InvocationContext) -> LatentsOutput: - graph_execution_state = context.services.graph_execution_manager.get(context.graph_execution_state_id) - source_node_id = graph_execution_state.prepared_source_mapping[self.id] - latents = context.services.latents.get(self.noise.latents_name) - - positive_cond_data = context.services.latents.get(self.positive_conditioning.conditioning_name) - prompt_embeds = positive_cond_data.conditionings[0].embeds - pooled_prompt_embeds = positive_cond_data.conditionings[0].pooled_embeds - add_time_ids = positive_cond_data.conditionings[0].add_time_ids - - negative_cond_data = context.services.latents.get(self.negative_conditioning.conditioning_name) - negative_prompt_embeds = negative_cond_data.conditionings[0].embeds - negative_pooled_prompt_embeds = negative_cond_data.conditionings[0].pooled_embeds - add_neg_time_ids = negative_cond_data.conditionings[0].add_time_ids - - scheduler = get_scheduler( - context=context, - scheduler_info=self.unet.scheduler, - scheduler_name=self.scheduler, - ) - - num_inference_steps = self.steps - - unet_info = context.services.model_manager.get_model(**self.unet.unet.dict(), context=context) - do_classifier_free_guidance = True - cross_attention_kwargs = None - with unet_info as unet: - scheduler.set_timesteps(num_inference_steps, device=unet.device) - timesteps = scheduler.timesteps - - latents = latents.to(device=unet.device, dtype=unet.dtype) * scheduler.init_noise_sigma - - extra_step_kwargs = dict() - if "eta" in set(inspect.signature(scheduler.step).parameters.keys()): - extra_step_kwargs.update( - eta=0.0, - ) - if "generator" in set(inspect.signature(scheduler.step).parameters.keys()): - extra_step_kwargs.update( - generator=torch.Generator(device=unet.device).manual_seed(0), - ) - - num_warmup_steps = len(timesteps) - self.steps * scheduler.order - - # apply denoising_end - skipped_final_steps = int(round((1 - self.denoising_end) * self.steps)) - num_inference_steps = num_inference_steps - skipped_final_steps - timesteps = timesteps[: num_warmup_steps + scheduler.order * num_inference_steps] - - if not context.services.configuration.sequential_guidance: - prompt_embeds = torch.cat([negative_prompt_embeds, prompt_embeds], dim=0) - add_text_embeds = torch.cat([negative_pooled_prompt_embeds, pooled_prompt_embeds], dim=0) - add_time_ids = torch.cat([add_neg_time_ids, add_time_ids], dim=0) - - prompt_embeds = prompt_embeds.to(device=unet.device, dtype=unet.dtype) - add_text_embeds = add_text_embeds.to(device=unet.device, dtype=unet.dtype) - add_time_ids = add_time_ids.to(device=unet.device, dtype=unet.dtype) - latents = latents.to(device=unet.device, dtype=unet.dtype) - - with tqdm(total=num_inference_steps) as progress_bar: - for i, t in enumerate(timesteps): - # expand the latents if we are doing classifier free guidance - latent_model_input = torch.cat([latents] * 2) if do_classifier_free_guidance else latents - - latent_model_input = scheduler.scale_model_input(latent_model_input, t) - - # predict the noise residual - added_cond_kwargs = {"text_embeds": add_text_embeds, "time_ids": add_time_ids} - noise_pred = unet( - latent_model_input, - t, - encoder_hidden_states=prompt_embeds, - cross_attention_kwargs=cross_attention_kwargs, - added_cond_kwargs=added_cond_kwargs, - return_dict=False, - )[0] - - # perform guidance - if do_classifier_free_guidance: - noise_pred_uncond, noise_pred_text = noise_pred.chunk(2) - noise_pred = noise_pred_uncond + self.cfg_scale * (noise_pred_text - noise_pred_uncond) - # del noise_pred_uncond - # del noise_pred_text - - # if do_classifier_free_guidance and guidance_rescale > 0.0: - # # Based on 3.4. in https://arxiv.org/pdf/2305.08891.pdf - # noise_pred = rescale_noise_cfg(noise_pred, noise_pred_text, guidance_rescale=guidance_rescale) - - # compute the previous noisy sample x_t -> x_t-1 - latents = scheduler.step(noise_pred, t, latents, **extra_step_kwargs, return_dict=False)[0] - - # call the callback, if provided - if i == len(timesteps) - 1 or ((i + 1) > num_warmup_steps and (i + 1) % scheduler.order == 0): - progress_bar.update() - self.dispatch_progress(context, source_node_id, latents, i, num_inference_steps) - # if callback is not None and i % callback_steps == 0: - # callback(i, t, latents) - else: - negative_pooled_prompt_embeds = negative_pooled_prompt_embeds.to(device=unet.device, dtype=unet.dtype) - negative_prompt_embeds = negative_prompt_embeds.to(device=unet.device, dtype=unet.dtype) - add_neg_time_ids = add_neg_time_ids.to(device=unet.device, dtype=unet.dtype) - pooled_prompt_embeds = pooled_prompt_embeds.to(device=unet.device, dtype=unet.dtype) - prompt_embeds = prompt_embeds.to(device=unet.device, dtype=unet.dtype) - add_time_ids = add_time_ids.to(device=unet.device, dtype=unet.dtype) - latents = latents.to(device=unet.device, dtype=unet.dtype) - - with tqdm(total=num_inference_steps) as progress_bar: - for i, t in enumerate(timesteps): - # expand the latents if we are doing classifier free guidance - # latent_model_input = torch.cat([latents] * 2) if do_classifier_free_guidance else latents - - latent_model_input = scheduler.scale_model_input(latents, t) - - # import gc - # gc.collect() - # torch.cuda.empty_cache() - - # predict the noise residual - - added_cond_kwargs = {"text_embeds": negative_pooled_prompt_embeds, "time_ids": add_neg_time_ids} - noise_pred_uncond = unet( - latent_model_input, - t, - encoder_hidden_states=negative_prompt_embeds, - cross_attention_kwargs=cross_attention_kwargs, - added_cond_kwargs=added_cond_kwargs, - return_dict=False, - )[0] - - added_cond_kwargs = {"text_embeds": pooled_prompt_embeds, "time_ids": add_time_ids} - noise_pred_text = unet( - latent_model_input, - t, - encoder_hidden_states=prompt_embeds, - cross_attention_kwargs=cross_attention_kwargs, - added_cond_kwargs=added_cond_kwargs, - return_dict=False, - )[0] - - # perform guidance - noise_pred = noise_pred_uncond + self.cfg_scale * (noise_pred_text - noise_pred_uncond) - - # del noise_pred_text - # del noise_pred_uncond - # import gc - # gc.collect() - # torch.cuda.empty_cache() - - # if do_classifier_free_guidance and guidance_rescale > 0.0: - # # Based on 3.4. in https://arxiv.org/pdf/2305.08891.pdf - # noise_pred = rescale_noise_cfg(noise_pred, noise_pred_text, guidance_rescale=guidance_rescale) - - # compute the previous noisy sample x_t -> x_t-1 - latents = scheduler.step(noise_pred, t, latents, **extra_step_kwargs, return_dict=False)[0] - - # del noise_pred - # import gc - # gc.collect() - # torch.cuda.empty_cache() - - # call the callback, if provided - if i == len(timesteps) - 1 or ((i + 1) > num_warmup_steps and (i + 1) % scheduler.order == 0): - progress_bar.update() - self.dispatch_progress(context, source_node_id, latents, i, num_inference_steps) - # if callback is not None and i % callback_steps == 0: - # callback(i, t, latents) - - ################# - - latents = latents.to("cpu") - torch.cuda.empty_cache() - - name = f"{context.graph_execution_state_id}__{self.id}" - context.services.latents.save(name, latents) - return build_latents_output(latents_name=name, latents=latents) - - -class SDXLLatentsToLatentsInvocation(BaseInvocation): - """Generates latents from conditionings.""" - - type: Literal["l2l_sdxl"] = "l2l_sdxl" - - # Inputs - # fmt: off - positive_conditioning: Optional[ConditioningField] = Field(description="Positive conditioning for generation") - negative_conditioning: Optional[ConditioningField] = Field(description="Negative conditioning for generation") - noise: Optional[LatentsField] = Field(description="The noise to use") - steps: int = Field(default=10, gt=0, description="The number of steps to use to generate the image") - cfg_scale: Union[float, List[float]] = Field(default=7.5, ge=1, description="The Classifier-Free Guidance, higher values may result in a result closer to the prompt", ) - scheduler: SAMPLER_NAME_VALUES = Field(default="euler", description="The scheduler to use" ) - unet: UNetField = Field(default=None, description="UNet submodel") - latents: Optional[LatentsField] = Field(description="Initial latents") - - denoising_start: float = Field(default=0.0, ge=0, le=1, description="") - denoising_end: float = Field(default=1.0, ge=0, le=1, description="") - - # control: Union[ControlField, list[ControlField]] = Field(default=None, description="The control to use") - # seamless: bool = Field(default=False, description="Whether or not to generate an image that can tile without seams", ) - # seamless_axes: str = Field(default="", description="The axes to tile the image on, 'x' and/or 'y'") - # fmt: on - - @validator("cfg_scale") - def ge_one(cls, v): - """validate that all cfg_scale values are >= 1""" - if isinstance(v, list): - for i in v: - if i < 1: - raise ValueError("cfg_scale must be greater than 1") - else: - if v < 1: - raise ValueError("cfg_scale must be greater than 1") - return v - - # Schema customisation - class Config(InvocationConfig): - schema_extra = { - "ui": { - "title": "SDXL Latents to Latents", - "tags": ["latents"], - "type_hints": { - "model": "model", - # "cfg_scale": "float", - "cfg_scale": "number", - }, - }, - } - - def dispatch_progress( - self, - context: InvocationContext, - source_node_id: str, - sample, - step, - total_steps, - ) -> None: - stable_diffusion_xl_step_callback( - context=context, - node=self.dict(), - source_node_id=source_node_id, - sample=sample, - step=step, - total_steps=total_steps, - ) - - # based on - # https://github.com/huggingface/diffusers/blob/3ebbaf7c96801271f9e6c21400033b6aa5ffcf29/src/diffusers/pipelines/stable_diffusion/pipeline_onnx_stable_diffusion.py#L375 - @torch.no_grad() - def invoke(self, context: InvocationContext) -> LatentsOutput: - graph_execution_state = context.services.graph_execution_manager.get(context.graph_execution_state_id) - source_node_id = graph_execution_state.prepared_source_mapping[self.id] - latents = context.services.latents.get(self.latents.latents_name) - - positive_cond_data = context.services.latents.get(self.positive_conditioning.conditioning_name) - prompt_embeds = positive_cond_data.conditionings[0].embeds - pooled_prompt_embeds = positive_cond_data.conditionings[0].pooled_embeds - add_time_ids = positive_cond_data.conditionings[0].add_time_ids - - negative_cond_data = context.services.latents.get(self.negative_conditioning.conditioning_name) - negative_prompt_embeds = negative_cond_data.conditionings[0].embeds - negative_pooled_prompt_embeds = negative_cond_data.conditionings[0].pooled_embeds - add_neg_time_ids = negative_cond_data.conditionings[0].add_time_ids - - scheduler = get_scheduler( - context=context, - scheduler_info=self.unet.scheduler, - scheduler_name=self.scheduler, - ) - - unet_info = context.services.model_manager.get_model( - **self.unet.unet.dict(), - context=context, - ) - - do_classifier_free_guidance = True - cross_attention_kwargs = None - with unet_info as unet: - # apply denoising_start - num_inference_steps = self.steps - scheduler.set_timesteps(num_inference_steps, device=unet.device) - - t_start = int(round(self.denoising_start * num_inference_steps)) - timesteps = scheduler.timesteps[t_start * scheduler.order :] - num_inference_steps = num_inference_steps - t_start - - # apply noise(if provided) - if self.noise is not None and timesteps.shape[0] > 0: - noise = context.services.latents.get(self.noise.latents_name) - latents = scheduler.add_noise(latents, noise, timesteps[:1]) - del noise - - # apply scheduler extra args - extra_step_kwargs = dict() - if "eta" in set(inspect.signature(scheduler.step).parameters.keys()): - extra_step_kwargs.update( - eta=0.0, - ) - if "generator" in set(inspect.signature(scheduler.step).parameters.keys()): - extra_step_kwargs.update( - generator=torch.Generator(device=unet.device).manual_seed(0), - ) - - num_warmup_steps = max(len(timesteps) - num_inference_steps * scheduler.order, 0) - - # apply denoising_end - skipped_final_steps = int(round((1 - self.denoising_end) * self.steps)) - num_inference_steps = num_inference_steps - skipped_final_steps - timesteps = timesteps[: num_warmup_steps + scheduler.order * num_inference_steps] - - if not context.services.configuration.sequential_guidance: - prompt_embeds = torch.cat([negative_prompt_embeds, prompt_embeds], dim=0) - add_text_embeds = torch.cat([negative_pooled_prompt_embeds, pooled_prompt_embeds], dim=0) - add_time_ids = torch.cat([add_neg_time_ids, add_time_ids], dim=0) - - prompt_embeds = prompt_embeds.to(device=unet.device, dtype=unet.dtype) - add_text_embeds = add_text_embeds.to(device=unet.device, dtype=unet.dtype) - add_time_ids = add_time_ids.to(device=unet.device, dtype=unet.dtype) - latents = latents.to(device=unet.device, dtype=unet.dtype) - - with tqdm(total=num_inference_steps) as progress_bar: - for i, t in enumerate(timesteps): - # expand the latents if we are doing classifier free guidance - latent_model_input = torch.cat([latents] * 2) if do_classifier_free_guidance else latents - - latent_model_input = scheduler.scale_model_input(latent_model_input, t) - - # predict the noise residual - added_cond_kwargs = {"text_embeds": add_text_embeds, "time_ids": add_time_ids} - noise_pred = unet( - latent_model_input, - t, - encoder_hidden_states=prompt_embeds, - cross_attention_kwargs=cross_attention_kwargs, - added_cond_kwargs=added_cond_kwargs, - return_dict=False, - )[0] - - # perform guidance - if do_classifier_free_guidance: - noise_pred_uncond, noise_pred_text = noise_pred.chunk(2) - noise_pred = noise_pred_uncond + self.cfg_scale * (noise_pred_text - noise_pred_uncond) - # del noise_pred_uncond - # del noise_pred_text - - # if do_classifier_free_guidance and guidance_rescale > 0.0: - # # Based on 3.4. in https://arxiv.org/pdf/2305.08891.pdf - # noise_pred = rescale_noise_cfg(noise_pred, noise_pred_text, guidance_rescale=guidance_rescale) - - # compute the previous noisy sample x_t -> x_t-1 - latents = scheduler.step(noise_pred, t, latents, **extra_step_kwargs, return_dict=False)[0] - - # call the callback, if provided - if i == len(timesteps) - 1 or ((i + 1) > num_warmup_steps and (i + 1) % scheduler.order == 0): - progress_bar.update() - self.dispatch_progress(context, source_node_id, latents, i, num_inference_steps) - # if callback is not None and i % callback_steps == 0: - # callback(i, t, latents) - else: - negative_pooled_prompt_embeds = negative_pooled_prompt_embeds.to(device=unet.device, dtype=unet.dtype) - negative_prompt_embeds = negative_prompt_embeds.to(device=unet.device, dtype=unet.dtype) - add_neg_time_ids = add_neg_time_ids.to(device=unet.device, dtype=unet.dtype) - pooled_prompt_embeds = pooled_prompt_embeds.to(device=unet.device, dtype=unet.dtype) - prompt_embeds = prompt_embeds.to(device=unet.device, dtype=unet.dtype) - add_time_ids = add_time_ids.to(device=unet.device, dtype=unet.dtype) - latents = latents.to(device=unet.device, dtype=unet.dtype) - - with tqdm(total=num_inference_steps) as progress_bar: - for i, t in enumerate(timesteps): - # expand the latents if we are doing classifier free guidance - # latent_model_input = torch.cat([latents] * 2) if do_classifier_free_guidance else latents - - latent_model_input = scheduler.scale_model_input(latents, t) - - # import gc - # gc.collect() - # torch.cuda.empty_cache() - - # predict the noise residual - - added_cond_kwargs = {"text_embeds": negative_pooled_prompt_embeds, "time_ids": add_time_ids} - noise_pred_uncond = unet( - latent_model_input, - t, - encoder_hidden_states=negative_prompt_embeds, - cross_attention_kwargs=cross_attention_kwargs, - added_cond_kwargs=added_cond_kwargs, - return_dict=False, - )[0] - - added_cond_kwargs = {"text_embeds": pooled_prompt_embeds, "time_ids": add_time_ids} - noise_pred_text = unet( - latent_model_input, - t, - encoder_hidden_states=prompt_embeds, - cross_attention_kwargs=cross_attention_kwargs, - added_cond_kwargs=added_cond_kwargs, - return_dict=False, - )[0] - - # perform guidance - noise_pred = noise_pred_uncond + self.cfg_scale * (noise_pred_text - noise_pred_uncond) - - # del noise_pred_text - # del noise_pred_uncond - # import gc - # gc.collect() - # torch.cuda.empty_cache() - - # if do_classifier_free_guidance and guidance_rescale > 0.0: - # # Based on 3.4. in https://arxiv.org/pdf/2305.08891.pdf - # noise_pred = rescale_noise_cfg(noise_pred, noise_pred_text, guidance_rescale=guidance_rescale) - - # compute the previous noisy sample x_t -> x_t-1 - latents = scheduler.step(noise_pred, t, latents, **extra_step_kwargs, return_dict=False)[0] - - # del noise_pred - # import gc - # gc.collect() - # torch.cuda.empty_cache() - - # call the callback, if provided - if i == len(timesteps) - 1 or ((i + 1) > num_warmup_steps and (i + 1) % scheduler.order == 0): - progress_bar.update() - self.dispatch_progress(context, source_node_id, latents, i, num_inference_steps) - # if callback is not None and i % callback_steps == 0: - # callback(i, t, latents) - - ################# - - latents = latents.to("cpu") - torch.cuda.empty_cache() - - name = f"{context.graph_execution_state_id}__{self.id}" - context.services.latents.save(name, latents) - return build_latents_output(latents_name=name, latents=latents) diff --git a/invokeai/app/invocations/upscale.py b/invokeai/app/invocations/upscale.py index fd220223db..6e6d440adf 100644 --- a/invokeai/app/invocations/upscale.py +++ b/invokeai/app/invocations/upscale.py @@ -1,18 +1,17 @@ # Copyright (c) 2022 Kyle Schouviller (https://github.com/kyle0654) & the InvokeAI Team from pathlib import Path -from typing import Literal, Union +from typing import Literal import cv2 as cv import numpy as np from basicsr.archs.rrdbnet_arch import RRDBNet from PIL import Image -from pydantic import Field from realesrgan import RealESRGANer +from invokeai.app.invocations.primitives import ImageField, ImageOutput -from invokeai.app.models.image import ImageCategory, ImageField, ResourceOrigin +from invokeai.app.models.image import ImageCategory, ResourceOrigin -from .baseinvocation import BaseInvocation, InvocationConfig, InvocationContext -from .image import ImageOutput +from .baseinvocation import BaseInvocation, InputField, InvocationContext, title, tags # TODO: Populate this from disk? # TODO: Use model manager to load? @@ -24,17 +23,16 @@ ESRGAN_MODELS = Literal[ ] +@title("Upscale (RealESRGAN)") +@tags("esrgan", "upscale") class ESRGANInvocation(BaseInvocation): """Upscales an image using RealESRGAN.""" type: Literal["esrgan"] = "esrgan" - image: Union[ImageField, None] = Field(default=None, description="The input image") - model_name: ESRGAN_MODELS = Field(default="RealESRGAN_x4plus.pth", description="The Real-ESRGAN model to use") - class Config(InvocationConfig): - schema_extra = { - "ui": {"title": "Upscale (RealESRGAN)", "tags": ["image", "upscale", "realesrgan"]}, - } + # Inputs + image: ImageField = InputField(description="The input image") + model_name: ESRGAN_MODELS = InputField(default="RealESRGAN_x4plus.pth", description="The Real-ESRGAN model to use") def invoke(self, context: InvocationContext) -> ImageOutput: image = context.services.images.get_pil_image(self.image.image_name) diff --git a/invokeai/app/models/image.py b/invokeai/app/models/image.py index 2a5a0f9d3b..88cf8af5f9 100644 --- a/invokeai/app/models/image.py +++ b/invokeai/app/models/image.py @@ -1,31 +1,8 @@ from enum import Enum -from typing import Optional, Tuple, Literal + from pydantic import BaseModel, Field from invokeai.app.util.metaenum import MetaEnum -from ..invocations.baseinvocation import ( - BaseInvocationOutput, - InvocationConfig, -) - - -class ImageField(BaseModel): - """An image field used for passing image objects between invocations""" - - image_name: Optional[str] = Field(default=None, description="The name of the image") - - class Config: - schema_extra = {"required": ["image_name"]} - - -class ColorField(BaseModel): - r: int = Field(ge=0, le=255, description="The red component") - g: int = Field(ge=0, le=255, description="The green component") - b: int = Field(ge=0, le=255, description="The blue component") - a: int = Field(ge=0, le=255, description="The alpha component") - - def tuple(self) -> Tuple[int, int, int, int]: - return (self.r, self.g, self.b, self.a) class ProgressImage(BaseModel): @@ -36,50 +13,6 @@ class ProgressImage(BaseModel): dataURL: str = Field(description="The image data as a b64 data URL") -class PILInvocationConfig(BaseModel): - """Helper class to provide all PIL invocations with additional config""" - - class Config(InvocationConfig): - schema_extra = { - "ui": { - "tags": ["PIL", "image"], - }, - } - - -class ImageOutput(BaseInvocationOutput): - """Base class for invocations that output an image""" - - # fmt: off - type: Literal["image_output"] = "image_output" - image: ImageField = Field(default=None, description="The output image") - width: int = Field(description="The width of the image in pixels") - height: int = Field(description="The height of the image in pixels") - # fmt: on - - class Config: - schema_extra = {"required": ["type", "image", "width", "height"]} - - -class MaskOutput(BaseInvocationOutput): - """Base class for invocations that output a mask""" - - # fmt: off - type: Literal["mask"] = "mask" - mask: ImageField = Field(default=None, description="The output mask") - width: int = Field(description="The width of the mask in pixels") - height: int = Field(description="The height of the mask in pixels") - # fmt: on - - class Config: - schema_extra = { - "required": [ - "type", - "mask", - ] - } - - class ResourceOrigin(str, Enum, metaclass=MetaEnum): """The origin of a resource (eg image). diff --git a/invokeai/app/services/board_image_record_storage.py b/invokeai/app/services/board_image_record_storage.py index f0007c8cef..03badf9866 100644 --- a/invokeai/app/services/board_image_record_storage.py +++ b/invokeai/app/services/board_image_record_storage.py @@ -25,7 +25,6 @@ class BoardImageRecordStorageBase(ABC): @abstractmethod def remove_image_from_board( self, - board_id: str, image_name: str, ) -> None: """Removes an image from a board.""" @@ -154,7 +153,6 @@ class SqliteBoardImageRecordStorage(BoardImageRecordStorageBase): def remove_image_from_board( self, - board_id: str, image_name: str, ) -> None: try: @@ -162,9 +160,9 @@ class SqliteBoardImageRecordStorage(BoardImageRecordStorageBase): self._cursor.execute( """--sql DELETE FROM board_images - WHERE board_id = ? AND image_name = ?; + WHERE image_name = ?; """, - (board_id, image_name), + (image_name,), ) self._conn.commit() except sqlite3.Error as e: diff --git a/invokeai/app/services/board_images.py b/invokeai/app/services/board_images.py index 22332d6c29..7c6995dfc8 100644 --- a/invokeai/app/services/board_images.py +++ b/invokeai/app/services/board_images.py @@ -1,18 +1,14 @@ from abc import ABC, abstractmethod from logging import Logger -from typing import List, Union, Optional +from typing import Optional from invokeai.app.services.board_image_record_storage import BoardImageRecordStorageBase from invokeai.app.services.board_record_storage import ( BoardRecord, BoardRecordStorageBase, ) -from invokeai.app.services.image_record_storage import ( - ImageRecordStorageBase, - OffsetPaginatedResults, -) +from invokeai.app.services.image_record_storage import ImageRecordStorageBase from invokeai.app.services.models.board_record import BoardDTO -from invokeai.app.services.models.image_record import ImageDTO, image_record_to_dto from invokeai.app.services.urls import UrlServiceBase @@ -31,7 +27,6 @@ class BoardImagesServiceABC(ABC): @abstractmethod def remove_image_from_board( self, - board_id: str, image_name: str, ) -> None: """Removes an image from a board.""" @@ -93,10 +88,9 @@ class BoardImagesService(BoardImagesServiceABC): def remove_image_from_board( self, - board_id: str, image_name: str, ) -> None: - self._services.board_image_records.remove_image_from_board(board_id, image_name) + self._services.board_image_records.remove_image_from_board(image_name) def get_all_board_image_names_for_board( self, diff --git a/invokeai/app/services/board_record_storage.py b/invokeai/app/services/board_record_storage.py index 2fad7b0ab3..593bb3e7b9 100644 --- a/invokeai/app/services/board_record_storage.py +++ b/invokeai/app/services/board_record_storage.py @@ -1,15 +1,14 @@ -from abc import ABC, abstractmethod -from typing import Optional, cast -import sqlite3 import threading -from typing import Optional, Union import uuid +from abc import ABC, abstractmethod +from typing import Optional, Union, cast + +import sqlite3 from invokeai.app.services.image_record_storage import OffsetPaginatedResults from invokeai.app.services.models.board_record import ( BoardRecord, deserialize_board_record, ) - from pydantic import BaseModel, Field, Extra @@ -230,7 +229,7 @@ class SqliteBoardRecordStorage(BoardRecordStorageBase): # Change the name of a board if changes.board_name is not None: self._cursor.execute( - f"""--sql + """--sql UPDATE boards SET board_name = ? WHERE board_id = ?; @@ -241,7 +240,7 @@ class SqliteBoardRecordStorage(BoardRecordStorageBase): # Change the cover image of a board if changes.cover_image_name is not None: self._cursor.execute( - f"""--sql + """--sql UPDATE boards SET cover_image_name = ? WHERE board_id = ?; diff --git a/invokeai/app/services/config.py b/invokeai/app/services/config.py index a9a4a64f75..a9e5bbee98 100644 --- a/invokeai/app/services/config.py +++ b/invokeai/app/services/config.py @@ -24,11 +24,10 @@ InvokeAI: sequential_guidance: false precision: float16 max_cache_size: 6 - max_vram_cache_size: 2.7 + max_vram_cache_size: 0.5 always_use_cpu: false free_gpu_mem: false Features: - restore: true esrgan: true patchmatch: true internet_available: true @@ -165,14 +164,15 @@ import pydoc import os import sys from argparse import ArgumentParser -from omegaconf import OmegaConf, DictConfig +from omegaconf import OmegaConf, DictConfig, ListConfig from pathlib import Path from pydantic import BaseSettings, Field, parse_obj_as -from typing import ClassVar, Dict, List, Set, Literal, Union, get_origin, get_type_hints, get_args +from typing import ClassVar, Dict, List, Literal, Union, get_origin, get_type_hints, get_args INIT_FILE = Path("invokeai.yaml") DB_FILE = Path("invokeai.db") LEGACY_INIT_FILE = Path("invokeai.init") +DEFAULT_MAX_VRAM = 0.5 class InvokeAISettings(BaseSettings): @@ -189,7 +189,12 @@ class InvokeAISettings(BaseSettings): opt = parser.parse_args(argv) for name in self.__fields__: if name not in self._excluded(): - setattr(self, name, getattr(opt, name)) + value = getattr(opt, name) + if isinstance(value, ListConfig): + value = list(value) + elif isinstance(value, DictConfig): + value = dict(value) + setattr(self, name, value) def to_yaml(self) -> str: """ @@ -274,7 +279,7 @@ class InvokeAISettings(BaseSettings): @classmethod def _excluded(self) -> List[str]: # internal fields that shouldn't be exposed as command line options - return ["type", "initconf", "cached_root"] + return ["type", "initconf"] @classmethod def _excluded_from_yaml(self) -> List[str]: @@ -282,15 +287,10 @@ class InvokeAISettings(BaseSettings): return [ "type", "initconf", - "gpu_mem_reserved", - "max_loaded_models", "version", "from_file", "model", - "restore", "root", - "nsfw_checker", - "cached_root", ] class Config: @@ -356,7 +356,7 @@ class InvokeAISettings(BaseSettings): def _find_root() -> Path: venv = Path(os.environ.get("VIRTUAL_ENV") or ".") if os.environ.get("INVOKEAI_ROOT"): - root = Path(os.environ.get("INVOKEAI_ROOT")).resolve() + root = Path(os.environ["INVOKEAI_ROOT"]) elif any([(venv.parent / x).exists() for x in [INIT_FILE, LEGACY_INIT_FILE]]): root = (venv.parent).resolve() else: @@ -389,21 +389,17 @@ class InvokeAIAppConfig(InvokeAISettings): internet_available : bool = Field(default=True, description="If true, attempt to download models on the fly; otherwise only use local models", category='Features') log_tokenization : bool = Field(default=False, description="Enable logging of parsed prompt tokens.", category='Features') patchmatch : bool = Field(default=True, description="Enable/disable patchmatch inpaint code", category='Features') - restore : bool = Field(default=True, description="Enable/disable face restoration code (DEPRECATED)", category='DEPRECATED') always_use_cpu : bool = Field(default=False, description="If true, use the CPU for rendering even if a GPU is available.", category='Memory/Performance') free_gpu_mem : bool = Field(default=False, description="If true, purge model from GPU after each generation.", category='Memory/Performance') - max_loaded_models : int = Field(default=3, gt=0, description="(DEPRECATED: use max_cache_size) Maximum number of models to keep in memory for rapid switching", category='DEPRECATED') max_cache_size : float = Field(default=6.0, gt=0, description="Maximum memory amount used by model cache for rapid switching", category='Memory/Performance') max_vram_cache_size : float = Field(default=2.75, ge=0, description="Amount of VRAM reserved for model storage", category='Memory/Performance') - gpu_mem_reserved : float = Field(default=2.75, ge=0, description="DEPRECATED: use max_vram_cache_size. Amount of VRAM reserved for model storage", category='DEPRECATED') - nsfw_checker : bool = Field(default=True, description="DEPRECATED: use Web settings to enable/disable", category='DEPRECATED') - precision : Literal[tuple(['auto','float16','float32','autocast'])] = Field(default='auto',description='Floating point precision', category='Memory/Performance') + precision : Literal['auto', 'float16', 'float32', 'autocast'] = Field(default='auto', description='Floating point precision', category='Memory/Performance') sequential_guidance : bool = Field(default=False, description="Whether to calculate guidance in serial instead of in parallel, lowering memory requirements", category='Memory/Performance') xformers_enabled : bool = Field(default=True, description="Enable/disable memory-efficient attention", category='Memory/Performance') tiled_decode : bool = Field(default=False, description="Whether to enable tiled VAE decode (reduces memory consumption with some performance penalty)", category='Memory/Performance') - root : Path = Field(default=_find_root(), description='InvokeAI runtime root directory', category='Paths') + root : Path = Field(default=None, description='InvokeAI runtime root directory', category='Paths') autoimport_dir : Path = Field(default='autoimport', description='Path to a directory of models files to be imported on startup.', category='Paths') lora_dir : Path = Field(default=None, description='Path to a directory of LoRA/LyCORIS models to be imported on startup.', category='Paths') embedding_dir : Path = Field(default=None, description='Path to a directory of Textual Inversion embeddings to be imported on startup.', category='Paths') @@ -415,18 +411,19 @@ class InvokeAIAppConfig(InvokeAISettings): outdir : Path = Field(default='outputs', description='Default folder for output images', category='Paths') from_file : Path = Field(default=None, description='Take command input from the indicated file (command-line client only)', category='Paths') use_memory_db : bool = Field(default=False, description='Use in-memory database for storing image metadata', category='Paths') - - model : str = Field(default='stable-diffusion-1.5', description='Initial model name', category='Models') + ignore_missing_core_models : bool = Field(default=False, description='Ignore missing models in models/core/convert', category='Features') log_handlers : List[str] = Field(default=["console"], description='Log handler. Valid options are "console", "file=", "syslog=path|address:host:port", "http="', category="Logging") # note - would be better to read the log_format values from logging.py, but this creates circular dependencies issues - log_format : Literal[tuple(['plain','color','syslog','legacy'])] = Field(default="color", description='Log format. Use "plain" for text-only, "color" for colorized output, "legacy" for 2.3-style logging and "syslog" for syslog-style', category="Logging") - log_level : Literal[tuple(["debug","info","warning","error","critical"])] = Field(default="info", description="Emit logging messages at this level or higher", category="Logging") + log_format : Literal['plain', 'color', 'syslog', 'legacy'] = Field(default="color", description='Log format. Use "plain" for text-only, "color" for colorized output, "legacy" for 2.3-style logging and "syslog" for syslog-style', category="Logging") + log_level : Literal["debug", "info", "warning", "error", "critical"] = Field(default="info", description="Emit logging messages at this level or higher", category="Logging") version : bool = Field(default=False, description="Show InvokeAI version and exit", category="Other") - cached_root : Path = Field(default=None, description="internal use only", category="DEPRECATED") # fmt: on + class Config: + validate_assignment = True + def parse_args(self, argv: List[str] = None, conf: DictConfig = None, clobber=False): """ Update settings with contents of init file, environment, and @@ -441,7 +438,7 @@ class InvokeAIAppConfig(InvokeAISettings): if conf is None: try: conf = OmegaConf.load(self.root_dir / INIT_FILE) - except: + except Exception: pass InvokeAISettings.initconf = conf @@ -460,7 +457,7 @@ class InvokeAIAppConfig(InvokeAISettings): """ if ( cls.singleton_config is None - or type(cls.singleton_config) != cls + or type(cls.singleton_config) is not cls or (kwargs and cls.singleton_init != kwargs) ): cls.singleton_config = cls(**kwargs) @@ -472,15 +469,12 @@ class InvokeAIAppConfig(InvokeAISettings): """ Path to the runtime root directory """ - # we cache value of root to protect against it being '.' and the cwd changing - if self.cached_root: - root = self.cached_root - elif self.root: + if self.root: root = Path(self.root).expanduser().absolute() else: - root = self.find_root() - self.cached_root = root - return self.cached_root + root = self.find_root().expanduser().absolute() + self.root = root # insulate ourselves from relative paths that may change + return root @property def root_dir(self) -> Path: diff --git a/invokeai/app/services/default_graphs.py b/invokeai/app/services/default_graphs.py index cafb6f0339..7135e031b0 100644 --- a/invokeai/app/services/default_graphs.py +++ b/invokeai/app/services/default_graphs.py @@ -1,8 +1,8 @@ -from ..invocations.latent import LatentsToImageInvocation, TextToLatentsInvocation +from ..invocations.latent import LatentsToImageInvocation, DenoiseLatentsInvocation from ..invocations.image import ImageNSFWBlurInvocation from ..invocations.noise import NoiseInvocation from ..invocations.compel import CompelInvocation -from ..invocations.params import ParamIntInvocation +from ..invocations.primitives import IntegerInvocation from .graph import Edge, EdgeConnection, ExposedNodeInput, ExposedNodeOutput, Graph, LibraryGraph from .item_storage import ItemStorageABC @@ -17,13 +17,13 @@ def create_text_to_image() -> LibraryGraph: description="Converts text to an image", graph=Graph( nodes={ - "width": ParamIntInvocation(id="width", a=512), - "height": ParamIntInvocation(id="height", a=512), - "seed": ParamIntInvocation(id="seed", a=-1), + "width": IntegerInvocation(id="width", a=512), + "height": IntegerInvocation(id="height", a=512), + "seed": IntegerInvocation(id="seed", a=-1), "3": NoiseInvocation(id="3"), "4": CompelInvocation(id="4"), "5": CompelInvocation(id="5"), - "6": TextToLatentsInvocation(id="6"), + "6": DenoiseLatentsInvocation(id="6"), "7": LatentsToImageInvocation(id="7"), "8": ImageNSFWBlurInvocation(id="8"), }, diff --git a/invokeai/app/services/events.py b/invokeai/app/services/events.py index 30fa89bd29..a266fe4f18 100644 --- a/invokeai/app/services/events.py +++ b/invokeai/app/services/events.py @@ -35,6 +35,7 @@ class EventServiceBase: source_node_id: str, progress_image: Optional[ProgressImage], step: int, + order: int, total_steps: int, ) -> None: """Emitted when there is generation progress""" @@ -46,6 +47,7 @@ class EventServiceBase: source_node_id=source_node_id, progress_image=progress_image.dict() if progress_image is not None else None, step=step, + order=order, total_steps=total_steps, ), ) diff --git a/invokeai/app/services/graph.py b/invokeai/app/services/graph.py index d7f021df14..51cc8a30ae 100644 --- a/invokeai/app/services/graph.py +++ b/invokeai/app/services/graph.py @@ -3,26 +3,22 @@ import copy import itertools import uuid -from typing import ( - Annotated, - Any, - Literal, - Optional, - Union, - get_args, - get_origin, - get_type_hints, -) +from typing import Annotated, Any, Literal, Optional, Union, get_args, get_origin, get_type_hints import networkx as nx from pydantic import BaseModel, root_validator, validator from pydantic.fields import Field -from ..invocations import * +# Importing * is bad karma but needed here for node detection +from ..invocations import * # noqa: F401 F403 from ..invocations.baseinvocation import ( BaseInvocation, BaseInvocationOutput, + Input, + InputField, InvocationContext, + OutputField, + UIType, ) # in 3.10 this would be "from types import NoneType" @@ -183,15 +179,9 @@ class IterateInvocationOutput(BaseInvocationOutput): type: Literal["iterate_output"] = "iterate_output" - item: Any = Field(description="The item being iterated over") - - class Config: - schema_extra = { - "required": [ - "type", - "item", - ] - } + item: Any = OutputField( + description="The item being iterated over", title="Collection Item", ui_type=UIType.CollectionItem + ) # TODO: Fill this out and move to invocations @@ -200,8 +190,10 @@ class IterateInvocation(BaseInvocation): type: Literal["iterate"] = "iterate" - collection: list[Any] = Field(description="The list of items to iterate over", default_factory=list) - index: int = Field(description="The index, will be provided on executed iterators", default=0) + collection: list[Any] = InputField( + description="The list of items to iterate over", default_factory=list, ui_type=UIType.Collection + ) + index: int = InputField(description="The index, will be provided on executed iterators", default=0, ui_hidden=True) def invoke(self, context: InvocationContext) -> IterateInvocationOutput: """Produces the outputs as values""" @@ -211,15 +203,9 @@ class IterateInvocation(BaseInvocation): class CollectInvocationOutput(BaseInvocationOutput): type: Literal["collect_output"] = "collect_output" - collection: list[Any] = Field(description="The collection of input items") - - class Config: - schema_extra = { - "required": [ - "type", - "collection", - ] - } + collection: list[Any] = OutputField( + description="The collection of input items", title="Collection", ui_type=UIType.Collection + ) class CollectInvocation(BaseInvocation): @@ -227,13 +213,14 @@ class CollectInvocation(BaseInvocation): type: Literal["collect"] = "collect" - item: Any = Field( + item: Any = InputField( description="The item to collect (all inputs must be of the same type)", - default=None, + ui_type=UIType.CollectionItem, + title="Collection Item", + input=Input.Connection, ) - collection: list[Any] = Field( - description="The collection, will be provided on execution", - default_factory=list, + collection: list[Any] = InputField( + description="The collection, will be provided on execution", default_factory=list, ui_hidden=True ) def invoke(self, context: InvocationContext) -> CollectInvocationOutput: @@ -459,7 +446,7 @@ class Graph(BaseModel): node = graph.nodes[node_id] # Ensure the node type matches the new node - if type(node) != type(new_node): + if type(node) is not type(new_node): raise TypeError(f"Node {node_path} is type {type(node)} but new node is type {type(new_node)}") # Ensure the new id is either the same or is not in the graph @@ -646,7 +633,7 @@ class Graph(BaseModel): [ t for input_field in input_fields - for t in ([input_field] if get_origin(input_field) == None else get_args(input_field)) + for t in ([input_field] if get_origin(input_field) is None else get_args(input_field)) if t != NoneType ] ) # Get unique types @@ -937,7 +924,7 @@ class GraphExecutionState(BaseModel): None, ) - if next_node_id == None: + if next_node_id is None: return None # Get all parents of the next node diff --git a/invokeai/app/services/image_file_storage.py b/invokeai/app/services/image_file_storage.py index fb8563a3e4..2a8bab9c3f 100644 --- a/invokeai/app/services/image_file_storage.py +++ b/invokeai/app/services/image_file_storage.py @@ -179,7 +179,7 @@ class DiskImageFileStorage(ImageFileStorageBase): return None if image_name not in self.__cache else self.__cache[image_name] def __set_cache(self, image_name: Path, image: PILImageType): - if not image_name in self.__cache: + if image_name not in self.__cache: self.__cache[image_name] = image self.__cache_ids.put(image_name) # TODO: this should refresh position for LRU cache if len(self.__cache) > self.__max_cache_size: diff --git a/invokeai/app/services/image_record_storage.py b/invokeai/app/services/image_record_storage.py index 8c274ab8f9..8f1b25b84a 100644 --- a/invokeai/app/services/image_record_storage.py +++ b/invokeai/app/services/image_record_storage.py @@ -67,6 +67,7 @@ IMAGE_DTO_COLS = ", ".join( "created_at", "updated_at", "deleted_at", + "starred", ], ) ) @@ -139,6 +140,7 @@ class ImageRecordStorageBase(ABC): node_id: Optional[str], metadata: Optional[dict], is_intermediate: bool = False, + starred: bool = False, ) -> datetime: """Saves an image record.""" pass @@ -200,6 +202,16 @@ class SqliteImageRecordStorage(ImageRecordStorageBase): """ ) + self._cursor.execute("PRAGMA table_info(images)") + columns = [column[1] for column in self._cursor.fetchall()] + + if "starred" not in columns: + self._cursor.execute( + """--sql + ALTER TABLE images ADD COLUMN starred BOOLEAN DEFAULT FALSE; + """ + ) + # Create the `images` table indices. self._cursor.execute( """--sql @@ -222,6 +234,12 @@ class SqliteImageRecordStorage(ImageRecordStorageBase): """ ) + self._cursor.execute( + """--sql + CREATE INDEX IF NOT EXISTS idx_images_starred ON images(starred); + """ + ) + # Add trigger for `updated_at`. self._cursor.execute( """--sql @@ -264,7 +282,7 @@ class SqliteImageRecordStorage(ImageRecordStorageBase): self._lock.acquire() self._cursor.execute( - f"""--sql + """--sql SELECT images.metadata FROM images WHERE image_name = ?; """, @@ -291,7 +309,7 @@ class SqliteImageRecordStorage(ImageRecordStorageBase): # Change the category of the image if changes.image_category is not None: self._cursor.execute( - f"""--sql + """--sql UPDATE images SET image_category = ? WHERE image_name = ?; @@ -302,7 +320,7 @@ class SqliteImageRecordStorage(ImageRecordStorageBase): # Change the session associated with the image if changes.session_id is not None: self._cursor.execute( - f"""--sql + """--sql UPDATE images SET session_id = ? WHERE image_name = ?; @@ -313,7 +331,7 @@ class SqliteImageRecordStorage(ImageRecordStorageBase): # Change the image's `is_intermediate`` flag if changes.is_intermediate is not None: self._cursor.execute( - f"""--sql + """--sql UPDATE images SET is_intermediate = ? WHERE image_name = ?; @@ -321,6 +339,17 @@ class SqliteImageRecordStorage(ImageRecordStorageBase): (changes.is_intermediate, image_name), ) + # Change the image's `starred`` state + if changes.starred is not None: + self._cursor.execute( + """--sql + UPDATE images + SET starred = ? + WHERE image_name = ?; + """, + (changes.starred, image_name), + ) + self._conn.commit() except sqlite3.Error as e: self._conn.rollback() @@ -397,7 +426,7 @@ class SqliteImageRecordStorage(ImageRecordStorageBase): query_params.append(board_id) query_pagination = """--sql - ORDER BY images.created_at DESC LIMIT ? OFFSET ? + ORDER BY images.starred DESC, images.created_at DESC LIMIT ? OFFSET ? """ # Final images query with pagination @@ -500,6 +529,7 @@ class SqliteImageRecordStorage(ImageRecordStorageBase): node_id: Optional[str], metadata: Optional[dict], is_intermediate: bool = False, + starred: bool = False, ) -> datetime: try: metadata_json = None if metadata is None else json.dumps(metadata) @@ -515,9 +545,10 @@ class SqliteImageRecordStorage(ImageRecordStorageBase): node_id, session_id, metadata, - is_intermediate + is_intermediate, + starred ) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?); + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?); """, ( image_name, @@ -529,6 +560,7 @@ class SqliteImageRecordStorage(ImageRecordStorageBase): session_id, metadata_json, is_intermediate, + starred, ), ) self._conn.commit() diff --git a/invokeai/app/services/images.py b/invokeai/app/services/images.py index f8376eb626..e5cb6c3319 100644 --- a/invokeai/app/services/images.py +++ b/invokeai/app/services/images.py @@ -1,4 +1,3 @@ -import json from abc import ABC, abstractmethod from logging import Logger from typing import TYPE_CHECKING, Optional @@ -289,9 +288,10 @@ class ImageService(ImageServiceABC): def get_metadata(self, image_name: str) -> Optional[ImageMetadata]: try: image_record = self._services.image_records.get(image_name) + metadata = self._services.image_records.get_metadata(image_name) if not image_record.session_id: - return ImageMetadata() + return ImageMetadata(metadata=metadata) session_raw = self._services.graph_execution_manager.get_raw(image_record.session_id) graph = None @@ -303,7 +303,6 @@ class ImageService(ImageServiceABC): self._services.logger.warn(f"Failed to parse session graph: {e}") graph = None - metadata = self._services.image_records.get_metadata(image_name) return ImageMetadata(graph=graph, metadata=metadata) except ImageRecordNotFoundException: self._services.logger.error("Image record not found") @@ -379,10 +378,10 @@ class ImageService(ImageServiceABC): self._services.image_files.delete(image_name) self._services.image_records.delete(image_name) except ImageRecordDeleteException: - self._services.logger.error(f"Failed to delete image record") + self._services.logger.error("Failed to delete image record") raise except ImageFileDeleteException: - self._services.logger.error(f"Failed to delete image file") + self._services.logger.error("Failed to delete image file") raise except Exception as e: self._services.logger.error("Problem deleting image record and file") @@ -395,10 +394,10 @@ class ImageService(ImageServiceABC): self._services.image_files.delete(image_name) self._services.image_records.delete_many(image_names) except ImageRecordDeleteException: - self._services.logger.error(f"Failed to delete image records") + self._services.logger.error("Failed to delete image records") raise except ImageFileDeleteException: - self._services.logger.error(f"Failed to delete image files") + self._services.logger.error("Failed to delete image files") raise except Exception as e: self._services.logger.error("Problem deleting image records and files") @@ -412,10 +411,10 @@ class ImageService(ImageServiceABC): self._services.image_files.delete(image_name) return count except ImageRecordDeleteException: - self._services.logger.error(f"Failed to delete image records") + self._services.logger.error("Failed to delete image records") raise except ImageFileDeleteException: - self._services.logger.error(f"Failed to delete image files") + self._services.logger.error("Failed to delete image files") raise except Exception as e: self._services.logger.error("Problem deleting image records and files") diff --git a/invokeai/app/services/invocation_services.py b/invokeai/app/services/invocation_services.py index 8af17c7643..d717087958 100644 --- a/invokeai/app/services/invocation_services.py +++ b/invokeai/app/services/invocation_services.py @@ -7,6 +7,7 @@ if TYPE_CHECKING: from invokeai.app.services.board_images import BoardImagesServiceABC from invokeai.app.services.boards import BoardServiceABC from invokeai.app.services.images import ImageServiceABC + from invokeai.app.services.invocation_stats import InvocationStatsServiceBase from invokeai.app.services.model_manager_service import ModelManagerServiceBase from invokeai.app.services.events import EventServiceBase from invokeai.app.services.latent_storage import LatentsStorageBase @@ -32,6 +33,7 @@ class InvocationServices: logger: "Logger" model_manager: "ModelManagerServiceBase" processor: "InvocationProcessorABC" + performance_statistics: "InvocationStatsServiceBase" queue: "InvocationQueueABC" def __init__( @@ -47,6 +49,7 @@ class InvocationServices: logger: "Logger", model_manager: "ModelManagerServiceBase", processor: "InvocationProcessorABC", + performance_statistics: "InvocationStatsServiceBase", queue: "InvocationQueueABC", ): self.board_images = board_images @@ -61,4 +64,5 @@ class InvocationServices: self.logger = logger self.model_manager = model_manager self.processor = processor + self.performance_statistics = performance_statistics self.queue = queue diff --git a/invokeai/app/services/invocation_stats.py b/invokeai/app/services/invocation_stats.py new file mode 100644 index 0000000000..e8557c40f7 --- /dev/null +++ b/invokeai/app/services/invocation_stats.py @@ -0,0 +1,304 @@ +# Copyright 2023 Lincoln D. Stein +"""Utility to collect execution time and GPU usage stats on invocations in flight + +Usage: + +statistics = InvocationStatsService(graph_execution_manager) +with statistics.collect_stats(invocation, graph_execution_state.id): + ... execute graphs... +statistics.log_stats() + +Typical output: +[2023-08-02 18:03:04,507]::[InvokeAI]::INFO --> Graph stats: c7764585-9c68-4d9d-a199-55e8186790f3 +[2023-08-02 18:03:04,507]::[InvokeAI]::INFO --> Node Calls Seconds VRAM Used +[2023-08-02 18:03:04,507]::[InvokeAI]::INFO --> main_model_loader 1 0.005s 0.01G +[2023-08-02 18:03:04,508]::[InvokeAI]::INFO --> clip_skip 1 0.004s 0.01G +[2023-08-02 18:03:04,508]::[InvokeAI]::INFO --> compel 2 0.512s 0.26G +[2023-08-02 18:03:04,508]::[InvokeAI]::INFO --> rand_int 1 0.001s 0.01G +[2023-08-02 18:03:04,508]::[InvokeAI]::INFO --> range_of_size 1 0.001s 0.01G +[2023-08-02 18:03:04,508]::[InvokeAI]::INFO --> iterate 1 0.001s 0.01G +[2023-08-02 18:03:04,508]::[InvokeAI]::INFO --> metadata_accumulator 1 0.002s 0.01G +[2023-08-02 18:03:04,508]::[InvokeAI]::INFO --> noise 1 0.002s 0.01G +[2023-08-02 18:03:04,508]::[InvokeAI]::INFO --> t2l 1 3.541s 1.93G +[2023-08-02 18:03:04,508]::[InvokeAI]::INFO --> l2i 1 0.679s 0.58G +[2023-08-02 18:03:04,508]::[InvokeAI]::INFO --> TOTAL GRAPH EXECUTION TIME: 4.749s +[2023-08-02 18:03:04,508]::[InvokeAI]::INFO --> Current VRAM utilization 0.01G + +The abstract base class for this class is InvocationStatsServiceBase. An implementing class which +writes to the system log is stored in InvocationServices.performance_statistics. +""" + +import psutil +import time +from abc import ABC, abstractmethod +from contextlib import AbstractContextManager +from dataclasses import dataclass, field +from typing import Dict + +import torch + +import invokeai.backend.util.logging as logger + +from ..invocations.baseinvocation import BaseInvocation +from .graph import GraphExecutionState +from .item_storage import ItemStorageABC +from .model_manager_service import ModelManagerService +from invokeai.backend.model_management.model_cache import CacheStats + +# size of GIG in bytes +GIG = 1073741824 + + +class InvocationStatsServiceBase(ABC): + "Abstract base class for recording node memory/time performance statistics" + + @abstractmethod + def __init__(self, graph_execution_manager: ItemStorageABC["GraphExecutionState"]): + """ + Initialize the InvocationStatsService and reset counters to zero + :param graph_execution_manager: Graph execution manager for this session + """ + pass + + @abstractmethod + def collect_stats( + self, + invocation: BaseInvocation, + graph_execution_state_id: str, + ) -> AbstractContextManager: + """ + Return a context object that will capture the statistics on the execution + of invocaation. Use with: to place around the part of the code that executes the invocation. + :param invocation: BaseInvocation object from the current graph. + :param graph_execution_state: GraphExecutionState object from the current session. + """ + pass + + @abstractmethod + def reset_stats(self, graph_execution_state_id: str): + """ + Reset all statistics for the indicated graph + :param graph_execution_state_id + """ + pass + + @abstractmethod + def reset_all_stats(self): + """Zero all statistics""" + pass + + @abstractmethod + def update_invocation_stats( + self, + graph_id: str, + invocation_type: str, + time_used: float, + vram_used: float, + ram_used: float, + ram_changed: float, + ): + """ + Add timing information on execution of a node. Usually + used internally. + :param graph_id: ID of the graph that is currently executing + :param invocation_type: String literal type of the node + :param time_used: Time used by node's exection (sec) + :param vram_used: Maximum VRAM used during exection (GB) + :param ram_used: Current RAM available (GB) + :param ram_changed: Change in RAM usage over course of the run (GB) + """ + pass + + @abstractmethod + def log_stats(self): + """ + Write out the accumulated statistics to the log or somewhere else. + """ + pass + + +@dataclass +class NodeStats: + """Class for tracking execution stats of an invocation node""" + + calls: int = 0 + time_used: float = 0.0 # seconds + max_vram: float = 0.0 # GB + cache_hits: int = 0 + cache_misses: int = 0 + cache_high_watermark: int = 0 + + +@dataclass +class NodeLog: + """Class for tracking node usage""" + + # {node_type => NodeStats} + nodes: Dict[str, NodeStats] = field(default_factory=dict) + + +class InvocationStatsService(InvocationStatsServiceBase): + """Accumulate performance information about a running graph. Collects time spent in each node, + as well as the maximum and current VRAM utilisation for CUDA systems""" + + def __init__(self, graph_execution_manager: ItemStorageABC["GraphExecutionState"]): + self.graph_execution_manager = graph_execution_manager + # {graph_id => NodeLog} + self._stats: Dict[str, NodeLog] = {} + self._cache_stats: Dict[str, CacheStats] = {} + self.ram_used: float = 0.0 + self.ram_changed: float = 0.0 + + class StatsContext: + """Context manager for collecting statistics.""" + + invocation: BaseInvocation = None + collector: "InvocationStatsServiceBase" = None + graph_id: str = None + start_time: int = 0 + ram_used: int = 0 + model_manager: ModelManagerService = None + + def __init__( + self, + invocation: BaseInvocation, + graph_id: str, + model_manager: ModelManagerService, + collector: "InvocationStatsServiceBase", + ): + """Initialize statistics for this run.""" + self.invocation = invocation + self.collector = collector + self.graph_id = graph_id + self.start_time = 0 + self.ram_used = 0 + self.model_manager = model_manager + + def __enter__(self): + self.start_time = time.time() + if torch.cuda.is_available(): + torch.cuda.reset_peak_memory_stats() + self.ram_used = psutil.Process().memory_info().rss + if self.model_manager: + self.model_manager.collect_cache_stats(self.collector._cache_stats[self.graph_id]) + + def __exit__(self, *args): + """Called on exit from the context.""" + ram_used = psutil.Process().memory_info().rss + self.collector.update_mem_stats( + ram_used=ram_used / GIG, + ram_changed=(ram_used - self.ram_used) / GIG, + ) + self.collector.update_invocation_stats( + graph_id=self.graph_id, + invocation_type=self.invocation.type, + time_used=time.time() - self.start_time, + vram_used=torch.cuda.max_memory_allocated() / GIG if torch.cuda.is_available() else 0.0, + ) + + def collect_stats( + self, + invocation: BaseInvocation, + graph_execution_state_id: str, + model_manager: ModelManagerService, + ) -> StatsContext: + """ + Return a context object that will capture the statistics. + :param invocation: BaseInvocation object from the current graph. + :param graph_execution_state: GraphExecutionState object from the current session. + """ + if not self._stats.get(graph_execution_state_id): # first time we're seeing this + self._stats[graph_execution_state_id] = NodeLog() + self._cache_stats[graph_execution_state_id] = CacheStats() + return self.StatsContext(invocation, graph_execution_state_id, model_manager, self) + + def reset_all_stats(self): + """Zero all statistics""" + self._stats = {} + + def reset_stats(self, graph_execution_id: str): + """Zero the statistics for the indicated graph.""" + try: + self._stats.pop(graph_execution_id) + except KeyError: + logger.warning(f"Attempted to clear statistics for unknown graph {graph_execution_id}") + + def update_mem_stats( + self, + ram_used: float, + ram_changed: float, + ): + """ + Update the collector with RAM memory usage info. + + :param ram_used: How much RAM is currently in use. + :param ram_changed: How much RAM changed since last generation. + """ + self.ram_used = ram_used + self.ram_changed = ram_changed + + def update_invocation_stats( + self, + graph_id: str, + invocation_type: str, + time_used: float, + vram_used: float, + ): + """ + Add timing information on execution of a node. Usually + used internally. + :param graph_id: ID of the graph that is currently executing + :param invocation_type: String literal type of the node + :param time_used: Time used by node's exection (sec) + :param vram_used: Maximum VRAM used during exection (GB) + :param ram_used: Current RAM available (GB) + :param ram_changed: Change in RAM usage over course of the run (GB) + """ + if not self._stats[graph_id].nodes.get(invocation_type): + self._stats[graph_id].nodes[invocation_type] = NodeStats() + stats = self._stats[graph_id].nodes[invocation_type] + stats.calls += 1 + stats.time_used += time_used + stats.max_vram = max(stats.max_vram, vram_used) + + def log_stats(self): + """ + Send the statistics to the system logger at the info level. + Stats will only be printed when the execution of the graph + is complete. + """ + completed = set() + for graph_id, node_log in self._stats.items(): + current_graph_state = self.graph_execution_manager.get(graph_id) + if not current_graph_state.is_complete(): + continue + + total_time = 0 + logger.info(f"Graph stats: {graph_id}") + logger.info(f"{'Node':>30} {'Calls':>7}{'Seconds':>9} {'VRAM Used':>10}") + for node_type, stats in self._stats[graph_id].nodes.items(): + logger.info(f"{node_type:>30} {stats.calls:>4} {stats.time_used:7.3f}s {stats.max_vram:4.3f}G") + total_time += stats.time_used + + cache_stats = self._cache_stats[graph_id] + hwm = cache_stats.high_watermark / GIG + tot = cache_stats.cache_size / GIG + loaded = sum([v for v in cache_stats.loaded_model_sizes.values()]) / GIG + + logger.info(f"TOTAL GRAPH EXECUTION TIME: {total_time:7.3f}s") + logger.info("RAM used by InvokeAI process: " + "%4.2fG" % self.ram_used + f" ({self.ram_changed:+5.3f}G)") + logger.info(f"RAM used to load models: {loaded:4.2f}G") + if torch.cuda.is_available(): + logger.info("VRAM in use: " + "%4.3fG" % (torch.cuda.memory_allocated() / GIG)) + logger.info("RAM cache statistics:") + logger.info(f" Model cache hits: {cache_stats.hits}") + logger.info(f" Model cache misses: {cache_stats.misses}") + logger.info(f" Models cached: {cache_stats.in_cache}") + logger.info(f" Models cleared from cache: {cache_stats.cleared}") + logger.info(f" Cache high water mark: {hwm:4.2f}/{tot:4.2f}G") + + completed.add(graph_id) + + for graph_id in completed: + del self._stats[graph_id] + del self._cache_stats[graph_id] diff --git a/invokeai/app/services/latent_storage.py b/invokeai/app/services/latent_storage.py index 7e781c49ec..7c22ea5ba8 100644 --- a/invokeai/app/services/latent_storage.py +++ b/invokeai/app/services/latent_storage.py @@ -60,7 +60,7 @@ class ForwardCacheLatentsStorage(LatentsStorageBase): return None if name not in self.__cache else self.__cache[name] def __set_cache(self, name: str, data: torch.Tensor): - if not name in self.__cache: + if name not in self.__cache: self.__cache[name] = data self.__cache_ids.put(name) if self.__cache_ids.qsize() > self.__max_cache_size: diff --git a/invokeai/app/services/model_manager_service.py b/invokeai/app/services/model_manager_service.py index c84cc3d189..675bc71257 100644 --- a/invokeai/app/services/model_manager_service.py +++ b/invokeai/app/services/model_manager_service.py @@ -3,9 +3,10 @@ from __future__ import annotations from abc import ABC, abstractmethod +from logging import Logger from pathlib import Path from pydantic import Field -from typing import Optional, Union, Callable, List, Tuple, TYPE_CHECKING +from typing import Literal, Optional, Union, Callable, List, Tuple, TYPE_CHECKING from types import ModuleType from invokeai.backend.model_management import ( @@ -21,6 +22,7 @@ from invokeai.backend.model_management import ( ModelNotFoundException, ) from invokeai.backend.model_management.model_search import FindModels +from invokeai.backend.model_management.model_cache import CacheStats import torch from invokeai.app.models.exceptions import CanceledException @@ -193,7 +195,7 @@ class ModelManagerServiceBase(ABC): self, model_name: str, base_model: BaseModelType, - model_type: Union[ModelType.Main, ModelType.Vae], + model_type: Literal[ModelType.Main, ModelType.Vae], ) -> AddModelResult: """ Convert a checkpoint file into a diffusers folder, deleting the cached @@ -275,6 +277,13 @@ class ModelManagerServiceBase(ABC): """ pass + @abstractmethod + def collect_cache_stats(self, cache_stats: CacheStats): + """ + Reset model cache statistics for graph with graph_id. + """ + pass + @abstractmethod def commit(self, conf_file: Optional[Path] = None) -> None: """ @@ -292,7 +301,7 @@ class ModelManagerService(ModelManagerServiceBase): def __init__( self, config: InvokeAIAppConfig, - logger: ModuleType, + logger: Logger, ): """ Initialize with the path to the models.yaml config file. @@ -396,7 +405,7 @@ class ModelManagerService(ModelManagerServiceBase): model_type, ) - def model_info(self, model_name: str, base_model: BaseModelType, model_type: ModelType) -> dict: + def model_info(self, model_name: str, base_model: BaseModelType, model_type: ModelType) -> Union[dict, None]: """ Given a model name returns a dict-like (OmegaConf) object describing it. """ @@ -416,7 +425,7 @@ class ModelManagerService(ModelManagerServiceBase): """ return self.mgr.list_models(base_model, model_type) - def list_model(self, model_name: str, base_model: BaseModelType, model_type: ModelType) -> dict: + def list_model(self, model_name: str, base_model: BaseModelType, model_type: ModelType) -> Union[dict, None]: """ Return information about the model using the same format as list_models() """ @@ -429,7 +438,7 @@ class ModelManagerService(ModelManagerServiceBase): model_type: ModelType, model_attributes: dict, clobber: bool = False, - ) -> None: + ) -> AddModelResult: """ Update the named model with a dictionary of attributes. Will fail with an assertion error if the name already exists. Pass clobber=True to overwrite. @@ -478,7 +487,7 @@ class ModelManagerService(ModelManagerServiceBase): self, model_name: str, base_model: BaseModelType, - model_type: Union[ModelType.Main, ModelType.Vae], + model_type: Literal[ModelType.Main, ModelType.Vae], convert_dest_directory: Optional[Path] = Field( default=None, description="Optional directory location for merged model" ), @@ -499,6 +508,12 @@ class ModelManagerService(ModelManagerServiceBase): self.logger.debug(f"convert model {model_name}") return self.mgr.convert_model(model_name, base_model, model_type, convert_dest_directory) + def collect_cache_stats(self, cache_stats: CacheStats): + """ + Reset model cache statistics for graph with graph_id. + """ + self.mgr.cache.stats = cache_stats + def commit(self, conf_file: Optional[Path] = None): """ Write current configuration out to the indicated file. @@ -573,9 +588,9 @@ class ModelManagerService(ModelManagerServiceBase): default=None, description="Base model shared by all models to be merged" ), merged_model_name: str = Field(default=None, description="Name of destination model after merging"), - alpha: Optional[float] = 0.5, + alpha: float = 0.5, interp: Optional[MergeInterpolationMethod] = None, - force: Optional[bool] = False, + force: bool = False, merge_dest_directory: Optional[Path] = Field( default=None, description="Optional directory location for merged model" ), @@ -633,8 +648,8 @@ class ModelManagerService(ModelManagerServiceBase): model_name: str, base_model: BaseModelType, model_type: ModelType, - new_name: str = None, - new_base: BaseModelType = None, + new_name: Optional[str] = None, + new_base: Optional[BaseModelType] = None, ): """ Rename the indicated model. Can provide a new name and/or a new base. diff --git a/invokeai/app/services/models/board_image.py b/invokeai/app/services/models/board_image.py new file mode 100644 index 0000000000..fe585215f3 --- /dev/null +++ b/invokeai/app/services/models/board_image.py @@ -0,0 +1,8 @@ +from pydantic import Field + +from invokeai.app.util.model_exclude_null import BaseModelExcludeNull + + +class BoardImage(BaseModelExcludeNull): + board_id: str = Field(description="The id of the board") + image_name: str = Field(description="The name of the image") diff --git a/invokeai/app/services/models/board_record.py b/invokeai/app/services/models/board_record.py index 658698e794..53fa299faf 100644 --- a/invokeai/app/services/models/board_record.py +++ b/invokeai/app/services/models/board_record.py @@ -1,10 +1,11 @@ from typing import Optional, Union from datetime import datetime -from pydantic import BaseModel, Extra, Field, StrictBool, StrictStr +from pydantic import Field from invokeai.app.util.misc import get_iso_timestamp +from invokeai.app.util.model_exclude_null import BaseModelExcludeNull -class BoardRecord(BaseModel): +class BoardRecord(BaseModelExcludeNull): """Deserialized board record.""" board_id: str = Field(description="The unique ID of the board.") diff --git a/invokeai/app/services/models/image_record.py b/invokeai/app/services/models/image_record.py index a105d03ba8..a480fd0efd 100644 --- a/invokeai/app/services/models/image_record.py +++ b/invokeai/app/services/models/image_record.py @@ -1,13 +1,14 @@ import datetime from typing import Optional, Union -from pydantic import BaseModel, Extra, Field, StrictBool, StrictStr +from pydantic import Extra, Field, StrictBool, StrictStr from invokeai.app.models.image import ImageCategory, ResourceOrigin from invokeai.app.util.misc import get_iso_timestamp +from invokeai.app.util.model_exclude_null import BaseModelExcludeNull -class ImageRecord(BaseModel): +class ImageRecord(BaseModelExcludeNull): """Deserialized image record without metadata.""" image_name: str = Field(description="The unique name of the image.") @@ -38,15 +39,18 @@ class ImageRecord(BaseModel): description="The node ID that generated this image, if it is a generated image.", ) """The node ID that generated this image, if it is a generated image.""" + starred: bool = Field(description="Whether this image is starred.") + """Whether this image is starred.""" -class ImageRecordChanges(BaseModel, extra=Extra.forbid): +class ImageRecordChanges(BaseModelExcludeNull, extra=Extra.forbid): """A set of changes to apply to an image record. Only limited changes are valid: - `image_category`: change the category of an image - `session_id`: change the session associated with an image - `is_intermediate`: change the image's `is_intermediate` flag + - `starred`: change whether the image is starred """ image_category: Optional[ImageCategory] = Field(description="The image's new category.") @@ -58,9 +62,11 @@ class ImageRecordChanges(BaseModel, extra=Extra.forbid): """The image's new session ID.""" is_intermediate: Optional[StrictBool] = Field(default=None, description="The image's new `is_intermediate` flag.") """The image's new `is_intermediate` flag.""" + starred: Optional[StrictBool] = Field(default=None, description="The image's new `starred` state") + """The image's new `starred` state.""" -class ImageUrlsDTO(BaseModel): +class ImageUrlsDTO(BaseModelExcludeNull): """The URLs for an image and its thumbnail.""" image_name: str = Field(description="The unique name of the image.") @@ -76,11 +82,15 @@ class ImageDTO(ImageRecord, ImageUrlsDTO): board_id: Optional[str] = Field(description="The id of the board the image belongs to, if one exists.") """The id of the board the image belongs to, if one exists.""" + pass def image_record_to_dto( - image_record: ImageRecord, image_url: str, thumbnail_url: str, board_id: Optional[str] + image_record: ImageRecord, + image_url: str, + thumbnail_url: str, + board_id: Optional[str], ) -> ImageDTO: """Converts an image record to an image DTO.""" return ImageDTO( @@ -108,6 +118,7 @@ def deserialize_image_record(image_dict: dict) -> ImageRecord: updated_at = image_dict.get("updated_at", get_iso_timestamp()) deleted_at = image_dict.get("deleted_at", get_iso_timestamp()) is_intermediate = image_dict.get("is_intermediate", False) + starred = image_dict.get("starred", False) return ImageRecord( image_name=image_name, @@ -121,4 +132,5 @@ def deserialize_image_record(image_dict: dict) -> ImageRecord: updated_at=updated_at, deleted_at=deleted_at, is_intermediate=is_intermediate, + starred=starred, ) diff --git a/invokeai/app/services/processor.py b/invokeai/app/services/processor.py index 50fe217e05..37da17d318 100644 --- a/invokeai/app/services/processor.py +++ b/invokeai/app/services/processor.py @@ -1,14 +1,15 @@ import time import traceback -from threading import Event, Thread, BoundedSemaphore - -from ..invocations.baseinvocation import InvocationContext -from .invocation_queue import InvocationQueueItem -from .invoker import InvocationProcessorABC, Invoker -from ..models.exceptions import CanceledException +from threading import BoundedSemaphore, Event, Thread import invokeai.backend.util.logging as logger +from ..invocations.baseinvocation import InvocationContext +from ..models.exceptions import CanceledException +from .invocation_queue import InvocationQueueItem +from .invocation_stats import InvocationStatsServiceBase +from .invoker import InvocationProcessorABC, Invoker + class DefaultInvocationProcessor(InvocationProcessorABC): __invoker_thread: Thread @@ -35,6 +36,8 @@ class DefaultInvocationProcessor(InvocationProcessorABC): def __process(self, stop_event: Event): try: self.__threadLimit.acquire() + statistics: InvocationStatsServiceBase = self.__invoker.services.performance_statistics + while not stop_event.is_set(): try: queue_item: InvocationQueueItem = self.__invoker.services.queue.get() @@ -83,35 +86,43 @@ class DefaultInvocationProcessor(InvocationProcessorABC): # Invoke try: - outputs = invocation.invoke( - InvocationContext( - services=self.__invoker.services, - graph_execution_state_id=graph_execution_state.id, + graph_id = graph_execution_state.id + model_manager = self.__invoker.services.model_manager + with statistics.collect_stats(invocation, graph_id, model_manager): + # use the internal invoke_internal(), which wraps the node's invoke() method in + # this accomodates nodes which require a value, but get it only from a + # connection + outputs = invocation.invoke_internal( + InvocationContext( + services=self.__invoker.services, + graph_execution_state_id=graph_execution_state.id, + ) ) - ) - # Check queue to see if this is canceled, and skip if so - if self.__invoker.services.queue.is_canceled(graph_execution_state.id): - continue + # Check queue to see if this is canceled, and skip if so + if self.__invoker.services.queue.is_canceled(graph_execution_state.id): + continue - # Save outputs and history - graph_execution_state.complete(invocation.id, outputs) + # Save outputs and history + graph_execution_state.complete(invocation.id, outputs) - # Save the state changes - self.__invoker.services.graph_execution_manager.set(graph_execution_state) + # Save the state changes + self.__invoker.services.graph_execution_manager.set(graph_execution_state) - # Send complete event - self.__invoker.services.events.emit_invocation_complete( - graph_execution_state_id=graph_execution_state.id, - node=invocation.dict(), - source_node_id=source_node_id, - result=outputs.dict(), - ) + # Send complete event + self.__invoker.services.events.emit_invocation_complete( + graph_execution_state_id=graph_execution_state.id, + node=invocation.dict(), + source_node_id=source_node_id, + result=outputs.dict(), + ) + statistics.log_stats() except KeyboardInterrupt: pass except CanceledException: + statistics.reset_stats(graph_execution_state.id) pass except Exception as e: @@ -133,7 +144,7 @@ class DefaultInvocationProcessor(InvocationProcessorABC): error_type=e.__class__.__name__, error=error, ) - + statistics.reset_stats(graph_execution_state.id) pass # Check queue to see if this is canceled, and skip if so diff --git a/invokeai/app/services/sqlite.py b/invokeai/app/services/sqlite.py index 855f3f1939..3c46b1c2a0 100644 --- a/invokeai/app/services/sqlite.py +++ b/invokeai/app/services/sqlite.py @@ -49,7 +49,8 @@ class SqliteItemStorage(ItemStorageABC, Generic[T]): def _parse_item(self, item: str) -> T: item_type = get_args(self.__orig_class__)[0] - return parse_raw_as(item_type, item) + parsed = parse_raw_as(item_type, item) + return parsed def set(self, item: T): try: diff --git a/invokeai/app/services/urls.py b/invokeai/app/services/urls.py index 73d8ddadf4..7688b3bdd3 100644 --- a/invokeai/app/services/urls.py +++ b/invokeai/app/services/urls.py @@ -20,6 +20,6 @@ class LocalUrlService(UrlServiceBase): # These paths are determined by the routes in invokeai/app/api/routers/images.py if thumbnail: - return f"{self._base_url}/images/{image_basename}/thumbnail" + return f"{self._base_url}/images/i/{image_basename}/thumbnail" - return f"{self._base_url}/images/{image_basename}/full" + return f"{self._base_url}/images/i/{image_basename}/full" diff --git a/invokeai/app/util/controlnet_utils.py b/invokeai/app/util/controlnet_utils.py index 6f2c49fec2..1578598687 100644 --- a/invokeai/app/util/controlnet_utils.py +++ b/invokeai/app/util/controlnet_utils.py @@ -1,3 +1,4 @@ +from typing import Union import torch import numpy as np import cv2 @@ -5,7 +6,7 @@ from PIL import Image from diffusers.utils import PIL_INTERPOLATION from einops import rearrange -from controlnet_aux.util import HWC3, resize_image +from controlnet_aux.util import HWC3 ################################################################### # Copy of scripts/lvminthin.py from Mikubill/sd-webui-controlnet @@ -232,7 +233,8 @@ def np_img_resize(np_img: np.ndarray, resize_mode: str, h: int, w: int, device: k0 = float(h) / old_h k1 = float(w) / old_w - safeint = lambda x: int(np.round(x)) + def safeint(x: Union[int, float]) -> int: + return int(np.round(x)) # if resize_mode == external_code.ResizeMode.OUTER_FIT: if resize_mode == "fill_resize": # OUTER_FIT diff --git a/invokeai/app/util/misc.py b/invokeai/app/util/misc.py index 503f3af4c8..8702d86c67 100644 --- a/invokeai/app/util/misc.py +++ b/invokeai/app/util/misc.py @@ -18,5 +18,5 @@ SEED_MAX = np.iinfo(np.uint32).max def get_random_seed(): - rng = np.random.default_rng(seed=0) + rng = np.random.default_rng(seed=None) return int(rng.integers(0, SEED_MAX)) diff --git a/invokeai/app/util/model_exclude_null.py b/invokeai/app/util/model_exclude_null.py new file mode 100644 index 0000000000..d864b8fab8 --- /dev/null +++ b/invokeai/app/util/model_exclude_null.py @@ -0,0 +1,23 @@ +from typing import Any +from pydantic import BaseModel + + +""" +We want to exclude null values from objects that make their way to the client. + +Unfortunately there is no built-in way to do this in pydantic, so we need to override the default +dict method to do this. + +From https://github.com/tiangolo/fastapi/discussions/8882#discussioncomment-5154541 +""" + + +class BaseModelExcludeNull(BaseModel): + def dict(self, *args, **kwargs) -> dict[str, Any]: + """ + Override the default dict method to exclude None values in the response + """ + kwargs.pop("exclude_none", None) + return super().dict(*args, exclude_none=True, **kwargs) + + pass diff --git a/invokeai/app/util/step_callback.py b/invokeai/app/util/step_callback.py index 994d83e705..f6cccfb4b8 100644 --- a/invokeai/app/util/step_callback.py +++ b/invokeai/app/util/step_callback.py @@ -4,9 +4,8 @@ from invokeai.app.models.exceptions import CanceledException from invokeai.app.models.image import ProgressImage from ..invocations.baseinvocation import InvocationContext from ...backend.util.util import image_to_dataURL -from ...backend.generator.base import Generator from ...backend.stable_diffusion import PipelineIntermediateState -from invokeai.app.services.config import InvokeAIAppConfig +from ...backend.model_management.models import BaseModelType def sample_to_lowres_estimated_image(samples, latent_rgb_factors, smooth_matrix=None): @@ -29,6 +28,7 @@ def stable_diffusion_step_callback( intermediate_state: PipelineIntermediateState, node: dict, source_node_id: str, + base_model: BaseModelType, ): if context.services.queue.is_canceled(context.graph_execution_state_id): raise CanceledException @@ -56,23 +56,50 @@ def stable_diffusion_step_callback( # TODO: only output a preview image when requested - # origingally adapted from code by @erucipe and @keturn here: - # https://discuss.huggingface.co/t/decoding-latents-to-rgb-without-upscaling/23204/7 + if base_model in [BaseModelType.StableDiffusionXL, BaseModelType.StableDiffusionXLRefiner]: + # fast latents preview matrix for sdxl + # generated by @StAlKeR7779 + sdxl_latent_rgb_factors = torch.tensor( + [ + # R G B + [0.3816, 0.4930, 0.5320], + [-0.3753, 0.1631, 0.1739], + [0.1770, 0.3588, -0.2048], + [-0.4350, -0.2644, -0.4289], + ], + dtype=sample.dtype, + device=sample.device, + ) - # these updated numbers for v1.5 are from @torridgristle - v1_5_latent_rgb_factors = torch.tensor( - [ - # R G B - [0.3444, 0.1385, 0.0670], # L1 - [0.1247, 0.4027, 0.1494], # L2 - [-0.3192, 0.2513, 0.2103], # L3 - [-0.1307, -0.1874, -0.7445], # L4 - ], - dtype=sample.dtype, - device=sample.device, - ) + sdxl_smooth_matrix = torch.tensor( + [ + [0.0358, 0.0964, 0.0358], + [0.0964, 0.4711, 0.0964], + [0.0358, 0.0964, 0.0358], + ], + dtype=sample.dtype, + device=sample.device, + ) - image = sample_to_lowres_estimated_image(sample, v1_5_latent_rgb_factors) + image = sample_to_lowres_estimated_image(sample, sdxl_latent_rgb_factors, sdxl_smooth_matrix) + else: + # origingally adapted from code by @erucipe and @keturn here: + # https://discuss.huggingface.co/t/decoding-latents-to-rgb-without-upscaling/23204/7 + + # these updated numbers for v1.5 are from @torridgristle + v1_5_latent_rgb_factors = torch.tensor( + [ + # R G B + [0.3444, 0.1385, 0.0670], # L1 + [0.1247, 0.4027, 0.1494], # L2 + [-0.3192, 0.2513, 0.2103], # L3 + [-0.1307, -0.1874, -0.7445], # L4 + ], + dtype=sample.dtype, + device=sample.device, + ) + + image = sample_to_lowres_estimated_image(sample, v1_5_latent_rgb_factors) (width, height) = image.size width *= 8 @@ -86,59 +113,6 @@ def stable_diffusion_step_callback( source_node_id=source_node_id, progress_image=ProgressImage(width=width, height=height, dataURL=dataURL), step=intermediate_state.step, - total_steps=node["steps"], - ) - - -def stable_diffusion_xl_step_callback( - context: InvocationContext, - node: dict, - source_node_id: str, - sample, - step, - total_steps, -): - if context.services.queue.is_canceled(context.graph_execution_state_id): - raise CanceledException - - sdxl_latent_rgb_factors = torch.tensor( - [ - # R G B - [0.3816, 0.4930, 0.5320], - [-0.3753, 0.1631, 0.1739], - [0.1770, 0.3588, -0.2048], - [-0.4350, -0.2644, -0.4289], - ], - dtype=sample.dtype, - device=sample.device, - ) - - sdxl_smooth_matrix = torch.tensor( - [ - # [ 0.0478, 0.1285, 0.0478], - # [ 0.1285, 0.2948, 0.1285], - # [ 0.0478, 0.1285, 0.0478], - [0.0358, 0.0964, 0.0358], - [0.0964, 0.4711, 0.0964], - [0.0358, 0.0964, 0.0358], - ], - dtype=sample.dtype, - device=sample.device, - ) - - image = sample_to_lowres_estimated_image(sample, sdxl_latent_rgb_factors, sdxl_smooth_matrix) - - (width, height) = image.size - width *= 8 - height *= 8 - - dataURL = image_to_dataURL(image, image_format="JPEG") - - context.services.events.emit_generator_progress( - graph_execution_state_id=context.graph_execution_state_id, - node=node, - source_node_id=source_node_id, - progress_image=ProgressImage(width=width, height=height, dataURL=dataURL), - step=step, - total_steps=total_steps, + order=intermediate_state.order, + total_steps=intermediate_state.total_steps, ) diff --git a/invokeai/backend/__init__.py b/invokeai/backend/__init__.py index aa2a1f1ca6..2e77d12eca 100644 --- a/invokeai/backend/__init__.py +++ b/invokeai/backend/__init__.py @@ -1,6 +1,5 @@ """ Initialization file for invokeai.backend """ -from .generator import InvokeAIGeneratorBasicParams, InvokeAIGenerator, InvokeAIGeneratorOutput, Img2Img, Inpaint -from .model_management import ModelManager, ModelCache, BaseModelType, ModelType, SubModelType, ModelInfo -from .model_management.models import SilenceWarnings +from .model_management import ModelManager, ModelCache, BaseModelType, ModelType, SubModelType, ModelInfo # noqa: F401 +from .model_management.models import SilenceWarnings # noqa: F401 diff --git a/invokeai/backend/generator/__init__.py b/invokeai/backend/generator/__init__.py deleted file mode 100644 index 8a7f1c9167..0000000000 --- a/invokeai/backend/generator/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -""" -Initialization file for the invokeai.generator package -""" -from .base import ( - InvokeAIGenerator, - InvokeAIGeneratorBasicParams, - InvokeAIGeneratorOutput, - Img2Img, - Inpaint, - Generator, -) -from .inpaint import infill_methods diff --git a/invokeai/backend/generator/base.py b/invokeai/backend/generator/base.py deleted file mode 100644 index af3231a7d1..0000000000 --- a/invokeai/backend/generator/base.py +++ /dev/null @@ -1,559 +0,0 @@ -""" -Base class for invokeai.backend.generator.* -including img2img, txt2img, and inpaint -""" -from __future__ import annotations - -import itertools -import dataclasses -import diffusers -import os -import random -import traceback -from abc import ABCMeta -from argparse import Namespace -from contextlib import nullcontext - -import cv2 -import numpy as np -import torch -from PIL import Image, ImageChops, ImageFilter -from accelerate.utils import set_seed -from diffusers import DiffusionPipeline -from tqdm import trange -from typing import Callable, List, Iterator, Optional, Type, Union -from dataclasses import dataclass, field -from diffusers.schedulers import SchedulerMixin as Scheduler - -import invokeai.backend.util.logging as logger -from ..image_util import configure_model_padding -from ..util.util import rand_perlin_2d -from ..stable_diffusion.diffusers_pipeline import StableDiffusionGeneratorPipeline -from ..stable_diffusion.schedulers import SCHEDULER_MAP - -downsampling = 8 - - -@dataclass -class InvokeAIGeneratorBasicParams: - seed: Optional[int] = None - width: int = 512 - height: int = 512 - cfg_scale: float = 7.5 - steps: int = 20 - ddim_eta: float = 0.0 - scheduler: str = "ddim" - precision: str = "float16" - perlin: float = 0.0 - threshold: float = 0.0 - seamless: bool = False - seamless_axes: List[str] = field(default_factory=lambda: ["x", "y"]) - h_symmetry_time_pct: Optional[float] = None - v_symmetry_time_pct: Optional[float] = None - variation_amount: float = 0.0 - with_variations: list = field(default_factory=list) - - -@dataclass -class InvokeAIGeneratorOutput: - """ - InvokeAIGeneratorOutput is a dataclass that contains the outputs of a generation - operation, including the image, its seed, the model name used to generate the image - and the model hash, as well as all the generate() parameters that went into - generating the image (in .params, also available as attributes) - """ - - image: Image.Image - seed: int - model_hash: str - attention_maps_images: List[Image.Image] - params: Namespace - - -# we are interposing a wrapper around the original Generator classes so that -# old code that calls Generate will continue to work. -class InvokeAIGenerator(metaclass=ABCMeta): - def __init__( - self, - model_info: dict, - params: InvokeAIGeneratorBasicParams = InvokeAIGeneratorBasicParams(), - **kwargs, - ): - self.model_info = model_info - self.params = params - self.kwargs = kwargs - - def generate( - self, - conditioning: tuple, - scheduler, - callback: Optional[Callable] = None, - step_callback: Optional[Callable] = None, - iterations: int = 1, - **keyword_args, - ) -> Iterator[InvokeAIGeneratorOutput]: - """ - Return an iterator across the indicated number of generations. - Each time the iterator is called it will return an InvokeAIGeneratorOutput - object. Use like this: - - outputs = txt2img.generate(prompt='banana sushi', iterations=5) - for result in outputs: - print(result.image, result.seed) - - In the typical case of wanting to get just a single image, iterations - defaults to 1 and do: - - output = next(txt2img.generate(prompt='banana sushi') - - Pass None to get an infinite iterator. - - outputs = txt2img.generate(prompt='banana sushi', iterations=None) - for o in outputs: - print(o.image, o.seed) - - """ - generator_args = dataclasses.asdict(self.params) - generator_args.update(keyword_args) - - model_info = self.model_info - model_name = model_info.name - model_hash = model_info.hash - with model_info.context as model: - gen_class = self._generator_class() - generator = gen_class(model, self.params.precision, **self.kwargs) - if self.params.variation_amount > 0: - generator.set_variation( - generator_args.get("seed"), - generator_args.get("variation_amount"), - generator_args.get("with_variations"), - ) - - if isinstance(model, DiffusionPipeline): - for component in [model.unet, model.vae]: - configure_model_padding( - component, generator_args.get("seamless", False), generator_args.get("seamless_axes") - ) - else: - configure_model_padding( - model, generator_args.get("seamless", False), generator_args.get("seamless_axes") - ) - - iteration_count = range(iterations) if iterations else itertools.count(start=0, step=1) - for i in iteration_count: - results = generator.generate( - conditioning=conditioning, - step_callback=step_callback, - sampler=scheduler, - **generator_args, - ) - output = InvokeAIGeneratorOutput( - image=results[0][0], - seed=results[0][1], - attention_maps_images=results[0][2], - model_hash=model_hash, - params=Namespace(model_name=model_name, **generator_args), - ) - if callback: - callback(output) - yield output - - @classmethod - def schedulers(self) -> List[str]: - """ - Return list of all the schedulers that we currently handle. - """ - return list(SCHEDULER_MAP.keys()) - - def load_generator(self, model: StableDiffusionGeneratorPipeline, generator_class: Type[Generator]): - return generator_class(model, self.params.precision) - - @classmethod - def _generator_class(cls) -> Type[Generator]: - """ - In derived classes return the name of the generator to apply. - If you don't override will return the name of the derived - class, which nicely parallels the generator class names. - """ - return Generator - - -# ------------------------------------ -class Img2Img(InvokeAIGenerator): - def generate( - self, init_image: Union[Image.Image, torch.FloatTensor], strength: float = 0.75, **keyword_args - ) -> Iterator[InvokeAIGeneratorOutput]: - return super().generate(init_image=init_image, strength=strength, **keyword_args) - - @classmethod - def _generator_class(cls): - from .img2img import Img2Img - - return Img2Img - - -# ------------------------------------ -# Takes all the arguments of Img2Img and adds the mask image and the seam/infill stuff -class Inpaint(Img2Img): - def generate( - self, - mask_image: Union[Image.Image, torch.FloatTensor], - # Seam settings - when 0, doesn't fill seam - seam_size: int = 96, - seam_blur: int = 16, - seam_strength: float = 0.7, - seam_steps: int = 30, - tile_size: int = 32, - inpaint_replace=False, - infill_method=None, - inpaint_width=None, - inpaint_height=None, - inpaint_fill: tuple(int) = (0x7F, 0x7F, 0x7F, 0xFF), - **keyword_args, - ) -> Iterator[InvokeAIGeneratorOutput]: - return super().generate( - mask_image=mask_image, - seam_size=seam_size, - seam_blur=seam_blur, - seam_strength=seam_strength, - seam_steps=seam_steps, - tile_size=tile_size, - inpaint_replace=inpaint_replace, - infill_method=infill_method, - inpaint_width=inpaint_width, - inpaint_height=inpaint_height, - inpaint_fill=inpaint_fill, - **keyword_args, - ) - - @classmethod - def _generator_class(cls): - from .inpaint import Inpaint - - return Inpaint - - -class Generator: - downsampling_factor: int - latent_channels: int - precision: str - model: DiffusionPipeline - - def __init__(self, model: DiffusionPipeline, precision: str, **kwargs): - self.model = model - self.precision = precision - self.seed = None - self.latent_channels = model.unet.config.in_channels - self.downsampling_factor = downsampling # BUG: should come from model or config - self.perlin = 0.0 - self.threshold = 0 - self.variation_amount = 0 - self.with_variations = [] - self.use_mps_noise = False - self.free_gpu_mem = None - - # this is going to be overridden in img2img.py, txt2img.py and inpaint.py - def get_make_image(self, **kwargs): - """ - Returns a function returning an image derived from the prompt and the initial image - Return value depends on the seed at the time you call it - """ - raise NotImplementedError("image_iterator() must be implemented in a descendent class") - - def set_variation(self, seed, variation_amount, with_variations): - self.seed = seed - self.variation_amount = variation_amount - self.with_variations = with_variations - - def generate( - self, - width, - height, - sampler, - init_image=None, - iterations=1, - seed=None, - image_callback=None, - step_callback=None, - threshold=0.0, - perlin=0.0, - h_symmetry_time_pct=None, - v_symmetry_time_pct=None, - free_gpu_mem: bool = False, - **kwargs, - ): - scope = nullcontext - self.free_gpu_mem = free_gpu_mem - attention_maps_images = [] - attention_maps_callback = lambda saver: attention_maps_images.append(saver.get_stacked_maps_image()) - make_image = self.get_make_image( - sampler=sampler, - init_image=init_image, - width=width, - height=height, - step_callback=step_callback, - threshold=threshold, - perlin=perlin, - h_symmetry_time_pct=h_symmetry_time_pct, - v_symmetry_time_pct=v_symmetry_time_pct, - attention_maps_callback=attention_maps_callback, - **kwargs, - ) - results = [] - seed = seed if seed is not None and seed >= 0 else self.new_seed() - first_seed = seed - seed, initial_noise = self.generate_initial_noise(seed, width, height) - - # There used to be an additional self.model.ema_scope() here, but it breaks - # the inpaint-1.5 model. Not sure what it did.... ? - with scope(self.model.device.type): - for n in trange(iterations, desc="Generating"): - x_T = None - if self.variation_amount > 0: - set_seed(seed) - target_noise = self.get_noise(width, height) - x_T = self.slerp(self.variation_amount, initial_noise, target_noise) - elif initial_noise is not None: - # i.e. we specified particular variations - x_T = initial_noise - else: - set_seed(seed) - try: - x_T = self.get_noise(width, height) - except: - logger.error("An error occurred while getting initial noise") - print(traceback.format_exc()) - - # Pass on the seed in case a layer beneath us needs to generate noise on its own. - image = make_image(x_T, seed) - - results.append([image, seed, attention_maps_images]) - - if image_callback is not None: - attention_maps_image = None if len(attention_maps_images) == 0 else attention_maps_images[-1] - image_callback( - image, - seed, - first_seed=first_seed, - attention_maps_image=attention_maps_image, - ) - - seed = self.new_seed() - - # Free up memory from the last generation. - clear_cuda_cache = kwargs["clear_cuda_cache"] if "clear_cuda_cache" in kwargs else None - if clear_cuda_cache is not None: - clear_cuda_cache() - - return results - - def sample_to_image(self, samples) -> Image.Image: - """ - Given samples returned from a sampler, converts - it into a PIL Image - """ - with torch.inference_mode(): - image = self.model.decode_latents(samples) - return self.model.numpy_to_pil(image)[0] - - def repaste_and_color_correct( - self, - result: Image.Image, - init_image: Image.Image, - init_mask: Image.Image, - mask_blur_radius: int = 8, - ) -> Image.Image: - if init_image is None or init_mask is None: - return result - - # Get the original alpha channel of the mask if there is one. - # Otherwise it is some other black/white image format ('1', 'L' or 'RGB') - pil_init_mask = init_mask.getchannel("A") if init_mask.mode == "RGBA" else init_mask.convert("L") - pil_init_image = init_image.convert("RGBA") # Add an alpha channel if one doesn't exist - - # Build an image with only visible pixels from source to use as reference for color-matching. - init_rgb_pixels = np.asarray(init_image.convert("RGB"), dtype=np.uint8) - init_a_pixels = np.asarray(pil_init_image.getchannel("A"), dtype=np.uint8) - init_mask_pixels = np.asarray(pil_init_mask, dtype=np.uint8) - - # Get numpy version of result - np_image = np.asarray(result, dtype=np.uint8) - - # Mask and calculate mean and standard deviation - mask_pixels = init_a_pixels * init_mask_pixels > 0 - np_init_rgb_pixels_masked = init_rgb_pixels[mask_pixels, :] - np_image_masked = np_image[mask_pixels, :] - - if np_init_rgb_pixels_masked.size > 0: - init_means = np_init_rgb_pixels_masked.mean(axis=0) - init_std = np_init_rgb_pixels_masked.std(axis=0) - gen_means = np_image_masked.mean(axis=0) - gen_std = np_image_masked.std(axis=0) - - # Color correct - np_matched_result = np_image.copy() - np_matched_result[:, :, :] = ( - ( - ( - (np_matched_result[:, :, :].astype(np.float32) - gen_means[None, None, :]) - / gen_std[None, None, :] - ) - * init_std[None, None, :] - + init_means[None, None, :] - ) - .clip(0, 255) - .astype(np.uint8) - ) - matched_result = Image.fromarray(np_matched_result, mode="RGB") - else: - matched_result = Image.fromarray(np_image, mode="RGB") - - # Blur the mask out (into init image) by specified amount - if mask_blur_radius > 0: - nm = np.asarray(pil_init_mask, dtype=np.uint8) - nmd = cv2.erode( - nm, - kernel=np.ones((3, 3), dtype=np.uint8), - iterations=int(mask_blur_radius / 2), - ) - pmd = Image.fromarray(nmd, mode="L") - blurred_init_mask = pmd.filter(ImageFilter.BoxBlur(mask_blur_radius)) - else: - blurred_init_mask = pil_init_mask - - multiplied_blurred_init_mask = ImageChops.multiply(blurred_init_mask, self.pil_image.split()[-1]) - - # Paste original on color-corrected generation (using blurred mask) - matched_result.paste(init_image, (0, 0), mask=multiplied_blurred_init_mask) - return matched_result - - @staticmethod - def sample_to_lowres_estimated_image(samples): - # origingally adapted from code by @erucipe and @keturn here: - # https://discuss.huggingface.co/t/decoding-latents-to-rgb-without-upscaling/23204/7 - - # these updated numbers for v1.5 are from @torridgristle - v1_5_latent_rgb_factors = torch.tensor( - [ - # R G B - [0.3444, 0.1385, 0.0670], # L1 - [0.1247, 0.4027, 0.1494], # L2 - [-0.3192, 0.2513, 0.2103], # L3 - [-0.1307, -0.1874, -0.7445], # L4 - ], - dtype=samples.dtype, - device=samples.device, - ) - - latent_image = samples[0].permute(1, 2, 0) @ v1_5_latent_rgb_factors - latents_ubyte = ( - ((latent_image + 1) / 2).clamp(0, 1).mul(0xFF).byte() # change scale from -1..1 to 0..1 # to 0..255 - ).cpu() - - return Image.fromarray(latents_ubyte.numpy()) - - def generate_initial_noise(self, seed, width, height): - initial_noise = None - if self.variation_amount > 0 or len(self.with_variations) > 0: - # use fixed initial noise plus random noise per iteration - set_seed(seed) - initial_noise = self.get_noise(width, height) - for v_seed, v_weight in self.with_variations: - seed = v_seed - set_seed(seed) - next_noise = self.get_noise(width, height) - initial_noise = self.slerp(v_weight, initial_noise, next_noise) - if self.variation_amount > 0: - random.seed() # reset RNG to an actually random state, so we can get a random seed for variations - seed = random.randrange(0, np.iinfo(np.uint32).max) - return (seed, initial_noise) - - def get_perlin_noise(self, width, height): - fixdevice = "cpu" if (self.model.device.type == "mps") else self.model.device - # limit noise to only the diffusion image channels, not the mask channels - input_channels = min(self.latent_channels, 4) - # round up to the nearest block of 8 - temp_width = int((width + 7) / 8) * 8 - temp_height = int((height + 7) / 8) * 8 - noise = torch.stack( - [ - rand_perlin_2d((temp_height, temp_width), (8, 8), device=self.model.device).to(fixdevice) - for _ in range(input_channels) - ], - dim=0, - ).to(self.model.device) - return noise[0:4, 0:height, 0:width] - - def new_seed(self): - self.seed = random.randrange(0, np.iinfo(np.uint32).max) - return self.seed - - def slerp(self, t, v0, v1, DOT_THRESHOLD=0.9995): - """ - Spherical linear interpolation - Args: - t (float/np.ndarray): Float value between 0.0 and 1.0 - v0 (np.ndarray): Starting vector - v1 (np.ndarray): Final vector - DOT_THRESHOLD (float): Threshold for considering the two vectors as - colineal. Not recommended to alter this. - Returns: - v2 (np.ndarray): Interpolation vector between v0 and v1 - """ - inputs_are_torch = False - if not isinstance(v0, np.ndarray): - inputs_are_torch = True - v0 = v0.detach().cpu().numpy() - if not isinstance(v1, np.ndarray): - inputs_are_torch = True - v1 = v1.detach().cpu().numpy() - - dot = np.sum(v0 * v1 / (np.linalg.norm(v0) * np.linalg.norm(v1))) - if np.abs(dot) > DOT_THRESHOLD: - v2 = (1 - t) * v0 + t * v1 - else: - theta_0 = np.arccos(dot) - sin_theta_0 = np.sin(theta_0) - theta_t = theta_0 * t - sin_theta_t = np.sin(theta_t) - s0 = np.sin(theta_0 - theta_t) / sin_theta_0 - s1 = sin_theta_t / sin_theta_0 - v2 = s0 * v0 + s1 * v1 - - if inputs_are_torch: - v2 = torch.from_numpy(v2).to(self.model.device) - - return v2 - - # this is a handy routine for debugging use. Given a generated sample, - # convert it into a PNG image and store it at the indicated path - def save_sample(self, sample, filepath): - image = self.sample_to_image(sample) - dirname = os.path.dirname(filepath) or "." - if not os.path.exists(dirname): - logger.info(f"creating directory {dirname}") - os.makedirs(dirname, exist_ok=True) - image.save(filepath, "PNG") - - def torch_dtype(self) -> torch.dtype: - return torch.float16 if self.precision == "float16" else torch.float32 - - # returns a tensor filled with random numbers from a normal distribution - def get_noise(self, width, height): - device = self.model.device - # limit noise to only the diffusion image channels, not the mask channels - input_channels = min(self.latent_channels, 4) - x = torch.randn( - [ - 1, - input_channels, - height // self.downsampling_factor, - width // self.downsampling_factor, - ], - dtype=self.torch_dtype(), - device=device, - ) - if self.perlin > 0.0: - perlin_noise = self.get_perlin_noise(width // self.downsampling_factor, height // self.downsampling_factor) - x = (1 - self.perlin) * x + self.perlin * perlin_noise - return x diff --git a/invokeai/backend/generator/img2img.py b/invokeai/backend/generator/img2img.py deleted file mode 100644 index 5490b2325c..0000000000 --- a/invokeai/backend/generator/img2img.py +++ /dev/null @@ -1,92 +0,0 @@ -""" -invokeai.backend.generator.img2img descends from .generator -""" -from typing import Optional - -import torch -from accelerate.utils import set_seed -from diffusers import logging - -from ..stable_diffusion import ( - ConditioningData, - PostprocessingSettings, - StableDiffusionGeneratorPipeline, -) -from .base import Generator - - -class Img2Img(Generator): - def __init__(self, model, precision): - super().__init__(model, precision) - self.init_latent = None # by get_noise() - - def get_make_image( - self, - sampler, - steps, - cfg_scale, - ddim_eta, - conditioning, - init_image, - strength, - step_callback=None, - threshold=0.0, - warmup=0.2, - perlin=0.0, - h_symmetry_time_pct=None, - v_symmetry_time_pct=None, - attention_maps_callback=None, - **kwargs, - ): - """ - Returns a function returning an image derived from the prompt and the initial image - Return value depends on the seed at the time you call it. - """ - self.perlin = perlin - - # noinspection PyTypeChecker - pipeline: StableDiffusionGeneratorPipeline = self.model - pipeline.scheduler = sampler - - uc, c, extra_conditioning_info = conditioning - conditioning_data = ConditioningData( - uc, - c, - cfg_scale, - extra_conditioning_info, - postprocessing_settings=PostprocessingSettings( - threshold=threshold, - warmup=warmup, - h_symmetry_time_pct=h_symmetry_time_pct, - v_symmetry_time_pct=v_symmetry_time_pct, - ), - ).add_scheduler_args_if_applicable(pipeline.scheduler, eta=ddim_eta) - - def make_image(x_T: torch.Tensor, seed: int): - # FIXME: use x_T for initial seeded noise - # We're not at the moment because the pipeline automatically resizes init_image if - # necessary, which the x_T input might not match. - # In the meantime, reset the seed prior to generating pipeline output so we at least get the same result. - logging.set_verbosity_error() # quench safety check warnings - pipeline_output = pipeline.img2img_from_embeddings( - init_image, - strength, - steps, - conditioning_data, - noise_func=self.get_noise_like, - callback=step_callback, - seed=seed, - ) - if pipeline_output.attention_map_saver is not None and attention_maps_callback is not None: - attention_maps_callback(pipeline_output.attention_map_saver) - return pipeline.numpy_to_pil(pipeline_output.images)[0] - - return make_image - - def get_noise_like(self, like: torch.Tensor): - device = like.device - x = torch.randn_like(like, device=device) - if self.perlin > 0.0: - shape = like.shape - x = (1 - self.perlin) * x + self.perlin * self.get_perlin_noise(shape[3], shape[2]) - return x diff --git a/invokeai/backend/generator/inpaint.py b/invokeai/backend/generator/inpaint.py deleted file mode 100644 index 7aeb3d4809..0000000000 --- a/invokeai/backend/generator/inpaint.py +++ /dev/null @@ -1,379 +0,0 @@ -""" -invokeai.backend.generator.inpaint descends from .generator -""" -from __future__ import annotations - -import math -from typing import Tuple, Union, Optional - -import cv2 -import numpy as np -import torch -from PIL import Image, ImageChops, ImageFilter, ImageOps - -from ..image_util import PatchMatch, debug_image -from ..stable_diffusion.diffusers_pipeline import ( - ConditioningData, - StableDiffusionGeneratorPipeline, - image_resized_to_grid_as_tensor, -) -from .img2img import Img2Img - - -def infill_methods() -> list[str]: - methods = [ - "tile", - "solid", - ] - if PatchMatch.patchmatch_available(): - methods.insert(0, "patchmatch") - return methods - - -class Inpaint(Img2Img): - def __init__(self, model, precision): - self.inpaint_height = 0 - self.inpaint_width = 0 - self.enable_image_debugging = False - self.init_latent = None - self.pil_image = None - self.pil_mask = None - self.mask_blur_radius = 0 - self.infill_method = None - super().__init__(model, precision) - - # Outpaint support code - def get_tile_images(self, image: np.ndarray, width=8, height=8): - _nrows, _ncols, depth = image.shape - _strides = image.strides - - nrows, _m = divmod(_nrows, height) - ncols, _n = divmod(_ncols, width) - if _m != 0 or _n != 0: - return None - - return np.lib.stride_tricks.as_strided( - np.ravel(image), - shape=(nrows, ncols, height, width, depth), - strides=(height * _strides[0], width * _strides[1], *_strides), - writeable=False, - ) - - def infill_patchmatch(self, im: Image.Image) -> Image.Image: - if im.mode != "RGBA": - return im - - # Skip patchmatch if patchmatch isn't available - if not PatchMatch.patchmatch_available(): - return im - - # Patchmatch (note, we may want to expose patch_size? Increasing it significantly impacts performance though) - im_patched_np = PatchMatch.inpaint(im.convert("RGB"), ImageOps.invert(im.split()[-1]), patch_size=3) - im_patched = Image.fromarray(im_patched_np, mode="RGB") - return im_patched - - def tile_fill_missing(self, im: Image.Image, tile_size: int = 16, seed: Optional[int] = None) -> Image.Image: - # Only fill if there's an alpha layer - if im.mode != "RGBA": - return im - - a = np.asarray(im, dtype=np.uint8) - - tile_size_tuple = (tile_size, tile_size) - - # Get the image as tiles of a specified size - tiles = self.get_tile_images(a, *tile_size_tuple).copy() - - # Get the mask as tiles - tiles_mask = tiles[:, :, :, :, 3] - - # Find any mask tiles with any fully transparent pixels (we will be replacing these later) - tmask_shape = tiles_mask.shape - tiles_mask = tiles_mask.reshape(math.prod(tiles_mask.shape)) - n, ny = (math.prod(tmask_shape[0:2])), math.prod(tmask_shape[2:]) - tiles_mask = tiles_mask > 0 - tiles_mask = tiles_mask.reshape((n, ny)).all(axis=1) - - # Get RGB tiles in single array and filter by the mask - tshape = tiles.shape - tiles_all = tiles.reshape((math.prod(tiles.shape[0:2]), *tiles.shape[2:])) - filtered_tiles = tiles_all[tiles_mask] - - if len(filtered_tiles) == 0: - return im - - # Find all invalid tiles and replace with a random valid tile - replace_count = (tiles_mask == False).sum() - rng = np.random.default_rng(seed=seed) - tiles_all[np.logical_not(tiles_mask)] = filtered_tiles[ - rng.choice(filtered_tiles.shape[0], replace_count), :, :, : - ] - - # Convert back to an image - tiles_all = tiles_all.reshape(tshape) - tiles_all = tiles_all.swapaxes(1, 2) - st = tiles_all.reshape( - ( - math.prod(tiles_all.shape[0:2]), - math.prod(tiles_all.shape[2:4]), - tiles_all.shape[4], - ) - ) - si = Image.fromarray(st, mode="RGBA") - - return si - - def mask_edge(self, mask: Image.Image, edge_size: int, edge_blur: int) -> Image.Image: - npimg = np.asarray(mask, dtype=np.uint8) - - # Detect any partially transparent regions - npgradient = np.uint8(255 * (1.0 - np.floor(np.abs(0.5 - np.float32(npimg) / 255.0) * 2.0))) - - # Detect hard edges - npedge = cv2.Canny(npimg, threshold1=100, threshold2=200) - - # Combine - npmask = npgradient + npedge - - # Expand - npmask = cv2.dilate(npmask, np.ones((3, 3), np.uint8), iterations=int(edge_size / 2)) - - new_mask = Image.fromarray(npmask) - - if edge_blur > 0: - new_mask = new_mask.filter(ImageFilter.BoxBlur(edge_blur)) - - return ImageOps.invert(new_mask) - - def seam_paint( - self, - im: Image.Image, - seam_size: int, - seam_blur: int, - seed, - steps, - cfg_scale, - ddim_eta, - conditioning, - strength, - noise, - infill_method, - step_callback, - ) -> Image.Image: - hard_mask = self.pil_image.split()[-1].copy() - mask = self.mask_edge(hard_mask, seam_size, seam_blur) - - make_image = self.get_make_image( - steps, - cfg_scale, - ddim_eta, - conditioning, - init_image=im.copy().convert("RGBA"), - mask_image=mask, - strength=strength, - mask_blur_radius=0, - seam_size=0, - step_callback=step_callback, - inpaint_width=im.width, - inpaint_height=im.height, - infill_method=infill_method, - ) - - seam_noise = self.get_noise(im.width, im.height) - - result = make_image(seam_noise, seed=None) - - return result - - @torch.no_grad() - def get_make_image( - self, - steps, - cfg_scale, - ddim_eta, - conditioning, - init_image: Union[Image.Image, torch.FloatTensor], - mask_image: Union[Image.Image, torch.FloatTensor], - strength: float, - mask_blur_radius: int = 8, - # Seam settings - when 0, doesn't fill seam - seam_size: int = 96, - seam_blur: int = 16, - seam_strength: float = 0.7, - seam_steps: int = 30, - tile_size: int = 32, - step_callback=None, - inpaint_replace=False, - enable_image_debugging=False, - infill_method=None, - inpaint_width=None, - inpaint_height=None, - inpaint_fill: Tuple[int, int, int, int] = (0x7F, 0x7F, 0x7F, 0xFF), - attention_maps_callback=None, - **kwargs, - ): - """ - Returns a function returning an image derived from the prompt and - the initial image + mask. Return value depends on the seed at - the time you call it. kwargs are 'init_latent' and 'strength' - """ - - self.enable_image_debugging = enable_image_debugging - infill_method = infill_method or infill_methods()[0] - self.infill_method = infill_method - - self.inpaint_width = inpaint_width - self.inpaint_height = inpaint_height - - if isinstance(init_image, Image.Image): - self.pil_image = init_image.copy() - - # Do infill - if infill_method == "patchmatch" and PatchMatch.patchmatch_available(): - init_filled = self.infill_patchmatch(self.pil_image.copy()) - elif infill_method == "tile": - init_filled = self.tile_fill_missing(self.pil_image.copy(), seed=self.seed, tile_size=tile_size) - elif infill_method == "solid": - solid_bg = Image.new("RGBA", init_image.size, inpaint_fill) - init_filled = Image.alpha_composite(solid_bg, init_image) - else: - raise ValueError(f"Non-supported infill type {infill_method}", infill_method) - init_filled.paste(init_image, (0, 0), init_image.split()[-1]) - - # Resize if requested for inpainting - if inpaint_width and inpaint_height: - init_filled = init_filled.resize((inpaint_width, inpaint_height)) - - debug_image(init_filled, "init_filled", debug_status=self.enable_image_debugging) - - # Create init tensor - init_image = image_resized_to_grid_as_tensor(init_filled.convert("RGB")) - - if isinstance(mask_image, Image.Image): - self.pil_mask = mask_image.copy() - debug_image( - mask_image, - "mask_image BEFORE multiply with pil_image", - debug_status=self.enable_image_debugging, - ) - - init_alpha = self.pil_image.getchannel("A") - if mask_image.mode != "L": - # FIXME: why do we get passed an RGB image here? We can only use single-channel. - mask_image = mask_image.convert("L") - mask_image = ImageChops.multiply(mask_image, init_alpha) - self.pil_mask = mask_image - - # Resize if requested for inpainting - if inpaint_width and inpaint_height: - mask_image = mask_image.resize((inpaint_width, inpaint_height)) - - debug_image( - mask_image, - "mask_image AFTER multiply with pil_image", - debug_status=self.enable_image_debugging, - ) - mask: torch.FloatTensor = image_resized_to_grid_as_tensor(mask_image, normalize=False) - else: - mask: torch.FloatTensor = mask_image - - self.mask_blur_radius = mask_blur_radius - - # noinspection PyTypeChecker - pipeline: StableDiffusionGeneratorPipeline = self.model - - # todo: support cross-attention control - uc, c, _ = conditioning - conditioning_data = ConditioningData(uc, c, cfg_scale).add_scheduler_args_if_applicable( - pipeline.scheduler, eta=ddim_eta - ) - - def make_image(x_T: torch.Tensor, seed: int): - pipeline_output = pipeline.inpaint_from_embeddings( - init_image=init_image, - mask=1 - mask, # expects white means "paint here." - strength=strength, - num_inference_steps=steps, - conditioning_data=conditioning_data, - noise_func=self.get_noise_like, - callback=step_callback, - seed=seed, - ) - - if pipeline_output.attention_map_saver is not None and attention_maps_callback is not None: - attention_maps_callback(pipeline_output.attention_map_saver) - - result = self.postprocess_size_and_mask(pipeline.numpy_to_pil(pipeline_output.images)[0]) - - # Seam paint if this is our first pass (seam_size set to 0 during seam painting) - if seam_size > 0: - old_image = self.pil_image or init_image - old_mask = self.pil_mask or mask_image - - result = self.seam_paint( - result, - seam_size, - seam_blur, - seed, - seam_steps, - cfg_scale, - ddim_eta, - conditioning, - seam_strength, - x_T, - infill_method, - step_callback, - ) - - # Restore original settings - self.get_make_image( - steps, - cfg_scale, - ddim_eta, - conditioning, - old_image, - old_mask, - strength, - mask_blur_radius, - seam_size, - seam_blur, - seam_strength, - seam_steps, - tile_size, - step_callback, - inpaint_replace, - enable_image_debugging, - inpaint_width=inpaint_width, - inpaint_height=inpaint_height, - infill_method=infill_method, - **kwargs, - ) - - return result - - return make_image - - def sample_to_image(self, samples) -> Image.Image: - gen_result = super().sample_to_image(samples).convert("RGB") - return self.postprocess_size_and_mask(gen_result) - - def postprocess_size_and_mask(self, gen_result: Image.Image) -> Image.Image: - debug_image(gen_result, "gen_result", debug_status=self.enable_image_debugging) - - # Resize if necessary - if self.inpaint_width and self.inpaint_height: - gen_result = gen_result.resize(self.pil_image.size) - - if self.pil_image is None or self.pil_mask is None: - return gen_result - - corrected_result = self.repaste_and_color_correct( - gen_result, self.pil_image, self.pil_mask, self.mask_blur_radius - ) - debug_image( - corrected_result, - "corrected_result", - debug_status=self.enable_image_debugging, - ) - - return corrected_result diff --git a/invokeai/backend/image_util/__init__.py b/invokeai/backend/image_util/__init__.py index 9fa635b389..0be5a78a93 100644 --- a/invokeai/backend/image_util/__init__.py +++ b/invokeai/backend/image_util/__init__.py @@ -1,14 +1,16 @@ """ Initialization file for invokeai.backend.image_util methods. """ -from .patchmatch import PatchMatch -from .pngwriter import PngWriter, PromptFormatter, retrieve_metadata, write_metadata -from .seamless import configure_model_padding -from .txt2mask import Txt2Mask -from .util import InitImageResizer, make_grid +from .patchmatch import PatchMatch # noqa: F401 +from .pngwriter import PngWriter, PromptFormatter, retrieve_metadata, write_metadata # noqa: F401 +from .seamless import configure_model_padding # noqa: F401 +from .txt2mask import Txt2Mask # noqa: F401 +from .util import InitImageResizer, make_grid # noqa: F401 def debug_image(debug_image, debug_text, debug_show=True, debug_result=False, debug_status=False): + from PIL import ImageDraw + if not debug_status: return diff --git a/invokeai/backend/image_util/pngwriter.py b/invokeai/backend/image_util/pngwriter.py index d3f53d7e72..47f6a44c28 100644 --- a/invokeai/backend/image_util/pngwriter.py +++ b/invokeai/backend/image_util/pngwriter.py @@ -26,7 +26,7 @@ class PngWriter: dirlist = sorted(os.listdir(self.outdir), reverse=True) # find the first filename that matches our pattern or return 000000.0.png existing_name = next( - (f for f in dirlist if re.match("^(\d+)\..*\.png", f)), + (f for f in dirlist if re.match(r"^(\d+)\..*\.png", f)), "0000000.0.png", ) basecount = int(existing_name.split(".", 1)[0]) + 1 @@ -98,11 +98,11 @@ class PromptFormatter: # to do: put model name into the t2i object # switches.append(f'--model{t2i.model_name}') if opt.seamless or t2i.seamless: - switches.append(f"--seamless") + switches.append("--seamless") if opt.init_img: switches.append(f"-I{opt.init_img}") if opt.fit: - switches.append(f"--fit") + switches.append("--fit") if opt.strength and opt.init_img is not None: switches.append(f"-f{opt.strength or t2i.strength}") if opt.gfpgan_strength: diff --git a/invokeai/backend/install/check_root.py b/invokeai/backend/install/check_root.py index ded9e66635..2104c3a4c7 100644 --- a/invokeai/backend/install/check_root.py +++ b/invokeai/backend/install/check_root.py @@ -12,16 +12,17 @@ def check_invokeai_root(config: InvokeAIAppConfig): assert config.model_conf_path.exists(), f"{config.model_conf_path} not found" assert config.db_path.parent.exists(), f"{config.db_path.parent} not found" assert config.models_path.exists(), f"{config.models_path} not found" - for model in [ - "CLIP-ViT-bigG-14-laion2B-39B-b160k", - "bert-base-uncased", - "clip-vit-large-patch14", - "sd-vae-ft-mse", - "stable-diffusion-2-clip", - "stable-diffusion-safety-checker", - ]: - path = config.models_path / f"core/convert/{model}" - assert path.exists(), f"{path} is missing" + if not config.ignore_missing_core_models: + for model in [ + "CLIP-ViT-bigG-14-laion2B-39B-b160k", + "bert-base-uncased", + "clip-vit-large-patch14", + "sd-vae-ft-mse", + "stable-diffusion-2-clip", + "stable-diffusion-safety-checker", + ]: + path = config.models_path / f"core/convert/{model}" + assert path.exists(), f"{path} is missing" except Exception as e: print() print(f"An exception has occurred: {str(e)}") @@ -32,5 +33,10 @@ def check_invokeai_root(config: InvokeAIAppConfig): print( '** From the command line, activate the virtual environment and run "invokeai-configure --yes --skip-sd-weights" **' ) + print( + '** (To skip this check completely, add "--ignore_missing_core_models" to your CLI args. Not installing ' + "these core models will prevent the loading of some or all .safetensors and .ckpt files. However, you can " + "always come back and install these core models in the future.)" + ) input("Press any key to continue...") sys.exit(0) diff --git a/invokeai/backend/install/invokeai_configure.py b/invokeai/backend/install/invokeai_configure.py index 4bf2a484a1..d7ecb41e9b 100755 --- a/invokeai/backend/install/invokeai_configure.py +++ b/invokeai/backend/install/invokeai_configure.py @@ -10,15 +10,17 @@ import sys import argparse import io import os +import psutil import shutil import textwrap +import torch import traceback import yaml import warnings from argparse import Namespace +from enum import Enum from pathlib import Path from shutil import get_terminal_size -from typing import get_type_hints from urllib import request import npyscreen @@ -44,15 +46,17 @@ from invokeai.app.services.config import ( ) from invokeai.backend.util.logging import InvokeAILogger from invokeai.frontend.install.model_install import addModelsForm, process_and_execute + +# TO DO - Move all the frontend code into invokeai.frontend.install from invokeai.frontend.install.widgets import ( SingleSelectColumns, CenteredButtonPress, FileBox, - IntTitleSlider, set_min_terminal_size, CyclingForm, MIN_COLS, MIN_LINES, + WindowTooSmallException, ) from invokeai.backend.install.legacy_arg_parsing import legacy_parser from invokeai.backend.install.model_install_backend import ( @@ -61,6 +65,7 @@ from invokeai.backend.install.model_install_backend import ( ModelInstall, ) from invokeai.backend.model_management.model_probe import ModelType, BaseModelType +from pydantic.error_wrappers import ValidationError warnings.filterwarnings("ignore") transformers.logging.set_verbosity_error() @@ -76,6 +81,13 @@ Default_config_file = config.model_conf_path SD_Configs = config.legacy_conf_path PRECISION_CHOICES = ["auto", "float16", "float32"] +GB = 1073741824 # GB in bytes +HAS_CUDA = torch.cuda.is_available() +_, MAX_VRAM = torch.cuda.mem_get_info() if HAS_CUDA else (0, 0) + + +MAX_VRAM /= GB +MAX_RAM = psutil.virtual_memory().total / GB INIT_FILE_PREAMBLE = """# InvokeAI initialization file # This is the InvokeAI initialization file, which contains command-line default values. @@ -86,6 +98,12 @@ INIT_FILE_PREAMBLE = """# InvokeAI initialization file logger = InvokeAILogger.getLogger() +class DummyWidgetValue(Enum): + zero = 0 + true = True + false = False + + # -------------------------------------------- def postscript(errors: None): if not any(errors): @@ -289,7 +307,7 @@ class editOptsForm(CyclingForm, npyscreen.FormMultiPage): first_time = not (config.root_path / "invokeai.yaml").exists() access_token = HfFolder.get_token() window_width, window_height = get_terminal_size() - label = """Configure startup settings. You can come back and change these later. + label = """Configure startup settings. You can come back and change these later. Use ctrl-N and ctrl-P to move to the ext and

revious fields. Use cursor arrows to make a checkbox selection, and space to toggle. """ @@ -376,15 +394,47 @@ Use cursor arrows to make a checkbox selection, and space to toggle. max_width=80, scroll_exit=True, ) - self.max_cache_size = self.add_widget_intelligent( - IntTitleSlider, - name="Size of the RAM cache used for fast model switching (GB)", - value=old_opts.max_cache_size, - out_of=20, - lowest=3, - begin_entry_at=6, + self.nextrely += 1 + self.add_widget_intelligent( + npyscreen.TitleFixedText, + name="RAM cache size (GB). Make this at least large enough to hold a single full model.", + begin_entry_at=0, + editable=False, + color="CONTROL", scroll_exit=True, ) + self.nextrely -= 1 + self.max_cache_size = self.add_widget_intelligent( + npyscreen.Slider, + value=clip(old_opts.max_cache_size, range=(3.0, MAX_RAM), step=0.5), + out_of=round(MAX_RAM), + lowest=0.0, + step=0.5, + relx=8, + scroll_exit=True, + ) + if HAS_CUDA: + self.nextrely += 1 + self.add_widget_intelligent( + npyscreen.TitleFixedText, + name="VRAM cache size (GB). Reserving a small amount of VRAM will modestly speed up the start of image generation.", + begin_entry_at=0, + editable=False, + color="CONTROL", + scroll_exit=True, + ) + self.nextrely -= 1 + self.max_vram_cache_size = self.add_widget_intelligent( + npyscreen.Slider, + value=clip(old_opts.max_vram_cache_size, range=(0, MAX_VRAM), step=0.25), + out_of=round(MAX_VRAM * 2) / 2, + lowest=0.0, + relx=8, + step=0.25, + scroll_exit=True, + ) + else: + self.max_vram_cache_size = DummyWidgetValue.zero self.nextrely += 1 self.outdir = self.add_widget_intelligent( FileBox, @@ -401,7 +451,7 @@ Use cursor arrows to make a checkbox selection, and space to toggle. self.autoimport_dirs = {} self.autoimport_dirs["autoimport_dir"] = self.add_widget_intelligent( FileBox, - name=f"Folder to recursively scan for new checkpoints, ControlNets, LoRAs and TI models", + name="Folder to recursively scan for new checkpoints, ControlNets, LoRAs and TI models", value=str(config.root_path / config.autoimport_dir), select_dir=True, must_exist=False, @@ -476,6 +526,7 @@ https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/blob/main/LICENS "outdir", "free_gpu_mem", "max_cache_size", + "max_vram_cache_size", "xformers_enabled", "always_use_cpu", ]: @@ -553,6 +604,16 @@ def default_user_selections(program_opts: Namespace) -> InstallSelections: ) +# ------------------------------------- +def clip(value: float, range: tuple[float, float], step: float) -> float: + minimum, maximum = range + if value < minimum: + value = minimum + if value > maximum: + value = maximum + return round(value / step) * step + + # ------------------------------------- def initialize_rootdir(root: Path, yes_to_all: bool = False): logger.info("Initializing InvokeAI runtime directory") @@ -592,13 +653,13 @@ def maybe_create_models_yaml(root: Path): # ------------------------------------- def run_console_ui(program_opts: Namespace, initfile: Path = None) -> (Namespace, Namespace): - # parse_args() will read from init file if present invokeai_opts = default_startup_options(initfile) invokeai_opts.root = program_opts.root - # The third argument is needed in the Windows 11 environment to - # launch a console window running this program. - set_min_terminal_size(MIN_COLS, MIN_LINES) + if not set_min_terminal_size(MIN_COLS, MIN_LINES): + raise WindowTooSmallException( + "Could not increase terminal size. Try running again with a larger window or smaller font size." + ) # the install-models application spawns a subprocess to install # models, and will crash unless this is set before running. @@ -654,10 +715,13 @@ def migrate_init_file(legacy_format: Path): old = legacy_parser.parse_args([f"@{str(legacy_format)}"]) new = InvokeAIAppConfig.get_config() - fields = list(get_type_hints(InvokeAIAppConfig).keys()) + fields = [x for x, y in InvokeAIAppConfig.__fields__.items() if y.field_info.extra.get("category") != "DEPRECATED"] for attr in fields: if hasattr(old, attr): - setattr(new, attr, getattr(old, attr)) + try: + setattr(new, attr, getattr(old, attr)) + except ValidationError as e: + print(f"* Ignoring incompatible value for field {attr}:\n {str(e)}") # a few places where the field names have changed and we have to # manually add in the new names/values @@ -777,6 +841,7 @@ def main(): models_to_download = default_user_selections(opt) new_init_file = config.root_path / "invokeai.yaml" + if opt.yes_to_all: write_default_options(opt, new_init_file) init_options = Namespace(precision="float32" if opt.full_precision else "float16") @@ -802,6 +867,8 @@ def main(): postscript(errors=errors) if not opt.yes_to_all: input("Press any key to continue...") + except WindowTooSmallException as e: + logger.error(str(e)) except KeyboardInterrupt: print("\nGoodbye! Come back soon.") diff --git a/invokeai/backend/install/migrate_to_3.py b/invokeai/backend/install/migrate_to_3.py index 9152e46951..e53f211647 100644 --- a/invokeai/backend/install/migrate_to_3.py +++ b/invokeai/backend/install/migrate_to_3.py @@ -116,7 +116,7 @@ class MigrateTo3(object): appropriate location within the destination models directory. """ directories_scanned = set() - for root, dirs, files in os.walk(src_dir): + for root, dirs, files in os.walk(src_dir, followlinks=True): for d in dirs: try: model = Path(root, d) @@ -525,7 +525,7 @@ def do_migrate(src_directory: Path, dest_directory: Path): if version_3: # write into the dest directory try: shutil.copy(dest_directory / "configs" / "models.yaml", config_file) - except: + except Exception: MigrateTo3.initialize_yaml(config_file) mgr = ModelManager(config_file) # important to initialize BEFORE moving the models directory (dest_directory / "models").replace(dest_models) @@ -553,7 +553,7 @@ def main(): parser = argparse.ArgumentParser( prog="invokeai-migrate3", description=""" -This will copy and convert the models directory and the configs/models.yaml from the InvokeAI 2.3 format +This will copy and convert the models directory and the configs/models.yaml from the InvokeAI 2.3 format '--from-directory' root to the InvokeAI 3.0 '--to-directory' root. These may be abbreviated '--from' and '--to'.a The old models directory and config file will be renamed 'models.orig' and 'models.yaml.orig' respectively. @@ -591,7 +591,6 @@ script, which will perform a full upgrade in place.""", # TODO: revisit - don't rely on invokeai.yaml to exist yet! dest_is_setup = (dest_root / "models/core").exists() and (dest_root / "databases").exists() if not dest_is_setup: - import invokeai.frontend.install.invokeai_configure from invokeai.backend.install.invokeai_configure import initialize_rootdir initialize_rootdir(dest_root, True) diff --git a/invokeai/backend/install/model_install_backend.py b/invokeai/backend/install/model_install_backend.py index c0a7244367..e41783ab09 100644 --- a/invokeai/backend/install/model_install_backend.py +++ b/invokeai/backend/install/model_install_backend.py @@ -12,7 +12,7 @@ from typing import Optional, List, Dict, Callable, Union, Set import requests from diffusers import DiffusionPipeline from diffusers import logging as dlogging -import onnx +import torch from huggingface_hub import hf_hub_url, HfFolder, HfApi from omegaconf import OmegaConf from tqdm import tqdm @@ -23,6 +23,7 @@ from invokeai.app.services.config import InvokeAIAppConfig from invokeai.backend.model_management import ModelManager, ModelType, BaseModelType, ModelVariantType, AddModelResult from invokeai.backend.model_management.model_probe import ModelProbe, SchedulerPredictionType, ModelProbeInfo from invokeai.backend.util import download_with_resume +from invokeai.backend.util.devices import torch_dtype, choose_torch_device from ..util.logging import InvokeAILogger warnings.filterwarnings("ignore") @@ -99,9 +100,9 @@ class ModelInstall(object): def __init__( self, config: InvokeAIAppConfig, - prediction_type_helper: Callable[[Path], SchedulerPredictionType] = None, - model_manager: ModelManager = None, - access_token: str = None, + prediction_type_helper: Optional[Callable[[Path], SchedulerPredictionType]] = None, + model_manager: Optional[ModelManager] = None, + access_token: Optional[str] = None, ): self.config = config self.mgr = model_manager or ModelManager(config.model_conf_path) @@ -303,7 +304,7 @@ class ModelInstall(object): with TemporaryDirectory(dir=self.config.models_path) as staging: staging = Path(staging) - if "model_index.json" in files and "unet/model.onnx" not in files: + if "model_index.json" in files: location = self._download_hf_pipeline(repo_id, staging) # pipeline elif "unet/model.onnx" in files: location = self._download_hf_model(repo_id, files, staging) @@ -416,15 +417,25 @@ class ModelInstall(object): does a save_pretrained() to the indicated staging area. """ _, name = repo_id.split("/") - revisions = ["fp16", "main"] if self.config.precision == "float16" else ["main"] + precision = torch_dtype(choose_torch_device()) + variants = ["fp16", None] if precision == torch.float16 else [None, "fp16"] + model = None - for revision in revisions: + for variant in variants: try: - model = DiffusionPipeline.from_pretrained(repo_id, revision=revision, safety_checker=None) - except: # most errors are due to fp16 not being present. Fix this to catch other errors - pass + model = DiffusionPipeline.from_pretrained( + repo_id, + variant=variant, + torch_dtype=precision, + safety_checker=None, + ) + except Exception as e: # most errors are due to fp16 not being present. Fix this to catch other errors + if "fp16" not in str(e): + print(e) + if model: break + if not model: logger.error(f"Diffusers model {repo_id} could not be downloaded. Skipping.") return None diff --git a/invokeai/backend/model_management/__init__.py b/invokeai/backend/model_management/__init__.py index cf057f3a89..6376585fe5 100644 --- a/invokeai/backend/model_management/__init__.py +++ b/invokeai/backend/model_management/__init__.py @@ -1,10 +1,10 @@ """ Initialization file for invokeai.backend.model_management """ -from .model_manager import ModelManager, ModelInfo, AddModelResult, SchedulerPredictionType -from .model_cache import ModelCache -from .lora import ModelPatcher, ONNXModelPatcher -from .models import ( +from .model_manager import ModelManager, ModelInfo, AddModelResult, SchedulerPredictionType # noqa: F401 +from .model_cache import ModelCache # noqa: F401 +from .lora import ModelPatcher, ONNXModelPatcher # noqa: F401 +from .models import ( # noqa: F401 BaseModelType, ModelType, SubModelType, @@ -12,4 +12,4 @@ from .models import ( ModelNotFoundException, DuplicateModelException, ) -from .model_merge import ModelMerger, MergeInterpolationMethod +from .model_merge import ModelMerger, MergeInterpolationMethod # noqa: F401 diff --git a/invokeai/backend/model_management/lora.py b/invokeai/backend/model_management/lora.py index 4287072a65..d0d8d4226c 100644 --- a/invokeai/backend/model_management/lora.py +++ b/invokeai/backend/model_management/lora.py @@ -5,437 +5,14 @@ from contextlib import contextmanager from typing import Optional, Dict, Tuple, Any, Union, List from pathlib import Path -import torch -from safetensors.torch import load_file -from torch.utils.hooks import RemovableHandle - -from diffusers.models import UNet2DConditionModel -from transformers import CLIPTextModel -from onnx import numpy_helper -from onnxruntime import OrtValue import numpy as np - +import torch from compel.embeddings_provider import BaseTextualInversionManager from diffusers.models import UNet2DConditionModel from safetensors.torch import load_file from transformers import CLIPTextModel, CLIPTokenizer -# TODO: rename and split this file - - -class LoRALayerBase: - # rank: Optional[int] - # alpha: Optional[float] - # bias: Optional[torch.Tensor] - # layer_key: str - - # @property - # def scale(self): - # return self.alpha / self.rank if (self.alpha and self.rank) else 1.0 - - def __init__( - self, - layer_key: str, - values: dict, - ): - if "alpha" in values: - self.alpha = values["alpha"].item() - else: - self.alpha = None - - if "bias_indices" in values and "bias_values" in values and "bias_size" in values: - self.bias = torch.sparse_coo_tensor( - values["bias_indices"], - values["bias_values"], - tuple(values["bias_size"]), - ) - - else: - self.bias = None - - self.rank = None # set in layer implementation - self.layer_key = layer_key - - def forward( - self, - module: torch.nn.Module, - input_h: Any, # for real looks like Tuple[torch.nn.Tensor] but not sure - multiplier: float, - ): - if type(module) == torch.nn.Conv2d: - op = torch.nn.functional.conv2d - extra_args = dict( - stride=module.stride, - padding=module.padding, - dilation=module.dilation, - groups=module.groups, - ) - - else: - op = torch.nn.functional.linear - extra_args = {} - - weight = self.get_weight() - - bias = self.bias if self.bias is not None else 0 - scale = self.alpha / self.rank if (self.alpha and self.rank) else 1.0 - return ( - op( - *input_h, - (weight + bias).view(module.weight.shape), - None, - **extra_args, - ) - * multiplier - * scale - ) - - def get_weight(self): - raise NotImplementedError() - - def calc_size(self) -> int: - model_size = 0 - for val in [self.bias]: - if val is not None: - model_size += val.nelement() * val.element_size() - return model_size - - def to( - self, - device: Optional[torch.device] = None, - dtype: Optional[torch.dtype] = None, - ): - if self.bias is not None: - self.bias = self.bias.to(device=device, dtype=dtype) - - -# TODO: find and debug lora/locon with bias -class LoRALayer(LoRALayerBase): - # up: torch.Tensor - # mid: Optional[torch.Tensor] - # down: torch.Tensor - - def __init__( - self, - layer_key: str, - values: dict, - ): - super().__init__(layer_key, values) - - self.up = values["lora_up.weight"] - self.down = values["lora_down.weight"] - if "lora_mid.weight" in values: - self.mid = values["lora_mid.weight"] - else: - self.mid = None - - self.rank = self.down.shape[0] - - def get_weight(self): - if self.mid is not None: - up = self.up.reshape(self.up.shape[0], self.up.shape[1]) - down = self.down.reshape(self.down.shape[0], self.down.shape[1]) - weight = torch.einsum("m n w h, i m, n j -> i j w h", self.mid, up, down) - else: - weight = self.up.reshape(self.up.shape[0], -1) @ self.down.reshape(self.down.shape[0], -1) - - return weight - - def calc_size(self) -> int: - model_size = super().calc_size() - for val in [self.up, self.mid, self.down]: - if val is not None: - model_size += val.nelement() * val.element_size() - return model_size - - def to( - self, - device: Optional[torch.device] = None, - dtype: Optional[torch.dtype] = None, - ): - super().to(device=device, dtype=dtype) - - self.up = self.up.to(device=device, dtype=dtype) - self.down = self.down.to(device=device, dtype=dtype) - - if self.mid is not None: - self.mid = self.mid.to(device=device, dtype=dtype) - - -class LoHALayer(LoRALayerBase): - # w1_a: torch.Tensor - # w1_b: torch.Tensor - # w2_a: torch.Tensor - # w2_b: torch.Tensor - # t1: Optional[torch.Tensor] = None - # t2: Optional[torch.Tensor] = None - - def __init__( - self, - layer_key: str, - values: dict, - ): - super().__init__(layer_key, values) - - self.w1_a = values["hada_w1_a"] - self.w1_b = values["hada_w1_b"] - self.w2_a = values["hada_w2_a"] - self.w2_b = values["hada_w2_b"] - - if "hada_t1" in values: - self.t1 = values["hada_t1"] - else: - self.t1 = None - - if "hada_t2" in values: - self.t2 = values["hada_t2"] - else: - self.t2 = None - - self.rank = self.w1_b.shape[0] - - def get_weight(self): - if self.t1 is None: - weight = (self.w1_a @ self.w1_b) * (self.w2_a @ self.w2_b) - - else: - rebuild1 = torch.einsum("i j k l, j r, i p -> p r k l", self.t1, self.w1_b, self.w1_a) - rebuild2 = torch.einsum("i j k l, j r, i p -> p r k l", self.t2, self.w2_b, self.w2_a) - weight = rebuild1 * rebuild2 - - return weight - - def calc_size(self) -> int: - model_size = super().calc_size() - for val in [self.w1_a, self.w1_b, self.w2_a, self.w2_b, self.t1, self.t2]: - if val is not None: - model_size += val.nelement() * val.element_size() - return model_size - - def to( - self, - device: Optional[torch.device] = None, - dtype: Optional[torch.dtype] = None, - ): - super().to(device=device, dtype=dtype) - - self.w1_a = self.w1_a.to(device=device, dtype=dtype) - self.w1_b = self.w1_b.to(device=device, dtype=dtype) - if self.t1 is not None: - self.t1 = self.t1.to(device=device, dtype=dtype) - - self.w2_a = self.w2_a.to(device=device, dtype=dtype) - self.w2_b = self.w2_b.to(device=device, dtype=dtype) - if self.t2 is not None: - self.t2 = self.t2.to(device=device, dtype=dtype) - - -class LoKRLayer(LoRALayerBase): - # w1: Optional[torch.Tensor] = None - # w1_a: Optional[torch.Tensor] = None - # w1_b: Optional[torch.Tensor] = None - # w2: Optional[torch.Tensor] = None - # w2_a: Optional[torch.Tensor] = None - # w2_b: Optional[torch.Tensor] = None - # t2: Optional[torch.Tensor] = None - - def __init__( - self, - layer_key: str, - values: dict, - ): - super().__init__(layer_key, values) - - if "lokr_w1" in values: - self.w1 = values["lokr_w1"] - self.w1_a = None - self.w1_b = None - else: - self.w1 = None - self.w1_a = values["lokr_w1_a"] - self.w1_b = values["lokr_w1_b"] - - if "lokr_w2" in values: - self.w2 = values["lokr_w2"] - self.w2_a = None - self.w2_b = None - else: - self.w2 = None - self.w2_a = values["lokr_w2_a"] - self.w2_b = values["lokr_w2_b"] - - if "lokr_t2" in values: - self.t2 = values["lokr_t2"] - else: - self.t2 = None - - if "lokr_w1_b" in values: - self.rank = values["lokr_w1_b"].shape[0] - elif "lokr_w2_b" in values: - self.rank = values["lokr_w2_b"].shape[0] - else: - self.rank = None # unscaled - - def get_weight(self): - w1 = self.w1 - if w1 is None: - w1 = self.w1_a @ self.w1_b - - w2 = self.w2 - if w2 is None: - if self.t2 is None: - w2 = self.w2_a @ self.w2_b - else: - w2 = torch.einsum("i j k l, i p, j r -> p r k l", self.t2, self.w2_a, self.w2_b) - - if len(w2.shape) == 4: - w1 = w1.unsqueeze(2).unsqueeze(2) - w2 = w2.contiguous() - weight = torch.kron(w1, w2) - - return weight - - def calc_size(self) -> int: - model_size = super().calc_size() - for val in [self.w1, self.w1_a, self.w1_b, self.w2, self.w2_a, self.w2_b, self.t2]: - if val is not None: - model_size += val.nelement() * val.element_size() - return model_size - - def to( - self, - device: Optional[torch.device] = None, - dtype: Optional[torch.dtype] = None, - ): - super().to(device=device, dtype=dtype) - - if self.w1 is not None: - self.w1 = self.w1.to(device=device, dtype=dtype) - else: - self.w1_a = self.w1_a.to(device=device, dtype=dtype) - self.w1_b = self.w1_b.to(device=device, dtype=dtype) - - if self.w2 is not None: - self.w2 = self.w2.to(device=device, dtype=dtype) - else: - self.w2_a = self.w2_a.to(device=device, dtype=dtype) - self.w2_b = self.w2_b.to(device=device, dtype=dtype) - - if self.t2 is not None: - self.t2 = self.t2.to(device=device, dtype=dtype) - - -class LoRAModel: # (torch.nn.Module): - _name: str - layers: Dict[str, LoRALayer] - _device: torch.device - _dtype: torch.dtype - - def __init__( - self, - name: str, - layers: Dict[str, LoRALayer], - device: torch.device, - dtype: torch.dtype, - ): - self._name = name - self._device = device or torch.cpu - self._dtype = dtype or torch.float32 - self.layers = layers - - @property - def name(self): - return self._name - - @property - def device(self): - return self._device - - @property - def dtype(self): - return self._dtype - - def to( - self, - device: Optional[torch.device] = None, - dtype: Optional[torch.dtype] = None, - ) -> LoRAModel: - # TODO: try revert if exception? - for key, layer in self.layers.items(): - layer.to(device=device, dtype=dtype) - self._device = device - self._dtype = dtype - - def calc_size(self) -> int: - model_size = 0 - for _, layer in self.layers.items(): - model_size += layer.calc_size() - return model_size - - @classmethod - def from_checkpoint( - cls, - file_path: Union[str, Path], - device: Optional[torch.device] = None, - dtype: Optional[torch.dtype] = None, - ): - device = device or torch.device("cpu") - dtype = dtype or torch.float32 - - if isinstance(file_path, str): - file_path = Path(file_path) - - model = cls( - device=device, - dtype=dtype, - name=file_path.stem, # TODO: - layers=dict(), - ) - - if file_path.suffix == ".safetensors": - state_dict = load_file(file_path.absolute().as_posix(), device="cpu") - else: - state_dict = torch.load(file_path, map_location="cpu") - - state_dict = cls._group_state(state_dict) - - for layer_key, values in state_dict.items(): - # lora and locon - if "lora_down.weight" in values: - layer = LoRALayer(layer_key, values) - - # loha - elif "hada_w1_b" in values: - layer = LoHALayer(layer_key, values) - - # lokr - elif "lokr_w1_b" in values or "lokr_w1" in values: - layer = LoKRLayer(layer_key, values) - - else: - # TODO: diff/ia3/... format - print(f">> Encountered unknown lora layer module in {model.name}: {layer_key}") - return - - # lower memory consumption by removing already parsed layer values - state_dict[layer_key].clear() - - layer.to(device=device, dtype=dtype) - model.layers[layer_key] = layer - - return model - - @staticmethod - def _group_state(state_dict: dict): - state_dict_groupped = dict() - - for key, value in state_dict.items(): - stem, leaf = key.split(".", 1) - if stem not in state_dict_groupped: - state_dict_groupped[stem] = dict() - state_dict_groupped[stem][leaf] = value - - return state_dict_groupped +from .models.lora import LoRAModel """ @@ -470,7 +47,7 @@ class ModelPatcher: module = module.get_submodule(submodule_name) module_key += "." + submodule_name submodule_name = key_parts.pop(0) - except: + except Exception: submodule_name += "_" + key_parts.pop(0) module = module.get_submodule(submodule_name) @@ -516,6 +93,26 @@ class ModelPatcher: with cls.apply_lora(text_encoder, loras, "lora_te_"): yield + @classmethod + @contextmanager + def apply_sdxl_lora_text_encoder( + cls, + text_encoder: CLIPTextModel, + loras: List[Tuple[LoRAModel, float]], + ): + with cls.apply_lora(text_encoder, loras, "lora_te1_"): + yield + + @classmethod + @contextmanager + def apply_sdxl_lora_text_encoder2( + cls, + text_encoder: CLIPTextModel, + loras: List[Tuple[LoRAModel, float]], + ): + with cls.apply_lora(text_encoder, loras, "lora_te2_"): + yield + @classmethod @contextmanager def apply_lora( @@ -541,7 +138,7 @@ class ModelPatcher: # with torch.autocast(device_type="cpu"): layer.to(dtype=torch.float32) layer_scale = layer.alpha / layer.rank if (layer.alpha and layer.rank) else 1.0 - layer_weight = layer.get_weight() * lora_weight * layer_scale + layer_weight = layer.get_weight(original_weights[module_key]) * lora_weight * layer_scale if module.weight.shape != layer_weight.shape: # TODO: debug on lycoris @@ -562,7 +159,7 @@ class ModelPatcher: cls, tokenizer: CLIPTokenizer, text_encoder: CLIPTextModel, - ti_list: List[Any], + ti_list: List[Tuple[str, Any]], ) -> Tuple[CLIPTokenizer, TextualInversionManager]: init_tokens_count = None new_tokens_added = None @@ -572,27 +169,27 @@ class ModelPatcher: ti_manager = TextualInversionManager(ti_tokenizer) init_tokens_count = text_encoder.resize_token_embeddings(None).num_embeddings - def _get_trigger(ti, index): - trigger = ti.name + def _get_trigger(ti_name, index): + trigger = ti_name if index > 0: trigger += f"-!pad-{i}" return f"<{trigger}>" # modify tokenizer new_tokens_added = 0 - for ti in ti_list: + for ti_name, ti in ti_list: for i in range(ti.embedding.shape[0]): - new_tokens_added += ti_tokenizer.add_tokens(_get_trigger(ti, i)) + new_tokens_added += ti_tokenizer.add_tokens(_get_trigger(ti_name, i)) # modify text_encoder text_encoder.resize_token_embeddings(init_tokens_count + new_tokens_added) model_embeddings = text_encoder.get_input_embeddings() - for ti in ti_list: + for ti_name, ti in ti_list: ti_tokens = [] for i in range(ti.embedding.shape[0]): embedding = ti.embedding[i] - trigger = _get_trigger(ti, i) + trigger = _get_trigger(ti_name, i) token_id = ti_tokenizer.convert_tokens_to_ids(trigger) if token_id == ti_tokenizer.unk_token_id: @@ -637,7 +234,6 @@ class ModelPatcher: class TextualInversionModel: - name: str embedding: torch.Tensor # [n, 768]|[n, 1280] @classmethod @@ -651,7 +247,6 @@ class TextualInversionModel: file_path = Path(file_path) result = cls() # TODO: - result.name = file_path.stem # TODO: if file_path.suffix == ".safetensors": state_dict = load_file(file_path.absolute().as_posix(), device="cpu") @@ -712,7 +307,8 @@ class TextualInversionManager(BaseTextualInversionManager): class ONNXModelPatcher: - from .models.base import IAIOnnxRuntimeModel, OnnxRuntimeModel + from .models.base import IAIOnnxRuntimeModel + from diffusers import OnnxRuntimeModel @classmethod @contextmanager @@ -741,7 +337,7 @@ class ONNXModelPatcher: def apply_lora( cls, model: IAIOnnxRuntimeModel, - loras: List[Tuple[LoraModel, float]], + loras: List[Tuple[LoRAModel, float]], prefix: str, ): from .models.base import IAIOnnxRuntimeModel @@ -761,7 +357,8 @@ class ONNXModelPatcher: layer.to(dtype=torch.float32) layer_key = layer_key.replace(prefix, "") - layer_weight = layer.get_weight().detach().cpu().numpy() * lora_weight + # TODO: rewrite to pass original tensor weight(required by ia3) + layer_weight = layer.get_weight(None).detach().cpu().numpy() * lora_weight if layer_key is blended_loras: blended_loras[layer_key] += layer_weight else: @@ -828,7 +425,7 @@ class ONNXModelPatcher: cls, tokenizer: CLIPTokenizer, text_encoder: IAIOnnxRuntimeModel, - ti_list: List[Any], + ti_list: List[Tuple[str, Any]], ) -> Tuple[CLIPTokenizer, TextualInversionManager]: from .models.base import IAIOnnxRuntimeModel @@ -841,17 +438,17 @@ class ONNXModelPatcher: ti_tokenizer = copy.deepcopy(tokenizer) ti_manager = TextualInversionManager(ti_tokenizer) - def _get_trigger(ti, index): - trigger = ti.name + def _get_trigger(ti_name, index): + trigger = ti_name if index > 0: trigger += f"-!pad-{i}" return f"<{trigger}>" # modify tokenizer new_tokens_added = 0 - for ti in ti_list: + for ti_name, ti in ti_list: for i in range(ti.embedding.shape[0]): - new_tokens_added += ti_tokenizer.add_tokens(_get_trigger(ti, i)) + new_tokens_added += ti_tokenizer.add_tokens(_get_trigger(ti_name, i)) # modify text_encoder orig_embeddings = text_encoder.tensors["text_model.embeddings.token_embedding.weight"] @@ -861,11 +458,11 @@ class ONNXModelPatcher: axis=0, ) - for ti in ti_list: + for ti_name, ti in ti_list: ti_tokens = [] for i in range(ti.embedding.shape[0]): embedding = ti.embedding[i].detach().numpy() - trigger = _get_trigger(ti, i) + trigger = _get_trigger(ti_name, i) token_id = ti_tokenizer.convert_tokens_to_ids(trigger) if token_id == ti_tokenizer.unk_token_id: diff --git a/invokeai/backend/model_management/model_cache.py b/invokeai/backend/model_management/model_cache.py index b4c3e48a48..6f3e5bd6a5 100644 --- a/invokeai/backend/model_management/model_cache.py +++ b/invokeai/backend/model_management/model_cache.py @@ -21,15 +21,13 @@ import os import sys import hashlib from contextlib import suppress +from dataclasses import dataclass, field from pathlib import Path from typing import Dict, Union, types, Optional, Type, Any import torch -import logging import invokeai.backend.util.logging as logger -from invokeai.app.services.config import get_invokeai_config -from .lora import LoRAModel, TextualInversionModel from .models import BaseModelType, ModelType, SubModelType, ModelBase # Maximum size of the cache, in gigs @@ -43,6 +41,18 @@ DEFAULT_MAX_VRAM_CACHE_SIZE = 2.75 GIG = 1073741824 +@dataclass +class CacheStats(object): + hits: int = 0 # cache hits + misses: int = 0 # cache misses + high_watermark: int = 0 # amount of cache used + in_cache: int = 0 # number of models in cache + cleared: int = 0 # number of models cleared to make space + cache_size: int = 0 # total size of cache + # {submodel_key => size} + loaded_model_sizes: Dict[str, int] = field(default_factory=dict) + + class ModelLocker(object): "Forward declaration" pass @@ -117,6 +127,9 @@ class ModelCache(object): self.sha_chunksize = sha_chunksize self.logger = logger + # used for stats collection + self.stats = None + self._cached_models = dict() self._cache_stack = list() @@ -183,13 +196,14 @@ class ModelCache(object): model_type=model_type, submodel_type=submodel, ) - # TODO: lock for no copies on simultaneous calls? cache_entry = self._cached_models.get(key, None) if cache_entry is None: self.logger.info( - f"Loading model {model_path}, type {base_model.value}:{model_type.value}:{submodel.value if submodel else ''}" + f"Loading model {model_path}, type {base_model.value}:{model_type.value}{':'+submodel.value if submodel else ''}" ) + if self.stats: + self.stats.misses += 1 # this will remove older cached models until # there is sufficient room to load the requested model @@ -203,6 +217,17 @@ class ModelCache(object): cache_entry = _CacheRecord(self, model, mem_used) self._cached_models[key] = cache_entry + else: + if self.stats: + self.stats.hits += 1 + + if self.stats: + self.stats.cache_size = self.max_cache_size * GIG + self.stats.high_watermark = max(self.stats.high_watermark, self._cache_size()) + self.stats.in_cache = len(self._cached_models) + self.stats.loaded_model_sizes[key] = max( + self.stats.loaded_model_sizes.get(key, 0), model_info.get_size(submodel) + ) with suppress(Exception): self._cache_stack.remove(key) @@ -248,7 +273,7 @@ class ModelCache(object): self.cache.logger.debug(f"Locking {self.key} in {self.cache.execution_device}") self.cache._print_cuda_stats() - except: + except Exception: self.cache_entry.unlock() raise @@ -282,14 +307,14 @@ class ModelCache(object): """ Given the HF repo id or path to a model on disk, returns a unique hash. Works for legacy checkpoint files, HF models on disk, and HF repo IDs + :param model_path: Path to model file/directory on disk. """ return self._local_model_hash(model_path) def cache_size(self) -> float: - "Return the current size of the cache, in GB" - current_cache_size = sum([m.size for m in self._cached_models.values()]) - return current_cache_size / GIG + """Return the current size of the cache, in GB.""" + return self._cache_size() / GIG def _has_cuda(self) -> bool: return self.execution_device.type == "cuda" @@ -312,12 +337,15 @@ class ModelCache(object): f"Current VRAM/RAM usage: {vram}/{ram}; cached_models/loaded_models/locked_models/ = {cached_models}/{loaded_models}/{locked_models}" ) + def _cache_size(self) -> int: + return sum([m.size for m in self._cached_models.values()]) + def _make_cache_room(self, model_size): # calculate how much memory this model will require # multiplier = 2 if self.precision==torch.float32 else 1 bytes_needed = model_size maximum_size = self.max_cache_size * GIG # stored in GB, convert to bytes - current_size = sum([m.size for m in self._cached_models.values()]) + current_size = self._cache_size() if current_size + bytes_needed > maximum_size: self.logger.debug( @@ -366,6 +394,8 @@ class ModelCache(object): f"Unloading model {model_key} to free {(model_size/GIG):.2f} GB (-{(cache_entry.size/GIG):.2f} GB)" ) current_size -= cache_entry.size + if self.stats: + self.stats.cleared += 1 del self._cache_stack[pos] del self._cached_models[model_key] del cache_entry diff --git a/invokeai/backend/model_management/model_manager.py b/invokeai/backend/model_management/model_manager.py index 832a96e18f..1b10554e69 100644 --- a/invokeai/backend/model_management/model_manager.py +++ b/invokeai/backend/model_management/model_manager.py @@ -228,19 +228,19 @@ the root is the InvokeAI ROOTDIR. """ from __future__ import annotations -import os import hashlib +import os import textwrap -import yaml +import types from dataclasses import dataclass from pathlib import Path -from typing import Optional, List, Tuple, Union, Dict, Set, Callable, types from shutil import rmtree, move +from typing import Optional, List, Literal, Tuple, Union, Dict, Set, Callable import torch +import yaml from omegaconf import OmegaConf from omegaconf.dictconfig import DictConfig - from pydantic import BaseModel, Field import invokeai.backend.util.logging as logger @@ -259,6 +259,7 @@ from .models import ( ModelNotFoundException, InvalidModelException, DuplicateModelException, + ModelBase, ) # We are only starting to number the config file with release 3. @@ -361,7 +362,7 @@ class ModelManager(object): if model_key.startswith("_"): continue model_name, base_model, model_type = self.parse_key(model_key) - model_class = MODEL_CLASSES[base_model][model_type] + model_class = self._get_implementation(base_model, model_type) # alias for config file model_config["model_format"] = model_config.pop("format") self.models[model_key] = model_class.create_config(**model_config) @@ -381,18 +382,24 @@ class ModelManager(object): # causing otherwise unreferenced models to be removed from memory self._read_models() - def model_exists( - self, - model_name: str, - base_model: BaseModelType, - model_type: ModelType, - ) -> bool: + def model_exists(self, model_name: str, base_model: BaseModelType, model_type: ModelType, *, rescan=False) -> bool: """ - Given a model name, returns True if it is a valid - identifier. + Given a model name, returns True if it is a valid identifier. + + :param model_name: symbolic name of the model in models.yaml + :param model_type: ModelType enum indicating the type of model to return + :param base_model: BaseModelType enum indicating the base model used by this model + :param rescan: if True, scan_models_directory """ model_key = self.create_key(model_name, base_model, model_type) - return model_key in self.models + exists = model_key in self.models + + # if model not found try to find it (maybe file just pasted) + if rescan and not exists: + self.scan_models_directory(base_model=base_model, model_type=model_type) + exists = self.model_exists(model_name, base_model, model_type, rescan=False) + + return exists @classmethod def create_key( @@ -412,12 +419,12 @@ class ModelManager(object): base_model_str, model_type_str, model_name = model_key.split("/", 2) try: model_type = ModelType(model_type_str) - except: + except Exception: raise Exception(f"Unknown model type: {model_type_str}") try: base_model = BaseModelType(base_model_str) - except: + except Exception: raise Exception(f"Unknown base model: {base_model_str}") return (model_name, base_model, model_type) @@ -443,39 +450,32 @@ class ModelManager(object): :param model_name: symbolic name of the model in models.yaml :param model_type: ModelType enum indicating the type of model to return :param base_model: BaseModelType enum indicating the base model used by this model - :param submode_typel: an ModelType enum indicating the portion of + :param submodel_type: an ModelType enum indicating the portion of the model to retrieve (e.g. ModelType.Vae) """ - model_class = MODEL_CLASSES[base_model][model_type] model_key = self.create_key(model_name, base_model, model_type) - # if model not found try to find it (maybe file just pasted) - if model_key not in self.models: - self.scan_models_directory(base_model=base_model, model_type=model_type) - if model_key not in self.models: - raise ModelNotFoundException(f"Model not found - {model_key}") + if not self.model_exists(model_name, base_model, model_type, rescan=True): + raise ModelNotFoundException(f"Model not found - {model_key}") - model_config = self.models[model_key] - model_path = self.resolve_model_path(model_config.path) + model_config = self._get_model_config(base_model, model_name, model_type) + + model_path, is_submodel_override = self._get_model_path(model_config, submodel_type) + + if is_submodel_override: + model_type = submodel_type + submodel_type = None + + model_class = self._get_implementation(base_model, model_type) if not model_path.exists(): if model_class.save_to_config: self.models[model_key].error = ModelError.NotFound - raise Exception(f'Files for model "{model_key}" not found') + raise Exception(f'Files for model "{model_key}" not found at {model_path}') else: self.models.pop(model_key, None) - raise ModelNotFoundException(f"Model not found - {model_key}") - - # vae/movq override - # TODO: - if submodel_type is not None and hasattr(model_config, submodel_type): - override_path = getattr(model_config, submodel_type) - if override_path: - model_path = self.app_config.root_path / override_path - model_type = submodel_type - submodel_type = None - model_class = MODEL_CLASSES[base_model][model_type] + raise ModelNotFoundException(f'Files for model "{model_key}" not found at {model_path}') # TODO: path # TODO: is it accurate to use path as id @@ -513,12 +513,61 @@ class ModelManager(object): _cache=self.cache, ) + def _get_model_path( + self, model_config: ModelConfigBase, submodel_type: Optional[SubModelType] = None + ) -> (Path, bool): + """Extract a model's filesystem path from its config. + + :return: The fully qualified Path of the module (or submodule). + """ + model_path = model_config.path + is_submodel_override = False + + # Does the config explicitly override the submodel? + if submodel_type is not None and hasattr(model_config, submodel_type): + submodel_path = getattr(model_config, submodel_type) + if submodel_path is not None and len(submodel_path) > 0: + model_path = getattr(model_config, submodel_type) + is_submodel_override = True + + model_path = self.resolve_model_path(model_path) + return model_path, is_submodel_override + + def _get_model_config(self, base_model: BaseModelType, model_name: str, model_type: ModelType) -> ModelConfigBase: + """Get a model's config object.""" + model_key = self.create_key(model_name, base_model, model_type) + try: + model_config = self.models[model_key] + except KeyError: + raise ModelNotFoundException(f"Model not found - {model_key}") + return model_config + + def _get_implementation(self, base_model: BaseModelType, model_type: ModelType) -> type[ModelBase]: + """Get the concrete implementation class for a specific model type.""" + model_class = MODEL_CLASSES[base_model][model_type] + return model_class + + def _instantiate( + self, + model_name: str, + base_model: BaseModelType, + model_type: ModelType, + submodel_type: Optional[SubModelType] = None, + ) -> ModelBase: + """Make a new instance of this model, without loading it.""" + model_config = self._get_model_config(base_model, model_name, model_type) + model_path, is_submodel_override = self._get_model_path(model_config, submodel_type) + # FIXME: do non-overriden submodels get the right class? + constructor = self._get_implementation(base_model, model_type) + instance = constructor(model_path, base_model, model_type) + return instance + def model_info( self, model_name: str, base_model: BaseModelType, model_type: ModelType, - ) -> dict: + ) -> Union[dict, None]: """ Given a model name returns the OmegaConf (dict-like) object describing it. """ @@ -540,13 +589,16 @@ class ModelManager(object): model_name: str, base_model: BaseModelType, model_type: ModelType, - ) -> dict: + ) -> Union[dict, None]: """ Returns a dict describing one installed model, using the combined format of the list_models() method. """ models = self.list_models(base_model, model_type, model_name) - return models[0] if models else None + if len(models) >= 1: + return models[0] + else: + return None def list_models( self, @@ -560,7 +612,7 @@ class ModelManager(object): model_keys = ( [self.create_key(model_name, base_model, model_type)] - if model_name + if model_name and base_model and model_type else sorted(self.models, key=str.casefold) ) models = [] @@ -596,7 +648,7 @@ class ModelManager(object): Print a table of models and their descriptions. This needs to be redone """ # TODO: redo - for model_type, model_dict in self.list_models().items(): + for model_dict in self.list_models(): for model_name, model_info in model_dict.items(): line = f'{model_info["name"]:25s} {model_info["type"]:10s} {model_info["description"]}' print(line) @@ -658,7 +710,7 @@ class ModelManager(object): if path := model_attributes.get("path"): model_attributes["path"] = str(self.relative_model_path(Path(path))) - model_class = MODEL_CLASSES[base_model][model_type] + model_class = self._get_implementation(base_model, model_type) model_config = model_class.create_config(**model_attributes) model_key = self.create_key(model_name, base_model, model_type) @@ -670,7 +722,7 @@ class ModelManager(object): # TODO: if path changed and old_model.path inside models folder should we delete this too? # remove conversion cache as config changed - old_model_path = self.app_config.root_path / old_model.path + old_model_path = self.resolve_model_path(old_model.path) old_model_cache = self._get_model_cache_path(old_model_path) if old_model_cache.exists(): if old_model_cache.is_dir(): @@ -699,8 +751,8 @@ class ModelManager(object): model_name: str, base_model: BaseModelType, model_type: ModelType, - new_name: str = None, - new_base: BaseModelType = None, + new_name: Optional[str] = None, + new_base: Optional[BaseModelType] = None, ): """ Rename or rebase a model. @@ -753,7 +805,7 @@ class ModelManager(object): self, model_name: str, base_model: BaseModelType, - model_type: Union[ModelType.Main, ModelType.Vae], + model_type: Literal[ModelType.Main, ModelType.Vae], dest_directory: Optional[Path] = None, ) -> AddModelResult: """ @@ -767,6 +819,10 @@ class ModelManager(object): This will raise a ValueError unless the model is a checkpoint. """ info = self.model_info(model_name, base_model, model_type) + + if info is None: + raise FileNotFoundError(f"model not found: {model_name}") + if info["model_format"] != "checkpoint": raise ValueError(f"not a checkpoint format model: {model_name}") @@ -780,7 +836,7 @@ class ModelManager(object): model_type, **submodel, ) - checkpoint_path = self.app_config.root_path / info["path"] + checkpoint_path = self.resolve_model_path(info["path"]) old_diffusers_path = self.resolve_model_path(model.location) new_diffusers_path = ( dest_directory or self.app_config.models_path / base_model.value / model_type.value @@ -799,7 +855,7 @@ class ModelManager(object): info.pop("config") result = self.add_model(model_name, base_model, model_type, model_attributes=info, clobber=True) - except: + except Exception: # something went wrong, so don't leave dangling diffusers model in directory or it will cause a duplicate model error! rmtree(new_diffusers_path) raise @@ -836,7 +892,7 @@ class ModelManager(object): return search_folder, found_models - def commit(self, conf_file: Path = None) -> None: + def commit(self, conf_file: Optional[Path] = None) -> None: """ Write current configuration out to the indicated file. """ @@ -845,7 +901,7 @@ class ModelManager(object): for model_key, model_config in self.models.items(): model_name, base_model, model_type = self.parse_key(model_key) - model_class = MODEL_CLASSES[base_model][model_type] + model_class = self._get_implementation(base_model, model_type) if model_class.save_to_config: # TODO: or exclude_unset better fits here? data_to_save[model_key] = model_config.dict(exclude_defaults=True, exclude={"error"}) @@ -903,7 +959,7 @@ class ModelManager(object): model_path = self.resolve_model_path(model_config.path).absolute() if not model_path.exists(): - model_class = MODEL_CLASSES[cur_base_model][cur_model_type] + model_class = self._get_implementation(cur_base_model, cur_model_type) if model_class.save_to_config: model_config.error = ModelError.NotFound self.models.pop(model_key, None) @@ -919,7 +975,7 @@ class ModelManager(object): for cur_model_type in ModelType: if model_type is not None and cur_model_type != model_type: continue - model_class = MODEL_CLASSES[cur_base_model][cur_model_type] + model_class = self._get_implementation(cur_base_model, cur_model_type) models_dir = self.resolve_model_path(Path(cur_base_model.value, cur_model_type.value)) if not models_dir.exists(): @@ -935,7 +991,9 @@ class ModelManager(object): raise DuplicateModelException(f"Model with key {model_key} added twice") model_path = self.relative_model_path(model_path) - model_config: ModelConfigBase = model_class.probe_config(str(model_path)) + model_config: ModelConfigBase = model_class.probe_config( + str(model_path), model_base=cur_base_model + ) self.models[model_key] = model_config new_models_found = True except DuplicateModelException as e: @@ -983,8 +1041,8 @@ class ModelManager(object): # LS: hacky # Patch in the SD VAE from core so that it is available for use by the UI try: - self.heuristic_import({self.resolve_model_path("core/convert/sd-vae-ft-mse")}) - except: + self.heuristic_import({str(self.resolve_model_path("core/convert/sd-vae-ft-mse"))}) + except Exception: pass installer = ModelInstall( @@ -992,7 +1050,7 @@ class ModelManager(object): model_manager=self, prediction_type_helper=ask_user_for_prediction_type, ) - known_paths = {config.root_path / x["path"] for x in self.list_models()} + known_paths = {self.resolve_model_path(x["path"]) for x in self.list_models()} directories = { config.root_path / x for x in [ @@ -1011,7 +1069,7 @@ class ModelManager(object): def heuristic_import( self, items_to_import: Set[str], - prediction_type_helper: Callable[[Path], SchedulerPredictionType] = None, + prediction_type_helper: Optional[Callable[[Path], SchedulerPredictionType]] = None, ) -> Dict[str, AddModelResult]: """Import a list of paths, repo_ids or URLs. Returns the set of successfully imported items. diff --git a/invokeai/backend/model_management/model_merge.py b/invokeai/backend/model_management/model_merge.py index 8cf3ce4ad0..a34d9b0e3e 100644 --- a/invokeai/backend/model_management/model_merge.py +++ b/invokeai/backend/model_management/model_merge.py @@ -33,7 +33,7 @@ class ModelMerger(object): self, model_paths: List[Path], alpha: float = 0.5, - interp: MergeInterpolationMethod = None, + interp: Optional[MergeInterpolationMethod] = None, force: bool = False, **kwargs, ) -> DiffusionPipeline: @@ -73,7 +73,7 @@ class ModelMerger(object): base_model: Union[BaseModelType, str], merged_model_name: str, alpha: float = 0.5, - interp: MergeInterpolationMethod = None, + interp: Optional[MergeInterpolationMethod] = None, force: bool = False, merge_dest_directory: Optional[Path] = None, **kwargs, @@ -109,7 +109,7 @@ class ModelMerger(object): # pick up the first model's vae if mod == model_names[0]: vae = info.get("vae") - model_paths.extend([config.root_path / info["path"]]) + model_paths.extend([(config.root_path / info["path"]).as_posix()]) merge_method = None if interp == "weighted_sum" else MergeInterpolationMethod(interp) logger.debug(f"interp = {interp}, merge_method={merge_method}") @@ -120,11 +120,11 @@ class ModelMerger(object): else config.models_path / base_model.value / ModelType.Main.value ) dump_path.mkdir(parents=True, exist_ok=True) - dump_path = dump_path / merged_model_name + dump_path = (dump_path / merged_model_name).as_posix() - merged_pipe.save_pretrained(dump_path, safe_serialization=1) + merged_pipe.save_pretrained(dump_path, safe_serialization=True) attributes = dict( - path=str(dump_path), + path=dump_path, description=f"Merge of models {', '.join(model_names)}", model_format="diffusers", variant=ModelVariantType.Normal.value, diff --git a/invokeai/backend/model_management/model_probe.py b/invokeai/backend/model_management/model_probe.py index c3964d760c..9f56958366 100644 --- a/invokeai/backend/model_management/model_probe.py +++ b/invokeai/backend/model_management/model_probe.py @@ -17,6 +17,7 @@ from .models import ( SilenceWarnings, InvalidModelException, ) +from .util import lora_token_vector_length from .models.base import read_checkpoint_meta @@ -216,9 +217,9 @@ class ModelProbe(object): raise "The model {model_name} is potentially infected by malware. Aborting import." -###################################################3 +# ##################################################3 # Checkpoint probing -###################################################3 +# ##################################################3 class ProbeBase(object): def get_base_type(self) -> BaseModelType: pass @@ -315,21 +316,16 @@ class LoRACheckpointProbe(CheckpointProbeBase): def get_base_type(self) -> BaseModelType: checkpoint = self.checkpoint - key1 = "lora_te_text_model_encoder_layers_0_mlp_fc1.lora_down.weight" - key2 = "lora_te_text_model_encoder_layers_0_self_attn_k_proj.hada_w1_a" - lora_token_vector_length = ( - checkpoint[key1].shape[1] - if key1 in checkpoint - else checkpoint[key2].shape[0] - if key2 in checkpoint - else 768 - ) - if lora_token_vector_length == 768: + token_vector_length = lora_token_vector_length(checkpoint) + + if token_vector_length == 768: return BaseModelType.StableDiffusion1 - elif lora_token_vector_length == 1024: + elif token_vector_length == 1024: return BaseModelType.StableDiffusion2 + elif token_vector_length == 2048: + return BaseModelType.StableDiffusionXL else: - return None + raise InvalidModelException(f"Unknown LoRA type: {self.checkpoint_path}") class TextualInversionCheckpointProbe(CheckpointProbeBase): @@ -435,7 +431,7 @@ class PipelineFolderProbe(FolderProbeBase): return ModelVariantType.Depth elif in_channels == 4: return ModelVariantType.Normal - except: + except Exception: pass return ModelVariantType.Normal @@ -485,9 +481,19 @@ class ControlNetFolderProbe(FolderProbeBase): with open(config_file, "r") as file: config = json.load(file) # no obvious way to distinguish between sd2-base and sd2-768 - return ( - BaseModelType.StableDiffusion1 if config["cross_attention_dim"] == 768 else BaseModelType.StableDiffusion2 + dimension = config["cross_attention_dim"] + base_model = ( + BaseModelType.StableDiffusion1 + if dimension == 768 + else BaseModelType.StableDiffusion2 + if dimension == 1024 + else BaseModelType.StableDiffusionXL + if dimension == 2048 + else None ) + if not base_model: + raise InvalidModelException(f"Unable to determine model base for {self.folder_path}") + return base_model class LoRAFolderProbe(FolderProbeBase): diff --git a/invokeai/backend/model_management/model_search.py b/invokeai/backend/model_management/model_search.py index 9c87d6c408..0a98091f4a 100644 --- a/invokeai/backend/model_management/model_search.py +++ b/invokeai/backend/model_management/model_search.py @@ -56,7 +56,7 @@ class ModelSearch(ABC): self.on_search_completed() def walk_directory(self, path: Path): - for root, dirs, files in os.walk(path): + for root, dirs, files in os.walk(path, followlinks=True): if str(Path(root).name).startswith("."): self._pruned_paths.add(root) if any([Path(root).is_relative_to(x) for x in self._pruned_paths]): diff --git a/invokeai/backend/model_management/models/__init__.py b/invokeai/backend/model_management/models/__init__.py index 931da1b159..2de206257b 100644 --- a/invokeai/backend/model_management/models/__init__.py +++ b/invokeai/backend/model_management/models/__init__.py @@ -2,7 +2,7 @@ import inspect from enum import Enum from pydantic import BaseModel from typing import Literal, get_origin -from .base import ( +from .base import ( # noqa: F401 BaseModelType, ModelType, SubModelType, @@ -118,7 +118,7 @@ def get_model_config_enums(): fields = model_config.__annotations__ try: field = fields["model_format"] - except: + except Exception: raise Exception("format field not found") # model_format: None diff --git a/invokeai/backend/model_management/models/base.py b/invokeai/backend/model_management/models/base.py index e6a20e79ec..ed1c2c6098 100644 --- a/invokeai/backend/model_management/models/base.py +++ b/invokeai/backend/model_management/models/base.py @@ -3,27 +3,28 @@ import os import sys import typing import inspect -from enum import Enum +import warnings from abc import ABCMeta, abstractmethod +from contextlib import suppress +from enum import Enum from pathlib import Path from picklescan.scanner import scan_file_path + import torch import numpy as np -import safetensors.torch -from pathlib import Path -from diffusers import DiffusionPipeline, ConfigMixin, OnnxRuntimeModel - -from contextlib import suppress -from pydantic import BaseModel, Field -from typing import List, Dict, Optional, Type, Literal, TypeVar, Generic, Callable, Any, Union - import onnx +import safetensors.torch +from diffusers import DiffusionPipeline, ConfigMixin from onnx import numpy_helper from onnxruntime import ( InferenceSession, SessionOptions, get_available_providers, ) +from pydantic import BaseModel, Field +from typing import List, Dict, Optional, Type, Literal, TypeVar, Generic, Callable, Any, Union +from diffusers import logging as diffusers_logging +from transformers import logging as transformers_logging class DuplicateModelException(Exception): @@ -171,7 +172,7 @@ class ModelBase(metaclass=ABCMeta): fields = value.__annotations__ try: field = fields["model_format"] - except: + except Exception: raise Exception(f"Invalid config definition - format field not found({cls.__qualname__})") if isinstance(field, type) and issubclass(field, str) and issubclass(field, Enum): @@ -244,7 +245,7 @@ class DiffusersModel(ModelBase): try: config_data = DiffusionPipeline.load_config(self.model_path) # config_data = json.loads(os.path.join(self.model_path, "model_index.json")) - except: + except Exception: raise Exception("Invalid diffusers model! (model_index.json not found or invalid)") config_data.pop("_ignore_files", None) @@ -292,8 +293,9 @@ class DiffusersModel(ModelBase): ) break except Exception as e: - # print("====ERR LOAD====") - # print(f"{variant}: {e}") + if not str(e).startswith("Error no file"): + print("====ERR LOAD====") + print(f"{variant}: {e}") pass else: raise Exception(f"Failed to load {self.base_model}:{self.model_type}:{child_type} model") @@ -342,7 +344,7 @@ def calc_model_size_by_fs(model_path: str, subfolder: Optional[str] = None, vari with open(os.path.join(model_path, file), "r") as f: index_data = json.loads(f.read()) return int(index_data["metadata"]["total_size"]) - except: + except Exception: pass # calculate files size if there is no index file @@ -439,7 +441,7 @@ def read_checkpoint_meta(path: Union[str, Path], scan: bool = False): if str(path).endswith(".safetensors"): try: checkpoint = _fast_safetensors_reader(path) - except: + except Exception: # TODO: create issue for support "meta"? checkpoint = safetensors.torch.load_file(path, device="cpu") else: @@ -451,11 +453,6 @@ def read_checkpoint_meta(path: Union[str, Path], scan: bool = False): return checkpoint -import warnings -from diffusers import logging as diffusers_logging -from transformers import logging as transformers_logging - - class SilenceWarnings(object): def __init__(self): self.transformers_verbosity = transformers_logging.get_verbosity() @@ -638,7 +635,7 @@ class IAIOnnxRuntimeModel: raise Exception("You should call create_session before running model") inputs = {k: np.array(v) for k, v in kwargs.items()} - output_names = self.session.get_outputs() + # output_names = self.session.get_outputs() # for k in inputs: # self.io_binding.bind_cpu_input(k, inputs[k]) # for name in output_names: diff --git a/invokeai/backend/model_management/models/controlnet.py b/invokeai/backend/model_management/models/controlnet.py index 061be7ae49..ebc01399b5 100644 --- a/invokeai/backend/model_management/models/controlnet.py +++ b/invokeai/backend/model_management/models/controlnet.py @@ -43,7 +43,7 @@ class ControlNetModel(ModelBase): try: config = EmptyConfigLoader.load_config(self.model_path, config_name="config.json") # config = json.loads(os.path.join(self.model_path, "config.json")) - except: + except Exception: raise Exception("Invalid controlnet model! (config.json not found or invalid)") model_class_name = config.get("_class_name", None) @@ -53,7 +53,7 @@ class ControlNetModel(ModelBase): try: self.model_class = self._hf_definition_to_type(["diffusers", model_class_name]) self.model_size = calc_model_size_by_fs(self.model_path) - except: + except Exception: raise Exception("Invalid ControlNet model!") def get_size(self, child_type: Optional[SubModelType] = None): @@ -78,7 +78,7 @@ class ControlNetModel(ModelBase): variant=variant, ) break - except: + except Exception: pass if not model: raise ModelNotFoundException() diff --git a/invokeai/backend/model_management/models/lora.py b/invokeai/backend/model_management/models/lora.py index 642f8bbeec..b6f321d60b 100644 --- a/invokeai/backend/model_management/models/lora.py +++ b/invokeai/backend/model_management/models/lora.py @@ -1,21 +1,23 @@ +import bisect import os -import torch from enum import Enum -from typing import Optional, Union, Literal +from pathlib import Path +from typing import Dict, Optional, Union + +import torch +from safetensors.torch import load_file + from .base import ( + BaseModelType, + InvalidModelException, ModelBase, ModelConfigBase, - BaseModelType, + ModelNotFoundException, ModelType, SubModelType, classproperty, - InvalidModelException, - ModelNotFoundException, ) -# TODO: naming -from ..lora import LoRAModel as LoRAModelRaw - class LoRAModelFormat(str, Enum): LyCORIS = "lycoris" @@ -50,6 +52,7 @@ class LoRAModel(ModelBase): model = LoRAModelRaw.from_checkpoint( file_path=self.model_path, dtype=torch_dtype, + base_model=self.base_model, ) self.model_size = model.calc_size() @@ -87,3 +90,622 @@ class LoRAModel(ModelBase): raise NotImplementedError("Diffusers lora not supported") else: return model_path + + +class LoRALayerBase: + # rank: Optional[int] + # alpha: Optional[float] + # bias: Optional[torch.Tensor] + # layer_key: str + + # @property + # def scale(self): + # return self.alpha / self.rank if (self.alpha and self.rank) else 1.0 + + def __init__( + self, + layer_key: str, + values: dict, + ): + if "alpha" in values: + self.alpha = values["alpha"].item() + else: + self.alpha = None + + if "bias_indices" in values and "bias_values" in values and "bias_size" in values: + self.bias = torch.sparse_coo_tensor( + values["bias_indices"], + values["bias_values"], + tuple(values["bias_size"]), + ) + + else: + self.bias = None + + self.rank = None # set in layer implementation + self.layer_key = layer_key + + def get_weight(self, orig_weight: torch.Tensor): + raise NotImplementedError() + + def calc_size(self) -> int: + model_size = 0 + for val in [self.bias]: + if val is not None: + model_size += val.nelement() * val.element_size() + return model_size + + def to( + self, + device: Optional[torch.device] = None, + dtype: Optional[torch.dtype] = None, + ): + if self.bias is not None: + self.bias = self.bias.to(device=device, dtype=dtype) + + +# TODO: find and debug lora/locon with bias +class LoRALayer(LoRALayerBase): + # up: torch.Tensor + # mid: Optional[torch.Tensor] + # down: torch.Tensor + + def __init__( + self, + layer_key: str, + values: dict, + ): + super().__init__(layer_key, values) + + self.up = values["lora_up.weight"] + self.down = values["lora_down.weight"] + if "lora_mid.weight" in values: + self.mid = values["lora_mid.weight"] + else: + self.mid = None + + self.rank = self.down.shape[0] + + def get_weight(self, orig_weight: torch.Tensor): + if self.mid is not None: + up = self.up.reshape(self.up.shape[0], self.up.shape[1]) + down = self.down.reshape(self.down.shape[0], self.down.shape[1]) + weight = torch.einsum("m n w h, i m, n j -> i j w h", self.mid, up, down) + else: + weight = self.up.reshape(self.up.shape[0], -1) @ self.down.reshape(self.down.shape[0], -1) + + return weight + + def calc_size(self) -> int: + model_size = super().calc_size() + for val in [self.up, self.mid, self.down]: + if val is not None: + model_size += val.nelement() * val.element_size() + return model_size + + def to( + self, + device: Optional[torch.device] = None, + dtype: Optional[torch.dtype] = None, + ): + super().to(device=device, dtype=dtype) + + self.up = self.up.to(device=device, dtype=dtype) + self.down = self.down.to(device=device, dtype=dtype) + + if self.mid is not None: + self.mid = self.mid.to(device=device, dtype=dtype) + + +class LoHALayer(LoRALayerBase): + # w1_a: torch.Tensor + # w1_b: torch.Tensor + # w2_a: torch.Tensor + # w2_b: torch.Tensor + # t1: Optional[torch.Tensor] = None + # t2: Optional[torch.Tensor] = None + + def __init__( + self, + layer_key: str, + values: dict, + ): + super().__init__(layer_key, values) + + self.w1_a = values["hada_w1_a"] + self.w1_b = values["hada_w1_b"] + self.w2_a = values["hada_w2_a"] + self.w2_b = values["hada_w2_b"] + + if "hada_t1" in values: + self.t1 = values["hada_t1"] + else: + self.t1 = None + + if "hada_t2" in values: + self.t2 = values["hada_t2"] + else: + self.t2 = None + + self.rank = self.w1_b.shape[0] + + def get_weight(self, orig_weight: torch.Tensor): + if self.t1 is None: + weight = (self.w1_a @ self.w1_b) * (self.w2_a @ self.w2_b) + + else: + rebuild1 = torch.einsum("i j k l, j r, i p -> p r k l", self.t1, self.w1_b, self.w1_a) + rebuild2 = torch.einsum("i j k l, j r, i p -> p r k l", self.t2, self.w2_b, self.w2_a) + weight = rebuild1 * rebuild2 + + return weight + + def calc_size(self) -> int: + model_size = super().calc_size() + for val in [self.w1_a, self.w1_b, self.w2_a, self.w2_b, self.t1, self.t2]: + if val is not None: + model_size += val.nelement() * val.element_size() + return model_size + + def to( + self, + device: Optional[torch.device] = None, + dtype: Optional[torch.dtype] = None, + ): + super().to(device=device, dtype=dtype) + + self.w1_a = self.w1_a.to(device=device, dtype=dtype) + self.w1_b = self.w1_b.to(device=device, dtype=dtype) + if self.t1 is not None: + self.t1 = self.t1.to(device=device, dtype=dtype) + + self.w2_a = self.w2_a.to(device=device, dtype=dtype) + self.w2_b = self.w2_b.to(device=device, dtype=dtype) + if self.t2 is not None: + self.t2 = self.t2.to(device=device, dtype=dtype) + + +class LoKRLayer(LoRALayerBase): + # w1: Optional[torch.Tensor] = None + # w1_a: Optional[torch.Tensor] = None + # w1_b: Optional[torch.Tensor] = None + # w2: Optional[torch.Tensor] = None + # w2_a: Optional[torch.Tensor] = None + # w2_b: Optional[torch.Tensor] = None + # t2: Optional[torch.Tensor] = None + + def __init__( + self, + layer_key: str, + values: dict, + ): + super().__init__(layer_key, values) + + if "lokr_w1" in values: + self.w1 = values["lokr_w1"] + self.w1_a = None + self.w1_b = None + else: + self.w1 = None + self.w1_a = values["lokr_w1_a"] + self.w1_b = values["lokr_w1_b"] + + if "lokr_w2" in values: + self.w2 = values["lokr_w2"] + self.w2_a = None + self.w2_b = None + else: + self.w2 = None + self.w2_a = values["lokr_w2_a"] + self.w2_b = values["lokr_w2_b"] + + if "lokr_t2" in values: + self.t2 = values["lokr_t2"] + else: + self.t2 = None + + if "lokr_w1_b" in values: + self.rank = values["lokr_w1_b"].shape[0] + elif "lokr_w2_b" in values: + self.rank = values["lokr_w2_b"].shape[0] + else: + self.rank = None # unscaled + + def get_weight(self, orig_weight: torch.Tensor): + w1 = self.w1 + if w1 is None: + w1 = self.w1_a @ self.w1_b + + w2 = self.w2 + if w2 is None: + if self.t2 is None: + w2 = self.w2_a @ self.w2_b + else: + w2 = torch.einsum("i j k l, i p, j r -> p r k l", self.t2, self.w2_a, self.w2_b) + + if len(w2.shape) == 4: + w1 = w1.unsqueeze(2).unsqueeze(2) + w2 = w2.contiguous() + weight = torch.kron(w1, w2) + + return weight + + def calc_size(self) -> int: + model_size = super().calc_size() + for val in [self.w1, self.w1_a, self.w1_b, self.w2, self.w2_a, self.w2_b, self.t2]: + if val is not None: + model_size += val.nelement() * val.element_size() + return model_size + + def to( + self, + device: Optional[torch.device] = None, + dtype: Optional[torch.dtype] = None, + ): + super().to(device=device, dtype=dtype) + + if self.w1 is not None: + self.w1 = self.w1.to(device=device, dtype=dtype) + else: + self.w1_a = self.w1_a.to(device=device, dtype=dtype) + self.w1_b = self.w1_b.to(device=device, dtype=dtype) + + if self.w2 is not None: + self.w2 = self.w2.to(device=device, dtype=dtype) + else: + self.w2_a = self.w2_a.to(device=device, dtype=dtype) + self.w2_b = self.w2_b.to(device=device, dtype=dtype) + + if self.t2 is not None: + self.t2 = self.t2.to(device=device, dtype=dtype) + + +class FullLayer(LoRALayerBase): + # weight: torch.Tensor + + def __init__( + self, + layer_key: str, + values: dict, + ): + super().__init__(layer_key, values) + + self.weight = values["diff"] + + if len(values.keys()) > 1: + _keys = list(values.keys()) + _keys.remove("diff") + raise NotImplementedError(f"Unexpected keys in lora diff layer: {_keys}") + + self.rank = None # unscaled + + def get_weight(self, orig_weight: torch.Tensor): + return self.weight + + def calc_size(self) -> int: + model_size = super().calc_size() + model_size += self.weight.nelement() * self.weight.element_size() + return model_size + + def to( + self, + device: Optional[torch.device] = None, + dtype: Optional[torch.dtype] = None, + ): + super().to(device=device, dtype=dtype) + + self.weight = self.weight.to(device=device, dtype=dtype) + + +class IA3Layer(LoRALayerBase): + # weight: torch.Tensor + # on_input: torch.Tensor + + def __init__( + self, + layer_key: str, + values: dict, + ): + super().__init__(layer_key, values) + + self.weight = values["weight"] + self.on_input = values["on_input"] + + self.rank = None # unscaled + + def get_weight(self, orig_weight: torch.Tensor): + weight = self.weight + if not self.on_input: + weight = weight.reshape(-1, 1) + return orig_weight * weight + + def calc_size(self) -> int: + model_size = super().calc_size() + model_size += self.weight.nelement() * self.weight.element_size() + model_size += self.on_input.nelement() * self.on_input.element_size() + return model_size + + def to( + self, + device: Optional[torch.device] = None, + dtype: Optional[torch.dtype] = None, + ): + super().to(device=device, dtype=dtype) + + self.weight = self.weight.to(device=device, dtype=dtype) + self.on_input = self.on_input.to(device=device, dtype=dtype) + + +# TODO: rename all methods used in model logic with Info postfix and remove here Raw postfix +class LoRAModelRaw: # (torch.nn.Module): + _name: str + layers: Dict[str, LoRALayer] + _device: torch.device + _dtype: torch.dtype + + def __init__( + self, + name: str, + layers: Dict[str, LoRALayer], + device: torch.device, + dtype: torch.dtype, + ): + self._name = name + self._device = device or torch.cpu + self._dtype = dtype or torch.float32 + self.layers = layers + + @property + def name(self): + return self._name + + @property + def device(self): + return self._device + + @property + def dtype(self): + return self._dtype + + def to( + self, + device: Optional[torch.device] = None, + dtype: Optional[torch.dtype] = None, + ): + # TODO: try revert if exception? + for key, layer in self.layers.items(): + layer.to(device=device, dtype=dtype) + self._device = device + self._dtype = dtype + + def calc_size(self) -> int: + model_size = 0 + for _, layer in self.layers.items(): + model_size += layer.calc_size() + return model_size + + @classmethod + def _convert_sdxl_keys_to_diffusers_format(cls, state_dict): + """Convert the keys of an SDXL LoRA state_dict to diffusers format. + + The input state_dict can be in either Stability AI format or diffusers format. If the state_dict is already in + diffusers format, then this function will have no effect. + + This function is adapted from: + https://github.com/bmaltais/kohya_ss/blob/2accb1305979ba62f5077a23aabac23b4c37e935/networks/lora_diffusers.py#L385-L409 + + Args: + state_dict (Dict[str, Tensor]): The SDXL LoRA state_dict. + + Raises: + ValueError: If state_dict contains an unrecognized key, or not all keys could be converted. + + Returns: + Dict[str, Tensor]: The diffusers-format state_dict. + """ + converted_count = 0 # The number of Stability AI keys converted to diffusers format. + not_converted_count = 0 # The number of keys that were not converted. + + # Get a sorted list of Stability AI UNet keys so that we can efficiently search for keys with matching prefixes. + # For example, we want to efficiently find `input_blocks_4_1` in the list when searching for + # `input_blocks_4_1_proj_in`. + stability_unet_keys = list(SDXL_UNET_STABILITY_TO_DIFFUSERS_MAP) + stability_unet_keys.sort() + + new_state_dict = dict() + for full_key, value in state_dict.items(): + if full_key.startswith("lora_unet_"): + search_key = full_key.replace("lora_unet_", "") + # Use bisect to find the key in stability_unet_keys that *may* match the search_key's prefix. + position = bisect.bisect_right(stability_unet_keys, search_key) + map_key = stability_unet_keys[position - 1] + # Now, check if the map_key *actually* matches the search_key. + if search_key.startswith(map_key): + new_key = full_key.replace(map_key, SDXL_UNET_STABILITY_TO_DIFFUSERS_MAP[map_key]) + new_state_dict[new_key] = value + converted_count += 1 + else: + new_state_dict[full_key] = value + not_converted_count += 1 + elif full_key.startswith("lora_te1_") or full_key.startswith("lora_te2_"): + # The CLIP text encoders have the same keys in both Stability AI and diffusers formats. + new_state_dict[full_key] = value + continue + else: + raise ValueError(f"Unrecognized SDXL LoRA key prefix: '{full_key}'.") + + if converted_count > 0 and not_converted_count > 0: + raise ValueError( + f"The SDXL LoRA could only be partially converted to diffusers format. converted={converted_count}," + f" not_converted={not_converted_count}" + ) + + return new_state_dict + + @classmethod + def from_checkpoint( + cls, + file_path: Union[str, Path], + device: Optional[torch.device] = None, + dtype: Optional[torch.dtype] = None, + base_model: Optional[BaseModelType] = None, + ): + device = device or torch.device("cpu") + dtype = dtype or torch.float32 + + if isinstance(file_path, str): + file_path = Path(file_path) + + model = cls( + device=device, + dtype=dtype, + name=file_path.stem, # TODO: + layers=dict(), + ) + + if file_path.suffix == ".safetensors": + state_dict = load_file(file_path.absolute().as_posix(), device="cpu") + else: + state_dict = torch.load(file_path, map_location="cpu") + + state_dict = cls._group_state(state_dict) + + if base_model == BaseModelType.StableDiffusionXL: + state_dict = cls._convert_sdxl_keys_to_diffusers_format(state_dict) + + for layer_key, values in state_dict.items(): + # lora and locon + if "lora_down.weight" in values: + layer = LoRALayer(layer_key, values) + + # loha + elif "hada_w1_b" in values: + layer = LoHALayer(layer_key, values) + + # lokr + elif "lokr_w1_b" in values or "lokr_w1" in values: + layer = LoKRLayer(layer_key, values) + + # diff + elif "diff" in values: + layer = FullLayer(layer_key, values) + + # ia3 + elif "weight" in values and "on_input" in values: + layer = IA3Layer(layer_key, values) + + else: + print(f">> Encountered unknown lora layer module in {model.name}: {layer_key} - {list(values.keys())}") + raise Exception("Unknown lora format!") + + # lower memory consumption by removing already parsed layer values + state_dict[layer_key].clear() + + layer.to(device=device, dtype=dtype) + model.layers[layer_key] = layer + + return model + + @staticmethod + def _group_state(state_dict: dict): + state_dict_groupped = dict() + + for key, value in state_dict.items(): + stem, leaf = key.split(".", 1) + if stem not in state_dict_groupped: + state_dict_groupped[stem] = dict() + state_dict_groupped[stem][leaf] = value + + return state_dict_groupped + + +# code from +# https://github.com/bmaltais/kohya_ss/blob/2accb1305979ba62f5077a23aabac23b4c37e935/networks/lora_diffusers.py#L15C1-L97C32 +def make_sdxl_unet_conversion_map(): + """Create a dict mapping state_dict keys from Stability AI SDXL format to diffusers SDXL format.""" + unet_conversion_map_layer = [] + + for i in range(3): # num_blocks is 3 in sdxl + # loop over downblocks/upblocks + for j in range(2): + # loop over resnets/attentions for downblocks + hf_down_res_prefix = f"down_blocks.{i}.resnets.{j}." + sd_down_res_prefix = f"input_blocks.{3*i + j + 1}.0." + unet_conversion_map_layer.append((sd_down_res_prefix, hf_down_res_prefix)) + + if i < 3: + # no attention layers in down_blocks.3 + hf_down_atn_prefix = f"down_blocks.{i}.attentions.{j}." + sd_down_atn_prefix = f"input_blocks.{3*i + j + 1}.1." + unet_conversion_map_layer.append((sd_down_atn_prefix, hf_down_atn_prefix)) + + for j in range(3): + # loop over resnets/attentions for upblocks + hf_up_res_prefix = f"up_blocks.{i}.resnets.{j}." + sd_up_res_prefix = f"output_blocks.{3*i + j}.0." + unet_conversion_map_layer.append((sd_up_res_prefix, hf_up_res_prefix)) + + # if i > 0: commentout for sdxl + # no attention layers in up_blocks.0 + hf_up_atn_prefix = f"up_blocks.{i}.attentions.{j}." + sd_up_atn_prefix = f"output_blocks.{3*i + j}.1." + unet_conversion_map_layer.append((sd_up_atn_prefix, hf_up_atn_prefix)) + + if i < 3: + # no downsample in down_blocks.3 + hf_downsample_prefix = f"down_blocks.{i}.downsamplers.0.conv." + sd_downsample_prefix = f"input_blocks.{3*(i+1)}.0.op." + unet_conversion_map_layer.append((sd_downsample_prefix, hf_downsample_prefix)) + + # no upsample in up_blocks.3 + hf_upsample_prefix = f"up_blocks.{i}.upsamplers.0." + sd_upsample_prefix = f"output_blocks.{3*i + 2}.{2}." # change for sdxl + unet_conversion_map_layer.append((sd_upsample_prefix, hf_upsample_prefix)) + + hf_mid_atn_prefix = "mid_block.attentions.0." + sd_mid_atn_prefix = "middle_block.1." + unet_conversion_map_layer.append((sd_mid_atn_prefix, hf_mid_atn_prefix)) + + for j in range(2): + hf_mid_res_prefix = f"mid_block.resnets.{j}." + sd_mid_res_prefix = f"middle_block.{2*j}." + unet_conversion_map_layer.append((sd_mid_res_prefix, hf_mid_res_prefix)) + + unet_conversion_map_resnet = [ + # (stable-diffusion, HF Diffusers) + ("in_layers.0.", "norm1."), + ("in_layers.2.", "conv1."), + ("out_layers.0.", "norm2."), + ("out_layers.3.", "conv2."), + ("emb_layers.1.", "time_emb_proj."), + ("skip_connection.", "conv_shortcut."), + ] + + unet_conversion_map = [] + for sd, hf in unet_conversion_map_layer: + if "resnets" in hf: + for sd_res, hf_res in unet_conversion_map_resnet: + unet_conversion_map.append((sd + sd_res, hf + hf_res)) + else: + unet_conversion_map.append((sd, hf)) + + for j in range(2): + hf_time_embed_prefix = f"time_embedding.linear_{j+1}." + sd_time_embed_prefix = f"time_embed.{j*2}." + unet_conversion_map.append((sd_time_embed_prefix, hf_time_embed_prefix)) + + for j in range(2): + hf_label_embed_prefix = f"add_embedding.linear_{j+1}." + sd_label_embed_prefix = f"label_emb.0.{j*2}." + unet_conversion_map.append((sd_label_embed_prefix, hf_label_embed_prefix)) + + unet_conversion_map.append(("input_blocks.0.0.", "conv_in.")) + unet_conversion_map.append(("out.0.", "conv_norm_out.")) + unet_conversion_map.append(("out.2.", "conv_out.")) + + return unet_conversion_map + + +SDXL_UNET_STABILITY_TO_DIFFUSERS_MAP = { + sd.rstrip(".").replace(".", "_"): hf.rstrip(".").replace(".", "_") for sd, hf in make_sdxl_unet_conversion_map() +} diff --git a/invokeai/backend/model_management/models/sdxl.py b/invokeai/backend/model_management/models/sdxl.py index 7fc3efb77c..5bbe05be98 100644 --- a/invokeai/backend/model_management/models/sdxl.py +++ b/invokeai/backend/model_management/models/sdxl.py @@ -1,6 +1,5 @@ import os import json -import invokeai.backend.util.logging as logger from enum import Enum from pydantic import Field from typing import Literal, Optional @@ -12,6 +11,7 @@ from .base import ( DiffusersModel, read_checkpoint_meta, classproperty, + InvalidModelException, ) from omegaconf import OmegaConf @@ -65,7 +65,7 @@ class StableDiffusionXLModel(DiffusersModel): in_channels = unet_config["in_channels"] else: - raise Exception("Not supported stable diffusion diffusers format(possibly onnx?)") + raise InvalidModelException(f"{path} is not a recognized Stable Diffusion diffusers model") else: raise NotImplementedError(f"Unknown stable diffusion 2.* format: {model_format}") @@ -80,8 +80,10 @@ class StableDiffusionXLModel(DiffusersModel): raise Exception("Unkown stable diffusion 2.* model format") if ckpt_config_path is None: - # TO DO: implement picking - pass + # avoid circular import + from .stable_diffusion import _select_ckpt_config + + ckpt_config_path = _select_ckpt_config(kwargs.get("model_base", BaseModelType.StableDiffusionXL), variant) return cls.create_config( path=path, diff --git a/invokeai/backend/model_management/models/stable_diffusion.py b/invokeai/backend/model_management/models/stable_diffusion.py index d81b0150e5..cc34f14b9c 100644 --- a/invokeai/backend/model_management/models/stable_diffusion.py +++ b/invokeai/backend/model_management/models/stable_diffusion.py @@ -4,6 +4,7 @@ from enum import Enum from pydantic import Field from pathlib import Path from typing import Literal, Optional, Union +from diffusers import StableDiffusionInpaintPipeline, StableDiffusionPipeline from .base import ( ModelConfigBase, BaseModelType, @@ -263,6 +264,8 @@ def _convert_ckpt_and_cache( weights = app_config.models_path / model_config.path config_file = app_config.root_path / model_config.config output_path = Path(output_path) + variant = model_config.variant + pipeline_class = StableDiffusionInpaintPipeline if variant == "inpaint" else StableDiffusionPipeline # return cached version if it exists if output_path.exists(): @@ -289,6 +292,7 @@ def _convert_ckpt_and_cache( original_config_file=config_file, extract_ema=True, scan_needed=True, + pipeline_class=pipeline_class, from_safetensors=weights.suffix == ".safetensors", precision=torch_dtype(choose_torch_device()), **kwargs, @@ -326,5 +330,5 @@ def _select_ckpt_config(version: BaseModelType, variant: ModelVariantType): config_path = config_path.relative_to(app_config.root_path) return str(config_path) - except: + except Exception: return None diff --git a/invokeai/backend/model_management/models/stable_diffusion_onnx.py b/invokeai/backend/model_management/models/stable_diffusion_onnx.py index 03693e2c3e..2780ba4728 100644 --- a/invokeai/backend/model_management/models/stable_diffusion_onnx.py +++ b/invokeai/backend/model_management/models/stable_diffusion_onnx.py @@ -1,25 +1,17 @@ -import os -import json from enum import Enum -from pydantic import Field -from pathlib import Path -from typing import Literal, Optional, Union +from typing import Literal + +from diffusers import OnnxRuntimeModel from .base import ( - ModelBase, ModelConfigBase, BaseModelType, ModelType, - SubModelType, ModelVariantType, DiffusersModel, SchedulerPredictionType, - SilenceWarnings, - read_checkpoint_meta, classproperty, - OnnxRuntimeModel, IAIOnnxRuntimeModel, ) -from invokeai.app.services.config import InvokeAIAppConfig class StableDiffusionOnnxModelFormat(str, Enum): diff --git a/invokeai/backend/model_management/models/vae.py b/invokeai/backend/model_management/models/vae.py index b15844bcf8..cf7622a9aa 100644 --- a/invokeai/backend/model_management/models/vae.py +++ b/invokeai/backend/model_management/models/vae.py @@ -1,9 +1,14 @@ import os -import torch -import safetensors from enum import Enum from pathlib import Path -from typing import Optional, Union, Literal +from typing import Optional + +import safetensors +import torch +from diffusers.utils import is_safetensors_available +from omegaconf import OmegaConf + +from invokeai.app.services.config import InvokeAIAppConfig from .base import ( ModelBase, ModelConfigBase, @@ -18,9 +23,6 @@ from .base import ( InvalidModelException, ModelNotFoundException, ) -from invokeai.app.services.config import InvokeAIAppConfig -from diffusers.utils import is_safetensors_available -from omegaconf import OmegaConf class VaeModelFormat(str, Enum): @@ -42,14 +44,14 @@ class VaeModel(ModelBase): try: config = EmptyConfigLoader.load_config(self.model_path, config_name="config.json") # config = json.loads(os.path.join(self.model_path, "config.json")) - except: + except Exception: raise Exception("Invalid vae model! (config.json not found or invalid)") try: vae_class_name = config.get("_class_name", "AutoencoderKL") self.vae_class = self._hf_definition_to_type(["diffusers", vae_class_name]) self.model_size = calc_model_size_by_fs(self.model_path) - except: + except Exception: raise Exception("Invalid vae model! (Unkown vae type)") def get_size(self, child_type: Optional[SubModelType] = None): @@ -80,7 +82,7 @@ class VaeModel(ModelBase): @classmethod def detect_format(cls, path: str): if not os.path.exists(path): - raise ModelNotFoundException() + raise ModelNotFoundException(f"Does not exist as local file: {path}") if os.path.isdir(path): if os.path.exists(os.path.join(path, "config.json")): diff --git a/invokeai/backend/model_management/util.py b/invokeai/backend/model_management/util.py new file mode 100644 index 0000000000..6d70107c93 --- /dev/null +++ b/invokeai/backend/model_management/util.py @@ -0,0 +1,75 @@ +# Copyright (c) 2023 The InvokeAI Development Team +"""Utilities used by the Model Manager""" + + +def lora_token_vector_length(checkpoint: dict) -> int: + """ + Given a checkpoint in memory, return the lora token vector length + + :param checkpoint: The checkpoint + """ + + def _get_shape_1(key, tensor, checkpoint): + lora_token_vector_length = None + + if "." not in key: + return lora_token_vector_length # wrong key format + model_key, lora_key = key.split(".", 1) + + # check lora/locon + if lora_key == "lora_down.weight": + lora_token_vector_length = tensor.shape[1] + + # check loha (don't worry about hada_t1/hada_t2 as it used only in 4d shapes) + elif lora_key in ["hada_w1_b", "hada_w2_b"]: + lora_token_vector_length = tensor.shape[1] + + # check lokr (don't worry about lokr_t2 as it used only in 4d shapes) + elif "lokr_" in lora_key: + if model_key + ".lokr_w1" in checkpoint: + _lokr_w1 = checkpoint[model_key + ".lokr_w1"] + elif model_key + "lokr_w1_b" in checkpoint: + _lokr_w1 = checkpoint[model_key + ".lokr_w1_b"] + else: + return lora_token_vector_length # unknown format + + if model_key + ".lokr_w2" in checkpoint: + _lokr_w2 = checkpoint[model_key + ".lokr_w2"] + elif model_key + "lokr_w2_b" in checkpoint: + _lokr_w2 = checkpoint[model_key + ".lokr_w2_b"] + else: + return lora_token_vector_length # unknown format + + lora_token_vector_length = _lokr_w1.shape[1] * _lokr_w2.shape[1] + + elif lora_key == "diff": + lora_token_vector_length = tensor.shape[1] + + # ia3 can be detected only by shape[0] in text encoder + elif lora_key == "weight" and "lora_unet_" not in model_key: + lora_token_vector_length = tensor.shape[0] + + return lora_token_vector_length + + lora_token_vector_length = None + lora_te1_length = None + lora_te2_length = None + for key, tensor in checkpoint.items(): + if key.startswith("lora_unet_") and ("_attn2_to_k." in key or "_attn2_to_v." in key): + lora_token_vector_length = _get_shape_1(key, tensor, checkpoint) + elif key.startswith("lora_te") and "_self_attn_" in key: + tmp_length = _get_shape_1(key, tensor, checkpoint) + if key.startswith("lora_te_"): + lora_token_vector_length = tmp_length + elif key.startswith("lora_te1_"): + lora_te1_length = tmp_length + elif key.startswith("lora_te2_"): + lora_te2_length = tmp_length + + if lora_te1_length is not None and lora_te2_length is not None: + lora_token_vector_length = lora_te1_length + lora_te2_length + + if lora_token_vector_length is not None: + break + + return lora_token_vector_length diff --git a/invokeai/backend/stable_diffusion/__init__.py b/invokeai/backend/stable_diffusion/__init__.py index 37024ccace..a958750802 100644 --- a/invokeai/backend/stable_diffusion/__init__.py +++ b/invokeai/backend/stable_diffusion/__init__.py @@ -1,11 +1,15 @@ """ Initialization file for the invokeai.backend.stable_diffusion package """ -from .diffusers_pipeline import ( +from .diffusers_pipeline import ( # noqa: F401 ConditioningData, PipelineIntermediateState, StableDiffusionGeneratorPipeline, ) -from .diffusion import InvokeAIDiffuserComponent -from .diffusion.cross_attention_map_saving import AttentionMapSaver -from .diffusion.shared_invokeai_diffusion import PostprocessingSettings +from .diffusion import InvokeAIDiffuserComponent # noqa: F401 +from .diffusion.cross_attention_map_saving import AttentionMapSaver # noqa: F401 +from .diffusion.shared_invokeai_diffusion import ( # noqa: F401 + PostprocessingSettings, + BasicConditioningInfo, + SDXLConditioningInfo, +) diff --git a/invokeai/backend/stable_diffusion/diffusers_pipeline.py b/invokeai/backend/stable_diffusion/diffusers_pipeline.py index 624d47ff64..0180830b76 100644 --- a/invokeai/backend/stable_diffusion/diffusers_pipeline.py +++ b/invokeai/backend/stable_diffusion/diffusers_pipeline.py @@ -2,17 +2,11 @@ from __future__ import annotations import dataclasses import inspect -import math -import secrets -from collections.abc import Sequence from dataclasses import dataclass, field -from typing import Any, Callable, Generic, List, Optional, Type, TypeVar, Union -from pydantic import Field +from typing import Any, Callable, List, Optional, Union -import einops import PIL.Image -import numpy as np -from accelerate.utils import set_seed +import einops import psutil import torch import torchvision.transforms as T @@ -22,36 +16,31 @@ from diffusers.pipelines.stable_diffusion import StableDiffusionPipelineOutput from diffusers.pipelines.stable_diffusion.pipeline_stable_diffusion import ( StableDiffusionPipeline, ) - -from diffusers.pipelines.stable_diffusion.pipeline_stable_diffusion_img2img import ( - StableDiffusionImg2ImgPipeline, -) from diffusers.pipelines.stable_diffusion.safety_checker import ( StableDiffusionSafetyChecker, ) from diffusers.schedulers import KarrasDiffusionSchedulers from diffusers.schedulers.scheduling_utils import SchedulerMixin, SchedulerOutput -from diffusers.utils import PIL_INTERPOLATION from diffusers.utils.import_utils import is_xformers_available from diffusers.utils.outputs import BaseOutput -from torchvision.transforms.functional import resize as tv_resize +from pydantic import Field from transformers import CLIPFeatureExtractor, CLIPTextModel, CLIPTokenizer -from typing_extensions import ParamSpec from invokeai.app.services.config import InvokeAIAppConfig -from ..util import CPU_DEVICE, normalize_device from .diffusion import ( AttentionMapSaver, InvokeAIDiffuserComponent, PostprocessingSettings, + BasicConditioningInfo, ) -from .offloading import FullyLoadedModelGroup, ModelGroup +from ..util import normalize_device @dataclass class PipelineIntermediateState: - run_id: str step: int + order: int + total_steps: int timestep: int latents: torch.Tensor predicted_original: Optional[torch.Tensor] = None @@ -102,7 +91,6 @@ class AddsMaskGuidance: mask_latents: torch.FloatTensor scheduler: SchedulerMixin noise: torch.Tensor - _debug: Optional[Callable] = None def __call__(self, step_output: Union[BaseOutput, SchedulerOutput], t: torch.Tensor, conditioning) -> BaseOutput: output_class = step_output.__class__ # We'll create a new one with masked data. @@ -139,8 +127,6 @@ class AddsMaskGuidance: # mask_latents = self.scheduler.scale_model_input(mask_latents, t) mask_latents = einops.repeat(mask_latents, "b c h w -> (repeat b) c h w", repeat=batch_size) masked_input = torch.lerp(mask_latents.to(dtype=latents.dtype), latents, mask.to(dtype=latents.dtype)) - if self._debug: - self._debug(masked_input, f"t={t} lerped") return masked_input @@ -172,33 +158,6 @@ def is_inpainting_model(unet: UNet2DConditionModel): return unet.conv_in.in_channels == 9 -CallbackType = TypeVar("CallbackType") -ReturnType = TypeVar("ReturnType") -ParamType = ParamSpec("ParamType") - - -@dataclass(frozen=True) -class GeneratorToCallbackinator(Generic[ParamType, ReturnType, CallbackType]): - """Convert a generator to a function with a callback and a return value.""" - - generator_method: Callable[ParamType, ReturnType] - callback_arg_type: Type[CallbackType] - - def __call__( - self, - *args: ParamType.args, - callback: Callable[[CallbackType], Any] = None, - **kwargs: ParamType.kwargs, - ) -> ReturnType: - result = None - for result in self.generator_method(*args, **kwargs): - if callback is not None and isinstance(result, self.callback_arg_type): - callback(result) - if result is None: - raise AssertionError("why was that an empty generator?") - return result - - @dataclass class ControlNetData: model: ControlNetModel = Field(default=None) @@ -212,8 +171,8 @@ class ControlNetData: @dataclass class ConditioningData: - unconditioned_embeddings: torch.Tensor - text_embeddings: torch.Tensor + unconditioned_embeddings: BasicConditioningInfo + text_embeddings: BasicConditioningInfo guidance_scale: Union[float, List[float]] """ Guidance scale as defined in [Classifier-Free Diffusion Guidance](https://arxiv.org/abs/2207.12598). @@ -289,9 +248,6 @@ class StableDiffusionGeneratorPipeline(StableDiffusionPipeline): feature_extractor ([`CLIPFeatureExtractor`]): Model that extracts features from generated images to be used as inputs for the `safety_checker`. """ - _model_group: ModelGroup - - ID_LENGTH = 8 def __init__( self, @@ -303,9 +259,7 @@ class StableDiffusionGeneratorPipeline(StableDiffusionPipeline): safety_checker: Optional[StableDiffusionSafetyChecker], feature_extractor: Optional[CLIPFeatureExtractor], requires_safety_checker: bool = False, - precision: str = "float32", control_model: ControlNetModel = None, - execution_device: Optional[torch.device] = None, ): super().__init__( vae, @@ -330,9 +284,6 @@ class StableDiffusionGeneratorPipeline(StableDiffusionPipeline): # control_model=control_model, ) self.invokeai_diffuser = InvokeAIDiffuserComponent(self.unet, self._unet_forward) - - self._model_group = FullyLoadedModelGroup(execution_device or self.unet.device) - self._model_group.install(*self._submodels) self.control_model = control_model def _adjust_memory_efficient_attention(self, latents: torch.Tensor): @@ -340,99 +291,41 @@ class StableDiffusionGeneratorPipeline(StableDiffusionPipeline): if xformers is available, use it, otherwise use sliced attention. """ config = InvokeAIAppConfig.get_config() - if torch.cuda.is_available() and is_xformers_available() and not config.disable_xformers: - self.enable_xformers_memory_efficient_attention() + if self.unet.device.type == "cuda": + if is_xformers_available() and not config.disable_xformers: + self.enable_xformers_memory_efficient_attention() + return + elif hasattr(torch.nn.functional, "scaled_dot_product_attention"): + # diffusers enable sdp automatically + return + + if self.unet.device.type == "cpu" or self.unet.device.type == "mps": + mem_free = psutil.virtual_memory().free + elif self.unet.device.type == "cuda": + mem_free, _ = torch.cuda.mem_get_info(normalize_device(self.unet.device)) else: - if self.device.type == "cpu" or self.device.type == "mps": - mem_free = psutil.virtual_memory().free - elif self.device.type == "cuda": - mem_free, _ = torch.cuda.mem_get_info(normalize_device(self.device)) - else: - raise ValueError(f"unrecognized device {self.device}") - # input tensor of [1, 4, h/8, w/8] - # output tensor of [16, (h/8 * w/8), (h/8 * w/8)] - bytes_per_element_needed_for_baddbmm_duplication = latents.element_size() + 4 - max_size_required_for_baddbmm = ( - 16 - * latents.size(dim=2) - * latents.size(dim=3) - * latents.size(dim=2) - * latents.size(dim=3) - * bytes_per_element_needed_for_baddbmm_duplication - ) - if max_size_required_for_baddbmm > (mem_free * 3.0 / 4.0): # 3.3 / 4.0 is from old Invoke code - self.enable_attention_slicing(slice_size="max") - elif torch.backends.mps.is_available(): - # diffusers recommends always enabling for mps - self.enable_attention_slicing(slice_size="max") - else: - self.disable_attention_slicing() + raise ValueError(f"unrecognized device {self.unet.device}") + # input tensor of [1, 4, h/8, w/8] + # output tensor of [16, (h/8 * w/8), (h/8 * w/8)] + bytes_per_element_needed_for_baddbmm_duplication = latents.element_size() + 4 + max_size_required_for_baddbmm = ( + 16 + * latents.size(dim=2) + * latents.size(dim=3) + * latents.size(dim=2) + * latents.size(dim=3) + * bytes_per_element_needed_for_baddbmm_duplication + ) + if max_size_required_for_baddbmm > (mem_free * 3.0 / 4.0): # 3.3 / 4.0 is from old Invoke code + self.enable_attention_slicing(slice_size="max") + elif torch.backends.mps.is_available(): + # diffusers recommends always enabling for mps + self.enable_attention_slicing(slice_size="max") + else: + self.disable_attention_slicing() def to(self, torch_device: Optional[Union[str, torch.device]] = None, silence_dtype_warnings=False): - # overridden method; types match the superclass. - if torch_device is None: - return self - self._model_group.set_device(torch.device(torch_device)) - self._model_group.ready() - - @property - def device(self) -> torch.device: - return self._model_group.execution_device - - @property - def _submodels(self) -> Sequence[torch.nn.Module]: - module_names, _, _ = self.extract_init_dict(dict(self.config)) - submodels = [] - for name in module_names.keys(): - if hasattr(self, name): - value = getattr(self, name) - else: - value = getattr(self.config, name) - if isinstance(value, torch.nn.Module): - submodels.append(value) - return submodels - - def image_from_embeddings( - self, - latents: torch.Tensor, - num_inference_steps: int, - conditioning_data: ConditioningData, - *, - noise: torch.Tensor, - callback: Callable[[PipelineIntermediateState], None] = None, - run_id=None, - ) -> InvokeAIStableDiffusionPipelineOutput: - r""" - Function invoked when calling the pipeline for generation. - - :param conditioning_data: - :param latents: Pre-generated un-noised latents, to be used as inputs for - image generation. Can be used to tweak the same generation with different prompts. - :param num_inference_steps: The number of denoising steps. More denoising steps usually lead to a higher quality - image at the expense of slower inference. - :param noise: Noise to add to the latents, sampled from a Gaussian distribution. - :param callback: - :param run_id: - """ - result_latents, result_attention_map_saver = self.latents_from_embeddings( - latents, - num_inference_steps, - conditioning_data, - noise=noise, - run_id=run_id, - callback=callback, - ) - # https://discuss.huggingface.co/t/memory-usage-by-later-pipeline-stages/23699 - torch.cuda.empty_cache() - - with torch.inference_mode(): - image = self.decode_latents(result_latents) - output = InvokeAIStableDiffusionPipelineOutput( - images=image, - nsfw_content_detected=[], - attention_map_saver=result_attention_map_saver, - ) - return self.check_for_safety(output, dtype=conditioning_data.dtype) + raise Exception("Should not be called") def latents_from_embeddings( self, @@ -440,35 +333,72 @@ class StableDiffusionGeneratorPipeline(StableDiffusionPipeline): num_inference_steps: int, conditioning_data: ConditioningData, *, - noise: torch.Tensor, - timesteps=None, + noise: Optional[torch.Tensor], + timesteps: torch.Tensor, + init_timestep: torch.Tensor, additional_guidance: List[Callable] = None, - run_id=None, callback: Callable[[PipelineIntermediateState], None] = None, control_data: List[ControlNetData] = None, + mask: Optional[torch.Tensor] = None, + seed: Optional[int] = None, ) -> tuple[torch.Tensor, Optional[AttentionMapSaver]]: - if self.scheduler.config.get("cpu_only", False): - scheduler_device = torch.device("cpu") - else: - scheduler_device = self._model_group.device_for(self.unet) + if init_timestep.shape[0] == 0: + return latents, None - if timesteps is None: - self.scheduler.set_timesteps(num_inference_steps, device=scheduler_device) - timesteps = self.scheduler.timesteps - infer_latents_from_embeddings = GeneratorToCallbackinator( - self.generate_latents_from_embeddings, PipelineIntermediateState - ) - result: PipelineIntermediateState = infer_latents_from_embeddings( - latents, - timesteps, - conditioning_data, - noise=noise, - run_id=run_id, - additional_guidance=additional_guidance, - control_data=control_data, - callback=callback, - ) - return result.latents, result.attention_map_saver + if additional_guidance is None: + additional_guidance = [] + + orig_latents = latents.clone() + + batch_size = latents.shape[0] + batched_t = init_timestep.expand(batch_size) + + if noise is not None: + # latents = noise * self.scheduler.init_noise_sigma # it's like in t2l according to diffusers + latents = self.scheduler.add_noise(latents, noise, batched_t) + + if mask is not None: + if is_inpainting_model(self.unet): + # You'd think the inpainting model wouldn't be paying attention to the area it is going to repaint + # (that's why there's a mask!) but it seems to really want that blanked out. + # masked_latents = latents * torch.where(mask < 0.5, 1, 0) TODO: inpaint/outpaint/infill + + # TODO: we should probably pass this in so we don't have to try/finally around setting it. + self.invokeai_diffuser.model_forward_callback = AddsMaskLatents(self._unet_forward, mask, orig_latents) + else: + # if no noise provided, noisify unmasked area based on seed(or 0 as fallback) + if noise is None: + noise = torch.randn( + orig_latents.shape, + dtype=torch.float32, + device="cpu", + generator=torch.Generator(device="cpu").manual_seed(seed or 0), + ).to(device=orig_latents.device, dtype=orig_latents.dtype) + + latents = self.scheduler.add_noise(latents, noise, batched_t) + latents = torch.lerp( + orig_latents, latents.to(dtype=orig_latents.dtype), mask.to(dtype=orig_latents.dtype) + ) + + additional_guidance.append(AddsMaskGuidance(mask, orig_latents, self.scheduler, noise)) + + try: + latents, attention_map_saver = self.generate_latents_from_embeddings( + latents, + timesteps, + conditioning_data, + additional_guidance=additional_guidance, + control_data=control_data, + callback=callback, + ) + finally: + self.invokeai_diffuser.model_forward_callback = self._unet_forward + + # restore unmasked part + if mask is not None: + latents = torch.lerp(orig_latents, latents.to(dtype=orig_latents.dtype), mask.to(dtype=orig_latents.dtype)) + + return latents, attention_map_saver def generate_latents_from_embeddings( self, @@ -476,42 +406,40 @@ class StableDiffusionGeneratorPipeline(StableDiffusionPipeline): timesteps, conditioning_data: ConditioningData, *, - noise: torch.Tensor, - run_id: str = None, additional_guidance: List[Callable] = None, control_data: List[ControlNetData] = None, + callback: Callable[[PipelineIntermediateState], None] = None, ): self._adjust_memory_efficient_attention(latents) - if run_id is None: - run_id = secrets.token_urlsafe(self.ID_LENGTH) if additional_guidance is None: additional_guidance = [] + + batch_size = latents.shape[0] + attention_map_saver: Optional[AttentionMapSaver] = None + + if timesteps.shape[0] == 0: + return latents, attention_map_saver + extra_conditioning_info = conditioning_data.extra with self.invokeai_diffuser.custom_attention_context( self.invokeai_diffuser.model, extra_conditioning_info=extra_conditioning_info, step_count=len(self.scheduler.timesteps), ): - yield PipelineIntermediateState( - run_id=run_id, - step=-1, - timestep=self.scheduler.config.num_train_timesteps, - latents=latents, - ) + if callback is not None: + callback( + PipelineIntermediateState( + step=-1, + order=self.scheduler.order, + total_steps=len(timesteps), + timestep=self.scheduler.config.num_train_timesteps, + latents=latents, + ) + ) - batch_size = latents.shape[0] - batched_t = torch.full( - (batch_size,), - timesteps[0], - dtype=timesteps.dtype, - device=self._model_group.device_for(self.unet), - ) - latents = self.scheduler.add_noise(latents, noise, batched_t) - - attention_map_saver: Optional[AttentionMapSaver] = None # print("timesteps:", timesteps) for i, t in enumerate(self.progress_bar(timesteps)): - batched_t.fill_(t) + batched_t = t.expand(batch_size) step_output = self.step( batched_t, latents, @@ -540,14 +468,18 @@ class StableDiffusionGeneratorPipeline(StableDiffusionPipeline): # attention_map_saver = AttentionMapSaver(token_ids=attention_map_token_ids, latents_shape=latents.shape[-2:]) # self.invokeai_diffuser.setup_attention_map_saving(attention_map_saver) - yield PipelineIntermediateState( - run_id=run_id, - step=i, - timestep=int(t), - latents=latents, - predicted_original=predicted_original, - attention_map_saver=attention_map_saver, - ) + if callback is not None: + callback( + PipelineIntermediateState( + step=i, + order=self.scheduler.order, + total_steps=len(timesteps), + timestep=int(t), + latents=latents, + predicted_original=predicted_original, + attention_map_saver=attention_map_saver, + ) + ) return latents, attention_map_saver @@ -569,95 +501,39 @@ class StableDiffusionGeneratorPipeline(StableDiffusionPipeline): # TODO: should this scaling happen here or inside self._unet_forward? # i.e. before or after passing it to InvokeAIDiffuserComponent - unet_latent_input = self.scheduler.scale_model_input(latents, timestep) + latent_model_input = self.scheduler.scale_model_input(latents, timestep) # default is no controlnet, so set controlnet processing output to None - down_block_res_samples, mid_block_res_sample = None, None - + controlnet_down_block_samples, controlnet_mid_block_sample = None, None if control_data is not None: - # control_data should be type List[ControlNetData] - # this loop covers both ControlNet (one ControlNetData in list) - # and MultiControlNet (multiple ControlNetData in list) - for i, control_datum in enumerate(control_data): - control_mode = control_datum.control_mode - # soft_injection and cfg_injection are the two ControlNet control_mode booleans - # that are combined at higher level to make control_mode enum - # soft_injection determines whether to do per-layer re-weighting adjustment (if True) - # or default weighting (if False) - soft_injection = control_mode == "more_prompt" or control_mode == "more_control" - # cfg_injection = determines whether to apply ControlNet to only the conditional (if True) - # or the default both conditional and unconditional (if False) - cfg_injection = control_mode == "more_control" or control_mode == "unbalanced" + controlnet_down_block_samples, controlnet_mid_block_sample = self.invokeai_diffuser.do_controlnet_step( + control_data=control_data, + sample=latent_model_input, + timestep=timestep, + step_index=step_index, + total_step_count=total_step_count, + conditioning_data=conditioning_data, + ) - first_control_step = math.floor(control_datum.begin_step_percent * total_step_count) - last_control_step = math.ceil(control_datum.end_step_percent * total_step_count) - # only apply controlnet if current step is within the controlnet's begin/end step range - if step_index >= first_control_step and step_index <= last_control_step: - if cfg_injection: - control_latent_input = unet_latent_input - else: - # expand the latents input to control model if doing classifier free guidance - # (which I think for now is always true, there is conditional elsewhere that stops execution if - # classifier_free_guidance is <= 1.0 ?) - control_latent_input = torch.cat([unet_latent_input] * 2) - - if cfg_injection: # only applying ControlNet to conditional instead of in unconditioned - encoder_hidden_states = conditioning_data.text_embeddings - encoder_attention_mask = None - else: - ( - encoder_hidden_states, - encoder_attention_mask, - ) = self.invokeai_diffuser._concat_conditionings_for_batch( - conditioning_data.unconditioned_embeddings, - conditioning_data.text_embeddings, - ) - if isinstance(control_datum.weight, list): - # if controlnet has multiple weights, use the weight for the current step - controlnet_weight = control_datum.weight[step_index] - else: - # if controlnet has a single weight, use it for all steps - controlnet_weight = control_datum.weight - - # controlnet(s) inference - down_samples, mid_sample = control_datum.model( - sample=control_latent_input, - timestep=timestep, - encoder_hidden_states=encoder_hidden_states, - controlnet_cond=control_datum.image_tensor, - conditioning_scale=controlnet_weight, # controlnet specific, NOT the guidance scale - encoder_attention_mask=encoder_attention_mask, - guess_mode=soft_injection, # this is still called guess_mode in diffusers ControlNetModel - return_dict=False, - ) - if cfg_injection: - # Inferred ControlNet only for the conditional batch. - # To apply the output of ControlNet to both the unconditional and conditional batches, - # prepend zeros for unconditional batch - down_samples = [torch.cat([torch.zeros_like(d), d]) for d in down_samples] - mid_sample = torch.cat([torch.zeros_like(mid_sample), mid_sample]) - - if down_block_res_samples is None and mid_block_res_sample is None: - down_block_res_samples, mid_block_res_sample = down_samples, mid_sample - else: - # add controlnet outputs together if have multiple controlnets - down_block_res_samples = [ - samples_prev + samples_curr - for samples_prev, samples_curr in zip(down_block_res_samples, down_samples) - ] - mid_block_res_sample += mid_sample - - # predict the noise residual - noise_pred = self.invokeai_diffuser.do_diffusion_step( - x=unet_latent_input, - sigma=t, - unconditioning=conditioning_data.unconditioned_embeddings, - conditioning=conditioning_data.text_embeddings, - unconditional_guidance_scale=conditioning_data.guidance_scale, + uc_noise_pred, c_noise_pred = self.invokeai_diffuser.do_unet_step( + sample=latent_model_input, + timestep=t, # TODO: debug how handled batched and non batched timesteps step_index=step_index, total_step_count=total_step_count, - down_block_additional_residuals=down_block_res_samples, # from controlnet(s) - mid_block_additional_residual=mid_block_res_sample, # from controlnet(s) + conditioning_data=conditioning_data, + # extra: + down_block_additional_residuals=controlnet_down_block_samples, # from controlnet(s) + mid_block_additional_residual=controlnet_mid_block_sample, # from controlnet(s) + ) + + guidance_scale = conditioning_data.guidance_scale + if isinstance(guidance_scale, list): + guidance_scale = guidance_scale[step_index] + + noise_pred = self.invokeai_diffuser._combine( + uc_noise_pred, + c_noise_pred, + guidance_scale, ) # compute the previous noisy sample x_t -> x_t-1 @@ -699,224 +575,3 @@ class StableDiffusionGeneratorPipeline(StableDiffusionPipeline): cross_attention_kwargs=cross_attention_kwargs, **kwargs, ).sample - - def img2img_from_embeddings( - self, - init_image: Union[torch.FloatTensor, PIL.Image.Image], - strength: float, - num_inference_steps: int, - conditioning_data: ConditioningData, - *, - callback: Callable[[PipelineIntermediateState], None] = None, - run_id=None, - noise_func=None, - seed=None, - ) -> InvokeAIStableDiffusionPipelineOutput: - if isinstance(init_image, PIL.Image.Image): - init_image = image_resized_to_grid_as_tensor(init_image.convert("RGB")) - - if init_image.dim() == 3: - init_image = einops.rearrange(init_image, "c h w -> 1 c h w") - - # 6. Prepare latent variables - initial_latents = self.non_noised_latents_from_image( - init_image, - device=self._model_group.device_for(self.unet), - dtype=self.unet.dtype, - ) - if seed is not None: - set_seed(seed) - noise = noise_func(initial_latents) - - return self.img2img_from_latents_and_embeddings( - initial_latents, - num_inference_steps, - conditioning_data, - strength, - noise, - run_id, - callback, - ) - - def img2img_from_latents_and_embeddings( - self, - initial_latents, - num_inference_steps, - conditioning_data: ConditioningData, - strength, - noise: torch.Tensor, - run_id=None, - callback=None, - ) -> InvokeAIStableDiffusionPipelineOutput: - timesteps, _ = self.get_img2img_timesteps(num_inference_steps, strength) - result_latents, result_attention_maps = self.latents_from_embeddings( - latents=initial_latents - if strength < 1.0 - else torch.zeros_like(initial_latents, device=initial_latents.device, dtype=initial_latents.dtype), - num_inference_steps=num_inference_steps, - conditioning_data=conditioning_data, - timesteps=timesteps, - noise=noise, - run_id=run_id, - callback=callback, - ) - - # https://discuss.huggingface.co/t/memory-usage-by-later-pipeline-stages/23699 - torch.cuda.empty_cache() - - with torch.inference_mode(): - image = self.decode_latents(result_latents) - output = InvokeAIStableDiffusionPipelineOutput( - images=image, - nsfw_content_detected=[], - attention_map_saver=result_attention_maps, - ) - return self.check_for_safety(output, dtype=conditioning_data.dtype) - - def get_img2img_timesteps(self, num_inference_steps: int, strength: float, device=None) -> (torch.Tensor, int): - img2img_pipeline = StableDiffusionImg2ImgPipeline(**self.components) - assert img2img_pipeline.scheduler is self.scheduler - - if self.scheduler.config.get("cpu_only", False): - scheduler_device = torch.device("cpu") - else: - scheduler_device = self._model_group.device_for(self.unet) - - img2img_pipeline.scheduler.set_timesteps(num_inference_steps, device=scheduler_device) - timesteps, adjusted_steps = img2img_pipeline.get_timesteps( - num_inference_steps, strength, device=scheduler_device - ) - # Workaround for low strength resulting in zero timesteps. - # TODO: submit upstream fix for zero-step img2img - if timesteps.numel() == 0: - timesteps = self.scheduler.timesteps[-1:] - adjusted_steps = timesteps.numel() - return timesteps, adjusted_steps - - def inpaint_from_embeddings( - self, - init_image: torch.FloatTensor, - mask: torch.FloatTensor, - strength: float, - num_inference_steps: int, - conditioning_data: ConditioningData, - *, - callback: Callable[[PipelineIntermediateState], None] = None, - run_id=None, - noise_func=None, - seed=None, - ) -> InvokeAIStableDiffusionPipelineOutput: - device = self._model_group.device_for(self.unet) - latents_dtype = self.unet.dtype - - if isinstance(init_image, PIL.Image.Image): - init_image = image_resized_to_grid_as_tensor(init_image.convert("RGB")) - - init_image = init_image.to(device=device, dtype=latents_dtype) - mask = mask.to(device=device, dtype=latents_dtype) - - if init_image.dim() == 3: - init_image = init_image.unsqueeze(0) - - timesteps, _ = self.get_img2img_timesteps(num_inference_steps, strength) - - # 6. Prepare latent variables - # can't quite use upstream StableDiffusionImg2ImgPipeline.prepare_latents - # because we have our own noise function - init_image_latents = self.non_noised_latents_from_image(init_image, device=device, dtype=latents_dtype) - if seed is not None: - set_seed(seed) - noise = noise_func(init_image_latents) - - if mask.dim() == 3: - mask = mask.unsqueeze(0) - latent_mask = tv_resize(mask, init_image_latents.shape[-2:], T.InterpolationMode.BILINEAR).to( - device=device, dtype=latents_dtype - ) - - guidance: List[Callable] = [] - - if is_inpainting_model(self.unet): - # You'd think the inpainting model wouldn't be paying attention to the area it is going to repaint - # (that's why there's a mask!) but it seems to really want that blanked out. - masked_init_image = init_image * torch.where(mask < 0.5, 1, 0) - masked_latents = self.non_noised_latents_from_image(masked_init_image, device=device, dtype=latents_dtype) - - # TODO: we should probably pass this in so we don't have to try/finally around setting it. - self.invokeai_diffuser.model_forward_callback = AddsMaskLatents( - self._unet_forward, latent_mask, masked_latents - ) - else: - guidance.append(AddsMaskGuidance(latent_mask, init_image_latents, self.scheduler, noise)) - - try: - result_latents, result_attention_maps = self.latents_from_embeddings( - latents=init_image_latents - if strength < 1.0 - else torch.zeros_like( - init_image_latents, device=init_image_latents.device, dtype=init_image_latents.dtype - ), - num_inference_steps=num_inference_steps, - conditioning_data=conditioning_data, - noise=noise, - timesteps=timesteps, - additional_guidance=guidance, - run_id=run_id, - callback=callback, - ) - finally: - self.invokeai_diffuser.model_forward_callback = self._unet_forward - - # https://discuss.huggingface.co/t/memory-usage-by-later-pipeline-stages/23699 - torch.cuda.empty_cache() - - with torch.inference_mode(): - image = self.decode_latents(result_latents) - output = InvokeAIStableDiffusionPipelineOutput( - images=image, - nsfw_content_detected=[], - attention_map_saver=result_attention_maps, - ) - return self.check_for_safety(output, dtype=conditioning_data.dtype) - - def non_noised_latents_from_image(self, init_image, *, device: torch.device, dtype): - init_image = init_image.to(device=device, dtype=dtype) - with torch.inference_mode(): - self._model_group.load(self.vae) - init_latent_dist = self.vae.encode(init_image).latent_dist - init_latents = init_latent_dist.sample().to(dtype=dtype) # FIXME: uses torch.randn. make reproducible! - - init_latents = 0.18215 * init_latents - return init_latents - - def check_for_safety(self, output, dtype): - with torch.inference_mode(): - screened_images, has_nsfw_concept = self.run_safety_checker(output.images, dtype=dtype) - screened_attention_map_saver = None - if has_nsfw_concept is None or not has_nsfw_concept: - screened_attention_map_saver = output.attention_map_saver - return InvokeAIStableDiffusionPipelineOutput( - screened_images, - has_nsfw_concept, - # block the attention maps if NSFW content is detected - attention_map_saver=screened_attention_map_saver, - ) - - def run_safety_checker(self, image, device=None, dtype=None): - # overriding to use the model group for device info instead of requiring the caller to know. - if self.safety_checker is not None: - device = self._model_group.device_for(self.safety_checker) - return super().run_safety_checker(image, device, dtype) - - def decode_latents(self, latents): - # Explicit call to get the vae loaded, since `decode` isn't the forward method. - self._model_group.load(self.vae) - return super().decode_latents(latents) - - def debug_latents(self, latents, msg): - from invokeai.backend.image_util import debug_image - - with torch.inference_mode(): - decoded = self.numpy_to_pil(self.decode_latents(latents)) - for i, img in enumerate(decoded): - debug_image(img, f"latents {msg} {i+1}/{len(decoded)}", debug_status=True) diff --git a/invokeai/backend/stable_diffusion/diffusion/__init__.py b/invokeai/backend/stable_diffusion/diffusion/__init__.py index 6dd2817f29..2bcc595889 100644 --- a/invokeai/backend/stable_diffusion/diffusion/__init__.py +++ b/invokeai/backend/stable_diffusion/diffusion/__init__.py @@ -1,6 +1,11 @@ """ Initialization file for invokeai.models.diffusion """ -from .cross_attention_control import InvokeAICrossAttentionMixin -from .cross_attention_map_saving import AttentionMapSaver -from .shared_invokeai_diffusion import InvokeAIDiffuserComponent, PostprocessingSettings +from .cross_attention_control import InvokeAICrossAttentionMixin # noqa: F401 +from .cross_attention_map_saving import AttentionMapSaver # noqa: F401 +from .shared_invokeai_diffusion import ( # noqa: F401 + InvokeAIDiffuserComponent, + PostprocessingSettings, + BasicConditioningInfo, + SDXLConditioningInfo, +) diff --git a/invokeai/backend/stable_diffusion/diffusion/cross_attention_control.py b/invokeai/backend/stable_diffusion/diffusion/cross_attention_control.py index 38763ebbee..35d4800859 100644 --- a/invokeai/backend/stable_diffusion/diffusion/cross_attention_control.py +++ b/invokeai/backend/stable_diffusion/diffusion/cross_attention_control.py @@ -4,6 +4,7 @@ import enum import math +from dataclasses import dataclass, field from typing import Callable, Optional import diffusers @@ -12,6 +13,11 @@ import torch from compel.cross_attention_control import Arguments from diffusers.models.unet_2d_condition import UNet2DConditionModel from diffusers.models.attention_processor import AttentionProcessor +from diffusers.models.attention_processor import ( + Attention, + AttnProcessor, + SlicedAttnProcessor, +) from torch import nn import invokeai.backend.util.logging as logger @@ -522,14 +528,6 @@ class AttnProcessor: return hidden_states """ -from dataclasses import dataclass, field - -import torch -from diffusers.models.attention_processor import ( - Attention, - AttnProcessor, - SlicedAttnProcessor, -) @dataclass diff --git a/invokeai/backend/stable_diffusion/diffusion/cross_attention_map_saving.py b/invokeai/backend/stable_diffusion/diffusion/cross_attention_map_saving.py index b0174a455e..abef979b1c 100644 --- a/invokeai/backend/stable_diffusion/diffusion/cross_attention_map_saving.py +++ b/invokeai/backend/stable_diffusion/diffusion/cross_attention_map_saving.py @@ -5,8 +5,6 @@ import torch from torchvision.transforms.functional import InterpolationMode from torchvision.transforms.functional import resize as tv_resize -from .cross_attention_control import CrossAttentionType, get_cross_attention_modules - class AttentionMapSaver: def __init__(self, token_ids: range, latents_shape: torch.Size): diff --git a/invokeai/backend/stable_diffusion/diffusion/shared_invokeai_diffusion.py b/invokeai/backend/stable_diffusion/diffusion/shared_invokeai_diffusion.py index 272518e928..f05adafca2 100644 --- a/invokeai/backend/stable_diffusion/diffusion/shared_invokeai_diffusion.py +++ b/invokeai/backend/stable_diffusion/diffusion/shared_invokeai_diffusion.py @@ -1,15 +1,14 @@ +from __future__ import annotations + from contextlib import contextmanager from dataclasses import dataclass -from math import ceil -from typing import Any, Callable, Dict, Optional, Union, List +import math +from typing import Any, Callable, Optional, Union -import numpy as np import torch from diffusers import UNet2DConditionModel -from diffusers.models.attention_processor import AttentionProcessor from typing_extensions import TypeAlias -import invokeai.backend.util.logging as logger from invokeai.app.services.config import InvokeAIAppConfig from .cross_attention_control import ( @@ -32,6 +31,29 @@ ModelForwardCallback: TypeAlias = Union[ ] +@dataclass +class BasicConditioningInfo: + embeds: torch.Tensor + extra_conditioning: Optional[InvokeAIDiffuserComponent.ExtraConditioningInfo] + # weight: float + # mode: ConditioningAlgo + + def to(self, device, dtype=None): + self.embeds = self.embeds.to(device=device, dtype=dtype) + return self + + +@dataclass +class SDXLConditioningInfo(BasicConditioningInfo): + pooled_embeds: torch.Tensor + add_time_ids: torch.Tensor + + def to(self, device, dtype=None): + self.pooled_embeds = self.pooled_embeds.to(device=device, dtype=dtype) + self.add_time_ids = self.add_time_ids.to(device=device, dtype=dtype) + return super().to(device=device, dtype=dtype) + + @dataclass(frozen=True) class PostprocessingSettings: threshold: float @@ -78,10 +100,9 @@ class InvokeAIDiffuserComponent: self.cross_attention_control_context = None self.sequential_guidance = config.sequential_guidance - @classmethod @contextmanager def custom_attention_context( - cls, + self, unet: UNet2DConditionModel, # note: also may futz with the text encoder depending on requested LoRAs extra_conditioning_info: Optional[ExtraConditioningInfo], step_count: int, @@ -91,18 +112,19 @@ class InvokeAIDiffuserComponent: old_attn_processors = unet.attn_processors # Load lora conditions into the model if extra_conditioning_info.wants_cross_attention_control: - cross_attention_control_context = Context( + self.cross_attention_control_context = Context( arguments=extra_conditioning_info.cross_attention_control_args, step_count=step_count, ) setup_cross_attention_control_attention_processors( unet, - cross_attention_control_context, + self.cross_attention_control_context, ) try: yield None finally: + self.cross_attention_control_context = None if old_attn_processors is not None: unet.set_attn_processor(old_attn_processors) # TODO resuscitate attention map saving @@ -127,33 +149,126 @@ class InvokeAIDiffuserComponent: for _, module in tokens_cross_attention_modules: module.set_attention_slice_calculated_callback(None) - def do_diffusion_step( + def do_controlnet_step( self, - x: torch.Tensor, - sigma: torch.Tensor, - unconditioning: Union[torch.Tensor, dict], - conditioning: Union[torch.Tensor, dict], - # unconditional_guidance_scale: float, - unconditional_guidance_scale: Union[float, List[float]], - step_index: Optional[int] = None, - total_step_count: Optional[int] = None, + control_data, + sample: torch.Tensor, + timestep: torch.Tensor, + step_index: int, + total_step_count: int, + conditioning_data, + ): + down_block_res_samples, mid_block_res_sample = None, None + + # control_data should be type List[ControlNetData] + # this loop covers both ControlNet (one ControlNetData in list) + # and MultiControlNet (multiple ControlNetData in list) + for i, control_datum in enumerate(control_data): + control_mode = control_datum.control_mode + # soft_injection and cfg_injection are the two ControlNet control_mode booleans + # that are combined at higher level to make control_mode enum + # soft_injection determines whether to do per-layer re-weighting adjustment (if True) + # or default weighting (if False) + soft_injection = control_mode == "more_prompt" or control_mode == "more_control" + # cfg_injection = determines whether to apply ControlNet to only the conditional (if True) + # or the default both conditional and unconditional (if False) + cfg_injection = control_mode == "more_control" or control_mode == "unbalanced" + + first_control_step = math.floor(control_datum.begin_step_percent * total_step_count) + last_control_step = math.ceil(control_datum.end_step_percent * total_step_count) + # only apply controlnet if current step is within the controlnet's begin/end step range + if step_index >= first_control_step and step_index <= last_control_step: + if cfg_injection: + sample_model_input = sample + else: + # expand the latents input to control model if doing classifier free guidance + # (which I think for now is always true, there is conditional elsewhere that stops execution if + # classifier_free_guidance is <= 1.0 ?) + sample_model_input = torch.cat([sample] * 2) + + added_cond_kwargs = None + + if cfg_injection: # only applying ControlNet to conditional instead of in unconditioned + if type(conditioning_data.text_embeddings) is SDXLConditioningInfo: + added_cond_kwargs = { + "text_embeds": conditioning_data.text_embeddings.pooled_embeds, + "time_ids": conditioning_data.text_embeddings.add_time_ids, + } + encoder_hidden_states = conditioning_data.text_embeddings.embeds + encoder_attention_mask = None + else: + if type(conditioning_data.text_embeddings) is SDXLConditioningInfo: + added_cond_kwargs = { + "text_embeds": torch.cat( + [ + # TODO: how to pad? just by zeros? or even truncate? + conditioning_data.unconditioned_embeddings.pooled_embeds, + conditioning_data.text_embeddings.pooled_embeds, + ], + dim=0, + ), + "time_ids": torch.cat( + [ + conditioning_data.unconditioned_embeddings.add_time_ids, + conditioning_data.text_embeddings.add_time_ids, + ], + dim=0, + ), + } + ( + encoder_hidden_states, + encoder_attention_mask, + ) = self._concat_conditionings_for_batch( + conditioning_data.unconditioned_embeddings.embeds, + conditioning_data.text_embeddings.embeds, + ) + if isinstance(control_datum.weight, list): + # if controlnet has multiple weights, use the weight for the current step + controlnet_weight = control_datum.weight[step_index] + else: + # if controlnet has a single weight, use it for all steps + controlnet_weight = control_datum.weight + + # controlnet(s) inference + down_samples, mid_sample = control_datum.model( + sample=sample_model_input, + timestep=timestep, + encoder_hidden_states=encoder_hidden_states, + controlnet_cond=control_datum.image_tensor, + conditioning_scale=controlnet_weight, # controlnet specific, NOT the guidance scale + encoder_attention_mask=encoder_attention_mask, + added_cond_kwargs=added_cond_kwargs, + guess_mode=soft_injection, # this is still called guess_mode in diffusers ControlNetModel + return_dict=False, + ) + if cfg_injection: + # Inferred ControlNet only for the conditional batch. + # To apply the output of ControlNet to both the unconditional and conditional batches, + # prepend zeros for unconditional batch + down_samples = [torch.cat([torch.zeros_like(d), d]) for d in down_samples] + mid_sample = torch.cat([torch.zeros_like(mid_sample), mid_sample]) + + if down_block_res_samples is None and mid_block_res_sample is None: + down_block_res_samples, mid_block_res_sample = down_samples, mid_sample + else: + # add controlnet outputs together if have multiple controlnets + down_block_res_samples = [ + samples_prev + samples_curr + for samples_prev, samples_curr in zip(down_block_res_samples, down_samples) + ] + mid_block_res_sample += mid_sample + + return down_block_res_samples, mid_block_res_sample + + def do_unet_step( + self, + sample: torch.Tensor, + timestep: torch.Tensor, + conditioning_data, # TODO: type + step_index: int, + total_step_count: int, **kwargs, ): - """ - :param x: current latents - :param sigma: aka t, passed to the internal model to control how much denoising will occur - :param unconditioning: embeddings for unconditioned output. for hybrid conditioning this is a dict of tensors [B x 77 x 768], otherwise a single tensor [B x 77 x 768] - :param conditioning: embeddings for conditioned output. for hybrid conditioning this is a dict of tensors [B x 77 x 768], otherwise a single tensor [B x 77 x 768] - :param unconditional_guidance_scale: aka CFG scale, controls how much effect the conditioning tensor has - :param step_index: counts upwards from 0 to (step_count-1) (as passed to setup_cross_attention_control, if using). May be called multiple times for a single step, therefore do not assume that its value will monotically increase. If None, will be estimated by comparing sigma against self.model.sigmas . - :return: the new latents after applying the model to x using unscaled unconditioning and CFG-scaled conditioning. - """ - - if isinstance(unconditional_guidance_scale, list): - guidance_scale = unconditional_guidance_scale[step_index] - else: - guidance_scale = unconditional_guidance_scale - cross_attention_control_types_to_do = [] context: Context = self.cross_attention_control_context if self.cross_attention_control_context is not None: @@ -163,25 +278,15 @@ class InvokeAIDiffuserComponent: ) wants_cross_attention_control = len(cross_attention_control_types_to_do) > 0 - wants_hybrid_conditioning = isinstance(conditioning, dict) - if wants_hybrid_conditioning: - unconditioned_next_x, conditioned_next_x = self._apply_hybrid_conditioning( - x, - sigma, - unconditioning, - conditioning, - **kwargs, - ) - elif wants_cross_attention_control: + if wants_cross_attention_control: ( unconditioned_next_x, conditioned_next_x, ) = self._apply_cross_attention_controlled_conditioning( - x, - sigma, - unconditioning, - conditioning, + sample, + timestep, + conditioning_data, cross_attention_control_types_to_do, **kwargs, ) @@ -190,10 +295,9 @@ class InvokeAIDiffuserComponent: unconditioned_next_x, conditioned_next_x, ) = self._apply_standard_conditioning_sequentially( - x, - sigma, - unconditioning, - conditioning, + sample, + timestep, + conditioning_data, **kwargs, ) @@ -202,21 +306,13 @@ class InvokeAIDiffuserComponent: unconditioned_next_x, conditioned_next_x, ) = self._apply_standard_conditioning( - x, - sigma, - unconditioning, - conditioning, + sample, + timestep, + conditioning_data, **kwargs, ) - combined_next_x = self._combine( - # unconditioned_next_x, conditioned_next_x, unconditional_guidance_scale - unconditioned_next_x, - conditioned_next_x, - guidance_scale, - ) - - return combined_next_x + return unconditioned_next_x, conditioned_next_x def do_latent_postprocessing( self, @@ -228,7 +324,6 @@ class InvokeAIDiffuserComponent: ) -> torch.Tensor: if postprocessing_settings is not None: percent_through = step_index / total_step_count - latents = self.apply_threshold(postprocessing_settings, latents, percent_through) latents = self.apply_symmetry(postprocessing_settings, latents, percent_through) return latents @@ -281,17 +376,40 @@ class InvokeAIDiffuserComponent: # methods below are called from do_diffusion_step and should be considered private to this class. - def _apply_standard_conditioning(self, x, sigma, unconditioning, conditioning, **kwargs): + def _apply_standard_conditioning(self, x, sigma, conditioning_data, **kwargs): # fast batched path x_twice = torch.cat([x] * 2) sigma_twice = torch.cat([sigma] * 2) - both_conditionings, encoder_attention_mask = self._concat_conditionings_for_batch(unconditioning, conditioning) + added_cond_kwargs = None + if type(conditioning_data.text_embeddings) is SDXLConditioningInfo: + added_cond_kwargs = { + "text_embeds": torch.cat( + [ + # TODO: how to pad? just by zeros? or even truncate? + conditioning_data.unconditioned_embeddings.pooled_embeds, + conditioning_data.text_embeddings.pooled_embeds, + ], + dim=0, + ), + "time_ids": torch.cat( + [ + conditioning_data.unconditioned_embeddings.add_time_ids, + conditioning_data.text_embeddings.add_time_ids, + ], + dim=0, + ), + } + + both_conditionings, encoder_attention_mask = self._concat_conditionings_for_batch( + conditioning_data.unconditioned_embeddings.embeds, conditioning_data.text_embeddings.embeds + ) both_results = self.model_forward_callback( x_twice, sigma_twice, both_conditionings, encoder_attention_mask=encoder_attention_mask, + added_cond_kwargs=added_cond_kwargs, **kwargs, ) unconditioned_next_x, conditioned_next_x = both_results.chunk(2) @@ -301,8 +419,7 @@ class InvokeAIDiffuserComponent: self, x: torch.Tensor, sigma, - unconditioning: torch.Tensor, - conditioning: torch.Tensor, + conditioning_data, **kwargs, ): # low-memory sequential path @@ -320,52 +437,46 @@ class InvokeAIDiffuserComponent: if mid_block_additional_residual is not None: uncond_mid_block, cond_mid_block = mid_block_additional_residual.chunk(2) + added_cond_kwargs = None + is_sdxl = type(conditioning_data.text_embeddings) is SDXLConditioningInfo + if is_sdxl: + added_cond_kwargs = { + "text_embeds": conditioning_data.unconditioned_embeddings.pooled_embeds, + "time_ids": conditioning_data.unconditioned_embeddings.add_time_ids, + } + unconditioned_next_x = self.model_forward_callback( x, sigma, - unconditioning, + conditioning_data.unconditioned_embeddings.embeds, down_block_additional_residuals=uncond_down_block, mid_block_additional_residual=uncond_mid_block, + added_cond_kwargs=added_cond_kwargs, **kwargs, ) + + if is_sdxl: + added_cond_kwargs = { + "text_embeds": conditioning_data.text_embeddings.pooled_embeds, + "time_ids": conditioning_data.text_embeddings.add_time_ids, + } + conditioned_next_x = self.model_forward_callback( x, sigma, - conditioning, + conditioning_data.text_embeddings.embeds, down_block_additional_residuals=cond_down_block, mid_block_additional_residual=cond_mid_block, + added_cond_kwargs=added_cond_kwargs, **kwargs, ) return unconditioned_next_x, conditioned_next_x - # TODO: looks unused - def _apply_hybrid_conditioning(self, x, sigma, unconditioning, conditioning, **kwargs): - assert isinstance(conditioning, dict) - assert isinstance(unconditioning, dict) - x_twice = torch.cat([x] * 2) - sigma_twice = torch.cat([sigma] * 2) - both_conditionings = dict() - for k in conditioning: - if isinstance(conditioning[k], list): - both_conditionings[k] = [ - torch.cat([unconditioning[k][i], conditioning[k][i]]) for i in range(len(conditioning[k])) - ] - else: - both_conditionings[k] = torch.cat([unconditioning[k], conditioning[k]]) - unconditioned_next_x, conditioned_next_x = self.model_forward_callback( - x_twice, - sigma_twice, - both_conditionings, - **kwargs, - ).chunk(2) - return unconditioned_next_x, conditioned_next_x - def _apply_cross_attention_controlled_conditioning( self, x: torch.Tensor, sigma, - unconditioning, - conditioning, + conditioning_data, cross_attention_control_types_to_do, **kwargs, ): @@ -391,26 +502,43 @@ class InvokeAIDiffuserComponent: mask=context.cross_attention_mask, cross_attention_types_to_do=[], ) + + added_cond_kwargs = None + is_sdxl = type(conditioning_data.text_embeddings) is SDXLConditioningInfo + if is_sdxl: + added_cond_kwargs = { + "text_embeds": conditioning_data.unconditioned_embeddings.pooled_embeds, + "time_ids": conditioning_data.unconditioned_embeddings.add_time_ids, + } + # no cross attention for unconditioning (negative prompt) unconditioned_next_x = self.model_forward_callback( x, sigma, - unconditioning, + conditioning_data.unconditioned_embeddings.embeds, {"swap_cross_attn_context": cross_attn_processor_context}, down_block_additional_residuals=uncond_down_block, mid_block_additional_residual=uncond_mid_block, + added_cond_kwargs=added_cond_kwargs, **kwargs, ) + if is_sdxl: + added_cond_kwargs = { + "text_embeds": conditioning_data.text_embeddings.pooled_embeds, + "time_ids": conditioning_data.text_embeddings.add_time_ids, + } + # do requested cross attention types for conditioning (positive prompt) cross_attn_processor_context.cross_attention_types_to_do = cross_attention_control_types_to_do conditioned_next_x = self.model_forward_callback( x, sigma, - conditioning, + conditioning_data.text_embeddings.embeds, {"swap_cross_attn_context": cross_attn_processor_context}, down_block_additional_residuals=cond_down_block, mid_block_additional_residual=cond_mid_block, + added_cond_kwargs=added_cond_kwargs, **kwargs, ) return unconditioned_next_x, conditioned_next_x @@ -421,63 +549,6 @@ class InvokeAIDiffuserComponent: combined_next_x = unconditioned_next_x + scaled_delta return combined_next_x - def apply_threshold( - self, - postprocessing_settings: PostprocessingSettings, - latents: torch.Tensor, - percent_through: float, - ) -> torch.Tensor: - if postprocessing_settings.threshold is None or postprocessing_settings.threshold == 0.0: - return latents - - threshold = postprocessing_settings.threshold - warmup = postprocessing_settings.warmup - - if percent_through < warmup: - current_threshold = threshold + threshold * 5 * (1 - (percent_through / warmup)) - else: - current_threshold = threshold - - if current_threshold <= 0: - return latents - - maxval = latents.max().item() - minval = latents.min().item() - - scale = 0.7 # default value from #395 - - if self.debug_thresholding: - std, mean = [i.item() for i in torch.std_mean(latents)] - outside = torch.count_nonzero((latents < -current_threshold) | (latents > current_threshold)) - logger.info(f"Threshold: %={percent_through} threshold={current_threshold:.3f} (of {threshold:.3f})") - logger.debug(f"min, mean, max = {minval:.3f}, {mean:.3f}, {maxval:.3f}\tstd={std}") - logger.debug(f"{outside / latents.numel() * 100:.2f}% values outside threshold") - - if maxval < current_threshold and minval > -current_threshold: - return latents - - num_altered = 0 - - # MPS torch.rand_like is fine because torch.rand_like is wrapped in generate.py! - - if maxval > current_threshold: - latents = torch.clone(latents) - maxval = np.clip(maxval * scale, 1, current_threshold) - num_altered += torch.count_nonzero(latents > maxval) - latents[latents > maxval] = torch.rand_like(latents[latents > maxval]) * maxval - - if minval < -current_threshold: - latents = torch.clone(latents) - minval = np.clip(minval * scale, -current_threshold, -1) - num_altered += torch.count_nonzero(latents < minval) - latents[latents < minval] = torch.rand_like(latents[latents < minval]) * minval - - if self.debug_thresholding: - logger.debug(f"min, , max = {minval:.3f}, , {maxval:.3f}\t(scaled by {scale})") - logger.debug(f"{num_altered / latents.numel() * 100:.2f}% values altered") - - return latents - def apply_symmetry( self, postprocessing_settings: PostprocessingSettings, @@ -505,7 +576,7 @@ class InvokeAIDiffuserComponent: latents.to(device="cpu") if ( - h_symmetry_time_pct != None + h_symmetry_time_pct is not None and self.last_percent_through < h_symmetry_time_pct and percent_through >= h_symmetry_time_pct ): @@ -521,7 +592,7 @@ class InvokeAIDiffuserComponent: ) if ( - v_symmetry_time_pct != None + v_symmetry_time_pct is not None and self.last_percent_through < v_symmetry_time_pct and percent_through >= v_symmetry_time_pct ): @@ -539,18 +610,6 @@ class InvokeAIDiffuserComponent: self.last_percent_through = percent_through return latents.to(device=dev) - def estimate_percent_through(self, step_index, sigma): - if step_index is not None and self.cross_attention_control_context is not None: - # percent_through will never reach 1.0 (but this is intended) - return float(step_index) / float(self.cross_attention_control_context.step_count) - # find the best possible index of the current sigma in the sigma sequence - smaller_sigmas = torch.nonzero(self.model.sigmas <= sigma) - sigma_index = smaller_sigmas[-1].item() if smaller_sigmas.shape[0] > 0 else 0 - # flip because sigmas[0] is for the fully denoised image - # percent_through must be <1 - return 1.0 - float(sigma_index + 1) / float(self.model.sigmas.shape[0]) - # print('estimated percent_through', percent_through, 'from sigma', sigma.item()) - # todo: make this work @classmethod def apply_conjunction(cls, x, t, forward_func, uc, c_or_weighted_c_list, global_guidance_scale): @@ -564,7 +623,7 @@ class InvokeAIDiffuserComponent: # below is fugly omg conditionings = [uc] + [c for c, weight in weighted_cond_list] weights = [1] + [weight for c, weight in weighted_cond_list] - chunk_count = ceil(len(conditionings) / 2) + chunk_count = math.ceil(len(conditionings) / 2) deltas = None for chunk_index in range(chunk_count): offset = chunk_index * 2 diff --git a/invokeai/backend/stable_diffusion/image_degradation/__init__.py b/invokeai/backend/stable_diffusion/image_degradation/__init__.py index c6b3b62ea8..589e266c02 100644 --- a/invokeai/backend/stable_diffusion/image_degradation/__init__.py +++ b/invokeai/backend/stable_diffusion/image_degradation/__init__.py @@ -1,6 +1,6 @@ -from ldm.modules.image_degradation.bsrgan import ( +from ldm.modules.image_degradation.bsrgan import ( # noqa: F401 degradation_bsrgan_variant as degradation_fn_bsr, ) -from ldm.modules.image_degradation.bsrgan_light import ( +from ldm.modules.image_degradation.bsrgan_light import ( # noqa: F401 degradation_bsrgan_variant as degradation_fn_bsr_light, ) diff --git a/invokeai/backend/stable_diffusion/image_degradation/bsrgan.py b/invokeai/backend/stable_diffusion/image_degradation/bsrgan.py index 493c8be781..e4d614207b 100644 --- a/invokeai/backend/stable_diffusion/image_degradation/bsrgan.py +++ b/invokeai/backend/stable_diffusion/image_degradation/bsrgan.py @@ -573,14 +573,15 @@ def degradation_bsrgan_variant(image, sf=4, isp_model=None): hq: corresponding high-quality patch, size: (lq_patchsizexsf)X(lq_patchsizexsf)XC, range: [0, 1] """ image = util.uint2single(image) - isp_prob, jpeg_prob, scale2_prob = 0.25, 0.9, 0.25 - sf_ori = sf + jpeg_prob, scale2_prob = 0.9, 0.25 + # isp_prob = 0.25 # uncomment with `if i== 6` block below + # sf_ori = sf # uncomment with `if i== 6` block below h1, w1 = image.shape[:2] image = image.copy()[: w1 - w1 % sf, : h1 - h1 % sf, ...] # mod crop h, w = image.shape[:2] - hq = image.copy() + # hq = image.copy() # uncomment with `if i== 6` block below if sf == 4 and random.random() < scale2_prob: # downsample1 if np.random.rand() < 0.5: @@ -777,7 +778,7 @@ if __name__ == "__main__": img_lq_bicubic = albumentations.SmallestMaxSize(max_size=h, interpolation=cv2.INTER_CUBIC)(image=img)["image"] print(img_lq.shape) print("bicubic", img_lq_bicubic.shape) - print(img_hq.shape) + # print(img_hq.shape) lq_nearest = cv2.resize( util.single2uint(img_lq), (int(sf * img_lq.shape[1]), int(sf * img_lq.shape[0])), @@ -788,5 +789,6 @@ if __name__ == "__main__": (int(sf * img_lq.shape[1]), int(sf * img_lq.shape[0])), interpolation=0, ) - img_concat = np.concatenate([lq_bicubic_nearest, lq_nearest, util.single2uint(img_hq)], axis=1) + # img_concat = np.concatenate([lq_bicubic_nearest, lq_nearest, util.single2uint(img_hq)], axis=1) + img_concat = np.concatenate([lq_bicubic_nearest, lq_nearest], axis=1) util.imsave(img_concat, str(i) + ".png") diff --git a/invokeai/backend/stable_diffusion/image_degradation/bsrgan_light.py b/invokeai/backend/stable_diffusion/image_degradation/bsrgan_light.py index d0e0abadbc..cd74adc519 100644 --- a/invokeai/backend/stable_diffusion/image_degradation/bsrgan_light.py +++ b/invokeai/backend/stable_diffusion/image_degradation/bsrgan_light.py @@ -577,14 +577,15 @@ def degradation_bsrgan_variant(image, sf=4, isp_model=None): hq: corresponding high-quality patch, size: (lq_patchsizexsf)X(lq_patchsizexsf)XC, range: [0, 1] """ image = util.uint2single(image) - isp_prob, jpeg_prob, scale2_prob = 0.25, 0.9, 0.25 - sf_ori = sf + jpeg_prob, scale2_prob = 0.9, 0.25 + # isp_prob = 0.25 # uncomment with `if i== 6` block below + # sf_ori = sf # uncomment with `if i== 6` block below h1, w1 = image.shape[:2] image = image.copy()[: w1 - w1 % sf, : h1 - h1 % sf, ...] # mod crop h, w = image.shape[:2] - hq = image.copy() + # hq = image.copy() # uncomment with `if i== 6` block below if sf == 4 and random.random() < scale2_prob: # downsample1 if np.random.rand() < 0.5: diff --git a/invokeai/backend/stable_diffusion/image_degradation/utils_image.py b/invokeai/backend/stable_diffusion/image_degradation/utils_image.py index d45ca602e6..2a0773c3ed 100644 --- a/invokeai/backend/stable_diffusion/image_degradation/utils_image.py +++ b/invokeai/backend/stable_diffusion/image_degradation/utils_image.py @@ -8,8 +8,6 @@ import numpy as np import torch from torchvision.utils import make_grid -# import matplotlib.pyplot as plt # TODO: check with Dominik, also bsrgan.py vs bsrgan_light.py - import invokeai.backend.util.logging as logger os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE" @@ -50,6 +48,8 @@ def get_timestamp(): def imshow(x, title=None, cbar=False, figsize=None): + import matplotlib.pyplot as plt + plt.figure(figsize=figsize) plt.imshow(np.squeeze(x), interpolation="nearest", cmap="gray") if title: @@ -60,6 +60,8 @@ def imshow(x, title=None, cbar=False, figsize=None): def surf(Z, cmap="rainbow", figsize=None): + import matplotlib.pyplot as plt + plt.figure(figsize=figsize) ax3 = plt.axes(projection="3d") @@ -89,7 +91,7 @@ def get_image_paths(dataroot): def _get_paths_from_images(path): assert os.path.isdir(path), "{:s} is not a valid directory".format(path) images = [] - for dirpath, _, fnames in sorted(os.walk(path)): + for dirpath, _, fnames in sorted(os.walk(path, followlinks=True)): for fname in sorted(fnames): if is_image_file(fname): img_path = os.path.join(dirpath, fname) diff --git a/invokeai/backend/stable_diffusion/offloading.py b/invokeai/backend/stable_diffusion/offloading.py deleted file mode 100644 index aa2426d514..0000000000 --- a/invokeai/backend/stable_diffusion/offloading.py +++ /dev/null @@ -1,253 +0,0 @@ -from __future__ import annotations - -import warnings -import weakref -from abc import ABCMeta, abstractmethod -from collections.abc import MutableMapping -from typing import Callable, Union - -import torch -from accelerate.utils import send_to_device -from torch.utils.hooks import RemovableHandle - -OFFLOAD_DEVICE = torch.device("cpu") - - -class _NoModel: - """Symbol that indicates no model is loaded. - - (We can't weakref.ref(None), so this was my best idea at the time to come up with something - type-checkable.) - """ - - def __bool__(self): - return False - - def to(self, device: torch.device): - pass - - def __repr__(self): - return "" - - -NO_MODEL = _NoModel() - - -class ModelGroup(metaclass=ABCMeta): - """ - A group of models. - - The use case I had in mind when writing this is the sub-models used by a DiffusionPipeline, - e.g. its text encoder, U-net, VAE, etc. - - Those models are :py:class:`diffusers.ModelMixin`, but "model" is interchangeable with - :py:class:`torch.nn.Module` here. - """ - - def __init__(self, execution_device: torch.device): - self.execution_device = execution_device - - @abstractmethod - def install(self, *models: torch.nn.Module): - """Add models to this group.""" - pass - - @abstractmethod - def uninstall(self, models: torch.nn.Module): - """Remove models from this group.""" - pass - - @abstractmethod - def uninstall_all(self): - """Remove all models from this group.""" - - @abstractmethod - def load(self, model: torch.nn.Module): - """Load this model to the execution device.""" - pass - - @abstractmethod - def offload_current(self): - """Offload the current model(s) from the execution device.""" - pass - - @abstractmethod - def ready(self): - """Ready this group for use.""" - pass - - @abstractmethod - def set_device(self, device: torch.device): - """Change which device models from this group will execute on.""" - pass - - @abstractmethod - def device_for(self, model) -> torch.device: - """Get the device the given model will execute on. - - The model should already be a member of this group. - """ - pass - - @abstractmethod - def __contains__(self, model): - """Check if the model is a member of this group.""" - pass - - def __repr__(self) -> str: - return f"<{self.__class__.__name__} object at {id(self):x}: " f"device={self.execution_device} >" - - -class LazilyLoadedModelGroup(ModelGroup): - """ - Only one model from this group is loaded on the GPU at a time. - - Running the forward method of a model will displace the previously-loaded model, - offloading it to CPU. - - If you call other methods on the model, e.g. ``model.encode(x)`` instead of ``model(x)``, - you will need to explicitly load it with :py:method:`.load(model)`. - - This implementation relies on pytorch forward-pre-hooks, and it will copy forward arguments - to the appropriate execution device, as long as they are positional arguments and not keyword - arguments. (I didn't make the rules; that's the way the pytorch 1.13 API works for hooks.) - """ - - _hooks: MutableMapping[torch.nn.Module, RemovableHandle] - _current_model_ref: Callable[[], Union[torch.nn.Module, _NoModel]] - - def __init__(self, execution_device: torch.device): - super().__init__(execution_device) - self._hooks = weakref.WeakKeyDictionary() - self._current_model_ref = weakref.ref(NO_MODEL) - - def install(self, *models: torch.nn.Module): - for model in models: - self._hooks[model] = model.register_forward_pre_hook(self._pre_hook) - - def uninstall(self, *models: torch.nn.Module): - for model in models: - hook = self._hooks.pop(model) - hook.remove() - if self.is_current_model(model): - # no longer hooked by this object, so don't claim to manage it - self.clear_current_model() - - def uninstall_all(self): - self.uninstall(*self._hooks.keys()) - - def _pre_hook(self, module: torch.nn.Module, forward_input): - self.load(module) - if len(forward_input) == 0: - warnings.warn( - f"Hook for {module.__class__.__name__} got no input. " f"Inputs must be positional, not keywords.", - stacklevel=3, - ) - return send_to_device(forward_input, self.execution_device) - - def load(self, module): - if not self.is_current_model(module): - self.offload_current() - self._load(module) - - def offload_current(self): - module = self._current_model_ref() - if module is not NO_MODEL: - module.to(OFFLOAD_DEVICE) - self.clear_current_model() - - def _load(self, module: torch.nn.Module) -> torch.nn.Module: - assert self.is_empty(), f"A model is already loaded: {self._current_model_ref()}" - module = module.to(self.execution_device) - self.set_current_model(module) - return module - - def is_current_model(self, model: torch.nn.Module) -> bool: - """Is the given model the one currently loaded on the execution device?""" - return self._current_model_ref() is model - - def is_empty(self): - """Are none of this group's models loaded on the execution device?""" - return self._current_model_ref() is NO_MODEL - - def set_current_model(self, value): - self._current_model_ref = weakref.ref(value) - - def clear_current_model(self): - self._current_model_ref = weakref.ref(NO_MODEL) - - def set_device(self, device: torch.device): - if device == self.execution_device: - return - self.execution_device = device - current = self._current_model_ref() - if current is not NO_MODEL: - current.to(device) - - def device_for(self, model): - if model not in self: - raise KeyError(f"This does not manage this model {type(model).__name__}", model) - return self.execution_device # this implementation only dispatches to one device - - def ready(self): - pass # always ready to load on-demand - - def __contains__(self, model): - return model in self._hooks - - def __repr__(self) -> str: - return ( - f"<{self.__class__.__name__} object at {id(self):x}: " - f"current_model={type(self._current_model_ref()).__name__} >" - ) - - -class FullyLoadedModelGroup(ModelGroup): - """ - A group of models without any implicit loading or unloading. - - :py:meth:`.ready` loads _all_ the models to the execution device at once. - """ - - _models: weakref.WeakSet - - def __init__(self, execution_device: torch.device): - super().__init__(execution_device) - self._models = weakref.WeakSet() - - def install(self, *models: torch.nn.Module): - for model in models: - self._models.add(model) - model.to(self.execution_device) - - def uninstall(self, *models: torch.nn.Module): - for model in models: - self._models.remove(model) - - def uninstall_all(self): - self.uninstall(*self._models) - - def load(self, model): - model.to(self.execution_device) - - def offload_current(self): - for model in self._models: - model.to(OFFLOAD_DEVICE) - - def ready(self): - for model in self._models: - self.load(model) - - def set_device(self, device: torch.device): - self.execution_device = device - for model in self._models: - if model.device != OFFLOAD_DEVICE: - model.to(device) - - def device_for(self, model): - if model not in self: - raise KeyError("This does not manage this model f{type(model).__name__}", model) - return self.execution_device # this implementation only dispatches to one device - - def __contains__(self, model): - return model in self._models diff --git a/invokeai/backend/stable_diffusion/schedulers/__init__.py b/invokeai/backend/stable_diffusion/schedulers/__init__.py index 29a96eb3a5..a4e9dbf9da 100644 --- a/invokeai/backend/stable_diffusion/schedulers/__init__.py +++ b/invokeai/backend/stable_diffusion/schedulers/__init__.py @@ -1 +1 @@ -from .schedulers import SCHEDULER_MAP +from .schedulers import SCHEDULER_MAP # noqa: F401 diff --git a/invokeai/backend/training/__init__.py b/invokeai/backend/training/__init__.py index a85842dc72..ed3ceb90ec 100644 --- a/invokeai/backend/training/__init__.py +++ b/invokeai/backend/training/__init__.py @@ -1,4 +1,4 @@ """ Initialization file for invokeai.backend.training """ -from .textual_inversion_training import do_textual_inversion_training, parse_args +from .textual_inversion_training import do_textual_inversion_training, parse_args # noqa: F401 diff --git a/invokeai/backend/util/__init__.py b/invokeai/backend/util/__init__.py index 2e69af5382..30bb0efc15 100644 --- a/invokeai/backend/util/__init__.py +++ b/invokeai/backend/util/__init__.py @@ -1,7 +1,7 @@ """ Initialization file for invokeai.backend.util """ -from .devices import ( +from .devices import ( # noqa: F401 CPU_DEVICE, CUDA_DEVICE, MPS_DEVICE, @@ -10,5 +10,5 @@ from .devices import ( normalize_device, torch_dtype, ) -from .log import write_log -from .util import ask_user, download_with_resume, instantiate_from_config, url_attachment_name, Chdir +from .log import write_log # noqa: F401 +from .util import ask_user, download_with_resume, instantiate_from_config, url_attachment_name, Chdir # noqa: F401 diff --git a/invokeai/backend/util/devices.py b/invokeai/backend/util/devices.py index eeabcc35db..1827f295e4 100644 --- a/invokeai/backend/util/devices.py +++ b/invokeai/backend/util/devices.py @@ -1,6 +1,8 @@ from __future__ import annotations from contextlib import nullcontext +from packaging import version +import platform import torch from torch import autocast @@ -30,7 +32,7 @@ def choose_precision(device: torch.device) -> str: device_name = torch.cuda.get_device_name(device) if not ("GeForce GTX 1660" in device_name or "GeForce GTX 1650" in device_name): return "float16" - elif device.type == "mps": + elif device.type == "mps" and version.parse(platform.mac_ver()[0]) < version.parse("14.0.0"): return "float16" return "float32" diff --git a/invokeai/backend/util/hotfixes.py b/invokeai/backend/util/hotfixes.py index 4710682ac1..3d7f278f86 100644 --- a/invokeai/backend/util/hotfixes.py +++ b/invokeai/backend/util/hotfixes.py @@ -4,8 +4,15 @@ import torch from torch import nn from diffusers.configuration_utils import ConfigMixin, register_to_config +from diffusers.loaders import FromOriginalControlnetMixin from diffusers.models.attention_processor import AttentionProcessor, AttnProcessor -from diffusers.models.embeddings import TimestepEmbedding, Timesteps +from diffusers.models.embeddings import ( + TextImageProjection, + TextImageTimeEmbedding, + TextTimeEmbedding, + TimestepEmbedding, + Timesteps, +) from diffusers.models.modeling_utils import ModelMixin from diffusers.models.unet_2d_blocks import ( CrossAttnDownBlock2D, @@ -18,10 +25,16 @@ from diffusers.models.unet_2d_condition import UNet2DConditionModel import diffusers from diffusers.models.controlnet import ControlNetConditioningEmbedding, ControlNetOutput, zero_module +from invokeai.backend.util.logging import InvokeAILogger + +# TODO: create PR to diffusers # Modified ControlNetModel with encoder_attention_mask argument added -class ControlNetModel(ModelMixin, ConfigMixin): +logger = InvokeAILogger.getLogger(__name__) + + +class ControlNetModel(ModelMixin, ConfigMixin, FromOriginalControlnetMixin): """ A ControlNet model. @@ -52,12 +65,25 @@ class ControlNetModel(ModelMixin, ConfigMixin): The epsilon to use for the normalization. cross_attention_dim (`int`, defaults to 1280): The dimension of the cross attention features. + transformer_layers_per_block (`int` or `Tuple[int]`, *optional*, defaults to 1): + The number of transformer blocks of type [`~models.attention.BasicTransformerBlock`]. Only relevant for + [`~models.unet_2d_blocks.CrossAttnDownBlock2D`], [`~models.unet_2d_blocks.CrossAttnUpBlock2D`], + [`~models.unet_2d_blocks.UNetMidBlock2DCrossAttn`]. + encoder_hid_dim (`int`, *optional*, defaults to None): + If `encoder_hid_dim_type` is defined, `encoder_hidden_states` will be projected from `encoder_hid_dim` + dimension to `cross_attention_dim`. + encoder_hid_dim_type (`str`, *optional*, defaults to `None`): + If given, the `encoder_hidden_states` and potentially other embeddings are down-projected to text + embeddings of dimension `cross_attention` according to `encoder_hid_dim_type`. attention_head_dim (`Union[int, Tuple[int]]`, defaults to 8): The dimension of the attention heads. use_linear_projection (`bool`, defaults to `False`): class_embed_type (`str`, *optional*, defaults to `None`): The type of class embedding to use which is ultimately summed with the time embeddings. Choose from None, `"timestep"`, `"identity"`, `"projection"`, or `"simple_projection"`. + addition_embed_type (`str`, *optional*, defaults to `None`): + Configures an optional embedding which will be summed with the time embeddings. Choose from `None` or + "text". "text" will use the `TextTimeEmbedding` layer. num_class_embeds (`int`, *optional*, defaults to 0): Input dimension of the learnable embedding matrix to be projected to `time_embed_dim`, when performing class conditioning with `class_embed_type` equal to `None`. @@ -90,7 +116,7 @@ class ControlNetModel(ModelMixin, ConfigMixin): "DownBlock2D", ), only_cross_attention: Union[bool, Tuple[bool]] = False, - block_out_channels: Tuple[int] = (320, 640, 1280, 1280), + block_out_channels: Tuple[int, ...] = (320, 640, 1280, 1280), layers_per_block: int = 2, downsample_padding: int = 1, mid_block_scale_factor: float = 1, @@ -98,10 +124,15 @@ class ControlNetModel(ModelMixin, ConfigMixin): norm_num_groups: Optional[int] = 32, norm_eps: float = 1e-5, cross_attention_dim: int = 1280, + transformer_layers_per_block: Union[int, Tuple[int]] = 1, + encoder_hid_dim: Optional[int] = None, + encoder_hid_dim_type: Optional[str] = None, attention_head_dim: Union[int, Tuple[int]] = 8, num_attention_heads: Optional[Union[int, Tuple[int]]] = None, use_linear_projection: bool = False, class_embed_type: Optional[str] = None, + addition_embed_type: Optional[str] = None, + addition_time_embed_dim: Optional[int] = None, num_class_embeds: Optional[int] = None, upcast_attention: bool = False, resnet_time_scale_shift: str = "default", @@ -109,6 +140,7 @@ class ControlNetModel(ModelMixin, ConfigMixin): controlnet_conditioning_channel_order: str = "rgb", conditioning_embedding_out_channels: Optional[Tuple[int]] = (16, 32, 96, 256), global_pool_conditions: bool = False, + addition_embed_type_num_heads=64, ): super().__init__() @@ -136,6 +168,9 @@ class ControlNetModel(ModelMixin, ConfigMixin): f"Must provide the same number of `num_attention_heads` as `down_block_types`. `num_attention_heads`: {num_attention_heads}. `down_block_types`: {down_block_types}." ) + if isinstance(transformer_layers_per_block, int): + transformer_layers_per_block = [transformer_layers_per_block] * len(down_block_types) + # input conv_in_kernel = 3 conv_in_padding = (conv_in_kernel - 1) // 2 @@ -145,16 +180,43 @@ class ControlNetModel(ModelMixin, ConfigMixin): # time time_embed_dim = block_out_channels[0] * 4 - self.time_proj = Timesteps(block_out_channels[0], flip_sin_to_cos, freq_shift) timestep_input_dim = block_out_channels[0] - self.time_embedding = TimestepEmbedding( timestep_input_dim, time_embed_dim, act_fn=act_fn, ) + if encoder_hid_dim_type is None and encoder_hid_dim is not None: + encoder_hid_dim_type = "text_proj" + self.register_to_config(encoder_hid_dim_type=encoder_hid_dim_type) + logger.info("encoder_hid_dim_type defaults to 'text_proj' as `encoder_hid_dim` is defined.") + + if encoder_hid_dim is None and encoder_hid_dim_type is not None: + raise ValueError( + f"`encoder_hid_dim` has to be defined when `encoder_hid_dim_type` is set to {encoder_hid_dim_type}." + ) + + if encoder_hid_dim_type == "text_proj": + self.encoder_hid_proj = nn.Linear(encoder_hid_dim, cross_attention_dim) + elif encoder_hid_dim_type == "text_image_proj": + # image_embed_dim DOESN'T have to be `cross_attention_dim`. To not clutter the __init__ too much + # they are set to `cross_attention_dim` here as this is exactly the required dimension for the currently only use + # case when `addition_embed_type == "text_image_proj"` (Kadinsky 2.1)` + self.encoder_hid_proj = TextImageProjection( + text_embed_dim=encoder_hid_dim, + image_embed_dim=cross_attention_dim, + cross_attention_dim=cross_attention_dim, + ) + + elif encoder_hid_dim_type is not None: + raise ValueError( + f"encoder_hid_dim_type: {encoder_hid_dim_type} must be None, 'text_proj' or 'text_image_proj'." + ) + else: + self.encoder_hid_proj = None + # class embedding if class_embed_type is None and num_class_embeds is not None: self.class_embedding = nn.Embedding(num_class_embeds, time_embed_dim) @@ -178,6 +240,29 @@ class ControlNetModel(ModelMixin, ConfigMixin): else: self.class_embedding = None + if addition_embed_type == "text": + if encoder_hid_dim is not None: + text_time_embedding_from_dim = encoder_hid_dim + else: + text_time_embedding_from_dim = cross_attention_dim + + self.add_embedding = TextTimeEmbedding( + text_time_embedding_from_dim, time_embed_dim, num_heads=addition_embed_type_num_heads + ) + elif addition_embed_type == "text_image": + # text_embed_dim and image_embed_dim DON'T have to be `cross_attention_dim`. To not clutter the __init__ too much + # they are set to `cross_attention_dim` here as this is exactly the required dimension for the currently only use + # case when `addition_embed_type == "text_image"` (Kadinsky 2.1)` + self.add_embedding = TextImageTimeEmbedding( + text_embed_dim=cross_attention_dim, image_embed_dim=cross_attention_dim, time_embed_dim=time_embed_dim + ) + elif addition_embed_type == "text_time": + self.add_time_proj = Timesteps(addition_time_embed_dim, flip_sin_to_cos, freq_shift) + self.add_embedding = TimestepEmbedding(projection_class_embeddings_input_dim, time_embed_dim) + + elif addition_embed_type is not None: + raise ValueError(f"addition_embed_type: {addition_embed_type} must be None, 'text' or 'text_image'.") + # control net conditioning embedding self.controlnet_cond_embedding = ControlNetConditioningEmbedding( conditioning_embedding_channels=block_out_channels[0], @@ -212,6 +297,7 @@ class ControlNetModel(ModelMixin, ConfigMixin): down_block = get_down_block( down_block_type, num_layers=layers_per_block, + transformer_layers_per_block=transformer_layers_per_block[i], in_channels=input_channel, out_channels=output_channel, temb_channels=time_embed_dim, @@ -248,6 +334,7 @@ class ControlNetModel(ModelMixin, ConfigMixin): self.controlnet_mid_block = controlnet_block self.mid_block = UNetMidBlock2DCrossAttn( + transformer_layers_per_block=transformer_layers_per_block[-1], in_channels=mid_block_channel, temb_channels=time_embed_dim, resnet_eps=norm_eps, @@ -277,7 +364,22 @@ class ControlNetModel(ModelMixin, ConfigMixin): The UNet model weights to copy to the [`ControlNetModel`]. All configuration options are also copied where applicable. """ + transformer_layers_per_block = ( + unet.config.transformer_layers_per_block if "transformer_layers_per_block" in unet.config else 1 + ) + encoder_hid_dim = unet.config.encoder_hid_dim if "encoder_hid_dim" in unet.config else None + encoder_hid_dim_type = unet.config.encoder_hid_dim_type if "encoder_hid_dim_type" in unet.config else None + addition_embed_type = unet.config.addition_embed_type if "addition_embed_type" in unet.config else None + addition_time_embed_dim = ( + unet.config.addition_time_embed_dim if "addition_time_embed_dim" in unet.config else None + ) + controlnet = cls( + encoder_hid_dim=encoder_hid_dim, + encoder_hid_dim_type=encoder_hid_dim_type, + addition_embed_type=addition_embed_type, + addition_time_embed_dim=addition_time_embed_dim, + transformer_layers_per_block=transformer_layers_per_block, in_channels=unet.config.in_channels, flip_sin_to_cos=unet.config.flip_sin_to_cos, freq_shift=unet.config.freq_shift, @@ -463,6 +565,7 @@ class ControlNetModel(ModelMixin, ConfigMixin): class_labels: Optional[torch.Tensor] = None, timestep_cond: Optional[torch.Tensor] = None, attention_mask: Optional[torch.Tensor] = None, + added_cond_kwargs: Optional[Dict[str, torch.Tensor]] = None, cross_attention_kwargs: Optional[Dict[str, Any]] = None, encoder_attention_mask: Optional[torch.Tensor] = None, guess_mode: bool = False, @@ -486,7 +589,9 @@ class ControlNetModel(ModelMixin, ConfigMixin): Optional class labels for conditioning. Their embeddings will be summed with the timestep embeddings. timestep_cond (`torch.Tensor`, *optional*, defaults to `None`): attention_mask (`torch.Tensor`, *optional*, defaults to `None`): - cross_attention_kwargs(`dict[str]`, *optional*, defaults to `None`): + added_cond_kwargs (`dict`): + Additional conditions for the Stable Diffusion XL UNet. + cross_attention_kwargs (`dict[str]`, *optional*, defaults to `None`): A kwargs dictionary that if specified is passed along to the `AttnProcessor`. encoder_attention_mask (`torch.Tensor`): A cross-attention mask of shape `(batch, sequence_length)` is applied to `encoder_hidden_states`. If @@ -549,6 +654,7 @@ class ControlNetModel(ModelMixin, ConfigMixin): t_emb = t_emb.to(dtype=sample.dtype) emb = self.time_embedding(t_emb, timestep_cond) + aug_emb = None if self.class_embedding is not None: if class_labels is None: @@ -560,11 +666,34 @@ class ControlNetModel(ModelMixin, ConfigMixin): class_emb = self.class_embedding(class_labels).to(dtype=self.dtype) emb = emb + class_emb + if "addition_embed_type" in self.config: + if self.config.addition_embed_type == "text": + aug_emb = self.add_embedding(encoder_hidden_states) + + elif self.config.addition_embed_type == "text_time": + if "text_embeds" not in added_cond_kwargs: + raise ValueError( + f"{self.__class__} has the config param `addition_embed_type` set to 'text_time' which requires the keyword argument `text_embeds` to be passed in `added_cond_kwargs`" + ) + text_embeds = added_cond_kwargs.get("text_embeds") + if "time_ids" not in added_cond_kwargs: + raise ValueError( + f"{self.__class__} has the config param `addition_embed_type` set to 'text_time' which requires the keyword argument `time_ids` to be passed in `added_cond_kwargs`" + ) + time_ids = added_cond_kwargs.get("time_ids") + time_embeds = self.add_time_proj(time_ids.flatten()) + time_embeds = time_embeds.reshape((text_embeds.shape[0], -1)) + + add_embeds = torch.concat([text_embeds, time_embeds], dim=-1) + add_embeds = add_embeds.to(emb.dtype) + aug_emb = self.add_embedding(add_embeds) + + emb = emb + aug_emb if aug_emb is not None else emb + # 2. pre-process sample = self.conv_in(sample) controlnet_cond = self.controlnet_cond_embedding(controlnet_cond) - sample = sample + controlnet_cond # 3. down diff --git a/invokeai/backend/util/log.py b/invokeai/backend/util/log.py index 4643f61a6b..3919d456b9 100644 --- a/invokeai/backend/util/log.py +++ b/invokeai/backend/util/log.py @@ -27,8 +27,8 @@ def write_log_message(results, output_cntr): log_lines = [f"{path}: {prompt}\n" for path, prompt in results] if len(log_lines) > 1: subcntr = 1 - for l in log_lines: - print(f"[{output_cntr}.{subcntr}] {l}", end="") + for ll in log_lines: + print(f"[{output_cntr}.{subcntr}] {ll}", end="") subcntr += 1 else: print(f"[{output_cntr}] {log_lines[0]}", end="") diff --git a/invokeai/backend/util/logging.py b/invokeai/backend/util/logging.py index 3a8d721aa5..82706d8181 100644 --- a/invokeai/backend/util/logging.py +++ b/invokeai/backend/util/logging.py @@ -182,13 +182,13 @@ import urllib.parse from abc import abstractmethod from pathlib import Path -from invokeai.app.services.config import InvokeAIAppConfig, get_invokeai_config +from invokeai.app.services.config import InvokeAIAppConfig try: import syslog SYSLOG_AVAILABLE = True -except: +except ImportError: SYSLOG_AVAILABLE = False @@ -417,7 +417,7 @@ class InvokeAILogger(object): syslog_args["socktype"] = _SOCK_MAP[arg_value[0]] else: syslog_args["address"] = arg_name - except: + except Exception: raise ValueError(f"{args} is not a value argument list for syslog logging") return logging.handlers.SysLogHandler(**syslog_args) diff --git a/invokeai/backend/util/mps_fixes.py b/invokeai/backend/util/mps_fixes.py index 409eff1c8b..8a4e6baab5 100644 --- a/invokeai/backend/util/mps_fixes.py +++ b/invokeai/backend/util/mps_fixes.py @@ -191,7 +191,7 @@ class ChunkedSlicedAttnProcessor: assert value.shape[0] == 1 assert hidden_states.shape[0] == 1 - dtype = query.dtype + # dtype = query.dtype if attn.upcast_attention: query = query.float() key = key.float() diff --git a/invokeai/backend/util/util.py b/invokeai/backend/util/util.py index f3c182c063..7ef9c72fb0 100644 --- a/invokeai/backend/util/util.py +++ b/invokeai/backend/util/util.py @@ -84,7 +84,7 @@ def count_params(model, verbose=False): def instantiate_from_config(config, **kwargs): - if not "target" in config: + if "target" not in config: if config == "__is_first_stage__": return None elif config == "__is_unconditional__": @@ -234,16 +234,17 @@ def rand_perlin_2d(shape, res, device, fade=lambda t: 6 * t**5 - 15 * t**4 + 10 .repeat_interleave(d[1], 1) ) - dot = lambda grad, shift: ( - torch.stack( - ( - grid[: shape[0], : shape[1], 0] + shift[0], - grid[: shape[0], : shape[1], 1] + shift[1], - ), - dim=-1, - ) - * grad[: shape[0], : shape[1]] - ).sum(dim=-1) + def dot(grad, shift): + return ( + torch.stack( + ( + grid[: shape[0], : shape[1], 0] + shift[0], + grid[: shape[0], : shape[1], 1] + shift[1], + ), + dim=-1, + ) + * grad[: shape[0], : shape[1]] + ).sum(dim=-1) n00 = dot(tile_grads([0, -1], [0, -1]), [0, 0]).to(device) n10 = dot(tile_grads([1, None], [0, -1]), [-1, 0]).to(device) @@ -287,7 +288,7 @@ def download_with_resume(url: str, dest: Path, access_token: str = None) -> Path if dest.is_dir(): try: file_name = re.search('filename="(.+)"', resp.headers.get("Content-Disposition")).group(1) - except: + except AttributeError: file_name = os.path.basename(url) dest = dest / file_name else: @@ -342,7 +343,7 @@ def url_attachment_name(url: str) -> dict: resp = requests.get(url, stream=True) match = re.search('filename="(.+)"', resp.headers.get("Content-Disposition")) return match.group(1) - except: + except Exception: return None diff --git a/invokeai/backend/web/__init__.py b/invokeai/backend/web/__init__.py deleted file mode 100644 index c57600f72b..0000000000 --- a/invokeai/backend/web/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -""" -Initialization file for the web backend. -""" -from .invoke_ai_web_server import InvokeAIWebServer diff --git a/invokeai/backend/web/invoke_ai_web_server.py b/invokeai/backend/web/invoke_ai_web_server.py deleted file mode 100644 index 88eb77551f..0000000000 --- a/invokeai/backend/web/invoke_ai_web_server.py +++ /dev/null @@ -1,1654 +0,0 @@ -import base64 -import glob -import io -import json -import math -import mimetypes -import os -import shutil -import traceback -from pathlib import Path -from threading import Event -from uuid import uuid4 - -import eventlet -from compel.prompt_parser import Blend -from flask import Flask, make_response, redirect, request, send_from_directory -from flask_socketio import SocketIO -from PIL import Image -from PIL.Image import Image as ImageType -from werkzeug.utils import secure_filename - -import invokeai.backend.util.logging as logger -import invokeai.frontend.web.dist as frontend - -from .. import Generate -from ..args import APP_ID, APP_VERSION, Args, calculate_init_img_hash -from ..generator import infill_methods -from ..globals import Globals, global_converted_ckpts_dir, global_models_dir -from ..image_util import PngWriter, retrieve_metadata -from ...frontend.merge.merge_diffusers import merge_diffusion_models -from ..prompting import ( - get_prompt_structure, - get_tokens_for_prompt_object, -) -from ..stable_diffusion import PipelineIntermediateState -from .modules.get_canvas_generation_mode import get_canvas_generation_mode -from .modules.parameters import parameters_to_command - -# Loading Arguments -opt = Args() -args = opt.parse_args() - -# Set the root directory for static files and relative paths -args.root_dir = os.path.expanduser(args.root_dir or "..") -if not os.path.isabs(args.outdir): - args.outdir = os.path.join(args.root_dir, args.outdir) - -# normalize the config directory relative to root -if not os.path.isabs(opt.conf): - opt.conf = os.path.normpath(os.path.join(Globals.root, opt.conf)) - - -class InvokeAIWebServer: - def __init__(self, generate: Generate, gfpgan, codeformer, esrgan) -> None: - self.host = args.host - self.port = args.port - - self.generate = generate - self.gfpgan = gfpgan - self.codeformer = codeformer - self.esrgan = esrgan - - self.canceled = Event() - self.ALLOWED_EXTENSIONS = {"png", "jpg", "jpeg"} - - def allowed_file(self, filename: str) -> bool: - return "." in filename and filename.rsplit(".", 1)[1].lower() in self.ALLOWED_EXTENSIONS - - def run(self): - self.setup_app() - self.setup_flask() - - def setup_flask(self): - # Fix missing mimetypes on Windows - mimetypes.add_type("application/javascript", ".js") - mimetypes.add_type("text/css", ".css") - # Socket IO - engineio_logger = True if args.web_verbose else False - max_http_buffer_size = 10000000 - - socketio_args = { - "logger": logger, - "engineio_logger": engineio_logger, - "max_http_buffer_size": max_http_buffer_size, - "ping_interval": (50, 50), - "ping_timeout": 60, - } - - if opt.cors: - _cors = opt.cors - # convert list back into comma-separated string, - # be defensive here, not sure in what form this arrives - if isinstance(_cors, list): - _cors = ",".join(_cors) - if "," in _cors: - _cors = _cors.split(",") - socketio_args["cors_allowed_origins"] = _cors - - self.app = Flask(__name__, static_url_path="", static_folder=frontend.__path__[0]) - - self.socketio = SocketIO(self.app, **socketio_args) - - # Keep Server Alive Route - @self.app.route("/flaskwebgui-keep-server-alive") - def keep_alive(): - return {"message": "Server Running"} - - # Outputs Route - self.app.config["OUTPUTS_FOLDER"] = os.path.abspath(args.outdir) - - @self.app.route("/outputs/") - def outputs(file_path): - return send_from_directory(self.app.config["OUTPUTS_FOLDER"], file_path) - - # Base Route - @self.app.route("/") - def serve(): - if args.web_develop: - return redirect("http://127.0.0.1:5173") - else: - return send_from_directory(self.app.static_folder, "index.html") - - @self.app.route("/upload", methods=["POST"]) - def upload(): - try: - data = json.loads(request.form["data"]) - filename = "" - # check if the post request has the file part - if "file" in request.files: - file = request.files["file"] - # If the user does not select a file, the browser submits an - # empty file without a filename. - if file.filename == "": - return make_response("No file selected", 400) - filename = file.filename - elif "dataURL" in data: - file = dataURL_to_bytes(data["dataURL"]) - if "filename" not in data or data["filename"] == "": - return make_response("No filename provided", 400) - filename = data["filename"] - else: - return make_response("No file or dataURL", 400) - - kind = data["kind"] - - if kind == "init": - path = self.init_image_path - elif kind == "temp": - path = self.temp_image_path - elif kind == "result": - path = self.result_path - elif kind == "mask": - path = self.mask_image_path - else: - return make_response(f"Invalid upload kind: {kind}", 400) - - if not self.allowed_file(filename): - return make_response( - f'Invalid file type, must be one of: {", ".join(self.ALLOWED_EXTENSIONS)}', - 400, - ) - - secured_filename = secure_filename(filename) - - uuid = uuid4().hex - truncated_uuid = uuid[:8] - - split = os.path.splitext(secured_filename) - name = f"{split[0]}.{truncated_uuid}{split[1]}" - - file_path = os.path.join(path, name) - - if "dataURL" in data: - with open(file_path, "wb") as f: - f.write(file) - else: - file.save(file_path) - - mtime = os.path.getmtime(file_path) - - pil_image = Image.open(file_path) - - if "cropVisible" in data and data["cropVisible"] == True: - visible_image_bbox = pil_image.getbbox() - pil_image = pil_image.crop(visible_image_bbox) - pil_image.save(file_path) - - (width, height) = pil_image.size - - thumbnail_path = save_thumbnail(pil_image, os.path.basename(file_path), self.thumbnail_image_path) - - response = { - "url": self.get_url_from_image_path(file_path), - "thumbnail": self.get_url_from_image_path(thumbnail_path), - "mtime": mtime, - "width": width, - "height": height, - } - - return make_response(response, 200) - - except Exception as e: - self.handle_exceptions(e) - return make_response("Error uploading file", 500) - - self.load_socketio_listeners(self.socketio) - - if args.gui: - logger.info("Launching Invoke AI GUI") - try: - from flaskwebgui import FlaskUI - - FlaskUI( - app=self.app, - socketio=self.socketio, - server="flask_socketio", - width=1600, - height=1000, - port=self.port, - ).run() - except KeyboardInterrupt: - import sys - - sys.exit(0) - else: - useSSL = args.certfile or args.keyfile - logger.info("Started Invoke AI Web Server") - if self.host == "0.0.0.0": - logger.info( - f"Point your browser at http{'s' if useSSL else ''}://localhost:{self.port} or use the host's DNS name or IP address." - ) - else: - logger.info("Default host address now 127.0.0.1 (localhost). Use --host 0.0.0.0 to bind any address.") - logger.info(f"Point your browser at http{'s' if useSSL else ''}://{self.host}:{self.port}") - if not useSSL: - self.socketio.run(app=self.app, host=self.host, port=self.port) - else: - self.socketio.run( - app=self.app, - host=self.host, - port=self.port, - certfile=args.certfile, - keyfile=args.keyfile, - ) - - def setup_app(self): - self.result_url = "outputs/" - self.init_image_url = "outputs/init-images/" - self.mask_image_url = "outputs/mask-images/" - self.intermediate_url = "outputs/intermediates/" - self.temp_image_url = "outputs/temp-images/" - self.thumbnail_image_url = "outputs/thumbnails/" - # location for "finished" images - self.result_path = args.outdir - # temporary path for intermediates - self.intermediate_path = os.path.join(self.result_path, "intermediates/") - # path for user-uploaded init images and masks - self.init_image_path = os.path.join(self.result_path, "init-images/") - self.mask_image_path = os.path.join(self.result_path, "mask-images/") - # path for temp images e.g. gallery generations which are not committed - self.temp_image_path = os.path.join(self.result_path, "temp-images/") - # path for thumbnail images - self.thumbnail_image_path = os.path.join(self.result_path, "thumbnails/") - # txt log - self.log_path = os.path.join(self.result_path, "invoke_logger.txt") - # make all output paths - [ - os.makedirs(path, exist_ok=True) - for path in [ - self.result_path, - self.intermediate_path, - self.init_image_path, - self.mask_image_path, - self.temp_image_path, - self.thumbnail_image_path, - ] - ] - - def load_socketio_listeners(self, socketio): - @socketio.on("requestSystemConfig") - def handle_request_capabilities(): - logger.info("System config requested") - config = self.get_system_config() - config["model_list"] = self.generate.model_manager.list_models() - config["infill_methods"] = infill_methods() - socketio.emit("systemConfig", config) - - @socketio.on("searchForModels") - def handle_search_models(search_folder: str): - try: - if not search_folder: - socketio.emit( - "foundModels", - {"search_folder": None, "found_models": None}, - ) - else: - ( - search_folder, - found_models, - ) = self.generate.model_manager.search_models(search_folder) - socketio.emit( - "foundModels", - {"search_folder": search_folder, "found_models": found_models}, - ) - except Exception as e: - self.handle_exceptions(e) - print("\n") - - @socketio.on("addNewModel") - def handle_add_model(new_model_config: dict): - try: - model_name = new_model_config["name"] - del new_model_config["name"] - model_attributes = new_model_config - if len(model_attributes["vae"]) == 0: - del model_attributes["vae"] - update = False - current_model_list = self.generate.model_manager.list_models() - if model_name in current_model_list: - update = True - - logger.info(f"Adding New Model: {model_name}") - - self.generate.model_manager.add_model( - model_name=model_name, - model_attributes=model_attributes, - clobber=True, - ) - self.generate.model_manager.commit(opt.conf) - - new_model_list = self.generate.model_manager.list_models() - socketio.emit( - "newModelAdded", - { - "new_model_name": model_name, - "model_list": new_model_list, - "update": update, - }, - ) - logger.info(f"New Model Added: {model_name}") - except Exception as e: - self.handle_exceptions(e) - - @socketio.on("deleteModel") - def handle_delete_model(model_name: str): - try: - logger.info(f"Deleting Model: {model_name}") - self.generate.model_manager.del_model(model_name) - self.generate.model_manager.commit(opt.conf) - updated_model_list = self.generate.model_manager.list_models() - socketio.emit( - "modelDeleted", - { - "deleted_model_name": model_name, - "model_list": updated_model_list, - }, - ) - logger.info(f"Model Deleted: {model_name}") - except Exception as e: - self.handle_exceptions(e) - - @socketio.on("requestModelChange") - def handle_set_model(model_name: str): - try: - logger.info(f"Model change requested: {model_name}") - model = self.generate.set_model(model_name) - model_list = self.generate.model_manager.list_models() - if model is None: - socketio.emit( - "modelChangeFailed", - {"model_name": model_name, "model_list": model_list}, - ) - else: - socketio.emit( - "modelChanged", - {"model_name": model_name, "model_list": model_list}, - ) - except Exception as e: - self.handle_exceptions(e) - - @socketio.on("convertToDiffusers") - def convert_to_diffusers(model_to_convert: dict): - try: - if model_info := self.generate.model_manager.model_info(model_name=model_to_convert["model_name"]): - if "weights" in model_info: - ckpt_path = Path(model_info["weights"]) - original_config_file = Path(model_info["config"]) - model_name = model_to_convert["model_name"] - model_description = model_info["description"] - else: - self.socketio.emit("error", {"message": "Model is not a valid checkpoint file"}) - else: - self.socketio.emit("error", {"message": "Could not retrieve model info."}) - - if not ckpt_path.is_absolute(): - ckpt_path = Path(Globals.root, ckpt_path) - - if original_config_file and not original_config_file.is_absolute(): - original_config_file = Path(Globals.root, original_config_file) - - diffusers_path = Path(ckpt_path.parent.absolute(), f"{model_name}_diffusers") - - if model_to_convert["save_location"] == "root": - diffusers_path = Path(global_converted_ckpts_dir(), f"{model_name}_diffusers") - - if model_to_convert["save_location"] == "custom" and model_to_convert["custom_location"] is not None: - diffusers_path = Path(model_to_convert["custom_location"], f"{model_name}_diffusers") - - if diffusers_path.exists(): - shutil.rmtree(diffusers_path) - - self.generate.model_manager.convert_and_import( - ckpt_path, - diffusers_path, - model_name=model_name, - model_description=model_description, - vae=None, - original_config_file=original_config_file, - commit_to_conf=opt.conf, - ) - - new_model_list = self.generate.model_manager.list_models() - socketio.emit( - "modelConverted", - { - "new_model_name": model_name, - "model_list": new_model_list, - "update": True, - }, - ) - logger.info(f"Model Converted: {model_name}") - except Exception as e: - self.handle_exceptions(e) - - @socketio.on("mergeDiffusersModels") - def merge_diffusers_models(model_merge_info: dict): - try: - models_to_merge = model_merge_info["models_to_merge"] - model_ids_or_paths = [self.generate.model_manager.model_name_or_path(x) for x in models_to_merge] - merged_pipe = merge_diffusion_models( - model_ids_or_paths, - model_merge_info["alpha"], - model_merge_info["interp"], - model_merge_info["force"], - ) - - dump_path = global_models_dir() / "merged_models" - if model_merge_info["model_merge_save_path"] is not None: - dump_path = Path(model_merge_info["model_merge_save_path"]) - - os.makedirs(dump_path, exist_ok=True) - dump_path = dump_path / model_merge_info["merged_model_name"] - merged_pipe.save_pretrained(dump_path, safe_serialization=1) - - merged_model_config = dict( - model_name=model_merge_info["merged_model_name"], - description=f'Merge of models {", ".join(models_to_merge)}', - commit_to_conf=opt.conf, - ) - - if vae := self.generate.model_manager.config[models_to_merge[0]].get("vae", None): - logger.info(f"Using configured VAE assigned to {models_to_merge[0]}") - merged_model_config.update(vae=vae) - - self.generate.model_manager.import_diffuser_model(dump_path, **merged_model_config) - new_model_list = self.generate.model_manager.list_models() - - socketio.emit( - "modelsMerged", - { - "merged_models": models_to_merge, - "merged_model_name": model_merge_info["merged_model_name"], - "model_list": new_model_list, - "update": True, - }, - ) - logger.info(f"Models Merged: {models_to_merge}") - logger.info(f"New Model Added: {model_merge_info['merged_model_name']}") - except Exception as e: - self.handle_exceptions(e) - - @socketio.on("requestEmptyTempFolder") - def empty_temp_folder(): - try: - temp_files = glob.glob(os.path.join(self.temp_image_path, "*")) - for f in temp_files: - try: - os.remove(f) - thumbnail_path = os.path.join( - self.thumbnail_image_path, - os.path.splitext(os.path.basename(f))[0] + ".webp", - ) - os.remove(thumbnail_path) - except Exception as e: - socketio.emit("error", {"message": f"Unable to delete {f}: {str(e)}"}) - pass - - socketio.emit("tempFolderEmptied") - except Exception as e: - self.handle_exceptions(e) - - @socketio.on("requestSaveStagingAreaImageToGallery") - def save_temp_image_to_gallery(url): - try: - image_path = self.get_image_path_from_url(url) - new_path = os.path.join(self.result_path, os.path.basename(image_path)) - shutil.copy2(image_path, new_path) - - if os.path.splitext(new_path)[1] == ".png": - metadata = retrieve_metadata(new_path) - else: - metadata = {} - - pil_image = Image.open(new_path) - - (width, height) = pil_image.size - - thumbnail_path = save_thumbnail(pil_image, os.path.basename(new_path), self.thumbnail_image_path) - - image_array = [ - { - "url": self.get_url_from_image_path(new_path), - "thumbnail": self.get_url_from_image_path(thumbnail_path), - "mtime": os.path.getmtime(new_path), - "metadata": metadata, - "width": width, - "height": height, - "category": "result", - } - ] - - socketio.emit( - "galleryImages", - {"images": image_array, "category": "result"}, - ) - - except Exception as e: - self.handle_exceptions(e) - - @socketio.on("requestLatestImages") - def handle_request_latest_images(category, latest_mtime): - try: - base_path = self.result_path if category == "result" else self.init_image_path - - paths = [] - - for ext in ("*.png", "*.jpg", "*.jpeg"): - paths.extend(glob.glob(os.path.join(base_path, ext))) - - image_paths = sorted(paths, key=lambda x: os.path.getmtime(x), reverse=True) - - image_paths = list( - filter( - lambda x: os.path.getmtime(x) > latest_mtime, - image_paths, - ) - ) - - image_array = [] - - for path in image_paths: - try: - if os.path.splitext(path)[1] == ".png": - metadata = retrieve_metadata(path) - else: - metadata = {} - - pil_image = Image.open(path) - (width, height) = pil_image.size - - thumbnail_path = save_thumbnail(pil_image, os.path.basename(path), self.thumbnail_image_path) - - image_array.append( - { - "url": self.get_url_from_image_path(path), - "thumbnail": self.get_url_from_image_path(thumbnail_path), - "mtime": os.path.getmtime(path), - "metadata": metadata.get("sd-metadata"), - "dreamPrompt": metadata.get("Dream"), - "width": width, - "height": height, - "category": category, - } - ) - except Exception as e: - socketio.emit("error", {"message": f"Unable to load {path}: {str(e)}"}) - pass - - socketio.emit( - "galleryImages", - {"images": image_array, "category": category}, - ) - except Exception as e: - self.handle_exceptions(e) - - @socketio.on("requestImages") - def handle_request_images(category, earliest_mtime=None): - try: - page_size = 50 - - base_path = self.result_path if category == "result" else self.init_image_path - - paths = [] - for ext in ("*.png", "*.jpg", "*.jpeg"): - paths.extend(glob.glob(os.path.join(base_path, ext))) - - image_paths = sorted(paths, key=lambda x: os.path.getmtime(x), reverse=True) - - if earliest_mtime: - image_paths = list( - filter( - lambda x: os.path.getmtime(x) < earliest_mtime, - image_paths, - ) - ) - - areMoreImagesAvailable = len(image_paths) >= page_size - image_paths = image_paths[slice(0, page_size)] - - image_array = [] - for path in image_paths: - try: - if os.path.splitext(path)[1] == ".png": - metadata = retrieve_metadata(path) - else: - metadata = {} - - pil_image = Image.open(path) - (width, height) = pil_image.size - - thumbnail_path = save_thumbnail(pil_image, os.path.basename(path), self.thumbnail_image_path) - - image_array.append( - { - "url": self.get_url_from_image_path(path), - "thumbnail": self.get_url_from_image_path(thumbnail_path), - "mtime": os.path.getmtime(path), - "metadata": metadata.get("sd-metadata"), - "dreamPrompt": metadata.get("Dream"), - "width": width, - "height": height, - "category": category, - } - ) - except Exception as e: - logger.info(f"Unable to load {path}") - socketio.emit("error", {"message": f"Unable to load {path}: {str(e)}"}) - pass - - socketio.emit( - "galleryImages", - { - "images": image_array, - "areMoreImagesAvailable": areMoreImagesAvailable, - "category": category, - }, - ) - except Exception as e: - self.handle_exceptions(e) - - @socketio.on("generateImage") - def handle_generate_image_event(generation_parameters, esrgan_parameters, facetool_parameters): - try: - # truncate long init_mask/init_img base64 if needed - printable_parameters = { - **generation_parameters, - } - - if "init_img" in generation_parameters: - printable_parameters["init_img"] = printable_parameters["init_img"][:64] + "..." - - if "init_mask" in generation_parameters: - printable_parameters["init_mask"] = printable_parameters["init_mask"][:64] + "..." - - logger.info(f"Image Generation Parameters:\n\n{printable_parameters}\n") - logger.info(f"ESRGAN Parameters: {esrgan_parameters}") - logger.info(f"Facetool Parameters: {facetool_parameters}") - - self.generate_images( - generation_parameters, - esrgan_parameters, - facetool_parameters, - ) - except Exception as e: - self.handle_exceptions(e) - - @socketio.on("runPostprocessing") - def handle_run_postprocessing(original_image, postprocessing_parameters): - try: - logger.info(f'Postprocessing requested for "{original_image["url"]}": {postprocessing_parameters}') - - progress = Progress() - - socketio.emit("progressUpdate", progress.to_formatted_dict()) - eventlet.sleep(0) - - original_image_path = self.get_image_path_from_url(original_image["url"]) - - image = Image.open(original_image_path) - - try: - seed = original_image["metadata"]["image"]["seed"] - except KeyError: - seed = "unknown_seed" - pass - - if postprocessing_parameters["type"] == "esrgan": - progress.set_current_status("common.statusUpscalingESRGAN") - elif postprocessing_parameters["type"] == "gfpgan": - progress.set_current_status("common.statusRestoringFacesGFPGAN") - elif postprocessing_parameters["type"] == "codeformer": - progress.set_current_status("common.statusRestoringFacesCodeFormer") - - socketio.emit("progressUpdate", progress.to_formatted_dict()) - eventlet.sleep(0) - - if postprocessing_parameters["type"] == "esrgan": - image = self.esrgan.process( - image=image, - upsampler_scale=postprocessing_parameters["upscale"][0], - denoise_str=postprocessing_parameters["upscale"][1], - strength=postprocessing_parameters["upscale"][2], - seed=seed, - ) - elif postprocessing_parameters["type"] == "gfpgan": - image = self.gfpgan.process( - image=image, - strength=postprocessing_parameters["facetool_strength"], - seed=seed, - ) - elif postprocessing_parameters["type"] == "codeformer": - image = self.codeformer.process( - image=image, - strength=postprocessing_parameters["facetool_strength"], - fidelity=postprocessing_parameters["codeformer_fidelity"], - seed=seed, - device="cpu" if str(self.generate.device) == "mps" else self.generate.device, - ) - else: - raise TypeError(f'{postprocessing_parameters["type"]} is not a valid postprocessing type') - - progress.set_current_status("common.statusSavingImage") - socketio.emit("progressUpdate", progress.to_formatted_dict()) - eventlet.sleep(0) - - postprocessing_parameters["seed"] = seed - metadata = self.parameters_to_post_processed_image_metadata( - parameters=postprocessing_parameters, - original_image_path=original_image_path, - ) - - command = parameters_to_command(postprocessing_parameters) - - (width, height) = image.size - - path = self.save_result_image( - image, - command, - metadata, - self.result_path, - postprocessing=postprocessing_parameters["type"], - ) - - thumbnail_path = save_thumbnail(image, os.path.basename(path), self.thumbnail_image_path) - - self.write_log_message( - f'[Postprocessed] "{original_image_path}" > "{path}": {postprocessing_parameters}' - ) - - progress.mark_complete() - socketio.emit("progressUpdate", progress.to_formatted_dict()) - eventlet.sleep(0) - - socketio.emit( - "postprocessingResult", - { - "url": self.get_url_from_image_path(path), - "thumbnail": self.get_url_from_image_path(thumbnail_path), - "mtime": os.path.getmtime(path), - "metadata": metadata, - "dreamPrompt": command, - "width": width, - "height": height, - }, - ) - except Exception as e: - self.handle_exceptions(e) - - @socketio.on("cancel") - def handle_cancel(): - logger.info("Cancel processing requested") - self.canceled.set() - - # TODO: I think this needs a safety mechanism. - @socketio.on("deleteImage") - def handle_delete_image(url, thumbnail, uuid, category): - try: - logger.info(f'Delete requested "{url}"') - from send2trash import send2trash - - path = self.get_image_path_from_url(url) - thumbnail_path = self.get_image_path_from_url(thumbnail) - - send2trash(path) - send2trash(thumbnail_path) - - socketio.emit( - "imageDeleted", - {"url": url, "uuid": uuid, "category": category}, - ) - except Exception as e: - self.handle_exceptions(e) - - # App Functions - def get_system_config(self): - model_list: dict = self.generate.model_manager.list_models() - active_model_name = None - - for model_name, model_dict in model_list.items(): - if model_dict["status"] == "active": - active_model_name = model_name - - return { - "model": "stable diffusion", - "model_weights": active_model_name, - "model_hash": self.generate.model_hash, - "app_id": APP_ID, - "app_version": APP_VERSION, - } - - def generate_images(self, generation_parameters, esrgan_parameters, facetool_parameters): - try: - self.canceled.clear() - - step_index = 1 - prior_variations = ( - generation_parameters["with_variations"] if "with_variations" in generation_parameters else [] - ) - - actual_generation_mode = generation_parameters["generation_mode"] - original_bounding_box = None - - progress = Progress(generation_parameters=generation_parameters) - - self.socketio.emit("progressUpdate", progress.to_formatted_dict()) - eventlet.sleep(0) - - """ - TODO: - If a result image is used as an init image, and then deleted, we will want to be - able to use it as an init image in the future. Need to handle this case. - """ - - """ - Prepare for generation based on generation_mode - """ - if generation_parameters["generation_mode"] == "unifiedCanvas": - """ - generation_parameters["init_img"] is a base64 image - generation_parameters["init_mask"] is a base64 image - - So we need to convert each into a PIL Image. - """ - - init_img_url = generation_parameters["init_img"] - - original_bounding_box = generation_parameters["bounding_box"].copy() - - initial_image = dataURL_to_image(generation_parameters["init_img"]).convert("RGBA") - - """ - The outpaint image and mask are pre-cropped by the UI, so the bounding box we pass - to the generator should be: - { - "x": 0, - "y": 0, - "width": original_bounding_box["width"], - "height": original_bounding_box["height"] - } - """ - - generation_parameters["bounding_box"]["x"] = 0 - generation_parameters["bounding_box"]["y"] = 0 - - # Convert mask dataURL to an image and convert to greyscale - mask_image = dataURL_to_image(generation_parameters["init_mask"]).convert("L") - - actual_generation_mode = get_canvas_generation_mode(initial_image, mask_image) - - """ - Apply the mask to the init image, creating a "mask" image with - transparency where inpainting should occur. This is the kind of - mask that prompt2image() needs. - """ - alpha_mask = initial_image.copy() - alpha_mask.putalpha(mask_image) - - generation_parameters["init_img"] = initial_image - generation_parameters["init_mask"] = alpha_mask - - # Remove the unneeded parameters for whichever mode we are doing - if actual_generation_mode == "inpainting": - generation_parameters.pop("seam_size", None) - generation_parameters.pop("seam_blur", None) - generation_parameters.pop("seam_strength", None) - generation_parameters.pop("seam_steps", None) - generation_parameters.pop("tile_size", None) - generation_parameters.pop("force_outpaint", None) - elif actual_generation_mode == "img2img": - generation_parameters["height"] = original_bounding_box["height"] - generation_parameters["width"] = original_bounding_box["width"] - generation_parameters.pop("init_mask", None) - generation_parameters.pop("seam_size", None) - generation_parameters.pop("seam_blur", None) - generation_parameters.pop("seam_strength", None) - generation_parameters.pop("seam_steps", None) - generation_parameters.pop("tile_size", None) - generation_parameters.pop("force_outpaint", None) - generation_parameters.pop("infill_method", None) - elif actual_generation_mode == "txt2img": - generation_parameters["height"] = original_bounding_box["height"] - generation_parameters["width"] = original_bounding_box["width"] - generation_parameters.pop("strength", None) - generation_parameters.pop("fit", None) - generation_parameters.pop("init_img", None) - generation_parameters.pop("init_mask", None) - generation_parameters.pop("seam_size", None) - generation_parameters.pop("seam_blur", None) - generation_parameters.pop("seam_strength", None) - generation_parameters.pop("seam_steps", None) - generation_parameters.pop("tile_size", None) - generation_parameters.pop("force_outpaint", None) - generation_parameters.pop("infill_method", None) - - elif generation_parameters["generation_mode"] == "img2img": - init_img_url = generation_parameters["init_img"] - init_img_path = self.get_image_path_from_url(init_img_url) - generation_parameters["init_img"] = Image.open(init_img_path).convert("RGB") - - def image_progress(intermediate_state: PipelineIntermediateState): - if self.canceled.is_set(): - raise CanceledException - - nonlocal step_index - nonlocal generation_parameters - nonlocal progress - - step = intermediate_state.step - if intermediate_state.predicted_original is not None: - # Some schedulers report not only the noisy latents at the current timestep, - # but also their estimate so far of what the de-noised latents will be. - sample = intermediate_state.predicted_original - else: - sample = intermediate_state.latents - - generation_messages = { - "txt2img": "common.statusGeneratingTextToImage", - "img2img": "common.statusGeneratingImageToImage", - "inpainting": "common.statusGeneratingInpainting", - "outpainting": "common.statusGeneratingOutpainting", - } - - progress.set_current_step(step + 1) - progress.set_current_status(f"{generation_messages[actual_generation_mode]}") - progress.set_current_status_has_steps(True) - - if ( - generation_parameters["progress_images"] - and step % generation_parameters["save_intermediates"] == 0 - and step < generation_parameters["steps"] - 1 - ): - image = self.generate.sample_to_image(sample) - metadata = self.parameters_to_generated_image_metadata(generation_parameters) - command = parameters_to_command(generation_parameters) - - (width, height) = image.size - - path = self.save_result_image( - image, - command, - metadata, - self.intermediate_path, - step_index=step_index, - postprocessing=False, - ) - - step_index += 1 - self.socketio.emit( - "intermediateResult", - { - "url": self.get_url_from_image_path(path), - "mtime": os.path.getmtime(path), - "metadata": metadata, - "width": width, - "height": height, - "generationMode": generation_parameters["generation_mode"], - "boundingBox": original_bounding_box, - }, - ) - - if generation_parameters["progress_latents"]: - image = self.generate.sample_to_lowres_estimated_image(sample) - (width, height) = image.size - width *= 8 - height *= 8 - img_base64 = image_to_dataURL(image, image_format="JPEG") - self.socketio.emit( - "intermediateResult", - { - "url": img_base64, - "isBase64": True, - "mtime": 0, - "metadata": {}, - "width": width, - "height": height, - "generationMode": generation_parameters["generation_mode"], - "boundingBox": original_bounding_box, - }, - ) - - self.socketio.emit("progressUpdate", progress.to_formatted_dict()) - eventlet.sleep(0) - - def image_done(image, seed, first_seed, attention_maps_image=None): - if self.canceled.is_set(): - raise CanceledException - - nonlocal generation_parameters - nonlocal esrgan_parameters - nonlocal facetool_parameters - nonlocal progress - - nonlocal prior_variations - - """ - Tidy up after generation based on generation_mode - """ - # paste the inpainting image back onto the original - if generation_parameters["generation_mode"] == "inpainting": - image = paste_image_into_bounding_box( - Image.open(init_img_path), - image, - **generation_parameters["bounding_box"], - ) - - progress.set_current_status("common.statusGenerationComplete") - - self.socketio.emit("progressUpdate", progress.to_formatted_dict()) - eventlet.sleep(0) - - all_parameters = generation_parameters - postprocessing = False - - if "variation_amount" in all_parameters and all_parameters["variation_amount"] > 0: - first_seed = first_seed or seed - this_variation = [[seed, all_parameters["variation_amount"]]] - all_parameters["with_variations"] = prior_variations + this_variation - all_parameters["seed"] = first_seed - elif "with_variations" in all_parameters: - all_parameters["seed"] = first_seed - else: - all_parameters["seed"] = seed - - if self.canceled.is_set(): - raise CanceledException - - if esrgan_parameters: - progress.set_current_status("common.statusUpscaling") - progress.set_current_status_has_steps(False) - self.socketio.emit("progressUpdate", progress.to_formatted_dict()) - eventlet.sleep(0) - - image = self.esrgan.process( - image=image, - upsampler_scale=esrgan_parameters["level"], - denoise_str=esrgan_parameters["denoise_str"], - strength=esrgan_parameters["strength"], - seed=seed, - ) - - postprocessing = True - all_parameters["upscale"] = [ - esrgan_parameters["level"], - esrgan_parameters["denoise_str"], - esrgan_parameters["strength"], - ] - - if self.canceled.is_set(): - raise CanceledException - - if facetool_parameters: - if facetool_parameters["type"] == "gfpgan": - progress.set_current_status("common.statusRestoringFacesGFPGAN") - elif facetool_parameters["type"] == "codeformer": - progress.set_current_status("common.statusRestoringFacesCodeFormer") - - progress.set_current_status_has_steps(False) - self.socketio.emit("progressUpdate", progress.to_formatted_dict()) - eventlet.sleep(0) - - if facetool_parameters["type"] == "gfpgan": - image = self.gfpgan.process( - image=image, - strength=facetool_parameters["strength"], - seed=seed, - ) - elif facetool_parameters["type"] == "codeformer": - image = self.codeformer.process( - image=image, - strength=facetool_parameters["strength"], - fidelity=facetool_parameters["codeformer_fidelity"], - seed=seed, - device="cpu" if str(self.generate.device) == "mps" else self.generate.device, - ) - all_parameters["codeformer_fidelity"] = facetool_parameters["codeformer_fidelity"] - - postprocessing = True - all_parameters["facetool_strength"] = facetool_parameters["strength"] - all_parameters["facetool_type"] = facetool_parameters["type"] - - progress.set_current_status("common.statusSavingImage") - self.socketio.emit("progressUpdate", progress.to_formatted_dict()) - eventlet.sleep(0) - - # restore the stashed URLS and discard the paths, we are about to send the result to client - all_parameters["init_img"] = ( - init_img_url if generation_parameters["generation_mode"] == "img2img" else "" - ) - - if "init_mask" in all_parameters: - # TODO: store the mask in metadata - all_parameters["init_mask"] = "" - - if generation_parameters["generation_mode"] == "unifiedCanvas": - all_parameters["bounding_box"] = original_bounding_box - - metadata = self.parameters_to_generated_image_metadata(all_parameters) - - command = parameters_to_command(all_parameters) - - (width, height) = image.size - - generated_image_outdir = ( - self.result_path - if generation_parameters["generation_mode"] in ["txt2img", "img2img"] - else self.temp_image_path - ) - - path = self.save_result_image( - image, - command, - metadata, - generated_image_outdir, - postprocessing=postprocessing, - ) - - thumbnail_path = save_thumbnail(image, os.path.basename(path), self.thumbnail_image_path) - - logger.info(f'Image generated: "{path}"\n') - self.write_log_message(f'[Generated] "{path}": {command}') - - if progress.total_iterations > progress.current_iteration: - progress.set_current_step(1) - progress.set_current_status("common.statusIterationComplete") - progress.set_current_status_has_steps(False) - else: - progress.mark_complete() - - self.socketio.emit("progressUpdate", progress.to_formatted_dict()) - eventlet.sleep(0) - - parsed_prompt, _ = get_prompt_structure(generation_parameters["prompt"]) - with self.generate.model_context as model: - tokens = ( - None - if type(parsed_prompt) is Blend - else get_tokens_for_prompt_object(model.tokenizer, parsed_prompt) - ) - attention_maps_image_base64_url = ( - None if attention_maps_image is None else image_to_dataURL(attention_maps_image) - ) - - self.socketio.emit( - "generationResult", - { - "url": self.get_url_from_image_path(path), - "thumbnail": self.get_url_from_image_path(thumbnail_path), - "mtime": os.path.getmtime(path), - "metadata": metadata, - "dreamPrompt": command, - "width": width, - "height": height, - "boundingBox": original_bounding_box, - "generationMode": generation_parameters["generation_mode"], - "attentionMaps": attention_maps_image_base64_url, - "tokens": tokens, - }, - ) - eventlet.sleep(0) - - progress.set_current_iteration(progress.current_iteration + 1) - - self.generate.prompt2image( - **generation_parameters, - step_callback=image_progress, - image_callback=image_done, - ) - - except KeyboardInterrupt: - # Clear the CUDA cache on an exception - self.empty_cuda_cache() - self.socketio.emit("processingCanceled") - raise - except CanceledException: - # Clear the CUDA cache on an exception - self.empty_cuda_cache() - self.socketio.emit("processingCanceled") - pass - except Exception as e: - # Clear the CUDA cache on an exception - self.empty_cuda_cache() - logger.error(e) - self.handle_exceptions(e) - - def empty_cuda_cache(self): - if self.generate.device.type == "cuda": - import torch.cuda - - torch.cuda.empty_cache() - - def parameters_to_generated_image_metadata(self, parameters): - try: - # top-level metadata minus `image` or `images` - metadata = self.get_system_config() - # remove any image keys not mentioned in RFC #266 - rfc266_img_fields = [ - "type", - "postprocessing", - "sampler", - "prompt", - "seed", - "variations", - "steps", - "cfg_scale", - "threshold", - "perlin", - "step_number", - "width", - "height", - "extra", - "seamless", - "hires_fix", - ] - - rfc_dict = {} - - for item in parameters.items(): - key, value = item - if key in rfc266_img_fields: - rfc_dict[key] = value - - postprocessing = [] - - rfc_dict["type"] = parameters["generation_mode"] - - # 'postprocessing' is either null or an - if "facetool_strength" in parameters: - facetool_parameters = { - "type": str(parameters["facetool_type"]), - "strength": float(parameters["facetool_strength"]), - } - - if parameters["facetool_type"] == "codeformer": - facetool_parameters["fidelity"] = float(parameters["codeformer_fidelity"]) - - postprocessing.append(facetool_parameters) - - if "upscale" in parameters: - postprocessing.append( - { - "type": "esrgan", - "scale": int(parameters["upscale"][0]), - "denoise_str": int(parameters["upscale"][1]), - "strength": float(parameters["upscale"][2]), - } - ) - - rfc_dict["postprocessing"] = postprocessing if len(postprocessing) > 0 else None - - # semantic drift - rfc_dict["sampler"] = parameters["sampler_name"] - - # 'variations' should always exist and be an array, empty or consisting of {'seed': seed, 'weight': weight} pairs - variations = [] - - if "with_variations" in parameters: - variations = [{"seed": x[0], "weight": x[1]} for x in parameters["with_variations"]] - - rfc_dict["variations"] = variations - - if rfc_dict["type"] == "img2img": - rfc_dict["strength"] = parameters["strength"] - rfc_dict["fit"] = parameters["fit"] # TODO: Noncompliant - rfc_dict["orig_hash"] = calculate_init_img_hash(self.get_image_path_from_url(parameters["init_img"])) - rfc_dict["init_image_path"] = parameters["init_img"] # TODO: Noncompliant - - metadata["image"] = rfc_dict - - return metadata - - except Exception as e: - self.handle_exceptions(e) - - def parameters_to_post_processed_image_metadata(self, parameters, original_image_path): - try: - current_metadata = retrieve_metadata(original_image_path)["sd-metadata"] - postprocessing_metadata = {} - - """ - if we don't have an original image metadata to reconstruct, - need to record the original image and its hash - """ - if "image" not in current_metadata: - current_metadata["image"] = {} - - orig_hash = calculate_init_img_hash(self.get_image_path_from_url(original_image_path)) - - postprocessing_metadata["orig_path"] = (original_image_path,) - postprocessing_metadata["orig_hash"] = orig_hash - - if parameters["type"] == "esrgan": - postprocessing_metadata["type"] = "esrgan" - postprocessing_metadata["scale"] = parameters["upscale"][0] - postprocessing_metadata["denoise_str"] = parameters["upscale"][1] - postprocessing_metadata["strength"] = parameters["upscale"][2] - elif parameters["type"] == "gfpgan": - postprocessing_metadata["type"] = "gfpgan" - postprocessing_metadata["strength"] = parameters["facetool_strength"] - elif parameters["type"] == "codeformer": - postprocessing_metadata["type"] = "codeformer" - postprocessing_metadata["strength"] = parameters["facetool_strength"] - postprocessing_metadata["fidelity"] = parameters["codeformer_fidelity"] - - else: - raise TypeError(f"Invalid type: {parameters['type']}") - - if "postprocessing" in current_metadata["image"] and isinstance( - current_metadata["image"]["postprocessing"], list - ): - current_metadata["image"]["postprocessing"].append(postprocessing_metadata) - else: - current_metadata["image"]["postprocessing"] = [postprocessing_metadata] - - return current_metadata - - except Exception as e: - self.handle_exceptions(e) - - def save_result_image( - self, - image, - command, - metadata, - output_dir, - step_index=None, - postprocessing=False, - ): - try: - pngwriter = PngWriter(output_dir) - - number_prefix = pngwriter.unique_prefix() - - uuid = uuid4().hex - truncated_uuid = uuid[:8] - - seed = "unknown_seed" - - if "image" in metadata: - if "seed" in metadata["image"]: - seed = metadata["image"]["seed"] - - filename = f"{number_prefix}.{truncated_uuid}.{seed}" - - if step_index: - filename += f".{step_index}" - if postprocessing: - filename += ".postprocessed" - - filename += ".png" - - path = pngwriter.save_image_and_prompt_to_png( - image=image, - dream_prompt=command, - metadata=metadata, - name=filename, - ) - - return os.path.abspath(path) - - except Exception as e: - self.handle_exceptions(e) - - def make_unique_init_image_filename(self, name): - try: - uuid = uuid4().hex - split = os.path.splitext(name) - name = f"{split[0]}.{uuid}{split[1]}" - return name - except Exception as e: - self.handle_exceptions(e) - - def calculate_real_steps(self, steps, strength, has_init_image): - import math - - return math.floor(strength * steps) if has_init_image else steps - - def write_log_message(self, message): - """Logs the filename and parameters used to generate or process that image to log file""" - try: - message = f"{message}\n" - with open(self.log_path, "a", encoding="utf-8") as file: - file.writelines(message) - - except Exception as e: - self.handle_exceptions(e) - - def get_image_path_from_url(self, url): - """Given a url to an image used by the client, returns the absolute file path to that image""" - try: - if "init-images" in url: - return os.path.abspath(os.path.join(self.init_image_path, os.path.basename(url))) - elif "mask-images" in url: - return os.path.abspath(os.path.join(self.mask_image_path, os.path.basename(url))) - elif "intermediates" in url: - return os.path.abspath(os.path.join(self.intermediate_path, os.path.basename(url))) - elif "temp-images" in url: - return os.path.abspath(os.path.join(self.temp_image_path, os.path.basename(url))) - elif "thumbnails" in url: - return os.path.abspath(os.path.join(self.thumbnail_image_path, os.path.basename(url))) - else: - return os.path.abspath(os.path.join(self.result_path, os.path.basename(url))) - except Exception as e: - self.handle_exceptions(e) - - def get_url_from_image_path(self, path): - """Given an absolute file path to an image, returns the URL that the client can use to load the image""" - try: - if "init-images" in path: - return os.path.join(self.init_image_url, os.path.basename(path)) - elif "mask-images" in path: - return os.path.join(self.mask_image_url, os.path.basename(path)) - elif "intermediates" in path: - return os.path.join(self.intermediate_url, os.path.basename(path)) - elif "temp-images" in path: - return os.path.join(self.temp_image_url, os.path.basename(path)) - elif "thumbnails" in path: - return os.path.join(self.thumbnail_image_url, os.path.basename(path)) - else: - return os.path.join(self.result_url, os.path.basename(path)) - except Exception as e: - self.handle_exceptions(e) - - def save_file_unique_uuid_name(self, bytes, name, path): - try: - uuid = uuid4().hex - truncated_uuid = uuid[:8] - - split = os.path.splitext(name) - name = f"{split[0]}.{truncated_uuid}{split[1]}" - - file_path = os.path.join(path, name) - - os.makedirs(os.path.dirname(file_path), exist_ok=True) - - newFile = open(file_path, "wb") - newFile.write(bytes) - - return file_path - except Exception as e: - self.handle_exceptions(e) - - def handle_exceptions(self, exception, emit_key: str = "error"): - self.socketio.emit(emit_key, {"message": (str(exception))}) - print("\n") - traceback.print_exc() - print("\n") - - -class Progress: - def __init__(self, generation_parameters=None): - self.current_step = 1 - self.total_steps = ( - self._calculate_real_steps( - steps=generation_parameters["steps"], - strength=generation_parameters["strength"] if "strength" in generation_parameters else None, - has_init_image="init_img" in generation_parameters, - ) - if generation_parameters - else 1 - ) - self.current_iteration = 1 - self.total_iterations = generation_parameters["iterations"] if generation_parameters else 1 - self.current_status = "common.statusPreparing" - self.is_processing = True - self.current_status_has_steps = False - self.has_error = False - - def set_current_step(self, current_step): - self.current_step = current_step - - def set_total_steps(self, total_steps): - self.total_steps = total_steps - - def set_current_iteration(self, current_iteration): - self.current_iteration = current_iteration - - def set_total_iterations(self, total_iterations): - self.total_iterations = total_iterations - - def set_current_status(self, current_status): - self.current_status = current_status - - def set_is_processing(self, is_processing): - self.is_processing = is_processing - - def set_current_status_has_steps(self, current_status_has_steps): - self.current_status_has_steps = current_status_has_steps - - def set_has_error(self, has_error): - self.has_error = has_error - - def mark_complete(self): - self.current_status = "common.statusProcessingComplete" - self.current_step = 0 - self.total_steps = 0 - self.current_iteration = 0 - self.total_iterations = 0 - self.is_processing = False - - def to_formatted_dict( - self, - ): - return { - "currentStep": self.current_step, - "totalSteps": self.total_steps, - "currentIteration": self.current_iteration, - "totalIterations": self.total_iterations, - "currentStatus": self.current_status, - "isProcessing": self.is_processing, - "currentStatusHasSteps": self.current_status_has_steps, - "hasError": self.has_error, - } - - def _calculate_real_steps(self, steps, strength, has_init_image): - return math.floor(strength * steps) if has_init_image else steps - - -class CanceledException(Exception): - pass - - -def copy_image_from_bounding_box(image: ImageType, x: int, y: int, width: int, height: int) -> ImageType: - """ - Returns a copy an image, cropped to a bounding box. - """ - with image as im: - bounds = (x, y, x + width, y + height) - im_cropped = im.crop(bounds) - return im_cropped - - -def dataURL_to_image(dataURL: str) -> ImageType: - """ - Converts a base64 image dataURL into an image. - The dataURL is split on the first comma. - """ - image = Image.open( - io.BytesIO( - base64.decodebytes( - bytes( - dataURL.split(",", 1)[1], - "utf-8", - ) - ) - ) - ) - return image - - -def image_to_dataURL(image: ImageType, image_format: str = "PNG") -> str: - """ - Converts an image into a base64 image dataURL. - """ - buffered = io.BytesIO() - image.save(buffered, format=image_format) - mime_type = Image.MIME.get(image_format.upper(), "image/" + image_format.lower()) - image_base64 = f"data:{mime_type};base64," + base64.b64encode(buffered.getvalue()).decode("UTF-8") - return image_base64 - - -def dataURL_to_bytes(dataURL: str) -> bytes: - """ - Converts a base64 image dataURL into bytes. - The dataURL is split on the first comma. - """ - return base64.decodebytes( - bytes( - dataURL.split(",", 1)[1], - "utf-8", - ) - ) - - -def paste_image_into_bounding_box( - recipient_image: ImageType, - donor_image: ImageType, - x: int, - y: int, - width: int, - height: int, -) -> ImageType: - """ - Pastes an image onto another with a bounding box. - """ - with recipient_image as im: - bounds = (x, y, x + width, y + height) - im.paste(donor_image, bounds) - return recipient_image - - -def save_thumbnail( - image: ImageType, - filename: str, - path: str, - size: int = 256, -) -> str: - """ - Saves a thumbnail of an image, returning its path. - """ - base_filename = os.path.splitext(filename)[0] - thumbnail_path = os.path.join(path, base_filename + ".webp") - - if os.path.exists(thumbnail_path): - return thumbnail_path - - thumbnail_width = size - thumbnail_height = round(size * (image.height / image.width)) - - image_copy = image.copy() - image_copy.thumbnail(size=(thumbnail_width, thumbnail_height)) - - image_copy.save(thumbnail_path, "WEBP") - - return thumbnail_path diff --git a/invokeai/backend/web/modules/create_cmd_parser.py b/invokeai/backend/web/modules/create_cmd_parser.py deleted file mode 100644 index 856522989b..0000000000 --- a/invokeai/backend/web/modules/create_cmd_parser.py +++ /dev/null @@ -1,56 +0,0 @@ -import argparse -import os - -from ...args import PRECISION_CHOICES - - -def create_cmd_parser(): - parser = argparse.ArgumentParser(description="InvokeAI web UI") - parser.add_argument( - "--host", - type=str, - help="The host to serve on", - default="localhost", - ) - parser.add_argument("--port", type=int, help="The port to serve on", default=9090) - parser.add_argument( - "--cors", - nargs="*", - type=str, - help="Additional allowed origins, comma-separated", - ) - parser.add_argument( - "--embedding_path", - type=str, - help="Path to a pre-trained embedding manager checkpoint - can only be set on command line", - ) - # TODO: Can't get flask to serve images from any dir (saving to the dir does work when specified) - # parser.add_argument( - # "--output_dir", - # default="outputs/", - # type=str, - # help="Directory for output images", - # ) - parser.add_argument( - "-v", - "--verbose", - action="store_true", - help="Enables verbose logging", - ) - parser.add_argument( - "--precision", - dest="precision", - type=str, - choices=PRECISION_CHOICES, - metavar="PRECISION", - help=f'Set model precision. Defaults to auto selected based on device. Options: {", ".join(PRECISION_CHOICES)}', - default="auto", - ) - parser.add_argument( - "--free_gpu_mem", - dest="free_gpu_mem", - action="store_true", - help="Force free gpu memory before final decoding", - ) - - return parser diff --git a/invokeai/backend/web/modules/get_canvas_generation_mode.py b/invokeai/backend/web/modules/get_canvas_generation_mode.py deleted file mode 100644 index 6d680016e7..0000000000 --- a/invokeai/backend/web/modules/get_canvas_generation_mode.py +++ /dev/null @@ -1,113 +0,0 @@ -from typing import Literal, Union - -from PIL import Image, ImageChops -from PIL.Image import Image as ImageType - - -# https://stackoverflow.com/questions/43864101/python-pil-check-if-image-is-transparent -def check_for_any_transparency(img: Union[ImageType, str]) -> bool: - if type(img) is str: - img = Image.open(str) - - if img.info.get("transparency", None) is not None: - return True - if img.mode == "P": - transparent = img.info.get("transparency", -1) - for _, index in img.getcolors(): - if index == transparent: - return True - elif img.mode == "RGBA": - extrema = img.getextrema() - if extrema[3][0] < 255: - return True - return False - - -def get_canvas_generation_mode( - init_img: Union[ImageType, str], init_mask: Union[ImageType, str] -) -> Literal["txt2img", "outpainting", "inpainting", "img2img",]: - if type(init_img) is str: - init_img = Image.open(init_img) - - if type(init_mask) is str: - init_mask = Image.open(init_mask) - - init_img = init_img.convert("RGBA") - - # Get alpha from init_img - init_img_alpha = init_img.split()[-1] - init_img_alpha_mask = init_img_alpha.convert("L") - init_img_has_transparency = check_for_any_transparency(init_img) - - if init_img_has_transparency: - init_img_is_fully_transparent = True if init_img_alpha_mask.getbbox() is None else False - - """ - Mask images are white in areas where no change should be made, black where changes - should be made. - """ - - # Fit the mask to init_img's size and convert it to greyscale - init_mask = init_mask.resize(init_img.size).convert("L") - - """ - PIL.Image.getbbox() returns the bounding box of non-zero areas of the image, so we first - invert the mask image so that masked areas are white and other areas black == zero. - getbbox() now tells us if the are any masked areas. - """ - init_mask_bbox = ImageChops.invert(init_mask).getbbox() - init_mask_exists = False if init_mask_bbox is None else True - - if init_img_has_transparency: - if init_img_is_fully_transparent: - return "txt2img" - else: - return "outpainting" - else: - if init_mask_exists: - return "inpainting" - else: - return "img2img" - - -def main(): - # Testing - init_img_opaque = "test_images/init-img_opaque.png" - init_img_partial_transparency = "test_images/init-img_partial_transparency.png" - init_img_full_transparency = "test_images/init-img_full_transparency.png" - init_mask_no_mask = "test_images/init-mask_no_mask.png" - init_mask_has_mask = "test_images/init-mask_has_mask.png" - - print( - "OPAQUE IMAGE, NO MASK, expect img2img, got ", - get_canvas_generation_mode(init_img_opaque, init_mask_no_mask), - ) - - print( - "IMAGE WITH TRANSPARENCY, NO MASK, expect outpainting, got ", - get_canvas_generation_mode(init_img_partial_transparency, init_mask_no_mask), - ) - - print( - "FULLY TRANSPARENT IMAGE NO MASK, expect txt2img, got ", - get_canvas_generation_mode(init_img_full_transparency, init_mask_no_mask), - ) - - print( - "OPAQUE IMAGE, WITH MASK, expect inpainting, got ", - get_canvas_generation_mode(init_img_opaque, init_mask_has_mask), - ) - - print( - "IMAGE WITH TRANSPARENCY, WITH MASK, expect outpainting, got ", - get_canvas_generation_mode(init_img_partial_transparency, init_mask_has_mask), - ) - - print( - "FULLY TRANSPARENT IMAGE WITH MASK, expect txt2img, got ", - get_canvas_generation_mode(init_img_full_transparency, init_mask_has_mask), - ) - - -if __name__ == "__main__": - main() diff --git a/invokeai/backend/web/modules/parameters.py b/invokeai/backend/web/modules/parameters.py deleted file mode 100644 index 8ab74adb92..0000000000 --- a/invokeai/backend/web/modules/parameters.py +++ /dev/null @@ -1,82 +0,0 @@ -import argparse - -from .parse_seed_weights import parse_seed_weights - -SAMPLER_CHOICES = [ - "ddim", - "ddpm", - "deis", - "lms", - "lms_k", - "pndm", - "heun", - "heun_k", - "euler", - "euler_k", - "euler_a", - "kdpm_2", - "kdpm_2_a", - "dpmpp_2s", - "dpmpp_2s_k", - "dpmpp_2m", - "dpmpp_2m_k", - "dpmpp_2m_sde", - "dpmpp_2m_sde_k", - "dpmpp_sde", - "dpmpp_sde_k", - "unipc", -] - - -def parameters_to_command(params): - """ - Converts dict of parameters into a `invoke.py` REPL command. - """ - - switches = list() - - if "prompt" in params: - switches.append(f'"{params["prompt"]}"') - if "steps" in params: - switches.append(f'-s {params["steps"]}') - if "seed" in params: - switches.append(f'-S {params["seed"]}') - if "width" in params: - switches.append(f'-W {params["width"]}') - if "height" in params: - switches.append(f'-H {params["height"]}') - if "cfg_scale" in params: - switches.append(f'-C {params["cfg_scale"]}') - if "sampler_name" in params: - switches.append(f'-A {params["sampler_name"]}') - if "seamless" in params and params["seamless"] == True: - switches.append(f"--seamless") - if "hires_fix" in params and params["hires_fix"] == True: - switches.append(f"--hires") - if "init_img" in params and len(params["init_img"]) > 0: - switches.append(f'-I {params["init_img"]}') - if "init_mask" in params and len(params["init_mask"]) > 0: - switches.append(f'-M {params["init_mask"]}') - if "init_color" in params and len(params["init_color"]) > 0: - switches.append(f'--init_color {params["init_color"]}') - if "strength" in params and "init_img" in params: - switches.append(f'-f {params["strength"]}') - if "fit" in params and params["fit"] == True: - switches.append(f"--fit") - if "facetool" in params: - switches.append(f'-ft {params["facetool"]}') - if "facetool_strength" in params and params["facetool_strength"]: - switches.append(f'-G {params["facetool_strength"]}') - elif "gfpgan_strength" in params and params["gfpgan_strength"]: - switches.append(f'-G {params["gfpgan_strength"]}') - if "codeformer_fidelity" in params: - switches.append(f'-cf {params["codeformer_fidelity"]}') - if "upscale" in params and params["upscale"]: - switches.append(f'-U {params["upscale"][0]} {params["upscale"][1]}') - if "variation_amount" in params and params["variation_amount"] > 0: - switches.append(f'-v {params["variation_amount"]}') - if "with_variations" in params: - seed_weight_pairs = ",".join(f"{seed}:{weight}" for seed, weight in params["with_variations"]) - switches.append(f"-V {seed_weight_pairs}") - - return " ".join(switches) diff --git a/invokeai/backend/web/modules/parse_seed_weights.py b/invokeai/backend/web/modules/parse_seed_weights.py deleted file mode 100644 index 7e15d4e166..0000000000 --- a/invokeai/backend/web/modules/parse_seed_weights.py +++ /dev/null @@ -1,47 +0,0 @@ -def parse_seed_weights(seed_weights): - """ - Accepts seed weights as string in "12345:0.1,23456:0.2,3456:0.3" format - Validates them - If valid: returns as [[12345, 0.1], [23456, 0.2], [3456, 0.3]] - If invalid: returns False - """ - - # Must be a string - if not isinstance(seed_weights, str): - return False - # String must not be empty - if len(seed_weights) == 0: - return False - - pairs = [] - - for pair in seed_weights.split(","): - split_values = pair.split(":") - - # Seed and weight are required - if len(split_values) != 2: - return False - - if len(split_values[0]) == 0 or len(split_values[1]) == 1: - return False - - # Try casting the seed to int and weight to float - try: - seed = int(split_values[0]) - weight = float(split_values[1]) - except ValueError: - return False - - # Seed must be 0 or above - if not seed >= 0: - return False - - # Weight must be between 0 and 1 - if not (weight >= 0 and weight <= 1): - return False - - # This pair is valid - pairs.append([seed, weight]) - - # All pairs are valid - return pairs diff --git a/invokeai/backend/web/modules/test_images/init-img_full_transparency.png b/invokeai/backend/web/modules/test_images/init-img_full_transparency.png deleted file mode 100644 index 6cdeada609..0000000000 Binary files a/invokeai/backend/web/modules/test_images/init-img_full_transparency.png and /dev/null differ diff --git a/invokeai/backend/web/modules/test_images/init-img_opaque.png b/invokeai/backend/web/modules/test_images/init-img_opaque.png deleted file mode 100644 index a45aec75ed..0000000000 Binary files a/invokeai/backend/web/modules/test_images/init-img_opaque.png and /dev/null differ diff --git a/invokeai/backend/web/modules/test_images/init-img_partial_transparency.png b/invokeai/backend/web/modules/test_images/init-img_partial_transparency.png deleted file mode 100644 index 348e59fc8a..0000000000 Binary files a/invokeai/backend/web/modules/test_images/init-img_partial_transparency.png and /dev/null differ diff --git a/invokeai/backend/web/modules/test_images/init-mask_has_mask.png b/invokeai/backend/web/modules/test_images/init-mask_has_mask.png deleted file mode 100644 index 88fe072950..0000000000 Binary files a/invokeai/backend/web/modules/test_images/init-mask_has_mask.png and /dev/null differ diff --git a/invokeai/backend/web/modules/test_images/init-mask_no_mask.png b/invokeai/backend/web/modules/test_images/init-mask_no_mask.png deleted file mode 100644 index 2aecd3ea7d..0000000000 Binary files a/invokeai/backend/web/modules/test_images/init-mask_no_mask.png and /dev/null differ diff --git a/invokeai/frontend/CLI/__init__.py b/invokeai/frontend/CLI/__init__.py index 7e48534cb9..f8864bbe66 100644 --- a/invokeai/frontend/CLI/__init__.py +++ b/invokeai/frontend/CLI/__init__.py @@ -1,4 +1,4 @@ """ Initialization file for invokeai.frontend.CLI """ -from .CLI import main as invokeai_command_line_interface +from .CLI import main as invokeai_command_line_interface # noqa: F401 diff --git a/invokeai/frontend/install/__init__.py b/invokeai/frontend/install/__init__.py index fb8cdff1b3..2a248eb49f 100644 --- a/invokeai/frontend/install/__init__.py +++ b/invokeai/frontend/install/__init__.py @@ -1,6 +1,3 @@ """ Initialization file for invokeai.frontend.config """ -from .invokeai_configure import main as invokeai_configure -from .invokeai_update import main as invokeai_update -from .model_install import main as invokeai_model_install diff --git a/invokeai/frontend/install/import_images.py b/invokeai/frontend/install/import_images.py new file mode 100644 index 0000000000..1f68f23607 --- /dev/null +++ b/invokeai/frontend/install/import_images.py @@ -0,0 +1,795 @@ +# Copyright (c) 2023 - The InvokeAI Team +# Primary Author: David Lovell (github @f412design, discord @techjedi) +# co-author, minor tweaks - Lincoln Stein + +# pylint: disable=line-too-long +# pylint: disable=broad-exception-caught +"""Script to import images into the new database system for 3.0.0""" + +import os +import datetime +import shutil +import locale +import sqlite3 +import json +import glob +import re +import uuid +import yaml +import PIL +import PIL.ImageOps +import PIL.PngImagePlugin + +from pathlib import Path +from prompt_toolkit import prompt +from prompt_toolkit.shortcuts import message_dialog +from prompt_toolkit.completion import PathCompleter +from prompt_toolkit.key_binding import KeyBindings + +from invokeai.app.services.config import InvokeAIAppConfig + +app_config = InvokeAIAppConfig.get_config() + +bindings = KeyBindings() + + +@bindings.add("c-c") +def _(event): + raise KeyboardInterrupt + + +# release notes +# "Use All" with size dimensions not selectable in the UI will not load dimensions + + +class Config: + """Configuration loader.""" + + def __init__(self): + pass + + TIMESTAMP_STRING = datetime.datetime.utcnow().strftime("%Y%m%dT%H%M%SZ") + + INVOKE_DIRNAME = "invokeai" + YAML_FILENAME = "invokeai.yaml" + DATABASE_FILENAME = "invokeai.db" + + database_path = None + database_backup_dir = None + outputs_path = None + thumbnail_path = None + + def find_and_load(self): + """find the yaml config file and load""" + root = app_config.root_path + if not self.confirm_and_load(os.path.abspath(root)): + print("\r\nSpecify custom database and outputs paths:") + self.confirm_and_load_from_user() + + self.database_backup_dir = os.path.join(os.path.dirname(self.database_path), "backup") + self.thumbnail_path = os.path.join(self.outputs_path, "thumbnails") + + def confirm_and_load(self, invoke_root): + """Validates a yaml path exists, confirms the user wants to use it and loads config.""" + yaml_path = os.path.join(invoke_root, self.YAML_FILENAME) + if os.path.exists(yaml_path): + db_dir, outdir = self.load_paths_from_yaml(yaml_path) + if os.path.isabs(db_dir): + database_path = os.path.join(db_dir, self.DATABASE_FILENAME) + else: + database_path = os.path.join(invoke_root, db_dir, self.DATABASE_FILENAME) + + if os.path.isabs(outdir): + outputs_path = os.path.join(outdir, "images") + else: + outputs_path = os.path.join(invoke_root, outdir, "images") + + db_exists = os.path.exists(database_path) + outdir_exists = os.path.exists(outputs_path) + + text = f"Found {self.YAML_FILENAME} file at {yaml_path}:" + text += f"\n Database : {database_path}" + text += f"\n Outputs : {outputs_path}" + text += "\n\nUse these paths for import (yes) or choose different ones (no) [Yn]: " + + if db_exists and outdir_exists: + if (prompt(text).strip() or "Y").upper().startswith("Y"): + self.database_path = database_path + self.outputs_path = outputs_path + return True + else: + return False + else: + print(" Invalid: One or more paths in this config did not exist and cannot be used.") + + else: + message_dialog( + title="Path not found", + text=f"Auto-discovery of configuration failed! Could not find ({yaml_path}), Custom paths can be specified.", + ).run() + return False + + def confirm_and_load_from_user(self): + default = "" + while True: + database_path = os.path.expanduser( + prompt( + "Database: Specify absolute path to the database to import into: ", + completer=PathCompleter( + expanduser=True, file_filter=lambda x: Path(x).is_dir() or x.endswith((".db")) + ), + default=default, + ) + ) + if database_path.endswith(".db") and os.path.isabs(database_path) and os.path.exists(database_path): + break + default = database_path + "/" if Path(database_path).is_dir() else database_path + + default = "" + while True: + outputs_path = os.path.expanduser( + prompt( + "Outputs: Specify absolute path to outputs/images directory to import into: ", + completer=PathCompleter(expanduser=True, only_directories=True), + default=default, + ) + ) + + if outputs_path.endswith("images") and os.path.isabs(outputs_path) and os.path.exists(outputs_path): + break + default = outputs_path + "/" if Path(outputs_path).is_dir() else outputs_path + + self.database_path = database_path + self.outputs_path = outputs_path + + return + + def load_paths_from_yaml(self, yaml_path): + """Load an Invoke AI yaml file and get the database and outputs paths.""" + try: + with open(yaml_path, "rt", encoding=locale.getpreferredencoding()) as file: + yamlinfo = yaml.safe_load(file) + db_dir = yamlinfo.get("InvokeAI", {}).get("Paths", {}).get("db_dir", None) + outdir = yamlinfo.get("InvokeAI", {}).get("Paths", {}).get("outdir", None) + return db_dir, outdir + except Exception: + print(f"Failed to load paths from yaml file! {yaml_path}!") + return None, None + + +class ImportStats: + """DTO for tracking work progress.""" + + def __init__(self): + pass + + time_start = datetime.datetime.utcnow() + count_source_files = 0 + count_skipped_file_exists = 0 + count_skipped_db_exists = 0 + count_imported = 0 + count_imported_by_version = {} + count_file_errors = 0 + + @staticmethod + def get_elapsed_time_string(): + """Get a friendly time string for the time elapsed since processing start.""" + time_now = datetime.datetime.utcnow() + total_seconds = (time_now - ImportStats.time_start).total_seconds() + hours = int((total_seconds) / 3600) + minutes = int(((total_seconds) % 3600) / 60) + seconds = total_seconds % 60 + out_str = f"{hours} hour(s) -" if hours > 0 else "" + out_str += f"{minutes} minute(s) -" if minutes > 0 else "" + out_str += f"{seconds:.2f} second(s)" + return out_str + + +class InvokeAIMetadata: + """DTO for core Invoke AI generation properties parsed from metadata.""" + + def __init__(self): + pass + + def __str__(self): + formatted_str = f"{self.generation_mode}~{self.steps}~{self.cfg_scale}~{self.model_name}~{self.scheduler}~{self.seed}~{self.width}~{self.height}~{self.rand_device}~{self.strength}~{self.init_image}" + formatted_str += f"\r\npositive_prompt: {self.positive_prompt}" + formatted_str += f"\r\nnegative_prompt: {self.negative_prompt}" + return formatted_str + + generation_mode = None + steps = None + cfg_scale = None + model_name = None + scheduler = None + seed = None + width = None + height = None + rand_device = None + strength = None + init_image = None + positive_prompt = None + negative_prompt = None + imported_app_version = None + + def to_json(self): + """Convert the active instance to json format.""" + prop_dict = {} + prop_dict["generation_mode"] = self.generation_mode + # dont render prompt nodes if neither are set to avoid the ui thinking it can set them + # if at least one exists, render them both, but use empty string instead of None if one of them is empty + # this allows the field that is empty to actually be cleared byt he UI instead of leaving the previous value + if self.positive_prompt or self.negative_prompt: + prop_dict["positive_prompt"] = "" if self.positive_prompt is None else self.positive_prompt + prop_dict["negative_prompt"] = "" if self.negative_prompt is None else self.negative_prompt + prop_dict["width"] = self.width + prop_dict["height"] = self.height + # only render seed if it has a value to avoid ui thinking it can set this and then error + if self.seed: + prop_dict["seed"] = self.seed + prop_dict["rand_device"] = self.rand_device + prop_dict["cfg_scale"] = self.cfg_scale + prop_dict["steps"] = self.steps + prop_dict["scheduler"] = self.scheduler + prop_dict["clip_skip"] = 0 + prop_dict["model"] = {} + prop_dict["model"]["model_name"] = self.model_name + prop_dict["model"]["base_model"] = None + prop_dict["controlnets"] = [] + prop_dict["loras"] = [] + prop_dict["vae"] = None + prop_dict["strength"] = self.strength + prop_dict["init_image"] = self.init_image + prop_dict["positive_style_prompt"] = None + prop_dict["negative_style_prompt"] = None + prop_dict["refiner_model"] = None + prop_dict["refiner_cfg_scale"] = None + prop_dict["refiner_steps"] = None + prop_dict["refiner_scheduler"] = None + prop_dict["refiner_aesthetic_store"] = None + prop_dict["refiner_start"] = None + prop_dict["imported_app_version"] = self.imported_app_version + + return json.dumps(prop_dict) + + +class InvokeAIMetadataParser: + """Parses strings with json data to find Invoke AI core metadata properties.""" + + def __init__(self): + pass + + def parse_meta_tag_dream(self, dream_string): + """Take as input an png metadata json node for the 'dream' field variant from prior to 1.15""" + props = InvokeAIMetadata() + + props.imported_app_version = "pre1.15" + seed_match = re.search("-S\\s*(\\d+)", dream_string) + if seed_match is not None: + try: + props.seed = int(seed_match[1]) + except ValueError: + props.seed = None + raw_prompt = re.sub("(-S\\s*\\d+)", "", dream_string) + else: + raw_prompt = dream_string + + pos_prompt, neg_prompt = self.split_prompt(raw_prompt) + + props.positive_prompt = pos_prompt + props.negative_prompt = neg_prompt + + return props + + def parse_meta_tag_sd_metadata(self, tag_value): + """Take as input an png metadata json node for the 'sd-metadata' field variant from 1.15 through 2.3.5 post 2""" + props = InvokeAIMetadata() + + props.imported_app_version = tag_value.get("app_version") + props.model_name = tag_value.get("model_weights") + img_node = tag_value.get("image") + if img_node is not None: + props.generation_mode = img_node.get("type") + props.width = img_node.get("width") + props.height = img_node.get("height") + props.seed = img_node.get("seed") + props.rand_device = "cuda" # hardcoded since all generations pre 3.0 used cuda random noise instead of cpu + props.cfg_scale = img_node.get("cfg_scale") + props.steps = img_node.get("steps") + props.scheduler = self.map_scheduler(img_node.get("sampler")) + props.strength = img_node.get("strength") + if props.strength is None: + props.strength = img_node.get("strength_steps") # try second name for this property + props.init_image = img_node.get("init_image_path") + if props.init_image is None: # try second name for this property + props.init_image = img_node.get("init_img") + # remove the path info from init_image so if we move the init image, it will be correctly relative in the new location + if props.init_image is not None: + props.init_image = os.path.basename(props.init_image) + raw_prompt = img_node.get("prompt") + if isinstance(raw_prompt, list): + raw_prompt = raw_prompt[0].get("prompt") + + props.positive_prompt, props.negative_prompt = self.split_prompt(raw_prompt) + + return props + + def parse_meta_tag_invokeai(self, tag_value): + """Take as input an png metadata json node for the 'invokeai' field variant from 3.0.0 beta 1 through 5""" + props = InvokeAIMetadata() + + props.imported_app_version = "3.0.0 or later" + props.generation_mode = tag_value.get("type") + if props.generation_mode is not None: + props.generation_mode = props.generation_mode.replace("t2l", "txt2img").replace("l2l", "img2img") + + props.width = tag_value.get("width") + props.height = tag_value.get("height") + props.seed = tag_value.get("seed") + props.cfg_scale = tag_value.get("cfg_scale") + props.steps = tag_value.get("steps") + props.scheduler = tag_value.get("scheduler") + props.strength = tag_value.get("strength") + props.positive_prompt = tag_value.get("positive_conditioning") + props.negative_prompt = tag_value.get("negative_conditioning") + + return props + + def map_scheduler(self, old_scheduler): + """Convert the legacy sampler names to matching 3.0 schedulers""" + if old_scheduler is None: + return None + + match (old_scheduler): + case "ddim": + return "ddim" + case "plms": + return "pnmd" + case "k_lms": + return "lms" + case "k_dpm_2": + return "kdpm_2" + case "k_dpm_2_a": + return "kdpm_2_a" + case "dpmpp_2": + return "dpmpp_2s" + case "k_dpmpp_2": + return "dpmpp_2m" + case "k_dpmpp_2_a": + return None # invalid, in 2.3.x, selecting this sample would just fallback to last run or plms if new session + case "k_euler": + return "euler" + case "k_euler_a": + return "euler_a" + case "k_heun": + return "heun" + return None + + def split_prompt(self, raw_prompt: str): + """Split the unified prompt strings by extracting all negative prompt blocks out into the negative prompt.""" + if raw_prompt is None: + return "", "" + raw_prompt_search = raw_prompt.replace("\r", "").replace("\n", "") + matches = re.findall(r"\[(.+?)\]", raw_prompt_search) + if len(matches) > 0: + negative_prompt = "" + if len(matches) == 1: + negative_prompt = matches[0].strip().strip(",") + else: + for match in matches: + negative_prompt += f"({match.strip().strip(',')})" + positive_prompt = re.sub(r"(\[.+?\])", "", raw_prompt_search).strip() + else: + positive_prompt = raw_prompt_search.strip() + negative_prompt = "" + + return positive_prompt, negative_prompt + + +class DatabaseMapper: + """Class to abstract database functionality.""" + + def __init__(self, database_path, database_backup_dir): + self.database_path = database_path + self.database_backup_dir = database_backup_dir + self.connection = None + self.cursor = None + + def connect(self): + """Open connection to the database.""" + self.connection = sqlite3.connect(self.database_path) + self.cursor = self.connection.cursor() + + def get_board_names(self): + """Get a list of the current board names from the database.""" + sql_get_board_name = "SELECT board_name FROM boards" + self.cursor.execute(sql_get_board_name) + rows = self.cursor.fetchall() + return [row[0] for row in rows] + + def does_image_exist(self, image_name): + """Check database if a image name already exists and return a boolean.""" + sql_get_image_by_name = f"SELECT image_name FROM images WHERE image_name='{image_name}'" + self.cursor.execute(sql_get_image_by_name) + rows = self.cursor.fetchall() + return True if len(rows) > 0 else False + + def add_new_image_to_database(self, filename, width, height, metadata, modified_date_string): + """Add an image to the database.""" + sql_add_image = f"""INSERT INTO images (image_name, image_origin, image_category, width, height, session_id, node_id, metadata, is_intermediate, created_at, updated_at) +VALUES ('{filename}', 'internal', 'general', {width}, {height}, null, null, '{metadata}', 0, '{modified_date_string}', '{modified_date_string}')""" + self.cursor.execute(sql_add_image) + self.connection.commit() + + def get_board_id_with_create(self, board_name): + """Get the board id for supplied name, and create the board if one does not exist.""" + sql_find_board = f"SELECT board_id FROM boards WHERE board_name='{board_name}' COLLATE NOCASE" + self.cursor.execute(sql_find_board) + rows = self.cursor.fetchall() + if len(rows) > 0: + return rows[0][0] + else: + board_date_string = datetime.datetime.utcnow().date().isoformat() + new_board_id = str(uuid.uuid4()) + sql_insert_board = f"INSERT INTO boards (board_id, board_name, created_at, updated_at) VALUES ('{new_board_id}', '{board_name}', '{board_date_string}', '{board_date_string}')" + self.cursor.execute(sql_insert_board) + self.connection.commit() + return new_board_id + + def add_image_to_board(self, filename, board_id): + """Add an image mapping to a board.""" + add_datetime_str = datetime.datetime.utcnow().isoformat() + sql_add_image_to_board = f"""INSERT INTO board_images (board_id, image_name, created_at, updated_at) + VALUES ('{board_id}', '{filename}', '{add_datetime_str}', '{add_datetime_str}')""" + self.cursor.execute(sql_add_image_to_board) + self.connection.commit() + + def disconnect(self): + """Disconnect from the db, cleaning up connections and cursors.""" + if self.cursor is not None: + self.cursor.close() + if self.connection is not None: + self.connection.close() + + def backup(self, timestamp_string): + """Take a backup of the database.""" + if not os.path.exists(self.database_backup_dir): + print(f"Database backup directory {self.database_backup_dir} does not exist -> creating...", end="") + os.makedirs(self.database_backup_dir) + print("Done!") + database_backup_path = os.path.join(self.database_backup_dir, f"backup-{timestamp_string}-invokeai.db") + print(f"Making DB Backup at {database_backup_path}...", end="") + shutil.copy2(self.database_path, database_backup_path) + print("Done!") + + +class MediaImportProcessor: + """Containing class for script functionality.""" + + def __init__(self): + pass + + board_name_id_map = {} + + def get_import_file_list(self): + """Ask the user for the import folder and scan for the list of files to return.""" + while True: + default = "" + while True: + import_dir = os.path.expanduser( + prompt( + "Inputs: Specify absolute path containing InvokeAI .png images to import: ", + completer=PathCompleter(expanduser=True, only_directories=True), + default=default, + ) + ) + if len(import_dir) > 0 and Path(import_dir).is_dir(): + break + default = import_dir + + recurse_directories = ( + (prompt("Include files from subfolders recursively [yN]? ").strip() or "N").upper().startswith("N") + ) + if recurse_directories: + is_recurse = False + matching_file_list = glob.glob(import_dir + "/*.png", recursive=False) + else: + is_recurse = True + matching_file_list = glob.glob(import_dir + "/**/*.png", recursive=True) + + if len(matching_file_list) > 0: + return import_dir, is_recurse, matching_file_list + else: + print(f"The specific path {import_dir} exists, but does not contain .png files!") + + def get_file_details(self, filepath): + """Retrieve the embedded metedata fields and dimensions from an image file.""" + with PIL.Image.open(filepath) as img: + img.load() + png_width, png_height = img.size + img_info = img.info + return img_info, png_width, png_height + + def select_board_option(self, board_names, timestamp_string): + """Allow the user to choose how a board is selected for imported files.""" + while True: + print("\r\nOptions for board selection for imported images:") + print(f"1) Select an existing board name. (found {len(board_names)})") + print("2) Specify a board name to create/add to.") + print("3) Create/add to board named 'IMPORT'.") + print( + f"4) Create/add to board named 'IMPORT' with the current datetime string appended (.e.g IMPORT_{timestamp_string})." + ) + print( + "5) Create/add to board named 'IMPORT' with a the original file app_version appended (.e.g IMPORT_2.2.5)." + ) + input_option = input("Specify desired board option: ") + match (input_option): + case "1": + if len(board_names) < 1: + print("\r\nThere are no existing board names to choose from. Select another option!") + continue + board_name = self.select_item_from_list( + board_names, "board name", True, "Cancel, go back and choose a different board option." + ) + if board_name is not None: + return board_name + case "2": + while True: + board_name = input("Specify new/existing board name: ") + if board_name: + return board_name + case "3": + return "IMPORT" + case "4": + return f"IMPORT_{timestamp_string}" + case "5": + return "IMPORT_APPVERSION" + + def select_item_from_list(self, items, entity_name, allow_cancel, cancel_string): + """A general function to render a list of items to select in the console, prompt the user for a selection and ensure a valid entry is selected.""" + print(f"Select a {entity_name.lower()} from the following list:") + index = 1 + for item in items: + print(f"{index}) {item}") + index += 1 + if allow_cancel: + print(f"{index}) {cancel_string}") + while True: + try: + option_number = int(input("Specify number of selection: ")) + except ValueError: + continue + if allow_cancel and option_number == index: + return None + if option_number >= 1 and option_number <= len(items): + return items[option_number - 1] + + def import_image(self, filepath: str, board_name_option: str, db_mapper: DatabaseMapper, config: Config): + """Import a single file by its path""" + parser = InvokeAIMetadataParser() + file_name = os.path.basename(filepath) + file_destination_path = os.path.join(config.outputs_path, file_name) + + print("===============================================================================") + print(f"Importing {filepath}") + + # check destination to see if the file was previously imported + if os.path.exists(file_destination_path): + print("File already exists in the destination, skipping!") + ImportStats.count_skipped_file_exists += 1 + return + + # check if file name is already referenced in the database + if db_mapper.does_image_exist(file_name): + print("A reference to a file with this name already exists in the database, skipping!") + ImportStats.count_skipped_db_exists += 1 + return + + # load image info and dimensions + img_info, png_width, png_height = self.get_file_details(filepath) + + # parse metadata + destination_needs_meta_update = True + log_version_note = "(Unknown)" + if "invokeai_metadata" in img_info: + # for the latest, we will just re-emit the same json, no need to parse/modify + converted_field = None + latest_json_string = img_info.get("invokeai_metadata") + log_version_note = "3.0.0+" + destination_needs_meta_update = False + else: + if "sd-metadata" in img_info: + converted_field = parser.parse_meta_tag_sd_metadata(json.loads(img_info.get("sd-metadata"))) + elif "invokeai" in img_info: + converted_field = parser.parse_meta_tag_invokeai(json.loads(img_info.get("invokeai"))) + elif "dream" in img_info: + converted_field = parser.parse_meta_tag_dream(img_info.get("dream")) + elif "Dream" in img_info: + converted_field = parser.parse_meta_tag_dream(img_info.get("Dream")) + else: + converted_field = InvokeAIMetadata() + destination_needs_meta_update = False + print("File does not have metadata from known Invoke AI versions, add only, no update!") + + # use the loaded img dimensions if the metadata didnt have them + if converted_field.width is None: + converted_field.width = png_width + if converted_field.height is None: + converted_field.height = png_height + + log_version_note = converted_field.imported_app_version if converted_field else "NoVersion" + log_version_note = log_version_note or "NoVersion" + + latest_json_string = converted_field.to_json() + + print(f"From Invoke AI Version {log_version_note} with dimensions {png_width} x {png_height}.") + + # if metadata needs update, then update metdata and copy in one shot + if destination_needs_meta_update: + print("Updating metadata while copying...", end="") + self.update_file_metadata_while_copying( + filepath, file_destination_path, "invokeai_metadata", latest_json_string + ) + print("Done!") + else: + print("No metadata update necessary, copying only...", end="") + shutil.copy2(filepath, file_destination_path) + print("Done!") + + # create thumbnail + print("Creating thumbnail...", end="") + thumbnail_path = os.path.join(config.thumbnail_path, os.path.splitext(file_name)[0]) + ".webp" + thumbnail_size = 256, 256 + with PIL.Image.open(filepath) as source_image: + source_image.thumbnail(thumbnail_size) + source_image.save(thumbnail_path, "webp") + print("Done!") + + # finalize the dynamic board name if there is an APPVERSION token in it. + if converted_field is not None: + board_name = board_name_option.replace("APPVERSION", converted_field.imported_app_version or "NoVersion") + else: + board_name = board_name_option.replace("APPVERSION", "Latest") + + # maintain a map of alrady created/looked up ids to avoid DB queries + print("Finding/Creating board...", end="") + if board_name in self.board_name_id_map: + board_id = self.board_name_id_map[board_name] + else: + board_id = db_mapper.get_board_id_with_create(board_name) + self.board_name_id_map[board_name] = board_id + print("Done!") + + # add image to db + print("Adding image to database......", end="") + modified_time = datetime.datetime.utcfromtimestamp(os.path.getmtime(filepath)) + db_mapper.add_new_image_to_database(file_name, png_width, png_height, latest_json_string, modified_time) + print("Done!") + + # add image to board + print("Adding image to board......", end="") + db_mapper.add_image_to_board(file_name, board_id) + print("Done!") + + ImportStats.count_imported += 1 + if log_version_note in ImportStats.count_imported_by_version: + ImportStats.count_imported_by_version[log_version_note] += 1 + else: + ImportStats.count_imported_by_version[log_version_note] = 1 + + def update_file_metadata_while_copying(self, filepath, file_destination_path, tag_name, tag_value): + """Perform a metadata update with save to a new destination which accomplishes a copy while updating metadata.""" + with PIL.Image.open(filepath) as target_image: + existing_img_info = target_image.info + metadata = PIL.PngImagePlugin.PngInfo() + # re-add any existing invoke ai tags unless they are the one we are trying to add + for key in existing_img_info: + if key != tag_name and key in ("dream", "Dream", "sd-metadata", "invokeai", "invokeai_metadata"): + metadata.add_text(key, existing_img_info[key]) + metadata.add_text(tag_name, tag_value) + target_image.save(file_destination_path, pnginfo=metadata) + + def process(self): + """Begin main processing.""" + + print("===============================================================================") + print("This script will import images generated by earlier versions of") + print("InvokeAI into the currently installed root directory:") + print(f" {app_config.root_path}") + print("If this is not what you want to do, type ctrl-C now to cancel.") + + # load config + print("===============================================================================") + print("= Configuration & Settings") + + config = Config() + config.find_and_load() + db_mapper = DatabaseMapper(config.database_path, config.database_backup_dir) + db_mapper.connect() + + import_dir, is_recurse, import_file_list = self.get_import_file_list() + ImportStats.count_source_files = len(import_file_list) + + board_names = db_mapper.get_board_names() + board_name_option = self.select_board_option(board_names, config.TIMESTAMP_STRING) + + print("\r\n===============================================================================") + print("= Import Settings Confirmation") + + print() + print(f"Database File Path : {config.database_path}") + print(f"Outputs/Images Directory : {config.outputs_path}") + print(f"Import Image Source Directory : {import_dir}") + print(f" Recurse Source SubDirectories : {'Yes' if is_recurse else 'No'}") + print(f"Count of .png file(s) found : {len(import_file_list)}") + print(f"Board name option specified : {board_name_option}") + print(f"Database backup will be taken at : {config.database_backup_dir}") + + print("\r\nNotes about the import process:") + print("- Source image files will not be modified, only copied to the outputs directory.") + print("- If the same file name already exists in the destination, the file will be skipped.") + print("- If the same file name already has a record in the database, the file will be skipped.") + print("- Invoke AI metadata tags will be updated/written into the imported copy only.") + print( + "- On the imported copy, only Invoke AI known tags (latest and legacy) will be retained (dream, sd-metadata, invokeai, invokeai_metadata)" + ) + print( + "- A property 'imported_app_version' will be added to metadata that can be viewed in the UI's metadata viewer." + ) + print( + "- The new 3.x InvokeAI outputs folder structure is flat so recursively found source imges will all be placed into the single outputs/images folder." + ) + + while True: + should_continue = prompt("\nDo you wish to continue with the import [Yn] ? ").lower() or "y" + if should_continue == "n": + print("\r\nCancelling Import") + return + elif should_continue == "y": + print() + break + + db_mapper.backup(config.TIMESTAMP_STRING) + + print() + ImportStats.time_start = datetime.datetime.utcnow() + + for filepath in import_file_list: + try: + self.import_image(filepath, board_name_option, db_mapper, config) + except sqlite3.Error as sql_ex: + print(f"A database related exception was found processing {filepath}, will continue to next file. ") + print("Exception detail:") + print(sql_ex) + ImportStats.count_file_errors += 1 + except Exception as ex: + print(f"Exception processing {filepath}, will continue to next file. ") + print("Exception detail:") + print(ex) + ImportStats.count_file_errors += 1 + + print("\r\n===============================================================================") + print(f"= Import Complete - Elpased Time: {ImportStats.get_elapsed_time_string()}") + print() + print(f"Source File(s) : {ImportStats.count_source_files}") + print(f"Total Imported : {ImportStats.count_imported}") + print(f"Skipped b/c file already exists on disk : {ImportStats.count_skipped_file_exists}") + print(f"Skipped b/c file already exists in db : {ImportStats.count_skipped_db_exists}") + print(f"Errors during import : {ImportStats.count_file_errors}") + if ImportStats.count_imported > 0: + print("\r\nBreakdown of imported files by version:") + for key, version in ImportStats.count_imported_by_version.items(): + print(f" {key:20} : {version}") + + +def main(): + try: + processor = MediaImportProcessor() + processor.process() + except KeyboardInterrupt: + print("\r\n\r\nUser cancelled execution.") + + +if __name__ == "__main__": + main() diff --git a/invokeai/frontend/install/invokeai_configure.py b/invokeai/frontend/install/invokeai_configure.py index e087e4f40f..d200d78555 100644 --- a/invokeai/frontend/install/invokeai_configure.py +++ b/invokeai/frontend/install/invokeai_configure.py @@ -1,4 +1,4 @@ """ Wrapper for invokeai.backend.configure.invokeai_configure """ -from ...backend.install.invokeai_configure import main +from ...backend.install.invokeai_configure import main as invokeai_configure # noqa: F401 diff --git a/invokeai/frontend/install/invokeai_update.py b/invokeai/frontend/install/invokeai_update.py index 3fe6ff1574..3fe9bb6f97 100644 --- a/invokeai/frontend/install/invokeai_update.py +++ b/invokeai/frontend/install/invokeai_update.py @@ -80,7 +80,7 @@ def welcome(versions: dict): def get_extras(): extras = "" try: - dist = pkg_resources.get_distribution("xformers") + _ = pkg_resources.get_distribution("xformers") extras = "[xformers]" except pkg_resources.DistributionNotFound: pass @@ -90,7 +90,7 @@ def get_extras(): def main(): versions = get_versions() if invokeai_is_running(): - print(f":exclamation: [bold red]Please terminate all running instances of InvokeAI before updating.[/red bold]") + print(":exclamation: [bold red]Please terminate all running instances of InvokeAI before updating.[/red bold]") input("Press any key to continue...") return @@ -122,9 +122,9 @@ def main(): print("") print("") if os.system(cmd) == 0: - print(f":heavy_check_mark: Upgrade successful") + print(":heavy_check_mark: Upgrade successful") else: - print(f":exclamation: [bold red]Upgrade failed[/red bold]") + print(":exclamation: [bold red]Upgrade failed[/red bold]") if __name__ == "__main__": diff --git a/invokeai/frontend/install/model_install.py b/invokeai/frontend/install/model_install.py index 0633553a3d..6e4440abef 100644 --- a/invokeai/frontend/install/model_install.py +++ b/invokeai/frontend/install/model_install.py @@ -28,7 +28,6 @@ from npyscreen import widget from invokeai.backend.util.logging import InvokeAILogger from invokeai.backend.install.model_install_backend import ( - ModelInstallList, InstallSelections, ModelInstall, SchedulerPredictionType, @@ -41,12 +40,12 @@ from invokeai.frontend.install.widgets import ( SingleSelectColumns, TextBox, BufferBox, - FileBox, set_min_terminal_size, select_stable_diffusion_config_file, CyclingForm, MIN_COLS, MIN_LINES, + WindowTooSmallException, ) from invokeai.app.services.config import InvokeAIAppConfig @@ -156,7 +155,7 @@ class addModelsForm(CyclingForm, npyscreen.FormMultiPage): BufferBox, name="Log Messages", editable=False, - max_height=15, + max_height=6, ) self.nextrely += 1 @@ -252,7 +251,7 @@ class addModelsForm(CyclingForm, npyscreen.FormMultiPage): ) -> dict[str, npyscreen.widget]: """Generic code to create model selection widgets""" widgets = dict() - model_list = [x for x in self.all_models if self.all_models[x].model_type == model_type and not x in exclude] + model_list = [x for x in self.all_models if self.all_models[x].model_type == model_type and x not in exclude] model_labels = [self.model_labels[x] for x in model_list] show_recommended = len(self.installed_models) == 0 @@ -358,14 +357,14 @@ class addModelsForm(CyclingForm, npyscreen.FormMultiPage): try: v.hidden = True v.editable = False - except: + except Exception: pass for k, v in widgets[selected_tab].items(): try: v.hidden = False if not isinstance(v, (npyscreen.FixedText, npyscreen.TitleFixedText, CenteredTitleText)): v.editable = True - except: + except Exception: pass self.__class__.current_tab = selected_tab # for persistence self.display() @@ -542,7 +541,7 @@ class addModelsForm(CyclingForm, npyscreen.FormMultiPage): self.ti_models, ] for section in ui_sections: - if not "models_selected" in section: + if "models_selected" not in section: continue selected = set([section["models"][x] for x in section["models_selected"].value]) models_to_install = [x for x in selected if not self.all_models[x].installed] @@ -638,7 +637,7 @@ def _ask_user_for_pt_tui(model_path: Path, tui_conn: Connection) -> SchedulerPre return None else: return response - except: + except Exception: return None @@ -674,8 +673,7 @@ def process_and_execute( def select_and_download_models(opt: Namespace): precision = "float32" if opt.full_precision else choose_precision(torch.device(choose_torch_device())) config.precision = precision - helper = lambda x: ask_user_for_prediction_type(x) - installer = ModelInstall(config, prediction_type_helper=helper) + installer = ModelInstall(config, prediction_type_helper=ask_user_for_prediction_type) if opt.list_models: installer.list_models(opt.list_models) elif opt.add or opt.delete: @@ -693,7 +691,11 @@ def select_and_download_models(opt: Namespace): # needed to support the probe() method running under a subprocess torch.multiprocessing.set_start_method("spawn") - set_min_terminal_size(MIN_COLS, MIN_LINES) + if not set_min_terminal_size(MIN_COLS, MIN_LINES): + raise WindowTooSmallException( + "Could not increase terminal size. Try running again with a larger window or smaller font size." + ) + installApp = AddModelApplication(opt) try: installApp.run() @@ -772,7 +774,7 @@ def main(): if not config.model_conf_path.exists(): logger.info("Your InvokeAI root directory is not set up. Calling invokeai-configure.") - from invokeai.frontend.install import invokeai_configure + from invokeai.frontend.install.invokeai_configure import invokeai_configure invokeai_configure() sys.exit(0) @@ -787,6 +789,8 @@ def main(): curses.echo() curses.endwin() logger.info("Goodbye! Come back soon.") + except WindowTooSmallException as e: + logger.error(str(e)) except widget.NotEnoughSpaceForWidget as e: if str(e).startswith("Height of 1 allocated"): logger.error("Insufficient vertical space for the interface. Please make your window taller and try again") diff --git a/invokeai/frontend/install/widgets.py b/invokeai/frontend/install/widgets.py index 10da15bf13..79b6280990 100644 --- a/invokeai/frontend/install/widgets.py +++ b/invokeai/frontend/install/widgets.py @@ -21,31 +21,40 @@ MIN_COLS = 130 MIN_LINES = 38 +class WindowTooSmallException(Exception): + pass + + # ------------------------------------- -def set_terminal_size(columns: int, lines: int): - ts = get_terminal_size() - width = max(columns, ts.columns) - height = max(lines, ts.lines) - +def set_terminal_size(columns: int, lines: int) -> bool: OS = platform.uname().system - if OS == "Windows": - pass - # not working reliably - ask user to adjust the window - # _set_terminal_size_powershell(width,height) - elif OS in ["Darwin", "Linux"]: - _set_terminal_size_unix(width, height) + screen_ok = False + while not screen_ok: + ts = get_terminal_size() + width = max(columns, ts.columns) + height = max(lines, ts.lines) - # check whether it worked.... - ts = get_terminal_size() - pause = False - if ts.columns < columns: - print("\033[1mThis window is too narrow for the user interface.\033[0m") - pause = True - if ts.lines < lines: - print("\033[1mThis window is too short for the user interface.\033[0m") - pause = True - if pause: - input("Maximize the window then press any key to continue..") + if OS == "Windows": + pass + # not working reliably - ask user to adjust the window + # _set_terminal_size_powershell(width,height) + elif OS in ["Darwin", "Linux"]: + _set_terminal_size_unix(width, height) + + # check whether it worked.... + ts = get_terminal_size() + if ts.columns < columns or ts.lines < lines: + print( + f"\033[1mThis window is too small for the interface. InvokeAI requires {columns}x{lines} (w x h) characters, but window is {ts.columns}x{ts.lines}\033[0m" + ) + resp = input( + "Maximize the window and/or decrease the font size then press any key to continue. Type [Q] to give up.." + ) + if resp.upper().startswith("Q"): + break + else: + screen_ok = True + return screen_ok def _set_terminal_size_powershell(width: int, height: int): @@ -80,21 +89,21 @@ def _set_terminal_size_unix(width: int, height: int): sys.stdout.flush() -def set_min_terminal_size(min_cols: int, min_lines: int): +def set_min_terminal_size(min_cols: int, min_lines: int) -> bool: # make sure there's enough room for the ui term_cols, term_lines = get_terminal_size() if term_cols >= min_cols and term_lines >= min_lines: - return + return True cols = max(term_cols, min_cols) lines = max(term_lines, min_lines) - set_terminal_size(cols, lines) + return set_terminal_size(cols, lines) class IntSlider(npyscreen.Slider): def translate_value(self): stri = "%2d / %2d" % (self.value, self.out_of) - l = (len(str(self.out_of))) * 2 + 4 - stri = stri.rjust(l) + length = (len(str(self.out_of))) * 2 + 4 + stri = stri.rjust(length) return stri @@ -158,13 +167,13 @@ class FloatSlider(npyscreen.Slider): # this is supposed to adjust display precision, but doesn't def translate_value(self): stri = "%3.2f / %3.2f" % (self.value, self.out_of) - l = (len(str(self.out_of))) * 2 + 4 - stri = stri.rjust(l) + length = (len(str(self.out_of))) * 2 + 4 + stri = stri.rjust(length) return stri class FloatTitleSlider(npyscreen.TitleText): - _entry_type = FloatSlider + _entry_type = npyscreen.Slider class SelectColumnBase: diff --git a/invokeai/frontend/legacy_launch_invokeai.py b/invokeai/frontend/legacy_launch_invokeai.py index e4509db6e5..e1e7dc26ab 100644 --- a/invokeai/frontend/legacy_launch_invokeai.py +++ b/invokeai/frontend/legacy_launch_invokeai.py @@ -1,4 +1,3 @@ -import os import sys import argparse diff --git a/invokeai/frontend/merge/__init__.py b/invokeai/frontend/merge/__init__.py index 3a2e4474a5..a18da9c0d4 100644 --- a/invokeai/frontend/merge/__init__.py +++ b/invokeai/frontend/merge/__init__.py @@ -1,4 +1,4 @@ """ Initialization file for invokeai.frontend.merge """ -from .merge_diffusers import main as invokeai_merge_diffusers +from .merge_diffusers import main as invokeai_merge_diffusers # noqa: F401 diff --git a/invokeai/frontend/merge/merge_diffusers.py b/invokeai/frontend/merge/merge_diffusers.py index db493ec17f..ada8eed644 100644 --- a/invokeai/frontend/merge/merge_diffusers.py +++ b/invokeai/frontend/merge/merge_diffusers.py @@ -9,19 +9,15 @@ import curses import sys from argparse import Namespace from pathlib import Path -from typing import List, Union +from typing import List, Optional import npyscreen -from diffusers import DiffusionPipeline -from diffusers import logging as dlogging from npyscreen import widget -from omegaconf import OmegaConf import invokeai.backend.util.logging as logger from invokeai.app.services.config import InvokeAIAppConfig from invokeai.backend.model_management import ( ModelMerger, - MergeInterpolationMethod, ModelManager, ModelType, BaseModelType, @@ -318,7 +314,7 @@ class mergeModelsForm(npyscreen.FormMultiPageAction): else: return True - def get_model_names(self, base_model: BaseModelType = None) -> List[str]: + def get_model_names(self, base_model: Optional[BaseModelType] = None) -> List[str]: model_names = [ info["model_name"] for info in self.model_manager.list_models(model_type=ModelType.Main, base_model=base_model) @@ -382,7 +378,8 @@ def run_cli(args: Namespace): def main(): args = _parse_args() - config.parse_args(["--root", str(args.root_dir)]) + if args.root_dir: + config.parse_args(["--root", str(args.root_dir)]) try: if args.front_end: diff --git a/invokeai/frontend/training/__init__.py b/invokeai/frontend/training/__init__.py index db5d69fc7a..d4eff2f7fd 100644 --- a/invokeai/frontend/training/__init__.py +++ b/invokeai/frontend/training/__init__.py @@ -1,4 +1,4 @@ """ Initialization file for invokeai.frontend.training """ -from .textual_inversion import main as invokeai_textual_inversion +from .textual_inversion import main as invokeai_textual_inversion # noqa: F401 diff --git a/invokeai/frontend/training/textual_inversion.py b/invokeai/frontend/training/textual_inversion.py index 25debf4bdc..12f4db8e7b 100755 --- a/invokeai/frontend/training/textual_inversion.py +++ b/invokeai/frontend/training/textual_inversion.py @@ -59,7 +59,7 @@ class textualInversionForm(npyscreen.FormMultiPageAction): try: default = self.model_names.index(saved_args["model"]) - except: + except Exception: pass self.add_widget_intelligent( @@ -377,7 +377,7 @@ def previous_args() -> dict: try: conf = OmegaConf.load(conf_file) conf["placeholder_token"] = conf["placeholder_token"].strip("<>") - except: + except Exception: conf = None return conf diff --git a/invokeai/frontend/web/.husky/pre-commit b/invokeai/frontend/web/.husky/pre-commit index f7584d86eb..f89f3ad735 100755 --- a/invokeai/frontend/web/.husky/pre-commit +++ b/invokeai/frontend/web/.husky/pre-commit @@ -1,6 +1,4 @@ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" -python -m black . --check - cd invokeai/frontend/web/ && npm run lint-staged diff --git a/invokeai/frontend/web/dist/assets/App-44cdaaf3.js b/invokeai/frontend/web/dist/assets/App-44cdaaf3.js deleted file mode 100644 index 801b048b3a..0000000000 --- a/invokeai/frontend/web/dist/assets/App-44cdaaf3.js +++ /dev/null @@ -1,169 +0,0 @@ -import{t as wv,r as a7,i as Sv,a as Dc,b as x_,S as w_,c as S_,d as C_,e as Cv,f as k_,g as kv,h as i7,j as l7,k as c7,l as u7,m as __,n as d7,o as f7,p as p7,q as P_,s as h7,u as m7,v as g7,w as v7,x as b7,y as y7,z as f,A as i,B as om,C as Ap,D as x7,E as j_,F as I_,G as w7,P as md,H as K1,I as S7,J as C7,K as k7,L as _7,M as P7,N as j7,O as I7,Q as W2,R as E7,T as Ae,U as je,V as Ct,W as nt,X as gd,Y as mo,Z as Ir,_ as Fr,$ as qn,a0 as pl,a1 as ia,a2 as Ft,a3 as ns,a4 as tc,a5 as za,a6 as sm,a7 as X1,a8 as vd,a9 as sr,aa as O7,ab as H,ac as E_,ad as V2,ae as O_,af as _v,ag as Ac,ah as R7,ai as R_,aj as M_,ak as Tc,al as M7,am as fe,an as Ge,ao as Zt,ap as z,aq as D7,ar as U2,as as A7,at as T7,au as G2,av as te,aw as N7,ax as On,ay as Mn,az as Ee,aA as F,aB as Ys,aC as Ye,aD as Kn,aE as D_,aF as A_,aG as T_,aH as _i,aI as Ds,aJ as Y1,aK as $7,aL as z7,aM as L7,aN as Dl,aO as Pu,aP as B7,aQ as F7,aR as H7,aS as W7,aT as V7,aU as q2,aV as ui,aW as Q1,aX as Tp,aY as am,aZ as N_,a_ as os,a$ as $_,b0 as U7,b1 as Nc,b2 as z_,b3 as L_,b4 as Es,b5 as jo,b6 as ju,b7 as G7,b8 as q7,b9 as K7,ba as X7,bb as J1,bc as Np,bd as Y7,be as Q7,bf as Af,bg as Tf,bh as fu,bi as p0,bj as $u,bk as zu,bl as Lu,bm as Bu,bn as K2,bo as $p,bp as h0,bq as zp,br as m0,bs as Pv,bt as g0,bu as jv,bv as v0,bw as Lp,bx as X2,by as gc,bz as Y2,bA as vc,bB as Q2,bC as Bp,bD as Z1,bE as B_,bF as Iv,bG as Ev,bH as F_,bI as J7,bJ as Ov,bK as Z7,bL as Rv,bM as eb,bN as H_,bO as tb,bP as nb,bQ as eR,bR as tR,bS as im,bT as Xl,bU as nR,bV as rR,bW as Cp,bX as oR,bY as sR,bZ as aR,b_ as Mv,b$ as W_,c0 as iR,c1 as V_,c2 as U_,c3 as ss,c4 as J2,c5 as La,c6 as lR,c7 as Dv,c8 as cR,c9 as G_,ca as Z2,cb as uR,cc as dR,cd as fR,ce as pR,cf as hR,cg as mR,ch as rb,ci as ob,cj as gR,ck as Bn,cl as ew,cm as q_,cn as vR,co as bR,cp as yR,cq as xR,cr as wR,cs as SR,ct as CR,cu as kR,cv as _R,cw as K_,cx as PR,cy as jR,cz as IR,cA as ER,cB as OR,cC as RR,cD as MR,cE as DR,cF as AR,cG as TR,cH as tw,cI as NR,cJ as nw,cK as $R,cL as zR,cM as LR,cN as BR,cO as Yu,cP as so,cQ as bd,cR as yd,cS as FR,cT as Qn,cU as HR,cV as na,cW as sb,cX as lm,cY as WR,cZ as VR,c_ as UR,c$ as rw,d0 as Fp,d1 as GR,d2 as X_,d3 as ow,d4 as qR,d5 as KR,d6 as Ss,d7 as XR,d8 as YR,d9 as Y_,da as Q_,db as QR,dc as sw,dd as JR,de as ZR,df as J_,dg as eM,dh as tM,di as nM,dj as rM,dk as oM,dl as sM,dm as aM,dn as cm,dp as iM,dq as Z_,dr as aw,ds as Nf,dt as lM,du as ab,dv as e5,dw as cM,dx as uM,dy as dM,dz as ls,dA as fM,dB as pM,dC as hM,dD as mM,dE as gM,dF as vM,dG as bM,dH as yM,dI as xM,dJ as wM,dK as SM,dL as CM,dM as kM,dN as _M,dO as iw,dP as lw,dQ as PM,dR as t5,dS as n5,dT as xd,dU as r5,dV as qi,dW as o5,dX as cw,dY as jM,dZ as IM,d_ as s5,d$ as EM,e0 as OM,e1 as RM,e2 as MM,e3 as DM,e4 as ib,e5 as uw,e6 as a5,e7 as AM,e8 as dw,e9 as i5,ea as As,eb as TM,ec as l5,ed as fw,ee as NM,ef as $M,eg as zM,eh as LM,ei as BM,ej as FM,ek as HM,el as WM,em as VM,en as UM,eo as GM,ep as qM,eq as KM,er as XM,es as YM,et as QM,eu as JM,ev as ZM,ew as eD,ex as tD,ey as pw,ez as kp,eA as nD,eB as Hp,eC as c5,eD as Qu,eE as rD,eF as oD,eG as ea,eH as u5,eI as lb,eJ as wd,eK as sD,eL as aD,eM as iD,eN as Ea,eO as d5,eP as lD,eQ as cD,eR as f5,eS as uD,eT as dD,eU as fD,eV as pD,eW as hD,eX as mD,eY as gD,eZ as vD,e_ as bD,e$ as yD,f0 as hw,f1 as xD,f2 as wD,f3 as SD,f4 as CD,f5 as kD,f6 as _D,f7 as PD,f8 as jD,f9 as b0,fa as Js,fb as y0,fc as x0,fd as $f,fe as mw,ff as Av,fg as ID,fh as ED,fi as OD,fj as RD,fk as Wp,fl as p5,fm as h5,fn as MD,fo as DD,fp as m5,fq as g5,fr as v5,fs as b5,ft as y5,fu as x5,fv as w5,fw as S5,fx as nc,fy as rc,fz as C5,fA as k5,fB as AD,fC as _5,fD as P5,fE as j5,fF as I5,fG as E5,fH as O5,fI as cb,fJ as TD,fK as gw,fL as ND,fM as $D,fN as Vp,fO as vw,fP as bw,fQ as yw,fR as xw,fS as zD,fT as LD,fU as BD,fV as FD,fW as HD,fX as WD,fY as VD,fZ as UD,f_ as GD}from"./index-18f2f740.js";import{u as qD,c as KD,a as Dn,b as or,I as no,d as Ba,P as Ju,C as XD,e as ye,m as um,f as R5,g as Fa,h as YD,r as Ue,i as QD,j as ww,k as Vt,l as Sr}from"./MantineProvider-b20a2267.js";function JD(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,s;for(s=0;s=0)&&(n[o]=e[o]);return n}var Sw=1/0,ZD=17976931348623157e292;function w0(e){if(!e)return e===0?e:0;if(e=wv(e),e===Sw||e===-Sw){var t=e<0?-1:1;return t*ZD}return e===e?e:0}var e9=function(){return a7.Date.now()};const S0=e9;var t9="Expected a function",n9=Math.max,r9=Math.min;function o9(e,t,n){var r,o,s,a,c,d,p=0,h=!1,m=!1,v=!0;if(typeof e!="function")throw new TypeError(t9);t=wv(t)||0,Sv(n)&&(h=!!n.leading,m="maxWait"in n,s=m?n9(wv(n.maxWait)||0,t):s,v="trailing"in n?!!n.trailing:v);function b(O){var R=r,M=o;return r=o=void 0,p=O,a=e.apply(M,R),a}function w(O){return p=O,c=setTimeout(_,t),h?b(O):a}function y(O){var R=O-d,M=O-p,A=t-R;return m?r9(A,s-M):A}function S(O){var R=O-d,M=O-p;return d===void 0||R>=t||R<0||m&&M>=s}function _(){var O=S0();if(S(O))return k(O);c=setTimeout(_,y(O))}function k(O){return c=void 0,v&&r?b(O):(r=o=void 0,a)}function j(){c!==void 0&&clearTimeout(c),p=0,r=d=o=c=void 0}function I(){return c===void 0?a:k(S0())}function E(){var O=S0(),R=S(O);if(r=arguments,o=this,d=O,R){if(c===void 0)return w(d);if(m)return clearTimeout(c),c=setTimeout(_,t),b(d)}return c===void 0&&(c=setTimeout(_,t)),a}return E.cancel=j,E.flush=I,E}var s9=200;function a9(e,t,n,r){var o=-1,s=S_,a=!0,c=e.length,d=[],p=t.length;if(!c)return d;n&&(t=Dc(t,x_(n))),r?(s=C_,a=!1):t.length>=s9&&(s=Cv,a=!1,t=new w_(t));e:for(;++o=120&&h.length>=120)?new w_(a&&h):void 0}h=e[0];var m=-1,v=c[0];e:for(;++m{r.has(s)&&n(o,s)})}const M5=({id:e,x:t,y:n,width:r,height:o,style:s,color:a,strokeColor:c,strokeWidth:d,className:p,borderRadius:h,shapeRendering:m,onClick:v})=>{const{background:b,backgroundColor:w}=s||{},y=a||b||w;return i.jsx("rect",{className:om(["react-flow__minimap-node",p]),x:t,y:n,rx:h,ry:h,width:r,height:o,fill:y,stroke:c,strokeWidth:d,shapeRendering:m,onClick:v?S=>v(S,e):void 0})};M5.displayName="MiniMapNode";var P9=f.memo(M5);const j9=e=>e.nodeOrigin,I9=e=>e.getNodes().filter(t=>!t.hidden&&t.width&&t.height),C0=e=>e instanceof Function?e:()=>e;function E9({nodeStrokeColor:e="transparent",nodeColor:t="#e2e2e2",nodeClassName:n="",nodeBorderRadius:r=5,nodeStrokeWidth:o=2,nodeComponent:s=P9,onClick:a}){const c=Ap(I9,K1),d=Ap(j9),p=C0(t),h=C0(e),m=C0(n),v=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return i.jsx(i.Fragment,{children:c.map(b=>{const{x:w,y}=x7(b,d).positionAbsolute;return i.jsx(s,{x:w,y,width:b.width,height:b.height,style:b.style,className:m(b),color:p(b),borderRadius:r,strokeColor:h(b),strokeWidth:o,shapeRendering:v,onClick:a,id:b.id},b.id)})})}var O9=f.memo(E9);const R9=200,M9=150,D9=e=>{const t=e.getNodes(),n={x:-e.transform[0]/e.transform[2],y:-e.transform[1]/e.transform[2],width:e.width/e.transform[2],height:e.height/e.transform[2]};return{viewBB:n,boundingRect:t.length>0?k7(_7(t,e.nodeOrigin),n):n,rfId:e.rfId}},A9="react-flow__minimap-desc";function D5({style:e,className:t,nodeStrokeColor:n="transparent",nodeColor:r="#e2e2e2",nodeClassName:o="",nodeBorderRadius:s=5,nodeStrokeWidth:a=2,nodeComponent:c,maskColor:d="rgb(240, 240, 240, 0.6)",maskStrokeColor:p="none",maskStrokeWidth:h=1,position:m="bottom-right",onClick:v,onNodeClick:b,pannable:w=!1,zoomable:y=!1,ariaLabel:S="React Flow mini map",inversePan:_=!1,zoomStep:k=10}){const j=j_(),I=f.useRef(null),{boundingRect:E,viewBB:O,rfId:R}=Ap(D9,K1),M=(e==null?void 0:e.width)??R9,A=(e==null?void 0:e.height)??M9,T=E.width/M,$=E.height/A,Q=Math.max(T,$),B=Q*M,V=Q*A,q=5*Q,G=E.x-(B-E.width)/2-q,D=E.y-(V-E.height)/2-q,L=B+q*2,W=V+q*2,Y=`${A9}-${R}`,ae=f.useRef(0);ae.current=Q,f.useEffect(()=>{if(I.current){const X=I_(I.current),K=re=>{const{transform:oe,d3Selection:pe,d3Zoom:le}=j.getState();if(re.sourceEvent.type!=="wheel"||!pe||!le)return;const ge=-re.sourceEvent.deltaY*(re.sourceEvent.deltaMode===1?.05:re.sourceEvent.deltaMode?1:.002)*k,ke=oe[2]*Math.pow(2,ge);le.scaleTo(pe,ke)},U=re=>{const{transform:oe,d3Selection:pe,d3Zoom:le,translateExtent:ge,width:ke,height:xe}=j.getState();if(re.sourceEvent.type!=="mousemove"||!pe||!le)return;const de=ae.current*Math.max(1,oe[2])*(_?-1:1),Te={x:oe[0]-re.sourceEvent.movementX*de,y:oe[1]-re.sourceEvent.movementY*de},Oe=[[0,0],[ke,xe]],$e=S7.translate(Te.x,Te.y).scale(oe[2]),kt=le.constrain()($e,Oe,ge);le.transform(pe,kt)},se=w7().on("zoom",w?U:null).on("zoom.wheel",y?K:null);return X.call(se),()=>{X.on("zoom",null)}}},[w,y,_,k]);const be=v?X=>{const K=C7(X);v(X,{x:K[0],y:K[1]})}:void 0,ie=b?(X,K)=>{const U=j.getState().nodeInternals.get(K);b(X,U)}:void 0;return i.jsx(md,{position:m,style:e,className:om(["react-flow__minimap",t]),"data-testid":"rf__minimap",children:i.jsxs("svg",{width:M,height:A,viewBox:`${G} ${D} ${L} ${W}`,role:"img","aria-labelledby":Y,ref:I,onClick:be,children:[S&&i.jsx("title",{id:Y,children:S}),i.jsx(O9,{onClick:ie,nodeColor:r,nodeStrokeColor:n,nodeBorderRadius:s,nodeClassName:o,nodeStrokeWidth:a,nodeComponent:c}),i.jsx("path",{className:"react-flow__minimap-mask",d:`M${G-q},${D-q}h${L+q*2}v${W+q*2}h${-L-q*2}z - M${O.x},${O.y}h${O.width}v${O.height}h${-O.width}z`,fill:d,fillRule:"evenodd",stroke:p,strokeWidth:h,pointerEvents:"none"})]})})}D5.displayName="MiniMap";var T9=f.memo(D5),Cs;(function(e){e.Lines="lines",e.Dots="dots",e.Cross="cross"})(Cs||(Cs={}));function N9({color:e,dimensions:t,lineWidth:n}){return i.jsx("path",{stroke:e,strokeWidth:n,d:`M${t[0]/2} 0 V${t[1]} M0 ${t[1]/2} H${t[0]}`})}function $9({color:e,radius:t}){return i.jsx("circle",{cx:t,cy:t,r:t,fill:e})}const z9={[Cs.Dots]:"#91919a",[Cs.Lines]:"#eee",[Cs.Cross]:"#e2e2e2"},L9={[Cs.Dots]:1,[Cs.Lines]:1,[Cs.Cross]:6},B9=e=>({transform:e.transform,patternId:`pattern-${e.rfId}`});function A5({id:e,variant:t=Cs.Dots,gap:n=20,size:r,lineWidth:o=1,offset:s=2,color:a,style:c,className:d}){const p=f.useRef(null),{transform:h,patternId:m}=Ap(B9,K1),v=a||z9[t],b=r||L9[t],w=t===Cs.Dots,y=t===Cs.Cross,S=Array.isArray(n)?n:[n,n],_=[S[0]*h[2]||1,S[1]*h[2]||1],k=b*h[2],j=y?[k,k]:_,I=w?[k/s,k/s]:[j[0]/s,j[1]/s];return i.jsxs("svg",{className:om(["react-flow__background",d]),style:{...c,position:"absolute",width:"100%",height:"100%",top:0,left:0},ref:p,"data-testid":"rf__background",children:[i.jsx("pattern",{id:m+e,x:h[0]%_[0],y:h[1]%_[1],width:_[0],height:_[1],patternUnits:"userSpaceOnUse",patternTransform:`translate(-${I[0]},-${I[1]})`,children:w?i.jsx($9,{color:v,radius:k/s}):i.jsx(N9,{dimensions:j,color:v,lineWidth:o})}),i.jsx("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${m+e})`})]})}A5.displayName="Background";var F9=f.memo(A5),Fu;(function(e){e.Line="line",e.Handle="handle"})(Fu||(Fu={}));function H9({width:e,prevWidth:t,height:n,prevHeight:r,invertX:o,invertY:s}){const a=e-t,c=n-r,d=[a>0?1:a<0?-1:0,c>0?1:c<0?-1:0];return a&&o&&(d[0]=d[0]*-1),c&&s&&(d[1]=d[1]*-1),d}const T5={width:0,height:0,x:0,y:0},W9={...T5,pointerX:0,pointerY:0,aspectRatio:1};function V9({nodeId:e,position:t,variant:n=Fu.Handle,className:r,style:o={},children:s,color:a,minWidth:c=10,minHeight:d=10,maxWidth:p=Number.MAX_VALUE,maxHeight:h=Number.MAX_VALUE,keepAspectRatio:m=!1,shouldResize:v,onResizeStart:b,onResize:w,onResizeEnd:y}){const S=P7(),_=typeof e=="string"?e:S,k=j_(),j=f.useRef(null),I=f.useRef(W9),E=f.useRef(T5),O=j7(),R=n===Fu.Line?"right":"bottom-right",M=t??R;f.useEffect(()=>{if(!j.current||!_)return;const Q=I_(j.current),B=M.includes("right")||M.includes("left"),V=M.includes("bottom")||M.includes("top"),q=M.includes("left"),G=M.includes("top"),D=I7().on("start",L=>{const W=k.getState().nodeInternals.get(_),{xSnapped:Y,ySnapped:ae}=O(L);E.current={width:(W==null?void 0:W.width)??0,height:(W==null?void 0:W.height)??0,x:(W==null?void 0:W.position.x)??0,y:(W==null?void 0:W.position.y)??0},I.current={...E.current,pointerX:Y,pointerY:ae,aspectRatio:E.current.width/E.current.height},b==null||b(L,{...E.current})}).on("drag",L=>{const{nodeInternals:W,triggerNodeChanges:Y}=k.getState(),{xSnapped:ae,ySnapped:be}=O(L),ie=W.get(_);if(ie){const X=[],{pointerX:K,pointerY:U,width:se,height:re,x:oe,y:pe,aspectRatio:le}=I.current,{x:ge,y:ke,width:xe,height:de}=E.current,Te=Math.floor(B?ae-K:0),Oe=Math.floor(V?be-U:0);let $e=W2(se+(q?-Te:Te),c,p),kt=W2(re+(G?-Oe:Oe),d,h);if(m){const Me=$e/kt,Pt=B&&V,Tt=B&&!V,we=V&&!B;$e=Me<=le&&Pt||we?kt*le:$e,kt=Me>le&&Pt||Tt?$e/le:kt,$e>=p?($e=p,kt=p/le):$e<=c&&($e=c,kt=c/le),kt>=h?(kt=h,$e=h*le):kt<=d&&(kt=d,$e=d*le)}const ct=$e!==xe,on=kt!==de;if(q||G){const Me=q?oe-($e-se):oe,Pt=G?pe-(kt-re):pe,Tt=Me!==ge&&ct,we=Pt!==ke&&on;if(Tt||we){const ht={id:ie.id,type:"position",position:{x:Tt?Me:ge,y:we?Pt:ke}};X.push(ht),E.current.x=ht.position.x,E.current.y=ht.position.y}}if(ct||on){const Me={id:_,type:"dimensions",updateStyle:!0,resizing:!0,dimensions:{width:$e,height:kt}};X.push(Me),E.current.width=$e,E.current.height=kt}if(X.length===0)return;const vt=H9({width:E.current.width,prevWidth:xe,height:E.current.height,prevHeight:de,invertX:q,invertY:G}),bt={...E.current,direction:vt};if((v==null?void 0:v(L,bt))===!1)return;w==null||w(L,bt),Y(X)}}).on("end",L=>{const W={id:_,type:"dimensions",resizing:!1};y==null||y(L,{...E.current}),k.getState().triggerNodeChanges([W])});return Q.call(D),()=>{Q.on(".drag",null)}},[_,M,c,d,p,h,m,O,b,w,y]);const A=M.split("-"),T=n===Fu.Line?"borderColor":"backgroundColor",$=a?{...o,[T]:a}:o;return i.jsx("div",{className:om(["react-flow__resize-control","nodrag",...A,n,r]),ref:j,style:$,children:s})}var U9=f.memo(V9);const N5=1/60*1e3,G9=typeof performance<"u"?()=>performance.now():()=>Date.now(),$5=typeof window<"u"?e=>window.requestAnimationFrame(e):e=>setTimeout(()=>e(G9()),N5);function q9(e){let t=[],n=[],r=0,o=!1,s=!1;const a=new WeakSet,c={schedule:(d,p=!1,h=!1)=>{const m=h&&o,v=m?t:n;return p&&a.add(d),v.indexOf(d)===-1&&(v.push(d),m&&o&&(r=t.length)),d},cancel:d=>{const p=n.indexOf(d);p!==-1&&n.splice(p,1),a.delete(d)},process:d=>{if(o){s=!0;return}if(o=!0,[t,n]=[n,t],n.length=0,r=t.length,r)for(let p=0;p(e[t]=q9(()=>Zu=!0),e),{}),X9=Sd.reduce((e,t)=>{const n=dm[t];return e[t]=(r,o=!1,s=!1)=>(Zu||J9(),n.schedule(r,o,s)),e},{}),Y9=Sd.reduce((e,t)=>(e[t]=dm[t].cancel,e),{});Sd.reduce((e,t)=>(e[t]=()=>dm[t].process(oc),e),{});const Q9=e=>dm[e].process(oc),z5=e=>{Zu=!1,oc.delta=Tv?N5:Math.max(Math.min(e-oc.timestamp,K9),1),oc.timestamp=e,Nv=!0,Sd.forEach(Q9),Nv=!1,Zu&&(Tv=!1,$5(z5))},J9=()=>{Zu=!0,Tv=!0,Nv||$5(z5)},_w=()=>oc;function ub(e){const t=Object.assign({},e);for(let n in t)t[n]===void 0&&delete t[n];return t}function Z9(e){const{theme:t}=E7(),n=qD();return f.useMemo(()=>KD(t.direction,{...n,...e}),[e,t.direction,n])}var eA=Object.defineProperty,tA=(e,t,n)=>t in e?eA(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,vr=(e,t,n)=>(tA(e,typeof t!="symbol"?t+"":t,n),n);function Pw(e){return e.sort((t,n)=>{const r=t.compareDocumentPosition(n);if(r&Node.DOCUMENT_POSITION_FOLLOWING||r&Node.DOCUMENT_POSITION_CONTAINED_BY)return-1;if(r&Node.DOCUMENT_POSITION_PRECEDING||r&Node.DOCUMENT_POSITION_CONTAINS)return 1;if(r&Node.DOCUMENT_POSITION_DISCONNECTED||r&Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC)throw Error("Cannot sort the given nodes.");return 0})}var nA=e=>typeof e=="object"&&"nodeType"in e&&e.nodeType===Node.ELEMENT_NODE;function jw(e,t,n){let r=e+1;return n&&r>=t&&(r=0),r}function Iw(e,t,n){let r=e-1;return n&&r<0&&(r=t),r}var $v=typeof window<"u"?f.useLayoutEffect:f.useEffect,Up=e=>e,rA=class{constructor(){vr(this,"descendants",new Map),vr(this,"register",e=>{if(e!=null)return nA(e)?this.registerNode(e):t=>{this.registerNode(t,e)}}),vr(this,"unregister",e=>{this.descendants.delete(e);const t=Pw(Array.from(this.descendants.keys()));this.assignIndex(t)}),vr(this,"destroy",()=>{this.descendants.clear()}),vr(this,"assignIndex",e=>{this.descendants.forEach(t=>{const n=e.indexOf(t.node);t.index=n,t.node.dataset.index=t.index.toString()})}),vr(this,"count",()=>this.descendants.size),vr(this,"enabledCount",()=>this.enabledValues().length),vr(this,"values",()=>Array.from(this.descendants.values()).sort((t,n)=>t.index-n.index)),vr(this,"enabledValues",()=>this.values().filter(e=>!e.disabled)),vr(this,"item",e=>{if(this.count()!==0)return this.values()[e]}),vr(this,"enabledItem",e=>{if(this.enabledCount()!==0)return this.enabledValues()[e]}),vr(this,"first",()=>this.item(0)),vr(this,"firstEnabled",()=>this.enabledItem(0)),vr(this,"last",()=>this.item(this.descendants.size-1)),vr(this,"lastEnabled",()=>{const e=this.enabledValues().length-1;return this.enabledItem(e)}),vr(this,"indexOf",e=>{var t,n;return e&&(n=(t=this.descendants.get(e))==null?void 0:t.index)!=null?n:-1}),vr(this,"enabledIndexOf",e=>e==null?-1:this.enabledValues().findIndex(t=>t.node.isSameNode(e))),vr(this,"next",(e,t=!0)=>{const n=jw(e,this.count(),t);return this.item(n)}),vr(this,"nextEnabled",(e,t=!0)=>{const n=this.item(e);if(!n)return;const r=this.enabledIndexOf(n.node),o=jw(r,this.enabledCount(),t);return this.enabledItem(o)}),vr(this,"prev",(e,t=!0)=>{const n=Iw(e,this.count()-1,t);return this.item(n)}),vr(this,"prevEnabled",(e,t=!0)=>{const n=this.item(e);if(!n)return;const r=this.enabledIndexOf(n.node),o=Iw(r,this.enabledCount()-1,t);return this.enabledItem(o)}),vr(this,"registerNode",(e,t)=>{if(!e||this.descendants.has(e))return;const n=Array.from(this.descendants.keys()).concat(e),r=Pw(n);t!=null&&t.disabled&&(t.disabled=!!t.disabled);const o={node:e,index:-1,...t};this.descendants.set(e,o),this.assignIndex(r)})}};function oA(e,t){if(e!=null){if(typeof e=="function"){e(t);return}try{e.current=t}catch{throw new Error(`Cannot assign value '${t}' to ref '${e}'`)}}}function cn(...e){return t=>{e.forEach(n=>{oA(n,t)})}}function sA(...e){return f.useMemo(()=>cn(...e),e)}function aA(){const e=f.useRef(new rA);return $v(()=>()=>e.current.destroy()),e.current}var[iA,L5]=Dn({name:"DescendantsProvider",errorMessage:"useDescendantsContext must be used within DescendantsProvider"});function lA(e){const t=L5(),[n,r]=f.useState(-1),o=f.useRef(null);$v(()=>()=>{o.current&&t.unregister(o.current)},[]),$v(()=>{if(!o.current)return;const a=Number(o.current.dataset.index);n!=a&&!Number.isNaN(a)&&r(a)});const s=Up(e?t.register(e):t.register);return{descendants:t,index:n,enabledIndex:t.enabledIndexOf(o.current),register:cn(s,o)}}function db(){return[Up(iA),()=>Up(L5()),()=>aA(),o=>lA(o)]}var[cA,fm]=Dn({name:"AccordionStylesContext",hookName:"useAccordionStyles",providerName:""}),[uA,fb]=Dn({name:"AccordionItemContext",hookName:"useAccordionItemContext",providerName:""}),[dA,Ode,fA,pA]=db(),Iu=Ae(function(t,n){const{getButtonProps:r}=fb(),o=r(t,n),a={display:"flex",alignItems:"center",width:"100%",outline:0,...fm().button};return i.jsx(je.button,{...o,className:Ct("chakra-accordion__button",t.className),__css:a})});Iu.displayName="AccordionButton";function $c(e){const{value:t,defaultValue:n,onChange:r,shouldUpdate:o=(v,b)=>v!==b}=e,s=or(r),a=or(o),[c,d]=f.useState(n),p=t!==void 0,h=p?t:c,m=or(v=>{const w=typeof v=="function"?v(h):v;a(h,w)&&(p||d(w),s(w))},[p,s,h,a]);return[h,m]}function hA(e){const{onChange:t,defaultIndex:n,index:r,allowMultiple:o,allowToggle:s,...a}=e;vA(e),bA(e);const c=fA(),[d,p]=f.useState(-1);f.useEffect(()=>()=>{p(-1)},[]);const[h,m]=$c({value:r,defaultValue(){return o?n??[]:n??-1},onChange:t});return{index:h,setIndex:m,htmlProps:a,getAccordionItemProps:b=>{let w=!1;return b!==null&&(w=Array.isArray(h)?h.includes(b):h===b),{isOpen:w,onChange:S=>{if(b!==null)if(o&&Array.isArray(h)){const _=S?h.concat(b):h.filter(k=>k!==b);m(_)}else S?m(b):s&&m(-1)}}},focusedIndex:d,setFocusedIndex:p,descendants:c}}var[mA,pb]=Dn({name:"AccordionContext",hookName:"useAccordionContext",providerName:"Accordion"});function gA(e){const{isDisabled:t,isFocusable:n,id:r,...o}=e,{getAccordionItemProps:s,setFocusedIndex:a}=pb(),c=f.useRef(null),d=f.useId(),p=r??d,h=`accordion-button-${p}`,m=`accordion-panel-${p}`;yA(e);const{register:v,index:b,descendants:w}=pA({disabled:t&&!n}),{isOpen:y,onChange:S}=s(b===-1?null:b);xA({isOpen:y,isDisabled:t});const _=()=>{S==null||S(!0)},k=()=>{S==null||S(!1)},j=f.useCallback(()=>{S==null||S(!y),a(b)},[b,a,y,S]),I=f.useCallback(M=>{const T={ArrowDown:()=>{const $=w.nextEnabled(b);$==null||$.node.focus()},ArrowUp:()=>{const $=w.prevEnabled(b);$==null||$.node.focus()},Home:()=>{const $=w.firstEnabled();$==null||$.node.focus()},End:()=>{const $=w.lastEnabled();$==null||$.node.focus()}}[M.key];T&&(M.preventDefault(),T(M))},[w,b]),E=f.useCallback(()=>{a(b)},[a,b]),O=f.useCallback(function(A={},T=null){return{...A,type:"button",ref:cn(v,c,T),id:h,disabled:!!t,"aria-expanded":!!y,"aria-controls":m,onClick:nt(A.onClick,j),onFocus:nt(A.onFocus,E),onKeyDown:nt(A.onKeyDown,I)}},[h,t,y,j,E,I,m,v]),R=f.useCallback(function(A={},T=null){return{...A,ref:T,role:"region",id:m,"aria-labelledby":h,hidden:!y}},[h,y,m]);return{isOpen:y,isDisabled:t,isFocusable:n,onOpen:_,onClose:k,getButtonProps:O,getPanelProps:R,htmlProps:o}}function vA(e){const t=e.index||e.defaultIndex,n=t!=null&&!Array.isArray(t)&&e.allowMultiple;gd({condition:!!n,message:`If 'allowMultiple' is passed, then 'index' or 'defaultIndex' must be an array. You passed: ${typeof t},`})}function bA(e){gd({condition:!!(e.allowMultiple&&e.allowToggle),message:"If 'allowMultiple' is passed, 'allowToggle' will be ignored. Either remove 'allowToggle' or 'allowMultiple' depending on whether you want multiple accordions visible or not"})}function yA(e){gd({condition:!!(e.isFocusable&&!e.isDisabled),message:`Using only 'isFocusable', this prop is reserved for situations where you pass 'isDisabled' but you still want the element to receive focus (A11y). Either remove it or pass 'isDisabled' as well. - `})}function xA(e){gd({condition:e.isOpen&&!!e.isDisabled,message:"Cannot open a disabled accordion item"})}function Eu(e){const{isOpen:t,isDisabled:n}=fb(),{reduceMotion:r}=pb(),o=Ct("chakra-accordion__icon",e.className),s=fm(),a={opacity:n?.4:1,transform:t?"rotate(-180deg)":void 0,transition:r?void 0:"transform 0.2s",transformOrigin:"center",...s.icon};return i.jsx(no,{viewBox:"0 0 24 24","aria-hidden":!0,className:o,__css:a,...e,children:i.jsx("path",{fill:"currentColor",d:"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"})})}Eu.displayName="AccordionIcon";var Ou=Ae(function(t,n){const{children:r,className:o}=t,{htmlProps:s,...a}=gA(t),d={...fm().container,overflowAnchor:"none"},p=f.useMemo(()=>a,[a]);return i.jsx(uA,{value:p,children:i.jsx(je.div,{ref:n,...s,className:Ct("chakra-accordion__item",o),__css:d,children:typeof r=="function"?r({isExpanded:!!a.isOpen,isDisabled:!!a.isDisabled}):r})})});Ou.displayName="AccordionItem";var Ki={ease:[.25,.1,.25,1],easeIn:[.4,0,1,1],easeOut:[0,0,.2,1],easeInOut:[.4,0,.2,1]},pu={scale:{enter:{scale:1},exit:{scale:.95}},fade:{enter:{opacity:1},exit:{opacity:0}},pushLeft:{enter:{x:"100%"},exit:{x:"-30%"}},pushRight:{enter:{x:"-100%"},exit:{x:"30%"}},pushUp:{enter:{y:"100%"},exit:{y:"-30%"}},pushDown:{enter:{y:"-100%"},exit:{y:"30%"}},slideLeft:{position:{left:0,top:0,bottom:0,width:"100%"},enter:{x:0,y:0},exit:{x:"-100%",y:0}},slideRight:{position:{right:0,top:0,bottom:0,width:"100%"},enter:{x:0,y:0},exit:{x:"100%",y:0}},slideUp:{position:{top:0,left:0,right:0,maxWidth:"100vw"},enter:{x:0,y:0},exit:{x:0,y:"-100%"}},slideDown:{position:{bottom:0,left:0,right:0,maxWidth:"100vw"},enter:{x:0,y:0},exit:{x:0,y:"100%"}}};function zv(e){var t;switch((t=e==null?void 0:e.direction)!=null?t:"right"){case"right":return pu.slideRight;case"left":return pu.slideLeft;case"bottom":return pu.slideDown;case"top":return pu.slideUp;default:return pu.slideRight}}var Yi={enter:{duration:.2,ease:Ki.easeOut},exit:{duration:.1,ease:Ki.easeIn}},ks={enter:(e,t)=>({...e,delay:typeof t=="number"?t:t==null?void 0:t.enter}),exit:(e,t)=>({...e,delay:typeof t=="number"?t:t==null?void 0:t.exit})},wA=e=>e!=null&&parseInt(e.toString(),10)>0,Ew={exit:{height:{duration:.2,ease:Ki.ease},opacity:{duration:.3,ease:Ki.ease}},enter:{height:{duration:.3,ease:Ki.ease},opacity:{duration:.4,ease:Ki.ease}}},SA={exit:({animateOpacity:e,startingHeight:t,transition:n,transitionEnd:r,delay:o})=>{var s;return{...e&&{opacity:wA(t)?1:0},height:t,transitionEnd:r==null?void 0:r.exit,transition:(s=n==null?void 0:n.exit)!=null?s:ks.exit(Ew.exit,o)}},enter:({animateOpacity:e,endingHeight:t,transition:n,transitionEnd:r,delay:o})=>{var s;return{...e&&{opacity:1},height:t,transitionEnd:r==null?void 0:r.enter,transition:(s=n==null?void 0:n.enter)!=null?s:ks.enter(Ew.enter,o)}}},pm=f.forwardRef((e,t)=>{const{in:n,unmountOnExit:r,animateOpacity:o=!0,startingHeight:s=0,endingHeight:a="auto",style:c,className:d,transition:p,transitionEnd:h,...m}=e,[v,b]=f.useState(!1);f.useEffect(()=>{const k=setTimeout(()=>{b(!0)});return()=>clearTimeout(k)},[]),gd({condition:Number(s)>0&&!!r,message:"startingHeight and unmountOnExit are mutually exclusive. You can't use them together"});const w=parseFloat(s.toString())>0,y={startingHeight:s,endingHeight:a,animateOpacity:o,transition:v?p:{enter:{duration:0}},transitionEnd:{enter:h==null?void 0:h.enter,exit:r?h==null?void 0:h.exit:{...h==null?void 0:h.exit,display:w?"block":"none"}}},S=r?n:!0,_=n||r?"enter":"exit";return i.jsx(mo,{initial:!1,custom:y,children:S&&i.jsx(Ir.div,{ref:t,...m,className:Ct("chakra-collapse",d),style:{overflow:"hidden",display:"block",...c},custom:y,variants:SA,initial:r?"exit":!1,animate:_,exit:"exit"})})});pm.displayName="Collapse";var CA={enter:({transition:e,transitionEnd:t,delay:n}={})=>{var r;return{opacity:1,transition:(r=e==null?void 0:e.enter)!=null?r:ks.enter(Yi.enter,n),transitionEnd:t==null?void 0:t.enter}},exit:({transition:e,transitionEnd:t,delay:n}={})=>{var r;return{opacity:0,transition:(r=e==null?void 0:e.exit)!=null?r:ks.exit(Yi.exit,n),transitionEnd:t==null?void 0:t.exit}}},B5={initial:"exit",animate:"enter",exit:"exit",variants:CA},kA=f.forwardRef(function(t,n){const{unmountOnExit:r,in:o,className:s,transition:a,transitionEnd:c,delay:d,...p}=t,h=o||r?"enter":"exit",m=r?o&&r:!0,v={transition:a,transitionEnd:c,delay:d};return i.jsx(mo,{custom:v,children:m&&i.jsx(Ir.div,{ref:n,className:Ct("chakra-fade",s),custom:v,...B5,animate:h,...p})})});kA.displayName="Fade";var _A={exit:({reverse:e,initialScale:t,transition:n,transitionEnd:r,delay:o})=>{var s;return{opacity:0,...e?{scale:t,transitionEnd:r==null?void 0:r.exit}:{transitionEnd:{scale:t,...r==null?void 0:r.exit}},transition:(s=n==null?void 0:n.exit)!=null?s:ks.exit(Yi.exit,o)}},enter:({transitionEnd:e,transition:t,delay:n})=>{var r;return{opacity:1,scale:1,transition:(r=t==null?void 0:t.enter)!=null?r:ks.enter(Yi.enter,n),transitionEnd:e==null?void 0:e.enter}}},F5={initial:"exit",animate:"enter",exit:"exit",variants:_A},PA=f.forwardRef(function(t,n){const{unmountOnExit:r,in:o,reverse:s=!0,initialScale:a=.95,className:c,transition:d,transitionEnd:p,delay:h,...m}=t,v=r?o&&r:!0,b=o||r?"enter":"exit",w={initialScale:a,reverse:s,transition:d,transitionEnd:p,delay:h};return i.jsx(mo,{custom:w,children:v&&i.jsx(Ir.div,{ref:n,className:Ct("chakra-offset-slide",c),...F5,animate:b,custom:w,...m})})});PA.displayName="ScaleFade";var jA={initial:({offsetX:e,offsetY:t,transition:n,transitionEnd:r,delay:o})=>{var s;return{opacity:0,x:e,y:t,transition:(s=n==null?void 0:n.exit)!=null?s:ks.exit(Yi.exit,o),transitionEnd:r==null?void 0:r.exit}},enter:({transition:e,transitionEnd:t,delay:n})=>{var r;return{opacity:1,x:0,y:0,transition:(r=e==null?void 0:e.enter)!=null?r:ks.enter(Yi.enter,n),transitionEnd:t==null?void 0:t.enter}},exit:({offsetY:e,offsetX:t,transition:n,transitionEnd:r,reverse:o,delay:s})=>{var a;const c={x:t,y:e};return{opacity:0,transition:(a=n==null?void 0:n.exit)!=null?a:ks.exit(Yi.exit,s),...o?{...c,transitionEnd:r==null?void 0:r.exit}:{transitionEnd:{...c,...r==null?void 0:r.exit}}}}},Lv={initial:"initial",animate:"enter",exit:"exit",variants:jA},IA=f.forwardRef(function(t,n){const{unmountOnExit:r,in:o,reverse:s=!0,className:a,offsetX:c=0,offsetY:d=8,transition:p,transitionEnd:h,delay:m,...v}=t,b=r?o&&r:!0,w=o||r?"enter":"exit",y={offsetX:c,offsetY:d,reverse:s,transition:p,transitionEnd:h,delay:m};return i.jsx(mo,{custom:y,children:b&&i.jsx(Ir.div,{ref:n,className:Ct("chakra-offset-slide",a),custom:y,...Lv,animate:w,...v})})});IA.displayName="SlideFade";var Ow={exit:{duration:.15,ease:Ki.easeInOut},enter:{type:"spring",damping:25,stiffness:180}},EA={exit:({direction:e,transition:t,transitionEnd:n,delay:r})=>{var o;const{exit:s}=zv({direction:e});return{...s,transition:(o=t==null?void 0:t.exit)!=null?o:ks.exit(Ow.exit,r),transitionEnd:n==null?void 0:n.exit}},enter:({direction:e,transitionEnd:t,transition:n,delay:r})=>{var o;const{enter:s}=zv({direction:e});return{...s,transition:(o=n==null?void 0:n.enter)!=null?o:ks.enter(Ow.enter,r),transitionEnd:t==null?void 0:t.enter}}},H5=f.forwardRef(function(t,n){const{direction:r="right",style:o,unmountOnExit:s,in:a,className:c,transition:d,transitionEnd:p,delay:h,motionProps:m,...v}=t,b=zv({direction:r}),w=Object.assign({position:"fixed"},b.position,o),y=s?a&&s:!0,S=a||s?"enter":"exit",_={transitionEnd:p,transition:d,direction:r,delay:h};return i.jsx(mo,{custom:_,children:y&&i.jsx(Ir.div,{...v,ref:n,initial:"exit",className:Ct("chakra-slide",c),animate:S,exit:"exit",custom:_,variants:EA,style:w,...m})})});H5.displayName="Slide";var Ru=Ae(function(t,n){const{className:r,motionProps:o,...s}=t,{reduceMotion:a}=pb(),{getPanelProps:c,isOpen:d}=fb(),p=c(s,n),h=Ct("chakra-accordion__panel",r),m=fm();a||delete p.hidden;const v=i.jsx(je.div,{...p,__css:m.panel,className:h});return a?v:i.jsx(pm,{in:d,...o,children:v})});Ru.displayName="AccordionPanel";var W5=Ae(function({children:t,reduceMotion:n,...r},o){const s=Fr("Accordion",r),a=qn(r),{htmlProps:c,descendants:d,...p}=hA(a),h=f.useMemo(()=>({...p,reduceMotion:!!n}),[p,n]);return i.jsx(dA,{value:d,children:i.jsx(mA,{value:h,children:i.jsx(cA,{value:s,children:i.jsx(je.div,{ref:o,...c,className:Ct("chakra-accordion",r.className),__css:s.root,children:t})})})})});W5.displayName="Accordion";function Cd(e){return f.Children.toArray(e).filter(t=>f.isValidElement(t))}var[OA,RA]=Dn({strict:!1,name:"ButtonGroupContext"}),MA={horizontal:{"> *:first-of-type:not(:last-of-type)":{borderEndRadius:0},"> *:not(:first-of-type):not(:last-of-type)":{borderRadius:0},"> *:not(:first-of-type):last-of-type":{borderStartRadius:0}},vertical:{"> *:first-of-type:not(:last-of-type)":{borderBottomRadius:0},"> *:not(:first-of-type):not(:last-of-type)":{borderRadius:0},"> *:not(:first-of-type):last-of-type":{borderTopRadius:0}}},DA={horizontal:e=>({"& > *:not(style) ~ *:not(style)":{marginStart:e}}),vertical:e=>({"& > *:not(style) ~ *:not(style)":{marginTop:e}})},rr=Ae(function(t,n){const{size:r,colorScheme:o,variant:s,className:a,spacing:c="0.5rem",isAttached:d,isDisabled:p,orientation:h="horizontal",...m}=t,v=Ct("chakra-button__group",a),b=f.useMemo(()=>({size:r,colorScheme:o,variant:s,isDisabled:p}),[r,o,s,p]);let w={display:"inline-flex",...d?MA[h]:DA[h](c)};const y=h==="vertical";return i.jsx(OA,{value:b,children:i.jsx(je.div,{ref:n,role:"group",__css:w,className:v,"data-attached":d?"":void 0,"data-orientation":h,flexDir:y?"column":void 0,...m})})});rr.displayName="ButtonGroup";function AA(e){const[t,n]=f.useState(!e);return{ref:f.useCallback(s=>{s&&n(s.tagName==="BUTTON")},[]),type:t?"button":void 0}}function Bv(e){const{children:t,className:n,...r}=e,o=f.isValidElement(t)?f.cloneElement(t,{"aria-hidden":!0,focusable:!1}):t,s=Ct("chakra-button__icon",n);return i.jsx(je.span,{display:"inline-flex",alignSelf:"center",flexShrink:0,...r,className:s,children:o})}Bv.displayName="ButtonIcon";function Gp(e){const{label:t,placement:n,spacing:r="0.5rem",children:o=i.jsx(pl,{color:"currentColor",width:"1em",height:"1em"}),className:s,__css:a,...c}=e,d=Ct("chakra-button__spinner",s),p=n==="start"?"marginEnd":"marginStart",h=f.useMemo(()=>({display:"flex",alignItems:"center",position:t?"relative":"absolute",[p]:t?r:0,fontSize:"1em",lineHeight:"normal",...a}),[a,t,p,r]);return i.jsx(je.div,{className:d,...c,__css:h,children:o})}Gp.displayName="ButtonSpinner";var bc=Ae((e,t)=>{const n=RA(),r=ia("Button",{...n,...e}),{isDisabled:o=n==null?void 0:n.isDisabled,isLoading:s,isActive:a,children:c,leftIcon:d,rightIcon:p,loadingText:h,iconSpacing:m="0.5rem",type:v,spinner:b,spinnerPlacement:w="start",className:y,as:S,..._}=qn(e),k=f.useMemo(()=>{const O={...r==null?void 0:r._focus,zIndex:1};return{display:"inline-flex",appearance:"none",alignItems:"center",justifyContent:"center",userSelect:"none",position:"relative",whiteSpace:"nowrap",verticalAlign:"middle",outline:"none",...r,...!!n&&{_focus:O}}},[r,n]),{ref:j,type:I}=AA(S),E={rightIcon:p,leftIcon:d,iconSpacing:m,children:c};return i.jsxs(je.button,{ref:sA(t,j),as:S,type:v??I,"data-active":Ft(a),"data-loading":Ft(s),__css:k,className:Ct("chakra-button",y),..._,disabled:o||s,children:[s&&w==="start"&&i.jsx(Gp,{className:"chakra-button__spinner--start",label:h,placement:"start",spacing:m,children:b}),s?h||i.jsx(je.span,{opacity:0,children:i.jsx(Rw,{...E})}):i.jsx(Rw,{...E}),s&&w==="end"&&i.jsx(Gp,{className:"chakra-button__spinner--end",label:h,placement:"end",spacing:m,children:b})]})});bc.displayName="Button";function Rw(e){const{leftIcon:t,rightIcon:n,children:r,iconSpacing:o}=e;return i.jsxs(i.Fragment,{children:[t&&i.jsx(Bv,{marginEnd:o,children:t}),r,n&&i.jsx(Bv,{marginStart:o,children:n})]})}var Ca=Ae((e,t)=>{const{icon:n,children:r,isRound:o,"aria-label":s,...a}=e,c=n||r,d=f.isValidElement(c)?f.cloneElement(c,{"aria-hidden":!0,focusable:!1}):null;return i.jsx(bc,{padding:"0",borderRadius:o?"full":void 0,ref:t,"aria-label":s,...a,children:d})});Ca.displayName="IconButton";var[Rde,TA]=Dn({name:"CheckboxGroupContext",strict:!1});function NA(e){const[t,n]=f.useState(e),[r,o]=f.useState(!1);return e!==t&&(o(!0),n(e)),r}function $A(e){return i.jsx(je.svg,{width:"1.2em",viewBox:"0 0 12 10",style:{fill:"none",strokeWidth:2,stroke:"currentColor",strokeDasharray:16},...e,children:i.jsx("polyline",{points:"1.5 6 4.5 9 10.5 1"})})}function zA(e){return i.jsx(je.svg,{width:"1.2em",viewBox:"0 0 24 24",style:{stroke:"currentColor",strokeWidth:4},...e,children:i.jsx("line",{x1:"21",x2:"3",y1:"12",y2:"12"})})}function LA(e){const{isIndeterminate:t,isChecked:n,...r}=e,o=t?zA:$A;return n||t?i.jsx(je.div,{style:{display:"flex",alignItems:"center",justifyContent:"center",height:"100%"},children:i.jsx(o,{...r})}):null}var[BA,V5]=Dn({name:"FormControlStylesContext",errorMessage:`useFormControlStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),[FA,kd]=Dn({strict:!1,name:"FormControlContext"});function HA(e){const{id:t,isRequired:n,isInvalid:r,isDisabled:o,isReadOnly:s,...a}=e,c=f.useId(),d=t||`field-${c}`,p=`${d}-label`,h=`${d}-feedback`,m=`${d}-helptext`,[v,b]=f.useState(!1),[w,y]=f.useState(!1),[S,_]=f.useState(!1),k=f.useCallback((R={},M=null)=>({id:m,...R,ref:cn(M,A=>{A&&y(!0)})}),[m]),j=f.useCallback((R={},M=null)=>({...R,ref:M,"data-focus":Ft(S),"data-disabled":Ft(o),"data-invalid":Ft(r),"data-readonly":Ft(s),id:R.id!==void 0?R.id:p,htmlFor:R.htmlFor!==void 0?R.htmlFor:d}),[d,o,S,r,s,p]),I=f.useCallback((R={},M=null)=>({id:h,...R,ref:cn(M,A=>{A&&b(!0)}),"aria-live":"polite"}),[h]),E=f.useCallback((R={},M=null)=>({...R,...a,ref:M,role:"group"}),[a]),O=f.useCallback((R={},M=null)=>({...R,ref:M,role:"presentation","aria-hidden":!0,children:R.children||"*"}),[]);return{isRequired:!!n,isInvalid:!!r,isReadOnly:!!s,isDisabled:!!o,isFocused:!!S,onFocus:()=>_(!0),onBlur:()=>_(!1),hasFeedbackText:v,setHasFeedbackText:b,hasHelpText:w,setHasHelpText:y,id:d,labelId:p,feedbackId:h,helpTextId:m,htmlProps:a,getHelpTextProps:k,getErrorMessageProps:I,getRootProps:E,getLabelProps:j,getRequiredIndicatorProps:O}}var go=Ae(function(t,n){const r=Fr("Form",t),o=qn(t),{getRootProps:s,htmlProps:a,...c}=HA(o),d=Ct("chakra-form-control",t.className);return i.jsx(FA,{value:c,children:i.jsx(BA,{value:r,children:i.jsx(je.div,{...s({},n),className:d,__css:r.container})})})});go.displayName="FormControl";var WA=Ae(function(t,n){const r=kd(),o=V5(),s=Ct("chakra-form__helper-text",t.className);return i.jsx(je.div,{...r==null?void 0:r.getHelpTextProps(t,n),__css:o.helperText,className:s})});WA.displayName="FormHelperText";var Lo=Ae(function(t,n){var r;const o=ia("FormLabel",t),s=qn(t),{className:a,children:c,requiredIndicator:d=i.jsx(U5,{}),optionalIndicator:p=null,...h}=s,m=kd(),v=(r=m==null?void 0:m.getLabelProps(h,n))!=null?r:{ref:n,...h};return i.jsxs(je.label,{...v,className:Ct("chakra-form__label",s.className),__css:{display:"block",textAlign:"start",...o},children:[c,m!=null&&m.isRequired?d:p]})});Lo.displayName="FormLabel";var U5=Ae(function(t,n){const r=kd(),o=V5();if(!(r!=null&&r.isRequired))return null;const s=Ct("chakra-form__required-indicator",t.className);return i.jsx(je.span,{...r==null?void 0:r.getRequiredIndicatorProps(t,n),__css:o.requiredIndicator,className:s})});U5.displayName="RequiredIndicator";function hb(e){const{isDisabled:t,isInvalid:n,isReadOnly:r,isRequired:o,...s}=mb(e);return{...s,disabled:t,readOnly:r,required:o,"aria-invalid":ns(n),"aria-required":ns(o),"aria-readonly":ns(r)}}function mb(e){var t,n,r;const o=kd(),{id:s,disabled:a,readOnly:c,required:d,isRequired:p,isInvalid:h,isReadOnly:m,isDisabled:v,onFocus:b,onBlur:w,...y}=e,S=e["aria-describedby"]?[e["aria-describedby"]]:[];return o!=null&&o.hasFeedbackText&&(o!=null&&o.isInvalid)&&S.push(o.feedbackId),o!=null&&o.hasHelpText&&S.push(o.helpTextId),{...y,"aria-describedby":S.join(" ")||void 0,id:s??(o==null?void 0:o.id),isDisabled:(t=a??v)!=null?t:o==null?void 0:o.isDisabled,isReadOnly:(n=c??m)!=null?n:o==null?void 0:o.isReadOnly,isRequired:(r=d??p)!=null?r:o==null?void 0:o.isRequired,isInvalid:h??(o==null?void 0:o.isInvalid),onFocus:nt(o==null?void 0:o.onFocus,b),onBlur:nt(o==null?void 0:o.onBlur,w)}}var gb={border:"0",clip:"rect(0, 0, 0, 0)",height:"1px",width:"1px",margin:"-1px",padding:"0",overflow:"hidden",whiteSpace:"nowrap",position:"absolute"},G5=je("span",{baseStyle:gb});G5.displayName="VisuallyHidden";var VA=je("input",{baseStyle:gb});VA.displayName="VisuallyHiddenInput";const UA=()=>typeof document<"u";let Mw=!1,_d=null,ol=!1,Fv=!1;const Hv=new Set;function vb(e,t){Hv.forEach(n=>n(e,t))}const GA=typeof window<"u"&&window.navigator!=null?/^Mac/.test(window.navigator.platform):!1;function qA(e){return!(e.metaKey||!GA&&e.altKey||e.ctrlKey||e.key==="Control"||e.key==="Shift"||e.key==="Meta")}function Dw(e){ol=!0,qA(e)&&(_d="keyboard",vb("keyboard",e))}function Tl(e){if(_d="pointer",e.type==="mousedown"||e.type==="pointerdown"){ol=!0;const t=e.composedPath?e.composedPath()[0]:e.target;let n=!1;try{n=t.matches(":focus-visible")}catch{}if(n)return;vb("pointer",e)}}function KA(e){return e.mozInputSource===0&&e.isTrusted?!0:e.detail===0&&!e.pointerType}function XA(e){KA(e)&&(ol=!0,_d="virtual")}function YA(e){e.target===window||e.target===document||(!ol&&!Fv&&(_d="virtual",vb("virtual",e)),ol=!1,Fv=!1)}function QA(){ol=!1,Fv=!0}function Aw(){return _d!=="pointer"}function JA(){if(!UA()||Mw)return;const{focus:e}=HTMLElement.prototype;HTMLElement.prototype.focus=function(...n){ol=!0,e.apply(this,n)},document.addEventListener("keydown",Dw,!0),document.addEventListener("keyup",Dw,!0),document.addEventListener("click",XA,!0),window.addEventListener("focus",YA,!0),window.addEventListener("blur",QA,!1),typeof PointerEvent<"u"?(document.addEventListener("pointerdown",Tl,!0),document.addEventListener("pointermove",Tl,!0),document.addEventListener("pointerup",Tl,!0)):(document.addEventListener("mousedown",Tl,!0),document.addEventListener("mousemove",Tl,!0),document.addEventListener("mouseup",Tl,!0)),Mw=!0}function q5(e){JA(),e(Aw());const t=()=>e(Aw());return Hv.add(t),()=>{Hv.delete(t)}}function ZA(e,t=[]){const n=Object.assign({},e);for(const r of t)r in n&&delete n[r];return n}function K5(e={}){const t=mb(e),{isDisabled:n,isReadOnly:r,isRequired:o,isInvalid:s,id:a,onBlur:c,onFocus:d,"aria-describedby":p}=t,{defaultChecked:h,isChecked:m,isFocusable:v,onChange:b,isIndeterminate:w,name:y,value:S,tabIndex:_=void 0,"aria-label":k,"aria-labelledby":j,"aria-invalid":I,...E}=e,O=ZA(E,["isDisabled","isReadOnly","isRequired","isInvalid","id","onBlur","onFocus","aria-describedby"]),R=or(b),M=or(c),A=or(d),[T,$]=f.useState(!1),[Q,B]=f.useState(!1),[V,q]=f.useState(!1),[G,D]=f.useState(!1);f.useEffect(()=>q5($),[]);const L=f.useRef(null),[W,Y]=f.useState(!0),[ae,be]=f.useState(!!h),ie=m!==void 0,X=ie?m:ae,K=f.useCallback(de=>{if(r||n){de.preventDefault();return}ie||be(X?de.target.checked:w?!0:de.target.checked),R==null||R(de)},[r,n,X,ie,w,R]);tc(()=>{L.current&&(L.current.indeterminate=!!w)},[w]),Ba(()=>{n&&B(!1)},[n,B]),tc(()=>{const de=L.current;if(!(de!=null&&de.form))return;const Te=()=>{be(!!h)};return de.form.addEventListener("reset",Te),()=>{var Oe;return(Oe=de.form)==null?void 0:Oe.removeEventListener("reset",Te)}},[]);const U=n&&!v,se=f.useCallback(de=>{de.key===" "&&D(!0)},[D]),re=f.useCallback(de=>{de.key===" "&&D(!1)},[D]);tc(()=>{if(!L.current)return;L.current.checked!==X&&be(L.current.checked)},[L.current]);const oe=f.useCallback((de={},Te=null)=>{const Oe=$e=>{Q&&$e.preventDefault(),D(!0)};return{...de,ref:Te,"data-active":Ft(G),"data-hover":Ft(V),"data-checked":Ft(X),"data-focus":Ft(Q),"data-focus-visible":Ft(Q&&T),"data-indeterminate":Ft(w),"data-disabled":Ft(n),"data-invalid":Ft(s),"data-readonly":Ft(r),"aria-hidden":!0,onMouseDown:nt(de.onMouseDown,Oe),onMouseUp:nt(de.onMouseUp,()=>D(!1)),onMouseEnter:nt(de.onMouseEnter,()=>q(!0)),onMouseLeave:nt(de.onMouseLeave,()=>q(!1))}},[G,X,n,Q,T,V,w,s,r]),pe=f.useCallback((de={},Te=null)=>({...de,ref:Te,"data-active":Ft(G),"data-hover":Ft(V),"data-checked":Ft(X),"data-focus":Ft(Q),"data-focus-visible":Ft(Q&&T),"data-indeterminate":Ft(w),"data-disabled":Ft(n),"data-invalid":Ft(s),"data-readonly":Ft(r)}),[G,X,n,Q,T,V,w,s,r]),le=f.useCallback((de={},Te=null)=>({...O,...de,ref:cn(Te,Oe=>{Oe&&Y(Oe.tagName==="LABEL")}),onClick:nt(de.onClick,()=>{var Oe;W||((Oe=L.current)==null||Oe.click(),requestAnimationFrame(()=>{var $e;($e=L.current)==null||$e.focus({preventScroll:!0})}))}),"data-disabled":Ft(n),"data-checked":Ft(X),"data-invalid":Ft(s)}),[O,n,X,s,W]),ge=f.useCallback((de={},Te=null)=>({...de,ref:cn(L,Te),type:"checkbox",name:y,value:S,id:a,tabIndex:_,onChange:nt(de.onChange,K),onBlur:nt(de.onBlur,M,()=>B(!1)),onFocus:nt(de.onFocus,A,()=>B(!0)),onKeyDown:nt(de.onKeyDown,se),onKeyUp:nt(de.onKeyUp,re),required:o,checked:X,disabled:U,readOnly:r,"aria-label":k,"aria-labelledby":j,"aria-invalid":I?!!I:s,"aria-describedby":p,"aria-disabled":n,style:gb}),[y,S,a,K,M,A,se,re,o,X,U,r,k,j,I,s,p,n,_]),ke=f.useCallback((de={},Te=null)=>({...de,ref:Te,onMouseDown:nt(de.onMouseDown,eT),"data-disabled":Ft(n),"data-checked":Ft(X),"data-invalid":Ft(s)}),[X,n,s]);return{state:{isInvalid:s,isFocused:Q,isChecked:X,isActive:G,isHovered:V,isIndeterminate:w,isDisabled:n,isReadOnly:r,isRequired:o},getRootProps:le,getCheckboxProps:oe,getIndicatorProps:pe,getInputProps:ge,getLabelProps:ke,htmlProps:O}}function eT(e){e.preventDefault(),e.stopPropagation()}var tT={display:"inline-flex",alignItems:"center",justifyContent:"center",verticalAlign:"top",userSelect:"none",flexShrink:0},nT={cursor:"pointer",display:"inline-flex",alignItems:"center",verticalAlign:"top",position:"relative"},rT=za({from:{opacity:0,strokeDashoffset:16,transform:"scale(0.95)"},to:{opacity:1,strokeDashoffset:0,transform:"scale(1)"}}),oT=za({from:{opacity:0},to:{opacity:1}}),sT=za({from:{transform:"scaleX(0.65)"},to:{transform:"scaleX(1)"}}),X5=Ae(function(t,n){const r=TA(),o={...r,...t},s=Fr("Checkbox",o),a=qn(t),{spacing:c="0.5rem",className:d,children:p,iconColor:h,iconSize:m,icon:v=i.jsx(LA,{}),isChecked:b,isDisabled:w=r==null?void 0:r.isDisabled,onChange:y,inputProps:S,..._}=a;let k=b;r!=null&&r.value&&a.value&&(k=r.value.includes(a.value));let j=y;r!=null&&r.onChange&&a.value&&(j=sm(r.onChange,y));const{state:I,getInputProps:E,getCheckboxProps:O,getLabelProps:R,getRootProps:M}=K5({..._,isDisabled:w,isChecked:k,onChange:j}),A=NA(I.isChecked),T=f.useMemo(()=>({animation:A?I.isIndeterminate?`${oT} 20ms linear, ${sT} 200ms linear`:`${rT} 200ms linear`:void 0,fontSize:m,color:h,...s.icon}),[h,m,A,I.isIndeterminate,s.icon]),$=f.cloneElement(v,{__css:T,isIndeterminate:I.isIndeterminate,isChecked:I.isChecked});return i.jsxs(je.label,{__css:{...nT,...s.container},className:Ct("chakra-checkbox",d),...M(),children:[i.jsx("input",{className:"chakra-checkbox__input",...E(S,n)}),i.jsx(je.span,{__css:{...tT,...s.control},className:"chakra-checkbox__control",...O(),children:$}),p&&i.jsx(je.span,{className:"chakra-checkbox__label",...R(),__css:{marginStart:c,...s.label},children:p})]})});X5.displayName="Checkbox";function aT(e){const t=parseFloat(e);return typeof t!="number"||Number.isNaN(t)?0:t}function bb(e,t){let n=aT(e);const r=10**(t??10);return n=Math.round(n*r)/r,t?n.toFixed(t):n.toString()}function Wv(e){if(!Number.isFinite(e))return 0;let t=1,n=0;for(;Math.round(e*t)/t!==e;)t*=10,n+=1;return n}function qp(e,t,n){return(e-t)*100/(n-t)}function Y5(e,t,n){return(n-t)*e+t}function Vv(e,t,n){const r=Math.round((e-t)/n)*n+t,o=Wv(n);return bb(r,o)}function sc(e,t,n){return e==null?e:(n{var T;return r==null?"":(T=k0(r,s,n))!=null?T:""}),v=typeof o<"u",b=v?o:h,w=Q5(ni(b),s),y=n??w,S=f.useCallback(T=>{T!==b&&(v||m(T.toString()),p==null||p(T.toString(),ni(T)))},[p,v,b]),_=f.useCallback(T=>{let $=T;return d&&($=sc($,a,c)),bb($,y)},[y,d,c,a]),k=f.useCallback((T=s)=>{let $;b===""?$=ni(T):$=ni(b)+T,$=_($),S($)},[_,s,S,b]),j=f.useCallback((T=s)=>{let $;b===""?$=ni(-T):$=ni(b)-T,$=_($),S($)},[_,s,S,b]),I=f.useCallback(()=>{var T;let $;r==null?$="":$=(T=k0(r,s,n))!=null?T:a,S($)},[r,n,s,S,a]),E=f.useCallback(T=>{var $;const Q=($=k0(T,s,y))!=null?$:a;S(Q)},[y,s,S,a]),O=ni(b);return{isOutOfRange:O>c||O" `}),[cT,Z5]=Dn({name:"EditableContext",errorMessage:"useEditableContext: context is undefined. Seems you forgot to wrap the editable components in ``"}),e3={fontSize:"inherit",fontWeight:"inherit",textAlign:"inherit",bg:"transparent"},t3=Ae(function(t,n){const{getInputProps:r}=Z5(),o=J5(),s=r(t,n),a=Ct("chakra-editable__input",t.className);return i.jsx(je.input,{...s,__css:{outline:0,...e3,...o.input},className:a})});t3.displayName="EditableInput";var n3=Ae(function(t,n){const{getPreviewProps:r}=Z5(),o=J5(),s=r(t,n),a=Ct("chakra-editable__preview",t.className);return i.jsx(je.span,{...s,__css:{cursor:"text",display:"inline-block",...e3,...o.preview},className:a})});n3.displayName="EditablePreview";function Qi(e,t,n,r){const o=or(n);return f.useEffect(()=>{const s=typeof e=="function"?e():e??document;if(!(!n||!s))return s.addEventListener(t,o,r),()=>{s.removeEventListener(t,o,r)}},[t,e,r,o,n]),()=>{const s=typeof e=="function"?e():e??document;s==null||s.removeEventListener(t,o,r)}}function uT(e){return"current"in e}var r3=()=>typeof window<"u";function dT(){var e;const t=navigator.userAgentData;return(e=t==null?void 0:t.platform)!=null?e:navigator.platform}var fT=e=>r3()&&e.test(navigator.vendor),pT=e=>r3()&&e.test(dT()),hT=()=>pT(/mac|iphone|ipad|ipod/i),mT=()=>hT()&&fT(/apple/i);function o3(e){const{ref:t,elements:n,enabled:r}=e,o=()=>{var s,a;return(a=(s=t.current)==null?void 0:s.ownerDocument)!=null?a:document};Qi(o,"pointerdown",s=>{if(!mT()||!r)return;const a=s.target,d=(n??[t]).some(p=>{const h=uT(p)?p.current:p;return(h==null?void 0:h.contains(a))||h===a});o().activeElement!==a&&d&&(s.preventDefault(),a.focus())})}function Tw(e,t){return e?e===t||e.contains(t):!1}function gT(e={}){const{onChange:t,onCancel:n,onSubmit:r,onBlur:o,value:s,isDisabled:a,defaultValue:c,startWithEditView:d,isPreviewFocusable:p=!0,submitOnBlur:h=!0,selectAllOnFocus:m=!0,placeholder:v,onEdit:b,finalFocusRef:w,...y}=e,S=or(b),_=!!(d&&!a),[k,j]=f.useState(_),[I,E]=$c({defaultValue:c||"",value:s,onChange:t}),[O,R]=f.useState(I),M=f.useRef(null),A=f.useRef(null),T=f.useRef(null),$=f.useRef(null),Q=f.useRef(null);o3({ref:M,enabled:k,elements:[$,Q]});const B=!k&&!a;tc(()=>{var oe,pe;k&&((oe=M.current)==null||oe.focus(),m&&((pe=M.current)==null||pe.select()))},[]),Ba(()=>{var oe,pe,le,ge;if(!k){w?(oe=w.current)==null||oe.focus():(pe=T.current)==null||pe.focus();return}(le=M.current)==null||le.focus(),m&&((ge=M.current)==null||ge.select()),S==null||S()},[k,S,m]);const V=f.useCallback(()=>{B&&j(!0)},[B]),q=f.useCallback(()=>{R(I)},[I]),G=f.useCallback(()=>{j(!1),E(O),n==null||n(O),o==null||o(O)},[n,o,E,O]),D=f.useCallback(()=>{j(!1),R(I),r==null||r(I),o==null||o(O)},[I,r,o,O]);f.useEffect(()=>{if(k)return;const oe=M.current;(oe==null?void 0:oe.ownerDocument.activeElement)===oe&&(oe==null||oe.blur())},[k]);const L=f.useCallback(oe=>{E(oe.currentTarget.value)},[E]),W=f.useCallback(oe=>{const pe=oe.key,ge={Escape:G,Enter:ke=>{!ke.shiftKey&&!ke.metaKey&&D()}}[pe];ge&&(oe.preventDefault(),ge(oe))},[G,D]),Y=f.useCallback(oe=>{const pe=oe.key,ge={Escape:G}[pe];ge&&(oe.preventDefault(),ge(oe))},[G]),ae=I.length===0,be=f.useCallback(oe=>{var pe;if(!k)return;const le=oe.currentTarget.ownerDocument,ge=(pe=oe.relatedTarget)!=null?pe:le.activeElement,ke=Tw($.current,ge),xe=Tw(Q.current,ge);!ke&&!xe&&(h?D():G())},[h,D,G,k]),ie=f.useCallback((oe={},pe=null)=>{const le=B&&p?0:void 0;return{...oe,ref:cn(pe,A),children:ae?v:I,hidden:k,"aria-disabled":ns(a),tabIndex:le,onFocus:nt(oe.onFocus,V,q)}},[a,k,B,p,ae,V,q,v,I]),X=f.useCallback((oe={},pe=null)=>({...oe,hidden:!k,placeholder:v,ref:cn(pe,M),disabled:a,"aria-disabled":ns(a),value:I,onBlur:nt(oe.onBlur,be),onChange:nt(oe.onChange,L),onKeyDown:nt(oe.onKeyDown,W),onFocus:nt(oe.onFocus,q)}),[a,k,be,L,W,q,v,I]),K=f.useCallback((oe={},pe=null)=>({...oe,hidden:!k,placeholder:v,ref:cn(pe,M),disabled:a,"aria-disabled":ns(a),value:I,onBlur:nt(oe.onBlur,be),onChange:nt(oe.onChange,L),onKeyDown:nt(oe.onKeyDown,Y),onFocus:nt(oe.onFocus,q)}),[a,k,be,L,Y,q,v,I]),U=f.useCallback((oe={},pe=null)=>({"aria-label":"Edit",...oe,type:"button",onClick:nt(oe.onClick,V),ref:cn(pe,T),disabled:a}),[V,a]),se=f.useCallback((oe={},pe=null)=>({...oe,"aria-label":"Submit",ref:cn(Q,pe),type:"button",onClick:nt(oe.onClick,D),disabled:a}),[D,a]),re=f.useCallback((oe={},pe=null)=>({"aria-label":"Cancel",id:"cancel",...oe,ref:cn($,pe),type:"button",onClick:nt(oe.onClick,G),disabled:a}),[G,a]);return{isEditing:k,isDisabled:a,isValueEmpty:ae,value:I,onEdit:V,onCancel:G,onSubmit:D,getPreviewProps:ie,getInputProps:X,getTextareaProps:K,getEditButtonProps:U,getSubmitButtonProps:se,getCancelButtonProps:re,htmlProps:y}}var s3=Ae(function(t,n){const r=Fr("Editable",t),o=qn(t),{htmlProps:s,...a}=gT(o),{isEditing:c,onSubmit:d,onCancel:p,onEdit:h}=a,m=Ct("chakra-editable",t.className),v=X1(t.children,{isEditing:c,onSubmit:d,onCancel:p,onEdit:h});return i.jsx(cT,{value:a,children:i.jsx(lT,{value:r,children:i.jsx(je.div,{ref:n,...s,className:m,children:v})})})});s3.displayName="Editable";var a3={exports:{}},vT="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED",bT=vT,yT=bT;function i3(){}function l3(){}l3.resetWarningCache=i3;var xT=function(){function e(r,o,s,a,c,d){if(d!==yT){var p=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw p.name="Invariant Violation",p}}e.isRequired=e;function t(){return e}var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:l3,resetWarningCache:i3};return n.PropTypes=n,n};a3.exports=xT();var wT=a3.exports;const Ln=vd(wT);var Uv="data-focus-lock",c3="data-focus-lock-disabled",ST="data-no-focus-lock",CT="data-autofocus-inside",kT="data-no-autofocus";function _T(e,t){return typeof e=="function"?e(t):e&&(e.current=t),e}function PT(e,t){var n=f.useState(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(r){var o=n.value;o!==r&&(n.value=r,n.callback(r,o))}}}})[0];return n.callback=t,n.facade}function u3(e,t){return PT(t||null,function(n){return e.forEach(function(r){return _T(r,n)})})}var _0={width:"1px",height:"0px",padding:0,overflow:"hidden",position:"fixed",top:"1px",left:"1px"},Qs=function(){return Qs=Object.assign||function(t){for(var n,r=1,o=arguments.length;r0&&s[s.length-1])&&(p[0]===6||p[0]===2)){n=0;continue}if(p[0]===3&&(!s||p[1]>s[0]&&p[1]0)&&!(o=r.next()).done;)s.push(o.value)}catch(c){a={error:c}}finally{try{o&&!o.done&&(n=r.return)&&n.call(r)}finally{if(a)throw a.error}}return s}function Gv(e,t,n){if(n||arguments.length===2)for(var r=0,o=t.length,s;r=0}).sort(BT)},FT=["button:enabled","select:enabled","textarea:enabled","input:enabled","a[href]","area[href]","summary","iframe","object","embed","audio[controls]","video[controls]","[tabindex]","[contenteditable]","[autofocus]"],Sb=FT.join(","),HT="".concat(Sb,", [data-focus-guard]"),I3=function(e,t){return la((e.shadowRoot||e).children).reduce(function(n,r){return n.concat(r.matches(t?HT:Sb)?[r]:[],I3(r))},[])},WT=function(e,t){var n;return e instanceof HTMLIFrameElement&&(!((n=e.contentDocument)===null||n===void 0)&&n.body)?hm([e.contentDocument.body],t):[e]},hm=function(e,t){return e.reduce(function(n,r){var o,s=I3(r,t),a=(o=[]).concat.apply(o,s.map(function(c){return WT(c,t)}));return n.concat(a,r.parentNode?la(r.parentNode.querySelectorAll(Sb)).filter(function(c){return c===r}):[])},[])},VT=function(e){var t=e.querySelectorAll("[".concat(CT,"]"));return la(t).map(function(n){return hm([n])}).reduce(function(n,r){return n.concat(r)},[])},Cb=function(e,t){return la(e).filter(function(n){return S3(t,n)}).filter(function(n){return $T(n)})},$w=function(e,t){return t===void 0&&(t=new Map),la(e).filter(function(n){return C3(t,n)})},Kv=function(e,t,n){return j3(Cb(hm(e,n),t),!0,n)},zw=function(e,t){return j3(Cb(hm(e),t),!1)},UT=function(e,t){return Cb(VT(e),t)},ac=function(e,t){return e.shadowRoot?ac(e.shadowRoot,t):Object.getPrototypeOf(e).contains!==void 0&&Object.getPrototypeOf(e).contains.call(e,t)?!0:la(e.children).some(function(n){var r;if(n instanceof HTMLIFrameElement){var o=(r=n.contentDocument)===null||r===void 0?void 0:r.body;return o?ac(o,t):!1}return ac(n,t)})},GT=function(e){for(var t=new Set,n=e.length,r=0;r0&&t.add(o),(s&Node.DOCUMENT_POSITION_CONTAINS)>0&&t.add(r)}return e.filter(function(a,c){return!t.has(c)})},E3=function(e){return e.parentNode?E3(e.parentNode):e},kb=function(e){var t=Kp(e);return t.filter(Boolean).reduce(function(n,r){var o=r.getAttribute(Uv);return n.push.apply(n,o?GT(la(E3(r).querySelectorAll("[".concat(Uv,'="').concat(o,'"]:not([').concat(c3,'="disabled"])')))):[r]),n},[])},qT=function(e){try{return e()}catch{return}},ed=function(e){if(e===void 0&&(e=document),!(!e||!e.activeElement)){var t=e.activeElement;return t.shadowRoot?ed(t.shadowRoot):t instanceof HTMLIFrameElement&&qT(function(){return t.contentWindow.document})?ed(t.contentWindow.document):t}},KT=function(e,t){return e===t},XT=function(e,t){return!!la(e.querySelectorAll("iframe")).some(function(n){return KT(n,t)})},O3=function(e,t){return t===void 0&&(t=ed(y3(e).ownerDocument)),!t||t.dataset&&t.dataset.focusGuard?!1:kb(e).some(function(n){return ac(n,t)||XT(n,t)})},YT=function(e){e===void 0&&(e=document);var t=ed(e);return t?la(e.querySelectorAll("[".concat(ST,"]"))).some(function(n){return ac(n,t)}):!1},QT=function(e,t){return t.filter(P3).filter(function(n){return n.name===e.name}).filter(function(n){return n.checked})[0]||e},_b=function(e,t){return P3(e)&&e.name?QT(e,t):e},JT=function(e){var t=new Set;return e.forEach(function(n){return t.add(_b(n,e))}),e.filter(function(n){return t.has(n)})},Lw=function(e){return e[0]&&e.length>1?_b(e[0],e):e[0]},Bw=function(e,t){return e.length>1?e.indexOf(_b(e[t],e)):t},R3="NEW_FOCUS",ZT=function(e,t,n,r){var o=e.length,s=e[0],a=e[o-1],c=wb(n);if(!(n&&e.indexOf(n)>=0)){var d=n!==void 0?t.indexOf(n):-1,p=r?t.indexOf(r):d,h=r?e.indexOf(r):-1,m=d-p,v=t.indexOf(s),b=t.indexOf(a),w=JT(t),y=n!==void 0?w.indexOf(n):-1,S=y-(r?w.indexOf(r):d),_=Bw(e,0),k=Bw(e,o-1);if(d===-1||h===-1)return R3;if(!m&&h>=0)return h;if(d<=v&&c&&Math.abs(m)>1)return k;if(d>=b&&c&&Math.abs(m)>1)return _;if(m&&Math.abs(S)>1)return h;if(d<=v)return k;if(d>b)return _;if(m)return Math.abs(m)>1?h:(o+h+m)%o}},eN=function(e){return function(t){var n,r=(n=k3(t))===null||n===void 0?void 0:n.autofocus;return t.autofocus||r!==void 0&&r!=="false"||e.indexOf(t)>=0}},tN=function(e,t,n){var r=e.map(function(s){var a=s.node;return a}),o=$w(r.filter(eN(n)));return o&&o.length?Lw(o):Lw($w(t))},Xv=function(e,t){return t===void 0&&(t=[]),t.push(e),e.parentNode&&Xv(e.parentNode.host||e.parentNode,t),t},P0=function(e,t){for(var n=Xv(e),r=Xv(t),o=0;o=0)return s}return!1},M3=function(e,t,n){var r=Kp(e),o=Kp(t),s=r[0],a=!1;return o.filter(Boolean).forEach(function(c){a=P0(a||c,c)||a,n.filter(Boolean).forEach(function(d){var p=P0(s,d);p&&(!a||ac(p,a)?a=p:a=P0(p,a))})}),a},nN=function(e,t){return e.reduce(function(n,r){return n.concat(UT(r,t))},[])},rN=function(e,t){var n=new Map;return t.forEach(function(r){return n.set(r.node,r)}),e.map(function(r){return n.get(r)}).filter(LT)},oN=function(e,t){var n=ed(Kp(e).length>0?document:y3(e).ownerDocument),r=kb(e).filter(Xp),o=M3(n||e,e,r),s=new Map,a=zw(r,s),c=Kv(r,s).filter(function(b){var w=b.node;return Xp(w)});if(!(!c[0]&&(c=a,!c[0]))){var d=zw([o],s).map(function(b){var w=b.node;return w}),p=rN(d,c),h=p.map(function(b){var w=b.node;return w}),m=ZT(h,d,n,t);if(m===R3){var v=tN(a,h,nN(r,s));if(v)return{node:v};console.warn("focus-lock: cannot find any node to move focus into");return}return m===void 0?m:p[m]}},sN=function(e){var t=kb(e).filter(Xp),n=M3(e,e,t),r=new Map,o=Kv([n],r,!0),s=Kv(t,r).filter(function(a){var c=a.node;return Xp(c)}).map(function(a){var c=a.node;return c});return o.map(function(a){var c=a.node,d=a.index;return{node:c,index:d,lockItem:s.indexOf(c)>=0,guard:wb(c)}})},aN=function(e,t){"focus"in e&&e.focus(t),"contentWindow"in e&&e.contentWindow&&e.contentWindow.focus()},j0=0,I0=!1,D3=function(e,t,n){n===void 0&&(n={});var r=oN(e,t);if(!I0&&r){if(j0>2){console.error("FocusLock: focus-fighting detected. Only one focus management system could be active. See https://github.com/theKashey/focus-lock/#focus-fighting"),I0=!0,setTimeout(function(){I0=!1},1);return}j0++,aN(r.node,n.focusOptions),j0--}};function Pb(e){setTimeout(e,1)}var iN=function(){return document&&document.activeElement===document.body},lN=function(){return iN()||YT()},ic=null,Yl=null,lc=null,td=!1,cN=function(){return!0},uN=function(t){return(ic.whiteList||cN)(t)},dN=function(t,n){lc={observerNode:t,portaledElement:n}},fN=function(t){return lc&&lc.portaledElement===t};function Fw(e,t,n,r){var o=null,s=e;do{var a=r[s];if(a.guard)a.node.dataset.focusAutoGuard&&(o=a);else if(a.lockItem){if(s!==e)return;o=null}else break}while((s+=n)!==t);o&&(o.node.tabIndex=0)}var pN=function(t){return t&&"current"in t?t.current:t},hN=function(t){return t?!!td:td==="meanwhile"},mN=function e(t,n,r){return n&&(n.host===t&&(!n.activeElement||r.contains(n.activeElement))||n.parentNode&&e(t,n.parentNode,r))},gN=function(t,n){return n.some(function(r){return mN(t,r,r)})},Yp=function(){var t=!1;if(ic){var n=ic,r=n.observed,o=n.persistentFocus,s=n.autoFocus,a=n.shards,c=n.crossFrame,d=n.focusOptions,p=r||lc&&lc.portaledElement,h=document&&document.activeElement;if(p){var m=[p].concat(a.map(pN).filter(Boolean));if((!h||uN(h))&&(o||hN(c)||!lN()||!Yl&&s)&&(p&&!(O3(m)||h&&gN(h,m)||fN(h))&&(document&&!Yl&&h&&!s?(h.blur&&h.blur(),document.body.focus()):(t=D3(m,Yl,{focusOptions:d}),lc={})),td=!1,Yl=document&&document.activeElement),document){var v=document&&document.activeElement,b=sN(m),w=b.map(function(y){var S=y.node;return S}).indexOf(v);w>-1&&(b.filter(function(y){var S=y.guard,_=y.node;return S&&_.dataset.focusAutoGuard}).forEach(function(y){var S=y.node;return S.removeAttribute("tabIndex")}),Fw(w,b.length,1,b),Fw(w,-1,-1,b))}}}return t},A3=function(t){Yp()&&t&&(t.stopPropagation(),t.preventDefault())},jb=function(){return Pb(Yp)},vN=function(t){var n=t.target,r=t.currentTarget;r.contains(n)||dN(r,n)},bN=function(){return null},T3=function(){td="just",Pb(function(){td="meanwhile"})},yN=function(){document.addEventListener("focusin",A3),document.addEventListener("focusout",jb),window.addEventListener("blur",T3)},xN=function(){document.removeEventListener("focusin",A3),document.removeEventListener("focusout",jb),window.removeEventListener("blur",T3)};function wN(e){return e.filter(function(t){var n=t.disabled;return!n})}function SN(e){var t=e.slice(-1)[0];t&&!ic&&yN();var n=ic,r=n&&t&&t.id===n.id;ic=t,n&&!r&&(n.onDeactivation(),e.filter(function(o){var s=o.id;return s===n.id}).length||n.returnFocus(!t)),t?(Yl=null,(!r||n.observed!==t.observed)&&t.onActivation(),Yp(),Pb(Yp)):(xN(),Yl=null)}g3.assignSyncMedium(vN);v3.assignMedium(jb);IT.assignMedium(function(e){return e({moveFocusInside:D3,focusInside:O3})});const CN=MT(wN,SN)(bN);var N3=f.forwardRef(function(t,n){return f.createElement(b3,sr({sideCar:CN,ref:n},t))}),$3=b3.propTypes||{};$3.sideCar;JD($3,["sideCar"]);N3.propTypes={};const Hw=N3;function z3(e){return e!=null&&typeof e=="object"&&"nodeType"in e&&e.nodeType===Node.ELEMENT_NODE}function Ib(e){var t;if(!z3(e))return!1;const n=(t=e.ownerDocument.defaultView)!=null?t:window;return e instanceof n.HTMLElement}function kN(e){var t,n;return(n=(t=L3(e))==null?void 0:t.defaultView)!=null?n:window}function L3(e){return z3(e)?e.ownerDocument:document}function _N(e){return L3(e).activeElement}function PN(e){const t=e.ownerDocument.defaultView||window,{overflow:n,overflowX:r,overflowY:o}=t.getComputedStyle(e);return/auto|scroll|overlay|hidden/.test(n+o+r)}function jN(e){return e.localName==="html"?e:e.assignedSlot||e.parentElement||e.ownerDocument.documentElement}function B3(e){return["html","body","#document"].includes(e.localName)?e.ownerDocument.body:Ib(e)&&PN(e)?e:B3(jN(e))}var F3=e=>e.hasAttribute("tabindex"),IN=e=>F3(e)&&e.tabIndex===-1;function EN(e){return!!e.getAttribute("disabled")||!!e.getAttribute("aria-disabled")}function H3(e){return e.parentElement&&H3(e.parentElement)?!0:e.hidden}function ON(e){const t=e.getAttribute("contenteditable");return t!=="false"&&t!=null}function W3(e){if(!Ib(e)||H3(e)||EN(e))return!1;const{localName:t}=e;if(["input","select","textarea","button"].indexOf(t)>=0)return!0;const r={a:()=>e.hasAttribute("href"),audio:()=>e.hasAttribute("controls"),video:()=>e.hasAttribute("controls")};return t in r?r[t]():ON(e)?!0:F3(e)}function RN(e){return e?Ib(e)&&W3(e)&&!IN(e):!1}var MN=["input:not(:disabled):not([disabled])","select:not(:disabled):not([disabled])","textarea:not(:disabled):not([disabled])","embed","iframe","object","a[href]","area[href]","button:not(:disabled):not([disabled])","[tabindex]","audio[controls]","video[controls]","*[tabindex]:not([aria-disabled])","*[contenteditable]"],DN=MN.join(),AN=e=>e.offsetWidth>0&&e.offsetHeight>0;function V3(e){const t=Array.from(e.querySelectorAll(DN));return t.unshift(e),t.filter(n=>W3(n)&&AN(n))}var Ww,TN=(Ww=Hw.default)!=null?Ww:Hw,U3=e=>{const{initialFocusRef:t,finalFocusRef:n,contentRef:r,restoreFocus:o,children:s,isDisabled:a,autoFocus:c,persistentFocus:d,lockFocusAcrossFrames:p}=e,h=f.useCallback(()=>{t!=null&&t.current?t.current.focus():r!=null&&r.current&&V3(r.current).length===0&&requestAnimationFrame(()=>{var w;(w=r.current)==null||w.focus()})},[t,r]),m=f.useCallback(()=>{var b;(b=n==null?void 0:n.current)==null||b.focus()},[n]),v=o&&!n;return i.jsx(TN,{crossFrame:p,persistentFocus:d,autoFocus:c,disabled:a,onActivation:h,onDeactivation:m,returnFocus:v,children:s})};U3.displayName="FocusLock";function NN(e,t,n,r){const o=E_(t);return f.useEffect(()=>{var s;const a=(s=V2(n))!=null?s:document;if(t)return a.addEventListener(e,o,r),()=>{a.removeEventListener(e,o,r)}},[e,n,r,o,t]),()=>{var s;((s=V2(n))!=null?s:document).removeEventListener(e,o,r)}}function $N(e){const{ref:t,handler:n,enabled:r=!0}=e,o=E_(n),a=f.useRef({isPointerDown:!1,ignoreEmulatedMouseEvents:!1}).current;f.useEffect(()=>{if(!r)return;const c=m=>{E0(m,t)&&(a.isPointerDown=!0)},d=m=>{if(a.ignoreEmulatedMouseEvents){a.ignoreEmulatedMouseEvents=!1;return}a.isPointerDown&&n&&E0(m,t)&&(a.isPointerDown=!1,o(m))},p=m=>{a.ignoreEmulatedMouseEvents=!0,n&&a.isPointerDown&&E0(m,t)&&(a.isPointerDown=!1,o(m))},h=O_(t.current);return h.addEventListener("mousedown",c,!0),h.addEventListener("mouseup",d,!0),h.addEventListener("touchstart",c,!0),h.addEventListener("touchend",p,!0),()=>{h.removeEventListener("mousedown",c,!0),h.removeEventListener("mouseup",d,!0),h.removeEventListener("touchstart",c,!0),h.removeEventListener("touchend",p,!0)}},[n,t,o,a,r])}function E0(e,t){var n;const r=e.target;return r&&!O_(r).contains(r)?!1:!((n=t.current)!=null&&n.contains(r))}var[zN,LN]=Dn({name:"InputGroupStylesContext",errorMessage:`useInputGroupStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),G3=Ae(function(t,n){const r=Fr("Input",t),{children:o,className:s,...a}=qn(t),c=Ct("chakra-input__group",s),d={},p=Cd(o),h=r.field;p.forEach(v=>{var b,w;r&&(h&&v.type.id==="InputLeftElement"&&(d.paddingStart=(b=h.height)!=null?b:h.h),h&&v.type.id==="InputRightElement"&&(d.paddingEnd=(w=h.height)!=null?w:h.h),v.type.id==="InputRightAddon"&&(d.borderEndRadius=0),v.type.id==="InputLeftAddon"&&(d.borderStartRadius=0))});const m=p.map(v=>{var b,w;const y=ub({size:((b=v.props)==null?void 0:b.size)||t.size,variant:((w=v.props)==null?void 0:w.variant)||t.variant});return v.type.id!=="Input"?f.cloneElement(v,y):f.cloneElement(v,Object.assign(y,d,v.props))});return i.jsx(je.div,{className:c,ref:n,__css:{width:"100%",display:"flex",position:"relative",isolation:"isolate",...r.group},"data-group":!0,...a,children:i.jsx(zN,{value:r,children:m})})});G3.displayName="InputGroup";var BN=je("div",{baseStyle:{display:"flex",alignItems:"center",justifyContent:"center",position:"absolute",top:"0",zIndex:2}}),mm=Ae(function(t,n){var r,o;const{placement:s="left",...a}=t,c=LN(),d=c.field,h={[s==="left"?"insetStart":"insetEnd"]:"0",width:(r=d==null?void 0:d.height)!=null?r:d==null?void 0:d.h,height:(o=d==null?void 0:d.height)!=null?o:d==null?void 0:d.h,fontSize:d==null?void 0:d.fontSize,...c.element};return i.jsx(BN,{ref:n,__css:h,...a})});mm.id="InputElement";mm.displayName="InputElement";var q3=Ae(function(t,n){const{className:r,...o}=t,s=Ct("chakra-input__left-element",r);return i.jsx(mm,{ref:n,placement:"left",className:s,...o})});q3.id="InputLeftElement";q3.displayName="InputLeftElement";var Eb=Ae(function(t,n){const{className:r,...o}=t,s=Ct("chakra-input__right-element",r);return i.jsx(mm,{ref:n,placement:"right",className:s,...o})});Eb.id="InputRightElement";Eb.displayName="InputRightElement";var Pd=Ae(function(t,n){const{htmlSize:r,...o}=t,s=Fr("Input",o),a=qn(o),c=hb(a),d=Ct("chakra-input",t.className);return i.jsx(je.input,{size:r,...c,__css:s.field,ref:n,className:d})});Pd.displayName="Input";Pd.id="Input";var Ob=Ae(function(t,n){const r=ia("Link",t),{className:o,isExternal:s,...a}=qn(t);return i.jsx(je.a,{target:s?"_blank":void 0,rel:s?"noopener":void 0,ref:n,className:Ct("chakra-link",o),...a,__css:r})});Ob.displayName="Link";var[FN,K3]=Dn({name:"ListStylesContext",errorMessage:`useListStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),Rb=Ae(function(t,n){const r=Fr("List",t),{children:o,styleType:s="none",stylePosition:a,spacing:c,...d}=qn(t),p=Cd(o),m=c?{["& > *:not(style) ~ *:not(style)"]:{mt:c}}:{};return i.jsx(FN,{value:r,children:i.jsx(je.ul,{ref:n,listStyleType:s,listStylePosition:a,role:"list",__css:{...r.container,...m},...d,children:p})})});Rb.displayName="List";var HN=Ae((e,t)=>{const{as:n,...r}=e;return i.jsx(Rb,{ref:t,as:"ol",styleType:"decimal",marginStart:"1em",...r})});HN.displayName="OrderedList";var Mb=Ae(function(t,n){const{as:r,...o}=t;return i.jsx(Rb,{ref:n,as:"ul",styleType:"initial",marginStart:"1em",...o})});Mb.displayName="UnorderedList";var wa=Ae(function(t,n){const r=K3();return i.jsx(je.li,{ref:n,...t,__css:r.item})});wa.displayName="ListItem";var WN=Ae(function(t,n){const r=K3();return i.jsx(no,{ref:n,role:"presentation",...t,__css:r.icon})});WN.displayName="ListIcon";var sl=Ae(function(t,n){const{templateAreas:r,gap:o,rowGap:s,columnGap:a,column:c,row:d,autoFlow:p,autoRows:h,templateRows:m,autoColumns:v,templateColumns:b,...w}=t,y={display:"grid",gridTemplateAreas:r,gridGap:o,gridRowGap:s,gridColumnGap:a,gridAutoColumns:v,gridColumn:c,gridRow:d,gridAutoFlow:p,gridAutoRows:h,gridTemplateRows:m,gridTemplateColumns:b};return i.jsx(je.div,{ref:n,__css:y,...w})});sl.displayName="Grid";function X3(e,t){return Array.isArray(e)?e.map(n=>n===null?null:t(n)):_v(e)?Object.keys(e).reduce((n,r)=>(n[r]=t(e[r]),n),{}):e!=null?t(e):null}var hl=je("div",{baseStyle:{flex:1,justifySelf:"stretch",alignSelf:"stretch"}});hl.displayName="Spacer";var qe=Ae(function(t,n){const r=ia("Text",t),{className:o,align:s,decoration:a,casing:c,...d}=qn(t),p=ub({textAlign:t.align,textDecoration:t.decoration,textTransform:t.casing});return i.jsx(je.p,{ref:n,className:Ct("chakra-text",t.className),...p,...d,__css:r})});qe.displayName="Text";var Y3=e=>i.jsx(je.div,{className:"chakra-stack__item",...e,__css:{display:"inline-block",flex:"0 0 auto",minWidth:0,...e.__css}});Y3.displayName="StackItem";function VN(e){const{spacing:t,direction:n}=e,r={column:{my:t,mx:0,borderLeftWidth:0,borderBottomWidth:"1px"},"column-reverse":{my:t,mx:0,borderLeftWidth:0,borderBottomWidth:"1px"},row:{mx:t,my:0,borderLeftWidth:"1px",borderBottomWidth:0},"row-reverse":{mx:t,my:0,borderLeftWidth:"1px",borderBottomWidth:0}};return{"&":X3(n,o=>r[o])}}var Db=Ae((e,t)=>{const{isInline:n,direction:r,align:o,justify:s,spacing:a="0.5rem",wrap:c,children:d,divider:p,className:h,shouldWrapChildren:m,...v}=e,b=n?"row":r??"column",w=f.useMemo(()=>VN({spacing:a,direction:b}),[a,b]),y=!!p,S=!m&&!y,_=f.useMemo(()=>{const j=Cd(d);return S?j:j.map((I,E)=>{const O=typeof I.key<"u"?I.key:E,R=E+1===j.length,A=m?i.jsx(Y3,{children:I},O):I;if(!y)return A;const T=f.cloneElement(p,{__css:w}),$=R?null:T;return i.jsxs(f.Fragment,{children:[A,$]},O)})},[p,w,y,S,m,d]),k=Ct("chakra-stack",h);return i.jsx(je.div,{ref:t,display:"flex",alignItems:o,justifyContent:s,flexDirection:b,flexWrap:c,gap:y?void 0:a,className:k,...v,children:_})});Db.displayName="Stack";var Q3=Ae((e,t)=>i.jsx(Db,{align:"center",...e,direction:"column",ref:t}));Q3.displayName="VStack";var di=Ae((e,t)=>i.jsx(Db,{align:"center",...e,direction:"row",ref:t}));di.displayName="HStack";function Vw(e){return X3(e,t=>t==="auto"?"auto":`span ${t}/span ${t}`)}var Yv=Ae(function(t,n){const{area:r,colSpan:o,colStart:s,colEnd:a,rowEnd:c,rowSpan:d,rowStart:p,...h}=t,m=ub({gridArea:r,gridColumn:Vw(o),gridRow:Vw(d),gridColumnStart:s,gridColumnEnd:a,gridRowStart:p,gridRowEnd:c});return i.jsx(je.div,{ref:n,__css:m,...h})});Yv.displayName="GridItem";var ml=Ae(function(t,n){const r=ia("Badge",t),{className:o,...s}=qn(t);return i.jsx(je.span,{ref:n,className:Ct("chakra-badge",t.className),...s,__css:{display:"inline-block",whiteSpace:"nowrap",verticalAlign:"middle",...r}})});ml.displayName="Badge";var Pi=Ae(function(t,n){const{borderLeftWidth:r,borderBottomWidth:o,borderTopWidth:s,borderRightWidth:a,borderWidth:c,borderStyle:d,borderColor:p,...h}=ia("Divider",t),{className:m,orientation:v="horizontal",__css:b,...w}=qn(t),y={vertical:{borderLeftWidth:r||a||c||"1px",height:"100%"},horizontal:{borderBottomWidth:o||s||c||"1px",width:"100%"}};return i.jsx(je.hr,{ref:n,"aria-orientation":v,...w,__css:{...h,border:"0",borderColor:p,borderStyle:d,...y[v],...b},className:Ct("chakra-divider",m)})});Pi.displayName="Divider";function UN(e){const{key:t}=e;return t.length===1||t.length>1&&/[^a-zA-Z0-9]/.test(t)}function GN(e={}){const{timeout:t=300,preventDefault:n=()=>!0}=e,[r,o]=f.useState([]),s=f.useRef(),a=()=>{s.current&&(clearTimeout(s.current),s.current=null)},c=()=>{a(),s.current=setTimeout(()=>{o([]),s.current=null},t)};f.useEffect(()=>a,[]);function d(p){return h=>{if(h.key==="Backspace"){const m=[...r];m.pop(),o(m);return}if(UN(h)){const m=r.concat(h.key);n(h)&&(h.preventDefault(),h.stopPropagation()),o(m),p(m.join("")),c()}}}return d}function qN(e,t,n,r){if(t==null)return r;if(!r)return e.find(a=>n(a).toLowerCase().startsWith(t.toLowerCase()));const o=e.filter(s=>n(s).toLowerCase().startsWith(t.toLowerCase()));if(o.length>0){let s;return o.includes(r)?(s=o.indexOf(r)+1,s===o.length&&(s=0),o[s]):(s=e.indexOf(o[0]),e[s])}return r}function KN(){const e=f.useRef(new Map),t=e.current,n=f.useCallback((o,s,a,c)=>{e.current.set(a,{type:s,el:o,options:c}),o.addEventListener(s,a,c)},[]),r=f.useCallback((o,s,a,c)=>{o.removeEventListener(s,a,c),e.current.delete(a)},[]);return f.useEffect(()=>()=>{t.forEach((o,s)=>{r(o.el,o.type,s,o.options)})},[r,t]),{add:n,remove:r}}function O0(e){const t=e.target,{tagName:n,isContentEditable:r}=t;return n!=="INPUT"&&n!=="TEXTAREA"&&r!==!0}function J3(e={}){const{ref:t,isDisabled:n,isFocusable:r,clickOnEnter:o=!0,clickOnSpace:s=!0,onMouseDown:a,onMouseUp:c,onClick:d,onKeyDown:p,onKeyUp:h,tabIndex:m,onMouseOver:v,onMouseLeave:b,...w}=e,[y,S]=f.useState(!0),[_,k]=f.useState(!1),j=KN(),I=D=>{D&&D.tagName!=="BUTTON"&&S(!1)},E=y?m:m||0,O=n&&!r,R=f.useCallback(D=>{if(n){D.stopPropagation(),D.preventDefault();return}D.currentTarget.focus(),d==null||d(D)},[n,d]),M=f.useCallback(D=>{_&&O0(D)&&(D.preventDefault(),D.stopPropagation(),k(!1),j.remove(document,"keyup",M,!1))},[_,j]),A=f.useCallback(D=>{if(p==null||p(D),n||D.defaultPrevented||D.metaKey||!O0(D.nativeEvent)||y)return;const L=o&&D.key==="Enter";s&&D.key===" "&&(D.preventDefault(),k(!0)),L&&(D.preventDefault(),D.currentTarget.click()),j.add(document,"keyup",M,!1)},[n,y,p,o,s,j,M]),T=f.useCallback(D=>{if(h==null||h(D),n||D.defaultPrevented||D.metaKey||!O0(D.nativeEvent)||y)return;s&&D.key===" "&&(D.preventDefault(),k(!1),D.currentTarget.click())},[s,y,n,h]),$=f.useCallback(D=>{D.button===0&&(k(!1),j.remove(document,"mouseup",$,!1))},[j]),Q=f.useCallback(D=>{if(D.button!==0)return;if(n){D.stopPropagation(),D.preventDefault();return}y||k(!0),D.currentTarget.focus({preventScroll:!0}),j.add(document,"mouseup",$,!1),a==null||a(D)},[n,y,a,j,$]),B=f.useCallback(D=>{D.button===0&&(y||k(!1),c==null||c(D))},[c,y]),V=f.useCallback(D=>{if(n){D.preventDefault();return}v==null||v(D)},[n,v]),q=f.useCallback(D=>{_&&(D.preventDefault(),k(!1)),b==null||b(D)},[_,b]),G=cn(t,I);return y?{...w,ref:G,type:"button","aria-disabled":O?void 0:n,disabled:O,onClick:R,onMouseDown:a,onMouseUp:c,onKeyUp:h,onKeyDown:p,onMouseOver:v,onMouseLeave:b}:{...w,ref:G,role:"button","data-active":Ft(_),"aria-disabled":n?"true":void 0,tabIndex:O?void 0:E,onClick:R,onMouseDown:Q,onMouseUp:B,onKeyUp:T,onKeyDown:A,onMouseOver:V,onMouseLeave:q}}function XN(e){const t=e.current;if(!t)return!1;const n=_N(t);return!n||t.contains(n)?!1:!!RN(n)}function Z3(e,t){const{shouldFocus:n,visible:r,focusRef:o}=t,s=n&&!r;Ba(()=>{if(!s||XN(e))return;const a=(o==null?void 0:o.current)||e.current;let c;if(a)return c=requestAnimationFrame(()=>{a.focus({preventScroll:!0})}),()=>{cancelAnimationFrame(c)}},[s,e,o])}var YN={preventScroll:!0,shouldFocus:!1};function QN(e,t=YN){const{focusRef:n,preventScroll:r,shouldFocus:o,visible:s}=t,a=JN(e)?e.current:e,c=o&&s,d=f.useRef(c),p=f.useRef(s);tc(()=>{!p.current&&s&&(d.current=c),p.current=s},[s,c]);const h=f.useCallback(()=>{if(!(!s||!a||!d.current)&&(d.current=!1,!a.contains(document.activeElement)))if(n!=null&&n.current)requestAnimationFrame(()=>{var m;(m=n.current)==null||m.focus({preventScroll:r})});else{const m=V3(a);m.length>0&&requestAnimationFrame(()=>{m[0].focus({preventScroll:r})})}},[s,r,a,n]);Ba(()=>{h()},[h]),Qi(a,"transitionend",h)}function JN(e){return"current"in e}var Nl=(e,t)=>({var:e,varRef:t?`var(${e}, ${t})`:`var(${e})`}),jr={arrowShadowColor:Nl("--popper-arrow-shadow-color"),arrowSize:Nl("--popper-arrow-size","8px"),arrowSizeHalf:Nl("--popper-arrow-size-half"),arrowBg:Nl("--popper-arrow-bg"),transformOrigin:Nl("--popper-transform-origin"),arrowOffset:Nl("--popper-arrow-offset")};function ZN(e){if(e.includes("top"))return"1px 1px 0px 0 var(--popper-arrow-shadow-color)";if(e.includes("bottom"))return"-1px -1px 0px 0 var(--popper-arrow-shadow-color)";if(e.includes("right"))return"-1px 1px 0px 0 var(--popper-arrow-shadow-color)";if(e.includes("left"))return"1px -1px 0px 0 var(--popper-arrow-shadow-color)"}var e$={top:"bottom center","top-start":"bottom left","top-end":"bottom right",bottom:"top center","bottom-start":"top left","bottom-end":"top right",left:"right center","left-start":"right top","left-end":"right bottom",right:"left center","right-start":"left top","right-end":"left bottom"},t$=e=>e$[e],Uw={scroll:!0,resize:!0};function n$(e){let t;return typeof e=="object"?t={enabled:!0,options:{...Uw,...e}}:t={enabled:e,options:Uw},t}var r$={name:"matchWidth",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:({state:e})=>{e.styles.popper.width=`${e.rects.reference.width}px`},effect:({state:e})=>()=>{const t=e.elements.reference;e.elements.popper.style.width=`${t.offsetWidth}px`}},o$={name:"transformOrigin",enabled:!0,phase:"write",fn:({state:e})=>{Gw(e)},effect:({state:e})=>()=>{Gw(e)}},Gw=e=>{e.elements.popper.style.setProperty(jr.transformOrigin.var,t$(e.placement))},s$={name:"positionArrow",enabled:!0,phase:"afterWrite",fn:({state:e})=>{a$(e)}},a$=e=>{var t;if(!e.placement)return;const n=i$(e.placement);if((t=e.elements)!=null&&t.arrow&&n){Object.assign(e.elements.arrow.style,{[n.property]:n.value,width:jr.arrowSize.varRef,height:jr.arrowSize.varRef,zIndex:-1});const r={[jr.arrowSizeHalf.var]:`calc(${jr.arrowSize.varRef} / 2 - 1px)`,[jr.arrowOffset.var]:`calc(${jr.arrowSizeHalf.varRef} * -1)`};for(const o in r)e.elements.arrow.style.setProperty(o,r[o])}},i$=e=>{if(e.startsWith("top"))return{property:"bottom",value:jr.arrowOffset.varRef};if(e.startsWith("bottom"))return{property:"top",value:jr.arrowOffset.varRef};if(e.startsWith("left"))return{property:"right",value:jr.arrowOffset.varRef};if(e.startsWith("right"))return{property:"left",value:jr.arrowOffset.varRef}},l$={name:"innerArrow",enabled:!0,phase:"main",requires:["arrow"],fn:({state:e})=>{qw(e)},effect:({state:e})=>()=>{qw(e)}},qw=e=>{if(!e.elements.arrow)return;const t=e.elements.arrow.querySelector("[data-popper-arrow-inner]");if(!t)return;const n=ZN(e.placement);n&&t.style.setProperty("--popper-arrow-default-shadow",n),Object.assign(t.style,{transform:"rotate(45deg)",background:jr.arrowBg.varRef,top:0,left:0,width:"100%",height:"100%",position:"absolute",zIndex:"inherit",boxShadow:"var(--popper-arrow-shadow, var(--popper-arrow-default-shadow))"})},c$={"start-start":{ltr:"left-start",rtl:"right-start"},"start-end":{ltr:"left-end",rtl:"right-end"},"end-start":{ltr:"right-start",rtl:"left-start"},"end-end":{ltr:"right-end",rtl:"left-end"},start:{ltr:"left",rtl:"right"},end:{ltr:"right",rtl:"left"}},u$={"auto-start":"auto-end","auto-end":"auto-start","top-start":"top-end","top-end":"top-start","bottom-start":"bottom-end","bottom-end":"bottom-start"};function d$(e,t="ltr"){var n,r;const o=((n=c$[e])==null?void 0:n[t])||e;return t==="ltr"?o:(r=u$[e])!=null?r:o}var _o="top",as="bottom",is="right",Po="left",Ab="auto",jd=[_o,as,is,Po],yc="start",nd="end",f$="clippingParents",e6="viewport",hu="popper",p$="reference",Kw=jd.reduce(function(e,t){return e.concat([t+"-"+yc,t+"-"+nd])},[]),t6=[].concat(jd,[Ab]).reduce(function(e,t){return e.concat([t,t+"-"+yc,t+"-"+nd])},[]),h$="beforeRead",m$="read",g$="afterRead",v$="beforeMain",b$="main",y$="afterMain",x$="beforeWrite",w$="write",S$="afterWrite",C$=[h$,m$,g$,v$,b$,y$,x$,w$,S$];function ra(e){return e?(e.nodeName||"").toLowerCase():null}function Bo(e){if(e==null)return window;if(e.toString()!=="[object Window]"){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function al(e){var t=Bo(e).Element;return e instanceof t||e instanceof Element}function rs(e){var t=Bo(e).HTMLElement;return e instanceof t||e instanceof HTMLElement}function Tb(e){if(typeof ShadowRoot>"u")return!1;var t=Bo(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}function k$(e){var t=e.state;Object.keys(t.elements).forEach(function(n){var r=t.styles[n]||{},o=t.attributes[n]||{},s=t.elements[n];!rs(s)||!ra(s)||(Object.assign(s.style,r),Object.keys(o).forEach(function(a){var c=o[a];c===!1?s.removeAttribute(a):s.setAttribute(a,c===!0?"":c)}))})}function _$(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(r){var o=t.elements[r],s=t.attributes[r]||{},a=Object.keys(t.styles.hasOwnProperty(r)?t.styles[r]:n[r]),c=a.reduce(function(d,p){return d[p]="",d},{});!rs(o)||!ra(o)||(Object.assign(o.style,c),Object.keys(s).forEach(function(d){o.removeAttribute(d)}))})}}const P$={name:"applyStyles",enabled:!0,phase:"write",fn:k$,effect:_$,requires:["computeStyles"]};function ta(e){return e.split("-")[0]}var Ji=Math.max,Qp=Math.min,xc=Math.round;function Qv(){var e=navigator.userAgentData;return e!=null&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(t){return t.brand+"/"+t.version}).join(" "):navigator.userAgent}function n6(){return!/^((?!chrome|android).)*safari/i.test(Qv())}function wc(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var r=e.getBoundingClientRect(),o=1,s=1;t&&rs(e)&&(o=e.offsetWidth>0&&xc(r.width)/e.offsetWidth||1,s=e.offsetHeight>0&&xc(r.height)/e.offsetHeight||1);var a=al(e)?Bo(e):window,c=a.visualViewport,d=!n6()&&n,p=(r.left+(d&&c?c.offsetLeft:0))/o,h=(r.top+(d&&c?c.offsetTop:0))/s,m=r.width/o,v=r.height/s;return{width:m,height:v,top:h,right:p+m,bottom:h+v,left:p,x:p,y:h}}function Nb(e){var t=wc(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function r6(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&Tb(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function Oa(e){return Bo(e).getComputedStyle(e)}function j$(e){return["table","td","th"].indexOf(ra(e))>=0}function ji(e){return((al(e)?e.ownerDocument:e.document)||window.document).documentElement}function gm(e){return ra(e)==="html"?e:e.assignedSlot||e.parentNode||(Tb(e)?e.host:null)||ji(e)}function Xw(e){return!rs(e)||Oa(e).position==="fixed"?null:e.offsetParent}function I$(e){var t=/firefox/i.test(Qv()),n=/Trident/i.test(Qv());if(n&&rs(e)){var r=Oa(e);if(r.position==="fixed")return null}var o=gm(e);for(Tb(o)&&(o=o.host);rs(o)&&["html","body"].indexOf(ra(o))<0;){var s=Oa(o);if(s.transform!=="none"||s.perspective!=="none"||s.contain==="paint"||["transform","perspective"].indexOf(s.willChange)!==-1||t&&s.willChange==="filter"||t&&s.filter&&s.filter!=="none")return o;o=o.parentNode}return null}function Id(e){for(var t=Bo(e),n=Xw(e);n&&j$(n)&&Oa(n).position==="static";)n=Xw(n);return n&&(ra(n)==="html"||ra(n)==="body"&&Oa(n).position==="static")?t:n||I$(e)||t}function $b(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function Hu(e,t,n){return Ji(e,Qp(t,n))}function E$(e,t,n){var r=Hu(e,t,n);return r>n?n:r}function o6(){return{top:0,right:0,bottom:0,left:0}}function s6(e){return Object.assign({},o6(),e)}function a6(e,t){return t.reduce(function(n,r){return n[r]=e,n},{})}var O$=function(t,n){return t=typeof t=="function"?t(Object.assign({},n.rects,{placement:n.placement})):t,s6(typeof t!="number"?t:a6(t,jd))};function R$(e){var t,n=e.state,r=e.name,o=e.options,s=n.elements.arrow,a=n.modifiersData.popperOffsets,c=ta(n.placement),d=$b(c),p=[Po,is].indexOf(c)>=0,h=p?"height":"width";if(!(!s||!a)){var m=O$(o.padding,n),v=Nb(s),b=d==="y"?_o:Po,w=d==="y"?as:is,y=n.rects.reference[h]+n.rects.reference[d]-a[d]-n.rects.popper[h],S=a[d]-n.rects.reference[d],_=Id(s),k=_?d==="y"?_.clientHeight||0:_.clientWidth||0:0,j=y/2-S/2,I=m[b],E=k-v[h]-m[w],O=k/2-v[h]/2+j,R=Hu(I,O,E),M=d;n.modifiersData[r]=(t={},t[M]=R,t.centerOffset=R-O,t)}}function M$(e){var t=e.state,n=e.options,r=n.element,o=r===void 0?"[data-popper-arrow]":r;o!=null&&(typeof o=="string"&&(o=t.elements.popper.querySelector(o),!o)||r6(t.elements.popper,o)&&(t.elements.arrow=o))}const D$={name:"arrow",enabled:!0,phase:"main",fn:R$,effect:M$,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Sc(e){return e.split("-")[1]}var A$={top:"auto",right:"auto",bottom:"auto",left:"auto"};function T$(e,t){var n=e.x,r=e.y,o=t.devicePixelRatio||1;return{x:xc(n*o)/o||0,y:xc(r*o)/o||0}}function Yw(e){var t,n=e.popper,r=e.popperRect,o=e.placement,s=e.variation,a=e.offsets,c=e.position,d=e.gpuAcceleration,p=e.adaptive,h=e.roundOffsets,m=e.isFixed,v=a.x,b=v===void 0?0:v,w=a.y,y=w===void 0?0:w,S=typeof h=="function"?h({x:b,y}):{x:b,y};b=S.x,y=S.y;var _=a.hasOwnProperty("x"),k=a.hasOwnProperty("y"),j=Po,I=_o,E=window;if(p){var O=Id(n),R="clientHeight",M="clientWidth";if(O===Bo(n)&&(O=ji(n),Oa(O).position!=="static"&&c==="absolute"&&(R="scrollHeight",M="scrollWidth")),O=O,o===_o||(o===Po||o===is)&&s===nd){I=as;var A=m&&O===E&&E.visualViewport?E.visualViewport.height:O[R];y-=A-r.height,y*=d?1:-1}if(o===Po||(o===_o||o===as)&&s===nd){j=is;var T=m&&O===E&&E.visualViewport?E.visualViewport.width:O[M];b-=T-r.width,b*=d?1:-1}}var $=Object.assign({position:c},p&&A$),Q=h===!0?T$({x:b,y},Bo(n)):{x:b,y};if(b=Q.x,y=Q.y,d){var B;return Object.assign({},$,(B={},B[I]=k?"0":"",B[j]=_?"0":"",B.transform=(E.devicePixelRatio||1)<=1?"translate("+b+"px, "+y+"px)":"translate3d("+b+"px, "+y+"px, 0)",B))}return Object.assign({},$,(t={},t[I]=k?y+"px":"",t[j]=_?b+"px":"",t.transform="",t))}function N$(e){var t=e.state,n=e.options,r=n.gpuAcceleration,o=r===void 0?!0:r,s=n.adaptive,a=s===void 0?!0:s,c=n.roundOffsets,d=c===void 0?!0:c,p={placement:ta(t.placement),variation:Sc(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:t.options.strategy==="fixed"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,Yw(Object.assign({},p,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:a,roundOffsets:d})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,Yw(Object.assign({},p,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:d})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}const $$={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:N$,data:{}};var zf={passive:!0};function z$(e){var t=e.state,n=e.instance,r=e.options,o=r.scroll,s=o===void 0?!0:o,a=r.resize,c=a===void 0?!0:a,d=Bo(t.elements.popper),p=[].concat(t.scrollParents.reference,t.scrollParents.popper);return s&&p.forEach(function(h){h.addEventListener("scroll",n.update,zf)}),c&&d.addEventListener("resize",n.update,zf),function(){s&&p.forEach(function(h){h.removeEventListener("scroll",n.update,zf)}),c&&d.removeEventListener("resize",n.update,zf)}}const L$={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:z$,data:{}};var B$={left:"right",right:"left",bottom:"top",top:"bottom"};function _p(e){return e.replace(/left|right|bottom|top/g,function(t){return B$[t]})}var F$={start:"end",end:"start"};function Qw(e){return e.replace(/start|end/g,function(t){return F$[t]})}function zb(e){var t=Bo(e),n=t.pageXOffset,r=t.pageYOffset;return{scrollLeft:n,scrollTop:r}}function Lb(e){return wc(ji(e)).left+zb(e).scrollLeft}function H$(e,t){var n=Bo(e),r=ji(e),o=n.visualViewport,s=r.clientWidth,a=r.clientHeight,c=0,d=0;if(o){s=o.width,a=o.height;var p=n6();(p||!p&&t==="fixed")&&(c=o.offsetLeft,d=o.offsetTop)}return{width:s,height:a,x:c+Lb(e),y:d}}function W$(e){var t,n=ji(e),r=zb(e),o=(t=e.ownerDocument)==null?void 0:t.body,s=Ji(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),a=Ji(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),c=-r.scrollLeft+Lb(e),d=-r.scrollTop;return Oa(o||n).direction==="rtl"&&(c+=Ji(n.clientWidth,o?o.clientWidth:0)-s),{width:s,height:a,x:c,y:d}}function Bb(e){var t=Oa(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function i6(e){return["html","body","#document"].indexOf(ra(e))>=0?e.ownerDocument.body:rs(e)&&Bb(e)?e:i6(gm(e))}function Wu(e,t){var n;t===void 0&&(t=[]);var r=i6(e),o=r===((n=e.ownerDocument)==null?void 0:n.body),s=Bo(r),a=o?[s].concat(s.visualViewport||[],Bb(r)?r:[]):r,c=t.concat(a);return o?c:c.concat(Wu(gm(a)))}function Jv(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function V$(e,t){var n=wc(e,!1,t==="fixed");return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}function Jw(e,t,n){return t===e6?Jv(H$(e,n)):al(t)?V$(t,n):Jv(W$(ji(e)))}function U$(e){var t=Wu(gm(e)),n=["absolute","fixed"].indexOf(Oa(e).position)>=0,r=n&&rs(e)?Id(e):e;return al(r)?t.filter(function(o){return al(o)&&r6(o,r)&&ra(o)!=="body"}):[]}function G$(e,t,n,r){var o=t==="clippingParents"?U$(e):[].concat(t),s=[].concat(o,[n]),a=s[0],c=s.reduce(function(d,p){var h=Jw(e,p,r);return d.top=Ji(h.top,d.top),d.right=Qp(h.right,d.right),d.bottom=Qp(h.bottom,d.bottom),d.left=Ji(h.left,d.left),d},Jw(e,a,r));return c.width=c.right-c.left,c.height=c.bottom-c.top,c.x=c.left,c.y=c.top,c}function l6(e){var t=e.reference,n=e.element,r=e.placement,o=r?ta(r):null,s=r?Sc(r):null,a=t.x+t.width/2-n.width/2,c=t.y+t.height/2-n.height/2,d;switch(o){case _o:d={x:a,y:t.y-n.height};break;case as:d={x:a,y:t.y+t.height};break;case is:d={x:t.x+t.width,y:c};break;case Po:d={x:t.x-n.width,y:c};break;default:d={x:t.x,y:t.y}}var p=o?$b(o):null;if(p!=null){var h=p==="y"?"height":"width";switch(s){case yc:d[p]=d[p]-(t[h]/2-n[h]/2);break;case nd:d[p]=d[p]+(t[h]/2-n[h]/2);break}}return d}function rd(e,t){t===void 0&&(t={});var n=t,r=n.placement,o=r===void 0?e.placement:r,s=n.strategy,a=s===void 0?e.strategy:s,c=n.boundary,d=c===void 0?f$:c,p=n.rootBoundary,h=p===void 0?e6:p,m=n.elementContext,v=m===void 0?hu:m,b=n.altBoundary,w=b===void 0?!1:b,y=n.padding,S=y===void 0?0:y,_=s6(typeof S!="number"?S:a6(S,jd)),k=v===hu?p$:hu,j=e.rects.popper,I=e.elements[w?k:v],E=G$(al(I)?I:I.contextElement||ji(e.elements.popper),d,h,a),O=wc(e.elements.reference),R=l6({reference:O,element:j,strategy:"absolute",placement:o}),M=Jv(Object.assign({},j,R)),A=v===hu?M:O,T={top:E.top-A.top+_.top,bottom:A.bottom-E.bottom+_.bottom,left:E.left-A.left+_.left,right:A.right-E.right+_.right},$=e.modifiersData.offset;if(v===hu&&$){var Q=$[o];Object.keys(T).forEach(function(B){var V=[is,as].indexOf(B)>=0?1:-1,q=[_o,as].indexOf(B)>=0?"y":"x";T[B]+=Q[q]*V})}return T}function q$(e,t){t===void 0&&(t={});var n=t,r=n.placement,o=n.boundary,s=n.rootBoundary,a=n.padding,c=n.flipVariations,d=n.allowedAutoPlacements,p=d===void 0?t6:d,h=Sc(r),m=h?c?Kw:Kw.filter(function(w){return Sc(w)===h}):jd,v=m.filter(function(w){return p.indexOf(w)>=0});v.length===0&&(v=m);var b=v.reduce(function(w,y){return w[y]=rd(e,{placement:y,boundary:o,rootBoundary:s,padding:a})[ta(y)],w},{});return Object.keys(b).sort(function(w,y){return b[w]-b[y]})}function K$(e){if(ta(e)===Ab)return[];var t=_p(e);return[Qw(e),t,Qw(t)]}function X$(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,s=o===void 0?!0:o,a=n.altAxis,c=a===void 0?!0:a,d=n.fallbackPlacements,p=n.padding,h=n.boundary,m=n.rootBoundary,v=n.altBoundary,b=n.flipVariations,w=b===void 0?!0:b,y=n.allowedAutoPlacements,S=t.options.placement,_=ta(S),k=_===S,j=d||(k||!w?[_p(S)]:K$(S)),I=[S].concat(j).reduce(function(X,K){return X.concat(ta(K)===Ab?q$(t,{placement:K,boundary:h,rootBoundary:m,padding:p,flipVariations:w,allowedAutoPlacements:y}):K)},[]),E=t.rects.reference,O=t.rects.popper,R=new Map,M=!0,A=I[0],T=0;T=0,q=V?"width":"height",G=rd(t,{placement:$,boundary:h,rootBoundary:m,altBoundary:v,padding:p}),D=V?B?is:Po:B?as:_o;E[q]>O[q]&&(D=_p(D));var L=_p(D),W=[];if(s&&W.push(G[Q]<=0),c&&W.push(G[D]<=0,G[L]<=0),W.every(function(X){return X})){A=$,M=!1;break}R.set($,W)}if(M)for(var Y=w?3:1,ae=function(K){var U=I.find(function(se){var re=R.get(se);if(re)return re.slice(0,K).every(function(oe){return oe})});if(U)return A=U,"break"},be=Y;be>0;be--){var ie=ae(be);if(ie==="break")break}t.placement!==A&&(t.modifiersData[r]._skip=!0,t.placement=A,t.reset=!0)}}const Y$={name:"flip",enabled:!0,phase:"main",fn:X$,requiresIfExists:["offset"],data:{_skip:!1}};function Zw(e,t,n){return n===void 0&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function eS(e){return[_o,is,as,Po].some(function(t){return e[t]>=0})}function Q$(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,s=t.modifiersData.preventOverflow,a=rd(t,{elementContext:"reference"}),c=rd(t,{altBoundary:!0}),d=Zw(a,r),p=Zw(c,o,s),h=eS(d),m=eS(p);t.modifiersData[n]={referenceClippingOffsets:d,popperEscapeOffsets:p,isReferenceHidden:h,hasPopperEscaped:m},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":m})}const J$={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:Q$};function Z$(e,t,n){var r=ta(e),o=[Po,_o].indexOf(r)>=0?-1:1,s=typeof n=="function"?n(Object.assign({},t,{placement:e})):n,a=s[0],c=s[1];return a=a||0,c=(c||0)*o,[Po,is].indexOf(r)>=0?{x:c,y:a}:{x:a,y:c}}function ez(e){var t=e.state,n=e.options,r=e.name,o=n.offset,s=o===void 0?[0,0]:o,a=t6.reduce(function(h,m){return h[m]=Z$(m,t.rects,s),h},{}),c=a[t.placement],d=c.x,p=c.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=d,t.modifiersData.popperOffsets.y+=p),t.modifiersData[r]=a}const tz={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:ez};function nz(e){var t=e.state,n=e.name;t.modifiersData[n]=l6({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})}const rz={name:"popperOffsets",enabled:!0,phase:"read",fn:nz,data:{}};function oz(e){return e==="x"?"y":"x"}function sz(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,s=o===void 0?!0:o,a=n.altAxis,c=a===void 0?!1:a,d=n.boundary,p=n.rootBoundary,h=n.altBoundary,m=n.padding,v=n.tether,b=v===void 0?!0:v,w=n.tetherOffset,y=w===void 0?0:w,S=rd(t,{boundary:d,rootBoundary:p,padding:m,altBoundary:h}),_=ta(t.placement),k=Sc(t.placement),j=!k,I=$b(_),E=oz(I),O=t.modifiersData.popperOffsets,R=t.rects.reference,M=t.rects.popper,A=typeof y=="function"?y(Object.assign({},t.rects,{placement:t.placement})):y,T=typeof A=="number"?{mainAxis:A,altAxis:A}:Object.assign({mainAxis:0,altAxis:0},A),$=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,Q={x:0,y:0};if(O){if(s){var B,V=I==="y"?_o:Po,q=I==="y"?as:is,G=I==="y"?"height":"width",D=O[I],L=D+S[V],W=D-S[q],Y=b?-M[G]/2:0,ae=k===yc?R[G]:M[G],be=k===yc?-M[G]:-R[G],ie=t.elements.arrow,X=b&&ie?Nb(ie):{width:0,height:0},K=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:o6(),U=K[V],se=K[q],re=Hu(0,R[G],X[G]),oe=j?R[G]/2-Y-re-U-T.mainAxis:ae-re-U-T.mainAxis,pe=j?-R[G]/2+Y+re+se+T.mainAxis:be+re+se+T.mainAxis,le=t.elements.arrow&&Id(t.elements.arrow),ge=le?I==="y"?le.clientTop||0:le.clientLeft||0:0,ke=(B=$==null?void 0:$[I])!=null?B:0,xe=D+oe-ke-ge,de=D+pe-ke,Te=Hu(b?Qp(L,xe):L,D,b?Ji(W,de):W);O[I]=Te,Q[I]=Te-D}if(c){var Oe,$e=I==="x"?_o:Po,kt=I==="x"?as:is,ct=O[E],on=E==="y"?"height":"width",vt=ct+S[$e],bt=ct-S[kt],Se=[_o,Po].indexOf(_)!==-1,Me=(Oe=$==null?void 0:$[E])!=null?Oe:0,Pt=Se?vt:ct-R[on]-M[on]-Me+T.altAxis,Tt=Se?ct+R[on]+M[on]-Me-T.altAxis:bt,we=b&&Se?E$(Pt,ct,Tt):Hu(b?Pt:vt,ct,b?Tt:bt);O[E]=we,Q[E]=we-ct}t.modifiersData[r]=Q}}const az={name:"preventOverflow",enabled:!0,phase:"main",fn:sz,requiresIfExists:["offset"]};function iz(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function lz(e){return e===Bo(e)||!rs(e)?zb(e):iz(e)}function cz(e){var t=e.getBoundingClientRect(),n=xc(t.width)/e.offsetWidth||1,r=xc(t.height)/e.offsetHeight||1;return n!==1||r!==1}function uz(e,t,n){n===void 0&&(n=!1);var r=rs(t),o=rs(t)&&cz(t),s=ji(t),a=wc(e,o,n),c={scrollLeft:0,scrollTop:0},d={x:0,y:0};return(r||!r&&!n)&&((ra(t)!=="body"||Bb(s))&&(c=lz(t)),rs(t)?(d=wc(t,!0),d.x+=t.clientLeft,d.y+=t.clientTop):s&&(d.x=Lb(s))),{x:a.left+c.scrollLeft-d.x,y:a.top+c.scrollTop-d.y,width:a.width,height:a.height}}function dz(e){var t=new Map,n=new Set,r=[];e.forEach(function(s){t.set(s.name,s)});function o(s){n.add(s.name);var a=[].concat(s.requires||[],s.requiresIfExists||[]);a.forEach(function(c){if(!n.has(c)){var d=t.get(c);d&&o(d)}}),r.push(s)}return e.forEach(function(s){n.has(s.name)||o(s)}),r}function fz(e){var t=dz(e);return C$.reduce(function(n,r){return n.concat(t.filter(function(o){return o.phase===r}))},[])}function pz(e){var t;return function(){return t||(t=new Promise(function(n){Promise.resolve().then(function(){t=void 0,n(e())})})),t}}function hz(e){var t=e.reduce(function(n,r){var o=n[r.name];return n[r.name]=o?Object.assign({},o,r,{options:Object.assign({},o.options,r.options),data:Object.assign({},o.data,r.data)}):r,n},{});return Object.keys(t).map(function(n){return t[n]})}var tS={placement:"bottom",modifiers:[],strategy:"absolute"};function nS(){for(var e=arguments.length,t=new Array(e),n=0;n{}),j=f.useCallback(()=>{var T;!t||!w.current||!y.current||((T=k.current)==null||T.call(k),S.current=vz(w.current,y.current,{placement:_,modifiers:[l$,s$,o$,{...r$,enabled:!!v},{name:"eventListeners",...n$(a)},{name:"arrow",options:{padding:s}},{name:"offset",options:{offset:c??[0,d]}},{name:"flip",enabled:!!p,options:{padding:8}},{name:"preventOverflow",enabled:!!m,options:{boundary:h}},...n??[]],strategy:o}),S.current.forceUpdate(),k.current=S.current.destroy)},[_,t,n,v,a,s,c,d,p,m,h,o]);f.useEffect(()=>()=>{var T;!w.current&&!y.current&&((T=S.current)==null||T.destroy(),S.current=null)},[]);const I=f.useCallback(T=>{w.current=T,j()},[j]),E=f.useCallback((T={},$=null)=>({...T,ref:cn(I,$)}),[I]),O=f.useCallback(T=>{y.current=T,j()},[j]),R=f.useCallback((T={},$=null)=>({...T,ref:cn(O,$),style:{...T.style,position:o,minWidth:v?void 0:"max-content",inset:"0 auto auto 0"}}),[o,O,v]),M=f.useCallback((T={},$=null)=>{const{size:Q,shadowColor:B,bg:V,style:q,...G}=T;return{...G,ref:$,"data-popper-arrow":"",style:bz(T)}},[]),A=f.useCallback((T={},$=null)=>({...T,ref:$,"data-popper-arrow-inner":""}),[]);return{update(){var T;(T=S.current)==null||T.update()},forceUpdate(){var T;(T=S.current)==null||T.forceUpdate()},transformOrigin:jr.transformOrigin.varRef,referenceRef:I,popperRef:O,getPopperProps:R,getArrowProps:M,getArrowInnerProps:A,getReferenceProps:E}}function bz(e){const{size:t,shadowColor:n,bg:r,style:o}=e,s={...o,position:"absolute"};return t&&(s["--popper-arrow-size"]=t),n&&(s["--popper-arrow-shadow-color"]=n),r&&(s["--popper-arrow-bg"]=r),s}function Hb(e={}){const{onClose:t,onOpen:n,isOpen:r,id:o}=e,s=or(n),a=or(t),[c,d]=f.useState(e.defaultIsOpen||!1),p=r!==void 0?r:c,h=r!==void 0,m=f.useId(),v=o??`disclosure-${m}`,b=f.useCallback(()=>{h||d(!1),a==null||a()},[h,a]),w=f.useCallback(()=>{h||d(!0),s==null||s()},[h,s]),y=f.useCallback(()=>{p?b():w()},[p,w,b]);function S(k={}){return{...k,"aria-expanded":p,"aria-controls":v,onClick(j){var I;(I=k.onClick)==null||I.call(k,j),y()}}}function _(k={}){return{...k,hidden:!p,id:v}}return{isOpen:p,onOpen:w,onClose:b,onToggle:y,isControlled:h,getButtonProps:S,getDisclosureProps:_}}function yz(e){const{ref:t,handler:n,enabled:r=!0}=e,o=or(n),a=f.useRef({isPointerDown:!1,ignoreEmulatedMouseEvents:!1}).current;f.useEffect(()=>{if(!r)return;const c=m=>{R0(m,t)&&(a.isPointerDown=!0)},d=m=>{if(a.ignoreEmulatedMouseEvents){a.ignoreEmulatedMouseEvents=!1;return}a.isPointerDown&&n&&R0(m,t)&&(a.isPointerDown=!1,o(m))},p=m=>{a.ignoreEmulatedMouseEvents=!0,n&&a.isPointerDown&&R0(m,t)&&(a.isPointerDown=!1,o(m))},h=c6(t.current);return h.addEventListener("mousedown",c,!0),h.addEventListener("mouseup",d,!0),h.addEventListener("touchstart",c,!0),h.addEventListener("touchend",p,!0),()=>{h.removeEventListener("mousedown",c,!0),h.removeEventListener("mouseup",d,!0),h.removeEventListener("touchstart",c,!0),h.removeEventListener("touchend",p,!0)}},[n,t,o,a,r])}function R0(e,t){var n;const r=e.target;return r&&!c6(r).contains(r)?!1:!((n=t.current)!=null&&n.contains(r))}function c6(e){var t;return(t=e==null?void 0:e.ownerDocument)!=null?t:document}function u6(e){const{isOpen:t,ref:n}=e,[r,o]=f.useState(t),[s,a]=f.useState(!1);return f.useEffect(()=>{s||(o(t),a(!0))},[t,s,r]),Qi(()=>n.current,"animationend",()=>{o(t)}),{present:!(t?!1:!r),onComplete(){var d;const p=kN(n.current),h=new p.CustomEvent("animationend",{bubbles:!0});(d=n.current)==null||d.dispatchEvent(h)}}}function Wb(e){const{wasSelected:t,enabled:n,isSelected:r,mode:o="unmount"}=e;return!!(!n||r||o==="keepMounted"&&t)}var[xz,wz,Sz,Cz]=db(),[kz,Ed]=Dn({strict:!1,name:"MenuContext"});function _z(e,...t){const n=f.useId(),r=e||n;return f.useMemo(()=>t.map(o=>`${o}-${r}`),[r,t])}function d6(e){var t;return(t=e==null?void 0:e.ownerDocument)!=null?t:document}function rS(e){return d6(e).activeElement===e}function Pz(e={}){const{id:t,closeOnSelect:n=!0,closeOnBlur:r=!0,initialFocusRef:o,autoSelect:s=!0,isLazy:a,isOpen:c,defaultIsOpen:d,onClose:p,onOpen:h,placement:m="bottom-start",lazyBehavior:v="unmount",direction:b,computePositionOnMount:w=!1,...y}=e,S=f.useRef(null),_=f.useRef(null),k=Sz(),j=f.useCallback(()=>{requestAnimationFrame(()=>{var ie;(ie=S.current)==null||ie.focus({preventScroll:!1})})},[]),I=f.useCallback(()=>{const ie=setTimeout(()=>{var X;if(o)(X=o.current)==null||X.focus();else{const K=k.firstEnabled();K&&B(K.index)}});L.current.add(ie)},[k,o]),E=f.useCallback(()=>{const ie=setTimeout(()=>{const X=k.lastEnabled();X&&B(X.index)});L.current.add(ie)},[k]),O=f.useCallback(()=>{h==null||h(),s?I():j()},[s,I,j,h]),{isOpen:R,onOpen:M,onClose:A,onToggle:T}=Hb({isOpen:c,defaultIsOpen:d,onClose:p,onOpen:O});yz({enabled:R&&r,ref:S,handler:ie=>{var X;(X=_.current)!=null&&X.contains(ie.target)||A()}});const $=Fb({...y,enabled:R||w,placement:m,direction:b}),[Q,B]=f.useState(-1);Ba(()=>{R||B(-1)},[R]),Z3(S,{focusRef:_,visible:R,shouldFocus:!0});const V=u6({isOpen:R,ref:S}),[q,G]=_z(t,"menu-button","menu-list"),D=f.useCallback(()=>{M(),j()},[M,j]),L=f.useRef(new Set([]));Az(()=>{L.current.forEach(ie=>clearTimeout(ie)),L.current.clear()});const W=f.useCallback(()=>{M(),I()},[I,M]),Y=f.useCallback(()=>{M(),E()},[M,E]),ae=f.useCallback(()=>{var ie,X;const K=d6(S.current),U=(ie=S.current)==null?void 0:ie.contains(K.activeElement);if(!(R&&!U))return;const re=(X=k.item(Q))==null?void 0:X.node;re==null||re.focus()},[R,Q,k]),be=f.useRef(null);return{openAndFocusMenu:D,openAndFocusFirstItem:W,openAndFocusLastItem:Y,onTransitionEnd:ae,unstable__animationState:V,descendants:k,popper:$,buttonId:q,menuId:G,forceUpdate:$.forceUpdate,orientation:"vertical",isOpen:R,onToggle:T,onOpen:M,onClose:A,menuRef:S,buttonRef:_,focusedIndex:Q,closeOnSelect:n,closeOnBlur:r,autoSelect:s,setFocusedIndex:B,isLazy:a,lazyBehavior:v,initialFocusRef:o,rafId:be}}function jz(e={},t=null){const n=Ed(),{onToggle:r,popper:o,openAndFocusFirstItem:s,openAndFocusLastItem:a}=n,c=f.useCallback(d=>{const p=d.key,m={Enter:s,ArrowDown:s,ArrowUp:a}[p];m&&(d.preventDefault(),d.stopPropagation(),m(d))},[s,a]);return{...e,ref:cn(n.buttonRef,t,o.referenceRef),id:n.buttonId,"data-active":Ft(n.isOpen),"aria-expanded":n.isOpen,"aria-haspopup":"menu","aria-controls":n.menuId,onClick:nt(e.onClick,r),onKeyDown:nt(e.onKeyDown,c)}}function Zv(e){var t;return Mz(e)&&!!((t=e==null?void 0:e.getAttribute("role"))!=null&&t.startsWith("menuitem"))}function Iz(e={},t=null){const n=Ed();if(!n)throw new Error("useMenuContext: context is undefined. Seems you forgot to wrap component within

");const{focusedIndex:r,setFocusedIndex:o,menuRef:s,isOpen:a,onClose:c,menuId:d,isLazy:p,lazyBehavior:h,unstable__animationState:m}=n,v=wz(),b=GN({preventDefault:_=>_.key!==" "&&Zv(_.target)}),w=f.useCallback(_=>{if(!_.currentTarget.contains(_.target))return;const k=_.key,I={Tab:O=>O.preventDefault(),Escape:c,ArrowDown:()=>{const O=v.nextEnabled(r);O&&o(O.index)},ArrowUp:()=>{const O=v.prevEnabled(r);O&&o(O.index)}}[k];if(I){_.preventDefault(),I(_);return}const E=b(O=>{const R=qN(v.values(),O,M=>{var A,T;return(T=(A=M==null?void 0:M.node)==null?void 0:A.textContent)!=null?T:""},v.item(r));if(R){const M=v.indexOf(R.node);o(M)}});Zv(_.target)&&E(_)},[v,r,b,c,o]),y=f.useRef(!1);a&&(y.current=!0);const S=Wb({wasSelected:y.current,enabled:p,mode:h,isSelected:m.present});return{...e,ref:cn(s,t),children:S?e.children:null,tabIndex:-1,role:"menu",id:d,style:{...e.style,transformOrigin:"var(--popper-transform-origin)"},"aria-orientation":"vertical",onKeyDown:nt(e.onKeyDown,w)}}function Ez(e={}){const{popper:t,isOpen:n}=Ed();return t.getPopperProps({...e,style:{visibility:n?"visible":"hidden",...e.style}})}function f6(e={},t=null){const{onMouseEnter:n,onMouseMove:r,onMouseLeave:o,onClick:s,onFocus:a,isDisabled:c,isFocusable:d,closeOnSelect:p,type:h,...m}=e,v=Ed(),{setFocusedIndex:b,focusedIndex:w,closeOnSelect:y,onClose:S,menuRef:_,isOpen:k,menuId:j,rafId:I}=v,E=f.useRef(null),O=`${j}-menuitem-${f.useId()}`,{index:R,register:M}=Cz({disabled:c&&!d}),A=f.useCallback(D=>{n==null||n(D),!c&&b(R)},[b,R,c,n]),T=f.useCallback(D=>{r==null||r(D),E.current&&!rS(E.current)&&A(D)},[A,r]),$=f.useCallback(D=>{o==null||o(D),!c&&b(-1)},[b,c,o]),Q=f.useCallback(D=>{s==null||s(D),Zv(D.currentTarget)&&(p??y)&&S()},[S,s,y,p]),B=f.useCallback(D=>{a==null||a(D),b(R)},[b,a,R]),V=R===w,q=c&&!d;Ba(()=>{k&&(V&&!q&&E.current?(I.current&&cancelAnimationFrame(I.current),I.current=requestAnimationFrame(()=>{var D;(D=E.current)==null||D.focus(),I.current=null})):_.current&&!rS(_.current)&&_.current.focus({preventScroll:!0}))},[V,q,_,k]);const G=J3({onClick:Q,onFocus:B,onMouseEnter:A,onMouseMove:T,onMouseLeave:$,ref:cn(M,E,t),isDisabled:c,isFocusable:d});return{...m,...G,type:h??G.type,id:O,role:"menuitem",tabIndex:V?0:-1}}function Oz(e={},t=null){const{type:n="radio",isChecked:r,...o}=e;return{...f6(o,t),role:`menuitem${n}`,"aria-checked":r}}function Rz(e={}){const{children:t,type:n="radio",value:r,defaultValue:o,onChange:s,...a}=e,d=n==="radio"?"":[],[p,h]=$c({defaultValue:o??d,value:r,onChange:s}),m=f.useCallback(w=>{if(n==="radio"&&typeof p=="string"&&h(w),n==="checkbox"&&Array.isArray(p)){const y=p.includes(w)?p.filter(S=>S!==w):p.concat(w);h(y)}},[p,h,n]),b=Cd(t).map(w=>{if(w.type.id!=="MenuItemOption")return w;const y=_=>{var k,j;m(w.props.value),(j=(k=w.props).onClick)==null||j.call(k,_)},S=n==="radio"?w.props.value===p:p.includes(w.props.value);return f.cloneElement(w,{type:n,onClick:y,isChecked:S})});return{...a,children:b}}function Mz(e){var t;if(!Dz(e))return!1;const n=(t=e.ownerDocument.defaultView)!=null?t:window;return e instanceof n.HTMLElement}function Dz(e){return e!=null&&typeof e=="object"&&"nodeType"in e&&e.nodeType===Node.ELEMENT_NODE}function Az(e,t=[]){return f.useEffect(()=>()=>e(),t)}var[Tz,Bc]=Dn({name:"MenuStylesContext",errorMessage:`useMenuStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),Od=e=>{const{children:t}=e,n=Fr("Menu",e),r=qn(e),{direction:o}=Ac(),{descendants:s,...a}=Pz({...r,direction:o}),c=f.useMemo(()=>a,[a]),{isOpen:d,onClose:p,forceUpdate:h}=c;return i.jsx(xz,{value:s,children:i.jsx(kz,{value:c,children:i.jsx(Tz,{value:n,children:X1(t,{isOpen:d,onClose:p,forceUpdate:h})})})})};Od.displayName="Menu";var p6=Ae((e,t)=>{const n=Bc();return i.jsx(je.span,{ref:t,...e,__css:n.command,className:"chakra-menu__command"})});p6.displayName="MenuCommand";var h6=Ae((e,t)=>{const{type:n,...r}=e,o=Bc(),s=r.as||n?n??void 0:"button",a=f.useMemo(()=>({textDecoration:"none",color:"inherit",userSelect:"none",display:"flex",width:"100%",alignItems:"center",textAlign:"start",flex:"0 0 auto",outline:0,...o.item}),[o.item]);return i.jsx(je.button,{ref:t,type:s,...r,__css:a})}),Vb=e=>{const{className:t,children:n,...r}=e,o=Bc(),s=f.Children.only(n),a=f.isValidElement(s)?f.cloneElement(s,{focusable:"false","aria-hidden":!0,className:Ct("chakra-menu__icon",s.props.className)}):null,c=Ct("chakra-menu__icon-wrapper",t);return i.jsx(je.span,{className:c,...r,__css:o.icon,children:a})};Vb.displayName="MenuIcon";var Pr=Ae((e,t)=>{const{icon:n,iconSpacing:r="0.75rem",command:o,commandSpacing:s="0.75rem",children:a,...c}=e,d=f6(c,t),h=n||o?i.jsx("span",{style:{pointerEvents:"none",flex:1},children:a}):a;return i.jsxs(h6,{...d,className:Ct("chakra-menu__menuitem",d.className),children:[n&&i.jsx(Vb,{fontSize:"0.8em",marginEnd:r,children:n}),h,o&&i.jsx(p6,{marginStart:s,children:o})]})});Pr.displayName="MenuItem";var Nz={enter:{visibility:"visible",opacity:1,scale:1,transition:{duration:.2,ease:[.4,0,.2,1]}},exit:{transitionEnd:{visibility:"hidden"},opacity:0,scale:.8,transition:{duration:.1,easings:"easeOut"}}},$z=je(Ir.div),Fc=Ae(function(t,n){var r,o;const{rootProps:s,motionProps:a,...c}=t,{isOpen:d,onTransitionEnd:p,unstable__animationState:h}=Ed(),m=Iz(c,n),v=Ez(s),b=Bc();return i.jsx(je.div,{...v,__css:{zIndex:(o=t.zIndex)!=null?o:(r=b.list)==null?void 0:r.zIndex},children:i.jsx($z,{variants:Nz,initial:!1,animate:d?"enter":"exit",__css:{outline:0,...b.list},...a,className:Ct("chakra-menu__menu-list",m.className),...m,onUpdate:p,onAnimationComplete:sm(h.onComplete,m.onAnimationComplete)})})});Fc.displayName="MenuList";var od=Ae((e,t)=>{const{title:n,children:r,className:o,...s}=e,a=Ct("chakra-menu__group__title",o),c=Bc();return i.jsxs("div",{ref:t,className:"chakra-menu__group",role:"group",children:[n&&i.jsx(je.p,{className:a,...s,__css:c.groupTitle,children:n}),r]})});od.displayName="MenuGroup";var m6=e=>{const{className:t,title:n,...r}=e,o=Rz(r);return i.jsx(od,{title:n,className:Ct("chakra-menu__option-group",t),...o})};m6.displayName="MenuOptionGroup";var zz=Ae((e,t)=>{const n=Bc();return i.jsx(je.button,{ref:t,...e,__css:{display:"inline-flex",appearance:"none",alignItems:"center",outline:0,...n.button}})}),Rd=Ae((e,t)=>{const{children:n,as:r,...o}=e,s=jz(o,t),a=r||zz;return i.jsx(a,{...s,className:Ct("chakra-menu__menu-button",e.className),children:i.jsx(je.span,{__css:{pointerEvents:"none",flex:"1 1 auto",minW:0},children:e.children})})});Rd.displayName="MenuButton";var Lz=e=>i.jsx("svg",{viewBox:"0 0 14 14",width:"1em",height:"1em",...e,children:i.jsx("polygon",{fill:"currentColor",points:"5.5 11.9993304 14 3.49933039 12.5 2 5.5 8.99933039 1.5 4.9968652 0 6.49933039"})}),Jp=Ae((e,t)=>{const{icon:n,iconSpacing:r="0.75rem",...o}=e,s=Oz(o,t);return i.jsxs(h6,{...s,className:Ct("chakra-menu__menuitem-option",o.className),children:[n!==null&&i.jsx(Vb,{fontSize:"0.8em",marginEnd:r,opacity:e.isChecked?1:0,children:n||i.jsx(Lz,{})}),i.jsx("span",{style:{flex:1},children:s.children})]})});Jp.id="MenuItemOption";Jp.displayName="MenuItemOption";var Bz={slideInBottom:{...Lv,custom:{offsetY:16,reverse:!0}},slideInRight:{...Lv,custom:{offsetX:16,reverse:!0}},scale:{...F5,custom:{initialScale:.95,reverse:!0}},none:{}},Fz=je(Ir.section),Hz=e=>Bz[e||"none"],g6=f.forwardRef((e,t)=>{const{preset:n,motionProps:r=Hz(n),...o}=e;return i.jsx(Fz,{ref:t,...r,...o})});g6.displayName="ModalTransition";var Wz=Object.defineProperty,Vz=(e,t,n)=>t in e?Wz(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Uz=(e,t,n)=>(Vz(e,typeof t!="symbol"?t+"":t,n),n),Gz=class{constructor(){Uz(this,"modals"),this.modals=new Map}add(e){return this.modals.set(e,this.modals.size+1),this.modals.size}remove(e){this.modals.delete(e)}isTopModal(e){return e?this.modals.get(e)===this.modals.size:!1}},e1=new Gz;function v6(e,t){const[n,r]=f.useState(0);return f.useEffect(()=>{const o=e.current;if(o){if(t){const s=e1.add(o);r(s)}return()=>{e1.remove(o),r(0)}}},[t,e]),n}var qz=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},$l=new WeakMap,Lf=new WeakMap,Bf={},M0=0,b6=function(e){return e&&(e.host||b6(e.parentNode))},Kz=function(e,t){return t.map(function(n){if(e.contains(n))return n;var r=b6(n);return r&&e.contains(r)?r:(console.error("aria-hidden",n,"in not contained inside",e,". Doing nothing"),null)}).filter(function(n){return!!n})},Xz=function(e,t,n,r){var o=Kz(t,Array.isArray(e)?e:[e]);Bf[n]||(Bf[n]=new WeakMap);var s=Bf[n],a=[],c=new Set,d=new Set(o),p=function(m){!m||c.has(m)||(c.add(m),p(m.parentNode))};o.forEach(p);var h=function(m){!m||d.has(m)||Array.prototype.forEach.call(m.children,function(v){if(c.has(v))h(v);else{var b=v.getAttribute(r),w=b!==null&&b!=="false",y=($l.get(v)||0)+1,S=(s.get(v)||0)+1;$l.set(v,y),s.set(v,S),a.push(v),y===1&&w&&Lf.set(v,!0),S===1&&v.setAttribute(n,"true"),w||v.setAttribute(r,"true")}})};return h(t),c.clear(),M0++,function(){a.forEach(function(m){var v=$l.get(m)-1,b=s.get(m)-1;$l.set(m,v),s.set(m,b),v||(Lf.has(m)||m.removeAttribute(r),Lf.delete(m)),b||m.removeAttribute(n)}),M0--,M0||($l=new WeakMap,$l=new WeakMap,Lf=new WeakMap,Bf={})}},Yz=function(e,t,n){n===void 0&&(n="data-aria-hidden");var r=Array.from(Array.isArray(e)?e:[e]),o=t||qz(e);return o?(r.push.apply(r,Array.from(o.querySelectorAll("[aria-live]"))),Xz(r,o,n,"aria-hidden")):function(){return null}};function Qz(e){const{isOpen:t,onClose:n,id:r,closeOnOverlayClick:o=!0,closeOnEsc:s=!0,useInert:a=!0,onOverlayClick:c,onEsc:d}=e,p=f.useRef(null),h=f.useRef(null),[m,v,b]=Zz(r,"chakra-modal","chakra-modal--header","chakra-modal--body");Jz(p,t&&a);const w=v6(p,t),y=f.useRef(null),S=f.useCallback(A=>{y.current=A.target},[]),_=f.useCallback(A=>{A.key==="Escape"&&(A.stopPropagation(),s&&(n==null||n()),d==null||d())},[s,n,d]),[k,j]=f.useState(!1),[I,E]=f.useState(!1),O=f.useCallback((A={},T=null)=>({role:"dialog",...A,ref:cn(T,p),id:m,tabIndex:-1,"aria-modal":!0,"aria-labelledby":k?v:void 0,"aria-describedby":I?b:void 0,onClick:nt(A.onClick,$=>$.stopPropagation())}),[b,I,m,v,k]),R=f.useCallback(A=>{A.stopPropagation(),y.current===A.target&&e1.isTopModal(p.current)&&(o&&(n==null||n()),c==null||c())},[n,o,c]),M=f.useCallback((A={},T=null)=>({...A,ref:cn(T,h),onClick:nt(A.onClick,R),onKeyDown:nt(A.onKeyDown,_),onMouseDown:nt(A.onMouseDown,S)}),[_,S,R]);return{isOpen:t,onClose:n,headerId:v,bodyId:b,setBodyMounted:E,setHeaderMounted:j,dialogRef:p,overlayRef:h,getDialogProps:O,getDialogContainerProps:M,index:w}}function Jz(e,t){const n=e.current;f.useEffect(()=>{if(!(!e.current||!t))return Yz(e.current)},[t,e,n])}function Zz(e,...t){const n=f.useId(),r=e||n;return f.useMemo(()=>t.map(o=>`${o}-${r}`),[r,t])}var[eL,Hc]=Dn({name:"ModalStylesContext",errorMessage:`useModalStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),[tL,il]=Dn({strict:!0,name:"ModalContext",errorMessage:"useModalContext: `context` is undefined. Seems you forgot to wrap modal components in ``"}),sd=e=>{const t={scrollBehavior:"outside",autoFocus:!0,trapFocus:!0,returnFocusOnClose:!0,blockScrollOnMount:!0,allowPinchZoom:!1,motionPreset:"scale",lockFocusAcrossFrames:!0,...e},{portalProps:n,children:r,autoFocus:o,trapFocus:s,initialFocusRef:a,finalFocusRef:c,returnFocusOnClose:d,blockScrollOnMount:p,allowPinchZoom:h,preserveScrollBarGap:m,motionPreset:v,lockFocusAcrossFrames:b,onCloseComplete:w}=t,y=Fr("Modal",t),_={...Qz(t),autoFocus:o,trapFocus:s,initialFocusRef:a,finalFocusRef:c,returnFocusOnClose:d,blockScrollOnMount:p,allowPinchZoom:h,preserveScrollBarGap:m,motionPreset:v,lockFocusAcrossFrames:b};return i.jsx(tL,{value:_,children:i.jsx(eL,{value:y,children:i.jsx(mo,{onExitComplete:w,children:_.isOpen&&i.jsx(Ju,{...n,children:r})})})})};sd.displayName="Modal";var Pp="right-scroll-bar-position",jp="width-before-scroll-bar",nL="with-scroll-bars-hidden",rL="--removed-body-scroll-bar-size",y6=h3(),D0=function(){},vm=f.forwardRef(function(e,t){var n=f.useRef(null),r=f.useState({onScrollCapture:D0,onWheelCapture:D0,onTouchMoveCapture:D0}),o=r[0],s=r[1],a=e.forwardProps,c=e.children,d=e.className,p=e.removeScrollBar,h=e.enabled,m=e.shards,v=e.sideCar,b=e.noIsolation,w=e.inert,y=e.allowPinchZoom,S=e.as,_=S===void 0?"div":S,k=e.gapMode,j=d3(e,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noIsolation","inert","allowPinchZoom","as","gapMode"]),I=v,E=u3([n,t]),O=Qs(Qs({},j),o);return f.createElement(f.Fragment,null,h&&f.createElement(I,{sideCar:y6,removeScrollBar:p,shards:m,noIsolation:b,inert:w,setCallbacks:s,allowPinchZoom:!!y,lockRef:n,gapMode:k}),a?f.cloneElement(f.Children.only(c),Qs(Qs({},O),{ref:E})):f.createElement(_,Qs({},O,{className:d,ref:E}),c))});vm.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1};vm.classNames={fullWidth:jp,zeroRight:Pp};var oS,oL=function(){if(oS)return oS;if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function sL(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=oL();return t&&e.setAttribute("nonce",t),e}function aL(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function iL(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var lL=function(){var e=0,t=null;return{add:function(n){e==0&&(t=sL())&&(aL(t,n),iL(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},cL=function(){var e=lL();return function(t,n){f.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},x6=function(){var e=cL(),t=function(n){var r=n.styles,o=n.dynamic;return e(r,o),null};return t},uL={left:0,top:0,right:0,gap:0},A0=function(e){return parseInt(e||"",10)||0},dL=function(e){var t=window.getComputedStyle(document.body),n=t[e==="padding"?"paddingLeft":"marginLeft"],r=t[e==="padding"?"paddingTop":"marginTop"],o=t[e==="padding"?"paddingRight":"marginRight"];return[A0(n),A0(r),A0(o)]},fL=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return uL;var t=dL(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},pL=x6(),hL=function(e,t,n,r){var o=e.left,s=e.top,a=e.right,c=e.gap;return n===void 0&&(n="margin"),` - .`.concat(nL,` { - overflow: hidden `).concat(r,`; - padding-right: `).concat(c,"px ").concat(r,`; - } - body { - overflow: hidden `).concat(r,`; - overscroll-behavior: contain; - `).concat([t&&"position: relative ".concat(r,";"),n==="margin"&&` - padding-left: `.concat(o,`px; - padding-top: `).concat(s,`px; - padding-right: `).concat(a,`px; - margin-left:0; - margin-top:0; - margin-right: `).concat(c,"px ").concat(r,`; - `),n==="padding"&&"padding-right: ".concat(c,"px ").concat(r,";")].filter(Boolean).join(""),` - } - - .`).concat(Pp,` { - right: `).concat(c,"px ").concat(r,`; - } - - .`).concat(jp,` { - margin-right: `).concat(c,"px ").concat(r,`; - } - - .`).concat(Pp," .").concat(Pp,` { - right: 0 `).concat(r,`; - } - - .`).concat(jp," .").concat(jp,` { - margin-right: 0 `).concat(r,`; - } - - body { - `).concat(rL,": ").concat(c,`px; - } -`)},mL=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,o=r===void 0?"margin":r,s=f.useMemo(function(){return fL(o)},[o]);return f.createElement(pL,{styles:hL(s,!t,o,n?"":"!important")})},t1=!1;if(typeof window<"u")try{var Ff=Object.defineProperty({},"passive",{get:function(){return t1=!0,!0}});window.addEventListener("test",Ff,Ff),window.removeEventListener("test",Ff,Ff)}catch{t1=!1}var zl=t1?{passive:!1}:!1,gL=function(e){return e.tagName==="TEXTAREA"},w6=function(e,t){var n=window.getComputedStyle(e);return n[t]!=="hidden"&&!(n.overflowY===n.overflowX&&!gL(e)&&n[t]==="visible")},vL=function(e){return w6(e,"overflowY")},bL=function(e){return w6(e,"overflowX")},sS=function(e,t){var n=t.ownerDocument,r=t;do{typeof ShadowRoot<"u"&&r instanceof ShadowRoot&&(r=r.host);var o=S6(e,r);if(o){var s=C6(e,r),a=s[1],c=s[2];if(a>c)return!0}r=r.parentNode}while(r&&r!==n.body);return!1},yL=function(e){var t=e.scrollTop,n=e.scrollHeight,r=e.clientHeight;return[t,n,r]},xL=function(e){var t=e.scrollLeft,n=e.scrollWidth,r=e.clientWidth;return[t,n,r]},S6=function(e,t){return e==="v"?vL(t):bL(t)},C6=function(e,t){return e==="v"?yL(t):xL(t)},wL=function(e,t){return e==="h"&&t==="rtl"?-1:1},SL=function(e,t,n,r,o){var s=wL(e,window.getComputedStyle(t).direction),a=s*r,c=n.target,d=t.contains(c),p=!1,h=a>0,m=0,v=0;do{var b=C6(e,c),w=b[0],y=b[1],S=b[2],_=y-S-s*w;(w||_)&&S6(e,c)&&(m+=_,v+=w),c=c.parentNode}while(!d&&c!==document.body||d&&(t.contains(c)||t===c));return(h&&(o&&m===0||!o&&a>m)||!h&&(o&&v===0||!o&&-a>v))&&(p=!0),p},Hf=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},aS=function(e){return[e.deltaX,e.deltaY]},iS=function(e){return e&&"current"in e?e.current:e},CL=function(e,t){return e[0]===t[0]&&e[1]===t[1]},kL=function(e){return` - .block-interactivity-`.concat(e,` {pointer-events: none;} - .allow-interactivity-`).concat(e,` {pointer-events: all;} -`)},_L=0,Ll=[];function PL(e){var t=f.useRef([]),n=f.useRef([0,0]),r=f.useRef(),o=f.useState(_L++)[0],s=f.useState(x6)[0],a=f.useRef(e);f.useEffect(function(){a.current=e},[e]),f.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(o));var y=Gv([e.lockRef.current],(e.shards||[]).map(iS),!0).filter(Boolean);return y.forEach(function(S){return S.classList.add("allow-interactivity-".concat(o))}),function(){document.body.classList.remove("block-interactivity-".concat(o)),y.forEach(function(S){return S.classList.remove("allow-interactivity-".concat(o))})}}},[e.inert,e.lockRef.current,e.shards]);var c=f.useCallback(function(y,S){if("touches"in y&&y.touches.length===2)return!a.current.allowPinchZoom;var _=Hf(y),k=n.current,j="deltaX"in y?y.deltaX:k[0]-_[0],I="deltaY"in y?y.deltaY:k[1]-_[1],E,O=y.target,R=Math.abs(j)>Math.abs(I)?"h":"v";if("touches"in y&&R==="h"&&O.type==="range")return!1;var M=sS(R,O);if(!M)return!0;if(M?E=R:(E=R==="v"?"h":"v",M=sS(R,O)),!M)return!1;if(!r.current&&"changedTouches"in y&&(j||I)&&(r.current=E),!E)return!0;var A=r.current||E;return SL(A,S,y,A==="h"?j:I,!0)},[]),d=f.useCallback(function(y){var S=y;if(!(!Ll.length||Ll[Ll.length-1]!==s)){var _="deltaY"in S?aS(S):Hf(S),k=t.current.filter(function(E){return E.name===S.type&&E.target===S.target&&CL(E.delta,_)})[0];if(k&&k.should){S.cancelable&&S.preventDefault();return}if(!k){var j=(a.current.shards||[]).map(iS).filter(Boolean).filter(function(E){return E.contains(S.target)}),I=j.length>0?c(S,j[0]):!a.current.noIsolation;I&&S.cancelable&&S.preventDefault()}}},[]),p=f.useCallback(function(y,S,_,k){var j={name:y,delta:S,target:_,should:k};t.current.push(j),setTimeout(function(){t.current=t.current.filter(function(I){return I!==j})},1)},[]),h=f.useCallback(function(y){n.current=Hf(y),r.current=void 0},[]),m=f.useCallback(function(y){p(y.type,aS(y),y.target,c(y,e.lockRef.current))},[]),v=f.useCallback(function(y){p(y.type,Hf(y),y.target,c(y,e.lockRef.current))},[]);f.useEffect(function(){return Ll.push(s),e.setCallbacks({onScrollCapture:m,onWheelCapture:m,onTouchMoveCapture:v}),document.addEventListener("wheel",d,zl),document.addEventListener("touchmove",d,zl),document.addEventListener("touchstart",h,zl),function(){Ll=Ll.filter(function(y){return y!==s}),document.removeEventListener("wheel",d,zl),document.removeEventListener("touchmove",d,zl),document.removeEventListener("touchstart",h,zl)}},[]);var b=e.removeScrollBar,w=e.inert;return f.createElement(f.Fragment,null,w?f.createElement(s,{styles:kL(o)}):null,b?f.createElement(mL,{gapMode:e.gapMode}):null)}const jL=jT(y6,PL);var k6=f.forwardRef(function(e,t){return f.createElement(vm,Qs({},e,{ref:t,sideCar:jL}))});k6.classNames=vm.classNames;const IL=k6;function EL(e){const{autoFocus:t,trapFocus:n,dialogRef:r,initialFocusRef:o,blockScrollOnMount:s,allowPinchZoom:a,finalFocusRef:c,returnFocusOnClose:d,preserveScrollBarGap:p,lockFocusAcrossFrames:h,isOpen:m}=il(),[v,b]=R7();f.useEffect(()=>{!v&&b&&setTimeout(b)},[v,b]);const w=v6(r,m);return i.jsx(U3,{autoFocus:t,isDisabled:!n,initialFocusRef:o,finalFocusRef:c,restoreFocus:d,contentRef:r,lockFocusAcrossFrames:h,children:i.jsx(IL,{removeScrollBar:!p,allowPinchZoom:a,enabled:w===1&&s,forwardProps:!0,children:e.children})})}var ad=Ae((e,t)=>{const{className:n,children:r,containerProps:o,motionProps:s,...a}=e,{getDialogProps:c,getDialogContainerProps:d}=il(),p=c(a,t),h=d(o),m=Ct("chakra-modal__content",n),v=Hc(),b={display:"flex",flexDirection:"column",position:"relative",width:"100%",outline:0,...v.dialog},w={display:"flex",width:"100vw",height:"$100vh",position:"fixed",left:0,top:0,...v.dialogContainer},{motionPreset:y}=il();return i.jsx(EL,{children:i.jsx(je.div,{...h,className:"chakra-modal__content-container",tabIndex:-1,__css:w,children:i.jsx(g6,{preset:y,motionProps:s,className:m,...p,__css:b,children:r})})})});ad.displayName="ModalContent";function Md(e){const{leastDestructiveRef:t,...n}=e;return i.jsx(sd,{...n,initialFocusRef:t})}var Dd=Ae((e,t)=>i.jsx(ad,{ref:t,role:"alertdialog",...e})),Ra=Ae((e,t)=>{const{className:n,...r}=e,o=Ct("chakra-modal__footer",n),a={display:"flex",alignItems:"center",justifyContent:"flex-end",...Hc().footer};return i.jsx(je.footer,{ref:t,...r,__css:a,className:o})});Ra.displayName="ModalFooter";var Ma=Ae((e,t)=>{const{className:n,...r}=e,{headerId:o,setHeaderMounted:s}=il();f.useEffect(()=>(s(!0),()=>s(!1)),[s]);const a=Ct("chakra-modal__header",n),d={flex:0,...Hc().header};return i.jsx(je.header,{ref:t,className:a,id:o,...r,__css:d})});Ma.displayName="ModalHeader";var OL=je(Ir.div),Da=Ae((e,t)=>{const{className:n,transition:r,motionProps:o,...s}=e,a=Ct("chakra-modal__overlay",n),d={pos:"fixed",left:"0",top:"0",w:"100vw",h:"100vh",...Hc().overlay},{motionPreset:p}=il(),m=o||(p==="none"?{}:B5);return i.jsx(OL,{...m,__css:d,ref:t,className:a,...s})});Da.displayName="ModalOverlay";var Aa=Ae((e,t)=>{const{className:n,...r}=e,{bodyId:o,setBodyMounted:s}=il();f.useEffect(()=>(s(!0),()=>s(!1)),[s]);const a=Ct("chakra-modal__body",n),c=Hc();return i.jsx(je.div,{ref:t,className:a,id:o,...r,__css:c.body})});Aa.displayName="ModalBody";var Ub=Ae((e,t)=>{const{onClick:n,className:r,...o}=e,{onClose:s}=il(),a=Ct("chakra-modal__close-btn",r),c=Hc();return i.jsx(XD,{ref:t,__css:c.closeButton,className:a,onClick:nt(n,d=>{d.stopPropagation(),s()}),...o})});Ub.displayName="ModalCloseButton";var RL=e=>i.jsx(no,{viewBox:"0 0 24 24",...e,children:i.jsx("path",{fill:"currentColor",d:"M21,5H3C2.621,5,2.275,5.214,2.105,5.553C1.937,5.892,1.973,6.297,2.2,6.6l9,12 c0.188,0.252,0.485,0.4,0.8,0.4s0.611-0.148,0.8-0.4l9-12c0.228-0.303,0.264-0.708,0.095-1.047C21.725,5.214,21.379,5,21,5z"})}),ML=e=>i.jsx(no,{viewBox:"0 0 24 24",...e,children:i.jsx("path",{fill:"currentColor",d:"M12.8,5.4c-0.377-0.504-1.223-0.504-1.6,0l-9,12c-0.228,0.303-0.264,0.708-0.095,1.047 C2.275,18.786,2.621,19,3,19h18c0.379,0,0.725-0.214,0.895-0.553c0.169-0.339,0.133-0.744-0.095-1.047L12.8,5.4z"})});function lS(e,t,n,r){f.useEffect(()=>{var o;if(!e.current||!r)return;const s=(o=e.current.ownerDocument.defaultView)!=null?o:window,a=Array.isArray(t)?t:[t],c=new s.MutationObserver(d=>{for(const p of d)p.type==="attributes"&&p.attributeName&&a.includes(p.attributeName)&&n(p)});return c.observe(e.current,{attributes:!0,attributeFilter:a}),()=>c.disconnect()})}function DL(e,t){const n=or(e);f.useEffect(()=>{let r=null;const o=()=>n();return t!==null&&(r=window.setInterval(o,t)),()=>{r&&window.clearInterval(r)}},[t,n])}var AL=50,cS=300;function TL(e,t){const[n,r]=f.useState(!1),[o,s]=f.useState(null),[a,c]=f.useState(!0),d=f.useRef(null),p=()=>clearTimeout(d.current);DL(()=>{o==="increment"&&e(),o==="decrement"&&t()},n?AL:null);const h=f.useCallback(()=>{a&&e(),d.current=setTimeout(()=>{c(!1),r(!0),s("increment")},cS)},[e,a]),m=f.useCallback(()=>{a&&t(),d.current=setTimeout(()=>{c(!1),r(!0),s("decrement")},cS)},[t,a]),v=f.useCallback(()=>{c(!0),r(!1),p()},[]);return f.useEffect(()=>()=>p(),[]),{up:h,down:m,stop:v,isSpinning:n}}var NL=/^[Ee0-9+\-.]$/;function $L(e){return NL.test(e)}function zL(e,t){if(e.key==null)return!0;const n=e.ctrlKey||e.altKey||e.metaKey;return!(e.key.length===1)||n?!0:t(e.key)}function LL(e={}){const{focusInputOnChange:t=!0,clampValueOnBlur:n=!0,keepWithinRange:r=!0,min:o=Number.MIN_SAFE_INTEGER,max:s=Number.MAX_SAFE_INTEGER,step:a=1,isReadOnly:c,isDisabled:d,isRequired:p,isInvalid:h,pattern:m="[0-9]*(.[0-9]+)?",inputMode:v="decimal",allowMouseWheel:b,id:w,onChange:y,precision:S,name:_,"aria-describedby":k,"aria-label":j,"aria-labelledby":I,onFocus:E,onBlur:O,onInvalid:R,getAriaValueText:M,isValidCharacter:A,format:T,parse:$,...Q}=e,B=or(E),V=or(O),q=or(R),G=or(A??$L),D=or(M),L=iT(e),{update:W,increment:Y,decrement:ae}=L,[be,ie]=f.useState(!1),X=!(c||d),K=f.useRef(null),U=f.useRef(null),se=f.useRef(null),re=f.useRef(null),oe=f.useCallback(we=>we.split("").filter(G).join(""),[G]),pe=f.useCallback(we=>{var ht;return(ht=$==null?void 0:$(we))!=null?ht:we},[$]),le=f.useCallback(we=>{var ht;return((ht=T==null?void 0:T(we))!=null?ht:we).toString()},[T]);Ba(()=>{(L.valueAsNumber>s||L.valueAsNumber{if(!K.current)return;if(K.current.value!=L.value){const ht=pe(K.current.value);L.setValue(oe(ht))}},[pe,oe]);const ge=f.useCallback((we=a)=>{X&&Y(we)},[Y,X,a]),ke=f.useCallback((we=a)=>{X&&ae(we)},[ae,X,a]),xe=TL(ge,ke);lS(se,"disabled",xe.stop,xe.isSpinning),lS(re,"disabled",xe.stop,xe.isSpinning);const de=f.useCallback(we=>{if(we.nativeEvent.isComposing)return;const $t=pe(we.currentTarget.value);W(oe($t)),U.current={start:we.currentTarget.selectionStart,end:we.currentTarget.selectionEnd}},[W,oe,pe]),Te=f.useCallback(we=>{var ht,$t,zt;B==null||B(we),U.current&&(we.target.selectionStart=($t=U.current.start)!=null?$t:(ht=we.currentTarget.value)==null?void 0:ht.length,we.currentTarget.selectionEnd=(zt=U.current.end)!=null?zt:we.currentTarget.selectionStart)},[B]),Oe=f.useCallback(we=>{if(we.nativeEvent.isComposing)return;zL(we,G)||we.preventDefault();const ht=$e(we)*a,$t=we.key,ze={ArrowUp:()=>ge(ht),ArrowDown:()=>ke(ht),Home:()=>W(o),End:()=>W(s)}[$t];ze&&(we.preventDefault(),ze(we))},[G,a,ge,ke,W,o,s]),$e=we=>{let ht=1;return(we.metaKey||we.ctrlKey)&&(ht=.1),we.shiftKey&&(ht=10),ht},kt=f.useMemo(()=>{const we=D==null?void 0:D(L.value);if(we!=null)return we;const ht=L.value.toString();return ht||void 0},[L.value,D]),ct=f.useCallback(()=>{let we=L.value;if(L.value==="")return;/^[eE]/.test(L.value.toString())?L.setValue(""):(L.valueAsNumbers&&(we=s),L.cast(we))},[L,s,o]),on=f.useCallback(()=>{ie(!1),n&&ct()},[n,ie,ct]),vt=f.useCallback(()=>{t&&requestAnimationFrame(()=>{var we;(we=K.current)==null||we.focus()})},[t]),bt=f.useCallback(we=>{we.preventDefault(),xe.up(),vt()},[vt,xe]),Se=f.useCallback(we=>{we.preventDefault(),xe.down(),vt()},[vt,xe]);Qi(()=>K.current,"wheel",we=>{var ht,$t;const ze=(($t=(ht=K.current)==null?void 0:ht.ownerDocument)!=null?$t:document).activeElement===K.current;if(!b||!ze)return;we.preventDefault();const Ke=$e(we)*a,Pn=Math.sign(we.deltaY);Pn===-1?ge(Ke):Pn===1&&ke(Ke)},{passive:!1});const Me=f.useCallback((we={},ht=null)=>{const $t=d||r&&L.isAtMax;return{...we,ref:cn(ht,se),role:"button",tabIndex:-1,onPointerDown:nt(we.onPointerDown,zt=>{zt.button!==0||$t||bt(zt)}),onPointerLeave:nt(we.onPointerLeave,xe.stop),onPointerUp:nt(we.onPointerUp,xe.stop),disabled:$t,"aria-disabled":ns($t)}},[L.isAtMax,r,bt,xe.stop,d]),Pt=f.useCallback((we={},ht=null)=>{const $t=d||r&&L.isAtMin;return{...we,ref:cn(ht,re),role:"button",tabIndex:-1,onPointerDown:nt(we.onPointerDown,zt=>{zt.button!==0||$t||Se(zt)}),onPointerLeave:nt(we.onPointerLeave,xe.stop),onPointerUp:nt(we.onPointerUp,xe.stop),disabled:$t,"aria-disabled":ns($t)}},[L.isAtMin,r,Se,xe.stop,d]),Tt=f.useCallback((we={},ht=null)=>{var $t,zt,ze,Ke;return{name:_,inputMode:v,type:"text",pattern:m,"aria-labelledby":I,"aria-label":j,"aria-describedby":k,id:w,disabled:d,...we,readOnly:($t=we.readOnly)!=null?$t:c,"aria-readonly":(zt=we.readOnly)!=null?zt:c,"aria-required":(ze=we.required)!=null?ze:p,required:(Ke=we.required)!=null?Ke:p,ref:cn(K,ht),value:le(L.value),role:"spinbutton","aria-valuemin":o,"aria-valuemax":s,"aria-valuenow":Number.isNaN(L.valueAsNumber)?void 0:L.valueAsNumber,"aria-invalid":ns(h??L.isOutOfRange),"aria-valuetext":kt,autoComplete:"off",autoCorrect:"off",onChange:nt(we.onChange,de),onKeyDown:nt(we.onKeyDown,Oe),onFocus:nt(we.onFocus,Te,()=>ie(!0)),onBlur:nt(we.onBlur,V,on)}},[_,v,m,I,j,le,k,w,d,p,c,h,L.value,L.valueAsNumber,L.isOutOfRange,o,s,kt,de,Oe,Te,V,on]);return{value:le(L.value),valueAsNumber:L.valueAsNumber,isFocused:be,isDisabled:d,isReadOnly:c,getIncrementButtonProps:Me,getDecrementButtonProps:Pt,getInputProps:Tt,htmlProps:Q}}var[BL,bm]=Dn({name:"NumberInputStylesContext",errorMessage:`useNumberInputStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),[FL,Gb]=Dn({name:"NumberInputContext",errorMessage:"useNumberInputContext: `context` is undefined. Seems you forgot to wrap number-input's components within "}),ym=Ae(function(t,n){const r=Fr("NumberInput",t),o=qn(t),s=mb(o),{htmlProps:a,...c}=LL(s),d=f.useMemo(()=>c,[c]);return i.jsx(FL,{value:d,children:i.jsx(BL,{value:r,children:i.jsx(je.div,{...a,ref:n,className:Ct("chakra-numberinput",t.className),__css:{position:"relative",zIndex:0,...r.root}})})})});ym.displayName="NumberInput";var xm=Ae(function(t,n){const r=bm();return i.jsx(je.div,{"aria-hidden":!0,ref:n,...t,__css:{display:"flex",flexDirection:"column",position:"absolute",top:"0",insetEnd:"0px",margin:"1px",height:"calc(100% - 2px)",zIndex:1,...r.stepperGroup}})});xm.displayName="NumberInputStepper";var wm=Ae(function(t,n){const{getInputProps:r}=Gb(),o=r(t,n),s=bm();return i.jsx(je.input,{...o,className:Ct("chakra-numberinput__field",t.className),__css:{width:"100%",...s.field}})});wm.displayName="NumberInputField";var _6=je("div",{baseStyle:{display:"flex",justifyContent:"center",alignItems:"center",flex:1,transitionProperty:"common",transitionDuration:"normal",userSelect:"none",cursor:"pointer",lineHeight:"normal"}}),Sm=Ae(function(t,n){var r;const o=bm(),{getDecrementButtonProps:s}=Gb(),a=s(t,n);return i.jsx(_6,{...a,__css:o.stepper,children:(r=t.children)!=null?r:i.jsx(RL,{})})});Sm.displayName="NumberDecrementStepper";var Cm=Ae(function(t,n){var r;const{getIncrementButtonProps:o}=Gb(),s=o(t,n),a=bm();return i.jsx(_6,{...s,__css:a.stepper,children:(r=t.children)!=null?r:i.jsx(ML,{})})});Cm.displayName="NumberIncrementStepper";var[HL,Ad]=Dn({name:"PopoverContext",errorMessage:"usePopoverContext: `context` is undefined. Seems you forgot to wrap all popover components within ``"}),[WL,qb]=Dn({name:"PopoverStylesContext",errorMessage:`usePopoverStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `});function Kb(e){const t=f.Children.only(e.children),{getTriggerProps:n}=Ad();return f.cloneElement(t,n(t.props,t.ref))}Kb.displayName="PopoverTrigger";var Bl={click:"click",hover:"hover"};function VL(e={}){const{closeOnBlur:t=!0,closeOnEsc:n=!0,initialFocusRef:r,id:o,returnFocusOnClose:s=!0,autoFocus:a=!0,arrowSize:c,arrowShadowColor:d,trigger:p=Bl.click,openDelay:h=200,closeDelay:m=200,isLazy:v,lazyBehavior:b="unmount",computePositionOnMount:w,...y}=e,{isOpen:S,onClose:_,onOpen:k,onToggle:j}=Hb(e),I=f.useRef(null),E=f.useRef(null),O=f.useRef(null),R=f.useRef(!1),M=f.useRef(!1);S&&(M.current=!0);const[A,T]=f.useState(!1),[$,Q]=f.useState(!1),B=f.useId(),V=o??B,[q,G,D,L]=["popover-trigger","popover-content","popover-header","popover-body"].map(de=>`${de}-${V}`),{referenceRef:W,getArrowProps:Y,getPopperProps:ae,getArrowInnerProps:be,forceUpdate:ie}=Fb({...y,enabled:S||!!w}),X=u6({isOpen:S,ref:O});o3({enabled:S,ref:E}),Z3(O,{focusRef:E,visible:S,shouldFocus:s&&p===Bl.click}),QN(O,{focusRef:r,visible:S,shouldFocus:a&&p===Bl.click});const K=Wb({wasSelected:M.current,enabled:v,mode:b,isSelected:X.present}),U=f.useCallback((de={},Te=null)=>{const Oe={...de,style:{...de.style,transformOrigin:jr.transformOrigin.varRef,[jr.arrowSize.var]:c?`${c}px`:void 0,[jr.arrowShadowColor.var]:d},ref:cn(O,Te),children:K?de.children:null,id:G,tabIndex:-1,role:"dialog",onKeyDown:nt(de.onKeyDown,$e=>{n&&$e.key==="Escape"&&_()}),onBlur:nt(de.onBlur,$e=>{const kt=uS($e),ct=T0(O.current,kt),on=T0(E.current,kt);S&&t&&(!ct&&!on)&&_()}),"aria-labelledby":A?D:void 0,"aria-describedby":$?L:void 0};return p===Bl.hover&&(Oe.role="tooltip",Oe.onMouseEnter=nt(de.onMouseEnter,()=>{R.current=!0}),Oe.onMouseLeave=nt(de.onMouseLeave,$e=>{$e.nativeEvent.relatedTarget!==null&&(R.current=!1,setTimeout(()=>_(),m))})),Oe},[K,G,A,D,$,L,p,n,_,S,t,m,d,c]),se=f.useCallback((de={},Te=null)=>ae({...de,style:{visibility:S?"visible":"hidden",...de.style}},Te),[S,ae]),re=f.useCallback((de,Te=null)=>({...de,ref:cn(Te,I,W)}),[I,W]),oe=f.useRef(),pe=f.useRef(),le=f.useCallback(de=>{I.current==null&&W(de)},[W]),ge=f.useCallback((de={},Te=null)=>{const Oe={...de,ref:cn(E,Te,le),id:q,"aria-haspopup":"dialog","aria-expanded":S,"aria-controls":G};return p===Bl.click&&(Oe.onClick=nt(de.onClick,j)),p===Bl.hover&&(Oe.onFocus=nt(de.onFocus,()=>{oe.current===void 0&&k()}),Oe.onBlur=nt(de.onBlur,$e=>{const kt=uS($e),ct=!T0(O.current,kt);S&&t&&ct&&_()}),Oe.onKeyDown=nt(de.onKeyDown,$e=>{$e.key==="Escape"&&_()}),Oe.onMouseEnter=nt(de.onMouseEnter,()=>{R.current=!0,oe.current=window.setTimeout(()=>k(),h)}),Oe.onMouseLeave=nt(de.onMouseLeave,()=>{R.current=!1,oe.current&&(clearTimeout(oe.current),oe.current=void 0),pe.current=window.setTimeout(()=>{R.current===!1&&_()},m)})),Oe},[q,S,G,p,le,j,k,t,_,h,m]);f.useEffect(()=>()=>{oe.current&&clearTimeout(oe.current),pe.current&&clearTimeout(pe.current)},[]);const ke=f.useCallback((de={},Te=null)=>({...de,id:D,ref:cn(Te,Oe=>{T(!!Oe)})}),[D]),xe=f.useCallback((de={},Te=null)=>({...de,id:L,ref:cn(Te,Oe=>{Q(!!Oe)})}),[L]);return{forceUpdate:ie,isOpen:S,onAnimationComplete:X.onComplete,onClose:_,getAnchorProps:re,getArrowProps:Y,getArrowInnerProps:be,getPopoverPositionerProps:se,getPopoverProps:U,getTriggerProps:ge,getHeaderProps:ke,getBodyProps:xe}}function T0(e,t){return e===t||(e==null?void 0:e.contains(t))}function uS(e){var t;const n=e.currentTarget.ownerDocument.activeElement;return(t=e.relatedTarget)!=null?t:n}function Xb(e){const t=Fr("Popover",e),{children:n,...r}=qn(e),o=Ac(),s=VL({...r,direction:o.direction});return i.jsx(HL,{value:s,children:i.jsx(WL,{value:t,children:X1(n,{isOpen:s.isOpen,onClose:s.onClose,forceUpdate:s.forceUpdate})})})}Xb.displayName="Popover";var N0=(e,t)=>t?`${e}.${t}, ${t}`:void 0;function P6(e){var t;const{bg:n,bgColor:r,backgroundColor:o,shadow:s,boxShadow:a,shadowColor:c}=e,{getArrowProps:d,getArrowInnerProps:p}=Ad(),h=qb(),m=(t=n??r)!=null?t:o,v=s??a;return i.jsx(je.div,{...d(),className:"chakra-popover__arrow-positioner",children:i.jsx(je.div,{className:Ct("chakra-popover__arrow",e.className),...p(e),__css:{"--popper-arrow-shadow-color":N0("colors",c),"--popper-arrow-bg":N0("colors",m),"--popper-arrow-shadow":N0("shadows",v),...h.arrow}})})}P6.displayName="PopoverArrow";var j6=Ae(function(t,n){const{getBodyProps:r}=Ad(),o=qb();return i.jsx(je.div,{...r(t,n),className:Ct("chakra-popover__body",t.className),__css:o.body})});j6.displayName="PopoverBody";function UL(e){if(e)return{enter:{...e.enter,visibility:"visible"},exit:{...e.exit,transitionEnd:{visibility:"hidden"}}}}var GL={exit:{opacity:0,scale:.95,transition:{duration:.1,ease:[.4,0,1,1]}},enter:{scale:1,opacity:1,transition:{duration:.15,ease:[0,0,.2,1]}}},qL=je(Ir.section),I6=Ae(function(t,n){const{variants:r=GL,...o}=t,{isOpen:s}=Ad();return i.jsx(qL,{ref:n,variants:UL(r),initial:!1,animate:s?"enter":"exit",...o})});I6.displayName="PopoverTransition";var Yb=Ae(function(t,n){const{rootProps:r,motionProps:o,...s}=t,{getPopoverProps:a,getPopoverPositionerProps:c,onAnimationComplete:d}=Ad(),p=qb(),h={position:"relative",display:"flex",flexDirection:"column",...p.content};return i.jsx(je.div,{...c(r),__css:p.popper,className:"chakra-popover__popper",children:i.jsx(I6,{...o,...a(s,n),onAnimationComplete:sm(d,s.onAnimationComplete),className:Ct("chakra-popover__content",t.className),__css:h})})});Yb.displayName="PopoverContent";function KL(e,t,n){return(e-t)*100/(n-t)}za({"0%":{strokeDasharray:"1, 400",strokeDashoffset:"0"},"50%":{strokeDasharray:"400, 400",strokeDashoffset:"-100"},"100%":{strokeDasharray:"400, 400",strokeDashoffset:"-260"}});za({"0%":{transform:"rotate(0deg)"},"100%":{transform:"rotate(360deg)"}});var XL=za({"0%":{left:"-40%"},"100%":{left:"100%"}}),YL=za({from:{backgroundPosition:"1rem 0"},to:{backgroundPosition:"0 0"}});function QL(e){const{value:t=0,min:n,max:r,valueText:o,getValueText:s,isIndeterminate:a,role:c="progressbar"}=e,d=KL(t,n,r);return{bind:{"data-indeterminate":a?"":void 0,"aria-valuemax":r,"aria-valuemin":n,"aria-valuenow":a?void 0:t,"aria-valuetext":(()=>{if(t!=null)return typeof s=="function"?s(t,d):o})(),role:c},percent:d,value:t}}var[JL,ZL]=Dn({name:"ProgressStylesContext",errorMessage:`useProgressStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),eB=Ae((e,t)=>{const{min:n,max:r,value:o,isIndeterminate:s,role:a,...c}=e,d=QL({value:o,min:n,max:r,isIndeterminate:s,role:a}),h={height:"100%",...ZL().filledTrack};return i.jsx(je.div,{ref:t,style:{width:`${d.percent}%`,...c.style},...d.bind,...c,__css:h})}),E6=Ae((e,t)=>{var n;const{value:r,min:o=0,max:s=100,hasStripe:a,isAnimated:c,children:d,borderRadius:p,isIndeterminate:h,"aria-label":m,"aria-labelledby":v,"aria-valuetext":b,title:w,role:y,...S}=qn(e),_=Fr("Progress",e),k=p??((n=_.track)==null?void 0:n.borderRadius),j={animation:`${YL} 1s linear infinite`},O={...!h&&a&&c&&j,...h&&{position:"absolute",willChange:"left",minWidth:"50%",animation:`${XL} 1s ease infinite normal none running`}},R={overflow:"hidden",position:"relative",..._.track};return i.jsx(je.div,{ref:t,borderRadius:k,__css:R,...S,children:i.jsxs(JL,{value:_,children:[i.jsx(eB,{"aria-label":m,"aria-labelledby":v,"aria-valuetext":b,min:o,max:s,value:r,isIndeterminate:h,css:O,borderRadius:k,title:w,role:y}),d]})})});E6.displayName="Progress";function tB(e){return e&&_v(e)&&_v(e.target)}function nB(e={}){const{onChange:t,value:n,defaultValue:r,name:o,isDisabled:s,isFocusable:a,isNative:c,...d}=e,[p,h]=f.useState(r||""),m=typeof n<"u",v=m?n:p,b=f.useRef(null),w=f.useCallback(()=>{const E=b.current;if(!E)return;let O="input:not(:disabled):checked";const R=E.querySelector(O);if(R){R.focus();return}O="input:not(:disabled)";const M=E.querySelector(O);M==null||M.focus()},[]),S=`radio-${f.useId()}`,_=o||S,k=f.useCallback(E=>{const O=tB(E)?E.target.value:E;m||h(O),t==null||t(String(O))},[t,m]),j=f.useCallback((E={},O=null)=>({...E,ref:cn(O,b),role:"radiogroup"}),[]),I=f.useCallback((E={},O=null)=>({...E,ref:O,name:_,[c?"checked":"isChecked"]:v!=null?E.value===v:void 0,onChange(M){k(M)},"data-radiogroup":!0}),[c,_,k,v]);return{getRootProps:j,getRadioProps:I,name:_,ref:b,focus:w,setValue:h,value:v,onChange:k,isDisabled:s,isFocusable:a,htmlProps:d}}var[rB,O6]=Dn({name:"RadioGroupContext",strict:!1}),Zp=Ae((e,t)=>{const{colorScheme:n,size:r,variant:o,children:s,className:a,isDisabled:c,isFocusable:d,...p}=e,{value:h,onChange:m,getRootProps:v,name:b,htmlProps:w}=nB(p),y=f.useMemo(()=>({name:b,size:r,onChange:m,colorScheme:n,value:h,variant:o,isDisabled:c,isFocusable:d}),[b,r,m,n,h,o,c,d]);return i.jsx(rB,{value:y,children:i.jsx(je.div,{...v(w,t),className:Ct("chakra-radio-group",a),children:s})})});Zp.displayName="RadioGroup";var oB={border:"0",clip:"rect(0, 0, 0, 0)",height:"1px",width:"1px",margin:"-1px",padding:"0",overflow:"hidden",whiteSpace:"nowrap",position:"absolute"};function sB(e={}){const{defaultChecked:t,isChecked:n,isFocusable:r,isDisabled:o,isReadOnly:s,isRequired:a,onChange:c,isInvalid:d,name:p,value:h,id:m,"data-radiogroup":v,"aria-describedby":b,...w}=e,y=`radio-${f.useId()}`,S=kd(),k=!!O6()||!!v;let I=!!S&&!k?S.id:y;I=m??I;const E=o??(S==null?void 0:S.isDisabled),O=s??(S==null?void 0:S.isReadOnly),R=a??(S==null?void 0:S.isRequired),M=d??(S==null?void 0:S.isInvalid),[A,T]=f.useState(!1),[$,Q]=f.useState(!1),[B,V]=f.useState(!1),[q,G]=f.useState(!1),[D,L]=f.useState(!!t),W=typeof n<"u",Y=W?n:D;f.useEffect(()=>q5(T),[]);const ae=f.useCallback(le=>{if(O||E){le.preventDefault();return}W||L(le.target.checked),c==null||c(le)},[W,E,O,c]),be=f.useCallback(le=>{le.key===" "&&G(!0)},[G]),ie=f.useCallback(le=>{le.key===" "&&G(!1)},[G]),X=f.useCallback((le={},ge=null)=>({...le,ref:ge,"data-active":Ft(q),"data-hover":Ft(B),"data-disabled":Ft(E),"data-invalid":Ft(M),"data-checked":Ft(Y),"data-focus":Ft($),"data-focus-visible":Ft($&&A),"data-readonly":Ft(O),"aria-hidden":!0,onMouseDown:nt(le.onMouseDown,()=>G(!0)),onMouseUp:nt(le.onMouseUp,()=>G(!1)),onMouseEnter:nt(le.onMouseEnter,()=>V(!0)),onMouseLeave:nt(le.onMouseLeave,()=>V(!1))}),[q,B,E,M,Y,$,O,A]),{onFocus:K,onBlur:U}=S??{},se=f.useCallback((le={},ge=null)=>{const ke=E&&!r;return{...le,id:I,ref:ge,type:"radio",name:p,value:h,onChange:nt(le.onChange,ae),onBlur:nt(U,le.onBlur,()=>Q(!1)),onFocus:nt(K,le.onFocus,()=>Q(!0)),onKeyDown:nt(le.onKeyDown,be),onKeyUp:nt(le.onKeyUp,ie),checked:Y,disabled:ke,readOnly:O,required:R,"aria-invalid":ns(M),"aria-disabled":ns(ke),"aria-required":ns(R),"data-readonly":Ft(O),"aria-describedby":b,style:oB}},[E,r,I,p,h,ae,U,K,be,ie,Y,O,R,M,b]);return{state:{isInvalid:M,isFocused:$,isChecked:Y,isActive:q,isHovered:B,isDisabled:E,isReadOnly:O,isRequired:R},getCheckboxProps:X,getRadioProps:X,getInputProps:se,getLabelProps:(le={},ge=null)=>({...le,ref:ge,onMouseDown:nt(le.onMouseDown,aB),"data-disabled":Ft(E),"data-checked":Ft(Y),"data-invalid":Ft(M)}),getRootProps:(le,ge=null)=>({...le,ref:ge,"data-disabled":Ft(E),"data-checked":Ft(Y),"data-invalid":Ft(M)}),htmlProps:w}}function aB(e){e.preventDefault(),e.stopPropagation()}function iB(e,t){const n={},r={};for(const[o,s]of Object.entries(e))t.includes(o)?n[o]=s:r[o]=s;return[n,r]}var ya=Ae((e,t)=>{var n;const r=O6(),{onChange:o,value:s}=e,a=Fr("Radio",{...r,...e}),c=qn(e),{spacing:d="0.5rem",children:p,isDisabled:h=r==null?void 0:r.isDisabled,isFocusable:m=r==null?void 0:r.isFocusable,inputProps:v,...b}=c;let w=e.isChecked;(r==null?void 0:r.value)!=null&&s!=null&&(w=r.value===s);let y=o;r!=null&&r.onChange&&s!=null&&(y=sm(r.onChange,o));const S=(n=e==null?void 0:e.name)!=null?n:r==null?void 0:r.name,{getInputProps:_,getCheckboxProps:k,getLabelProps:j,getRootProps:I,htmlProps:E}=sB({...b,isChecked:w,isFocusable:m,isDisabled:h,onChange:y,name:S}),[O,R]=iB(E,R_),M=k(R),A=_(v,t),T=j(),$=Object.assign({},O,I()),Q={display:"inline-flex",alignItems:"center",verticalAlign:"top",cursor:"pointer",position:"relative",...a.container},B={display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0,...a.control},V={userSelect:"none",marginStart:d,...a.label};return i.jsxs(je.label,{className:"chakra-radio",...$,__css:Q,children:[i.jsx("input",{className:"chakra-radio__input",...A}),i.jsx(je.span,{className:"chakra-radio__control",...M,__css:B}),p&&i.jsx(je.span,{className:"chakra-radio__label",...T,__css:V,children:p})]})});ya.displayName="Radio";var R6=Ae(function(t,n){const{children:r,placeholder:o,className:s,...a}=t;return i.jsxs(je.select,{...a,ref:n,className:Ct("chakra-select",s),children:[o&&i.jsx("option",{value:"",children:o}),r]})});R6.displayName="SelectField";function lB(e,t){const n={},r={};for(const[o,s]of Object.entries(e))t.includes(o)?n[o]=s:r[o]=s;return[n,r]}var M6=Ae((e,t)=>{var n;const r=Fr("Select",e),{rootProps:o,placeholder:s,icon:a,color:c,height:d,h:p,minH:h,minHeight:m,iconColor:v,iconSize:b,...w}=qn(e),[y,S]=lB(w,R_),_=hb(S),k={width:"100%",height:"fit-content",position:"relative",color:c},j={paddingEnd:"2rem",...r.field,_focus:{zIndex:"unset",...(n=r.field)==null?void 0:n._focus}};return i.jsxs(je.div,{className:"chakra-select__wrapper",__css:k,...y,...o,children:[i.jsx(R6,{ref:t,height:p??d,minH:h??m,placeholder:s,..._,__css:j,children:e.children}),i.jsx(D6,{"data-disabled":Ft(_.disabled),...(v||c)&&{color:v||c},__css:r.icon,...b&&{fontSize:b},children:a})]})});M6.displayName="Select";var cB=e=>i.jsx("svg",{viewBox:"0 0 24 24",...e,children:i.jsx("path",{fill:"currentColor",d:"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"})}),uB=je("div",{baseStyle:{position:"absolute",display:"inline-flex",alignItems:"center",justifyContent:"center",pointerEvents:"none",top:"50%",transform:"translateY(-50%)"}}),D6=e=>{const{children:t=i.jsx(cB,{}),...n}=e,r=f.cloneElement(t,{role:"presentation",className:"chakra-select__icon",focusable:!1,"aria-hidden":!0,style:{width:"1em",height:"1em",color:"currentColor"}});return i.jsx(uB,{...n,className:"chakra-select__icon-wrapper",children:f.isValidElement(t)?r:null})};D6.displayName="SelectIcon";function dB(){const e=f.useRef(!0);return f.useEffect(()=>{e.current=!1},[]),e.current}function fB(e){const t=f.useRef();return f.useEffect(()=>{t.current=e},[e]),t.current}var pB=je("div",{baseStyle:{boxShadow:"none",backgroundClip:"padding-box",cursor:"default",color:"transparent",pointerEvents:"none",userSelect:"none","&::before, &::after, *":{visibility:"hidden"}}}),n1=M_("skeleton-start-color"),r1=M_("skeleton-end-color"),hB=za({from:{opacity:0},to:{opacity:1}}),mB=za({from:{borderColor:n1.reference,background:n1.reference},to:{borderColor:r1.reference,background:r1.reference}}),km=Ae((e,t)=>{const n={...e,fadeDuration:typeof e.fadeDuration=="number"?e.fadeDuration:.4,speed:typeof e.speed=="number"?e.speed:.8},r=ia("Skeleton",n),o=dB(),{startColor:s="",endColor:a="",isLoaded:c,fadeDuration:d,speed:p,className:h,fitContent:m,...v}=qn(n),[b,w]=Tc("colors",[s,a]),y=fB(c),S=Ct("chakra-skeleton",h),_={...b&&{[n1.variable]:b},...w&&{[r1.variable]:w}};if(c){const k=o||y?"none":`${hB} ${d}s`;return i.jsx(je.div,{ref:t,className:S,__css:{animation:k},...v})}return i.jsx(pB,{ref:t,className:S,...v,__css:{width:m?"fit-content":void 0,...r,..._,_dark:{...r._dark,..._},animation:`${p}s linear infinite alternate ${mB}`}})});km.displayName="Skeleton";var Jo=e=>e?"":void 0,cc=e=>e?!0:void 0,Ii=(...e)=>e.filter(Boolean).join(" ");function uc(...e){return function(n){e.some(r=>(r==null||r(n),n==null?void 0:n.defaultPrevented))}}function gB(e){return{root:`slider-root-${e}`,getThumb:t=>`slider-thumb-${e}-${t}`,getInput:t=>`slider-input-${e}-${t}`,track:`slider-track-${e}`,innerTrack:`slider-filled-track-${e}`,getMarker:t=>`slider-marker-${e}-${t}`,output:`slider-output-${e}`}}function Mu(e){const{orientation:t,vertical:n,horizontal:r}=e;return t==="vertical"?n:r}var Ip={width:0,height:0},Wf=e=>e||Ip;function A6(e){const{orientation:t,thumbPercents:n,thumbRects:r,isReversed:o}=e,s=y=>{var S;const _=(S=r[y])!=null?S:Ip;return{position:"absolute",userSelect:"none",WebkitUserSelect:"none",MozUserSelect:"none",msUserSelect:"none",touchAction:"none",...Mu({orientation:t,vertical:{bottom:`calc(${n[y]}% - ${_.height/2}px)`},horizontal:{left:`calc(${n[y]}% - ${_.width/2}px)`}})}},a=t==="vertical"?r.reduce((y,S)=>Wf(y).height>Wf(S).height?y:S,Ip):r.reduce((y,S)=>Wf(y).width>Wf(S).width?y:S,Ip),c={position:"relative",touchAction:"none",WebkitTapHighlightColor:"rgba(0,0,0,0)",userSelect:"none",outline:0,...Mu({orientation:t,vertical:a?{paddingLeft:a.width/2,paddingRight:a.width/2}:{},horizontal:a?{paddingTop:a.height/2,paddingBottom:a.height/2}:{}})},d={position:"absolute",...Mu({orientation:t,vertical:{left:"50%",transform:"translateX(-50%)",height:"100%"},horizontal:{top:"50%",transform:"translateY(-50%)",width:"100%"}})},p=n.length===1,h=[0,o?100-n[0]:n[0]],m=p?h:n;let v=m[0];!p&&o&&(v=100-v);const b=Math.abs(m[m.length-1]-m[0]),w={...d,...Mu({orientation:t,vertical:o?{height:`${b}%`,top:`${v}%`}:{height:`${b}%`,bottom:`${v}%`},horizontal:o?{width:`${b}%`,right:`${v}%`}:{width:`${b}%`,left:`${v}%`}})};return{trackStyle:d,innerTrackStyle:w,rootStyle:c,getThumbStyle:s}}function T6(e){const{isReversed:t,direction:n,orientation:r}=e;return n==="ltr"||r==="vertical"?t:!t}function vB(e,t,n,r){return e.addEventListener(t,n,r),()=>{e.removeEventListener(t,n,r)}}function bB(e){const t=xB(e);return typeof t.PointerEvent<"u"&&e instanceof t.PointerEvent?e.pointerType==="mouse":e instanceof t.MouseEvent}function N6(e){return!!e.touches}function yB(e){return N6(e)&&e.touches.length>1}function xB(e){var t;return(t=e.view)!=null?t:window}function wB(e,t="page"){const n=e.touches[0]||e.changedTouches[0];return{x:n[`${t}X`],y:n[`${t}Y`]}}function SB(e,t="page"){return{x:e[`${t}X`],y:e[`${t}Y`]}}function $6(e,t="page"){return N6(e)?wB(e,t):SB(e,t)}function CB(e){return t=>{const n=bB(t);(!n||n&&t.button===0)&&e(t)}}function kB(e,t=!1){function n(o){e(o,{point:$6(o)})}return t?CB(n):n}function Ep(e,t,n,r){return vB(e,t,kB(n,t==="pointerdown"),r)}var _B=Object.defineProperty,PB=(e,t,n)=>t in e?_B(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,bs=(e,t,n)=>(PB(e,typeof t!="symbol"?t+"":t,n),n),jB=class{constructor(e,t,n){bs(this,"history",[]),bs(this,"startEvent",null),bs(this,"lastEvent",null),bs(this,"lastEventInfo",null),bs(this,"handlers",{}),bs(this,"removeListeners",()=>{}),bs(this,"threshold",3),bs(this,"win"),bs(this,"updatePoint",()=>{if(!(this.lastEvent&&this.lastEventInfo))return;const c=$0(this.lastEventInfo,this.history),d=this.startEvent!==null,p=RB(c.offset,{x:0,y:0})>=this.threshold;if(!d&&!p)return;const{timestamp:h}=_w();this.history.push({...c.point,timestamp:h});const{onStart:m,onMove:v}=this.handlers;d||(m==null||m(this.lastEvent,c),this.startEvent=this.lastEvent),v==null||v(this.lastEvent,c)}),bs(this,"onPointerMove",(c,d)=>{this.lastEvent=c,this.lastEventInfo=d,X9.update(this.updatePoint,!0)}),bs(this,"onPointerUp",(c,d)=>{const p=$0(d,this.history),{onEnd:h,onSessionEnd:m}=this.handlers;m==null||m(c,p),this.end(),!(!h||!this.startEvent)&&(h==null||h(c,p))});var r;if(this.win=(r=e.view)!=null?r:window,yB(e))return;this.handlers=t,n&&(this.threshold=n),e.stopPropagation(),e.preventDefault();const o={point:$6(e)},{timestamp:s}=_w();this.history=[{...o.point,timestamp:s}];const{onSessionStart:a}=t;a==null||a(e,$0(o,this.history)),this.removeListeners=OB(Ep(this.win,"pointermove",this.onPointerMove),Ep(this.win,"pointerup",this.onPointerUp),Ep(this.win,"pointercancel",this.onPointerUp))}updateHandlers(e){this.handlers=e}end(){var e;(e=this.removeListeners)==null||e.call(this),Y9.update(this.updatePoint)}};function dS(e,t){return{x:e.x-t.x,y:e.y-t.y}}function $0(e,t){return{point:e.point,delta:dS(e.point,t[t.length-1]),offset:dS(e.point,t[0]),velocity:EB(t,.1)}}var IB=e=>e*1e3;function EB(e,t){if(e.length<2)return{x:0,y:0};let n=e.length-1,r=null;const o=e[e.length-1];for(;n>=0&&(r=e[n],!(o.timestamp-r.timestamp>IB(t)));)n--;if(!r)return{x:0,y:0};const s=(o.timestamp-r.timestamp)/1e3;if(s===0)return{x:0,y:0};const a={x:(o.x-r.x)/s,y:(o.y-r.y)/s};return a.x===1/0&&(a.x=0),a.y===1/0&&(a.y=0),a}function OB(...e){return t=>e.reduce((n,r)=>r(n),t)}function z0(e,t){return Math.abs(e-t)}function fS(e){return"x"in e&&"y"in e}function RB(e,t){if(typeof e=="number"&&typeof t=="number")return z0(e,t);if(fS(e)&&fS(t)){const n=z0(e.x,t.x),r=z0(e.y,t.y);return Math.sqrt(n**2+r**2)}return 0}function z6(e){const t=f.useRef(null);return t.current=e,t}function L6(e,t){const{onPan:n,onPanStart:r,onPanEnd:o,onPanSessionStart:s,onPanSessionEnd:a,threshold:c}=t,d=!!(n||r||o||s||a),p=f.useRef(null),h=z6({onSessionStart:s,onSessionEnd:a,onStart:r,onMove:n,onEnd(m,v){p.current=null,o==null||o(m,v)}});f.useEffect(()=>{var m;(m=p.current)==null||m.updateHandlers(h.current)}),f.useEffect(()=>{const m=e.current;if(!m||!d)return;function v(b){p.current=new jB(b,h.current,c)}return Ep(m,"pointerdown",v)},[e,d,h,c]),f.useEffect(()=>()=>{var m;(m=p.current)==null||m.end(),p.current=null},[])}function MB(e,t){if(!e){t(void 0);return}t({width:e.offsetWidth,height:e.offsetHeight});const n=e.ownerDocument.defaultView??window,r=new n.ResizeObserver(o=>{if(!Array.isArray(o)||!o.length)return;const[s]=o;let a,c;if("borderBoxSize"in s){const d=s.borderBoxSize,p=Array.isArray(d)?d[0]:d;a=p.inlineSize,c=p.blockSize}else a=e.offsetWidth,c=e.offsetHeight;t({width:a,height:c})});return r.observe(e,{box:"border-box"}),()=>r.unobserve(e)}var DB=globalThis!=null&&globalThis.document?f.useLayoutEffect:f.useEffect;function AB(e,t){var n,r;if(!e||!e.parentElement)return;const o=(r=(n=e.ownerDocument)==null?void 0:n.defaultView)!=null?r:window,s=new o.MutationObserver(()=>{t()});return s.observe(e.parentElement,{childList:!0}),()=>{s.disconnect()}}function B6({getNodes:e,observeMutation:t=!0}){const[n,r]=f.useState([]),[o,s]=f.useState(0);return DB(()=>{const a=e(),c=a.map((d,p)=>MB(d,h=>{r(m=>[...m.slice(0,p),h,...m.slice(p+1)])}));if(t){const d=a[0];c.push(AB(d,()=>{s(p=>p+1)}))}return()=>{c.forEach(d=>{d==null||d()})}},[o]),n}function TB(e){return typeof e=="object"&&e!==null&&"current"in e}function NB(e){const[t]=B6({observeMutation:!1,getNodes(){return[TB(e)?e.current:e]}});return t}function $B(e){const{min:t=0,max:n=100,onChange:r,value:o,defaultValue:s,isReversed:a,direction:c="ltr",orientation:d="horizontal",id:p,isDisabled:h,isReadOnly:m,onChangeStart:v,onChangeEnd:b,step:w=1,getAriaValueText:y,"aria-valuetext":S,"aria-label":_,"aria-labelledby":k,name:j,focusThumbOnChange:I=!0,minStepsBetweenThumbs:E=0,...O}=e,R=or(v),M=or(b),A=or(y),T=T6({isReversed:a,direction:c,orientation:d}),[$,Q]=$c({value:o,defaultValue:s??[25,75],onChange:r});if(!Array.isArray($))throw new TypeError(`[range-slider] You passed an invalid value for \`value\` or \`defaultValue\`, expected \`Array\` but got \`${typeof $}\``);const[B,V]=f.useState(!1),[q,G]=f.useState(!1),[D,L]=f.useState(-1),W=!(h||m),Y=f.useRef($),ae=$.map(Pe=>sc(Pe,t,n)),be=E*w,ie=zB(ae,t,n,be),X=f.useRef({eventSource:null,value:[],valueBounds:[]});X.current.value=ae,X.current.valueBounds=ie;const K=ae.map(Pe=>n-Pe+t),se=(T?K:ae).map(Pe=>qp(Pe,t,n)),re=d==="vertical",oe=f.useRef(null),pe=f.useRef(null),le=B6({getNodes(){const Pe=pe.current,Ze=Pe==null?void 0:Pe.querySelectorAll("[role=slider]");return Ze?Array.from(Ze):[]}}),ge=f.useId(),xe=gB(p??ge),de=f.useCallback(Pe=>{var Ze,Qe;if(!oe.current)return;X.current.eventSource="pointer";const dt=oe.current.getBoundingClientRect(),{clientX:Lt,clientY:cr}=(Qe=(Ze=Pe.touches)==null?void 0:Ze[0])!=null?Qe:Pe,pn=re?dt.bottom-cr:Lt-dt.left,ln=re?dt.height:dt.width;let Hr=pn/ln;return T&&(Hr=1-Hr),Y5(Hr,t,n)},[re,T,n,t]),Te=(n-t)/10,Oe=w||(n-t)/100,$e=f.useMemo(()=>({setValueAtIndex(Pe,Ze){if(!W)return;const Qe=X.current.valueBounds[Pe];Ze=parseFloat(Vv(Ze,Qe.min,Oe)),Ze=sc(Ze,Qe.min,Qe.max);const dt=[...X.current.value];dt[Pe]=Ze,Q(dt)},setActiveIndex:L,stepUp(Pe,Ze=Oe){const Qe=X.current.value[Pe],dt=T?Qe-Ze:Qe+Ze;$e.setValueAtIndex(Pe,dt)},stepDown(Pe,Ze=Oe){const Qe=X.current.value[Pe],dt=T?Qe+Ze:Qe-Ze;$e.setValueAtIndex(Pe,dt)},reset(){Q(Y.current)}}),[Oe,T,Q,W]),kt=f.useCallback(Pe=>{const Ze=Pe.key,dt={ArrowRight:()=>$e.stepUp(D),ArrowUp:()=>$e.stepUp(D),ArrowLeft:()=>$e.stepDown(D),ArrowDown:()=>$e.stepDown(D),PageUp:()=>$e.stepUp(D,Te),PageDown:()=>$e.stepDown(D,Te),Home:()=>{const{min:Lt}=ie[D];$e.setValueAtIndex(D,Lt)},End:()=>{const{max:Lt}=ie[D];$e.setValueAtIndex(D,Lt)}}[Ze];dt&&(Pe.preventDefault(),Pe.stopPropagation(),dt(Pe),X.current.eventSource="keyboard")},[$e,D,Te,ie]),{getThumbStyle:ct,rootStyle:on,trackStyle:vt,innerTrackStyle:bt}=f.useMemo(()=>A6({isReversed:T,orientation:d,thumbRects:le,thumbPercents:se}),[T,d,se,le]),Se=f.useCallback(Pe=>{var Ze;const Qe=Pe??D;if(Qe!==-1&&I){const dt=xe.getThumb(Qe),Lt=(Ze=pe.current)==null?void 0:Ze.ownerDocument.getElementById(dt);Lt&&setTimeout(()=>Lt.focus())}},[I,D,xe]);Ba(()=>{X.current.eventSource==="keyboard"&&(M==null||M(X.current.value))},[ae,M]);const Me=Pe=>{const Ze=de(Pe)||0,Qe=X.current.value.map(ln=>Math.abs(ln-Ze)),dt=Math.min(...Qe);let Lt=Qe.indexOf(dt);const cr=Qe.filter(ln=>ln===dt);cr.length>1&&Ze>X.current.value[Lt]&&(Lt=Lt+cr.length-1),L(Lt),$e.setValueAtIndex(Lt,Ze),Se(Lt)},Pt=Pe=>{if(D==-1)return;const Ze=de(Pe)||0;L(D),$e.setValueAtIndex(D,Ze),Se(D)};L6(pe,{onPanSessionStart(Pe){W&&(V(!0),Me(Pe),R==null||R(X.current.value))},onPanSessionEnd(){W&&(V(!1),M==null||M(X.current.value))},onPan(Pe){W&&Pt(Pe)}});const Tt=f.useCallback((Pe={},Ze=null)=>({...Pe,...O,id:xe.root,ref:cn(Ze,pe),tabIndex:-1,"aria-disabled":cc(h),"data-focused":Jo(q),style:{...Pe.style,...on}}),[O,h,q,on,xe]),we=f.useCallback((Pe={},Ze=null)=>({...Pe,ref:cn(Ze,oe),id:xe.track,"data-disabled":Jo(h),style:{...Pe.style,...vt}}),[h,vt,xe]),ht=f.useCallback((Pe={},Ze=null)=>({...Pe,ref:Ze,id:xe.innerTrack,style:{...Pe.style,...bt}}),[bt,xe]),$t=f.useCallback((Pe,Ze=null)=>{var Qe;const{index:dt,...Lt}=Pe,cr=ae[dt];if(cr==null)throw new TypeError(`[range-slider > thumb] Cannot find value at index \`${dt}\`. The \`value\` or \`defaultValue\` length is : ${ae.length}`);const pn=ie[dt];return{...Lt,ref:Ze,role:"slider",tabIndex:W?0:void 0,id:xe.getThumb(dt),"data-active":Jo(B&&D===dt),"aria-valuetext":(Qe=A==null?void 0:A(cr))!=null?Qe:S==null?void 0:S[dt],"aria-valuemin":pn.min,"aria-valuemax":pn.max,"aria-valuenow":cr,"aria-orientation":d,"aria-disabled":cc(h),"aria-readonly":cc(m),"aria-label":_==null?void 0:_[dt],"aria-labelledby":_!=null&&_[dt]||k==null?void 0:k[dt],style:{...Pe.style,...ct(dt)},onKeyDown:uc(Pe.onKeyDown,kt),onFocus:uc(Pe.onFocus,()=>{G(!0),L(dt)}),onBlur:uc(Pe.onBlur,()=>{G(!1),L(-1)})}},[xe,ae,ie,W,B,D,A,S,d,h,m,_,k,ct,kt,G]),zt=f.useCallback((Pe={},Ze=null)=>({...Pe,ref:Ze,id:xe.output,htmlFor:ae.map((Qe,dt)=>xe.getThumb(dt)).join(" "),"aria-live":"off"}),[xe,ae]),ze=f.useCallback((Pe,Ze=null)=>{const{value:Qe,...dt}=Pe,Lt=!(Qen),cr=Qe>=ae[0]&&Qe<=ae[ae.length-1];let pn=qp(Qe,t,n);pn=T?100-pn:pn;const ln={position:"absolute",pointerEvents:"none",...Mu({orientation:d,vertical:{bottom:`${pn}%`},horizontal:{left:`${pn}%`}})};return{...dt,ref:Ze,id:xe.getMarker(Pe.value),role:"presentation","aria-hidden":!0,"data-disabled":Jo(h),"data-invalid":Jo(!Lt),"data-highlighted":Jo(cr),style:{...Pe.style,...ln}}},[h,T,n,t,d,ae,xe]),Ke=f.useCallback((Pe,Ze=null)=>{const{index:Qe,...dt}=Pe;return{...dt,ref:Ze,id:xe.getInput(Qe),type:"hidden",value:ae[Qe],name:Array.isArray(j)?j[Qe]:`${j}-${Qe}`}},[j,ae,xe]);return{state:{value:ae,isFocused:q,isDragging:B,getThumbPercent:Pe=>se[Pe],getThumbMinValue:Pe=>ie[Pe].min,getThumbMaxValue:Pe=>ie[Pe].max},actions:$e,getRootProps:Tt,getTrackProps:we,getInnerTrackProps:ht,getThumbProps:$t,getMarkerProps:ze,getInputProps:Ke,getOutputProps:zt}}function zB(e,t,n,r){return e.map((o,s)=>{const a=s===0?t:e[s-1]+r,c=s===e.length-1?n:e[s+1]-r;return{min:a,max:c}})}var[LB,_m]=Dn({name:"SliderContext",errorMessage:"useSliderContext: `context` is undefined. Seems you forgot to wrap all slider components within "}),[BB,Pm]=Dn({name:"RangeSliderStylesContext",errorMessage:`useRangeSliderStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),F6=Ae(function(t,n){const r={orientation:"horizontal",...t},o=Fr("Slider",r),s=qn(r),{direction:a}=Ac();s.direction=a;const{getRootProps:c,...d}=$B(s),p=f.useMemo(()=>({...d,name:r.name}),[d,r.name]);return i.jsx(LB,{value:p,children:i.jsx(BB,{value:o,children:i.jsx(je.div,{...c({},n),className:"chakra-slider",__css:o.container,children:r.children})})})});F6.displayName="RangeSlider";var o1=Ae(function(t,n){const{getThumbProps:r,getInputProps:o,name:s}=_m(),a=Pm(),c=r(t,n);return i.jsxs(je.div,{...c,className:Ii("chakra-slider__thumb",t.className),__css:a.thumb,children:[c.children,s&&i.jsx("input",{...o({index:t.index})})]})});o1.displayName="RangeSliderThumb";var H6=Ae(function(t,n){const{getTrackProps:r}=_m(),o=Pm(),s=r(t,n);return i.jsx(je.div,{...s,className:Ii("chakra-slider__track",t.className),__css:o.track,"data-testid":"chakra-range-slider-track"})});H6.displayName="RangeSliderTrack";var W6=Ae(function(t,n){const{getInnerTrackProps:r}=_m(),o=Pm(),s=r(t,n);return i.jsx(je.div,{...s,className:"chakra-slider__filled-track",__css:o.filledTrack})});W6.displayName="RangeSliderFilledTrack";var Op=Ae(function(t,n){const{getMarkerProps:r}=_m(),o=Pm(),s=r(t,n);return i.jsx(je.div,{...s,className:Ii("chakra-slider__marker",t.className),__css:o.mark})});Op.displayName="RangeSliderMark";function FB(e){var t;const{min:n=0,max:r=100,onChange:o,value:s,defaultValue:a,isReversed:c,direction:d="ltr",orientation:p="horizontal",id:h,isDisabled:m,isReadOnly:v,onChangeStart:b,onChangeEnd:w,step:y=1,getAriaValueText:S,"aria-valuetext":_,"aria-label":k,"aria-labelledby":j,name:I,focusThumbOnChange:E=!0,...O}=e,R=or(b),M=or(w),A=or(S),T=T6({isReversed:c,direction:d,orientation:p}),[$,Q]=$c({value:s,defaultValue:a??WB(n,r),onChange:o}),[B,V]=f.useState(!1),[q,G]=f.useState(!1),D=!(m||v),L=(r-n)/10,W=y||(r-n)/100,Y=sc($,n,r),ae=r-Y+n,ie=qp(T?ae:Y,n,r),X=p==="vertical",K=z6({min:n,max:r,step:y,isDisabled:m,value:Y,isInteractive:D,isReversed:T,isVertical:X,eventSource:null,focusThumbOnChange:E,orientation:p}),U=f.useRef(null),se=f.useRef(null),re=f.useRef(null),oe=f.useId(),pe=h??oe,[le,ge]=[`slider-thumb-${pe}`,`slider-track-${pe}`],ke=f.useCallback(ze=>{var Ke,Pn;if(!U.current)return;const Pe=K.current;Pe.eventSource="pointer";const Ze=U.current.getBoundingClientRect(),{clientX:Qe,clientY:dt}=(Pn=(Ke=ze.touches)==null?void 0:Ke[0])!=null?Pn:ze,Lt=X?Ze.bottom-dt:Qe-Ze.left,cr=X?Ze.height:Ze.width;let pn=Lt/cr;T&&(pn=1-pn);let ln=Y5(pn,Pe.min,Pe.max);return Pe.step&&(ln=parseFloat(Vv(ln,Pe.min,Pe.step))),ln=sc(ln,Pe.min,Pe.max),ln},[X,T,K]),xe=f.useCallback(ze=>{const Ke=K.current;Ke.isInteractive&&(ze=parseFloat(Vv(ze,Ke.min,W)),ze=sc(ze,Ke.min,Ke.max),Q(ze))},[W,Q,K]),de=f.useMemo(()=>({stepUp(ze=W){const Ke=T?Y-ze:Y+ze;xe(Ke)},stepDown(ze=W){const Ke=T?Y+ze:Y-ze;xe(Ke)},reset(){xe(a||0)},stepTo(ze){xe(ze)}}),[xe,T,Y,W,a]),Te=f.useCallback(ze=>{const Ke=K.current,Pe={ArrowRight:()=>de.stepUp(),ArrowUp:()=>de.stepUp(),ArrowLeft:()=>de.stepDown(),ArrowDown:()=>de.stepDown(),PageUp:()=>de.stepUp(L),PageDown:()=>de.stepDown(L),Home:()=>xe(Ke.min),End:()=>xe(Ke.max)}[ze.key];Pe&&(ze.preventDefault(),ze.stopPropagation(),Pe(ze),Ke.eventSource="keyboard")},[de,xe,L,K]),Oe=(t=A==null?void 0:A(Y))!=null?t:_,$e=NB(se),{getThumbStyle:kt,rootStyle:ct,trackStyle:on,innerTrackStyle:vt}=f.useMemo(()=>{const ze=K.current,Ke=$e??{width:0,height:0};return A6({isReversed:T,orientation:ze.orientation,thumbRects:[Ke],thumbPercents:[ie]})},[T,$e,ie,K]),bt=f.useCallback(()=>{K.current.focusThumbOnChange&&setTimeout(()=>{var Ke;return(Ke=se.current)==null?void 0:Ke.focus()})},[K]);Ba(()=>{const ze=K.current;bt(),ze.eventSource==="keyboard"&&(M==null||M(ze.value))},[Y,M]);function Se(ze){const Ke=ke(ze);Ke!=null&&Ke!==K.current.value&&Q(Ke)}L6(re,{onPanSessionStart(ze){const Ke=K.current;Ke.isInteractive&&(V(!0),bt(),Se(ze),R==null||R(Ke.value))},onPanSessionEnd(){const ze=K.current;ze.isInteractive&&(V(!1),M==null||M(ze.value))},onPan(ze){K.current.isInteractive&&Se(ze)}});const Me=f.useCallback((ze={},Ke=null)=>({...ze,...O,ref:cn(Ke,re),tabIndex:-1,"aria-disabled":cc(m),"data-focused":Jo(q),style:{...ze.style,...ct}}),[O,m,q,ct]),Pt=f.useCallback((ze={},Ke=null)=>({...ze,ref:cn(Ke,U),id:ge,"data-disabled":Jo(m),style:{...ze.style,...on}}),[m,ge,on]),Tt=f.useCallback((ze={},Ke=null)=>({...ze,ref:Ke,style:{...ze.style,...vt}}),[vt]),we=f.useCallback((ze={},Ke=null)=>({...ze,ref:cn(Ke,se),role:"slider",tabIndex:D?0:void 0,id:le,"data-active":Jo(B),"aria-valuetext":Oe,"aria-valuemin":n,"aria-valuemax":r,"aria-valuenow":Y,"aria-orientation":p,"aria-disabled":cc(m),"aria-readonly":cc(v),"aria-label":k,"aria-labelledby":k?void 0:j,style:{...ze.style,...kt(0)},onKeyDown:uc(ze.onKeyDown,Te),onFocus:uc(ze.onFocus,()=>G(!0)),onBlur:uc(ze.onBlur,()=>G(!1))}),[D,le,B,Oe,n,r,Y,p,m,v,k,j,kt,Te]),ht=f.useCallback((ze,Ke=null)=>{const Pn=!(ze.valuer),Pe=Y>=ze.value,Ze=qp(ze.value,n,r),Qe={position:"absolute",pointerEvents:"none",...HB({orientation:p,vertical:{bottom:T?`${100-Ze}%`:`${Ze}%`},horizontal:{left:T?`${100-Ze}%`:`${Ze}%`}})};return{...ze,ref:Ke,role:"presentation","aria-hidden":!0,"data-disabled":Jo(m),"data-invalid":Jo(!Pn),"data-highlighted":Jo(Pe),style:{...ze.style,...Qe}}},[m,T,r,n,p,Y]),$t=f.useCallback((ze={},Ke=null)=>({...ze,ref:Ke,type:"hidden",value:Y,name:I}),[I,Y]);return{state:{value:Y,isFocused:q,isDragging:B},actions:de,getRootProps:Me,getTrackProps:Pt,getInnerTrackProps:Tt,getThumbProps:we,getMarkerProps:ht,getInputProps:$t}}function HB(e){const{orientation:t,vertical:n,horizontal:r}=e;return t==="vertical"?n:r}function WB(e,t){return t"}),[UB,Im]=Dn({name:"SliderStylesContext",hookName:"useSliderStyles",providerName:""}),V6=Ae((e,t)=>{var n;const r={...e,orientation:(n=e==null?void 0:e.orientation)!=null?n:"horizontal"},o=Fr("Slider",r),s=qn(r),{direction:a}=Ac();s.direction=a;const{getInputProps:c,getRootProps:d,...p}=FB(s),h=d(),m=c({},t);return i.jsx(VB,{value:p,children:i.jsx(UB,{value:o,children:i.jsxs(je.div,{...h,className:Ii("chakra-slider",r.className),__css:o.container,children:[r.children,i.jsx("input",{...m})]})})})});V6.displayName="Slider";var U6=Ae((e,t)=>{const{getThumbProps:n}=jm(),r=Im(),o=n(e,t);return i.jsx(je.div,{...o,className:Ii("chakra-slider__thumb",e.className),__css:r.thumb})});U6.displayName="SliderThumb";var G6=Ae((e,t)=>{const{getTrackProps:n}=jm(),r=Im(),o=n(e,t);return i.jsx(je.div,{...o,className:Ii("chakra-slider__track",e.className),__css:r.track})});G6.displayName="SliderTrack";var q6=Ae((e,t)=>{const{getInnerTrackProps:n}=jm(),r=Im(),o=n(e,t);return i.jsx(je.div,{...o,className:Ii("chakra-slider__filled-track",e.className),__css:r.filledTrack})});q6.displayName="SliderFilledTrack";var Gl=Ae((e,t)=>{const{getMarkerProps:n}=jm(),r=Im(),o=n(e,t);return i.jsx(je.div,{...o,className:Ii("chakra-slider__marker",e.className),__css:r.mark})});Gl.displayName="SliderMark";var Qb=Ae(function(t,n){const r=Fr("Switch",t),{spacing:o="0.5rem",children:s,...a}=qn(t),{getIndicatorProps:c,getInputProps:d,getCheckboxProps:p,getRootProps:h,getLabelProps:m}=K5(a),v=f.useMemo(()=>({display:"inline-block",position:"relative",verticalAlign:"middle",lineHeight:0,...r.container}),[r.container]),b=f.useMemo(()=>({display:"inline-flex",flexShrink:0,justifyContent:"flex-start",boxSizing:"content-box",cursor:"pointer",...r.track}),[r.track]),w=f.useMemo(()=>({userSelect:"none",marginStart:o,...r.label}),[o,r.label]);return i.jsxs(je.label,{...h(),className:Ct("chakra-switch",t.className),__css:v,children:[i.jsx("input",{className:"chakra-switch__input",...d({},n)}),i.jsx(je.span,{...p(),className:"chakra-switch__track",__css:b,children:i.jsx(je.span,{__css:r.thumb,className:"chakra-switch__thumb",...c()})}),s&&i.jsx(je.span,{className:"chakra-switch__label",...m(),__css:w,children:s})]})});Qb.displayName="Switch";var[GB,qB,KB,XB]=db();function YB(e){var t;const{defaultIndex:n,onChange:r,index:o,isManual:s,isLazy:a,lazyBehavior:c="unmount",orientation:d="horizontal",direction:p="ltr",...h}=e,[m,v]=f.useState(n??0),[b,w]=$c({defaultValue:n??0,value:o,onChange:r});f.useEffect(()=>{o!=null&&v(o)},[o]);const y=KB(),S=f.useId();return{id:`tabs-${(t=e.id)!=null?t:S}`,selectedIndex:b,focusedIndex:m,setSelectedIndex:w,setFocusedIndex:v,isManual:s,isLazy:a,lazyBehavior:c,orientation:d,descendants:y,direction:p,htmlProps:h}}var[QB,Em]=Dn({name:"TabsContext",errorMessage:"useTabsContext: `context` is undefined. Seems you forgot to wrap all tabs components within "});function JB(e){const{focusedIndex:t,orientation:n,direction:r}=Em(),o=qB(),s=f.useCallback(a=>{const c=()=>{var k;const j=o.nextEnabled(t);j&&((k=j.node)==null||k.focus())},d=()=>{var k;const j=o.prevEnabled(t);j&&((k=j.node)==null||k.focus())},p=()=>{var k;const j=o.firstEnabled();j&&((k=j.node)==null||k.focus())},h=()=>{var k;const j=o.lastEnabled();j&&((k=j.node)==null||k.focus())},m=n==="horizontal",v=n==="vertical",b=a.key,w=r==="ltr"?"ArrowLeft":"ArrowRight",y=r==="ltr"?"ArrowRight":"ArrowLeft",_={[w]:()=>m&&d(),[y]:()=>m&&c(),ArrowDown:()=>v&&c(),ArrowUp:()=>v&&d(),Home:p,End:h}[b];_&&(a.preventDefault(),_(a))},[o,t,n,r]);return{...e,role:"tablist","aria-orientation":n,onKeyDown:nt(e.onKeyDown,s)}}function ZB(e){const{isDisabled:t=!1,isFocusable:n=!1,...r}=e,{setSelectedIndex:o,isManual:s,id:a,setFocusedIndex:c,selectedIndex:d}=Em(),{index:p,register:h}=XB({disabled:t&&!n}),m=p===d,v=()=>{o(p)},b=()=>{c(p),!s&&!(t&&n)&&o(p)},w=J3({...r,ref:cn(h,e.ref),isDisabled:t,isFocusable:n,onClick:nt(e.onClick,v)}),y="button";return{...w,id:K6(a,p),role:"tab",tabIndex:m?0:-1,type:y,"aria-selected":m,"aria-controls":X6(a,p),onFocus:t?void 0:nt(e.onFocus,b)}}var[eF,tF]=Dn({});function nF(e){const t=Em(),{id:n,selectedIndex:r}=t,s=Cd(e.children).map((a,c)=>f.createElement(eF,{key:c,value:{isSelected:c===r,id:X6(n,c),tabId:K6(n,c),selectedIndex:r}},a));return{...e,children:s}}function rF(e){const{children:t,...n}=e,{isLazy:r,lazyBehavior:o}=Em(),{isSelected:s,id:a,tabId:c}=tF(),d=f.useRef(!1);s&&(d.current=!0);const p=Wb({wasSelected:d.current,isSelected:s,enabled:r,mode:o});return{tabIndex:0,...n,children:p?t:null,role:"tabpanel","aria-labelledby":c,hidden:!s,id:a}}function K6(e,t){return`${e}--tab-${t}`}function X6(e,t){return`${e}--tabpanel-${t}`}var[oF,Om]=Dn({name:"TabsStylesContext",errorMessage:`useTabsStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),Td=Ae(function(t,n){const r=Fr("Tabs",t),{children:o,className:s,...a}=qn(t),{htmlProps:c,descendants:d,...p}=YB(a),h=f.useMemo(()=>p,[p]),{isFitted:m,...v}=c;return i.jsx(GB,{value:d,children:i.jsx(QB,{value:h,children:i.jsx(oF,{value:r,children:i.jsx(je.div,{className:Ct("chakra-tabs",s),ref:n,...v,__css:r.root,children:o})})})})});Td.displayName="Tabs";var Nd=Ae(function(t,n){const r=JB({...t,ref:n}),s={display:"flex",...Om().tablist};return i.jsx(je.div,{...r,className:Ct("chakra-tabs__tablist",t.className),__css:s})});Nd.displayName="TabList";var Rm=Ae(function(t,n){const r=rF({...t,ref:n}),o=Om();return i.jsx(je.div,{outline:"0",...r,className:Ct("chakra-tabs__tab-panel",t.className),__css:o.tabpanel})});Rm.displayName="TabPanel";var Mm=Ae(function(t,n){const r=nF(t),o=Om();return i.jsx(je.div,{...r,width:"100%",ref:n,className:Ct("chakra-tabs__tab-panels",t.className),__css:o.tabpanels})});Mm.displayName="TabPanels";var Cc=Ae(function(t,n){const r=Om(),o=ZB({...t,ref:n}),s={outline:"0",display:"flex",alignItems:"center",justifyContent:"center",...r.tab};return i.jsx(je.button,{...o,className:Ct("chakra-tabs__tab",t.className),__css:s})});Cc.displayName="Tab";function sF(e,t=[]){const n=Object.assign({},e);for(const r of t)r in n&&delete n[r];return n}var aF=["h","minH","height","minHeight"],Jb=Ae((e,t)=>{const n=ia("Textarea",e),{className:r,rows:o,...s}=qn(e),a=hb(s),c=o?sF(n,aF):n;return i.jsx(je.textarea,{ref:t,rows:o,...a,className:Ct("chakra-textarea",r),__css:c})});Jb.displayName="Textarea";var iF={exit:{scale:.85,opacity:0,transition:{opacity:{duration:.15,easings:"easeInOut"},scale:{duration:.2,easings:"easeInOut"}}},enter:{scale:1,opacity:1,transition:{opacity:{easings:"easeOut",duration:.2},scale:{duration:.2,ease:[.175,.885,.4,1.1]}}}},s1=e=>{var t;return((t=e.current)==null?void 0:t.ownerDocument)||document},Rp=e=>{var t,n;return((n=(t=e.current)==null?void 0:t.ownerDocument)==null?void 0:n.defaultView)||window};function lF(e={}){const{openDelay:t=0,closeDelay:n=0,closeOnClick:r=!0,closeOnMouseDown:o,closeOnScroll:s,closeOnPointerDown:a=o,closeOnEsc:c=!0,onOpen:d,onClose:p,placement:h,id:m,isOpen:v,defaultIsOpen:b,arrowSize:w=10,arrowShadowColor:y,arrowPadding:S,modifiers:_,isDisabled:k,gutter:j,offset:I,direction:E,...O}=e,{isOpen:R,onOpen:M,onClose:A}=Hb({isOpen:v,defaultIsOpen:b,onOpen:d,onClose:p}),{referenceRef:T,getPopperProps:$,getArrowInnerProps:Q,getArrowProps:B}=Fb({enabled:R,placement:h,arrowPadding:S,modifiers:_,gutter:j,offset:I,direction:E}),V=f.useId(),G=`tooltip-${m??V}`,D=f.useRef(null),L=f.useRef(),W=f.useCallback(()=>{L.current&&(clearTimeout(L.current),L.current=void 0)},[]),Y=f.useRef(),ae=f.useCallback(()=>{Y.current&&(clearTimeout(Y.current),Y.current=void 0)},[]),be=f.useCallback(()=>{ae(),A()},[A,ae]),ie=cF(D,be),X=f.useCallback(()=>{if(!k&&!L.current){R&&ie();const ge=Rp(D);L.current=ge.setTimeout(M,t)}},[ie,k,R,M,t]),K=f.useCallback(()=>{W();const ge=Rp(D);Y.current=ge.setTimeout(be,n)},[n,be,W]),U=f.useCallback(()=>{R&&r&&K()},[r,K,R]),se=f.useCallback(()=>{R&&a&&K()},[a,K,R]),re=f.useCallback(ge=>{R&&ge.key==="Escape"&&K()},[R,K]);Qi(()=>s1(D),"keydown",c?re:void 0),Qi(()=>{const ge=D.current;if(!ge)return null;const ke=B3(ge);return ke.localName==="body"?Rp(D):ke},"scroll",()=>{R&&s&&be()},{passive:!0,capture:!0}),f.useEffect(()=>{k&&(W(),R&&A())},[k,R,A,W]),f.useEffect(()=>()=>{W(),ae()},[W,ae]),Qi(()=>D.current,"pointerleave",K);const oe=f.useCallback((ge={},ke=null)=>({...ge,ref:cn(D,ke,T),onPointerEnter:nt(ge.onPointerEnter,de=>{de.pointerType!=="touch"&&X()}),onClick:nt(ge.onClick,U),onPointerDown:nt(ge.onPointerDown,se),onFocus:nt(ge.onFocus,X),onBlur:nt(ge.onBlur,K),"aria-describedby":R?G:void 0}),[X,K,se,R,G,U,T]),pe=f.useCallback((ge={},ke=null)=>$({...ge,style:{...ge.style,[jr.arrowSize.var]:w?`${w}px`:void 0,[jr.arrowShadowColor.var]:y}},ke),[$,w,y]),le=f.useCallback((ge={},ke=null)=>{const xe={...ge.style,position:"relative",transformOrigin:jr.transformOrigin.varRef};return{ref:ke,...O,...ge,id:G,role:"tooltip",style:xe}},[O,G]);return{isOpen:R,show:X,hide:K,getTriggerProps:oe,getTooltipProps:le,getTooltipPositionerProps:pe,getArrowProps:B,getArrowInnerProps:Q}}var L0="chakra-ui:close-tooltip";function cF(e,t){return f.useEffect(()=>{const n=s1(e);return n.addEventListener(L0,t),()=>n.removeEventListener(L0,t)},[t,e]),()=>{const n=s1(e),r=Rp(e);n.dispatchEvent(new r.CustomEvent(L0))}}function uF(e,t=[]){const n=Object.assign({},e);for(const r of t)r in n&&delete n[r];return n}function dF(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}var fF=je(Ir.div),wn=Ae((e,t)=>{var n,r;const o=ia("Tooltip",e),s=qn(e),a=Ac(),{children:c,label:d,shouldWrapChildren:p,"aria-label":h,hasArrow:m,bg:v,portalProps:b,background:w,backgroundColor:y,bgColor:S,motionProps:_,...k}=s,j=(r=(n=w??y)!=null?n:v)!=null?r:S;if(j){o.bg=j;const $=M7(a,"colors",j);o[jr.arrowBg.var]=$}const I=lF({...k,direction:a.direction}),E=typeof c=="string"||p;let O;if(E)O=i.jsx(je.span,{display:"inline-block",tabIndex:0,...I.getTriggerProps(),children:c});else{const $=f.Children.only(c);O=f.cloneElement($,I.getTriggerProps($.props,$.ref))}const R=!!h,M=I.getTooltipProps({},t),A=R?uF(M,["role","id"]):M,T=dF(M,["role","id"]);return d?i.jsxs(i.Fragment,{children:[O,i.jsx(mo,{children:I.isOpen&&i.jsx(Ju,{...b,children:i.jsx(je.div,{...I.getTooltipPositionerProps(),__css:{zIndex:o.zIndex,pointerEvents:"none"},children:i.jsxs(fF,{variants:iF,initial:"exit",animate:"enter",exit:"exit",..._,...A,__css:o,children:[d,R&&i.jsx(je.span,{srOnly:!0,...T,children:h}),m&&i.jsx(je.div,{"data-popper-arrow":!0,className:"chakra-tooltip__arrow-wrapper",children:i.jsx(je.div,{"data-popper-arrow-inner":!0,className:"chakra-tooltip__arrow",__css:{bg:o.bg}})})]})})})})]}):i.jsx(i.Fragment,{children:c})});wn.displayName="Tooltip";function pF(e,t={}){let n=f.useCallback(o=>t.keys?_9(e,t.keys,o):e.listen(o),[t.keys,e]),r=e.get.bind(e);return f.useSyncExternalStore(n,r,r)}const vo=e=>e.system,hF=e=>e.system.toastQueue,Y6=fe(vo,e=>e.language,Ge),Cr=fe(e=>e,e=>e.system.isProcessing||!e.system.isConnected),mF=fe(vo,e=>{const{consoleLogLevel:t,shouldLogToConsole:n}=e;return{consoleLogLevel:t,shouldLogToConsole:n}},{memoizeOptions:{resultEqualityCheck:Zt}}),gF=()=>{const{consoleLogLevel:e,shouldLogToConsole:t}=z(mF);return f.useEffect(()=>{t?(localStorage.setItem("ROARR_LOG","true"),localStorage.setItem("ROARR_FILTER",`context.logLevel:>=${D7[e]}`)):localStorage.setItem("ROARR_LOG","false"),U2.ROARR.write=A7.createLogWriter()},[e,t]),f.useEffect(()=>{const r={...T7};G2.set(U2.Roarr.child(r))},[]),pF(G2)},vF=()=>{const e=te(),t=z(hF),n=Z9();return f.useEffect(()=>{t.forEach(r=>{n(r)}),t.length>0&&e(N7())},[e,n,t]),null},Wc=()=>{const e=te();return f.useCallback(n=>e(On(Mn(n))),[e])};var bF=new Map([["aac","audio/aac"],["abw","application/x-abiword"],["arc","application/x-freearc"],["avif","image/avif"],["avi","video/x-msvideo"],["azw","application/vnd.amazon.ebook"],["bin","application/octet-stream"],["bmp","image/bmp"],["bz","application/x-bzip"],["bz2","application/x-bzip2"],["cda","application/x-cdf"],["csh","application/x-csh"],["css","text/css"],["csv","text/csv"],["doc","application/msword"],["docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"],["eot","application/vnd.ms-fontobject"],["epub","application/epub+zip"],["gz","application/gzip"],["gif","image/gif"],["heic","image/heic"],["heif","image/heif"],["htm","text/html"],["html","text/html"],["ico","image/vnd.microsoft.icon"],["ics","text/calendar"],["jar","application/java-archive"],["jpeg","image/jpeg"],["jpg","image/jpeg"],["js","text/javascript"],["json","application/json"],["jsonld","application/ld+json"],["mid","audio/midi"],["midi","audio/midi"],["mjs","text/javascript"],["mp3","audio/mpeg"],["mp4","video/mp4"],["mpeg","video/mpeg"],["mpkg","application/vnd.apple.installer+xml"],["odp","application/vnd.oasis.opendocument.presentation"],["ods","application/vnd.oasis.opendocument.spreadsheet"],["odt","application/vnd.oasis.opendocument.text"],["oga","audio/ogg"],["ogv","video/ogg"],["ogx","application/ogg"],["opus","audio/opus"],["otf","font/otf"],["png","image/png"],["pdf","application/pdf"],["php","application/x-httpd-php"],["ppt","application/vnd.ms-powerpoint"],["pptx","application/vnd.openxmlformats-officedocument.presentationml.presentation"],["rar","application/vnd.rar"],["rtf","application/rtf"],["sh","application/x-sh"],["svg","image/svg+xml"],["swf","application/x-shockwave-flash"],["tar","application/x-tar"],["tif","image/tiff"],["tiff","image/tiff"],["ts","video/mp2t"],["ttf","font/ttf"],["txt","text/plain"],["vsd","application/vnd.visio"],["wav","audio/wav"],["weba","audio/webm"],["webm","video/webm"],["webp","image/webp"],["woff","font/woff"],["woff2","font/woff2"],["xhtml","application/xhtml+xml"],["xls","application/vnd.ms-excel"],["xlsx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"],["xml","application/xml"],["xul","application/vnd.mozilla.xul+xml"],["zip","application/zip"],["7z","application/x-7z-compressed"],["mkv","video/x-matroska"],["mov","video/quicktime"],["msg","application/vnd.ms-outlook"]]);function $d(e,t){var n=yF(e);if(typeof n.path!="string"){var r=e.webkitRelativePath;Object.defineProperty(n,"path",{value:typeof t=="string"?t:typeof r=="string"&&r.length>0?r:e.name,writable:!1,configurable:!1,enumerable:!0})}return n}function yF(e){var t=e.name,n=t&&t.lastIndexOf(".")!==-1;if(n&&!e.type){var r=t.split(".").pop().toLowerCase(),o=bF.get(r);o&&Object.defineProperty(e,"type",{value:o,writable:!1,configurable:!1,enumerable:!0})}return e}var xF=[".DS_Store","Thumbs.db"];function wF(e){return zc(this,void 0,void 0,function(){return Lc(this,function(t){return eh(e)&&SF(e.dataTransfer)?[2,PF(e.dataTransfer,e.type)]:CF(e)?[2,kF(e)]:Array.isArray(e)&&e.every(function(n){return"getFile"in n&&typeof n.getFile=="function"})?[2,_F(e)]:[2,[]]})})}function SF(e){return eh(e)}function CF(e){return eh(e)&&eh(e.target)}function eh(e){return typeof e=="object"&&e!==null}function kF(e){return a1(e.target.files).map(function(t){return $d(t)})}function _F(e){return zc(this,void 0,void 0,function(){var t;return Lc(this,function(n){switch(n.label){case 0:return[4,Promise.all(e.map(function(r){return r.getFile()}))];case 1:return t=n.sent(),[2,t.map(function(r){return $d(r)})]}})})}function PF(e,t){return zc(this,void 0,void 0,function(){var n,r;return Lc(this,function(o){switch(o.label){case 0:return e.items?(n=a1(e.items).filter(function(s){return s.kind==="file"}),t!=="drop"?[2,n]:[4,Promise.all(n.map(jF))]):[3,2];case 1:return r=o.sent(),[2,pS(Q6(r))];case 2:return[2,pS(a1(e.files).map(function(s){return $d(s)}))]}})})}function pS(e){return e.filter(function(t){return xF.indexOf(t.name)===-1})}function a1(e){if(e===null)return[];for(var t=[],n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);nn)return[!1,bS(n)];if(e.sizen)return[!1,bS(n)]}return[!0,null]}function Ui(e){return e!=null}function WF(e){var t=e.files,n=e.accept,r=e.minSize,o=e.maxSize,s=e.multiple,a=e.maxFiles,c=e.validator;return!s&&t.length>1||s&&a>=1&&t.length>a?!1:t.every(function(d){var p=tP(d,n),h=id(p,1),m=h[0],v=nP(d,r,o),b=id(v,1),w=b[0],y=c?c(d):null;return m&&w&&!y})}function th(e){return typeof e.isPropagationStopped=="function"?e.isPropagationStopped():typeof e.cancelBubble<"u"?e.cancelBubble:!1}function Vf(e){return e.dataTransfer?Array.prototype.some.call(e.dataTransfer.types,function(t){return t==="Files"||t==="application/x-moz-file"}):!!e.target&&!!e.target.files}function xS(e){e.preventDefault()}function VF(e){return e.indexOf("MSIE")!==-1||e.indexOf("Trident/")!==-1}function UF(e){return e.indexOf("Edge/")!==-1}function GF(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:window.navigator.userAgent;return VF(e)||UF(e)}function Gs(){for(var e=arguments.length,t=new Array(e),n=0;n1?o-1:0),a=1;ae.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cH(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,s;for(s=0;s=0)&&(n[o]=e[o]);return n}var Zb=f.forwardRef(function(e,t){var n=e.children,r=nh(e,JF),o=ey(r),s=o.open,a=nh(o,ZF);return f.useImperativeHandle(t,function(){return{open:s}},[s]),H.createElement(f.Fragment,null,n(fr(fr({},a),{},{open:s})))});Zb.displayName="Dropzone";var aP={disabled:!1,getFilesFromEvent:wF,maxSize:1/0,minSize:0,multiple:!0,maxFiles:0,preventDropOnDocument:!0,noClick:!1,noKeyboard:!1,noDrag:!1,noDragEventsBubbling:!1,validator:null,useFsAccessApi:!0,autoFocus:!1};Zb.defaultProps=aP;Zb.propTypes={children:Ln.func,accept:Ln.objectOf(Ln.arrayOf(Ln.string)),multiple:Ln.bool,preventDropOnDocument:Ln.bool,noClick:Ln.bool,noKeyboard:Ln.bool,noDrag:Ln.bool,noDragEventsBubbling:Ln.bool,minSize:Ln.number,maxSize:Ln.number,maxFiles:Ln.number,disabled:Ln.bool,getFilesFromEvent:Ln.func,onFileDialogCancel:Ln.func,onFileDialogOpen:Ln.func,useFsAccessApi:Ln.bool,autoFocus:Ln.bool,onDragEnter:Ln.func,onDragLeave:Ln.func,onDragOver:Ln.func,onDrop:Ln.func,onDropAccepted:Ln.func,onDropRejected:Ln.func,onError:Ln.func,validator:Ln.func};var u1={isFocused:!1,isFileDialogActive:!1,isDragActive:!1,isDragAccept:!1,isDragReject:!1,acceptedFiles:[],fileRejections:[]};function ey(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=fr(fr({},aP),e),n=t.accept,r=t.disabled,o=t.getFilesFromEvent,s=t.maxSize,a=t.minSize,c=t.multiple,d=t.maxFiles,p=t.onDragEnter,h=t.onDragLeave,m=t.onDragOver,v=t.onDrop,b=t.onDropAccepted,w=t.onDropRejected,y=t.onFileDialogCancel,S=t.onFileDialogOpen,_=t.useFsAccessApi,k=t.autoFocus,j=t.preventDropOnDocument,I=t.noClick,E=t.noKeyboard,O=t.noDrag,R=t.noDragEventsBubbling,M=t.onError,A=t.validator,T=f.useMemo(function(){return XF(n)},[n]),$=f.useMemo(function(){return KF(n)},[n]),Q=f.useMemo(function(){return typeof S=="function"?S:SS},[S]),B=f.useMemo(function(){return typeof y=="function"?y:SS},[y]),V=f.useRef(null),q=f.useRef(null),G=f.useReducer(uH,u1),D=B0(G,2),L=D[0],W=D[1],Y=L.isFocused,ae=L.isFileDialogActive,be=f.useRef(typeof window<"u"&&window.isSecureContext&&_&&qF()),ie=function(){!be.current&&ae&&setTimeout(function(){if(q.current){var Me=q.current.files;Me.length||(W({type:"closeDialog"}),B())}},300)};f.useEffect(function(){return window.addEventListener("focus",ie,!1),function(){window.removeEventListener("focus",ie,!1)}},[q,ae,B,be]);var X=f.useRef([]),K=function(Me){V.current&&V.current.contains(Me.target)||(Me.preventDefault(),X.current=[])};f.useEffect(function(){return j&&(document.addEventListener("dragover",xS,!1),document.addEventListener("drop",K,!1)),function(){j&&(document.removeEventListener("dragover",xS),document.removeEventListener("drop",K))}},[V,j]),f.useEffect(function(){return!r&&k&&V.current&&V.current.focus(),function(){}},[V,k,r]);var U=f.useCallback(function(Se){M?M(Se):console.error(Se)},[M]),se=f.useCallback(function(Se){Se.preventDefault(),Se.persist(),ct(Se),X.current=[].concat(nH(X.current),[Se.target]),Vf(Se)&&Promise.resolve(o(Se)).then(function(Me){if(!(th(Se)&&!R)){var Pt=Me.length,Tt=Pt>0&&WF({files:Me,accept:T,minSize:a,maxSize:s,multiple:c,maxFiles:d,validator:A}),we=Pt>0&&!Tt;W({isDragAccept:Tt,isDragReject:we,isDragActive:!0,type:"setDraggedFiles"}),p&&p(Se)}}).catch(function(Me){return U(Me)})},[o,p,U,R,T,a,s,c,d,A]),re=f.useCallback(function(Se){Se.preventDefault(),Se.persist(),ct(Se);var Me=Vf(Se);if(Me&&Se.dataTransfer)try{Se.dataTransfer.dropEffect="copy"}catch{}return Me&&m&&m(Se),!1},[m,R]),oe=f.useCallback(function(Se){Se.preventDefault(),Se.persist(),ct(Se);var Me=X.current.filter(function(Tt){return V.current&&V.current.contains(Tt)}),Pt=Me.indexOf(Se.target);Pt!==-1&&Me.splice(Pt,1),X.current=Me,!(Me.length>0)&&(W({type:"setDraggedFiles",isDragActive:!1,isDragAccept:!1,isDragReject:!1}),Vf(Se)&&h&&h(Se))},[V,h,R]),pe=f.useCallback(function(Se,Me){var Pt=[],Tt=[];Se.forEach(function(we){var ht=tP(we,T),$t=B0(ht,2),zt=$t[0],ze=$t[1],Ke=nP(we,a,s),Pn=B0(Ke,2),Pe=Pn[0],Ze=Pn[1],Qe=A?A(we):null;if(zt&&Pe&&!Qe)Pt.push(we);else{var dt=[ze,Ze];Qe&&(dt=dt.concat(Qe)),Tt.push({file:we,errors:dt.filter(function(Lt){return Lt})})}}),(!c&&Pt.length>1||c&&d>=1&&Pt.length>d)&&(Pt.forEach(function(we){Tt.push({file:we,errors:[HF]})}),Pt.splice(0)),W({acceptedFiles:Pt,fileRejections:Tt,type:"setFiles"}),v&&v(Pt,Tt,Me),Tt.length>0&&w&&w(Tt,Me),Pt.length>0&&b&&b(Pt,Me)},[W,c,T,a,s,d,v,b,w,A]),le=f.useCallback(function(Se){Se.preventDefault(),Se.persist(),ct(Se),X.current=[],Vf(Se)&&Promise.resolve(o(Se)).then(function(Me){th(Se)&&!R||pe(Me,Se)}).catch(function(Me){return U(Me)}),W({type:"reset"})},[o,pe,U,R]),ge=f.useCallback(function(){if(be.current){W({type:"openDialog"}),Q();var Se={multiple:c,types:$};window.showOpenFilePicker(Se).then(function(Me){return o(Me)}).then(function(Me){pe(Me,null),W({type:"closeDialog"})}).catch(function(Me){YF(Me)?(B(Me),W({type:"closeDialog"})):QF(Me)?(be.current=!1,q.current?(q.current.value=null,q.current.click()):U(new Error("Cannot open the file picker because the https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API is not supported and no was provided."))):U(Me)});return}q.current&&(W({type:"openDialog"}),Q(),q.current.value=null,q.current.click())},[W,Q,B,_,pe,U,$,c]),ke=f.useCallback(function(Se){!V.current||!V.current.isEqualNode(Se.target)||(Se.key===" "||Se.key==="Enter"||Se.keyCode===32||Se.keyCode===13)&&(Se.preventDefault(),ge())},[V,ge]),xe=f.useCallback(function(){W({type:"focus"})},[]),de=f.useCallback(function(){W({type:"blur"})},[]),Te=f.useCallback(function(){I||(GF()?setTimeout(ge,0):ge())},[I,ge]),Oe=function(Me){return r?null:Me},$e=function(Me){return E?null:Oe(Me)},kt=function(Me){return O?null:Oe(Me)},ct=function(Me){R&&Me.stopPropagation()},on=f.useMemo(function(){return function(){var Se=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},Me=Se.refKey,Pt=Me===void 0?"ref":Me,Tt=Se.role,we=Se.onKeyDown,ht=Se.onFocus,$t=Se.onBlur,zt=Se.onClick,ze=Se.onDragEnter,Ke=Se.onDragOver,Pn=Se.onDragLeave,Pe=Se.onDrop,Ze=nh(Se,eH);return fr(fr(c1({onKeyDown:$e(Gs(we,ke)),onFocus:$e(Gs(ht,xe)),onBlur:$e(Gs($t,de)),onClick:Oe(Gs(zt,Te)),onDragEnter:kt(Gs(ze,se)),onDragOver:kt(Gs(Ke,re)),onDragLeave:kt(Gs(Pn,oe)),onDrop:kt(Gs(Pe,le)),role:typeof Tt=="string"&&Tt!==""?Tt:"presentation"},Pt,V),!r&&!E?{tabIndex:0}:{}),Ze)}},[V,ke,xe,de,Te,se,re,oe,le,E,O,r]),vt=f.useCallback(function(Se){Se.stopPropagation()},[]),bt=f.useMemo(function(){return function(){var Se=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},Me=Se.refKey,Pt=Me===void 0?"ref":Me,Tt=Se.onChange,we=Se.onClick,ht=nh(Se,tH),$t=c1({accept:T,multiple:c,type:"file",style:{display:"none"},onChange:Oe(Gs(Tt,le)),onClick:Oe(Gs(we,vt)),tabIndex:-1},Pt,q);return fr(fr({},$t),ht)}},[q,n,c,le,r]);return fr(fr({},L),{},{isFocused:Y&&!r,getRootProps:on,getInputProps:bt,rootRef:V,inputRef:q,open:Oe(ge)})}function uH(e,t){switch(t.type){case"focus":return fr(fr({},e),{},{isFocused:!0});case"blur":return fr(fr({},e),{},{isFocused:!1});case"openDialog":return fr(fr({},u1),{},{isFileDialogActive:!0});case"closeDialog":return fr(fr({},e),{},{isFileDialogActive:!1});case"setDraggedFiles":return fr(fr({},e),{},{isDragActive:t.isDragActive,isDragAccept:t.isDragAccept,isDragReject:t.isDragReject});case"setFiles":return fr(fr({},e),{},{acceptedFiles:t.acceptedFiles,fileRejections:t.fileRejections});case"reset":return fr({},u1);default:return e}}function SS(){}function d1(){return d1=Object.assign?Object.assign.bind():function(e){for(var t=1;t'),!0):t?e.some(function(n){return t.includes(n)})||e.includes("*"):!0}var vH=function(t,n,r){r===void 0&&(r=!1);var o=n.alt,s=n.meta,a=n.mod,c=n.shift,d=n.ctrl,p=n.keys,h=t.key,m=t.code,v=t.ctrlKey,b=t.metaKey,w=t.shiftKey,y=t.altKey,S=ii(m),_=h.toLowerCase();if(!r){if(o===!y&&_!=="alt"||c===!w&&_!=="shift")return!1;if(a){if(!b&&!v)return!1}else if(s===!b&&_!=="meta"&&_!=="os"||d===!v&&_!=="ctrl"&&_!=="control")return!1}return p&&p.length===1&&(p.includes(_)||p.includes(S))?!0:p?lP(p):!p},bH=f.createContext(void 0),yH=function(){return f.useContext(bH)};function fP(e,t){return e&&t&&typeof e=="object"&&typeof t=="object"?Object.keys(e).length===Object.keys(t).length&&Object.keys(e).reduce(function(n,r){return n&&fP(e[r],t[r])},!0):e===t}var xH=f.createContext({hotkeys:[],enabledScopes:[],toggleScope:function(){},enableScope:function(){},disableScope:function(){}}),wH=function(){return f.useContext(xH)};function SH(e){var t=f.useRef(void 0);return fP(t.current,e)||(t.current=e),t.current}var CS=function(t){t.stopPropagation(),t.preventDefault(),t.stopImmediatePropagation()},CH=typeof window<"u"?f.useLayoutEffect:f.useEffect;function rt(e,t,n,r){var o=f.useRef(null),s=f.useRef(!1),a=n instanceof Array?r instanceof Array?void 0:r:n,c=e instanceof Array?e.join(a==null?void 0:a.splitKey):e,d=n instanceof Array?n:r instanceof Array?r:void 0,p=f.useCallback(t,d??[]),h=f.useRef(p);d?h.current=p:h.current=t;var m=SH(a),v=wH(),b=v.enabledScopes,w=yH();return CH(function(){if(!((m==null?void 0:m.enabled)===!1||!gH(b,m==null?void 0:m.scopes))){var y=function(I,E){var O;if(E===void 0&&(E=!1),!(mH(I)&&!dP(I,m==null?void 0:m.enableOnFormTags))&&!(m!=null&&m.ignoreEventWhen!=null&&m.ignoreEventWhen(I))){if(o.current!==null&&document.activeElement!==o.current&&!o.current.contains(document.activeElement)){CS(I);return}(O=I.target)!=null&&O.isContentEditable&&!(m!=null&&m.enableOnContentEditable)||F0(c,m==null?void 0:m.splitKey).forEach(function(R){var M,A=H0(R,m==null?void 0:m.combinationKey);if(vH(I,A,m==null?void 0:m.ignoreModifiers)||(M=A.keys)!=null&&M.includes("*")){if(E&&s.current)return;if(pH(I,A,m==null?void 0:m.preventDefault),!hH(I,A,m==null?void 0:m.enabled)){CS(I);return}h.current(I,A),E||(s.current=!0)}})}},S=function(I){I.key!==void 0&&(cP(ii(I.code)),((m==null?void 0:m.keydown)===void 0&&(m==null?void 0:m.keyup)!==!0||m!=null&&m.keydown)&&y(I))},_=function(I){I.key!==void 0&&(uP(ii(I.code)),s.current=!1,m!=null&&m.keyup&&y(I,!0))},k=o.current||(a==null?void 0:a.document)||document;return k.addEventListener("keyup",_),k.addEventListener("keydown",S),w&&F0(c,m==null?void 0:m.splitKey).forEach(function(j){return w.addHotkey(H0(j,m==null?void 0:m.combinationKey,m==null?void 0:m.description))}),function(){k.removeEventListener("keyup",_),k.removeEventListener("keydown",S),w&&F0(c,m==null?void 0:m.splitKey).forEach(function(j){return w.removeHotkey(H0(j,m==null?void 0:m.combinationKey,m==null?void 0:m.description))})}}},[c,m,b]),o}const kH=e=>{const{isDragAccept:t,isDragReject:n,setIsHandlingUpload:r}=e;return rt("esc",()=>{r(!1)}),i.jsxs(Ee,{sx:{position:"absolute",top:0,insetInlineStart:0,width:"100vw",height:"100vh",zIndex:999,backdropFilter:"blur(20px)"},children:[i.jsx(F,{sx:{position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full",bg:"base.700",_dark:{bg:"base.900"},opacity:.7,alignItems:"center",justifyContent:"center",transitionProperty:"common",transitionDuration:"0.1s"}}),i.jsx(F,{sx:{position:"absolute",top:0,insetInlineStart:0,width:"full",height:"full",alignItems:"center",justifyContent:"center",p:4},children:i.jsx(F,{sx:{width:"full",height:"full",alignItems:"center",justifyContent:"center",flexDir:"column",gap:4,borderWidth:3,borderRadius:"xl",borderStyle:"dashed",color:"base.100",borderColor:"base.100",_dark:{borderColor:"base.200"}},children:t?i.jsx(Ys,{size:"lg",children:"Drop to Upload"}):i.jsxs(i.Fragment,{children:[i.jsx(Ys,{size:"lg",children:"Invalid Upload"}),i.jsx(Ys,{size:"md",children:"Must be single JPEG or PNG image"})]})})})]})},_H=fe([Ye,Kn],({gallery:e},t)=>{let n={type:"TOAST"};t==="unifiedCanvas"&&(n={type:"SET_CANVAS_INITIAL_IMAGE"}),t==="img2img"&&(n={type:"SET_INITIAL_IMAGE"});const{autoAddBoardId:r}=e;return{autoAddBoardId:r,postUploadAction:n}},Ge),PH=e=>{const{children:t}=e,{autoAddBoardId:n,postUploadAction:r}=z(_H),o=z(Cr),s=Wc(),{t:a}=ye(),[c,d]=f.useState(!1),[p]=D_(),h=f.useCallback(j=>{d(!0),s({title:a("toast.uploadFailed"),description:j.errors.map(I=>I.message).join(` -`),status:"error"})},[a,s]),m=f.useCallback(async j=>{p({file:j,image_category:"user",is_intermediate:!1,postUploadAction:r,board_id:n})},[n,r,p]),v=f.useCallback((j,I)=>{if(I.length>1){s({title:a("toast.uploadFailed"),description:a("toast.uploadFailedInvalidUploadDesc"),status:"error"});return}I.forEach(E=>{h(E)}),j.forEach(E=>{m(E)})},[a,s,m,h]),{getRootProps:b,getInputProps:w,isDragAccept:y,isDragReject:S,isDragActive:_,inputRef:k}=ey({accept:{"image/png":[".png"],"image/jpeg":[".jpg",".jpeg",".png"]},noClick:!0,onDrop:v,onDragOver:()=>d(!0),disabled:o,multiple:!1});return f.useEffect(()=>{const j=async I=>{var E,O;k.current&&(E=I.clipboardData)!=null&&E.files&&(k.current.files=I.clipboardData.files,(O=k.current)==null||O.dispatchEvent(new Event("change",{bubbles:!0})))};return document.addEventListener("paste",j),()=>{document.removeEventListener("paste",j)}},[k]),i.jsxs(Ee,{...b({style:{}}),onKeyDown:j=>{j.key},children:[i.jsx("input",{...w()}),t,i.jsx(mo,{children:_&&c&&i.jsx(Ir.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.1}},exit:{opacity:0,transition:{duration:.1}},children:i.jsx(kH,{isDragAccept:y,isDragReject:S,setIsHandlingUpload:d})},"image-upload-overlay")})]})},jH=f.memo(PH),mn=e=>e.canvas,lr=fe([mn,Kn,vo],(e,t,n)=>e.layerState.stagingArea.images.length>0||t==="unifiedCanvas"&&n.isProcessing),IH=e=>e.canvas.layerState.objects.find(A_),EH=o9(e=>{e(T_(!0))},300),ko=()=>(e,t)=>{Kn(t())==="unifiedCanvas"&&EH(e)};var OH=globalThis&&globalThis.__extends||function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,o){r.__proto__=o}||function(r,o){for(var s in o)Object.prototype.hasOwnProperty.call(o,s)&&(r[s]=o[s])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}(),_r=globalThis&&globalThis.__assign||function(){return _r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n"u"?void 0:Number(r),maxHeight:typeof o>"u"?void 0:Number(o),minWidth:typeof s>"u"?void 0:Number(s),minHeight:typeof a>"u"?void 0:Number(a)}},$H=["as","style","className","grid","snap","bounds","boundsByDirection","size","defaultSize","minWidth","minHeight","maxWidth","maxHeight","lockAspectRatio","lockAspectRatioExtraWidth","lockAspectRatioExtraHeight","enable","handleStyles","handleClasses","handleWrapperStyle","handleWrapperClass","children","onResizeStart","onResize","onResizeStop","handleComponent","scale","resizeRatio","snapGap"],IS="__resizable_base__",zH=function(e){DH(t,e);function t(n){var r=e.call(this,n)||this;return r.ratio=1,r.resizable=null,r.parentLeft=0,r.parentTop=0,r.resizableLeft=0,r.resizableRight=0,r.resizableTop=0,r.resizableBottom=0,r.targetLeft=0,r.targetTop=0,r.appendBase=function(){if(!r.resizable||!r.window)return null;var o=r.parentNode;if(!o)return null;var s=r.window.document.createElement("div");return s.style.width="100%",s.style.height="100%",s.style.position="absolute",s.style.transform="scale(0, 0)",s.style.left="0",s.style.flex="0 0 100%",s.classList?s.classList.add(IS):s.className+=IS,o.appendChild(s),s},r.removeBase=function(o){var s=r.parentNode;s&&s.removeChild(o)},r.ref=function(o){o&&(r.resizable=o)},r.state={isResizing:!1,width:typeof(r.propsSize&&r.propsSize.width)>"u"?"auto":r.propsSize&&r.propsSize.width,height:typeof(r.propsSize&&r.propsSize.height)>"u"?"auto":r.propsSize&&r.propsSize.height,direction:"right",original:{x:0,y:0,width:0,height:0},backgroundStyle:{height:"100%",width:"100%",backgroundColor:"rgba(0,0,0,0)",cursor:"auto",opacity:0,position:"fixed",zIndex:9999,top:"0",left:"0",bottom:"0",right:"0"},flexBasis:void 0},r.onResizeStart=r.onResizeStart.bind(r),r.onMouseMove=r.onMouseMove.bind(r),r.onMouseUp=r.onMouseUp.bind(r),r}return Object.defineProperty(t.prototype,"parentNode",{get:function(){return this.resizable?this.resizable.parentNode:null},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"window",{get:function(){return!this.resizable||!this.resizable.ownerDocument?null:this.resizable.ownerDocument.defaultView},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"propsSize",{get:function(){return this.props.size||this.props.defaultSize||AH},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"size",{get:function(){var n=0,r=0;if(this.resizable&&this.window){var o=this.resizable.offsetWidth,s=this.resizable.offsetHeight,a=this.resizable.style.position;a!=="relative"&&(this.resizable.style.position="relative"),n=this.resizable.style.width!=="auto"?this.resizable.offsetWidth:o,r=this.resizable.style.height!=="auto"?this.resizable.offsetHeight:s,this.resizable.style.position=a}return{width:n,height:r}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"sizeStyle",{get:function(){var n=this,r=this.props.size,o=function(c){if(typeof n.state[c]>"u"||n.state[c]==="auto")return"auto";if(n.propsSize&&n.propsSize[c]&&n.propsSize[c].toString().endsWith("%")){if(n.state[c].toString().endsWith("%"))return n.state[c].toString();var d=n.getParentSize(),p=Number(n.state[c].toString().replace("px","")),h=p/d[c]*100;return h+"%"}return W0(n.state[c])},s=r&&typeof r.width<"u"&&!this.state.isResizing?W0(r.width):o("width"),a=r&&typeof r.height<"u"&&!this.state.isResizing?W0(r.height):o("height");return{width:s,height:a}},enumerable:!1,configurable:!0}),t.prototype.getParentSize=function(){if(!this.parentNode)return this.window?{width:this.window.innerWidth,height:this.window.innerHeight}:{width:0,height:0};var n=this.appendBase();if(!n)return{width:0,height:0};var r=!1,o=this.parentNode.style.flexWrap;o!=="wrap"&&(r=!0,this.parentNode.style.flexWrap="wrap"),n.style.position="relative",n.style.minWidth="100%",n.style.minHeight="100%";var s={width:n.offsetWidth,height:n.offsetHeight};return r&&(this.parentNode.style.flexWrap=o),this.removeBase(n),s},t.prototype.bindEvents=function(){this.window&&(this.window.addEventListener("mouseup",this.onMouseUp),this.window.addEventListener("mousemove",this.onMouseMove),this.window.addEventListener("mouseleave",this.onMouseUp),this.window.addEventListener("touchmove",this.onMouseMove,{capture:!0,passive:!1}),this.window.addEventListener("touchend",this.onMouseUp))},t.prototype.unbindEvents=function(){this.window&&(this.window.removeEventListener("mouseup",this.onMouseUp),this.window.removeEventListener("mousemove",this.onMouseMove),this.window.removeEventListener("mouseleave",this.onMouseUp),this.window.removeEventListener("touchmove",this.onMouseMove,!0),this.window.removeEventListener("touchend",this.onMouseUp))},t.prototype.componentDidMount=function(){if(!(!this.resizable||!this.window)){var n=this.window.getComputedStyle(this.resizable);this.setState({width:this.state.width||this.size.width,height:this.state.height||this.size.height,flexBasis:n.flexBasis!=="auto"?n.flexBasis:void 0})}},t.prototype.componentWillUnmount=function(){this.window&&this.unbindEvents()},t.prototype.createSizeForCssProperty=function(n,r){var o=this.propsSize&&this.propsSize[r];return this.state[r]==="auto"&&this.state.original[r]===n&&(typeof o>"u"||o==="auto")?"auto":n},t.prototype.calculateNewMaxFromBoundary=function(n,r){var o=this.props.boundsByDirection,s=this.state.direction,a=o&&Fl("left",s),c=o&&Fl("top",s),d,p;if(this.props.bounds==="parent"){var h=this.parentNode;h&&(d=a?this.resizableRight-this.parentLeft:h.offsetWidth+(this.parentLeft-this.resizableLeft),p=c?this.resizableBottom-this.parentTop:h.offsetHeight+(this.parentTop-this.resizableTop))}else this.props.bounds==="window"?this.window&&(d=a?this.resizableRight:this.window.innerWidth-this.resizableLeft,p=c?this.resizableBottom:this.window.innerHeight-this.resizableTop):this.props.bounds&&(d=a?this.resizableRight-this.targetLeft:this.props.bounds.offsetWidth+(this.targetLeft-this.resizableLeft),p=c?this.resizableBottom-this.targetTop:this.props.bounds.offsetHeight+(this.targetTop-this.resizableTop));return d&&Number.isFinite(d)&&(n=n&&n"u"?10:s.width,m=typeof o.width>"u"||o.width<0?n:o.width,v=typeof s.height>"u"?10:s.height,b=typeof o.height>"u"||o.height<0?r:o.height,w=d||0,y=p||0;if(c){var S=(v-w)*this.ratio+y,_=(b-w)*this.ratio+y,k=(h-y)/this.ratio+w,j=(m-y)/this.ratio+w,I=Math.max(h,S),E=Math.min(m,_),O=Math.max(v,k),R=Math.min(b,j);n=Gf(n,I,E),r=Gf(r,O,R)}else n=Gf(n,h,m),r=Gf(r,v,b);return{newWidth:n,newHeight:r}},t.prototype.setBoundingClientRect=function(){if(this.props.bounds==="parent"){var n=this.parentNode;if(n){var r=n.getBoundingClientRect();this.parentLeft=r.left,this.parentTop=r.top}}if(this.props.bounds&&typeof this.props.bounds!="string"){var o=this.props.bounds.getBoundingClientRect();this.targetLeft=o.left,this.targetTop=o.top}if(this.resizable){var s=this.resizable.getBoundingClientRect(),a=s.left,c=s.top,d=s.right,p=s.bottom;this.resizableLeft=a,this.resizableRight=d,this.resizableTop=c,this.resizableBottom=p}},t.prototype.onResizeStart=function(n,r){if(!(!this.resizable||!this.window)){var o=0,s=0;if(n.nativeEvent&&TH(n.nativeEvent)?(o=n.nativeEvent.clientX,s=n.nativeEvent.clientY):n.nativeEvent&&qf(n.nativeEvent)&&(o=n.nativeEvent.touches[0].clientX,s=n.nativeEvent.touches[0].clientY),this.props.onResizeStart&&this.resizable){var a=this.props.onResizeStart(n,r,this.resizable);if(a===!1)return}this.props.size&&(typeof this.props.size.height<"u"&&this.props.size.height!==this.state.height&&this.setState({height:this.props.size.height}),typeof this.props.size.width<"u"&&this.props.size.width!==this.state.width&&this.setState({width:this.props.size.width})),this.ratio=typeof this.props.lockAspectRatio=="number"?this.props.lockAspectRatio:this.size.width/this.size.height;var c,d=this.window.getComputedStyle(this.resizable);if(d.flexBasis!=="auto"){var p=this.parentNode;if(p){var h=this.window.getComputedStyle(p).flexDirection;this.flexDir=h.startsWith("row")?"row":"column",c=d.flexBasis}}this.setBoundingClientRect(),this.bindEvents();var m={original:{x:o,y:s,width:this.size.width,height:this.size.height},isResizing:!0,backgroundStyle:qs(qs({},this.state.backgroundStyle),{cursor:this.window.getComputedStyle(n.target).cursor||"auto"}),direction:r,flexBasis:c};this.setState(m)}},t.prototype.onMouseMove=function(n){var r=this;if(!(!this.state.isResizing||!this.resizable||!this.window)){if(this.window.TouchEvent&&qf(n))try{n.preventDefault(),n.stopPropagation()}catch{}var o=this.props,s=o.maxWidth,a=o.maxHeight,c=o.minWidth,d=o.minHeight,p=qf(n)?n.touches[0].clientX:n.clientX,h=qf(n)?n.touches[0].clientY:n.clientY,m=this.state,v=m.direction,b=m.original,w=m.width,y=m.height,S=this.getParentSize(),_=NH(S,this.window.innerWidth,this.window.innerHeight,s,a,c,d);s=_.maxWidth,a=_.maxHeight,c=_.minWidth,d=_.minHeight;var k=this.calculateNewSizeFromDirection(p,h),j=k.newHeight,I=k.newWidth,E=this.calculateNewMaxFromBoundary(s,a);this.props.snap&&this.props.snap.x&&(I=jS(I,this.props.snap.x,this.props.snapGap)),this.props.snap&&this.props.snap.y&&(j=jS(j,this.props.snap.y,this.props.snapGap));var O=this.calculateNewSizeFromAspectRatio(I,j,{width:E.maxWidth,height:E.maxHeight},{width:c,height:d});if(I=O.newWidth,j=O.newHeight,this.props.grid){var R=PS(I,this.props.grid[0]),M=PS(j,this.props.grid[1]),A=this.props.snapGap||0;I=A===0||Math.abs(R-I)<=A?R:I,j=A===0||Math.abs(M-j)<=A?M:j}var T={width:I-b.width,height:j-b.height};if(w&&typeof w=="string"){if(w.endsWith("%")){var $=I/S.width*100;I=$+"%"}else if(w.endsWith("vw")){var Q=I/this.window.innerWidth*100;I=Q+"vw"}else if(w.endsWith("vh")){var B=I/this.window.innerHeight*100;I=B+"vh"}}if(y&&typeof y=="string"){if(y.endsWith("%")){var $=j/S.height*100;j=$+"%"}else if(y.endsWith("vw")){var Q=j/this.window.innerWidth*100;j=Q+"vw"}else if(y.endsWith("vh")){var B=j/this.window.innerHeight*100;j=B+"vh"}}var V={width:this.createSizeForCssProperty(I,"width"),height:this.createSizeForCssProperty(j,"height")};this.flexDir==="row"?V.flexBasis=V.width:this.flexDir==="column"&&(V.flexBasis=V.height),_i.flushSync(function(){r.setState(V)}),this.props.onResize&&this.props.onResize(n,v,this.resizable,T)}},t.prototype.onMouseUp=function(n){var r=this.state,o=r.isResizing,s=r.direction,a=r.original;if(!(!o||!this.resizable)){var c={width:this.size.width-a.width,height:this.size.height-a.height};this.props.onResizeStop&&this.props.onResizeStop(n,s,this.resizable,c),this.props.size&&this.setState(this.props.size),this.unbindEvents(),this.setState({isResizing:!1,backgroundStyle:qs(qs({},this.state.backgroundStyle),{cursor:"auto"})})}},t.prototype.updateSize=function(n){this.setState({width:n.width,height:n.height})},t.prototype.renderResizer=function(){var n=this,r=this.props,o=r.enable,s=r.handleStyles,a=r.handleClasses,c=r.handleWrapperStyle,d=r.handleWrapperClass,p=r.handleComponent;if(!o)return null;var h=Object.keys(o).map(function(m){return o[m]!==!1?f.createElement(MH,{key:m,direction:m,onResizeStart:n.onResizeStart,replaceStyles:s&&s[m],className:a&&a[m]},p&&p[m]?p[m]:null):null});return f.createElement("div",{className:d,style:c},h)},t.prototype.render=function(){var n=this,r=Object.keys(this.props).reduce(function(a,c){return $H.indexOf(c)!==-1||(a[c]=n.props[c]),a},{}),o=qs(qs(qs({position:"relative",userSelect:this.state.isResizing?"none":"auto"},this.props.style),this.sizeStyle),{maxWidth:this.props.maxWidth,maxHeight:this.props.maxHeight,minWidth:this.props.minWidth,minHeight:this.props.minHeight,boxSizing:"border-box",flexShrink:0});this.state.flexBasis&&(o.flexBasis=this.state.flexBasis);var s=this.props.as||"div";return f.createElement(s,qs({ref:this.ref,style:o,className:this.props.className},r),this.state.isResizing&&f.createElement("div",{style:this.state.backgroundStyle}),this.props.children,this.renderResizer())},t.defaultProps={as:"div",onResizeStart:function(){},onResize:function(){},onResizeStop:function(){},enable:{top:!0,right:!0,bottom:!0,left:!0,topRight:!0,bottomRight:!0,bottomLeft:!0,topLeft:!0},style:{},grid:[1,1],lockAspectRatio:!1,lockAspectRatioExtraWidth:0,lockAspectRatioExtraHeight:0,scale:1,resizeRatio:1,snapGap:0},t}(f.PureComponent);const LH=({direction:e,langDirection:t})=>({top:e==="bottom",right:t!=="rtl"&&e==="left"||t==="rtl"&&e==="right",bottom:e==="top",left:t!=="rtl"&&e==="right"||t==="rtl"&&e==="left"}),BH=({direction:e,minWidth:t,maxWidth:n,minHeight:r,maxHeight:o})=>{const s=t??(["left","right"].includes(e)?10:void 0),a=n??(["left","right"].includes(e)?"95vw":void 0),c=r??(["top","bottom"].includes(e)?10:void 0),d=o??(["top","bottom"].includes(e)?"95vh":void 0);return{...s?{minWidth:s}:{},...a?{maxWidth:a}:{},...c?{minHeight:c}:{},...d?{maxHeight:d}:{}}},ba="0.75rem",Xf="1rem",mu="5px",FH=({isResizable:e,direction:t})=>{const n=`calc((2 * ${ba} + ${mu}) / -2)`;return t==="top"?{containerStyles:{borderBottomWidth:mu,paddingBottom:Xf},handleStyles:e?{top:{paddingTop:ba,paddingBottom:ba,bottom:n}}:{}}:t==="left"?{containerStyles:{borderInlineEndWidth:mu,paddingInlineEnd:Xf},handleStyles:e?{right:{paddingInlineStart:ba,paddingInlineEnd:ba,insetInlineEnd:n}}:{}}:t==="bottom"?{containerStyles:{borderTopWidth:mu,paddingTop:Xf},handleStyles:e?{bottom:{paddingTop:ba,paddingBottom:ba,top:n}}:{}}:t==="right"?{containerStyles:{borderInlineStartWidth:mu,paddingInlineStart:Xf},handleStyles:e?{left:{paddingInlineStart:ba,paddingInlineEnd:ba,insetInlineStart:n}}:{}}:{containerStyles:{},handleStyles:{}}},HH=(e,t)=>["top","bottom"].includes(e)?e:e==="left"?t==="rtl"?"right":"left":e==="right"?t==="rtl"?"left":"right":"left",Fe=(e,t)=>n=>n==="light"?e:t,WH=je(zH,{shouldForwardProp:e=>!["sx"].includes(e)}),pP=({direction:e="left",isResizable:t,isOpen:n,onClose:r,children:o,initialWidth:s,minWidth:a,maxWidth:c,initialHeight:d,minHeight:p,maxHeight:h,onResizeStart:m,onResizeStop:v,onResize:b,sx:w={}})=>{const y=Ac().direction,{colorMode:S}=Ds(),_=f.useRef(null),k=f.useMemo(()=>s??a??(["left","right"].includes(e)?"auto":"100%"),[s,a,e]),j=f.useMemo(()=>d??p??(["top","bottom"].includes(e)?"auto":"100%"),[d,p,e]),[I,E]=f.useState(k),[O,R]=f.useState(j);$N({ref:_,handler:()=>{r()},enabled:n});const M=f.useMemo(()=>t?LH({direction:e,langDirection:y}):{},[t,y,e]),A=f.useMemo(()=>BH({direction:e,minWidth:a,maxWidth:c,minHeight:p,maxHeight:h}),[a,c,p,h,e]),{containerStyles:T,handleStyles:$}=f.useMemo(()=>FH({isResizable:t,direction:e}),[t,e]),Q=f.useMemo(()=>HH(e,y),[e,y]);return f.useEffect(()=>{["left","right"].includes(e)&&R("100vh"),["top","bottom"].includes(e)&&E("100vw")},[e]),i.jsx(H5,{direction:Q,in:n,motionProps:{initial:!1},style:{width:"full"},children:i.jsx(Ee,{ref:_,sx:{width:"full",height:"full"},children:i.jsx(WH,{size:{width:t?I:k,height:t?O:j},enable:M,handleStyles:$,...A,sx:{borderColor:Fe("base.200","base.800")(S),p:4,bg:Fe("base.50","base.900")(S),height:"full",shadow:n?"dark-lg":void 0,...T,...w},onResizeStart:(B,V,q)=>{m&&m(B,V,q)},onResize:(B,V,q,G)=>{b&&b(B,V,q,G)},onResizeStop:(B,V,q,G)=>{["left","right"].includes(V)&&E(Number(I)+G.width),["top","bottom"].includes(V)&&R(Number(O)+G.height),v&&v(B,V,q,G)},children:o})})})},VH=Ae((e,t)=>{const{children:n,tooltip:r="",tooltipProps:{placement:o="top",hasArrow:s=!0,...a}={},isChecked:c,...d}=e;return i.jsx(wn,{label:r,placement:o,hasArrow:s,...a,children:i.jsx(bc,{ref:t,colorScheme:c?"accent":"base",...d,children:n})})}),Jt=f.memo(VH);var hP={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},ES=H.createContext&&H.createContext(hP),fi=globalThis&&globalThis.__assign||function(){return fi=Object.assign||function(e){for(var t,n=1,r=arguments.length;nt(e[n],n,e));return e}function ro(e,t){const n=Ei(t);if(Rs(t)||n){let o=n?"":{};if(e){const s=window.getComputedStyle(e,null);o=n?AS(e,s,t):t.reduce((a,c)=>(a[c]=AS(e,s,c),a),o)}return o}e&&_n(Fo(t),o=>GW(e,o,t[o]))}const xs=(e,t)=>{const{o:n,u:r,_:o}=e;let s=n,a;const c=(h,m)=>{const v=s,b=h,w=m||(r?!r(v,b):v!==b);return(w||o)&&(s=b,a=v),[s,w,a]};return[t?h=>c(t(s,a),h):c,h=>[s,!!h,a]]},Ld=()=>typeof window<"u",OP=Ld()&&Node.ELEMENT_NODE,{toString:RW,hasOwnProperty:U0}=Object.prototype,Ha=e=>e===void 0,Am=e=>e===null,MW=e=>Ha(e)||Am(e)?`${e}`:RW.call(e).replace(/^\[object (.+)\]$/,"$1").toLowerCase(),pi=e=>typeof e=="number",Ei=e=>typeof e=="string",ay=e=>typeof e=="boolean",Os=e=>typeof e=="function",Rs=e=>Array.isArray(e),ld=e=>typeof e=="object"&&!Rs(e)&&!Am(e),Tm=e=>{const t=!!e&&e.length,n=pi(t)&&t>-1&&t%1==0;return Rs(e)||!Os(e)&&n?t>0&&ld(e)?t-1 in e:!0:!1},f1=e=>{if(!e||!ld(e)||MW(e)!=="object")return!1;let t;const n="constructor",r=e[n],o=r&&r.prototype,s=U0.call(e,n),a=o&&U0.call(o,"isPrototypeOf");if(r&&!s&&!a)return!1;for(t in e);return Ha(t)||U0.call(e,t)},rh=e=>{const t=HTMLElement;return e?t?e instanceof t:e.nodeType===OP:!1},Nm=e=>{const t=Element;return e?t?e instanceof t:e.nodeType===OP:!1},iy=(e,t,n)=>e.indexOf(t,n),An=(e,t,n)=>(!n&&!Ei(t)&&Tm(t)?Array.prototype.push.apply(e,t):e.push(t),e),cl=e=>{const t=Array.from,n=[];return t&&e?t(e):(e instanceof Set?e.forEach(r=>{An(n,r)}):_n(e,r=>{An(n,r)}),n)},ly=e=>!!e&&e.length===0,ca=(e,t,n)=>{_n(e,o=>o&&o.apply(void 0,t||[])),!n&&(e.length=0)},$m=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),Fo=e=>e?Object.keys(e):[],hr=(e,t,n,r,o,s,a)=>{const c=[t,n,r,o,s,a];return(typeof e!="object"||Am(e))&&!Os(e)&&(e={}),_n(c,d=>{_n(Fo(d),p=>{const h=d[p];if(e===h)return!0;const m=Rs(h);if(h&&(f1(h)||m)){const v=e[p];let b=v;m&&!Rs(v)?b=[]:!m&&!f1(v)&&(b={}),e[p]=hr(b,h)}else e[p]=h})}),e},cy=e=>{for(const t in e)return!1;return!0},RP=(e,t,n,r)=>{if(Ha(r))return n?n[e]:t;n&&(Ei(r)||pi(r))&&(n[e]=r)},to=(e,t,n)=>{if(Ha(n))return e?e.getAttribute(t):null;e&&e.setAttribute(t,n)},So=(e,t)=>{e&&e.removeAttribute(t)},Zi=(e,t,n,r)=>{if(n){const o=to(e,t)||"",s=new Set(o.split(" "));s[r?"add":"delete"](n);const a=cl(s).join(" ").trim();to(e,t,a)}},DW=(e,t,n)=>{const r=to(e,t)||"";return new Set(r.split(" ")).has(n)},_s=(e,t)=>RP("scrollLeft",0,e,t),ka=(e,t)=>RP("scrollTop",0,e,t),p1=Ld()&&Element.prototype,MP=(e,t)=>{const n=[],r=t?Nm(t)?t:null:document;return r?An(n,r.querySelectorAll(e)):n},AW=(e,t)=>{const n=t?Nm(t)?t:null:document;return n?n.querySelector(e):null},oh=(e,t)=>Nm(e)?(p1.matches||p1.msMatchesSelector).call(e,t):!1,uy=e=>e?cl(e.childNodes):[],Ta=e=>e?e.parentElement:null,Ql=(e,t)=>{if(Nm(e)){const n=p1.closest;if(n)return n.call(e,t);do{if(oh(e,t))return e;e=Ta(e)}while(e)}return null},TW=(e,t,n)=>{const r=e&&Ql(e,t),o=e&&AW(n,r),s=Ql(o,t)===r;return r&&o?r===e||o===e||s&&Ql(Ql(e,n),t)!==r:!1},dy=(e,t,n)=>{if(n&&e){let r=t,o;Tm(n)?(o=document.createDocumentFragment(),_n(n,s=>{s===r&&(r=s.previousSibling),o.appendChild(s)})):o=n,t&&(r?r!==t&&(r=r.nextSibling):r=e.firstChild),e.insertBefore(o,r||null)}},ts=(e,t)=>{dy(e,null,t)},NW=(e,t)=>{dy(Ta(e),e,t)},RS=(e,t)=>{dy(Ta(e),e&&e.nextSibling,t)},oa=e=>{if(Tm(e))_n(cl(e),t=>oa(t));else if(e){const t=Ta(e);t&&t.removeChild(e)}},el=e=>{const t=document.createElement("div");return e&&to(t,"class",e),t},DP=e=>{const t=el();return t.innerHTML=e.trim(),_n(uy(t),n=>oa(n))},h1=e=>e.charAt(0).toUpperCase()+e.slice(1),$W=()=>el().style,zW=["-webkit-","-moz-","-o-","-ms-"],LW=["WebKit","Moz","O","MS","webkit","moz","o","ms"],G0={},q0={},BW=e=>{let t=q0[e];if($m(q0,e))return t;const n=h1(e),r=$W();return _n(zW,o=>{const s=o.replace(/-/g,"");return!(t=[e,o+e,s+n,h1(s)+n].find(c=>r[c]!==void 0))}),q0[e]=t||""},Bd=e=>{if(Ld()){let t=G0[e]||window[e];return $m(G0,e)||(_n(LW,n=>(t=t||window[n+h1(e)],!t)),G0[e]=t),t}},FW=Bd("MutationObserver"),MS=Bd("IntersectionObserver"),Jl=Bd("ResizeObserver"),AP=Bd("cancelAnimationFrame"),TP=Bd("requestAnimationFrame"),sh=Ld()&&window.setTimeout,m1=Ld()&&window.clearTimeout,HW=/[^\x20\t\r\n\f]+/g,NP=(e,t,n)=>{const r=e&&e.classList;let o,s=0,a=!1;if(r&&t&&Ei(t)){const c=t.match(HW)||[];for(a=c.length>0;o=c[s++];)a=!!n(r,o)&&a}return a},fy=(e,t)=>{NP(e,t,(n,r)=>n.remove(r))},_a=(e,t)=>(NP(e,t,(n,r)=>n.add(r)),fy.bind(0,e,t)),zm=(e,t,n,r)=>{if(e&&t){let o=!0;return _n(n,s=>{const a=r?r(e[s]):e[s],c=r?r(t[s]):t[s];a!==c&&(o=!1)}),o}return!1},$P=(e,t)=>zm(e,t,["w","h"]),zP=(e,t)=>zm(e,t,["x","y"]),WW=(e,t)=>zm(e,t,["t","r","b","l"]),DS=(e,t,n)=>zm(e,t,["width","height"],n&&(r=>Math.round(r))),es=()=>{},ql=e=>{let t;const n=e?sh:TP,r=e?m1:AP;return[o=>{r(t),t=n(o,Os(e)?e():e)},()=>r(t)]},py=(e,t)=>{let n,r,o,s=es;const{v:a,g:c,p:d}=t||{},p=function(w){s(),m1(n),n=r=void 0,s=es,e.apply(this,w)},h=b=>d&&r?d(r,b):b,m=()=>{s!==es&&p(h(o)||o)},v=function(){const w=cl(arguments),y=Os(a)?a():a;if(pi(y)&&y>=0){const _=Os(c)?c():c,k=pi(_)&&_>=0,j=y>0?sh:TP,I=y>0?m1:AP,O=h(w)||w,R=p.bind(0,O);s();const M=j(R,y);s=()=>I(M),k&&!n&&(n=sh(m,_)),r=o=O}else p(w)};return v.m=m,v},VW={opacity:1,zindex:1},Yf=(e,t)=>{const n=t?parseFloat(e):parseInt(e,10);return n===n?n:0},UW=(e,t)=>!VW[e.toLowerCase()]&&pi(t)?`${t}px`:t,AS=(e,t,n)=>t!=null?t[n]||t.getPropertyValue(n):e.style[n],GW=(e,t,n)=>{try{const{style:r}=e;Ha(r[t])?r.setProperty(t,n):r[t]=UW(t,n)}catch{}},cd=e=>ro(e,"direction")==="rtl",TS=(e,t,n)=>{const r=t?`${t}-`:"",o=n?`-${n}`:"",s=`${r}top${o}`,a=`${r}right${o}`,c=`${r}bottom${o}`,d=`${r}left${o}`,p=ro(e,[s,a,c,d]);return{t:Yf(p[s],!0),r:Yf(p[a],!0),b:Yf(p[c],!0),l:Yf(p[d],!0)}},{round:NS}=Math,hy={w:0,h:0},ud=e=>e?{w:e.offsetWidth,h:e.offsetHeight}:hy,Mp=e=>e?{w:e.clientWidth,h:e.clientHeight}:hy,ah=e=>e?{w:e.scrollWidth,h:e.scrollHeight}:hy,ih=e=>{const t=parseFloat(ro(e,"height"))||0,n=parseFloat(ro(e,"width"))||0;return{w:n-NS(n),h:t-NS(t)}},Zs=e=>e.getBoundingClientRect();let Qf;const qW=()=>{if(Ha(Qf)){Qf=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get(){Qf=!0}}))}catch{}}return Qf},LP=e=>e.split(" "),KW=(e,t,n,r)=>{_n(LP(t),o=>{e.removeEventListener(o,n,r)})},Tr=(e,t,n,r)=>{var o;const s=qW(),a=(o=s&&r&&r.S)!=null?o:s,c=r&&r.$||!1,d=r&&r.C||!1,p=[],h=s?{passive:a,capture:c}:c;return _n(LP(t),m=>{const v=d?b=>{e.removeEventListener(m,v,c),n&&n(b)}:n;An(p,KW.bind(null,e,m,v,c)),e.addEventListener(m,v,h)}),ca.bind(0,p)},BP=e=>e.stopPropagation(),FP=e=>e.preventDefault(),XW={x:0,y:0},K0=e=>{const t=e?Zs(e):0;return t?{x:t.left+window.pageYOffset,y:t.top+window.pageXOffset}:XW},$S=(e,t)=>{_n(Rs(t)?t:[t],e)},my=e=>{const t=new Map,n=(s,a)=>{if(s){const c=t.get(s);$S(d=>{c&&c[d?"delete":"clear"](d)},a)}else t.forEach(c=>{c.clear()}),t.clear()},r=(s,a)=>{if(Ei(s)){const p=t.get(s)||new Set;return t.set(s,p),$S(h=>{Os(h)&&p.add(h)},a),n.bind(0,s,a)}ay(a)&&a&&n();const c=Fo(s),d=[];return _n(c,p=>{const h=s[p];h&&An(d,r(p,h))}),ca.bind(0,d)},o=(s,a)=>{const c=t.get(s);_n(cl(c),d=>{a&&!ly(a)?d.apply(0,a):d()})};return r(e||{}),[r,n,o]},zS=e=>JSON.stringify(e,(t,n)=>{if(Os(n))throw new Error;return n}),YW={paddingAbsolute:!1,showNativeOverlaidScrollbars:!1,update:{elementEvents:[["img","load"]],debounce:[0,33],attributes:null,ignoreMutation:null},overflow:{x:"scroll",y:"scroll"},scrollbars:{theme:"os-theme-dark",visibility:"auto",autoHide:"never",autoHideDelay:1300,dragScroll:!0,clickScroll:!1,pointers:["mouse","touch","pen"]}},HP=(e,t)=>{const n={},r=Fo(t).concat(Fo(e));return _n(r,o=>{const s=e[o],a=t[o];if(ld(s)&&ld(a))hr(n[o]={},HP(s,a)),cy(n[o])&&delete n[o];else if($m(t,o)&&a!==s){let c=!0;if(Rs(s)||Rs(a))try{zS(s)===zS(a)&&(c=!1)}catch{}c&&(n[o]=a)}}),n},WP="os-environment",VP=`${WP}-flexbox-glue`,QW=`${VP}-max`,UP="os-scrollbar-hidden",X0="data-overlayscrollbars-initialize",ws="data-overlayscrollbars",GP=`${ws}-overflow-x`,qP=`${ws}-overflow-y`,dc="overflowVisible",JW="scrollbarHidden",LS="scrollbarPressed",lh="updating",oi="data-overlayscrollbars-viewport",Y0="arrange",KP="scrollbarHidden",fc=dc,g1="data-overlayscrollbars-padding",ZW=fc,BS="data-overlayscrollbars-content",gy="os-size-observer",eV=`${gy}-appear`,tV=`${gy}-listener`,nV="os-trinsic-observer",rV="os-no-css-vars",oV="os-theme-none",Eo="os-scrollbar",sV=`${Eo}-rtl`,aV=`${Eo}-horizontal`,iV=`${Eo}-vertical`,XP=`${Eo}-track`,vy=`${Eo}-handle`,lV=`${Eo}-visible`,cV=`${Eo}-cornerless`,FS=`${Eo}-transitionless`,HS=`${Eo}-interaction`,WS=`${Eo}-unusable`,VS=`${Eo}-auto-hidden`,US=`${Eo}-wheel`,uV=`${XP}-interactive`,dV=`${vy}-interactive`,YP={},ul=()=>YP,fV=e=>{const t=[];return _n(Rs(e)?e:[e],n=>{const r=Fo(n);_n(r,o=>{An(t,YP[o]=n[o])})}),t},pV="__osOptionsValidationPlugin",hV="__osSizeObserverPlugin",by="__osScrollbarsHidingPlugin",mV="__osClickScrollPlugin";let Q0;const GS=(e,t,n,r)=>{ts(e,t);const o=Mp(t),s=ud(t),a=ih(n);return r&&oa(t),{x:s.h-o.h+a.h,y:s.w-o.w+a.w}},gV=e=>{let t=!1;const n=_a(e,UP);try{t=ro(e,BW("scrollbar-width"))==="none"||window.getComputedStyle(e,"::-webkit-scrollbar").getPropertyValue("display")==="none"}catch{}return n(),t},vV=(e,t)=>{const n="hidden";ro(e,{overflowX:n,overflowY:n,direction:"rtl"}),_s(e,0);const r=K0(e),o=K0(t);_s(e,-999);const s=K0(t);return{i:r.x===o.x,n:o.x!==s.x}},bV=(e,t)=>{const n=_a(e,VP),r=Zs(e),o=Zs(t),s=DS(o,r,!0),a=_a(e,QW),c=Zs(e),d=Zs(t),p=DS(d,c,!0);return n(),a(),s&&p},yV=()=>{const{body:e}=document,n=DP(`
`)[0],r=n.firstChild,[o,,s]=my(),[a,c]=xs({o:GS(e,n,r),u:zP},GS.bind(0,e,n,r,!0)),[d]=c(),p=gV(n),h={x:d.x===0,y:d.y===0},m={elements:{host:null,padding:!p,viewport:k=>p&&k===k.ownerDocument.body&&k,content:!1},scrollbars:{slot:!0},cancel:{nativeScrollbarsOverlaid:!1,body:null}},v=hr({},YW),b=hr.bind(0,{},v),w=hr.bind(0,{},m),y={k:d,A:h,I:p,L:ro(n,"zIndex")==="-1",B:vV(n,r),V:bV(n,r),Y:o.bind(0,"z"),j:o.bind(0,"r"),N:w,q:k=>hr(m,k)&&w(),F:b,G:k=>hr(v,k)&&b(),X:hr({},m),U:hr({},v)},S=window.addEventListener,_=py(k=>s(k?"z":"r"),{v:33,g:99});if(So(n,"style"),oa(n),S("resize",_.bind(0,!1)),!p&&(!h.x||!h.y)){let k;S("resize",()=>{const j=ul()[by];k=k||j&&j.R(),k&&k(y,a,_.bind(0,!0))})}return y},Oo=()=>(Q0||(Q0=yV()),Q0),yy=(e,t)=>Os(t)?t.apply(0,e):t,xV=(e,t,n,r)=>{const o=Ha(r)?n:r;return yy(e,o)||t.apply(0,e)},QP=(e,t,n,r)=>{const o=Ha(r)?n:r,s=yy(e,o);return!!s&&(rh(s)?s:t.apply(0,e))},wV=(e,t,n)=>{const{nativeScrollbarsOverlaid:r,body:o}=n||{},{A:s,I:a}=Oo(),{nativeScrollbarsOverlaid:c,body:d}=t,p=r??c,h=Ha(o)?d:o,m=(s.x||s.y)&&p,v=e&&(Am(h)?!a:h);return!!m||!!v},xy=new WeakMap,SV=(e,t)=>{xy.set(e,t)},CV=e=>{xy.delete(e)},JP=e=>xy.get(e),qS=(e,t)=>e?t.split(".").reduce((n,r)=>n&&$m(n,r)?n[r]:void 0,e):void 0,v1=(e,t,n)=>r=>[qS(e,r),n||qS(t,r)!==void 0],ZP=e=>{let t=e;return[()=>t,n=>{t=hr({},t,n)}]},Jf="tabindex",Zf=el.bind(0,""),J0=e=>{ts(Ta(e),uy(e)),oa(e)},kV=e=>{const t=Oo(),{N:n,I:r}=t,o=ul()[by],s=o&&o.T,{elements:a}=n(),{host:c,padding:d,viewport:p,content:h}=a,m=rh(e),v=m?{}:e,{elements:b}=v,{host:w,padding:y,viewport:S,content:_}=b||{},k=m?e:v.target,j=oh(k,"textarea"),I=k.ownerDocument,E=I.documentElement,O=k===I.body,R=I.defaultView,M=xV.bind(0,[k]),A=QP.bind(0,[k]),T=yy.bind(0,[k]),$=M.bind(0,Zf,p),Q=A.bind(0,Zf,h),B=$(S),V=B===k,q=V&&O,G=!V&&Q(_),D=!V&&rh(B)&&B===G,L=D&&!!T(h),W=L?$():B,Y=L?G:Q(),be=q?E:D?W:B,ie=j?M(Zf,c,w):k,X=q?be:ie,K=D?Y:G,U=I.activeElement,se=!V&&R.top===R&&U===k,re={W:k,Z:X,J:be,K:!V&&A(Zf,d,y),tt:K,nt:!V&&!r&&s&&s(t),ot:q?E:be,st:q?I:be,et:R,ct:I,rt:j,it:O,lt:m,ut:V,dt:D,ft:(vt,bt)=>DW(be,V?ws:oi,V?bt:vt),_t:(vt,bt,Se)=>Zi(be,V?ws:oi,V?bt:vt,Se)},oe=Fo(re).reduce((vt,bt)=>{const Se=re[bt];return An(vt,Se&&!Ta(Se)?Se:!1)},[]),pe=vt=>vt?iy(oe,vt)>-1:null,{W:le,Z:ge,K:ke,J:xe,tt:de,nt:Te}=re,Oe=[()=>{So(ge,ws),So(ge,X0),So(le,X0),O&&(So(E,ws),So(E,X0))}],$e=j&&pe(ge);let kt=j?le:uy([de,xe,ke,ge,le].find(vt=>pe(vt)===!1));const ct=q?le:de||xe;return[re,()=>{to(ge,ws,V?"viewport":"host"),to(ke,g1,""),to(de,BS,""),V||to(xe,oi,"");const vt=O&&!V?_a(Ta(k),UP):es;if($e&&(RS(le,ge),An(Oe,()=>{RS(ge,le),oa(ge)})),ts(ct,kt),ts(ge,ke),ts(ke||ge,!V&&xe),ts(xe,de),An(Oe,()=>{vt(),So(ke,g1),So(de,BS),So(xe,GP),So(xe,qP),So(xe,oi),pe(de)&&J0(de),pe(xe)&&J0(xe),pe(ke)&&J0(ke)}),r&&!V&&(Zi(xe,oi,KP,!0),An(Oe,So.bind(0,xe,oi))),Te&&(NW(xe,Te),An(Oe,oa.bind(0,Te))),se){const bt=to(xe,Jf);to(xe,Jf,"-1"),xe.focus();const Se=()=>bt?to(xe,Jf,bt):So(xe,Jf),Me=Tr(I,"pointerdown keydown",()=>{Se(),Me()});An(Oe,[Se,Me])}else U&&U.focus&&U.focus();kt=0},ca.bind(0,Oe)]},_V=(e,t)=>{const{tt:n}=e,[r]=t;return o=>{const{V:s}=Oo(),{ht:a}=r(),{vt:c}=o,d=(n||!s)&&c;return d&&ro(n,{height:a?"":"100%"}),{gt:d,wt:d}}},PV=(e,t)=>{const[n,r]=t,{Z:o,K:s,J:a,ut:c}=e,[d,p]=xs({u:WW,o:TS()},TS.bind(0,o,"padding",""));return(h,m,v)=>{let[b,w]=p(v);const{I:y,V:S}=Oo(),{bt:_}=n(),{gt:k,wt:j,yt:I}=h,[E,O]=m("paddingAbsolute");(k||w||!S&&j)&&([b,w]=d(v));const M=!c&&(O||I||w);if(M){const A=!E||!s&&!y,T=b.r+b.l,$=b.t+b.b,Q={marginRight:A&&!_?-T:0,marginBottom:A?-$:0,marginLeft:A&&_?-T:0,top:A?-b.t:0,right:A?_?-b.r:"auto":0,left:A?_?"auto":-b.l:0,width:A?`calc(100% + ${T}px)`:""},B={paddingTop:A?b.t:0,paddingRight:A?b.r:0,paddingBottom:A?b.b:0,paddingLeft:A?b.l:0};ro(s||a,Q),ro(a,B),r({K:b,St:!A,P:s?B:hr({},Q,B)})}return{xt:M}}},{max:b1}=Math,si=b1.bind(0,0),ej="visible",KS="hidden",jV=42,ep={u:$P,o:{w:0,h:0}},IV={u:zP,o:{x:KS,y:KS}},EV=(e,t)=>{const n=window.devicePixelRatio%1!==0?1:0,r={w:si(e.w-t.w),h:si(e.h-t.h)};return{w:r.w>n?r.w:0,h:r.h>n?r.h:0}},tp=e=>e.indexOf(ej)===0,OV=(e,t)=>{const[n,r]=t,{Z:o,K:s,J:a,nt:c,ut:d,_t:p,it:h,et:m}=e,{k:v,V:b,I:w,A:y}=Oo(),S=ul()[by],_=!d&&!w&&(y.x||y.y),k=h&&d,[j,I]=xs(ep,ih.bind(0,a)),[E,O]=xs(ep,ah.bind(0,a)),[R,M]=xs(ep),[A,T]=xs(ep),[$]=xs(IV),Q=(L,W)=>{if(ro(a,{height:""}),W){const{St:Y,K:ae}=n(),{$t:be,D:ie}=L,X=ih(o),K=Mp(o),U=ro(a,"boxSizing")==="content-box",se=Y||U?ae.b+ae.t:0,re=!(y.x&&U);ro(a,{height:K.h+X.h+(be.x&&re?ie.x:0)-se})}},B=(L,W)=>{const Y=!w&&!L?jV:0,ae=(pe,le,ge)=>{const ke=ro(a,pe),de=(W?W[pe]:ke)==="scroll";return[ke,de,de&&!w?le?Y:ge:0,le&&!!Y]},[be,ie,X,K]=ae("overflowX",y.x,v.x),[U,se,re,oe]=ae("overflowY",y.y,v.y);return{Ct:{x:be,y:U},$t:{x:ie,y:se},D:{x:X,y:re},M:{x:K,y:oe}}},V=(L,W,Y,ae)=>{const be=(se,re)=>{const oe=tp(se),pe=re&&oe&&se.replace(`${ej}-`,"")||"";return[re&&!oe?se:"",tp(pe)?"hidden":pe]},[ie,X]=be(Y.x,W.x),[K,U]=be(Y.y,W.y);return ae.overflowX=X&&K?X:ie,ae.overflowY=U&&ie?U:K,B(L,ae)},q=(L,W,Y,ae)=>{const{D:be,M:ie}=L,{x:X,y:K}=ie,{x:U,y:se}=be,{P:re}=n(),oe=W?"marginLeft":"marginRight",pe=W?"paddingLeft":"paddingRight",le=re[oe],ge=re.marginBottom,ke=re[pe],xe=re.paddingBottom;ae.width=`calc(100% + ${se+-1*le}px)`,ae[oe]=-se+le,ae.marginBottom=-U+ge,Y&&(ae[pe]=ke+(K?se:0),ae.paddingBottom=xe+(X?U:0))},[G,D]=S?S.H(_,b,a,c,n,B,q):[()=>_,()=>[es]];return(L,W,Y)=>{const{gt:ae,Ot:be,wt:ie,xt:X,vt:K,yt:U}=L,{ht:se,bt:re}=n(),[oe,pe]=W("showNativeOverlaidScrollbars"),[le,ge]=W("overflow"),ke=oe&&y.x&&y.y,xe=!d&&!b&&(ae||ie||be||pe||K),de=tp(le.x),Te=tp(le.y),Oe=de||Te;let $e=I(Y),kt=O(Y),ct=M(Y),on=T(Y),vt;if(pe&&w&&p(KP,JW,!ke),xe&&(vt=B(ke),Q(vt,se)),ae||X||ie||U||pe){Oe&&p(fc,dc,!1);const[Pe,Ze]=D(ke,re,vt),[Qe,dt]=$e=j(Y),[Lt,cr]=kt=E(Y),pn=Mp(a);let ln=Lt,Hr=pn;Pe(),(cr||dt||pe)&&Ze&&!ke&&G(Ze,Lt,Qe,re)&&(Hr=Mp(a),ln=ah(a));const yr={w:si(b1(Lt.w,ln.w)+Qe.w),h:si(b1(Lt.h,ln.h)+Qe.h)},Fn={w:si((k?m.innerWidth:Hr.w+si(pn.w-Lt.w))+Qe.w),h:si((k?m.innerHeight+Qe.h:Hr.h+si(pn.h-Lt.h))+Qe.h)};on=A(Fn),ct=R(EV(yr,Fn),Y)}const[bt,Se]=on,[Me,Pt]=ct,[Tt,we]=kt,[ht,$t]=$e,zt={x:Me.w>0,y:Me.h>0},ze=de&&Te&&(zt.x||zt.y)||de&&zt.x&&!zt.y||Te&&zt.y&&!zt.x;if(X||U||$t||we||Se||Pt||ge||pe||xe){const Pe={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},Ze=V(ke,zt,le,Pe),Qe=G(Ze,Tt,ht,re);d||q(Ze,re,Qe,Pe),xe&&Q(Ze,se),d?(to(o,GP,Pe.overflowX),to(o,qP,Pe.overflowY)):ro(a,Pe)}Zi(o,ws,dc,ze),Zi(s,g1,ZW,ze),d||Zi(a,oi,fc,Oe);const[Ke,Pn]=$(B(ke).Ct);return r({Ct:Ke,zt:{x:bt.w,y:bt.h},Tt:{x:Me.w,y:Me.h},Et:zt}),{It:Pn,At:Se,Lt:Pt}}},XS=(e,t,n)=>{const r={},o=t||{},s=Fo(e).concat(Fo(o));return _n(s,a=>{const c=e[a],d=o[a];r[a]=!!(n||c||d)}),r},RV=(e,t)=>{const{W:n,J:r,_t:o,ut:s}=e,{I:a,A:c,V:d}=Oo(),p=!a&&(c.x||c.y),h=[_V(e,t),PV(e,t),OV(e,t)];return(m,v,b)=>{const w=XS(hr({gt:!1,xt:!1,yt:!1,vt:!1,At:!1,Lt:!1,It:!1,Ot:!1,wt:!1},v),{},b),y=p||!d,S=y&&_s(r),_=y&&ka(r);o("",lh,!0);let k=w;return _n(h,j=>{k=XS(k,j(k,m,!!b)||{},b)}),_s(r,S),ka(r,_),o("",lh),s||(_s(n,0),ka(n,0)),k}},MV=(e,t,n)=>{let r,o=!1;const s=()=>{o=!0},a=c=>{if(n){const d=n.reduce((p,h)=>{if(h){const[m,v]=h,b=v&&m&&(c?c(m):MP(m,e));b&&b.length&&v&&Ei(v)&&An(p,[b,v.trim()],!0)}return p},[]);_n(d,p=>_n(p[0],h=>{const m=p[1],v=r.get(h)||[];if(e.contains(h)){const w=Tr(h,m,y=>{o?(w(),r.delete(h)):t(y)});r.set(h,An(v,w))}else ca(v),r.delete(h)}))}};return n&&(r=new WeakMap,a()),[s,a]},YS=(e,t,n,r)=>{let o=!1;const{Ht:s,Pt:a,Dt:c,Mt:d,Rt:p,kt:h}=r||{},m=py(()=>{o&&n(!0)},{v:33,g:99}),[v,b]=MV(e,m,c),w=s||[],y=a||[],S=w.concat(y),_=(j,I)=>{const E=p||es,O=h||es,R=new Set,M=new Set;let A=!1,T=!1;if(_n(j,$=>{const{attributeName:Q,target:B,type:V,oldValue:q,addedNodes:G,removedNodes:D}=$,L=V==="attributes",W=V==="childList",Y=e===B,ae=L&&Ei(Q)?to(B,Q):0,be=ae!==0&&q!==ae,ie=iy(y,Q)>-1&&be;if(t&&(W||!Y)){const X=!L,K=L&&be,U=K&&d&&oh(B,d),re=(U?!E(B,Q,q,ae):X||K)&&!O($,!!U,e,r);_n(G,oe=>R.add(oe)),_n(D,oe=>R.add(oe)),T=T||re}!t&&Y&&be&&!E(B,Q,q,ae)&&(M.add(Q),A=A||ie)}),R.size>0&&b($=>cl(R).reduce((Q,B)=>(An(Q,MP($,B)),oh(B,$)?An(Q,B):Q),[])),t)return!I&&T&&n(!1),[!1];if(M.size>0||A){const $=[cl(M),A];return!I&&n.apply(0,$),$}},k=new FW(j=>_(j));return k.observe(e,{attributes:!0,attributeOldValue:!0,attributeFilter:S,subtree:t,childList:t,characterData:t}),o=!0,[()=>{o&&(v(),k.disconnect(),o=!1)},()=>{if(o){m.m();const j=k.takeRecords();return!ly(j)&&_(j,!0)}}]},np=3333333,rp=e=>e&&(e.height||e.width),tj=(e,t,n)=>{const{Bt:r=!1,Vt:o=!1}=n||{},s=ul()[hV],{B:a}=Oo(),d=DP(`
`)[0],p=d.firstChild,h=cd.bind(0,e),[m]=xs({o:void 0,_:!0,u:(y,S)=>!(!y||!rp(y)&&rp(S))}),v=y=>{const S=Rs(y)&&y.length>0&&ld(y[0]),_=!S&&ay(y[0]);let k=!1,j=!1,I=!0;if(S){const[E,,O]=m(y.pop().contentRect),R=rp(E),M=rp(O);k=!O||!R,j=!M&&R,I=!k}else _?[,I]=y:j=y===!0;if(r&&I){const E=_?y[0]:cd(d);_s(d,E?a.n?-np:a.i?0:np:np),ka(d,np)}k||t({gt:!_,Yt:_?y:void 0,Vt:!!j})},b=[];let w=o?v:!1;return[()=>{ca(b),oa(d)},()=>{if(Jl){const y=new Jl(v);y.observe(p),An(b,()=>{y.disconnect()})}else if(s){const[y,S]=s.O(p,v,o);w=y,An(b,S)}if(r){const[y]=xs({o:void 0},h);An(b,Tr(d,"scroll",S=>{const _=y(),[k,j,I]=_;j&&(fy(p,"ltr rtl"),k?_a(p,"rtl"):_a(p,"ltr"),v([!!k,j,I])),BP(S)}))}w&&(_a(d,eV),An(b,Tr(d,"animationstart",w,{C:!!Jl}))),(Jl||s)&&ts(e,d)}]},DV=e=>e.h===0||e.isIntersecting||e.intersectionRatio>0,AV=(e,t)=>{let n;const r=el(nV),o=[],[s]=xs({o:!1}),a=(d,p)=>{if(d){const h=s(DV(d)),[,m]=h;if(m)return!p&&t(h),[h]}},c=(d,p)=>{if(d&&d.length>0)return a(d.pop(),p)};return[()=>{ca(o),oa(r)},()=>{if(MS)n=new MS(d=>c(d),{root:e}),n.observe(r),An(o,()=>{n.disconnect()});else{const d=()=>{const m=ud(r);a(m)},[p,h]=tj(r,d);An(o,p),h(),d()}ts(e,r)},()=>{if(n)return c(n.takeRecords(),!0)}]},QS=`[${ws}]`,TV=`[${oi}]`,Z0=["tabindex"],JS=["wrap","cols","rows"],ev=["id","class","style","open"],NV=(e,t,n)=>{let r,o,s;const{Z:a,J:c,tt:d,rt:p,ut:h,ft:m,_t:v}=e,{V:b}=Oo(),[w]=xs({u:$P,o:{w:0,h:0}},()=>{const V=m(fc,dc),q=m(Y0,""),G=q&&_s(c),D=q&&ka(c);v(fc,dc),v(Y0,""),v("",lh,!0);const L=ah(d),W=ah(c),Y=ih(c);return v(fc,dc,V),v(Y0,"",q),v("",lh),_s(c,G),ka(c,D),{w:W.w+L.w+Y.w,h:W.h+L.h+Y.h}}),y=p?JS:ev.concat(JS),S=py(n,{v:()=>r,g:()=>o,p(V,q){const[G]=V,[D]=q;return[Fo(G).concat(Fo(D)).reduce((L,W)=>(L[W]=G[W]||D[W],L),{})]}}),_=V=>{_n(V||Z0,q=>{if(iy(Z0,q)>-1){const G=to(a,q);Ei(G)?to(c,q,G):So(c,q)}})},k=(V,q)=>{const[G,D]=V,L={vt:D};return t({ht:G}),!q&&n(L),L},j=({gt:V,Yt:q,Vt:G})=>{const D=!V||G?n:S;let L=!1;if(q){const[W,Y]=q;L=Y,t({bt:W})}D({gt:V,yt:L})},I=(V,q)=>{const[,G]=w(),D={wt:G};return G&&!q&&(V?n:S)(D),D},E=(V,q,G)=>{const D={Ot:q};return q?!G&&S(D):h||_(V),D},[O,R,M]=d||!b?AV(a,k):[es,es,es],[A,T]=h?[es,es]:tj(a,j,{Vt:!0,Bt:!0}),[$,Q]=YS(a,!1,E,{Pt:ev,Ht:ev.concat(Z0)}),B=h&&Jl&&new Jl(j.bind(0,{gt:!0}));return B&&B.observe(a),_(),[()=>{O(),A(),s&&s[0](),B&&B.disconnect(),$()},()=>{T(),R()},()=>{const V={},q=Q(),G=M(),D=s&&s[1]();return q&&hr(V,E.apply(0,An(q,!0))),G&&hr(V,k.apply(0,An(G,!0))),D&&hr(V,I.apply(0,An(D,!0))),V},V=>{const[q]=V("update.ignoreMutation"),[G,D]=V("update.attributes"),[L,W]=V("update.elementEvents"),[Y,ae]=V("update.debounce"),be=W||D,ie=X=>Os(q)&&q(X);if(be&&(s&&(s[1](),s[0]()),s=YS(d||c,!0,I,{Ht:y.concat(G||[]),Dt:L,Mt:QS,kt:(X,K)=>{const{target:U,attributeName:se}=X;return(!K&&se&&!h?TW(U,QS,TV):!1)||!!Ql(U,`.${Eo}`)||!!ie(X)}})),ae)if(S.m(),Rs(Y)){const X=Y[0],K=Y[1];r=pi(X)&&X,o=pi(K)&&K}else pi(Y)?(r=Y,o=!1):(r=!1,o=!1)}]},ZS={x:0,y:0},$V=e=>({K:{t:0,r:0,b:0,l:0},St:!1,P:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},zt:ZS,Tt:ZS,Ct:{x:"hidden",y:"hidden"},Et:{x:!1,y:!1},ht:!1,bt:cd(e.Z)}),zV=(e,t)=>{const n=v1(t,{}),[r,o,s]=my(),[a,c,d]=kV(e),p=ZP($V(a)),[h,m]=p,v=RV(a,p),b=(j,I,E)=>{const R=Fo(j).some(M=>j[M])||!cy(I)||E;return R&&s("u",[j,I,E]),R},[w,y,S,_]=NV(a,m,j=>b(v(n,j),{},!1)),k=h.bind(0);return k.jt=j=>r("u",j),k.Nt=()=>{const{W:j,J:I}=a,E=_s(j),O=ka(j);y(),c(),_s(I,E),ka(I,O)},k.qt=a,[(j,I)=>{const E=v1(t,j,I);return _(E),b(v(E,S(),I),j,!!I)},k,()=>{o(),w(),d()}]},{round:eC}=Math,LV=e=>{const{width:t,height:n}=Zs(e),{w:r,h:o}=ud(e);return{x:eC(t)/r||1,y:eC(n)/o||1}},BV=(e,t,n)=>{const r=t.scrollbars,{button:o,isPrimary:s,pointerType:a}=e,{pointers:c}=r;return o===0&&s&&r[n?"dragScroll":"clickScroll"]&&(c||[]).includes(a)},FV=(e,t)=>Tr(e,"mousedown",Tr.bind(0,t,"click",BP,{C:!0,$:!0}),{$:!0}),tC="pointerup pointerleave pointercancel lostpointercapture",HV=(e,t,n,r,o,s,a)=>{const{B:c}=Oo(),{Ft:d,Gt:p,Xt:h}=r,m=`scroll${a?"Left":"Top"}`,v=`client${a?"X":"Y"}`,b=a?"width":"height",w=a?"left":"top",y=a?"w":"h",S=a?"x":"y",_=(k,j)=>I=>{const{Tt:E}=s(),O=ud(p)[y]-ud(d)[y],M=j*I/O*E[S],T=cd(h)&&a?c.n||c.i?1:-1:1;o[m]=k+M*T};return Tr(p,"pointerdown",k=>{const j=Ql(k.target,`.${vy}`)===d,I=j?d:p;if(Zi(t,ws,LS,!0),BV(k,e,j)){const E=!j&&k.shiftKey,O=()=>Zs(d),R=()=>Zs(p),M=(W,Y)=>(W||O())[w]-(Y||R())[w],A=_(o[m]||0,1/LV(o)[S]),T=k[v],$=O(),Q=R(),B=$[b],V=M($,Q)+B/2,q=T-Q[w],G=j?0:q-V,D=W=>{ca(L),I.releasePointerCapture(W.pointerId)},L=[Zi.bind(0,t,ws,LS),Tr(n,tC,D),Tr(n,"selectstart",W=>FP(W),{S:!1}),Tr(p,tC,D),Tr(p,"pointermove",W=>{const Y=W[v]-T;(j||E)&&A(G+Y)})];if(E)A(G);else if(!j){const W=ul()[mV];W&&An(L,W.O(A,M,G,B,q))}I.setPointerCapture(k.pointerId)}})},WV=(e,t)=>(n,r,o,s,a,c)=>{const{Xt:d}=n,[p,h]=ql(333),m=!!a.scrollBy;let v=!0;return ca.bind(0,[Tr(d,"pointerenter",()=>{r(HS,!0)}),Tr(d,"pointerleave pointercancel",()=>{r(HS)}),Tr(d,"wheel",b=>{const{deltaX:w,deltaY:y,deltaMode:S}=b;m&&v&&S===0&&Ta(d)===s&&a.scrollBy({left:w,top:y,behavior:"smooth"}),v=!1,r(US,!0),p(()=>{v=!0,r(US)}),FP(b)},{S:!1,$:!0}),FV(d,o),HV(e,s,o,n,a,t,c),h])},{min:y1,max:nC,abs:VV,round:UV}=Math,nj=(e,t,n,r)=>{if(r){const c=n?"x":"y",{Tt:d,zt:p}=r,h=p[c],m=d[c];return nC(0,y1(1,h/(h+m)))}const o=n?"width":"height",s=Zs(e)[o],a=Zs(t)[o];return nC(0,y1(1,s/a))},GV=(e,t,n,r,o,s)=>{const{B:a}=Oo(),c=s?"x":"y",d=s?"Left":"Top",{Tt:p}=r,h=UV(p[c]),m=VV(n[`scroll${d}`]),v=s&&o,b=a.i?m:h-m,y=y1(1,(v?b:m)/h),S=nj(e,t,s);return 1/S*(1-S)*y},qV=(e,t,n)=>{const{N:r,L:o}=Oo(),{scrollbars:s}=r(),{slot:a}=s,{ct:c,W:d,Z:p,J:h,lt:m,ot:v,it:b,ut:w}=t,{scrollbars:y}=m?{}:e,{slot:S}=y||{},_=QP([d,p,h],()=>w&&b?d:p,a,S),k=(G,D,L)=>{const W=L?_a:fy;_n(G,Y=>{W(Y.Xt,D)})},j=(G,D)=>{_n(G,L=>{const[W,Y]=D(L);ro(W,Y)})},I=(G,D,L)=>{j(G,W=>{const{Ft:Y,Gt:ae}=W;return[Y,{[L?"width":"height"]:`${(100*nj(Y,ae,L,D)).toFixed(3)}%`}]})},E=(G,D,L)=>{const W=L?"X":"Y";j(G,Y=>{const{Ft:ae,Gt:be,Xt:ie}=Y,X=GV(ae,be,v,D,cd(ie),L);return[ae,{transform:X===X?`translate${W}(${(100*X).toFixed(3)}%)`:""}]})},O=[],R=[],M=[],A=(G,D,L)=>{const W=ay(L),Y=W?L:!0,ae=W?!L:!0;Y&&k(R,G,D),ae&&k(M,G,D)},T=G=>{I(R,G,!0),I(M,G)},$=G=>{E(R,G,!0),E(M,G)},Q=G=>{const D=G?aV:iV,L=G?R:M,W=ly(L)?FS:"",Y=el(`${Eo} ${D} ${W}`),ae=el(XP),be=el(vy),ie={Xt:Y,Gt:ae,Ft:be};return o||_a(Y,rV),ts(Y,ae),ts(ae,be),An(L,ie),An(O,[oa.bind(0,Y),n(ie,A,c,p,v,G)]),ie},B=Q.bind(0,!0),V=Q.bind(0,!1),q=()=>{ts(_,R[0].Xt),ts(_,M[0].Xt),sh(()=>{A(FS)},300)};return B(),V(),[{Ut:T,Wt:$,Zt:A,Jt:{Kt:R,Qt:B,tn:j.bind(0,R)},nn:{Kt:M,Qt:V,tn:j.bind(0,M)}},q,ca.bind(0,O)]},KV=(e,t,n,r)=>{let o,s,a,c,d,p=0;const h=ZP({}),[m]=h,[v,b]=ql(),[w,y]=ql(),[S,_]=ql(100),[k,j]=ql(100),[I,E]=ql(()=>p),[O,R,M]=qV(e,n.qt,WV(t,n)),{Z:A,J:T,ot:$,st:Q,ut:B,it:V}=n.qt,{Jt:q,nn:G,Zt:D,Ut:L,Wt:W}=O,{tn:Y}=q,{tn:ae}=G,be=se=>{const{Xt:re}=se,oe=B&&!V&&Ta(re)===T&&re;return[oe,{transform:oe?`translate(${_s($)}px, ${ka($)}px)`:""}]},ie=(se,re)=>{if(E(),se)D(VS);else{const oe=()=>D(VS,!0);p>0&&!re?I(oe):oe()}},X=()=>{c=s,c&&ie(!0)},K=[_,E,j,y,b,M,Tr(A,"pointerover",X,{C:!0}),Tr(A,"pointerenter",X),Tr(A,"pointerleave",()=>{c=!1,s&&ie(!1)}),Tr(A,"pointermove",()=>{o&&v(()=>{_(),ie(!0),k(()=>{o&&ie(!1)})})}),Tr(Q,"scroll",se=>{w(()=>{W(n()),a&&ie(!0),S(()=>{a&&!c&&ie(!1)})}),r(se),B&&Y(be),B&&ae(be)})],U=m.bind(0);return U.qt=O,U.Nt=R,[(se,re,oe)=>{const{At:pe,Lt:le,It:ge,yt:ke}=oe,{A:xe}=Oo(),de=v1(t,se,re),Te=n(),{Tt:Oe,Ct:$e,bt:kt}=Te,[ct,on]=de("showNativeOverlaidScrollbars"),[vt,bt]=de("scrollbars.theme"),[Se,Me]=de("scrollbars.visibility"),[Pt,Tt]=de("scrollbars.autoHide"),[we]=de("scrollbars.autoHideDelay"),[ht,$t]=de("scrollbars.dragScroll"),[zt,ze]=de("scrollbars.clickScroll"),Ke=pe||le||ke,Pn=ge||Me,Pe=ct&&xe.x&&xe.y,Ze=(Qe,dt)=>{const Lt=Se==="visible"||Se==="auto"&&Qe==="scroll";return D(lV,Lt,dt),Lt};if(p=we,on&&D(oV,Pe),bt&&(D(d),D(vt,!0),d=vt),Tt&&(o=Pt==="move",s=Pt==="leave",a=Pt!=="never",ie(!a,!0)),$t&&D(dV,ht),ze&&D(uV,zt),Pn){const Qe=Ze($e.x,!0),dt=Ze($e.y,!1);D(cV,!(Qe&&dt))}Ke&&(L(Te),W(Te),D(WS,!Oe.x,!0),D(WS,!Oe.y,!1),D(sV,kt&&!V))},U,ca.bind(0,K)]},rj=(e,t,n)=>{Os(e)&&e(t||void 0,n||void 0)},ci=(e,t,n)=>{const{F:r,N:o,Y:s,j:a}=Oo(),c=ul(),d=rh(e),p=d?e:e.target,h=JP(p);if(t&&!h){let m=!1;const v=B=>{const V=ul()[pV],q=V&&V.O;return q?q(B,!0):B},b=hr({},r(),v(t)),[w,y,S]=my(n),[_,k,j]=zV(e,b),[I,E,O]=KV(e,b,k,B=>S("scroll",[Q,B])),R=(B,V)=>_(B,!!V),M=R.bind(0,{},!0),A=s(M),T=a(M),$=B=>{CV(p),A(),T(),O(),j(),m=!0,S("destroyed",[Q,!!B]),y()},Q={options(B,V){if(B){const q=V?r():{},G=HP(b,hr(q,v(B)));cy(G)||(hr(b,G),R(G))}return hr({},b)},on:w,off:(B,V)=>{B&&V&&y(B,V)},state(){const{zt:B,Tt:V,Ct:q,Et:G,K:D,St:L,bt:W}=k();return hr({},{overflowEdge:B,overflowAmount:V,overflowStyle:q,hasOverflow:G,padding:D,paddingAbsolute:L,directionRTL:W,destroyed:m})},elements(){const{W:B,Z:V,K:q,J:G,tt:D,ot:L,st:W}=k.qt,{Jt:Y,nn:ae}=E.qt,be=X=>{const{Ft:K,Gt:U,Xt:se}=X;return{scrollbar:se,track:U,handle:K}},ie=X=>{const{Kt:K,Qt:U}=X,se=be(K[0]);return hr({},se,{clone:()=>{const re=be(U());return I({},!0,{}),re}})};return hr({},{target:B,host:V,padding:q||G,viewport:G,content:D||G,scrollOffsetElement:L,scrollEventElement:W,scrollbarHorizontal:ie(Y),scrollbarVertical:ie(ae)})},update:B=>R({},B),destroy:$.bind(0)};return k.jt((B,V,q)=>{I(V,q,B)}),SV(p,Q),_n(Fo(c),B=>rj(c[B],0,Q)),wV(k.qt.it,o().cancel,!d&&e.cancel)?($(!0),Q):(k.Nt(),E.Nt(),S("initialized",[Q]),k.jt((B,V,q)=>{const{gt:G,yt:D,vt:L,At:W,Lt:Y,It:ae,wt:be,Ot:ie}=B;S("updated",[Q,{updateHints:{sizeChanged:G,directionChanged:D,heightIntrinsicChanged:L,overflowEdgeChanged:W,overflowAmountChanged:Y,overflowStyleChanged:ae,contentMutation:be,hostMutation:ie},changedOptions:V,force:q}])}),Q.update(!0),Q)}return h};ci.plugin=e=>{_n(fV(e),t=>rj(t,ci))};ci.valid=e=>{const t=e&&e.elements,n=Os(t)&&t();return f1(n)&&!!JP(n.target)};ci.env=()=>{const{k:e,A:t,I:n,B:r,V:o,L:s,X:a,U:c,N:d,q:p,F:h,G:m}=Oo();return hr({},{scrollbarsSize:e,scrollbarsOverlaid:t,scrollbarsHiding:n,rtlScrollBehavior:r,flexboxGlue:o,cssCustomProperties:s,staticDefaultInitialization:a,staticDefaultOptions:c,getDefaultInitialization:d,setDefaultInitialization:p,getDefaultOptions:h,setDefaultOptions:m})};const XV=()=>{if(typeof window>"u"){const p=()=>{};return[p,p]}let e,t;const n=window,r=typeof n.requestIdleCallback=="function",o=n.requestAnimationFrame,s=n.cancelAnimationFrame,a=r?n.requestIdleCallback:o,c=r?n.cancelIdleCallback:s,d=()=>{c(e),s(t)};return[(p,h)=>{d(),e=a(r?()=>{d(),t=o(p)}:p,typeof h=="object"?h:{timeout:2233})},d]},wy=e=>{const{options:t,events:n,defer:r}=e||{},[o,s]=f.useMemo(XV,[]),a=f.useRef(null),c=f.useRef(r),d=f.useRef(t),p=f.useRef(n);return f.useEffect(()=>{c.current=r},[r]),f.useEffect(()=>{const{current:h}=a;d.current=t,ci.valid(h)&&h.options(t||{},!0)},[t]),f.useEffect(()=>{const{current:h}=a;p.current=n,ci.valid(h)&&h.on(n||{},!0)},[n]),f.useEffect(()=>()=>{var h;s(),(h=a.current)==null||h.destroy()},[]),f.useMemo(()=>[h=>{const m=a.current;if(ci.valid(m))return;const v=c.current,b=d.current||{},w=p.current||{},y=()=>a.current=ci(h,b,w);v?o(y,v):y()},()=>a.current],[])},YV=(e,t)=>{const{element:n="div",options:r,events:o,defer:s,children:a,...c}=e,d=n,p=f.useRef(null),h=f.useRef(null),[m,v]=wy({options:r,events:o,defer:s});return f.useEffect(()=>{const{current:b}=p,{current:w}=h;return b&&w&&m({target:b,elements:{viewport:w,content:w}}),()=>{var y;return(y=v())==null?void 0:y.destroy()}},[m,n]),f.useImperativeHandle(t,()=>({osInstance:v,getElement:()=>p.current}),[]),H.createElement(d,{"data-overlayscrollbars-initialize":"",ref:p,...c},H.createElement("div",{ref:h},a))},oj=f.forwardRef(YV);var sj={exports:{}},aj={};const $o=Y1($7),gu=Y1(z7),QV=Y1(L7);(function(e){var t,n,r=Dl&&Dl.__generator||function(J,ee){var he,_e,me,ut,st={label:0,sent:function(){if(1&me[0])throw me[1];return me[1]},trys:[],ops:[]};return ut={next:Ht(0),throw:Ht(1),return:Ht(2)},typeof Symbol=="function"&&(ut[Symbol.iterator]=function(){return this}),ut;function Ht(ft){return function(xt){return function(He){if(he)throw new TypeError("Generator is already executing.");for(;st;)try{if(he=1,_e&&(me=2&He[0]?_e.return:He[0]?_e.throw||((me=_e.return)&&me.call(_e),0):_e.next)&&!(me=me.call(_e,He[1])).done)return me;switch(_e=0,me&&(He=[2&He[0],me.value]),He[0]){case 0:case 1:me=He;break;case 4:return st.label++,{value:He[1],done:!1};case 5:st.label++,_e=He[1],He=[0];continue;case 7:He=st.ops.pop(),st.trys.pop();continue;default:if(!((me=(me=st.trys).length>0&&me[me.length-1])||He[0]!==6&&He[0]!==2)){st=0;continue}if(He[0]===3&&(!me||He[1]>me[0]&&He[1]=200&&J.status<=299},Q=function(J){return/ion\/(vnd\.api\+)?json/.test(J.get("content-type")||"")};function B(J){if(!(0,A.isPlainObject)(J))return J;for(var ee=S({},J),he=0,_e=Object.entries(ee);he<_e.length;he++){var me=_e[he];me[1]===void 0&&delete ee[me[0]]}return ee}function V(J){var ee=this;J===void 0&&(J={});var he=J.baseUrl,_e=J.prepareHeaders,me=_e===void 0?function(en){return en}:_e,ut=J.fetchFn,st=ut===void 0?T:ut,Ht=J.paramsSerializer,ft=J.isJsonContentType,xt=ft===void 0?Q:ft,He=J.jsonContentType,Ce=He===void 0?"application/json":He,Je=J.jsonReplacer,jt=J.timeout,Et=J.responseHandler,Nt=J.validateStatus,qt=j(J,["baseUrl","prepareHeaders","fetchFn","paramsSerializer","isJsonContentType","jsonContentType","jsonReplacer","timeout","responseHandler","validateStatus"]);return typeof fetch>"u"&&st===T&&console.warn("Warning: `fetch` is not available. Please supply a custom `fetchFn` property to use `fetchBaseQuery` on SSR environments."),function(en,Ut){return E(ee,null,function(){var Be,yt,Mt,Wt,jn,Gt,un,sn,Or,Jn,It,In,Rn,Zn,mr,Tn,Nn,dn,Sn,En,vn,bn,Xe,Ot,St,at,wt,Bt,mt,ot,Re,Ie,De,We,tt,Dt;return r(this,function(Rt){switch(Rt.label){case 0:return Be=Ut.signal,yt=Ut.getState,Mt=Ut.extra,Wt=Ut.endpoint,jn=Ut.forced,Gt=Ut.type,Or=(sn=typeof en=="string"?{url:en}:en).url,It=(Jn=sn.headers)===void 0?new Headers(qt.headers):Jn,Rn=(In=sn.params)===void 0?void 0:In,mr=(Zn=sn.responseHandler)===void 0?Et??"json":Zn,Nn=(Tn=sn.validateStatus)===void 0?Nt??$:Tn,Sn=(dn=sn.timeout)===void 0?jt:dn,En=j(sn,["url","headers","params","responseHandler","validateStatus","timeout"]),vn=S(_(S({},qt),{signal:Be}),En),It=new Headers(B(It)),bn=vn,[4,me(It,{getState:yt,extra:Mt,endpoint:Wt,forced:jn,type:Gt})];case 1:bn.headers=Rt.sent()||It,Xe=function(Ve){return typeof Ve=="object"&&((0,A.isPlainObject)(Ve)||Array.isArray(Ve)||typeof Ve.toJSON=="function")},!vn.headers.has("content-type")&&Xe(vn.body)&&vn.headers.set("content-type",Ce),Xe(vn.body)&&xt(vn.headers)&&(vn.body=JSON.stringify(vn.body,Je)),Rn&&(Ot=~Or.indexOf("?")?"&":"?",St=Ht?Ht(Rn):new URLSearchParams(B(Rn)),Or+=Ot+St),Or=function(Ve,nn){if(!Ve)return nn;if(!nn)return Ve;if(function(hn){return new RegExp("(^|:)//").test(hn)}(nn))return nn;var yn=Ve.endsWith("/")||!nn.startsWith("?")?"/":"";return Ve=function(hn){return hn.replace(/\/$/,"")}(Ve),""+Ve+yn+function(hn){return hn.replace(/^\//,"")}(nn)}(he,Or),at=new Request(Or,vn),wt=at.clone(),un={request:wt},mt=!1,ot=Sn&&setTimeout(function(){mt=!0,Ut.abort()},Sn),Rt.label=2;case 2:return Rt.trys.push([2,4,5,6]),[4,st(at)];case 3:return Bt=Rt.sent(),[3,6];case 4:return Re=Rt.sent(),[2,{error:{status:mt?"TIMEOUT_ERROR":"FETCH_ERROR",error:String(Re)},meta:un}];case 5:return ot&&clearTimeout(ot),[7];case 6:Ie=Bt.clone(),un.response=Ie,We="",Rt.label=7;case 7:return Rt.trys.push([7,9,,10]),[4,Promise.all([tn(Bt,mr).then(function(Ve){return De=Ve},function(Ve){return tt=Ve}),Ie.text().then(function(Ve){return We=Ve},function(){})])];case 8:if(Rt.sent(),tt)throw tt;return[3,10];case 9:return Dt=Rt.sent(),[2,{error:{status:"PARSING_ERROR",originalStatus:Bt.status,data:We,error:String(Dt)},meta:un}];case 10:return[2,Nn(Bt,De)?{data:De,meta:un}:{error:{status:Bt.status,data:De},meta:un}]}})})};function tn(en,Ut){return E(this,null,function(){var Be;return r(this,function(yt){switch(yt.label){case 0:return typeof Ut=="function"?[2,Ut(en)]:(Ut==="content-type"&&(Ut=xt(en.headers)?"json":"text"),Ut!=="json"?[3,2]:[4,en.text()]);case 1:return[2,(Be=yt.sent()).length?JSON.parse(Be):null];case 2:return[2,en.text()]}})})}}var q=function(J,ee){ee===void 0&&(ee=void 0),this.value=J,this.meta=ee};function G(J,ee){return J===void 0&&(J=0),ee===void 0&&(ee=5),E(this,null,function(){var he,_e;return r(this,function(me){switch(me.label){case 0:return he=Math.min(J,ee),_e=~~((Math.random()+.4)*(300<=Ie)}var En=(0,$e.createAsyncThunk)(Rn+"/executeQuery",dn,{getPendingMeta:function(){var Xe;return(Xe={startedTimeStamp:Date.now()})[$e.SHOULD_AUTOBATCH]=!0,Xe},condition:function(Xe,Ot){var St,at,wt,Bt=(0,Ot.getState)(),mt=(at=(St=Bt[Rn])==null?void 0:St.queries)==null?void 0:at[Xe.queryCacheKey],ot=mt==null?void 0:mt.fulfilledTimeStamp,Re=Xe.originalArgs,Ie=mt==null?void 0:mt.originalArgs,De=mr[Xe.endpointName];return!(!de(Xe)&&((mt==null?void 0:mt.status)==="pending"||!Sn(Xe,Bt)&&(!oe(De)||!((wt=De==null?void 0:De.forceRefetch)!=null&&wt.call(De,{currentArg:Re,previousArg:Ie,endpointState:mt,state:Bt})))&&ot))},dispatchConditionRejection:!0}),vn=(0,$e.createAsyncThunk)(Rn+"/executeMutation",dn,{getPendingMeta:function(){var Xe;return(Xe={startedTimeStamp:Date.now()})[$e.SHOULD_AUTOBATCH]=!0,Xe}});function bn(Xe){return function(Ot){var St,at;return((at=(St=Ot==null?void 0:Ot.meta)==null?void 0:St.arg)==null?void 0:at.endpointName)===Xe}}return{queryThunk:En,mutationThunk:vn,prefetch:function(Xe,Ot,St){return function(at,wt){var Bt=function(De){return"force"in De}(St)&&St.force,mt=function(De){return"ifOlderThan"in De}(St)&&St.ifOlderThan,ot=function(De){return De===void 0&&(De=!0),Nn.endpoints[Xe].initiate(Ot,{forceRefetch:De})},Re=Nn.endpoints[Xe].select(Ot)(wt());if(Bt)at(ot());else if(mt){var Ie=Re==null?void 0:Re.fulfilledTimeStamp;if(!Ie)return void at(ot());(Number(new Date)-Number(new Date(Ie)))/1e3>=mt&&at(ot())}else at(ot(!1))}},updateQueryData:function(Xe,Ot,St){return function(at,wt){var Bt,mt,ot=Nn.endpoints[Xe].select(Ot)(wt()),Re={patches:[],inversePatches:[],undo:function(){return at(Nn.util.patchQueryData(Xe,Ot,Re.inversePatches))}};if(ot.status===t.uninitialized)return Re;if("data"in ot)if((0,Oe.isDraftable)(ot.data)){var Ie=(0,Oe.produceWithPatches)(ot.data,St),De=Ie[2];(Bt=Re.patches).push.apply(Bt,Ie[1]),(mt=Re.inversePatches).push.apply(mt,De)}else{var We=St(ot.data);Re.patches.push({op:"replace",path:[],value:We}),Re.inversePatches.push({op:"replace",path:[],value:ot.data})}return at(Nn.util.patchQueryData(Xe,Ot,Re.patches)),Re}},upsertQueryData:function(Xe,Ot,St){return function(at){var wt;return at(Nn.endpoints[Xe].initiate(Ot,((wt={subscribe:!1,forceRefetch:!0})[xe]=function(){return{data:St}},wt)))}},patchQueryData:function(Xe,Ot,St){return function(at){at(Nn.internalActions.queryResultPatched({queryCacheKey:Tn({queryArgs:Ot,endpointDefinition:mr[Xe],endpointName:Xe}),patches:St}))}},buildMatchThunkActions:function(Xe,Ot){return{matchPending:(0,Te.isAllOf)((0,Te.isPending)(Xe),bn(Ot)),matchFulfilled:(0,Te.isAllOf)((0,Te.isFulfilled)(Xe),bn(Ot)),matchRejected:(0,Te.isAllOf)((0,Te.isRejected)(Xe),bn(Ot))}}}}({baseQuery:_e,reducerPath:me,context:he,api:J,serializeQueryArgs:ut}),Je=Ce.queryThunk,jt=Ce.mutationThunk,Et=Ce.patchQueryData,Nt=Ce.updateQueryData,qt=Ce.upsertQueryData,tn=Ce.prefetch,en=Ce.buildMatchThunkActions,Ut=function(It){var In=It.reducerPath,Rn=It.queryThunk,Zn=It.mutationThunk,mr=It.context,Tn=mr.endpointDefinitions,Nn=mr.apiUid,dn=mr.extractRehydrationInfo,Sn=mr.hasRehydrationInfo,En=It.assertTagType,vn=It.config,bn=(0,ge.createAction)(In+"/resetApiState"),Xe=(0,ge.createSlice)({name:In+"/queries",initialState:Pt,reducers:{removeQueryResult:{reducer:function(ot,Re){delete ot[Re.payload.queryCacheKey]},prepare:(0,ge.prepareAutoBatched)()},queryResultPatched:function(ot,Re){var Ie=Re.payload,De=Ie.patches;bt(ot,Ie.queryCacheKey,function(We){We.data=(0,vt.applyPatches)(We.data,De.concat())})}},extraReducers:function(ot){ot.addCase(Rn.pending,function(Re,Ie){var De,We=Ie.meta,tt=Ie.meta.arg,Dt=de(tt);(tt.subscribe||Dt)&&(Re[De=tt.queryCacheKey]!=null||(Re[De]={status:t.uninitialized,endpointName:tt.endpointName})),bt(Re,tt.queryCacheKey,function(Rt){Rt.status=t.pending,Rt.requestId=Dt&&Rt.requestId?Rt.requestId:We.requestId,tt.originalArgs!==void 0&&(Rt.originalArgs=tt.originalArgs),Rt.startedTimeStamp=We.startedTimeStamp})}).addCase(Rn.fulfilled,function(Re,Ie){var De=Ie.meta,We=Ie.payload;bt(Re,De.arg.queryCacheKey,function(tt){var Dt;if(tt.requestId===De.requestId||de(De.arg)){var Rt=Tn[De.arg.endpointName].merge;if(tt.status=t.fulfilled,Rt)if(tt.data!==void 0){var Ve=De.fulfilledTimeStamp,nn=De.arg,yn=De.baseQueryMeta,hn=De.requestId,gr=(0,ge.createNextState)(tt.data,function(Xn){return Rt(Xn,We,{arg:nn.originalArgs,baseQueryMeta:yn,fulfilledTimeStamp:Ve,requestId:hn})});tt.data=gr}else tt.data=We;else tt.data=(Dt=Tn[De.arg.endpointName].structuralSharing)==null||Dt?M((0,on.isDraft)(tt.data)?(0,vt.original)(tt.data):tt.data,We):We;delete tt.error,tt.fulfilledTimeStamp=De.fulfilledTimeStamp}})}).addCase(Rn.rejected,function(Re,Ie){var De=Ie.meta,We=De.condition,tt=De.requestId,Dt=Ie.error,Rt=Ie.payload;bt(Re,De.arg.queryCacheKey,function(Ve){if(!We){if(Ve.requestId!==tt)return;Ve.status=t.rejected,Ve.error=Rt??Dt}})}).addMatcher(Sn,function(Re,Ie){for(var De=dn(Ie).queries,We=0,tt=Object.entries(De);We"u"||navigator.onLine===void 0||navigator.onLine,focused:typeof document>"u"||document.visibilityState!=="hidden",middlewareRegistered:!1},vn),reducers:{middlewareRegistered:function(ot,Re){ot.middlewareRegistered=ot.middlewareRegistered!=="conflict"&&Nn===Re.payload||"conflict"}},extraReducers:function(ot){ot.addCase(be,function(Re){Re.online=!0}).addCase(ie,function(Re){Re.online=!1}).addCase(Y,function(Re){Re.focused=!0}).addCase(ae,function(Re){Re.focused=!1}).addMatcher(Sn,function(Re){return S({},Re)})}}),mt=(0,ge.combineReducers)({queries:Xe.reducer,mutations:Ot.reducer,provided:St.reducer,subscriptions:wt.reducer,config:Bt.reducer});return{reducer:function(ot,Re){return mt(bn.match(Re)?void 0:ot,Re)},actions:_(S(S(S(S(S({},Bt.actions),Xe.actions),at.actions),wt.actions),Ot.actions),{unsubscribeMutationResult:Ot.actions.removeMutationResult,resetApiState:bn})}}({context:he,queryThunk:Je,mutationThunk:jt,reducerPath:me,assertTagType:He,config:{refetchOnFocus:ft,refetchOnReconnect:xt,refetchOnMountOrArgChange:Ht,keepUnusedDataFor:st,reducerPath:me}}),Be=Ut.reducer,yt=Ut.actions;$r(J.util,{patchQueryData:Et,updateQueryData:Nt,upsertQueryData:qt,prefetch:tn,resetApiState:yt.resetApiState}),$r(J.internalActions,yt);var Mt=function(It){var In=It.reducerPath,Rn=It.queryThunk,Zn=It.api,mr=It.context,Tn=mr.apiUid,Nn={invalidateTags:(0,cr.createAction)(In+"/invalidateTags")},dn=[Wr,pn,Hr,yr,Wn,Mo];return{middleware:function(En){var vn=!1,bn=_(S({},It),{internalState:{currentSubscriptions:{}},refetchQuery:Sn}),Xe=dn.map(function(at){return at(bn)}),Ot=function(at){var wt=at.api,Bt=at.queryThunk,mt=at.internalState,ot=wt.reducerPath+"/subscriptions",Re=null,Ie=!1,De=wt.internalActions,We=De.updateSubscriptionOptions,tt=De.unsubscribeQueryResult;return function(Dt,Rt){var Ve,nn;if(Re||(Re=JSON.parse(JSON.stringify(mt.currentSubscriptions))),wt.util.resetApiState.match(Dt))return Re=mt.currentSubscriptions={},[!0,!1];if(wt.internalActions.internal_probeSubscription.match(Dt)){var yn=Dt.payload;return[!1,!!((Ve=mt.currentSubscriptions[yn.queryCacheKey])!=null&&Ve[yn.requestId])]}var hn=function(gn,Vn){var io,fn,$n,Ur,Rr,Va,Yd,Do,fa;if(We.match(Vn)){var Ls=Vn.payload,pa=Ls.queryCacheKey,lo=Ls.requestId;return(io=gn==null?void 0:gn[pa])!=null&&io[lo]&&(gn[pa][lo]=Ls.options),!0}if(tt.match(Vn)){var co=Vn.payload;return lo=co.requestId,gn[pa=co.queryCacheKey]&&delete gn[pa][lo],!0}if(wt.internalActions.removeQueryResult.match(Vn))return delete gn[Vn.payload.queryCacheKey],!0;if(Bt.pending.match(Vn)){var uo=Vn.meta;if(lo=uo.requestId,(Yr=uo.arg).subscribe)return(Ho=($n=gn[fn=Yr.queryCacheKey])!=null?$n:gn[fn]={})[lo]=(Rr=(Ur=Yr.subscriptionOptions)!=null?Ur:Ho[lo])!=null?Rr:{},!0}if(Bt.rejected.match(Vn)){var Ho,Ao=Vn.meta,Yr=Ao.arg;if(lo=Ao.requestId,Ao.condition&&Yr.subscribe)return(Ho=(Yd=gn[Va=Yr.queryCacheKey])!=null?Yd:gn[Va]={})[lo]=(fa=(Do=Yr.subscriptionOptions)!=null?Do:Ho[lo])!=null?fa:{},!0}return!1}(mt.currentSubscriptions,Dt);if(hn){Ie||(fs(function(){var gn=JSON.parse(JSON.stringify(mt.currentSubscriptions)),Vn=(0,Vr.produceWithPatches)(Re,function(){return gn});Rt.next(wt.internalActions.subscriptionsUpdated(Vn[1])),Re=gn,Ie=!1}),Ie=!0);var gr=!!((nn=Dt.type)!=null&&nn.startsWith(ot)),Xn=Bt.rejected.match(Dt)&&Dt.meta.condition&&!!Dt.meta.arg.subscribe;return[!gr&&!Xn,!1]}return[!0,!1]}}(bn),St=function(at){var wt=at.reducerPath,Bt=at.context,mt=at.refetchQuery,ot=at.internalState,Re=at.api.internalActions.removeQueryResult;function Ie(De,We){var tt=De.getState()[wt],Dt=tt.queries,Rt=ot.currentSubscriptions;Bt.batch(function(){for(var Ve=0,nn=Object.keys(Rt);Ve{const{imageUsage:t,topMessage:n="This image is currently in use in the following features:",bottomMessage:r="If you delete this image, those features will immediately be reset."}=e;return!t||!Pu(t)?null:i.jsxs(i.Fragment,{children:[i.jsx(qe,{children:n}),i.jsxs(Mb,{sx:{paddingInlineStart:6},children:[t.isInitialImage&&i.jsx(wa,{children:"Image to Image"}),t.isCanvasImage&&i.jsx(wa,{children:"Unified Canvas"}),t.isControlNetImage&&i.jsx(wa,{children:"ControlNet"}),t.isNodesImage&&i.jsx(wa,{children:"Node Editor"})]}),i.jsx(qe,{children:r})]})},ij=f.memo(JV),ZV=e=>{const{boardToDelete:t,setBoardToDelete:n}=e,{t:r}=ye(),o=z(k=>k.config.canRestoreDeletedImagesFromBin),{currentData:s,isFetching:a}=B7((t==null?void 0:t.board_id)??oo.skipToken),c=f.useMemo(()=>fe([Ye],k=>{const j=(s??[]).map(E=>F7(k,E));return{imageUsageSummary:{isInitialImage:Pu(j,E=>E.isInitialImage),isCanvasImage:Pu(j,E=>E.isCanvasImage),isNodesImage:Pu(j,E=>E.isNodesImage),isControlNetImage:Pu(j,E=>E.isControlNetImage)}}}),[s]),[d,{isLoading:p}]=H7(),[h,{isLoading:m}]=W7(),{imageUsageSummary:v}=z(c),b=f.useCallback(()=>{t&&(d(t.board_id),n(void 0))},[t,d,n]),w=f.useCallback(()=>{t&&(h(t.board_id),n(void 0))},[t,h,n]),y=f.useCallback(()=>{n(void 0)},[n]),S=f.useRef(null),_=f.useMemo(()=>m||p||a,[m,p,a]);return t?i.jsx(Md,{isOpen:!!t,onClose:y,leastDestructiveRef:S,isCentered:!0,children:i.jsx(Da,{children:i.jsxs(Dd,{children:[i.jsxs(Ma,{fontSize:"lg",fontWeight:"bold",children:["Delete ",t.board_name]}),i.jsx(Aa,{children:i.jsxs(F,{direction:"column",gap:3,children:[a?i.jsx(km,{children:i.jsx(F,{sx:{w:"full",h:32}})}):i.jsx(ij,{imageUsage:v,topMessage:"This board contains images used in the following features:",bottomMessage:"Deleting this board and its images will reset any features currently using them."}),i.jsx(qe,{children:"Deleted boards cannot be restored."}),i.jsx(qe,{children:r(o?"gallery.deleteImageBin":"gallery.deleteImagePermanent")})]})}),i.jsx(Ra,{children:i.jsxs(F,{sx:{justifyContent:"space-between",width:"full",gap:2},children:[i.jsx(Jt,{ref:S,onClick:y,children:"Cancel"}),i.jsx(Jt,{colorScheme:"warning",isLoading:_,onClick:b,children:"Delete Board Only"}),i.jsx(Jt,{colorScheme:"error",isLoading:_,onClick:w,children:"Delete Board and Images"})]})})]})})}):null},eU=f.memo(ZV),lj=Ae((e,t)=>{const{role:n,tooltip:r="",tooltipProps:o,isChecked:s,...a}=e;return i.jsx(wn,{label:r,hasArrow:!0,...o,...o!=null&&o.placement?{placement:o.placement}:{placement:"top"},children:i.jsx(Ca,{ref:t,role:n,colorScheme:s?"accent":"base",...a})})});lj.displayName="IAIIconButton";const Le=f.memo(lj),tU="My Board",nU=()=>{const[e,{isLoading:t}]=V7(),n=f.useCallback(()=>{e(tU)},[e]);return i.jsx(Le,{icon:i.jsx(gl,{}),isLoading:t,tooltip:"Add Board","aria-label":"Add Board",onClick:n,size:"sm"})};var rC={path:i.jsxs("g",{stroke:"currentColor",strokeWidth:"1.5",children:[i.jsx("path",{strokeLinecap:"round",fill:"none",d:"M9,9a3,3,0,1,1,4,2.829,1.5,1.5,0,0,0-1,1.415V14.25"}),i.jsx("path",{fill:"currentColor",strokeLinecap:"round",d:"M12,17.25a.375.375,0,1,0,.375.375A.375.375,0,0,0,12,17.25h0"}),i.jsx("circle",{fill:"none",strokeMiterlimit:"10",cx:"12",cy:"12",r:"11.25"})]}),viewBox:"0 0 24 24"},cj=Ae((e,t)=>{const{as:n,viewBox:r,color:o="currentColor",focusable:s=!1,children:a,className:c,__css:d,...p}=e,h=Ct("chakra-icon",c),m=ia("Icon",e),v={w:"1em",h:"1em",display:"inline-block",lineHeight:"1em",flexShrink:0,color:o,...d,...m},b={ref:t,focusable:s,className:h,__css:v},w=r??rC.viewBox;if(n&&typeof n!="string")return i.jsx(je.svg,{as:n,...b,...p});const y=a??rC.path;return i.jsx(je.svg,{verticalAlign:"middle",viewBox:w,...b,...p,children:y})});cj.displayName="Icon";function Fd(e){const{viewBox:t="0 0 24 24",d:n,displayName:r,defaultProps:o={}}=e,s=f.Children.toArray(e.path),a=Ae((c,d)=>i.jsx(cj,{ref:d,viewBox:t,...o,...c,children:s.length?s:i.jsx("path",{fill:"currentColor",d:n})}));return a.displayName=r,a}var uj=Fd({displayName:"ExternalLinkIcon",path:i.jsxs("g",{fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeWidth:"2",children:[i.jsx("path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"}),i.jsx("path",{d:"M15 3h6v6"}),i.jsx("path",{d:"M10 14L21 3"})]})}),Sy=Fd({d:"M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z",displayName:"ChevronUpIcon"}),rU=Fd({displayName:"CloseIcon",d:"M.439,21.44a1.5,1.5,0,0,0,2.122,2.121L11.823,14.3a.25.25,0,0,1,.354,0l9.262,9.263a1.5,1.5,0,1,0,2.122-2.121L14.3,12.177a.25.25,0,0,1,0-.354l9.263-9.262A1.5,1.5,0,0,0,21.439.44L12.177,9.7a.25.25,0,0,1-.354,0L2.561.44A1.5,1.5,0,0,0,.439,2.561L9.7,11.823a.25.25,0,0,1,0,.354Z"}),oU=Fd({displayName:"DeleteIcon",path:i.jsx("g",{fill:"currentColor",children:i.jsx("path",{d:"M19.452 7.5H4.547a.5.5 0 00-.5.545l1.287 14.136A2 2 0 007.326 24h9.347a2 2 0 001.992-1.819L19.95 8.045a.5.5 0 00-.129-.382.5.5 0 00-.369-.163zm-9.2 13a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zm5 0a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zM22 4h-4.75a.25.25 0 01-.25-.25V2.5A2.5 2.5 0 0014.5 0h-5A2.5 2.5 0 007 2.5v1.25a.25.25 0 01-.25.25H2a1 1 0 000 2h20a1 1 0 000-2zM9 3.75V2.5a.5.5 0 01.5-.5h5a.5.5 0 01.5.5v1.25a.25.25 0 01-.25.25h-5.5A.25.25 0 019 3.75z"})})}),sU=Fd({displayName:"ChevronDownIcon",d:"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"});const aU=fe([Ye],({boards:e})=>{const{searchText:t}=e;return{searchText:t}},Ge),iU=()=>{const e=te(),{searchText:t}=z(aU),n=f.useRef(null),r=f.useCallback(c=>{e(q2(c))},[e]),o=f.useCallback(()=>{e(q2(""))},[e]),s=f.useCallback(c=>{c.key==="Escape"&&o()},[o]),a=f.useCallback(c=>{r(c.target.value)},[r]);return f.useEffect(()=>{n.current&&n.current.focus()},[]),i.jsxs(G3,{children:[i.jsx(Pd,{ref:n,placeholder:"Search Boards...",value:t,onKeyDown:s,onChange:a}),t&&t.length&&i.jsx(Eb,{children:i.jsx(Ca,{onClick:o,size:"xs",variant:"ghost","aria-label":"Clear Search",opacity:.5,icon:i.jsx(rU,{boxSize:2})})})]})},lU=f.memo(iU),cU=e=>{const{isOver:t,label:n="Drop"}=e,r=f.useRef(ui()),{colorMode:o}=Ds();return i.jsx(Ir.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.1}},exit:{opacity:0,transition:{duration:.1}},children:i.jsxs(F,{sx:{position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full"},children:[i.jsx(F,{sx:{position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full",bg:Fe("base.700","base.900")(o),opacity:.7,borderRadius:"base",alignItems:"center",justifyContent:"center",transitionProperty:"common",transitionDuration:"0.1s"}}),i.jsx(F,{sx:{position:"absolute",top:.5,insetInlineStart:.5,insetInlineEnd:.5,bottom:.5,opacity:1,borderWidth:2,borderColor:t?Fe("base.50","base.50")(o):Fe("base.200","base.300")(o),borderRadius:"lg",borderStyle:"dashed",transitionProperty:"common",transitionDuration:"0.1s",alignItems:"center",justifyContent:"center"},children:i.jsx(qe,{sx:{fontSize:"2xl",fontWeight:600,transform:t?"scale(1.1)":"scale(1)",color:t?Fe("base.50","base.50")(o):Fe("base.200","base.300")(o),transitionProperty:"common",transitionDuration:"0.1s"},children:n})})]})},r.current)},ch=f.memo(cU),uU=e=>{const{dropLabel:t,data:n,disabled:r}=e,o=f.useRef(ui()),{isOver:s,setNodeRef:a,active:c}=Q1({id:o.current,disabled:r,data:n});return i.jsx(Ee,{ref:a,position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full",pointerEvents:"none",children:i.jsx(mo,{children:Tp(n,c)&&i.jsx(ch,{isOver:s,label:t})})})},Cy=f.memo(uU),ky=({isSelected:e,isHovered:t})=>i.jsx(Ee,{className:"selection-box",sx:{position:"absolute",top:0,insetInlineEnd:0,bottom:0,insetInlineStart:0,borderRadius:"base",opacity:e?1:.7,transitionProperty:"common",transitionDuration:"0.1s",shadow:e?t?"hoverSelected.light":"selected.light":t?"hoverUnselected.light":void 0,_dark:{shadow:e?t?"hoverSelected.dark":"selected.dark":t?"hoverUnselected.dark":void 0}}}),dj=()=>i.jsx(F,{sx:{position:"absolute",insetInlineEnd:0,top:0,p:1},children:i.jsx(ml,{variant:"solid",sx:{bg:"accent.400",_dark:{bg:"accent.500"}},children:"auto"})});var Vu=globalThis&&globalThis.__assign||function(){return Vu=Object.assign||function(e){for(var t,n=1,r=arguments.length;n{const{boardName:t}=am(void 0,{selectFromResult:({data:n})=>{const r=n==null?void 0:n.find(s=>s.board_id===e);return{boardName:(r==null?void 0:r.board_name)||"Uncategorized"}}});return t},dU=({board:e,setBoardToDelete:t})=>{const n=f.useCallback(()=>{t&&t(e)},[e,t]);return i.jsxs(i.Fragment,{children:[e.image_count>0&&i.jsx(i.Fragment,{}),i.jsx(Pr,{sx:{color:"error.600",_dark:{color:"error.300"}},icon:i.jsx(us,{}),onClick:n,children:"Delete Board"})]})},fU=f.memo(dU),pU=()=>i.jsx(i.Fragment,{}),hU=f.memo(pU),_y=f.memo(({board:e,board_id:t,setBoardToDelete:n,children:r})=>{const o=te(),s=f.useMemo(()=>fe(Ye,({gallery:h})=>({isAutoAdd:h.autoAddBoardId===t})),[t]),{isAutoAdd:a}=z(s),c=Lm(t),d=f.useCallback(()=>{o(N_(t))},[t,o]),p=f.useCallback(h=>{h.preventDefault()},[]);return i.jsx(fj,{menuProps:{size:"sm",isLazy:!0},menuButtonProps:{bg:"transparent",_hover:{bg:"transparent"}},renderMenu:()=>i.jsx(Fc,{sx:{visibility:"visible !important"},motionProps:um,onContextMenu:p,children:i.jsxs(od,{title:c,children:[i.jsx(Pr,{icon:i.jsx(gl,{}),isDisabled:a,onClick:d,children:"Auto-add to this Board"}),!e&&i.jsx(hU,{}),e&&i.jsx(fU,{board:e,setBoardToDelete:n})]})}),children:r})});_y.displayName="HoverableBoard";const pj=f.memo(({board:e,isSelected:t,setBoardToDelete:n})=>{const r=te(),o=f.useMemo(()=>fe(Ye,({gallery:E})=>({isSelectedForAutoAdd:e.board_id===E.autoAddBoardId}),Ge),[e.board_id]),{isSelectedForAutoAdd:s}=z(o),[a,c]=f.useState(!1),d=f.useCallback(()=>{c(!0)},[]),p=f.useCallback(()=>{c(!1)},[]),{currentData:h}=os(e.cover_image_name??oo.skipToken),{board_name:m,board_id:v}=e,[b,w]=f.useState(m),y=f.useCallback(()=>{r($_(v))},[v,r]),[S,{isLoading:_}]=U7(),k=f.useMemo(()=>({id:v,actionType:"MOVE_BOARD",context:{boardId:v}}),[v]),j=f.useCallback(async E=>{if(!E.trim()){w(m);return}if(E!==m)try{const{board_name:O}=await S({board_id:v,changes:{board_name:E}}).unwrap();w(O)}catch{w(m)}},[v,m,S]),I=f.useCallback(E=>{w(E)},[]);return i.jsx(Ee,{sx:{w:"full",h:"full",touchAction:"none",userSelect:"none"},children:i.jsx(F,{onMouseOver:d,onMouseOut:p,sx:{position:"relative",justifyContent:"center",alignItems:"center",aspectRatio:"1/1",w:"full",h:"full"},children:i.jsx(_y,{board:e,board_id:v,setBoardToDelete:n,children:E=>i.jsxs(F,{ref:E,onClick:y,sx:{w:"full",h:"full",position:"relative",justifyContent:"center",alignItems:"center",borderRadius:"base",cursor:"pointer",bg:"base.200",_dark:{bg:"base.800"}},children:[h!=null&&h.thumbnail_url?i.jsx(Nc,{src:h==null?void 0:h.thumbnail_url,draggable:!1,sx:{objectFit:"cover",w:"full",h:"full",maxH:"full",borderRadius:"base",borderBottomRadius:"lg"}}):i.jsx(F,{sx:{w:"full",h:"full",justifyContent:"center",alignItems:"center"},children:i.jsx(no,{boxSize:12,as:OW,sx:{mt:-6,opacity:.7,color:"base.500",_dark:{color:"base.500"}}})}),s&&i.jsx(dj,{}),i.jsx(ky,{isSelected:t,isHovered:a}),i.jsx(F,{sx:{position:"absolute",bottom:0,left:0,p:1,justifyContent:"center",alignItems:"center",w:"full",maxW:"full",borderBottomRadius:"base",bg:t?"accent.400":"base.500",color:t?"base.50":"base.100",_dark:{bg:t?"accent.500":"base.600",color:t?"base.50":"base.100"},lineHeight:"short",fontSize:"xs"},children:i.jsxs(s3,{value:b,isDisabled:_,submitOnBlur:!0,onChange:I,onSubmit:j,sx:{w:"full"},children:[i.jsx(n3,{sx:{p:0,fontWeight:t?700:500,textAlign:"center",overflow:"hidden",textOverflow:"ellipsis"},noOfLines:1}),i.jsx(t3,{sx:{p:0,_focusVisible:{p:0,textAlign:"center",boxShadow:"none"}}})]})}),i.jsx(Cy,{data:k,dropLabel:i.jsx(qe,{fontSize:"md",children:"Move"})})]})})})})});pj.displayName="HoverableBoard";const mU=fe(Ye,({gallery:e})=>{const{autoAddBoardId:t}=e;return{autoAddBoardId:t}},Ge),hj=f.memo(({isSelected:e})=>{const t=te(),{autoAddBoardId:n}=z(mU),r=Lm(void 0),o=f.useCallback(()=>{t($_(void 0))},[t]),[s,a]=f.useState(!1),c=f.useCallback(()=>{a(!0)},[]),d=f.useCallback(()=>{a(!1)},[]),p=f.useMemo(()=>({id:"no_board",actionType:"MOVE_BOARD",context:{boardId:void 0}}),[]);return i.jsx(Ee,{sx:{w:"full",h:"full",touchAction:"none",userSelect:"none"},children:i.jsx(F,{onMouseOver:c,onMouseOut:d,sx:{position:"relative",justifyContent:"center",alignItems:"center",aspectRatio:"1/1",borderRadius:"base",w:"full",h:"full"},children:i.jsx(_y,{children:h=>i.jsxs(F,{ref:h,onClick:o,sx:{w:"full",h:"full",position:"relative",justifyContent:"center",alignItems:"center",borderRadius:"base",cursor:"pointer",bg:"base.200",_dark:{bg:"base.800"}},children:[i.jsx(F,{sx:{w:"full",h:"full",justifyContent:"center",alignItems:"center"},children:i.jsx(Nc,{src:z_,alt:"invoke-ai-logo",sx:{opacity:.4,filter:"grayscale(1)",mt:-6,w:16,h:16,minW:16,minH:16,userSelect:"none"}})}),!n&&i.jsx(dj,{}),i.jsx(F,{sx:{position:"absolute",bottom:0,left:0,p:1,justifyContent:"center",alignItems:"center",w:"full",maxW:"full",borderBottomRadius:"base",bg:e?"accent.400":"base.500",color:e?"base.50":"base.100",_dark:{bg:e?"accent.500":"base.600",color:e?"base.50":"base.100"},lineHeight:"short",fontSize:"xs",fontWeight:e?700:500},children:r}),i.jsx(ky,{isSelected:e,isHovered:s}),i.jsx(Cy,{data:p,dropLabel:i.jsx(qe,{fontSize:"md",children:"Move"})})]})})})})});hj.displayName="HoverableBoard";const gU=fe([Ye],({boards:e,gallery:t})=>{const{searchText:n}=e,{selectedBoardId:r}=t;return{selectedBoardId:r,searchText:n}},Ge),vU=e=>{const{isOpen:t}=e,{selectedBoardId:n,searchText:r}=z(gU),{data:o}=am(),s=r?o==null?void 0:o.filter(d=>d.board_name.toLowerCase().includes(r.toLowerCase())):o,[a,c]=f.useState();return i.jsxs(i.Fragment,{children:[i.jsx(pm,{in:t,animateOpacity:!0,children:i.jsxs(F,{layerStyle:"first",sx:{flexDir:"column",gap:2,p:2,mt:2,borderRadius:"base"},children:[i.jsxs(F,{sx:{gap:2,alignItems:"center"},children:[i.jsx(lU,{}),i.jsx(nU,{})]}),i.jsx(oj,{defer:!0,style:{height:"100%",width:"100%"},options:{scrollbars:{visibility:"auto",autoHide:"move",autoHideDelay:1300,theme:"os-theme-dark"}},children:i.jsxs(sl,{className:"list-container",sx:{gridTemplateColumns:"repeat(auto-fill, minmax(108px, 1fr));",maxH:346},children:[i.jsx(Yv,{sx:{p:1.5},children:i.jsx(hj,{isSelected:n===void 0})}),s&&s.map(d=>i.jsx(Yv,{sx:{p:1.5},children:i.jsx(pj,{board:d,isSelected:n===d.board_id,setBoardToDelete:c})},d.board_id))]})})]})}),i.jsx(eU,{boardToDelete:a,setBoardToDelete:c})]})},bU=f.memo(vU),yU=fe([Ye],e=>{const{selectedBoardId:t}=e.gallery;return{selectedBoardId:t}},Ge),xU=e=>{const{isOpen:t,onToggle:n}=e,{selectedBoardId:r}=z(yU),o=Lm(r),s=f.useMemo(()=>o.length>20?`${o.substring(0,20)}...`:o,[o]);return i.jsxs(F,{as:bc,onClick:n,size:"sm",sx:{position:"relative",gap:2,w:"full",justifyContent:"space-between",alignItems:"center",px:2},children:[i.jsx(qe,{noOfLines:1,sx:{fontWeight:600,w:"100%",textAlign:"center",color:"base.800",_dark:{color:"base.200"}},children:s}),i.jsx(Sy,{sx:{transform:t?"rotate(0deg)":"rotate(180deg)",transitionProperty:"common",transitionDuration:"normal"}})]})},wU=f.memo(xU);function mj(e){return et({tag:"svg",attr:{fill:"currentColor",viewBox:"0 0 16 16"},child:[{tag:"path",attr:{d:"M9.828.722a.5.5 0 0 1 .354.146l4.95 4.95a.5.5 0 0 1 0 .707c-.48.48-1.072.588-1.503.588-.177 0-.335-.018-.46-.039l-3.134 3.134a5.927 5.927 0 0 1 .16 1.013c.046.702-.032 1.687-.72 2.375a.5.5 0 0 1-.707 0l-2.829-2.828-3.182 3.182c-.195.195-1.219.902-1.414.707-.195-.195.512-1.22.707-1.414l3.182-3.182-2.828-2.829a.5.5 0 0 1 0-.707c.688-.688 1.673-.767 2.375-.72a5.922 5.922 0 0 1 1.013.16l3.134-3.133a2.772 2.772 0 0 1-.04-.461c0-.43.108-1.022.589-1.503a.5.5 0 0 1 .353-.146z"}}]})(e)}function gj(e){return et({tag:"svg",attr:{fill:"currentColor",viewBox:"0 0 16 16"},child:[{tag:"path",attr:{d:"M9.828.722a.5.5 0 0 1 .354.146l4.95 4.95a.5.5 0 0 1 0 .707c-.48.48-1.072.588-1.503.588-.177 0-.335-.018-.46-.039l-3.134 3.134a5.927 5.927 0 0 1 .16 1.013c.046.702-.032 1.687-.72 2.375a.5.5 0 0 1-.707 0l-2.829-2.828-3.182 3.182c-.195.195-1.219.902-1.414.707-.195-.195.512-1.22.707-1.414l3.182-3.182-2.828-2.829a.5.5 0 0 1 0-.707c.688-.688 1.673-.767 2.375-.72a5.922 5.922 0 0 1 1.013.16l3.134-3.133a2.772 2.772 0 0 1-.04-.461c0-.43.108-1.022.589-1.503a.5.5 0 0 1 .353-.146zm.122 2.112v-.002.002zm0-.002v.002a.5.5 0 0 1-.122.51L6.293 6.878a.5.5 0 0 1-.511.12H5.78l-.014-.004a4.507 4.507 0 0 0-.288-.076 4.922 4.922 0 0 0-.765-.116c-.422-.028-.836.008-1.175.15l5.51 5.509c.141-.34.177-.753.149-1.175a4.924 4.924 0 0 0-.192-1.054l-.004-.013v-.001a.5.5 0 0 1 .12-.512l3.536-3.535a.5.5 0 0 1 .532-.115l.096.022c.087.017.208.034.344.034.114 0 .23-.011.343-.04L9.927 2.028c-.029.113-.04.23-.04.343a1.779 1.779 0 0 0 .062.46z"}}]})(e)}const SU=fe([Ye],e=>{const{shouldPinGallery:t}=e.ui;return{shouldPinGallery:t}},Ge),CU=()=>{const e=te(),{t}=ye(),{shouldPinGallery:n}=z(SU),r=()=>{e(L_()),e(ko())};return i.jsx(Le,{size:"sm","aria-label":t("gallery.pinGallery"),tooltip:`${t("gallery.pinGallery")} (Shift+G)`,onClick:r,icon:n?i.jsx(mj,{}):i.jsx(gj,{})})},kU=e=>{const{triggerComponent:t,children:n,hasArrow:r=!0,isLazy:o=!0,...s}=e;return i.jsxs(Xb,{isLazy:o,...s,children:[i.jsx(Kb,{children:t}),i.jsxs(Yb,{shadow:"dark-lg",children:[r&&i.jsx(P6,{}),n]})]})},vl=f.memo(kU),_U=e=>{const{label:t,...n}=e,{colorMode:r}=Ds();return i.jsx(X5,{colorScheme:"accent",...n,children:i.jsx(qe,{sx:{fontSize:"sm",color:Fe("base.800","base.200")(r)},children:t})})},Gn=f.memo(_U);function PU(e){return et({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"M12 16c1.671 0 3-1.331 3-3s-1.329-3-3-3-3 1.331-3 3 1.329 3 3 3z"}},{tag:"path",attr:{d:"M20.817 11.186a8.94 8.94 0 0 0-1.355-3.219 9.053 9.053 0 0 0-2.43-2.43 8.95 8.95 0 0 0-3.219-1.355 9.028 9.028 0 0 0-1.838-.18V2L8 5l3.975 3V6.002c.484-.002.968.044 1.435.14a6.961 6.961 0 0 1 2.502 1.053 7.005 7.005 0 0 1 1.892 1.892A6.967 6.967 0 0 1 19 13a7.032 7.032 0 0 1-.55 2.725 7.11 7.11 0 0 1-.644 1.188 7.2 7.2 0 0 1-.858 1.039 7.028 7.028 0 0 1-3.536 1.907 7.13 7.13 0 0 1-2.822 0 6.961 6.961 0 0 1-2.503-1.054 7.002 7.002 0 0 1-1.89-1.89A6.996 6.996 0 0 1 5 13H3a9.02 9.02 0 0 0 1.539 5.034 9.096 9.096 0 0 0 2.428 2.428A8.95 8.95 0 0 0 12 22a9.09 9.09 0 0 0 1.814-.183 9.014 9.014 0 0 0 3.218-1.355 8.886 8.886 0 0 0 1.331-1.099 9.228 9.228 0 0 0 1.1-1.332A8.952 8.952 0 0 0 21 13a9.09 9.09 0 0 0-.183-1.814z"}}]})(e)}const jU=e=>{const[t,n]=f.useState(!1),{label:r,value:o,min:s=1,max:a=100,step:c=1,onChange:d,tooltipSuffix:p="",withSliderMarks:h=!1,withInput:m=!1,isInteger:v=!1,inputWidth:b=16,withReset:w=!1,hideTooltip:y=!1,isCompact:S=!1,isDisabled:_=!1,sliderMarks:k,handleReset:j,sliderFormControlProps:I,sliderFormLabelProps:E,sliderMarkProps:O,sliderTrackProps:R,sliderThumbProps:M,sliderNumberInputProps:A,sliderNumberInputFieldProps:T,sliderNumberInputStepperProps:$,sliderTooltipProps:Q,sliderIAIIconButtonProps:B,...V}=e,q=te(),{t:G}=ye(),[D,L]=f.useState(String(o));f.useEffect(()=>{L(o)},[o]);const W=f.useMemo(()=>A!=null&&A.min?A.min:s,[s,A==null?void 0:A.min]),Y=f.useMemo(()=>A!=null&&A.max?A.max:a,[a,A==null?void 0:A.max]),ae=f.useCallback(re=>{d(re)},[d]),be=f.useCallback(re=>{re.target.value===""&&(re.target.value=String(W));const oe=Es(v?Math.floor(Number(re.target.value)):Number(D),W,Y),pe=ju(oe,c);d(pe),L(pe)},[v,D,W,Y,d,c]),ie=f.useCallback(re=>{L(re)},[]),X=f.useCallback(()=>{j&&j()},[j]),K=f.useCallback(re=>{re.target instanceof HTMLDivElement&&re.target.focus()},[]),U=f.useCallback(re=>{re.shiftKey&&q(jo(!0))},[q]),se=f.useCallback(re=>{re.shiftKey||q(jo(!1))},[q]);return i.jsxs(go,{onClick:K,sx:S?{display:"flex",flexDirection:"row",alignItems:"center",columnGap:4,margin:0,padding:0}:{},isDisabled:_,...I,children:[r&&i.jsx(Lo,{sx:m?{mb:-1.5}:{},...E,children:r}),i.jsxs(di,{w:"100%",gap:2,alignItems:"center",children:[i.jsxs(V6,{"aria-label":r,value:o,min:s,max:a,step:c,onChange:ae,onMouseEnter:()=>n(!0),onMouseLeave:()=>n(!1),focusThumbOnChange:!1,isDisabled:_,...V,children:[h&&!k&&i.jsxs(i.Fragment,{children:[i.jsx(Gl,{value:s,sx:{insetInlineStart:"0 !important",insetInlineEnd:"unset !important"},...O,children:s}),i.jsx(Gl,{value:a,sx:{insetInlineStart:"unset !important",insetInlineEnd:"0 !important"},...O,children:a})]}),h&&k&&i.jsx(i.Fragment,{children:k.map((re,oe)=>oe===0?i.jsx(Gl,{value:re,sx:{insetInlineStart:"0 !important",insetInlineEnd:"unset !important"},...O,children:re},re):oe===k.length-1?i.jsx(Gl,{value:re,sx:{insetInlineStart:"unset !important",insetInlineEnd:"0 !important"},...O,children:re},re):i.jsx(Gl,{value:re,sx:{transform:"translateX(-50%)"},...O,children:re},re))}),i.jsx(G6,{...R,children:i.jsx(q6,{})}),i.jsx(wn,{hasArrow:!0,placement:"top",isOpen:t,label:`${o}${p}`,hidden:y,...Q,children:i.jsx(U6,{...M,zIndex:0})})]}),m&&i.jsxs(ym,{min:W,max:Y,step:c,value:D,onChange:ie,onBlur:be,focusInputOnChange:!1,...A,children:[i.jsx(wm,{onKeyDown:U,onKeyUp:se,minWidth:b,...T}),i.jsxs(xm,{...$,children:[i.jsx(Cm,{onClick:()=>d(Number(D))}),i.jsx(Sm,{onClick:()=>d(Number(D))})]})]}),w&&i.jsx(Le,{size:"sm","aria-label":G("accessibility.reset"),tooltip:G("accessibility.reset"),icon:i.jsx(PU,{}),isDisabled:_,onClick:X,...B})]})]})},_t=f.memo(jU);function IU(e){const t=f.createContext(null);return[({children:o,value:s})=>H.createElement(t.Provider,{value:s},o),()=>{const o=f.useContext(t);if(o===null)throw new Error(e);return o}]}function vj(e){return Array.isArray(e)?e:[e]}const EU=()=>{};function OU(e,t={active:!0}){return typeof e!="function"||!t.active?t.onKeyDown||EU:n=>{var r;n.key==="Escape"&&(e(n),(r=t.onTrigger)==null||r.call(t))}}function bj({data:e}){const t=[],n=[],r=e.reduce((o,s,a)=>(s.group?o[s.group]?o[s.group].push(a):o[s.group]=[a]:n.push(a),o),{});return Object.keys(r).forEach(o=>{t.push(...r[o].map(s=>e[s]))}),t.push(...n.map(o=>e[o])),t}function yj(e){return Array.isArray(e)||e===null?!1:typeof e=="object"?e.type!==H.Fragment:!1}function xj(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e))for(t=0;tr===t[o]).indexOf(!1)>=0)&&(n.current={v:e(),prevDeps:[...t]}),n.current.v}const DU=G7({key:"mantine",prepend:!0});function AU(){return R5()||DU}var TU=Object.defineProperty,oC=Object.getOwnPropertySymbols,NU=Object.prototype.hasOwnProperty,$U=Object.prototype.propertyIsEnumerable,sC=(e,t,n)=>t in e?TU(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,zU=(e,t)=>{for(var n in t||(t={}))NU.call(t,n)&&sC(e,n,t[n]);if(oC)for(var n of oC(t))$U.call(t,n)&&sC(e,n,t[n]);return e};const tv="ref";function LU(e){let t;if(e.length!==1)return{args:e,ref:t};const[n]=e;if(!(n instanceof Object))return{args:e,ref:t};if(!(tv in n))return{args:e,ref:t};t=n[tv];const r=zU({},n);return delete r[tv],{args:[r],ref:t}}const{cssFactory:BU}=(()=>{function e(n,r,o){const s=[],a=X7(n,s,o);return s.length<2?o:a+r(s)}function t(n){const{cache:r}=n,o=(...a)=>{const{ref:c,args:d}=LU(a),p=q7(d,r.registered);return K7(r,p,!1),`${r.key}-${p.name}${c===void 0?"":` ${c}`}`};return{css:o,cx:(...a)=>e(r.registered,o,wj(a))}}return{cssFactory:t}})();function Sj(){const e=AU();return MU(()=>BU({cache:e}),[e])}function FU({cx:e,classes:t,context:n,classNames:r,name:o,cache:s}){const a=n.reduce((c,d)=>(Object.keys(d.classNames).forEach(p=>{typeof c[p]!="string"?c[p]=`${d.classNames[p]}`:c[p]=`${c[p]} ${d.classNames[p]}`}),c),{});return Object.keys(t).reduce((c,d)=>(c[d]=e(t[d],a[d],r!=null&&r[d],Array.isArray(o)?o.filter(Boolean).map(p=>`${(s==null?void 0:s.key)||"mantine"}-${p}-${d}`).join(" "):o?`${(s==null?void 0:s.key)||"mantine"}-${o}-${d}`:null),c),{})}var HU=Object.defineProperty,aC=Object.getOwnPropertySymbols,WU=Object.prototype.hasOwnProperty,VU=Object.prototype.propertyIsEnumerable,iC=(e,t,n)=>t in e?HU(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,nv=(e,t)=>{for(var n in t||(t={}))WU.call(t,n)&&iC(e,n,t[n]);if(aC)for(var n of aC(t))VU.call(t,n)&&iC(e,n,t[n]);return e};function x1(e,t){return t&&Object.keys(t).forEach(n=>{e[n]?e[n]=nv(nv({},e[n]),t[n]):e[n]=nv({},t[n])}),e}function lC(e,t,n,r){const o=s=>typeof s=="function"?s(t,n||{},r):s||{};return Array.isArray(e)?e.map(s=>o(s.styles)).reduce((s,a)=>x1(s,a),{}):o(e)}function UU({ctx:e,theme:t,params:n,variant:r,size:o}){return e.reduce((s,a)=>(a.variants&&r in a.variants&&x1(s,a.variants[r](t,n,{variant:r,size:o})),a.sizes&&o in a.sizes&&x1(s,a.sizes[o](t,n,{variant:r,size:o})),s),{})}function ao(e){const t=typeof e=="function"?e:()=>e;function n(r,o){const s=Fa(),a=YD(o==null?void 0:o.name),c=R5(),d={variant:o==null?void 0:o.variant,size:o==null?void 0:o.size},{css:p,cx:h}=Sj(),m=t(s,r,d),v=lC(o==null?void 0:o.styles,s,r,d),b=lC(a,s,r,d),w=UU({ctx:a,theme:s,params:r,variant:o==null?void 0:o.variant,size:o==null?void 0:o.size}),y=Object.fromEntries(Object.keys(m).map(S=>{const _=h({[p(m[S])]:!(o!=null&&o.unstyled)},p(w[S]),p(b[S]),p(v[S]));return[S,_]}));return{classes:FU({cx:h,classes:y,context:a,classNames:o==null?void 0:o.classNames,name:o==null?void 0:o.name,cache:c}),cx:h,theme:s}}return n}function cC(e){return`___ref-${e||""}`}var GU=Object.defineProperty,qU=Object.defineProperties,KU=Object.getOwnPropertyDescriptors,uC=Object.getOwnPropertySymbols,XU=Object.prototype.hasOwnProperty,YU=Object.prototype.propertyIsEnumerable,dC=(e,t,n)=>t in e?GU(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,vu=(e,t)=>{for(var n in t||(t={}))XU.call(t,n)&&dC(e,n,t[n]);if(uC)for(var n of uC(t))YU.call(t,n)&&dC(e,n,t[n]);return e},bu=(e,t)=>qU(e,KU(t));const yu={in:{opacity:1,transform:"scale(1)"},out:{opacity:0,transform:`scale(.9) translateY(${Ue(10)})`},transitionProperty:"transform, opacity"},op={fade:{in:{opacity:1},out:{opacity:0},transitionProperty:"opacity"},scale:{in:{opacity:1,transform:"scale(1)"},out:{opacity:0,transform:"scale(0)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"scale-y":{in:{opacity:1,transform:"scaleY(1)"},out:{opacity:0,transform:"scaleY(0)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"scale-x":{in:{opacity:1,transform:"scaleX(1)"},out:{opacity:0,transform:"scaleX(0)"},common:{transformOrigin:"left"},transitionProperty:"transform, opacity"},"skew-up":{in:{opacity:1,transform:"translateY(0) skew(0deg, 0deg)"},out:{opacity:0,transform:`translateY(-${Ue(20)}) skew(-10deg, -5deg)`},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"skew-down":{in:{opacity:1,transform:"translateY(0) skew(0deg, 0deg)"},out:{opacity:0,transform:`translateY(${Ue(20)}) skew(-10deg, -5deg)`},common:{transformOrigin:"bottom"},transitionProperty:"transform, opacity"},"rotate-left":{in:{opacity:1,transform:"translateY(0) rotate(0deg)"},out:{opacity:0,transform:`translateY(${Ue(20)}) rotate(-5deg)`},common:{transformOrigin:"bottom"},transitionProperty:"transform, opacity"},"rotate-right":{in:{opacity:1,transform:"translateY(0) rotate(0deg)"},out:{opacity:0,transform:`translateY(${Ue(20)}) rotate(5deg)`},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"slide-down":{in:{opacity:1,transform:"translateY(0)"},out:{opacity:0,transform:"translateY(-100%)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"slide-up":{in:{opacity:1,transform:"translateY(0)"},out:{opacity:0,transform:"translateY(100%)"},common:{transformOrigin:"bottom"},transitionProperty:"transform, opacity"},"slide-left":{in:{opacity:1,transform:"translateX(0)"},out:{opacity:0,transform:"translateX(100%)"},common:{transformOrigin:"left"},transitionProperty:"transform, opacity"},"slide-right":{in:{opacity:1,transform:"translateX(0)"},out:{opacity:0,transform:"translateX(-100%)"},common:{transformOrigin:"right"},transitionProperty:"transform, opacity"},pop:bu(vu({},yu),{common:{transformOrigin:"center center"}}),"pop-bottom-left":bu(vu({},yu),{common:{transformOrigin:"bottom left"}}),"pop-bottom-right":bu(vu({},yu),{common:{transformOrigin:"bottom right"}}),"pop-top-left":bu(vu({},yu),{common:{transformOrigin:"top left"}}),"pop-top-right":bu(vu({},yu),{common:{transformOrigin:"top right"}})},fC=["mousedown","touchstart"];function QU(e,t,n){const r=f.useRef();return f.useEffect(()=>{const o=s=>{const{target:a}=s??{};if(Array.isArray(n)){const c=(a==null?void 0:a.hasAttribute("data-ignore-outside-clicks"))||!document.body.contains(a)&&a.tagName!=="HTML";n.every(p=>!!p&&!s.composedPath().includes(p))&&!c&&e()}else r.current&&!r.current.contains(a)&&e()};return(t||fC).forEach(s=>document.addEventListener(s,o)),()=>{(t||fC).forEach(s=>document.removeEventListener(s,o))}},[r,e,n]),r}function JU(e,t){try{return e.addEventListener("change",t),()=>e.removeEventListener("change",t)}catch{return e.addListener(t),()=>e.removeListener(t)}}function ZU(e,t){return typeof t=="boolean"?t:typeof window<"u"&&"matchMedia"in window?window.matchMedia(e).matches:!1}function eG(e,t,{getInitialValueInEffect:n}={getInitialValueInEffect:!0}){const[r,o]=f.useState(n?t:ZU(e,t)),s=f.useRef();return f.useEffect(()=>{if("matchMedia"in window)return s.current=window.matchMedia(e),o(s.current.matches),JU(s.current,a=>o(a.matches))},[e]),r}const Cj=typeof document<"u"?f.useLayoutEffect:f.useEffect;function Ps(e,t){const n=f.useRef(!1);f.useEffect(()=>()=>{n.current=!1},[]),f.useEffect(()=>{if(n.current)return e();n.current=!0},t)}function tG({opened:e,shouldReturnFocus:t=!0}){const n=f.useRef(),r=()=>{var o;n.current&&"focus"in n.current&&typeof n.current.focus=="function"&&((o=n.current)==null||o.focus({preventScroll:!0}))};return Ps(()=>{let o=-1;const s=a=>{a.key==="Tab"&&window.clearTimeout(o)};return document.addEventListener("keydown",s),e?n.current=document.activeElement:t&&(o=window.setTimeout(r,10)),()=>{window.clearTimeout(o),document.removeEventListener("keydown",s)}},[e,t]),r}const nG=/input|select|textarea|button|object/,kj="a, input, select, textarea, button, object, [tabindex]";function rG(e){return e.style.display==="none"}function oG(e){if(e.getAttribute("aria-hidden")||e.getAttribute("hidden")||e.getAttribute("type")==="hidden")return!1;let n=e;for(;n&&!(n===document.body||n.nodeType===11);){if(rG(n))return!1;n=n.parentNode}return!0}function _j(e){let t=e.getAttribute("tabindex");return t===null&&(t=void 0),parseInt(t,10)}function w1(e){const t=e.nodeName.toLowerCase(),n=!Number.isNaN(_j(e));return(nG.test(t)&&!e.disabled||e instanceof HTMLAnchorElement&&e.href||n)&&oG(e)}function Pj(e){const t=_j(e);return(Number.isNaN(t)||t>=0)&&w1(e)}function sG(e){return Array.from(e.querySelectorAll(kj)).filter(Pj)}function aG(e,t){const n=sG(e);if(!n.length){t.preventDefault();return}const r=n[t.shiftKey?0:n.length-1],o=e.getRootNode();if(!(r===o.activeElement||e===o.activeElement))return;t.preventDefault();const a=n[t.shiftKey?n.length-1:0];a&&a.focus()}function jy(){return`mantine-${Math.random().toString(36).slice(2,11)}`}function iG(e,t="body > :not(script)"){const n=jy(),r=Array.from(document.querySelectorAll(t)).map(o=>{var s;if((s=o==null?void 0:o.shadowRoot)!=null&&s.contains(e)||o.contains(e))return;const a=o.getAttribute("aria-hidden"),c=o.getAttribute("data-hidden"),d=o.getAttribute("data-focus-id");return o.setAttribute("data-focus-id",n),a===null||a==="false"?o.setAttribute("aria-hidden","true"):!c&&!d&&o.setAttribute("data-hidden",a),{node:o,ariaHidden:c||null}});return()=>{r.forEach(o=>{!o||n!==o.node.getAttribute("data-focus-id")||(o.ariaHidden===null?o.node.removeAttribute("aria-hidden"):o.node.setAttribute("aria-hidden",o.ariaHidden),o.node.removeAttribute("data-focus-id"),o.node.removeAttribute("data-hidden"))})}}function lG(e=!0){const t=f.useRef(),n=f.useRef(null),r=s=>{let a=s.querySelector("[data-autofocus]");if(!a){const c=Array.from(s.querySelectorAll(kj));a=c.find(Pj)||c.find(w1)||null,!a&&w1(s)&&(a=s)}a&&a.focus({preventScroll:!0})},o=f.useCallback(s=>{if(e){if(s===null){n.current&&(n.current(),n.current=null);return}n.current=iG(s),t.current!==s&&(s?(setTimeout(()=>{s.getRootNode()&&r(s)}),t.current=s):t.current=null)}},[e]);return f.useEffect(()=>{if(!e)return;t.current&&setTimeout(()=>r(t.current));const s=a=>{a.key==="Tab"&&t.current&&aG(t.current,a)};return document.addEventListener("keydown",s),()=>{document.removeEventListener("keydown",s),n.current&&n.current()}},[e]),o}const cG=H["useId".toString()]||(()=>{});function uG(){const e=cG();return e?`mantine-${e.replace(/:/g,"")}`:""}function Iy(e){const t=uG(),[n,r]=f.useState(t);return Cj(()=>{r(jy())},[]),typeof e=="string"?e:typeof window>"u"?t:n}function pC(e,t,n){f.useEffect(()=>(window.addEventListener(e,t,n),()=>window.removeEventListener(e,t,n)),[e,t])}function jj(e,t){typeof e=="function"?e(t):typeof e=="object"&&e!==null&&"current"in e&&(e.current=t)}function dG(...e){return t=>{e.forEach(n=>jj(n,t))}}function Hd(...e){return f.useCallback(dG(...e),e)}function dd({value:e,defaultValue:t,finalValue:n,onChange:r=()=>{}}){const[o,s]=f.useState(t!==void 0?t:n),a=c=>{s(c),r==null||r(c)};return e!==void 0?[e,r,!0]:[o,a,!1]}function Ij(e,t){return eG("(prefers-reduced-motion: reduce)",e,t)}const fG=e=>e<.5?2*e*e:-1+(4-2*e)*e,pG=({axis:e,target:t,parent:n,alignment:r,offset:o,isList:s})=>{if(!t||!n&&typeof document>"u")return 0;const a=!!n,d=(n||document.body).getBoundingClientRect(),p=t.getBoundingClientRect(),h=m=>p[m]-d[m];if(e==="y"){const m=h("top");if(m===0)return 0;if(r==="start"){const b=m-o;return b<=p.height*(s?0:1)||!s?b:0}const v=a?d.height:window.innerHeight;if(r==="end"){const b=m+o-v+p.height;return b>=-p.height*(s?0:1)||!s?b:0}return r==="center"?m-v/2+p.height/2:0}if(e==="x"){const m=h("left");if(m===0)return 0;if(r==="start"){const b=m-o;return b<=p.width||!s?b:0}const v=a?d.width:window.innerWidth;if(r==="end"){const b=m+o-v+p.width;return b>=-p.width||!s?b:0}return r==="center"?m-v/2+p.width/2:0}return 0},hG=({axis:e,parent:t})=>{if(!t&&typeof document>"u")return 0;const n=e==="y"?"scrollTop":"scrollLeft";if(t)return t[n];const{body:r,documentElement:o}=document;return r[n]+o[n]},mG=({axis:e,parent:t,distance:n})=>{if(!t&&typeof document>"u")return;const r=e==="y"?"scrollTop":"scrollLeft";if(t)t[r]=n;else{const{body:o,documentElement:s}=document;o[r]=n,s[r]=n}};function Ej({duration:e=1250,axis:t="y",onScrollFinish:n,easing:r=fG,offset:o=0,cancelable:s=!0,isList:a=!1}={}){const c=f.useRef(0),d=f.useRef(0),p=f.useRef(!1),h=f.useRef(null),m=f.useRef(null),v=Ij(),b=()=>{c.current&&cancelAnimationFrame(c.current)},w=f.useCallback(({alignment:S="start"}={})=>{var _;p.current=!1,c.current&&b();const k=(_=hG({parent:h.current,axis:t}))!=null?_:0,j=pG({parent:h.current,target:m.current,axis:t,alignment:S,offset:o,isList:a})-(h.current?0:k);function I(){d.current===0&&(d.current=performance.now());const O=performance.now()-d.current,R=v||e===0?1:O/e,M=k+j*r(R);mG({parent:h.current,axis:t,distance:M}),!p.current&&R<1?c.current=requestAnimationFrame(I):(typeof n=="function"&&n(),d.current=0,c.current=0,b())}I()},[t,e,r,a,o,n,v]),y=()=>{s&&(p.current=!0)};return pC("wheel",y,{passive:!0}),pC("touchmove",y,{passive:!0}),f.useEffect(()=>b,[]),{scrollableRef:h,targetRef:m,scrollIntoView:w,cancel:b}}var hC=Object.getOwnPropertySymbols,gG=Object.prototype.hasOwnProperty,vG=Object.prototype.propertyIsEnumerable,bG=(e,t)=>{var n={};for(var r in e)gG.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&hC)for(var r of hC(e))t.indexOf(r)<0&&vG.call(e,r)&&(n[r]=e[r]);return n};function Bm(e){const t=e,{m:n,mx:r,my:o,mt:s,mb:a,ml:c,mr:d,p,px:h,py:m,pt:v,pb:b,pl:w,pr:y,bg:S,c:_,opacity:k,ff:j,fz:I,fw:E,lts:O,ta:R,lh:M,fs:A,tt:T,td:$,w:Q,miw:B,maw:V,h:q,mih:G,mah:D,bgsz:L,bgp:W,bgr:Y,bga:ae,pos:be,top:ie,left:X,bottom:K,right:U,inset:se,display:re}=t,oe=bG(t,["m","mx","my","mt","mb","ml","mr","p","px","py","pt","pb","pl","pr","bg","c","opacity","ff","fz","fw","lts","ta","lh","fs","tt","td","w","miw","maw","h","mih","mah","bgsz","bgp","bgr","bga","pos","top","left","bottom","right","inset","display"]);return{systemStyles:QD({m:n,mx:r,my:o,mt:s,mb:a,ml:c,mr:d,p,px:h,py:m,pt:v,pb:b,pl:w,pr:y,bg:S,c:_,opacity:k,ff:j,fz:I,fw:E,lts:O,ta:R,lh:M,fs:A,tt:T,td:$,w:Q,miw:B,maw:V,h:q,mih:G,mah:D,bgsz:L,bgp:W,bgr:Y,bga:ae,pos:be,top:ie,left:X,bottom:K,right:U,inset:se,display:re}),rest:oe}}function yG(e,t){const n=Object.keys(e).filter(r=>r!=="base").sort((r,o)=>ww(Vt({size:r,sizes:t.breakpoints}))-ww(Vt({size:o,sizes:t.breakpoints})));return"base"in e?["base",...n]:n}function xG({value:e,theme:t,getValue:n,property:r}){if(e==null)return;if(typeof e=="object")return yG(e,t).reduce((a,c)=>{if(c==="base"&&e.base!==void 0){const p=n(e.base,t);return Array.isArray(r)?(r.forEach(h=>{a[h]=p}),a):(a[r]=p,a)}const d=n(e[c],t);return Array.isArray(r)?(a[t.fn.largerThan(c)]={},r.forEach(p=>{a[t.fn.largerThan(c)][p]=d}),a):(a[t.fn.largerThan(c)]={[r]:d},a)},{});const o=n(e,t);return Array.isArray(r)?r.reduce((s,a)=>(s[a]=o,s),{}):{[r]:o}}function wG(e,t){return e==="dimmed"?t.colorScheme==="dark"?t.colors.dark[2]:t.colors.gray[6]:t.fn.variant({variant:"filled",color:e,primaryFallback:!1}).background}function SG(e){return Ue(e)}function CG(e){return e}function kG(e,t){return Vt({size:e,sizes:t.fontSizes})}const _G=["-xs","-sm","-md","-lg","-xl"];function PG(e,t){return _G.includes(e)?`calc(${Vt({size:e.replace("-",""),sizes:t.spacing})} * -1)`:Vt({size:e,sizes:t.spacing})}const jG={identity:CG,color:wG,size:SG,fontSize:kG,spacing:PG},IG={m:{type:"spacing",property:"margin"},mt:{type:"spacing",property:"marginTop"},mb:{type:"spacing",property:"marginBottom"},ml:{type:"spacing",property:"marginLeft"},mr:{type:"spacing",property:"marginRight"},mx:{type:"spacing",property:["marginRight","marginLeft"]},my:{type:"spacing",property:["marginTop","marginBottom"]},p:{type:"spacing",property:"padding"},pt:{type:"spacing",property:"paddingTop"},pb:{type:"spacing",property:"paddingBottom"},pl:{type:"spacing",property:"paddingLeft"},pr:{type:"spacing",property:"paddingRight"},px:{type:"spacing",property:["paddingRight","paddingLeft"]},py:{type:"spacing",property:["paddingTop","paddingBottom"]},bg:{type:"color",property:"background"},c:{type:"color",property:"color"},opacity:{type:"identity",property:"opacity"},ff:{type:"identity",property:"fontFamily"},fz:{type:"fontSize",property:"fontSize"},fw:{type:"identity",property:"fontWeight"},lts:{type:"size",property:"letterSpacing"},ta:{type:"identity",property:"textAlign"},lh:{type:"identity",property:"lineHeight"},fs:{type:"identity",property:"fontStyle"},tt:{type:"identity",property:"textTransform"},td:{type:"identity",property:"textDecoration"},w:{type:"spacing",property:"width"},miw:{type:"spacing",property:"minWidth"},maw:{type:"spacing",property:"maxWidth"},h:{type:"spacing",property:"height"},mih:{type:"spacing",property:"minHeight"},mah:{type:"spacing",property:"maxHeight"},bgsz:{type:"size",property:"backgroundSize"},bgp:{type:"identity",property:"backgroundPosition"},bgr:{type:"identity",property:"backgroundRepeat"},bga:{type:"identity",property:"backgroundAttachment"},pos:{type:"identity",property:"position"},top:{type:"identity",property:"top"},left:{type:"size",property:"left"},bottom:{type:"size",property:"bottom"},right:{type:"size",property:"right"},inset:{type:"size",property:"inset"},display:{type:"identity",property:"display"}};var EG=Object.defineProperty,mC=Object.getOwnPropertySymbols,OG=Object.prototype.hasOwnProperty,RG=Object.prototype.propertyIsEnumerable,gC=(e,t,n)=>t in e?EG(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,vC=(e,t)=>{for(var n in t||(t={}))OG.call(t,n)&&gC(e,n,t[n]);if(mC)for(var n of mC(t))RG.call(t,n)&&gC(e,n,t[n]);return e};function bC(e,t,n=IG){return Object.keys(n).reduce((o,s)=>(s in e&&e[s]!==void 0&&o.push(xG({value:e[s],getValue:jG[n[s].type],property:n[s].property,theme:t})),o),[]).reduce((o,s)=>(Object.keys(s).forEach(a=>{typeof s[a]=="object"&&s[a]!==null&&a in o?o[a]=vC(vC({},o[a]),s[a]):o[a]=s[a]}),o),{})}function yC(e,t){return typeof e=="function"?e(t):e}function MG(e,t,n){const r=Fa(),{css:o,cx:s}=Sj();return Array.isArray(e)?s(n,o(bC(t,r)),e.map(a=>o(yC(a,r)))):s(n,o(yC(e,r)),o(bC(t,r)))}var DG=Object.defineProperty,uh=Object.getOwnPropertySymbols,Oj=Object.prototype.hasOwnProperty,Rj=Object.prototype.propertyIsEnumerable,xC=(e,t,n)=>t in e?DG(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,AG=(e,t)=>{for(var n in t||(t={}))Oj.call(t,n)&&xC(e,n,t[n]);if(uh)for(var n of uh(t))Rj.call(t,n)&&xC(e,n,t[n]);return e},TG=(e,t)=>{var n={};for(var r in e)Oj.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&uh)for(var r of uh(e))t.indexOf(r)<0&&Rj.call(e,r)&&(n[r]=e[r]);return n};const Mj=f.forwardRef((e,t)=>{var n=e,{className:r,component:o,style:s,sx:a}=n,c=TG(n,["className","component","style","sx"]);const{systemStyles:d,rest:p}=Bm(c),h=o||"div";return H.createElement(h,AG({ref:t,className:MG(a,d,r),style:s},p))});Mj.displayName="@mantine/core/Box";const Io=Mj;var NG=Object.defineProperty,$G=Object.defineProperties,zG=Object.getOwnPropertyDescriptors,wC=Object.getOwnPropertySymbols,LG=Object.prototype.hasOwnProperty,BG=Object.prototype.propertyIsEnumerable,SC=(e,t,n)=>t in e?NG(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,CC=(e,t)=>{for(var n in t||(t={}))LG.call(t,n)&&SC(e,n,t[n]);if(wC)for(var n of wC(t))BG.call(t,n)&&SC(e,n,t[n]);return e},FG=(e,t)=>$G(e,zG(t)),HG=ao(e=>({root:FG(CC(CC({},e.fn.focusStyles()),e.fn.fontStyles()),{cursor:"pointer",border:0,padding:0,appearance:"none",fontSize:e.fontSizes.md,backgroundColor:"transparent",textAlign:"left",color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,textDecoration:"none",boxSizing:"border-box"})}));const WG=HG;var VG=Object.defineProperty,dh=Object.getOwnPropertySymbols,Dj=Object.prototype.hasOwnProperty,Aj=Object.prototype.propertyIsEnumerable,kC=(e,t,n)=>t in e?VG(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,UG=(e,t)=>{for(var n in t||(t={}))Dj.call(t,n)&&kC(e,n,t[n]);if(dh)for(var n of dh(t))Aj.call(t,n)&&kC(e,n,t[n]);return e},GG=(e,t)=>{var n={};for(var r in e)Dj.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&dh)for(var r of dh(e))t.indexOf(r)<0&&Aj.call(e,r)&&(n[r]=e[r]);return n};const Tj=f.forwardRef((e,t)=>{const n=Sr("UnstyledButton",{},e),{className:r,component:o="button",unstyled:s,variant:a}=n,c=GG(n,["className","component","unstyled","variant"]),{classes:d,cx:p}=WG(null,{name:"UnstyledButton",unstyled:s,variant:a});return H.createElement(Io,UG({component:o,ref:t,className:p(d.root,r),type:o==="button"?"button":void 0},c))});Tj.displayName="@mantine/core/UnstyledButton";const qG=Tj;var KG=Object.defineProperty,XG=Object.defineProperties,YG=Object.getOwnPropertyDescriptors,_C=Object.getOwnPropertySymbols,QG=Object.prototype.hasOwnProperty,JG=Object.prototype.propertyIsEnumerable,PC=(e,t,n)=>t in e?KG(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,S1=(e,t)=>{for(var n in t||(t={}))QG.call(t,n)&&PC(e,n,t[n]);if(_C)for(var n of _C(t))JG.call(t,n)&&PC(e,n,t[n]);return e},jC=(e,t)=>XG(e,YG(t));const ZG=["subtle","filled","outline","light","default","transparent","gradient"],sp={xs:Ue(18),sm:Ue(22),md:Ue(28),lg:Ue(34),xl:Ue(44)};function eq({variant:e,theme:t,color:n,gradient:r}){const o=t.fn.variant({color:n,variant:e,gradient:r});return e==="gradient"?{border:0,backgroundImage:o.background,color:o.color,"&:hover":t.fn.hover({backgroundSize:"200%"})}:ZG.includes(e)?S1({border:`${Ue(1)} solid ${o.border}`,backgroundColor:o.background,color:o.color},t.fn.hover({backgroundColor:o.hover})):null}var tq=ao((e,{radius:t,color:n,gradient:r},{variant:o,size:s})=>({root:jC(S1({position:"relative",borderRadius:e.fn.radius(t),padding:0,lineHeight:1,display:"flex",alignItems:"center",justifyContent:"center",height:Vt({size:s,sizes:sp}),minHeight:Vt({size:s,sizes:sp}),width:Vt({size:s,sizes:sp}),minWidth:Vt({size:s,sizes:sp})},eq({variant:o,theme:e,color:n,gradient:r})),{"&:active":e.activeStyles,"& [data-action-icon-loader]":{maxWidth:"70%"},"&:disabled, &[data-disabled]":{color:e.colors.gray[e.colorScheme==="dark"?6:4],cursor:"not-allowed",backgroundColor:o==="transparent"?void 0:e.fn.themeColor("gray",e.colorScheme==="dark"?8:1),borderColor:o==="transparent"?void 0:e.fn.themeColor("gray",e.colorScheme==="dark"?8:1),backgroundImage:"none",pointerEvents:"none","&:active":{transform:"none"}},"&[data-loading]":{pointerEvents:"none","&::before":jC(S1({content:'""'},e.fn.cover(Ue(-1))),{backgroundColor:e.colorScheme==="dark"?e.fn.rgba(e.colors.dark[7],.5):"rgba(255, 255, 255, .5)",borderRadius:e.fn.radius(t),cursor:"not-allowed"})}})}));const nq=tq;var rq=Object.defineProperty,fh=Object.getOwnPropertySymbols,Nj=Object.prototype.hasOwnProperty,$j=Object.prototype.propertyIsEnumerable,IC=(e,t,n)=>t in e?rq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,EC=(e,t)=>{for(var n in t||(t={}))Nj.call(t,n)&&IC(e,n,t[n]);if(fh)for(var n of fh(t))$j.call(t,n)&&IC(e,n,t[n]);return e},OC=(e,t)=>{var n={};for(var r in e)Nj.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&fh)for(var r of fh(e))t.indexOf(r)<0&&$j.call(e,r)&&(n[r]=e[r]);return n};function oq(e){var t=e,{size:n,color:r}=t,o=OC(t,["size","color"]);const s=o,{style:a}=s,c=OC(s,["style"]);return H.createElement("svg",EC({viewBox:"0 0 135 140",xmlns:"http://www.w3.org/2000/svg",fill:r,style:EC({width:n},a)},c),H.createElement("rect",{y:"10",width:"15",height:"120",rx:"6"},H.createElement("animate",{attributeName:"height",begin:"0.5s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),H.createElement("animate",{attributeName:"y",begin:"0.5s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})),H.createElement("rect",{x:"30",y:"10",width:"15",height:"120",rx:"6"},H.createElement("animate",{attributeName:"height",begin:"0.25s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),H.createElement("animate",{attributeName:"y",begin:"0.25s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})),H.createElement("rect",{x:"60",width:"15",height:"140",rx:"6"},H.createElement("animate",{attributeName:"height",begin:"0s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),H.createElement("animate",{attributeName:"y",begin:"0s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})),H.createElement("rect",{x:"90",y:"10",width:"15",height:"120",rx:"6"},H.createElement("animate",{attributeName:"height",begin:"0.25s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),H.createElement("animate",{attributeName:"y",begin:"0.25s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})),H.createElement("rect",{x:"120",y:"10",width:"15",height:"120",rx:"6"},H.createElement("animate",{attributeName:"height",begin:"0.5s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),H.createElement("animate",{attributeName:"y",begin:"0.5s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})))}var sq=Object.defineProperty,ph=Object.getOwnPropertySymbols,zj=Object.prototype.hasOwnProperty,Lj=Object.prototype.propertyIsEnumerable,RC=(e,t,n)=>t in e?sq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,MC=(e,t)=>{for(var n in t||(t={}))zj.call(t,n)&&RC(e,n,t[n]);if(ph)for(var n of ph(t))Lj.call(t,n)&&RC(e,n,t[n]);return e},DC=(e,t)=>{var n={};for(var r in e)zj.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&ph)for(var r of ph(e))t.indexOf(r)<0&&Lj.call(e,r)&&(n[r]=e[r]);return n};function aq(e){var t=e,{size:n,color:r}=t,o=DC(t,["size","color"]);const s=o,{style:a}=s,c=DC(s,["style"]);return H.createElement("svg",MC({viewBox:"0 0 38 38",xmlns:"http://www.w3.org/2000/svg",stroke:r,style:MC({width:n,height:n},a)},c),H.createElement("g",{fill:"none",fillRule:"evenodd"},H.createElement("g",{transform:"translate(2.5 2.5)",strokeWidth:"5"},H.createElement("circle",{strokeOpacity:".5",cx:"16",cy:"16",r:"16"}),H.createElement("path",{d:"M32 16c0-9.94-8.06-16-16-16"},H.createElement("animateTransform",{attributeName:"transform",type:"rotate",from:"0 16 16",to:"360 16 16",dur:"1s",repeatCount:"indefinite"})))))}var iq=Object.defineProperty,hh=Object.getOwnPropertySymbols,Bj=Object.prototype.hasOwnProperty,Fj=Object.prototype.propertyIsEnumerable,AC=(e,t,n)=>t in e?iq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,TC=(e,t)=>{for(var n in t||(t={}))Bj.call(t,n)&&AC(e,n,t[n]);if(hh)for(var n of hh(t))Fj.call(t,n)&&AC(e,n,t[n]);return e},NC=(e,t)=>{var n={};for(var r in e)Bj.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&hh)for(var r of hh(e))t.indexOf(r)<0&&Fj.call(e,r)&&(n[r]=e[r]);return n};function lq(e){var t=e,{size:n,color:r}=t,o=NC(t,["size","color"]);const s=o,{style:a}=s,c=NC(s,["style"]);return H.createElement("svg",TC({viewBox:"0 0 120 30",xmlns:"http://www.w3.org/2000/svg",fill:r,style:TC({width:n},a)},c),H.createElement("circle",{cx:"15",cy:"15",r:"15"},H.createElement("animate",{attributeName:"r",from:"15",to:"15",begin:"0s",dur:"0.8s",values:"15;9;15",calcMode:"linear",repeatCount:"indefinite"}),H.createElement("animate",{attributeName:"fill-opacity",from:"1",to:"1",begin:"0s",dur:"0.8s",values:"1;.5;1",calcMode:"linear",repeatCount:"indefinite"})),H.createElement("circle",{cx:"60",cy:"15",r:"9",fillOpacity:"0.3"},H.createElement("animate",{attributeName:"r",from:"9",to:"9",begin:"0s",dur:"0.8s",values:"9;15;9",calcMode:"linear",repeatCount:"indefinite"}),H.createElement("animate",{attributeName:"fill-opacity",from:"0.5",to:"0.5",begin:"0s",dur:"0.8s",values:".5;1;.5",calcMode:"linear",repeatCount:"indefinite"})),H.createElement("circle",{cx:"105",cy:"15",r:"15"},H.createElement("animate",{attributeName:"r",from:"15",to:"15",begin:"0s",dur:"0.8s",values:"15;9;15",calcMode:"linear",repeatCount:"indefinite"}),H.createElement("animate",{attributeName:"fill-opacity",from:"1",to:"1",begin:"0s",dur:"0.8s",values:"1;.5;1",calcMode:"linear",repeatCount:"indefinite"})))}var cq=Object.defineProperty,mh=Object.getOwnPropertySymbols,Hj=Object.prototype.hasOwnProperty,Wj=Object.prototype.propertyIsEnumerable,$C=(e,t,n)=>t in e?cq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,uq=(e,t)=>{for(var n in t||(t={}))Hj.call(t,n)&&$C(e,n,t[n]);if(mh)for(var n of mh(t))Wj.call(t,n)&&$C(e,n,t[n]);return e},dq=(e,t)=>{var n={};for(var r in e)Hj.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&mh)for(var r of mh(e))t.indexOf(r)<0&&Wj.call(e,r)&&(n[r]=e[r]);return n};const rv={bars:oq,oval:aq,dots:lq},fq={xs:Ue(18),sm:Ue(22),md:Ue(36),lg:Ue(44),xl:Ue(58)},pq={size:"md"};function Vj(e){const t=Sr("Loader",pq,e),{size:n,color:r,variant:o}=t,s=dq(t,["size","color","variant"]),a=Fa(),c=o in rv?o:a.loader;return H.createElement(Io,uq({role:"presentation",component:rv[c]||rv.bars,size:Vt({size:n,sizes:fq}),color:a.fn.variant({variant:"filled",primaryFallback:!1,color:r||a.primaryColor}).background},s))}Vj.displayName="@mantine/core/Loader";var hq=Object.defineProperty,gh=Object.getOwnPropertySymbols,Uj=Object.prototype.hasOwnProperty,Gj=Object.prototype.propertyIsEnumerable,zC=(e,t,n)=>t in e?hq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,LC=(e,t)=>{for(var n in t||(t={}))Uj.call(t,n)&&zC(e,n,t[n]);if(gh)for(var n of gh(t))Gj.call(t,n)&&zC(e,n,t[n]);return e},mq=(e,t)=>{var n={};for(var r in e)Uj.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&gh)for(var r of gh(e))t.indexOf(r)<0&&Gj.call(e,r)&&(n[r]=e[r]);return n};const gq={color:"gray",size:"md",variant:"subtle"},qj=f.forwardRef((e,t)=>{const n=Sr("ActionIcon",gq,e),{className:r,color:o,children:s,radius:a,size:c,variant:d,gradient:p,disabled:h,loaderProps:m,loading:v,unstyled:b,__staticSelector:w}=n,y=mq(n,["className","color","children","radius","size","variant","gradient","disabled","loaderProps","loading","unstyled","__staticSelector"]),{classes:S,cx:_,theme:k}=nq({radius:a,color:o,gradient:p},{name:["ActionIcon",w],unstyled:b,size:c,variant:d}),j=H.createElement(Vj,LC({color:k.fn.variant({color:o,variant:d}).color,size:"100%","data-action-icon-loader":!0},m));return H.createElement(qG,LC({className:_(S.root,r),ref:t,disabled:h,"data-disabled":h||void 0,"data-loading":v||void 0,unstyled:b},y),v?j:s)});qj.displayName="@mantine/core/ActionIcon";const vq=qj;var bq=Object.defineProperty,yq=Object.defineProperties,xq=Object.getOwnPropertyDescriptors,vh=Object.getOwnPropertySymbols,Kj=Object.prototype.hasOwnProperty,Xj=Object.prototype.propertyIsEnumerable,BC=(e,t,n)=>t in e?bq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,wq=(e,t)=>{for(var n in t||(t={}))Kj.call(t,n)&&BC(e,n,t[n]);if(vh)for(var n of vh(t))Xj.call(t,n)&&BC(e,n,t[n]);return e},Sq=(e,t)=>yq(e,xq(t)),Cq=(e,t)=>{var n={};for(var r in e)Kj.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&vh)for(var r of vh(e))t.indexOf(r)<0&&Xj.call(e,r)&&(n[r]=e[r]);return n};function Yj(e){const t=Sr("Portal",{},e),{children:n,target:r,className:o,innerRef:s}=t,a=Cq(t,["children","target","className","innerRef"]),c=Fa(),[d,p]=f.useState(!1),h=f.useRef();return Cj(()=>(p(!0),h.current=r?typeof r=="string"?document.querySelector(r):r:document.createElement("div"),r||document.body.appendChild(h.current),()=>{!r&&document.body.removeChild(h.current)}),[r]),d?_i.createPortal(H.createElement("div",Sq(wq({className:o,dir:c.dir},a),{ref:s}),n),h.current):null}Yj.displayName="@mantine/core/Portal";var kq=Object.defineProperty,bh=Object.getOwnPropertySymbols,Qj=Object.prototype.hasOwnProperty,Jj=Object.prototype.propertyIsEnumerable,FC=(e,t,n)=>t in e?kq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,_q=(e,t)=>{for(var n in t||(t={}))Qj.call(t,n)&&FC(e,n,t[n]);if(bh)for(var n of bh(t))Jj.call(t,n)&&FC(e,n,t[n]);return e},Pq=(e,t)=>{var n={};for(var r in e)Qj.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&bh)for(var r of bh(e))t.indexOf(r)<0&&Jj.call(e,r)&&(n[r]=e[r]);return n};function Zj(e){var t=e,{withinPortal:n=!0,children:r}=t,o=Pq(t,["withinPortal","children"]);return n?H.createElement(Yj,_q({},o),r):H.createElement(H.Fragment,null,r)}Zj.displayName="@mantine/core/OptionalPortal";var jq=Object.defineProperty,yh=Object.getOwnPropertySymbols,eI=Object.prototype.hasOwnProperty,tI=Object.prototype.propertyIsEnumerable,HC=(e,t,n)=>t in e?jq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,WC=(e,t)=>{for(var n in t||(t={}))eI.call(t,n)&&HC(e,n,t[n]);if(yh)for(var n of yh(t))tI.call(t,n)&&HC(e,n,t[n]);return e},Iq=(e,t)=>{var n={};for(var r in e)eI.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&yh)for(var r of yh(e))t.indexOf(r)<0&&tI.call(e,r)&&(n[r]=e[r]);return n};function nI(e){const t=e,{width:n,height:r,style:o}=t,s=Iq(t,["width","height","style"]);return H.createElement("svg",WC({viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:WC({width:n,height:r},o)},s),H.createElement("path",{d:"M11.7816 4.03157C12.0062 3.80702 12.0062 3.44295 11.7816 3.2184C11.5571 2.99385 11.193 2.99385 10.9685 3.2184L7.50005 6.68682L4.03164 3.2184C3.80708 2.99385 3.44301 2.99385 3.21846 3.2184C2.99391 3.44295 2.99391 3.80702 3.21846 4.03157L6.68688 7.49999L3.21846 10.9684C2.99391 11.193 2.99391 11.557 3.21846 11.7816C3.44301 12.0061 3.80708 12.0061 4.03164 11.7816L7.50005 8.31316L10.9685 11.7816C11.193 12.0061 11.5571 12.0061 11.7816 11.7816C12.0062 11.557 12.0062 11.193 11.7816 10.9684L8.31322 7.49999L11.7816 4.03157Z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"}))}nI.displayName="@mantine/core/CloseIcon";var Eq=Object.defineProperty,xh=Object.getOwnPropertySymbols,rI=Object.prototype.hasOwnProperty,oI=Object.prototype.propertyIsEnumerable,VC=(e,t,n)=>t in e?Eq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Oq=(e,t)=>{for(var n in t||(t={}))rI.call(t,n)&&VC(e,n,t[n]);if(xh)for(var n of xh(t))oI.call(t,n)&&VC(e,n,t[n]);return e},Rq=(e,t)=>{var n={};for(var r in e)rI.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&xh)for(var r of xh(e))t.indexOf(r)<0&&oI.call(e,r)&&(n[r]=e[r]);return n};const Mq={xs:Ue(12),sm:Ue(16),md:Ue(20),lg:Ue(28),xl:Ue(34)},Dq={size:"sm"},sI=f.forwardRef((e,t)=>{const n=Sr("CloseButton",Dq,e),{iconSize:r,size:o,children:s}=n,a=Rq(n,["iconSize","size","children"]),c=Ue(r||Mq[o]);return H.createElement(vq,Oq({ref:t,__staticSelector:"CloseButton",size:o},a),s||H.createElement(nI,{width:c,height:c}))});sI.displayName="@mantine/core/CloseButton";const aI=sI;var Aq=Object.defineProperty,Tq=Object.defineProperties,Nq=Object.getOwnPropertyDescriptors,UC=Object.getOwnPropertySymbols,$q=Object.prototype.hasOwnProperty,zq=Object.prototype.propertyIsEnumerable,GC=(e,t,n)=>t in e?Aq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,ap=(e,t)=>{for(var n in t||(t={}))$q.call(t,n)&&GC(e,n,t[n]);if(UC)for(var n of UC(t))zq.call(t,n)&&GC(e,n,t[n]);return e},Lq=(e,t)=>Tq(e,Nq(t));function Bq({underline:e,strikethrough:t}){const n=[];return e&&n.push("underline"),t&&n.push("line-through"),n.length>0?n.join(" "):"none"}function Fq({theme:e,color:t}){return t==="dimmed"?e.fn.dimmed():typeof t=="string"&&(t in e.colors||t.split(".")[0]in e.colors)?e.fn.variant({variant:"filled",color:t}).background:t||"inherit"}function Hq(e){return typeof e=="number"?{overflow:"hidden",textOverflow:"ellipsis",display:"-webkit-box",WebkitLineClamp:e,WebkitBoxOrient:"vertical"}:null}function Wq({theme:e,truncate:t}){return t==="start"?{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",direction:e.dir==="ltr"?"rtl":"ltr",textAlign:e.dir==="ltr"?"right":"left"}:t?{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}:null}var Vq=ao((e,{color:t,lineClamp:n,truncate:r,inline:o,inherit:s,underline:a,gradient:c,weight:d,transform:p,align:h,strikethrough:m,italic:v},{size:b})=>{const w=e.fn.variant({variant:"gradient",gradient:c});return{root:Lq(ap(ap(ap(ap({},e.fn.fontStyles()),e.fn.focusStyles()),Hq(n)),Wq({theme:e,truncate:r})),{color:Fq({color:t,theme:e}),fontFamily:s?"inherit":e.fontFamily,fontSize:s||b===void 0?"inherit":Vt({size:b,sizes:e.fontSizes}),lineHeight:s?"inherit":o?1:e.lineHeight,textDecoration:Bq({underline:a,strikethrough:m}),WebkitTapHighlightColor:"transparent",fontWeight:s?"inherit":d,textTransform:p,textAlign:h,fontStyle:v?"italic":void 0}),gradient:{backgroundImage:w.background,WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent"}}});const Uq=Vq;var Gq=Object.defineProperty,wh=Object.getOwnPropertySymbols,iI=Object.prototype.hasOwnProperty,lI=Object.prototype.propertyIsEnumerable,qC=(e,t,n)=>t in e?Gq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,qq=(e,t)=>{for(var n in t||(t={}))iI.call(t,n)&&qC(e,n,t[n]);if(wh)for(var n of wh(t))lI.call(t,n)&&qC(e,n,t[n]);return e},Kq=(e,t)=>{var n={};for(var r in e)iI.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&wh)for(var r of wh(e))t.indexOf(r)<0&&lI.call(e,r)&&(n[r]=e[r]);return n};const Xq={variant:"text"},cI=f.forwardRef((e,t)=>{const n=Sr("Text",Xq,e),{className:r,size:o,weight:s,transform:a,color:c,align:d,variant:p,lineClamp:h,truncate:m,gradient:v,inline:b,inherit:w,underline:y,strikethrough:S,italic:_,classNames:k,styles:j,unstyled:I,span:E,__staticSelector:O}=n,R=Kq(n,["className","size","weight","transform","color","align","variant","lineClamp","truncate","gradient","inline","inherit","underline","strikethrough","italic","classNames","styles","unstyled","span","__staticSelector"]),{classes:M,cx:A}=Uq({color:c,lineClamp:h,truncate:m,inline:b,inherit:w,underline:y,strikethrough:S,italic:_,weight:s,transform:a,align:d,gradient:v},{unstyled:I,name:O||"Text",variant:p,size:o});return H.createElement(Io,qq({ref:t,className:A(M.root,{[M.gradient]:p==="gradient"},r),component:E?"span":"div"},R))});cI.displayName="@mantine/core/Text";const kc=cI,ip={xs:Ue(1),sm:Ue(2),md:Ue(3),lg:Ue(4),xl:Ue(5)};function lp(e,t){const n=e.fn.variant({variant:"outline",color:t}).border;return typeof t=="string"&&(t in e.colors||t.split(".")[0]in e.colors)?n:t===void 0?e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[4]:t}var Yq=ao((e,{color:t},{size:n,variant:r})=>({root:{},withLabel:{borderTop:"0 !important"},left:{"&::before":{display:"none"}},right:{"&::after":{display:"none"}},label:{display:"flex",alignItems:"center","&::before":{content:'""',flex:1,height:Ue(1),borderTop:`${Vt({size:n,sizes:ip})} ${r} ${lp(e,t)}`,marginRight:e.spacing.xs},"&::after":{content:'""',flex:1,borderTop:`${Vt({size:n,sizes:ip})} ${r} ${lp(e,t)}`,marginLeft:e.spacing.xs}},labelDefaultStyles:{color:t==="dark"?e.colors.dark[1]:e.fn.themeColor(t,e.colorScheme==="dark"?5:e.fn.primaryShade(),!1)},horizontal:{border:0,borderTopWidth:Ue(Vt({size:n,sizes:ip})),borderTopColor:lp(e,t),borderTopStyle:r,margin:0},vertical:{border:0,alignSelf:"stretch",height:"auto",borderLeftWidth:Ue(Vt({size:n,sizes:ip})),borderLeftColor:lp(e,t),borderLeftStyle:r}}));const Qq=Yq;var Jq=Object.defineProperty,Zq=Object.defineProperties,eK=Object.getOwnPropertyDescriptors,Sh=Object.getOwnPropertySymbols,uI=Object.prototype.hasOwnProperty,dI=Object.prototype.propertyIsEnumerable,KC=(e,t,n)=>t in e?Jq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,XC=(e,t)=>{for(var n in t||(t={}))uI.call(t,n)&&KC(e,n,t[n]);if(Sh)for(var n of Sh(t))dI.call(t,n)&&KC(e,n,t[n]);return e},tK=(e,t)=>Zq(e,eK(t)),nK=(e,t)=>{var n={};for(var r in e)uI.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Sh)for(var r of Sh(e))t.indexOf(r)<0&&dI.call(e,r)&&(n[r]=e[r]);return n};const rK={orientation:"horizontal",size:"xs",labelPosition:"left",variant:"solid"},C1=f.forwardRef((e,t)=>{const n=Sr("Divider",rK,e),{className:r,color:o,orientation:s,size:a,label:c,labelPosition:d,labelProps:p,variant:h,styles:m,classNames:v,unstyled:b}=n,w=nK(n,["className","color","orientation","size","label","labelPosition","labelProps","variant","styles","classNames","unstyled"]),{classes:y,cx:S}=Qq({color:o},{classNames:v,styles:m,unstyled:b,name:"Divider",variant:h,size:a}),_=s==="vertical",k=s==="horizontal",j=!!c&&k,I=!(p!=null&&p.color);return H.createElement(Io,XC({ref:t,className:S(y.root,{[y.vertical]:_,[y.horizontal]:k,[y.withLabel]:j},r),role:"separator"},w),j&&H.createElement(kc,tK(XC({},p),{size:(p==null?void 0:p.size)||"xs",mt:Ue(2),className:S(y.label,y[d],{[y.labelDefaultStyles]:I})}),c))});C1.displayName="@mantine/core/Divider";var oK=Object.defineProperty,sK=Object.defineProperties,aK=Object.getOwnPropertyDescriptors,YC=Object.getOwnPropertySymbols,iK=Object.prototype.hasOwnProperty,lK=Object.prototype.propertyIsEnumerable,QC=(e,t,n)=>t in e?oK(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,JC=(e,t)=>{for(var n in t||(t={}))iK.call(t,n)&&QC(e,n,t[n]);if(YC)for(var n of YC(t))lK.call(t,n)&&QC(e,n,t[n]);return e},cK=(e,t)=>sK(e,aK(t)),uK=ao((e,t,{size:n})=>({item:cK(JC({},e.fn.fontStyles()),{boxSizing:"border-box",wordBreak:"break-all",textAlign:"left",width:"100%",padding:`calc(${Vt({size:n,sizes:e.spacing})} / 1.5) ${Vt({size:n,sizes:e.spacing})}`,cursor:"pointer",fontSize:Vt({size:n,sizes:e.fontSizes}),color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,borderRadius:e.fn.radius(),"&[data-hovered]":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[1]},"&[data-selected]":JC({backgroundColor:e.fn.variant({variant:"filled"}).background,color:e.fn.variant({variant:"filled"}).color},e.fn.hover({backgroundColor:e.fn.variant({variant:"filled"}).hover})),"&[data-disabled]":{cursor:"default",color:e.colors.dark[2]}}),nothingFound:{boxSizing:"border-box",color:e.colors.gray[6],paddingTop:`calc(${Vt({size:n,sizes:e.spacing})} / 2)`,paddingBottom:`calc(${Vt({size:n,sizes:e.spacing})} / 2)`,textAlign:"center"},separator:{boxSizing:"border-box",textAlign:"left",width:"100%",padding:`calc(${Vt({size:n,sizes:e.spacing})} / 1.5) ${Vt({size:n,sizes:e.spacing})}`},separatorLabel:{color:e.colorScheme==="dark"?e.colors.dark[3]:e.colors.gray[5]}}));const dK=uK;var fK=Object.defineProperty,ZC=Object.getOwnPropertySymbols,pK=Object.prototype.hasOwnProperty,hK=Object.prototype.propertyIsEnumerable,e4=(e,t,n)=>t in e?fK(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,mK=(e,t)=>{for(var n in t||(t={}))pK.call(t,n)&&e4(e,n,t[n]);if(ZC)for(var n of ZC(t))hK.call(t,n)&&e4(e,n,t[n]);return e};function Ey({data:e,hovered:t,classNames:n,styles:r,isItemSelected:o,uuid:s,__staticSelector:a,onItemHover:c,onItemSelect:d,itemsRefs:p,itemComponent:h,size:m,nothingFound:v,creatable:b,createLabel:w,unstyled:y,variant:S}){const{classes:_}=dK(null,{classNames:n,styles:r,unstyled:y,name:a,variant:S,size:m}),k=[],j=[];let I=null;const E=(R,M)=>{const A=typeof o=="function"?o(R.value):!1;return H.createElement(h,mK({key:R.value,className:_.item,"data-disabled":R.disabled||void 0,"data-hovered":!R.disabled&&t===M||void 0,"data-selected":!R.disabled&&A||void 0,selected:A,onMouseEnter:()=>c(M),id:`${s}-${M}`,role:"option",tabIndex:-1,"aria-selected":t===M,ref:T=>{p&&p.current&&(p.current[R.value]=T)},onMouseDown:R.disabled?null:T=>{T.preventDefault(),d(R)},disabled:R.disabled,variant:S},R))};let O=null;if(e.forEach((R,M)=>{R.creatable?I=M:R.group?(O!==R.group&&(O=R.group,j.push(H.createElement("div",{className:_.separator,key:`__mantine-divider-${M}`},H.createElement(C1,{classNames:{label:_.separatorLabel},label:R.group})))),j.push(E(R,M))):k.push(E(R,M))}),b){const R=e[I];k.push(H.createElement("div",{key:jy(),className:_.item,"data-hovered":t===I||void 0,onMouseEnter:()=>c(I),onMouseDown:M=>{M.preventDefault(),d(R)},tabIndex:-1,ref:M=>{p&&p.current&&(p.current[R.value]=M)}},w))}return j.length>0&&k.length>0&&k.unshift(H.createElement("div",{className:_.separator,key:"empty-group-separator"},H.createElement(C1,null))),j.length>0||k.length>0?H.createElement(H.Fragment,null,j,k):H.createElement(kc,{size:m,unstyled:y,className:_.nothingFound},v)}Ey.displayName="@mantine/core/SelectItems";var gK=Object.defineProperty,Ch=Object.getOwnPropertySymbols,fI=Object.prototype.hasOwnProperty,pI=Object.prototype.propertyIsEnumerable,t4=(e,t,n)=>t in e?gK(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,vK=(e,t)=>{for(var n in t||(t={}))fI.call(t,n)&&t4(e,n,t[n]);if(Ch)for(var n of Ch(t))pI.call(t,n)&&t4(e,n,t[n]);return e},bK=(e,t)=>{var n={};for(var r in e)fI.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Ch)for(var r of Ch(e))t.indexOf(r)<0&&pI.call(e,r)&&(n[r]=e[r]);return n};const Oy=f.forwardRef((e,t)=>{var n=e,{label:r,value:o}=n,s=bK(n,["label","value"]);return H.createElement("div",vK({ref:t},s),r||o)});Oy.displayName="@mantine/core/DefaultItem";function yK(e,t){typeof e=="function"?e(t):e!=null&&(e.current=t)}function hI(...e){return t=>e.forEach(n=>yK(n,t))}function bl(...e){return f.useCallback(hI(...e),e)}const mI=f.forwardRef((e,t)=>{const{children:n,...r}=e,o=f.Children.toArray(n),s=o.find(wK);if(s){const a=s.props.children,c=o.map(d=>d===s?f.Children.count(a)>1?f.Children.only(null):f.isValidElement(a)?a.props.children:null:d);return f.createElement(k1,sr({},r,{ref:t}),f.isValidElement(a)?f.cloneElement(a,void 0,c):null)}return f.createElement(k1,sr({},r,{ref:t}),n)});mI.displayName="Slot";const k1=f.forwardRef((e,t)=>{const{children:n,...r}=e;return f.isValidElement(n)?f.cloneElement(n,{...SK(r,n.props),ref:hI(t,n.ref)}):f.Children.count(n)>1?f.Children.only(null):null});k1.displayName="SlotClone";const xK=({children:e})=>f.createElement(f.Fragment,null,e);function wK(e){return f.isValidElement(e)&&e.type===xK}function SK(e,t){const n={...t};for(const r in t){const o=e[r],s=t[r];/^on[A-Z]/.test(r)?o&&s?n[r]=(...c)=>{s(...c),o(...c)}:o&&(n[r]=o):r==="style"?n[r]={...o,...s}:r==="className"&&(n[r]=[o,s].filter(Boolean).join(" "))}return{...e,...n}}const CK=["a","button","div","h2","h3","img","label","li","nav","ol","p","span","svg","ul"],Wd=CK.reduce((e,t)=>{const n=f.forwardRef((r,o)=>{const{asChild:s,...a}=r,c=s?mI:t;return f.useEffect(()=>{window[Symbol.for("radix-ui")]=!0},[]),f.createElement(c,sr({},a,{ref:o}))});return n.displayName=`Primitive.${t}`,{...e,[t]:n}},{}),_1=globalThis!=null&&globalThis.document?f.useLayoutEffect:()=>{};function kK(e,t){return f.useReducer((n,r)=>{const o=t[n][r];return o??n},e)}const Vd=e=>{const{present:t,children:n}=e,r=_K(t),o=typeof n=="function"?n({present:r.isPresent}):f.Children.only(n),s=bl(r.ref,o.ref);return typeof n=="function"||r.isPresent?f.cloneElement(o,{ref:s}):null};Vd.displayName="Presence";function _K(e){const[t,n]=f.useState(),r=f.useRef({}),o=f.useRef(e),s=f.useRef("none"),a=e?"mounted":"unmounted",[c,d]=kK(a,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return f.useEffect(()=>{const p=cp(r.current);s.current=c==="mounted"?p:"none"},[c]),_1(()=>{const p=r.current,h=o.current;if(h!==e){const v=s.current,b=cp(p);e?d("MOUNT"):b==="none"||(p==null?void 0:p.display)==="none"?d("UNMOUNT"):d(h&&v!==b?"ANIMATION_OUT":"UNMOUNT"),o.current=e}},[e,d]),_1(()=>{if(t){const p=m=>{const b=cp(r.current).includes(m.animationName);m.target===t&&b&&_i.flushSync(()=>d("ANIMATION_END"))},h=m=>{m.target===t&&(s.current=cp(r.current))};return t.addEventListener("animationstart",h),t.addEventListener("animationcancel",p),t.addEventListener("animationend",p),()=>{t.removeEventListener("animationstart",h),t.removeEventListener("animationcancel",p),t.removeEventListener("animationend",p)}}else d("ANIMATION_END")},[t,d]),{isPresent:["mounted","unmountSuspended"].includes(c),ref:f.useCallback(p=>{p&&(r.current=getComputedStyle(p)),n(p)},[])}}function cp(e){return(e==null?void 0:e.animationName)||"none"}function PK(e,t=[]){let n=[];function r(s,a){const c=f.createContext(a),d=n.length;n=[...n,a];function p(m){const{scope:v,children:b,...w}=m,y=(v==null?void 0:v[e][d])||c,S=f.useMemo(()=>w,Object.values(w));return f.createElement(y.Provider,{value:S},b)}function h(m,v){const b=(v==null?void 0:v[e][d])||c,w=f.useContext(b);if(w)return w;if(a!==void 0)return a;throw new Error(`\`${m}\` must be used within \`${s}\``)}return p.displayName=s+"Provider",[p,h]}const o=()=>{const s=n.map(a=>f.createContext(a));return function(c){const d=(c==null?void 0:c[e])||s;return f.useMemo(()=>({[`__scope${e}`]:{...c,[e]:d}}),[c,d])}};return o.scopeName=e,[r,jK(o,...t)]}function jK(...e){const t=e[0];if(e.length===1)return t;const n=()=>{const r=e.map(o=>({useScope:o(),scopeName:o.scopeName}));return function(s){const a=r.reduce((c,{useScope:d,scopeName:p})=>{const m=d(s)[`__scope${p}`];return{...c,...m}},{});return f.useMemo(()=>({[`__scope${t.scopeName}`]:a}),[a])}};return n.scopeName=t.scopeName,n}function Gi(e){const t=f.useRef(e);return f.useEffect(()=>{t.current=e}),f.useMemo(()=>(...n)=>{var r;return(r=t.current)===null||r===void 0?void 0:r.call(t,...n)},[])}const IK=f.createContext(void 0);function EK(e){const t=f.useContext(IK);return e||t||"ltr"}function OK(e,[t,n]){return Math.min(n,Math.max(t,e))}function tl(e,t,{checkForDefaultPrevented:n=!0}={}){return function(o){if(e==null||e(o),n===!1||!o.defaultPrevented)return t==null?void 0:t(o)}}function RK(e,t){return f.useReducer((n,r)=>{const o=t[n][r];return o??n},e)}const gI="ScrollArea",[vI,Mde]=PK(gI),[MK,ds]=vI(gI),DK=f.forwardRef((e,t)=>{const{__scopeScrollArea:n,type:r="hover",dir:o,scrollHideDelay:s=600,...a}=e,[c,d]=f.useState(null),[p,h]=f.useState(null),[m,v]=f.useState(null),[b,w]=f.useState(null),[y,S]=f.useState(null),[_,k]=f.useState(0),[j,I]=f.useState(0),[E,O]=f.useState(!1),[R,M]=f.useState(!1),A=bl(t,$=>d($)),T=EK(o);return f.createElement(MK,{scope:n,type:r,dir:T,scrollHideDelay:s,scrollArea:c,viewport:p,onViewportChange:h,content:m,onContentChange:v,scrollbarX:b,onScrollbarXChange:w,scrollbarXEnabled:E,onScrollbarXEnabledChange:O,scrollbarY:y,onScrollbarYChange:S,scrollbarYEnabled:R,onScrollbarYEnabledChange:M,onCornerWidthChange:k,onCornerHeightChange:I},f.createElement(Wd.div,sr({dir:T},a,{ref:A,style:{position:"relative","--radix-scroll-area-corner-width":_+"px","--radix-scroll-area-corner-height":j+"px",...e.style}})))}),AK="ScrollAreaViewport",TK=f.forwardRef((e,t)=>{const{__scopeScrollArea:n,children:r,...o}=e,s=ds(AK,n),a=f.useRef(null),c=bl(t,a,s.onViewportChange);return f.createElement(f.Fragment,null,f.createElement("style",{dangerouslySetInnerHTML:{__html:"[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}"}}),f.createElement(Wd.div,sr({"data-radix-scroll-area-viewport":""},o,{ref:c,style:{overflowX:s.scrollbarXEnabled?"scroll":"hidden",overflowY:s.scrollbarYEnabled?"scroll":"hidden",...e.style}}),f.createElement("div",{ref:s.onContentChange,style:{minWidth:"100%",display:"table"}},r)))}),Wa="ScrollAreaScrollbar",NK=f.forwardRef((e,t)=>{const{forceMount:n,...r}=e,o=ds(Wa,e.__scopeScrollArea),{onScrollbarXEnabledChange:s,onScrollbarYEnabledChange:a}=o,c=e.orientation==="horizontal";return f.useEffect(()=>(c?s(!0):a(!0),()=>{c?s(!1):a(!1)}),[c,s,a]),o.type==="hover"?f.createElement($K,sr({},r,{ref:t,forceMount:n})):o.type==="scroll"?f.createElement(zK,sr({},r,{ref:t,forceMount:n})):o.type==="auto"?f.createElement(bI,sr({},r,{ref:t,forceMount:n})):o.type==="always"?f.createElement(Ry,sr({},r,{ref:t})):null}),$K=f.forwardRef((e,t)=>{const{forceMount:n,...r}=e,o=ds(Wa,e.__scopeScrollArea),[s,a]=f.useState(!1);return f.useEffect(()=>{const c=o.scrollArea;let d=0;if(c){const p=()=>{window.clearTimeout(d),a(!0)},h=()=>{d=window.setTimeout(()=>a(!1),o.scrollHideDelay)};return c.addEventListener("pointerenter",p),c.addEventListener("pointerleave",h),()=>{window.clearTimeout(d),c.removeEventListener("pointerenter",p),c.removeEventListener("pointerleave",h)}}},[o.scrollArea,o.scrollHideDelay]),f.createElement(Vd,{present:n||s},f.createElement(bI,sr({"data-state":s?"visible":"hidden"},r,{ref:t})))}),zK=f.forwardRef((e,t)=>{const{forceMount:n,...r}=e,o=ds(Wa,e.__scopeScrollArea),s=e.orientation==="horizontal",a=Hm(()=>d("SCROLL_END"),100),[c,d]=RK("hidden",{hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}});return f.useEffect(()=>{if(c==="idle"){const p=window.setTimeout(()=>d("HIDE"),o.scrollHideDelay);return()=>window.clearTimeout(p)}},[c,o.scrollHideDelay,d]),f.useEffect(()=>{const p=o.viewport,h=s?"scrollLeft":"scrollTop";if(p){let m=p[h];const v=()=>{const b=p[h];m!==b&&(d("SCROLL"),a()),m=b};return p.addEventListener("scroll",v),()=>p.removeEventListener("scroll",v)}},[o.viewport,s,d,a]),f.createElement(Vd,{present:n||c!=="hidden"},f.createElement(Ry,sr({"data-state":c==="hidden"?"hidden":"visible"},r,{ref:t,onPointerEnter:tl(e.onPointerEnter,()=>d("POINTER_ENTER")),onPointerLeave:tl(e.onPointerLeave,()=>d("POINTER_LEAVE"))})))}),bI=f.forwardRef((e,t)=>{const n=ds(Wa,e.__scopeScrollArea),{forceMount:r,...o}=e,[s,a]=f.useState(!1),c=e.orientation==="horizontal",d=Hm(()=>{if(n.viewport){const p=n.viewport.offsetWidth{const{orientation:n="vertical",...r}=e,o=ds(Wa,e.__scopeScrollArea),s=f.useRef(null),a=f.useRef(0),[c,d]=f.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),p=SI(c.viewport,c.content),h={...r,sizes:c,onSizesChange:d,hasThumb:p>0&&p<1,onThumbChange:v=>s.current=v,onThumbPointerUp:()=>a.current=0,onThumbPointerDown:v=>a.current=v};function m(v,b){return GK(v,a.current,c,b)}return n==="horizontal"?f.createElement(LK,sr({},h,{ref:t,onThumbPositionChange:()=>{if(o.viewport&&s.current){const v=o.viewport.scrollLeft,b=n4(v,c,o.dir);s.current.style.transform=`translate3d(${b}px, 0, 0)`}},onWheelScroll:v=>{o.viewport&&(o.viewport.scrollLeft=v)},onDragScroll:v=>{o.viewport&&(o.viewport.scrollLeft=m(v,o.dir))}})):n==="vertical"?f.createElement(BK,sr({},h,{ref:t,onThumbPositionChange:()=>{if(o.viewport&&s.current){const v=o.viewport.scrollTop,b=n4(v,c);s.current.style.transform=`translate3d(0, ${b}px, 0)`}},onWheelScroll:v=>{o.viewport&&(o.viewport.scrollTop=v)},onDragScroll:v=>{o.viewport&&(o.viewport.scrollTop=m(v))}})):null}),LK=f.forwardRef((e,t)=>{const{sizes:n,onSizesChange:r,...o}=e,s=ds(Wa,e.__scopeScrollArea),[a,c]=f.useState(),d=f.useRef(null),p=bl(t,d,s.onScrollbarXChange);return f.useEffect(()=>{d.current&&c(getComputedStyle(d.current))},[d]),f.createElement(xI,sr({"data-orientation":"horizontal"},o,{ref:p,sizes:n,style:{bottom:0,left:s.dir==="rtl"?"var(--radix-scroll-area-corner-width)":0,right:s.dir==="ltr"?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":Fm(n)+"px",...e.style},onThumbPointerDown:h=>e.onThumbPointerDown(h.x),onDragScroll:h=>e.onDragScroll(h.x),onWheelScroll:(h,m)=>{if(s.viewport){const v=s.viewport.scrollLeft+h.deltaX;e.onWheelScroll(v),kI(v,m)&&h.preventDefault()}},onResize:()=>{d.current&&s.viewport&&a&&r({content:s.viewport.scrollWidth,viewport:s.viewport.offsetWidth,scrollbar:{size:d.current.clientWidth,paddingStart:kh(a.paddingLeft),paddingEnd:kh(a.paddingRight)}})}}))}),BK=f.forwardRef((e,t)=>{const{sizes:n,onSizesChange:r,...o}=e,s=ds(Wa,e.__scopeScrollArea),[a,c]=f.useState(),d=f.useRef(null),p=bl(t,d,s.onScrollbarYChange);return f.useEffect(()=>{d.current&&c(getComputedStyle(d.current))},[d]),f.createElement(xI,sr({"data-orientation":"vertical"},o,{ref:p,sizes:n,style:{top:0,right:s.dir==="ltr"?0:void 0,left:s.dir==="rtl"?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":Fm(n)+"px",...e.style},onThumbPointerDown:h=>e.onThumbPointerDown(h.y),onDragScroll:h=>e.onDragScroll(h.y),onWheelScroll:(h,m)=>{if(s.viewport){const v=s.viewport.scrollTop+h.deltaY;e.onWheelScroll(v),kI(v,m)&&h.preventDefault()}},onResize:()=>{d.current&&s.viewport&&a&&r({content:s.viewport.scrollHeight,viewport:s.viewport.offsetHeight,scrollbar:{size:d.current.clientHeight,paddingStart:kh(a.paddingTop),paddingEnd:kh(a.paddingBottom)}})}}))}),[FK,yI]=vI(Wa),xI=f.forwardRef((e,t)=>{const{__scopeScrollArea:n,sizes:r,hasThumb:o,onThumbChange:s,onThumbPointerUp:a,onThumbPointerDown:c,onThumbPositionChange:d,onDragScroll:p,onWheelScroll:h,onResize:m,...v}=e,b=ds(Wa,n),[w,y]=f.useState(null),S=bl(t,A=>y(A)),_=f.useRef(null),k=f.useRef(""),j=b.viewport,I=r.content-r.viewport,E=Gi(h),O=Gi(d),R=Hm(m,10);function M(A){if(_.current){const T=A.clientX-_.current.left,$=A.clientY-_.current.top;p({x:T,y:$})}}return f.useEffect(()=>{const A=T=>{const $=T.target;(w==null?void 0:w.contains($))&&E(T,I)};return document.addEventListener("wheel",A,{passive:!1}),()=>document.removeEventListener("wheel",A,{passive:!1})},[j,w,I,E]),f.useEffect(O,[r,O]),_c(w,R),_c(b.content,R),f.createElement(FK,{scope:n,scrollbar:w,hasThumb:o,onThumbChange:Gi(s),onThumbPointerUp:Gi(a),onThumbPositionChange:O,onThumbPointerDown:Gi(c)},f.createElement(Wd.div,sr({},v,{ref:S,style:{position:"absolute",...v.style},onPointerDown:tl(e.onPointerDown,A=>{A.button===0&&(A.target.setPointerCapture(A.pointerId),_.current=w.getBoundingClientRect(),k.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",M(A))}),onPointerMove:tl(e.onPointerMove,M),onPointerUp:tl(e.onPointerUp,A=>{const T=A.target;T.hasPointerCapture(A.pointerId)&&T.releasePointerCapture(A.pointerId),document.body.style.webkitUserSelect=k.current,_.current=null})})))}),P1="ScrollAreaThumb",HK=f.forwardRef((e,t)=>{const{forceMount:n,...r}=e,o=yI(P1,e.__scopeScrollArea);return f.createElement(Vd,{present:n||o.hasThumb},f.createElement(WK,sr({ref:t},r)))}),WK=f.forwardRef((e,t)=>{const{__scopeScrollArea:n,style:r,...o}=e,s=ds(P1,n),a=yI(P1,n),{onThumbPositionChange:c}=a,d=bl(t,m=>a.onThumbChange(m)),p=f.useRef(),h=Hm(()=>{p.current&&(p.current(),p.current=void 0)},100);return f.useEffect(()=>{const m=s.viewport;if(m){const v=()=>{if(h(),!p.current){const b=qK(m,c);p.current=b,c()}};return c(),m.addEventListener("scroll",v),()=>m.removeEventListener("scroll",v)}},[s.viewport,h,c]),f.createElement(Wd.div,sr({"data-state":a.hasThumb?"visible":"hidden"},o,{ref:d,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...r},onPointerDownCapture:tl(e.onPointerDownCapture,m=>{const b=m.target.getBoundingClientRect(),w=m.clientX-b.left,y=m.clientY-b.top;a.onThumbPointerDown({x:w,y})}),onPointerUp:tl(e.onPointerUp,a.onThumbPointerUp)}))}),wI="ScrollAreaCorner",VK=f.forwardRef((e,t)=>{const n=ds(wI,e.__scopeScrollArea),r=!!(n.scrollbarX&&n.scrollbarY);return n.type!=="scroll"&&r?f.createElement(UK,sr({},e,{ref:t})):null}),UK=f.forwardRef((e,t)=>{const{__scopeScrollArea:n,...r}=e,o=ds(wI,n),[s,a]=f.useState(0),[c,d]=f.useState(0),p=!!(s&&c);return _c(o.scrollbarX,()=>{var h;const m=((h=o.scrollbarX)===null||h===void 0?void 0:h.offsetHeight)||0;o.onCornerHeightChange(m),d(m)}),_c(o.scrollbarY,()=>{var h;const m=((h=o.scrollbarY)===null||h===void 0?void 0:h.offsetWidth)||0;o.onCornerWidthChange(m),a(m)}),p?f.createElement(Wd.div,sr({},r,{ref:t,style:{width:s,height:c,position:"absolute",right:o.dir==="ltr"?0:void 0,left:o.dir==="rtl"?0:void 0,bottom:0,...e.style}})):null});function kh(e){return e?parseInt(e,10):0}function SI(e,t){const n=e/t;return isNaN(n)?0:n}function Fm(e){const t=SI(e.viewport,e.content),n=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,r=(e.scrollbar.size-n)*t;return Math.max(r,18)}function GK(e,t,n,r="ltr"){const o=Fm(n),s=o/2,a=t||s,c=o-a,d=n.scrollbar.paddingStart+a,p=n.scrollbar.size-n.scrollbar.paddingEnd-c,h=n.content-n.viewport,m=r==="ltr"?[0,h]:[h*-1,0];return CI([d,p],m)(e)}function n4(e,t,n="ltr"){const r=Fm(t),o=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,s=t.scrollbar.size-o,a=t.content-t.viewport,c=s-r,d=n==="ltr"?[0,a]:[a*-1,0],p=OK(e,d);return CI([0,a],[0,c])(p)}function CI(e,t){return n=>{if(e[0]===e[1]||t[0]===t[1])return t[0];const r=(t[1]-t[0])/(e[1]-e[0]);return t[0]+r*(n-e[0])}}function kI(e,t){return e>0&&e{})=>{let n={left:e.scrollLeft,top:e.scrollTop},r=0;return function o(){const s={left:e.scrollLeft,top:e.scrollTop},a=n.left!==s.left,c=n.top!==s.top;(a||c)&&t(),n=s,r=window.requestAnimationFrame(o)}(),()=>window.cancelAnimationFrame(r)};function Hm(e,t){const n=Gi(e),r=f.useRef(0);return f.useEffect(()=>()=>window.clearTimeout(r.current),[]),f.useCallback(()=>{window.clearTimeout(r.current),r.current=window.setTimeout(n,t)},[n,t])}function _c(e,t){const n=Gi(t);_1(()=>{let r=0;if(e){const o=new ResizeObserver(()=>{cancelAnimationFrame(r),r=window.requestAnimationFrame(n)});return o.observe(e),()=>{window.cancelAnimationFrame(r),o.unobserve(e)}}},[e,n])}const KK=DK,XK=TK,r4=NK,o4=HK,YK=VK;var QK=ao((e,{scrollbarSize:t,offsetScrollbars:n,scrollbarHovered:r,hidden:o})=>({root:{overflow:"hidden"},viewport:{width:"100%",height:"100%",paddingRight:n?Ue(t):void 0,paddingBottom:n?Ue(t):void 0},scrollbar:{display:o?"none":"flex",userSelect:"none",touchAction:"none",boxSizing:"border-box",padding:`calc(${Ue(t)} / 5)`,transition:"background-color 150ms ease, opacity 150ms ease","&:hover":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[8]:e.colors.gray[0],[`& .${cC("thumb")}`]:{backgroundColor:e.colorScheme==="dark"?e.fn.rgba(e.white,.5):e.fn.rgba(e.black,.5)}},'&[data-orientation="vertical"]':{width:Ue(t)},'&[data-orientation="horizontal"]':{flexDirection:"column",height:Ue(t)},'&[data-state="hidden"]':{display:"none",opacity:0}},thumb:{ref:cC("thumb"),flex:1,backgroundColor:e.colorScheme==="dark"?e.fn.rgba(e.white,.4):e.fn.rgba(e.black,.4),borderRadius:Ue(t),position:"relative",transition:"background-color 150ms ease",display:o?"none":void 0,overflow:"hidden","&::before":{content:'""',position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",width:"100%",height:"100%",minWidth:Ue(44),minHeight:Ue(44)}},corner:{backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[0],transition:"opacity 150ms ease",opacity:r?1:0,display:o?"none":void 0}}));const JK=QK;var ZK=Object.defineProperty,eX=Object.defineProperties,tX=Object.getOwnPropertyDescriptors,_h=Object.getOwnPropertySymbols,_I=Object.prototype.hasOwnProperty,PI=Object.prototype.propertyIsEnumerable,s4=(e,t,n)=>t in e?ZK(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,j1=(e,t)=>{for(var n in t||(t={}))_I.call(t,n)&&s4(e,n,t[n]);if(_h)for(var n of _h(t))PI.call(t,n)&&s4(e,n,t[n]);return e},jI=(e,t)=>eX(e,tX(t)),II=(e,t)=>{var n={};for(var r in e)_I.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&_h)for(var r of _h(e))t.indexOf(r)<0&&PI.call(e,r)&&(n[r]=e[r]);return n};const EI={scrollbarSize:12,scrollHideDelay:1e3,type:"hover",offsetScrollbars:!1},Wm=f.forwardRef((e,t)=>{const n=Sr("ScrollArea",EI,e),{children:r,className:o,classNames:s,styles:a,scrollbarSize:c,scrollHideDelay:d,type:p,dir:h,offsetScrollbars:m,viewportRef:v,onScrollPositionChange:b,unstyled:w,variant:y,viewportProps:S}=n,_=II(n,["children","className","classNames","styles","scrollbarSize","scrollHideDelay","type","dir","offsetScrollbars","viewportRef","onScrollPositionChange","unstyled","variant","viewportProps"]),[k,j]=f.useState(!1),I=Fa(),{classes:E,cx:O}=JK({scrollbarSize:c,offsetScrollbars:m,scrollbarHovered:k,hidden:p==="never"},{name:"ScrollArea",classNames:s,styles:a,unstyled:w,variant:y});return H.createElement(KK,{type:p==="never"?"always":p,scrollHideDelay:d,dir:h||I.dir,ref:t,asChild:!0},H.createElement(Io,j1({className:O(E.root,o)},_),H.createElement(XK,jI(j1({},S),{className:E.viewport,ref:v,onScroll:typeof b=="function"?({currentTarget:R})=>b({x:R.scrollLeft,y:R.scrollTop}):void 0}),r),H.createElement(r4,{orientation:"horizontal",className:E.scrollbar,forceMount:!0,onMouseEnter:()=>j(!0),onMouseLeave:()=>j(!1)},H.createElement(o4,{className:E.thumb})),H.createElement(r4,{orientation:"vertical",className:E.scrollbar,forceMount:!0,onMouseEnter:()=>j(!0),onMouseLeave:()=>j(!1)},H.createElement(o4,{className:E.thumb})),H.createElement(YK,{className:E.corner})))}),OI=f.forwardRef((e,t)=>{const n=Sr("ScrollAreaAutosize",EI,e),{children:r,classNames:o,styles:s,scrollbarSize:a,scrollHideDelay:c,type:d,dir:p,offsetScrollbars:h,viewportRef:m,onScrollPositionChange:v,unstyled:b,sx:w,variant:y,viewportProps:S}=n,_=II(n,["children","classNames","styles","scrollbarSize","scrollHideDelay","type","dir","offsetScrollbars","viewportRef","onScrollPositionChange","unstyled","sx","variant","viewportProps"]);return H.createElement(Io,jI(j1({},_),{ref:t,sx:[{display:"flex"},...vj(w)]}),H.createElement(Io,{sx:{display:"flex",flexDirection:"column",flex:1}},H.createElement(Wm,{classNames:o,styles:s,scrollHideDelay:c,scrollbarSize:a,type:d,dir:p,offsetScrollbars:h,viewportRef:m,onScrollPositionChange:v,unstyled:b,variant:y,viewportProps:S},r)))});OI.displayName="@mantine/core/ScrollAreaAutosize";Wm.displayName="@mantine/core/ScrollArea";Wm.Autosize=OI;const RI=Wm;var nX=Object.defineProperty,rX=Object.defineProperties,oX=Object.getOwnPropertyDescriptors,Ph=Object.getOwnPropertySymbols,MI=Object.prototype.hasOwnProperty,DI=Object.prototype.propertyIsEnumerable,a4=(e,t,n)=>t in e?nX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,i4=(e,t)=>{for(var n in t||(t={}))MI.call(t,n)&&a4(e,n,t[n]);if(Ph)for(var n of Ph(t))DI.call(t,n)&&a4(e,n,t[n]);return e},sX=(e,t)=>rX(e,oX(t)),aX=(e,t)=>{var n={};for(var r in e)MI.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Ph)for(var r of Ph(e))t.indexOf(r)<0&&DI.call(e,r)&&(n[r]=e[r]);return n};const Vm=f.forwardRef((e,t)=>{var n=e,{style:r}=n,o=aX(n,["style"]);return H.createElement(RI,sX(i4({},o),{style:i4({width:"100%"},r),viewportProps:{tabIndex:-1},viewportRef:t}),o.children)});Vm.displayName="@mantine/core/SelectScrollArea";var iX=ao(()=>({dropdown:{},itemsWrapper:{padding:Ue(4),display:"flex",width:"100%",boxSizing:"border-box"}}));const lX=iX;function Uc(e){return e.split("-")[1]}function My(e){return e==="y"?"height":"width"}function js(e){return e.split("-")[0]}function Oi(e){return["top","bottom"].includes(js(e))?"x":"y"}function l4(e,t,n){let{reference:r,floating:o}=e;const s=r.x+r.width/2-o.width/2,a=r.y+r.height/2-o.height/2,c=Oi(t),d=My(c),p=r[d]/2-o[d]/2,h=c==="x";let m;switch(js(t)){case"top":m={x:s,y:r.y-o.height};break;case"bottom":m={x:s,y:r.y+r.height};break;case"right":m={x:r.x+r.width,y:a};break;case"left":m={x:r.x-o.width,y:a};break;default:m={x:r.x,y:r.y}}switch(Uc(t)){case"start":m[c]-=p*(n&&h?-1:1);break;case"end":m[c]+=p*(n&&h?-1:1)}return m}const cX=async(e,t,n)=>{const{placement:r="bottom",strategy:o="absolute",middleware:s=[],platform:a}=n,c=s.filter(Boolean),d=await(a.isRTL==null?void 0:a.isRTL(t));let p=await a.getElementRects({reference:e,floating:t,strategy:o}),{x:h,y:m}=l4(p,r,d),v=r,b={},w=0;for(let y=0;y({name:"arrow",options:e,async fn(t){const{x:n,y:r,placement:o,rects:s,platform:a,elements:c}=t,{element:d,padding:p=0}=Na(e,t)||{};if(d==null)return{};const h=Dy(p),m={x:n,y:r},v=Oi(o),b=My(v),w=await a.getDimensions(d),y=v==="y",S=y?"top":"left",_=y?"bottom":"right",k=y?"clientHeight":"clientWidth",j=s.reference[b]+s.reference[v]-m[v]-s.floating[b],I=m[v]-s.reference[v],E=await(a.getOffsetParent==null?void 0:a.getOffsetParent(d));let O=E?E[k]:0;O&&await(a.isElement==null?void 0:a.isElement(E))||(O=c.floating[k]||s.floating[b]);const R=j/2-I/2,M=O/2-w[b]/2-1,A=gi(h[S],M),T=gi(h[_],M),$=A,Q=O-w[b]-T,B=O/2-w[b]/2+R,V=I1($,B,Q),q=Uc(o)!=null&&B!=V&&s.reference[b]/2-(B<$?A:T)-w[b]/2<0?B<$?$-B:Q-B:0;return{[v]:m[v]-q,data:{[v]:V,centerOffset:B-V+q}}}}),uX=["top","right","bottom","left"];uX.reduce((e,t)=>e.concat(t,t+"-start",t+"-end"),[]);const dX={left:"right",right:"left",bottom:"top",top:"bottom"};function jh(e){return e.replace(/left|right|bottom|top/g,t=>dX[t])}function fX(e,t,n){n===void 0&&(n=!1);const r=Uc(e),o=Oi(e),s=My(o);let a=o==="x"?r===(n?"end":"start")?"right":"left":r==="start"?"bottom":"top";return t.reference[s]>t.floating[s]&&(a=jh(a)),{main:a,cross:jh(a)}}const pX={start:"end",end:"start"};function ov(e){return e.replace(/start|end/g,t=>pX[t])}const hX=function(e){return e===void 0&&(e={}),{name:"flip",options:e,async fn(t){var n;const{placement:r,middlewareData:o,rects:s,initialPlacement:a,platform:c,elements:d}=t,{mainAxis:p=!0,crossAxis:h=!0,fallbackPlacements:m,fallbackStrategy:v="bestFit",fallbackAxisSideDirection:b="none",flipAlignment:w=!0,...y}=Na(e,t),S=js(r),_=js(a)===a,k=await(c.isRTL==null?void 0:c.isRTL(d.floating)),j=m||(_||!w?[jh(a)]:function($){const Q=jh($);return[ov($),Q,ov(Q)]}(a));m||b==="none"||j.push(...function($,Q,B,V){const q=Uc($);let G=function(D,L,W){const Y=["left","right"],ae=["right","left"],be=["top","bottom"],ie=["bottom","top"];switch(D){case"top":case"bottom":return W?L?ae:Y:L?Y:ae;case"left":case"right":return L?be:ie;default:return[]}}(js($),B==="start",V);return q&&(G=G.map(D=>D+"-"+q),Q&&(G=G.concat(G.map(ov)))),G}(a,w,b,k));const I=[a,...j],E=await Ay(t,y),O=[];let R=((n=o.flip)==null?void 0:n.overflows)||[];if(p&&O.push(E[S]),h){const{main:$,cross:Q}=fX(r,s,k);O.push(E[$],E[Q])}if(R=[...R,{placement:r,overflows:O}],!O.every($=>$<=0)){var M,A;const $=(((M=o.flip)==null?void 0:M.index)||0)+1,Q=I[$];if(Q)return{data:{index:$,overflows:R},reset:{placement:Q}};let B=(A=R.filter(V=>V.overflows[0]<=0).sort((V,q)=>V.overflows[1]-q.overflows[1])[0])==null?void 0:A.placement;if(!B)switch(v){case"bestFit":{var T;const V=(T=R.map(q=>[q.placement,q.overflows.filter(G=>G>0).reduce((G,D)=>G+D,0)]).sort((q,G)=>q[1]-G[1])[0])==null?void 0:T[0];V&&(B=V);break}case"initialPlacement":B=a}if(r!==B)return{reset:{placement:B}}}return{}}}};function u4(e){const t=gi(...e.map(r=>r.left)),n=gi(...e.map(r=>r.top));return{x:t,y:n,width:Ks(...e.map(r=>r.right))-t,height:Ks(...e.map(r=>r.bottom))-n}}const mX=function(e){return e===void 0&&(e={}),{name:"inline",options:e,async fn(t){const{placement:n,elements:r,rects:o,platform:s,strategy:a}=t,{padding:c=2,x:d,y:p}=Na(e,t),h=Array.from(await(s.getClientRects==null?void 0:s.getClientRects(r.reference))||[]),m=function(y){const S=y.slice().sort((j,I)=>j.y-I.y),_=[];let k=null;for(let j=0;jk.height/2?_.push([I]):_[_.length-1].push(I),k=I}return _.map(j=>Pc(u4(j)))}(h),v=Pc(u4(h)),b=Dy(c),w=await s.getElementRects({reference:{getBoundingClientRect:function(){if(m.length===2&&m[0].left>m[1].right&&d!=null&&p!=null)return m.find(y=>d>y.left-b.left&&dy.top-b.top&&p=2){if(Oi(n)==="x"){const E=m[0],O=m[m.length-1],R=js(n)==="top",M=E.top,A=O.bottom,T=R?E.left:O.left,$=R?E.right:O.right;return{top:M,bottom:A,left:T,right:$,width:$-T,height:A-M,x:T,y:M}}const y=js(n)==="left",S=Ks(...m.map(E=>E.right)),_=gi(...m.map(E=>E.left)),k=m.filter(E=>y?E.left===_:E.right===S),j=k[0].top,I=k[k.length-1].bottom;return{top:j,bottom:I,left:_,right:S,width:S-_,height:I-j,x:_,y:j}}return v}},floating:r.floating,strategy:a});return o.reference.x!==w.reference.x||o.reference.y!==w.reference.y||o.reference.width!==w.reference.width||o.reference.height!==w.reference.height?{reset:{rects:w}}:{}}}},gX=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){const{x:n,y:r}=t,o=await async function(s,a){const{placement:c,platform:d,elements:p}=s,h=await(d.isRTL==null?void 0:d.isRTL(p.floating)),m=js(c),v=Uc(c),b=Oi(c)==="x",w=["left","top"].includes(m)?-1:1,y=h&&b?-1:1,S=Na(a,s);let{mainAxis:_,crossAxis:k,alignmentAxis:j}=typeof S=="number"?{mainAxis:S,crossAxis:0,alignmentAxis:null}:{mainAxis:0,crossAxis:0,alignmentAxis:null,...S};return v&&typeof j=="number"&&(k=v==="end"?-1*j:j),b?{x:k*y,y:_*w}:{x:_*w,y:k*y}}(t,e);return{x:n+o.x,y:r+o.y,data:o}}}};function AI(e){return e==="x"?"y":"x"}const vX=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:r,placement:o}=t,{mainAxis:s=!0,crossAxis:a=!1,limiter:c={fn:S=>{let{x:_,y:k}=S;return{x:_,y:k}}},...d}=Na(e,t),p={x:n,y:r},h=await Ay(t,d),m=Oi(js(o)),v=AI(m);let b=p[m],w=p[v];if(s){const S=m==="y"?"bottom":"right";b=I1(b+h[m==="y"?"top":"left"],b,b-h[S])}if(a){const S=v==="y"?"bottom":"right";w=I1(w+h[v==="y"?"top":"left"],w,w-h[S])}const y=c.fn({...t,[m]:b,[v]:w});return{...y,data:{x:y.x-n,y:y.y-r}}}}},bX=function(e){return e===void 0&&(e={}),{options:e,fn(t){const{x:n,y:r,placement:o,rects:s,middlewareData:a}=t,{offset:c=0,mainAxis:d=!0,crossAxis:p=!0}=Na(e,t),h={x:n,y:r},m=Oi(o),v=AI(m);let b=h[m],w=h[v];const y=Na(c,t),S=typeof y=="number"?{mainAxis:y,crossAxis:0}:{mainAxis:0,crossAxis:0,...y};if(d){const j=m==="y"?"height":"width",I=s.reference[m]-s.floating[j]+S.mainAxis,E=s.reference[m]+s.reference[j]-S.mainAxis;bE&&(b=E)}if(p){var _,k;const j=m==="y"?"width":"height",I=["top","left"].includes(js(o)),E=s.reference[v]-s.floating[j]+(I&&((_=a.offset)==null?void 0:_[v])||0)+(I?0:S.crossAxis),O=s.reference[v]+s.reference[j]+(I?0:((k=a.offset)==null?void 0:k[v])||0)-(I?S.crossAxis:0);wO&&(w=O)}return{[m]:b,[v]:w}}}},yX=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){const{placement:n,rects:r,platform:o,elements:s}=t,{apply:a=()=>{},...c}=Na(e,t),d=await Ay(t,c),p=js(n),h=Uc(n),m=Oi(n)==="x",{width:v,height:b}=r.floating;let w,y;p==="top"||p==="bottom"?(w=p,y=h===(await(o.isRTL==null?void 0:o.isRTL(s.floating))?"start":"end")?"left":"right"):(y=p,w=h==="end"?"top":"bottom");const S=b-d[w],_=v-d[y],k=!t.middlewareData.shift;let j=S,I=_;if(m){const O=v-d.left-d.right;I=h||k?gi(_,O):O}else{const O=b-d.top-d.bottom;j=h||k?gi(S,O):O}if(k&&!h){const O=Ks(d.left,0),R=Ks(d.right,0),M=Ks(d.top,0),A=Ks(d.bottom,0);m?I=v-2*(O!==0||R!==0?O+R:Ks(d.left,d.right)):j=b-2*(M!==0||A!==0?M+A:Ks(d.top,d.bottom))}await a({...t,availableWidth:I,availableHeight:j});const E=await o.getDimensions(s.floating);return v!==E.width||b!==E.height?{reset:{rects:!0}}:{}}}};function zo(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function sa(e){return zo(e).getComputedStyle(e)}function TI(e){return e instanceof zo(e).Node}function vi(e){return TI(e)?(e.nodeName||"").toLowerCase():"#document"}function Ms(e){return e instanceof HTMLElement||e instanceof zo(e).HTMLElement}function d4(e){return typeof ShadowRoot<"u"&&(e instanceof zo(e).ShadowRoot||e instanceof ShadowRoot)}function fd(e){const{overflow:t,overflowX:n,overflowY:r,display:o}=sa(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&!["inline","contents"].includes(o)}function xX(e){return["table","td","th"].includes(vi(e))}function E1(e){const t=Ty(),n=sa(e);return n.transform!=="none"||n.perspective!=="none"||!!n.containerType&&n.containerType!=="normal"||!t&&!!n.backdropFilter&&n.backdropFilter!=="none"||!t&&!!n.filter&&n.filter!=="none"||["transform","perspective","filter"].some(r=>(n.willChange||"").includes(r))||["paint","layout","strict","content"].some(r=>(n.contain||"").includes(r))}function Ty(){return!(typeof CSS>"u"||!CSS.supports)&&CSS.supports("-webkit-backdrop-filter","none")}function Um(e){return["html","body","#document"].includes(vi(e))}const O1=Math.min,pc=Math.max,Ih=Math.round,up=Math.floor,bi=e=>({x:e,y:e});function NI(e){const t=sa(e);let n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;const o=Ms(e),s=o?e.offsetWidth:n,a=o?e.offsetHeight:r,c=Ih(n)!==s||Ih(r)!==a;return c&&(n=s,r=a),{width:n,height:r,$:c}}function Pa(e){return e instanceof Element||e instanceof zo(e).Element}function Ny(e){return Pa(e)?e:e.contextElement}function hc(e){const t=Ny(e);if(!Ms(t))return bi(1);const n=t.getBoundingClientRect(),{width:r,height:o,$:s}=NI(t);let a=(s?Ih(n.width):n.width)/r,c=(s?Ih(n.height):n.height)/o;return a&&Number.isFinite(a)||(a=1),c&&Number.isFinite(c)||(c=1),{x:a,y:c}}const wX=bi(0);function $I(e){const t=zo(e);return Ty()&&t.visualViewport?{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}:wX}function dl(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);const o=e.getBoundingClientRect(),s=Ny(e);let a=bi(1);t&&(r?Pa(r)&&(a=hc(r)):a=hc(e));const c=function(v,b,w){return b===void 0&&(b=!1),!(!w||b&&w!==zo(v))&&b}(s,n,r)?$I(s):bi(0);let d=(o.left+c.x)/a.x,p=(o.top+c.y)/a.y,h=o.width/a.x,m=o.height/a.y;if(s){const v=zo(s),b=r&&Pa(r)?zo(r):r;let w=v.frameElement;for(;w&&r&&b!==v;){const y=hc(w),S=w.getBoundingClientRect(),_=getComputedStyle(w),k=S.left+(w.clientLeft+parseFloat(_.paddingLeft))*y.x,j=S.top+(w.clientTop+parseFloat(_.paddingTop))*y.y;d*=y.x,p*=y.y,h*=y.x,m*=y.y,d+=k,p+=j,w=zo(w).frameElement}}return Pc({width:h,height:m,x:d,y:p})}function Gm(e){return Pa(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ja(e){var t;return(t=(TI(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function zI(e){return dl(ja(e)).left+Gm(e).scrollLeft}function jc(e){if(vi(e)==="html")return e;const t=e.assignedSlot||e.parentNode||d4(e)&&e.host||ja(e);return d4(t)?t.host:t}function LI(e){const t=jc(e);return Um(t)?e.ownerDocument?e.ownerDocument.body:e.body:Ms(t)&&fd(t)?t:LI(t)}function Eh(e,t){var n;t===void 0&&(t=[]);const r=LI(e),o=r===((n=e.ownerDocument)==null?void 0:n.body),s=zo(r);return o?t.concat(s,s.visualViewport||[],fd(r)?r:[]):t.concat(r,Eh(r))}function f4(e,t,n){let r;if(t==="viewport")r=function(o,s){const a=zo(o),c=ja(o),d=a.visualViewport;let p=c.clientWidth,h=c.clientHeight,m=0,v=0;if(d){p=d.width,h=d.height;const b=Ty();(!b||b&&s==="fixed")&&(m=d.offsetLeft,v=d.offsetTop)}return{width:p,height:h,x:m,y:v}}(e,n);else if(t==="document")r=function(o){const s=ja(o),a=Gm(o),c=o.ownerDocument.body,d=pc(s.scrollWidth,s.clientWidth,c.scrollWidth,c.clientWidth),p=pc(s.scrollHeight,s.clientHeight,c.scrollHeight,c.clientHeight);let h=-a.scrollLeft+zI(o);const m=-a.scrollTop;return sa(c).direction==="rtl"&&(h+=pc(s.clientWidth,c.clientWidth)-d),{width:d,height:p,x:h,y:m}}(ja(e));else if(Pa(t))r=function(o,s){const a=dl(o,!0,s==="fixed"),c=a.top+o.clientTop,d=a.left+o.clientLeft,p=Ms(o)?hc(o):bi(1);return{width:o.clientWidth*p.x,height:o.clientHeight*p.y,x:d*p.x,y:c*p.y}}(t,n);else{const o=$I(e);r={...t,x:t.x-o.x,y:t.y-o.y}}return Pc(r)}function BI(e,t){const n=jc(e);return!(n===t||!Pa(n)||Um(n))&&(sa(n).position==="fixed"||BI(n,t))}function SX(e,t,n){const r=Ms(t),o=ja(t),s=n==="fixed",a=dl(e,!0,s,t);let c={scrollLeft:0,scrollTop:0};const d=bi(0);if(r||!r&&!s)if((vi(t)!=="body"||fd(o))&&(c=Gm(t)),Ms(t)){const p=dl(t,!0,s,t);d.x=p.x+t.clientLeft,d.y=p.y+t.clientTop}else o&&(d.x=zI(o));return{x:a.left+c.scrollLeft-d.x,y:a.top+c.scrollTop-d.y,width:a.width,height:a.height}}function p4(e,t){return Ms(e)&&sa(e).position!=="fixed"?t?t(e):e.offsetParent:null}function h4(e,t){const n=zo(e);if(!Ms(e))return n;let r=p4(e,t);for(;r&&xX(r)&&sa(r).position==="static";)r=p4(r,t);return r&&(vi(r)==="html"||vi(r)==="body"&&sa(r).position==="static"&&!E1(r))?n:r||function(o){let s=jc(o);for(;Ms(s)&&!Um(s);){if(E1(s))return s;s=jc(s)}return null}(e)||n}const CX={convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{rect:t,offsetParent:n,strategy:r}=e;const o=Ms(n),s=ja(n);if(n===s)return t;let a={scrollLeft:0,scrollTop:0},c=bi(1);const d=bi(0);if((o||!o&&r!=="fixed")&&((vi(n)!=="body"||fd(s))&&(a=Gm(n)),Ms(n))){const p=dl(n);c=hc(n),d.x=p.x+n.clientLeft,d.y=p.y+n.clientTop}return{width:t.width*c.x,height:t.height*c.y,x:t.x*c.x-a.scrollLeft*c.x+d.x,y:t.y*c.y-a.scrollTop*c.y+d.y}},getDocumentElement:ja,getClippingRect:function(e){let{element:t,boundary:n,rootBoundary:r,strategy:o}=e;const s=[...n==="clippingAncestors"?function(d,p){const h=p.get(d);if(h)return h;let m=Eh(d).filter(y=>Pa(y)&&vi(y)!=="body"),v=null;const b=sa(d).position==="fixed";let w=b?jc(d):d;for(;Pa(w)&&!Um(w);){const y=sa(w),S=E1(w);S||y.position!=="fixed"||(v=null),(b?!S&&!v:!S&&y.position==="static"&&v&&["absolute","fixed"].includes(v.position)||fd(w)&&!S&&BI(d,w))?m=m.filter(_=>_!==w):v=y,w=jc(w)}return p.set(d,m),m}(t,this._c):[].concat(n),r],a=s[0],c=s.reduce((d,p)=>{const h=f4(t,p,o);return d.top=pc(h.top,d.top),d.right=O1(h.right,d.right),d.bottom=O1(h.bottom,d.bottom),d.left=pc(h.left,d.left),d},f4(t,a,o));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}},getOffsetParent:h4,getElementRects:async function(e){let{reference:t,floating:n,strategy:r}=e;const o=this.getOffsetParent||h4,s=this.getDimensions;return{reference:SX(t,await o(n),r),floating:{x:0,y:0,...await s(n)}}},getClientRects:function(e){return Array.from(e.getClientRects())},getDimensions:function(e){return NI(e)},getScale:hc,isElement:Pa,isRTL:function(e){return getComputedStyle(e).direction==="rtl"}};function kX(e,t,n,r){r===void 0&&(r={});const{ancestorScroll:o=!0,ancestorResize:s=!0,elementResize:a=typeof ResizeObserver=="function",layoutShift:c=typeof IntersectionObserver=="function",animationFrame:d=!1}=r,p=Ny(e),h=o||s?[...p?Eh(p):[],...Eh(t)]:[];h.forEach(S=>{o&&S.addEventListener("scroll",n,{passive:!0}),s&&S.addEventListener("resize",n)});const m=p&&c?function(S,_){let k,j=null;const I=ja(S);function E(){clearTimeout(k),j&&j.disconnect(),j=null}return function O(R,M){R===void 0&&(R=!1),M===void 0&&(M=1),E();const{left:A,top:T,width:$,height:Q}=S.getBoundingClientRect();if(R||_(),!$||!Q)return;const B={rootMargin:-up(T)+"px "+-up(I.clientWidth-(A+$))+"px "+-up(I.clientHeight-(T+Q))+"px "+-up(A)+"px",threshold:pc(0,O1(1,M))||1};let V=!0;function q(G){const D=G[0].intersectionRatio;if(D!==M){if(!V)return O();D?O(!1,D):k=setTimeout(()=>{O(!1,1e-7)},100)}V=!1}try{j=new IntersectionObserver(q,{...B,root:I.ownerDocument})}catch{j=new IntersectionObserver(q,B)}j.observe(S)}(!0),E}(p,n):null;let v,b=-1,w=null;a&&(w=new ResizeObserver(S=>{let[_]=S;_&&_.target===p&&w&&(w.unobserve(t),cancelAnimationFrame(b),b=requestAnimationFrame(()=>{w&&w.observe(t)})),n()}),p&&!d&&w.observe(p),w.observe(t));let y=d?dl(e):null;return d&&function S(){const _=dl(e);!y||_.x===y.x&&_.y===y.y&&_.width===y.width&&_.height===y.height||n(),y=_,v=requestAnimationFrame(S)}(),n(),()=>{h.forEach(S=>{o&&S.removeEventListener("scroll",n),s&&S.removeEventListener("resize",n)}),m&&m(),w&&w.disconnect(),w=null,d&&cancelAnimationFrame(v)}}const _X=(e,t,n)=>{const r=new Map,o={platform:CX,...n},s={...o.platform,_c:r};return cX(e,t,{...o,platform:s})},PX=e=>{const{element:t,padding:n}=e;function r(o){return Object.prototype.hasOwnProperty.call(o,"current")}return{name:"arrow",options:e,fn(o){return r(t)?t.current!=null?c4({element:t.current,padding:n}).fn(o):{}:t?c4({element:t,padding:n}).fn(o):{}}}};var Dp=typeof document<"u"?f.useLayoutEffect:f.useEffect;function Oh(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let n,r,o;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(n=e.length,n!=t.length)return!1;for(r=n;r--!==0;)if(!Oh(e[r],t[r]))return!1;return!0}if(o=Object.keys(e),n=o.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!Object.prototype.hasOwnProperty.call(t,o[r]))return!1;for(r=n;r--!==0;){const s=o[r];if(!(s==="_owner"&&e.$$typeof)&&!Oh(e[s],t[s]))return!1}return!0}return e!==e&&t!==t}function m4(e){const t=f.useRef(e);return Dp(()=>{t.current=e}),t}function jX(e){e===void 0&&(e={});const{placement:t="bottom",strategy:n="absolute",middleware:r=[],platform:o,whileElementsMounted:s,open:a}=e,[c,d]=f.useState({x:null,y:null,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[p,h]=f.useState(r);Oh(p,r)||h(r);const m=f.useRef(null),v=f.useRef(null),b=f.useRef(c),w=m4(s),y=m4(o),[S,_]=f.useState(null),[k,j]=f.useState(null),I=f.useCallback(T=>{m.current!==T&&(m.current=T,_(T))},[]),E=f.useCallback(T=>{v.current!==T&&(v.current=T,j(T))},[]),O=f.useCallback(()=>{if(!m.current||!v.current)return;const T={placement:t,strategy:n,middleware:p};y.current&&(T.platform=y.current),_X(m.current,v.current,T).then($=>{const Q={...$,isPositioned:!0};R.current&&!Oh(b.current,Q)&&(b.current=Q,_i.flushSync(()=>{d(Q)}))})},[p,t,n,y]);Dp(()=>{a===!1&&b.current.isPositioned&&(b.current.isPositioned=!1,d(T=>({...T,isPositioned:!1})))},[a]);const R=f.useRef(!1);Dp(()=>(R.current=!0,()=>{R.current=!1}),[]),Dp(()=>{if(S&&k){if(w.current)return w.current(S,k,O);O()}},[S,k,O,w]);const M=f.useMemo(()=>({reference:m,floating:v,setReference:I,setFloating:E}),[I,E]),A=f.useMemo(()=>({reference:S,floating:k}),[S,k]);return f.useMemo(()=>({...c,update:O,refs:M,elements:A,reference:I,floating:E}),[c,O,M,A,I,E])}var IX=typeof document<"u"?f.useLayoutEffect:f.useEffect;function EX(){const e=new Map;return{emit(t,n){var r;(r=e.get(t))==null||r.forEach(o=>o(n))},on(t,n){e.set(t,[...e.get(t)||[],n])},off(t,n){e.set(t,(e.get(t)||[]).filter(r=>r!==n))}}}const OX=f.createContext(null),RX=()=>f.useContext(OX);function MX(e){return(e==null?void 0:e.ownerDocument)||document}function DX(e){return MX(e).defaultView||window}function dp(e){return e?e instanceof DX(e).Element:!1}const AX=J1["useInsertionEffect".toString()],TX=AX||(e=>e());function NX(e){const t=f.useRef(()=>{});return TX(()=>{t.current=e}),f.useCallback(function(){for(var n=arguments.length,r=new Array(n),o=0;oEX())[0],[p,h]=f.useState(null),m=f.useCallback(_=>{const k=dp(_)?{getBoundingClientRect:()=>_.getBoundingClientRect(),contextElement:_}:_;o.refs.setReference(k)},[o.refs]),v=f.useCallback(_=>{(dp(_)||_===null)&&(a.current=_,h(_)),(dp(o.refs.reference.current)||o.refs.reference.current===null||_!==null&&!dp(_))&&o.refs.setReference(_)},[o.refs]),b=f.useMemo(()=>({...o.refs,setReference:v,setPositionReference:m,domReference:a}),[o.refs,v,m]),w=f.useMemo(()=>({...o.elements,domReference:p}),[o.elements,p]),y=NX(n),S=f.useMemo(()=>({...o,refs:b,elements:w,dataRef:c,nodeId:r,events:d,open:t,onOpenChange:y}),[o,r,d,t,y,b,w]);return IX(()=>{const _=s==null?void 0:s.nodesRef.current.find(k=>k.id===r);_&&(_.context=S)}),f.useMemo(()=>({...o,context:S,refs:b,reference:v,positionReference:m}),[o,b,S,v,m])}function zX({opened:e,floating:t,position:n,positionDependencies:r}){const[o,s]=f.useState(0);f.useEffect(()=>{if(t.refs.reference.current&&t.refs.floating.current)return kX(t.refs.reference.current,t.refs.floating.current,t.update)},[t.refs.reference.current,t.refs.floating.current,e,o,n]),Ps(()=>{t.update()},r),Ps(()=>{s(a=>a+1)},[e])}function LX(e){const t=[gX(e.offset)];return e.middlewares.shift&&t.push(vX({limiter:bX()})),e.middlewares.flip&&t.push(hX()),e.middlewares.inline&&t.push(mX()),t.push(PX({element:e.arrowRef,padding:e.arrowOffset})),t}function BX(e){const[t,n]=dd({value:e.opened,defaultValue:e.defaultOpened,finalValue:!1,onChange:e.onChange}),r=()=>{var a;(a=e.onClose)==null||a.call(e),n(!1)},o=()=>{var a,c;t?((a=e.onClose)==null||a.call(e),n(!1)):((c=e.onOpen)==null||c.call(e),n(!0))},s=$X({placement:e.position,middleware:[...LX(e),...e.width==="target"?[yX({apply({rects:a}){var c,d;Object.assign((d=(c=s.refs.floating.current)==null?void 0:c.style)!=null?d:{},{width:`${a.reference.width}px`})}})]:[]]});return zX({opened:e.opened,position:e.position,positionDependencies:e.positionDependencies,floating:s}),Ps(()=>{var a;(a=e.onPositionChange)==null||a.call(e,s.placement)},[s.placement]),Ps(()=>{var a,c;e.opened?(c=e.onOpen)==null||c.call(e):(a=e.onClose)==null||a.call(e)},[e.opened]),{floating:s,controlled:typeof e.opened=="boolean",opened:t,onClose:r,onToggle:o}}const FI={context:"Popover component was not found in the tree",children:"Popover.Target component children should be an element or a component that accepts ref. Fragments, strings, numbers and other primitive values are not supported"},[FX,HI]=IU(FI.context);var HX=Object.defineProperty,WX=Object.defineProperties,VX=Object.getOwnPropertyDescriptors,Rh=Object.getOwnPropertySymbols,WI=Object.prototype.hasOwnProperty,VI=Object.prototype.propertyIsEnumerable,g4=(e,t,n)=>t in e?HX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,fp=(e,t)=>{for(var n in t||(t={}))WI.call(t,n)&&g4(e,n,t[n]);if(Rh)for(var n of Rh(t))VI.call(t,n)&&g4(e,n,t[n]);return e},UX=(e,t)=>WX(e,VX(t)),GX=(e,t)=>{var n={};for(var r in e)WI.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Rh)for(var r of Rh(e))t.indexOf(r)<0&&VI.call(e,r)&&(n[r]=e[r]);return n};const qX={refProp:"ref",popupType:"dialog"},UI=f.forwardRef((e,t)=>{const n=Sr("PopoverTarget",qX,e),{children:r,refProp:o,popupType:s}=n,a=GX(n,["children","refProp","popupType"]);if(!yj(r))throw new Error(FI.children);const c=a,d=HI(),p=Hd(d.reference,r.ref,t),h=d.withRoles?{"aria-haspopup":s,"aria-expanded":d.opened,"aria-controls":d.getDropdownId(),id:d.getTargetId()}:{};return f.cloneElement(r,fp(UX(fp(fp(fp({},c),h),d.targetProps),{className:wj(d.targetProps.className,c.className,r.props.className),[o]:p}),d.controlled?null:{onClick:d.onToggle}))});UI.displayName="@mantine/core/PopoverTarget";var KX=ao((e,{radius:t,shadow:n})=>({dropdown:{position:"absolute",backgroundColor:e.white,background:e.colorScheme==="dark"?e.colors.dark[6]:e.white,border:`${Ue(1)} solid ${e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[2]}`,padding:`${e.spacing.sm} ${e.spacing.md}`,boxShadow:e.shadows[n]||n||"none",borderRadius:e.fn.radius(t),"&:focus":{outline:0}},arrow:{backgroundColor:"inherit",border:`${Ue(1)} solid ${e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[2]}`,zIndex:1}}));const XX=KX;var YX=Object.defineProperty,v4=Object.getOwnPropertySymbols,QX=Object.prototype.hasOwnProperty,JX=Object.prototype.propertyIsEnumerable,b4=(e,t,n)=>t in e?YX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Hl=(e,t)=>{for(var n in t||(t={}))QX.call(t,n)&&b4(e,n,t[n]);if(v4)for(var n of v4(t))JX.call(t,n)&&b4(e,n,t[n]);return e};const y4={entering:"in",entered:"in",exiting:"out",exited:"out","pre-exiting":"out","pre-entering":"out"};function ZX({transition:e,state:t,duration:n,timingFunction:r}){const o={transitionDuration:`${n}ms`,transitionTimingFunction:r};return typeof e=="string"?e in op?Hl(Hl(Hl({transitionProperty:op[e].transitionProperty},o),op[e].common),op[e][y4[t]]):null:Hl(Hl(Hl({transitionProperty:e.transitionProperty},o),e.common),e[y4[t]])}function eY({duration:e,exitDuration:t,timingFunction:n,mounted:r,onEnter:o,onExit:s,onEntered:a,onExited:c}){const d=Fa(),p=Ij(),h=d.respectReducedMotion?p:!1,[m,v]=f.useState(h?0:e),[b,w]=f.useState(r?"entered":"exited"),y=f.useRef(-1),S=_=>{const k=_?o:s,j=_?a:c;w(_?"pre-entering":"pre-exiting"),window.clearTimeout(y.current);const I=h?0:_?e:t;if(v(I),I===0)typeof k=="function"&&k(),typeof j=="function"&&j(),w(_?"entered":"exited");else{const E=window.setTimeout(()=>{typeof k=="function"&&k(),w(_?"entering":"exiting")},10);y.current=window.setTimeout(()=>{window.clearTimeout(E),typeof j=="function"&&j(),w(_?"entered":"exited")},I)}};return Ps(()=>{S(r)},[r]),f.useEffect(()=>()=>window.clearTimeout(y.current),[]),{transitionDuration:m,transitionStatus:b,transitionTimingFunction:n||d.transitionTimingFunction}}function GI({keepMounted:e,transition:t,duration:n=250,exitDuration:r=n,mounted:o,children:s,timingFunction:a,onExit:c,onEntered:d,onEnter:p,onExited:h}){const{transitionDuration:m,transitionStatus:v,transitionTimingFunction:b}=eY({mounted:o,exitDuration:r,duration:n,timingFunction:a,onExit:c,onEntered:d,onEnter:p,onExited:h});return m===0?o?H.createElement(H.Fragment,null,s({})):e?s({display:"none"}):null:v==="exited"?e?s({display:"none"}):null:H.createElement(H.Fragment,null,s(ZX({transition:t,duration:m,state:v,timingFunction:b})))}GI.displayName="@mantine/core/Transition";function qI({children:e,active:t=!0,refProp:n="ref"}){const r=lG(t),o=Hd(r,e==null?void 0:e.ref);return yj(e)?f.cloneElement(e,{[n]:o}):e}qI.displayName="@mantine/core/FocusTrap";var tY=Object.defineProperty,nY=Object.defineProperties,rY=Object.getOwnPropertyDescriptors,x4=Object.getOwnPropertySymbols,oY=Object.prototype.hasOwnProperty,sY=Object.prototype.propertyIsEnumerable,w4=(e,t,n)=>t in e?tY(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Za=(e,t)=>{for(var n in t||(t={}))oY.call(t,n)&&w4(e,n,t[n]);if(x4)for(var n of x4(t))sY.call(t,n)&&w4(e,n,t[n]);return e},pp=(e,t)=>nY(e,rY(t));function S4(e,t,n,r){return e==="center"||r==="center"?{top:t}:e==="end"?{bottom:n}:e==="start"?{top:n}:{}}function C4(e,t,n,r,o){return e==="center"||r==="center"?{left:t}:e==="end"?{[o==="ltr"?"right":"left"]:n}:e==="start"?{[o==="ltr"?"left":"right"]:n}:{}}const aY={bottom:"borderTopLeftRadius",left:"borderTopRightRadius",right:"borderBottomLeftRadius",top:"borderBottomRightRadius"};function iY({position:e,arrowSize:t,arrowOffset:n,arrowRadius:r,arrowPosition:o,arrowX:s,arrowY:a,dir:c}){const[d,p="center"]=e.split("-"),h={width:Ue(t),height:Ue(t),transform:"rotate(45deg)",position:"absolute",[aY[d]]:Ue(r)},m=Ue(-t/2);return d==="left"?pp(Za(Za({},h),S4(p,a,n,o)),{right:m,borderLeftColor:"transparent",borderBottomColor:"transparent"}):d==="right"?pp(Za(Za({},h),S4(p,a,n,o)),{left:m,borderRightColor:"transparent",borderTopColor:"transparent"}):d==="top"?pp(Za(Za({},h),C4(p,s,n,o,c)),{bottom:m,borderTopColor:"transparent",borderLeftColor:"transparent"}):d==="bottom"?pp(Za(Za({},h),C4(p,s,n,o,c)),{top:m,borderBottomColor:"transparent",borderRightColor:"transparent"}):{}}var lY=Object.defineProperty,cY=Object.defineProperties,uY=Object.getOwnPropertyDescriptors,Mh=Object.getOwnPropertySymbols,KI=Object.prototype.hasOwnProperty,XI=Object.prototype.propertyIsEnumerable,k4=(e,t,n)=>t in e?lY(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,dY=(e,t)=>{for(var n in t||(t={}))KI.call(t,n)&&k4(e,n,t[n]);if(Mh)for(var n of Mh(t))XI.call(t,n)&&k4(e,n,t[n]);return e},fY=(e,t)=>cY(e,uY(t)),pY=(e,t)=>{var n={};for(var r in e)KI.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Mh)for(var r of Mh(e))t.indexOf(r)<0&&XI.call(e,r)&&(n[r]=e[r]);return n};const YI=f.forwardRef((e,t)=>{var n=e,{position:r,arrowSize:o,arrowOffset:s,arrowRadius:a,arrowPosition:c,visible:d,arrowX:p,arrowY:h}=n,m=pY(n,["position","arrowSize","arrowOffset","arrowRadius","arrowPosition","visible","arrowX","arrowY"]);const v=Fa();return d?H.createElement("div",fY(dY({},m),{ref:t,style:iY({position:r,arrowSize:o,arrowOffset:s,arrowRadius:a,arrowPosition:c,dir:v.dir,arrowX:p,arrowY:h})})):null});YI.displayName="@mantine/core/FloatingArrow";var hY=Object.defineProperty,mY=Object.defineProperties,gY=Object.getOwnPropertyDescriptors,Dh=Object.getOwnPropertySymbols,QI=Object.prototype.hasOwnProperty,JI=Object.prototype.propertyIsEnumerable,_4=(e,t,n)=>t in e?hY(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Wl=(e,t)=>{for(var n in t||(t={}))QI.call(t,n)&&_4(e,n,t[n]);if(Dh)for(var n of Dh(t))JI.call(t,n)&&_4(e,n,t[n]);return e},hp=(e,t)=>mY(e,gY(t)),vY=(e,t)=>{var n={};for(var r in e)QI.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Dh)for(var r of Dh(e))t.indexOf(r)<0&&JI.call(e,r)&&(n[r]=e[r]);return n};const bY={};function ZI(e){var t;const n=Sr("PopoverDropdown",bY,e),{style:r,className:o,children:s,onKeyDownCapture:a}=n,c=vY(n,["style","className","children","onKeyDownCapture"]),d=HI(),{classes:p,cx:h}=XX({radius:d.radius,shadow:d.shadow},{name:d.__staticSelector,classNames:d.classNames,styles:d.styles,unstyled:d.unstyled,variant:d.variant}),m=tG({opened:d.opened,shouldReturnFocus:d.returnFocus}),v=d.withRoles?{"aria-labelledby":d.getTargetId(),id:d.getDropdownId(),role:"dialog"}:{};return d.disabled?null:H.createElement(Zj,hp(Wl({},d.portalProps),{withinPortal:d.withinPortal}),H.createElement(GI,hp(Wl({mounted:d.opened},d.transitionProps),{transition:d.transitionProps.transition||"fade",duration:(t=d.transitionProps.duration)!=null?t:150,keepMounted:d.keepMounted,exitDuration:typeof d.transitionProps.exitDuration=="number"?d.transitionProps.exitDuration:d.transitionProps.duration}),b=>{var w,y;return H.createElement(qI,{active:d.trapFocus},H.createElement(Io,Wl(hp(Wl({},v),{tabIndex:-1,ref:d.floating,style:hp(Wl(Wl({},r),b),{zIndex:d.zIndex,top:(w=d.y)!=null?w:0,left:(y=d.x)!=null?y:0,width:d.width==="target"?void 0:Ue(d.width)}),className:h(p.dropdown,o),onKeyDownCapture:OU(d.onClose,{active:d.closeOnEscape,onTrigger:m,onKeyDown:a}),"data-position":d.placement}),c),s,H.createElement(YI,{ref:d.arrowRef,arrowX:d.arrowX,arrowY:d.arrowY,visible:d.withArrow,position:d.placement,arrowSize:d.arrowSize,arrowRadius:d.arrowRadius,arrowOffset:d.arrowOffset,arrowPosition:d.arrowPosition,className:p.arrow})))}))}ZI.displayName="@mantine/core/PopoverDropdown";function yY(e,t){if(e==="rtl"&&(t.includes("right")||t.includes("left"))){const[n,r]=t.split("-"),o=n==="right"?"left":"right";return r===void 0?o:`${o}-${r}`}return t}var P4=Object.getOwnPropertySymbols,xY=Object.prototype.hasOwnProperty,wY=Object.prototype.propertyIsEnumerable,SY=(e,t)=>{var n={};for(var r in e)xY.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&P4)for(var r of P4(e))t.indexOf(r)<0&&wY.call(e,r)&&(n[r]=e[r]);return n};const CY={position:"bottom",offset:8,positionDependencies:[],transitionProps:{transition:"fade",duration:150},middlewares:{flip:!0,shift:!0,inline:!1},arrowSize:7,arrowOffset:5,arrowRadius:0,arrowPosition:"side",closeOnClickOutside:!0,withinPortal:!1,closeOnEscape:!0,trapFocus:!1,withRoles:!0,returnFocus:!1,clickOutsideEvents:["mousedown","touchstart"],zIndex:Py("popover"),__staticSelector:"Popover",width:"max-content"};function Gc(e){var t,n,r,o,s,a;const c=f.useRef(null),d=Sr("Popover",CY,e),{children:p,position:h,offset:m,onPositionChange:v,positionDependencies:b,opened:w,transitionProps:y,width:S,middlewares:_,withArrow:k,arrowSize:j,arrowOffset:I,arrowRadius:E,arrowPosition:O,unstyled:R,classNames:M,styles:A,closeOnClickOutside:T,withinPortal:$,portalProps:Q,closeOnEscape:B,clickOutsideEvents:V,trapFocus:q,onClose:G,onOpen:D,onChange:L,zIndex:W,radius:Y,shadow:ae,id:be,defaultOpened:ie,__staticSelector:X,withRoles:K,disabled:U,returnFocus:se,variant:re,keepMounted:oe}=d,pe=SY(d,["children","position","offset","onPositionChange","positionDependencies","opened","transitionProps","width","middlewares","withArrow","arrowSize","arrowOffset","arrowRadius","arrowPosition","unstyled","classNames","styles","closeOnClickOutside","withinPortal","portalProps","closeOnEscape","clickOutsideEvents","trapFocus","onClose","onOpen","onChange","zIndex","radius","shadow","id","defaultOpened","__staticSelector","withRoles","disabled","returnFocus","variant","keepMounted"]),[le,ge]=f.useState(null),[ke,xe]=f.useState(null),de=Iy(be),Te=Fa(),Oe=BX({middlewares:_,width:S,position:yY(Te.dir,h),offset:typeof m=="number"?m+(k?j/2:0):m,arrowRef:c,arrowOffset:I,onPositionChange:v,positionDependencies:b,opened:w,defaultOpened:ie,onChange:L,onOpen:D,onClose:G});QU(()=>Oe.opened&&T&&Oe.onClose(),V,[le,ke]);const $e=f.useCallback(ct=>{ge(ct),Oe.floating.reference(ct)},[Oe.floating.reference]),kt=f.useCallback(ct=>{xe(ct),Oe.floating.floating(ct)},[Oe.floating.floating]);return H.createElement(FX,{value:{returnFocus:se,disabled:U,controlled:Oe.controlled,reference:$e,floating:kt,x:Oe.floating.x,y:Oe.floating.y,arrowX:(r=(n=(t=Oe.floating)==null?void 0:t.middlewareData)==null?void 0:n.arrow)==null?void 0:r.x,arrowY:(a=(s=(o=Oe.floating)==null?void 0:o.middlewareData)==null?void 0:s.arrow)==null?void 0:a.y,opened:Oe.opened,arrowRef:c,transitionProps:y,width:S,withArrow:k,arrowSize:j,arrowOffset:I,arrowRadius:E,arrowPosition:O,placement:Oe.floating.placement,trapFocus:q,withinPortal:$,portalProps:Q,zIndex:W,radius:Y,shadow:ae,closeOnEscape:B,onClose:Oe.onClose,onToggle:Oe.onToggle,getTargetId:()=>`${de}-target`,getDropdownId:()=>`${de}-dropdown`,withRoles:K,targetProps:pe,__staticSelector:X,classNames:M,styles:A,unstyled:R,variant:re,keepMounted:oe}},p)}Gc.Target=UI;Gc.Dropdown=ZI;Gc.displayName="@mantine/core/Popover";var kY=Object.defineProperty,Ah=Object.getOwnPropertySymbols,eE=Object.prototype.hasOwnProperty,tE=Object.prototype.propertyIsEnumerable,j4=(e,t,n)=>t in e?kY(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,_Y=(e,t)=>{for(var n in t||(t={}))eE.call(t,n)&&j4(e,n,t[n]);if(Ah)for(var n of Ah(t))tE.call(t,n)&&j4(e,n,t[n]);return e},PY=(e,t)=>{var n={};for(var r in e)eE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Ah)for(var r of Ah(e))t.indexOf(r)<0&&tE.call(e,r)&&(n[r]=e[r]);return n};function jY(e){var t=e,{children:n,component:r="div",maxHeight:o=220,direction:s="column",id:a,innerRef:c,__staticSelector:d,styles:p,classNames:h,unstyled:m}=t,v=PY(t,["children","component","maxHeight","direction","id","innerRef","__staticSelector","styles","classNames","unstyled"]);const{classes:b}=lX(null,{name:d,styles:p,classNames:h,unstyled:m});return H.createElement(Gc.Dropdown,_Y({p:0,onMouseDown:w=>w.preventDefault()},v),H.createElement("div",{style:{maxHeight:Ue(o),display:"flex"}},H.createElement(Io,{component:r||"div",id:`${a}-items`,"aria-labelledby":`${a}-label`,role:"listbox",onMouseDown:w=>w.preventDefault(),style:{flex:1,overflowY:r!==Vm?"auto":void 0},"data-combobox-popover":!0,tabIndex:-1,ref:c},H.createElement("div",{className:b.itemsWrapper,style:{flexDirection:s}},n))))}function hi({opened:e,transitionProps:t={transition:"fade",duration:0},shadow:n,withinPortal:r,portalProps:o,children:s,__staticSelector:a,onDirectionChange:c,switchDirectionOnFlip:d,zIndex:p,dropdownPosition:h,positionDependencies:m=[],classNames:v,styles:b,unstyled:w,readOnly:y,variant:S}){return H.createElement(Gc,{unstyled:w,classNames:v,styles:b,width:"target",withRoles:!1,opened:e,middlewares:{flip:h==="flip",shift:!1},position:h==="flip"?"bottom":h,positionDependencies:m,zIndex:p,__staticSelector:a,withinPortal:r,portalProps:o,transitionProps:t,shadow:n,disabled:y,onPositionChange:_=>d&&(c==null?void 0:c(_==="top"?"column-reverse":"column")),variant:S},s)}hi.Target=Gc.Target;hi.Dropdown=jY;var IY=Object.defineProperty,EY=Object.defineProperties,OY=Object.getOwnPropertyDescriptors,Th=Object.getOwnPropertySymbols,nE=Object.prototype.hasOwnProperty,rE=Object.prototype.propertyIsEnumerable,I4=(e,t,n)=>t in e?IY(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,mp=(e,t)=>{for(var n in t||(t={}))nE.call(t,n)&&I4(e,n,t[n]);if(Th)for(var n of Th(t))rE.call(t,n)&&I4(e,n,t[n]);return e},RY=(e,t)=>EY(e,OY(t)),MY=(e,t)=>{var n={};for(var r in e)nE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Th)for(var r of Th(e))t.indexOf(r)<0&&rE.call(e,r)&&(n[r]=e[r]);return n};function oE(e,t,n){const r=Sr(e,t,n),{label:o,description:s,error:a,required:c,classNames:d,styles:p,className:h,unstyled:m,__staticSelector:v,sx:b,errorProps:w,labelProps:y,descriptionProps:S,wrapperProps:_,id:k,size:j,style:I,inputContainer:E,inputWrapperOrder:O,withAsterisk:R,variant:M}=r,A=MY(r,["label","description","error","required","classNames","styles","className","unstyled","__staticSelector","sx","errorProps","labelProps","descriptionProps","wrapperProps","id","size","style","inputContainer","inputWrapperOrder","withAsterisk","variant"]),T=Iy(k),{systemStyles:$,rest:Q}=Bm(A),B=mp({label:o,description:s,error:a,required:c,classNames:d,className:h,__staticSelector:v,sx:b,errorProps:w,labelProps:y,descriptionProps:S,unstyled:m,styles:p,id:T,size:j,style:I,inputContainer:E,inputWrapperOrder:O,withAsterisk:R,variant:M},_);return RY(mp({},Q),{classNames:d,styles:p,unstyled:m,wrapperProps:mp(mp({},B),$),inputProps:{required:c,classNames:d,styles:p,unstyled:m,id:T,size:j,__staticSelector:v,error:a,variant:M}})}var DY=ao((e,t,{size:n})=>({label:{display:"inline-block",fontSize:Vt({size:n,sizes:e.fontSizes}),fontWeight:500,color:e.colorScheme==="dark"?e.colors.dark[0]:e.colors.gray[9],wordBreak:"break-word",cursor:"default",WebkitTapHighlightColor:"transparent"},required:{color:e.fn.variant({variant:"filled",color:"red"}).background}}));const AY=DY;var TY=Object.defineProperty,Nh=Object.getOwnPropertySymbols,sE=Object.prototype.hasOwnProperty,aE=Object.prototype.propertyIsEnumerable,E4=(e,t,n)=>t in e?TY(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,NY=(e,t)=>{for(var n in t||(t={}))sE.call(t,n)&&E4(e,n,t[n]);if(Nh)for(var n of Nh(t))aE.call(t,n)&&E4(e,n,t[n]);return e},$Y=(e,t)=>{var n={};for(var r in e)sE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Nh)for(var r of Nh(e))t.indexOf(r)<0&&aE.call(e,r)&&(n[r]=e[r]);return n};const zY={labelElement:"label",size:"sm"},$y=f.forwardRef((e,t)=>{const n=Sr("InputLabel",zY,e),{labelElement:r,children:o,required:s,size:a,classNames:c,styles:d,unstyled:p,className:h,htmlFor:m,__staticSelector:v,variant:b,onMouseDown:w}=n,y=$Y(n,["labelElement","children","required","size","classNames","styles","unstyled","className","htmlFor","__staticSelector","variant","onMouseDown"]),{classes:S,cx:_}=AY(null,{name:["InputWrapper",v],classNames:c,styles:d,unstyled:p,variant:b,size:a});return H.createElement(Io,NY({component:r,ref:t,className:_(S.label,h),htmlFor:r==="label"?m:void 0,onMouseDown:k=>{w==null||w(k),!k.defaultPrevented&&k.detail>1&&k.preventDefault()}},y),o,s&&H.createElement("span",{className:S.required,"aria-hidden":!0}," *"))});$y.displayName="@mantine/core/InputLabel";var LY=ao((e,t,{size:n})=>({error:{wordBreak:"break-word",color:e.fn.variant({variant:"filled",color:"red"}).background,fontSize:`calc(${Vt({size:n,sizes:e.fontSizes})} - ${Ue(2)})`,lineHeight:1.2,display:"block"}}));const BY=LY;var FY=Object.defineProperty,$h=Object.getOwnPropertySymbols,iE=Object.prototype.hasOwnProperty,lE=Object.prototype.propertyIsEnumerable,O4=(e,t,n)=>t in e?FY(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,HY=(e,t)=>{for(var n in t||(t={}))iE.call(t,n)&&O4(e,n,t[n]);if($h)for(var n of $h(t))lE.call(t,n)&&O4(e,n,t[n]);return e},WY=(e,t)=>{var n={};for(var r in e)iE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&$h)for(var r of $h(e))t.indexOf(r)<0&&lE.call(e,r)&&(n[r]=e[r]);return n};const VY={size:"sm"},zy=f.forwardRef((e,t)=>{const n=Sr("InputError",VY,e),{children:r,className:o,classNames:s,styles:a,unstyled:c,size:d,__staticSelector:p,variant:h}=n,m=WY(n,["children","className","classNames","styles","unstyled","size","__staticSelector","variant"]),{classes:v,cx:b}=BY(null,{name:["InputWrapper",p],classNames:s,styles:a,unstyled:c,variant:h,size:d});return H.createElement(kc,HY({className:b(v.error,o),ref:t},m),r)});zy.displayName="@mantine/core/InputError";var UY=ao((e,t,{size:n})=>({description:{wordBreak:"break-word",color:e.colorScheme==="dark"?e.colors.dark[2]:e.colors.gray[6],fontSize:`calc(${Vt({size:n,sizes:e.fontSizes})} - ${Ue(2)})`,lineHeight:1.2,display:"block"}}));const GY=UY;var qY=Object.defineProperty,zh=Object.getOwnPropertySymbols,cE=Object.prototype.hasOwnProperty,uE=Object.prototype.propertyIsEnumerable,R4=(e,t,n)=>t in e?qY(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,KY=(e,t)=>{for(var n in t||(t={}))cE.call(t,n)&&R4(e,n,t[n]);if(zh)for(var n of zh(t))uE.call(t,n)&&R4(e,n,t[n]);return e},XY=(e,t)=>{var n={};for(var r in e)cE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&zh)for(var r of zh(e))t.indexOf(r)<0&&uE.call(e,r)&&(n[r]=e[r]);return n};const YY={size:"sm"},Ly=f.forwardRef((e,t)=>{const n=Sr("InputDescription",YY,e),{children:r,className:o,classNames:s,styles:a,unstyled:c,size:d,__staticSelector:p,variant:h}=n,m=XY(n,["children","className","classNames","styles","unstyled","size","__staticSelector","variant"]),{classes:v,cx:b}=GY(null,{name:["InputWrapper",p],classNames:s,styles:a,unstyled:c,variant:h,size:d});return H.createElement(kc,KY({color:"dimmed",className:b(v.description,o),ref:t,unstyled:c},m),r)});Ly.displayName="@mantine/core/InputDescription";const dE=f.createContext({offsetBottom:!1,offsetTop:!1,describedBy:void 0}),QY=dE.Provider,JY=()=>f.useContext(dE);function ZY(e,{hasDescription:t,hasError:n}){const r=e.findIndex(d=>d==="input"),o=e[r-1],s=e[r+1];return{offsetBottom:t&&s==="description"||n&&s==="error",offsetTop:t&&o==="description"||n&&o==="error"}}var eQ=Object.defineProperty,tQ=Object.defineProperties,nQ=Object.getOwnPropertyDescriptors,M4=Object.getOwnPropertySymbols,rQ=Object.prototype.hasOwnProperty,oQ=Object.prototype.propertyIsEnumerable,D4=(e,t,n)=>t in e?eQ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,sQ=(e,t)=>{for(var n in t||(t={}))rQ.call(t,n)&&D4(e,n,t[n]);if(M4)for(var n of M4(t))oQ.call(t,n)&&D4(e,n,t[n]);return e},aQ=(e,t)=>tQ(e,nQ(t)),iQ=ao(e=>({root:aQ(sQ({},e.fn.fontStyles()),{lineHeight:e.lineHeight})}));const lQ=iQ;var cQ=Object.defineProperty,uQ=Object.defineProperties,dQ=Object.getOwnPropertyDescriptors,Lh=Object.getOwnPropertySymbols,fE=Object.prototype.hasOwnProperty,pE=Object.prototype.propertyIsEnumerable,A4=(e,t,n)=>t in e?cQ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,ei=(e,t)=>{for(var n in t||(t={}))fE.call(t,n)&&A4(e,n,t[n]);if(Lh)for(var n of Lh(t))pE.call(t,n)&&A4(e,n,t[n]);return e},T4=(e,t)=>uQ(e,dQ(t)),fQ=(e,t)=>{var n={};for(var r in e)fE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Lh)for(var r of Lh(e))t.indexOf(r)<0&&pE.call(e,r)&&(n[r]=e[r]);return n};const pQ={labelElement:"label",size:"sm",inputContainer:e=>e,inputWrapperOrder:["label","description","input","error"]},hE=f.forwardRef((e,t)=>{const n=Sr("InputWrapper",pQ,e),{className:r,label:o,children:s,required:a,id:c,error:d,description:p,labelElement:h,labelProps:m,descriptionProps:v,errorProps:b,classNames:w,styles:y,size:S,inputContainer:_,__staticSelector:k,unstyled:j,inputWrapperOrder:I,withAsterisk:E,variant:O}=n,R=fQ(n,["className","label","children","required","id","error","description","labelElement","labelProps","descriptionProps","errorProps","classNames","styles","size","inputContainer","__staticSelector","unstyled","inputWrapperOrder","withAsterisk","variant"]),{classes:M,cx:A}=lQ(null,{classNames:w,styles:y,name:["InputWrapper",k],unstyled:j,variant:O,size:S}),T={classNames:w,styles:y,unstyled:j,size:S,variant:O,__staticSelector:k},$=typeof E=="boolean"?E:a,Q=c?`${c}-error`:b==null?void 0:b.id,B=c?`${c}-description`:v==null?void 0:v.id,q=`${!!d&&typeof d!="boolean"?Q:""} ${p?B:""}`,G=q.trim().length>0?q.trim():void 0,D=o&&H.createElement($y,ei(ei({key:"label",labelElement:h,id:c?`${c}-label`:void 0,htmlFor:c,required:$},T),m),o),L=p&&H.createElement(Ly,T4(ei(ei({key:"description"},v),T),{size:(v==null?void 0:v.size)||T.size,id:(v==null?void 0:v.id)||B}),p),W=H.createElement(f.Fragment,{key:"input"},_(s)),Y=typeof d!="boolean"&&d&&H.createElement(zy,T4(ei(ei({},b),T),{size:(b==null?void 0:b.size)||T.size,key:"error",id:(b==null?void 0:b.id)||Q}),d),ae=I.map(be=>{switch(be){case"label":return D;case"input":return W;case"description":return L;case"error":return Y;default:return null}});return H.createElement(QY,{value:ei({describedBy:G},ZY(I,{hasDescription:!!L,hasError:!!Y}))},H.createElement(Io,ei({className:A(M.root,r),ref:t},R),ae))});hE.displayName="@mantine/core/InputWrapper";var hQ=Object.defineProperty,Bh=Object.getOwnPropertySymbols,mE=Object.prototype.hasOwnProperty,gE=Object.prototype.propertyIsEnumerable,N4=(e,t,n)=>t in e?hQ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,mQ=(e,t)=>{for(var n in t||(t={}))mE.call(t,n)&&N4(e,n,t[n]);if(Bh)for(var n of Bh(t))gE.call(t,n)&&N4(e,n,t[n]);return e},gQ=(e,t)=>{var n={};for(var r in e)mE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Bh)for(var r of Bh(e))t.indexOf(r)<0&&gE.call(e,r)&&(n[r]=e[r]);return n};const vQ={},vE=f.forwardRef((e,t)=>{const n=Sr("InputPlaceholder",vQ,e),{sx:r}=n,o=gQ(n,["sx"]);return H.createElement(Io,mQ({component:"span",sx:[s=>s.fn.placeholderStyles(),...vj(r)],ref:t},o))});vE.displayName="@mantine/core/InputPlaceholder";var bQ=Object.defineProperty,yQ=Object.defineProperties,xQ=Object.getOwnPropertyDescriptors,$4=Object.getOwnPropertySymbols,wQ=Object.prototype.hasOwnProperty,SQ=Object.prototype.propertyIsEnumerable,z4=(e,t,n)=>t in e?bQ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,gp=(e,t)=>{for(var n in t||(t={}))wQ.call(t,n)&&z4(e,n,t[n]);if($4)for(var n of $4(t))SQ.call(t,n)&&z4(e,n,t[n]);return e},sv=(e,t)=>yQ(e,xQ(t));const Yo={xs:Ue(30),sm:Ue(36),md:Ue(42),lg:Ue(50),xl:Ue(60)},CQ=["default","filled","unstyled"];function kQ({theme:e,variant:t}){return CQ.includes(t)?t==="default"?{border:`${Ue(1)} solid ${e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[4]}`,backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.white,transition:"border-color 100ms ease","&:focus, &:focus-within":e.focusRingStyles.inputStyles(e)}:t==="filled"?{border:`${Ue(1)} solid transparent`,backgroundColor:e.colorScheme==="dark"?e.colors.dark[5]:e.colors.gray[1],"&:focus, &:focus-within":e.focusRingStyles.inputStyles(e)}:{borderWidth:0,color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,backgroundColor:"transparent",minHeight:Ue(28),outline:0,"&:focus, &:focus-within":{outline:"none",borderColor:"transparent"},"&:disabled":{backgroundColor:"transparent","&:focus, &:focus-within":{outline:"none",borderColor:"transparent"}}}:null}var _Q=ao((e,{multiline:t,radius:n,invalid:r,rightSectionWidth:o,withRightSection:s,iconWidth:a,offsetBottom:c,offsetTop:d,pointer:p},{variant:h,size:m})=>{const v=e.fn.variant({variant:"filled",color:"red"}).background,b=h==="default"||h==="filled"?{minHeight:Vt({size:m,sizes:Yo}),paddingLeft:`calc(${Vt({size:m,sizes:Yo})} / 3)`,paddingRight:s?o||Vt({size:m,sizes:Yo}):`calc(${Vt({size:m,sizes:Yo})} / 3)`,borderRadius:e.fn.radius(n)}:h==="unstyled"&&s?{paddingRight:o||Vt({size:m,sizes:Yo})}:null;return{wrapper:{position:"relative",marginTop:d?`calc(${e.spacing.xs} / 2)`:void 0,marginBottom:c?`calc(${e.spacing.xs} / 2)`:void 0,"&:has(input:disabled)":{"& .mantine-Input-rightSection":{display:"none"}}},input:sv(gp(gp(sv(gp({},e.fn.fontStyles()),{height:t?h==="unstyled"?void 0:"auto":Vt({size:m,sizes:Yo}),WebkitTapHighlightColor:"transparent",lineHeight:t?e.lineHeight:`calc(${Vt({size:m,sizes:Yo})} - ${Ue(2)})`,appearance:"none",resize:"none",boxSizing:"border-box",fontSize:Vt({size:m,sizes:e.fontSizes}),width:"100%",color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,display:"block",textAlign:"left",cursor:p?"pointer":void 0}),kQ({theme:e,variant:h})),b),{"&:disabled, &[data-disabled]":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[1],color:e.colors.dark[2],opacity:.6,cursor:"not-allowed",pointerEvents:"none","&::placeholder":{color:e.colors.dark[2]}},"&[data-invalid]":{color:v,borderColor:v,"&::placeholder":{opacity:1,color:v}},"&[data-with-icon]":{paddingLeft:typeof a=="number"?Ue(a):Vt({size:m,sizes:Yo})},"&::placeholder":sv(gp({},e.fn.placeholderStyles()),{opacity:1}),"&::-webkit-inner-spin-button, &::-webkit-outer-spin-button, &::-webkit-search-decoration, &::-webkit-search-cancel-button, &::-webkit-search-results-button, &::-webkit-search-results-decoration":{appearance:"none"},"&[type=number]":{MozAppearance:"textfield"}}),icon:{pointerEvents:"none",position:"absolute",zIndex:1,left:0,top:0,bottom:0,display:"flex",alignItems:"center",justifyContent:"center",width:a?Ue(a):Vt({size:m,sizes:Yo}),color:r?e.colors.red[e.colorScheme==="dark"?6:7]:e.colorScheme==="dark"?e.colors.dark[2]:e.colors.gray[5]},rightSection:{position:"absolute",top:0,bottom:0,right:0,display:"flex",alignItems:"center",justifyContent:"center",width:o||Vt({size:m,sizes:Yo})}}});const PQ=_Q;var jQ=Object.defineProperty,IQ=Object.defineProperties,EQ=Object.getOwnPropertyDescriptors,Fh=Object.getOwnPropertySymbols,bE=Object.prototype.hasOwnProperty,yE=Object.prototype.propertyIsEnumerable,L4=(e,t,n)=>t in e?jQ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,vp=(e,t)=>{for(var n in t||(t={}))bE.call(t,n)&&L4(e,n,t[n]);if(Fh)for(var n of Fh(t))yE.call(t,n)&&L4(e,n,t[n]);return e},B4=(e,t)=>IQ(e,EQ(t)),OQ=(e,t)=>{var n={};for(var r in e)bE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Fh)for(var r of Fh(e))t.indexOf(r)<0&&yE.call(e,r)&&(n[r]=e[r]);return n};const RQ={size:"sm",variant:"default"},yl=f.forwardRef((e,t)=>{const n=Sr("Input",RQ,e),{className:r,error:o,required:s,disabled:a,variant:c,icon:d,style:p,rightSectionWidth:h,iconWidth:m,rightSection:v,rightSectionProps:b,radius:w,size:y,wrapperProps:S,classNames:_,styles:k,__staticSelector:j,multiline:I,sx:E,unstyled:O,pointer:R}=n,M=OQ(n,["className","error","required","disabled","variant","icon","style","rightSectionWidth","iconWidth","rightSection","rightSectionProps","radius","size","wrapperProps","classNames","styles","__staticSelector","multiline","sx","unstyled","pointer"]),{offsetBottom:A,offsetTop:T,describedBy:$}=JY(),{classes:Q,cx:B}=PQ({radius:w,multiline:I,invalid:!!o,rightSectionWidth:h?Ue(h):void 0,iconWidth:m,withRightSection:!!v,offsetBottom:A,offsetTop:T,pointer:R},{classNames:_,styles:k,name:["Input",j],unstyled:O,variant:c,size:y}),{systemStyles:V,rest:q}=Bm(M);return H.createElement(Io,vp(vp({className:B(Q.wrapper,r),sx:E,style:p},V),S),d&&H.createElement("div",{className:Q.icon},d),H.createElement(Io,B4(vp({component:"input"},q),{ref:t,required:s,"aria-invalid":!!o,"aria-describedby":$,disabled:a,"data-disabled":a||void 0,"data-with-icon":!!d||void 0,"data-invalid":!!o||void 0,className:Q.input})),v&&H.createElement("div",B4(vp({},b),{className:Q.rightSection}),v))});yl.displayName="@mantine/core/Input";yl.Wrapper=hE;yl.Label=$y;yl.Description=Ly;yl.Error=zy;yl.Placeholder=vE;const Ic=yl;var MQ=Object.defineProperty,Hh=Object.getOwnPropertySymbols,xE=Object.prototype.hasOwnProperty,wE=Object.prototype.propertyIsEnumerable,F4=(e,t,n)=>t in e?MQ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,H4=(e,t)=>{for(var n in t||(t={}))xE.call(t,n)&&F4(e,n,t[n]);if(Hh)for(var n of Hh(t))wE.call(t,n)&&F4(e,n,t[n]);return e},DQ=(e,t)=>{var n={};for(var r in e)xE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Hh)for(var r of Hh(e))t.indexOf(r)<0&&wE.call(e,r)&&(n[r]=e[r]);return n};const AQ={multiple:!1},SE=f.forwardRef((e,t)=>{const n=Sr("FileButton",AQ,e),{onChange:r,children:o,multiple:s,accept:a,name:c,form:d,resetRef:p,disabled:h,capture:m,inputProps:v}=n,b=DQ(n,["onChange","children","multiple","accept","name","form","resetRef","disabled","capture","inputProps"]),w=f.useRef(),y=()=>{!h&&w.current.click()},S=k=>{r(s?Array.from(k.currentTarget.files):k.currentTarget.files[0]||null)};return jj(p,()=>{w.current.value=""}),H.createElement(H.Fragment,null,o(H4({onClick:y},b)),H.createElement("input",H4({style:{display:"none"},type:"file",accept:a,multiple:s,onChange:S,ref:Hd(t,w),name:c,form:d,capture:m},v)))});SE.displayName="@mantine/core/FileButton";const CE={xs:Ue(16),sm:Ue(22),md:Ue(26),lg:Ue(30),xl:Ue(36)},TQ={xs:Ue(10),sm:Ue(12),md:Ue(14),lg:Ue(16),xl:Ue(18)};var NQ=ao((e,{disabled:t,radius:n,readOnly:r},{size:o,variant:s})=>({defaultValue:{display:"flex",alignItems:"center",backgroundColor:t?e.colorScheme==="dark"?e.colors.dark[5]:e.colors.gray[3]:e.colorScheme==="dark"?e.colors.dark[7]:s==="filled"?e.white:e.colors.gray[1],color:t?e.colorScheme==="dark"?e.colors.dark[1]:e.colors.gray[7]:e.colorScheme==="dark"?e.colors.dark[0]:e.colors.gray[7],height:Vt({size:o,sizes:CE}),paddingLeft:`calc(${Vt({size:o,sizes:e.spacing})} / 1.5)`,paddingRight:t||r?Vt({size:o,sizes:e.spacing}):0,fontWeight:500,fontSize:Vt({size:o,sizes:TQ}),borderRadius:Vt({size:n,sizes:e.radius}),cursor:t?"not-allowed":"default",userSelect:"none",maxWidth:`calc(100% - ${Ue(10)})`},defaultValueRemove:{color:e.colorScheme==="dark"?e.colors.dark[0]:e.colors.gray[7],marginLeft:`calc(${Vt({size:o,sizes:e.spacing})} / 6)`},defaultValueLabel:{display:"block",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}}));const $Q=NQ;var zQ=Object.defineProperty,Wh=Object.getOwnPropertySymbols,kE=Object.prototype.hasOwnProperty,_E=Object.prototype.propertyIsEnumerable,W4=(e,t,n)=>t in e?zQ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,LQ=(e,t)=>{for(var n in t||(t={}))kE.call(t,n)&&W4(e,n,t[n]);if(Wh)for(var n of Wh(t))_E.call(t,n)&&W4(e,n,t[n]);return e},BQ=(e,t)=>{var n={};for(var r in e)kE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Wh)for(var r of Wh(e))t.indexOf(r)<0&&_E.call(e,r)&&(n[r]=e[r]);return n};const FQ={xs:16,sm:22,md:24,lg:26,xl:30};function PE(e){var t=e,{label:n,classNames:r,styles:o,className:s,onRemove:a,disabled:c,readOnly:d,size:p,radius:h="sm",variant:m,unstyled:v}=t,b=BQ(t,["label","classNames","styles","className","onRemove","disabled","readOnly","size","radius","variant","unstyled"]);const{classes:w,cx:y}=$Q({disabled:c,readOnly:d,radius:h},{name:"MultiSelect",classNames:r,styles:o,unstyled:v,size:p,variant:m});return H.createElement("div",LQ({className:y(w.defaultValue,s)},b),H.createElement("span",{className:w.defaultValueLabel},n),!c&&!d&&H.createElement(aI,{"aria-hidden":!0,onMouseDown:a,size:FQ[p],radius:2,color:"blue",variant:"transparent",iconSize:"70%",className:w.defaultValueRemove,tabIndex:-1,unstyled:v}))}PE.displayName="@mantine/core/MultiSelect/DefaultValue";function HQ({data:e,searchable:t,limit:n,searchValue:r,filter:o,value:s,disableSelectedItemFiltering:a}){if(!t&&s.length===0)return e;if(!t){const d=[];for(let p=0;ph===e[p].value&&!e[p].disabled))&&d.push(e[p]);return d}const c=[];for(let d=0;dp===e[d].value&&!e[d].disabled),e[d])&&c.push(e[d]),!(c.length>=n));d+=1);return c}var WQ=Object.defineProperty,Vh=Object.getOwnPropertySymbols,jE=Object.prototype.hasOwnProperty,IE=Object.prototype.propertyIsEnumerable,V4=(e,t,n)=>t in e?WQ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,U4=(e,t)=>{for(var n in t||(t={}))jE.call(t,n)&&V4(e,n,t[n]);if(Vh)for(var n of Vh(t))IE.call(t,n)&&V4(e,n,t[n]);return e},VQ=(e,t)=>{var n={};for(var r in e)jE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Vh)for(var r of Vh(e))t.indexOf(r)<0&&IE.call(e,r)&&(n[r]=e[r]);return n};const UQ={xs:Ue(14),sm:Ue(18),md:Ue(20),lg:Ue(24),xl:Ue(28)};function GQ(e){var t=e,{size:n,error:r,style:o}=t,s=VQ(t,["size","error","style"]);const a=Fa(),c=Vt({size:n,sizes:UQ});return H.createElement("svg",U4({viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:U4({color:r?a.colors.red[6]:a.colors.gray[6],width:c,height:c},o),"data-chevron":!0},s),H.createElement("path",{d:"M4.93179 5.43179C4.75605 5.60753 4.75605 5.89245 4.93179 6.06819C5.10753 6.24392 5.39245 6.24392 5.56819 6.06819L7.49999 4.13638L9.43179 6.06819C9.60753 6.24392 9.89245 6.24392 10.0682 6.06819C10.2439 5.89245 10.2439 5.60753 10.0682 5.43179L7.81819 3.18179C7.73379 3.0974 7.61933 3.04999 7.49999 3.04999C7.38064 3.04999 7.26618 3.0974 7.18179 3.18179L4.93179 5.43179ZM10.0682 9.56819C10.2439 9.39245 10.2439 9.10753 10.0682 8.93179C9.89245 8.75606 9.60753 8.75606 9.43179 8.93179L7.49999 10.8636L5.56819 8.93179C5.39245 8.75606 5.10753 8.75606 4.93179 8.93179C4.75605 9.10753 4.75605 9.39245 4.93179 9.56819L7.18179 11.8182C7.35753 11.9939 7.64245 11.9939 7.81819 11.8182L10.0682 9.56819Z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"}))}var qQ=Object.defineProperty,KQ=Object.defineProperties,XQ=Object.getOwnPropertyDescriptors,G4=Object.getOwnPropertySymbols,YQ=Object.prototype.hasOwnProperty,QQ=Object.prototype.propertyIsEnumerable,q4=(e,t,n)=>t in e?qQ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,JQ=(e,t)=>{for(var n in t||(t={}))YQ.call(t,n)&&q4(e,n,t[n]);if(G4)for(var n of G4(t))QQ.call(t,n)&&q4(e,n,t[n]);return e},ZQ=(e,t)=>KQ(e,XQ(t));function EE({shouldClear:e,clearButtonProps:t,onClear:n,size:r,error:o}){return e?H.createElement(aI,ZQ(JQ({},t),{variant:"transparent",onClick:n,size:r,onMouseDown:s=>s.preventDefault()})):H.createElement(GQ,{error:o,size:r})}EE.displayName="@mantine/core/SelectRightSection";var eJ=Object.defineProperty,tJ=Object.defineProperties,nJ=Object.getOwnPropertyDescriptors,Uh=Object.getOwnPropertySymbols,OE=Object.prototype.hasOwnProperty,RE=Object.prototype.propertyIsEnumerable,K4=(e,t,n)=>t in e?eJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,av=(e,t)=>{for(var n in t||(t={}))OE.call(t,n)&&K4(e,n,t[n]);if(Uh)for(var n of Uh(t))RE.call(t,n)&&K4(e,n,t[n]);return e},X4=(e,t)=>tJ(e,nJ(t)),rJ=(e,t)=>{var n={};for(var r in e)OE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Uh)for(var r of Uh(e))t.indexOf(r)<0&&RE.call(e,r)&&(n[r]=e[r]);return n};function ME(e){var t=e,{styles:n,rightSection:r,rightSectionWidth:o,theme:s}=t,a=rJ(t,["styles","rightSection","rightSectionWidth","theme"]);if(r)return{rightSection:r,rightSectionWidth:o,styles:n};const c=typeof n=="function"?n(s):n;return{rightSection:!a.readOnly&&!(a.disabled&&a.shouldClear)&&H.createElement(EE,av({},a)),styles:X4(av({},c),{rightSection:X4(av({},c==null?void 0:c.rightSection),{pointerEvents:a.shouldClear?void 0:"none"})})}}var oJ=Object.defineProperty,sJ=Object.defineProperties,aJ=Object.getOwnPropertyDescriptors,Y4=Object.getOwnPropertySymbols,iJ=Object.prototype.hasOwnProperty,lJ=Object.prototype.propertyIsEnumerable,Q4=(e,t,n)=>t in e?oJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,cJ=(e,t)=>{for(var n in t||(t={}))iJ.call(t,n)&&Q4(e,n,t[n]);if(Y4)for(var n of Y4(t))lJ.call(t,n)&&Q4(e,n,t[n]);return e},uJ=(e,t)=>sJ(e,aJ(t)),dJ=ao((e,{invalid:t},{size:n})=>({wrapper:{position:"relative","&:has(input:disabled)":{cursor:"not-allowed",pointerEvents:"none","& .mantine-MultiSelect-input":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[1],color:e.colors.dark[2],opacity:.6,"&::placeholder":{color:e.colors.dark[2]}},"& .mantine-MultiSelect-defaultValue":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[5]:e.colors.gray[3],color:e.colorScheme==="dark"?e.colors.dark[1]:e.colors.gray[7]}}},values:{minHeight:`calc(${Vt({size:n,sizes:Yo})} - ${Ue(2)})`,display:"flex",alignItems:"center",flexWrap:"wrap",marginLeft:`calc(-${e.spacing.xs} / 2)`,boxSizing:"border-box","&[data-clearable]":{marginRight:Vt({size:n,sizes:Yo})}},value:{margin:`calc(${e.spacing.xs} / 2 - ${Ue(2)}) calc(${e.spacing.xs} / 2)`},searchInput:uJ(cJ({},e.fn.fontStyles()),{flex:1,minWidth:Ue(60),backgroundColor:"transparent",border:0,outline:0,fontSize:Vt({size:n,sizes:e.fontSizes}),padding:0,marginLeft:`calc(${e.spacing.xs} / 2)`,appearance:"none",color:"inherit",maxHeight:Vt({size:n,sizes:CE}),"&::placeholder":{opacity:1,color:t?e.colors.red[e.fn.primaryShade()]:e.colorScheme==="dark"?e.colors.dark[3]:e.colors.gray[5]},"&:disabled":{cursor:"not-allowed",pointerEvents:"none"}}),searchInputEmpty:{width:"100%"},searchInputInputHidden:{flex:0,width:0,minWidth:0,margin:0,overflow:"hidden"},searchInputPointer:{cursor:"pointer","&:disabled":{cursor:"not-allowed",pointerEvents:"none"}},input:{cursor:"pointer","&:disabled":{cursor:"not-allowed",pointerEvents:"none"}}}));const fJ=dJ;var pJ=Object.defineProperty,hJ=Object.defineProperties,mJ=Object.getOwnPropertyDescriptors,Gh=Object.getOwnPropertySymbols,DE=Object.prototype.hasOwnProperty,AE=Object.prototype.propertyIsEnumerable,J4=(e,t,n)=>t in e?pJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Vl=(e,t)=>{for(var n in t||(t={}))DE.call(t,n)&&J4(e,n,t[n]);if(Gh)for(var n of Gh(t))AE.call(t,n)&&J4(e,n,t[n]);return e},Z4=(e,t)=>hJ(e,mJ(t)),gJ=(e,t)=>{var n={};for(var r in e)DE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Gh)for(var r of Gh(e))t.indexOf(r)<0&&AE.call(e,r)&&(n[r]=e[r]);return n};function vJ(e,t,n){return t?!1:n.label.toLowerCase().trim().includes(e.toLowerCase().trim())}function bJ(e,t){return!!e&&!t.some(n=>n.value.toLowerCase()===e.toLowerCase())}function ek(e,t){if(!Array.isArray(e))return;if(t.length===0)return[];const n=t.map(r=>typeof r=="object"?r.value:r);return e.filter(r=>n.includes(r))}const yJ={size:"sm",valueComponent:PE,itemComponent:Oy,transitionProps:{transition:"fade",duration:0},maxDropdownHeight:220,shadow:"sm",searchable:!1,filter:vJ,limit:1/0,clearSearchOnChange:!0,clearable:!1,clearSearchOnBlur:!1,disabled:!1,initiallyOpened:!1,creatable:!1,shouldCreate:bJ,switchDirectionOnFlip:!1,zIndex:Py("popover"),selectOnBlur:!1,positionDependencies:[],dropdownPosition:"flip"},TE=f.forwardRef((e,t)=>{const n=Sr("MultiSelect",yJ,e),{className:r,style:o,required:s,label:a,description:c,size:d,error:p,classNames:h,styles:m,wrapperProps:v,value:b,defaultValue:w,data:y,onChange:S,valueComponent:_,itemComponent:k,id:j,transitionProps:I,maxDropdownHeight:E,shadow:O,nothingFound:R,onFocus:M,onBlur:A,searchable:T,placeholder:$,filter:Q,limit:B,clearSearchOnChange:V,clearable:q,clearSearchOnBlur:G,variant:D,onSearchChange:L,searchValue:W,disabled:Y,initiallyOpened:ae,radius:be,icon:ie,rightSection:X,rightSectionWidth:K,creatable:U,getCreateLabel:se,shouldCreate:re,onCreate:oe,sx:pe,dropdownComponent:le,onDropdownClose:ge,onDropdownOpen:ke,maxSelectedValues:xe,withinPortal:de,portalProps:Te,switchDirectionOnFlip:Oe,zIndex:$e,selectOnBlur:kt,name:ct,dropdownPosition:on,errorProps:vt,labelProps:bt,descriptionProps:Se,form:Me,positionDependencies:Pt,onKeyDown:Tt,unstyled:we,inputContainer:ht,inputWrapperOrder:$t,readOnly:zt,withAsterisk:ze,clearButtonProps:Ke,hoverOnSearchChange:Pn,disableSelectedItemFiltering:Pe}=n,Ze=gJ(n,["className","style","required","label","description","size","error","classNames","styles","wrapperProps","value","defaultValue","data","onChange","valueComponent","itemComponent","id","transitionProps","maxDropdownHeight","shadow","nothingFound","onFocus","onBlur","searchable","placeholder","filter","limit","clearSearchOnChange","clearable","clearSearchOnBlur","variant","onSearchChange","searchValue","disabled","initiallyOpened","radius","icon","rightSection","rightSectionWidth","creatable","getCreateLabel","shouldCreate","onCreate","sx","dropdownComponent","onDropdownClose","onDropdownOpen","maxSelectedValues","withinPortal","portalProps","switchDirectionOnFlip","zIndex","selectOnBlur","name","dropdownPosition","errorProps","labelProps","descriptionProps","form","positionDependencies","onKeyDown","unstyled","inputContainer","inputWrapperOrder","readOnly","withAsterisk","clearButtonProps","hoverOnSearchChange","disableSelectedItemFiltering"]),{classes:Qe,cx:dt,theme:Lt}=fJ({invalid:!!p},{name:"MultiSelect",classNames:h,styles:m,unstyled:we,size:d,variant:D}),{systemStyles:cr,rest:pn}=Bm(Ze),ln=f.useRef(),Hr=f.useRef({}),yr=Iy(j),[Fn,Hn]=f.useState(ae),[Wn,Nr]=f.useState(-1),[Mo,Wr]=f.useState("column"),[Vr,fs]=dd({value:W,defaultValue:"",finalValue:void 0,onChange:L}),[$r,$s]=f.useState(!1),{scrollIntoView:ps,targetRef:da,scrollableRef:zs}=Ej({duration:0,offset:5,cancelable:!1,isList:!0}),J=U&&typeof se=="function";let ee=null;const he=y.map(Be=>typeof Be=="string"?{label:Be,value:Be}:Be),_e=bj({data:he}),[me,ut]=dd({value:ek(b,y),defaultValue:ek(w,y),finalValue:[],onChange:S}),st=f.useRef(!!xe&&xe{if(!zt){const yt=me.filter(Mt=>Mt!==Be);ut(yt),xe&&yt.length{fs(Be.currentTarget.value),!Y&&!st.current&&T&&Hn(!0)},xt=Be=>{typeof M=="function"&&M(Be),!Y&&!st.current&&T&&Hn(!0)},He=HQ({data:_e,searchable:T,searchValue:Vr,limit:B,filter:Q,value:me,disableSelectedItemFiltering:Pe});J&&re(Vr,_e)&&(ee=se(Vr),He.push({label:Vr,value:Vr,creatable:!0}));const Ce=Math.min(Wn,He.length-1),Je=(Be,yt,Mt)=>{let Wt=Be;for(;Mt(Wt);)if(Wt=yt(Wt),!He[Wt].disabled)return Wt;return Be};Ps(()=>{Nr(Pn&&Vr?0:-1)},[Vr,Pn]),Ps(()=>{!Y&&me.length>y.length&&Hn(!1),xe&&me.length=xe&&(st.current=!0,Hn(!1))},[me]);const jt=Be=>{if(!zt)if(V&&fs(""),me.includes(Be.value))Ht(Be.value);else{if(Be.creatable&&typeof oe=="function"){const yt=oe(Be.value);typeof yt<"u"&&yt!==null&&ut(typeof yt=="string"?[...me,yt]:[...me,yt.value])}else ut([...me,Be.value]);me.length===xe-1&&(st.current=!0,Hn(!1)),He.length===1&&Hn(!1)}},Et=Be=>{typeof A=="function"&&A(Be),kt&&He[Ce]&&Fn&&jt(He[Ce]),G&&fs(""),Hn(!1)},Nt=Be=>{if($r||(Tt==null||Tt(Be),zt)||Be.key!=="Backspace"&&xe&&st.current)return;const yt=Mo==="column",Mt=()=>{Nr(jn=>{var Gt;const un=Je(jn,sn=>sn+1,sn=>sn{Nr(jn=>{var Gt;const un=Je(jn,sn=>sn-1,sn=>sn>0);return Fn&&(da.current=Hr.current[(Gt=He[un])==null?void 0:Gt.value],ps({alignment:yt?"start":"end"})),un})};switch(Be.key){case"ArrowUp":{Be.preventDefault(),Hn(!0),yt?Wt():Mt();break}case"ArrowDown":{Be.preventDefault(),Hn(!0),yt?Mt():Wt();break}case"Enter":{Be.preventDefault(),He[Ce]&&Fn?jt(He[Ce]):Hn(!0);break}case" ":{T||(Be.preventDefault(),He[Ce]&&Fn?jt(He[Ce]):Hn(!0));break}case"Backspace":{me.length>0&&Vr.length===0&&(ut(me.slice(0,-1)),Hn(!0),xe&&(st.current=!1));break}case"Home":{if(!T){Be.preventDefault(),Fn||Hn(!0);const jn=He.findIndex(Gt=>!Gt.disabled);Nr(jn),ps({alignment:yt?"end":"start"})}break}case"End":{if(!T){Be.preventDefault(),Fn||Hn(!0);const jn=He.map(Gt=>!!Gt.disabled).lastIndexOf(!1);Nr(jn),ps({alignment:yt?"end":"start"})}break}case"Escape":Hn(!1)}},qt=me.map(Be=>{let yt=_e.find(Mt=>Mt.value===Be&&!Mt.disabled);return!yt&&J&&(yt={value:Be,label:Be}),yt}).filter(Be=>!!Be).map((Be,yt)=>H.createElement(_,Z4(Vl({},Be),{variant:D,disabled:Y,className:Qe.value,readOnly:zt,onRemove:Mt=>{Mt.preventDefault(),Mt.stopPropagation(),Ht(Be.value)},key:Be.value,size:d,styles:m,classNames:h,radius:be,index:yt}))),tn=Be=>me.includes(Be),en=()=>{var Be;fs(""),ut([]),(Be=ln.current)==null||Be.focus(),xe&&(st.current=!1)},Ut=!zt&&(He.length>0?Fn:Fn&&!!R);return Ps(()=>{const Be=Ut?ke:ge;typeof Be=="function"&&Be()},[Ut]),H.createElement(Ic.Wrapper,Vl(Vl({required:s,id:yr,label:a,error:p,description:c,size:d,className:r,style:o,classNames:h,styles:m,__staticSelector:"MultiSelect",sx:pe,errorProps:vt,descriptionProps:Se,labelProps:bt,inputContainer:ht,inputWrapperOrder:$t,unstyled:we,withAsterisk:ze,variant:D},cr),v),H.createElement(hi,{opened:Ut,transitionProps:I,shadow:"sm",withinPortal:de,portalProps:Te,__staticSelector:"MultiSelect",onDirectionChange:Wr,switchDirectionOnFlip:Oe,zIndex:$e,dropdownPosition:on,positionDependencies:[...Pt,Vr],classNames:h,styles:m,unstyled:we,variant:D},H.createElement(hi.Target,null,H.createElement("div",{className:Qe.wrapper,role:"combobox","aria-haspopup":"listbox","aria-owns":Fn&&Ut?`${yr}-items`:null,"aria-controls":yr,"aria-expanded":Fn,onMouseLeave:()=>Nr(-1),tabIndex:-1},H.createElement("input",{type:"hidden",name:ct,value:me.join(","),form:Me,disabled:Y}),H.createElement(Ic,Vl({__staticSelector:"MultiSelect",style:{overflow:"hidden"},component:"div",multiline:!0,size:d,variant:D,disabled:Y,error:p,required:s,radius:be,icon:ie,unstyled:we,onMouseDown:Be=>{var yt;Be.preventDefault(),!Y&&!st.current&&Hn(!Fn),(yt=ln.current)==null||yt.focus()},classNames:Z4(Vl({},h),{input:dt({[Qe.input]:!T},h==null?void 0:h.input)})},ME({theme:Lt,rightSection:X,rightSectionWidth:K,styles:m,size:d,shouldClear:q&&me.length>0,onClear:en,error:p,disabled:Y,clearButtonProps:Ke,readOnly:zt})),H.createElement("div",{className:Qe.values,"data-clearable":q||void 0},qt,H.createElement("input",Vl({ref:Hd(t,ln),type:"search",id:yr,className:dt(Qe.searchInput,{[Qe.searchInputPointer]:!T,[Qe.searchInputInputHidden]:!Fn&&me.length>0||!T&&me.length>0,[Qe.searchInputEmpty]:me.length===0}),onKeyDown:Nt,value:Vr,onChange:ft,onFocus:xt,onBlur:Et,readOnly:!T||st.current||zt,placeholder:me.length===0?$:void 0,disabled:Y,"data-mantine-stop-propagation":Fn,autoComplete:"off",onCompositionStart:()=>$s(!0),onCompositionEnd:()=>$s(!1)},pn)))))),H.createElement(hi.Dropdown,{component:le||Vm,maxHeight:E,direction:Mo,id:yr,innerRef:zs,__staticSelector:"MultiSelect",classNames:h,styles:m},H.createElement(Ey,{data:He,hovered:Ce,classNames:h,styles:m,uuid:yr,__staticSelector:"MultiSelect",onItemHover:Nr,onItemSelect:jt,itemsRefs:Hr,itemComponent:k,size:d,nothingFound:R,isItemSelected:tn,creatable:U&&!!ee,createLabel:ee,unstyled:we,variant:D}))))});TE.displayName="@mantine/core/MultiSelect";var xJ=Object.defineProperty,wJ=Object.defineProperties,SJ=Object.getOwnPropertyDescriptors,qh=Object.getOwnPropertySymbols,NE=Object.prototype.hasOwnProperty,$E=Object.prototype.propertyIsEnumerable,tk=(e,t,n)=>t in e?xJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,iv=(e,t)=>{for(var n in t||(t={}))NE.call(t,n)&&tk(e,n,t[n]);if(qh)for(var n of qh(t))$E.call(t,n)&&tk(e,n,t[n]);return e},CJ=(e,t)=>wJ(e,SJ(t)),kJ=(e,t)=>{var n={};for(var r in e)NE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&qh)for(var r of qh(e))t.indexOf(r)<0&&$E.call(e,r)&&(n[r]=e[r]);return n};const _J={type:"text",size:"sm",__staticSelector:"TextInput"},zE=f.forwardRef((e,t)=>{const n=oE("TextInput",_J,e),{inputProps:r,wrapperProps:o}=n,s=kJ(n,["inputProps","wrapperProps"]);return H.createElement(Ic.Wrapper,iv({},o),H.createElement(Ic,CJ(iv(iv({},r),s),{ref:t})))});zE.displayName="@mantine/core/TextInput";function PJ({data:e,searchable:t,limit:n,searchValue:r,filter:o,value:s,filterDataOnExactSearchMatch:a}){if(!t)return e;const c=s!=null&&e.find(p=>p.value===s)||null;if(c&&!a&&(c==null?void 0:c.label)===r){if(n){if(n>=e.length)return e;const p=e.indexOf(c),h=p+n,m=h-e.length;return m>0?e.slice(p-m):e.slice(p,h)}return e}const d=[];for(let p=0;p=n));p+=1);return d}var jJ=ao(()=>({input:{"&:not(:disabled)":{cursor:"pointer","&::selection":{backgroundColor:"transparent"}}}}));const IJ=jJ;var EJ=Object.defineProperty,OJ=Object.defineProperties,RJ=Object.getOwnPropertyDescriptors,Kh=Object.getOwnPropertySymbols,LE=Object.prototype.hasOwnProperty,BE=Object.prototype.propertyIsEnumerable,nk=(e,t,n)=>t in e?EJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,xu=(e,t)=>{for(var n in t||(t={}))LE.call(t,n)&&nk(e,n,t[n]);if(Kh)for(var n of Kh(t))BE.call(t,n)&&nk(e,n,t[n]);return e},lv=(e,t)=>OJ(e,RJ(t)),MJ=(e,t)=>{var n={};for(var r in e)LE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Kh)for(var r of Kh(e))t.indexOf(r)<0&&BE.call(e,r)&&(n[r]=e[r]);return n};function DJ(e,t){return t.label.toLowerCase().trim().includes(e.toLowerCase().trim())}function AJ(e,t){return!!e&&!t.some(n=>n.label.toLowerCase()===e.toLowerCase())}const TJ={required:!1,size:"sm",shadow:"sm",itemComponent:Oy,transitionProps:{transition:"fade",duration:0},initiallyOpened:!1,filter:DJ,maxDropdownHeight:220,searchable:!1,clearable:!1,limit:1/0,disabled:!1,creatable:!1,shouldCreate:AJ,selectOnBlur:!1,switchDirectionOnFlip:!1,filterDataOnExactSearchMatch:!1,zIndex:Py("popover"),positionDependencies:[],dropdownPosition:"flip"},By=f.forwardRef((e,t)=>{const n=oE("Select",TJ,e),{inputProps:r,wrapperProps:o,shadow:s,data:a,value:c,defaultValue:d,onChange:p,itemComponent:h,onKeyDown:m,onBlur:v,onFocus:b,transitionProps:w,initiallyOpened:y,unstyled:S,classNames:_,styles:k,filter:j,maxDropdownHeight:I,searchable:E,clearable:O,nothingFound:R,limit:M,disabled:A,onSearchChange:T,searchValue:$,rightSection:Q,rightSectionWidth:B,creatable:V,getCreateLabel:q,shouldCreate:G,selectOnBlur:D,onCreate:L,dropdownComponent:W,onDropdownClose:Y,onDropdownOpen:ae,withinPortal:be,portalProps:ie,switchDirectionOnFlip:X,zIndex:K,name:U,dropdownPosition:se,allowDeselect:re,placeholder:oe,filterDataOnExactSearchMatch:pe,form:le,positionDependencies:ge,readOnly:ke,clearButtonProps:xe,hoverOnSearchChange:de}=n,Te=MJ(n,["inputProps","wrapperProps","shadow","data","value","defaultValue","onChange","itemComponent","onKeyDown","onBlur","onFocus","transitionProps","initiallyOpened","unstyled","classNames","styles","filter","maxDropdownHeight","searchable","clearable","nothingFound","limit","disabled","onSearchChange","searchValue","rightSection","rightSectionWidth","creatable","getCreateLabel","shouldCreate","selectOnBlur","onCreate","dropdownComponent","onDropdownClose","onDropdownOpen","withinPortal","portalProps","switchDirectionOnFlip","zIndex","name","dropdownPosition","allowDeselect","placeholder","filterDataOnExactSearchMatch","form","positionDependencies","readOnly","clearButtonProps","hoverOnSearchChange"]),{classes:Oe,cx:$e,theme:kt}=IJ(),[ct,on]=f.useState(y),[vt,bt]=f.useState(-1),Se=f.useRef(),Me=f.useRef({}),[Pt,Tt]=f.useState("column"),we=Pt==="column",{scrollIntoView:ht,targetRef:$t,scrollableRef:zt}=Ej({duration:0,offset:5,cancelable:!1,isList:!0}),ze=re===void 0?O:re,Ke=ee=>{if(ct!==ee){on(ee);const he=ee?ae:Y;typeof he=="function"&&he()}},Pn=V&&typeof q=="function";let Pe=null;const Ze=a.map(ee=>typeof ee=="string"?{label:ee,value:ee}:ee),Qe=bj({data:Ze}),[dt,Lt,cr]=dd({value:c,defaultValue:d,finalValue:null,onChange:p}),pn=Qe.find(ee=>ee.value===dt),[ln,Hr]=dd({value:$,defaultValue:(pn==null?void 0:pn.label)||"",finalValue:void 0,onChange:T}),yr=ee=>{Hr(ee),E&&typeof T=="function"&&T(ee)},Fn=()=>{var ee;ke||(Lt(null),cr||yr(""),(ee=Se.current)==null||ee.focus())};f.useEffect(()=>{const ee=Qe.find(he=>he.value===dt);ee?yr(ee.label):(!Pn||!dt)&&yr("")},[dt]),f.useEffect(()=>{pn&&(!E||!ct)&&yr(pn.label)},[pn==null?void 0:pn.label]);const Hn=ee=>{if(!ke)if(ze&&(pn==null?void 0:pn.value)===ee.value)Lt(null),Ke(!1);else{if(ee.creatable&&typeof L=="function"){const he=L(ee.value);typeof he<"u"&&he!==null&&Lt(typeof he=="string"?he:he.value)}else Lt(ee.value);cr||yr(ee.label),bt(-1),Ke(!1),Se.current.focus()}},Wn=PJ({data:Qe,searchable:E,limit:M,searchValue:ln,filter:j,filterDataOnExactSearchMatch:pe,value:dt});Pn&&G(ln,Wn)&&(Pe=q(ln),Wn.push({label:ln,value:ln,creatable:!0}));const Nr=(ee,he,_e)=>{let me=ee;for(;_e(me);)if(me=he(me),!Wn[me].disabled)return me;return ee};Ps(()=>{bt(de&&ln?0:-1)},[ln,de]);const Mo=dt?Wn.findIndex(ee=>ee.value===dt):0,Wr=!ke&&(Wn.length>0?ct:ct&&!!R),Vr=()=>{bt(ee=>{var he;const _e=Nr(ee,me=>me-1,me=>me>0);return $t.current=Me.current[(he=Wn[_e])==null?void 0:he.value],Wr&&ht({alignment:we?"start":"end"}),_e})},fs=()=>{bt(ee=>{var he;const _e=Nr(ee,me=>me+1,me=>mewindow.setTimeout(()=>{var ee;$t.current=Me.current[(ee=Wn[Mo])==null?void 0:ee.value],ht({alignment:we?"end":"start"})},50);Ps(()=>{Wr&&$r()},[Wr]);const $s=ee=>{switch(typeof m=="function"&&m(ee),ee.key){case"ArrowUp":{ee.preventDefault(),ct?we?Vr():fs():(bt(Mo),Ke(!0),$r());break}case"ArrowDown":{ee.preventDefault(),ct?we?fs():Vr():(bt(Mo),Ke(!0),$r());break}case"Home":{if(!E){ee.preventDefault(),ct||Ke(!0);const he=Wn.findIndex(_e=>!_e.disabled);bt(he),Wr&&ht({alignment:we?"end":"start"})}break}case"End":{if(!E){ee.preventDefault(),ct||Ke(!0);const he=Wn.map(_e=>!!_e.disabled).lastIndexOf(!1);bt(he),Wr&&ht({alignment:we?"end":"start"})}break}case"Escape":{ee.preventDefault(),Ke(!1),bt(-1);break}case" ":{E||(ee.preventDefault(),Wn[vt]&&ct?Hn(Wn[vt]):(Ke(!0),bt(Mo),$r()));break}case"Enter":E||ee.preventDefault(),Wn[vt]&&ct&&(ee.preventDefault(),Hn(Wn[vt]))}},ps=ee=>{typeof v=="function"&&v(ee);const he=Qe.find(_e=>_e.value===dt);D&&Wn[vt]&&ct&&Hn(Wn[vt]),yr((he==null?void 0:he.label)||""),Ke(!1)},da=ee=>{typeof b=="function"&&b(ee),E&&Ke(!0)},zs=ee=>{ke||(yr(ee.currentTarget.value),O&&ee.currentTarget.value===""&&Lt(null),bt(-1),Ke(!0))},J=()=>{ke||(Ke(!ct),dt&&!ct&&bt(Mo))};return H.createElement(Ic.Wrapper,lv(xu({},o),{__staticSelector:"Select"}),H.createElement(hi,{opened:Wr,transitionProps:w,shadow:s,withinPortal:be,portalProps:ie,__staticSelector:"Select",onDirectionChange:Tt,switchDirectionOnFlip:X,zIndex:K,dropdownPosition:se,positionDependencies:[...ge,ln],classNames:_,styles:k,unstyled:S,variant:r.variant},H.createElement(hi.Target,null,H.createElement("div",{role:"combobox","aria-haspopup":"listbox","aria-owns":Wr?`${r.id}-items`:null,"aria-controls":r.id,"aria-expanded":Wr,onMouseLeave:()=>bt(-1),tabIndex:-1},H.createElement("input",{type:"hidden",name:U,value:dt||"",form:le,disabled:A}),H.createElement(Ic,xu(lv(xu(xu({autoComplete:"off",type:"search"},r),Te),{ref:Hd(t,Se),onKeyDown:$s,__staticSelector:"Select",value:ln,placeholder:oe,onChange:zs,"aria-autocomplete":"list","aria-controls":Wr?`${r.id}-items`:null,"aria-activedescendant":vt>=0?`${r.id}-${vt}`:null,onMouseDown:J,onBlur:ps,onFocus:da,readOnly:!E||ke,disabled:A,"data-mantine-stop-propagation":Wr,name:null,classNames:lv(xu({},_),{input:$e({[Oe.input]:!E},_==null?void 0:_.input)})}),ME({theme:kt,rightSection:Q,rightSectionWidth:B,styles:k,size:r.size,shouldClear:O&&!!pn,onClear:Fn,error:o.error,clearButtonProps:xe,disabled:A,readOnly:ke}))))),H.createElement(hi.Dropdown,{component:W||Vm,maxHeight:I,direction:Pt,id:r.id,innerRef:zt,__staticSelector:"Select",classNames:_,styles:k},H.createElement(Ey,{data:Wn,hovered:vt,classNames:_,styles:k,isItemSelected:ee=>ee===dt,uuid:r.id,__staticSelector:"Select",onItemHover:bt,onItemSelect:Hn,itemsRefs:Me,itemComponent:h,size:r.size,nothingFound:R,creatable:Pn&&!!Pe,createLabel:Pe,"aria-label":o.label,unstyled:S,variant:r.variant}))))});By.displayName="@mantine/core/Select";const Fy=()=>{const[e,t,n,r,o,s,a,c,d,p,h,m,v,b,w,y,S,_,k,j,I,E,O,R,M,A,T,$,Q,B,V,q,G,D,L,W,Y,ae]=Tc("colors",["base.50","base.100","base.150","base.200","base.250","base.300","base.350","base.400","base.450","base.500","base.550","base.600","base.650","base.700","base.750","base.800","base.850","base.900","base.950","accent.50","accent.100","accent.150","accent.200","accent.250","accent.300","accent.350","accent.400","accent.450","accent.500","accent.550","accent.600","accent.650","accent.700","accent.750","accent.800","accent.850","accent.900","accent.950"]);return{base50:e,base100:t,base150:n,base200:r,base250:o,base300:s,base350:a,base400:c,base450:d,base500:p,base550:h,base600:m,base650:v,base700:b,base750:w,base800:y,base850:S,base900:_,base950:k,accent50:j,accent100:I,accent150:E,accent200:O,accent250:R,accent300:M,accent350:A,accent400:T,accent450:$,accent500:Q,accent550:B,accent600:V,accent650:q,accent700:G,accent750:D,accent800:L,accent850:W,accent900:Y,accent950:ae}},FE=()=>{const{base50:e,base100:t,base200:n,base300:r,base400:o,base500:s,base600:a,base700:c,base800:d,base900:p,accent200:h,accent300:m,accent400:v,accent500:b,accent600:w}=Fy(),{colorMode:y}=Ds(),[S]=Tc("shadows",["dark-lg"]);return f.useCallback(()=>({label:{color:Fe(c,r)(y)},separatorLabel:{color:Fe(s,s)(y),"::after":{borderTopColor:Fe(r,c)(y)}},input:{backgroundColor:Fe(e,p)(y),borderWidth:"2px",borderColor:Fe(n,d)(y),color:Fe(p,t)(y),paddingRight:24,fontWeight:600,"&:hover":{borderColor:Fe(r,a)(y)},"&:focus":{borderColor:Fe(m,w)(y)},"&:is(:focus, :hover)":{borderColor:Fe(o,s)(y)},"&:focus-within":{borderColor:Fe(h,w)(y)},"&[data-disabled]":{backgroundColor:Fe(r,c)(y),color:Fe(a,o)(y),cursor:"not-allowed"}},value:{backgroundColor:Fe(t,p)(y),color:Fe(p,t)(y),button:{color:Fe(p,t)(y)},"&:hover":{backgroundColor:Fe(r,c)(y),cursor:"pointer"}},dropdown:{backgroundColor:Fe(n,d)(y),borderColor:Fe(n,d)(y),boxShadow:S},item:{backgroundColor:Fe(n,d)(y),color:Fe(d,n)(y),padding:6,"&[data-hovered]":{color:Fe(p,t)(y),backgroundColor:Fe(r,c)(y)},"&[data-active]":{backgroundColor:Fe(r,c)(y),"&:hover":{color:Fe(p,t)(y),backgroundColor:Fe(r,c)(y)}},"&[data-selected]":{backgroundColor:Fe(v,w)(y),color:Fe(e,t)(y),fontWeight:600,"&:hover":{backgroundColor:Fe(b,b)(y),color:Fe("white",e)(y)}},"&[data-disabled]":{color:Fe(s,a)(y),cursor:"not-allowed"}},rightSection:{width:32,button:{color:Fe(p,t)(y)}}}),[h,m,v,b,w,t,n,r,o,e,s,a,c,d,p,S,y])},NJ=e=>{const{searchable:t=!0,tooltip:n,inputRef:r,onChange:o,label:s,disabled:a,...c}=e,d=te(),[p,h]=f.useState(""),m=f.useCallback(y=>{y.shiftKey&&d(jo(!0))},[d]),v=f.useCallback(y=>{y.shiftKey||d(jo(!1))},[d]),b=f.useCallback(y=>{h(""),o&&o(y)},[o]),w=FE();return i.jsx(wn,{label:n,placement:"top",hasArrow:!0,children:i.jsx(By,{ref:r,label:s?i.jsx(go,{isDisabled:a,children:i.jsx(Lo,{children:s})}):void 0,disabled:a,searchValue:p,onSearchChange:h,onChange:b,onKeyDown:m,onKeyUp:v,searchable:t,maxDropdownHeight:300,styles:w,...c})})},ar=f.memo(NJ),HE=f.forwardRef(({label:e,tooltip:t,description:n,disabled:r,...o},s)=>i.jsx(wn,{label:t,placement:"top",hasArrow:!0,openDelay:500,children:i.jsx(Ee,{ref:s,...o,children:i.jsxs(Ee,{children:[i.jsx(kc,{children:e}),n&&i.jsx(kc,{size:"xs",color:"base.600",children:n})]})})}));HE.displayName="IAIMantineSelectItemWithTooltip";const Ri=f.memo(HE),$J=fe([Ye],({gallery:e})=>{const{autoAddBoardId:t}=e;return{autoAddBoardId:t}},Ge),zJ=()=>{const e=te(),{autoAddBoardId:t}=z($J),n=f.useRef(null),{boards:r,hasBoards:o}=am(void 0,{selectFromResult:({data:a})=>{const c=[{label:"None",value:"none"}];return a==null||a.forEach(({board_id:d,board_name:p})=>{c.push({label:p,value:d})}),{boards:c,hasBoards:c.length>1}}}),s=f.useCallback(a=>{a&&e(N_(a==="none"?void 0:a))},[e]);return i.jsx(ar,{label:"Auto-Add Board",inputRef:n,autoFocus:!0,placeholder:"Select a Board",value:t,data:r,nothingFound:"No matching Boards",itemComponent:Ri,disabled:!o,filter:(a,c)=>{var d;return((d=c.label)==null?void 0:d.toLowerCase().includes(a.toLowerCase().trim()))||c.value.toLowerCase().includes(a.toLowerCase().trim())},onChange:s})},LJ=fe([Ye],e=>{const{galleryImageMinimumWidth:t,shouldAutoSwitch:n}=e.gallery;return{galleryImageMinimumWidth:t,shouldAutoSwitch:n}},Ge),BJ=()=>{const e=te(),{t}=ye(),{galleryImageMinimumWidth:n,shouldAutoSwitch:r}=z(LJ),o=s=>{e(Np(s))};return i.jsx(vl,{triggerComponent:i.jsx(Le,{tooltip:t("gallery.gallerySettings"),"aria-label":t("gallery.gallerySettings"),size:"sm",icon:i.jsx(sy,{})}),children:i.jsxs(F,{direction:"column",gap:4,children:[i.jsx(_t,{value:n,onChange:o,min:32,max:256,hideTooltip:!0,label:t("gallery.galleryImageSize"),withReset:!0,handleReset:()=>e(Np(64))}),i.jsx(Gn,{label:t("gallery.autoSwitchNewImages"),isChecked:r,onChange:s=>e(Y7(s.target.checked))}),i.jsx(zJ,{})]})})},FJ=e=>e.image?i.jsx(km,{sx:{w:`${e.image.width}px`,h:"auto",objectFit:"contain",aspectRatio:`${e.image.width}/${e.image.height}`}}):i.jsx(F,{sx:{opacity:.7,w:"full",h:"full",alignItems:"center",justifyContent:"center",borderRadius:"base",bg:"base.200",_dark:{bg:"base.900"}},children:i.jsx(pl,{size:"xl"})}),mi=e=>{const{icon:t=ll,boxSize:n=16}=e;return i.jsxs(F,{sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center",borderRadius:"base",flexDir:"column",gap:2,userSelect:"none",opacity:.7,color:"base.700",_dark:{color:"base.500"},...e.sx},children:[i.jsx(no,{as:t,boxSize:n,opacity:.7}),e.label&&i.jsx(qe,{textAlign:"center",children:e.label})]})},qm=0,Mi=1,qc=2,WE=4;function HJ(e,t){return n=>e(t(n))}function WJ(e,t){return t(e)}function VE(e,t){return n=>e(t,n)}function rk(e,t){return()=>e(t)}function Hy(e,t){return t(e),e}function xl(...e){return e}function VJ(e){e()}function ok(e){return()=>e}function UJ(...e){return()=>{e.map(VJ)}}function Km(){}function ho(e,t){return e(Mi,t)}function Ar(e,t){e(qm,t)}function Wy(e){e(qc)}function Xm(e){return e(WE)}function Un(e,t){return ho(e,VE(t,qm))}function sk(e,t){const n=e(Mi,r=>{n(),t(r)});return n}function wr(){const e=[];return(t,n)=>{switch(t){case qc:e.splice(0,e.length);return;case Mi:return e.push(n),()=>{const r=e.indexOf(n);r>-1&&e.splice(r,1)};case qm:e.slice().forEach(r=>{r(n)});return;default:throw new Error(`unrecognized action ${t}`)}}}function Kt(e){let t=e;const n=wr();return(r,o)=>{switch(r){case Mi:o(t);break;case qm:t=o;break;case WE:return t}return n(r,o)}}function GJ(e){let t,n;const r=()=>t&&t();return function(o,s){switch(o){case Mi:return s?n===s?void 0:(r(),n=s,t=ho(e,s),t):(r(),Km);case qc:r(),n=null;return;default:throw new Error(`unrecognized action ${o}`)}}}function Uu(e){return Hy(wr(),t=>Un(e,t))}function mc(e,t){return Hy(Kt(t),n=>Un(e,n))}function qJ(...e){return t=>e.reduceRight(WJ,t)}function Xt(e,...t){const n=qJ(...t);return(r,o)=>{switch(r){case Mi:return ho(e,n(o));case qc:Wy(e);return}}}function UE(e,t){return e===t}function Co(e=UE){let t;return n=>r=>{e(t,r)||(t=r,n(r))}}function Kr(e){return t=>n=>{e(n)&&t(n)}}function nr(e){return t=>HJ(t,e)}function ai(e){return t=>()=>t(e)}function bp(e,t){return n=>r=>n(t=e(t,r))}function R1(e){return t=>n=>{e>0?e--:t(n)}}function Du(e){let t=null,n;return r=>o=>{t=o,!n&&(n=setTimeout(()=>{n=void 0,r(t)},e))}}function ak(e){let t,n;return r=>o=>{t=o,n&&clearTimeout(n),n=setTimeout(()=>{r(t)},e)}}function Xs(...e){const t=new Array(e.length);let n=0,r=null;const o=Math.pow(2,e.length)-1;return e.forEach((s,a)=>{const c=Math.pow(2,a);ho(s,d=>{const p=n;n=n|c,t[a]=d,p!==o&&n===o&&r&&(r(),r=null)})}),s=>a=>{const c=()=>s([a].concat(t));n===o?c():r=c}}function ik(...e){return function(t,n){switch(t){case Mi:return UJ(...e.map(r=>ho(r,n)));case qc:return;default:throw new Error(`unrecognized action ${t}`)}}}function xn(e,t=UE){return Xt(e,Co(t))}function Sa(...e){const t=wr(),n=new Array(e.length);let r=0;const o=Math.pow(2,e.length)-1;return e.forEach((s,a)=>{const c=Math.pow(2,a);ho(s,d=>{n[a]=d,r=r|c,r===o&&Ar(t,n)})}),function(s,a){switch(s){case Mi:return r===o&&a(n),ho(t,a);case qc:return Wy(t);default:throw new Error(`unrecognized action ${s}`)}}}function ua(e,t=[],{singleton:n}={singleton:!0}){return{id:KJ(),constructor:e,dependencies:t,singleton:n}}const KJ=()=>Symbol();function XJ(e){const t=new Map,n=({id:r,constructor:o,dependencies:s,singleton:a})=>{if(a&&t.has(r))return t.get(r);const c=o(s.map(d=>n(d)));return a&&t.set(r,c),c};return n(e)}function YJ(e,t){const n={},r={};let o=0;const s=e.length;for(;o(S[_]=k=>{const j=y[t.methods[_]];Ar(j,k)},S),{})}function h(y){return a.reduce((S,_)=>(S[_]=GJ(y[t.events[_]]),S),{})}return{Component:H.forwardRef((y,S)=>{const{children:_,...k}=y,[j]=H.useState(()=>Hy(XJ(e),E=>d(E,k))),[I]=H.useState(rk(h,j));return yp(()=>{for(const E of a)E in k&&ho(I[E],k[E]);return()=>{Object.values(I).map(Wy)}},[k,I,j]),yp(()=>{d(j,k)}),H.useImperativeHandle(S,ok(p(j))),H.createElement(c.Provider,{value:j},n?H.createElement(n,YJ([...r,...o,...a],k),_):_)}),usePublisher:y=>H.useCallback(VE(Ar,H.useContext(c)[y]),[y]),useEmitterValue:y=>{const _=H.useContext(c)[y],[k,j]=H.useState(rk(Xm,_));return yp(()=>ho(_,I=>{I!==k&&j(ok(I))}),[_,k]),k},useEmitter:(y,S)=>{const k=H.useContext(c)[y];yp(()=>ho(k,S),[S,k])}}}const JJ=typeof document<"u"?H.useLayoutEffect:H.useEffect,ZJ=JJ;var Vy=(e=>(e[e.DEBUG=0]="DEBUG",e[e.INFO=1]="INFO",e[e.WARN=2]="WARN",e[e.ERROR=3]="ERROR",e))(Vy||{});const eZ={0:"debug",1:"log",2:"warn",3:"error"},tZ=()=>typeof globalThis>"u"?window:globalThis,GE=ua(()=>{const e=Kt(3);return{log:Kt((n,r,o=1)=>{var s;const a=(s=tZ().VIRTUOSO_LOG_LEVEL)!=null?s:Xm(e);o>=a&&console[eZ[o]]("%creact-virtuoso: %c%s %o","color: #0253b3; font-weight: bold","color: initial",n,r)}),logLevel:e}},[],{singleton:!0});function qE(e,t=!0){const n=H.useRef(null);let r=o=>{};if(typeof ResizeObserver<"u"){const o=H.useMemo(()=>new ResizeObserver(s=>{const a=s[0].target;a.offsetParent!==null&&e(a)}),[e]);r=s=>{s&&t?(o.observe(s),n.current=s):(n.current&&o.unobserve(n.current),n.current=null)}}return{ref:n,callbackRef:r}}function Ym(e,t=!0){return qE(e,t).callbackRef}function Xh(e,t){return Math.round(e.getBoundingClientRect()[t])}function KE(e,t){return Math.abs(e-t)<1.01}function XE(e,t,n,r=Km,o){const s=H.useRef(null),a=H.useRef(null),c=H.useRef(null),d=H.useCallback(m=>{const v=m.target,b=v===window||v===document,w=b?window.pageYOffset||document.documentElement.scrollTop:v.scrollTop,y=b?document.documentElement.scrollHeight:v.scrollHeight,S=b?window.innerHeight:v.offsetHeight,_=()=>{e({scrollTop:Math.max(w,0),scrollHeight:y,viewportHeight:S})};m.suppressFlushSync?_():Q7.flushSync(_),a.current!==null&&(w===a.current||w<=0||w===y-S)&&(a.current=null,t(!0),c.current&&(clearTimeout(c.current),c.current=null))},[e,t]);H.useEffect(()=>{const m=o||s.current;return r(o||s.current),d({target:m,suppressFlushSync:!0}),m.addEventListener("scroll",d,{passive:!0}),()=>{r(null),m.removeEventListener("scroll",d)}},[s,d,n,r,o]);function p(m){const v=s.current;if(!v||"offsetHeight"in v&&v.offsetHeight===0)return;const b=m.behavior==="smooth";let w,y,S;v===window?(y=Math.max(Xh(document.documentElement,"height"),document.documentElement.scrollHeight),w=window.innerHeight,S=document.documentElement.scrollTop):(y=v.scrollHeight,w=Xh(v,"height"),S=v.scrollTop);const _=y-w;if(m.top=Math.ceil(Math.max(Math.min(_,m.top),0)),KE(w,y)||m.top===S){e({scrollTop:S,scrollHeight:y,viewportHeight:w}),b&&t(!0);return}b?(a.current=m.top,c.current&&clearTimeout(c.current),c.current=setTimeout(()=>{c.current=null,a.current=null,t(!0)},1e3)):a.current=null,v.scrollTo(m)}function h(m){s.current.scrollBy(m)}return{scrollerRef:s,scrollByCallback:h,scrollToCallback:p}}const Qm=ua(()=>{const e=wr(),t=wr(),n=Kt(0),r=wr(),o=Kt(0),s=wr(),a=wr(),c=Kt(0),d=Kt(0),p=Kt(0),h=Kt(0),m=wr(),v=wr(),b=Kt(!1);return Un(Xt(e,nr(({scrollTop:w})=>w)),t),Un(Xt(e,nr(({scrollHeight:w})=>w)),a),Un(t,o),{scrollContainerState:e,scrollTop:t,viewportHeight:s,headerHeight:c,fixedHeaderHeight:d,fixedFooterHeight:p,footerHeight:h,scrollHeight:a,smoothScrollTargetReached:r,scrollTo:m,scrollBy:v,statefulScrollTop:o,deviation:n,scrollingInProgress:b}},[],{singleton:!0}),nZ=typeof document<"u"&&"scrollBehavior"in document.documentElement.style;function rZ(e){const t=typeof e=="number"?{index:e}:e;return t.align||(t.align="start"),(!t.behavior||!nZ)&&(t.behavior="auto"),t.offset||(t.offset=0),t}const Yh="up",Gu="down",oZ="none",sZ={atBottom:!1,notAtBottomBecause:"NOT_SHOWING_LAST_ITEM",state:{offsetBottom:0,scrollTop:0,viewportHeight:0,scrollHeight:0}},aZ=0,YE=ua(([{scrollContainerState:e,scrollTop:t,viewportHeight:n,headerHeight:r,footerHeight:o,scrollBy:s}])=>{const a=Kt(!1),c=Kt(!0),d=wr(),p=wr(),h=Kt(4),m=Kt(aZ),v=mc(Xt(ik(Xt(xn(t),R1(1),ai(!0)),Xt(xn(t),R1(1),ai(!1),ak(100))),Co()),!1),b=mc(Xt(ik(Xt(s,ai(!0)),Xt(s,ai(!1),ak(200))),Co()),!1);Un(Xt(Sa(xn(t),xn(m)),nr(([k,j])=>k<=j),Co()),c),Un(Xt(c,Du(50)),p);const w=Uu(Xt(Sa(e,xn(n),xn(r),xn(o),xn(h)),bp((k,[{scrollTop:j,scrollHeight:I},E,O,R,M])=>{const A=j+E-I>-M,T={viewportHeight:E,scrollTop:j,scrollHeight:I};if(A){let Q,B;return j>k.state.scrollTop?(Q="SCROLLED_DOWN",B=k.state.scrollTop-j):(Q="SIZE_DECREASED",B=k.state.scrollTop-j||k.scrollTopDelta),{atBottom:!0,state:T,atBottomBecause:Q,scrollTopDelta:B}}let $;return T.scrollHeight>k.state.scrollHeight?$="SIZE_INCREASED":Ek&&k.atBottom===j.atBottom))),y=mc(Xt(e,bp((k,{scrollTop:j,scrollHeight:I,viewportHeight:E})=>{if(KE(k.scrollHeight,I))return{scrollTop:j,scrollHeight:I,jump:0,changed:!1};{const O=I-(j+E)<1;return k.scrollTop!==j&&O?{scrollHeight:I,scrollTop:j,jump:k.scrollTop-j,changed:!0}:{scrollHeight:I,scrollTop:j,jump:0,changed:!0}}},{scrollHeight:0,jump:0,scrollTop:0,changed:!1}),Kr(k=>k.changed),nr(k=>k.jump)),0);Un(Xt(w,nr(k=>k.atBottom)),a),Un(Xt(a,Du(50)),d);const S=Kt(Gu);Un(Xt(e,nr(({scrollTop:k})=>k),Co(),bp((k,j)=>Xm(b)?{direction:k.direction,prevScrollTop:j}:{direction:jk.direction)),S),Un(Xt(e,Du(50),ai(oZ)),S);const _=Kt(0);return Un(Xt(v,Kr(k=>!k),ai(0)),_),Un(Xt(t,Du(100),Xs(v),Kr(([k,j])=>!!j),bp(([k,j],[I])=>[j,I],[0,0]),nr(([k,j])=>j-k)),_),{isScrolling:v,isAtTop:c,isAtBottom:a,atBottomState:w,atTopStateChange:p,atBottomStateChange:d,scrollDirection:S,atBottomThreshold:h,atTopThreshold:m,scrollVelocity:_,lastJumpDueToItemResize:y}},xl(Qm)),iZ=ua(([{log:e}])=>{const t=Kt(!1),n=Uu(Xt(t,Kr(r=>r),Co()));return ho(t,r=>{r&&Xm(e)("props updated",{},Vy.DEBUG)}),{propsReady:t,didMount:n}},xl(GE),{singleton:!0});function QE(e,t){e==0?t():requestAnimationFrame(()=>QE(e-1,t))}function lZ(e,t){const n=t-1;return typeof e=="number"?e:e.index==="LAST"?n:e.index}function M1(e,t){return!!(e&&e[0]===t[0]&&e[1]===t[1])}function cZ(e,t){return!!(e&&e.startIndex===t.startIndex&&e.endIndex===t.endIndex)}const Qh="top",Jh="bottom",lk="none";function ck(e,t,n){return typeof e=="number"?n===Yh&&t===Qh||n===Gu&&t===Jh?e:0:n===Yh?t===Qh?e.main:e.reverse:t===Jh?e.main:e.reverse}function uk(e,t){return typeof e=="number"?e:e[t]||0}const uZ=ua(([{scrollTop:e,viewportHeight:t,deviation:n,headerHeight:r,fixedHeaderHeight:o}])=>{const s=wr(),a=Kt(0),c=Kt(0),d=Kt(0),p=mc(Xt(Sa(xn(e),xn(t),xn(r),xn(s,M1),xn(d),xn(a),xn(o),xn(n),xn(c)),nr(([h,m,v,[b,w],y,S,_,k,j])=>{const I=h-k,E=S+_,O=Math.max(v-I,0);let R=lk;const M=uk(j,Qh),A=uk(j,Jh);return b-=k,b+=v+_,w+=v+_,w-=k,b>h+E-M&&(R=Yh),wh!=null),Co(M1)),[0,0]);return{listBoundary:s,overscan:d,topListHeight:a,increaseViewportBy:c,visibleRange:p}},xl(Qm),{singleton:!0}),dZ=ua(([{scrollVelocity:e}])=>{const t=Kt(!1),n=wr(),r=Kt(!1);return Un(Xt(e,Xs(r,t,n),Kr(([o,s])=>!!s),nr(([o,s,a,c])=>{const{exit:d,enter:p}=s;if(a){if(d(o,c))return!1}else if(p(o,c))return!0;return a}),Co()),t),ho(Xt(Sa(t,e,n),Xs(r)),([[o,s,a],c])=>o&&c&&c.change&&c.change(s,a)),{isSeeking:t,scrollSeekConfiguration:r,scrollVelocity:e,scrollSeekRangeChanged:n}},xl(YE),{singleton:!0});function fZ(e){let t=!1,n;return()=>(t||(t=!0,n=e()),n)}const pZ=ua(([{scrollTo:e,scrollContainerState:t}])=>{const n=wr(),r=wr(),o=wr(),s=Kt(!1),a=Kt(void 0);return Un(Xt(Sa(n,r),nr(([{viewportHeight:c,scrollTop:d,scrollHeight:p},{offsetTop:h}])=>({scrollTop:Math.max(0,d-h),scrollHeight:p,viewportHeight:c}))),t),Un(Xt(e,Xs(r),nr(([c,{offsetTop:d}])=>({...c,top:c.top+d}))),o),{useWindowScroll:s,customScrollParent:a,windowScrollContainerState:n,windowViewportRect:r,windowScrollTo:o}},xl(Qm)),cv="-webkit-sticky",dk="sticky",JE=fZ(()=>{if(typeof document>"u")return dk;const e=document.createElement("div");return e.style.position=cv,e.style.position===cv?cv:dk});function hZ(e,t){const n=H.useRef(null),r=H.useCallback(c=>{if(c===null||!c.offsetParent)return;const d=c.getBoundingClientRect(),p=d.width;let h,m;if(t){const v=t.getBoundingClientRect(),b=d.top-v.top;h=v.height-Math.max(0,b),m=b+t.scrollTop}else h=window.innerHeight-Math.max(0,d.top),m=d.top+window.pageYOffset;n.current={offsetTop:m,visibleHeight:h,visibleWidth:p},e(n.current)},[e,t]),{callbackRef:o,ref:s}=qE(r),a=H.useCallback(()=>{r(s.current)},[r,s]);return H.useEffect(()=>{if(t){t.addEventListener("scroll",a);const c=new ResizeObserver(a);return c.observe(t),()=>{t.removeEventListener("scroll",a),c.unobserve(t)}}else return window.addEventListener("scroll",a),window.addEventListener("resize",a),()=>{window.removeEventListener("scroll",a),window.removeEventListener("resize",a)}},[a,t]),o}H.createContext(void 0);const ZE=H.createContext(void 0);function mZ(e){return e}JE();const gZ={height:"100%",outline:"none",overflowY:"auto",position:"relative",WebkitOverflowScrolling:"touch"},eO={width:"100%",height:"100%",position:"absolute",top:0};JE();function nl(e,t){if(typeof e!="string")return{context:t}}function vZ({usePublisher:e,useEmitter:t,useEmitterValue:n}){return H.memo(function({style:s,children:a,...c}){const d=e("scrollContainerState"),p=n("ScrollerComponent"),h=e("smoothScrollTargetReached"),m=n("scrollerRef"),v=n("context"),{scrollerRef:b,scrollByCallback:w,scrollToCallback:y}=XE(d,h,p,m);return t("scrollTo",y),t("scrollBy",w),H.createElement(p,{ref:b,style:{...gZ,...s},"data-test-id":"virtuoso-scroller","data-virtuoso-scroller":!0,tabIndex:0,...c,...nl(p,v)},a)})}function bZ({usePublisher:e,useEmitter:t,useEmitterValue:n}){return H.memo(function({style:s,children:a,...c}){const d=e("windowScrollContainerState"),p=n("ScrollerComponent"),h=e("smoothScrollTargetReached"),m=n("totalListHeight"),v=n("deviation"),b=n("customScrollParent"),w=n("context"),{scrollerRef:y,scrollByCallback:S,scrollToCallback:_}=XE(d,h,p,Km,b);return ZJ(()=>(y.current=b||window,()=>{y.current=null}),[y,b]),t("windowScrollTo",_),t("scrollBy",S),H.createElement(p,{style:{position:"relative",...s,...m!==0?{height:m+v}:{}},"data-virtuoso-scroller":!0,...c,...nl(p,w)},a)})}const fk={items:[],offsetBottom:0,offsetTop:0,top:0,bottom:0,itemHeight:0,itemWidth:0},yZ={items:[{index:0}],offsetBottom:0,offsetTop:0,top:0,bottom:0,itemHeight:0,itemWidth:0},{round:pk,ceil:hk,floor:Zh,min:uv,max:qu}=Math;function xZ(e){return{...yZ,items:e}}function mk(e,t,n){return Array.from({length:t-e+1}).map((r,o)=>{const s=n===null?null:n[o+e];return{index:o+e,data:s}})}function wZ(e,t){return e&&e.column===t.column&&e.row===t.row}function xp(e,t){return e&&e.width===t.width&&e.height===t.height}const SZ=ua(([{overscan:e,visibleRange:t,listBoundary:n},{scrollTop:r,viewportHeight:o,scrollBy:s,scrollTo:a,smoothScrollTargetReached:c,scrollContainerState:d,footerHeight:p,headerHeight:h},m,v,{propsReady:b,didMount:w},{windowViewportRect:y,useWindowScroll:S,customScrollParent:_,windowScrollContainerState:k,windowScrollTo:j},I])=>{const E=Kt(0),O=Kt(0),R=Kt(fk),M=Kt({height:0,width:0}),A=Kt({height:0,width:0}),T=wr(),$=wr(),Q=Kt(0),B=Kt(null),V=Kt({row:0,column:0}),q=wr(),G=wr(),D=Kt(!1),L=Kt(0),W=Kt(!0),Y=Kt(!1);ho(Xt(w,Xs(L),Kr(([U,se])=>!!se)),()=>{Ar(W,!1),Ar(O,0)}),ho(Xt(Sa(w,W,A,M,L,Y),Kr(([U,se,re,oe,,pe])=>U&&!se&&re.height!==0&&oe.height!==0&&!pe)),([,,,,U])=>{Ar(Y,!0),QE(1,()=>{Ar(T,U)}),sk(Xt(r),()=>{Ar(n,[0,0]),Ar(W,!0)})}),Un(Xt(G,Kr(U=>U!=null&&U.scrollTop>0),ai(0)),O),ho(Xt(w,Xs(G),Kr(([,U])=>U!=null)),([,U])=>{U&&(Ar(M,U.viewport),Ar(A,U==null?void 0:U.item),Ar(V,U.gap),U.scrollTop>0&&(Ar(D,!0),sk(Xt(r,R1(1)),se=>{Ar(D,!1)}),Ar(a,{top:U.scrollTop})))}),Un(Xt(M,nr(({height:U})=>U)),o),Un(Xt(Sa(xn(M,xp),xn(A,xp),xn(V,(U,se)=>U&&U.column===se.column&&U.row===se.row),xn(r)),nr(([U,se,re,oe])=>({viewport:U,item:se,gap:re,scrollTop:oe}))),q),Un(Xt(Sa(xn(E),t,xn(V,wZ),xn(A,xp),xn(M,xp),xn(B),xn(O),xn(D),xn(W),xn(L)),Kr(([,,,,,,,U])=>!U),nr(([U,[se,re],oe,pe,le,ge,ke,,xe,de])=>{const{row:Te,column:Oe}=oe,{height:$e,width:kt}=pe,{width:ct}=le;if(ke===0&&(U===0||ct===0))return fk;if(kt===0){const $t=lZ(de,U),zt=$t===0?Math.max(ke-1,0):$t;return xZ(mk($t,zt,ge))}const on=tO(ct,kt,Oe);let vt,bt;xe?se===0&&re===0&&ke>0?(vt=0,bt=ke-1):(vt=on*Zh((se+Te)/($e+Te)),bt=on*hk((re+Te)/($e+Te))-1,bt=uv(U-1,qu(bt,on-1)),vt=uv(bt,qu(0,vt))):(vt=0,bt=-1);const Se=mk(vt,bt,ge),{top:Me,bottom:Pt}=gk(le,oe,pe,Se),Tt=hk(U/on),ht=Tt*$e+(Tt-1)*Te-Pt;return{items:Se,offsetTop:Me,offsetBottom:ht,top:Me,bottom:Pt,itemHeight:$e,itemWidth:kt}})),R),Un(Xt(B,Kr(U=>U!==null),nr(U=>U.length)),E),Un(Xt(Sa(M,A,R,V),Kr(([U,se,{items:re}])=>re.length>0&&se.height!==0&&U.height!==0),nr(([U,se,{items:re},oe])=>{const{top:pe,bottom:le}=gk(U,oe,se,re);return[pe,le]}),Co(M1)),n);const ae=Kt(!1);Un(Xt(r,Xs(ae),nr(([U,se])=>se||U!==0)),ae);const be=Uu(Xt(xn(R),Kr(({items:U})=>U.length>0),Xs(E,ae),Kr(([{items:U},se,re])=>re&&U[U.length-1].index===se-1),nr(([,U])=>U-1),Co())),ie=Uu(Xt(xn(R),Kr(({items:U})=>U.length>0&&U[0].index===0),ai(0),Co())),X=Uu(Xt(xn(R),Xs(D),Kr(([{items:U},se])=>U.length>0&&!se),nr(([{items:U}])=>({startIndex:U[0].index,endIndex:U[U.length-1].index})),Co(cZ),Du(0)));Un(X,v.scrollSeekRangeChanged),Un(Xt(T,Xs(M,A,E,V),nr(([U,se,re,oe,pe])=>{const le=rZ(U),{align:ge,behavior:ke,offset:xe}=le;let de=le.index;de==="LAST"&&(de=oe-1),de=qu(0,de,uv(oe-1,de));let Te=D1(se,pe,re,de);return ge==="end"?Te=pk(Te-se.height+re.height):ge==="center"&&(Te=pk(Te-se.height/2+re.height/2)),xe&&(Te+=xe),{top:Te,behavior:ke}})),a);const K=mc(Xt(R,nr(U=>U.offsetBottom+U.bottom)),0);return Un(Xt(y,nr(U=>({width:U.visibleWidth,height:U.visibleHeight}))),M),{data:B,totalCount:E,viewportDimensions:M,itemDimensions:A,scrollTop:r,scrollHeight:$,overscan:e,scrollBy:s,scrollTo:a,scrollToIndex:T,smoothScrollTargetReached:c,windowViewportRect:y,windowScrollTo:j,useWindowScroll:S,customScrollParent:_,windowScrollContainerState:k,deviation:Q,scrollContainerState:d,footerHeight:p,headerHeight:h,initialItemCount:O,gap:V,restoreStateFrom:G,...v,initialTopMostItemIndex:L,gridState:R,totalListHeight:K,...m,startReached:ie,endReached:be,rangeChanged:X,stateChanged:q,propsReady:b,stateRestoreInProgress:D,...I}},xl(uZ,Qm,YE,dZ,iZ,pZ,GE));function gk(e,t,n,r){const{height:o}=n;if(o===void 0||r.length===0)return{top:0,bottom:0};const s=D1(e,t,n,r[0].index),a=D1(e,t,n,r[r.length-1].index)+o;return{top:s,bottom:a}}function D1(e,t,n,r){const o=tO(e.width,n.width,t.column),s=Zh(r/o),a=s*n.height+qu(0,s-1)*t.row;return a>0?a+t.row:a}function tO(e,t,n){return qu(1,Zh((e+n)/(Zh(t)+n)))}const CZ=ua(()=>{const e=Kt(p=>`Item ${p}`),t=Kt({}),n=Kt(null),r=Kt("virtuoso-grid-item"),o=Kt("virtuoso-grid-list"),s=Kt(mZ),a=Kt("div"),c=Kt(Km),d=(p,h=null)=>mc(Xt(t,nr(m=>m[p]),Co()),h);return{context:n,itemContent:e,components:t,computeItemKey:s,itemClassName:r,listClassName:o,headerFooterTag:a,scrollerRef:c,FooterComponent:d("Footer"),HeaderComponent:d("Header"),ListComponent:d("List","div"),ItemComponent:d("Item","div"),ScrollerComponent:d("Scroller","div"),ScrollSeekPlaceholder:d("ScrollSeekPlaceholder","div")}}),kZ=ua(([e,t])=>({...e,...t}),xl(SZ,CZ)),_Z=H.memo(function(){const t=pr("gridState"),n=pr("listClassName"),r=pr("itemClassName"),o=pr("itemContent"),s=pr("computeItemKey"),a=pr("isSeeking"),c=Is("scrollHeight"),d=pr("ItemComponent"),p=pr("ListComponent"),h=pr("ScrollSeekPlaceholder"),m=pr("context"),v=Is("itemDimensions"),b=Is("gap"),w=pr("log"),y=pr("stateRestoreInProgress"),S=Ym(_=>{const k=_.parentElement.parentElement.scrollHeight;c(k);const j=_.firstChild;if(j){const{width:I,height:E}=j.getBoundingClientRect();v({width:I,height:E})}b({row:vk("row-gap",getComputedStyle(_).rowGap,w),column:vk("column-gap",getComputedStyle(_).columnGap,w)})});return y?null:H.createElement(p,{ref:S,className:n,...nl(p,m),style:{paddingTop:t.offsetTop,paddingBottom:t.offsetBottom},"data-test-id":"virtuoso-item-list"},t.items.map(_=>{const k=s(_.index,_.data,m);return a?H.createElement(h,{key:k,...nl(h,m),index:_.index,height:t.itemHeight,width:t.itemWidth}):H.createElement(d,{...nl(d,m),className:r,"data-index":_.index,key:k},o(_.index,_.data,m))}))}),PZ=H.memo(function(){const t=pr("HeaderComponent"),n=Is("headerHeight"),r=pr("headerFooterTag"),o=Ym(a=>n(Xh(a,"height"))),s=pr("context");return t?H.createElement(r,{ref:o},H.createElement(t,nl(t,s))):null}),jZ=H.memo(function(){const t=pr("FooterComponent"),n=Is("footerHeight"),r=pr("headerFooterTag"),o=Ym(a=>n(Xh(a,"height"))),s=pr("context");return t?H.createElement(r,{ref:o},H.createElement(t,nl(t,s))):null}),IZ=({children:e})=>{const t=H.useContext(ZE),n=Is("itemDimensions"),r=Is("viewportDimensions"),o=Ym(s=>{r(s.getBoundingClientRect())});return H.useEffect(()=>{t&&(r({height:t.viewportHeight,width:t.viewportWidth}),n({height:t.itemHeight,width:t.itemWidth}))},[t,r,n]),H.createElement("div",{style:eO,ref:o},e)},EZ=({children:e})=>{const t=H.useContext(ZE),n=Is("windowViewportRect"),r=Is("itemDimensions"),o=pr("customScrollParent"),s=hZ(n,o);return H.useEffect(()=>{t&&(r({height:t.itemHeight,width:t.itemWidth}),n({offsetTop:0,visibleHeight:t.viewportHeight,visibleWidth:t.viewportWidth}))},[t,n,r]),H.createElement("div",{ref:s,style:eO},e)},OZ=H.memo(function({...t}){const n=pr("useWindowScroll"),r=pr("customScrollParent"),o=r||n?DZ:MZ,s=r||n?EZ:IZ;return H.createElement(o,{...t},H.createElement(s,null,H.createElement(PZ,null),H.createElement(_Z,null),H.createElement(jZ,null)))}),{Component:RZ,usePublisher:Is,useEmitterValue:pr,useEmitter:nO}=QJ(kZ,{optional:{context:"context",totalCount:"totalCount",overscan:"overscan",itemContent:"itemContent",components:"components",computeItemKey:"computeItemKey",data:"data",initialItemCount:"initialItemCount",scrollSeekConfiguration:"scrollSeekConfiguration",headerFooterTag:"headerFooterTag",listClassName:"listClassName",itemClassName:"itemClassName",useWindowScroll:"useWindowScroll",customScrollParent:"customScrollParent",scrollerRef:"scrollerRef",logLevel:"logLevel",restoreStateFrom:"restoreStateFrom",initialTopMostItemIndex:"initialTopMostItemIndex"},methods:{scrollTo:"scrollTo",scrollBy:"scrollBy",scrollToIndex:"scrollToIndex"},events:{isScrolling:"isScrolling",endReached:"endReached",startReached:"startReached",rangeChanged:"rangeChanged",atBottomStateChange:"atBottomStateChange",atTopStateChange:"atTopStateChange",stateChanged:"stateChanged"}},OZ),MZ=vZ({usePublisher:Is,useEmitterValue:pr,useEmitter:nO}),DZ=bZ({usePublisher:Is,useEmitterValue:pr,useEmitter:nO});function vk(e,t,n){return t!=="normal"&&!(t!=null&&t.endsWith("px"))&&n(`${e} was not resolved to pixel value correctly`,t,Vy.WARN),t==="normal"?0:parseInt(t??"0",10)}const rO=RZ,AZ=({imageDTO:e})=>i.jsx(F,{sx:{pointerEvents:"none",flexDirection:"column",position:"absolute",top:0,insetInlineStart:0,p:2,alignItems:"flex-start",gap:2},children:i.jsxs(ml,{variant:"solid",colorScheme:"base",children:[e.width," × ",e.height]})}),Jm=({postUploadAction:e,isDisabled:t})=>{const n=z(d=>d.gallery.autoAddBoardId),[r]=D_(),o=f.useCallback(d=>{const p=d[0];p&&r({file:p,image_category:"user",is_intermediate:!1,postUploadAction:e??{type:"TOAST"},board_id:n})},[n,e,r]),{getRootProps:s,getInputProps:a,open:c}=ey({accept:{"image/png":[".png"],"image/jpeg":[".jpg",".jpeg",".png"]},onDropAccepted:o,disabled:t,noDrag:!0,multiple:!1});return{getUploadButtonProps:s,getUploadInputProps:a,openUploader:c}},Uy=()=>{const e=te(),t=Wc(),{t:n}=ye(),r=f.useCallback(()=>{t({title:n("toast.parameterSet"),status:"info",duration:2500,isClosable:!0})},[n,t]),o=f.useCallback(()=>{t({title:n("toast.parameterNotSet"),status:"warning",duration:2500,isClosable:!0})},[n,t]),s=f.useCallback(()=>{t({title:n("toast.parametersSet"),status:"info",duration:2500,isClosable:!0})},[n,t]),a=f.useCallback(()=>{t({title:n("toast.parametersNotSet"),status:"warning",duration:2500,isClosable:!0})},[n,t]),c=f.useCallback((O,R,M,A)=>{if(Af(O)||Tf(R)||fu(M)||p0(A)){Af(O)&&e($u(O)),Tf(R)&&e(zu(R)),fu(M)&&e(Lu(M)),fu(A)&&e(Bu(A)),r();return}o()},[e,r,o]),d=f.useCallback(O=>{if(!Af(O)){o();return}e($u(O)),r()},[e,r,o]),p=f.useCallback(O=>{if(!Tf(O)){o();return}e(zu(O)),r()},[e,r,o]),h=f.useCallback(O=>{if(!fu(O)){o();return}e(Lu(O)),r()},[e,r,o]),m=f.useCallback(O=>{if(!p0(O)){o();return}e(Bu(O)),r()},[e,r,o]),v=f.useCallback(O=>{if(!K2(O)){o();return}e($p(O)),r()},[e,r,o]),b=f.useCallback(O=>{if(!h0(O)){o();return}e(zp(O)),r()},[e,r,o]),w=f.useCallback(O=>{if(!m0(O)){o();return}e(Pv(O)),r()},[e,r,o]),y=f.useCallback(O=>{if(!g0(O)){o();return}e(jv(O)),r()},[e,r,o]),S=f.useCallback(O=>{if(!v0(O)){o();return}e(Lp(O)),r()},[e,r,o]),_=f.useCallback(O=>{if(!X2(O)){o();return}e(gc(O)),r()},[e,r,o]),k=f.useCallback(O=>{if(!Y2(O)){o();return}e(vc(O)),r()},[e,r,o]),j=f.useCallback(O=>{if(!Q2(O)){o();return}e(Bp(O)),r()},[e,r,o]),I=f.useCallback(O=>{e(Z1(O))},[e]),E=f.useCallback(O=>{if(!O){a();return}const{cfg_scale:R,height:M,model:A,positive_prompt:T,negative_prompt:$,scheduler:Q,seed:B,steps:V,width:q,strength:G,positive_style_prompt:D,negative_style_prompt:L,refiner_model:W,refiner_cfg_scale:Y,refiner_steps:ae,refiner_scheduler:be,refiner_aesthetic_store:ie,refiner_start:X}=O;h0(R)&&e(zp(R)),m0(A)&&e(Pv(A)),Af(T)&&e($u(T)),Tf($)&&e(zu($)),g0(Q)&&e(jv(Q)),K2(B)&&e($p(B)),v0(V)&&e(Lp(V)),X2(q)&&e(gc(q)),Y2(M)&&e(vc(M)),Q2(G)&&e(Bp(G)),fu(D)&&e(Lu(D)),p0(L)&&e(Bu(L)),m0(W)&&e(B_(W)),v0(ae)&&e(Iv(ae)),h0(Y)&&e(Ev(Y)),g0(be)&&e(F_(be)),J7(ie)&&e(Ov(ie)),Z7(X)&&e(Rv(X)),s()},[a,s,e]);return{recallBothPrompts:c,recallPositivePrompt:d,recallNegativePrompt:p,recallSDXLPositiveStylePrompt:h,recallSDXLNegativeStylePrompt:m,recallSeed:v,recallCfgScale:b,recallModel:w,recallScheduler:y,recallSteps:S,recallWidth:_,recallHeight:k,recallStrength:j,recallAllParameters:E,sendToImageToImage:I}},ir=e=>{const t=z(a=>a.config.disabledTabs),n=z(a=>a.config.disabledFeatures),r=z(a=>a.config.disabledSDFeatures),o=f.useMemo(()=>n.includes(e)||r.includes(e)||t.includes(e),[n,r,t,e]),s=f.useMemo(()=>!(n.includes(e)||r.includes(e)||t.includes(e)),[n,r,t,e]);return{isFeatureDisabled:o,isFeatureEnabled:s}},Gy=()=>{const e=Wc(),{t}=ye(),n=f.useMemo(()=>!!navigator.clipboard&&!!window.ClipboardItem,[]),r=f.useCallback(async o=>{n||e({title:t("toast.problemCopyingImage"),description:"Your browser doesn't support the Clipboard API.",status:"error",duration:2500,isClosable:!0});try{const a=await(await fetch(o)).blob();await navigator.clipboard.write([new ClipboardItem({[a.type]:a})]),e({title:t("toast.imageCopied"),status:"success",duration:2500,isClosable:!0})}catch(s){e({title:t("toast.problemCopyingImage"),description:String(s),status:"error",duration:2500,isClosable:!0})}},[n,t,e]);return{isClipboardAPIAvailable:n,copyImageToClipboard:r}};function TZ(e,t,n){var r=this,o=f.useRef(null),s=f.useRef(0),a=f.useRef(null),c=f.useRef([]),d=f.useRef(),p=f.useRef(),h=f.useRef(e),m=f.useRef(!0);f.useEffect(function(){h.current=e},[e]);var v=!t&&t!==0&&typeof window<"u";if(typeof e!="function")throw new TypeError("Expected a function");t=+t||0;var b=!!(n=n||{}).leading,w=!("trailing"in n)||!!n.trailing,y="maxWait"in n,S=y?Math.max(+n.maxWait||0,t):null;f.useEffect(function(){return m.current=!0,function(){m.current=!1}},[]);var _=f.useMemo(function(){var k=function(M){var A=c.current,T=d.current;return c.current=d.current=null,s.current=M,p.current=h.current.apply(T,A)},j=function(M,A){v&&cancelAnimationFrame(a.current),a.current=v?requestAnimationFrame(M):setTimeout(M,A)},I=function(M){if(!m.current)return!1;var A=M-o.current;return!o.current||A>=t||A<0||y&&M-s.current>=S},E=function(M){return a.current=null,w&&c.current?k(M):(c.current=d.current=null,p.current)},O=function M(){var A=Date.now();if(I(A))return E(A);if(m.current){var T=t-(A-o.current),$=y?Math.min(T,S-(A-s.current)):T;j(M,$)}},R=function(){var M=Date.now(),A=I(M);if(c.current=[].slice.call(arguments),d.current=r,o.current=M,A){if(!a.current&&m.current)return s.current=o.current,j(O,t),b?k(o.current):p.current;if(y)return j(O,t),k(o.current)}return a.current||j(O,t),p.current};return R.cancel=function(){a.current&&(v?cancelAnimationFrame(a.current):clearTimeout(a.current)),s.current=0,c.current=o.current=d.current=a.current=null},R.isPending=function(){return!!a.current},R.flush=function(){return a.current?E(Date.now()):p.current},R},[b,y,t,S,w,v]);return _}function NZ(e,t){return e===t}function bk(e){return typeof e=="function"?function(){return e}:e}function qy(e,t,n){var r,o,s=n&&n.equalityFn||NZ,a=(r=f.useState(bk(e)),o=r[1],[r[0],f.useCallback(function(m){return o(bk(m))},[])]),c=a[0],d=a[1],p=TZ(f.useCallback(function(m){return d(m)},[d]),t,n),h=f.useRef(e);return s(h.current,e)||(p(e),h.current=e),[c,p]}eb("gallery/requestedBoardImagesDeletion");const $Z=eb("gallery/sentImageToCanvas"),oO=eb("gallery/sentImageToImg2Img"),zZ=e=>{const{imageDTO:t}=e,n=f.useMemo(()=>fe([Ye],({gallery:V})=>({isInBatch:V.batchImageNames.includes(t.image_name)}),Ge),[t.image_name]),{isInBatch:r}=z(n),o=te(),{t:s}=ye(),a=Wc(),c=ir("unifiedCanvas").isFeatureEnabled,d=ir("batches").isFeatureEnabled,{onClickAddToBoard:p}=f.useContext(H_),[h,m]=qy(t.image_name,500),{currentData:v}=tb(m.isPending()?oo.skipToken:h??oo.skipToken),{isClipboardAPIAvailable:b,copyImageToClipboard:w}=Gy(),y=v==null?void 0:v.metadata,S=f.useCallback(()=>{t&&o(nb(t))},[o,t]),{recallBothPrompts:_,recallSeed:k,recallAllParameters:j}=Uy(),[I]=eR(),E=f.useCallback(()=>{_(y==null?void 0:y.positive_prompt,y==null?void 0:y.negative_prompt,y==null?void 0:y.positive_style_prompt,y==null?void 0:y.negative_style_prompt)},[y==null?void 0:y.negative_prompt,y==null?void 0:y.positive_prompt,y==null?void 0:y.positive_style_prompt,y==null?void 0:y.negative_style_prompt,_]),O=f.useCallback(()=>{k(y==null?void 0:y.seed)},[y==null?void 0:y.seed,k]),R=f.useCallback(()=>{o(oO()),o(Z1(t))},[o,t]),M=f.useCallback(()=>{o($Z()),o(tR(t)),o(im()),o(Xl("unifiedCanvas")),a({title:s("toast.sentToUnifiedCanvas"),status:"success",duration:2500,isClosable:!0})},[o,t,s,a]),A=f.useCallback(()=>{console.log(y),j(y)},[y,j]),T=f.useCallback(()=>{p(t)},[t,p]),$=f.useCallback(()=>{t.board_id&&I({imageDTO:t})},[t,I]),Q=f.useCallback(()=>{o(nR([t.image_name]))},[o,t.image_name]),B=f.useCallback(()=>{w(t.image_url)},[w,t.image_url]);return i.jsxs(i.Fragment,{children:[i.jsx(Pr,{as:"a",href:t.image_url,target:"_blank",icon:i.jsx(uW,{}),children:s("common.openInNewTab")}),b&&i.jsx(Pr,{icon:i.jsx(Vc,{}),onClickCapture:B,children:s("parameters.copyImage")}),i.jsx(Pr,{as:"a",download:!0,href:t.image_url,target:"_blank",icon:i.jsx(ny,{}),w:"100%",children:s("parameters.downloadImage")}),i.jsx(Pr,{icon:i.jsx(jP,{}),onClickCapture:E,isDisabled:(y==null?void 0:y.positive_prompt)===void 0&&(y==null?void 0:y.negative_prompt)===void 0,children:s("parameters.usePrompt")}),i.jsx(Pr,{icon:i.jsx(IP,{}),onClickCapture:O,isDisabled:(y==null?void 0:y.seed)===void 0,children:s("parameters.useSeed")}),i.jsx(Pr,{icon:i.jsx(vP,{}),onClickCapture:A,isDisabled:!y,children:s("parameters.useAll")}),i.jsx(Pr,{icon:i.jsx(OS,{}),onClickCapture:R,id:"send-to-img2img",children:s("parameters.sendToImg2Img")}),c&&i.jsx(Pr,{icon:i.jsx(OS,{}),onClickCapture:M,id:"send-to-canvas",children:s("parameters.sendToUnifiedCanvas")}),d&&i.jsx(Pr,{icon:i.jsx(V0,{}),isDisabled:r,onClickCapture:Q,children:"Add to Batch"}),i.jsx(Pr,{icon:i.jsx(V0,{}),onClickCapture:T,children:t.board_id?"Change Board":"Add to Board"}),t.board_id&&i.jsx(Pr,{icon:i.jsx(V0,{}),onClickCapture:$,children:"Remove from Board"}),i.jsx(Pr,{sx:{color:"error.600",_dark:{color:"error.300"}},icon:i.jsx(us,{}),onClickCapture:S,children:s("gallery.deleteImage")})]})},sO=f.memo(zZ),LZ=({imageDTO:e,children:t})=>{const n=f.useCallback(r=>{r.preventDefault()},[]);return i.jsx(fj,{menuProps:{size:"sm",isLazy:!0},menuButtonProps:{bg:"transparent",_hover:{bg:"transparent"}},renderMenu:()=>e?i.jsx(Fc,{sx:{visibility:"visible !important"},motionProps:um,onContextMenu:n,children:i.jsx(sO,{imageDTO:e})}):null,children:t})},aO=f.memo(LZ),BZ=e=>{const{data:t,disabled:n,onClick:r}=e,o=f.useRef(ui()),{attributes:s,listeners:a,setNodeRef:c}=rR({id:o.current,disabled:n,data:t});return i.jsx(Ee,{onClick:r,ref:c,position:"absolute",w:"full",h:"full",top:0,insetInlineStart:0,...s,...a})},FZ=f.memo(BZ),HZ=e=>{const{imageDTO:t,onClickReset:n,onError:r,onClick:o,withResetIcon:s=!1,withMetadataOverlay:a=!1,isDropDisabled:c=!1,isDragDisabled:d=!1,isUploadDisabled:p=!1,minSize:h=24,postUploadAction:m,imageSx:v,fitContainer:b=!1,droppableData:w,draggableData:y,dropLabel:S,isSelected:_=!1,thumbnail:k=!1,resetTooltip:j="Reset",resetIcon:I=i.jsx(oy,{}),noContentFallback:E=i.jsx(mi,{icon:ll}),useThumbailFallback:O,withHoverOverlay:R=!1}=e,{colorMode:M}=Ds(),[A,T]=f.useState(!1),$=f.useCallback(()=>{T(!0)},[]),Q=f.useCallback(()=>{T(!1)},[]),{getUploadButtonProps:B,getUploadInputProps:V}=Jm({postUploadAction:m,isDisabled:p}),q=Cp("drop-shadow(0px 0px 0.1rem var(--invokeai-colors-base-600))","drop-shadow(0px 0px 0.1rem var(--invokeai-colors-base-800))"),G=p?{}:{cursor:"pointer",bg:Fe("base.200","base.800")(M),_hover:{bg:Fe("base.300","base.650")(M),color:Fe("base.500","base.300")(M)}};return i.jsx(aO,{imageDTO:t,children:D=>i.jsxs(F,{ref:D,onMouseOver:$,onMouseOut:Q,sx:{width:"full",height:"full",alignItems:"center",justifyContent:"center",position:"relative",minW:h||void 0,minH:h||void 0,userSelect:"none",cursor:d||!t?"default":"pointer"},children:[t&&i.jsxs(F,{sx:{w:"full",h:"full",position:b?"absolute":"relative",alignItems:"center",justifyContent:"center"},children:[i.jsx(Nc,{src:k?t.thumbnail_url:t.image_url,fallbackStrategy:"beforeLoadOrError",fallbackSrc:O?t.thumbnail_url:void 0,fallback:O?void 0:i.jsx(FJ,{image:t}),width:t.width,height:t.height,onError:r,draggable:!1,sx:{objectFit:"contain",maxW:"full",maxH:"full",borderRadius:"base",...v}}),a&&i.jsx(AZ,{imageDTO:t}),i.jsx(ky,{isSelected:_,isHovered:R?A:!1})]}),!t&&!p&&i.jsx(i.Fragment,{children:i.jsxs(F,{sx:{minH:h,w:"full",h:"full",alignItems:"center",justifyContent:"center",borderRadius:"base",transitionProperty:"common",transitionDuration:"0.1s",color:Fe("base.500","base.500")(M),...G},...B(),children:[i.jsx("input",{...V()}),i.jsx(no,{as:zd,sx:{boxSize:16}})]})}),!t&&p&&E,t&&!d&&i.jsx(FZ,{data:y,disabled:d||!t,onClick:o}),!c&&i.jsx(Cy,{data:w,disabled:c,dropLabel:S}),n&&s&&t&&i.jsx(Le,{onClick:n,"aria-label":j,tooltip:j,icon:I,size:"sm",variant:"link",sx:{position:"absolute",top:1,insetInlineEnd:1,p:0,minW:0,svg:{transitionProperty:"common",transitionDuration:"normal",fill:"base.100",_hover:{fill:"base.50"},filter:q}}})]})})},yi=f.memo(HZ),WZ=()=>i.jsx(Ee,{sx:{position:"relative",height:"full",width:"full","::before":{content:"''",display:"block",pt:"100%"}},children:i.jsx(F,{sx:{position:"absolute",top:0,insetInlineStart:0,height:"full",width:"full",alignItems:"center",justifyContent:"center",borderRadius:"base",bg:"base.100",color:"base.500",_dark:{color:"base.700",bg:"base.850"}},children:i.jsx(no,{as:iW,boxSize:16,opacity:.7})})}),iO=()=>i.jsx(km,{sx:{position:"relative",height:"full",width:"full","::before":{content:"''",display:"block",pt:"100%"}},children:i.jsx(Ee,{sx:{position:"absolute",top:0,insetInlineStart:0,height:"full",width:"full"}})}),VZ=e=>fe([Ye],t=>({selectionCount:t.gallery.selection.length,selection:t.gallery.selection,isSelected:t.gallery.selection.includes(e)}),Ge),UZ=e=>{const t=te(),{imageName:n}=e,{currentData:r,isLoading:o,isError:s}=os(n),a=f.useMemo(()=>VZ(n),[n]),{isSelected:c,selectionCount:d,selection:p}=z(a),h=f.useCallback(()=>{t(oR([n]))},[t,n]),m=f.useMemo(()=>{if(d>1)return{id:"batch",payloadType:"IMAGE_NAMES",payload:{image_names:p}};if(r)return{id:"batch",payloadType:"IMAGE_DTO",payload:{imageDTO:r}}},[r,p,d]);return o?i.jsx(iO,{}):s||!r?i.jsx(WZ,{}):i.jsx(Ee,{sx:{w:"full",h:"full",touchAction:"none"},children:i.jsx(aO,{imageDTO:r,children:v=>i.jsx(Ee,{position:"relative",userSelect:"none",ref:v,sx:{display:"flex",justifyContent:"center",alignItems:"center",aspectRatio:"1/1"},children:i.jsx(yi,{imageDTO:r,draggableData:m,isSelected:c,minSize:0,onClickReset:h,isDropDisabled:!0,imageSx:{w:"full",h:"full"},isUploadDisabled:!0,resetTooltip:"Remove from batch",withResetIcon:!0,thumbnail:!0})},n)})})},GZ=f.memo(UZ),lO=Ae((e,t)=>i.jsx(Ee,{className:"item-container",ref:t,p:1.5,children:e.children})),cO=Ae((e,t)=>{const n=z(r=>r.gallery.galleryImageMinimumWidth);return i.jsx(sl,{...e,className:"list-container",ref:t,sx:{gridTemplateColumns:`repeat(auto-fill, minmax(${n}px, 1fr));`},children:e.children})}),qZ=fe([Ye],e=>({imageNames:e.gallery.batchImageNames}),Ge),KZ=()=>{const{t:e}=ye(),t=f.useRef(null),[n,r]=f.useState(null),[o,s]=wy({defer:!0,options:{scrollbars:{visibility:"auto",autoHide:"leave",autoHideDelay:1300,theme:"os-theme-dark"},overflow:{x:"hidden"}}}),{imageNames:a}=z(qZ);return f.useEffect(()=>{const{current:c}=t;return n&&c&&o({target:c,elements:{viewport:n}}),()=>{var d;return(d=s())==null?void 0:d.destroy()}},[n,o,s]),a.length?i.jsx(Ee,{ref:t,"data-overlayscrollbars":"",h:"100%",children:i.jsx(rO,{style:{height:"100%"},data:a,components:{Item:lO,List:cO},scrollerRef:r,itemContent:(c,d)=>i.jsx(GZ,{imageName:d},d)})}):i.jsx(mi,{label:e("gallery.noImagesInGallery"),icon:ll})},XZ=f.memo(KZ),YZ=e=>{const t=z(s=>s.gallery.galleryView),{data:n}=sR(e),{data:r}=aR(e),o=f.useMemo(()=>t==="images"?n:r,[t,r,n]);return{totalImages:n,totalAssets:r,currentViewTotal:o}},QZ=e=>fe([Ye],({gallery:t})=>({isSelected:t.selection.includes(e),selectionCount:t.selection.length,selection:t.selection}),Ge),JZ=e=>{const t=te(),{imageName:n}=e,{currentData:r}=os(n),o=f.useMemo(()=>QZ(n),[n]),{isSelected:s,selectionCount:a,selection:c}=z(o),d=f.useCallback(()=>{t(Mv(n))},[t,n]),p=f.useCallback(m=>{m.stopPropagation(),r&&t(nb(r))},[t,r]),h=f.useMemo(()=>{if(a>1)return{id:"gallery-image",payloadType:"IMAGE_NAMES",payload:{image_names:c}};if(r)return{id:"gallery-image",payloadType:"IMAGE_DTO",payload:{imageDTO:r}}},[r,c,a]);return r?i.jsx(Ee,{sx:{w:"full",h:"full",touchAction:"none"},children:i.jsx(F,{userSelect:"none",sx:{position:"relative",justifyContent:"center",alignItems:"center",aspectRatio:"1/1"},children:i.jsx(yi,{onClick:d,imageDTO:r,draggableData:h,isSelected:s,minSize:0,onClickReset:p,imageSx:{w:"full",h:"full"},isDropDisabled:!0,isUploadDisabled:!0,thumbnail:!0,withHoverOverlay:!0})})}):i.jsx(iO,{})},ZZ=f.memo(JZ),eee={defer:!0,options:{scrollbars:{visibility:"auto",autoHide:"leave",autoHideDelay:1300,theme:"os-theme-dark"},overflow:{x:"hidden"}}},tee=()=>{const{t:e}=ye(),t=f.useRef(null),[n,r]=f.useState(null),[o,s]=wy(eee),a=z(S=>S.gallery.selectedBoardId),{currentViewTotal:c}=YZ(a),d=z(W_),{currentData:p,isFetching:h,isSuccess:m,isError:v}=iR(d),[b]=V_(),w=f.useMemo(()=>!p||!c?!1:p.ids.length{w&&b({...d,offset:(p==null?void 0:p.ids.length)??0,limit:U_})},[w,b,d,p==null?void 0:p.ids.length]);return f.useEffect(()=>{const{current:S}=t;return n&&S&&o({target:S,elements:{viewport:n}}),()=>{var _;return(_=s())==null?void 0:_.destroy()}},[n,o,s]),p?m&&(p==null?void 0:p.ids.length)===0?i.jsx(F,{sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center"},children:i.jsx(mi,{label:e("gallery.noImagesInGallery"),icon:ll})}):m&&p?i.jsxs(i.Fragment,{children:[i.jsx(Ee,{ref:t,"data-overlayscrollbars":"",h:"100%",children:i.jsx(rO,{style:{height:"100%"},data:p.ids,endReached:y,components:{Item:lO,List:cO},scrollerRef:r,itemContent:(S,_)=>i.jsx(ZZ,{imageName:_},_)})}),i.jsx(Jt,{onClick:y,isDisabled:!w,isLoading:h,loadingText:"Loading",flexShrink:0,children:`Load More (${p.ids.length} of ${c})`})]}):v?i.jsx(Ee,{sx:{w:"full",h:"full"},children:i.jsx(mi,{label:"Unable to load Gallery",icon:xP})}):null:i.jsx(F,{sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center"},children:i.jsx(mi,{label:"Loading...",icon:ll})})},nee=f.memo(tee),ree=fe([Ye],e=>{const{selectedBoardId:t,galleryView:n}=e.gallery;return{selectedBoardId:t,galleryView:n}},Ge),oee=()=>{const e=f.useRef(null),t=f.useRef(null),{selectedBoardId:n,galleryView:r}=z(ree),o=te(),{isOpen:s,onToggle:a}=ss(),c=f.useCallback(()=>{o(J2("images"))},[o]),d=f.useCallback(()=>{o(J2("assets"))},[o]);return i.jsxs(Q3,{sx:{flexDirection:"column",h:"full",w:"full",borderRadius:"base"},children:[i.jsxs(Ee,{sx:{w:"full"},children:[i.jsxs(F,{ref:e,sx:{alignItems:"center",justifyContent:"space-between",gap:2},children:[i.jsx(wU,{isOpen:s,onToggle:a}),i.jsx(BJ,{}),i.jsx(CU,{})]}),i.jsx(Ee,{children:i.jsx(bU,{isOpen:s})})]}),i.jsxs(F,{ref:t,direction:"column",gap:2,h:"full",w:"full",children:[i.jsx(F,{sx:{alignItems:"center",justifyContent:"space-between",gap:2},children:i.jsx(Td,{index:r==="images"?0:1,variant:"unstyled",size:"sm",sx:{w:"full"},children:i.jsx(Nd,{children:i.jsxs(rr,{isAttached:!0,sx:{w:"full"},children:[i.jsx(Cc,{as:Jt,size:"sm",isChecked:r==="images",onClick:c,sx:{w:"full"},leftIcon:i.jsx(mW,{}),children:"Images"}),i.jsx(Cc,{as:Jt,size:"sm",isChecked:r==="assets",onClick:d,sx:{w:"full"},leftIcon:i.jsx(PW,{}),children:"Assets"})]})})})}),n==="batch"?i.jsx(XZ,{}):i.jsx(nee,{})]})]})},uO=f.memo(oee),see=fe([Kn,La,lR,lr],(e,t,n,r)=>{const{shouldPinGallery:o,shouldShowGallery:s}=t,{galleryImageMinimumWidth:a}=n;return{activeTabName:e,isStaging:r,shouldPinGallery:o,shouldShowGallery:s,galleryImageMinimumWidth:a,isResizable:e!=="unifiedCanvas"}},{memoizeOptions:{resultEqualityCheck:Zt}}),aee=()=>{const e=te(),{shouldPinGallery:t,shouldShowGallery:n,galleryImageMinimumWidth:r}=z(see),o=()=>{e(Dv(!1)),t&&e(ko())};rt("esc",()=>{e(Dv(!1))},{enabled:()=>!t,preventDefault:!0},[t]);const s=32;return rt("shift+up",()=>{if(r<256){const a=Es(r+s,32,256);e(Np(a))}},[r]),rt("shift+down",()=>{if(r>32){const a=Es(r-s,32,256);e(Np(a))}},[r]),t?null:i.jsx(pP,{direction:"right",isResizable:!0,isOpen:n,onClose:o,minWidth:400,children:i.jsx(uO,{})})},iee=f.memo(aee),lee=e=>{const{label:t,isDisabled:n=!1,width:r="auto",formControlProps:o,formLabelProps:s,tooltip:a,...c}=e;return i.jsx(wn,{label:a,hasArrow:!0,placement:"top",isDisabled:!a,children:i.jsxs(go,{isDisabled:n,width:r,display:"flex",alignItems:"center",...o,children:[t&&i.jsx(Lo,{my:1,flexGrow:1,sx:{cursor:n?"not-allowed":"pointer",...s==null?void 0:s.sx,pe:4},...s,children:t}),i.jsx(Qb,{...c})]})})},Er=f.memo(lee),cee=fe([Ye,cR],({system:e,config:t,imageDeletion:n},r)=>{const{shouldConfirmOnDelete:o}=e,{canRestoreDeletedImagesFromBin:s}=t,{imageToDelete:a,isModalOpen:c}=n;return{shouldConfirmOnDelete:o,canRestoreDeletedImagesFromBin:s,imageToDelete:a,imageUsage:r,isModalOpen:c}},Ge),uee=()=>{const e=te(),{t}=ye(),{shouldConfirmOnDelete:n,canRestoreDeletedImagesFromBin:r,imageToDelete:o,imageUsage:s,isModalOpen:a}=z(cee),c=f.useCallback(m=>e(G_(!m.target.checked)),[e]),d=f.useCallback(()=>{e(Z2()),e(uR(!1))},[e]),p=f.useCallback(()=>{!o||!s||(e(Z2()),e(dR({imageDTO:o,imageUsage:s})))},[e,o,s]),h=f.useRef(null);return i.jsx(Md,{isOpen:a,onClose:d,leastDestructiveRef:h,isCentered:!0,children:i.jsx(Da,{children:i.jsxs(Dd,{children:[i.jsx(Ma,{fontSize:"lg",fontWeight:"bold",children:t("gallery.deleteImage")}),i.jsx(Aa,{children:i.jsxs(F,{direction:"column",gap:3,children:[i.jsx(ij,{imageUsage:s}),i.jsx(Pi,{}),i.jsx(qe,{children:t(r?"gallery.deleteImageBin":"gallery.deleteImagePermanent")}),i.jsx(qe,{children:t("common.areYouSure")}),i.jsx(Er,{label:t("common.dontAskMeAgain"),isChecked:!n,onChange:c})]})}),i.jsxs(Ra,{children:[i.jsx(Jt,{ref:h,onClick:d,children:"Cancel"}),i.jsx(Jt,{colorScheme:"error",onClick:p,ml:3,children:"Delete"})]})]})})})},dee=f.memo(uee);function fee(e){const{title:t,hotkey:n,description:r}=e;return i.jsxs(sl,{sx:{gridTemplateColumns:"auto max-content",justifyContent:"space-between",alignItems:"center"},children:[i.jsxs(sl,{children:[i.jsx(qe,{fontWeight:600,children:t}),r&&i.jsx(qe,{sx:{fontSize:"sm"},variant:"subtext",children:r})]}),i.jsx(Ee,{sx:{fontSize:"sm",fontWeight:600,px:2,py:1},children:n})]})}function pee({children:e}){const{isOpen:t,onOpen:n,onClose:r}=ss(),{t:o}=ye(),s=[{title:o("hotkeys.invoke.title"),desc:o("hotkeys.invoke.desc"),hotkey:"Ctrl+Enter"},{title:o("hotkeys.cancel.title"),desc:o("hotkeys.cancel.desc"),hotkey:"Shift+X"},{title:o("hotkeys.focusPrompt.title"),desc:o("hotkeys.focusPrompt.desc"),hotkey:"Alt+A"},{title:o("hotkeys.toggleOptions.title"),desc:o("hotkeys.toggleOptions.desc"),hotkey:"O"},{title:o("hotkeys.pinOptions.title"),desc:o("hotkeys.pinOptions.desc"),hotkey:"Shift+O"},{title:o("hotkeys.toggleGallery.title"),desc:o("hotkeys.toggleGallery.desc"),hotkey:"G"},{title:o("hotkeys.maximizeWorkSpace.title"),desc:o("hotkeys.maximizeWorkSpace.desc"),hotkey:"F"},{title:o("hotkeys.changeTabs.title"),desc:o("hotkeys.changeTabs.desc"),hotkey:"1-5"}],a=[{title:o("hotkeys.setPrompt.title"),desc:o("hotkeys.setPrompt.desc"),hotkey:"P"},{title:o("hotkeys.setSeed.title"),desc:o("hotkeys.setSeed.desc"),hotkey:"S"},{title:o("hotkeys.setParameters.title"),desc:o("hotkeys.setParameters.desc"),hotkey:"A"},{title:o("hotkeys.upscale.title"),desc:o("hotkeys.upscale.desc"),hotkey:"Shift+U"},{title:o("hotkeys.showInfo.title"),desc:o("hotkeys.showInfo.desc"),hotkey:"I"},{title:o("hotkeys.sendToImageToImage.title"),desc:o("hotkeys.sendToImageToImage.desc"),hotkey:"Shift+I"},{title:o("hotkeys.deleteImage.title"),desc:o("hotkeys.deleteImage.desc"),hotkey:"Del"},{title:o("hotkeys.closePanels.title"),desc:o("hotkeys.closePanels.desc"),hotkey:"Esc"}],c=[{title:o("hotkeys.previousImage.title"),desc:o("hotkeys.previousImage.desc"),hotkey:"Arrow Left"},{title:o("hotkeys.nextImage.title"),desc:o("hotkeys.nextImage.desc"),hotkey:"Arrow Right"},{title:o("hotkeys.toggleGalleryPin.title"),desc:o("hotkeys.toggleGalleryPin.desc"),hotkey:"Shift+G"},{title:o("hotkeys.increaseGalleryThumbSize.title"),desc:o("hotkeys.increaseGalleryThumbSize.desc"),hotkey:"Shift+Up"},{title:o("hotkeys.decreaseGalleryThumbSize.title"),desc:o("hotkeys.decreaseGalleryThumbSize.desc"),hotkey:"Shift+Down"}],d=[{title:o("hotkeys.selectBrush.title"),desc:o("hotkeys.selectBrush.desc"),hotkey:"B"},{title:o("hotkeys.selectEraser.title"),desc:o("hotkeys.selectEraser.desc"),hotkey:"E"},{title:o("hotkeys.decreaseBrushSize.title"),desc:o("hotkeys.decreaseBrushSize.desc"),hotkey:"["},{title:o("hotkeys.increaseBrushSize.title"),desc:o("hotkeys.increaseBrushSize.desc"),hotkey:"]"},{title:o("hotkeys.decreaseBrushOpacity.title"),desc:o("hotkeys.decreaseBrushOpacity.desc"),hotkey:"Shift + ["},{title:o("hotkeys.increaseBrushOpacity.title"),desc:o("hotkeys.increaseBrushOpacity.desc"),hotkey:"Shift + ]"},{title:o("hotkeys.moveTool.title"),desc:o("hotkeys.moveTool.desc"),hotkey:"V"},{title:o("hotkeys.fillBoundingBox.title"),desc:o("hotkeys.fillBoundingBox.desc"),hotkey:"Shift + F"},{title:o("hotkeys.eraseBoundingBox.title"),desc:o("hotkeys.eraseBoundingBox.desc"),hotkey:"Delete / Backspace"},{title:o("hotkeys.colorPicker.title"),desc:o("hotkeys.colorPicker.desc"),hotkey:"C"},{title:o("hotkeys.toggleSnap.title"),desc:o("hotkeys.toggleSnap.desc"),hotkey:"N"},{title:o("hotkeys.quickToggleMove.title"),desc:o("hotkeys.quickToggleMove.desc"),hotkey:"Hold Space"},{title:o("hotkeys.toggleLayer.title"),desc:o("hotkeys.toggleLayer.desc"),hotkey:"Q"},{title:o("hotkeys.clearMask.title"),desc:o("hotkeys.clearMask.desc"),hotkey:"Shift+C"},{title:o("hotkeys.hideMask.title"),desc:o("hotkeys.hideMask.desc"),hotkey:"H"},{title:o("hotkeys.showHideBoundingBox.title"),desc:o("hotkeys.showHideBoundingBox.desc"),hotkey:"Shift+H"},{title:o("hotkeys.mergeVisible.title"),desc:o("hotkeys.mergeVisible.desc"),hotkey:"Shift+M"},{title:o("hotkeys.saveToGallery.title"),desc:o("hotkeys.saveToGallery.desc"),hotkey:"Shift+S"},{title:o("hotkeys.copyToClipboard.title"),desc:o("hotkeys.copyToClipboard.desc"),hotkey:"Ctrl+C"},{title:o("hotkeys.downloadImage.title"),desc:o("hotkeys.downloadImage.desc"),hotkey:"Shift+D"},{title:o("hotkeys.undoStroke.title"),desc:o("hotkeys.undoStroke.desc"),hotkey:"Ctrl+Z"},{title:o("hotkeys.redoStroke.title"),desc:o("hotkeys.redoStroke.desc"),hotkey:"Ctrl+Shift+Z, Ctrl+Y"},{title:o("hotkeys.resetView.title"),desc:o("hotkeys.resetView.desc"),hotkey:"R"},{title:o("hotkeys.previousStagingImage.title"),desc:o("hotkeys.previousStagingImage.desc"),hotkey:"Arrow Left"},{title:o("hotkeys.nextStagingImage.title"),desc:o("hotkeys.nextStagingImage.desc"),hotkey:"Arrow Right"},{title:o("hotkeys.acceptStagingImage.title"),desc:o("hotkeys.acceptStagingImage.desc"),hotkey:"Enter"}],p=h=>i.jsx(F,{flexDir:"column",gap:4,children:h.map((m,v)=>i.jsxs(F,{flexDir:"column",px:2,gap:4,children:[i.jsx(fee,{title:m.title,description:m.desc,hotkey:m.hotkey}),v{const{data:t}=fR(),n=f.useRef(null),r=dO(n);return i.jsxs(F,{alignItems:"center",gap:3,ps:1,ref:n,children:[i.jsx(Nc,{src:z_,alt:"invoke-ai-logo",sx:{w:"32px",h:"32px",minW:"32px",minH:"32px",userSelect:"none"}}),i.jsxs(F,{sx:{gap:3,alignItems:"center"},children:[i.jsxs(qe,{sx:{fontSize:"xl",userSelect:"none"},children:["invoke ",i.jsx("strong",{children:"ai"})]}),i.jsx(mo,{children:e&&r&&t&&i.jsx(Ir.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.15}},exit:{opacity:0,transition:{delay:.8}},children:i.jsx(qe,{sx:{fontWeight:600,marginTop:1,color:"base.300",fontSize:14},variant:"subtext",children:t.version})},"statusText")})]})]})},xee=e=>{const{tooltip:t,inputRef:n,label:r,disabled:o,required:s,...a}=e,c=FE();return i.jsx(wn,{label:t,placement:"top",hasArrow:!0,children:i.jsx(By,{label:r?i.jsx(go,{isRequired:s,isDisabled:o,children:i.jsx(Lo,{children:r})}):void 0,disabled:o,ref:n,styles:c,...a})})},Xr=f.memo(xee);function Xo(e){const{t}=ye(),{label:n,textProps:r,useBadge:o=!1,badgeLabel:s=t("settings.experimental"),badgeProps:a,...c}=e;return i.jsxs(F,{justifyContent:"space-between",py:1,children:[i.jsxs(F,{gap:2,alignItems:"center",children:[i.jsx(qe,{sx:{fontSize:14,_dark:{color:"base.300"}},...r,children:n}),o&&i.jsx(ml,{size:"xs",sx:{px:2,color:"base.700",bg:"accent.200",_dark:{bg:"accent.500",color:"base.200"}},...a,children:s})]}),i.jsx(Er,{...c})]})}const Kl=e=>i.jsx(F,{sx:{flexDirection:"column",gap:2,p:4,borderRadius:"base",bg:"base.100",_dark:{bg:"base.900"}},children:e.children});function wee(){const e=te(),{data:t,refetch:n}=pR(),[r,{isLoading:o}]=hR(),s=f.useCallback(()=>{r().unwrap().then(c=>{e(mR()),e(rb()),e(On({title:`Cleared ${c} intermediates`,status:"info"}))})},[r,e]);f.useEffect(()=>{n()},[n]);const a=t?`Clear ${t} Intermediate${t>1?"s":""}`:"No Intermediates to Clear";return i.jsxs(Kl,{children:[i.jsx(Ys,{size:"sm",children:"Clear Intermediates"}),i.jsx(Jt,{colorScheme:"warning",onClick:s,isLoading:o,isDisabled:!t,children:a}),i.jsx(qe,{fontWeight:"bold",children:"Clearing intermediates will reset your Canvas and ControlNet state."}),i.jsx(qe,{variant:"subtext",children:"Intermediate images are byproducts of generation, different from the result images in the gallery. Clearing intermediates will free disk space."}),i.jsx(qe,{variant:"subtext",children:"Your gallery images will not be deleted."})]})}const See=()=>{const{base50:e,base100:t,base200:n,base300:r,base400:o,base500:s,base600:a,base700:c,base800:d,base900:p,accent200:h,accent300:m,accent400:v,accent500:b,accent600:w}=Fy(),{colorMode:y}=Ds(),[S]=Tc("shadows",["dark-lg"]);return f.useCallback(()=>({label:{color:Fe(c,r)(y)},separatorLabel:{color:Fe(s,s)(y),"::after":{borderTopColor:Fe(r,c)(y)}},searchInput:{":placeholder":{color:Fe(r,c)(y)}},input:{backgroundColor:Fe(e,p)(y),borderWidth:"2px",borderColor:Fe(n,d)(y),color:Fe(p,t)(y),paddingRight:24,fontWeight:600,"&:hover":{borderColor:Fe(r,a)(y)},"&:focus":{borderColor:Fe(m,w)(y)},"&:is(:focus, :hover)":{borderColor:Fe(o,s)(y)},"&:focus-within":{borderColor:Fe(h,w)(y)},"&[data-disabled]":{backgroundColor:Fe(r,c)(y),color:Fe(a,o)(y),cursor:"not-allowed"}},value:{backgroundColor:Fe(n,d)(y),color:Fe(p,t)(y),button:{color:Fe(p,t)(y)},"&:hover":{backgroundColor:Fe(r,c)(y),cursor:"pointer"}},dropdown:{backgroundColor:Fe(n,d)(y),borderColor:Fe(n,d)(y),boxShadow:S},item:{backgroundColor:Fe(n,d)(y),color:Fe(d,n)(y),padding:6,"&[data-hovered]":{color:Fe(p,t)(y),backgroundColor:Fe(r,c)(y)},"&[data-active]":{backgroundColor:Fe(r,c)(y),"&:hover":{color:Fe(p,t)(y),backgroundColor:Fe(r,c)(y)}},"&[data-selected]":{backgroundColor:Fe(v,w)(y),color:Fe(e,t)(y),fontWeight:600,"&:hover":{backgroundColor:Fe(b,b)(y),color:Fe("white",e)(y)}},"&[data-disabled]":{color:Fe(s,a)(y),cursor:"not-allowed"}},rightSection:{width:24,padding:20,button:{color:Fe(p,t)(y)}}}),[h,m,v,b,w,t,n,r,o,e,s,a,c,d,p,S,y])},Cee=e=>{const{searchable:t=!0,tooltip:n,inputRef:r,label:o,disabled:s,...a}=e,c=te(),d=f.useCallback(m=>{m.shiftKey&&c(jo(!0))},[c]),p=f.useCallback(m=>{m.shiftKey||c(jo(!1))},[c]),h=See();return i.jsx(wn,{label:n,placement:"top",hasArrow:!0,isOpen:!0,children:i.jsx(TE,{label:o?i.jsx(go,{isDisabled:s,children:i.jsx(Lo,{children:o})}):void 0,ref:r,disabled:s,onKeyDown:d,onKeyUp:p,searchable:t,maxDropdownHeight:300,styles:h,...a})})},kee=f.memo(Cee),_ee=cs(ob,(e,t)=>({value:t,label:e})).sort((e,t)=>e.label.localeCompare(t.label));function Pee(){const e=te(),{t}=ye(),n=z(o=>o.ui.favoriteSchedulers),r=f.useCallback(o=>{e(gR(o))},[e]);return i.jsx(kee,{label:t("settings.favoriteSchedulers"),value:n,data:_ee,onChange:r,clearable:!0,searchable:!0,maxSelectedValues:99,placeholder:t("settings.favoriteSchedulersPlaceholder")})}const jee={ar:Bn.t("common.langArabic",{lng:"ar"}),nl:Bn.t("common.langDutch",{lng:"nl"}),en:Bn.t("common.langEnglish",{lng:"en"}),fr:Bn.t("common.langFrench",{lng:"fr"}),de:Bn.t("common.langGerman",{lng:"de"}),he:Bn.t("common.langHebrew",{lng:"he"}),it:Bn.t("common.langItalian",{lng:"it"}),ja:Bn.t("common.langJapanese",{lng:"ja"}),ko:Bn.t("common.langKorean",{lng:"ko"}),pl:Bn.t("common.langPolish",{lng:"pl"}),pt_BR:Bn.t("common.langBrPortuguese",{lng:"pt_BR"}),pt:Bn.t("common.langPortuguese",{lng:"pt"}),ru:Bn.t("common.langRussian",{lng:"ru"}),zh_CN:Bn.t("common.langSimplifiedChinese",{lng:"zh_CN"}),es:Bn.t("common.langSpanish",{lng:"es"}),uk:Bn.t("common.langUkranian",{lng:"ua"})},Iee=fe([Ye],({system:e,ui:t,generation:n})=>{const{shouldConfirmOnDelete:r,enableImageDebugging:o,consoleLogLevel:s,shouldLogToConsole:a,shouldAntialiasProgressImage:c,isNodesEnabled:d,shouldUseNSFWChecker:p,shouldUseWatermarker:h}=e,{shouldUseCanvasBetaLayout:m,shouldUseSliders:v,shouldShowProgressInViewer:b}=t,{shouldShowAdvancedOptions:w}=n;return{shouldConfirmOnDelete:r,enableImageDebugging:o,shouldUseCanvasBetaLayout:m,shouldUseSliders:v,shouldShowProgressInViewer:b,consoleLogLevel:s,shouldLogToConsole:a,shouldAntialiasProgressImage:c,shouldShowAdvancedOptions:w,isNodesEnabled:d,shouldUseNSFWChecker:p,shouldUseWatermarker:h}},{memoizeOptions:{resultEqualityCheck:Zt}}),Eee=({children:e,config:t})=>{const n=te(),{t:r}=ye(),o=(t==null?void 0:t.shouldShowBetaLayout)??!0,s=(t==null?void 0:t.shouldShowDeveloperSettings)??!0,a=(t==null?void 0:t.shouldShowResetWebUiText)??!0,c=(t==null?void 0:t.shouldShowAdvancedOptionsSettings)??!0,d=(t==null?void 0:t.shouldShowClearIntermediates)??!0,p=(t==null?void 0:t.shouldShowNodesToggle)??!0,h=(t==null?void 0:t.shouldShowLocalizationToggle)??!0;f.useEffect(()=>{s||n(ew(!1))},[s,n]);const{isNSFWCheckerAvailable:m,isWatermarkerAvailable:v}=q_(void 0,{selectFromResult:({data:X})=>({isNSFWCheckerAvailable:(X==null?void 0:X.nsfw_methods.includes("nsfw_checker"))??!1,isWatermarkerAvailable:(X==null?void 0:X.watermarking_methods.includes("invisible_watermark"))??!1})}),{isOpen:b,onOpen:w,onClose:y}=ss(),{isOpen:S,onOpen:_,onClose:k}=ss(),{shouldConfirmOnDelete:j,enableImageDebugging:I,shouldUseCanvasBetaLayout:E,shouldUseSliders:O,shouldShowProgressInViewer:R,consoleLogLevel:M,shouldLogToConsole:A,shouldAntialiasProgressImage:T,shouldShowAdvancedOptions:$,isNodesEnabled:Q,shouldUseNSFWChecker:B,shouldUseWatermarker:V}=z(Iee),q=f.useCallback(()=>{Object.keys(window.localStorage).forEach(X=>{(vR.includes(X)||X.startsWith(bR))&&localStorage.removeItem(X)}),y(),_()},[y,_]),G=f.useCallback(X=>{n(yR(X))},[n]),D=f.useCallback(X=>{n(xR(X))},[n]),L=f.useCallback(X=>{n(ew(X.target.checked))},[n]),W=f.useCallback(X=>{n(wR(X.target.checked))},[n]),{colorMode:Y,toggleColorMode:ae}=Ds(),be=ir("localization").isFeatureEnabled,ie=z(Y6);return i.jsxs(i.Fragment,{children:[f.cloneElement(e,{onClick:w}),i.jsxs(sd,{isOpen:b,onClose:y,size:"2xl",isCentered:!0,children:[i.jsx(Da,{}),i.jsxs(ad,{children:[i.jsx(Ma,{bg:"none",children:r("common.settingsLabel")}),i.jsx(Ub,{}),i.jsx(Aa,{children:i.jsxs(F,{sx:{gap:4,flexDirection:"column"},children:[i.jsxs(Kl,{children:[i.jsx(Ys,{size:"sm",children:r("settings.general")}),i.jsx(Xo,{label:r("settings.confirmOnDelete"),isChecked:j,onChange:X=>n(G_(X.target.checked))}),c&&i.jsx(Xo,{label:r("settings.showAdvancedOptions"),isChecked:$,onChange:X=>n(SR(X.target.checked))})]}),i.jsxs(Kl,{children:[i.jsx(Ys,{size:"sm",children:r("settings.generation")}),i.jsx(Pee,{}),i.jsx(Xo,{label:"Enable NSFW Checker",isDisabled:!m,isChecked:B,onChange:X=>n(CR(X.target.checked))}),i.jsx(Xo,{label:"Enable Invisible Watermark",isDisabled:!v,isChecked:V,onChange:X=>n(kR(X.target.checked))})]}),i.jsxs(Kl,{children:[i.jsx(Ys,{size:"sm",children:r("settings.ui")}),i.jsx(Xo,{label:r("common.darkMode"),isChecked:Y==="dark",onChange:ae}),i.jsx(Xo,{label:r("settings.useSlidersForAll"),isChecked:O,onChange:X=>n(_R(X.target.checked))}),i.jsx(Xo,{label:r("settings.showProgressInViewer"),isChecked:R,onChange:X=>n(K_(X.target.checked))}),i.jsx(Xo,{label:r("settings.antialiasProgressImages"),isChecked:T,onChange:X=>n(PR(X.target.checked))}),o&&i.jsx(Xo,{label:r("settings.alternateCanvasLayout"),useBadge:!0,badgeLabel:r("settings.beta"),isChecked:E,onChange:X=>n(jR(X.target.checked))}),p&&i.jsx(Xo,{label:r("settings.enableNodesEditor"),useBadge:!0,isChecked:Q,onChange:W}),h&&i.jsx(Xr,{disabled:!be,label:r("common.languagePickerLabel"),value:ie,data:Object.entries(jee).map(([X,K])=>({value:X,label:K})),onChange:D})]}),s&&i.jsxs(Kl,{children:[i.jsx(Ys,{size:"sm",children:r("settings.developer")}),i.jsx(Xo,{label:r("settings.shouldLogToConsole"),isChecked:A,onChange:L}),i.jsx(Xr,{disabled:!A,label:r("settings.consoleLogLevel"),onChange:G,value:M,data:IR.concat()}),i.jsx(Xo,{label:r("settings.enableImageDebugging"),isChecked:I,onChange:X=>n(ER(X.target.checked))})]}),d&&i.jsx(wee,{}),i.jsxs(Kl,{children:[i.jsx(Ys,{size:"sm",children:r("settings.resetWebUI")}),i.jsx(Jt,{colorScheme:"error",onClick:q,children:r("settings.resetWebUI")}),a&&i.jsxs(i.Fragment,{children:[i.jsx(qe,{variant:"subtext",children:r("settings.resetWebUIDesc1")}),i.jsx(qe,{variant:"subtext",children:r("settings.resetWebUIDesc2")})]})]})]})}),i.jsx(Ra,{children:i.jsx(Jt,{onClick:y,children:r("common.close")})})]})]}),i.jsxs(sd,{closeOnOverlayClick:!1,isOpen:S,onClose:k,isCentered:!0,children:[i.jsx(Da,{backdropFilter:"blur(40px)"}),i.jsxs(ad,{children:[i.jsx(Ma,{}),i.jsx(Aa,{children:i.jsx(F,{justifyContent:"center",children:i.jsx(qe,{fontSize:"lg",children:i.jsx(qe,{children:r("settings.resetComplete")})})})}),i.jsx(Ra,{})]})]})]})},Oee=fe(vo,e=>{const{isConnected:t,isProcessing:n,statusTranslationKey:r,currentIteration:o,totalIterations:s,currentStatusHasSteps:a}=e;return{isConnected:t,isProcessing:n,currentIteration:o,totalIterations:s,statusTranslationKey:r,currentStatusHasSteps:a}},Ge),wk={ok:"green.400",working:"yellow.400",error:"red.400"},Sk={ok:"green.600",working:"yellow.500",error:"red.500"},Ree=()=>{const{isConnected:e,isProcessing:t,currentIteration:n,totalIterations:r,statusTranslationKey:o}=z(Oee),{t:s}=ye(),a=f.useRef(null),c=f.useMemo(()=>t?"working":e?"ok":"error",[t,e]),d=f.useMemo(()=>{if(n&&r)return` (${n}/${r})`},[n,r]),p=dO(a);return i.jsxs(F,{ref:a,h:"full",px:2,alignItems:"center",gap:5,children:[i.jsx(mo,{children:p&&i.jsx(Ir.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.15}},exit:{opacity:0,transition:{delay:.8}},children:i.jsxs(qe,{sx:{fontSize:"sm",fontWeight:"600",pb:"1px",userSelect:"none",color:Sk[c],_dark:{color:wk[c]}},children:[s(o),d]})},"statusText")}),i.jsx(no,{as:oW,sx:{boxSize:"0.5rem",color:Sk[c],_dark:{color:wk[c]}}})]})},Mee=()=>{const{t:e}=ye(),t=ir("bugLink").isFeatureEnabled,n=ir("discordLink").isFeatureEnabled,r=ir("githubLink").isFeatureEnabled,o="http://github.com/invoke-ai/InvokeAI",s="https://discord.gg/ZmtBAhwWhy";return i.jsxs(F,{sx:{gap:2,alignItems:"center"},children:[i.jsx(fO,{}),i.jsx(hl,{}),i.jsx(Ree,{}),i.jsxs(Od,{children:[i.jsx(Rd,{as:Le,variant:"link","aria-label":e("accessibility.menu"),icon:i.jsx(tW,{}),sx:{boxSize:8}}),i.jsxs(Fc,{motionProps:um,children:[i.jsxs(od,{title:e("common.communityLabel"),children:[r&&i.jsx(Pr,{as:"a",href:o,target:"_blank",icon:i.jsx(KH,{}),children:e("common.githubLabel")}),t&&i.jsx(Pr,{as:"a",href:`${o}/issues`,target:"_blank",icon:i.jsx(nW,{}),children:e("common.reportBugLabel")}),n&&i.jsx(Pr,{as:"a",href:s,target:"_blank",icon:i.jsx(qH,{}),children:e("common.discordLabel")})]}),i.jsxs(od,{title:e("common.settingsLabel"),children:[i.jsx(pee,{children:i.jsx(Pr,{as:"button",icon:i.jsx(bW,{}),children:e("common.hotkeysLabel")})}),i.jsx(Eee,{children:i.jsx(Pr,{as:"button",icon:i.jsx(sW,{}),children:e("common.settingsLabel")})})]})]})]})]})},Dee=f.memo(Mee);function Aee(e){return et({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M16.5 9c-.42 0-.83.04-1.24.11L1.01 3 1 10l9 2-9 2 .01 7 8.07-3.46C9.59 21.19 12.71 24 16.5 24c4.14 0 7.5-3.36 7.5-7.5S20.64 9 16.5 9zm0 13c-3.03 0-5.5-2.47-5.5-5.5s2.47-5.5 5.5-5.5 5.5 2.47 5.5 5.5-2.47 5.5-5.5 5.5z"}},{tag:"path",attr:{d:"M18.27 14.03l-1.77 1.76-1.77-1.76-.7.7 1.76 1.77-1.76 1.77.7.7 1.77-1.76 1.77 1.76.7-.7-1.76-1.77 1.76-1.77z"}}]})(e)}function Tee(e){return et({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0V0z"}},{tag:"path",attr:{d:"M17 16l-4-4V8.82C14.16 8.4 15 7.3 15 6c0-1.66-1.34-3-3-3S9 4.34 9 6c0 1.3.84 2.4 2 2.82V12l-4 4H3v5h5v-3.05l4-4.2 4 4.2V21h5v-5h-4z"}}]})(e)}function Nee(e){return et({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM8 20H4v-4h4v4zm0-6H4v-4h4v4zm0-6H4V4h4v4zm6 12h-4v-4h4v4zm0-6h-4v-4h4v4zm0-6h-4V4h4v4zm6 12h-4v-4h4v4zm0-6h-4v-4h4v4zm0-6h-4V4h4v4z"}}]})(e)}function $ee(e){return et({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M22 16V4c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2zm-11-4l2.03 2.71L16 11l4 5H8l3-4zM2 6v14c0 1.1.9 2 2 2h14v-2H4V6H2z"}}]})(e)}function zee(e){return et({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z"}}]})(e)}function pO(e){return et({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0V0z"}},{tag:"path",attr:{d:"M16 17.01V10h-2v7.01h-3L15 21l4-3.99h-3zM9 3L5 6.99h3V14h2V6.99h3L9 3zm7 14.01V10h-2v7.01h-3L15 21l4-3.99h-3zM9 3L5 6.99h3V14h2V6.99h3L9 3z"}}]})(e)}const Lee=fe(vo,e=>{const{isUploading:t}=e;let n="";return t&&(n="Uploading..."),{tooltip:n,shouldShow:t}}),Bee=()=>{const{shouldShow:e,tooltip:t}=z(Lee);return e?i.jsx(F,{sx:{alignItems:"center",justifyContent:"center",color:"base.600"},children:i.jsx(wn,{label:t,placement:"right",hasArrow:!0,children:i.jsx(pl,{})})}):null},Fee=f.memo(Bee),hO=e=>e.config,{createElement:Ec,createContext:Hee,forwardRef:mO,useCallback:ri,useContext:gO,useEffect:Ia,useImperativeHandle:vO,useLayoutEffect:Wee,useMemo:Vee,useRef:Zo,useState:Ku}=J1,Ck=J1["useId".toString()],Uee=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",em=Uee?Wee:()=>{},Gee=typeof Ck=="function"?Ck:()=>null;let qee=0;function Ky(e=null){const t=Gee(),n=Zo(e||t||null);return n.current===null&&(n.current=""+qee++),n.current}const Zm=Hee(null);Zm.displayName="PanelGroupContext";function bO({children:e=null,className:t="",collapsedSize:n=0,collapsible:r=!1,defaultSize:o=null,forwardedRef:s,id:a=null,maxSize:c=100,minSize:d=10,onCollapse:p=null,onResize:h=null,order:m=null,style:v={},tagName:b="div"}){const w=gO(Zm);if(w===null)throw Error("Panel components must be rendered within a PanelGroup container");const y=Ky(a),{collapsePanel:S,expandPanel:_,getPanelStyle:k,registerPanel:j,resizePanel:I,unregisterPanel:E}=w,O=Zo({onCollapse:p,onResize:h});if(Ia(()=>{O.current.onCollapse=p,O.current.onResize=h}),d<0||d>100)throw Error(`Panel minSize must be between 0 and 100, but was ${d}`);if(c<0||c>100)throw Error(`Panel maxSize must be between 0 and 100, but was ${c}`);if(o!==null){if(o<0||o>100)throw Error(`Panel defaultSize must be between 0 and 100, but was ${o}`);d>o&&!r&&(console.error(`Panel minSize ${d} cannot be greater than defaultSize ${o}`),o=d)}const R=k(y,o),M=Zo({size:kk(R)}),A=Zo({callbacksRef:O,collapsedSize:n,collapsible:r,defaultSize:o,id:y,maxSize:c,minSize:d,order:m});return em(()=>{M.current.size=kk(R),A.current.callbacksRef=O,A.current.collapsedSize=n,A.current.collapsible=r,A.current.defaultSize=o,A.current.id=y,A.current.maxSize=c,A.current.minSize=d,A.current.order=m}),em(()=>(j(y,A),()=>{E(y)}),[m,y,j,E]),vO(s,()=>({collapse:()=>S(y),expand:()=>_(y),getCollapsed(){return M.current.size===0},getSize(){return M.current.size},resize:T=>I(y,T)}),[S,_,y,I]),Ec(b,{children:e,className:t,"data-panel":"","data-panel-collapsible":r||void 0,"data-panel-id":y,"data-panel-size":parseFloat(""+R.flexGrow).toFixed(1),id:`data-panel-id-${y}`,style:{...R,...v}})}const pd=mO((e,t)=>Ec(bO,{...e,forwardedRef:t}));bO.displayName="Panel";pd.displayName="forwardRef(Panel)";function kk(e){const{flexGrow:t}=e;return typeof t=="string"?parseFloat(t):t}const fl=10;function Au(e,t,n,r,o,s,a,c){const{sizes:d}=c||{},p=d||s;if(o===0)return p;const h=Qo(t),m=p.concat();let v=0;{const y=o<0?r:n,S=h.findIndex(I=>I.current.id===y),_=h[S],k=p[S],j=_k(_,Math.abs(o),k,e);if(k===j)return p;j===0&&k>0&&a.set(y,k),o=o<0?k-j:j-k}let b=o<0?n:r,w=h.findIndex(y=>y.current.id===b);for(;;){const y=h[w],S=p[w],_=Math.abs(o)-Math.abs(v),k=_k(y,0-_,S,e);if(S!==k&&(k===0&&S>0&&a.set(y.current.id,S),v+=S-k,m[w]=k,v.toPrecision(fl).localeCompare(Math.abs(o).toPrecision(fl),void 0,{numeric:!0})>=0))break;if(o<0){if(--w<0)break}else if(++w>=h.length)break}return v===0?p:(b=o<0?r:n,w=h.findIndex(y=>y.current.id===b),m[w]=p[w]+v,m)}function Ul(e,t,n){t.forEach((r,o)=>{const{callbacksRef:s,collapsedSize:a,collapsible:c,id:d}=e[o].current,p=n[d];if(p!==r){n[d]=r;const{onCollapse:h,onResize:m}=s.current;m&&m(r,p),c&&h&&((p==null||p===a)&&r!==a?h(!1):p!==a&&r===a&&h(!0))}})}function dv(e,t){if(t.length<2)return[null,null];const n=t.findIndex(a=>a.current.id===e);if(n<0)return[null,null];const r=n===t.length-1,o=r?t[n-1].current.id:e,s=r?e:t[n+1].current.id;return[o,s]}function yO(e,t,n){if(e.size===1)return"100";const o=Qo(e).findIndex(a=>a.current.id===t),s=n[o];return s==null?"0":s.toPrecision(fl)}function Kee(e){const t=document.querySelector(`[data-panel-id="${e}"]`);return t||null}function Xy(e){const t=document.querySelector(`[data-panel-group-id="${e}"]`);return t||null}function eg(e){const t=document.querySelector(`[data-panel-resize-handle-id="${e}"]`);return t||null}function Xee(e){return xO().findIndex(r=>r.getAttribute("data-panel-resize-handle-id")===e)??null}function xO(){return Array.from(document.querySelectorAll("[data-panel-resize-handle-id]"))}function wO(e){return Array.from(document.querySelectorAll(`[data-panel-resize-handle-id][data-panel-group-id="${e}"]`))}function Yy(e,t,n){var d,p,h,m;const r=eg(t),o=wO(e),s=r?o.indexOf(r):-1,a=((p=(d=n[s])==null?void 0:d.current)==null?void 0:p.id)??null,c=((m=(h=n[s+1])==null?void 0:h.current)==null?void 0:m.id)??null;return[a,c]}function Qo(e){return Array.from(e.values()).sort((t,n)=>{const r=t.current.order,o=n.current.order;return r==null&&o==null?0:r==null?-1:o==null?1:r-o})}function _k(e,t,n,r){var h;const o=n+t,{collapsedSize:s,collapsible:a,maxSize:c,minSize:d}=e.current;if(a){if(n>s){if(o<=d/2+s)return s}else if(!((h=r==null?void 0:r.type)==null?void 0:h.startsWith("key"))&&o{const{direction:a,panels:c}=e.current,d=Xy(t),{height:p,width:h}=d.getBoundingClientRect(),v=wO(t).map(b=>{const w=b.getAttribute("data-panel-resize-handle-id"),y=Qo(c),[S,_]=Yy(t,w,y);if(S==null||_==null)return()=>{};let k=0,j=100,I=0,E=0;y.forEach($=>{$.current.id===S?(j=$.current.maxSize,k=$.current.minSize):(I+=$.current.minSize,E+=$.current.maxSize)});const O=Math.min(j,100-I),R=Math.max(k,(y.length-1)*100-E),M=yO(c,S,o);b.setAttribute("aria-valuemax",""+Math.round(O)),b.setAttribute("aria-valuemin",""+Math.round(R)),b.setAttribute("aria-valuenow",""+Math.round(parseInt(M)));const A=$=>{if(!$.defaultPrevented)switch($.key){case"Enter":{$.preventDefault();const Q=y.findIndex(B=>B.current.id===S);if(Q>=0){const B=y[Q],V=o[Q];if(V!=null){let q=0;V.toPrecision(fl)<=B.current.minSize.toPrecision(fl)?q=a==="horizontal"?h:p:q=-(a==="horizontal"?h:p);const G=Au($,c,S,_,q,o,s.current,null);o!==G&&r(G)}}break}}};b.addEventListener("keydown",A);const T=Kee(S);return T!=null&&b.setAttribute("aria-controls",T.id),()=>{b.removeAttribute("aria-valuemax"),b.removeAttribute("aria-valuemin"),b.removeAttribute("aria-valuenow"),b.removeEventListener("keydown",A),T!=null&&b.removeAttribute("aria-controls")}});return()=>{v.forEach(b=>b())}},[e,t,n,s,r,o])}function Qee({disabled:e,handleId:t,resizeHandler:n}){Ia(()=>{if(e||n==null)return;const r=eg(t);if(r==null)return;const o=s=>{if(!s.defaultPrevented)switch(s.key){case"ArrowDown":case"ArrowLeft":case"ArrowRight":case"ArrowUp":case"End":case"Home":{s.preventDefault(),n(s);break}case"F6":{s.preventDefault();const a=xO(),c=Xee(t);SO(c!==null);const d=s.shiftKey?c>0?c-1:a.length-1:c+1{r.removeEventListener("keydown",o)}},[e,t,n])}function Jee(e,t){if(e.length!==t.length)return!1;for(let n=0;nR.current.id===I),O=r[E];if(O.current.collapsible){const R=h[E];(R===0||R.toPrecision(fl)===O.current.minSize.toPrecision(fl))&&(_=_<0?-O.current.minSize*w:O.current.minSize*w)}return _}else return CO(e,n,o,c,d)}function ete(e){return e.type==="keydown"}function A1(e){return e.type.startsWith("mouse")}function T1(e){return e.type.startsWith("touch")}let N1=null,Xi=null;function kO(e){switch(e){case"horizontal":return"ew-resize";case"horizontal-max":return"w-resize";case"horizontal-min":return"e-resize";case"vertical":return"ns-resize";case"vertical-max":return"n-resize";case"vertical-min":return"s-resize"}}function tte(){Xi!==null&&(document.head.removeChild(Xi),N1=null,Xi=null)}function fv(e){if(N1===e)return;N1=e;const t=kO(e);Xi===null&&(Xi=document.createElement("style"),document.head.appendChild(Xi)),Xi.innerHTML=`*{cursor: ${t}!important;}`}function nte(e,t=10){let n=null;return(...o)=>{n!==null&&clearTimeout(n),n=setTimeout(()=>{e(...o)},t)}}function _O(e){return e.map(t=>{const{minSize:n,order:r}=t.current;return r?`${r}:${n}`:`${n}`}).sort((t,n)=>t.localeCompare(n)).join(",")}function PO(e,t){try{const n=t.getItem(`PanelGroup:sizes:${e}`);if(n){const r=JSON.parse(n);if(typeof r=="object"&&r!=null)return r}}catch{}return null}function rte(e,t,n){const r=PO(e,n);if(r){const o=_O(t);return r[o]??null}return null}function ote(e,t,n,r){const o=_O(t),s=PO(e,r)||{};s[o]=n;try{r.setItem(`PanelGroup:sizes:${e}`,JSON.stringify(s))}catch(a){console.error(a)}}const pv={};function Pk(e){try{if(typeof localStorage<"u")e.getItem=t=>localStorage.getItem(t),e.setItem=(t,n)=>{localStorage.setItem(t,n)};else throw new Error("localStorage not supported in this environment")}catch(t){console.error(t),e.getItem=()=>null,e.setItem=()=>{}}}const Tu={getItem:e=>(Pk(Tu),Tu.getItem(e)),setItem:(e,t)=>{Pk(Tu),Tu.setItem(e,t)}};function jO({autoSaveId:e,children:t=null,className:n="",direction:r,disablePointerEventsDuringResize:o=!1,forwardedRef:s,id:a=null,onLayout:c,storage:d=Tu,style:p={},tagName:h="div"}){const m=Ky(a),[v,b]=Ku(null),[w,y]=Ku(new Map),S=Zo(null),_=Zo({onLayout:c});Ia(()=>{_.current.onLayout=c});const k=Zo({}),[j,I]=Ku([]),E=Zo(new Map),O=Zo(0),R=Zo({direction:r,panels:w,sizes:j});vO(s,()=>({getLayout:()=>{const{sizes:D}=R.current;return D},setLayout:D=>{const L=D.reduce((be,ie)=>be+ie,0);SO(L===100,"Panel sizes must add up to 100%");const{panels:W}=R.current,Y=k.current,ae=Qo(W);I(D),Ul(ae,D,Y)}}),[]),em(()=>{R.current.direction=r,R.current.panels=w,R.current.sizes=j}),Yee({committedValuesRef:R,groupId:m,panels:w,setSizes:I,sizes:j,panelSizeBeforeCollapse:E}),Ia(()=>{const{onLayout:D}=_.current,{panels:L,sizes:W}=R.current;if(W.length>0){D&&D(W);const Y=k.current,ae=Qo(L);Ul(ae,W,Y)}},[j]),em(()=>{if(R.current.sizes.length===w.size)return;let L=null;if(e){const W=Qo(w);L=rte(e,W,d)}if(L!=null)I(L);else{const W=Qo(w);let Y=0,ae=0,be=0;if(W.forEach(ie=>{be+=ie.current.minSize,ie.current.defaultSize===null?Y++:ae+=ie.current.defaultSize}),ae>100)throw new Error("Default panel sizes cannot exceed 100%");if(W.length>1&&Y===0&&ae!==100)throw new Error("Invalid default sizes specified for panels");if(be>100)throw new Error("Minimum panel sizes cannot exceed 100%");I(W.map(ie=>ie.current.defaultSize===null?(100-ae)/Y:ie.current.defaultSize))}},[e,w,d]),Ia(()=>{if(e){if(j.length===0||j.length!==w.size)return;const D=Qo(w);pv[e]||(pv[e]=nte(ote,100)),pv[e](e,D,j,d)}},[e,w,j,d]);const M=ri((D,L)=>{const{panels:W}=R.current;return W.size===0?{flexBasis:0,flexGrow:L??void 0,flexShrink:1,overflow:"hidden"}:{flexBasis:0,flexGrow:yO(W,D,j),flexShrink:1,overflow:"hidden",pointerEvents:o&&v!==null?"none":void 0}},[v,o,j]),A=ri((D,L)=>{y(W=>{if(W.has(D))return W;const Y=new Map(W);return Y.set(D,L),Y})},[]),T=ri(D=>W=>{W.preventDefault();const{direction:Y,panels:ae,sizes:be}=R.current,ie=Qo(ae),[X,K]=Yy(m,D,ie);if(X==null||K==null)return;let U=Zee(W,m,D,ie,Y,be,S.current);if(U===0)return;const re=Xy(m).getBoundingClientRect(),oe=Y==="horizontal";document.dir==="rtl"&&oe&&(U=-U);const pe=oe?re.width:re.height,le=U/pe*100,ge=Au(W,ae,X,K,le,be,E.current,S.current),ke=!Jee(be,ge);if((A1(W)||T1(W))&&O.current!=le&&fv(ke?oe?"horizontal":"vertical":oe?U<0?"horizontal-min":"horizontal-max":U<0?"vertical-min":"vertical-max"),ke){const xe=k.current;I(ge),Ul(ie,ge,xe)}O.current=le},[m]),$=ri(D=>{y(L=>{if(!L.has(D))return L;const W=new Map(L);return W.delete(D),W})},[]),Q=ri(D=>{const{panels:L,sizes:W}=R.current,Y=L.get(D);if(Y==null)return;const{collapsedSize:ae,collapsible:be}=Y.current;if(!be)return;const ie=Qo(L),X=ie.indexOf(Y);if(X<0)return;const K=W[X];if(K===ae)return;E.current.set(D,K);const[U,se]=dv(D,ie);if(U==null||se==null)return;const oe=X===ie.length-1?K:ae-K,pe=Au(null,L,U,se,oe,W,E.current,null);if(W!==pe){const le=k.current;I(pe),Ul(ie,pe,le)}},[]),B=ri(D=>{const{panels:L,sizes:W}=R.current,Y=L.get(D);if(Y==null)return;const{collapsedSize:ae,minSize:be}=Y.current,ie=E.current.get(D)||be;if(!ie)return;const X=Qo(L),K=X.indexOf(Y);if(K<0||W[K]!==ae)return;const[se,re]=dv(D,X);if(se==null||re==null)return;const pe=K===X.length-1?ae-ie:ie,le=Au(null,L,se,re,pe,W,E.current,null);if(W!==le){const ge=k.current;I(le),Ul(X,le,ge)}},[]),V=ri((D,L)=>{const{panels:W,sizes:Y}=R.current,ae=W.get(D);if(ae==null)return;const{collapsedSize:be,collapsible:ie,maxSize:X,minSize:K}=ae.current,U=Qo(W),se=U.indexOf(ae);if(se<0)return;const re=Y[se];if(re===L)return;ie&&L===be||(L=Math.min(X,Math.max(K,L)));const[oe,pe]=dv(D,U);if(oe==null||pe==null)return;const ge=se===U.length-1?re-L:L-re,ke=Au(null,W,oe,pe,ge,Y,E.current,null);if(Y!==ke){const xe=k.current;I(ke),Ul(U,ke,xe)}},[]),q=Vee(()=>({activeHandleId:v,collapsePanel:Q,direction:r,expandPanel:B,getPanelStyle:M,groupId:m,registerPanel:A,registerResizeHandle:T,resizePanel:V,startDragging:(D,L)=>{if(b(D),A1(L)||T1(L)){const W=eg(D);S.current={dragHandleRect:W.getBoundingClientRect(),dragOffset:CO(L,D,r),sizes:R.current.sizes}}},stopDragging:()=>{tte(),b(null),S.current=null},unregisterPanel:$}),[v,Q,r,B,M,m,A,T,V,$]),G={display:"flex",flexDirection:r==="horizontal"?"row":"column",height:"100%",overflow:"hidden",width:"100%"};return Ec(Zm.Provider,{children:Ec(h,{children:t,className:n,"data-panel-group":"","data-panel-group-direction":r,"data-panel-group-id":m,style:{...G,...p}}),value:q})}const Qy=mO((e,t)=>Ec(jO,{...e,forwardedRef:t}));jO.displayName="PanelGroup";Qy.displayName="forwardRef(PanelGroup)";function $1({children:e=null,className:t="",disabled:n=!1,id:r=null,onDragging:o,style:s={},tagName:a="div"}){const c=Zo(null),d=Zo({onDragging:o});Ia(()=>{d.current.onDragging=o});const p=gO(Zm);if(p===null)throw Error("PanelResizeHandle components must be rendered within a PanelGroup container");const{activeHandleId:h,direction:m,groupId:v,registerResizeHandle:b,startDragging:w,stopDragging:y}=p,S=Ky(r),_=h===S,[k,j]=Ku(!1),[I,E]=Ku(null),O=ri(()=>{c.current.blur(),y();const{onDragging:A}=d.current;A&&A(!1)},[y]);Ia(()=>{if(n)E(null);else{const M=b(S);E(()=>M)}},[n,S,b]),Ia(()=>{if(n||I==null||!_)return;const M=Q=>{I(Q)},A=Q=>{I(Q)},$=c.current.ownerDocument;return $.body.addEventListener("contextmenu",O),$.body.addEventListener("mousemove",M),$.body.addEventListener("touchmove",M),$.body.addEventListener("mouseleave",A),window.addEventListener("mouseup",O),window.addEventListener("touchend",O),()=>{$.body.removeEventListener("contextmenu",O),$.body.removeEventListener("mousemove",M),$.body.removeEventListener("touchmove",M),$.body.removeEventListener("mouseleave",A),window.removeEventListener("mouseup",O),window.removeEventListener("touchend",O)}},[m,n,_,I,O]),Qee({disabled:n,handleId:S,resizeHandler:I});const R={cursor:kO(m),touchAction:"none",userSelect:"none"};return Ec(a,{children:e,className:t,"data-resize-handle-active":_?"pointer":k?"keyboard":void 0,"data-panel-group-direction":m,"data-panel-group-id":v,"data-panel-resize-handle-enabled":!n,"data-panel-resize-handle-id":S,onBlur:()=>j(!1),onFocus:()=>j(!0),onMouseDown:M=>{w(S,M.nativeEvent);const{onDragging:A}=d.current;A&&A(!0)},onMouseUp:O,onTouchCancel:O,onTouchEnd:O,onTouchStart:M=>{w(S,M.nativeEvent);const{onDragging:A}=d.current;A&&A(!0)},ref:c,role:"separator",style:{...R,...s},tabIndex:0})}$1.displayName="PanelResizeHandle";const ste=(e,t,n,r="horizontal")=>{const o=f.useRef(null),[s,a]=f.useState(t),c=f.useCallback(()=>{var p,h;const d=(p=o.current)==null?void 0:p.getSize();d!==void 0&&d{const d=document.querySelector(`[data-panel-group-id="${n}"]`),p=document.querySelectorAll("[data-panel-resize-handle-id]");if(!d)return;const h=new ResizeObserver(()=>{let m=r==="horizontal"?d.getBoundingClientRect().width:d.getBoundingClientRect().height;p.forEach(v=>{m-=r==="horizontal"?v.getBoundingClientRect().width:v.getBoundingClientRect().height}),a(e/m*100)});return h.observe(d),p.forEach(m=>{h.observe(m)}),window.addEventListener("resize",c),()=>{h.disconnect(),window.removeEventListener("resize",c)}},[n,c,s,e,r]),{ref:o,minSizePct:s}},ate=fe([Ye],e=>{const{initialImage:t}=e.generation;return{initialImage:t,isResetButtonDisabled:!t}},Ge),ite=()=>{const{initialImage:e}=z(ate),{currentData:t}=os((e==null?void 0:e.imageName)??oo.skipToken),n=f.useMemo(()=>{if(t)return{id:"initial-image",payloadType:"IMAGE_DTO",payload:{imageDTO:t}}},[t]),r=f.useMemo(()=>({id:"initial-image",actionType:"SET_INITIAL_IMAGE"}),[]);return i.jsx(yi,{imageDTO:t,droppableData:r,draggableData:n,isUploadDisabled:!0,fitContainer:!0,dropLabel:"Set as Initial Image",noContentFallback:i.jsx(mi,{label:"No initial image selected"})})},lte=fe([Ye],e=>{const{initialImage:t}=e.generation;return{isResetButtonDisabled:!t}},Ge),cte={type:"SET_INITIAL_IMAGE"},ute=()=>{const{isResetButtonDisabled:e}=z(lte),t=te(),{getUploadButtonProps:n,getUploadInputProps:r}=Jm({postUploadAction:cte}),o=f.useCallback(()=>{t(OR())},[t]);return i.jsxs(F,{layerStyle:"first",sx:{position:"relative",flexDirection:"column",height:"full",width:"full",alignItems:"center",justifyContent:"center",borderRadius:"base",p:4,gap:4},children:[i.jsxs(F,{sx:{w:"full",flexWrap:"wrap",justifyContent:"center",alignItems:"center",gap:2},children:[i.jsx(qe,{sx:{fontWeight:600,userSelect:"none",color:"base.700",_dark:{color:"base.200"}},children:"Initial Image"}),i.jsx(hl,{}),i.jsx(Le,{tooltip:"Upload Initial Image","aria-label":"Upload Initial Image",icon:i.jsx(zd,{}),...n()}),i.jsx(Le,{tooltip:"Reset Initial Image","aria-label":"Reset Initial Image",icon:i.jsx(oy,{}),onClick:o,isDisabled:e})]}),i.jsx(ite,{}),i.jsx("input",{...r()})]})},dte=e=>{const{label:t,activeLabel:n,children:r,defaultIsOpen:o=!1}=e,{isOpen:s,onToggle:a}=ss({defaultIsOpen:o}),{colorMode:c}=Ds();return i.jsxs(Ee,{children:[i.jsxs(F,{onClick:a,sx:{alignItems:"center",p:2,px:4,gap:2,borderTopRadius:"base",borderBottomRadius:s?0:"base",bg:s?Fe("base.200","base.750")(c):Fe("base.150","base.800")(c),color:Fe("base.900","base.100")(c),_hover:{bg:s?Fe("base.250","base.700")(c):Fe("base.200","base.750")(c)},fontSize:"sm",fontWeight:600,cursor:"pointer",transitionProperty:"common",transitionDuration:"normal",userSelect:"none"},children:[t,i.jsx(mo,{children:n&&i.jsx(Ir.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.1}},exit:{opacity:0,transition:{duration:.1}},children:i.jsx(qe,{sx:{color:"accent.500",_dark:{color:"accent.300"}},children:n})},"statusText")}),i.jsx(hl,{}),i.jsx(Sy,{sx:{w:"1rem",h:"1rem",transform:s?"rotate(0deg)":"rotate(180deg)",transitionProperty:"common",transitionDuration:"normal"}})]}),i.jsx(pm,{in:s,animateOpacity:!0,style:{overflow:"unset"},children:i.jsx(Ee,{sx:{p:4,borderBottomRadius:"base",bg:"base.100",_dark:{bg:"base.800"}},children:r})})]})},Ro=f.memo(dte),fte=fe(Ye,e=>{const{combinatorial:t,isEnabled:n}=e.dynamicPrompts;return{combinatorial:t,isDisabled:!n}},Ge),pte=()=>{const{combinatorial:e,isDisabled:t}=z(fte),n=te(),r=f.useCallback(()=>{n(RR())},[n]);return i.jsx(Er,{isDisabled:t,label:"Combinatorial Generation",isChecked:e,onChange:r})},hte=fe(Ye,e=>{const{isEnabled:t}=e.dynamicPrompts;return{isEnabled:t}},Ge),mte=()=>{const e=te(),{isEnabled:t}=z(hte),n=f.useCallback(()=>{e(MR())},[e]);return i.jsx(Er,{label:"Enable Dynamic Prompts",isChecked:t,onChange:n})},gte=fe(Ye,e=>{const{maxPrompts:t,combinatorial:n,isEnabled:r}=e.dynamicPrompts,{min:o,sliderMax:s,inputMax:a}=e.config.sd.dynamicPrompts.maxPrompts;return{maxPrompts:t,min:o,sliderMax:s,inputMax:a,isDisabled:!r||!n}},Ge),vte=()=>{const{maxPrompts:e,min:t,sliderMax:n,inputMax:r,isDisabled:o}=z(gte),s=te(),a=f.useCallback(d=>{s(DR(d))},[s]),c=f.useCallback(()=>{s(AR())},[s]);return i.jsx(_t,{label:"Max Prompts",isDisabled:o,min:t,max:n,value:e,onChange:a,sliderNumberInputProps:{max:r},withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:c})},bte=fe(Ye,e=>{const{isEnabled:t}=e.dynamicPrompts;return{activeLabel:t?"Enabled":void 0}},Ge),Ud=()=>{const{activeLabel:e}=z(bte);return ir("dynamicPrompting").isFeatureEnabled?i.jsx(Ro,{label:"Dynamic Prompts",activeLabel:e,children:i.jsxs(F,{sx:{gap:2,flexDir:"column"},children:[i.jsx(mte,{}),i.jsx(pte,{}),i.jsx(vte,{})]})}):null},yte=fe(Ye,e=>{const{shouldUseNoiseSettings:t,shouldUseCpuNoise:n}=e.generation;return{isDisabled:!t,shouldUseCpuNoise:n}},Ge),xte=()=>{const e=te(),{isDisabled:t,shouldUseCpuNoise:n}=z(yte),r=o=>e(TR(o.target.checked));return i.jsx(Er,{isDisabled:t,label:"Use CPU Noise",isChecked:n,onChange:r})},wte=fe(Ye,e=>{const{shouldUseNoiseSettings:t,threshold:n}=e.generation;return{isDisabled:!t,threshold:n}},Ge);function Ste(){const e=te(),{threshold:t,isDisabled:n}=z(wte),{t:r}=ye();return i.jsx(_t,{isDisabled:n,label:r("parameters.noiseThreshold"),min:0,max:20,step:.1,onChange:o=>e(tw(o)),handleReset:()=>e(tw(0)),value:t,withInput:!0,withReset:!0,withSliderMarks:!0})}const Cte=()=>{const e=te(),t=z(r=>r.generation.shouldUseNoiseSettings),n=r=>e(NR(r.target.checked));return i.jsx(Er,{label:"Enable Noise Settings",isChecked:t,onChange:n})},kte=fe(Ye,e=>{const{shouldUseNoiseSettings:t,perlin:n}=e.generation;return{isDisabled:!t,perlin:n}},Ge);function _te(){const e=te(),{perlin:t,isDisabled:n}=z(kte),{t:r}=ye();return i.jsx(_t,{isDisabled:n,label:r("parameters.perlinNoise"),min:0,max:1,step:.05,onChange:o=>e(nw(o)),handleReset:()=>e(nw(0)),value:t,withInput:!0,withReset:!0,withSliderMarks:!0})}const Pte=fe(Ye,e=>{const{shouldUseNoiseSettings:t}=e.generation;return{activeLabel:t?"Enabled":void 0}},Ge),jte=()=>{const{t:e}=ye(),t=ir("noise").isFeatureEnabled,n=ir("perlinNoise").isFeatureEnabled,r=ir("noiseThreshold").isFeatureEnabled,{activeLabel:o}=z(Pte);return t?i.jsx(Ro,{label:e("parameters.noiseSettings"),activeLabel:o,children:i.jsxs(F,{sx:{gap:2,flexDirection:"column"},children:[i.jsx(Cte,{}),i.jsx(xte,{}),n&&i.jsx(_te,{}),r&&i.jsx(Ste,{})]})}):null},tg=f.memo(jte),Ite=fe(vo,e=>({isProcessing:e.isProcessing,isConnected:e.isConnected,isCancelable:e.isCancelable,currentIteration:e.currentIteration,totalIterations:e.totalIterations,sessionId:e.sessionId,cancelType:e.cancelType,isCancelScheduled:e.isCancelScheduled}),{memoizeOptions:{resultEqualityCheck:Zt}}),Ete=e=>{const t=te(),{btnGroupWidth:n="auto",...r}=e,{isProcessing:o,isConnected:s,isCancelable:a,cancelType:c,isCancelScheduled:d,sessionId:p}=z(Ite),h=f.useCallback(()=>{if(p){if(c==="scheduled"){t($R());return}t(zR({session_id:p}))}},[t,p,c]),{t:m}=ye(),v=f.useCallback(y=>{const S=Array.isArray(y)?y[0]:y;t(LR(S))},[t]);rt("shift+x",()=>{(s||o)&&a&&h()},[s,o,a]);const b=f.useMemo(()=>m(d?"parameters.cancel.isScheduled":c==="immediate"?"parameters.cancel.immediate":"parameters.cancel.schedule"),[m,c,d]),w=f.useMemo(()=>d?i.jsx(Gp,{}):c==="immediate"?i.jsx(zee,{}):i.jsx(Aee,{}),[c,d]);return i.jsxs(rr,{isAttached:!0,width:n,children:[i.jsx(Le,{icon:w,tooltip:b,"aria-label":b,isDisabled:!s||!o||!a,onClick:h,colorScheme:"error",id:"cancel-button",...r}),i.jsxs(Od,{closeOnSelect:!1,children:[i.jsx(Rd,{as:Le,tooltip:m("parameters.cancel.setType"),"aria-label":m("parameters.cancel.setType"),icon:i.jsx(sU,{w:"1em",h:"1em"}),paddingX:0,paddingY:0,colorScheme:"error",minWidth:5,...r}),i.jsx(Fc,{minWidth:"240px",children:i.jsxs(m6,{value:c,title:"Cancel Type",type:"radio",onChange:v,children:[i.jsx(Jp,{value:"immediate",children:m("parameters.cancel.immediate")}),i.jsx(Jp,{value:"scheduled",children:m("parameters.cancel.schedule")})]})})]})]})},ng=f.memo(Ete),Ote=fe([Ye,Kn],(e,t)=>{const{generation:n,system:r}=e,{initialImage:o}=n,{isProcessing:s,isConnected:a}=r;let c=!0;const d=[];t==="img2img"&&!o&&(c=!1,d.push("No initial image selected"));const{isSuccess:p}=BR.endpoints.getMainModels.select(Yu)(e);return p||(c=!1,d.push("Models are not loaded")),s&&(c=!1,d.push("System Busy")),a||(c=!1,d.push("System Disconnected")),so(e.controlNet.controlNets,(h,m)=>{h.model||(c=!1,d.push(`ControlNet ${m} has no model selected.`))}),{isReady:c,reasonsWhyNotReady:d}},Ge),Gd=()=>{const{isReady:e}=z(Ote);return e},Rte=fe(vo,e=>({isProcessing:e.isProcessing,currentStep:e.currentStep,totalSteps:e.totalSteps,currentStatusHasSteps:e.currentStatusHasSteps}),{memoizeOptions:{resultEqualityCheck:Zt}}),Mte=()=>{const{t:e}=ye(),{isProcessing:t,currentStep:n,totalSteps:r,currentStatusHasSteps:o}=z(Rte),s=n?Math.round(n*100/r):0;return i.jsx(E6,{value:s,"aria-label":e("accessibility.invokeProgressBar"),isIndeterminate:t&&!o,height:"full",colorScheme:"accent"})},IO=f.memo(Mte),jk={_disabled:{bg:"none",color:"base.600",cursor:"not-allowed",_hover:{color:"base.600",bg:"none"}}},Dte=fe([Ye,Kn,Cr],({gallery:e},t,n)=>{const{autoAddBoardId:r}=e;return{isBusy:n,autoAddBoardId:r,activeTabName:t}},Ge);function Jy(e){const{iconButton:t=!1,...n}=e,r=te(),o=Gd(),{isBusy:s,autoAddBoardId:a,activeTabName:c}=z(Dte),d=Lm(a),p=f.useCallback(()=>{r(bd()),r(yd(c))},[r,c]),{t:h}=ye();return rt(["ctrl+enter","meta+enter"],p,{enabled:()=>o,preventDefault:!0,enableOnFormTags:["input","textarea","select"]},[o,c]),i.jsx(Ee,{style:{flexGrow:4},position:"relative",children:i.jsxs(Ee,{style:{position:"relative"},children:[!o&&i.jsx(Ee,{borderRadius:"base",style:{position:"absolute",bottom:"0",left:"0",right:"0",height:"100%",overflow:"clip"},...n,children:i.jsx(IO,{})}),i.jsx(wn,{placement:"top",hasArrow:!0,openDelay:500,label:a?`Auto-Adding to ${d}`:void 0,children:t?i.jsx(Le,{"aria-label":h("parameters.invoke"),type:"submit",icon:i.jsx(PP,{}),isDisabled:!o||s,onClick:p,tooltip:h("parameters.invoke"),tooltipProps:{placement:"top"},colorScheme:"accent",id:"invoke-button",...n,sx:{w:"full",flexGrow:1,...s?jk:{}}}):i.jsx(Jt,{"aria-label":h("parameters.invoke"),type:"submit",isDisabled:!o||s,onClick:p,colorScheme:"accent",id:"invoke-button",...n,sx:{w:"full",flexGrow:1,fontWeight:700,...s?jk:{}},children:"Invoke"})})]})})}const qd=()=>i.jsxs(F,{gap:2,children:[i.jsx(Jy,{}),i.jsx(ng,{})]}),Zy=e=>{e.stopPropagation()},Ate=Ae((e,t)=>{const n=te(),r=f.useCallback(s=>{s.shiftKey&&n(jo(!0))},[n]),o=f.useCallback(s=>{s.shiftKey||n(jo(!1))},[n]);return i.jsx(Jb,{ref:t,onPaste:Zy,onKeyDown:r,onKeyUp:o,...e})}),rg=f.memo(Ate),Tte=e=>{const{onClick:t}=e;return i.jsx(Le,{size:"sm","aria-label":"Add Embedding",tooltip:"Add Embedding",icon:i.jsx(ty,{}),sx:{p:2,color:"base.500",_hover:{color:"base.600"},_active:{color:"base.700"},_dark:{color:"base.500",_hover:{color:"base.400"},_active:{color:"base.300"}}},variant:"link",onClick:t})},og=f.memo(Tte),ex="28rem",sg=e=>{const{onSelect:t,isOpen:n,onClose:r,children:o}=e,{data:s}=FR(),a=f.useRef(null),c=z(h=>h.generation.model),d=f.useMemo(()=>{if(!s)return[];const h=[];return so(s.entities,(m,v)=>{if(!m)return;const b=(c==null?void 0:c.base_model)!==m.base_model;h.push({value:m.model_name,label:m.model_name,group:Qn[m.base_model],disabled:b,tooltip:b?`Incompatible base model: ${m.base_model}`:void 0})}),h.sort((m,v)=>{var b;return m.label&&v.label?(b=m.label)!=null&&b.localeCompare(v.label)?-1:1:-1}),h.sort((m,v)=>m.disabled&&!v.disabled?1:-1)},[s,c==null?void 0:c.base_model]),p=f.useCallback(h=>{h&&t(h)},[t]);return i.jsxs(Xb,{initialFocusRef:a,isOpen:n,onClose:r,placement:"bottom",openDelay:0,closeDelay:0,closeOnBlur:!0,returnFocusOnClose:!0,children:[i.jsx(Kb,{children:o}),i.jsx(Yb,{sx:{p:0,top:-1,shadow:"dark-lg",borderColor:"accent.300",borderWidth:"2px",borderStyle:"solid",_dark:{borderColor:"accent.400"}},children:i.jsx(j6,{sx:{p:0,w:`calc(${ex} - 2rem )`},children:d.length===0?i.jsx(F,{sx:{justifyContent:"center",p:2,fontSize:"sm",color:"base.500",_dark:{color:"base.700"}},children:i.jsx(qe,{children:"No Embeddings Loaded"})}):i.jsx(ar,{inputRef:a,autoFocus:!0,placeholder:"Add Embedding",value:null,data:d,nothingFound:"No matching Embeddings",itemComponent:Ri,disabled:d.length===0,onDropdownClose:r,filter:(h,m)=>{var v;return((v=m.label)==null?void 0:v.toLowerCase().includes(h.toLowerCase().trim()))||m.value.toLowerCase().includes(h.toLowerCase().trim())},onChange:p})})})]})},EO=()=>{const e=z(m=>m.generation.negativePrompt),t=f.useRef(null),{isOpen:n,onClose:r,onOpen:o}=ss(),s=te(),{t:a}=ye(),c=f.useCallback(m=>{s(zu(m.target.value))},[s]),d=f.useCallback(m=>{m.key==="<"&&o()},[o]),p=f.useCallback(m=>{if(!t.current)return;const v=t.current.selectionStart;if(v===void 0)return;let b=e.slice(0,v);b[b.length-1]!=="<"&&(b+="<"),b+=`${m}>`;const w=b.length;b+=e.slice(v),_i.flushSync(()=>{s(zu(b))}),t.current.selectionEnd=w,r()},[s,r,e]),h=ir("embedding").isFeatureEnabled;return i.jsxs(go,{children:[i.jsx(sg,{isOpen:n,onClose:r,onSelect:p,children:i.jsx(rg,{id:"negativePrompt",name:"negativePrompt",ref:t,value:e,placeholder:a("parameters.negativePromptPlaceholder"),onChange:c,resize:"vertical",fontSize:"sm",minH:16,...h&&{onKeyDown:d}})}),!n&&h&&i.jsx(Ee,{sx:{position:"absolute",top:0,insetInlineEnd:0},children:i.jsx(og,{onClick:o})})]})},Nte=fe([Ye,Kn],({generation:e,ui:t},n)=>({shouldPinParametersPanel:t.shouldPinParametersPanel,prompt:e.positivePrompt,activeTabName:n}),{memoizeOptions:{resultEqualityCheck:Zt}}),OO=()=>{const e=te(),{prompt:t,shouldPinParametersPanel:n,activeTabName:r}=z(Nte),o=Gd(),s=f.useRef(null),{isOpen:a,onClose:c,onOpen:d}=ss(),{t:p}=ye(),h=f.useCallback(w=>{e($u(w.target.value))},[e]);rt("alt+a",()=>{var w;(w=s.current)==null||w.focus()},[]);const m=f.useCallback(w=>{if(!s.current)return;const y=s.current.selectionStart;if(y===void 0)return;let S=t.slice(0,y);S[S.length-1]!=="<"&&(S+="<"),S+=`${w}>`;const _=S.length;S+=t.slice(y),_i.flushSync(()=>{e($u(S))}),s.current.selectionStart=_,s.current.selectionEnd=_,c()},[e,c,t]),v=ir("embedding").isFeatureEnabled,b=f.useCallback(w=>{w.key==="Enter"&&w.shiftKey===!1&&o&&(w.preventDefault(),e(bd()),e(yd(r))),v&&w.key==="<"&&d()},[o,e,r,d,v]);return i.jsxs(Ee,{position:"relative",children:[i.jsx(go,{children:i.jsx(sg,{isOpen:a,onClose:c,onSelect:m,children:i.jsx(rg,{id:"prompt",name:"prompt",ref:s,value:t,placeholder:p("parameters.positivePromptPlaceholder"),onChange:h,onKeyDown:b,resize:"vertical",minH:32})})}),!a&&v&&i.jsx(Ee,{sx:{position:"absolute",top:n?5:0,insetInlineEnd:0},children:i.jsx(og,{onClick:d})})]})};function $te(){const e=z(o=>o.sdxl.shouldConcatSDXLStylePrompt),t=z(o=>o.ui.shouldPinParametersPanel),n=te(),r=()=>{n(HR(!e))};return i.jsx(Le,{"aria-label":"Concatenate Prompt & Style",tooltip:"Concatenate Prompt & Style",variant:"outline",isChecked:e,onClick:r,icon:i.jsx(kP,{}),size:"xs",sx:{position:"absolute",insetInlineEnd:1,top:t?12:20,border:"none",color:e?"accent.500":"base.500",_hover:{bg:"none"}}})}const Ik={position:"absolute",bg:"none",w:"full",minH:2,borderRadius:0,borderLeft:"none",borderRight:"none",zIndex:2,maskImage:"radial-gradient(circle at center, black, black 65%, black 30%, black 15%, transparent)"};function RO(){return i.jsxs(F,{children:[i.jsx(Ee,{as:Ir.div,initial:{scaleX:0,borderWidth:0,display:"none"},animate:{display:["block","block","block","none"],scaleX:[0,.25,.5,1],borderWidth:[0,3,3,0],transition:{duration:.37,times:[0,.25,.5,1]}},sx:{top:"1px",borderTop:"none",borderColor:"base.400",...Ik,_dark:{borderColor:"accent.500"}}}),i.jsx(Ee,{as:Ir.div,initial:{opacity:0,scale:0},animate:{opacity:[0,1,1,1],scale:[0,.75,1.5,1],transition:{duration:.42,times:[0,.25,.5,1]}},exit:{opacity:0,scale:0},sx:{zIndex:3,position:"absolute",left:"48%",top:"3px",p:1,borderRadius:4,bg:"accent.400",color:"base.50",_dark:{bg:"accent.500"}},children:i.jsx(kP,{size:12})}),i.jsx(Ee,{as:Ir.div,initial:{scaleX:0,borderWidth:0,display:"none"},animate:{display:["block","block","block","none"],scaleX:[0,.25,.5,1],borderWidth:[0,3,3,0],transition:{duration:.37,times:[0,.25,.5,1]}},sx:{top:"17px",borderBottom:"none",borderColor:"base.400",...Ik,_dark:{borderColor:"accent.500"}}})]})}const zte=fe([Ye,Kn],({sdxl:e},t)=>{const{negativeStylePrompt:n,shouldConcatSDXLStylePrompt:r}=e;return{prompt:n,shouldConcatSDXLStylePrompt:r,activeTabName:t}},{memoizeOptions:{resultEqualityCheck:Zt}}),Lte=()=>{const e=te(),t=Gd(),n=f.useRef(null),{isOpen:r,onClose:o,onOpen:s}=ss(),{prompt:a,activeTabName:c,shouldConcatSDXLStylePrompt:d}=z(zte),p=f.useCallback(b=>{e(Bu(b.target.value))},[e]),h=f.useCallback(b=>{if(!n.current)return;const w=n.current.selectionStart;if(w===void 0)return;let y=a.slice(0,w);y[y.length-1]!=="<"&&(y+="<"),y+=`${b}>`;const S=y.length;y+=a.slice(w),_i.flushSync(()=>{e(Bu(y))}),n.current.selectionStart=S,n.current.selectionEnd=S,o()},[e,o,a]),m=ir("embedding").isFeatureEnabled,v=f.useCallback(b=>{b.key==="Enter"&&b.shiftKey===!1&&t&&(b.preventDefault(),e(bd()),e(yd(c))),m&&b.key==="<"&&s()},[t,e,c,s,m]);return i.jsxs(Ee,{position:"relative",children:[i.jsx(mo,{children:d&&i.jsx(Ee,{sx:{position:"absolute",left:"3",w:"94%",top:"-17px"},children:i.jsx(RO,{})})}),i.jsx(go,{children:i.jsx(sg,{isOpen:r,onClose:o,onSelect:h,children:i.jsx(rg,{id:"prompt",name:"prompt",ref:n,value:a,placeholder:"Negative Style Prompt",onChange:p,onKeyDown:v,resize:"vertical",fontSize:"sm",minH:16})})}),!r&&m&&i.jsx(Ee,{sx:{position:"absolute",top:0,insetInlineEnd:0},children:i.jsx(og,{onClick:s})})]})},Bte=fe([Ye,Kn],({sdxl:e},t)=>{const{positiveStylePrompt:n,shouldConcatSDXLStylePrompt:r}=e;return{prompt:n,shouldConcatSDXLStylePrompt:r,activeTabName:t}},{memoizeOptions:{resultEqualityCheck:Zt}}),Fte=()=>{const e=te(),t=Gd(),n=f.useRef(null),{isOpen:r,onClose:o,onOpen:s}=ss(),{prompt:a,activeTabName:c,shouldConcatSDXLStylePrompt:d}=z(Bte),p=f.useCallback(b=>{e(Lu(b.target.value))},[e]),h=f.useCallback(b=>{if(!n.current)return;const w=n.current.selectionStart;if(w===void 0)return;let y=a.slice(0,w);y[y.length-1]!=="<"&&(y+="<"),y+=`${b}>`;const S=y.length;y+=a.slice(w),_i.flushSync(()=>{e(Lu(y))}),n.current.selectionStart=S,n.current.selectionEnd=S,o()},[e,o,a]),m=ir("embedding").isFeatureEnabled,v=f.useCallback(b=>{b.key==="Enter"&&b.shiftKey===!1&&t&&(b.preventDefault(),e(bd()),e(yd(c))),m&&b.key==="<"&&s()},[t,e,c,s,m]);return i.jsxs(Ee,{position:"relative",children:[i.jsx(mo,{children:d&&i.jsx(Ee,{sx:{position:"absolute",left:"3",w:"94%",top:"-17px"},children:i.jsx(RO,{})})}),i.jsx(go,{children:i.jsx(sg,{isOpen:r,onClose:o,onSelect:h,children:i.jsx(rg,{id:"prompt",name:"prompt",ref:n,value:a,placeholder:"Positive Style Prompt",onChange:p,onKeyDown:v,resize:"vertical",minH:16})})}),!r&&m&&i.jsx(Ee,{sx:{position:"absolute",top:0,insetInlineEnd:0},children:i.jsx(og,{onClick:s})})]})};function MO(){return i.jsxs(F,{sx:{flexDirection:"column",gap:2},children:[i.jsx(OO,{}),i.jsx($te,{}),i.jsx(Fte,{}),i.jsx(EO,{}),i.jsx(Lte,{})]})}const Kc=()=>{const{isRefinerAvailable:e}=na(sb,{selectFromResult:({data:t})=>({isRefinerAvailable:t?t.ids.length>0:!1})});return e},Hte=fe([Ye],({sdxl:e,hotkeys:t})=>{const{refinerAestheticScore:n}=e,{shift:r}=t;return{refinerAestheticScore:n,shift:r}},Ge),Wte=()=>{const{refinerAestheticScore:e,shift:t}=z(Hte),n=Kc(),r=te(),o=f.useCallback(a=>r(Ov(a)),[r]),s=f.useCallback(()=>r(Ov(6)),[r]);return i.jsx(_t,{label:"Aesthetic Score",step:t?.1:.5,min:1,max:10,onChange:o,handleReset:s,value:e,sliderNumberInputProps:{max:10},withInput:!0,withReset:!0,withSliderMarks:!0,isInteger:!1,isDisabled:!n})},Vte=f.memo(Wte),tm=/^-?(0\.)?\.?$/,Ute=e=>{const{label:t,isDisabled:n=!1,showStepper:r=!0,isInvalid:o,value:s,onChange:a,min:c,max:d,isInteger:p=!0,formControlProps:h,formLabelProps:m,numberInputFieldProps:v,numberInputStepperProps:b,tooltipProps:w,...y}=e,S=te(),[_,k]=f.useState(String(s));f.useEffect(()=>{!_.match(tm)&&s!==Number(_)&&k(String(s))},[s,_]);const j=R=>{k(R),R.match(tm)||a(p?Math.floor(Number(R)):Number(R))},I=R=>{const M=Es(p?Math.floor(Number(R.target.value)):Number(R.target.value),c,d);k(String(M)),a(M)},E=f.useCallback(R=>{R.shiftKey&&S(jo(!0))},[S]),O=f.useCallback(R=>{R.shiftKey||S(jo(!1))},[S]);return i.jsx(wn,{...w,children:i.jsxs(go,{isDisabled:n,isInvalid:o,...h,children:[t&&i.jsx(Lo,{...m,children:t}),i.jsxs(ym,{value:_,min:c,max:d,keepWithinRange:!0,clampValueOnBlur:!1,onChange:j,onBlur:I,...y,onPaste:Zy,children:[i.jsx(wm,{...v,onKeyDown:E,onKeyUp:O}),r&&i.jsxs(xm,{children:[i.jsx(Cm,{...b}),i.jsx(Sm,{...b})]})]})]})})},Xc=f.memo(Ute),Gte=fe([Ye],({sdxl:e,ui:t,hotkeys:n})=>{const{refinerCFGScale:r}=e,{shouldUseSliders:o}=t,{shift:s}=n;return{refinerCFGScale:r,shouldUseSliders:o,shift:s}},Ge),qte=()=>{const{refinerCFGScale:e,shouldUseSliders:t,shift:n}=z(Gte),r=Kc(),o=te(),{t:s}=ye(),a=f.useCallback(d=>o(Ev(d)),[o]),c=f.useCallback(()=>o(Ev(7)),[o]);return t?i.jsx(_t,{label:s("parameters.cfgScale"),step:n?.1:.5,min:1,max:20,onChange:a,handleReset:c,value:e,sliderNumberInputProps:{max:200},withInput:!0,withReset:!0,withSliderMarks:!0,isInteger:!1,isDisabled:!r}):i.jsx(Xc,{label:s("parameters.cfgScale"),step:.5,min:1,max:200,onChange:a,value:e,isInteger:!1,numberInputFieldProps:{textAlign:"center"},isDisabled:!r})},Kte=f.memo(qte),ag=e=>{const t=lm("models"),[n,r,o]=e.split("/"),s=WR.safeParse({base_model:n,model_name:o,model_type:r});if(!s.success){t.error({mainModelId:e,errors:s.error.format()},"Failed to parse main model id");return}return s.data};function Kd(e){const{iconMode:t=!1}=e,n=te(),{t:r}=ye(),[o,{isLoading:s}]=VR(),a=()=>{o().unwrap().then(c=>{n(On(Mn({title:`${r("modelManager.modelsSynced")}`,status:"success"})))}).catch(c=>{c&&n(On(Mn({title:`${r("modelManager.modelSyncFailed")}`,status:"error"})))})};return t?i.jsx(Le,{icon:i.jsx(EP,{}),tooltip:r("modelManager.syncModels"),"aria-label":r("modelManager.syncModels"),isLoading:s,onClick:a,size:"sm"}):i.jsx(Jt,{isLoading:s,onClick:a,minW:"max-content",children:"Sync Models"})}const Xte=fe(Ye,e=>({model:e.sdxl.refinerModel}),Ge),Yte=()=>{const e=te(),t=ir("syncModels").isFeatureEnabled,{model:n}=z(Xte),{data:r,isLoading:o}=na(sb),s=f.useMemo(()=>{if(!r)return[];const d=[];return so(r.entities,(p,h)=>{p&&d.push({value:h,label:p.model_name,group:Qn[p.base_model]})}),d},[r]),a=f.useMemo(()=>(r==null?void 0:r.entities[`${n==null?void 0:n.base_model}/main/${n==null?void 0:n.model_name}`])??null,[r==null?void 0:r.entities,n]),c=f.useCallback(d=>{if(!d)return;const p=ag(d);p&&e(B_(p))},[e]);return o?i.jsx(ar,{label:"Refiner Model",placeholder:"Loading...",disabled:!0,data:[]}):i.jsxs(F,{w:"100%",alignItems:"center",gap:2,children:[i.jsx(ar,{tooltip:a==null?void 0:a.description,label:"Refiner Model",value:a==null?void 0:a.id,placeholder:s.length>0?"Select a model":"No models available",data:s,error:s.length===0,disabled:s.length===0,onChange:c,w:"100%"}),t&&i.jsx(Ee,{mt:7,children:i.jsx(Kd,{iconMode:!0})})]})},Qte=f.memo(Yte),Jte=fe(Ye,({ui:e,sdxl:t})=>{const{refinerScheduler:n}=t,{favoriteSchedulers:r}=e,o=cs(ob,(s,a)=>({value:a,label:s,group:r.includes(a)?"Favorites":void 0})).sort((s,a)=>s.label.localeCompare(a.label));return{refinerScheduler:n,data:o}},Ge),Zte=()=>{const e=te(),{t}=ye(),{refinerScheduler:n,data:r}=z(Jte),o=Kc(),s=f.useCallback(a=>{a&&e(F_(a))},[e]);return i.jsx(ar,{w:"100%",label:t("parameters.scheduler"),value:n,data:r,onChange:s,disabled:!o})},ene=f.memo(Zte),tne=fe([Ye],({sdxl:e})=>{const{refinerStart:t}=e;return{refinerStart:t}},Ge),nne=()=>{const{refinerStart:e}=z(tne),t=te(),n=Kc(),r=f.useCallback(s=>t(Rv(s)),[t]),o=f.useCallback(()=>t(Rv(.7)),[t]);return i.jsx(_t,{label:"Refiner Start",step:.01,min:0,max:1,onChange:r,handleReset:o,value:e,withInput:!0,withReset:!0,withSliderMarks:!0,isInteger:!1,isDisabled:!n})},rne=f.memo(nne),one=fe([Ye],({sdxl:e,ui:t})=>{const{refinerSteps:n}=e,{shouldUseSliders:r}=t;return{refinerSteps:n,shouldUseSliders:r}},Ge),sne=()=>{const{refinerSteps:e,shouldUseSliders:t}=z(one),n=Kc(),r=te(),{t:o}=ye(),s=f.useCallback(c=>{r(Iv(c))},[r]),a=f.useCallback(()=>{r(Iv(20))},[r]);return t?i.jsx(_t,{label:o("parameters.steps"),min:1,max:100,step:1,onChange:s,handleReset:a,value:e,withInput:!0,withReset:!0,withSliderMarks:!0,sliderNumberInputProps:{max:500},isDisabled:!n}):i.jsx(Xc,{label:o("parameters.steps"),min:1,max:500,step:1,onChange:s,value:e,numberInputFieldProps:{textAlign:"center"},isDisabled:!n})},ane=f.memo(sne);function ine(){const e=z(o=>o.sdxl.shouldUseSDXLRefiner),t=Kc(),n=te(),r=o=>{n(UR(o.target.checked))};return i.jsx(Er,{label:"Use Refiner",isChecked:e,onChange:r,isDisabled:!t})}const lne=fe(Ye,e=>{const{shouldUseSDXLRefiner:t}=e.sdxl,{shouldUseSliders:n}=e.ui;return{activeLabel:t?"Enabled":void 0,shouldUseSliders:n}},Ge),DO=()=>{const{activeLabel:e,shouldUseSliders:t}=z(lne);return i.jsx(Ro,{label:"Refiner",activeLabel:e,children:i.jsxs(F,{sx:{gap:2,flexDir:"column"},children:[i.jsx(ine,{}),i.jsx(Qte,{}),i.jsxs(F,{gap:2,flexDirection:t?"column":"row",children:[i.jsx(ane,{}),i.jsx(Kte,{})]}),i.jsx(ene,{}),i.jsx(Vte,{}),i.jsx(rne,{})]})})},cne=fe([Ye],({generation:e,config:t,ui:n,hotkeys:r})=>{const{initial:o,min:s,sliderMax:a,inputMax:c}=t.sd.guidance,{cfgScale:d}=e,{shouldUseSliders:p}=n,{shift:h}=r;return{cfgScale:d,initial:o,min:s,sliderMax:a,inputMax:c,shouldUseSliders:p,shift:h}},Ge),une=()=>{const{cfgScale:e,initial:t,min:n,sliderMax:r,inputMax:o,shouldUseSliders:s,shift:a}=z(cne),c=te(),{t:d}=ye(),p=f.useCallback(m=>c(zp(m)),[c]),h=f.useCallback(()=>c(zp(t)),[c,t]);return s?i.jsx(_t,{label:d("parameters.cfgScale"),step:a?.1:.5,min:n,max:r,onChange:p,handleReset:h,value:e,sliderNumberInputProps:{max:o},withInput:!0,withReset:!0,withSliderMarks:!0,isInteger:!1}):i.jsx(Xc,{label:d("parameters.cfgScale"),step:.5,min:n,max:o,onChange:p,value:e,isInteger:!1,numberInputFieldProps:{textAlign:"center"}})},xi=f.memo(une),dne=fe([Ye],e=>{const{initial:t,min:n,sliderMax:r,inputMax:o,fineStep:s,coarseStep:a}=e.config.sd.iterations,{iterations:c}=e.generation,{shouldUseSliders:d}=e.ui,p=e.dynamicPrompts.isEnabled&&e.dynamicPrompts.combinatorial,h=e.hotkeys.shift?s:a;return{iterations:c,initial:t,min:n,sliderMax:r,inputMax:o,step:h,shouldUseSliders:d,isDisabled:p}},Ge),fne=()=>{const{iterations:e,initial:t,min:n,sliderMax:r,inputMax:o,step:s,shouldUseSliders:a,isDisabled:c}=z(dne),d=te(),{t:p}=ye(),h=f.useCallback(v=>{d(rw(v))},[d]),m=f.useCallback(()=>{d(rw(t))},[d,t]);return a?i.jsx(_t,{isDisabled:c,label:p("parameters.images"),step:s,min:n,max:r,onChange:h,handleReset:m,value:e,withInput:!0,withReset:!0,withSliderMarks:!0,sliderNumberInputProps:{max:o}}):i.jsx(Xc,{isDisabled:c,label:p("parameters.images"),step:s,min:n,max:o,onChange:h,value:e,numberInputFieldProps:{textAlign:"center"}})},wi=f.memo(fne),pne=fe(Ye,e=>({model:e.generation.model}),Ge),hne=()=>{const e=te(),{t}=ye(),{model:n}=z(pne),r=ir("syncModels").isFeatureEnabled,{data:o,isLoading:s}=na(Yu),{data:a,isLoading:c}=Fp(Yu),d=z(Kn),p=f.useMemo(()=>{if(!o)return[];const v=[];return so(o.entities,(b,w)=>{!b||d==="unifiedCanvas"&&b.base_model==="sdxl"||v.push({value:w,label:b.model_name,group:Qn[b.base_model]})}),so(a==null?void 0:a.entities,(b,w)=>{!b||d==="unifiedCanvas"||d==="img2img"||v.push({value:w,label:b.model_name,group:Qn[b.base_model]})}),v},[o,a,d]),h=f.useMemo(()=>((o==null?void 0:o.entities[`${n==null?void 0:n.base_model}/main/${n==null?void 0:n.model_name}`])||(a==null?void 0:a.entities[`${n==null?void 0:n.base_model}/onnx/${n==null?void 0:n.model_name}`]))??null,[o==null?void 0:o.entities,n,a==null?void 0:a.entities]),m=f.useCallback(v=>{if(!v)return;const b=ag(v);b&&e(Pv(b))},[e]);return s||c?i.jsx(ar,{label:t("modelManager.model"),placeholder:"Loading...",disabled:!0,data:[]}):i.jsxs(F,{w:"100%",alignItems:"center",gap:3,children:[i.jsx(ar,{tooltip:h==null?void 0:h.description,label:t("modelManager.model"),value:h==null?void 0:h.id,placeholder:p.length>0?"Select a model":"No models available",data:p,error:p.length===0,disabled:p.length===0,onChange:m,w:"100%"}),r&&i.jsx(Ee,{mt:7,children:i.jsx(Kd,{iconMode:!0})})]})},mne=f.memo(hne),AO=e=>{const t=lm("models"),[n,r,o]=e.split("/"),s=GR.safeParse({base_model:n,model_name:o});if(!s.success){t.error({vaeModelId:e,errors:s.error.format()},"Failed to parse VAE model id");return}return s.data},gne=fe(Ye,({generation:e})=>{const{model:t,vae:n}=e;return{model:t,vae:n}},Ge),vne=()=>{const e=te(),{t}=ye(),{model:n,vae:r}=z(gne),{data:o}=X_(),s=f.useMemo(()=>{if(!o)return[];const d=[{value:"default",label:"Default",group:"Default"}];return so(o.entities,(p,h)=>{if(!p)return;const m=(n==null?void 0:n.base_model)!==p.base_model;d.push({value:h,label:p.model_name,group:Qn[p.base_model],disabled:m,tooltip:m?`Incompatible base model: ${p.base_model}`:void 0})}),d.sort((p,h)=>p.disabled&&!h.disabled?1:-1)},[o,n==null?void 0:n.base_model]),a=f.useMemo(()=>(o==null?void 0:o.entities[`${r==null?void 0:r.base_model}/vae/${r==null?void 0:r.model_name}`])??null,[o==null?void 0:o.entities,r]),c=f.useCallback(d=>{if(!d||d==="default"){e(ow(null));return}const p=AO(d);p&&e(ow(p))},[e]);return i.jsx(ar,{itemComponent:Ri,tooltip:a==null?void 0:a.description,label:t("modelManager.vae"),value:(a==null?void 0:a.id)??"default",placeholder:"Default",data:s,onChange:c,disabled:s.length===0,clearable:!0})},bne=f.memo(vne),Di=e=>e.generation,yne=fe([La,Di],(e,t)=>{const{scheduler:n}=t,{favoriteSchedulers:r}=e,o=cs(ob,(s,a)=>({value:a,label:s,group:r.includes(a)?"Favorites":void 0})).sort((s,a)=>s.label.localeCompare(a.label));return{scheduler:n,data:o}},Ge),xne=()=>{const e=te(),{t}=ye(),{scheduler:n,data:r}=z(yne),o=f.useCallback(s=>{s&&e(jv(s))},[e]);return i.jsx(ar,{label:t("parameters.scheduler"),value:n,data:r,onChange:o})},wne=f.memo(xne),Sne=fe(Ye,({generation:e})=>{const{vaePrecision:t}=e;return{vaePrecision:t}},Ge),Cne=["fp16","fp32"],kne=()=>{const e=te(),{vaePrecision:t}=z(Sne),n=f.useCallback(r=>{r&&e(qR(r))},[e]);return i.jsx(Xr,{label:"VAE Precision",value:t,data:Cne,onChange:n})},_ne=f.memo(kne),Pne=()=>{const e=ir("vae").isFeatureEnabled;return i.jsxs(F,{gap:3,w:"full",flexWrap:e?"wrap":"nowrap",children:[i.jsx(Ee,{w:"full",children:i.jsx(mne,{})}),i.jsx(Ee,{w:"full",children:i.jsx(wne,{})}),e&&i.jsxs(F,{w:"full",gap:3,children:[i.jsx(bne,{}),i.jsx(_ne,{})]})]})},Si=f.memo(Pne),jne=[{name:"Free",value:null},{name:"2:3",value:2/3},{name:"16:9",value:16/9},{name:"1:1",value:1/1}];function TO(){const e=z(o=>o.generation.aspectRatio),t=te(),n=z(o=>o.generation.shouldFitToWidthHeight),r=z(Kn);return i.jsx(F,{gap:2,flexGrow:1,children:i.jsx(rr,{isAttached:!0,children:jne.map(o=>i.jsx(Jt,{size:"sm",isChecked:e===o.value,isDisabled:r==="img2img"?!n:!1,onClick:()=>t(KR(o.value)),children:o.name},o.name))})})}const Ine=fe([Ye],({generation:e,hotkeys:t,config:n})=>{const{initial:r,min:o,sliderMax:s,inputMax:a,fineStep:c,coarseStep:d}=n.sd.height,{height:p}=e,{aspectRatio:h}=e,m=t.shift?c:d;return{height:p,initial:r,min:o,sliderMax:s,inputMax:a,step:m,aspectRatio:h}},Ge),Ene=e=>{const{height:t,initial:n,min:r,sliderMax:o,inputMax:s,step:a,aspectRatio:c}=z(Ine),d=te(),{t:p}=ye(),h=f.useCallback(v=>{if(d(vc(v)),c){const b=Ss(v*c,8);d(gc(b))}},[d,c]),m=f.useCallback(()=>{if(d(vc(n)),c){const v=Ss(n*c,8);d(gc(v))}},[d,n,c]);return i.jsx(_t,{label:p("parameters.height"),value:t,min:r,step:a,max:o,onChange:h,handleReset:m,withInput:!0,withReset:!0,withSliderMarks:!0,sliderNumberInputProps:{max:s},...e})},One=f.memo(Ene),Rne=fe([Ye],({generation:e,hotkeys:t,config:n})=>{const{initial:r,min:o,sliderMax:s,inputMax:a,fineStep:c,coarseStep:d}=n.sd.width,{width:p,aspectRatio:h}=e,m=t.shift?c:d;return{width:p,initial:r,min:o,sliderMax:s,inputMax:a,step:m,aspectRatio:h}},Ge),Mne=e=>{const{width:t,initial:n,min:r,sliderMax:o,inputMax:s,step:a,aspectRatio:c}=z(Rne),d=te(),{t:p}=ye(),h=f.useCallback(v=>{if(d(gc(v)),c){const b=Ss(v/c,8);d(vc(b))}},[d,c]),m=f.useCallback(()=>{if(d(gc(n)),c){const v=Ss(n/c,8);d(vc(v))}},[d,n,c]);return i.jsx(_t,{label:p("parameters.width"),value:t,min:r,step:a,max:o,onChange:h,handleReset:m,withInput:!0,withReset:!0,withSliderMarks:!0,sliderNumberInputProps:{max:s},...e})},Dne=f.memo(Mne);function Oc(){const{t:e}=ye(),t=te(),n=z(o=>o.generation.shouldFitToWidthHeight),r=z(Kn);return i.jsxs(F,{sx:{gap:2,p:4,borderRadius:4,flexDirection:"column",w:"full",bg:"base.150",_dark:{bg:"base.750"}},children:[i.jsxs(F,{alignItems:"center",gap:2,children:[i.jsx(qe,{sx:{fontSize:"sm",width:"full",color:"base.700",_dark:{color:"base.300"}},children:e("parameters.aspectRatio")}),i.jsx(hl,{}),i.jsx(TO,{}),i.jsx(Le,{tooltip:e("ui.swapSizes"),"aria-label":e("ui.swapSizes"),size:"sm",icon:i.jsx(pO,{}),fontSize:20,isDisabled:r==="img2img"?!n:!1,onClick:()=>t(XR())})]}),i.jsx(F,{gap:2,alignItems:"center",children:i.jsxs(F,{gap:2,flexDirection:"column",width:"full",children:[i.jsx(Dne,{isDisabled:r==="img2img"?!n:!1}),i.jsx(One,{isDisabled:r==="img2img"?!n:!1})]})})]})}const Ane=fe([Ye],({generation:e,config:t,ui:n,hotkeys:r})=>{const{initial:o,min:s,sliderMax:a,inputMax:c,fineStep:d,coarseStep:p}=t.sd.steps,{steps:h}=e,{shouldUseSliders:m}=n,v=r.shift?d:p;return{steps:h,initial:o,min:s,sliderMax:a,inputMax:c,step:v,shouldUseSliders:m}},Ge),Tne=()=>{const{steps:e,initial:t,min:n,sliderMax:r,inputMax:o,step:s,shouldUseSliders:a}=z(Ane),c=te(),{t:d}=ye(),p=f.useCallback(v=>{c(Lp(v))},[c]),h=f.useCallback(()=>{c(Lp(t))},[c,t]),m=f.useCallback(()=>{c(bd())},[c]);return a?i.jsx(_t,{label:d("parameters.steps"),min:n,max:r,step:s,onChange:p,handleReset:h,value:e,withInput:!0,withReset:!0,withSliderMarks:!0,sliderNumberInputProps:{max:o}}):i.jsx(Xc,{label:d("parameters.steps"),min:n,max:o,step:s,onChange:p,value:e,numberInputFieldProps:{textAlign:"center"},onBlur:m})},Ci=f.memo(Tne);function NO(){const e=te(),t=z(o=>o.generation.shouldFitToWidthHeight),n=o=>e(YR(o.target.checked)),{t:r}=ye();return i.jsx(Er,{label:r("parameters.imageFit"),isChecked:t,onChange:n})}function Nne(){const e=z(a=>a.generation.seed),t=z(a=>a.generation.shouldRandomizeSeed),n=z(a=>a.generation.shouldGenerateVariations),{t:r}=ye(),o=te(),s=a=>o($p(a));return i.jsx(Xc,{label:r("parameters.seed"),step:1,precision:0,flexGrow:1,min:Y_,max:Q_,isDisabled:t,isInvalid:e<0&&n,onChange:s,value:e})}const $ne=(e,t)=>Math.floor(Math.random()*(t-e+1)+e);function zne(){const e=te(),t=z(o=>o.generation.shouldRandomizeSeed),{t:n}=ye(),r=()=>e($p($ne(Y_,Q_)));return i.jsx(Le,{size:"sm",isDisabled:t,"aria-label":n("parameters.shuffle"),tooltip:n("parameters.shuffle"),onClick:r,icon:i.jsx(CW,{})})}const Lne=()=>{const e=te(),{t}=ye(),n=z(o=>o.generation.shouldRandomizeSeed),r=o=>e(QR(o.target.checked));return i.jsx(Er,{label:t("common.random"),isChecked:n,onChange:r})},Bne=f.memo(Lne),Fne=()=>i.jsxs(F,{sx:{gap:3,alignItems:"flex-end"},children:[i.jsx(Nne,{}),i.jsx(zne,{}),i.jsx(Bne,{})]}),ki=f.memo(Fne),Hne=fe([Ye],({sdxl:e})=>{const{sdxlImg2ImgDenoisingStrength:t}=e;return{sdxlImg2ImgDenoisingStrength:t}},Ge),Wne=()=>{const{sdxlImg2ImgDenoisingStrength:e}=z(Hne),t=te(),{t:n}=ye(),r=f.useCallback(s=>t(sw(s)),[t]),o=f.useCallback(()=>{t(sw(.7))},[t]);return i.jsx(_t,{label:`${n("parameters.denoisingStrength")}`,step:.01,min:0,max:1,onChange:r,handleReset:o,value:e,isInteger:!1,withInput:!0,withSliderMarks:!0,withReset:!0})},Vne=f.memo(Wne),Une=fe([La,Di],(e,t)=>{const{shouldUseSliders:n}=e,{shouldRandomizeSeed:r}=t;return{shouldUseSliders:n,activeLabel:r?void 0:"Manual Seed"}},Ge),Gne=()=>{const{shouldUseSliders:e,activeLabel:t}=z(Une);return i.jsx(Ro,{label:"General",activeLabel:t,defaultIsOpen:!0,children:i.jsxs(F,{sx:{flexDirection:"column",gap:3},children:[e?i.jsxs(i.Fragment,{children:[i.jsx(wi,{}),i.jsx(Ci,{}),i.jsx(xi,{}),i.jsx(Si,{}),i.jsx(Ee,{pt:2,children:i.jsx(ki,{})}),i.jsx(Oc,{})]}):i.jsxs(i.Fragment,{children:[i.jsxs(F,{gap:3,children:[i.jsx(wi,{}),i.jsx(Ci,{}),i.jsx(xi,{})]}),i.jsx(Si,{}),i.jsx(Ee,{pt:2,children:i.jsx(ki,{})}),i.jsx(Oc,{})]}),i.jsx(Vne,{}),i.jsx(NO,{})]})})},qne=f.memo(Gne),$O=()=>i.jsxs(i.Fragment,{children:[i.jsx(MO,{}),i.jsx(qd,{}),i.jsx(qne,{}),i.jsx(DO,{}),i.jsx(Ud,{}),i.jsx(tg,{})]}),zO=e=>{const{sx:t}=e,n=te(),r=z(a=>a.ui.shouldPinParametersPanel),{t:o}=ye(),s=()=>{n(JR(!r)),n(ko())};return i.jsx(Le,{...e,tooltip:o("common.pinOptionsPanel"),"aria-label":o("common.pinOptionsPanel"),onClick:s,icon:r?i.jsx(mj,{}):i.jsx(gj,{}),variant:"ghost",size:"sm",sx:{color:"base.500",_hover:{color:"base.600"},_active:{color:"base.700"},_dark:{color:"base.500",_hover:{color:"base.400"},_active:{color:"base.300"}},...t}})},Kne=fe(La,e=>{const{shouldPinParametersPanel:t,shouldShowParametersPanel:n}=e;return{shouldPinParametersPanel:t,shouldShowParametersPanel:n}}),Xne=e=>{const{shouldPinParametersPanel:t,shouldShowParametersPanel:n}=z(Kne);return t&&n?i.jsxs(Ee,{sx:{position:"relative",h:"full",w:ex,flexShrink:0},children:[i.jsx(F,{sx:{gap:2,flexDirection:"column",h:"full",w:"full",position:"absolute",overflowY:"auto"},children:e.children}),i.jsx(zO,{sx:{position:"absolute",top:0,insetInlineEnd:0}})]}):null},tx=f.memo(Xne),Yne=e=>{const{direction:t="horizontal",...n}=e,{colorMode:r}=Ds();return t==="horizontal"?i.jsx($1,{children:i.jsx(F,{sx:{w:6,h:"full",justifyContent:"center",alignItems:"center"},...n,children:i.jsx(Ee,{sx:{w:.5,h:"calc(100% - 4px)",bg:Fe("base.100","base.850")(r)}})})}):i.jsx($1,{children:i.jsx(F,{sx:{w:"full",h:6,justifyContent:"center",alignItems:"center"},...n,children:i.jsx(Ee,{sx:{w:"calc(100% - 4px)",h:.5,bg:Fe("base.100","base.850")(r)}})})})},LO=f.memo(Yne),Qne=fe([Ye],({system:e})=>{const{isProcessing:t,isConnected:n}=e;return n&&!t}),Jne=e=>{const{onClick:t,isDisabled:n}=e,{t:r}=ye(),o=z(Qne);return i.jsx(Le,{onClick:t,icon:i.jsx(us,{}),tooltip:`${r("gallery.deleteImage")} (Del)`,"aria-label":`${r("gallery.deleteImage")} (Del)`,isDisabled:n||!o,colorScheme:"error"})},Zne=[{label:"RealESRGAN x2 Plus",value:"RealESRGAN_x2plus.pth",tooltip:"Attempts to retain sharpness, low smoothing",group:"x2 Upscalers"},{label:"RealESRGAN x4 Plus",value:"RealESRGAN_x4plus.pth",tooltip:"Best for photos and highly detailed images, medium smoothing",group:"x4 Upscalers"},{label:"RealESRGAN x4 Plus (anime 6B)",value:"RealESRGAN_x4plus_anime_6B.pth",tooltip:"Best for anime/manga, high smoothing",group:"x4 Upscalers"},{label:"ESRGAN SRx4",value:"ESRGAN_SRx4_DF2KOST_official-ff704c30.pth",tooltip:"Retains sharpness, low smoothing",group:"x4 Upscalers"}];function ere(){const e=z(r=>r.postprocessing.esrganModelName),t=te(),n=r=>t(ZR(r));return i.jsx(Xr,{label:"ESRGAN Model",value:e,itemComponent:Ri,onChange:n,data:Zne})}const tre=e=>{const{imageDTO:t}=e,n=te(),r=z(Cr),{t:o}=ye(),{isOpen:s,onOpen:a,onClose:c}=ss(),d=f.useCallback(()=>{c(),t&&n(J_({image_name:t.image_name}))},[n,t,c]);return i.jsx(vl,{isOpen:s,onClose:c,triggerComponent:i.jsx(Le,{onClick:a,icon:i.jsx(lW,{}),"aria-label":o("parameters.upscale")}),children:i.jsxs(F,{sx:{flexDirection:"column",gap:4},children:[i.jsx(ere,{}),i.jsx(Jt,{size:"sm",isDisabled:!t||r,onClick:d,children:o("parameters.upscaleImage")})]})})},nre=fe([Ye,Kn],({gallery:e,system:t,ui:n},r)=>{const{isProcessing:o,isConnected:s,shouldConfirmOnDelete:a,progressImage:c}=t,{shouldShowImageDetails:d,shouldHidePreview:p,shouldShowProgressInViewer:h}=n,m=e.selection[e.selection.length-1];return{canDeleteImage:s&&!o,shouldConfirmOnDelete:a,isProcessing:o,isConnected:s,shouldDisableToolbarButtons:!!c||!m,shouldShowImageDetails:d,activeTabName:r,shouldHidePreview:p,shouldShowProgressInViewer:h,lastSelectedImage:m}},{memoizeOptions:{resultEqualityCheck:Zt}}),rre=e=>{const t=te(),{isProcessing:n,isConnected:r,shouldDisableToolbarButtons:o,shouldShowImageDetails:s,lastSelectedImage:a,shouldShowProgressInViewer:c}=z(nre),d=ir("upscaling").isFeatureEnabled,p=Wc(),{t:h}=ye(),{recallBothPrompts:m,recallSeed:v,recallAllParameters:b}=Uy(),[w,y]=qy(a,500),{currentData:S}=os(a??oo.skipToken),{currentData:_}=tb(y.isPending()?oo.skipToken:w??oo.skipToken),k=_==null?void 0:_.metadata,j=f.useCallback(()=>{b(k)},[k,b]);rt("a",()=>{},[k,b]);const I=f.useCallback(()=>{v(k==null?void 0:k.seed)},[k==null?void 0:k.seed,v]);rt("s",I,[S]);const E=f.useCallback(()=>{m(k==null?void 0:k.positive_prompt,k==null?void 0:k.negative_prompt,k==null?void 0:k.positive_style_prompt,k==null?void 0:k.negative_style_prompt)},[k==null?void 0:k.negative_prompt,k==null?void 0:k.positive_prompt,k==null?void 0:k.positive_style_prompt,k==null?void 0:k.negative_style_prompt,m]);rt("p",E,[S]);const O=f.useCallback(()=>{t(oO()),t(Z1(S))},[t,S]);rt("shift+i",O,[S]);const R=f.useCallback(()=>{S&&t(J_({image_name:S.image_name}))},[t,S]),M=f.useCallback(()=>{S&&t(nb(S))},[t,S]);rt("Shift+U",()=>{R()},{enabled:()=>!!(d&&!o&&r&&!n)},[d,S,o,r,n]);const A=f.useCallback(()=>t(eM(!s)),[t,s]);rt("i",()=>{S?A():p({title:h("toast.metadataLoadFailed"),status:"error",duration:2500,isClosable:!0})},[S,s,p]),rt("delete",()=>{M()},[t,S]);const T=f.useCallback(()=>{t(K_(!c))},[t,c]);return i.jsx(i.Fragment,{children:i.jsxs(F,{sx:{flexWrap:"wrap",justifyContent:"center",alignItems:"center",gap:2},...e,children:[i.jsx(rr,{isAttached:!0,isDisabled:o,children:i.jsxs(Od,{children:[i.jsx(Rd,{as:Le,"aria-label":`${h("parameters.sendTo")}...`,tooltip:`${h("parameters.sendTo")}...`,isDisabled:!S,icon:i.jsx(jW,{})}),i.jsx(Fc,{motionProps:um,children:S&&i.jsx(sO,{imageDTO:S})})]})}),i.jsxs(rr,{isAttached:!0,isDisabled:o,children:[i.jsx(Le,{icon:i.jsx(jP,{}),tooltip:`${h("parameters.usePrompt")} (P)`,"aria-label":`${h("parameters.usePrompt")} (P)`,isDisabled:!(k!=null&&k.positive_prompt),onClick:E}),i.jsx(Le,{icon:i.jsx(IP,{}),tooltip:`${h("parameters.useSeed")} (S)`,"aria-label":`${h("parameters.useSeed")} (S)`,isDisabled:!(k!=null&&k.seed),onClick:I}),i.jsx(Le,{icon:i.jsx(vP,{}),tooltip:`${h("parameters.useAll")} (A)`,"aria-label":`${h("parameters.useAll")} (A)`,isDisabled:!k,onClick:j})]}),d&&i.jsx(rr,{isAttached:!0,isDisabled:o,children:d&&i.jsx(tre,{imageDTO:S})}),i.jsx(rr,{isAttached:!0,isDisabled:o,children:i.jsx(Le,{icon:i.jsx(ty,{}),tooltip:`${h("parameters.info")} (I)`,"aria-label":`${h("parameters.info")} (I)`,isChecked:s,onClick:A})}),i.jsx(rr,{isAttached:!0,children:i.jsx(Le,{"aria-label":h("settings.displayInProgress"),tooltip:h("settings.displayInProgress"),icon:i.jsx(hW,{}),isChecked:c,onClick:T})}),i.jsx(rr,{isAttached:!0,children:i.jsx(Jne,{onClick:M,isDisabled:o})})]})})},ore=fe([Ye,W_],(e,t)=>{var _,k;const{data:n,status:r}=tM.endpoints.listImages.select(t)(e),o=e.gallery.selection[e.gallery.selection.length-1],s=r==="pending";if(!n||!o||n.total===0)return{isFetching:s,queryArgs:t,isOnFirstImage:!0,isOnLastImage:!0};const a={...t,offset:n.ids.length,limit:U_},c=nM.getSelectors(),d=c.selectAll(n),p=d.findIndex(j=>j.image_name===o),h=Es(p+1,0,d.length-1),m=Es(p-1,0,d.length-1),v=(_=d[h])==null?void 0:_.image_name,b=(k=d[m])==null?void 0:k.image_name,w=c.selectById(n,v),y=c.selectById(n,b),S=d.length;return{isOnFirstImage:p===0,isOnLastImage:!isNaN(p)&&p===S-1,areMoreImagesAvailable:((n==null?void 0:n.total)??0)>S,isFetching:r==="pending",nextImage:w,prevImage:y,nextImageId:v,prevImageId:b,queryArgs:a}},{memoizeOptions:{resultEqualityCheck:Zt}}),BO=()=>{const e=te(),{isOnFirstImage:t,isOnLastImage:n,nextImageId:r,prevImageId:o,areMoreImagesAvailable:s,isFetching:a,queryArgs:c}=z(ore),d=f.useCallback(()=>{o&&e(Mv(o))},[e,o]),p=f.useCallback(()=>{r&&e(Mv(r))},[e,r]),[h]=V_(),m=f.useCallback(()=>{h(c)},[h,c]);return{handlePrevImage:d,handleNextImage:p,isOnFirstImage:t,isOnLastImage:n,nextImageId:r,prevImageId:o,areMoreImagesAvailable:s,handleLoadMoreImages:m,isFetching:a}};function sre(e){return et({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M245.09 327.74v-37.32c57.07 0 84.51 13.47 108.58 38.68 5.4 5.65 15 1.32 14.29-6.43-5.45-61.45-34.14-117.09-122.87-117.09v-37.32a8.32 8.32 0 00-14.05-6L146.58 242a8.2 8.2 0 000 11.94L231 333.71a8.32 8.32 0 0014.09-5.97z"}},{tag:"path",attr:{fill:"none",strokeMiterlimit:"10",strokeWidth:"32",d:"M256 64C150 64 64 150 64 256s86 192 192 192 192-86 192-192S362 64 256 64z"}}]})(e)}const ys=({label:e,value:t,onClick:n,isLink:r,labelPosition:o,withCopy:s=!1})=>{const{t:a}=ye();return t?i.jsxs(F,{gap:2,children:[n&&i.jsx(wn,{label:`Recall ${e}`,children:i.jsx(Ca,{"aria-label":a("accessibility.useThisParameter"),icon:i.jsx(sre,{}),size:"xs",variant:"ghost",fontSize:20,onClick:n})}),s&&i.jsx(wn,{label:`Copy ${e}`,children:i.jsx(Ca,{"aria-label":`Copy ${e}`,icon:i.jsx(Vc,{}),size:"xs",variant:"ghost",fontSize:14,onClick:()=>navigator.clipboard.writeText(t.toString())})}),i.jsxs(F,{direction:o?"column":"row",children:[i.jsxs(qe,{fontWeight:"semibold",whiteSpace:"pre-wrap",pr:2,children:[e,":"]}),r?i.jsxs(Ob,{href:t.toString(),isExternal:!0,wordBreak:"break-all",children:[t.toString()," ",i.jsx(uj,{mx:"2px"})]}):i.jsx(qe,{overflowY:"scroll",wordBreak:"break-all",children:t.toString()})]})]}):null},are=e=>{const{metadata:t}=e,{recallPositivePrompt:n,recallNegativePrompt:r,recallSeed:o,recallCfgScale:s,recallModel:a,recallScheduler:c,recallSteps:d,recallWidth:p,recallHeight:h,recallStrength:m}=Uy(),v=f.useCallback(()=>{n(t==null?void 0:t.positive_prompt)},[t==null?void 0:t.positive_prompt,n]),b=f.useCallback(()=>{r(t==null?void 0:t.negative_prompt)},[t==null?void 0:t.negative_prompt,r]),w=f.useCallback(()=>{o(t==null?void 0:t.seed)},[t==null?void 0:t.seed,o]),y=f.useCallback(()=>{a(t==null?void 0:t.model)},[t==null?void 0:t.model,a]),S=f.useCallback(()=>{p(t==null?void 0:t.width)},[t==null?void 0:t.width,p]),_=f.useCallback(()=>{h(t==null?void 0:t.height)},[t==null?void 0:t.height,h]),k=f.useCallback(()=>{c(t==null?void 0:t.scheduler)},[t==null?void 0:t.scheduler,c]),j=f.useCallback(()=>{d(t==null?void 0:t.steps)},[t==null?void 0:t.steps,d]),I=f.useCallback(()=>{s(t==null?void 0:t.cfg_scale)},[t==null?void 0:t.cfg_scale,s]),E=f.useCallback(()=>{m(t==null?void 0:t.strength)},[t==null?void 0:t.strength,m]);return!t||Object.keys(t).length===0?null:i.jsxs(i.Fragment,{children:[t.generation_mode&&i.jsx(ys,{label:"Generation Mode",value:t.generation_mode}),t.positive_prompt&&i.jsx(ys,{label:"Positive Prompt",labelPosition:"top",value:t.positive_prompt,onClick:v}),t.negative_prompt&&i.jsx(ys,{label:"Negative Prompt",labelPosition:"top",value:t.negative_prompt,onClick:b}),t.seed!==void 0&&i.jsx(ys,{label:"Seed",value:t.seed,onClick:w}),t.model!==void 0&&i.jsx(ys,{label:"Model",value:t.model.model_name,onClick:y}),t.width&&i.jsx(ys,{label:"Width",value:t.width,onClick:S}),t.height&&i.jsx(ys,{label:"Height",value:t.height,onClick:_}),t.scheduler&&i.jsx(ys,{label:"Scheduler",value:t.scheduler,onClick:k}),t.steps&&i.jsx(ys,{label:"Steps",value:t.steps,onClick:j}),t.cfg_scale!==void 0&&i.jsx(ys,{label:"CFG scale",value:t.cfg_scale,onClick:I}),t.strength&&i.jsx(ys,{label:"Image to image strength",value:t.strength,onClick:E})]})},ire=e=>{const{copyTooltip:t,jsonObject:n}=e,r=f.useMemo(()=>JSON.stringify(n,null,2),[n]);return i.jsxs(F,{sx:{borderRadius:"base",bg:"whiteAlpha.500",_dark:{bg:"blackAlpha.500"},flexGrow:1,w:"full",h:"full",position:"relative"},children:[i.jsx(Ee,{sx:{position:"absolute",top:0,left:0,right:0,bottom:0,overflow:"auto",p:4},children:i.jsx(oj,{defer:!0,style:{height:"100%",width:"100%"},options:{scrollbars:{visibility:"auto",autoHide:"move",autoHideDelay:1300,theme:"os-theme-dark"}},children:i.jsx("pre",{children:r})})}),i.jsx(F,{sx:{position:"absolute",top:0,insetInlineEnd:0,p:2},children:i.jsx(wn,{label:t,children:i.jsx(Ca,{"aria-label":t,icon:i.jsx(Vc,{}),variant:"ghost",onClick:()=>navigator.clipboard.writeText(r)})})})]})},lre=({image:e})=>{const[t,n]=qy(e.image_name,500),{currentData:r}=tb(n.isPending()?oo.skipToken:t??oo.skipToken),o=r==null?void 0:r.metadata,s=r==null?void 0:r.graph,a=f.useMemo(()=>{const c=[];return o&&c.push({label:"Core Metadata",data:o,copyTooltip:"Copy Core Metadata JSON"}),e&&c.push({label:"Image Details",data:e,copyTooltip:"Copy Image Details JSON"}),s&&c.push({label:"Graph",data:s,copyTooltip:"Copy Graph JSON"}),c},[o,s,e]);return i.jsxs(F,{sx:{padding:4,gap:1,flexDirection:"column",width:"full",height:"full",backdropFilter:"blur(20px)",bg:"baseAlpha.200",_dark:{bg:"blackAlpha.600"},borderRadius:"base",position:"absolute",overflow:"hidden"},children:[i.jsxs(F,{gap:2,children:[i.jsx(qe,{fontWeight:"semibold",children:"File:"}),i.jsxs(Ob,{href:e.image_url,isExternal:!0,maxW:"calc(100% - 3rem)",children:[e.image_name,i.jsx(uj,{mx:"2px"})]})]}),i.jsx(are,{metadata:o}),i.jsxs(Td,{variant:"line",sx:{display:"flex",flexDir:"column",w:"full",h:"full"},children:[i.jsx(Nd,{children:a.map(c=>i.jsx(Cc,{sx:{borderTopRadius:"base"},children:i.jsx(qe,{sx:{color:"base.700",_dark:{color:"base.300"}},children:c.label})},c.label))}),i.jsx(Mm,{sx:{w:"full",h:"full"},children:a.map(c=>i.jsx(Rm,{sx:{w:"full",h:"full",p:0,pt:4},children:i.jsx(ire,{jsonObject:c.data,copyTooltip:c.copyTooltip})},c.label))})]})]})},cre=f.memo(lre),hv={color:"base.100",pointerEvents:"auto"},ure=()=>{const{t:e}=ye(),{handlePrevImage:t,handleNextImage:n,isOnFirstImage:r,isOnLastImage:o,handleLoadMoreImages:s,areMoreImagesAvailable:a,isFetching:c}=BO();return i.jsxs(Ee,{sx:{position:"relative",height:"100%",width:"100%"},children:[i.jsx(Ee,{sx:{pos:"absolute",top:"50%",transform:"translate(0, -50%)",insetInlineStart:0},children:!r&&i.jsx(Ca,{"aria-label":e("accessibility.previousImage"),icon:i.jsx(QH,{size:64}),variant:"unstyled",onClick:t,boxSize:16,sx:hv})}),i.jsxs(Ee,{sx:{pos:"absolute",top:"50%",transform:"translate(0, -50%)",insetInlineEnd:0},children:[!o&&i.jsx(Ca,{"aria-label":e("accessibility.nextImage"),icon:i.jsx(JH,{size:64}),variant:"unstyled",onClick:n,boxSize:16,sx:hv}),o&&a&&!c&&i.jsx(Ca,{"aria-label":e("accessibility.loadMore"),icon:i.jsx(YH,{size:64}),variant:"unstyled",onClick:s,boxSize:16,sx:hv}),o&&a&&c&&i.jsx(F,{sx:{w:16,h:16,alignItems:"center",justifyContent:"center"},children:i.jsx(pl,{opacity:.5,size:"xl"})})]})]})},dre=f.memo(ure),fre=fe([Ye,rM],({ui:e,system:t},n)=>{const{shouldShowImageDetails:r,shouldHidePreview:o,shouldShowProgressInViewer:s}=e,{progressImage:a,shouldAntialiasProgressImage:c}=t;return{shouldShowImageDetails:r,shouldHidePreview:o,imageName:n,progressImage:a,shouldShowProgressInViewer:s,shouldAntialiasProgressImage:c}},{memoizeOptions:{resultEqualityCheck:Zt}}),pre=()=>{const{shouldShowImageDetails:e,imageName:t,progressImage:n,shouldShowProgressInViewer:r,shouldAntialiasProgressImage:o}=z(fre),{handlePrevImage:s,handleNextImage:a,prevImageId:c,nextImageId:d,isOnLastImage:p,handleLoadMoreImages:h,areMoreImagesAvailable:m,isFetching:v}=BO();rt("left",()=>{s()},[c]),rt("right",()=>{if(p&&m&&!v){h();return}p||a()},[d,p,m,h,v]);const{currentData:b}=os(t??oo.skipToken),w=f.useMemo(()=>{if(b)return{id:"current-image",payloadType:"IMAGE_DTO",payload:{imageDTO:b}}},[b]),y=f.useMemo(()=>({id:"current-image",actionType:"SET_CURRENT_IMAGE"}),[]),[S,_]=f.useState(!1),k=f.useRef(0),j=f.useCallback(()=>{_(!0),window.clearTimeout(k.current)},[]),I=f.useCallback(()=>{k.current=window.setTimeout(()=>{_(!1)},500)},[]);return i.jsxs(F,{onMouseOver:j,onMouseOut:I,sx:{width:"full",height:"full",alignItems:"center",justifyContent:"center",position:"relative"},children:[n&&r?i.jsx(Nc,{src:n.dataURL,width:n.width,height:n.height,draggable:!1,sx:{objectFit:"contain",maxWidth:"full",maxHeight:"full",height:"auto",position:"absolute",borderRadius:"base",imageRendering:o?"auto":"pixelated"}}):i.jsx(yi,{imageDTO:b,droppableData:y,draggableData:w,isUploadDisabled:!0,fitContainer:!0,useThumbailFallback:!0,dropLabel:"Set as Current Image",noContentFallback:i.jsx(mi,{icon:ll,label:"No image selected"})}),e&&b&&i.jsx(Ee,{sx:{position:"absolute",top:"0",width:"full",height:"full",borderRadius:"base"},children:i.jsx(cre,{image:b})}),i.jsx(mo,{children:!e&&b&&S&&i.jsx(Ir.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.1}},exit:{opacity:0,transition:{duration:.1}},style:{position:"absolute",top:"0",width:"100%",height:"100%",pointerEvents:"none"},children:i.jsx(dre,{})},"nextPrevButtons")})]})},hre=f.memo(pre),mre=()=>i.jsxs(F,{sx:{position:"relative",flexDirection:"column",height:"100%",width:"100%",rowGap:4,alignItems:"center",justifyContent:"center"},children:[i.jsx(rre,{}),i.jsx(hre,{})]}),FO=()=>i.jsx(Ee,{layerStyle:"first",sx:{position:"relative",width:"100%",height:"100%",p:4,borderRadius:"base"},children:i.jsx(F,{sx:{width:"100%",height:"100%"},children:i.jsx(mre,{})})}),gre=e=>{const t=te(),{lora:n}=e,r=f.useCallback(a=>{t(oM({id:n.id,weight:a}))},[t,n.id]),o=f.useCallback(()=>{t(sM(n.id))},[t,n.id]),s=f.useCallback(()=>{t(aM(n.id))},[t,n.id]);return i.jsxs(F,{sx:{gap:2.5,alignItems:"flex-end"},children:[i.jsx(_t,{label:n.model_name,value:n.weight,onChange:r,min:-1,max:2,step:.01,withInput:!0,withReset:!0,handleReset:o,withSliderMarks:!0,sliderMarks:[-1,0,1,2],sliderNumberInputProps:{min:-50,max:50}}),i.jsx(Le,{size:"sm",onClick:s,tooltip:"Remove LoRA","aria-label":"Remove LoRA",icon:i.jsx(us,{}),colorScheme:"error"})]})},vre=f.memo(gre),bre=fe(Ye,({lora:e})=>{const{loras:t}=e;return{loras:t}},Ge),yre=()=>{const{loras:e}=z(bre);return i.jsx(i.Fragment,{children:cs(e,t=>i.jsx(vre,{lora:t},t.model_name))})},xre=fe(Ye,({lora:e})=>({loras:e.loras}),Ge),wre=()=>{const e=te(),{loras:t}=z(xre),{data:n}=cm(),r=z(a=>a.generation.model),o=f.useMemo(()=>{if(!n)return[];const a=[];return so(n.entities,(c,d)=>{if(!c||d in t)return;const p=(r==null?void 0:r.base_model)!==c.base_model;a.push({value:d,label:c.model_name,disabled:p,group:Qn[c.base_model],tooltip:p?`Incompatible base model: ${c.base_model}`:void 0})}),a.sort((c,d)=>{var p;return c.label&&d.label&&(p=c.label)!=null&&p.localeCompare(d.label)?1:-1}),a.sort((c,d)=>c.disabled&&!d.disabled?-1:1)},[t,n,r==null?void 0:r.base_model]),s=f.useCallback(a=>{if(!a)return;const c=n==null?void 0:n.entities[a];c&&e(iM(c))},[e,n==null?void 0:n.entities]);return(n==null?void 0:n.ids.length)===0?i.jsx(F,{sx:{justifyContent:"center",p:2},children:i.jsx(qe,{sx:{fontSize:"sm",color:"base.500",_dark:"base.700"},children:"No LoRAs Loaded"})}):i.jsx(ar,{placeholder:o.length===0?"All LoRAs added":"Add LoRA",value:null,data:o,nothingFound:"No matching LoRAs",itemComponent:Ri,disabled:o.length===0,filter:(a,c)=>{var d;return((d=c.label)==null?void 0:d.toLowerCase().includes(a.toLowerCase().trim()))||c.value.toLowerCase().includes(a.toLowerCase().trim())},onChange:s})},Sre=fe(Ye,e=>{const t=Z_(e.lora.loras);return{activeLabel:t>0?`${t} Active`:void 0}},Ge),Cre=()=>{const{activeLabel:e}=z(Sre);return ir("lora").isFeatureEnabled?i.jsx(Ro,{label:"LoRA",activeLabel:e,children:i.jsxs(F,{sx:{flexDir:"column",gap:2},children:[i.jsx(wre,{}),i.jsx(yre,{})]})}):null},nx=f.memo(Cre);function kre(){const e=z(d=>d.generation.clipSkip),{model:t}=z(d=>d.generation),n=te(),{t:r}=ye(),o=f.useCallback(d=>{n(aw(d))},[n]),s=f.useCallback(()=>{n(aw(0))},[n]),a=f.useMemo(()=>t?Nf[t.base_model].maxClip:Nf["sd-1"].maxClip,[t]),c=f.useMemo(()=>t?Nf[t.base_model].markers:Nf["sd-1"].markers,[t]);return i.jsx(_t,{label:r("parameters.clipSkip"),"aria-label":r("parameters.clipSkip"),min:0,max:a,step:1,value:e,onChange:o,withSliderMarks:!0,sliderMarks:c,withInput:!0,withReset:!0,handleReset:s})}const _re=fe(Ye,e=>({activeLabel:e.generation.clipSkip>0?"Clip Skip":void 0}),Ge);function rx(){const{activeLabel:e}=z(_re);return z(n=>n.generation.shouldShowAdvancedOptions)?i.jsx(Ro,{label:"Advanced",activeLabel:e,children:i.jsx(F,{sx:{flexDir:"column",gap:2},children:i.jsx(kre,{})})}):null}const HO=e=>{const t=lm("models"),[n,r,o]=e.split("/"),s=lM.safeParse({base_model:n,model_name:o});if(!s.success){t.error({controlNetModelId:e,errors:s.error.format()},"Failed to parse ControlNet model id");return}return s.data},Pre=e=>{const{controlNetId:t}=e,n=te(),r=z(Cr),o=f.useMemo(()=>fe(Ye,({generation:v,controlNet:b})=>{var _,k;const{model:w}=v,y=(_=b.controlNets[t])==null?void 0:_.model,S=(k=b.controlNets[t])==null?void 0:k.isEnabled;return{mainModel:w,controlNetModel:y,isEnabled:S}},Ge),[t]),{mainModel:s,controlNetModel:a,isEnabled:c}=z(o),{data:d}=ab(),p=f.useMemo(()=>{if(!d)return[];const v=[];return so(d.entities,(b,w)=>{if(!b)return;const y=(b==null?void 0:b.base_model)!==(s==null?void 0:s.base_model);v.push({value:w,label:b.model_name,group:Qn[b.base_model],disabled:y,tooltip:y?`Incompatible base model: ${b.base_model}`:void 0})}),v},[d,s==null?void 0:s.base_model]),h=f.useMemo(()=>(d==null?void 0:d.entities[`${a==null?void 0:a.base_model}/controlnet/${a==null?void 0:a.model_name}`])??null,[a==null?void 0:a.base_model,a==null?void 0:a.model_name,d==null?void 0:d.entities]),m=f.useCallback(v=>{if(!v)return;const b=HO(v);b&&n(e5({controlNetId:t,model:b}))},[t,n]);return i.jsx(ar,{itemComponent:Ri,data:p,error:!h||(s==null?void 0:s.base_model)!==h.base_model,placeholder:"Select a model",value:(h==null?void 0:h.id)??null,onChange:m,disabled:r||!c,tooltip:h==null?void 0:h.description})},jre=f.memo(Pre),Ire=e=>{const{controlNetId:t}=e,n=te(),r=f.useMemo(()=>fe(Ye,({controlNet:c})=>{const{weight:d,isEnabled:p}=c.controlNets[t];return{weight:d,isEnabled:p}},Ge),[t]),{weight:o,isEnabled:s}=z(r),a=f.useCallback(c=>{n(cM({controlNetId:t,weight:c}))},[t,n]);return i.jsx(_t,{isDisabled:!s,label:"Weight",value:o,onChange:a,min:0,max:2,step:.01,withSliderMarks:!0,sliderMarks:[0,1,2]})},Ere=f.memo(Ire),Ore=e=>{const{height:t,controlNetId:n}=e,r=te(),o=f.useMemo(()=>fe(Ye,({controlNet:E})=>{const{pendingControlImages:O}=E,{controlImage:R,processedControlImage:M,processorType:A,isEnabled:T}=E.controlNets[n];return{controlImageName:R,processedControlImageName:M,processorType:A,isEnabled:T,pendingControlImages:O}},Ge),[n]),{controlImageName:s,processedControlImageName:a,processorType:c,pendingControlImages:d,isEnabled:p}=z(o),[h,m]=f.useState(!1),{currentData:v}=os(s??oo.skipToken),{currentData:b}=os(a??oo.skipToken),w=f.useCallback(()=>{r(uM({controlNetId:n,controlImage:null}))},[n,r]),y=f.useCallback(()=>{m(!0)},[]),S=f.useCallback(()=>{m(!1)},[]),_=f.useMemo(()=>{if(v)return{id:n,payloadType:"IMAGE_DTO",payload:{imageDTO:v}}},[v,n]),k=f.useMemo(()=>({id:n,actionType:"SET_CONTROLNET_IMAGE",context:{controlNetId:n}}),[n]),j=f.useMemo(()=>({type:"SET_CONTROLNET_IMAGE",controlNetId:n}),[n]),I=v&&b&&!h&&!d.includes(n)&&c!=="none";return i.jsxs(F,{onMouseEnter:y,onMouseLeave:S,sx:{position:"relative",w:"full",h:t,alignItems:"center",justifyContent:"center",pointerEvents:p?"auto":"none",opacity:p?1:.5},children:[i.jsx(yi,{draggableData:_,droppableData:k,imageDTO:v,isDropDisabled:I||!p,onClickReset:w,postUploadAction:j,resetTooltip:"Reset Control Image",withResetIcon:!!v}),i.jsx(Ee,{sx:{position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full",opacity:I?1:0,transitionProperty:"common",transitionDuration:"normal",pointerEvents:"none"},children:i.jsx(yi,{draggableData:_,droppableData:k,imageDTO:b,isUploadDisabled:!0,isDropDisabled:!p,onClickReset:w,resetTooltip:"Reset Control Image",withResetIcon:!!v})}),d.includes(n)&&i.jsx(F,{sx:{position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full",alignItems:"center",justifyContent:"center",opacity:.8,borderRadius:"base",bg:"base.400",_dark:{bg:"base.900"}},children:i.jsx(pl,{size:"xl",sx:{color:"base.100",_dark:{color:"base.400"}}})})]})},Ek=f.memo(Ore),Ts=()=>{const e=te();return f.useCallback((n,r)=>{e(dM({controlNetId:n,changes:r}))},[e])};function Ns(e){return i.jsx(F,{sx:{flexDirection:"column",gap:2},children:e.children})}const Ok=ls.canny_image_processor.default,Rre=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{low_threshold:o,high_threshold:s}=n,a=z(Cr),c=Ts(),d=f.useCallback(v=>{c(t,{low_threshold:v})},[t,c]),p=f.useCallback(()=>{c(t,{low_threshold:Ok.low_threshold})},[t,c]),h=f.useCallback(v=>{c(t,{high_threshold:v})},[t,c]),m=f.useCallback(()=>{c(t,{high_threshold:Ok.high_threshold})},[t,c]);return i.jsxs(Ns,{children:[i.jsx(_t,{isDisabled:a||!r,label:"Low Threshold",value:o,onChange:d,handleReset:p,withReset:!0,min:0,max:255,withInput:!0,withSliderMarks:!0}),i.jsx(_t,{isDisabled:a||!r,label:"High Threshold",value:s,onChange:h,handleReset:m,withReset:!0,min:0,max:255,withInput:!0,withSliderMarks:!0})]})},Mre=f.memo(Rre),wu=ls.content_shuffle_image_processor.default,Dre=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s,w:a,h:c,f:d}=n,p=Ts(),h=z(Cr),m=f.useCallback(E=>{p(t,{detect_resolution:E})},[t,p]),v=f.useCallback(()=>{p(t,{detect_resolution:wu.detect_resolution})},[t,p]),b=f.useCallback(E=>{p(t,{image_resolution:E})},[t,p]),w=f.useCallback(()=>{p(t,{image_resolution:wu.image_resolution})},[t,p]),y=f.useCallback(E=>{p(t,{w:E})},[t,p]),S=f.useCallback(()=>{p(t,{w:wu.w})},[t,p]),_=f.useCallback(E=>{p(t,{h:E})},[t,p]),k=f.useCallback(()=>{p(t,{h:wu.h})},[t,p]),j=f.useCallback(E=>{p(t,{f:E})},[t,p]),I=f.useCallback(()=>{p(t,{f:wu.f})},[t,p]);return i.jsxs(Ns,{children:[i.jsx(_t,{label:"Detect Resolution",value:s,onChange:m,handleReset:v,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:h||!r}),i.jsx(_t,{label:"Image Resolution",value:o,onChange:b,handleReset:w,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:h||!r}),i.jsx(_t,{label:"W",value:a,onChange:y,handleReset:S,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:h||!r}),i.jsx(_t,{label:"H",value:c,onChange:_,handleReset:k,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:h||!r}),i.jsx(_t,{label:"F",value:d,onChange:j,handleReset:I,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:h||!r})]})},Are=f.memo(Dre),Rk=ls.hed_image_processor.default,Tre=e=>{const{controlNetId:t,processorNode:{detect_resolution:n,image_resolution:r,scribble:o},isEnabled:s}=e,a=z(Cr),c=Ts(),d=f.useCallback(b=>{c(t,{detect_resolution:b})},[t,c]),p=f.useCallback(b=>{c(t,{image_resolution:b})},[t,c]),h=f.useCallback(b=>{c(t,{scribble:b.target.checked})},[t,c]),m=f.useCallback(()=>{c(t,{detect_resolution:Rk.detect_resolution})},[t,c]),v=f.useCallback(()=>{c(t,{image_resolution:Rk.image_resolution})},[t,c]);return i.jsxs(Ns,{children:[i.jsx(_t,{label:"Detect Resolution",value:n,onChange:d,handleReset:m,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:a||!s}),i.jsx(_t,{label:"Image Resolution",value:r,onChange:p,handleReset:v,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:a||!s}),i.jsx(Er,{label:"Scribble",isChecked:o,onChange:h,isDisabled:a||!s})]})},Nre=f.memo(Tre),Mk=ls.lineart_anime_image_processor.default,$re=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s}=n,a=Ts(),c=z(Cr),d=f.useCallback(v=>{a(t,{detect_resolution:v})},[t,a]),p=f.useCallback(v=>{a(t,{image_resolution:v})},[t,a]),h=f.useCallback(()=>{a(t,{detect_resolution:Mk.detect_resolution})},[t,a]),m=f.useCallback(()=>{a(t,{image_resolution:Mk.image_resolution})},[t,a]);return i.jsxs(Ns,{children:[i.jsx(_t,{label:"Detect Resolution",value:s,onChange:d,handleReset:h,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:c||!r}),i.jsx(_t,{label:"Image Resolution",value:o,onChange:p,handleReset:m,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:c||!r})]})},zre=f.memo($re),Dk=ls.lineart_image_processor.default,Lre=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s,coarse:a}=n,c=Ts(),d=z(Cr),p=f.useCallback(w=>{c(t,{detect_resolution:w})},[t,c]),h=f.useCallback(w=>{c(t,{image_resolution:w})},[t,c]),m=f.useCallback(()=>{c(t,{detect_resolution:Dk.detect_resolution})},[t,c]),v=f.useCallback(()=>{c(t,{image_resolution:Dk.image_resolution})},[t,c]),b=f.useCallback(w=>{c(t,{coarse:w.target.checked})},[t,c]);return i.jsxs(Ns,{children:[i.jsx(_t,{label:"Detect Resolution",value:s,onChange:p,handleReset:m,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:d||!r}),i.jsx(_t,{label:"Image Resolution",value:o,onChange:h,handleReset:v,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:d||!r}),i.jsx(Er,{label:"Coarse",isChecked:a,onChange:b,isDisabled:d||!r})]})},Bre=f.memo(Lre),Ak=ls.mediapipe_face_processor.default,Fre=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{max_faces:o,min_confidence:s}=n,a=Ts(),c=z(Cr),d=f.useCallback(v=>{a(t,{max_faces:v})},[t,a]),p=f.useCallback(v=>{a(t,{min_confidence:v})},[t,a]),h=f.useCallback(()=>{a(t,{max_faces:Ak.max_faces})},[t,a]),m=f.useCallback(()=>{a(t,{min_confidence:Ak.min_confidence})},[t,a]);return i.jsxs(Ns,{children:[i.jsx(_t,{label:"Max Faces",value:o,onChange:d,handleReset:h,withReset:!0,min:1,max:20,withInput:!0,withSliderMarks:!0,isDisabled:c||!r}),i.jsx(_t,{label:"Min Confidence",value:s,onChange:p,handleReset:m,withReset:!0,min:0,max:1,step:.01,withInput:!0,withSliderMarks:!0,isDisabled:c||!r})]})},Hre=f.memo(Fre),Tk=ls.midas_depth_image_processor.default,Wre=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{a_mult:o,bg_th:s}=n,a=Ts(),c=z(Cr),d=f.useCallback(v=>{a(t,{a_mult:v})},[t,a]),p=f.useCallback(v=>{a(t,{bg_th:v})},[t,a]),h=f.useCallback(()=>{a(t,{a_mult:Tk.a_mult})},[t,a]),m=f.useCallback(()=>{a(t,{bg_th:Tk.bg_th})},[t,a]);return i.jsxs(Ns,{children:[i.jsx(_t,{label:"a_mult",value:o,onChange:d,handleReset:h,withReset:!0,min:0,max:20,step:.01,withInput:!0,withSliderMarks:!0,isDisabled:c||!r}),i.jsx(_t,{label:"bg_th",value:s,onChange:p,handleReset:m,withReset:!0,min:0,max:20,step:.01,withInput:!0,withSliderMarks:!0,isDisabled:c||!r})]})},Vre=f.memo(Wre),wp=ls.mlsd_image_processor.default,Ure=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s,thr_d:a,thr_v:c}=n,d=Ts(),p=z(Cr),h=f.useCallback(k=>{d(t,{detect_resolution:k})},[t,d]),m=f.useCallback(k=>{d(t,{image_resolution:k})},[t,d]),v=f.useCallback(k=>{d(t,{thr_d:k})},[t,d]),b=f.useCallback(k=>{d(t,{thr_v:k})},[t,d]),w=f.useCallback(()=>{d(t,{detect_resolution:wp.detect_resolution})},[t,d]),y=f.useCallback(()=>{d(t,{image_resolution:wp.image_resolution})},[t,d]),S=f.useCallback(()=>{d(t,{thr_d:wp.thr_d})},[t,d]),_=f.useCallback(()=>{d(t,{thr_v:wp.thr_v})},[t,d]);return i.jsxs(Ns,{children:[i.jsx(_t,{label:"Detect Resolution",value:s,onChange:h,handleReset:w,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:p||!r}),i.jsx(_t,{label:"Image Resolution",value:o,onChange:m,handleReset:y,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:p||!r}),i.jsx(_t,{label:"W",value:a,onChange:v,handleReset:S,withReset:!0,min:0,max:1,step:.01,withInput:!0,withSliderMarks:!0,isDisabled:p||!r}),i.jsx(_t,{label:"H",value:c,onChange:b,handleReset:_,withReset:!0,min:0,max:1,step:.01,withInput:!0,withSliderMarks:!0,isDisabled:p||!r})]})},Gre=f.memo(Ure),Nk=ls.normalbae_image_processor.default,qre=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s}=n,a=Ts(),c=z(Cr),d=f.useCallback(v=>{a(t,{detect_resolution:v})},[t,a]),p=f.useCallback(v=>{a(t,{image_resolution:v})},[t,a]),h=f.useCallback(()=>{a(t,{detect_resolution:Nk.detect_resolution})},[t,a]),m=f.useCallback(()=>{a(t,{image_resolution:Nk.image_resolution})},[t,a]);return i.jsxs(Ns,{children:[i.jsx(_t,{label:"Detect Resolution",value:s,onChange:d,handleReset:h,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:c||!r}),i.jsx(_t,{label:"Image Resolution",value:o,onChange:p,handleReset:m,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:c||!r})]})},Kre=f.memo(qre),$k=ls.openpose_image_processor.default,Xre=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s,hand_and_face:a}=n,c=Ts(),d=z(Cr),p=f.useCallback(w=>{c(t,{detect_resolution:w})},[t,c]),h=f.useCallback(w=>{c(t,{image_resolution:w})},[t,c]),m=f.useCallback(()=>{c(t,{detect_resolution:$k.detect_resolution})},[t,c]),v=f.useCallback(()=>{c(t,{image_resolution:$k.image_resolution})},[t,c]),b=f.useCallback(w=>{c(t,{hand_and_face:w.target.checked})},[t,c]);return i.jsxs(Ns,{children:[i.jsx(_t,{label:"Detect Resolution",value:s,onChange:p,handleReset:m,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:d||!r}),i.jsx(_t,{label:"Image Resolution",value:o,onChange:h,handleReset:v,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:d||!r}),i.jsx(Er,{label:"Hand and Face",isChecked:a,onChange:b,isDisabled:d||!r})]})},Yre=f.memo(Xre),zk=ls.pidi_image_processor.default,Qre=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s,scribble:a,safe:c}=n,d=Ts(),p=z(Cr),h=f.useCallback(S=>{d(t,{detect_resolution:S})},[t,d]),m=f.useCallback(S=>{d(t,{image_resolution:S})},[t,d]),v=f.useCallback(()=>{d(t,{detect_resolution:zk.detect_resolution})},[t,d]),b=f.useCallback(()=>{d(t,{image_resolution:zk.image_resolution})},[t,d]),w=f.useCallback(S=>{d(t,{scribble:S.target.checked})},[t,d]),y=f.useCallback(S=>{d(t,{safe:S.target.checked})},[t,d]);return i.jsxs(Ns,{children:[i.jsx(_t,{label:"Detect Resolution",value:s,onChange:h,handleReset:v,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:p||!r}),i.jsx(_t,{label:"Image Resolution",value:o,onChange:m,handleReset:b,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:p||!r}),i.jsx(Er,{label:"Scribble",isChecked:a,onChange:w}),i.jsx(Er,{label:"Safe",isChecked:c,onChange:y,isDisabled:p||!r})]})},Jre=f.memo(Qre),Zre=e=>null,eoe=f.memo(Zre),toe=e=>{const{controlNetId:t}=e,n=f.useMemo(()=>fe(Ye,({controlNet:s})=>{const{isEnabled:a,processorNode:c}=s.controlNets[t];return{isEnabled:a,processorNode:c}},Ge),[t]),{isEnabled:r,processorNode:o}=z(n);return o.type==="canny_image_processor"?i.jsx(Mre,{controlNetId:t,processorNode:o,isEnabled:r}):o.type==="hed_image_processor"?i.jsx(Nre,{controlNetId:t,processorNode:o,isEnabled:r}):o.type==="lineart_image_processor"?i.jsx(Bre,{controlNetId:t,processorNode:o,isEnabled:r}):o.type==="content_shuffle_image_processor"?i.jsx(Are,{controlNetId:t,processorNode:o,isEnabled:r}):o.type==="lineart_anime_image_processor"?i.jsx(zre,{controlNetId:t,processorNode:o,isEnabled:r}):o.type==="mediapipe_face_processor"?i.jsx(Hre,{controlNetId:t,processorNode:o,isEnabled:r}):o.type==="midas_depth_image_processor"?i.jsx(Vre,{controlNetId:t,processorNode:o,isEnabled:r}):o.type==="mlsd_image_processor"?i.jsx(Gre,{controlNetId:t,processorNode:o,isEnabled:r}):o.type==="normalbae_image_processor"?i.jsx(Kre,{controlNetId:t,processorNode:o,isEnabled:r}):o.type==="openpose_image_processor"?i.jsx(Yre,{controlNetId:t,processorNode:o,isEnabled:r}):o.type==="pidi_image_processor"?i.jsx(Jre,{controlNetId:t,processorNode:o,isEnabled:r}):o.type==="zoe_depth_image_processor"?i.jsx(eoe,{controlNetId:t,processorNode:o,isEnabled:r}):null},noe=f.memo(toe),roe=e=>{const{controlNetId:t}=e,n=te(),r=f.useMemo(()=>fe(Ye,({controlNet:d})=>{const{isEnabled:p,shouldAutoConfig:h}=d.controlNets[t];return{isEnabled:p,shouldAutoConfig:h}},Ge),[t]),{isEnabled:o,shouldAutoConfig:s}=z(r),a=z(Cr),c=f.useCallback(()=>{n(fM({controlNetId:t}))},[t,n]);return i.jsx(Er,{label:"Auto configure processor","aria-label":"Auto configure processor",isChecked:s,onChange:c,isDisabled:a||!o})},ooe=f.memo(roe),Lk=e=>`${Math.round(e*100)}%`,soe=e=>{const{controlNetId:t}=e,n=te(),r=f.useMemo(()=>fe(Ye,({controlNet:d})=>{const{beginStepPct:p,endStepPct:h,isEnabled:m}=d.controlNets[t];return{beginStepPct:p,endStepPct:h,isEnabled:m}},Ge),[t]),{beginStepPct:o,endStepPct:s,isEnabled:a}=z(r),c=f.useCallback(d=>{n(pM({controlNetId:t,beginStepPct:d[0]})),n(hM({controlNetId:t,endStepPct:d[1]}))},[t,n]);return i.jsxs(go,{isDisabled:!a,children:[i.jsx(Lo,{children:"Begin / End Step Percentage"}),i.jsx(di,{w:"100%",gap:2,alignItems:"center",children:i.jsxs(F6,{"aria-label":["Begin Step %","End Step %"],value:[o,s],onChange:c,min:0,max:1,step:.01,minStepsBetweenThumbs:5,isDisabled:!a,children:[i.jsx(H6,{children:i.jsx(W6,{})}),i.jsx(wn,{label:Lk(o),placement:"top",hasArrow:!0,children:i.jsx(o1,{index:0})}),i.jsx(wn,{label:Lk(s),placement:"top",hasArrow:!0,children:i.jsx(o1,{index:1})}),i.jsx(Op,{value:0,sx:{insetInlineStart:"0 !important",insetInlineEnd:"unset !important"},children:"0%"}),i.jsx(Op,{value:.5,sx:{insetInlineStart:"50% !important",transform:"translateX(-50%)"},children:"50%"}),i.jsx(Op,{value:1,sx:{insetInlineStart:"unset !important",insetInlineEnd:"0 !important"},children:"100%"})]})})]})},aoe=f.memo(soe),ioe=[{label:"Balanced",value:"balanced"},{label:"Prompt",value:"more_prompt"},{label:"Control",value:"more_control"},{label:"Mega Control",value:"unbalanced"}];function loe(e){const{controlNetId:t}=e,n=te(),r=f.useMemo(()=>fe(Ye,({controlNet:c})=>{const{controlMode:d,isEnabled:p}=c.controlNets[t];return{controlMode:d,isEnabled:p}},Ge),[t]),{controlMode:o,isEnabled:s}=z(r),a=f.useCallback(c=>{n(mM({controlNetId:t,controlMode:c}))},[t,n]);return i.jsx(Xr,{disabled:!s,label:"Control Mode",data:ioe,value:String(o),onChange:a})}const coe=fe(hO,e=>cs(ls,n=>({value:n.type,label:n.label})).sort((n,r)=>n.value==="none"?-1:r.value==="none"?1:n.label.localeCompare(r.label)).filter(n=>!e.sd.disabledControlNetProcessors.includes(n.value)),Ge),uoe=e=>{const t=te(),{controlNetId:n}=e,r=f.useMemo(()=>fe(Ye,({controlNet:p})=>{const{isEnabled:h,processorNode:m}=p.controlNets[n];return{isEnabled:h,processorNode:m}},Ge),[n]),o=z(Cr),s=z(coe),{isEnabled:a,processorNode:c}=z(r),d=f.useCallback(p=>{t(gM({controlNetId:n,processorType:p}))},[n,t]);return i.jsx(ar,{label:"Processor",value:c.type??"canny_image_processor",data:s,onChange:d,disabled:o||!a})},doe=f.memo(uoe),foe=[{label:"Resize",value:"just_resize"},{label:"Crop",value:"crop_resize"},{label:"Fill",value:"fill_resize"}];function poe(e){const{controlNetId:t}=e,n=te(),r=f.useMemo(()=>fe(Ye,({controlNet:c})=>{const{resizeMode:d,isEnabled:p}=c.controlNets[t];return{resizeMode:d,isEnabled:p}},Ge),[t]),{resizeMode:o,isEnabled:s}=z(r),a=f.useCallback(c=>{n(vM({controlNetId:t,resizeMode:c}))},[t,n]);return i.jsx(Xr,{disabled:!s,label:"Resize Mode",data:foe,value:String(o),onChange:a})}const hoe=e=>{const{controlNetId:t}=e,n=te(),r=fe(Ye,({controlNet:m})=>{const{isEnabled:v,shouldAutoConfig:b}=m.controlNets[t];return{isEnabled:v,shouldAutoConfig:b}},Ge),{isEnabled:o,shouldAutoConfig:s}=z(r),[a,c]=gee(!1),d=f.useCallback(()=>{n(bM({controlNetId:t}))},[t,n]),p=f.useCallback(()=>{n(yM({sourceControlNetId:t,newControlNetId:ui()}))},[t,n]),h=f.useCallback(()=>{n(xM({controlNetId:t}))},[t,n]);return i.jsxs(F,{sx:{flexDir:"column",gap:3,p:3,borderRadius:"base",position:"relative",bg:"base.200",_dark:{bg:"base.850"}},children:[i.jsxs(F,{sx:{gap:2,alignItems:"center"},children:[i.jsx(Er,{tooltip:"Toggle this ControlNet","aria-label":"Toggle this ControlNet",isChecked:o,onChange:h}),i.jsx(Ee,{sx:{w:"full",minW:0,opacity:o?1:.5,pointerEvents:o?"auto":"none",transitionProperty:"common",transitionDuration:"0.1s"},children:i.jsx(jre,{controlNetId:t})}),i.jsx(Le,{size:"sm",tooltip:"Duplicate","aria-label":"Duplicate",onClick:p,icon:i.jsx(Vc,{})}),i.jsx(Le,{size:"sm",tooltip:"Delete","aria-label":"Delete",colorScheme:"error",onClick:d,icon:i.jsx(us,{})}),i.jsx(Le,{size:"sm",tooltip:a?"Hide Advanced":"Show Advanced","aria-label":a?"Hide Advanced":"Show Advanced",onClick:c,variant:"ghost",sx:{_hover:{bg:"none"}},icon:i.jsx(Sy,{sx:{boxSize:4,color:"base.700",transform:a?"rotate(0deg)":"rotate(180deg)",transitionProperty:"common",transitionDuration:"normal",_dark:{color:"base.300"}}})}),!s&&i.jsx(Ee,{sx:{position:"absolute",w:1.5,h:1.5,borderRadius:"full",top:4,insetInlineEnd:4,bg:"accent.700",_dark:{bg:"accent.400"}}})]}),i.jsxs(F,{sx:{w:"full",flexDirection:"column",gap:3},children:[i.jsxs(F,{sx:{gap:4,w:"full",alignItems:"center"},children:[i.jsxs(F,{sx:{flexDir:"column",gap:3,h:28,w:"full",paddingInlineStart:1,paddingInlineEnd:a?1:0,pb:2,justifyContent:"space-between"},children:[i.jsx(Ere,{controlNetId:t}),i.jsx(aoe,{controlNetId:t})]}),!a&&i.jsx(F,{sx:{alignItems:"center",justifyContent:"center",h:28,w:28,aspectRatio:"1/1"},children:i.jsx(Ek,{controlNetId:t,height:28})})]}),i.jsxs(F,{sx:{gap:2},children:[i.jsx(loe,{controlNetId:t}),i.jsx(poe,{controlNetId:t})]}),i.jsx(doe,{controlNetId:t})]}),a&&i.jsxs(i.Fragment,{children:[i.jsx(Ek,{controlNetId:t,height:"392px"}),i.jsx(ooe,{controlNetId:t}),i.jsx(noe,{controlNetId:t})]})]})},moe=f.memo(hoe),goe=fe(Ye,e=>{const{isEnabled:t}=e.controlNet;return{isEnabled:t}},Ge),voe=()=>{const{isEnabled:e}=z(goe),t=te(),n=f.useCallback(()=>{t(wM())},[t]);return i.jsx(Er,{label:"Enable ControlNet",isChecked:e,onChange:n,formControlProps:{width:"100%"}})},boe=fe([Ye],({controlNet:e})=>{const{controlNets:t,isEnabled:n}=e,r=SM(t),o=n&&r.length>0?`${r.length} Active`:void 0;return{controlNetsArray:cs(t),activeLabel:o}},Ge),yoe=()=>{const{controlNetsArray:e,activeLabel:t}=z(boe),n=ir("controlNet").isFeatureDisabled,r=te(),{firstModel:o}=ab(void 0,{selectFromResult:a=>{var d,p;return{firstModel:(p=a.data)==null?void 0:p.entities[(d=a.data)==null?void 0:d.ids[0]]}}}),s=f.useCallback(()=>{if(!o)return;const a=ui();r(CM({controlNetId:a})),r(e5({controlNetId:a,model:o}))},[r,o]);return n?null:i.jsx(Ro,{label:"ControlNet",activeLabel:t,children:i.jsxs(F,{sx:{flexDir:"column",gap:3},children:[i.jsxs(F,{gap:2,alignItems:"center",children:[i.jsx(F,{sx:{flexDirection:"column",w:"100%",gap:2,px:4,py:2,borderRadius:4,bg:"base.200",_dark:{bg:"base.850"}},children:i.jsx(voe,{})}),i.jsx(Le,{tooltip:"Add ControlNet","aria-label":"Add ControlNet",icon:i.jsx(gl,{}),isDisabled:!o,flexGrow:1,size:"md",onClick:s})]}),e.map((a,c)=>i.jsxs(f.Fragment,{children:[c>0&&i.jsx(Pi,{}),i.jsx(moe,{controlNetId:a.controlNetId})]},a.controlNetId))]})})},ox=f.memo(yoe),xoe=fe(Di,e=>{const{seamlessXAxis:t}=e;return{seamlessXAxis:t}},Ge),woe=()=>{const{t:e}=ye(),{seamlessXAxis:t}=z(xoe),n=te(),r=f.useCallback(o=>{n(kM(o.target.checked))},[n]);return i.jsx(Er,{label:e("parameters.seamlessXAxis"),"aria-label":e("parameters.seamlessXAxis"),isChecked:t,onChange:r})},Soe=f.memo(woe),Coe=fe(Di,e=>{const{seamlessYAxis:t}=e;return{seamlessYAxis:t}},Ge),koe=()=>{const{t:e}=ye(),{seamlessYAxis:t}=z(Coe),n=te(),r=f.useCallback(o=>{n(_M(o.target.checked))},[n]);return i.jsx(Er,{label:e("parameters.seamlessYAxis"),"aria-label":e("parameters.seamlessYAxis"),isChecked:t,onChange:r})},_oe=f.memo(koe),Poe=(e,t)=>{if(e&&t)return"X & Y";if(e)return"X";if(t)return"Y"},joe=fe(Di,e=>{const{seamlessXAxis:t,seamlessYAxis:n}=e;return{activeLabel:Poe(t,n)}},Ge),Ioe=()=>{const{t:e}=ye(),{activeLabel:t}=z(joe);return ir("seamless").isFeatureEnabled?i.jsx(Ro,{label:e("parameters.seamlessTiling"),activeLabel:t,children:i.jsxs(F,{sx:{gap:5},children:[i.jsx(Ee,{flexGrow:1,children:i.jsx(Soe,{})}),i.jsx(Ee,{flexGrow:1,children:i.jsx(_oe,{})})]})}):null},WO=f.memo(Ioe);function Eoe(){const e=z(o=>o.generation.horizontalSymmetrySteps),t=z(o=>o.generation.steps),n=te(),{t:r}=ye();return i.jsx(_t,{label:r("parameters.hSymmetryStep"),value:e,onChange:o=>n(iw(o)),min:0,max:t,step:1,withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:()=>n(iw(0))})}function Ooe(){const e=z(o=>o.generation.verticalSymmetrySteps),t=z(o=>o.generation.steps),n=te(),{t:r}=ye();return i.jsx(_t,{label:r("parameters.vSymmetryStep"),value:e,onChange:o=>n(lw(o)),min:0,max:t,step:1,withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:()=>n(lw(0))})}function Roe(){const e=z(n=>n.generation.shouldUseSymmetry),t=te();return i.jsx(Er,{label:"Enable Symmetry",isChecked:e,onChange:n=>t(PM(n.target.checked))})}const Moe=fe(Ye,e=>({activeLabel:e.generation.shouldUseSymmetry?"Enabled":void 0}),Ge),Doe=()=>{const{t:e}=ye(),{activeLabel:t}=z(Moe);return ir("symmetry").isFeatureEnabled?i.jsx(Ro,{label:e("parameters.symmetry"),activeLabel:t,children:i.jsxs(F,{sx:{gap:2,flexDirection:"column"},children:[i.jsx(Roe,{}),i.jsx(Eoe,{}),i.jsx(Ooe,{})]})}):null},sx=f.memo(Doe);function ax(){return i.jsxs(F,{sx:{flexDirection:"column",gap:2},children:[i.jsx(OO,{}),i.jsx(EO,{})]})}const Aoe=fe([Ye],({generation:e,hotkeys:t,config:n})=>{const{initial:r,min:o,sliderMax:s,inputMax:a,fineStep:c,coarseStep:d}=n.sd.img2imgStrength,{img2imgStrength:p}=e,h=t.shift?c:d;return{img2imgStrength:p,initial:r,min:o,sliderMax:s,inputMax:a,step:h}},Ge),Toe=()=>{const{img2imgStrength:e,initial:t,min:n,sliderMax:r,inputMax:o,step:s}=z(Aoe),a=te(),{t:c}=ye(),d=f.useCallback(h=>a(Bp(h)),[a]),p=f.useCallback(()=>{a(Bp(t))},[a,t]);return i.jsx(_t,{label:`${c("parameters.denoisingStrength")}`,step:s,min:n,max:r,onChange:d,handleReset:p,value:e,isInteger:!1,withInput:!0,withSliderMarks:!0,withReset:!0,sliderNumberInputProps:{max:o}})},VO=f.memo(Toe),Noe=fe([La,Di],(e,t)=>{const{shouldUseSliders:n}=e,{shouldRandomizeSeed:r}=t;return{shouldUseSliders:n,activeLabel:r?void 0:"Manual Seed"}},Ge),$oe=()=>{const{shouldUseSliders:e,activeLabel:t}=z(Noe);return i.jsx(Ro,{label:"General",activeLabel:t,defaultIsOpen:!0,children:i.jsxs(F,{sx:{flexDirection:"column",gap:3},children:[e?i.jsxs(i.Fragment,{children:[i.jsx(wi,{}),i.jsx(Ci,{}),i.jsx(xi,{}),i.jsx(Si,{}),i.jsx(Ee,{pt:2,children:i.jsx(ki,{})}),i.jsx(Oc,{})]}):i.jsxs(i.Fragment,{children:[i.jsxs(F,{gap:3,children:[i.jsx(wi,{}),i.jsx(Ci,{}),i.jsx(xi,{})]}),i.jsx(Si,{}),i.jsx(Ee,{pt:2,children:i.jsx(ki,{})}),i.jsx(Oc,{})]}),i.jsx(VO,{}),i.jsx(NO,{})]})})},zoe=f.memo($oe),UO=()=>i.jsxs(i.Fragment,{children:[i.jsx(ax,{}),i.jsx(qd,{}),i.jsx(zoe,{}),i.jsx(ox,{}),i.jsx(nx,{}),i.jsx(Ud,{}),i.jsx(tg,{}),i.jsx(sx,{}),i.jsx(WO,{}),i.jsx(rx,{})]}),Loe=()=>{const e=te(),t=f.useRef(null),n=z(o=>o.generation.model),r=f.useCallback(()=>{t.current&&t.current.setLayout([50,50])},[]);return i.jsxs(F,{sx:{gap:4,w:"full",h:"full"},children:[i.jsx(tx,{children:n&&n.base_model==="sdxl"?i.jsx($O,{}):i.jsx(UO,{})}),i.jsx(Ee,{sx:{w:"full",h:"full"},children:i.jsxs(Qy,{ref:t,autoSaveId:"imageTab.content",direction:"horizontal",style:{height:"100%",width:"100%"},children:[i.jsx(pd,{id:"imageTab.content.initImage",order:0,defaultSize:50,minSize:25,style:{position:"relative"},children:i.jsx(ute,{})}),i.jsx(LO,{onDoubleClick:r}),i.jsx(pd,{id:"imageTab.content.selectedImage",order:1,defaultSize:50,minSize:25,onResize:()=>{e(ko())},children:i.jsx(FO,{})})]})})]})},Boe=f.memo(Loe);var Foe=function e(t,n){if(t===n)return!0;if(t&&n&&typeof t=="object"&&typeof n=="object"){if(t.constructor!==n.constructor)return!1;var r,o,s;if(Array.isArray(t)){if(r=t.length,r!=n.length)return!1;for(o=r;o--!==0;)if(!e(t[o],n[o]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if(s=Object.keys(t),r=s.length,r!==Object.keys(n).length)return!1;for(o=r;o--!==0;)if(!Object.prototype.hasOwnProperty.call(n,s[o]))return!1;for(o=r;o--!==0;){var a=s[o];if(!e(t[a],n[a]))return!1}return!0}return t!==t&&n!==n};const Bk=vd(Foe);function z1(e){return e===null||typeof e!="object"?{}:Object.keys(e).reduce((t,n)=>{const r=e[n];return r!=null&&r!==!1&&(t[n]=r),t},{})}var Hoe=Object.defineProperty,Fk=Object.getOwnPropertySymbols,Woe=Object.prototype.hasOwnProperty,Voe=Object.prototype.propertyIsEnumerable,Hk=(e,t,n)=>t in e?Hoe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Uoe=(e,t)=>{for(var n in t||(t={}))Woe.call(t,n)&&Hk(e,n,t[n]);if(Fk)for(var n of Fk(t))Voe.call(t,n)&&Hk(e,n,t[n]);return e};function GO(e,t){if(t===null||typeof t!="object")return{};const n=Uoe({},t);return Object.keys(t).forEach(r=>{r.includes(`${String(e)}.`)&&delete n[r]}),n}const Goe="__MANTINE_FORM_INDEX__";function Wk(e,t){return t?typeof t=="boolean"?t:Array.isArray(t)?t.includes(e.replace(/[.][0-9]/g,`.${Goe}`)):!1:!1}function Vk(e,t,n){typeof n.value=="object"&&(n.value=Zl(n.value)),!n.enumerable||n.get||n.set||!n.configurable||!n.writable||t==="__proto__"?Object.defineProperty(e,t,n):e[t]=n.value}function Zl(e){if(typeof e!="object")return e;var t=0,n,r,o,s=Object.prototype.toString.call(e);if(s==="[object Object]"?o=Object.create(e.__proto__||null):s==="[object Array]"?o=Array(e.length):s==="[object Set]"?(o=new Set,e.forEach(function(a){o.add(Zl(a))})):s==="[object Map]"?(o=new Map,e.forEach(function(a,c){o.set(Zl(c),Zl(a))})):s==="[object Date]"?o=new Date(+e):s==="[object RegExp]"?o=new RegExp(e.source,e.flags):s==="[object DataView]"?o=new e.constructor(Zl(e.buffer)):s==="[object ArrayBuffer]"?o=e.slice(0):s.slice(-6)==="Array]"&&(o=new e.constructor(e)),o){for(r=Object.getOwnPropertySymbols(e);t0,errors:t}}function L1(e,t,n="",r={}){return typeof e!="object"||e===null?r:Object.keys(e).reduce((o,s)=>{const a=e[s],c=`${n===""?"":`${n}.`}${s}`,d=xa(c,t);let p=!1;return typeof a=="function"&&(o[c]=a(d,t,c)),typeof a=="object"&&Array.isArray(d)&&(p=!0,d.forEach((h,m)=>L1(a,t,`${c}.${m}`,o))),typeof a=="object"&&typeof d=="object"&&d!==null&&(p||L1(a,t,c,o)),o},r)}function B1(e,t){return Uk(typeof e=="function"?e(t):L1(e,t))}function Sp(e,t,n){if(typeof e!="string")return{hasError:!1,error:null};const r=B1(t,n),o=Object.keys(r.errors).find(s=>e.split(".").every((a,c)=>a===s.split(".")[c]));return{hasError:!!o,error:o?r.errors[o]:null}}function qoe(e,{from:t,to:n},r){const o=xa(e,r);if(!Array.isArray(o))return r;const s=[...o],a=o[t];return s.splice(t,1),s.splice(n,0,a),ig(e,s,r)}var Koe=Object.defineProperty,Gk=Object.getOwnPropertySymbols,Xoe=Object.prototype.hasOwnProperty,Yoe=Object.prototype.propertyIsEnumerable,qk=(e,t,n)=>t in e?Koe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Qoe=(e,t)=>{for(var n in t||(t={}))Xoe.call(t,n)&&qk(e,n,t[n]);if(Gk)for(var n of Gk(t))Yoe.call(t,n)&&qk(e,n,t[n]);return e};function Joe(e,{from:t,to:n},r){const o=`${e}.${t}`,s=`${e}.${n}`,a=Qoe({},r);return Object.keys(r).every(c=>{let d,p;if(c.startsWith(o)&&(d=c,p=c.replace(o,s)),c.startsWith(s)&&(d=c.replace(s,o),p=c),d&&p){const h=a[d],m=a[p];return m===void 0?delete a[d]:a[d]=m,h===void 0?delete a[p]:a[p]=h,!1}return!0}),a}function Zoe(e,t,n){const r=xa(e,n);return Array.isArray(r)?ig(e,r.filter((o,s)=>s!==t),n):n}var ese=Object.defineProperty,Kk=Object.getOwnPropertySymbols,tse=Object.prototype.hasOwnProperty,nse=Object.prototype.propertyIsEnumerable,Xk=(e,t,n)=>t in e?ese(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,rse=(e,t)=>{for(var n in t||(t={}))tse.call(t,n)&&Xk(e,n,t[n]);if(Kk)for(var n of Kk(t))nse.call(t,n)&&Xk(e,n,t[n]);return e};function Yk(e,t){const n=e.substring(t.length+1).split(".")[0];return parseInt(n,10)}function Qk(e,t,n,r){if(t===void 0)return n;const o=`${String(e)}`;let s=n;r===-1&&(s=GO(`${o}.${t}`,s));const a=rse({},s),c=new Set;return Object.entries(s).filter(([d])=>{if(!d.startsWith(`${o}.`))return!1;const p=Yk(d,o);return Number.isNaN(p)?!1:p>=t}).forEach(([d,p])=>{const h=Yk(d,o),m=d.replace(`${o}.${h}`,`${o}.${h+r}`);a[m]=p,c.add(m),c.has(d)||delete a[d]}),a}function ose(e,t,n,r){const o=xa(e,r);if(!Array.isArray(o))return r;const s=[...o];return s.splice(typeof n=="number"?n:s.length,0,t),ig(e,s,r)}function Jk(e,t){const n=Object.keys(e);if(typeof t=="string"){const r=n.filter(o=>o.startsWith(`${t}.`));return e[t]||r.some(o=>e[o])||!1}return n.some(r=>e[r])}function sse(e){return t=>{if(!t)e(t);else if(typeof t=="function")e(t);else if(typeof t=="object"&&"nativeEvent"in t){const{currentTarget:n}=t;n instanceof HTMLInputElement?n.type==="checkbox"?e(n.checked):e(n.value):(n instanceof HTMLTextAreaElement||n instanceof HTMLSelectElement)&&e(n.value)}else e(t)}}var ase=Object.defineProperty,ise=Object.defineProperties,lse=Object.getOwnPropertyDescriptors,Zk=Object.getOwnPropertySymbols,cse=Object.prototype.hasOwnProperty,use=Object.prototype.propertyIsEnumerable,e_=(e,t,n)=>t in e?ase(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,ti=(e,t)=>{for(var n in t||(t={}))cse.call(t,n)&&e_(e,n,t[n]);if(Zk)for(var n of Zk(t))use.call(t,n)&&e_(e,n,t[n]);return e},mv=(e,t)=>ise(e,lse(t));function wl({initialValues:e={},initialErrors:t={},initialDirty:n={},initialTouched:r={},clearInputErrorOnChange:o=!0,validateInputOnChange:s=!1,validateInputOnBlur:a=!1,transformValues:c=p=>p,validate:d}={}){const[p,h]=f.useState(r),[m,v]=f.useState(n),[b,w]=f.useState(e),[y,S]=f.useState(z1(t)),_=f.useRef(e),k=K=>{_.current=K},j=f.useCallback(()=>h({}),[]),I=K=>{const U=K?ti(ti({},b),K):b;k(U),v({})},E=f.useCallback(K=>S(U=>z1(typeof K=="function"?K(U):K)),[]),O=f.useCallback(()=>S({}),[]),R=f.useCallback(()=>{w(e),O(),k(e),v({}),j()},[]),M=f.useCallback((K,U)=>E(se=>mv(ti({},se),{[K]:U})),[]),A=f.useCallback(K=>E(U=>{if(typeof K!="string")return U;const se=ti({},U);return delete se[K],se}),[]),T=f.useCallback(K=>v(U=>{if(typeof K!="string")return U;const se=GO(K,U);return delete se[K],se}),[]),$=f.useCallback((K,U)=>{const se=Wk(K,s);T(K),h(re=>mv(ti({},re),{[K]:!0})),w(re=>{const oe=ig(K,U,re);if(se){const pe=Sp(K,d,oe);pe.hasError?M(K,pe.error):A(K)}return oe}),!se&&o&&M(K,null)},[]),Q=f.useCallback(K=>{w(U=>{const se=typeof K=="function"?K(U):K;return ti(ti({},U),se)}),o&&O()},[]),B=f.useCallback((K,U)=>{T(K),w(se=>qoe(K,U,se)),S(se=>Joe(K,U,se))},[]),V=f.useCallback((K,U)=>{T(K),w(se=>Zoe(K,U,se)),S(se=>Qk(K,U,se,-1))},[]),q=f.useCallback((K,U,se)=>{T(K),w(re=>ose(K,U,se,re)),S(re=>Qk(K,se,re,1))},[]),G=f.useCallback(()=>{const K=B1(d,b);return S(K.errors),K},[b,d]),D=f.useCallback(K=>{const U=Sp(K,d,b);return U.hasError?M(K,U.error):A(K),U},[b,d]),L=(K,{type:U="input",withError:se=!0,withFocus:re=!0}={})=>{const pe={onChange:sse(le=>$(K,le))};return se&&(pe.error=y[K]),U==="checkbox"?pe.checked=xa(K,b):pe.value=xa(K,b),re&&(pe.onFocus=()=>h(le=>mv(ti({},le),{[K]:!0})),pe.onBlur=()=>{if(Wk(K,a)){const le=Sp(K,d,b);le.hasError?M(K,le.error):A(K)}}),pe},W=(K,U)=>se=>{se==null||se.preventDefault();const re=G();re.hasErrors?U==null||U(re.errors,b,se):K==null||K(c(b),se)},Y=K=>c(K||b),ae=f.useCallback(K=>{K.preventDefault(),R()},[]),be=K=>{if(K){const se=xa(K,m);if(typeof se=="boolean")return se;const re=xa(K,b),oe=xa(K,_.current);return!Bk(re,oe)}return Object.keys(m).length>0?Jk(m):!Bk(b,_.current)},ie=f.useCallback(K=>Jk(p,K),[p]),X=f.useCallback(K=>K?!Sp(K,d,b).hasError:!B1(d,b).hasErrors,[b,d]);return{values:b,errors:y,setValues:Q,setErrors:E,setFieldValue:$,setFieldError:M,clearFieldError:A,clearErrors:O,reset:R,validate:G,validateField:D,reorderListItem:B,removeListItem:V,insertListItem:q,getInputProps:L,onSubmit:W,onReset:ae,isDirty:be,isTouched:ie,setTouched:h,setDirty:v,resetTouched:j,resetDirty:I,isValid:X,getTransformedValues:Y}}function br(e){const{...t}=e,{base50:n,base100:r,base200:o,base300:s,base800:a,base700:c,base900:d,accent500:p,accent300:h}=Fy(),{colorMode:m}=Ds();return i.jsx(zE,{styles:()=>({input:{color:Fe(d,r)(m),backgroundColor:Fe(n,d)(m),borderColor:Fe(o,a)(m),borderWidth:2,outline:"none",":focus":{borderColor:Fe(h,p)(m)}},label:{color:Fe(c,s)(m),fontWeight:"normal",marginBottom:4}}),...t})}const dse=[{value:"sd-1",label:Qn["sd-1"]},{value:"sd-2",label:Qn["sd-2"]},{value:"sdxl",label:Qn.sdxl},{value:"sdxl-refiner",label:Qn["sdxl-refiner"]}];function Xd(e){const{...t}=e,{t:n}=ye();return i.jsx(Xr,{label:n("modelManager.baseModel"),data:dse,...t})}function KO(e){const{data:t}=t5(),{...n}=e;return i.jsx(Xr,{label:"Config File",placeholder:"Select A Config File",data:t||[],...n})}const fse=[{value:"normal",label:"Normal"},{value:"inpaint",label:"Inpaint"},{value:"depth",label:"Depth"}];function lg(e){const{...t}=e,{t:n}=ye();return i.jsx(Xr,{label:n("modelManager.variant"),data:fse,...t})}function XO(e){const{t}=ye(),n=te(),{model_path:r}=e,o=wl({initialValues:{model_name:r?r.split("\\").splice(-1)[0].split(".")[0]:"",base_model:"sd-1",model_type:"main",path:r||"",description:"",model_format:"checkpoint",error:void 0,vae:"",variant:"normal",config:"configs\\stable-diffusion\\v1-inference.yaml"}}),[s]=n5(),[a,c]=f.useState(!1),d=p=>{s({body:p}).unwrap().then(h=>{n(On(Mn({title:`Model Added: ${p.model_name}`,status:"success"}))),o.reset(),r&&n(xd(null))}).catch(h=>{h&&n(On(Mn({title:"Model Add Failed",status:"error"})))})};return i.jsx("form",{onSubmit:o.onSubmit(p=>d(p)),style:{width:"100%"},children:i.jsxs(F,{flexDirection:"column",gap:2,children:[i.jsx(br,{label:"Model Name",required:!0,...o.getInputProps("model_name")}),i.jsx(Xd,{...o.getInputProps("base_model")}),i.jsx(br,{label:"Model Location",required:!0,...o.getInputProps("path")}),i.jsx(br,{label:"Description",...o.getInputProps("description")}),i.jsx(br,{label:"VAE Location",...o.getInputProps("vae")}),i.jsx(lg,{...o.getInputProps("variant")}),i.jsxs(F,{flexDirection:"column",width:"100%",gap:2,children:[a?i.jsx(br,{required:!0,label:"Custom Config File Location",...o.getInputProps("config")}):i.jsx(KO,{required:!0,width:"100%",...o.getInputProps("config")}),i.jsx(Gn,{isChecked:a,onChange:()=>c(!a),label:"Use Custom Config"}),i.jsx(Jt,{mt:2,type:"submit",children:t("modelManager.addModel")})]})]})})}function YO(e){const{t}=ye(),n=te(),{model_path:r}=e,[o]=n5(),s=wl({initialValues:{model_name:r?r.split("\\").splice(-1)[0]:"",base_model:"sd-1",model_type:"main",path:r||"",description:"",model_format:"diffusers",error:void 0,vae:"",variant:"normal"}}),a=c=>{o({body:c}).unwrap().then(d=>{n(On(Mn({title:`Model Added: ${c.model_name}`,status:"success"}))),s.reset(),r&&n(xd(null))}).catch(d=>{d&&n(On(Mn({title:"Model Add Failed",status:"error"})))})};return i.jsx("form",{onSubmit:s.onSubmit(c=>a(c)),style:{width:"100%"},children:i.jsxs(F,{flexDirection:"column",gap:2,children:[i.jsx(br,{required:!0,label:"Model Name",...s.getInputProps("model_name")}),i.jsx(Xd,{...s.getInputProps("base_model")}),i.jsx(br,{required:!0,label:"Model Location",placeholder:"Provide the path to a local folder where your Diffusers Model is stored",...s.getInputProps("path")}),i.jsx(br,{label:"Description",...s.getInputProps("description")}),i.jsx(br,{label:"VAE Location",...s.getInputProps("vae")}),i.jsx(lg,{...s.getInputProps("variant")}),i.jsx(Jt,{mt:2,type:"submit",children:t("modelManager.addModel")})]})})}const QO=[{label:"Diffusers",value:"diffusers"},{label:"Checkpoint / Safetensors",value:"checkpoint"}];function pse(){const[e,t]=f.useState("diffusers");return i.jsxs(F,{flexDirection:"column",gap:4,width:"100%",children:[i.jsx(Xr,{label:"Model Type",value:e,data:QO,onChange:n=>{n&&t(n)}}),i.jsxs(F,{sx:{p:4,borderRadius:4,bg:"base.300",_dark:{bg:"base.850"}},children:[e==="diffusers"&&i.jsx(YO,{}),e==="checkpoint"&&i.jsx(XO,{})]})]})}const hse=[{label:"None",value:"none"},{label:"v_prediction",value:"v_prediction"},{label:"epsilon",value:"epsilon"},{label:"sample",value:"sample"}];function mse(){const e=te(),{t}=ye(),n=z(c=>c.system.isProcessing),[r,{isLoading:o}]=r5(),s=wl({initialValues:{location:"",prediction_type:void 0}}),a=c=>{const d={location:c.location,prediction_type:c.prediction_type==="none"?void 0:c.prediction_type};r({body:d}).unwrap().then(p=>{e(On(Mn({title:"Model Added",status:"success"}))),s.reset()}).catch(p=>{p&&(console.log(p),e(On(Mn({title:`${p.data.detail} `,status:"error"}))))})};return i.jsx("form",{onSubmit:s.onSubmit(c=>a(c)),style:{width:"100%"},children:i.jsxs(F,{flexDirection:"column",width:"100%",gap:4,children:[i.jsx(br,{label:"Model Location",placeholder:"Provide a path to a local Diffusers model, local checkpoint / safetensors model a HuggingFace Repo ID, or a checkpoint/diffusers model URL.",w:"100%",...s.getInputProps("location")}),i.jsx(Xr,{label:"Prediction Type (for Stable Diffusion 2.x Models only)",data:hse,defaultValue:"none",...s.getInputProps("prediction_type")}),i.jsx(Jt,{type:"submit",isLoading:o,isDisabled:o||n,children:t("modelManager.addModel")})]})})}function gse(){const[e,t]=f.useState("simple");return i.jsxs(F,{flexDirection:"column",width:"100%",overflow:"scroll",maxHeight:window.innerHeight-250,gap:4,children:[i.jsxs(rr,{isAttached:!0,children:[i.jsx(Jt,{size:"sm",isChecked:e=="simple",onClick:()=>t("simple"),children:"Simple"}),i.jsx(Jt,{size:"sm",isChecked:e=="advanced",onClick:()=>t("advanced"),children:"Advanced"})]}),i.jsxs(F,{sx:{p:4,borderRadius:4,background:"base.200",_dark:{background:"base.800"}},children:[e==="simple"&&i.jsx(mse,{}),e==="advanced"&&i.jsx(pse,{})]})]})}const vse={display:"flex",flexDirection:"row",alignItems:"center",gap:10},bse=e=>{const{label:t="",labelPos:n="top",isDisabled:r=!1,isInvalid:o,formControlProps:s,...a}=e,c=te(),d=f.useCallback(h=>{h.shiftKey&&c(jo(!0))},[c]),p=f.useCallback(h=>{h.shiftKey||c(jo(!1))},[c]);return i.jsxs(go,{isInvalid:o,isDisabled:r,...s,style:n==="side"?vse:void 0,children:[t!==""&&i.jsx(Lo,{children:t}),i.jsx(Pd,{...a,onPaste:Zy,onKeyDown:d,onKeyUp:p})]})},Rc=f.memo(bse);function yse(e){const{...t}=e;return i.jsx(RI,{w:"100%",...t,children:e.children})}function xse(){const e=z(y=>y.modelmanager.searchFolder),[t,n]=f.useState(""),{data:r}=na(qi),{foundModels:o,alreadyInstalled:s,filteredModels:a}=o5({search_path:e||""},{selectFromResult:({data:y})=>{const S=d9(r==null?void 0:r.entities),_=cs(S,"path"),k=l9(y,_),j=g9(y,_);return{foundModels:y,alreadyInstalled:t_(j,t),filteredModels:t_(k,t)}}}),[c,{isLoading:d}]=r5(),p=te(),{t:h}=ye(),m=f.useCallback(y=>{const S=y.currentTarget.id.split("\\").splice(-1)[0];c({body:{location:y.currentTarget.id}}).unwrap().then(_=>{p(On(Mn({title:`Added Model: ${S}`,status:"success"})))}).catch(_=>{_&&p(On(Mn({title:"Failed To Add Model",status:"error"})))})},[p,c]),v=f.useCallback(y=>{n(y.target.value)},[]),b=({models:y,showActions:S=!0})=>y.map(_=>i.jsxs(F,{sx:{p:4,gap:4,alignItems:"center",borderRadius:4,bg:"base.200",_dark:{bg:"base.800"}},children:[i.jsxs(F,{w:"100%",sx:{flexDirection:"column",minW:"25%"},children:[i.jsx(qe,{sx:{fontWeight:600},children:_.split("\\").slice(-1)[0]}),i.jsx(qe,{sx:{fontSize:"sm",color:"base.600",_dark:{color:"base.400"}},children:_})]}),S?i.jsxs(F,{gap:2,children:[i.jsx(Jt,{id:_,onClick:m,isLoading:d,children:"Quick Add"}),i.jsx(Jt,{onClick:()=>p(xd(_)),isLoading:d,children:"Advanced"})]}):i.jsx(qe,{sx:{fontWeight:600,p:2,borderRadius:4,color:"accent.50",bg:"accent.400",_dark:{color:"accent.100",bg:"accent.600"}},children:"Installed"})]},_));return(()=>e?!o||o.length===0?i.jsx(F,{sx:{w:"full",h:"full",justifyContent:"center",alignItems:"center",height:96,userSelect:"none",bg:"base.200",_dark:{bg:"base.900"}},children:i.jsx(qe,{variant:"subtext",children:"No Models Found"})}):i.jsxs(F,{sx:{flexDirection:"column",gap:2,w:"100%",minW:"50%"},children:[i.jsx(Rc,{onChange:v,label:h("modelManager.search"),labelPos:"side"}),i.jsxs(F,{p:2,gap:2,children:[i.jsxs(qe,{sx:{fontWeight:600},children:["Models Found: ",o.length]}),i.jsxs(qe,{sx:{fontWeight:600,color:"accent.500",_dark:{color:"accent.200"}},children:["Not Installed: ",a.length]})]}),i.jsx(yse,{offsetScrollbars:!0,children:i.jsxs(F,{gap:2,flexDirection:"column",children:[b({models:a}),b({models:s,showActions:!1})]})})]}):null)()}const t_=(e,t)=>{const n=[];return so(e,r=>{if(!r)return null;r.includes(t)&&n.push(r)}),n};function wse(){const e=z(a=>a.modelmanager.advancedAddScanModel),[t,n]=f.useState("diffusers"),[r,o]=f.useState(!0);f.useEffect(()=>{e&&[".ckpt",".safetensors",".pth",".pt"].some(a=>e.endsWith(a))?n("checkpoint"):n("diffusers")},[e,n,r]);const s=te();return e?i.jsxs(Ee,{as:Ir.div,initial:{x:-100,opacity:0},animate:{x:0,opacity:1,transition:{duration:.2}},sx:{display:"flex",flexDirection:"column",minWidth:"40%",maxHeight:window.innerHeight-300,overflow:"scroll",p:4,gap:4,borderRadius:4,bg:"base.200",_dark:{bg:"base.800"}},children:[i.jsxs(F,{justifyContent:"space-between",alignItems:"center",children:[i.jsx(qe,{size:"xl",fontWeight:600,children:r||t==="checkpoint"?"Add Checkpoint Model":"Add Diffusers Model"}),i.jsx(Le,{icon:i.jsx(EW,{}),"aria-label":"Close Advanced",onClick:()=>s(xd(null)),size:"sm"})]}),i.jsx(Xr,{label:"Model Type",value:t,data:QO,onChange:a=>{a&&(n(a),o(a==="checkpoint"))}}),r?i.jsx(XO,{model_path:e},e):i.jsx(YO,{model_path:e},e)]}):null}function Sse(){const e=te(),{t}=ye(),n=z(c=>c.modelmanager.searchFolder),{refetch:r}=o5({search_path:n||""}),o=wl({initialValues:{folder:""}}),s=f.useCallback(c=>{e(cw(c.folder))},[e]),a=()=>{r()};return i.jsx("form",{onSubmit:o.onSubmit(c=>s(c)),style:{width:"100%"},children:i.jsxs(F,{sx:{w:"100%",gap:2,borderRadius:4,alignItems:"center"},children:[i.jsxs(F,{w:"100%",alignItems:"center",gap:4,minH:12,children:[i.jsx(qe,{sx:{fontSize:"sm",fontWeight:600,color:"base.700",minW:"max-content",_dark:{color:"base.300"}},children:"Folder"}),n?i.jsx(F,{sx:{w:"100%",p:2,px:4,bg:"base.300",borderRadius:4,fontSize:"sm",fontWeight:"bold",_dark:{bg:"base.700"}},children:n}):i.jsx(Rc,{w:"100%",size:"md",...o.getInputProps("folder")})]}),i.jsxs(F,{gap:2,children:[n?i.jsx(Le,{"aria-label":t("modelManager.scanAgain"),tooltip:t("modelManager.scanAgain"),icon:i.jsx(EP,{}),onClick:a,fontSize:18,size:"sm"}):i.jsx(Le,{"aria-label":t("modelManager.findModels"),tooltip:t("modelManager.findModels"),icon:i.jsx(_W,{}),fontSize:18,size:"sm",type:"submit"}),i.jsx(Le,{"aria-label":t("modelManager.clearCheckpointFolder"),tooltip:t("modelManager.clearCheckpointFolder"),icon:i.jsx(us,{}),size:"sm",onClick:()=>{e(cw(null)),e(xd(null))},isDisabled:!n,colorScheme:"red"})]})]})})}const Cse=f.memo(Sse);function kse(){return i.jsxs(F,{flexDirection:"column",w:"100%",gap:4,children:[i.jsx(Cse,{}),i.jsxs(F,{gap:4,children:[i.jsx(F,{sx:{maxHeight:window.innerHeight-300,overflow:"scroll",gap:4,w:"100%"},children:i.jsx(xse,{})}),i.jsx(wse,{})]})]})}function _se(){const[e,t]=f.useState("add"),{t:n}=ye();return i.jsxs(F,{flexDirection:"column",gap:4,children:[i.jsxs(rr,{isAttached:!0,children:[i.jsx(Jt,{onClick:()=>t("add"),isChecked:e=="add",size:"sm",width:"100%",children:n("modelManager.addModel")}),i.jsx(Jt,{onClick:()=>t("scan"),isChecked:e=="scan",size:"sm",width:"100%",children:n("modelManager.scanForModels")})]}),e=="add"&&i.jsx(gse,{}),e=="scan"&&i.jsx(kse,{})]})}const Pse=[{label:"Stable Diffusion 1",value:"sd-1"},{label:"Stable Diffusion 2",value:"sd-2"}];function jse(){const{t:e}=ye(),t=te(),{data:n}=na(qi),[r,{isLoading:o}]=jM(),[s,a]=f.useState("sd-1"),c=Cw(n==null?void 0:n.entities,(D,L)=>(D==null?void 0:D.model_format)==="diffusers"&&(D==null?void 0:D.base_model)==="sd-1"),d=Cw(n==null?void 0:n.entities,(D,L)=>(D==null?void 0:D.model_format)==="diffusers"&&(D==null?void 0:D.base_model)==="sd-2"),p=f.useMemo(()=>({"sd-1":c,"sd-2":d}),[c,d]),[h,m]=f.useState(Object.keys(p[s])[0]),[v,b]=f.useState(Object.keys(p[s])[1]),[w,y]=f.useState(null),[S,_]=f.useState(""),[k,j]=f.useState(.5),[I,E]=f.useState("weighted_sum"),[O,R]=f.useState("root"),[M,A]=f.useState(""),[T,$]=f.useState(!1),Q=Object.keys(p[s]).filter(D=>D!==v&&D!==w),B=Object.keys(p[s]).filter(D=>D!==h&&D!==w),V=Object.keys(p[s]).filter(D=>D!==h&&D!==v),q=D=>{a(D),m(null),b(null)},G=()=>{const D=[];let L=[h,v,w];L=L.filter(Y=>Y!==null),L.forEach(Y=>{Y&&D.push(Y==null?void 0:Y.split("/")[2])});const W={model_names:D,merged_model_name:S!==""?S:D.join("-"),alpha:k,interp:I,force:T,merge_dest_directory:O==="root"?void 0:M};r({base_model:s,body:W}).unwrap().then(Y=>{t(On(Mn({title:e("modelManager.modelsMerged"),status:"success"})))}).catch(Y=>{Y&&t(On(Mn({title:e("modelManager.modelsMergeFailed"),status:"error"})))})};return i.jsxs(F,{flexDirection:"column",rowGap:4,children:[i.jsxs(F,{sx:{flexDirection:"column",rowGap:1},children:[i.jsx(qe,{children:e("modelManager.modelMergeHeaderHelp1")}),i.jsx(qe,{fontSize:"sm",variant:"subtext",children:e("modelManager.modelMergeHeaderHelp2")})]}),i.jsxs(F,{columnGap:4,children:[i.jsx(Xr,{label:"Model Type",w:"100%",data:Pse,value:s,onChange:q}),i.jsx(ar,{label:e("modelManager.modelOne"),w:"100%",value:h,placeholder:e("modelManager.selectModel"),data:Q,onChange:D=>m(D)}),i.jsx(ar,{label:e("modelManager.modelTwo"),w:"100%",placeholder:e("modelManager.selectModel"),value:v,data:B,onChange:D=>b(D)}),i.jsx(ar,{label:e("modelManager.modelThree"),data:V,w:"100%",placeholder:e("modelManager.selectModel"),clearable:!0,onChange:D=>{D?(y(D),E("weighted_sum")):(y(null),E("add_difference"))}})]}),i.jsx(Rc,{label:e("modelManager.mergedModelName"),value:S,onChange:D=>_(D.target.value)}),i.jsxs(F,{sx:{flexDirection:"column",padding:4,borderRadius:"base",gap:4,bg:"base.200",_dark:{bg:"base.800"}},children:[i.jsx(_t,{label:e("modelManager.alpha"),min:.01,max:.99,step:.01,value:k,onChange:D=>j(D),withInput:!0,withReset:!0,handleReset:()=>j(.5),withSliderMarks:!0}),i.jsx(qe,{variant:"subtext",fontSize:"sm",children:e("modelManager.modelMergeAlphaHelp")})]}),i.jsxs(F,{sx:{padding:4,borderRadius:"base",gap:4,bg:"base.200",_dark:{bg:"base.800"}},children:[i.jsx(qe,{fontWeight:500,fontSize:"sm",variant:"subtext",children:e("modelManager.interpolationType")}),i.jsx(Zp,{value:I,onChange:D=>E(D),children:i.jsx(F,{columnGap:4,children:w===null?i.jsxs(i.Fragment,{children:[i.jsx(ya,{value:"weighted_sum",children:i.jsx(qe,{fontSize:"sm",children:e("modelManager.weightedSum")})}),i.jsx(ya,{value:"sigmoid",children:i.jsx(qe,{fontSize:"sm",children:e("modelManager.sigmoid")})}),i.jsx(ya,{value:"inv_sigmoid",children:i.jsx(qe,{fontSize:"sm",children:e("modelManager.inverseSigmoid")})})]}):i.jsx(ya,{value:"add_difference",children:i.jsx(wn,{label:e("modelManager.modelMergeInterpAddDifferenceHelp"),children:i.jsx(qe,{fontSize:"sm",children:e("modelManager.addDifference")})})})})})]}),i.jsxs(F,{sx:{flexDirection:"column",padding:4,borderRadius:"base",gap:4,bg:"base.200",_dark:{bg:"base.900"}},children:[i.jsxs(F,{columnGap:4,children:[i.jsx(qe,{fontWeight:"500",fontSize:"sm",variant:"subtext",children:e("modelManager.mergedModelSaveLocation")}),i.jsx(Zp,{value:O,onChange:D=>R(D),children:i.jsxs(F,{columnGap:4,children:[i.jsx(ya,{value:"root",children:i.jsx(qe,{fontSize:"sm",children:e("modelManager.invokeAIFolder")})}),i.jsx(ya,{value:"custom",children:i.jsx(qe,{fontSize:"sm",children:e("modelManager.custom")})})]})})]}),O==="custom"&&i.jsx(Rc,{label:e("modelManager.mergedModelCustomSaveLocation"),value:M,onChange:D=>A(D.target.value)})]}),i.jsx(Gn,{label:e("modelManager.ignoreMismatch"),isChecked:T,onChange:D=>$(D.target.checked),fontWeight:"500"}),i.jsx(Jt,{onClick:G,isLoading:o,isDisabled:h===null||v===null,children:e("modelManager.merge")})]})}const Ise=Ae((e,t)=>{const{t:n}=ye(),{acceptButtonText:r=n("common.accept"),acceptCallback:o,cancelButtonText:s=n("common.cancel"),cancelCallback:a,children:c,title:d,triggerComponent:p}=e,{isOpen:h,onOpen:m,onClose:v}=ss(),b=f.useRef(null),w=()=>{o(),v()},y=()=>{a&&a(),v()};return i.jsxs(i.Fragment,{children:[f.cloneElement(p,{onClick:m,ref:t}),i.jsx(Md,{isOpen:h,leastDestructiveRef:b,onClose:v,isCentered:!0,children:i.jsx(Da,{children:i.jsxs(Dd,{children:[i.jsx(Ma,{fontSize:"lg",fontWeight:"bold",children:d}),i.jsx(Aa,{children:c}),i.jsxs(Ra,{children:[i.jsx(Jt,{ref:b,onClick:y,children:s}),i.jsx(Jt,{colorScheme:"error",onClick:w,ml:3,children:r})]})]})})})]})}),ix=f.memo(Ise);function Ese(e){const{model:t}=e,n=te(),{t:r}=ye(),[o,{isLoading:s}]=IM(),[a,c]=f.useState("InvokeAIRoot"),[d,p]=f.useState("");f.useEffect(()=>{c("InvokeAIRoot")},[t]);const h=()=>{c("InvokeAIRoot")},m=()=>{const v={base_model:t.base_model,model_name:t.model_name,params:{convert_dest_directory:a==="Custom"?d:void 0}};if(a==="Custom"&&d===""){n(On(Mn({title:r("modelManager.noCustomLocationProvided"),status:"error"})));return}n(On(Mn({title:`${r("modelManager.convertingModelBegin")}: ${t.model_name}`,status:"success"}))),o(v).unwrap().then(b=>{n(On(Mn({title:`${r("modelManager.modelConverted")}: ${t.model_name}`,status:"success"})))}).catch(b=>{n(On(Mn({title:`${r("modelManager.modelConversionFailed")}: ${t.model_name}`,status:"error"})))})};return i.jsxs(ix,{title:`${r("modelManager.convert")} ${t.model_name}`,acceptCallback:m,cancelCallback:h,acceptButtonText:`${r("modelManager.convert")}`,triggerComponent:i.jsxs(Jt,{size:"sm","aria-label":r("modelManager.convertToDiffusers"),className:" modal-close-btn",isLoading:s,children:["🧨 ",r("modelManager.convertToDiffusers")]}),motionPreset:"slideInBottom",children:[i.jsxs(F,{flexDirection:"column",rowGap:4,children:[i.jsx(qe,{children:r("modelManager.convertToDiffusersHelpText1")}),i.jsxs(Mb,{children:[i.jsx(wa,{children:r("modelManager.convertToDiffusersHelpText2")}),i.jsx(wa,{children:r("modelManager.convertToDiffusersHelpText3")}),i.jsx(wa,{children:r("modelManager.convertToDiffusersHelpText4")}),i.jsx(wa,{children:r("modelManager.convertToDiffusersHelpText5")})]}),i.jsx(qe,{children:r("modelManager.convertToDiffusersHelpText6")})]}),i.jsxs(F,{flexDir:"column",gap:2,children:[i.jsxs(F,{marginTop:4,flexDir:"column",gap:2,children:[i.jsx(qe,{fontWeight:"600",children:r("modelManager.convertToDiffusersSaveLocation")}),i.jsx(Zp,{value:a,onChange:v=>c(v),children:i.jsxs(F,{gap:4,children:[i.jsx(ya,{value:"InvokeAIRoot",children:i.jsx(wn,{label:"Save converted model in the InvokeAI root folder",children:r("modelManager.invokeRoot")})}),i.jsx(ya,{value:"Custom",children:i.jsx(wn,{label:"Save converted model in a custom folder",children:r("modelManager.custom")})})]})})]}),a==="Custom"&&i.jsxs(F,{flexDirection:"column",rowGap:2,children:[i.jsx(qe,{fontWeight:"500",fontSize:"sm",variant:"subtext",children:r("modelManager.customSaveLocation")}),i.jsx(Rc,{value:d,onChange:v=>{p(v.target.value)},width:"full"})]})]})]})}function Ose(e){const t=z(Cr),{model:n}=e,[r,{isLoading:o}]=s5(),{data:s}=t5(),[a,c]=f.useState(!1);f.useEffect(()=>{s!=null&&s.includes(n.config)||c(!0)},[s,n.config]);const d=te(),{t:p}=ye(),h=wl({initialValues:{model_name:n.model_name?n.model_name:"",base_model:n.base_model,model_type:"main",path:n.path?n.path:"",description:n.description?n.description:"",model_format:"checkpoint",vae:n.vae?n.vae:"",config:n.config?n.config:"",variant:n.variant},validate:{path:v=>v.trim().length===0?"Must provide a path":null}}),m=f.useCallback(v=>{const b={base_model:n.base_model,model_name:n.model_name,body:v};r(b).unwrap().then(w=>{h.setValues(w),d(On(Mn({title:p("modelManager.modelUpdated"),status:"success"})))}).catch(w=>{h.reset(),d(On(Mn({title:p("modelManager.modelUpdateFailed"),status:"error"})))})},[h,d,n.base_model,n.model_name,p,r]);return i.jsxs(F,{flexDirection:"column",rowGap:4,width:"100%",children:[i.jsxs(F,{justifyContent:"space-between",alignItems:"center",children:[i.jsxs(F,{flexDirection:"column",children:[i.jsx(qe,{fontSize:"lg",fontWeight:"bold",children:n.model_name}),i.jsxs(qe,{fontSize:"sm",color:"base.400",children:[Qn[n.base_model]," Model"]})]}),[""].includes(n.base_model)?i.jsx(ml,{sx:{p:2,borderRadius:4,bg:"error.200",_dark:{bg:"error.400"}},children:"Conversion Not Supported"}):i.jsx(Ese,{model:n})]}),i.jsx(Pi,{}),i.jsx(F,{flexDirection:"column",maxHeight:window.innerHeight-270,overflowY:"scroll",children:i.jsx("form",{onSubmit:h.onSubmit(v=>m(v)),children:i.jsxs(F,{flexDirection:"column",overflowY:"scroll",gap:4,children:[i.jsx(br,{label:p("modelManager.name"),...h.getInputProps("model_name")}),i.jsx(br,{label:p("modelManager.description"),...h.getInputProps("description")}),i.jsx(Xd,{required:!0,...h.getInputProps("base_model")}),i.jsx(lg,{required:!0,...h.getInputProps("variant")}),i.jsx(br,{required:!0,label:p("modelManager.modelLocation"),...h.getInputProps("path")}),i.jsx(br,{label:p("modelManager.vaeLocation"),...h.getInputProps("vae")}),i.jsxs(F,{flexDirection:"column",gap:2,children:[a?i.jsx(br,{required:!0,label:p("modelManager.config"),...h.getInputProps("config")}):i.jsx(KO,{required:!0,...h.getInputProps("config")}),i.jsx(Gn,{isChecked:a,onChange:()=>c(!a),label:"Use Custom Config"})]}),i.jsx(Jt,{type:"submit",isDisabled:t||o,isLoading:o,children:p("modelManager.updateModel")})]})})})]})}function Rse(e){const t=z(Cr),{model:n}=e,[r,{isLoading:o}]=s5(),s=te(),{t:a}=ye(),c=wl({initialValues:{model_name:n.model_name?n.model_name:"",base_model:n.base_model,model_type:"main",path:n.path?n.path:"",description:n.description?n.description:"",model_format:"diffusers",vae:n.vae?n.vae:"",variant:n.variant},validate:{path:p=>p.trim().length===0?"Must provide a path":null}}),d=f.useCallback(p=>{const h={base_model:n.base_model,model_name:n.model_name,body:p};r(h).unwrap().then(m=>{c.setValues(m),s(On(Mn({title:a("modelManager.modelUpdated"),status:"success"})))}).catch(m=>{c.reset(),s(On(Mn({title:a("modelManager.modelUpdateFailed"),status:"error"})))})},[c,s,n.base_model,n.model_name,a,r]);return i.jsxs(F,{flexDirection:"column",rowGap:4,width:"100%",children:[i.jsxs(F,{flexDirection:"column",children:[i.jsx(qe,{fontSize:"lg",fontWeight:"bold",children:n.model_name}),i.jsxs(qe,{fontSize:"sm",color:"base.400",children:[Qn[n.base_model]," Model"]})]}),i.jsx(Pi,{}),i.jsx("form",{onSubmit:c.onSubmit(p=>d(p)),children:i.jsxs(F,{flexDirection:"column",overflowY:"scroll",gap:4,children:[i.jsx(br,{label:a("modelManager.name"),...c.getInputProps("model_name")}),i.jsx(br,{label:a("modelManager.description"),...c.getInputProps("description")}),i.jsx(Xd,{required:!0,...c.getInputProps("base_model")}),i.jsx(lg,{required:!0,...c.getInputProps("variant")}),i.jsx(br,{required:!0,label:a("modelManager.modelLocation"),...c.getInputProps("path")}),i.jsx(br,{label:a("modelManager.vaeLocation"),...c.getInputProps("vae")}),i.jsx(Jt,{type:"submit",isDisabled:t||o,isLoading:o,children:a("modelManager.updateModel")})]})})]})}function Mse(e){const t=z(Cr),{model:n}=e,[r,{isLoading:o}]=EM(),s=te(),{t:a}=ye(),c=wl({initialValues:{model_name:n.model_name?n.model_name:"",base_model:n.base_model,model_type:"lora",path:n.path?n.path:"",description:n.description?n.description:"",model_format:n.model_format},validate:{path:p=>p.trim().length===0?"Must provide a path":null}}),d=f.useCallback(p=>{const h={base_model:n.base_model,model_name:n.model_name,body:p};r(h).unwrap().then(m=>{c.setValues(m),s(On(Mn({title:a("modelManager.modelUpdated"),status:"success"})))}).catch(m=>{c.reset(),s(On(Mn({title:a("modelManager.modelUpdateFailed"),status:"error"})))})},[s,c,n.base_model,n.model_name,a,r]);return i.jsxs(F,{flexDirection:"column",rowGap:4,width:"100%",children:[i.jsxs(F,{flexDirection:"column",children:[i.jsx(qe,{fontSize:"lg",fontWeight:"bold",children:n.model_name}),i.jsxs(qe,{fontSize:"sm",color:"base.400",children:[Qn[n.base_model]," Model ⋅"," ",OM[n.model_format]," format"]})]}),i.jsx(Pi,{}),i.jsx("form",{onSubmit:c.onSubmit(p=>d(p)),children:i.jsxs(F,{flexDirection:"column",overflowY:"scroll",gap:4,children:[i.jsx(br,{label:a("modelManager.name"),...c.getInputProps("model_name")}),i.jsx(br,{label:a("modelManager.description"),...c.getInputProps("description")}),i.jsx(Xd,{...c.getInputProps("base_model")}),i.jsx(br,{label:a("modelManager.modelLocation"),...c.getInputProps("path")}),i.jsx(Jt,{type:"submit",isDisabled:t||o,isLoading:o,children:a("modelManager.updateModel")})]})})]})}function Su(e){const t=z(Cr),{t:n}=ye(),r=te(),[o]=RM(),[s]=MM(),{model:a,isSelected:c,setSelectedModelId:d}=e,p=f.useCallback(()=>{d(a.id)},[a.id,d]),h=f.useCallback(()=>{const m={main:o,lora:s}[a.model_type];m(a).unwrap().then(v=>{r(On(Mn({title:`${n("modelManager.modelDeleted")}: ${a.model_name}`,status:"success"})))}).catch(v=>{v&&r(On(Mn({title:`${n("modelManager.modelDeleteFailed")}: ${a.model_name}`,status:"error"})))}),d(void 0)},[o,s,a,d,r,n]);return i.jsxs(F,{sx:{gap:2,alignItems:"center",w:"full"},children:[i.jsx(F,{as:Jt,isChecked:c,sx:{justifyContent:"start",p:2,borderRadius:"base",w:"full",alignItems:"center",bg:c?"accent.400":"base.100",color:c?"base.50":"base.800",_hover:{bg:c?"accent.500":"base.300",color:c?"base.50":"base.800"},_dark:{color:c?"base.50":"base.100",bg:c?"accent.600":"base.850",_hover:{color:c?"base.50":"base.100",bg:c?"accent.550":"base.700"}}},onClick:p,children:i.jsxs(F,{gap:4,alignItems:"center",children:[i.jsx(ml,{minWidth:14,p:.5,fontSize:"sm",variant:"solid",children:DM[a.base_model]}),i.jsx(wn,{label:a.description,hasArrow:!0,placement:"bottom",children:i.jsx(qe,{sx:{fontWeight:500},children:a.model_name})})]})}),i.jsx(ix,{title:n("modelManager.deleteModel"),acceptCallback:h,acceptButtonText:n("modelManager.delete"),triggerComponent:i.jsx(Le,{icon:i.jsx(oU,{}),"aria-label":n("modelManager.deleteConfig"),isDisabled:t,colorScheme:"error"}),children:i.jsxs(F,{rowGap:4,flexDirection:"column",children:[i.jsx("p",{style:{fontWeight:"bold"},children:n("modelManager.deleteMsg1")}),i.jsx("p",{children:n("modelManager.deleteMsg2")})]})})]})}const Dse=e=>{const{selectedModelId:t,setSelectedModelId:n}=e,{t:r}=ye(),[o,s]=f.useState(""),[a,c]=f.useState("images"),{filteredDiffusersModels:d}=na(qi,{selectFromResult:({data:w})=>({filteredDiffusersModels:Cu(w,"main","diffusers",o)})}),{filteredCheckpointModels:p}=na(qi,{selectFromResult:({data:w})=>({filteredCheckpointModels:Cu(w,"main","checkpoint",o)})}),{filteredLoraModels:h}=cm(void 0,{selectFromResult:({data:w})=>({filteredLoraModels:Cu(w,"lora",void 0,o)})}),{filteredOnnxModels:m}=Fp(qi,{selectFromResult:({data:w})=>({filteredOnnxModels:Cu(w,"onnx","onnx",o)})}),{filteredOliveModels:v}=Fp(qi,{selectFromResult:({data:w})=>({filteredOliveModels:Cu(w,"onnx","olive",o)})}),b=f.useCallback(w=>{s(w.target.value)},[]);return i.jsx(F,{flexDirection:"column",rowGap:4,width:"50%",minWidth:"50%",children:i.jsxs(F,{flexDirection:"column",gap:4,paddingInlineEnd:4,children:[i.jsxs(rr,{isAttached:!0,children:[i.jsx(Jt,{onClick:()=>c("images"),isChecked:a==="images",size:"sm",children:r("modelManager.allModels")}),i.jsx(Jt,{size:"sm",onClick:()=>c("diffusers"),isChecked:a==="diffusers",children:r("modelManager.diffusersModels")}),i.jsx(Jt,{size:"sm",onClick:()=>c("onnx"),isChecked:a==="onnx",children:r("modelManager.onnxModels")}),i.jsx(Jt,{size:"sm",onClick:()=>c("olive"),isChecked:a==="olive",children:r("modelManager.oliveModels")}),i.jsx(Jt,{size:"sm",onClick:()=>c("lora"),isChecked:a==="lora",children:r("modelManager.loraModels")})]}),i.jsx(Rc,{onChange:b,label:r("modelManager.search"),labelPos:"side"}),i.jsxs(F,{flexDirection:"column",gap:4,maxHeight:window.innerHeight-280,overflow:"scroll",children:[["images","diffusers"].includes(a)&&d.length>0&&i.jsx(ku,{children:i.jsxs(F,{sx:{gap:2,flexDir:"column"},children:[i.jsx(qe,{variant:"subtext",fontSize:"sm",children:"Diffusers"}),d.map(w=>i.jsx(Su,{model:w,isSelected:t===w.id,setSelectedModelId:n},w.id))]})}),["images","checkpoint"].includes(a)&&p.length>0&&i.jsx(ku,{children:i.jsxs(F,{sx:{gap:2,flexDir:"column"},children:[i.jsx(qe,{variant:"subtext",fontSize:"sm",children:"Checkpoints"}),p.map(w=>i.jsx(Su,{model:w,isSelected:t===w.id,setSelectedModelId:n},w.id))]})}),["images","olive"].includes(a)&&v.length>0&&i.jsx(ku,{children:i.jsxs(F,{sx:{gap:2,flexDir:"column"},children:[i.jsx(qe,{variant:"subtext",fontSize:"sm",children:"Olives"}),v.map(w=>i.jsx(Su,{model:w,isSelected:t===w.id,setSelectedModelId:n},w.id))]})}),["images","onnx"].includes(a)&&m.length>0&&i.jsx(ku,{children:i.jsxs(F,{sx:{gap:2,flexDir:"column"},children:[i.jsx(qe,{variant:"subtext",fontSize:"sm",children:"Onnx"}),m.map(w=>i.jsx(Su,{model:w,isSelected:t===w.id,setSelectedModelId:n},w.id))]})}),["images","lora"].includes(a)&&h.length>0&&i.jsx(ku,{children:i.jsxs(F,{sx:{gap:2,flexDir:"column"},children:[i.jsx(qe,{variant:"subtext",fontSize:"sm",children:"LoRAs"}),h.map(w=>i.jsx(Su,{model:w,isSelected:t===w.id,setSelectedModelId:n},w.id))]})})]})]})})},Cu=(e,t,n,r)=>{const o=[];return so(e==null?void 0:e.entities,s=>{if(!s)return;const a=s.model_name.toLowerCase().includes(r.toLowerCase()),c=n===void 0||s.model_format===n,d=s.model_type===t;a&&c&&d&&o.push(s)}),o},ku=e=>i.jsx(F,{flexDirection:"column",gap:4,borderRadius:4,p:4,sx:{bg:"base.200",_dark:{bg:"base.800"}},children:e.children});function Ase(){const[e,t]=f.useState(),{mainModel:n}=na(qi,{selectFromResult:({data:s})=>({mainModel:e?s==null?void 0:s.entities[e]:void 0})}),{loraModel:r}=cm(void 0,{selectFromResult:({data:s})=>({loraModel:e?s==null?void 0:s.entities[e]:void 0})}),o=n||r;return i.jsxs(F,{sx:{gap:8,w:"full",h:"full"},children:[i.jsx(Dse,{selectedModelId:e,setSelectedModelId:t}),i.jsx(Tse,{model:o})]})}const Tse=e=>{const{model:t}=e;return(t==null?void 0:t.model_format)==="checkpoint"?i.jsx(Ose,{model:t},t.id):(t==null?void 0:t.model_format)==="diffusers"?i.jsx(Rse,{model:t},t.id):(t==null?void 0:t.model_type)==="lora"?i.jsx(Mse,{model:t},t.id):i.jsx(F,{sx:{w:"full",h:"full",justifyContent:"center",alignItems:"center",maxH:96,userSelect:"none"},children:i.jsx(qe,{variant:"subtext",children:"No Model Selected"})})};function Nse(){const{t:e}=ye();return i.jsxs(F,{sx:{w:"full",p:4,borderRadius:4,gap:4,justifyContent:"space-between",alignItems:"center",bg:"base.200",_dark:{bg:"base.800"}},children:[i.jsxs(F,{sx:{flexDirection:"column",gap:2},children:[i.jsx(qe,{sx:{fontWeight:600},children:e("modelManager.syncModels")}),i.jsx(qe,{fontSize:"sm",sx:{_dark:{color:"base.400"}},children:e("modelManager.syncModelsDesc")})]}),i.jsx(Kd,{})]})}function $se(){return i.jsx(F,{children:i.jsx(Nse,{})})}const n_=[{id:"modelManager",label:Bn.t("modelManager.modelManager"),content:i.jsx(Ase,{})},{id:"importModels",label:Bn.t("modelManager.importModels"),content:i.jsx(_se,{})},{id:"mergeModels",label:Bn.t("modelManager.mergeModels"),content:i.jsx(jse,{})},{id:"settings",label:Bn.t("modelManager.settings"),content:i.jsx($se,{})}],zse=()=>i.jsxs(Td,{isLazy:!0,variant:"line",layerStyle:"first",sx:{w:"full",h:"full",p:4,gap:4,borderRadius:"base"},children:[i.jsx(Nd,{children:n_.map(e=>i.jsx(Cc,{sx:{borderTopRadius:"base"},children:e.label},e.id))}),i.jsx(Mm,{sx:{w:"full",h:"full"},children:n_.map(e=>i.jsx(Rm,{sx:{w:"full",h:"full"},children:e.content},e.id))})]}),Lse=f.memo(zse);const Bse=e=>fe([t=>t.nodes],t=>{const n=t.invocationTemplates[e];if(n)return n},{memoizeOptions:{resultEqualityCheck:(t,n)=>t!==void 0&&n!==void 0&&t.type===n.type}}),Fse=(e,t)=>{const n={id:e,name:t.name,type:t.type};return t.inputRequirement!=="never"&&(t.type==="string"&&(n.value=t.default??""),t.type==="integer"&&(n.value=t.default??0),t.type==="float"&&(n.value=t.default??0),t.type==="boolean"&&(n.value=t.default??!1),t.type==="enum"&&(t.enumType==="number"&&(n.value=t.default??0),t.enumType==="string"&&(n.value=t.default??"")),t.type==="array"&&(n.value=t.default??1),t.type==="image"&&(n.value=void 0),t.type==="image_collection"&&(n.value=[]),t.type==="latents"&&(n.value=void 0),t.type==="conditioning"&&(n.value=void 0),t.type==="unet"&&(n.value=void 0),t.type==="clip"&&(n.value=void 0),t.type==="vae"&&(n.value=void 0),t.type==="control"&&(n.value=void 0),t.type==="model"&&(n.value=void 0),t.type==="refiner_model"&&(n.value=void 0),t.type==="vae_model"&&(n.value=void 0),t.type==="lora_model"&&(n.value=void 0),t.type==="controlnet_model"&&(n.value=void 0)),n},Hse=fe([e=>e.nodes],e=>e.invocationTemplates),lx="node-drag-handle",r_={dragHandle:`.${lx}`},Wse=()=>{const e=z(Hse),t=ib();return f.useCallback(n=>{if(n==="progress_image"){const{x:h,y:m}=t.project({x:window.innerWidth/2.5,y:window.innerHeight/8});return{...r_,id:"progress_image",type:"progress_image",position:{x:h,y:m},data:{}}}const r=e[n];if(r===void 0){console.error(`Unable to find template ${n}.`);return}const o=ui(),s=uw(r.inputs,(h,m,v)=>{const b=ui(),w=Fse(b,m);return h[v]=w,h},{}),a=uw(r.outputs,(h,m,v)=>{const w={id:ui(),name:v,type:m.type};return h[v]=w,h},{}),{x:c,y:d}=t.project({x:window.innerWidth/2.5,y:window.innerHeight/8});return{...r_,id:o,type:"invocation",position:{x:c,y:d},data:{id:o,type:n,inputs:s,outputs:a}}},[e,t])},Vse=e=>{const{nodeId:t,title:n,description:r}=e;return i.jsxs(F,{className:lx,sx:{borderTopRadius:"md",alignItems:"center",justifyContent:"space-between",px:2,py:1,bg:"base.100",_dark:{bg:"base.900"}},children:[i.jsx(wn,{label:t,children:i.jsx(Ys,{size:"xs",sx:{fontWeight:600,color:"base.900",_dark:{color:"base.200"}},children:n})}),i.jsx(wn,{label:r,placement:"top",hasArrow:!0,shouldWrapChildren:!0,children:i.jsx(no,{sx:{h:"min-content",color:"base.700",_dark:{color:"base.300"}},as:gW})})]})},JO=f.memo(Vse),ZO=()=>()=>!0,Use={position:"absolute",width:"1rem",height:"1rem",borderWidth:0},Gse={left:"-1rem"},qse={right:"-0.5rem"},Kse=e=>{const{field:t,isValidConnection:n,handleType:r,styles:o}=e,{name:s,type:a}=t;return i.jsx(wn,{label:a,placement:r==="target"?"start":"end",hasArrow:!0,openDelay:a5,children:i.jsx(AM,{type:r,id:s,isValidConnection:n,position:r==="target"?dw.Left:dw.Right,style:{backgroundColor:i5[a].colorCssVar,...o,...Use,...r==="target"?Gse:qse}})})},e8=f.memo(Kse),Xse=e=>i.jsx(yW,{}),Yse=f.memo(Xse),Qse=e=>{const{nodeId:t,field:n}=e,r=te(),o=s=>{r(As({nodeId:t,fieldName:n.name,value:s.target.checked}))};return i.jsx(Qb,{onChange:o,isChecked:n.value})},Jse=f.memo(Qse),Zse=e=>null,eae=f.memo(Zse);function cg(){return(cg=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}function F1(e){var t=f.useRef(e),n=f.useRef(function(r){t.current&&t.current(r)});return t.current=e,n.current}var Mc=function(e,t,n){return t===void 0&&(t=0),n===void 0&&(n=1),e>n?n:e0:S.buttons>0)&&o.current?s(o_(o.current,S,c.current)):y(!1)},w=function(){return y(!1)};function y(S){var _=d.current,k=H1(o.current),j=S?k.addEventListener:k.removeEventListener;j(_?"touchmove":"mousemove",b),j(_?"touchend":"mouseup",w)}return[function(S){var _=S.nativeEvent,k=o.current;if(k&&(s_(_),!function(I,E){return E&&!Xu(I)}(_,d.current)&&k)){if(Xu(_)){d.current=!0;var j=_.changedTouches||[];j.length&&(c.current=j[0].identifier)}k.focus(),s(o_(k,_,c.current)),y(!0)}},function(S){var _=S.which||S.keyCode;_<37||_>40||(S.preventDefault(),a({left:_===39?.05:_===37?-.05:0,top:_===40?.05:_===38?-.05:0}))},y]},[a,s]),h=p[0],m=p[1],v=p[2];return f.useEffect(function(){return v},[v]),H.createElement("div",cg({},r,{onTouchStart:h,onMouseDown:h,className:"react-colorful__interactive",ref:o,onKeyDown:m,tabIndex:0,role:"slider"}))}),ug=function(e){return e.filter(Boolean).join(" ")},ux=function(e){var t=e.color,n=e.left,r=e.top,o=r===void 0?.5:r,s=ug(["react-colorful__pointer",e.className]);return H.createElement("div",{className:s,style:{top:100*o+"%",left:100*n+"%"}},H.createElement("div",{className:"react-colorful__pointer-fill",style:{backgroundColor:t}}))},po=function(e,t,n){return t===void 0&&(t=0),n===void 0&&(n=Math.pow(10,t)),Math.round(n*e)/n},n8=function(e){var t=e.s,n=e.v,r=e.a,o=(200-t)*n/100;return{h:po(e.h),s:po(o>0&&o<200?t*n/100/(o<=100?o:200-o)*100:0),l:po(o/2),a:po(r,2)}},W1=function(e){var t=n8(e);return"hsl("+t.h+", "+t.s+"%, "+t.l+"%)"},gv=function(e){var t=n8(e);return"hsla("+t.h+", "+t.s+"%, "+t.l+"%, "+t.a+")"},tae=function(e){var t=e.h,n=e.s,r=e.v,o=e.a;t=t/360*6,n/=100,r/=100;var s=Math.floor(t),a=r*(1-n),c=r*(1-(t-s)*n),d=r*(1-(1-t+s)*n),p=s%6;return{r:po(255*[r,c,a,a,d,r][p]),g:po(255*[d,r,r,c,a,a][p]),b:po(255*[a,a,d,r,r,c][p]),a:po(o,2)}},nae=function(e){var t=e.r,n=e.g,r=e.b,o=e.a,s=Math.max(t,n,r),a=s-Math.min(t,n,r),c=a?s===t?(n-r)/a:s===n?2+(r-t)/a:4+(t-n)/a:0;return{h:po(60*(c<0?c+6:c)),s:po(s?a/s*100:0),v:po(s/255*100),a:o}},rae=H.memo(function(e){var t=e.hue,n=e.onChange,r=ug(["react-colorful__hue",e.className]);return H.createElement("div",{className:r},H.createElement(cx,{onMove:function(o){n({h:360*o.left})},onKey:function(o){n({h:Mc(t+360*o.left,0,360)})},"aria-label":"Hue","aria-valuenow":po(t),"aria-valuemax":"360","aria-valuemin":"0"},H.createElement(ux,{className:"react-colorful__hue-pointer",left:t/360,color:W1({h:t,s:100,v:100,a:1})})))}),oae=H.memo(function(e){var t=e.hsva,n=e.onChange,r={backgroundColor:W1({h:t.h,s:100,v:100,a:1})};return H.createElement("div",{className:"react-colorful__saturation",style:r},H.createElement(cx,{onMove:function(o){n({s:100*o.left,v:100-100*o.top})},onKey:function(o){n({s:Mc(t.s+100*o.left,0,100),v:Mc(t.v-100*o.top,0,100)})},"aria-label":"Color","aria-valuetext":"Saturation "+po(t.s)+"%, Brightness "+po(t.v)+"%"},H.createElement(ux,{className:"react-colorful__saturation-pointer",top:1-t.v/100,left:t.s/100,color:W1(t)})))}),r8=function(e,t){if(e===t)return!0;for(var n in e)if(e[n]!==t[n])return!1;return!0};function sae(e,t,n){var r=F1(n),o=f.useState(function(){return e.toHsva(t)}),s=o[0],a=o[1],c=f.useRef({color:t,hsva:s});f.useEffect(function(){if(!e.equal(t,c.current.color)){var p=e.toHsva(t);c.current={hsva:p,color:t},a(p)}},[t,e]),f.useEffect(function(){var p;r8(s,c.current.hsva)||e.equal(p=e.fromHsva(s),c.current.color)||(c.current={hsva:s,color:p},r(p))},[s,e,r]);var d=f.useCallback(function(p){a(function(h){return Object.assign({},h,p)})},[]);return[s,d]}var aae=typeof window<"u"?f.useLayoutEffect:f.useEffect,iae=function(){return typeof __webpack_nonce__<"u"?__webpack_nonce__:void 0},a_=new Map,lae=function(e){aae(function(){var t=e.current?e.current.ownerDocument:document;if(t!==void 0&&!a_.has(t)){var n=t.createElement("style");n.innerHTML=`.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:"";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url('data:image/svg+xml;charset=utf-8,')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}`,a_.set(t,n);var r=iae();r&&n.setAttribute("nonce",r),t.head.appendChild(n)}},[])},cae=function(e){var t=e.className,n=e.hsva,r=e.onChange,o={backgroundImage:"linear-gradient(90deg, "+gv(Object.assign({},n,{a:0}))+", "+gv(Object.assign({},n,{a:1}))+")"},s=ug(["react-colorful__alpha",t]),a=po(100*n.a);return H.createElement("div",{className:s},H.createElement("div",{className:"react-colorful__alpha-gradient",style:o}),H.createElement(cx,{onMove:function(c){r({a:c.left})},onKey:function(c){r({a:Mc(n.a+c.left)})},"aria-label":"Alpha","aria-valuetext":a+"%","aria-valuenow":a,"aria-valuemin":"0","aria-valuemax":"100"},H.createElement(ux,{className:"react-colorful__alpha-pointer",left:n.a,color:gv(n)})))},uae=function(e){var t=e.className,n=e.colorModel,r=e.color,o=r===void 0?n.defaultColor:r,s=e.onChange,a=t8(e,["className","colorModel","color","onChange"]),c=f.useRef(null);lae(c);var d=sae(n,o,s),p=d[0],h=d[1],m=ug(["react-colorful",t]);return H.createElement("div",cg({},a,{ref:c,className:m}),H.createElement(oae,{hsva:p,onChange:h}),H.createElement(rae,{hue:p.h,onChange:h}),H.createElement(cae,{hsva:p,onChange:h,className:"react-colorful__last-control"}))},dae={defaultColor:{r:0,g:0,b:0,a:1},toHsva:nae,fromHsva:tae,equal:r8},o8=function(e){return H.createElement(uae,cg({},e,{colorModel:dae}))};const fae=e=>{const{nodeId:t,field:n}=e,r=te(),o=s=>{r(As({nodeId:t,fieldName:n.name,value:s}))};return i.jsx(o8,{className:"nodrag",color:n.value,onChange:o})},pae=f.memo(fae),hae=e=>null,mae=f.memo(hae),gae=e=>null,vae=f.memo(gae),bae=e=>{const{nodeId:t,field:n}=e,r=n.value,o=te(),{data:s}=ab(),a=f.useMemo(()=>(s==null?void 0:s.entities[`${r==null?void 0:r.base_model}/controlnet/${r==null?void 0:r.model_name}`])??null,[r==null?void 0:r.base_model,r==null?void 0:r.model_name,s==null?void 0:s.entities]),c=f.useMemo(()=>{if(!s)return[];const p=[];return so(s.entities,(h,m)=>{h&&p.push({value:m,label:h.model_name,group:Qn[h.base_model]})}),p},[s]),d=f.useCallback(p=>{if(!p)return;const h=HO(p);h&&o(As({nodeId:t,fieldName:n.name,value:h}))},[o,n.name,t]);return i.jsx(Xr,{tooltip:a==null?void 0:a.description,label:(a==null?void 0:a.base_model)&&Qn[a==null?void 0:a.base_model],value:(a==null?void 0:a.id)??null,placeholder:"Pick one",error:!a,data:c,onChange:d})},yae=f.memo(bae),xae=e=>{const{nodeId:t,field:n,template:r}=e,o=te(),s=a=>{o(As({nodeId:t,fieldName:n.name,value:a.target.value}))};return i.jsx(M6,{onChange:s,value:n.value,children:r.options.map(a=>i.jsx("option",{children:a},a))})},wae=f.memo(xae),Sae=e=>{var c;const{nodeId:t,field:n}=e,r={id:`node-${t}-${n.name}`,actionType:"SET_MULTI_NODES_IMAGE",context:{nodeId:t,fieldName:n.name}},{isOver:o,setNodeRef:s,active:a}=Q1({id:`node_${t}`,data:r});return i.jsxs(F,{ref:s,sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center",position:"relative",minH:"10rem"},children:[(c=n.value)==null?void 0:c.map(({image_name:d})=>i.jsx(kae,{imageName:d},d)),Tp(r,a)&&i.jsx(ch,{isOver:o})]})},Cae=f.memo(Sae),kae=e=>{const{currentData:t}=os(e.imageName);return i.jsx(yi,{imageDTO:t,isDropDisabled:!0,isDragDisabled:!0})},_ae=e=>{var p;const{nodeId:t,field:n}=e,r=te(),{currentData:o}=os(((p=n.value)==null?void 0:p.image_name)??oo.skipToken),s=f.useCallback(()=>{r(As({nodeId:t,fieldName:n.name,value:void 0}))},[r,n.name,t]),a=f.useMemo(()=>{if(o)return{id:`node-${t}-${n.name}`,payloadType:"IMAGE_DTO",payload:{imageDTO:o}}},[n.name,o,t]),c=f.useMemo(()=>({id:`node-${t}-${n.name}`,actionType:"SET_NODES_IMAGE",context:{nodeId:t,fieldName:n.name}}),[n.name,t]),d=f.useMemo(()=>({type:"SET_NODES_IMAGE",nodeId:t,fieldName:n.name}),[t,n.name]);return i.jsx(F,{sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center"},children:i.jsx(yi,{imageDTO:o,droppableData:c,draggableData:a,onClickReset:s,postUploadAction:d})})},Pae=f.memo(_ae),jae=e=>i.jsx(XH,{}),i_=f.memo(jae),Iae=e=>null,Eae=f.memo(Iae),Oae=e=>{const t=lm("models"),[n,r,o]=e.split("/"),s=TM.safeParse({base_model:n,model_name:o});if(!s.success){t.error({loraModelId:e,errors:s.error.format()},"Failed to parse LoRA model id");return}return s.data},Rae=e=>{const{nodeId:t,field:n}=e,r=n.value,o=te(),{data:s}=cm(),a=f.useMemo(()=>{if(!s)return[];const p=[];return so(s.entities,(h,m)=>{h&&p.push({value:m,label:h.model_name,group:Qn[h.base_model]})}),p.sort((h,m)=>h.disabled&&!m.disabled?1:-1)},[s]),c=f.useMemo(()=>(s==null?void 0:s.entities[`${r==null?void 0:r.base_model}/lora/${r==null?void 0:r.model_name}`])??null,[s==null?void 0:s.entities,r==null?void 0:r.base_model,r==null?void 0:r.model_name]),d=f.useCallback(p=>{if(!p)return;const h=Oae(p);h&&o(As({nodeId:t,fieldName:n.name,value:h}))},[o,n.name,t]);return(s==null?void 0:s.ids.length)===0?i.jsx(F,{sx:{justifyContent:"center",p:2},children:i.jsx(qe,{sx:{fontSize:"sm",color:"base.500",_dark:"base.700"},children:"No LoRAs Loaded"})}):i.jsx(ar,{value:(c==null?void 0:c.id)??null,label:(c==null?void 0:c.base_model)&&Qn[c==null?void 0:c.base_model],placeholder:a.length>0?"Select a LoRA":"No LoRAs available",data:a,nothingFound:"No matching LoRAs",itemComponent:Ri,disabled:a.length===0,filter:(p,h)=>{var m;return((m=h.label)==null?void 0:m.toLowerCase().includes(p.toLowerCase().trim()))||h.value.toLowerCase().includes(p.toLowerCase().trim())},onChange:d})},Mae=f.memo(Rae),Dae=e=>{var v,b;const{nodeId:t,field:n}=e,r=te(),{t:o}=ye(),s=ir("syncModels").isFeatureEnabled,{data:a}=Fp(Yu),{data:c,isLoading:d}=na(Yu),p=f.useMemo(()=>{if(!c)return[];const w=[];return so(c.entities,(y,S)=>{y&&w.push({value:S,label:y.model_name,group:Qn[y.base_model]})}),a&&so(a.entities,(y,S)=>{y&&w.push({value:S,label:y.model_name,group:Qn[y.base_model]})}),w},[c,a]),h=f.useMemo(()=>{var w,y,S,_;return((c==null?void 0:c.entities[`${(w=n.value)==null?void 0:w.base_model}/main/${(y=n.value)==null?void 0:y.model_name}`])||(a==null?void 0:a.entities[`${(S=n.value)==null?void 0:S.base_model}/onnx/${(_=n.value)==null?void 0:_.model_name}`]))??null},[(v=n.value)==null?void 0:v.base_model,(b=n.value)==null?void 0:b.model_name,c==null?void 0:c.entities,a==null?void 0:a.entities]),m=f.useCallback(w=>{if(!w)return;const y=ag(w);y&&r(As({nodeId:t,fieldName:n.name,value:y}))},[r,n.name,t]);return d?i.jsx(ar,{label:o("modelManager.model"),placeholder:"Loading...",disabled:!0,data:[]}):i.jsxs(F,{w:"100%",alignItems:"center",gap:2,children:[i.jsx(ar,{tooltip:h==null?void 0:h.description,label:(h==null?void 0:h.base_model)&&Qn[h==null?void 0:h.base_model],value:h==null?void 0:h.id,placeholder:p.length>0?"Select a model":"No models available",data:p,error:p.length===0,disabled:p.length===0,onChange:m}),s&&i.jsx(Ee,{mt:7,children:i.jsx(Kd,{iconMode:!0})})]})},Aae=f.memo(Dae),Tae=e=>{const{nodeId:t,field:n}=e,r=te(),[o,s]=f.useState(String(n.value)),a=c=>{s(c),c.match(tm)||r(As({nodeId:t,fieldName:n.name,value:e.template.type==="integer"?Math.floor(Number(c)):Number(c)}))};return f.useEffect(()=>{!o.match(tm)&&n.value!==Number(o)&&s(String(n.value))},[n.value,o]),i.jsxs(ym,{onChange:a,value:o,step:e.template.type==="integer"?1:.1,precision:e.template.type==="integer"?0:3,children:[i.jsx(wm,{}),i.jsxs(xm,{children:[i.jsx(Cm,{}),i.jsx(Sm,{})]})]})},Nae=f.memo(Tae),$ae=e=>{const{nodeId:t,field:n}=e,r=te(),o=s=>{r(As({nodeId:t,fieldName:n.name,value:s.target.value}))};return["prompt","style"].includes(n.name.toLowerCase())?i.jsx(Jb,{onChange:o,value:n.value,rows:2}):i.jsx(Pd,{onChange:o,value:n.value})},zae=f.memo($ae),Lae=e=>null,Bae=f.memo(Lae),Fae=e=>null,Hae=f.memo(Fae),Wae=e=>{const{nodeId:t,field:n}=e,r=n.value,o=te(),{data:s}=X_(),a=f.useMemo(()=>{if(!s)return[];const p=[{value:"default",label:"Default",group:"Default"}];return so(s.entities,(h,m)=>{h&&p.push({value:m,label:h.model_name,group:Qn[h.base_model]})}),p.sort((h,m)=>h.disabled&&!m.disabled?1:-1)},[s]),c=f.useMemo(()=>(s==null?void 0:s.entities[`${r==null?void 0:r.base_model}/vae/${r==null?void 0:r.model_name}`])??null,[s==null?void 0:s.entities,r]),d=f.useCallback(p=>{if(!p)return;const h=AO(p);h&&o(As({nodeId:t,fieldName:n.name,value:h}))},[o,n.name,t]);return i.jsx(ar,{itemComponent:Ri,tooltip:c==null?void 0:c.description,label:(c==null?void 0:c.base_model)&&Qn[c==null?void 0:c.base_model],value:(c==null?void 0:c.id)??"default",placeholder:"Default",data:a,onChange:d,disabled:a.length===0,clearable:!0})},Vae=f.memo(Wae),Uae=e=>{var m,v;const{nodeId:t,field:n}=e,r=te(),{t:o}=ye(),s=ir("syncModels").isFeatureEnabled,{data:a,isLoading:c}=na(sb),d=f.useMemo(()=>{if(!a)return[];const b=[];return so(a.entities,(w,y)=>{w&&b.push({value:y,label:w.model_name,group:Qn[w.base_model]})}),b},[a]),p=f.useMemo(()=>{var b,w;return(a==null?void 0:a.entities[`${(b=n.value)==null?void 0:b.base_model}/main/${(w=n.value)==null?void 0:w.model_name}`])??null},[(m=n.value)==null?void 0:m.base_model,(v=n.value)==null?void 0:v.model_name,a==null?void 0:a.entities]),h=f.useCallback(b=>{if(!b)return;const w=ag(b);w&&r(As({nodeId:t,fieldName:n.name,value:w}))},[r,n.name,t]);return c?i.jsx(ar,{label:o("modelManager.model"),placeholder:"Loading...",disabled:!0,data:[]}):i.jsxs(F,{w:"100%",alignItems:"center",gap:2,children:[i.jsx(ar,{tooltip:p==null?void 0:p.description,label:(p==null?void 0:p.base_model)&&Qn[p==null?void 0:p.base_model],value:p==null?void 0:p.id,placeholder:d.length>0?"Select a model":"No models available",data:d,error:d.length===0,disabled:d.length===0,onChange:h}),s&&i.jsx(Ee,{mt:7,children:i.jsx(Kd,{iconMode:!0})})]})},Gae=f.memo(Uae),qae=e=>{const{nodeId:t,field:n,template:r}=e,{type:o}=n;return o==="string"&&r.type==="string"?i.jsx(zae,{nodeId:t,field:n,template:r}):o==="boolean"&&r.type==="boolean"?i.jsx(Jse,{nodeId:t,field:n,template:r}):o==="integer"&&r.type==="integer"||o==="float"&&r.type==="float"?i.jsx(Nae,{nodeId:t,field:n,template:r}):o==="enum"&&r.type==="enum"?i.jsx(wae,{nodeId:t,field:n,template:r}):o==="image"&&r.type==="image"?i.jsx(Pae,{nodeId:t,field:n,template:r}):o==="latents"&&r.type==="latents"?i.jsx(Eae,{nodeId:t,field:n,template:r}):o==="conditioning"&&r.type==="conditioning"?i.jsx(mae,{nodeId:t,field:n,template:r}):o==="unet"&&r.type==="unet"?i.jsx(Bae,{nodeId:t,field:n,template:r}):o==="clip"&&r.type==="clip"?i.jsx(eae,{nodeId:t,field:n,template:r}):o==="vae"&&r.type==="vae"?i.jsx(Hae,{nodeId:t,field:n,template:r}):o==="control"&&r.type==="control"?i.jsx(vae,{nodeId:t,field:n,template:r}):o==="model"&&r.type==="model"?i.jsx(Aae,{nodeId:t,field:n,template:r}):o==="refiner_model"&&r.type==="refiner_model"?i.jsx(Gae,{nodeId:t,field:n,template:r}):o==="vae_model"&&r.type==="vae_model"?i.jsx(Vae,{nodeId:t,field:n,template:r}):o==="lora_model"&&r.type==="lora_model"?i.jsx(Mae,{nodeId:t,field:n,template:r}):o==="controlnet_model"&&r.type==="controlnet_model"?i.jsx(yae,{nodeId:t,field:n,template:r}):o==="array"&&r.type==="array"?i.jsx(Yse,{nodeId:t,field:n,template:r}):o==="item"&&r.type==="item"?i.jsx(i_,{nodeId:t,field:n,template:r}):o==="color"&&r.type==="color"?i.jsx(pae,{nodeId:t,field:n,template:r}):o==="item"&&r.type==="item"?i.jsx(i_,{nodeId:t,field:n,template:r}):o==="image_collection"&&r.type==="image_collection"?i.jsx(Cae,{nodeId:t,field:n,template:r}):i.jsxs(Ee,{p:2,children:["Unknown field type: ",o]})},Kae=f.memo(qae);function Xae(e){const{nodeId:t,input:n,template:r,connected:o}=e,s=ZO();return i.jsx(Ee,{className:"nopan",position:"relative",borderColor:r?!o&&["always","connectionOnly"].includes(String(r==null?void 0:r.inputRequirement))&&n.value===void 0?"warning.400":void 0:"error.400",children:i.jsx(go,{isDisabled:r?o:!0,pl:2,children:r?i.jsxs(i.Fragment,{children:[i.jsxs(di,{justifyContent:"space-between",alignItems:"center",children:[i.jsx(di,{children:i.jsx(wn,{label:r==null?void 0:r.description,placement:"top",hasArrow:!0,shouldWrapChildren:!0,openDelay:a5,children:i.jsx(Lo,{children:r==null?void 0:r.title})})}),i.jsx(Kae,{nodeId:t,field:n,template:r})]}),!["never","directOnly"].includes((r==null?void 0:r.inputRequirement)??"")&&i.jsx(e8,{nodeId:t,field:r,isValidConnection:s,handleType:"target"})]}):i.jsx(di,{justifyContent:"space-between",alignItems:"center",children:i.jsxs(Lo,{children:["Unknown input: ",n.name]})})})})}const Yae=e=>{const{nodeId:t,template:n,inputs:r}=e,o=z(a=>a.nodes.edges);return f.useCallback(()=>{const a=[],c=cs(r);return c.forEach((d,p)=>{const h=n.inputs[d.name],m=!!o.filter(v=>v.target===t&&v.targetHandle===d.name).length;p{const{nodeId:t,template:n,outputs:r}=e,o=z(a=>a.nodes.edges);return f.useCallback(()=>{const a=[];return cs(r).forEach(d=>{const p=n.outputs[d.name],h=!!o.filter(m=>m.source===t&&m.sourceHandle===d.name).length;a.push(i.jsx(Jae,{nodeId:t,output:d,template:p,connected:h},d.id))}),i.jsx(F,{flexDir:"column",children:a})},[o,t,r,n.outputs])()},eie=f.memo(Zae),tie=e=>{const{...t}=e;return i.jsx(U9,{style:{position:"absolute",border:"none",background:"transparent",width:15,height:15,bottom:0,right:0},minWidth:l5,...t})},V1=f.memo(tie),U1=e=>{const[t,n]=Tc("shadows",["nodeSelectedOutline","dark-lg"]),r=z(o=>o.hotkeys.shift);return i.jsx(Ee,{className:r?lx:"nopan",sx:{position:"relative",borderRadius:"md",minWidth:l5,shadow:e.selected?`${t}, ${n}`:`${n}`},children:e.children})},s8=f.memo(e=>{const{id:t,data:n,selected:r}=e,{type:o,inputs:s,outputs:a}=n,c=f.useMemo(()=>Bse(o),[o]),d=z(c);return d?i.jsxs(U1,{selected:r,children:[i.jsx(JO,{nodeId:t,title:d.title,description:d.description}),i.jsxs(F,{className:"nopan",sx:{cursor:"auto",flexDirection:"column",borderBottomRadius:"md",py:2,bg:"base.150",_dark:{bg:"base.800"}},children:[i.jsx(eie,{nodeId:t,outputs:a,template:d}),i.jsx(Qae,{nodeId:t,inputs:s,template:d})]}),i.jsx(V1,{})]}):i.jsx(U1,{selected:r,children:i.jsxs(F,{className:"nopan",sx:{alignItems:"center",justifyContent:"center",cursor:"auto"},children:[i.jsx(no,{as:xP,sx:{boxSize:32,color:"base.600",_dark:{color:"base.400"}}}),i.jsx(V1,{})]})})});s8.displayName="InvocationComponent";const nie=e=>{const t=fw(a=>a.system.progressImage),n=fw(a=>a.nodes.progressNodeSize),r=NM(),{selected:o}=e,s=(a,c)=>{r($M(c))};return i.jsxs(U1,{selected:o,children:[i.jsx(JO,{title:"Progress Image",description:"Displays the progress image in the Node Editor"}),i.jsx(F,{sx:{flexDirection:"column",flexShrink:0,borderBottomRadius:"md",bg:"base.200",_dark:{bg:"base.800"},width:n.width-2,height:n.height-2,minW:250,minH:250,overflow:"hidden"},children:t?i.jsx(Nc,{src:t.dataURL,sx:{w:"full",h:"full",objectFit:"contain"}}):i.jsx(F,{sx:{minW:250,minH:250,width:n.width-2,height:n.height-2},children:i.jsx(mi,{})})}),i.jsx(V1,{onResize:s})]})},rie=f.memo(nie),oie=()=>{const{t:e}=ye(),{zoomIn:t,zoomOut:n,fitView:r}=ib(),o=te(),s=z(w=>w.nodes.shouldShowGraphOverlay),a=z(w=>w.nodes.shouldShowFieldTypeLegend),c=z(w=>w.nodes.shouldShowMinimapPanel),d=f.useCallback(()=>{t()},[t]),p=f.useCallback(()=>{n()},[n]),h=f.useCallback(()=>{r()},[r]),m=f.useCallback(()=>{o(zM(!s))},[s,o]),v=f.useCallback(()=>{o(LM(!a))},[a,o]),b=f.useCallback(()=>{o(BM(!c))},[c,o]);return i.jsxs(rr,{isAttached:!0,orientation:"vertical",children:[i.jsx(wn,{label:e("nodes.zoomInNodes"),children:i.jsx(Le,{"aria-label":"Zoom in ",onClick:d,icon:i.jsx(gl,{})})}),i.jsx(wn,{label:e("nodes.zoomOutNodes"),children:i.jsx(Le,{"aria-label":"Zoom out",onClick:p,icon:i.jsx(SW,{})})}),i.jsx(wn,{label:e("nodes.fitViewportNodes"),children:i.jsx(Le,{"aria-label":"Fit viewport",onClick:h,icon:i.jsx(cW,{})})}),i.jsx(wn,{label:e(s?"nodes.hideGraphNodes":"nodes.showGraphNodes"),children:i.jsx(Le,{"aria-label":"Toggle nodes graph overlay",isChecked:s,onClick:m,icon:i.jsx(ty,{})})}),i.jsx(wn,{label:e(a?"nodes.hideLegendNodes":"nodes.showLegendNodes"),children:i.jsx(Le,{"aria-label":"Toggle field type legend",isChecked:a,onClick:v,icon:i.jsx(vW,{})})}),i.jsx(wn,{label:e(c?"nodes.hideMinimapnodes":"nodes.showMinimapnodes"),children:i.jsx(Le,{"aria-label":"Toggle minimap",isChecked:c,onClick:b,icon:i.jsx(xW,{})})})]})},sie=f.memo(oie),aie=()=>i.jsx(md,{position:"bottom-left",children:i.jsx(sie,{})}),iie=f.memo(aie),lie=()=>{const e=Cp({background:"var(--invokeai-colors-base-200)"},{background:"var(--invokeai-colors-base-500)"}),t=z(o=>o.nodes.shouldShowMinimapPanel),n=Cp("var(--invokeai-colors-accent-300)","var(--invokeai-colors-accent-700)"),r=Cp("var(--invokeai-colors-blackAlpha-300)","var(--invokeai-colors-blackAlpha-600)");return i.jsx(i.Fragment,{children:t&&i.jsx(T9,{nodeStrokeWidth:3,pannable:!0,zoomable:!0,nodeBorderRadius:30,style:e,nodeColor:n,maskColor:r})})},cie=f.memo(lie),uie=()=>{const{t:e}=ye(),t=te(),{isOpen:n,onOpen:r,onClose:o}=ss(),s=f.useRef(null),a=z(d=>d.nodes.nodes),c=f.useCallback(()=>{t(FM()),t(On(Mn({title:e("toast.nodesCleared"),status:"success"}))),o()},[t,e,o]);return i.jsxs(i.Fragment,{children:[i.jsx(Le,{icon:i.jsx(us,{}),tooltip:e("nodes.clearGraph"),"aria-label":e("nodes.clearGraph"),onClick:r,isDisabled:a.length===0}),i.jsxs(Md,{isOpen:n,onClose:o,leastDestructiveRef:s,isCentered:!0,children:[i.jsx(Da,{}),i.jsxs(Dd,{children:[i.jsx(Ma,{fontSize:"lg",fontWeight:"bold",children:e("nodes.clearGraph")}),i.jsx(Aa,{children:i.jsx(qe,{children:e("nodes.clearGraphDesc")})}),i.jsxs(Ra,{children:[i.jsx(bc,{ref:s,onClick:o,children:e("common.cancel")}),i.jsx(bc,{colorScheme:"red",ml:3,onClick:c,children:e("common.accept")})]})]})]})]})},die=f.memo(uie);function fie(e){const t=["nodes","edges","viewport"];for(const s of t)if(!(s in e))return{isValid:!1,message:Bn.t("toast.nodesNotValidGraph")};if(!Array.isArray(e.nodes)||!Array.isArray(e.edges))return{isValid:!1,message:Bn.t("toast.nodesNotValidGraph")};const n=["data","type"],r=["invocation","progress_image"];if(e.nodes.length>0)for(const s of e.nodes)for(const a of n){if(!(a in s))return{isValid:!1,message:Bn.t("toast.nodesNotValidGraph")};if(a==="type"&&!r.includes(s[a]))return{isValid:!1,message:Bn.t("toast.nodesUnrecognizedTypes")}}const o=["source","sourceHandle","target","targetHandle"];if(e.edges.length>0){for(const s of e.edges)for(const a of o)if(!(a in s))return{isValid:!1,message:Bn.t("toast.nodesBrokenConnections")}}return{isValid:!0,message:Bn.t("toast.nodesLoaded")}}const pie=()=>{const{t:e}=ye(),t=te(),{fitView:n}=ib(),r=f.useRef(null),o=f.useCallback(s=>{var c;if(!s)return;const a=new FileReader;a.onload=async()=>{const d=a.result;try{const p=await JSON.parse(String(d)),{isValid:h,message:m}=fie(p);h?(t(HM(p.nodes)),t(WM(p.edges)),n(),t(On(Mn({title:m,status:"success"})))):t(On(Mn({title:m,status:"error"}))),a.abort()}catch(p){p&&t(On(Mn({title:e("toast.nodesNotValidJSON"),status:"error"})))}},a.readAsText(s),(c=r.current)==null||c.call(r)},[n,t,e]);return i.jsx(SE,{resetRef:r,accept:"application/json",onChange:o,children:s=>i.jsx(Le,{icon:i.jsx(zd,{}),tooltip:e("nodes.loadGraph"),"aria-label":e("nodes.loadGraph"),...s})})},hie=f.memo(pie);function mie(e){const{iconButton:t=!1,...n}=e,r=te(),o=z(Kn),s=Gd(),a=f.useCallback(()=>{r(yd("nodes"))},[r]),{t:c}=ye();return rt(["ctrl+enter","meta+enter"],a,{enabled:()=>s,preventDefault:!0,enableOnFormTags:["input","textarea","select"]},[s,o]),i.jsx(Ee,{style:{flexGrow:4},position:"relative",children:i.jsxs(Ee,{style:{position:"relative"},children:[!s&&i.jsx(Ee,{borderRadius:"base",style:{position:"absolute",bottom:"0",left:"0",right:"0",height:"100%",overflow:"clip"},children:i.jsx(IO,{})}),t?i.jsx(Le,{"aria-label":c("parameters.invoke"),type:"submit",icon:i.jsx(PP,{}),isDisabled:!s,onClick:a,flexGrow:1,w:"100%",tooltip:c("parameters.invoke"),tooltipProps:{placement:"bottom"},colorScheme:"accent",id:"invoke-button",_disabled:{background:"none",_hover:{background:"none"}},...n}):i.jsx(Jt,{"aria-label":c("parameters.invoke"),type:"submit",isDisabled:!s,onClick:a,flexGrow:1,w:"100%",colorScheme:"accent",id:"invoke-button",fontWeight:700,_disabled:{background:"none",_hover:{background:"none"}},...n,children:"Invoke"})]})})}function gie(){const{t:e}=ye(),t=te(),n=f.useCallback(()=>{t(VM())},[t]);return i.jsx(Le,{icon:i.jsx(IW,{}),tooltip:e("nodes.reloadSchema"),"aria-label":e("nodes.reloadSchema"),onClick:n})}const vie=()=>{const{t:e}=ye(),t=z(o=>o.nodes.editorInstance),n=z(o=>o.nodes.nodes),r=f.useCallback(()=>{if(t){const o=t.toObject();o.edges=cs(o.edges,c=>UM(c,["style"]));const s=new Blob([JSON.stringify(o)]),a=document.createElement("a");a.href=URL.createObjectURL(s),a.download="MyNodes.json",document.body.appendChild(a),a.click(),a.remove()}},[t]);return i.jsx(Le,{icon:i.jsx(Dm,{}),fontSize:18,tooltip:e("nodes.saveGraph"),"aria-label":e("nodes.saveGraph"),onClick:r,isDisabled:n.length===0})},bie=f.memo(vie),yie=()=>i.jsx(md,{position:"top-center",children:i.jsxs(di,{children:[i.jsx(mie,{}),i.jsx(ng,{}),i.jsx(gie,{}),i.jsx(bie,{}),i.jsx(hie,{}),i.jsx(die,{})]})}),xie=f.memo(yie),wie=fe([Ye],({nodes:e})=>{const t=cs(e.invocationTemplates,n=>({label:n.title,value:n.type,description:n.description}));return t.push({label:"Progress Image",value:"progress_image",description:"Displays the progress image in the Node Editor"}),{data:t}},Ge),Sie=()=>{const e=te(),{data:t}=z(wie),n=Wse(),r=Wc(),o=f.useCallback(a=>{const c=n(a);if(!c){r({status:"error",title:`Unknown Invocation type ${a}`});return}e(GM(c))},[e,n,r]),s=f.useCallback(a=>{a&&o(a)},[o]);return i.jsx(F,{sx:{gap:2,alignItems:"center"},children:i.jsx(ar,{selectOnBlur:!1,placeholder:"Add Node",value:null,data:t,maxDropdownHeight:400,nothingFound:"No matching nodes",itemComponent:a8,filter:(a,c)=>c.label.toLowerCase().includes(a.toLowerCase().trim())||c.value.toLowerCase().includes(a.toLowerCase().trim())||c.description.toLowerCase().includes(a.toLowerCase().trim()),onChange:s,sx:{width:"18rem"}})})},a8=f.forwardRef(({label:e,description:t,...n},r)=>i.jsx("div",{ref:r,...n,children:i.jsxs("div",{children:[i.jsx(qe,{fontWeight:600,children:e}),i.jsx(qe,{size:"xs",sx:{color:"base.600",_dark:{color:"base.500"}},children:t})]})}));a8.displayName="SelectItem";const Cie=()=>i.jsx(md,{position:"top-left",children:i.jsx(Sie,{})}),kie=f.memo(Cie),_ie=()=>i.jsx(F,{sx:{gap:2,flexDir:"column"},children:cs(i5,({title:e,description:t,color:n},r)=>i.jsx(wn,{label:t,children:i.jsx(ml,{colorScheme:n,sx:{userSelect:"none"},textAlign:"center",children:e})},r))}),Pie=f.memo(_ie),jie=()=>{const e=z(n=>n),t=qM(e);return i.jsx(Ee,{as:"pre",sx:{fontFamily:"monospace",position:"absolute",top:2,right:2,opacity:.7,p:2,maxHeight:500,maxWidth:500,overflowY:"scroll",borderRadius:"base",bg:"base.200",_dark:{bg:"base.800"}},children:JSON.stringify(t,null,2)})},Iie=f.memo(jie),Eie=()=>{const e=z(n=>n.nodes.shouldShowGraphOverlay),t=z(n=>n.nodes.shouldShowFieldTypeLegend);return i.jsxs(md,{position:"top-right",children:[t&&i.jsx(Pie,{}),e&&i.jsx(Iie,{})]})},Oie=f.memo(Eie),Rie={invocation:s8,progress_image:rie},Mie=()=>{const e=te(),t=z(p=>p.nodes.nodes),n=z(p=>p.nodes.edges),r=f.useCallback(p=>{e(KM(p))},[e]),o=f.useCallback(p=>{e(XM(p))},[e]),s=f.useCallback((p,h)=>{e(YM(h))},[e]),a=f.useCallback(p=>{e(QM(p))},[e]),c=f.useCallback(()=>{e(JM())},[e]),d=f.useCallback(p=>{e(ZM(p)),p&&p.fitView()},[e]);return i.jsxs(eD,{nodeTypes:Rie,nodes:t,edges:n,onNodesChange:r,onEdgesChange:o,onConnectStart:s,onConnect:a,onConnectEnd:c,onInit:d,defaultEdgeOptions:{style:{strokeWidth:2}},children:[i.jsx(kie,{}),i.jsx(xie,{}),i.jsx(Oie,{}),i.jsx(iie,{}),i.jsx(F9,{}),i.jsx(cie,{})]})},Die=()=>i.jsx(Ee,{layerStyle:"first",sx:{position:"relative",width:"full",height:"full",borderRadius:"base"},children:i.jsx(tD,{children:i.jsx(Mie,{})})}),Aie=f.memo(Die),Tie=()=>i.jsx(Aie,{}),Nie=f.memo(Tie),$ie=fe(Ye,({ui:e,generation:t})=>{const{shouldUseSliders:n}=e,{shouldRandomizeSeed:r}=t;return{shouldUseSliders:n,activeLabel:r?void 0:"Manual Seed"}},Ge),zie=()=>{const{shouldUseSliders:e,activeLabel:t}=z($ie);return i.jsx(Ro,{label:"General",activeLabel:t,defaultIsOpen:!0,children:i.jsx(F,{sx:{flexDirection:"column",gap:3},children:e?i.jsxs(i.Fragment,{children:[i.jsx(wi,{}),i.jsx(Ci,{}),i.jsx(xi,{}),i.jsx(Si,{}),i.jsx(Ee,{pt:2,children:i.jsx(ki,{})}),i.jsx(Oc,{})]}):i.jsxs(i.Fragment,{children:[i.jsxs(F,{gap:3,children:[i.jsx(wi,{}),i.jsx(Ci,{}),i.jsx(xi,{})]}),i.jsx(Si,{}),i.jsx(Ee,{pt:2,children:i.jsx(ki,{})}),i.jsx(Oc,{})]})})})},i8=f.memo(zie),l8=()=>i.jsxs(i.Fragment,{children:[i.jsx(MO,{}),i.jsx(qd,{}),i.jsx(i8,{}),i.jsx(DO,{}),i.jsx(Ud,{}),i.jsx(tg,{})]}),c8=()=>i.jsxs(i.Fragment,{children:[i.jsx(ax,{}),i.jsx(qd,{}),i.jsx(i8,{}),i.jsx(ox,{}),i.jsx(nx,{}),i.jsx(Ud,{}),i.jsx(tg,{}),i.jsx(sx,{}),i.jsx(WO,{}),i.jsx(rx,{})]}),Lie=()=>{const e=z(t=>t.generation.model);return i.jsxs(F,{sx:{gap:4,w:"full",h:"full"},children:[i.jsx(tx,{children:e&&e.base_model==="sdxl"?i.jsx(l8,{}):i.jsx(c8,{})}),i.jsx(FO,{})]})},Bie=f.memo(Lie);var G1={exports:{}};(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Konva=void 0;var n=pw;Object.defineProperty(t,"Konva",{enumerable:!0,get:function(){return n.Konva}});const r=pw;e.exports=r.Konva})(G1,G1.exports);var Fie=G1.exports;const hd=vd(Fie);var u8={exports:{}};/** - * @license React - * react-reconciler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Hie=function(t){var n={},r=f,o=kp,s=Object.assign;function a(l){for(var u="https://reactjs.org/docs/error-decoder.html?invariant="+l,g=1;gZ||C[N]!==P[Z]){var ue=` -`+C[N].replace(" at new "," at ");return l.displayName&&ue.includes("")&&(ue=ue.replace("",l.displayName)),ue}while(1<=N&&0<=Z);break}}}finally{qt=!1,Error.prepareStackTrace=g}return(l=l?l.displayName||l.name:"")?Nt(l):""}var en=Object.prototype.hasOwnProperty,Ut=[],Be=-1;function yt(l){return{current:l}}function Mt(l){0>Be||(l.current=Ut[Be],Ut[Be]=null,Be--)}function Wt(l,u){Be++,Ut[Be]=l.current,l.current=u}var jn={},Gt=yt(jn),un=yt(!1),sn=jn;function Or(l,u){var g=l.type.contextTypes;if(!g)return jn;var x=l.stateNode;if(x&&x.__reactInternalMemoizedUnmaskedChildContext===u)return x.__reactInternalMemoizedMaskedChildContext;var C={},P;for(P in g)C[P]=u[P];return x&&(l=l.stateNode,l.__reactInternalMemoizedUnmaskedChildContext=u,l.__reactInternalMemoizedMaskedChildContext=C),C}function Jn(l){return l=l.childContextTypes,l!=null}function It(){Mt(un),Mt(Gt)}function In(l,u,g){if(Gt.current!==jn)throw Error(a(168));Wt(Gt,u),Wt(un,g)}function Rn(l,u,g){var x=l.stateNode;if(u=u.childContextTypes,typeof x.getChildContext!="function")return g;x=x.getChildContext();for(var C in x)if(!(C in u))throw Error(a(108,M(l)||"Unknown",C));return s({},g,x)}function Zn(l){return l=(l=l.stateNode)&&l.__reactInternalMemoizedMergedChildContext||jn,sn=Gt.current,Wt(Gt,l),Wt(un,un.current),!0}function mr(l,u,g){var x=l.stateNode;if(!x)throw Error(a(169));g?(l=Rn(l,u,sn),x.__reactInternalMemoizedMergedChildContext=l,Mt(un),Mt(Gt),Wt(Gt,l)):Mt(un),Wt(un,g)}var Tn=Math.clz32?Math.clz32:Sn,Nn=Math.log,dn=Math.LN2;function Sn(l){return l>>>=0,l===0?32:31-(Nn(l)/dn|0)|0}var En=64,vn=4194304;function bn(l){switch(l&-l){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return l&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return l&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return l}}function Xe(l,u){var g=l.pendingLanes;if(g===0)return 0;var x=0,C=l.suspendedLanes,P=l.pingedLanes,N=g&268435455;if(N!==0){var Z=N&~C;Z!==0?x=bn(Z):(P&=N,P!==0&&(x=bn(P)))}else N=g&~C,N!==0?x=bn(N):P!==0&&(x=bn(P));if(x===0)return 0;if(u!==0&&u!==x&&!(u&C)&&(C=x&-x,P=u&-u,C>=P||C===16&&(P&4194240)!==0))return u;if(x&4&&(x|=g&16),u=l.entangledLanes,u!==0)for(l=l.entanglements,u&=x;0g;g++)u.push(l);return u}function mt(l,u,g){l.pendingLanes|=u,u!==536870912&&(l.suspendedLanes=0,l.pingedLanes=0),l=l.eventTimes,u=31-Tn(u),l[u]=g}function ot(l,u){var g=l.pendingLanes&~u;l.pendingLanes=u,l.suspendedLanes=0,l.pingedLanes=0,l.expiredLanes&=u,l.mutableReadLanes&=u,l.entangledLanes&=u,u=l.entanglements;var x=l.eventTimes;for(l=l.expirationTimes;0>=N,C-=N,Ao=1<<32-Tn(u)+C|g<Cn?(Br=Qt,Qt=null):Br=Qt.sibling;var kn=it(ce,Qt,ve[Cn],lt);if(kn===null){Qt===null&&(Qt=Br);break}l&&Qt&&kn.alternate===null&&u(ce,Qt),ne=P(kn,ne,Cn),rn===null?At=kn:rn.sibling=kn,rn=kn,Qt=Br}if(Cn===ve.length)return g(ce,Qt),er&&Ti(ce,Cn),At;if(Qt===null){for(;CnCn?(Br=Qt,Qt=null):Br=Qt.sibling;var Ja=it(ce,Qt,kn.value,lt);if(Ja===null){Qt===null&&(Qt=Br);break}l&&Qt&&Ja.alternate===null&&u(ce,Qt),ne=P(Ja,ne,Cn),rn===null?At=Ja:rn.sibling=Ja,rn=Ja,Qt=Br}if(kn.done)return g(ce,Qt),er&&Ti(ce,Cn),At;if(Qt===null){for(;!kn.done;Cn++,kn=ve.next())kn=Yt(ce,kn.value,lt),kn!==null&&(ne=P(kn,ne,Cn),rn===null?At=kn:rn.sibling=kn,rn=kn);return er&&Ti(ce,Cn),At}for(Qt=x(ce,Qt);!kn.done;Cn++,kn=ve.next())kn=Yn(Qt,ce,Cn,kn.value,lt),kn!==null&&(l&&kn.alternate!==null&&Qt.delete(kn.key===null?Cn:kn.key),ne=P(kn,ne,Cn),rn===null?At=kn:rn.sibling=kn,rn=kn);return l&&Qt.forEach(function(s7){return u(ce,s7)}),er&&Ti(ce,Cn),At}function va(ce,ne,ve,lt){if(typeof ve=="object"&&ve!==null&&ve.type===h&&ve.key===null&&(ve=ve.props.children),typeof ve=="object"&&ve!==null){switch(ve.$$typeof){case d:e:{for(var At=ve.key,rn=ne;rn!==null;){if(rn.key===At){if(At=ve.type,At===h){if(rn.tag===7){g(ce,rn.sibling),ne=C(rn,ve.props.children),ne.return=ce,ce=ne;break e}}else if(rn.elementType===At||typeof At=="object"&&At!==null&&At.$$typeof===j&&Ix(At)===rn.type){g(ce,rn.sibling),ne=C(rn,ve.props),ne.ref=Qc(ce,rn,ve),ne.return=ce,ce=ne;break e}g(ce,rn);break}else u(ce,rn);rn=rn.sibling}ve.type===h?(ne=Hi(ve.props.children,ce.mode,lt,ve.key),ne.return=ce,ce=ne):(lt=Rf(ve.type,ve.key,ve.props,null,ce.mode,lt),lt.ref=Qc(ce,ne,ve),lt.return=ce,ce=lt)}return N(ce);case p:e:{for(rn=ve.key;ne!==null;){if(ne.key===rn)if(ne.tag===4&&ne.stateNode.containerInfo===ve.containerInfo&&ne.stateNode.implementation===ve.implementation){g(ce,ne.sibling),ne=C(ne,ve.children||[]),ne.return=ce,ce=ne;break e}else{g(ce,ne);break}else u(ce,ne);ne=ne.sibling}ne=f0(ve,ce.mode,lt),ne.return=ce,ce=ne}return N(ce);case j:return rn=ve._init,va(ce,ne,rn(ve._payload),lt)}if(q(ve))return zn(ce,ne,ve,lt);if(O(ve))return wo(ce,ne,ve,lt);of(ce,ve)}return typeof ve=="string"&&ve!==""||typeof ve=="number"?(ve=""+ve,ne!==null&&ne.tag===6?(g(ce,ne.sibling),ne=C(ne,ve),ne.return=ce,ce=ne):(g(ce,ne),ne=d0(ve,ce.mode,lt),ne.return=ce,ce=ne),N(ce)):g(ce,ne)}return va}var Pl=Ex(!0),Ox=Ex(!1),Jc={},Uo=yt(Jc),Zc=yt(Jc),jl=yt(Jc);function Fs(l){if(l===Jc)throw Error(a(174));return l}function _g(l,u){Wt(jl,u),Wt(Zc,l),Wt(Uo,Jc),l=D(u),Mt(Uo),Wt(Uo,l)}function Il(){Mt(Uo),Mt(Zc),Mt(jl)}function Rx(l){var u=Fs(jl.current),g=Fs(Uo.current);u=L(g,l.type,u),g!==u&&(Wt(Zc,l),Wt(Uo,u))}function Pg(l){Zc.current===l&&(Mt(Uo),Mt(Zc))}var ur=yt(0);function sf(l){for(var u=l;u!==null;){if(u.tag===13){var g=u.memoizedState;if(g!==null&&(g=g.dehydrated,g===null||$r(g)||$s(g)))return u}else if(u.tag===19&&u.memoizedProps.revealOrder!==void 0){if(u.flags&128)return u}else if(u.child!==null){u.child.return=u,u=u.child;continue}if(u===l)break;for(;u.sibling===null;){if(u.return===null||u.return===l)return null;u=u.return}u.sibling.return=u.return,u=u.sibling}return null}var jg=[];function Ig(){for(var l=0;lg?g:4,l(!0);var x=Eg.transition;Eg.transition={};try{l(!1),u()}finally{Ie=g,Eg.transition=x}}function Xx(){return Go().memoizedState}function M8(l,u,g){var x=Xa(l);if(g={lane:x,action:g,hasEagerState:!1,eagerState:null,next:null},Yx(l))Qx(u,g);else if(g=xx(l,u,g,x),g!==null){var C=eo();qo(g,l,x,C),Jx(g,u,x)}}function D8(l,u,g){var x=Xa(l),C={lane:x,action:g,hasEagerState:!1,eagerState:null,next:null};if(Yx(l))Qx(u,C);else{var P=l.alternate;if(l.lanes===0&&(P===null||P.lanes===0)&&(P=u.lastRenderedReducer,P!==null))try{var N=u.lastRenderedState,Z=P(N,g);if(C.hasEagerState=!0,C.eagerState=Z,fn(Z,N)){var ue=u.interleaved;ue===null?(C.next=C,wg(u)):(C.next=ue.next,ue.next=C),u.interleaved=C;return}}catch{}finally{}g=xx(l,u,C,x),g!==null&&(C=eo(),qo(g,l,x,C),Jx(g,u,x))}}function Yx(l){var u=l.alternate;return l===dr||u!==null&&u===dr}function Qx(l,u){eu=lf=!0;var g=l.pending;g===null?u.next=u:(u.next=g.next,g.next=u),l.pending=u}function Jx(l,u,g){if(g&4194240){var x=u.lanes;x&=l.pendingLanes,g|=x,u.lanes=g,Re(l,g)}}var df={readContext:Vo,useCallback:Qr,useContext:Qr,useEffect:Qr,useImperativeHandle:Qr,useInsertionEffect:Qr,useLayoutEffect:Qr,useMemo:Qr,useReducer:Qr,useRef:Qr,useState:Qr,useDebugValue:Qr,useDeferredValue:Qr,useTransition:Qr,useMutableSource:Qr,useSyncExternalStore:Qr,useId:Qr,unstable_isNewReconciler:!1},A8={readContext:Vo,useCallback:function(l,u){return Hs().memoizedState=[l,u===void 0?null:u],l},useContext:Vo,useEffect:Fx,useImperativeHandle:function(l,u,g){return g=g!=null?g.concat([l]):null,cf(4194308,4,Vx.bind(null,u,l),g)},useLayoutEffect:function(l,u){return cf(4194308,4,l,u)},useInsertionEffect:function(l,u){return cf(4,2,l,u)},useMemo:function(l,u){var g=Hs();return u=u===void 0?null:u,l=l(),g.memoizedState=[l,u],l},useReducer:function(l,u,g){var x=Hs();return u=g!==void 0?g(u):u,x.memoizedState=x.baseState=u,l={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:l,lastRenderedState:u},x.queue=l,l=l.dispatch=M8.bind(null,dr,l),[x.memoizedState,l]},useRef:function(l){var u=Hs();return l={current:l},u.memoizedState=l},useState:Lx,useDebugValue:Ng,useDeferredValue:function(l){return Hs().memoizedState=l},useTransition:function(){var l=Lx(!1),u=l[0];return l=R8.bind(null,l[1]),Hs().memoizedState=l,[u,l]},useMutableSource:function(){},useSyncExternalStore:function(l,u,g){var x=dr,C=Hs();if(er){if(g===void 0)throw Error(a(407));g=g()}else{if(g=u(),Lr===null)throw Error(a(349));$i&30||Ax(x,u,g)}C.memoizedState=g;var P={value:g,getSnapshot:u};return C.queue=P,Fx(Nx.bind(null,x,P,l),[l]),x.flags|=2048,ru(9,Tx.bind(null,x,P,g,u),void 0,null),g},useId:function(){var l=Hs(),u=Lr.identifierPrefix;if(er){var g=Yr,x=Ao;g=(x&~(1<<32-Tn(x)-1)).toString(32)+g,u=":"+u+"R"+g,g=tu++,0r0&&(u.flags|=128,x=!0,au(C,!1),u.lanes=4194304)}else{if(!x)if(l=sf(P),l!==null){if(u.flags|=128,x=!0,l=l.updateQueue,l!==null&&(u.updateQueue=l,u.flags|=4),au(C,!0),C.tail===null&&C.tailMode==="hidden"&&!P.alternate&&!er)return Jr(u),null}else 2*Ve()-C.renderingStartTime>r0&&g!==1073741824&&(u.flags|=128,x=!0,au(C,!1),u.lanes=4194304);C.isBackwards?(P.sibling=u.child,u.child=P):(l=C.last,l!==null?l.sibling=P:u.child=P,C.last=P)}return C.tail!==null?(u=C.tail,C.rendering=u,C.tail=u.sibling,C.renderingStartTime=Ve(),u.sibling=null,l=ur.current,Wt(ur,x?l&1|2:l&1),u):(Jr(u),null);case 22:case 23:return l0(),g=u.memoizedState!==null,l!==null&&l.memoizedState!==null!==g&&(u.flags|=8192),g&&u.mode&1?No&1073741824&&(Jr(u),le&&u.subtreeFlags&6&&(u.flags|=8192)):Jr(u),null;case 24:return null;case 25:return null}throw Error(a(156,u.tag))}function H8(l,u){switch(pg(u),u.tag){case 1:return Jn(u.type)&&It(),l=u.flags,l&65536?(u.flags=l&-65537|128,u):null;case 3:return Il(),Mt(un),Mt(Gt),Ig(),l=u.flags,l&65536&&!(l&128)?(u.flags=l&-65537|128,u):null;case 5:return Pg(u),null;case 13:if(Mt(ur),l=u.memoizedState,l!==null&&l.dehydrated!==null){if(u.alternate===null)throw Error(a(340));Cl()}return l=u.flags,l&65536?(u.flags=l&-65537|128,u):null;case 19:return Mt(ur),null;case 4:return Il(),null;case 10:return yg(u.type._context),null;case 22:case 23:return l0(),null;case 24:return null;default:return null}}var gf=!1,Zr=!1,W8=typeof WeakSet=="function"?WeakSet:Set,pt=null;function Ol(l,u){var g=l.ref;if(g!==null)if(typeof g=="function")try{g(null)}catch(x){tr(l,u,x)}else g.current=null}function Ug(l,u,g){try{g()}catch(x){tr(l,u,x)}}var v2=!1;function V8(l,u){for(W(l.containerInfo),pt=u;pt!==null;)if(l=pt,u=l.child,(l.subtreeFlags&1028)!==0&&u!==null)u.return=l,pt=u;else for(;pt!==null;){l=pt;try{var g=l.alternate;if(l.flags&1024)switch(l.tag){case 0:case 11:case 15:break;case 1:if(g!==null){var x=g.memoizedProps,C=g.memoizedState,P=l.stateNode,N=P.getSnapshotBeforeUpdate(l.elementType===l.type?x:ms(l.type,x),C);P.__reactInternalSnapshotBeforeUpdate=N}break;case 3:le&&ln(l.stateNode.containerInfo);break;case 5:case 6:case 4:case 17:break;default:throw Error(a(163))}}catch(Z){tr(l,l.return,Z)}if(u=l.sibling,u!==null){u.return=l.return,pt=u;break}pt=l.return}return g=v2,v2=!1,g}function iu(l,u,g){var x=u.updateQueue;if(x=x!==null?x.lastEffect:null,x!==null){var C=x=x.next;do{if((C.tag&l)===l){var P=C.destroy;C.destroy=void 0,P!==void 0&&Ug(u,g,P)}C=C.next}while(C!==x)}}function vf(l,u){if(u=u.updateQueue,u=u!==null?u.lastEffect:null,u!==null){var g=u=u.next;do{if((g.tag&l)===l){var x=g.create;g.destroy=x()}g=g.next}while(g!==u)}}function Gg(l){var u=l.ref;if(u!==null){var g=l.stateNode;switch(l.tag){case 5:l=G(g);break;default:l=g}typeof u=="function"?u(l):u.current=l}}function b2(l){var u=l.alternate;u!==null&&(l.alternate=null,b2(u)),l.child=null,l.deletions=null,l.sibling=null,l.tag===5&&(u=l.stateNode,u!==null&&Oe(u)),l.stateNode=null,l.return=null,l.dependencies=null,l.memoizedProps=null,l.memoizedState=null,l.pendingProps=null,l.stateNode=null,l.updateQueue=null}function y2(l){return l.tag===5||l.tag===3||l.tag===4}function x2(l){e:for(;;){for(;l.sibling===null;){if(l.return===null||y2(l.return))return null;l=l.return}for(l.sibling.return=l.return,l=l.sibling;l.tag!==5&&l.tag!==6&&l.tag!==18;){if(l.flags&2||l.child===null||l.tag===4)continue e;l.child.return=l,l=l.child}if(!(l.flags&2))return l.stateNode}}function qg(l,u,g){var x=l.tag;if(x===5||x===6)l=l.stateNode,u?Pn(g,l,u):ht(g,l);else if(x!==4&&(l=l.child,l!==null))for(qg(l,u,g),l=l.sibling;l!==null;)qg(l,u,g),l=l.sibling}function Kg(l,u,g){var x=l.tag;if(x===5||x===6)l=l.stateNode,u?Ke(g,l,u):we(g,l);else if(x!==4&&(l=l.child,l!==null))for(Kg(l,u,g),l=l.sibling;l!==null;)Kg(l,u,g),l=l.sibling}var Gr=null,gs=!1;function Vs(l,u,g){for(g=g.child;g!==null;)Xg(l,u,g),g=g.sibling}function Xg(l,u,g){if(gn&&typeof gn.onCommitFiberUnmount=="function")try{gn.onCommitFiberUnmount(Xn,g)}catch{}switch(g.tag){case 5:Zr||Ol(g,u);case 6:if(le){var x=Gr,C=gs;Gr=null,Vs(l,u,g),Gr=x,gs=C,Gr!==null&&(gs?Ze(Gr,g.stateNode):Pe(Gr,g.stateNode))}else Vs(l,u,g);break;case 18:le&&Gr!==null&&(gs?He(Gr,g.stateNode):xt(Gr,g.stateNode));break;case 4:le?(x=Gr,C=gs,Gr=g.stateNode.containerInfo,gs=!0,Vs(l,u,g),Gr=x,gs=C):(ge&&(x=g.stateNode.containerInfo,C=yr(x),Wn(x,C)),Vs(l,u,g));break;case 0:case 11:case 14:case 15:if(!Zr&&(x=g.updateQueue,x!==null&&(x=x.lastEffect,x!==null))){C=x=x.next;do{var P=C,N=P.destroy;P=P.tag,N!==void 0&&(P&2||P&4)&&Ug(g,u,N),C=C.next}while(C!==x)}Vs(l,u,g);break;case 1:if(!Zr&&(Ol(g,u),x=g.stateNode,typeof x.componentWillUnmount=="function"))try{x.props=g.memoizedProps,x.state=g.memoizedState,x.componentWillUnmount()}catch(Z){tr(g,u,Z)}Vs(l,u,g);break;case 21:Vs(l,u,g);break;case 22:g.mode&1?(Zr=(x=Zr)||g.memoizedState!==null,Vs(l,u,g),Zr=x):Vs(l,u,g);break;default:Vs(l,u,g)}}function w2(l){var u=l.updateQueue;if(u!==null){l.updateQueue=null;var g=l.stateNode;g===null&&(g=l.stateNode=new W8),u.forEach(function(x){var C=Z8.bind(null,l,x);g.has(x)||(g.add(x),x.then(C,C))})}}function vs(l,u){var g=u.deletions;if(g!==null)for(var x=0;x";case yf:return":has("+(Jg(l)||"")+")";case xf:return'[role="'+l.value+'"]';case Sf:return'"'+l.value+'"';case wf:return'[data-testname="'+l.value+'"]';default:throw Error(a(365))}}function j2(l,u){var g=[];l=[l,0];for(var x=0;xC&&(C=N),x&=~P}if(x=C,x=Ve()-x,x=(120>x?120:480>x?480:1080>x?1080:1920>x?1920:3e3>x?3e3:4320>x?4320:1960*G8(x/1960))-x,10l?16:l,Ka===null)var x=!1;else{if(l=Ka,Ka=null,jf=0,an&6)throw Error(a(331));var C=an;for(an|=4,pt=l.current;pt!==null;){var P=pt,N=P.child;if(pt.flags&16){var Z=P.deletions;if(Z!==null){for(var ue=0;ueVe()-n0?Li(l,0):t0|=g),xo(l,u)}function N2(l,u){u===0&&(l.mode&1?(u=vn,vn<<=1,!(vn&130023424)&&(vn=4194304)):u=1);var g=eo();l=Bs(l,u),l!==null&&(mt(l,u,g),xo(l,g))}function J8(l){var u=l.memoizedState,g=0;u!==null&&(g=u.retryLane),N2(l,g)}function Z8(l,u){var g=0;switch(l.tag){case 13:var x=l.stateNode,C=l.memoizedState;C!==null&&(g=C.retryLane);break;case 19:x=l.stateNode;break;default:throw Error(a(314))}x!==null&&x.delete(u),N2(l,g)}var $2;$2=function(l,u,g){if(l!==null)if(l.memoizedProps!==u.pendingProps||un.current)bo=!0;else{if(!(l.lanes&g)&&!(u.flags&128))return bo=!1,B8(l,u,g);bo=!!(l.flags&131072)}else bo=!1,er&&u.flags&1048576&&hx(u,lo,u.index);switch(u.lanes=0,u.tag){case 2:var x=u.type;pf(l,u),l=u.pendingProps;var C=Or(u,Gt.current);_l(u,g),C=Rg(null,u,x,l,C,g);var P=Mg();return u.flags|=1,typeof C=="object"&&C!==null&&typeof C.render=="function"&&C.$$typeof===void 0?(u.tag=1,u.memoizedState=null,u.updateQueue=null,Jn(x)?(P=!0,Zn(u)):P=!1,u.memoizedState=C.state!==null&&C.state!==void 0?C.state:null,Sg(u),C.updater=rf,u.stateNode=C,C._reactInternals=u,kg(u,x,l,g),u=Bg(null,u,x,!0,P,g)):(u.tag=0,er&&P&&fg(u),fo(null,u,C,g),u=u.child),u;case 16:x=u.elementType;e:{switch(pf(l,u),l=u.pendingProps,C=x._init,x=C(x._payload),u.type=x,C=u.tag=t7(x),l=ms(x,l),C){case 0:u=Lg(null,u,x,l,g);break e;case 1:u=c2(null,u,x,l,g);break e;case 11:u=o2(null,u,x,l,g);break e;case 14:u=s2(null,u,x,ms(x.type,l),g);break e}throw Error(a(306,x,""))}return u;case 0:return x=u.type,C=u.pendingProps,C=u.elementType===x?C:ms(x,C),Lg(l,u,x,C,g);case 1:return x=u.type,C=u.pendingProps,C=u.elementType===x?C:ms(x,C),c2(l,u,x,C,g);case 3:e:{if(u2(u),l===null)throw Error(a(387));x=u.pendingProps,P=u.memoizedState,C=P.element,wx(l,u),nf(u,x,null,g);var N=u.memoizedState;if(x=N.element,ke&&P.isDehydrated)if(P={element:x,isDehydrated:!1,cache:N.cache,pendingSuspenseBoundaries:N.pendingSuspenseBoundaries,transitions:N.transitions},u.updateQueue.baseState=P,u.memoizedState=P,u.flags&256){C=El(Error(a(423)),u),u=d2(l,u,x,g,C);break e}else if(x!==C){C=El(Error(a(424)),u),u=d2(l,u,x,g,C);break e}else for(ke&&(Wo=ee(u.stateNode.containerInfo),To=u,er=!0,hs=null,Yc=!1),g=Ox(u,null,x,g),u.child=g;g;)g.flags=g.flags&-3|4096,g=g.sibling;else{if(Cl(),x===C){u=ma(l,u,g);break e}fo(l,u,x,g)}u=u.child}return u;case 5:return Rx(u),l===null&&mg(u),x=u.type,C=u.pendingProps,P=l!==null?l.memoizedProps:null,N=C.children,K(x,C)?N=null:P!==null&&K(x,P)&&(u.flags|=32),l2(l,u),fo(l,u,N,g),u.child;case 6:return l===null&&mg(u),null;case 13:return f2(l,u,g);case 4:return _g(u,u.stateNode.containerInfo),x=u.pendingProps,l===null?u.child=Pl(u,null,x,g):fo(l,u,x,g),u.child;case 11:return x=u.type,C=u.pendingProps,C=u.elementType===x?C:ms(x,C),o2(l,u,x,C,g);case 7:return fo(l,u,u.pendingProps,g),u.child;case 8:return fo(l,u,u.pendingProps.children,g),u.child;case 12:return fo(l,u,u.pendingProps.children,g),u.child;case 10:e:{if(x=u.type._context,C=u.pendingProps,P=u.memoizedProps,N=C.value,yx(u,x,N),P!==null)if(fn(P.value,N)){if(P.children===C.children&&!un.current){u=ma(l,u,g);break e}}else for(P=u.child,P!==null&&(P.return=u);P!==null;){var Z=P.dependencies;if(Z!==null){N=P.child;for(var ue=Z.firstContext;ue!==null;){if(ue.context===x){if(P.tag===1){ue=ha(-1,g&-g),ue.tag=2;var Ne=P.updateQueue;if(Ne!==null){Ne=Ne.shared;var gt=Ne.pending;gt===null?ue.next=ue:(ue.next=gt.next,gt.next=ue),Ne.pending=ue}}P.lanes|=g,ue=P.alternate,ue!==null&&(ue.lanes|=g),xg(P.return,g,u),Z.lanes|=g;break}ue=ue.next}}else if(P.tag===10)N=P.type===u.type?null:P.child;else if(P.tag===18){if(N=P.return,N===null)throw Error(a(341));N.lanes|=g,Z=N.alternate,Z!==null&&(Z.lanes|=g),xg(N,g,u),N=P.sibling}else N=P.child;if(N!==null)N.return=P;else for(N=P;N!==null;){if(N===u){N=null;break}if(P=N.sibling,P!==null){P.return=N.return,N=P;break}N=N.return}P=N}fo(l,u,C.children,g),u=u.child}return u;case 9:return C=u.type,x=u.pendingProps.children,_l(u,g),C=Vo(C),x=x(C),u.flags|=1,fo(l,u,x,g),u.child;case 14:return x=u.type,C=ms(x,u.pendingProps),C=ms(x.type,C),s2(l,u,x,C,g);case 15:return a2(l,u,u.type,u.pendingProps,g);case 17:return x=u.type,C=u.pendingProps,C=u.elementType===x?C:ms(x,C),pf(l,u),u.tag=1,Jn(x)?(l=!0,Zn(u)):l=!1,_l(u,g),Px(u,x,C),kg(u,x,C,g),Bg(null,u,x,!0,l,g);case 19:return h2(l,u,g);case 22:return i2(l,u,g)}throw Error(a(156,u.tag))};function z2(l,u){return We(l,u)}function e7(l,u,g,x){this.tag=l,this.key=g,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=u,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=x,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ko(l,u,g,x){return new e7(l,u,g,x)}function u0(l){return l=l.prototype,!(!l||!l.isReactComponent)}function t7(l){if(typeof l=="function")return u0(l)?1:0;if(l!=null){if(l=l.$$typeof,l===y)return 11;if(l===k)return 14}return 2}function Qa(l,u){var g=l.alternate;return g===null?(g=Ko(l.tag,u,l.key,l.mode),g.elementType=l.elementType,g.type=l.type,g.stateNode=l.stateNode,g.alternate=l,l.alternate=g):(g.pendingProps=u,g.type=l.type,g.flags=0,g.subtreeFlags=0,g.deletions=null),g.flags=l.flags&14680064,g.childLanes=l.childLanes,g.lanes=l.lanes,g.child=l.child,g.memoizedProps=l.memoizedProps,g.memoizedState=l.memoizedState,g.updateQueue=l.updateQueue,u=l.dependencies,g.dependencies=u===null?null:{lanes:u.lanes,firstContext:u.firstContext},g.sibling=l.sibling,g.index=l.index,g.ref=l.ref,g}function Rf(l,u,g,x,C,P){var N=2;if(x=l,typeof l=="function")u0(l)&&(N=1);else if(typeof l=="string")N=5;else e:switch(l){case h:return Hi(g.children,C,P,u);case m:N=8,C|=8;break;case v:return l=Ko(12,g,u,C|2),l.elementType=v,l.lanes=P,l;case S:return l=Ko(13,g,u,C),l.elementType=S,l.lanes=P,l;case _:return l=Ko(19,g,u,C),l.elementType=_,l.lanes=P,l;case I:return Mf(g,C,P,u);default:if(typeof l=="object"&&l!==null)switch(l.$$typeof){case b:N=10;break e;case w:N=9;break e;case y:N=11;break e;case k:N=14;break e;case j:N=16,x=null;break e}throw Error(a(130,l==null?l:typeof l,""))}return u=Ko(N,g,u,C),u.elementType=l,u.type=x,u.lanes=P,u}function Hi(l,u,g,x){return l=Ko(7,l,x,u),l.lanes=g,l}function Mf(l,u,g,x){return l=Ko(22,l,x,u),l.elementType=I,l.lanes=g,l.stateNode={isHidden:!1},l}function d0(l,u,g){return l=Ko(6,l,null,u),l.lanes=g,l}function f0(l,u,g){return u=Ko(4,l.children!==null?l.children:[],l.key,u),u.lanes=g,u.stateNode={containerInfo:l.containerInfo,pendingChildren:null,implementation:l.implementation},u}function n7(l,u,g,x,C){this.tag=u,this.containerInfo=l,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=oe,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Bt(0),this.expirationTimes=Bt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Bt(0),this.identifierPrefix=x,this.onRecoverableError=C,ke&&(this.mutableSourceEagerHydrationData=null)}function L2(l,u,g,x,C,P,N,Z,ue){return l=new n7(l,u,g,Z,ue),u===1?(u=1,P===!0&&(u|=8)):u=0,P=Ko(3,null,null,u),l.current=P,P.stateNode=l,P.memoizedState={element:x,isDehydrated:g,cache:null,transitions:null,pendingSuspenseBoundaries:null},Sg(P),l}function B2(l){if(!l)return jn;l=l._reactInternals;e:{if(A(l)!==l||l.tag!==1)throw Error(a(170));var u=l;do{switch(u.tag){case 3:u=u.stateNode.context;break e;case 1:if(Jn(u.type)){u=u.stateNode.__reactInternalMemoizedMergedChildContext;break e}}u=u.return}while(u!==null);throw Error(a(171))}if(l.tag===1){var g=l.type;if(Jn(g))return Rn(l,g,u)}return u}function F2(l){var u=l._reactInternals;if(u===void 0)throw typeof l.render=="function"?Error(a(188)):(l=Object.keys(l).join(","),Error(a(268,l)));return l=Q(u),l===null?null:l.stateNode}function H2(l,u){if(l=l.memoizedState,l!==null&&l.dehydrated!==null){var g=l.retryLane;l.retryLane=g!==0&&g=Ne&&P>=Yt&&C<=gt&&N<=it){l.splice(u,1);break}else if(x!==Ne||g.width!==ue.width||itN){if(!(P!==Yt||g.height!==ue.height||gtC)){Ne>x&&(ue.width+=Ne-x,ue.x=x),gtP&&(ue.height+=Yt-P,ue.y=P),itg&&(g=N)),N ")+` - -No matching component was found for: - `)+l.join(" > ")}return null},n.getPublicRootInstance=function(l){if(l=l.current,!l.child)return null;switch(l.child.tag){case 5:return G(l.child.stateNode);default:return l.child.stateNode}},n.injectIntoDevTools=function(l){if(l={bundleType:l.bundleType,version:l.version,rendererPackageName:l.rendererPackageName,rendererConfig:l.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:c.ReactCurrentDispatcher,findHostInstanceByFiber:r7,findFiberByHostInstance:l.findFiberByHostInstance||o7,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.2.0"},typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u")l=!1;else{var u=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(u.isDisabled||!u.supportsFiber)l=!0;else{try{Xn=u.inject(l),gn=u}catch{}l=!!u.checkDCE}}return l},n.isAlreadyRendering=function(){return!1},n.observeVisibleRects=function(l,u,g,x){if(!ct)throw Error(a(363));l=Zg(l,u);var C=Tt(l,g,x).disconnect;return{disconnect:function(){C()}}},n.registerMutableSourceForHydration=function(l,u){var g=u._getVersion;g=g(u._source),l.mutableSourceEagerHydrationData==null?l.mutableSourceEagerHydrationData=[u,g]:l.mutableSourceEagerHydrationData.push(u,g)},n.runWithPriority=function(l,u){var g=Ie;try{return Ie=l,u()}finally{Ie=g}},n.shouldError=function(){return null},n.shouldSuspend=function(){return!1},n.updateContainer=function(l,u,g,x){var C=u.current,P=eo(),N=Xa(C);return g=B2(g),u.context===null?u.context=g:u.pendingContext=g,u=ha(P,N),u.payload={element:l},x=x===void 0?null:x,x!==null&&(u.callback=x),l=Ga(C,u,N),l!==null&&(qo(l,C,N,P),tf(l,C,N)),N},n};u8.exports=Hie;var Wie=u8.exports;const Vie=vd(Wie);var d8={exports:{}},Sl={};/** - * @license React - * react-reconciler-constants.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */Sl.ConcurrentRoot=1;Sl.ContinuousEventPriority=4;Sl.DefaultEventPriority=16;Sl.DiscreteEventPriority=1;Sl.IdleEventPriority=536870912;Sl.LegacyRoot=0;d8.exports=Sl;var f8=d8.exports;const l_={children:!0,ref:!0,key:!0,style:!0,forwardedRef:!0,unstable_applyCache:!0,unstable_applyDrawHitFromCache:!0};let c_=!1,u_=!1;const dx=".react-konva-event",Uie=`ReactKonva: You have a Konva node with draggable = true and position defined but no onDragMove or onDragEnd events are handled. -Position of a node will be changed during drag&drop, so you should update state of the react app as well. -Consider to add onDragMove or onDragEnd events. -For more info see: https://github.com/konvajs/react-konva/issues/256 -`,Gie=`ReactKonva: You are using "zIndex" attribute for a Konva node. -react-konva may get confused with ordering. Just define correct order of elements in your render function of a component. -For more info see: https://github.com/konvajs/react-konva/issues/194 -`,qie={};function dg(e,t,n=qie){if(!c_&&"zIndex"in t&&(console.warn(Gie),c_=!0),!u_&&t.draggable){var r=t.x!==void 0||t.y!==void 0,o=t.onDragEnd||t.onDragMove;r&&!o&&(console.warn(Uie),u_=!0)}for(var s in n)if(!l_[s]){var a=s.slice(0,2)==="on",c=n[s]!==t[s];if(a&&c){var d=s.substr(2).toLowerCase();d.substr(0,7)==="content"&&(d="content"+d.substr(7,1).toUpperCase()+d.substr(8)),e.off(d,n[s])}var p=!t.hasOwnProperty(s);p&&e.setAttr(s,void 0)}var h=t._useStrictMode,m={},v=!1;const b={};for(var s in t)if(!l_[s]){var a=s.slice(0,2)==="on",w=n[s]!==t[s];if(a&&w){var d=s.substr(2).toLowerCase();d.substr(0,7)==="content"&&(d="content"+d.substr(7,1).toUpperCase()+d.substr(8)),t[s]&&(b[d]=t[s])}!a&&(t[s]!==n[s]||h&&t[s]!==e.getAttr(s))&&(v=!0,m[s]=t[s])}v&&(e.setAttrs(m),Ai(e));for(var d in b)e.on(d+dx,b[d])}function Ai(e){if(!nD.Konva.autoDrawEnabled){var t=e.getLayer()||e.getStage();t&&t.batchDraw()}}const p8={},Kie={};hd.Node.prototype._applyProps=dg;function Xie(e,t){if(typeof t=="string"){console.error(`Do not use plain text as child of Konva.Node. You are using text: ${t}`);return}e.add(t),Ai(e)}function Yie(e,t,n){let r=hd[e];r||(console.error(`Konva has no node with the type ${e}. Group will be used instead. If you use minimal version of react-konva, just import required nodes into Konva: "import "konva/lib/shapes/${e}" If you want to render DOM elements as part of canvas tree take a look into this demo: https://konvajs.github.io/docs/react/DOM_Portal.html`),r=hd.Group);const o={},s={};for(var a in t){var c=a.slice(0,2)==="on";c?s[a]=t[a]:o[a]=t[a]}const d=new r(o);return dg(d,s),d}function Qie(e,t,n){console.error(`Text components are not supported for now in ReactKonva. Your text is: "${e}"`)}function Jie(e,t,n){return!1}function Zie(e){return e}function ele(){return null}function tle(){return null}function nle(e,t,n,r){return Kie}function rle(){}function ole(e){}function sle(e,t){return!1}function ale(){return p8}function ile(){return p8}const lle=setTimeout,cle=clearTimeout,ule=-1;function dle(e,t){return!1}const fle=!1,ple=!0,hle=!0;function mle(e,t){t.parent===e?t.moveToTop():e.add(t),Ai(e)}function gle(e,t){t.parent===e?t.moveToTop():e.add(t),Ai(e)}function h8(e,t,n){t._remove(),e.add(t),t.setZIndex(n.getZIndex()),Ai(e)}function vle(e,t,n){h8(e,t,n)}function ble(e,t){t.destroy(),t.off(dx),Ai(e)}function yle(e,t){t.destroy(),t.off(dx),Ai(e)}function xle(e,t,n){console.error(`Text components are not yet supported in ReactKonva. You text is: "${n}"`)}function wle(e,t,n){}function Sle(e,t,n,r,o){dg(e,o,r)}function Cle(e){e.hide(),Ai(e)}function kle(e){}function _le(e,t){(t.visible==null||t.visible)&&e.show()}function Ple(e,t){}function jle(e){}function Ile(){}const Ele=()=>f8.DefaultEventPriority,Ole=Object.freeze(Object.defineProperty({__proto__:null,appendChild:mle,appendChildToContainer:gle,appendInitialChild:Xie,cancelTimeout:cle,clearContainer:jle,commitMount:wle,commitTextUpdate:xle,commitUpdate:Sle,createInstance:Yie,createTextInstance:Qie,detachDeletedInstance:Ile,finalizeInitialChildren:Jie,getChildHostContext:ile,getCurrentEventPriority:Ele,getPublicInstance:Zie,getRootHostContext:ale,hideInstance:Cle,hideTextInstance:kle,idlePriority:kp.unstable_IdlePriority,insertBefore:h8,insertInContainerBefore:vle,isPrimaryRenderer:fle,noTimeout:ule,now:kp.unstable_now,prepareForCommit:ele,preparePortalMount:tle,prepareUpdate:nle,removeChild:ble,removeChildFromContainer:yle,resetAfterCommit:rle,resetTextContent:ole,run:kp.unstable_runWithPriority,scheduleTimeout:lle,shouldDeprioritizeSubtree:sle,shouldSetTextContent:dle,supportsMutation:hle,unhideInstance:_le,unhideTextInstance:Ple,warnsIfNotActing:ple},Symbol.toStringTag,{value:"Module"}));var Rle=Object.defineProperty,Mle=Object.defineProperties,Dle=Object.getOwnPropertyDescriptors,d_=Object.getOwnPropertySymbols,Ale=Object.prototype.hasOwnProperty,Tle=Object.prototype.propertyIsEnumerable,f_=(e,t,n)=>t in e?Rle(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,p_=(e,t)=>{for(var n in t||(t={}))Ale.call(t,n)&&f_(e,n,t[n]);if(d_)for(var n of d_(t))Tle.call(t,n)&&f_(e,n,t[n]);return e},Nle=(e,t)=>Mle(e,Dle(t));function m8(e,t,n){if(!e)return;if(n(e)===!0)return e;let r=t?e.return:e.child;for(;r;){const o=m8(r,t,n);if(o)return o;r=t?null:r.sibling}}function g8(e){try{return Object.defineProperties(e,{_currentRenderer:{get(){return null},set(){}},_currentRenderer2:{get(){return null},set(){}}})}catch{return e}}const fx=g8(f.createContext(null));class v8 extends f.Component{render(){return f.createElement(fx.Provider,{value:this._reactInternals},this.props.children)}}const{ReactCurrentOwner:h_,ReactCurrentDispatcher:m_}=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function $le(){const e=f.useContext(fx);if(e===null)throw new Error("its-fine: useFiber must be called within a !");const t=f.useId();return f.useMemo(()=>{for(const r of[h_==null?void 0:h_.current,e,e==null?void 0:e.alternate]){if(!r)continue;const o=m8(r,!1,s=>{let a=s.memoizedState;for(;a;){if(a.memoizedState===t)return!0;a=a.next}});if(o)return o}},[e,t])}function zle(){var e,t;const n=$le(),[r]=f.useState(()=>new Map);r.clear();let o=n;for(;o;){const s=(e=o.type)==null?void 0:e._context;s&&s!==fx&&!r.has(s)&&r.set(s,(t=m_==null?void 0:m_.current)==null?void 0:t.readContext(g8(s))),o=o.return}return r}function Lle(){const e=zle();return f.useMemo(()=>Array.from(e.keys()).reduce((t,n)=>r=>f.createElement(t,null,f.createElement(n.Provider,Nle(p_({},r),{value:e.get(n)}))),t=>f.createElement(v8,p_({},t))),[e])}function Ble(e){const t=H.useRef({});return H.useLayoutEffect(()=>{t.current=e}),H.useLayoutEffect(()=>()=>{t.current={}},[]),t.current}const Fle=e=>{const t=H.useRef(),n=H.useRef(),r=H.useRef(),o=Ble(e),s=Lle(),a=c=>{const{forwardedRef:d}=e;d&&(typeof d=="function"?d(c):d.current=c)};return H.useLayoutEffect(()=>(n.current=new hd.Stage({width:e.width,height:e.height,container:t.current}),a(n.current),r.current=Nu.createContainer(n.current,f8.LegacyRoot,!1,null),Nu.updateContainer(H.createElement(s,{},e.children),r.current),()=>{hd.isBrowser&&(a(null),Nu.updateContainer(null,r.current,null),n.current.destroy())}),[]),H.useLayoutEffect(()=>{a(n.current),dg(n.current,e,o),Nu.updateContainer(H.createElement(s,{},e.children),r.current,null)}),H.createElement("div",{ref:t,id:e.id,accessKey:e.accessKey,className:e.className,role:e.role,style:e.style,tabIndex:e.tabIndex,title:e.title})},_u="Layer",$a="Group",aa="Rect",Wi="Circle",nm="Line",b8="Image",Hle="Transformer",Nu=Vie(Ole);Nu.injectIntoDevTools({findHostInstanceByFiber:()=>null,bundleType:0,version:H.version,rendererPackageName:"react-konva"});const Wle=H.forwardRef((e,t)=>H.createElement(v8,{},H.createElement(Fle,{...e,forwardedRef:t}))),Vle=fe([mn,lr],(e,t)=>{const{tool:n,isMovingBoundingBox:r}=e;return{tool:n,isStaging:t,isMovingBoundingBox:r}},{memoizeOptions:{resultEqualityCheck:Zt}}),Ule=()=>{const e=te(),{tool:t,isStaging:n,isMovingBoundingBox:r}=z(Vle);return{handleDragStart:f.useCallback(()=>{(t==="move"||n)&&!r&&e(Hp(!0))},[e,r,n,t]),handleDragMove:f.useCallback(o=>{if(!((t==="move"||n)&&!r))return;const s={x:o.target.x(),y:o.target.y()};e(c5(s))},[e,r,n,t]),handleDragEnd:f.useCallback(()=>{(t==="move"||n)&&!r&&e(Hp(!1))},[e,r,n,t])}},Gle=fe([mn,Kn,lr],(e,t,n)=>{const{cursorPosition:r,shouldLockBoundingBox:o,shouldShowBoundingBox:s,tool:a,isMaskEnabled:c,shouldSnapToGrid:d}=e;return{activeTabName:t,isCursorOnCanvas:!!r,shouldLockBoundingBox:o,shouldShowBoundingBox:s,tool:a,isStaging:n,isMaskEnabled:c,shouldSnapToGrid:d}},{memoizeOptions:{resultEqualityCheck:Zt}}),qle=()=>{const e=te(),{activeTabName:t,shouldShowBoundingBox:n,tool:r,isStaging:o,isMaskEnabled:s,shouldSnapToGrid:a}=z(Gle),c=f.useRef(null),d=u5(),p=()=>e(lb());rt(["shift+c"],()=>{p()},{enabled:()=>!o,preventDefault:!0},[]);const h=()=>e(wd(!s));rt(["h"],()=>{h()},{enabled:()=>!o,preventDefault:!0},[s]),rt(["n"],()=>{e(Qu(!a))},{enabled:!0,preventDefault:!0},[a]),rt("esc",()=>{e(rD())},{enabled:()=>!0,preventDefault:!0}),rt("shift+h",()=>{e(oD(!n))},{enabled:()=>!o,preventDefault:!0},[t,n]),rt(["space"],m=>{m.repeat||(d==null||d.container().focus(),r!=="move"&&(c.current=r,e(ea("move"))),r==="move"&&c.current&&c.current!=="move"&&(e(ea(c.current)),c.current="move"))},{keyup:!0,keydown:!0,preventDefault:!0},[r,c])},px=e=>{const t=e.getPointerPosition(),n=e.getAbsoluteTransform().copy();if(!t||!n)return;const r=n.invert().point(t);return{x:r.x,y:r.y}},y8=()=>{const e=te(),t=Ea(),n=u5();return{updateColorUnderCursor:()=>{if(!n||!t)return;const r=n.getPointerPosition();if(!r)return;const o=sD.pixelRatio,[s,a,c,d]=t.getContext().getImageData(r.x*o,r.y*o,1,1).data;e(aD({r:s,g:a,b:c,a:d}))},commitColorUnderCursor:()=>{e(iD())}}},Kle=fe([Kn,mn,lr],(e,t,n)=>{const{tool:r}=t;return{tool:r,activeTabName:e,isStaging:n}},{memoizeOptions:{resultEqualityCheck:Zt}}),Xle=e=>{const t=te(),{tool:n,isStaging:r}=z(Kle),{commitColorUnderCursor:o}=y8();return f.useCallback(s=>{if(!e.current)return;if(e.current.container().focus(),n==="move"||r){t(Hp(!0));return}if(n==="colorPicker"){o();return}const a=px(e.current);a&&(s.evt.preventDefault(),t(d5(!0)),t(lD([a.x,a.y])))},[e,n,r,t,o])},Yle=fe([Kn,mn,lr],(e,t,n)=>{const{tool:r,isDrawing:o}=t;return{tool:r,isDrawing:o,activeTabName:e,isStaging:n}},{memoizeOptions:{resultEqualityCheck:Zt}}),Qle=(e,t,n)=>{const r=te(),{isDrawing:o,tool:s,isStaging:a}=z(Yle),{updateColorUnderCursor:c}=y8();return f.useCallback(()=>{if(!e.current)return;const d=px(e.current);if(d){if(r(cD(d)),n.current=d,s==="colorPicker"){c();return}!o||s==="move"||a||(t.current=!0,r(f5([d.x,d.y])))}},[t,r,o,a,n,e,s,c])},Jle=()=>{const e=te();return f.useCallback(()=>{e(uD())},[e])},Zle=fe([Kn,mn,lr],(e,t,n)=>{const{tool:r,isDrawing:o}=t;return{tool:r,isDrawing:o,activeTabName:e,isStaging:n}},{memoizeOptions:{resultEqualityCheck:Zt}}),ece=(e,t)=>{const n=te(),{tool:r,isDrawing:o,isStaging:s}=z(Zle);return f.useCallback(()=>{if(r==="move"||s){n(Hp(!1));return}if(!t.current&&o&&e.current){const a=px(e.current);if(!a)return;n(f5([a.x,a.y]))}else t.current=!1;n(d5(!1))},[t,n,o,s,e,r])},tce=fe([mn],e=>{const{isMoveStageKeyHeld:t,stageScale:n}=e;return{isMoveStageKeyHeld:t,stageScale:n}},{memoizeOptions:{resultEqualityCheck:Zt}}),nce=e=>{const t=te(),{isMoveStageKeyHeld:n,stageScale:r}=z(tce);return f.useCallback(o=>{if(!e.current||n)return;o.evt.preventDefault();const s=e.current.getPointerPosition();if(!s)return;const a={x:(s.x-e.current.x())/r,y:(s.y-e.current.y())/r};let c=o.evt.deltaY;o.evt.ctrlKey&&(c=-c);const d=Es(r*pD**c,fD,dD),p={x:s.x-a.x*d,y:s.y-a.y*d};t(hD(d)),t(c5(p))},[e,n,r,t])},rce=fe(mn,e=>{const{boundingBoxCoordinates:t,boundingBoxDimensions:n,stageDimensions:r,stageScale:o,shouldDarkenOutsideBoundingBox:s,stageCoordinates:a}=e;return{boundingBoxCoordinates:t,boundingBoxDimensions:n,shouldDarkenOutsideBoundingBox:s,stageCoordinates:a,stageDimensions:r,stageScale:o}},{memoizeOptions:{resultEqualityCheck:Zt}}),oce=()=>{const{boundingBoxCoordinates:e,boundingBoxDimensions:t,shouldDarkenOutsideBoundingBox:n,stageCoordinates:r,stageDimensions:o,stageScale:s}=z(rce);return i.jsxs($a,{children:[i.jsx(aa,{offsetX:r.x/s,offsetY:r.y/s,height:o.height/s,width:o.width/s,fill:"rgba(0,0,0,0.4)",listening:!1,visible:n}),i.jsx(aa,{x:e.x,y:e.y,width:t.width,height:t.height,fill:"rgb(255,255,255)",listening:!1,visible:n,globalCompositeOperation:"destination-out"})]})},sce=fe([mn],e=>{const{stageScale:t,stageCoordinates:n,stageDimensions:r}=e;return{stageScale:t,stageCoordinates:n,stageDimensions:r}},{memoizeOptions:{resultEqualityCheck:Zt}}),ace=()=>{const{stageScale:e,stageCoordinates:t,stageDimensions:n}=z(sce),{colorMode:r}=Ds(),[o,s]=f.useState([]),[a,c]=Tc("colors",["base.800","base.200"]),d=f.useCallback(p=>p/e,[e]);return f.useLayoutEffect(()=>{const{width:p,height:h}=n,{x:m,y:v}=t,b={x1:0,y1:0,x2:p,y2:h,offset:{x:d(m),y:d(v)}},w={x:Math.ceil(d(m)/64)*64,y:Math.ceil(d(v)/64)*64},y={x1:-w.x,y1:-w.y,x2:d(p)-w.x+64,y2:d(h)-w.y+64},_={x1:Math.min(b.x1,y.x1),y1:Math.min(b.y1,y.y1),x2:Math.max(b.x2,y.x2),y2:Math.max(b.y2,y.y2)},k=_.x2-_.x1,j=_.y2-_.y1,I=Math.round(k/64)+1,E=Math.round(j/64)+1,O=kw(0,I).map(M=>i.jsx(nm,{x:_.x1+M*64,y:_.y1,points:[0,0,0,j],stroke:r==="dark"?a:c,strokeWidth:1},`x_${M}`)),R=kw(0,E).map(M=>i.jsx(nm,{x:_.x1,y:_.y1+M*64,points:[0,0,k,0],stroke:r==="dark"?a:c,strokeWidth:1},`y_${M}`));s(O.concat(R))},[e,t,n,d,r,a,c]),i.jsx($a,{children:o})},ice=fe([vo,mn],(e,t)=>{const{progressImage:n,sessionId:r}=e,{sessionId:o,boundingBox:s}=t.layerState.stagingArea;return{boundingBox:s,progressImage:r===o?n:void 0}},{memoizeOptions:{resultEqualityCheck:Zt}}),lce=e=>{const{...t}=e,{progressImage:n,boundingBox:r}=z(ice),[o,s]=f.useState(null);return f.useEffect(()=>{if(!n)return;const a=new Image;a.onload=()=>{s(a)},a.src=n.dataURL},[n]),n&&r&&o?i.jsx(b8,{x:r.x,y:r.y,width:r.width,height:r.height,image:o,listening:!1,...t}):null},rl=e=>{const{r:t,g:n,b:r,a:o}=e;return`rgba(${t}, ${n}, ${r}, ${o})`},cce=fe(mn,e=>{const{maskColor:t,stageCoordinates:n,stageDimensions:r,stageScale:o}=e;return{stageCoordinates:n,stageDimensions:r,stageScale:o,maskColorString:rl(t)}}),g_=e=>`data:image/svg+xml;utf8, - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -`.replaceAll("black",e),uce=e=>{const{...t}=e,{maskColorString:n,stageCoordinates:r,stageDimensions:o,stageScale:s}=z(cce),[a,c]=f.useState(null),[d,p]=f.useState(0),h=f.useRef(null),m=f.useCallback(()=>{p(d+1),setTimeout(m,500)},[d]);return f.useEffect(()=>{if(a)return;const v=new Image;v.onload=()=>{c(v)},v.src=g_(n)},[a,n]),f.useEffect(()=>{a&&(a.src=g_(n))},[a,n]),f.useEffect(()=>{const v=setInterval(()=>p(b=>(b+1)%5),50);return()=>clearInterval(v)},[]),!a||!Al(r.x)||!Al(r.y)||!Al(s)||!Al(o.width)||!Al(o.height)?null:i.jsx(aa,{ref:h,offsetX:r.x/s,offsetY:r.y/s,height:o.height/s,width:o.width/s,fillPatternImage:a,fillPatternOffsetY:Al(d)?d:0,fillPatternRepeat:"repeat",fillPatternScale:{x:1/s,y:1/s},listening:!0,globalCompositeOperation:"source-in",...t})},dce=fe([mn],e=>({objects:e.layerState.objects}),{memoizeOptions:{resultEqualityCheck:Zt}}),fce=e=>{const{...t}=e,{objects:n}=z(dce);return i.jsx($a,{listening:!1,...t,children:n.filter(mD).map((r,o)=>i.jsx(nm,{points:r.points,stroke:"rgb(0,0,0)",strokeWidth:r.strokeWidth*2,tension:0,lineCap:"round",lineJoin:"round",shadowForStrokeEnabled:!1,listening:!1,globalCompositeOperation:r.tool==="brush"?"source-over":"destination-out"},o))})};var Vi=f,pce=function(t,n,r){const o=Vi.useRef("loading"),s=Vi.useRef(),[a,c]=Vi.useState(0),d=Vi.useRef(),p=Vi.useRef(),h=Vi.useRef();return(d.current!==t||p.current!==n||h.current!==r)&&(o.current="loading",s.current=void 0,d.current=t,p.current=n,h.current=r),Vi.useLayoutEffect(function(){if(!t)return;var m=document.createElement("img");function v(){o.current="loaded",s.current=m,c(Math.random())}function b(){o.current="failed",s.current=void 0,c(Math.random())}return m.addEventListener("load",v),m.addEventListener("error",b),n&&(m.crossOrigin=n),r&&(m.referrerPolicy=r),m.src=t,function(){m.removeEventListener("load",v),m.removeEventListener("error",b)}},[t,n,r]),[s.current,o.current]};const hce=vd(pce),x8=e=>{const{width:t,height:n,x:r,y:o,imageName:s}=e.canvasImage,{currentData:a,isError:c}=os(s??oo.skipToken),[d]=hce((a==null?void 0:a.image_url)??"",gD.get()?"use-credentials":"anonymous");return c?i.jsx(aa,{x:r,y:o,width:t,height:n,fill:"red"}):i.jsx(b8,{x:r,y:o,image:d,listening:!1})},mce=fe([mn],e=>{const{layerState:{objects:t}}=e;return{objects:t}},{memoizeOptions:{resultEqualityCheck:Zt}}),gce=()=>{const{objects:e}=z(mce);return e?i.jsx($a,{name:"outpainting-objects",listening:!1,children:e.map((t,n)=>{if(A_(t))return i.jsx(x8,{canvasImage:t},n);if(vD(t)){const r=i.jsx(nm,{points:t.points,stroke:t.color?rl(t.color):"rgb(0,0,0)",strokeWidth:t.strokeWidth*2,tension:0,lineCap:"round",lineJoin:"round",shadowForStrokeEnabled:!1,listening:!1,globalCompositeOperation:t.tool==="brush"?"source-over":"destination-out"},n);return t.clip?i.jsx($a,{clipX:t.clip.x,clipY:t.clip.y,clipWidth:t.clip.width,clipHeight:t.clip.height,children:r},n):r}else{if(bD(t))return i.jsx(aa,{x:t.x,y:t.y,width:t.width,height:t.height,fill:rl(t.color)},n);if(yD(t))return i.jsx(aa,{x:t.x,y:t.y,width:t.width,height:t.height,fill:"rgb(255, 255, 255)",globalCompositeOperation:"destination-out"},n)}})}):null},vce=fe([mn],e=>{const{layerState:t,shouldShowStagingImage:n,shouldShowStagingOutline:r,boundingBoxCoordinates:{x:o,y:s},boundingBoxDimensions:{width:a,height:c}}=e,{selectedImageIndex:d,images:p}=t.stagingArea;return{currentStagingAreaImage:p.length>0&&d!==void 0?p[d]:void 0,isOnFirstImage:d===0,isOnLastImage:d===p.length-1,shouldShowStagingImage:n,shouldShowStagingOutline:r,x:o,y:s,width:a,height:c}},{memoizeOptions:{resultEqualityCheck:Zt}}),bce=e=>{const{...t}=e,{currentStagingAreaImage:n,shouldShowStagingImage:r,shouldShowStagingOutline:o,x:s,y:a,width:c,height:d}=z(vce);return i.jsxs($a,{...t,children:[r&&n&&i.jsx(x8,{canvasImage:n}),o&&i.jsxs($a,{children:[i.jsx(aa,{x:s,y:a,width:c,height:d,strokeWidth:1,stroke:"white",strokeScaleEnabled:!1}),i.jsx(aa,{x:s,y:a,width:c,height:d,dash:[4,4],strokeWidth:1,stroke:"black",strokeScaleEnabled:!1})]})]})},yce=fe([mn],e=>{const{layerState:{stagingArea:{images:t,selectedImageIndex:n,sessionId:r}},shouldShowStagingOutline:o,shouldShowStagingImage:s}=e;return{currentStagingAreaImage:t.length>0?t[n]:void 0,isOnFirstImage:n===0,isOnLastImage:n===t.length-1,shouldShowStagingImage:s,shouldShowStagingOutline:o,sessionId:r}},{memoizeOptions:{resultEqualityCheck:Zt}}),xce=()=>{const e=te(),{isOnFirstImage:t,isOnLastImage:n,currentStagingAreaImage:r,shouldShowStagingImage:o,sessionId:s}=z(yce),{t:a}=ye(),c=f.useCallback(()=>{e(hw(!0))},[e]),d=f.useCallback(()=>{e(hw(!1))},[e]);rt(["left"],()=>{p()},{enabled:()=>!0,preventDefault:!0}),rt(["right"],()=>{h()},{enabled:()=>!0,preventDefault:!0}),rt(["enter"],()=>{m()},{enabled:()=>!0,preventDefault:!0});const p=f.useCallback(()=>e(xD()),[e]),h=f.useCallback(()=>e(wD()),[e]),m=f.useCallback(()=>e(SD(s)),[e,s]),{data:v}=os((r==null?void 0:r.imageName)??oo.skipToken);return r?i.jsx(F,{pos:"absolute",bottom:4,w:"100%",align:"center",justify:"center",filter:"drop-shadow(0 0.5rem 1rem rgba(0,0,0))",onMouseOver:c,onMouseOut:d,children:i.jsxs(rr,{isAttached:!0,children:[i.jsx(Le,{tooltip:`${a("unifiedCanvas.previous")} (Left)`,"aria-label":`${a("unifiedCanvas.previous")} (Left)`,icon:i.jsx(ZH,{}),onClick:p,colorScheme:"accent",isDisabled:t}),i.jsx(Le,{tooltip:`${a("unifiedCanvas.next")} (Right)`,"aria-label":`${a("unifiedCanvas.next")} (Right)`,icon:i.jsx(eW,{}),onClick:h,colorScheme:"accent",isDisabled:n}),i.jsx(Le,{tooltip:`${a("unifiedCanvas.accept")} (Enter)`,"aria-label":`${a("unifiedCanvas.accept")} (Enter)`,icon:i.jsx(rW,{}),onClick:m,colorScheme:"accent"}),i.jsx(Le,{tooltip:a("unifiedCanvas.showHide"),"aria-label":a("unifiedCanvas.showHide"),"data-alert":!o,icon:o?i.jsx(fW,{}):i.jsx(dW,{}),onClick:()=>e(CD(!o)),colorScheme:"accent"}),i.jsx(Le,{tooltip:a("unifiedCanvas.saveToGallery"),"aria-label":a("unifiedCanvas.saveToGallery"),isDisabled:!v||!v.is_intermediate,icon:i.jsx(Dm,{}),onClick:()=>{v&&e(kD({imageDTO:v}))},colorScheme:"accent"}),i.jsx(Le,{tooltip:a("unifiedCanvas.discardAll"),"aria-label":a("unifiedCanvas.discardAll"),icon:i.jsx(gl,{style:{transform:"rotate(45deg)"}}),onClick:()=>e(_D()),colorScheme:"error",fontSize:20})]})}):null},wce=()=>{const e=z(c=>c.canvas.layerState),t=z(c=>c.canvas.boundingBoxCoordinates),n=z(c=>c.canvas.boundingBoxDimensions),r=z(c=>c.canvas.isMaskEnabled),o=z(c=>c.canvas.shouldPreserveMaskedArea),[s,a]=f.useState();return f.useEffect(()=>{a(void 0)},[e,t,n,r,o]),bee(async()=>{const c=await PD(e,t,n,r,o);if(!c)return;const{baseImageData:d,maskImageData:p}=c,h=jD(d,p);a(h)},1e3,[e,t,n,r,o]),s},Sce={txt2img:"Text to Image",img2img:"Image to Image",inpaint:"Inpaint",outpaint:"Inpaint"},Cce=()=>{const e=wce();return i.jsxs(Ee,{children:["Mode: ",e?Sce[e]:"..."]})},ec=e=>Math.round(e*100)/100,kce=fe([mn],e=>{const{cursorPosition:t}=e,{cursorX:n,cursorY:r}=t?{cursorX:t.x,cursorY:t.y}:{cursorX:-1,cursorY:-1};return{cursorCoordinatesString:`(${ec(n)}, ${ec(r)})`}},{memoizeOptions:{resultEqualityCheck:Zt}});function _ce(){const{cursorCoordinatesString:e}=z(kce),{t}=ye();return i.jsx(Ee,{children:`${t("unifiedCanvas.cursorPosition")}: ${e}`})}const q1="var(--invokeai-colors-warning-500)",Pce=fe([mn],e=>{const{stageDimensions:{width:t,height:n},stageCoordinates:{x:r,y:o},boundingBoxDimensions:{width:s,height:a},scaledBoundingBoxDimensions:{width:c,height:d},boundingBoxCoordinates:{x:p,y:h},stageScale:m,shouldShowCanvasDebugInfo:v,layer:b,boundingBoxScaleMethod:w,shouldPreserveMaskedArea:y}=e;let S="inherit";return(w==="none"&&(s<512||a<512)||w==="manual"&&c*d<512*512)&&(S=q1),{activeLayerColor:b==="mask"?q1:"inherit",activeLayerString:b.charAt(0).toUpperCase()+b.slice(1),boundingBoxColor:S,boundingBoxCoordinatesString:`(${ec(p)}, ${ec(h)})`,boundingBoxDimensionsString:`${s}×${a}`,scaledBoundingBoxDimensionsString:`${c}×${d}`,canvasCoordinatesString:`${ec(r)}×${ec(o)}`,canvasDimensionsString:`${t}×${n}`,canvasScaleString:Math.round(m*100),shouldShowCanvasDebugInfo:v,shouldShowBoundingBox:w!=="auto",shouldShowScaledBoundingBox:w!=="none",shouldPreserveMaskedArea:y}},{memoizeOptions:{resultEqualityCheck:Zt}}),jce=()=>{const{activeLayerColor:e,activeLayerString:t,boundingBoxColor:n,boundingBoxCoordinatesString:r,boundingBoxDimensionsString:o,scaledBoundingBoxDimensionsString:s,shouldShowScaledBoundingBox:a,canvasCoordinatesString:c,canvasDimensionsString:d,canvasScaleString:p,shouldShowCanvasDebugInfo:h,shouldShowBoundingBox:m,shouldPreserveMaskedArea:v}=z(Pce),{t:b}=ye();return i.jsxs(F,{sx:{flexDirection:"column",position:"absolute",top:0,insetInlineStart:0,opacity:.65,display:"flex",fontSize:"sm",padding:1,px:2,minWidth:48,margin:1,borderRadius:"base",pointerEvents:"none",bg:"base.200",_dark:{bg:"base.800"}},children:[i.jsx(Cce,{}),i.jsx(Ee,{style:{color:e},children:`${b("unifiedCanvas.activeLayer")}: ${t}`}),i.jsx(Ee,{children:`${b("unifiedCanvas.canvasScale")}: ${p}%`}),v&&i.jsx(Ee,{style:{color:q1},children:"Preserve Masked Area: On"}),m&&i.jsx(Ee,{style:{color:n},children:`${b("unifiedCanvas.boundingBox")}: ${o}`}),a&&i.jsx(Ee,{style:{color:n},children:`${b("unifiedCanvas.scaledBoundingBox")}: ${s}`}),h&&i.jsxs(i.Fragment,{children:[i.jsx(Ee,{children:`${b("unifiedCanvas.boundingBoxPosition")}: ${r}`}),i.jsx(Ee,{children:`${b("unifiedCanvas.canvasDimensions")}: ${d}`}),i.jsx(Ee,{children:`${b("unifiedCanvas.canvasPosition")}: ${c}`}),i.jsx(_ce,{})]})]})},Ice=fe([Ye],({canvas:e,generation:t})=>{const{boundingBoxCoordinates:n,boundingBoxDimensions:r,stageScale:o,isDrawing:s,isTransformingBoundingBox:a,isMovingBoundingBox:c,tool:d,shouldSnapToGrid:p}=e,{aspectRatio:h}=t;return{boundingBoxCoordinates:n,boundingBoxDimensions:r,isDrawing:s,isMovingBoundingBox:c,isTransformingBoundingBox:a,stageScale:o,shouldSnapToGrid:p,tool:d,hitStrokeWidth:20/o,aspectRatio:h}},{memoizeOptions:{resultEqualityCheck:Zt}}),Ece=e=>{const{...t}=e,n=te(),{boundingBoxCoordinates:r,boundingBoxDimensions:o,isDrawing:s,isMovingBoundingBox:a,isTransformingBoundingBox:c,stageScale:d,shouldSnapToGrid:p,tool:h,hitStrokeWidth:m,aspectRatio:v}=z(Ice),b=f.useRef(null),w=f.useRef(null),[y,S]=f.useState(!1);f.useEffect(()=>{var B;!b.current||!w.current||(b.current.nodes([w.current]),(B=b.current.getLayer())==null||B.batchDraw())},[]);const _=64*d;rt("N",()=>{n(Qu(!p))});const k=f.useCallback(B=>{if(!p){n(b0({x:Math.floor(B.target.x()),y:Math.floor(B.target.y())}));return}const V=B.target.x(),q=B.target.y(),G=Ss(V,64),D=Ss(q,64);B.target.x(G),B.target.y(D),n(b0({x:G,y:D}))},[n,p]),j=f.useCallback(()=>{if(!w.current)return;const B=w.current,V=B.scaleX(),q=B.scaleY(),G=Math.round(B.width()*V),D=Math.round(B.height()*q),L=Math.round(B.x()),W=Math.round(B.y());if(v){const Y=Ss(G/v,64);n(Js({width:G,height:Y}))}else n(Js({width:G,height:D}));n(b0({x:p?ju(L,64):L,y:p?ju(W,64):W})),B.scaleX(1),B.scaleY(1)},[n,p,v]),I=f.useCallback((B,V,q)=>{const G=B.x%_,D=B.y%_;return{x:ju(V.x,_)+G,y:ju(V.y,_)+D}},[_]),E=()=>{n(y0(!0))},O=()=>{n(y0(!1)),n(x0(!1)),n($f(!1)),S(!1)},R=()=>{n(x0(!0))},M=()=>{n(y0(!1)),n(x0(!1)),n($f(!1)),S(!1)},A=()=>{S(!0)},T=()=>{!c&&!a&&S(!1)},$=()=>{n($f(!0))},Q=()=>{n($f(!1))};return i.jsxs($a,{...t,children:[i.jsx(aa,{height:o.height,width:o.width,x:r.x,y:r.y,onMouseEnter:$,onMouseOver:$,onMouseLeave:Q,onMouseOut:Q}),i.jsx(aa,{draggable:!0,fillEnabled:!1,height:o.height,hitStrokeWidth:m,listening:!s&&h==="move",onDragStart:R,onDragEnd:M,onDragMove:k,onMouseDown:R,onMouseOut:T,onMouseOver:A,onMouseEnter:A,onMouseUp:M,onTransform:j,onTransformEnd:O,ref:w,stroke:y?"rgba(255,255,255,0.7)":"white",strokeWidth:(y?8:1)/d,width:o.width,x:r.x,y:r.y}),i.jsx(Hle,{anchorCornerRadius:3,anchorDragBoundFunc:I,anchorFill:"rgba(212,216,234,1)",anchorSize:15,anchorStroke:"rgb(42,42,42)",borderDash:[4,4],borderEnabled:!0,borderStroke:"black",draggable:!1,enabledAnchors:h==="move"?void 0:[],flipEnabled:!1,ignoreStroke:!0,keepRatio:!1,listening:!s&&h==="move",onDragStart:R,onDragEnd:M,onMouseDown:E,onMouseUp:O,onTransformEnd:O,ref:b,rotateEnabled:!1})]})},Oce=fe(mn,e=>{const{cursorPosition:t,brushSize:n,colorPickerColor:r,maskColor:o,brushColor:s,tool:a,layer:c,shouldShowBrush:d,isMovingBoundingBox:p,isTransformingBoundingBox:h,stageScale:m,stageDimensions:v,boundingBoxCoordinates:b,boundingBoxDimensions:w,shouldRestrictStrokesToBox:y}=e,S=y?{clipX:b.x,clipY:b.y,clipWidth:w.width,clipHeight:w.height}:{};return{cursorPosition:t,brushX:t?t.x:v.width/2,brushY:t?t.y:v.height/2,radius:n/2,colorPickerOuterRadius:mw/m,colorPickerInnerRadius:(mw-Av+1)/m,maskColorString:rl({...o,a:.5}),brushColorString:rl(s),colorPickerColorString:rl(r),tool:a,layer:c,shouldShowBrush:d,shouldDrawBrushPreview:!(p||h||!t)&&d,strokeWidth:1.5/m,dotRadius:1.5/m,clip:S}},{memoizeOptions:{resultEqualityCheck:Zt}}),Rce=e=>{const{...t}=e,{brushX:n,brushY:r,radius:o,maskColorString:s,tool:a,layer:c,shouldDrawBrushPreview:d,dotRadius:p,strokeWidth:h,brushColorString:m,colorPickerColorString:v,colorPickerInnerRadius:b,colorPickerOuterRadius:w,clip:y}=z(Oce);return d?i.jsxs($a,{listening:!1,...y,...t,children:[a==="colorPicker"?i.jsxs(i.Fragment,{children:[i.jsx(Wi,{x:n,y:r,radius:w,stroke:m,strokeWidth:Av,strokeScaleEnabled:!1}),i.jsx(Wi,{x:n,y:r,radius:b,stroke:v,strokeWidth:Av,strokeScaleEnabled:!1})]}):i.jsxs(i.Fragment,{children:[i.jsx(Wi,{x:n,y:r,radius:o,fill:c==="mask"?s:m,globalCompositeOperation:a==="eraser"?"destination-out":"source-out"}),i.jsx(Wi,{x:n,y:r,radius:o,stroke:"rgba(255,255,255,0.4)",strokeWidth:h*2,strokeEnabled:!0,listening:!1}),i.jsx(Wi,{x:n,y:r,radius:o,stroke:"rgba(0,0,0,1)",strokeWidth:h,strokeEnabled:!0,listening:!1})]}),i.jsx(Wi,{x:n,y:r,radius:p*2,fill:"rgba(255,255,255,0.4)",listening:!1}),i.jsx(Wi,{x:n,y:r,radius:p,fill:"rgba(0,0,0,1)",listening:!1})]}):null},Mce=fe([mn,lr],(e,t)=>{const{isMaskEnabled:n,stageScale:r,shouldShowBoundingBox:o,isTransformingBoundingBox:s,isMouseOverBoundingBox:a,isMovingBoundingBox:c,stageDimensions:d,stageCoordinates:p,tool:h,isMovingStage:m,shouldShowIntermediates:v,shouldShowGrid:b,shouldRestrictStrokesToBox:w,shouldAntialias:y}=e;let S="none";return h==="move"||t?m?S="grabbing":S="grab":s?S=void 0:w&&!a&&(S="default"),{isMaskEnabled:n,isModifyingBoundingBox:s||c,shouldShowBoundingBox:o,shouldShowGrid:b,stageCoordinates:p,stageCursor:S,stageDimensions:d,stageScale:r,tool:h,isStaging:t,shouldShowIntermediates:v,shouldAntialias:y}},Ge),Dce=je(Wle,{shouldForwardProp:e=>!["sx"].includes(e)}),v_=()=>{const{isMaskEnabled:e,isModifyingBoundingBox:t,shouldShowBoundingBox:n,shouldShowGrid:r,stageCoordinates:o,stageCursor:s,stageDimensions:a,stageScale:c,tool:d,isStaging:p,shouldShowIntermediates:h,shouldAntialias:m}=z(Mce);qle();const v=f.useRef(null),b=f.useRef(null),w=f.useCallback(T=>{ED(T),v.current=T},[]),y=f.useCallback(T=>{ID(T),b.current=T},[]),S=f.useRef({x:0,y:0}),_=f.useRef(!1),k=nce(v),j=Xle(v),I=ece(v,_),E=Qle(v,_,S),O=Jle(),{handleDragStart:R,handleDragMove:M,handleDragEnd:A}=Ule();return i.jsx(F,{sx:{position:"relative",height:"100%",width:"100%",borderRadius:"base"},children:i.jsxs(Ee,{sx:{position:"relative"},children:[i.jsxs(Dce,{tabIndex:-1,ref:w,sx:{outline:"none",overflow:"hidden",cursor:s||void 0,canvas:{outline:"none"}},x:o.x,y:o.y,width:a.width,height:a.height,scale:{x:c,y:c},onTouchStart:j,onTouchMove:E,onTouchEnd:I,onMouseDown:j,onMouseLeave:O,onMouseMove:E,onMouseUp:I,onDragStart:R,onDragMove:M,onDragEnd:A,onContextMenu:T=>T.evt.preventDefault(),onWheel:k,draggable:(d==="move"||p)&&!t,children:[i.jsx(_u,{id:"grid",visible:r,children:i.jsx(ace,{})}),i.jsx(_u,{id:"base",ref:y,listening:!1,imageSmoothingEnabled:m,children:i.jsx(gce,{})}),i.jsxs(_u,{id:"mask",visible:e,listening:!1,children:[i.jsx(fce,{visible:!0,listening:!1}),i.jsx(uce,{listening:!1})]}),i.jsx(_u,{children:i.jsx(oce,{})}),i.jsxs(_u,{id:"preview",imageSmoothingEnabled:m,children:[!p&&i.jsx(Rce,{visible:d!=="move",listening:!1}),i.jsx(bce,{visible:p}),h&&i.jsx(lce,{}),i.jsx(Ece,{visible:n&&!p})]})]}),i.jsx(jce,{}),i.jsx(xce,{})]})})},Ace=fe(mn,IH,Kn,(e,t,n)=>{const{doesCanvasNeedScaling:r,isCanvasInitialized:o}=e;return{doesCanvasNeedScaling:r,activeTabName:n,initialCanvasImage:t,isCanvasInitialized:o}}),b_=()=>{const e=te(),{doesCanvasNeedScaling:t,activeTabName:n,initialCanvasImage:r,isCanvasInitialized:o}=z(Ace),s=f.useRef(null);return f.useLayoutEffect(()=>{window.setTimeout(()=>{if(!s.current)return;const{clientWidth:a,clientHeight:c}=s.current;e(OD({width:a,height:c})),e(o?RD():im()),e(T_(!1))},0)},[e,r,t,n,o]),i.jsx(F,{ref:s,sx:{flexDirection:"column",alignItems:"center",justifyContent:"center",gap:4,width:"100%",height:"100%"},children:i.jsx(pl,{thickness:"2px",size:"xl"})})};function w8(e,t,n=250){const[r,o]=f.useState(0);return f.useEffect(()=>{const s=setTimeout(()=>{r===1&&e(),o(0)},n);return r===2&&t(),()=>clearTimeout(s)},[r,e,t,n]),()=>o(s=>s+1)}const Tce=je(o8,{baseStyle:{paddingInline:4},shouldForwardProp:e=>!["pickerColor"].includes(e)}),vv={width:6,height:6,borderColor:"base.100"},Nce=e=>{const{styleClass:t="",...n}=e;return i.jsx(Tce,{sx:{".react-colorful__hue-pointer":vv,".react-colorful__saturation-pointer":vv,".react-colorful__alpha-pointer":vv},className:t,...n})},rm=f.memo(Nce),$ce=fe([mn,lr],(e,t)=>{const{maskColor:n,layer:r,isMaskEnabled:o,shouldPreserveMaskedArea:s}=e;return{layer:r,maskColor:n,maskColorString:rl(n),isMaskEnabled:o,shouldPreserveMaskedArea:s,isStaging:t}},{memoizeOptions:{resultEqualityCheck:Zt}}),zce=()=>{const e=te(),{t}=ye(),{layer:n,maskColor:r,isMaskEnabled:o,shouldPreserveMaskedArea:s,isStaging:a}=z($ce);rt(["q"],()=>{c()},{enabled:()=>!a,preventDefault:!0},[n]),rt(["shift+c"],()=>{d()},{enabled:()=>!a,preventDefault:!0},[]),rt(["h"],()=>{p()},{enabled:()=>!a,preventDefault:!0},[o]);const c=()=>{e(Wp(n==="mask"?"base":"mask"))},d=()=>e(lb()),p=()=>e(wd(!o));return i.jsx(vl,{triggerComponent:i.jsx(rr,{children:i.jsx(Le,{"aria-label":t("unifiedCanvas.maskingOptions"),tooltip:t("unifiedCanvas.maskingOptions"),icon:i.jsx(wW,{}),isChecked:n==="mask",isDisabled:a})}),children:i.jsxs(F,{direction:"column",gap:2,children:[i.jsx(Gn,{label:`${t("unifiedCanvas.enableMask")} (H)`,isChecked:o,onChange:p}),i.jsx(Gn,{label:t("unifiedCanvas.preserveMaskedArea"),isChecked:s,onChange:h=>e(p5(h.target.checked))}),i.jsx(rm,{sx:{paddingTop:2,paddingBottom:2},pickerColor:r,onChange:h=>e(h5(h))}),i.jsxs(Jt,{size:"sm",leftIcon:i.jsx(us,{}),onClick:d,children:[t("unifiedCanvas.clearMask")," (Shift+C)"]})]})})},Lce=fe([mn,Kn,vo],(e,t,n)=>{const{futureLayerStates:r}=e;return{canRedo:r.length>0&&!n.isProcessing,activeTabName:t}},{memoizeOptions:{resultEqualityCheck:Zt}});function S8(){const e=te(),{canRedo:t,activeTabName:n}=z(Lce),{t:r}=ye(),o=()=>{e(MD())};return rt(["meta+shift+z","ctrl+shift+z","control+y","meta+y"],()=>{o()},{enabled:()=>t,preventDefault:!0},[n,t]),i.jsx(Le,{"aria-label":`${r("unifiedCanvas.redo")} (Ctrl+Shift+Z)`,tooltip:`${r("unifiedCanvas.redo")} (Ctrl+Shift+Z)`,icon:i.jsx(kW,{}),onClick:o,isDisabled:!t})}const C8=()=>{const e=z(lr),t=te(),{t:n}=ye();return i.jsxs(ix,{title:n("unifiedCanvas.clearCanvasHistory"),acceptCallback:()=>t(DD()),acceptButtonText:n("unifiedCanvas.clearHistory"),triggerComponent:i.jsx(Jt,{size:"sm",leftIcon:i.jsx(us,{}),isDisabled:e,children:n("unifiedCanvas.clearCanvasHistory")}),children:[i.jsx("p",{children:n("unifiedCanvas.clearCanvasHistoryMessage")}),i.jsx("br",{}),i.jsx("p",{children:n("unifiedCanvas.clearCanvasHistoryConfirm")})]})},Bce=fe([mn],e=>{const{shouldAutoSave:t,shouldCropToBoundingBoxOnSave:n,shouldDarkenOutsideBoundingBox:r,shouldShowCanvasDebugInfo:o,shouldShowGrid:s,shouldShowIntermediates:a,shouldSnapToGrid:c,shouldRestrictStrokesToBox:d,shouldAntialias:p}=e;return{shouldAutoSave:t,shouldCropToBoundingBoxOnSave:n,shouldDarkenOutsideBoundingBox:r,shouldShowCanvasDebugInfo:o,shouldShowGrid:s,shouldShowIntermediates:a,shouldSnapToGrid:c,shouldRestrictStrokesToBox:d,shouldAntialias:p}},{memoizeOptions:{resultEqualityCheck:Zt}}),Fce=()=>{const e=te(),{t}=ye(),{shouldAutoSave:n,shouldCropToBoundingBoxOnSave:r,shouldDarkenOutsideBoundingBox:o,shouldShowCanvasDebugInfo:s,shouldShowGrid:a,shouldShowIntermediates:c,shouldSnapToGrid:d,shouldRestrictStrokesToBox:p,shouldAntialias:h}=z(Bce);rt(["n"],()=>{e(Qu(!d))},{enabled:!0,preventDefault:!0},[d]);const m=v=>e(Qu(v.target.checked));return i.jsx(vl,{isLazy:!1,triggerComponent:i.jsx(Le,{tooltip:t("unifiedCanvas.canvasSettings"),"aria-label":t("unifiedCanvas.canvasSettings"),icon:i.jsx(sy,{})}),children:i.jsxs(F,{direction:"column",gap:2,children:[i.jsx(Gn,{label:t("unifiedCanvas.showIntermediates"),isChecked:c,onChange:v=>e(m5(v.target.checked))}),i.jsx(Gn,{label:t("unifiedCanvas.showGrid"),isChecked:a,onChange:v=>e(g5(v.target.checked))}),i.jsx(Gn,{label:t("unifiedCanvas.snapToGrid"),isChecked:d,onChange:m}),i.jsx(Gn,{label:t("unifiedCanvas.darkenOutsideSelection"),isChecked:o,onChange:v=>e(v5(v.target.checked))}),i.jsx(Gn,{label:t("unifiedCanvas.autoSaveToGallery"),isChecked:n,onChange:v=>e(b5(v.target.checked))}),i.jsx(Gn,{label:t("unifiedCanvas.saveBoxRegionOnly"),isChecked:r,onChange:v=>e(y5(v.target.checked))}),i.jsx(Gn,{label:t("unifiedCanvas.limitStrokesToBox"),isChecked:p,onChange:v=>e(x5(v.target.checked))}),i.jsx(Gn,{label:t("unifiedCanvas.showCanvasDebugInfo"),isChecked:s,onChange:v=>e(w5(v.target.checked))}),i.jsx(Gn,{label:t("unifiedCanvas.antialiasing"),isChecked:h,onChange:v=>e(S5(v.target.checked))}),i.jsx(C8,{})]})})},Hce=fe([mn,lr,vo],(e,t,n)=>{const{isProcessing:r}=n,{tool:o,brushColor:s,brushSize:a}=e;return{tool:o,isStaging:t,isProcessing:r,brushColor:s,brushSize:a}},{memoizeOptions:{resultEqualityCheck:Zt}}),Wce=()=>{const e=te(),{tool:t,brushColor:n,brushSize:r,isStaging:o}=z(Hce),{t:s}=ye();rt(["b"],()=>{a()},{enabled:()=>!o,preventDefault:!0},[]),rt(["e"],()=>{c()},{enabled:()=>!o,preventDefault:!0},[t]),rt(["c"],()=>{d()},{enabled:()=>!o,preventDefault:!0},[t]),rt(["shift+f"],()=>{p()},{enabled:()=>!o,preventDefault:!0}),rt(["delete","backspace"],()=>{h()},{enabled:()=>!o,preventDefault:!0}),rt(["BracketLeft"],()=>{e(nc(Math.max(r-5,5)))},{enabled:()=>!o,preventDefault:!0},[r]),rt(["BracketRight"],()=>{e(nc(Math.min(r+5,500)))},{enabled:()=>!o,preventDefault:!0},[r]),rt(["Shift+BracketLeft"],()=>{e(rc({...n,a:Es(n.a-.05,.05,1)}))},{enabled:()=>!o,preventDefault:!0},[n]),rt(["Shift+BracketRight"],()=>{e(rc({...n,a:Es(n.a+.05,.05,1)}))},{enabled:()=>!o,preventDefault:!0},[n]);const a=()=>e(ea("brush")),c=()=>e(ea("eraser")),d=()=>e(ea("colorPicker")),p=()=>e(C5()),h=()=>e(k5());return i.jsxs(rr,{isAttached:!0,children:[i.jsx(Le,{"aria-label":`${s("unifiedCanvas.brush")} (B)`,tooltip:`${s("unifiedCanvas.brush")} (B)`,icon:i.jsx(_P,{}),isChecked:t==="brush"&&!o,onClick:a,isDisabled:o}),i.jsx(Le,{"aria-label":`${s("unifiedCanvas.eraser")} (E)`,tooltip:`${s("unifiedCanvas.eraser")} (E)`,icon:i.jsx(yP,{}),isChecked:t==="eraser"&&!o,isDisabled:o,onClick:c}),i.jsx(Le,{"aria-label":`${s("unifiedCanvas.fillBoundingBox")} (Shift+F)`,tooltip:`${s("unifiedCanvas.fillBoundingBox")} (Shift+F)`,icon:i.jsx(SP,{}),isDisabled:o,onClick:p}),i.jsx(Le,{"aria-label":`${s("unifiedCanvas.eraseBoundingBox")} (Del/Backspace)`,tooltip:`${s("unifiedCanvas.eraseBoundingBox")} (Del/Backspace)`,icon:i.jsx(gl,{style:{transform:"rotate(45deg)"}}),isDisabled:o,onClick:h}),i.jsx(Le,{"aria-label":`${s("unifiedCanvas.colorPicker")} (C)`,tooltip:`${s("unifiedCanvas.colorPicker")} (C)`,icon:i.jsx(wP,{}),isChecked:t==="colorPicker"&&!o,isDisabled:o,onClick:d}),i.jsx(vl,{triggerComponent:i.jsx(Le,{"aria-label":s("unifiedCanvas.brushOptions"),tooltip:s("unifiedCanvas.brushOptions"),icon:i.jsx(ry,{})}),children:i.jsxs(F,{minWidth:60,direction:"column",gap:4,width:"100%",children:[i.jsx(F,{gap:4,justifyContent:"space-between",children:i.jsx(_t,{label:s("unifiedCanvas.brushSize"),value:r,withInput:!0,onChange:m=>e(nc(m)),sliderNumberInputProps:{max:500}})}),i.jsx(rm,{sx:{width:"100%",paddingTop:2,paddingBottom:2},pickerColor:n,onChange:m=>e(rc(m))})]})})]})},Vce=fe([mn,Kn,vo],(e,t,n)=>{const{pastLayerStates:r}=e;return{canUndo:r.length>0&&!n.isProcessing,activeTabName:t}},{memoizeOptions:{resultEqualityCheck:Zt}});function k8(){const e=te(),{t}=ye(),{canUndo:n,activeTabName:r}=z(Vce),o=()=>{e(AD())};return rt(["meta+z","ctrl+z"],()=>{o()},{enabled:()=>n,preventDefault:!0},[r,n]),i.jsx(Le,{"aria-label":`${t("unifiedCanvas.undo")} (Ctrl+Z)`,tooltip:`${t("unifiedCanvas.undo")} (Ctrl+Z)`,icon:i.jsx(oy,{}),onClick:o,isDisabled:!n})}const Uce=fe([vo,mn,lr],(e,t,n)=>{const{isProcessing:r}=e,{tool:o,shouldCropToBoundingBoxOnSave:s,layer:a,isMaskEnabled:c}=t;return{isProcessing:r,isStaging:n,isMaskEnabled:c,tool:o,layer:a,shouldCropToBoundingBoxOnSave:s}},{memoizeOptions:{resultEqualityCheck:Zt}}),Gce=()=>{const e=te(),{isProcessing:t,isStaging:n,isMaskEnabled:r,layer:o,tool:s}=z(Uce),a=Ea(),{t:c}=ye(),{isClipboardAPIAvailable:d}=Gy(),{getUploadButtonProps:p,getUploadInputProps:h}=Jm({postUploadAction:{type:"SET_CANVAS_INITIAL_IMAGE"}});rt(["v"],()=>{m()},{enabled:()=>!n,preventDefault:!0},[]),rt(["r"],()=>{b()},{enabled:()=>!0,preventDefault:!0},[a]),rt(["shift+m"],()=>{y()},{enabled:()=>!n,preventDefault:!0},[a,t]),rt(["shift+s"],()=>{S()},{enabled:()=>!n,preventDefault:!0},[a,t]),rt(["meta+c","ctrl+c"],()=>{_()},{enabled:()=>!n&&d,preventDefault:!0},[a,t,d]),rt(["shift+d"],()=>{k()},{enabled:()=>!n,preventDefault:!0},[a,t]);const m=()=>e(ea("move")),v=w8(()=>b(!1),()=>b(!0)),b=(I=!1)=>{const E=Ea();if(!E)return;const O=E.getClientRect({skipTransform:!0});e(_5({contentRect:O,shouldScaleTo1:I}))},w=()=>{e(rb()),e(im())},y=()=>{e(P5())},S=()=>{e(j5())},_=()=>{d&&e(I5())},k=()=>{e(E5())},j=I=>{const E=I;e(Wp(E)),E==="mask"&&!r&&e(wd(!0))};return i.jsxs(F,{sx:{alignItems:"center",gap:2,flexWrap:"wrap"},children:[i.jsx(Ee,{w:24,children:i.jsx(Xr,{tooltip:`${c("unifiedCanvas.layer")} (Q)`,value:o,data:O5,onChange:j,disabled:n})}),i.jsx(zce,{}),i.jsx(Wce,{}),i.jsxs(rr,{isAttached:!0,children:[i.jsx(Le,{"aria-label":`${c("unifiedCanvas.move")} (V)`,tooltip:`${c("unifiedCanvas.move")} (V)`,icon:i.jsx(gP,{}),isChecked:s==="move"||n,onClick:m}),i.jsx(Le,{"aria-label":`${c("unifiedCanvas.resetView")} (R)`,tooltip:`${c("unifiedCanvas.resetView")} (R)`,icon:i.jsx(bP,{}),onClick:v})]}),i.jsxs(rr,{isAttached:!0,children:[i.jsx(Le,{"aria-label":`${c("unifiedCanvas.mergeVisible")} (Shift+M)`,tooltip:`${c("unifiedCanvas.mergeVisible")} (Shift+M)`,icon:i.jsx(CP,{}),onClick:y,isDisabled:n}),i.jsx(Le,{"aria-label":`${c("unifiedCanvas.saveToGallery")} (Shift+S)`,tooltip:`${c("unifiedCanvas.saveToGallery")} (Shift+S)`,icon:i.jsx(Dm,{}),onClick:S,isDisabled:n}),d&&i.jsx(Le,{"aria-label":`${c("unifiedCanvas.copyToClipboard")} (Cmd/Ctrl+C)`,tooltip:`${c("unifiedCanvas.copyToClipboard")} (Cmd/Ctrl+C)`,icon:i.jsx(Vc,{}),onClick:_,isDisabled:n}),i.jsx(Le,{"aria-label":`${c("unifiedCanvas.downloadAsImage")} (Shift+D)`,tooltip:`${c("unifiedCanvas.downloadAsImage")} (Shift+D)`,icon:i.jsx(ny,{}),onClick:k,isDisabled:n})]}),i.jsxs(rr,{isAttached:!0,children:[i.jsx(k8,{}),i.jsx(S8,{})]}),i.jsxs(rr,{isAttached:!0,children:[i.jsx(Le,{"aria-label":`${c("common.upload")}`,tooltip:`${c("common.upload")}`,icon:i.jsx(zd,{}),isDisabled:n,...p()}),i.jsx("input",{...h()}),i.jsx(Le,{"aria-label":`${c("unifiedCanvas.clearCanvas")}`,tooltip:`${c("unifiedCanvas.clearCanvas")}`,icon:i.jsx(us,{}),onClick:w,colorScheme:"error",isDisabled:n})]}),i.jsx(rr,{isAttached:!0,children:i.jsx(Fce,{})})]})};function qce(){const e=te(),t=z(o=>o.canvas.brushSize),{t:n}=ye(),r=z(lr);return rt(["BracketLeft"],()=>{e(nc(Math.max(t-5,5)))},{enabled:()=>!r,preventDefault:!0},[t]),rt(["BracketRight"],()=>{e(nc(Math.min(t+5,500)))},{enabled:()=>!r,preventDefault:!0},[t]),i.jsx(_t,{label:n("unifiedCanvas.brushSize"),value:t,withInput:!0,onChange:o=>e(nc(o)),sliderNumberInputProps:{max:500},isCompact:!0})}const Kce=fe([mn,lr],(e,t)=>{const{brushColor:n,maskColor:r,layer:o}=e;return{brushColor:n,maskColor:r,layer:o,isStaging:t}},{memoizeOptions:{resultEqualityCheck:Zt}});function Xce(){const e=te(),{brushColor:t,maskColor:n,layer:r,isStaging:o}=z(Kce),s=()=>{if(r==="base")return`rgba(${t.r},${t.g},${t.b},${t.a})`;if(r==="mask")return`rgba(${n.r},${n.g},${n.b},${n.a})`};return rt(["shift+BracketLeft"],()=>{e(rc({...t,a:Es(t.a-.05,.05,1)}))},{enabled:()=>!o,preventDefault:!0},[t]),rt(["shift+BracketRight"],()=>{e(rc({...t,a:Es(t.a+.05,.05,1)}))},{enabled:()=>!o,preventDefault:!0},[t]),i.jsx(vl,{triggerComponent:i.jsx(Ee,{sx:{width:7,height:7,minWidth:7,minHeight:7,borderRadius:"full",bg:s(),cursor:"pointer"}}),children:i.jsxs(F,{minWidth:60,direction:"column",gap:4,width:"100%",children:[r==="base"&&i.jsx(rm,{sx:{width:"100%",paddingTop:2,paddingBottom:2},pickerColor:t,onChange:a=>e(rc(a))}),r==="mask"&&i.jsx(rm,{sx:{width:"100%",paddingTop:2,paddingBottom:2},pickerColor:n,onChange:a=>e(h5(a))})]})})}function _8(){return i.jsxs(F,{columnGap:4,alignItems:"center",children:[i.jsx(qce,{}),i.jsx(Xce,{})]})}function Yce(){const e=te(),t=z(r=>r.canvas.shouldRestrictStrokesToBox),{t:n}=ye();return i.jsx(Gn,{label:n("unifiedCanvas.betaLimitToBox"),isChecked:t,onChange:r=>e(x5(r.target.checked))})}function Qce(){return i.jsxs(F,{gap:4,alignItems:"center",children:[i.jsx(_8,{}),i.jsx(Yce,{})]})}function Jce(){const e=te(),{t}=ye(),n=()=>e(lb());return i.jsx(Jt,{size:"sm",leftIcon:i.jsx(us,{}),onClick:n,tooltip:`${t("unifiedCanvas.clearMask")} (Shift+C)`,children:t("unifiedCanvas.betaClear")})}function Zce(){const e=z(o=>o.canvas.isMaskEnabled),t=te(),{t:n}=ye(),r=()=>t(wd(!e));return i.jsx(Gn,{label:`${n("unifiedCanvas.enableMask")} (H)`,isChecked:e,onChange:r})}function eue(){const e=te(),{t}=ye(),n=z(r=>r.canvas.shouldPreserveMaskedArea);return i.jsx(Gn,{label:t("unifiedCanvas.betaPreserveMasked"),isChecked:n,onChange:r=>e(p5(r.target.checked))})}function tue(){return i.jsxs(F,{gap:4,alignItems:"center",children:[i.jsx(_8,{}),i.jsx(Zce,{}),i.jsx(eue,{}),i.jsx(Jce,{})]})}function nue(){const e=z(r=>r.canvas.shouldDarkenOutsideBoundingBox),t=te(),{t:n}=ye();return i.jsx(Gn,{label:n("unifiedCanvas.betaDarkenOutside"),isChecked:e,onChange:r=>t(v5(r.target.checked))})}function rue(){const e=z(r=>r.canvas.shouldShowGrid),t=te(),{t:n}=ye();return i.jsx(Gn,{label:n("unifiedCanvas.showGrid"),isChecked:e,onChange:r=>t(g5(r.target.checked))})}function oue(){const e=z(o=>o.canvas.shouldSnapToGrid),t=te(),{t:n}=ye(),r=o=>t(Qu(o.target.checked));return i.jsx(Gn,{label:`${n("unifiedCanvas.snapToGrid")} (N)`,isChecked:e,onChange:r})}function sue(){return i.jsxs(F,{alignItems:"center",gap:4,children:[i.jsx(rue,{}),i.jsx(oue,{}),i.jsx(nue,{})]})}const aue=fe([mn],e=>{const{tool:t,layer:n}=e;return{tool:t,layer:n}},{memoizeOptions:{resultEqualityCheck:Zt}});function iue(){const{tool:e,layer:t}=z(aue);return i.jsxs(F,{height:8,minHeight:8,maxHeight:8,alignItems:"center",children:[t=="base"&&["brush","eraser","colorPicker"].includes(e)&&i.jsx(Qce,{}),t=="mask"&&["brush","eraser","colorPicker"].includes(e)&&i.jsx(tue,{}),e=="move"&&i.jsx(sue,{})]})}const lue=fe([mn],e=>{const{shouldAutoSave:t,shouldCropToBoundingBoxOnSave:n,shouldShowCanvasDebugInfo:r,shouldShowIntermediates:o,shouldAntialias:s}=e;return{shouldAutoSave:t,shouldCropToBoundingBoxOnSave:n,shouldShowCanvasDebugInfo:r,shouldShowIntermediates:o,shouldAntialias:s}},{memoizeOptions:{resultEqualityCheck:Zt}}),cue=()=>{const e=te(),{t}=ye(),{shouldAutoSave:n,shouldCropToBoundingBoxOnSave:r,shouldShowCanvasDebugInfo:o,shouldShowIntermediates:s,shouldAntialias:a}=z(lue);return i.jsx(vl,{isLazy:!1,triggerComponent:i.jsx(Le,{tooltip:t("unifiedCanvas.canvasSettings"),tooltipProps:{placement:"bottom"},"aria-label":t("unifiedCanvas.canvasSettings"),icon:i.jsx(sy,{})}),children:i.jsxs(F,{direction:"column",gap:2,children:[i.jsx(Gn,{label:t("unifiedCanvas.showIntermediates"),isChecked:s,onChange:c=>e(m5(c.target.checked))}),i.jsx(Gn,{label:t("unifiedCanvas.autoSaveToGallery"),isChecked:n,onChange:c=>e(b5(c.target.checked))}),i.jsx(Gn,{label:t("unifiedCanvas.saveBoxRegionOnly"),isChecked:r,onChange:c=>e(y5(c.target.checked))}),i.jsx(Gn,{label:t("unifiedCanvas.showCanvasDebugInfo"),isChecked:o,onChange:c=>e(w5(c.target.checked))}),i.jsx(Gn,{label:t("unifiedCanvas.antialiasing"),isChecked:a,onChange:c=>e(S5(c.target.checked))}),i.jsx(C8,{})]})})};function uue(){const e=z(lr),t=Ea(),{isClipboardAPIAvailable:n}=Gy(),r=z(c=>c.system.isProcessing),o=te(),{t:s}=ye();rt(["meta+c","ctrl+c"],()=>{a()},{enabled:()=>!e&&n,preventDefault:!0},[t,r,n]);const a=f.useCallback(()=>{n&&o(I5())},[o,n]);return n?i.jsx(Le,{"aria-label":`${s("unifiedCanvas.copyToClipboard")} (Cmd/Ctrl+C)`,tooltip:`${s("unifiedCanvas.copyToClipboard")} (Cmd/Ctrl+C)`,icon:i.jsx(Vc,{}),onClick:a,isDisabled:e}):null}function due(){const e=te(),{t}=ye(),n=Ea(),r=z(lr);rt(["shift+d"],()=>{o()},{enabled:()=>!r,preventDefault:!0},[n]);const o=()=>{e(E5())};return i.jsx(Le,{"aria-label":`${t("unifiedCanvas.downloadAsImage")} (Shift+D)`,tooltip:`${t("unifiedCanvas.downloadAsImage")} (Shift+D)`,icon:i.jsx(ny,{}),onClick:o,isDisabled:r})}function fue(){const e=z(lr),{getUploadButtonProps:t,getUploadInputProps:n}=Jm({postUploadAction:{type:"SET_CANVAS_INITIAL_IMAGE"}}),{t:r}=ye();return i.jsxs(i.Fragment,{children:[i.jsx(Le,{"aria-label":r("common.upload"),tooltip:r("common.upload"),icon:i.jsx(zd,{}),isDisabled:e,...t()}),i.jsx("input",{...n()})]})}const pue=fe([mn,lr],(e,t)=>{const{layer:n,isMaskEnabled:r}=e;return{layer:n,isMaskEnabled:r,isStaging:t}},{memoizeOptions:{resultEqualityCheck:Zt}});function hue(){const e=te(),{t}=ye(),{layer:n,isMaskEnabled:r,isStaging:o}=z(pue),s=()=>{e(Wp(n==="mask"?"base":"mask"))};rt(["q"],()=>{s()},{enabled:()=>!o,preventDefault:!0},[n]);const a=c=>{const d=c;e(Wp(d)),d==="mask"&&!r&&e(wd(!0))};return i.jsx(Xr,{tooltip:`${t("unifiedCanvas.layer")} (Q)`,"aria-label":`${t("unifiedCanvas.layer")} (Q)`,value:n,data:O5,onChange:a,disabled:o,w:"full"})}function mue(){const e=te(),{t}=ye(),n=Ea(),r=z(lr),o=z(a=>a.system.isProcessing);rt(["shift+m"],()=>{s()},{enabled:()=>!r,preventDefault:!0},[n,o]);const s=()=>{e(P5())};return i.jsx(Le,{"aria-label":`${t("unifiedCanvas.mergeVisible")} (Shift+M)`,tooltip:`${t("unifiedCanvas.mergeVisible")} (Shift+M)`,icon:i.jsx(CP,{}),onClick:s,isDisabled:r})}function gue(){const e=z(s=>s.canvas.tool),t=z(lr),n=te(),{t:r}=ye();rt(["v"],()=>{o()},{enabled:()=>!t,preventDefault:!0},[]);const o=()=>n(ea("move"));return i.jsx(Le,{"aria-label":`${r("unifiedCanvas.move")} (V)`,tooltip:`${r("unifiedCanvas.move")} (V)`,icon:i.jsx(gP,{}),isChecked:e==="move"||t,onClick:o})}function vue(){const e=z(s=>s.ui.shouldPinParametersPanel),t=z(s=>s.ui.shouldShowParametersPanel),n=te(),{t:r}=ye(),o=()=>{n(cb(!0)),e&&n(ko())};return!e||!t?i.jsxs(F,{flexDirection:"column",gap:2,children:[i.jsx(Le,{tooltip:`${r("parameters.showOptionsPanel")} (O)`,tooltipProps:{placement:"top"},"aria-label":r("parameters.showOptionsPanel"),onClick:o,children:i.jsx(ry,{})}),i.jsx(F,{children:i.jsx(Jy,{iconButton:!0})}),i.jsx(F,{children:i.jsx(ng,{width:"100%",height:"40px",btnGroupWidth:"100%"})})]}):null}function bue(){const e=te(),{t}=ye(),n=z(lr),r=()=>{e(rb()),e(im())};return i.jsx(Le,{"aria-label":t("unifiedCanvas.clearCanvas"),tooltip:t("unifiedCanvas.clearCanvas"),icon:i.jsx(us,{}),onClick:r,isDisabled:n,colorScheme:"error"})}function yue(){const e=Ea(),t=te(),{t:n}=ye();rt(["r"],()=>{o()},{enabled:()=>!0,preventDefault:!0},[e]);const r=w8(()=>o(!1),()=>o(!0)),o=(s=!1)=>{const a=Ea();if(!a)return;const c=a.getClientRect({skipTransform:!0});t(_5({contentRect:c,shouldScaleTo1:s}))};return i.jsx(Le,{"aria-label":`${n("unifiedCanvas.resetView")} (R)`,tooltip:`${n("unifiedCanvas.resetView")} (R)`,icon:i.jsx(bP,{}),onClick:r})}function xue(){const e=z(lr),t=Ea(),n=z(a=>a.system.isProcessing),r=te(),{t:o}=ye();rt(["shift+s"],()=>{s()},{enabled:()=>!e,preventDefault:!0},[t,n]);const s=()=>{r(j5())};return i.jsx(Le,{"aria-label":`${o("unifiedCanvas.saveToGallery")} (Shift+S)`,tooltip:`${o("unifiedCanvas.saveToGallery")} (Shift+S)`,icon:i.jsx(Dm,{}),onClick:s,isDisabled:e})}const wue=fe([mn,lr,vo],(e,t,n)=>{const{isProcessing:r}=n,{tool:o}=e;return{tool:o,isStaging:t,isProcessing:r}},{memoizeOptions:{resultEqualityCheck:Zt}}),Sue=()=>{const e=te(),{t}=ye(),{tool:n,isStaging:r}=z(wue);rt(["b"],()=>{o()},{enabled:()=>!r,preventDefault:!0},[]),rt(["e"],()=>{s()},{enabled:()=>!r,preventDefault:!0},[n]),rt(["c"],()=>{a()},{enabled:()=>!r,preventDefault:!0},[n]),rt(["shift+f"],()=>{c()},{enabled:()=>!r,preventDefault:!0}),rt(["delete","backspace"],()=>{d()},{enabled:()=>!r,preventDefault:!0});const o=()=>e(ea("brush")),s=()=>e(ea("eraser")),a=()=>e(ea("colorPicker")),c=()=>e(C5()),d=()=>e(k5());return i.jsxs(F,{flexDirection:"column",gap:2,children:[i.jsxs(rr,{children:[i.jsx(Le,{"aria-label":`${t("unifiedCanvas.brush")} (B)`,tooltip:`${t("unifiedCanvas.brush")} (B)`,icon:i.jsx(_P,{}),isChecked:n==="brush"&&!r,onClick:o,isDisabled:r}),i.jsx(Le,{"aria-label":`${t("unifiedCanvas.eraser")} (E)`,tooltip:`${t("unifiedCanvas.eraser")} (B)`,icon:i.jsx(yP,{}),isChecked:n==="eraser"&&!r,isDisabled:r,onClick:s})]}),i.jsxs(rr,{children:[i.jsx(Le,{"aria-label":`${t("unifiedCanvas.fillBoundingBox")} (Shift+F)`,tooltip:`${t("unifiedCanvas.fillBoundingBox")} (Shift+F)`,icon:i.jsx(SP,{}),isDisabled:r,onClick:c}),i.jsx(Le,{"aria-label":`${t("unifiedCanvas.eraseBoundingBox")} (Del/Backspace)`,tooltip:`${t("unifiedCanvas.eraseBoundingBox")} (Del/Backspace)`,icon:i.jsx(gl,{style:{transform:"rotate(45deg)"}}),isDisabled:r,onClick:d})]}),i.jsx(Le,{"aria-label":`${t("unifiedCanvas.colorPicker")} (C)`,tooltip:`${t("unifiedCanvas.colorPicker")} (C)`,icon:i.jsx(wP,{}),isChecked:n==="colorPicker"&&!r,isDisabled:r,onClick:a,width:"max-content"})]})},Cue=()=>i.jsxs(F,{flexDirection:"column",rowGap:2,width:"min-content",children:[i.jsx(hue,{}),i.jsx(Sue,{}),i.jsxs(F,{gap:2,children:[i.jsx(gue,{}),i.jsx(yue,{})]}),i.jsxs(F,{columnGap:2,children:[i.jsx(mue,{}),i.jsx(xue,{})]}),i.jsxs(F,{columnGap:2,children:[i.jsx(uue,{}),i.jsx(due,{})]}),i.jsxs(F,{gap:2,children:[i.jsx(k8,{}),i.jsx(S8,{})]}),i.jsxs(F,{gap:2,children:[i.jsx(fue,{}),i.jsx(bue,{})]}),i.jsx(cue,{}),i.jsx(vue,{})]}),kue=fe([mn,La],(e,t)=>{const{doesCanvasNeedScaling:n}=e,{shouldUseCanvasBetaLayout:r}=t;return{doesCanvasNeedScaling:n,shouldUseCanvasBetaLayout:r}},Ge),bv={id:"canvas-intial-image",actionType:"SET_CANVAS_INITIAL_IMAGE"},_ue=()=>{const e=te(),{doesCanvasNeedScaling:t,shouldUseCanvasBetaLayout:n}=z(kue),{isOver:r,setNodeRef:o,active:s}=Q1({id:"unifiedCanvas",data:bv});return f.useLayoutEffect(()=>{const a=()=>{e(ko())};return window.addEventListener("resize",a),()=>window.removeEventListener("resize",a)},[e]),n?i.jsx(Ee,{layerStyle:"first",ref:o,tabIndex:0,sx:{w:"full",h:"full",p:4,borderRadius:"base"},children:i.jsxs(F,{sx:{w:"full",h:"full",gap:4},children:[i.jsx(Cue,{}),i.jsxs(F,{sx:{flexDir:"column",w:"full",h:"full",gap:4,position:"relative"},children:[i.jsx(iue,{}),i.jsxs(Ee,{sx:{w:"full",h:"full",position:"relative"},children:[t?i.jsx(b_,{}):i.jsx(v_,{}),Tp(bv,s)&&i.jsx(ch,{isOver:r,label:"Set Canvas Initial Image"})]})]})]})}):i.jsx(Ee,{ref:o,tabIndex:-1,sx:{layerStyle:"first",w:"full",h:"full",p:4,borderRadius:"base"},children:i.jsxs(F,{sx:{flexDirection:"column",alignItems:"center",gap:4,w:"full",h:"full"},children:[i.jsx(Gce,{}),i.jsx(F,{sx:{flexDirection:"column",alignItems:"center",justifyContent:"center",gap:4,w:"full",h:"full"},children:i.jsxs(Ee,{sx:{w:"full",h:"full",position:"relative"},children:[t?i.jsx(b_,{}):i.jsx(v_,{}),Tp(bv,s)&&i.jsx(ch,{isOver:r,label:"Set Canvas Initial Image"})]})})]})})},Pue=f.memo(_ue),jue=fe([Ye],({generation:e})=>{const{infillMethod:t}=e;return{infillMethod:t}},Ge),Iue=()=>{const e=te(),{infillMethod:t}=z(jue),{data:n,isLoading:r}=q_(),o=n==null?void 0:n.infill_methods,{t:s}=ye(),a=f.useCallback(c=>{e(TD(c))},[e]);return i.jsx(Xr,{disabled:(o==null?void 0:o.length)===0,placeholder:r?"Loading...":void 0,label:s("parameters.infillMethod"),value:t,data:o??[],onChange:a})},Eue=f.memo(Iue),Oue=fe([Di],e=>{const{tileSize:t,infillMethod:n}=e;return{tileSize:t,infillMethod:n}},Ge),Rue=()=>{const e=te(),{tileSize:t,infillMethod:n}=z(Oue),{t:r}=ye(),o=f.useCallback(a=>{e(gw(a))},[e]),s=f.useCallback(()=>{e(gw(32))},[e]);return i.jsx(_t,{isDisabled:n!=="tile",label:r("parameters.tileSize"),min:16,max:64,sliderNumberInputProps:{max:256},value:t,onChange:o,withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:s})},Mue=f.memo(Rue),Due=fe([mn],e=>{const{boundingBoxScaleMethod:t}=e;return{boundingBoxScale:t}},Ge),Aue=()=>{const e=te(),{boundingBoxScale:t}=z(Due),{t:n}=ye(),r=o=>{e($D(o))};return i.jsx(ar,{label:n("parameters.scaleBeforeProcessing"),data:ND,value:t,onChange:r})},Tue=f.memo(Aue),Nue=fe([Di,vo,mn],(e,t,n)=>{const{scaledBoundingBoxDimensions:r,boundingBoxScaleMethod:o}=n;return{scaledBoundingBoxDimensions:r,isManual:o==="manual"}},Ge),$ue=()=>{const e=te(),{isManual:t,scaledBoundingBoxDimensions:n}=z(Nue),{t:r}=ye(),o=a=>{e(Vp({...n,height:Math.floor(a)}))},s=()=>{e(Vp({...n,height:Math.floor(512)}))};return i.jsx(_t,{isDisabled:!t,label:r("parameters.scaledHeight"),min:64,max:1024,step:64,value:n.height,onChange:o,sliderNumberInputProps:{max:4096},withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:s})},zue=f.memo($ue),Lue=fe([mn],e=>{const{boundingBoxScaleMethod:t,scaledBoundingBoxDimensions:n}=e;return{scaledBoundingBoxDimensions:n,isManual:t==="manual"}},Ge),Bue=()=>{const e=te(),{isManual:t,scaledBoundingBoxDimensions:n}=z(Lue),{t:r}=ye(),o=a=>{e(Vp({...n,width:Math.floor(a)}))},s=()=>{e(Vp({...n,width:Math.floor(512)}))};return i.jsx(_t,{isDisabled:!t,label:r("parameters.scaledWidth"),min:64,max:1024,step:64,value:n.width,onChange:o,sliderNumberInputProps:{max:4096},withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:s})},Fue=f.memo(Bue),Hue=()=>{const{t:e}=ye();return i.jsx(Ro,{label:e("parameters.infillScalingHeader"),children:i.jsxs(F,{sx:{gap:2,flexDirection:"column"},children:[i.jsx(Eue,{}),i.jsx(Mue,{}),i.jsx(Tue,{}),i.jsx(Fue,{}),i.jsx(zue,{})]})})},Wue=f.memo(Hue);function Vue(){const e=te(),t=z(r=>r.generation.seamBlur),{t:n}=ye();return i.jsx(_t,{label:n("parameters.seamBlur"),min:0,max:64,sliderNumberInputProps:{max:512},value:t,onChange:r=>{e(vw(r))},withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:()=>{e(vw(16))}})}function Uue(){const e=te(),{t}=ye(),n=z(r=>r.generation.seamSize);return i.jsx(_t,{label:t("parameters.seamSize"),min:1,max:256,sliderNumberInputProps:{max:512},value:n,onChange:r=>{e(bw(r))},withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:()=>e(bw(96))})}function Gue(){const{t:e}=ye(),t=z(r=>r.generation.seamSteps),n=te();return i.jsx(_t,{label:e("parameters.seamSteps"),min:1,max:100,sliderNumberInputProps:{max:999},value:t,onChange:r=>{n(yw(r))},withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:()=>{n(yw(30))}})}function que(){const e=te(),{t}=ye(),n=z(r=>r.generation.seamStrength);return i.jsx(_t,{label:t("parameters.seamStrength"),min:.01,max:.99,step:.01,value:n,onChange:r=>{e(xw(r))},withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:()=>{e(xw(.7))}})}const Kue=()=>{const{t:e}=ye();return i.jsxs(Ro,{label:e("parameters.seamCorrectionHeader"),children:[i.jsx(Uue,{}),i.jsx(Vue,{}),i.jsx(que,{}),i.jsx(Gue,{})]})},Xue=f.memo(Kue),Yue=fe([Ye,lr],({canvas:e,generation:t},n)=>{const{boundingBoxDimensions:r}=e,{aspectRatio:o}=t;return{boundingBoxDimensions:r,isStaging:n,aspectRatio:o}},Ge),Que=()=>{const e=te(),{boundingBoxDimensions:t,isStaging:n,aspectRatio:r}=z(Yue),{t:o}=ye(),s=c=>{if(e(Js({...t,height:Math.floor(c)})),r){const d=Ss(c*r,64);e(Js({width:d,height:Math.floor(c)}))}},a=()=>{if(e(Js({...t,height:Math.floor(512)})),r){const c=Ss(512*r,64);e(Js({width:c,height:Math.floor(512)}))}};return i.jsx(_t,{label:o("parameters.boundingBoxHeight"),min:64,max:1024,step:64,value:t.height,onChange:s,isDisabled:n,sliderNumberInputProps:{max:4096},withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:a})},Jue=f.memo(Que),Zue=fe([Ye,lr],({canvas:e,generation:t},n)=>{const{boundingBoxDimensions:r}=e,{aspectRatio:o}=t;return{boundingBoxDimensions:r,isStaging:n,aspectRatio:o}},Ge),ede=()=>{const e=te(),{boundingBoxDimensions:t,isStaging:n,aspectRatio:r}=z(Zue),{t:o}=ye(),s=c=>{if(e(Js({...t,width:Math.floor(c)})),r){const d=Ss(c/r,64);e(Js({width:Math.floor(c),height:d}))}},a=()=>{if(e(Js({...t,width:Math.floor(512)})),r){const c=Ss(512/r,64);e(Js({width:Math.floor(512),height:c}))}};return i.jsx(_t,{label:o("parameters.boundingBoxWidth"),min:64,max:1024,step:64,value:t.width,onChange:s,isDisabled:n,sliderNumberInputProps:{max:4096},withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:a})},tde=f.memo(ede);function y_(){const e=te(),{t}=ye();return i.jsxs(F,{sx:{gap:2,p:4,borderRadius:4,flexDirection:"column",w:"full",bg:"base.150",_dark:{bg:"base.750"}},children:[i.jsxs(F,{alignItems:"center",gap:2,children:[i.jsx(qe,{sx:{fontSize:"sm",width:"full",color:"base.700",_dark:{color:"base.300"}},children:t("parameters.aspectRatio")}),i.jsx(hl,{}),i.jsx(TO,{}),i.jsx(Le,{tooltip:t("ui.swapSizes"),"aria-label":t("ui.swapSizes"),size:"sm",icon:i.jsx(pO,{}),fontSize:20,onClick:()=>e(zD())})]}),i.jsx(tde,{}),i.jsx(Jue,{})]})}const nde=fe(Ye,({ui:e,generation:t})=>{const{shouldUseSliders:n}=e,{shouldRandomizeSeed:r}=t;return{shouldUseSliders:n,activeLabel:r?void 0:"Manual Seed"}},Ge),rde=()=>{const{shouldUseSliders:e,activeLabel:t}=z(nde);return i.jsx(Ro,{label:"General",activeLabel:t,defaultIsOpen:!0,children:i.jsxs(F,{sx:{flexDirection:"column",gap:3},children:[e?i.jsxs(i.Fragment,{children:[i.jsx(wi,{}),i.jsx(Ci,{}),i.jsx(xi,{}),i.jsx(Si,{}),i.jsx(Ee,{pt:2,children:i.jsx(ki,{})}),i.jsx(y_,{})]}):i.jsxs(i.Fragment,{children:[i.jsxs(F,{gap:3,children:[i.jsx(wi,{}),i.jsx(Ci,{}),i.jsx(xi,{})]}),i.jsx(Si,{}),i.jsx(Ee,{pt:2,children:i.jsx(ki,{})}),i.jsx(y_,{})]}),i.jsx(VO,{})]})})},ode=f.memo(rde),P8=()=>i.jsxs(i.Fragment,{children:[i.jsx(ax,{}),i.jsx(qd,{}),i.jsx(ode,{}),i.jsx(ox,{}),i.jsx(nx,{}),i.jsx(Ud,{}),i.jsx(sx,{}),i.jsx(Xue,{}),i.jsx(Wue,{}),i.jsx(rx,{})]}),sde=()=>i.jsxs(F,{sx:{gap:4,w:"full",h:"full"},children:[i.jsx(tx,{children:i.jsx(P8,{})}),i.jsx(Pue,{})]}),ade=f.memo(sde),ide=[{id:"txt2img",translationKey:"common.txt2img",icon:i.jsx(no,{as:pW,sx:{boxSize:6,pointerEvents:"none"}}),content:i.jsx(Bie,{})},{id:"img2img",translationKey:"common.img2img",icon:i.jsx(no,{as:ll,sx:{boxSize:6,pointerEvents:"none"}}),content:i.jsx(Boe,{})},{id:"unifiedCanvas",translationKey:"common.unifiedCanvas",icon:i.jsx(no,{as:Nee,sx:{boxSize:6,pointerEvents:"none"}}),content:i.jsx(ade,{})},{id:"nodes",translationKey:"common.nodes",icon:i.jsx(no,{as:Tee,sx:{boxSize:6,pointerEvents:"none"}}),content:i.jsx(Nie,{})},{id:"modelManager",translationKey:"modelManager.modelManager",icon:i.jsx(no,{as:aW,sx:{boxSize:6,pointerEvents:"none"}}),content:i.jsx(Lse,{})}],lde=fe([hO,vo],(e,t)=>{const{disabledTabs:n}=e,{isNodesEnabled:r}=t;return ide.filter(s=>s.id==="nodes"?r&&!n.includes(s.id):!n.includes(s.id))},{memoizeOptions:{resultEqualityCheck:Zt}}),cde=350,yv=20,j8=["modelManager"],ude=()=>{const e=z(LD),t=z(Kn),n=z(lde),{shouldPinGallery:r,shouldPinParametersPanel:o,shouldShowGallery:s}=z(y=>y.ui),{t:a}=ye(),c=te();rt("f",()=>{c(BD()),(r||o)&&c(ko())},[r,o]);const d=f.useCallback(()=>{t==="unifiedCanvas"&&c(ko())},[c,t]),p=f.useCallback(y=>{y.target instanceof HTMLElement&&y.target.blur()},[]),h=f.useMemo(()=>n.map(y=>i.jsx(wn,{hasArrow:!0,label:String(a(y.translationKey)),placement:"end",children:i.jsxs(Cc,{onClick:p,children:[i.jsx(G5,{children:String(a(y.translationKey))}),y.icon]})},y.id)),[n,a,p]),m=f.useMemo(()=>n.map(y=>i.jsx(Rm,{children:y.content},y.id)),[n]),{ref:v,minSizePct:b}=ste(cde,yv,"app"),w=f.useCallback(y=>{const S=FD[y];S&&c(Xl(S))},[c]);return i.jsxs(Td,{defaultIndex:e,index:e,onChange:w,sx:{flexGrow:1,gap:4},isLazy:!0,children:[i.jsxs(Nd,{sx:{pt:2,gap:4,flexDir:"column"},children:[h,i.jsx(hl,{}),i.jsx(Fee,{})]}),i.jsxs(Qy,{id:"app",autoSaveId:"app",direction:"horizontal",style:{height:"100%",width:"100%"},children:[i.jsx(pd,{id:"main",children:i.jsx(Mm,{style:{height:"100%",width:"100%"},children:m})}),r&&s&&!j8.includes(t)&&i.jsxs(i.Fragment,{children:[i.jsx(LO,{}),i.jsx(pd,{ref:v,onResize:d,id:"gallery",order:3,defaultSize:b>yv&&b<100?b:yv,minSize:b,maxSize:50,children:i.jsx(uO,{})})]})]})]})},dde=f.memo(ude),fde=fe([Kn,La],(e,t)=>{const{shouldPinGallery:n,shouldShowGallery:r}=t;return{shouldPinGallery:n,shouldShowGalleryButton:j8.includes(e)?!1:!r}},{memoizeOptions:{resultEqualityCheck:Zt}}),pde=()=>{const{t:e}=ye(),{shouldPinGallery:t,shouldShowGalleryButton:n}=z(fde),r=te(),o=()=>{r(Dv(!0)),t&&r(ko())};return n?i.jsx(Le,{tooltip:"Show Gallery (G)",tooltipProps:{placement:"top"},"aria-label":e("accessibility.showGallery"),onClick:o,sx:{pos:"absolute",top:"50%",transform:"translate(0, -50%)",p:0,insetInlineEnd:0,px:3,h:48,w:8,borderStartEndRadius:0,borderEndEndRadius:0,shadow:"2xl"},children:i.jsx($ee,{})}):null},hde=f.memo(pde),xv={borderStartStartRadius:0,borderEndStartRadius:0,shadow:"2xl"},mde=fe([La,Kn],(e,t)=>{const{shouldPinParametersPanel:n,shouldUseCanvasBetaLayout:r,shouldShowParametersPanel:o}=e,s=r&&t==="unifiedCanvas",a=!s&&(!n||!o),c=!s&&!o&&["txt2img","img2img","unifiedCanvas"].includes(t);return{shouldPinParametersPanel:n,shouldShowParametersPanelButton:c,shouldShowProcessButtons:a}},{memoizeOptions:{resultEqualityCheck:Zt}}),gde=()=>{const e=te(),{t}=ye(),{shouldShowProcessButtons:n,shouldShowParametersPanelButton:r,shouldPinParametersPanel:o}=z(mde),s=()=>{e(cb(!0)),o&&e(ko())};return r?i.jsxs(F,{pos:"absolute",transform:"translate(0, -50%)",minW:8,top:"50%",insetInlineStart:"4.5rem",direction:"column",gap:2,children:[i.jsx(Le,{tooltip:"Show Options Panel (O)",tooltipProps:{placement:"top"},"aria-label":t("accessibility.showOptionsPanel"),onClick:s,sx:xv,children:i.jsx(ry,{})}),n&&i.jsxs(i.Fragment,{children:[i.jsx(Jy,{iconButton:!0,sx:xv}),i.jsx(ng,{sx:xv})]})]}):null},vde=f.memo(gde),bde=fe([La,Kn],(e,t)=>{const{shouldPinParametersPanel:n,shouldShowParametersPanel:r}=e;return{activeTabName:t,shouldPinParametersPanel:n,shouldShowParametersPanel:r}},Ge),yde=()=>{const e=te(),{shouldPinParametersPanel:t,shouldShowParametersPanel:n,activeTabName:r}=z(bde),o=()=>{e(cb(!1))},s=z(c=>c.generation.model),a=f.useMemo(()=>r==="txt2img"?s&&s.base_model==="sdxl"?i.jsx(l8,{}):i.jsx(c8,{}):r==="img2img"?s&&s.base_model==="sdxl"?i.jsx($O,{}):i.jsx(UO,{}):r==="unifiedCanvas"?i.jsx(P8,{}):null,[r,s]);return t?null:i.jsx(pP,{direction:"left",isResizable:!1,isOpen:n,onClose:o,children:i.jsxs(F,{sx:{flexDir:"column",h:"full",w:ex,gap:2,position:"relative",flexShrink:0,overflowY:"auto"},children:[i.jsxs(F,{paddingBottom:4,justifyContent:"space-between",alignItems:"center",children:[i.jsx(fO,{}),i.jsx(zO,{})]}),i.jsx(F,{sx:{gap:2,flexDirection:"column",h:"full",w:"full"},children:a})]})})},xde=f.memo(yde),wde=()=>{const{data:e,isFetching:t}=am(),{isOpen:n,onClose:r,handleAddToBoard:o,image:s}=f.useContext(H_),[a,c]=f.useState(),d=f.useRef(null),p=e==null?void 0:e.find(h=>h.board_id===(s==null?void 0:s.board_id));return i.jsx(Md,{isOpen:n,leastDestructiveRef:d,onClose:r,isCentered:!0,children:i.jsx(Da,{children:i.jsxs(Dd,{children:[i.jsx(Ma,{fontSize:"lg",fontWeight:"bold",children:p?"Move Image to Board":"Add Image to Board"}),i.jsx(Aa,{children:i.jsx(Ee,{children:i.jsxs(F,{direction:"column",gap:3,children:[p&&i.jsxs(qe,{children:["Moving this image from"," ",i.jsx("strong",{children:p.board_name})," to"]}),t?i.jsx(pl,{}):i.jsx(ar,{placeholder:"Select Board",onChange:h=>c(h),value:a,data:(e??[]).map(h=>({label:h.board_name,value:h.board_id}))})]})})}),i.jsxs(Ra,{children:[i.jsx(Jt,{onClick:r,children:"Cancel"}),i.jsx(Jt,{isDisabled:!a,colorScheme:"accent",onClick:()=>{a&&o(a)},ml:3,children:p?"Move":"Add"})]})]})})})},Sde=f.memo(wde),Cde=fe([e=>e.hotkeys,e=>e.ui],(e,t)=>{const{shift:n}=e,{shouldPinParametersPanel:r,shouldPinGallery:o}=t;return{shift:n,shouldPinGallery:o,shouldPinParametersPanel:r}},{memoizeOptions:{resultEqualityCheck:Zt}}),kde=()=>{const e=te(),{shift:t,shouldPinParametersPanel:n,shouldPinGallery:r}=z(Cde),o=z(Kn);return rt("*",()=>{lP("shift")?!t&&e(jo(!0)):t&&e(jo(!1))},{keyup:!0,keydown:!0},[t]),rt("o",()=>{e(HD()),o==="unifiedCanvas"&&n&&e(ko())}),rt(["shift+o"],()=>{e(WD()),o==="unifiedCanvas"&&e(ko())}),rt("g",()=>{e(VD()),o==="unifiedCanvas"&&r&&e(ko())}),rt(["shift+g"],()=>{e(L_()),o==="unifiedCanvas"&&e(ko())}),rt("1",()=>{e(Xl("txt2img"))}),rt("2",()=>{e(Xl("img2img"))}),rt("3",()=>{e(Xl("unifiedCanvas"))}),rt("4",()=>{e(Xl("nodes"))}),null},_de=f.memo(kde),Pde={},jde=({config:e=Pde,headerComponent:t})=>{const n=z(Y6),r=gF(),o=te();return f.useEffect(()=>{Bn.changeLanguage(n)},[n]),f.useEffect(()=>{Z_(e)&&(r.info({namespace:"App",config:e},"Received config"),o(UD(e)))},[o,e,r]),f.useEffect(()=>{o(GD())},[o]),i.jsxs(i.Fragment,{children:[i.jsxs(sl,{w:"100vw",h:"100vh",position:"relative",overflow:"hidden",children:[i.jsx(jH,{children:i.jsxs(sl,{sx:{gap:4,p:4,gridAutoRows:"min-content auto",w:"full",h:"full"},children:[t||i.jsx(Dee,{}),i.jsx(F,{sx:{gap:4,w:"full",h:"full"},children:i.jsx(dde,{})})]})}),i.jsx(iee,{}),i.jsx(xde,{}),i.jsx(Ju,{children:i.jsx(vde,{})}),i.jsx(Ju,{children:i.jsx(hde,{})})]}),i.jsx(dee,{}),i.jsx(Sde,{}),i.jsx(vF,{}),i.jsx(_de,{})]})},Dde=f.memo(jde);export{Dde as default}; diff --git a/invokeai/frontend/web/dist/assets/App-7d912410.js b/invokeai/frontend/web/dist/assets/App-7d912410.js new file mode 100644 index 0000000000..7a4e478802 --- /dev/null +++ b/invokeai/frontend/web/dist/assets/App-7d912410.js @@ -0,0 +1,169 @@ +import{t as _v,r as fR,i as Pv,a as Nc,b as P_,S as j_,c as I_,d as E_,e as jv,f as O_,g as Iv,h as pR,j as hR,k as mR,l as gR,m as R_,n as vR,o as bR,p as yR,q as M_,s as xR,u as wR,v as SR,w as CR,x as kR,y as _R,z as PR,A as f,B as a,C as fm,D as Bp,E as jR,F as D_,G as A_,H as IR,P as wd,I as J1,J as ER,K as OR,L as RR,M as MR,N as DR,O as AR,Q as TR,R as K2,T as NR,U as Ae,V as je,W as Ct,X as et,Y as Sd,Z as mo,_ as Er,$ as Hr,a0 as qn,a1 as hl,a2 as fa,a3 as Ft,a4 as rs,a5 as rc,a6 as Va,a7 as pm,a8 as Z1,a9 as Cd,aa as sr,ab as $R,ac as W,ad as X2,ae as LR,af as Ev,ag as $c,ah as zR,ai as T_,aj as N_,ak as Lc,al as BR,am as be,an as Ke,ao as Zt,ap as B,aq as FR,ar as Y2,as as HR,at as WR,au as Q2,av as te,aw as VR,ax as On,ay as Mn,az as Oe,aA as H,aB as Ys,aC as at,aD as Kn,aE as $_,aF as UR,aG as GR,aH as qR,aI as KR,aJ as _i,aK as eb,aL as Ds,aM as Io,aN as hm,aO as XR,aP as YR,aQ as J2,aR as tb,aS as Pa,aT as QR,aU as L_,aV as z_,aW as Z2,aX as JR,aY as ZR,aZ as B_,a_ as F_,a$ as nb,b0 as e7,b1 as t7,b2 as n7,b3 as Tl,b4 as r7,b5 as o7,b6 as s7,b7 as a7,b8 as ew,b9 as vi,ba as rb,bb as Fp,bc as mm,bd as H_,be as W_,bf as Is,bg as V_,bh as i7,bi as zc,bj as U_,bk as G_,bl as Es,bm as Mu,bn as Hp,bo as l7,bp as c7,bq as u7,br as d7,bs as Bf,bt as Ff,bu as vu,bv as y0,bw as Hu,bx as Wu,by as Vu,bz as Uu,bA as tw,bB as Wp,bC as x0,bD as Vp,bE as nw,bF as Ov,bG as w0,bH as Rv,bI as S0,bJ as Up,bK as rw,bL as bc,bM as ow,bN as yc,bO as sw,bP as Gp,bQ as ob,bR as f7,bS as q_,bT as Mv,bU as Dv,bV as K_,bW as p7,bX as Av,bY as h7,bZ as Tv,b_ as m7,b$ as Nv,c0 as sb,c1 as ab,c2 as gm,c3 as g7,c4 as vm,c5 as Ql,c6 as X_,c7 as v7,c8 as Ep,c9 as ib,ca as Y_,cb as b7,cc as bu,cd as Q_,ce as J_,cf as aw,cg as Ua,ch as y7,ci as $v,cj as x7,ck as w7,cl as S7,cm as C7,cn as lb,co as cb,cp as k7,cq as Bn,cr as iw,cs as Z_,ct as _7,cu as P7,cv as j7,cw as I7,cx as E7,cy as O7,cz as R7,cA as M7,cB as D7,cC as e5,cD as A7,cE as T7,cF as N7,cG as $7,cH as L7,cI as z7,cJ as B7,cK as F7,cL as H7,cM as W7,cN as V7,cO as U7,cP as bm,cQ as oo,cR as Qn,cS as G7,cT as t5,cU as kd,cV as q7,cW as ub,cX as n5,cY as K7,cZ as X7,c_ as Y7,c$ as ls,d0 as Q7,d1 as J7,d2 as Z7,d3 as eM,d4 as tM,d5 as nM,d6 as rM,d7 as oM,d8 as sM,d9 as aM,da as iM,db as lM,dc as cM,dd as uM,de as lw,df as dM,dg as cw,dh as fM,di as pM,dj as hM,dk as mM,dl as td,dm as _d,dn as Pd,dp as gM,dq as vM,dr as na,ds as db,dt as bM,du as yM,dv as xM,dw as uw,dx as wM,dy as qp,dz as SM,dA as r5,dB as dw,dC as CM,dD as kM,dE as ws,dF as _M,dG as PM,dH as o5,dI as s5,dJ as jM,dK as fw,dL as IM,dM as EM,dN as a5,dO as OM,dP as RM,dQ as pw,dR as MM,dS as hw,dT as DM,dU as mw,dV as Hf,dW as AM,dX as TM,dY as gw,dZ as vw,d_ as NM,d$ as i5,e0 as l5,e1 as jd,e2 as c5,e3 as Gi,e4 as u5,e5 as bw,e6 as $M,e7 as LM,e8 as d5,e9 as zM,ea as BM,eb as FM,ec as HM,ed as WM,ee as fb,ef as yw,eg as f5,eh as VM,ei as xw,ej as p5,ek as As,el as UM,em as h5,en as ww,eo as GM,ep as qM,eq as KM,er as XM,es as YM,et as QM,eu as JM,ev as ZM,ew as eD,ex as tD,ey as nD,ez as rD,eA as oD,eB as sD,eC as aD,eD as iD,eE as lD,eF as cD,eG as uD,eH as dD,eI as fD,eJ as Sw,eK as pD,eL as hD,eM as Kp,eN as Cw,eO as mD,eP as Js,eQ as gD,eR as kw,eS as Op,eT as vD,eU as Xp,eV as m5,eW as nd,eX as bD,eY as yD,eZ as ea,e_ as g5,e$ as pb,f0 as Id,f1 as xD,f2 as wD,f3 as SD,f4 as Ta,f5 as v5,f6 as CD,f7 as kD,f8 as b5,f9 as _D,fa as PD,fb as jD,fc as ID,fd as ED,fe as OD,ff as RD,fg as MD,fh as DD,fi as AD,fj as _w,fk as TD,fl as ND,fm as $D,fn as LD,fo as zD,fp as BD,fq as FD,fr as HD,fs as C0,ft as k0,fu as _0,fv as Wf,fw as Pw,fx as Lv,fy as WD,fz as VD,fA as UD,fB as GD,fC as Yp,fD as y5,fE as x5,fF as qD,fG as KD,fH as w5,fI as S5,fJ as C5,fK as k5,fL as _5,fM as P5,fN as j5,fO as I5,fP as oc,fQ as sc,fR as E5,fS as O5,fT as XD,fU as R5,fV as M5,fW as D5,fX as A5,fY as T5,fZ as N5,f_ as hb,f$ as YD,g0 as QD,g1 as JD,g2 as ZD,g3 as e9,g4 as t9,g5 as n9,g6 as r9}from"./index-2c171c8f.js";import{u as o9,c as s9,a as Dn,b as or,I as fo,d as Ga,P as rd,C as a9,e as ye,f as $5,g as qa,h as i9,r as Ue,i as l9,j as jw,k as Vt,l as Cr,m as od}from"./menu-971c0572.js";var Iw=1/0,c9=17976931348623157e292;function P0(e){if(!e)return e===0?e:0;if(e=_v(e),e===Iw||e===-Iw){var t=e<0?-1:1;return t*c9}return e===e?e:0}var u9=function(){return fR.Date.now()};const j0=u9;var d9="Expected a function",f9=Math.max,p9=Math.min;function h9(e,t,n){var r,o,s,i,c,d,p=0,h=!1,m=!1,v=!0;if(typeof e!="function")throw new TypeError(d9);t=_v(t)||0,Pv(n)&&(h=!!n.leading,m="maxWait"in n,s=m?f9(_v(n.maxWait)||0,t):s,v="trailing"in n?!!n.trailing:v);function b(O){var R=r,M=o;return r=o=void 0,p=O,i=e.apply(M,R),i}function w(O){return p=O,c=setTimeout(k,t),h?b(O):i}function y(O){var R=O-d,M=O-p,D=t-R;return m?p9(D,s-M):D}function S(O){var R=O-d,M=O-p;return d===void 0||R>=t||R<0||m&&M>=s}function k(){var O=j0();if(S(O))return _(O);c=setTimeout(k,y(O))}function _(O){return c=void 0,v&&r?b(O):(r=o=void 0,i)}function P(){c!==void 0&&clearTimeout(c),p=0,r=d=o=c=void 0}function I(){return c===void 0?i:_(j0())}function E(){var O=j0(),R=S(O);if(r=arguments,o=this,d=O,R){if(c===void 0)return w(d);if(m)return clearTimeout(c),c=setTimeout(k,t),b(d)}return c===void 0&&(c=setTimeout(k,t)),i}return E.cancel=P,E.flush=I,E}var m9=200;function g9(e,t,n,r){var o=-1,s=I_,i=!0,c=e.length,d=[],p=t.length;if(!c)return d;n&&(t=Nc(t,P_(n))),r?(s=E_,i=!1):t.length>=m9&&(s=jv,i=!1,t=new j_(t));e:for(;++o=120&&h.length>=120)?new j_(i&&h):void 0}h=e[0];var m=-1,v=c[0];e:for(;++m{r.has(s)&&n(o,s)})}function N9(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,s;for(s=0;s=0)&&(n[o]=e[o]);return n}const L5=({id:e,x:t,y:n,width:r,height:o,style:s,color:i,strokeColor:c,strokeWidth:d,className:p,borderRadius:h,shapeRendering:m,onClick:v})=>{const{background:b,backgroundColor:w}=s||{},y=i||b||w;return a.jsx("rect",{className:fm(["react-flow__minimap-node",p]),x:t,y:n,rx:h,ry:h,width:r,height:o,fill:y,stroke:c,strokeWidth:d,shapeRendering:m,onClick:v?S=>v(S,e):void 0})};L5.displayName="MiniMapNode";var $9=f.memo(L5);const L9=e=>e.nodeOrigin,z9=e=>e.getNodes().filter(t=>!t.hidden&&t.width&&t.height),I0=e=>e instanceof Function?e:()=>e;function B9({nodeStrokeColor:e="transparent",nodeColor:t="#e2e2e2",nodeClassName:n="",nodeBorderRadius:r=5,nodeStrokeWidth:o=2,nodeComponent:s=$9,onClick:i}){const c=Bp(z9,J1),d=Bp(L9),p=I0(t),h=I0(e),m=I0(n),v=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return a.jsx(a.Fragment,{children:c.map(b=>{const{x:w,y}=jR(b,d).positionAbsolute;return a.jsx(s,{x:w,y,width:b.width,height:b.height,style:b.style,className:m(b),color:p(b),borderRadius:r,strokeColor:h(b),strokeWidth:o,shapeRendering:v,onClick:i,id:b.id},b.id)})})}var F9=f.memo(B9);const H9=200,W9=150,V9=e=>{const t=e.getNodes(),n={x:-e.transform[0]/e.transform[2],y:-e.transform[1]/e.transform[2],width:e.width/e.transform[2],height:e.height/e.transform[2]};return{viewBB:n,boundingRect:t.length>0?RR(MR(t,e.nodeOrigin),n):n,rfId:e.rfId}},U9="react-flow__minimap-desc";function z5({style:e,className:t,nodeStrokeColor:n="transparent",nodeColor:r="#e2e2e2",nodeClassName:o="",nodeBorderRadius:s=5,nodeStrokeWidth:i=2,nodeComponent:c,maskColor:d="rgb(240, 240, 240, 0.6)",maskStrokeColor:p="none",maskStrokeWidth:h=1,position:m="bottom-right",onClick:v,onNodeClick:b,pannable:w=!1,zoomable:y=!1,ariaLabel:S="React Flow mini map",inversePan:k=!1,zoomStep:_=10}){const P=D_(),I=f.useRef(null),{boundingRect:E,viewBB:O,rfId:R}=Bp(V9,J1),M=(e==null?void 0:e.width)??H9,D=(e==null?void 0:e.height)??W9,A=E.width/M,L=E.height/D,Q=Math.max(A,L),F=Q*M,V=Q*D,q=5*Q,G=E.x-(F-E.width)/2-q,T=E.y-(V-E.height)/2-q,z=F+q*2,$=V+q*2,Y=`${U9}-${R}`,ae=f.useRef(0);ae.current=Q,f.useEffect(()=>{if(I.current){const X=A_(I.current),K=re=>{const{transform:oe,d3Selection:pe,d3Zoom:le}=P.getState();if(re.sourceEvent.type!=="wheel"||!pe||!le)return;const ge=-re.sourceEvent.deltaY*(re.sourceEvent.deltaMode===1?.05:re.sourceEvent.deltaMode?1:.002)*_,ke=oe[2]*Math.pow(2,ge);le.scaleTo(pe,ke)},U=re=>{const{transform:oe,d3Selection:pe,d3Zoom:le,translateExtent:ge,width:ke,height:xe}=P.getState();if(re.sourceEvent.type!=="mousemove"||!pe||!le)return;const de=ae.current*Math.max(1,oe[2])*(k?-1:1),Te={x:oe[0]-re.sourceEvent.movementX*de,y:oe[1]-re.sourceEvent.movementY*de},Ee=[[0,0],[ke,xe]],$e=ER.translate(Te.x,Te.y).scale(oe[2]),kt=le.constrain()($e,Ee,ge);le.transform(pe,kt)},se=IR().on("zoom",w?U:null).on("zoom.wheel",y?K:null);return X.call(se),()=>{X.on("zoom",null)}}},[w,y,k,_]);const fe=v?X=>{const K=OR(X);v(X,{x:K[0],y:K[1]})}:void 0,ie=b?(X,K)=>{const U=P.getState().nodeInternals.get(K);b(X,U)}:void 0;return a.jsx(wd,{position:m,style:e,className:fm(["react-flow__minimap",t]),"data-testid":"rf__minimap",children:a.jsxs("svg",{width:M,height:D,viewBox:`${G} ${T} ${z} ${$}`,role:"img","aria-labelledby":Y,ref:I,onClick:fe,children:[S&&a.jsx("title",{id:Y,children:S}),a.jsx(F9,{onClick:ie,nodeColor:r,nodeStrokeColor:n,nodeBorderRadius:s,nodeClassName:o,nodeStrokeWidth:i,nodeComponent:c}),a.jsx("path",{className:"react-flow__minimap-mask",d:`M${G-q},${T-q}h${z+q*2}v${$+q*2}h${-z-q*2}z + M${O.x},${O.y}h${O.width}v${O.height}h${-O.width}z`,fill:d,fillRule:"evenodd",stroke:p,strokeWidth:h,pointerEvents:"none"})]})})}z5.displayName="MiniMap";var G9=f.memo(z5),Ss;(function(e){e.Lines="lines",e.Dots="dots",e.Cross="cross"})(Ss||(Ss={}));function q9({color:e,dimensions:t,lineWidth:n}){return a.jsx("path",{stroke:e,strokeWidth:n,d:`M${t[0]/2} 0 V${t[1]} M0 ${t[1]/2} H${t[0]}`})}function K9({color:e,radius:t}){return a.jsx("circle",{cx:t,cy:t,r:t,fill:e})}const X9={[Ss.Dots]:"#91919a",[Ss.Lines]:"#eee",[Ss.Cross]:"#e2e2e2"},Y9={[Ss.Dots]:1,[Ss.Lines]:1,[Ss.Cross]:6},Q9=e=>({transform:e.transform,patternId:`pattern-${e.rfId}`});function B5({id:e,variant:t=Ss.Dots,gap:n=20,size:r,lineWidth:o=1,offset:s=2,color:i,style:c,className:d}){const p=f.useRef(null),{transform:h,patternId:m}=Bp(Q9,J1),v=i||X9[t],b=r||Y9[t],w=t===Ss.Dots,y=t===Ss.Cross,S=Array.isArray(n)?n:[n,n],k=[S[0]*h[2]||1,S[1]*h[2]||1],_=b*h[2],P=y?[_,_]:k,I=w?[_/s,_/s]:[P[0]/s,P[1]/s];return a.jsxs("svg",{className:fm(["react-flow__background",d]),style:{...c,position:"absolute",width:"100%",height:"100%",top:0,left:0},ref:p,"data-testid":"rf__background",children:[a.jsx("pattern",{id:m+e,x:h[0]%k[0],y:h[1]%k[1],width:k[0],height:k[1],patternUnits:"userSpaceOnUse",patternTransform:`translate(-${I[0]},-${I[1]})`,children:w?a.jsx(K9,{color:v,radius:_/s}):a.jsx(q9,{dimensions:P,color:v,lineWidth:o})}),a.jsx("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${m+e})`})]})}B5.displayName="Background";var J9=f.memo(B5),Gu;(function(e){e.Line="line",e.Handle="handle"})(Gu||(Gu={}));function Z9({width:e,prevWidth:t,height:n,prevHeight:r,invertX:o,invertY:s}){const i=e-t,c=n-r,d=[i>0?1:i<0?-1:0,c>0?1:c<0?-1:0];return i&&o&&(d[0]=d[0]*-1),c&&s&&(d[1]=d[1]*-1),d}const F5={width:0,height:0,x:0,y:0},eA={...F5,pointerX:0,pointerY:0,aspectRatio:1};function tA({nodeId:e,position:t,variant:n=Gu.Handle,className:r,style:o={},children:s,color:i,minWidth:c=10,minHeight:d=10,maxWidth:p=Number.MAX_VALUE,maxHeight:h=Number.MAX_VALUE,keepAspectRatio:m=!1,shouldResize:v,onResizeStart:b,onResize:w,onResizeEnd:y}){const S=DR(),k=typeof e=="string"?e:S,_=D_(),P=f.useRef(null),I=f.useRef(eA),E=f.useRef(F5),O=AR(),R=n===Gu.Line?"right":"bottom-right",M=t??R;f.useEffect(()=>{if(!P.current||!k)return;const Q=A_(P.current),F=M.includes("right")||M.includes("left"),V=M.includes("bottom")||M.includes("top"),q=M.includes("left"),G=M.includes("top"),T=TR().on("start",z=>{const $=_.getState().nodeInternals.get(k),{xSnapped:Y,ySnapped:ae}=O(z);E.current={width:($==null?void 0:$.width)??0,height:($==null?void 0:$.height)??0,x:($==null?void 0:$.position.x)??0,y:($==null?void 0:$.position.y)??0},I.current={...E.current,pointerX:Y,pointerY:ae,aspectRatio:E.current.width/E.current.height},b==null||b(z,{...E.current})}).on("drag",z=>{const{nodeInternals:$,triggerNodeChanges:Y}=_.getState(),{xSnapped:ae,ySnapped:fe}=O(z),ie=$.get(k);if(ie){const X=[],{pointerX:K,pointerY:U,width:se,height:re,x:oe,y:pe,aspectRatio:le}=I.current,{x:ge,y:ke,width:xe,height:de}=E.current,Te=Math.floor(F?ae-K:0),Ee=Math.floor(V?fe-U:0);let $e=K2(se+(q?-Te:Te),c,p),kt=K2(re+(G?-Ee:Ee),d,h);if(m){const Me=$e/kt,_t=F&&V,Tt=F&&!V,we=V&&!F;$e=Me<=le&&_t||we?kt*le:$e,kt=Me>le&&_t||Tt?$e/le:kt,$e>=p?($e=p,kt=p/le):$e<=c&&($e=c,kt=c/le),kt>=h?(kt=h,$e=h*le):kt<=d&&(kt=d,$e=d*le)}const ct=$e!==xe,on=kt!==de;if(q||G){const Me=q?oe-($e-se):oe,_t=G?pe-(kt-re):pe,Tt=Me!==ge&&ct,we=_t!==ke&&on;if(Tt||we){const ht={id:ie.id,type:"position",position:{x:Tt?Me:ge,y:we?_t:ke}};X.push(ht),E.current.x=ht.position.x,E.current.y=ht.position.y}}if(ct||on){const Me={id:k,type:"dimensions",updateStyle:!0,resizing:!0,dimensions:{width:$e,height:kt}};X.push(Me),E.current.width=$e,E.current.height=kt}if(X.length===0)return;const vt=Z9({width:E.current.width,prevWidth:xe,height:E.current.height,prevHeight:de,invertX:q,invertY:G}),bt={...E.current,direction:vt};if((v==null?void 0:v(z,bt))===!1)return;w==null||w(z,bt),Y(X)}}).on("end",z=>{const $={id:k,type:"dimensions",resizing:!1};y==null||y(z,{...E.current}),_.getState().triggerNodeChanges([$])});return Q.call(T),()=>{Q.on(".drag",null)}},[k,M,c,d,p,h,m,O,b,w,y]);const D=M.split("-"),A=n===Gu.Line?"borderColor":"backgroundColor",L=i?{...o,[A]:i}:o;return a.jsx("div",{className:fm(["react-flow__resize-control","nodrag",...D,n,r]),ref:P,style:L,children:s})}var nA=f.memo(tA);function rA(e){return e!=null&&typeof e=="object"&&"nodeType"in e&&e.nodeType===Node.ELEMENT_NODE}function H5(e){var t;return rA(e)&&(t=e.ownerDocument)!=null?t:document}function oA(){return!!(typeof window<"u"&&window.document&&window.document.createElement)}var sA=oA();const W5=1/60*1e3,aA=typeof performance<"u"?()=>performance.now():()=>Date.now(),V5=typeof window<"u"?e=>window.requestAnimationFrame(e):e=>setTimeout(()=>e(aA()),W5);function iA(e){let t=[],n=[],r=0,o=!1,s=!1;const i=new WeakSet,c={schedule:(d,p=!1,h=!1)=>{const m=h&&o,v=m?t:n;return p&&i.add(d),v.indexOf(d)===-1&&(v.push(d),m&&o&&(r=t.length)),d},cancel:d=>{const p=n.indexOf(d);p!==-1&&n.splice(p,1),i.delete(d)},process:d=>{if(o){s=!0;return}if(o=!0,[t,n]=[n,t],n.length=0,r=t.length,r)for(let p=0;p(e[t]=iA(()=>sd=!0),e),{}),cA=Ed.reduce((e,t)=>{const n=ym[t];return e[t]=(r,o=!1,s=!1)=>(sd||fA(),n.schedule(r,o,s)),e},{}),uA=Ed.reduce((e,t)=>(e[t]=ym[t].cancel,e),{});Ed.reduce((e,t)=>(e[t]=()=>ym[t].process(ac),e),{});const dA=e=>ym[e].process(ac),U5=e=>{sd=!1,ac.delta=zv?W5:Math.max(Math.min(e-ac.timestamp,lA),1),ac.timestamp=e,Bv=!0,Ed.forEach(dA),Bv=!1,sd&&(zv=!1,V5(U5))},fA=()=>{sd=!0,zv=!0,Bv||V5(U5)},Mw=()=>ac;function mb(e){const t=Object.assign({},e);for(let n in t)t[n]===void 0&&delete t[n];return t}function pA(e){const{theme:t}=NR(),n=o9();return f.useMemo(()=>s9(t.direction,{...n,...e}),[e,t.direction,n])}var hA=Object.defineProperty,mA=(e,t,n)=>t in e?hA(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,vr=(e,t,n)=>(mA(e,typeof t!="symbol"?t+"":t,n),n);function Dw(e){return e.sort((t,n)=>{const r=t.compareDocumentPosition(n);if(r&Node.DOCUMENT_POSITION_FOLLOWING||r&Node.DOCUMENT_POSITION_CONTAINED_BY)return-1;if(r&Node.DOCUMENT_POSITION_PRECEDING||r&Node.DOCUMENT_POSITION_CONTAINS)return 1;if(r&Node.DOCUMENT_POSITION_DISCONNECTED||r&Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC)throw Error("Cannot sort the given nodes.");return 0})}var gA=e=>typeof e=="object"&&"nodeType"in e&&e.nodeType===Node.ELEMENT_NODE;function Aw(e,t,n){let r=e+1;return n&&r>=t&&(r=0),r}function Tw(e,t,n){let r=e-1;return n&&r<0&&(r=t),r}var Fv=typeof window<"u"?f.useLayoutEffect:f.useEffect,Qp=e=>e,vA=class{constructor(){vr(this,"descendants",new Map),vr(this,"register",e=>{if(e!=null)return gA(e)?this.registerNode(e):t=>{this.registerNode(t,e)}}),vr(this,"unregister",e=>{this.descendants.delete(e);const t=Dw(Array.from(this.descendants.keys()));this.assignIndex(t)}),vr(this,"destroy",()=>{this.descendants.clear()}),vr(this,"assignIndex",e=>{this.descendants.forEach(t=>{const n=e.indexOf(t.node);t.index=n,t.node.dataset.index=t.index.toString()})}),vr(this,"count",()=>this.descendants.size),vr(this,"enabledCount",()=>this.enabledValues().length),vr(this,"values",()=>Array.from(this.descendants.values()).sort((t,n)=>t.index-n.index)),vr(this,"enabledValues",()=>this.values().filter(e=>!e.disabled)),vr(this,"item",e=>{if(this.count()!==0)return this.values()[e]}),vr(this,"enabledItem",e=>{if(this.enabledCount()!==0)return this.enabledValues()[e]}),vr(this,"first",()=>this.item(0)),vr(this,"firstEnabled",()=>this.enabledItem(0)),vr(this,"last",()=>this.item(this.descendants.size-1)),vr(this,"lastEnabled",()=>{const e=this.enabledValues().length-1;return this.enabledItem(e)}),vr(this,"indexOf",e=>{var t,n;return e&&(n=(t=this.descendants.get(e))==null?void 0:t.index)!=null?n:-1}),vr(this,"enabledIndexOf",e=>e==null?-1:this.enabledValues().findIndex(t=>t.node.isSameNode(e))),vr(this,"next",(e,t=!0)=>{const n=Aw(e,this.count(),t);return this.item(n)}),vr(this,"nextEnabled",(e,t=!0)=>{const n=this.item(e);if(!n)return;const r=this.enabledIndexOf(n.node),o=Aw(r,this.enabledCount(),t);return this.enabledItem(o)}),vr(this,"prev",(e,t=!0)=>{const n=Tw(e,this.count()-1,t);return this.item(n)}),vr(this,"prevEnabled",(e,t=!0)=>{const n=this.item(e);if(!n)return;const r=this.enabledIndexOf(n.node),o=Tw(r,this.enabledCount()-1,t);return this.enabledItem(o)}),vr(this,"registerNode",(e,t)=>{if(!e||this.descendants.has(e))return;const n=Array.from(this.descendants.keys()).concat(e),r=Dw(n);t!=null&&t.disabled&&(t.disabled=!!t.disabled);const o={node:e,index:-1,...t};this.descendants.set(e,o),this.assignIndex(r)})}};function bA(e,t){if(e!=null){if(typeof e=="function"){e(t);return}try{e.current=t}catch{throw new Error(`Cannot assign value '${t}' to ref '${e}'`)}}}function cn(...e){return t=>{e.forEach(n=>{bA(n,t)})}}function yA(...e){return f.useMemo(()=>cn(...e),e)}function xA(){const e=f.useRef(new vA);return Fv(()=>()=>e.current.destroy()),e.current}var[wA,G5]=Dn({name:"DescendantsProvider",errorMessage:"useDescendantsContext must be used within DescendantsProvider"});function SA(e){const t=G5(),[n,r]=f.useState(-1),o=f.useRef(null);Fv(()=>()=>{o.current&&t.unregister(o.current)},[]),Fv(()=>{if(!o.current)return;const i=Number(o.current.dataset.index);n!=i&&!Number.isNaN(i)&&r(i)});const s=Qp(e?t.register(e):t.register);return{descendants:t,index:n,enabledIndex:t.enabledIndexOf(o.current),register:cn(s,o)}}function gb(){return[Qp(wA),()=>Qp(G5()),()=>xA(),o=>SA(o)]}var[CA,xm]=Dn({name:"AccordionStylesContext",hookName:"useAccordionStyles",providerName:""}),[kA,vb]=Dn({name:"AccordionItemContext",hookName:"useAccordionItemContext",providerName:""}),[_A,tfe,PA,jA]=gb(),Du=Ae(function(t,n){const{getButtonProps:r}=vb(),o=r(t,n),i={display:"flex",alignItems:"center",width:"100%",outline:0,...xm().button};return a.jsx(je.button,{...o,className:Ct("chakra-accordion__button",t.className),__css:i})});Du.displayName="AccordionButton";function Bc(e){const{value:t,defaultValue:n,onChange:r,shouldUpdate:o=(v,b)=>v!==b}=e,s=or(r),i=or(o),[c,d]=f.useState(n),p=t!==void 0,h=p?t:c,m=or(v=>{const w=typeof v=="function"?v(h):v;i(h,w)&&(p||d(w),s(w))},[p,s,h,i]);return[h,m]}function IA(e){const{onChange:t,defaultIndex:n,index:r,allowMultiple:o,allowToggle:s,...i}=e;RA(e),MA(e);const c=PA(),[d,p]=f.useState(-1);f.useEffect(()=>()=>{p(-1)},[]);const[h,m]=Bc({value:r,defaultValue(){return o?n??[]:n??-1},onChange:t});return{index:h,setIndex:m,htmlProps:i,getAccordionItemProps:b=>{let w=!1;return b!==null&&(w=Array.isArray(h)?h.includes(b):h===b),{isOpen:w,onChange:S=>{if(b!==null)if(o&&Array.isArray(h)){const k=S?h.concat(b):h.filter(_=>_!==b);m(k)}else S?m(b):s&&m(-1)}}},focusedIndex:d,setFocusedIndex:p,descendants:c}}var[EA,bb]=Dn({name:"AccordionContext",hookName:"useAccordionContext",providerName:"Accordion"});function OA(e){const{isDisabled:t,isFocusable:n,id:r,...o}=e,{getAccordionItemProps:s,setFocusedIndex:i}=bb(),c=f.useRef(null),d=f.useId(),p=r??d,h=`accordion-button-${p}`,m=`accordion-panel-${p}`;DA(e);const{register:v,index:b,descendants:w}=jA({disabled:t&&!n}),{isOpen:y,onChange:S}=s(b===-1?null:b);AA({isOpen:y,isDisabled:t});const k=()=>{S==null||S(!0)},_=()=>{S==null||S(!1)},P=f.useCallback(()=>{S==null||S(!y),i(b)},[b,i,y,S]),I=f.useCallback(M=>{const A={ArrowDown:()=>{const L=w.nextEnabled(b);L==null||L.node.focus()},ArrowUp:()=>{const L=w.prevEnabled(b);L==null||L.node.focus()},Home:()=>{const L=w.firstEnabled();L==null||L.node.focus()},End:()=>{const L=w.lastEnabled();L==null||L.node.focus()}}[M.key];A&&(M.preventDefault(),A(M))},[w,b]),E=f.useCallback(()=>{i(b)},[i,b]),O=f.useCallback(function(D={},A=null){return{...D,type:"button",ref:cn(v,c,A),id:h,disabled:!!t,"aria-expanded":!!y,"aria-controls":m,onClick:et(D.onClick,P),onFocus:et(D.onFocus,E),onKeyDown:et(D.onKeyDown,I)}},[h,t,y,P,E,I,m,v]),R=f.useCallback(function(D={},A=null){return{...D,ref:A,role:"region",id:m,"aria-labelledby":h,hidden:!y}},[h,y,m]);return{isOpen:y,isDisabled:t,isFocusable:n,onOpen:k,onClose:_,getButtonProps:O,getPanelProps:R,htmlProps:o}}function RA(e){const t=e.index||e.defaultIndex,n=t!=null&&!Array.isArray(t)&&e.allowMultiple;Sd({condition:!!n,message:`If 'allowMultiple' is passed, then 'index' or 'defaultIndex' must be an array. You passed: ${typeof t},`})}function MA(e){Sd({condition:!!(e.allowMultiple&&e.allowToggle),message:"If 'allowMultiple' is passed, 'allowToggle' will be ignored. Either remove 'allowToggle' or 'allowMultiple' depending on whether you want multiple accordions visible or not"})}function DA(e){Sd({condition:!!(e.isFocusable&&!e.isDisabled),message:`Using only 'isFocusable', this prop is reserved for situations where you pass 'isDisabled' but you still want the element to receive focus (A11y). Either remove it or pass 'isDisabled' as well. + `})}function AA(e){Sd({condition:e.isOpen&&!!e.isDisabled,message:"Cannot open a disabled accordion item"})}function Au(e){const{isOpen:t,isDisabled:n}=vb(),{reduceMotion:r}=bb(),o=Ct("chakra-accordion__icon",e.className),s=xm(),i={opacity:n?.4:1,transform:t?"rotate(-180deg)":void 0,transition:r?void 0:"transform 0.2s",transformOrigin:"center",...s.icon};return a.jsx(fo,{viewBox:"0 0 24 24","aria-hidden":!0,className:o,__css:i,...e,children:a.jsx("path",{fill:"currentColor",d:"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"})})}Au.displayName="AccordionIcon";var Tu=Ae(function(t,n){const{children:r,className:o}=t,{htmlProps:s,...i}=OA(t),d={...xm().container,overflowAnchor:"none"},p=f.useMemo(()=>i,[i]);return a.jsx(kA,{value:p,children:a.jsx(je.div,{ref:n,...s,className:Ct("chakra-accordion__item",o),__css:d,children:typeof r=="function"?r({isExpanded:!!i.isOpen,isDisabled:!!i.isDisabled}):r})})});Tu.displayName="AccordionItem";var qi={ease:[.25,.1,.25,1],easeIn:[.4,0,1,1],easeOut:[0,0,.2,1],easeInOut:[.4,0,.2,1]},yu={scale:{enter:{scale:1},exit:{scale:.95}},fade:{enter:{opacity:1},exit:{opacity:0}},pushLeft:{enter:{x:"100%"},exit:{x:"-30%"}},pushRight:{enter:{x:"-100%"},exit:{x:"30%"}},pushUp:{enter:{y:"100%"},exit:{y:"-30%"}},pushDown:{enter:{y:"-100%"},exit:{y:"30%"}},slideLeft:{position:{left:0,top:0,bottom:0,width:"100%"},enter:{x:0,y:0},exit:{x:"-100%",y:0}},slideRight:{position:{right:0,top:0,bottom:0,width:"100%"},enter:{x:0,y:0},exit:{x:"100%",y:0}},slideUp:{position:{top:0,left:0,right:0,maxWidth:"100vw"},enter:{x:0,y:0},exit:{x:0,y:"-100%"}},slideDown:{position:{bottom:0,left:0,right:0,maxWidth:"100vw"},enter:{x:0,y:0},exit:{x:0,y:"100%"}}};function Hv(e){var t;switch((t=e==null?void 0:e.direction)!=null?t:"right"){case"right":return yu.slideRight;case"left":return yu.slideLeft;case"bottom":return yu.slideDown;case"top":return yu.slideUp;default:return yu.slideRight}}var Xi={enter:{duration:.2,ease:qi.easeOut},exit:{duration:.1,ease:qi.easeIn}},Cs={enter:(e,t)=>({...e,delay:typeof t=="number"?t:t==null?void 0:t.enter}),exit:(e,t)=>({...e,delay:typeof t=="number"?t:t==null?void 0:t.exit})},TA=e=>e!=null&&parseInt(e.toString(),10)>0,Nw={exit:{height:{duration:.2,ease:qi.ease},opacity:{duration:.3,ease:qi.ease}},enter:{height:{duration:.3,ease:qi.ease},opacity:{duration:.4,ease:qi.ease}}},NA={exit:({animateOpacity:e,startingHeight:t,transition:n,transitionEnd:r,delay:o})=>{var s;return{...e&&{opacity:TA(t)?1:0},height:t,transitionEnd:r==null?void 0:r.exit,transition:(s=n==null?void 0:n.exit)!=null?s:Cs.exit(Nw.exit,o)}},enter:({animateOpacity:e,endingHeight:t,transition:n,transitionEnd:r,delay:o})=>{var s;return{...e&&{opacity:1},height:t,transitionEnd:r==null?void 0:r.enter,transition:(s=n==null?void 0:n.enter)!=null?s:Cs.enter(Nw.enter,o)}}},wm=f.forwardRef((e,t)=>{const{in:n,unmountOnExit:r,animateOpacity:o=!0,startingHeight:s=0,endingHeight:i="auto",style:c,className:d,transition:p,transitionEnd:h,...m}=e,[v,b]=f.useState(!1);f.useEffect(()=>{const _=setTimeout(()=>{b(!0)});return()=>clearTimeout(_)},[]),Sd({condition:Number(s)>0&&!!r,message:"startingHeight and unmountOnExit are mutually exclusive. You can't use them together"});const w=parseFloat(s.toString())>0,y={startingHeight:s,endingHeight:i,animateOpacity:o,transition:v?p:{enter:{duration:0}},transitionEnd:{enter:h==null?void 0:h.enter,exit:r?h==null?void 0:h.exit:{...h==null?void 0:h.exit,display:w?"block":"none"}}},S=r?n:!0,k=n||r?"enter":"exit";return a.jsx(mo,{initial:!1,custom:y,children:S&&a.jsx(Er.div,{ref:t,...m,className:Ct("chakra-collapse",d),style:{overflow:"hidden",display:"block",...c},custom:y,variants:NA,initial:r?"exit":!1,animate:k,exit:"exit"})})});wm.displayName="Collapse";var $A={enter:({transition:e,transitionEnd:t,delay:n}={})=>{var r;return{opacity:1,transition:(r=e==null?void 0:e.enter)!=null?r:Cs.enter(Xi.enter,n),transitionEnd:t==null?void 0:t.enter}},exit:({transition:e,transitionEnd:t,delay:n}={})=>{var r;return{opacity:0,transition:(r=e==null?void 0:e.exit)!=null?r:Cs.exit(Xi.exit,n),transitionEnd:t==null?void 0:t.exit}}},q5={initial:"exit",animate:"enter",exit:"exit",variants:$A},LA=f.forwardRef(function(t,n){const{unmountOnExit:r,in:o,className:s,transition:i,transitionEnd:c,delay:d,...p}=t,h=o||r?"enter":"exit",m=r?o&&r:!0,v={transition:i,transitionEnd:c,delay:d};return a.jsx(mo,{custom:v,children:m&&a.jsx(Er.div,{ref:n,className:Ct("chakra-fade",s),custom:v,...q5,animate:h,...p})})});LA.displayName="Fade";var zA={exit:({reverse:e,initialScale:t,transition:n,transitionEnd:r,delay:o})=>{var s;return{opacity:0,...e?{scale:t,transitionEnd:r==null?void 0:r.exit}:{transitionEnd:{scale:t,...r==null?void 0:r.exit}},transition:(s=n==null?void 0:n.exit)!=null?s:Cs.exit(Xi.exit,o)}},enter:({transitionEnd:e,transition:t,delay:n})=>{var r;return{opacity:1,scale:1,transition:(r=t==null?void 0:t.enter)!=null?r:Cs.enter(Xi.enter,n),transitionEnd:e==null?void 0:e.enter}}},K5={initial:"exit",animate:"enter",exit:"exit",variants:zA},BA=f.forwardRef(function(t,n){const{unmountOnExit:r,in:o,reverse:s=!0,initialScale:i=.95,className:c,transition:d,transitionEnd:p,delay:h,...m}=t,v=r?o&&r:!0,b=o||r?"enter":"exit",w={initialScale:i,reverse:s,transition:d,transitionEnd:p,delay:h};return a.jsx(mo,{custom:w,children:v&&a.jsx(Er.div,{ref:n,className:Ct("chakra-offset-slide",c),...K5,animate:b,custom:w,...m})})});BA.displayName="ScaleFade";var FA={initial:({offsetX:e,offsetY:t,transition:n,transitionEnd:r,delay:o})=>{var s;return{opacity:0,x:e,y:t,transition:(s=n==null?void 0:n.exit)!=null?s:Cs.exit(Xi.exit,o),transitionEnd:r==null?void 0:r.exit}},enter:({transition:e,transitionEnd:t,delay:n})=>{var r;return{opacity:1,x:0,y:0,transition:(r=e==null?void 0:e.enter)!=null?r:Cs.enter(Xi.enter,n),transitionEnd:t==null?void 0:t.enter}},exit:({offsetY:e,offsetX:t,transition:n,transitionEnd:r,reverse:o,delay:s})=>{var i;const c={x:t,y:e};return{opacity:0,transition:(i=n==null?void 0:n.exit)!=null?i:Cs.exit(Xi.exit,s),...o?{...c,transitionEnd:r==null?void 0:r.exit}:{transitionEnd:{...c,...r==null?void 0:r.exit}}}}},Wv={initial:"initial",animate:"enter",exit:"exit",variants:FA},HA=f.forwardRef(function(t,n){const{unmountOnExit:r,in:o,reverse:s=!0,className:i,offsetX:c=0,offsetY:d=8,transition:p,transitionEnd:h,delay:m,...v}=t,b=r?o&&r:!0,w=o||r?"enter":"exit",y={offsetX:c,offsetY:d,reverse:s,transition:p,transitionEnd:h,delay:m};return a.jsx(mo,{custom:y,children:b&&a.jsx(Er.div,{ref:n,className:Ct("chakra-offset-slide",i),custom:y,...Wv,animate:w,...v})})});HA.displayName="SlideFade";var $w={exit:{duration:.15,ease:qi.easeInOut},enter:{type:"spring",damping:25,stiffness:180}},WA={exit:({direction:e,transition:t,transitionEnd:n,delay:r})=>{var o;const{exit:s}=Hv({direction:e});return{...s,transition:(o=t==null?void 0:t.exit)!=null?o:Cs.exit($w.exit,r),transitionEnd:n==null?void 0:n.exit}},enter:({direction:e,transitionEnd:t,transition:n,delay:r})=>{var o;const{enter:s}=Hv({direction:e});return{...s,transition:(o=n==null?void 0:n.enter)!=null?o:Cs.enter($w.enter,r),transitionEnd:t==null?void 0:t.enter}}},X5=f.forwardRef(function(t,n){const{direction:r="right",style:o,unmountOnExit:s,in:i,className:c,transition:d,transitionEnd:p,delay:h,motionProps:m,...v}=t,b=Hv({direction:r}),w=Object.assign({position:"fixed"},b.position,o),y=s?i&&s:!0,S=i||s?"enter":"exit",k={transitionEnd:p,transition:d,direction:r,delay:h};return a.jsx(mo,{custom:k,children:y&&a.jsx(Er.div,{...v,ref:n,initial:"exit",className:Ct("chakra-slide",c),animate:S,exit:"exit",custom:k,variants:WA,style:w,...m})})});X5.displayName="Slide";var Nu=Ae(function(t,n){const{className:r,motionProps:o,...s}=t,{reduceMotion:i}=bb(),{getPanelProps:c,isOpen:d}=vb(),p=c(s,n),h=Ct("chakra-accordion__panel",r),m=xm();i||delete p.hidden;const v=a.jsx(je.div,{...p,__css:m.panel,className:h});return i?v:a.jsx(wm,{in:d,...o,children:v})});Nu.displayName="AccordionPanel";var Y5=Ae(function({children:t,reduceMotion:n,...r},o){const s=Hr("Accordion",r),i=qn(r),{htmlProps:c,descendants:d,...p}=IA(i),h=f.useMemo(()=>({...p,reduceMotion:!!n}),[p,n]);return a.jsx(_A,{value:d,children:a.jsx(EA,{value:h,children:a.jsx(CA,{value:s,children:a.jsx(je.div,{ref:o,...c,className:Ct("chakra-accordion",r.className),__css:s.root,children:t})})})})});Y5.displayName="Accordion";function Od(e){return f.Children.toArray(e).filter(t=>f.isValidElement(t))}var[VA,UA]=Dn({strict:!1,name:"ButtonGroupContext"}),GA={horizontal:{"> *:first-of-type:not(:last-of-type)":{borderEndRadius:0},"> *:not(:first-of-type):not(:last-of-type)":{borderRadius:0},"> *:not(:first-of-type):last-of-type":{borderStartRadius:0}},vertical:{"> *:first-of-type:not(:last-of-type)":{borderBottomRadius:0},"> *:not(:first-of-type):not(:last-of-type)":{borderRadius:0},"> *:not(:first-of-type):last-of-type":{borderTopRadius:0}}},qA={horizontal:e=>({"& > *:not(style) ~ *:not(style)":{marginStart:e}}),vertical:e=>({"& > *:not(style) ~ *:not(style)":{marginTop:e}})},rr=Ae(function(t,n){const{size:r,colorScheme:o,variant:s,className:i,spacing:c="0.5rem",isAttached:d,isDisabled:p,orientation:h="horizontal",...m}=t,v=Ct("chakra-button__group",i),b=f.useMemo(()=>({size:r,colorScheme:o,variant:s,isDisabled:p}),[r,o,s,p]);let w={display:"inline-flex",...d?GA[h]:qA[h](c)};const y=h==="vertical";return a.jsx(VA,{value:b,children:a.jsx(je.div,{ref:n,role:"group",__css:w,className:v,"data-attached":d?"":void 0,"data-orientation":h,flexDir:y?"column":void 0,...m})})});rr.displayName="ButtonGroup";function KA(e){const[t,n]=f.useState(!e);return{ref:f.useCallback(s=>{s&&n(s.tagName==="BUTTON")},[]),type:t?"button":void 0}}function Vv(e){const{children:t,className:n,...r}=e,o=f.isValidElement(t)?f.cloneElement(t,{"aria-hidden":!0,focusable:!1}):t,s=Ct("chakra-button__icon",n);return a.jsx(je.span,{display:"inline-flex",alignSelf:"center",flexShrink:0,...r,className:s,children:o})}Vv.displayName="ButtonIcon";function Jp(e){const{label:t,placement:n,spacing:r="0.5rem",children:o=a.jsx(hl,{color:"currentColor",width:"1em",height:"1em"}),className:s,__css:i,...c}=e,d=Ct("chakra-button__spinner",s),p=n==="start"?"marginEnd":"marginStart",h=f.useMemo(()=>({display:"flex",alignItems:"center",position:t?"relative":"absolute",[p]:t?r:0,fontSize:"1em",lineHeight:"normal",...i}),[i,t,p,r]);return a.jsx(je.div,{className:d,...c,__css:h,children:o})}Jp.displayName="ButtonSpinner";var xc=Ae((e,t)=>{const n=UA(),r=fa("Button",{...n,...e}),{isDisabled:o=n==null?void 0:n.isDisabled,isLoading:s,isActive:i,children:c,leftIcon:d,rightIcon:p,loadingText:h,iconSpacing:m="0.5rem",type:v,spinner:b,spinnerPlacement:w="start",className:y,as:S,...k}=qn(e),_=f.useMemo(()=>{const O={...r==null?void 0:r._focus,zIndex:1};return{display:"inline-flex",appearance:"none",alignItems:"center",justifyContent:"center",userSelect:"none",position:"relative",whiteSpace:"nowrap",verticalAlign:"middle",outline:"none",...r,...!!n&&{_focus:O}}},[r,n]),{ref:P,type:I}=KA(S),E={rightIcon:p,leftIcon:d,iconSpacing:m,children:c};return a.jsxs(je.button,{ref:yA(t,P),as:S,type:v??I,"data-active":Ft(i),"data-loading":Ft(s),__css:_,className:Ct("chakra-button",y),...k,disabled:o||s,children:[s&&w==="start"&&a.jsx(Jp,{className:"chakra-button__spinner--start",label:h,placement:"start",spacing:m,children:b}),s?h||a.jsx(je.span,{opacity:0,children:a.jsx(Lw,{...E})}):a.jsx(Lw,{...E}),s&&w==="end"&&a.jsx(Jp,{className:"chakra-button__spinner--end",label:h,placement:"end",spacing:m,children:b})]})});xc.displayName="Button";function Lw(e){const{leftIcon:t,rightIcon:n,children:r,iconSpacing:o}=e;return a.jsxs(a.Fragment,{children:[t&&a.jsx(Vv,{marginEnd:o,children:t}),r,n&&a.jsx(Vv,{marginStart:o,children:n})]})}var Ea=Ae((e,t)=>{const{icon:n,children:r,isRound:o,"aria-label":s,...i}=e,c=n||r,d=f.isValidElement(c)?f.cloneElement(c,{"aria-hidden":!0,focusable:!1}):null;return a.jsx(xc,{padding:"0",borderRadius:o?"full":void 0,ref:t,"aria-label":s,...i,children:d})});Ea.displayName="IconButton";var[nfe,XA]=Dn({name:"CheckboxGroupContext",strict:!1});function YA(e){const[t,n]=f.useState(e),[r,o]=f.useState(!1);return e!==t&&(o(!0),n(e)),r}function QA(e){return a.jsx(je.svg,{width:"1.2em",viewBox:"0 0 12 10",style:{fill:"none",strokeWidth:2,stroke:"currentColor",strokeDasharray:16},...e,children:a.jsx("polyline",{points:"1.5 6 4.5 9 10.5 1"})})}function JA(e){return a.jsx(je.svg,{width:"1.2em",viewBox:"0 0 24 24",style:{stroke:"currentColor",strokeWidth:4},...e,children:a.jsx("line",{x1:"21",x2:"3",y1:"12",y2:"12"})})}function ZA(e){const{isIndeterminate:t,isChecked:n,...r}=e,o=t?JA:QA;return n||t?a.jsx(je.div,{style:{display:"flex",alignItems:"center",justifyContent:"center",height:"100%"},children:a.jsx(o,{...r})}):null}var[eT,Q5]=Dn({name:"FormControlStylesContext",errorMessage:`useFormControlStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),[tT,Rd]=Dn({strict:!1,name:"FormControlContext"});function nT(e){const{id:t,isRequired:n,isInvalid:r,isDisabled:o,isReadOnly:s,...i}=e,c=f.useId(),d=t||`field-${c}`,p=`${d}-label`,h=`${d}-feedback`,m=`${d}-helptext`,[v,b]=f.useState(!1),[w,y]=f.useState(!1),[S,k]=f.useState(!1),_=f.useCallback((R={},M=null)=>({id:m,...R,ref:cn(M,D=>{D&&y(!0)})}),[m]),P=f.useCallback((R={},M=null)=>({...R,ref:M,"data-focus":Ft(S),"data-disabled":Ft(o),"data-invalid":Ft(r),"data-readonly":Ft(s),id:R.id!==void 0?R.id:p,htmlFor:R.htmlFor!==void 0?R.htmlFor:d}),[d,o,S,r,s,p]),I=f.useCallback((R={},M=null)=>({id:h,...R,ref:cn(M,D=>{D&&b(!0)}),"aria-live":"polite"}),[h]),E=f.useCallback((R={},M=null)=>({...R,...i,ref:M,role:"group"}),[i]),O=f.useCallback((R={},M=null)=>({...R,ref:M,role:"presentation","aria-hidden":!0,children:R.children||"*"}),[]);return{isRequired:!!n,isInvalid:!!r,isReadOnly:!!s,isDisabled:!!o,isFocused:!!S,onFocus:()=>k(!0),onBlur:()=>k(!1),hasFeedbackText:v,setHasFeedbackText:b,hasHelpText:w,setHasHelpText:y,id:d,labelId:p,feedbackId:h,helpTextId:m,htmlProps:i,getHelpTextProps:_,getErrorMessageProps:I,getRootProps:E,getLabelProps:P,getRequiredIndicatorProps:O}}var go=Ae(function(t,n){const r=Hr("Form",t),o=qn(t),{getRootProps:s,htmlProps:i,...c}=nT(o),d=Ct("chakra-form-control",t.className);return a.jsx(tT,{value:c,children:a.jsx(eT,{value:r,children:a.jsx(je.div,{...s({},n),className:d,__css:r.container})})})});go.displayName="FormControl";var rT=Ae(function(t,n){const r=Rd(),o=Q5(),s=Ct("chakra-form__helper-text",t.className);return a.jsx(je.div,{...r==null?void 0:r.getHelpTextProps(t,n),__css:o.helperText,className:s})});rT.displayName="FormHelperText";var Bo=Ae(function(t,n){var r;const o=fa("FormLabel",t),s=qn(t),{className:i,children:c,requiredIndicator:d=a.jsx(J5,{}),optionalIndicator:p=null,...h}=s,m=Rd(),v=(r=m==null?void 0:m.getLabelProps(h,n))!=null?r:{ref:n,...h};return a.jsxs(je.label,{...v,className:Ct("chakra-form__label",s.className),__css:{display:"block",textAlign:"start",...o},children:[c,m!=null&&m.isRequired?d:p]})});Bo.displayName="FormLabel";var J5=Ae(function(t,n){const r=Rd(),o=Q5();if(!(r!=null&&r.isRequired))return null;const s=Ct("chakra-form__required-indicator",t.className);return a.jsx(je.span,{...r==null?void 0:r.getRequiredIndicatorProps(t,n),__css:o.requiredIndicator,className:s})});J5.displayName="RequiredIndicator";function yb(e){const{isDisabled:t,isInvalid:n,isReadOnly:r,isRequired:o,...s}=xb(e);return{...s,disabled:t,readOnly:r,required:o,"aria-invalid":rs(n),"aria-required":rs(o),"aria-readonly":rs(r)}}function xb(e){var t,n,r;const o=Rd(),{id:s,disabled:i,readOnly:c,required:d,isRequired:p,isInvalid:h,isReadOnly:m,isDisabled:v,onFocus:b,onBlur:w,...y}=e,S=e["aria-describedby"]?[e["aria-describedby"]]:[];return o!=null&&o.hasFeedbackText&&(o!=null&&o.isInvalid)&&S.push(o.feedbackId),o!=null&&o.hasHelpText&&S.push(o.helpTextId),{...y,"aria-describedby":S.join(" ")||void 0,id:s??(o==null?void 0:o.id),isDisabled:(t=i??v)!=null?t:o==null?void 0:o.isDisabled,isReadOnly:(n=c??m)!=null?n:o==null?void 0:o.isReadOnly,isRequired:(r=d??p)!=null?r:o==null?void 0:o.isRequired,isInvalid:h??(o==null?void 0:o.isInvalid),onFocus:et(o==null?void 0:o.onFocus,b),onBlur:et(o==null?void 0:o.onBlur,w)}}var wb={border:"0",clip:"rect(0, 0, 0, 0)",height:"1px",width:"1px",margin:"-1px",padding:"0",overflow:"hidden",whiteSpace:"nowrap",position:"absolute"},Z5=je("span",{baseStyle:wb});Z5.displayName="VisuallyHidden";var oT=je("input",{baseStyle:wb});oT.displayName="VisuallyHiddenInput";const sT=()=>typeof document<"u";let zw=!1,Md=null,ol=!1,Uv=!1;const Gv=new Set;function Sb(e,t){Gv.forEach(n=>n(e,t))}const aT=typeof window<"u"&&window.navigator!=null?/^Mac/.test(window.navigator.platform):!1;function iT(e){return!(e.metaKey||!aT&&e.altKey||e.ctrlKey||e.key==="Control"||e.key==="Shift"||e.key==="Meta")}function Bw(e){ol=!0,iT(e)&&(Md="keyboard",Sb("keyboard",e))}function $l(e){if(Md="pointer",e.type==="mousedown"||e.type==="pointerdown"){ol=!0;const t=e.composedPath?e.composedPath()[0]:e.target;let n=!1;try{n=t.matches(":focus-visible")}catch{}if(n)return;Sb("pointer",e)}}function lT(e){return e.mozInputSource===0&&e.isTrusted?!0:e.detail===0&&!e.pointerType}function cT(e){lT(e)&&(ol=!0,Md="virtual")}function uT(e){e.target===window||e.target===document||(!ol&&!Uv&&(Md="virtual",Sb("virtual",e)),ol=!1,Uv=!1)}function dT(){ol=!1,Uv=!0}function Fw(){return Md!=="pointer"}function fT(){if(!sT()||zw)return;const{focus:e}=HTMLElement.prototype;HTMLElement.prototype.focus=function(...n){ol=!0,e.apply(this,n)},document.addEventListener("keydown",Bw,!0),document.addEventListener("keyup",Bw,!0),document.addEventListener("click",cT,!0),window.addEventListener("focus",uT,!0),window.addEventListener("blur",dT,!1),typeof PointerEvent<"u"?(document.addEventListener("pointerdown",$l,!0),document.addEventListener("pointermove",$l,!0),document.addEventListener("pointerup",$l,!0)):(document.addEventListener("mousedown",$l,!0),document.addEventListener("mousemove",$l,!0),document.addEventListener("mouseup",$l,!0)),zw=!0}function e3(e){fT(),e(Fw());const t=()=>e(Fw());return Gv.add(t),()=>{Gv.delete(t)}}function pT(e,t=[]){const n=Object.assign({},e);for(const r of t)r in n&&delete n[r];return n}function t3(e={}){const t=xb(e),{isDisabled:n,isReadOnly:r,isRequired:o,isInvalid:s,id:i,onBlur:c,onFocus:d,"aria-describedby":p}=t,{defaultChecked:h,isChecked:m,isFocusable:v,onChange:b,isIndeterminate:w,name:y,value:S,tabIndex:k=void 0,"aria-label":_,"aria-labelledby":P,"aria-invalid":I,...E}=e,O=pT(E,["isDisabled","isReadOnly","isRequired","isInvalid","id","onBlur","onFocus","aria-describedby"]),R=or(b),M=or(c),D=or(d),[A,L]=f.useState(!1),[Q,F]=f.useState(!1),[V,q]=f.useState(!1),[G,T]=f.useState(!1);f.useEffect(()=>e3(L),[]);const z=f.useRef(null),[$,Y]=f.useState(!0),[ae,fe]=f.useState(!!h),ie=m!==void 0,X=ie?m:ae,K=f.useCallback(de=>{if(r||n){de.preventDefault();return}ie||fe(X?de.target.checked:w?!0:de.target.checked),R==null||R(de)},[r,n,X,ie,w,R]);rc(()=>{z.current&&(z.current.indeterminate=!!w)},[w]),Ga(()=>{n&&F(!1)},[n,F]),rc(()=>{const de=z.current;if(!(de!=null&&de.form))return;const Te=()=>{fe(!!h)};return de.form.addEventListener("reset",Te),()=>{var Ee;return(Ee=de.form)==null?void 0:Ee.removeEventListener("reset",Te)}},[]);const U=n&&!v,se=f.useCallback(de=>{de.key===" "&&T(!0)},[T]),re=f.useCallback(de=>{de.key===" "&&T(!1)},[T]);rc(()=>{if(!z.current)return;z.current.checked!==X&&fe(z.current.checked)},[z.current]);const oe=f.useCallback((de={},Te=null)=>{const Ee=$e=>{Q&&$e.preventDefault(),T(!0)};return{...de,ref:Te,"data-active":Ft(G),"data-hover":Ft(V),"data-checked":Ft(X),"data-focus":Ft(Q),"data-focus-visible":Ft(Q&&A),"data-indeterminate":Ft(w),"data-disabled":Ft(n),"data-invalid":Ft(s),"data-readonly":Ft(r),"aria-hidden":!0,onMouseDown:et(de.onMouseDown,Ee),onMouseUp:et(de.onMouseUp,()=>T(!1)),onMouseEnter:et(de.onMouseEnter,()=>q(!0)),onMouseLeave:et(de.onMouseLeave,()=>q(!1))}},[G,X,n,Q,A,V,w,s,r]),pe=f.useCallback((de={},Te=null)=>({...de,ref:Te,"data-active":Ft(G),"data-hover":Ft(V),"data-checked":Ft(X),"data-focus":Ft(Q),"data-focus-visible":Ft(Q&&A),"data-indeterminate":Ft(w),"data-disabled":Ft(n),"data-invalid":Ft(s),"data-readonly":Ft(r)}),[G,X,n,Q,A,V,w,s,r]),le=f.useCallback((de={},Te=null)=>({...O,...de,ref:cn(Te,Ee=>{Ee&&Y(Ee.tagName==="LABEL")}),onClick:et(de.onClick,()=>{var Ee;$||((Ee=z.current)==null||Ee.click(),requestAnimationFrame(()=>{var $e;($e=z.current)==null||$e.focus({preventScroll:!0})}))}),"data-disabled":Ft(n),"data-checked":Ft(X),"data-invalid":Ft(s)}),[O,n,X,s,$]),ge=f.useCallback((de={},Te=null)=>({...de,ref:cn(z,Te),type:"checkbox",name:y,value:S,id:i,tabIndex:k,onChange:et(de.onChange,K),onBlur:et(de.onBlur,M,()=>F(!1)),onFocus:et(de.onFocus,D,()=>F(!0)),onKeyDown:et(de.onKeyDown,se),onKeyUp:et(de.onKeyUp,re),required:o,checked:X,disabled:U,readOnly:r,"aria-label":_,"aria-labelledby":P,"aria-invalid":I?!!I:s,"aria-describedby":p,"aria-disabled":n,style:wb}),[y,S,i,K,M,D,se,re,o,X,U,r,_,P,I,s,p,n,k]),ke=f.useCallback((de={},Te=null)=>({...de,ref:Te,onMouseDown:et(de.onMouseDown,hT),"data-disabled":Ft(n),"data-checked":Ft(X),"data-invalid":Ft(s)}),[X,n,s]);return{state:{isInvalid:s,isFocused:Q,isChecked:X,isActive:G,isHovered:V,isIndeterminate:w,isDisabled:n,isReadOnly:r,isRequired:o},getRootProps:le,getCheckboxProps:oe,getIndicatorProps:pe,getInputProps:ge,getLabelProps:ke,htmlProps:O}}function hT(e){e.preventDefault(),e.stopPropagation()}var mT={display:"inline-flex",alignItems:"center",justifyContent:"center",verticalAlign:"top",userSelect:"none",flexShrink:0},gT={cursor:"pointer",display:"inline-flex",alignItems:"center",verticalAlign:"top",position:"relative"},vT=Va({from:{opacity:0,strokeDashoffset:16,transform:"scale(0.95)"},to:{opacity:1,strokeDashoffset:0,transform:"scale(1)"}}),bT=Va({from:{opacity:0},to:{opacity:1}}),yT=Va({from:{transform:"scaleX(0.65)"},to:{transform:"scaleX(1)"}}),n3=Ae(function(t,n){const r=XA(),o={...r,...t},s=Hr("Checkbox",o),i=qn(t),{spacing:c="0.5rem",className:d,children:p,iconColor:h,iconSize:m,icon:v=a.jsx(ZA,{}),isChecked:b,isDisabled:w=r==null?void 0:r.isDisabled,onChange:y,inputProps:S,...k}=i;let _=b;r!=null&&r.value&&i.value&&(_=r.value.includes(i.value));let P=y;r!=null&&r.onChange&&i.value&&(P=pm(r.onChange,y));const{state:I,getInputProps:E,getCheckboxProps:O,getLabelProps:R,getRootProps:M}=t3({...k,isDisabled:w,isChecked:_,onChange:P}),D=YA(I.isChecked),A=f.useMemo(()=>({animation:D?I.isIndeterminate?`${bT} 20ms linear, ${yT} 200ms linear`:`${vT} 200ms linear`:void 0,fontSize:m,color:h,...s.icon}),[h,m,D,I.isIndeterminate,s.icon]),L=f.cloneElement(v,{__css:A,isIndeterminate:I.isIndeterminate,isChecked:I.isChecked});return a.jsxs(je.label,{__css:{...gT,...s.container},className:Ct("chakra-checkbox",d),...M(),children:[a.jsx("input",{className:"chakra-checkbox__input",...E(S,n)}),a.jsx(je.span,{__css:{...mT,...s.control},className:"chakra-checkbox__control",...O(),children:L}),p&&a.jsx(je.span,{className:"chakra-checkbox__label",...R(),__css:{marginStart:c,...s.label},children:p})]})});n3.displayName="Checkbox";function xT(e){const t=parseFloat(e);return typeof t!="number"||Number.isNaN(t)?0:t}function Cb(e,t){let n=xT(e);const r=10**(t??10);return n=Math.round(n*r)/r,t?n.toFixed(t):n.toString()}function qv(e){if(!Number.isFinite(e))return 0;let t=1,n=0;for(;Math.round(e*t)/t!==e;)t*=10,n+=1;return n}function Zp(e,t,n){return(e-t)*100/(n-t)}function r3(e,t,n){return(n-t)*e+t}function Kv(e,t,n){const r=Math.round((e-t)/n)*n+t,o=qv(n);return Cb(r,o)}function ic(e,t,n){return e==null?e:(n{var A;return r==null?"":(A=E0(r,s,n))!=null?A:""}),v=typeof o<"u",b=v?o:h,w=o3(ci(b),s),y=n??w,S=f.useCallback(A=>{A!==b&&(v||m(A.toString()),p==null||p(A.toString(),ci(A)))},[p,v,b]),k=f.useCallback(A=>{let L=A;return d&&(L=ic(L,i,c)),Cb(L,y)},[y,d,c,i]),_=f.useCallback((A=s)=>{let L;b===""?L=ci(A):L=ci(b)+A,L=k(L),S(L)},[k,s,S,b]),P=f.useCallback((A=s)=>{let L;b===""?L=ci(-A):L=ci(b)-A,L=k(L),S(L)},[k,s,S,b]),I=f.useCallback(()=>{var A;let L;r==null?L="":L=(A=E0(r,s,n))!=null?A:i,S(L)},[r,n,s,S,i]),E=f.useCallback(A=>{var L;const Q=(L=E0(A,s,y))!=null?L:i;S(Q)},[y,s,S,i]),O=ci(b);return{isOutOfRange:O>c||O" `}),[CT,a3]=Dn({name:"EditableContext",errorMessage:"useEditableContext: context is undefined. Seems you forgot to wrap the editable components in ``"}),i3={fontSize:"inherit",fontWeight:"inherit",textAlign:"inherit",bg:"transparent"},l3=Ae(function(t,n){const{getInputProps:r}=a3(),o=s3(),s=r(t,n),i=Ct("chakra-editable__input",t.className);return a.jsx(je.input,{...s,__css:{outline:0,...i3,...o.input},className:i})});l3.displayName="EditableInput";var c3=Ae(function(t,n){const{getPreviewProps:r}=a3(),o=s3(),s=r(t,n),i=Ct("chakra-editable__preview",t.className);return a.jsx(je.span,{...s,__css:{cursor:"text",display:"inline-block",...i3,...o.preview},className:i})});c3.displayName="EditablePreview";function Yi(e,t,n,r){const o=or(n);return f.useEffect(()=>{const s=typeof e=="function"?e():e??document;if(!(!n||!s))return s.addEventListener(t,o,r),()=>{s.removeEventListener(t,o,r)}},[t,e,r,o,n]),()=>{const s=typeof e=="function"?e():e??document;s==null||s.removeEventListener(t,o,r)}}function kT(e){return"current"in e}var u3=()=>typeof window<"u";function _T(){var e;const t=navigator.userAgentData;return(e=t==null?void 0:t.platform)!=null?e:navigator.platform}var PT=e=>u3()&&e.test(navigator.vendor),jT=e=>u3()&&e.test(_T()),IT=()=>jT(/mac|iphone|ipad|ipod/i),ET=()=>IT()&&PT(/apple/i);function d3(e){const{ref:t,elements:n,enabled:r}=e,o=()=>{var s,i;return(i=(s=t.current)==null?void 0:s.ownerDocument)!=null?i:document};Yi(o,"pointerdown",s=>{if(!ET()||!r)return;const i=s.target,d=(n??[t]).some(p=>{const h=kT(p)?p.current:p;return(h==null?void 0:h.contains(i))||h===i});o().activeElement!==i&&d&&(s.preventDefault(),i.focus())})}function Hw(e,t){return e?e===t||e.contains(t):!1}function OT(e={}){const{onChange:t,onCancel:n,onSubmit:r,onBlur:o,value:s,isDisabled:i,defaultValue:c,startWithEditView:d,isPreviewFocusable:p=!0,submitOnBlur:h=!0,selectAllOnFocus:m=!0,placeholder:v,onEdit:b,finalFocusRef:w,...y}=e,S=or(b),k=!!(d&&!i),[_,P]=f.useState(k),[I,E]=Bc({defaultValue:c||"",value:s,onChange:t}),[O,R]=f.useState(I),M=f.useRef(null),D=f.useRef(null),A=f.useRef(null),L=f.useRef(null),Q=f.useRef(null);d3({ref:M,enabled:_,elements:[L,Q]});const F=!_&&!i;rc(()=>{var oe,pe;_&&((oe=M.current)==null||oe.focus(),m&&((pe=M.current)==null||pe.select()))},[]),Ga(()=>{var oe,pe,le,ge;if(!_){w?(oe=w.current)==null||oe.focus():(pe=A.current)==null||pe.focus();return}(le=M.current)==null||le.focus(),m&&((ge=M.current)==null||ge.select()),S==null||S()},[_,S,m]);const V=f.useCallback(()=>{F&&P(!0)},[F]),q=f.useCallback(()=>{R(I)},[I]),G=f.useCallback(()=>{P(!1),E(O),n==null||n(O),o==null||o(O)},[n,o,E,O]),T=f.useCallback(()=>{P(!1),R(I),r==null||r(I),o==null||o(O)},[I,r,o,O]);f.useEffect(()=>{if(_)return;const oe=M.current;(oe==null?void 0:oe.ownerDocument.activeElement)===oe&&(oe==null||oe.blur())},[_]);const z=f.useCallback(oe=>{E(oe.currentTarget.value)},[E]),$=f.useCallback(oe=>{const pe=oe.key,ge={Escape:G,Enter:ke=>{!ke.shiftKey&&!ke.metaKey&&T()}}[pe];ge&&(oe.preventDefault(),ge(oe))},[G,T]),Y=f.useCallback(oe=>{const pe=oe.key,ge={Escape:G}[pe];ge&&(oe.preventDefault(),ge(oe))},[G]),ae=I.length===0,fe=f.useCallback(oe=>{var pe;if(!_)return;const le=oe.currentTarget.ownerDocument,ge=(pe=oe.relatedTarget)!=null?pe:le.activeElement,ke=Hw(L.current,ge),xe=Hw(Q.current,ge);!ke&&!xe&&(h?T():G())},[h,T,G,_]),ie=f.useCallback((oe={},pe=null)=>{const le=F&&p?0:void 0;return{...oe,ref:cn(pe,D),children:ae?v:I,hidden:_,"aria-disabled":rs(i),tabIndex:le,onFocus:et(oe.onFocus,V,q)}},[i,_,F,p,ae,V,q,v,I]),X=f.useCallback((oe={},pe=null)=>({...oe,hidden:!_,placeholder:v,ref:cn(pe,M),disabled:i,"aria-disabled":rs(i),value:I,onBlur:et(oe.onBlur,fe),onChange:et(oe.onChange,z),onKeyDown:et(oe.onKeyDown,$),onFocus:et(oe.onFocus,q)}),[i,_,fe,z,$,q,v,I]),K=f.useCallback((oe={},pe=null)=>({...oe,hidden:!_,placeholder:v,ref:cn(pe,M),disabled:i,"aria-disabled":rs(i),value:I,onBlur:et(oe.onBlur,fe),onChange:et(oe.onChange,z),onKeyDown:et(oe.onKeyDown,Y),onFocus:et(oe.onFocus,q)}),[i,_,fe,z,Y,q,v,I]),U=f.useCallback((oe={},pe=null)=>({"aria-label":"Edit",...oe,type:"button",onClick:et(oe.onClick,V),ref:cn(pe,A),disabled:i}),[V,i]),se=f.useCallback((oe={},pe=null)=>({...oe,"aria-label":"Submit",ref:cn(Q,pe),type:"button",onClick:et(oe.onClick,T),disabled:i}),[T,i]),re=f.useCallback((oe={},pe=null)=>({"aria-label":"Cancel",id:"cancel",...oe,ref:cn(L,pe),type:"button",onClick:et(oe.onClick,G),disabled:i}),[G,i]);return{isEditing:_,isDisabled:i,isValueEmpty:ae,value:I,onEdit:V,onCancel:G,onSubmit:T,getPreviewProps:ie,getInputProps:X,getTextareaProps:K,getEditButtonProps:U,getSubmitButtonProps:se,getCancelButtonProps:re,htmlProps:y}}var f3=Ae(function(t,n){const r=Hr("Editable",t),o=qn(t),{htmlProps:s,...i}=OT(o),{isEditing:c,onSubmit:d,onCancel:p,onEdit:h}=i,m=Ct("chakra-editable",t.className),v=Z1(t.children,{isEditing:c,onSubmit:d,onCancel:p,onEdit:h});return a.jsx(CT,{value:i,children:a.jsx(ST,{value:r,children:a.jsx(je.div,{ref:n,...s,className:m,children:v})})})});f3.displayName="Editable";var p3={exports:{}},RT="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED",MT=RT,DT=MT;function h3(){}function m3(){}m3.resetWarningCache=h3;var AT=function(){function e(r,o,s,i,c,d){if(d!==DT){var p=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw p.name="Invariant Violation",p}}e.isRequired=e;function t(){return e}var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:m3,resetWarningCache:h3};return n.PropTypes=n,n};p3.exports=AT();var TT=p3.exports;const zn=Cd(TT);var Xv="data-focus-lock",g3="data-focus-lock-disabled",NT="data-no-focus-lock",$T="data-autofocus-inside",LT="data-no-autofocus";function zT(e,t){return typeof e=="function"?e(t):e&&(e.current=t),e}function BT(e,t){var n=f.useState(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(r){var o=n.value;o!==r&&(n.value=r,n.callback(r,o))}}}})[0];return n.callback=t,n.facade}function v3(e,t){return BT(t||null,function(n){return e.forEach(function(r){return zT(r,n)})})}var O0={width:"1px",height:"0px",padding:0,overflow:"hidden",position:"fixed",top:"1px",left:"1px"},Qs=function(){return Qs=Object.assign||function(t){for(var n,r=1,o=arguments.length;r0&&s[s.length-1])&&(p[0]===6||p[0]===2)){n=0;continue}if(p[0]===3&&(!s||p[1]>s[0]&&p[1]0)&&!(o=r.next()).done;)s.push(o.value)}catch(c){i={error:c}}finally{try{o&&!o.done&&(n=r.return)&&n.call(r)}finally{if(i)throw i.error}}return s}function Yv(e,t,n){if(n||arguments.length===2)for(var r=0,o=t.length,s;r=0}).sort(eN)},tN=["button:enabled","select:enabled","textarea:enabled","input:enabled","a[href]","area[href]","summary","iframe","object","embed","audio[controls]","video[controls]","[tabindex]","[contenteditable]","[autofocus]"],jb=tN.join(","),nN="".concat(jb,", [data-focus-guard]"),T3=function(e,t){return pa((e.shadowRoot||e).children).reduce(function(n,r){return n.concat(r.matches(t?nN:jb)?[r]:[],T3(r))},[])},rN=function(e,t){var n;return e instanceof HTMLIFrameElement&&(!((n=e.contentDocument)===null||n===void 0)&&n.body)?Sm([e.contentDocument.body],t):[e]},Sm=function(e,t){return e.reduce(function(n,r){var o,s=T3(r,t),i=(o=[]).concat.apply(o,s.map(function(c){return rN(c,t)}));return n.concat(i,r.parentNode?pa(r.parentNode.querySelectorAll(jb)).filter(function(c){return c===r}):[])},[])},oN=function(e){var t=e.querySelectorAll("[".concat($T,"]"));return pa(t).map(function(n){return Sm([n])}).reduce(function(n,r){return n.concat(r)},[])},Ib=function(e,t){return pa(e).filter(function(n){return E3(t,n)}).filter(function(n){return QT(n)})},Vw=function(e,t){return t===void 0&&(t=new Map),pa(e).filter(function(n){return O3(t,n)})},Jv=function(e,t,n){return A3(Ib(Sm(e,n),t),!0,n)},Uw=function(e,t){return A3(Ib(Sm(e),t),!1)},sN=function(e,t){return Ib(oN(e),t)},lc=function(e,t){return e.shadowRoot?lc(e.shadowRoot,t):Object.getPrototypeOf(e).contains!==void 0&&Object.getPrototypeOf(e).contains.call(e,t)?!0:pa(e.children).some(function(n){var r;if(n instanceof HTMLIFrameElement){var o=(r=n.contentDocument)===null||r===void 0?void 0:r.body;return o?lc(o,t):!1}return lc(n,t)})},aN=function(e){for(var t=new Set,n=e.length,r=0;r0&&t.add(o),(s&Node.DOCUMENT_POSITION_CONTAINS)>0&&t.add(r)}return e.filter(function(i,c){return!t.has(c)})},N3=function(e){return e.parentNode?N3(e.parentNode):e},Eb=function(e){var t=eh(e);return t.filter(Boolean).reduce(function(n,r){var o=r.getAttribute(Xv);return n.push.apply(n,o?aN(pa(N3(r).querySelectorAll("[".concat(Xv,'="').concat(o,'"]:not([').concat(g3,'="disabled"])')))):[r]),n},[])},iN=function(e){try{return e()}catch{return}},ad=function(e){if(e===void 0&&(e=document),!(!e||!e.activeElement)){var t=e.activeElement;return t.shadowRoot?ad(t.shadowRoot):t instanceof HTMLIFrameElement&&iN(function(){return t.contentWindow.document})?ad(t.contentWindow.document):t}},lN=function(e,t){return e===t},cN=function(e,t){return!!pa(e.querySelectorAll("iframe")).some(function(n){return lN(n,t)})},$3=function(e,t){return t===void 0&&(t=ad(P3(e).ownerDocument)),!t||t.dataset&&t.dataset.focusGuard?!1:Eb(e).some(function(n){return lc(n,t)||cN(n,t)})},uN=function(e){e===void 0&&(e=document);var t=ad(e);return t?pa(e.querySelectorAll("[".concat(NT,"]"))).some(function(n){return lc(n,t)}):!1},dN=function(e,t){return t.filter(D3).filter(function(n){return n.name===e.name}).filter(function(n){return n.checked})[0]||e},Ob=function(e,t){return D3(e)&&e.name?dN(e,t):e},fN=function(e){var t=new Set;return e.forEach(function(n){return t.add(Ob(n,e))}),e.filter(function(n){return t.has(n)})},Gw=function(e){return e[0]&&e.length>1?Ob(e[0],e):e[0]},qw=function(e,t){return e.length>1?e.indexOf(Ob(e[t],e)):t},L3="NEW_FOCUS",pN=function(e,t,n,r){var o=e.length,s=e[0],i=e[o-1],c=Pb(n);if(!(n&&e.indexOf(n)>=0)){var d=n!==void 0?t.indexOf(n):-1,p=r?t.indexOf(r):d,h=r?e.indexOf(r):-1,m=d-p,v=t.indexOf(s),b=t.indexOf(i),w=fN(t),y=n!==void 0?w.indexOf(n):-1,S=y-(r?w.indexOf(r):d),k=qw(e,0),_=qw(e,o-1);if(d===-1||h===-1)return L3;if(!m&&h>=0)return h;if(d<=v&&c&&Math.abs(m)>1)return _;if(d>=b&&c&&Math.abs(m)>1)return k;if(m&&Math.abs(S)>1)return h;if(d<=v)return _;if(d>b)return k;if(m)return Math.abs(m)>1?h:(o+h+m)%o}},hN=function(e){return function(t){var n,r=(n=R3(t))===null||n===void 0?void 0:n.autofocus;return t.autofocus||r!==void 0&&r!=="false"||e.indexOf(t)>=0}},mN=function(e,t,n){var r=e.map(function(s){var i=s.node;return i}),o=Vw(r.filter(hN(n)));return o&&o.length?Gw(o):Gw(Vw(t))},Zv=function(e,t){return t===void 0&&(t=[]),t.push(e),e.parentNode&&Zv(e.parentNode.host||e.parentNode,t),t},R0=function(e,t){for(var n=Zv(e),r=Zv(t),o=0;o=0)return s}return!1},z3=function(e,t,n){var r=eh(e),o=eh(t),s=r[0],i=!1;return o.filter(Boolean).forEach(function(c){i=R0(i||c,c)||i,n.filter(Boolean).forEach(function(d){var p=R0(s,d);p&&(!i||lc(p,i)?i=p:i=R0(p,i))})}),i},gN=function(e,t){return e.reduce(function(n,r){return n.concat(sN(r,t))},[])},vN=function(e,t){var n=new Map;return t.forEach(function(r){return n.set(r.node,r)}),e.map(function(r){return n.get(r)}).filter(ZT)},bN=function(e,t){var n=ad(eh(e).length>0?document:P3(e).ownerDocument),r=Eb(e).filter(th),o=z3(n||e,e,r),s=new Map,i=Uw(r,s),c=Jv(r,s).filter(function(b){var w=b.node;return th(w)});if(!(!c[0]&&(c=i,!c[0]))){var d=Uw([o],s).map(function(b){var w=b.node;return w}),p=vN(d,c),h=p.map(function(b){var w=b.node;return w}),m=pN(h,d,n,t);if(m===L3){var v=mN(i,h,gN(r,s));if(v)return{node:v};console.warn("focus-lock: cannot find any node to move focus into");return}return m===void 0?m:p[m]}},yN=function(e){var t=Eb(e).filter(th),n=z3(e,e,t),r=new Map,o=Jv([n],r,!0),s=Jv(t,r).filter(function(i){var c=i.node;return th(c)}).map(function(i){var c=i.node;return c});return o.map(function(i){var c=i.node,d=i.index;return{node:c,index:d,lockItem:s.indexOf(c)>=0,guard:Pb(c)}})},xN=function(e,t){"focus"in e&&e.focus(t),"contentWindow"in e&&e.contentWindow&&e.contentWindow.focus()},M0=0,D0=!1,B3=function(e,t,n){n===void 0&&(n={});var r=bN(e,t);if(!D0&&r){if(M0>2){console.error("FocusLock: focus-fighting detected. Only one focus management system could be active. See https://github.com/theKashey/focus-lock/#focus-fighting"),D0=!0,setTimeout(function(){D0=!1},1);return}M0++,xN(r.node,n.focusOptions),M0--}};function Rb(e){setTimeout(e,1)}var wN=function(){return document&&document.activeElement===document.body},SN=function(){return wN()||uN()},cc=null,Jl=null,uc=null,id=!1,CN=function(){return!0},kN=function(t){return(cc.whiteList||CN)(t)},_N=function(t,n){uc={observerNode:t,portaledElement:n}},PN=function(t){return uc&&uc.portaledElement===t};function Kw(e,t,n,r){var o=null,s=e;do{var i=r[s];if(i.guard)i.node.dataset.focusAutoGuard&&(o=i);else if(i.lockItem){if(s!==e)return;o=null}else break}while((s+=n)!==t);o&&(o.node.tabIndex=0)}var jN=function(t){return t&&"current"in t?t.current:t},IN=function(t){return t?!!id:id==="meanwhile"},EN=function e(t,n,r){return n&&(n.host===t&&(!n.activeElement||r.contains(n.activeElement))||n.parentNode&&e(t,n.parentNode,r))},ON=function(t,n){return n.some(function(r){return EN(t,r,r)})},nh=function(){var t=!1;if(cc){var n=cc,r=n.observed,o=n.persistentFocus,s=n.autoFocus,i=n.shards,c=n.crossFrame,d=n.focusOptions,p=r||uc&&uc.portaledElement,h=document&&document.activeElement;if(p){var m=[p].concat(i.map(jN).filter(Boolean));if((!h||kN(h))&&(o||IN(c)||!SN()||!Jl&&s)&&(p&&!($3(m)||h&&ON(h,m)||PN(h))&&(document&&!Jl&&h&&!s?(h.blur&&h.blur(),document.body.focus()):(t=B3(m,Jl,{focusOptions:d}),uc={})),id=!1,Jl=document&&document.activeElement),document){var v=document&&document.activeElement,b=yN(m),w=b.map(function(y){var S=y.node;return S}).indexOf(v);w>-1&&(b.filter(function(y){var S=y.guard,k=y.node;return S&&k.dataset.focusAutoGuard}).forEach(function(y){var S=y.node;return S.removeAttribute("tabIndex")}),Kw(w,b.length,1,b),Kw(w,-1,-1,b))}}}return t},F3=function(t){nh()&&t&&(t.stopPropagation(),t.preventDefault())},Mb=function(){return Rb(nh)},RN=function(t){var n=t.target,r=t.currentTarget;r.contains(n)||_N(r,n)},MN=function(){return null},H3=function(){id="just",Rb(function(){id="meanwhile"})},DN=function(){document.addEventListener("focusin",F3),document.addEventListener("focusout",Mb),window.addEventListener("blur",H3)},AN=function(){document.removeEventListener("focusin",F3),document.removeEventListener("focusout",Mb),window.removeEventListener("blur",H3)};function TN(e){return e.filter(function(t){var n=t.disabled;return!n})}function NN(e){var t=e.slice(-1)[0];t&&!cc&&DN();var n=cc,r=n&&t&&t.id===n.id;cc=t,n&&!r&&(n.onDeactivation(),e.filter(function(o){var s=o.id;return s===n.id}).length||n.returnFocus(!t)),t?(Jl=null,(!r||n.observed!==t.observed)&&t.onActivation(),nh(),Rb(nh)):(AN(),Jl=null)}C3.assignSyncMedium(RN);k3.assignMedium(Mb);HT.assignMedium(function(e){return e({moveFocusInside:B3,focusInside:$3})});const $N=GT(TN,NN)(MN);var W3=f.forwardRef(function(t,n){return f.createElement(_3,sr({sideCar:$N,ref:n},t))}),V3=_3.propTypes||{};V3.sideCar;N9(V3,["sideCar"]);W3.propTypes={};const Xw=W3;function U3(e){return e!=null&&typeof e=="object"&&"nodeType"in e&&e.nodeType===Node.ELEMENT_NODE}function Db(e){var t;if(!U3(e))return!1;const n=(t=e.ownerDocument.defaultView)!=null?t:window;return e instanceof n.HTMLElement}function LN(e){var t,n;return(n=(t=G3(e))==null?void 0:t.defaultView)!=null?n:window}function G3(e){return U3(e)?e.ownerDocument:document}function zN(e){return G3(e).activeElement}function BN(e){const t=e.ownerDocument.defaultView||window,{overflow:n,overflowX:r,overflowY:o}=t.getComputedStyle(e);return/auto|scroll|overlay|hidden/.test(n+o+r)}function FN(e){return e.localName==="html"?e:e.assignedSlot||e.parentElement||e.ownerDocument.documentElement}function q3(e){return["html","body","#document"].includes(e.localName)?e.ownerDocument.body:Db(e)&&BN(e)?e:q3(FN(e))}var K3=e=>e.hasAttribute("tabindex"),HN=e=>K3(e)&&e.tabIndex===-1;function WN(e){return!!e.getAttribute("disabled")||!!e.getAttribute("aria-disabled")}function X3(e){return e.parentElement&&X3(e.parentElement)?!0:e.hidden}function VN(e){const t=e.getAttribute("contenteditable");return t!=="false"&&t!=null}function Y3(e){if(!Db(e)||X3(e)||WN(e))return!1;const{localName:t}=e;if(["input","select","textarea","button"].indexOf(t)>=0)return!0;const r={a:()=>e.hasAttribute("href"),audio:()=>e.hasAttribute("controls"),video:()=>e.hasAttribute("controls")};return t in r?r[t]():VN(e)?!0:K3(e)}function UN(e){return e?Db(e)&&Y3(e)&&!HN(e):!1}var GN=["input:not(:disabled):not([disabled])","select:not(:disabled):not([disabled])","textarea:not(:disabled):not([disabled])","embed","iframe","object","a[href]","area[href]","button:not(:disabled):not([disabled])","[tabindex]","audio[controls]","video[controls]","*[tabindex]:not([aria-disabled])","*[contenteditable]"],qN=GN.join(),KN=e=>e.offsetWidth>0&&e.offsetHeight>0;function Q3(e){const t=Array.from(e.querySelectorAll(qN));return t.unshift(e),t.filter(n=>Y3(n)&&KN(n))}var Yw,XN=(Yw=Xw.default)!=null?Yw:Xw,J3=e=>{const{initialFocusRef:t,finalFocusRef:n,contentRef:r,restoreFocus:o,children:s,isDisabled:i,autoFocus:c,persistentFocus:d,lockFocusAcrossFrames:p}=e,h=f.useCallback(()=>{t!=null&&t.current?t.current.focus():r!=null&&r.current&&Q3(r.current).length===0&&requestAnimationFrame(()=>{var w;(w=r.current)==null||w.focus()})},[t,r]),m=f.useCallback(()=>{var b;(b=n==null?void 0:n.current)==null||b.focus()},[n]),v=o&&!n;return a.jsx(XN,{crossFrame:p,persistentFocus:d,autoFocus:c,disabled:i,onActivation:h,onDeactivation:m,returnFocus:v,children:s})};J3.displayName="FocusLock";var YN=sA?f.useLayoutEffect:f.useEffect;function rh(e,t=[]){const n=f.useRef(e);return YN(()=>{n.current=e}),f.useCallback((...r)=>{var o;return(o=n.current)==null?void 0:o.call(n,...r)},t)}function QN(e,t,n,r){const o=rh(t);return f.useEffect(()=>{var s;const i=(s=X2(n))!=null?s:document;if(t)return i.addEventListener(e,o,r),()=>{i.removeEventListener(e,o,r)}},[e,n,r,o,t]),()=>{var s;((s=X2(n))!=null?s:document).removeEventListener(e,o,r)}}function JN(e){const{ref:t,handler:n,enabled:r=!0}=e,o=rh(n),i=f.useRef({isPointerDown:!1,ignoreEmulatedMouseEvents:!1}).current;f.useEffect(()=>{if(!r)return;const c=m=>{A0(m,t)&&(i.isPointerDown=!0)},d=m=>{if(i.ignoreEmulatedMouseEvents){i.ignoreEmulatedMouseEvents=!1;return}i.isPointerDown&&n&&A0(m,t)&&(i.isPointerDown=!1,o(m))},p=m=>{i.ignoreEmulatedMouseEvents=!0,n&&i.isPointerDown&&A0(m,t)&&(i.isPointerDown=!1,o(m))},h=H5(t.current);return h.addEventListener("mousedown",c,!0),h.addEventListener("mouseup",d,!0),h.addEventListener("touchstart",c,!0),h.addEventListener("touchend",p,!0),()=>{h.removeEventListener("mousedown",c,!0),h.removeEventListener("mouseup",d,!0),h.removeEventListener("touchstart",c,!0),h.removeEventListener("touchend",p,!0)}},[n,t,o,i,r])}function A0(e,t){var n;const r=e.target;return r&&!H5(r).contains(r)?!1:!((n=t.current)!=null&&n.contains(r))}function ZN(e,t){const n=f.useId();return f.useMemo(()=>e||[t,n].filter(Boolean).join("-"),[e,t,n])}function e$(e,t){const n=e!==void 0;return[n,n&&typeof e<"u"?e:t]}function ss(e={}){const{onClose:t,onOpen:n,isOpen:r,id:o}=e,s=rh(n),i=rh(t),[c,d]=f.useState(e.defaultIsOpen||!1),[p,h]=e$(r,c),m=ZN(o,"disclosure"),v=f.useCallback(()=>{p||d(!1),i==null||i()},[p,i]),b=f.useCallback(()=>{p||d(!0),s==null||s()},[p,s]),w=f.useCallback(()=>{(h?v:b)()},[h,b,v]);return{isOpen:!!h,onOpen:b,onClose:v,onToggle:w,isControlled:p,getButtonProps:(y={})=>({...y,"aria-expanded":h,"aria-controls":m,onClick:LR(y.onClick,w)}),getDisclosureProps:(y={})=>({...y,hidden:!h,id:m})}}var[t$,n$]=Dn({name:"InputGroupStylesContext",errorMessage:`useInputGroupStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),Z3=Ae(function(t,n){const r=Hr("Input",t),{children:o,className:s,...i}=qn(t),c=Ct("chakra-input__group",s),d={},p=Od(o),h=r.field;p.forEach(v=>{var b,w;r&&(h&&v.type.id==="InputLeftElement"&&(d.paddingStart=(b=h.height)!=null?b:h.h),h&&v.type.id==="InputRightElement"&&(d.paddingEnd=(w=h.height)!=null?w:h.h),v.type.id==="InputRightAddon"&&(d.borderEndRadius=0),v.type.id==="InputLeftAddon"&&(d.borderStartRadius=0))});const m=p.map(v=>{var b,w;const y=mb({size:((b=v.props)==null?void 0:b.size)||t.size,variant:((w=v.props)==null?void 0:w.variant)||t.variant});return v.type.id!=="Input"?f.cloneElement(v,y):f.cloneElement(v,Object.assign(y,d,v.props))});return a.jsx(je.div,{className:c,ref:n,__css:{width:"100%",display:"flex",position:"relative",isolation:"isolate",...r.group},"data-group":!0,...i,children:a.jsx(t$,{value:r,children:m})})});Z3.displayName="InputGroup";var r$=je("div",{baseStyle:{display:"flex",alignItems:"center",justifyContent:"center",position:"absolute",top:"0",zIndex:2}}),Cm=Ae(function(t,n){var r,o;const{placement:s="left",...i}=t,c=n$(),d=c.field,h={[s==="left"?"insetStart":"insetEnd"]:"0",width:(r=d==null?void 0:d.height)!=null?r:d==null?void 0:d.h,height:(o=d==null?void 0:d.height)!=null?o:d==null?void 0:d.h,fontSize:d==null?void 0:d.fontSize,...c.element};return a.jsx(r$,{ref:n,__css:h,...i})});Cm.id="InputElement";Cm.displayName="InputElement";var e6=Ae(function(t,n){const{className:r,...o}=t,s=Ct("chakra-input__left-element",r);return a.jsx(Cm,{ref:n,placement:"left",className:s,...o})});e6.id="InputLeftElement";e6.displayName="InputLeftElement";var Ab=Ae(function(t,n){const{className:r,...o}=t,s=Ct("chakra-input__right-element",r);return a.jsx(Cm,{ref:n,placement:"right",className:s,...o})});Ab.id="InputRightElement";Ab.displayName="InputRightElement";var Dd=Ae(function(t,n){const{htmlSize:r,...o}=t,s=Hr("Input",o),i=qn(o),c=yb(i),d=Ct("chakra-input",t.className);return a.jsx(je.input,{size:r,...c,__css:s.field,ref:n,className:d})});Dd.displayName="Input";Dd.id="Input";var Tb=Ae(function(t,n){const r=fa("Link",t),{className:o,isExternal:s,...i}=qn(t);return a.jsx(je.a,{target:s?"_blank":void 0,rel:s?"noopener":void 0,ref:n,className:Ct("chakra-link",o),...i,__css:r})});Tb.displayName="Link";var[o$,t6]=Dn({name:"ListStylesContext",errorMessage:`useListStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),Nb=Ae(function(t,n){const r=Hr("List",t),{children:o,styleType:s="none",stylePosition:i,spacing:c,...d}=qn(t),p=Od(o),m=c?{["& > *:not(style) ~ *:not(style)"]:{mt:c}}:{};return a.jsx(o$,{value:r,children:a.jsx(je.ul,{ref:n,listStyleType:s,listStylePosition:i,role:"list",__css:{...r.container,...m},...d,children:p})})});Nb.displayName="List";var s$=Ae((e,t)=>{const{as:n,...r}=e;return a.jsx(Nb,{ref:t,as:"ol",styleType:"decimal",marginStart:"1em",...r})});s$.displayName="OrderedList";var $b=Ae(function(t,n){const{as:r,...o}=t;return a.jsx(Nb,{ref:n,as:"ul",styleType:"initial",marginStart:"1em",...o})});$b.displayName="UnorderedList";var ja=Ae(function(t,n){const r=t6();return a.jsx(je.li,{ref:n,...t,__css:r.item})});ja.displayName="ListItem";var a$=Ae(function(t,n){const r=t6();return a.jsx(fo,{ref:n,role:"presentation",...t,__css:r.icon})});a$.displayName="ListIcon";var sl=Ae(function(t,n){const{templateAreas:r,gap:o,rowGap:s,columnGap:i,column:c,row:d,autoFlow:p,autoRows:h,templateRows:m,autoColumns:v,templateColumns:b,...w}=t,y={display:"grid",gridTemplateAreas:r,gridGap:o,gridRowGap:s,gridColumnGap:i,gridAutoColumns:v,gridColumn:c,gridRow:d,gridAutoFlow:p,gridAutoRows:h,gridTemplateRows:m,gridTemplateColumns:b};return a.jsx(je.div,{ref:n,__css:y,...w})});sl.displayName="Grid";function n6(e,t){return Array.isArray(e)?e.map(n=>n===null?null:t(n)):Ev(e)?Object.keys(e).reduce((n,r)=>(n[r]=t(e[r]),n),{}):e!=null?t(e):null}var ml=je("div",{baseStyle:{flex:1,justifySelf:"stretch",alignSelf:"stretch"}});ml.displayName="Spacer";var Je=Ae(function(t,n){const r=fa("Text",t),{className:o,align:s,decoration:i,casing:c,...d}=qn(t),p=mb({textAlign:t.align,textDecoration:t.decoration,textTransform:t.casing});return a.jsx(je.p,{ref:n,className:Ct("chakra-text",t.className),...p,...d,__css:r})});Je.displayName="Text";var r6=e=>a.jsx(je.div,{className:"chakra-stack__item",...e,__css:{display:"inline-block",flex:"0 0 auto",minWidth:0,...e.__css}});r6.displayName="StackItem";function i$(e){const{spacing:t,direction:n}=e,r={column:{my:t,mx:0,borderLeftWidth:0,borderBottomWidth:"1px"},"column-reverse":{my:t,mx:0,borderLeftWidth:0,borderBottomWidth:"1px"},row:{mx:t,my:0,borderLeftWidth:"1px",borderBottomWidth:0},"row-reverse":{mx:t,my:0,borderLeftWidth:"1px",borderBottomWidth:0}};return{"&":n6(n,o=>r[o])}}var Lb=Ae((e,t)=>{const{isInline:n,direction:r,align:o,justify:s,spacing:i="0.5rem",wrap:c,children:d,divider:p,className:h,shouldWrapChildren:m,...v}=e,b=n?"row":r??"column",w=f.useMemo(()=>i$({spacing:i,direction:b}),[i,b]),y=!!p,S=!m&&!y,k=f.useMemo(()=>{const P=Od(d);return S?P:P.map((I,E)=>{const O=typeof I.key<"u"?I.key:E,R=E+1===P.length,D=m?a.jsx(r6,{children:I},O):I;if(!y)return D;const A=f.cloneElement(p,{__css:w}),L=R?null:A;return a.jsxs(f.Fragment,{children:[D,L]},O)})},[p,w,y,S,m,d]),_=Ct("chakra-stack",h);return a.jsx(je.div,{ref:t,display:"flex",alignItems:o,justifyContent:s,flexDirection:b,flexWrap:c,gap:y?void 0:i,className:_,...v,children:k})});Lb.displayName="Stack";var o6=Ae((e,t)=>a.jsx(Lb,{align:"center",...e,direction:"column",ref:t}));o6.displayName="VStack";var bi=Ae((e,t)=>a.jsx(Lb,{align:"center",...e,direction:"row",ref:t}));bi.displayName="HStack";function Qw(e){return n6(e,t=>t==="auto"?"auto":`span ${t}/span ${t}`)}var e1=Ae(function(t,n){const{area:r,colSpan:o,colStart:s,colEnd:i,rowEnd:c,rowSpan:d,rowStart:p,...h}=t,m=mb({gridArea:r,gridColumn:Qw(o),gridRow:Qw(d),gridColumnStart:s,gridColumnEnd:i,gridRowStart:p,gridRowEnd:c});return a.jsx(je.div,{ref:n,__css:m,...h})});e1.displayName="GridItem";var gl=Ae(function(t,n){const r=fa("Badge",t),{className:o,...s}=qn(t);return a.jsx(je.span,{ref:n,className:Ct("chakra-badge",t.className),...s,__css:{display:"inline-block",whiteSpace:"nowrap",verticalAlign:"middle",...r}})});gl.displayName="Badge";var Ka=Ae(function(t,n){const{borderLeftWidth:r,borderBottomWidth:o,borderTopWidth:s,borderRightWidth:i,borderWidth:c,borderStyle:d,borderColor:p,...h}=fa("Divider",t),{className:m,orientation:v="horizontal",__css:b,...w}=qn(t),y={vertical:{borderLeftWidth:r||i||c||"1px",height:"100%"},horizontal:{borderBottomWidth:o||s||c||"1px",width:"100%"}};return a.jsx(je.hr,{ref:n,"aria-orientation":v,...w,__css:{...h,border:"0",borderColor:p,borderStyle:d,...y[v],...b},className:Ct("chakra-divider",m)})});Ka.displayName="Divider";function l$(e){const{key:t}=e;return t.length===1||t.length>1&&/[^a-zA-Z0-9]/.test(t)}function c$(e={}){const{timeout:t=300,preventDefault:n=()=>!0}=e,[r,o]=f.useState([]),s=f.useRef(),i=()=>{s.current&&(clearTimeout(s.current),s.current=null)},c=()=>{i(),s.current=setTimeout(()=>{o([]),s.current=null},t)};f.useEffect(()=>i,[]);function d(p){return h=>{if(h.key==="Backspace"){const m=[...r];m.pop(),o(m);return}if(l$(h)){const m=r.concat(h.key);n(h)&&(h.preventDefault(),h.stopPropagation()),o(m),p(m.join("")),c()}}}return d}function u$(e,t,n,r){if(t==null)return r;if(!r)return e.find(i=>n(i).toLowerCase().startsWith(t.toLowerCase()));const o=e.filter(s=>n(s).toLowerCase().startsWith(t.toLowerCase()));if(o.length>0){let s;return o.includes(r)?(s=o.indexOf(r)+1,s===o.length&&(s=0),o[s]):(s=e.indexOf(o[0]),e[s])}return r}function d$(){const e=f.useRef(new Map),t=e.current,n=f.useCallback((o,s,i,c)=>{e.current.set(i,{type:s,el:o,options:c}),o.addEventListener(s,i,c)},[]),r=f.useCallback((o,s,i,c)=>{o.removeEventListener(s,i,c),e.current.delete(i)},[]);return f.useEffect(()=>()=>{t.forEach((o,s)=>{r(o.el,o.type,s,o.options)})},[r,t]),{add:n,remove:r}}function T0(e){const t=e.target,{tagName:n,isContentEditable:r}=t;return n!=="INPUT"&&n!=="TEXTAREA"&&r!==!0}function s6(e={}){const{ref:t,isDisabled:n,isFocusable:r,clickOnEnter:o=!0,clickOnSpace:s=!0,onMouseDown:i,onMouseUp:c,onClick:d,onKeyDown:p,onKeyUp:h,tabIndex:m,onMouseOver:v,onMouseLeave:b,...w}=e,[y,S]=f.useState(!0),[k,_]=f.useState(!1),P=d$(),I=T=>{T&&T.tagName!=="BUTTON"&&S(!1)},E=y?m:m||0,O=n&&!r,R=f.useCallback(T=>{if(n){T.stopPropagation(),T.preventDefault();return}T.currentTarget.focus(),d==null||d(T)},[n,d]),M=f.useCallback(T=>{k&&T0(T)&&(T.preventDefault(),T.stopPropagation(),_(!1),P.remove(document,"keyup",M,!1))},[k,P]),D=f.useCallback(T=>{if(p==null||p(T),n||T.defaultPrevented||T.metaKey||!T0(T.nativeEvent)||y)return;const z=o&&T.key==="Enter";s&&T.key===" "&&(T.preventDefault(),_(!0)),z&&(T.preventDefault(),T.currentTarget.click()),P.add(document,"keyup",M,!1)},[n,y,p,o,s,P,M]),A=f.useCallback(T=>{if(h==null||h(T),n||T.defaultPrevented||T.metaKey||!T0(T.nativeEvent)||y)return;s&&T.key===" "&&(T.preventDefault(),_(!1),T.currentTarget.click())},[s,y,n,h]),L=f.useCallback(T=>{T.button===0&&(_(!1),P.remove(document,"mouseup",L,!1))},[P]),Q=f.useCallback(T=>{if(T.button!==0)return;if(n){T.stopPropagation(),T.preventDefault();return}y||_(!0),T.currentTarget.focus({preventScroll:!0}),P.add(document,"mouseup",L,!1),i==null||i(T)},[n,y,i,P,L]),F=f.useCallback(T=>{T.button===0&&(y||_(!1),c==null||c(T))},[c,y]),V=f.useCallback(T=>{if(n){T.preventDefault();return}v==null||v(T)},[n,v]),q=f.useCallback(T=>{k&&(T.preventDefault(),_(!1)),b==null||b(T)},[k,b]),G=cn(t,I);return y?{...w,ref:G,type:"button","aria-disabled":O?void 0:n,disabled:O,onClick:R,onMouseDown:i,onMouseUp:c,onKeyUp:h,onKeyDown:p,onMouseOver:v,onMouseLeave:b}:{...w,ref:G,role:"button","data-active":Ft(k),"aria-disabled":n?"true":void 0,tabIndex:O?void 0:E,onClick:R,onMouseDown:Q,onMouseUp:F,onKeyUp:A,onKeyDown:D,onMouseOver:V,onMouseLeave:q}}function f$(e){const t=e.current;if(!t)return!1;const n=zN(t);return!n||t.contains(n)?!1:!!UN(n)}function a6(e,t){const{shouldFocus:n,visible:r,focusRef:o}=t,s=n&&!r;Ga(()=>{if(!s||f$(e))return;const i=(o==null?void 0:o.current)||e.current;let c;if(i)return c=requestAnimationFrame(()=>{i.focus({preventScroll:!0})}),()=>{cancelAnimationFrame(c)}},[s,e,o])}var p$={preventScroll:!0,shouldFocus:!1};function h$(e,t=p$){const{focusRef:n,preventScroll:r,shouldFocus:o,visible:s}=t,i=m$(e)?e.current:e,c=o&&s,d=f.useRef(c),p=f.useRef(s);rc(()=>{!p.current&&s&&(d.current=c),p.current=s},[s,c]);const h=f.useCallback(()=>{if(!(!s||!i||!d.current)&&(d.current=!1,!i.contains(document.activeElement)))if(n!=null&&n.current)requestAnimationFrame(()=>{var m;(m=n.current)==null||m.focus({preventScroll:r})});else{const m=Q3(i);m.length>0&&requestAnimationFrame(()=>{m[0].focus({preventScroll:r})})}},[s,r,i,n]);Ga(()=>{h()},[h]),Yi(i,"transitionend",h)}function m$(e){return"current"in e}var Ll=(e,t)=>({var:e,varRef:t?`var(${e}, ${t})`:`var(${e})`}),Ir={arrowShadowColor:Ll("--popper-arrow-shadow-color"),arrowSize:Ll("--popper-arrow-size","8px"),arrowSizeHalf:Ll("--popper-arrow-size-half"),arrowBg:Ll("--popper-arrow-bg"),transformOrigin:Ll("--popper-transform-origin"),arrowOffset:Ll("--popper-arrow-offset")};function g$(e){if(e.includes("top"))return"1px 1px 0px 0 var(--popper-arrow-shadow-color)";if(e.includes("bottom"))return"-1px -1px 0px 0 var(--popper-arrow-shadow-color)";if(e.includes("right"))return"-1px 1px 0px 0 var(--popper-arrow-shadow-color)";if(e.includes("left"))return"1px -1px 0px 0 var(--popper-arrow-shadow-color)"}var v$={top:"bottom center","top-start":"bottom left","top-end":"bottom right",bottom:"top center","bottom-start":"top left","bottom-end":"top right",left:"right center","left-start":"right top","left-end":"right bottom",right:"left center","right-start":"left top","right-end":"left bottom"},b$=e=>v$[e],Jw={scroll:!0,resize:!0};function y$(e){let t;return typeof e=="object"?t={enabled:!0,options:{...Jw,...e}}:t={enabled:e,options:Jw},t}var x$={name:"matchWidth",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:({state:e})=>{e.styles.popper.width=`${e.rects.reference.width}px`},effect:({state:e})=>()=>{const t=e.elements.reference;e.elements.popper.style.width=`${t.offsetWidth}px`}},w$={name:"transformOrigin",enabled:!0,phase:"write",fn:({state:e})=>{Zw(e)},effect:({state:e})=>()=>{Zw(e)}},Zw=e=>{e.elements.popper.style.setProperty(Ir.transformOrigin.var,b$(e.placement))},S$={name:"positionArrow",enabled:!0,phase:"afterWrite",fn:({state:e})=>{C$(e)}},C$=e=>{var t;if(!e.placement)return;const n=k$(e.placement);if((t=e.elements)!=null&&t.arrow&&n){Object.assign(e.elements.arrow.style,{[n.property]:n.value,width:Ir.arrowSize.varRef,height:Ir.arrowSize.varRef,zIndex:-1});const r={[Ir.arrowSizeHalf.var]:`calc(${Ir.arrowSize.varRef} / 2 - 1px)`,[Ir.arrowOffset.var]:`calc(${Ir.arrowSizeHalf.varRef} * -1)`};for(const o in r)e.elements.arrow.style.setProperty(o,r[o])}},k$=e=>{if(e.startsWith("top"))return{property:"bottom",value:Ir.arrowOffset.varRef};if(e.startsWith("bottom"))return{property:"top",value:Ir.arrowOffset.varRef};if(e.startsWith("left"))return{property:"right",value:Ir.arrowOffset.varRef};if(e.startsWith("right"))return{property:"left",value:Ir.arrowOffset.varRef}},_$={name:"innerArrow",enabled:!0,phase:"main",requires:["arrow"],fn:({state:e})=>{eS(e)},effect:({state:e})=>()=>{eS(e)}},eS=e=>{if(!e.elements.arrow)return;const t=e.elements.arrow.querySelector("[data-popper-arrow-inner]");if(!t)return;const n=g$(e.placement);n&&t.style.setProperty("--popper-arrow-default-shadow",n),Object.assign(t.style,{transform:"rotate(45deg)",background:Ir.arrowBg.varRef,top:0,left:0,width:"100%",height:"100%",position:"absolute",zIndex:"inherit",boxShadow:"var(--popper-arrow-shadow, var(--popper-arrow-default-shadow))"})},P$={"start-start":{ltr:"left-start",rtl:"right-start"},"start-end":{ltr:"left-end",rtl:"right-end"},"end-start":{ltr:"right-start",rtl:"left-start"},"end-end":{ltr:"right-end",rtl:"left-end"},start:{ltr:"left",rtl:"right"},end:{ltr:"right",rtl:"left"}},j$={"auto-start":"auto-end","auto-end":"auto-start","top-start":"top-end","top-end":"top-start","bottom-start":"bottom-end","bottom-end":"bottom-start"};function I$(e,t="ltr"){var n,r;const o=((n=P$[e])==null?void 0:n[t])||e;return t==="ltr"?o:(r=j$[e])!=null?r:o}var Po="top",as="bottom",is="right",jo="left",zb="auto",Ad=[Po,as,is,jo],wc="start",ld="end",E$="clippingParents",i6="viewport",xu="popper",O$="reference",tS=Ad.reduce(function(e,t){return e.concat([t+"-"+wc,t+"-"+ld])},[]),l6=[].concat(Ad,[zb]).reduce(function(e,t){return e.concat([t,t+"-"+wc,t+"-"+ld])},[]),R$="beforeRead",M$="read",D$="afterRead",A$="beforeMain",T$="main",N$="afterMain",$$="beforeWrite",L$="write",z$="afterWrite",B$=[R$,M$,D$,A$,T$,N$,$$,L$,z$];function ra(e){return e?(e.nodeName||"").toLowerCase():null}function Fo(e){if(e==null)return window;if(e.toString()!=="[object Window]"){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function al(e){var t=Fo(e).Element;return e instanceof t||e instanceof Element}function os(e){var t=Fo(e).HTMLElement;return e instanceof t||e instanceof HTMLElement}function Bb(e){if(typeof ShadowRoot>"u")return!1;var t=Fo(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}function F$(e){var t=e.state;Object.keys(t.elements).forEach(function(n){var r=t.styles[n]||{},o=t.attributes[n]||{},s=t.elements[n];!os(s)||!ra(s)||(Object.assign(s.style,r),Object.keys(o).forEach(function(i){var c=o[i];c===!1?s.removeAttribute(i):s.setAttribute(i,c===!0?"":c)}))})}function H$(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(r){var o=t.elements[r],s=t.attributes[r]||{},i=Object.keys(t.styles.hasOwnProperty(r)?t.styles[r]:n[r]),c=i.reduce(function(d,p){return d[p]="",d},{});!os(o)||!ra(o)||(Object.assign(o.style,c),Object.keys(s).forEach(function(d){o.removeAttribute(d)}))})}}const W$={name:"applyStyles",enabled:!0,phase:"write",fn:F$,effect:H$,requires:["computeStyles"]};function ta(e){return e.split("-")[0]}var Qi=Math.max,oh=Math.min,Sc=Math.round;function t1(){var e=navigator.userAgentData;return e!=null&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(t){return t.brand+"/"+t.version}).join(" "):navigator.userAgent}function c6(){return!/^((?!chrome|android).)*safari/i.test(t1())}function Cc(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var r=e.getBoundingClientRect(),o=1,s=1;t&&os(e)&&(o=e.offsetWidth>0&&Sc(r.width)/e.offsetWidth||1,s=e.offsetHeight>0&&Sc(r.height)/e.offsetHeight||1);var i=al(e)?Fo(e):window,c=i.visualViewport,d=!c6()&&n,p=(r.left+(d&&c?c.offsetLeft:0))/o,h=(r.top+(d&&c?c.offsetTop:0))/s,m=r.width/o,v=r.height/s;return{width:m,height:v,top:h,right:p+m,bottom:h+v,left:p,x:p,y:h}}function Fb(e){var t=Cc(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function u6(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&Bb(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function Na(e){return Fo(e).getComputedStyle(e)}function V$(e){return["table","td","th"].indexOf(ra(e))>=0}function Pi(e){return((al(e)?e.ownerDocument:e.document)||window.document).documentElement}function km(e){return ra(e)==="html"?e:e.assignedSlot||e.parentNode||(Bb(e)?e.host:null)||Pi(e)}function nS(e){return!os(e)||Na(e).position==="fixed"?null:e.offsetParent}function U$(e){var t=/firefox/i.test(t1()),n=/Trident/i.test(t1());if(n&&os(e)){var r=Na(e);if(r.position==="fixed")return null}var o=km(e);for(Bb(o)&&(o=o.host);os(o)&&["html","body"].indexOf(ra(o))<0;){var s=Na(o);if(s.transform!=="none"||s.perspective!=="none"||s.contain==="paint"||["transform","perspective"].indexOf(s.willChange)!==-1||t&&s.willChange==="filter"||t&&s.filter&&s.filter!=="none")return o;o=o.parentNode}return null}function Td(e){for(var t=Fo(e),n=nS(e);n&&V$(n)&&Na(n).position==="static";)n=nS(n);return n&&(ra(n)==="html"||ra(n)==="body"&&Na(n).position==="static")?t:n||U$(e)||t}function Hb(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function qu(e,t,n){return Qi(e,oh(t,n))}function G$(e,t,n){var r=qu(e,t,n);return r>n?n:r}function d6(){return{top:0,right:0,bottom:0,left:0}}function f6(e){return Object.assign({},d6(),e)}function p6(e,t){return t.reduce(function(n,r){return n[r]=e,n},{})}var q$=function(t,n){return t=typeof t=="function"?t(Object.assign({},n.rects,{placement:n.placement})):t,f6(typeof t!="number"?t:p6(t,Ad))};function K$(e){var t,n=e.state,r=e.name,o=e.options,s=n.elements.arrow,i=n.modifiersData.popperOffsets,c=ta(n.placement),d=Hb(c),p=[jo,is].indexOf(c)>=0,h=p?"height":"width";if(!(!s||!i)){var m=q$(o.padding,n),v=Fb(s),b=d==="y"?Po:jo,w=d==="y"?as:is,y=n.rects.reference[h]+n.rects.reference[d]-i[d]-n.rects.popper[h],S=i[d]-n.rects.reference[d],k=Td(s),_=k?d==="y"?k.clientHeight||0:k.clientWidth||0:0,P=y/2-S/2,I=m[b],E=_-v[h]-m[w],O=_/2-v[h]/2+P,R=qu(I,O,E),M=d;n.modifiersData[r]=(t={},t[M]=R,t.centerOffset=R-O,t)}}function X$(e){var t=e.state,n=e.options,r=n.element,o=r===void 0?"[data-popper-arrow]":r;o!=null&&(typeof o=="string"&&(o=t.elements.popper.querySelector(o),!o)||u6(t.elements.popper,o)&&(t.elements.arrow=o))}const Y$={name:"arrow",enabled:!0,phase:"main",fn:K$,effect:X$,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function kc(e){return e.split("-")[1]}var Q$={top:"auto",right:"auto",bottom:"auto",left:"auto"};function J$(e,t){var n=e.x,r=e.y,o=t.devicePixelRatio||1;return{x:Sc(n*o)/o||0,y:Sc(r*o)/o||0}}function rS(e){var t,n=e.popper,r=e.popperRect,o=e.placement,s=e.variation,i=e.offsets,c=e.position,d=e.gpuAcceleration,p=e.adaptive,h=e.roundOffsets,m=e.isFixed,v=i.x,b=v===void 0?0:v,w=i.y,y=w===void 0?0:w,S=typeof h=="function"?h({x:b,y}):{x:b,y};b=S.x,y=S.y;var k=i.hasOwnProperty("x"),_=i.hasOwnProperty("y"),P=jo,I=Po,E=window;if(p){var O=Td(n),R="clientHeight",M="clientWidth";if(O===Fo(n)&&(O=Pi(n),Na(O).position!=="static"&&c==="absolute"&&(R="scrollHeight",M="scrollWidth")),O=O,o===Po||(o===jo||o===is)&&s===ld){I=as;var D=m&&O===E&&E.visualViewport?E.visualViewport.height:O[R];y-=D-r.height,y*=d?1:-1}if(o===jo||(o===Po||o===as)&&s===ld){P=is;var A=m&&O===E&&E.visualViewport?E.visualViewport.width:O[M];b-=A-r.width,b*=d?1:-1}}var L=Object.assign({position:c},p&&Q$),Q=h===!0?J$({x:b,y},Fo(n)):{x:b,y};if(b=Q.x,y=Q.y,d){var F;return Object.assign({},L,(F={},F[I]=_?"0":"",F[P]=k?"0":"",F.transform=(E.devicePixelRatio||1)<=1?"translate("+b+"px, "+y+"px)":"translate3d("+b+"px, "+y+"px, 0)",F))}return Object.assign({},L,(t={},t[I]=_?y+"px":"",t[P]=k?b+"px":"",t.transform="",t))}function Z$(e){var t=e.state,n=e.options,r=n.gpuAcceleration,o=r===void 0?!0:r,s=n.adaptive,i=s===void 0?!0:s,c=n.roundOffsets,d=c===void 0?!0:c,p={placement:ta(t.placement),variation:kc(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:t.options.strategy==="fixed"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,rS(Object.assign({},p,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:i,roundOffsets:d})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,rS(Object.assign({},p,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:d})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}const eL={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:Z$,data:{}};var Vf={passive:!0};function tL(e){var t=e.state,n=e.instance,r=e.options,o=r.scroll,s=o===void 0?!0:o,i=r.resize,c=i===void 0?!0:i,d=Fo(t.elements.popper),p=[].concat(t.scrollParents.reference,t.scrollParents.popper);return s&&p.forEach(function(h){h.addEventListener("scroll",n.update,Vf)}),c&&d.addEventListener("resize",n.update,Vf),function(){s&&p.forEach(function(h){h.removeEventListener("scroll",n.update,Vf)}),c&&d.removeEventListener("resize",n.update,Vf)}}const nL={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:tL,data:{}};var rL={left:"right",right:"left",bottom:"top",top:"bottom"};function Rp(e){return e.replace(/left|right|bottom|top/g,function(t){return rL[t]})}var oL={start:"end",end:"start"};function oS(e){return e.replace(/start|end/g,function(t){return oL[t]})}function Wb(e){var t=Fo(e),n=t.pageXOffset,r=t.pageYOffset;return{scrollLeft:n,scrollTop:r}}function Vb(e){return Cc(Pi(e)).left+Wb(e).scrollLeft}function sL(e,t){var n=Fo(e),r=Pi(e),o=n.visualViewport,s=r.clientWidth,i=r.clientHeight,c=0,d=0;if(o){s=o.width,i=o.height;var p=c6();(p||!p&&t==="fixed")&&(c=o.offsetLeft,d=o.offsetTop)}return{width:s,height:i,x:c+Vb(e),y:d}}function aL(e){var t,n=Pi(e),r=Wb(e),o=(t=e.ownerDocument)==null?void 0:t.body,s=Qi(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),i=Qi(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),c=-r.scrollLeft+Vb(e),d=-r.scrollTop;return Na(o||n).direction==="rtl"&&(c+=Qi(n.clientWidth,o?o.clientWidth:0)-s),{width:s,height:i,x:c,y:d}}function Ub(e){var t=Na(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function h6(e){return["html","body","#document"].indexOf(ra(e))>=0?e.ownerDocument.body:os(e)&&Ub(e)?e:h6(km(e))}function Ku(e,t){var n;t===void 0&&(t=[]);var r=h6(e),o=r===((n=e.ownerDocument)==null?void 0:n.body),s=Fo(r),i=o?[s].concat(s.visualViewport||[],Ub(r)?r:[]):r,c=t.concat(i);return o?c:c.concat(Ku(km(i)))}function n1(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function iL(e,t){var n=Cc(e,!1,t==="fixed");return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}function sS(e,t,n){return t===i6?n1(sL(e,n)):al(t)?iL(t,n):n1(aL(Pi(e)))}function lL(e){var t=Ku(km(e)),n=["absolute","fixed"].indexOf(Na(e).position)>=0,r=n&&os(e)?Td(e):e;return al(r)?t.filter(function(o){return al(o)&&u6(o,r)&&ra(o)!=="body"}):[]}function cL(e,t,n,r){var o=t==="clippingParents"?lL(e):[].concat(t),s=[].concat(o,[n]),i=s[0],c=s.reduce(function(d,p){var h=sS(e,p,r);return d.top=Qi(h.top,d.top),d.right=oh(h.right,d.right),d.bottom=oh(h.bottom,d.bottom),d.left=Qi(h.left,d.left),d},sS(e,i,r));return c.width=c.right-c.left,c.height=c.bottom-c.top,c.x=c.left,c.y=c.top,c}function m6(e){var t=e.reference,n=e.element,r=e.placement,o=r?ta(r):null,s=r?kc(r):null,i=t.x+t.width/2-n.width/2,c=t.y+t.height/2-n.height/2,d;switch(o){case Po:d={x:i,y:t.y-n.height};break;case as:d={x:i,y:t.y+t.height};break;case is:d={x:t.x+t.width,y:c};break;case jo:d={x:t.x-n.width,y:c};break;default:d={x:t.x,y:t.y}}var p=o?Hb(o):null;if(p!=null){var h=p==="y"?"height":"width";switch(s){case wc:d[p]=d[p]-(t[h]/2-n[h]/2);break;case ld:d[p]=d[p]+(t[h]/2-n[h]/2);break}}return d}function cd(e,t){t===void 0&&(t={});var n=t,r=n.placement,o=r===void 0?e.placement:r,s=n.strategy,i=s===void 0?e.strategy:s,c=n.boundary,d=c===void 0?E$:c,p=n.rootBoundary,h=p===void 0?i6:p,m=n.elementContext,v=m===void 0?xu:m,b=n.altBoundary,w=b===void 0?!1:b,y=n.padding,S=y===void 0?0:y,k=f6(typeof S!="number"?S:p6(S,Ad)),_=v===xu?O$:xu,P=e.rects.popper,I=e.elements[w?_:v],E=cL(al(I)?I:I.contextElement||Pi(e.elements.popper),d,h,i),O=Cc(e.elements.reference),R=m6({reference:O,element:P,strategy:"absolute",placement:o}),M=n1(Object.assign({},P,R)),D=v===xu?M:O,A={top:E.top-D.top+k.top,bottom:D.bottom-E.bottom+k.bottom,left:E.left-D.left+k.left,right:D.right-E.right+k.right},L=e.modifiersData.offset;if(v===xu&&L){var Q=L[o];Object.keys(A).forEach(function(F){var V=[is,as].indexOf(F)>=0?1:-1,q=[Po,as].indexOf(F)>=0?"y":"x";A[F]+=Q[q]*V})}return A}function uL(e,t){t===void 0&&(t={});var n=t,r=n.placement,o=n.boundary,s=n.rootBoundary,i=n.padding,c=n.flipVariations,d=n.allowedAutoPlacements,p=d===void 0?l6:d,h=kc(r),m=h?c?tS:tS.filter(function(w){return kc(w)===h}):Ad,v=m.filter(function(w){return p.indexOf(w)>=0});v.length===0&&(v=m);var b=v.reduce(function(w,y){return w[y]=cd(e,{placement:y,boundary:o,rootBoundary:s,padding:i})[ta(y)],w},{});return Object.keys(b).sort(function(w,y){return b[w]-b[y]})}function dL(e){if(ta(e)===zb)return[];var t=Rp(e);return[oS(e),t,oS(t)]}function fL(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,s=o===void 0?!0:o,i=n.altAxis,c=i===void 0?!0:i,d=n.fallbackPlacements,p=n.padding,h=n.boundary,m=n.rootBoundary,v=n.altBoundary,b=n.flipVariations,w=b===void 0?!0:b,y=n.allowedAutoPlacements,S=t.options.placement,k=ta(S),_=k===S,P=d||(_||!w?[Rp(S)]:dL(S)),I=[S].concat(P).reduce(function(X,K){return X.concat(ta(K)===zb?uL(t,{placement:K,boundary:h,rootBoundary:m,padding:p,flipVariations:w,allowedAutoPlacements:y}):K)},[]),E=t.rects.reference,O=t.rects.popper,R=new Map,M=!0,D=I[0],A=0;A=0,q=V?"width":"height",G=cd(t,{placement:L,boundary:h,rootBoundary:m,altBoundary:v,padding:p}),T=V?F?is:jo:F?as:Po;E[q]>O[q]&&(T=Rp(T));var z=Rp(T),$=[];if(s&&$.push(G[Q]<=0),c&&$.push(G[T]<=0,G[z]<=0),$.every(function(X){return X})){D=L,M=!1;break}R.set(L,$)}if(M)for(var Y=w?3:1,ae=function(K){var U=I.find(function(se){var re=R.get(se);if(re)return re.slice(0,K).every(function(oe){return oe})});if(U)return D=U,"break"},fe=Y;fe>0;fe--){var ie=ae(fe);if(ie==="break")break}t.placement!==D&&(t.modifiersData[r]._skip=!0,t.placement=D,t.reset=!0)}}const pL={name:"flip",enabled:!0,phase:"main",fn:fL,requiresIfExists:["offset"],data:{_skip:!1}};function aS(e,t,n){return n===void 0&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function iS(e){return[Po,is,as,jo].some(function(t){return e[t]>=0})}function hL(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,s=t.modifiersData.preventOverflow,i=cd(t,{elementContext:"reference"}),c=cd(t,{altBoundary:!0}),d=aS(i,r),p=aS(c,o,s),h=iS(d),m=iS(p);t.modifiersData[n]={referenceClippingOffsets:d,popperEscapeOffsets:p,isReferenceHidden:h,hasPopperEscaped:m},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":m})}const mL={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:hL};function gL(e,t,n){var r=ta(e),o=[jo,Po].indexOf(r)>=0?-1:1,s=typeof n=="function"?n(Object.assign({},t,{placement:e})):n,i=s[0],c=s[1];return i=i||0,c=(c||0)*o,[jo,is].indexOf(r)>=0?{x:c,y:i}:{x:i,y:c}}function vL(e){var t=e.state,n=e.options,r=e.name,o=n.offset,s=o===void 0?[0,0]:o,i=l6.reduce(function(h,m){return h[m]=gL(m,t.rects,s),h},{}),c=i[t.placement],d=c.x,p=c.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=d,t.modifiersData.popperOffsets.y+=p),t.modifiersData[r]=i}const bL={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:vL};function yL(e){var t=e.state,n=e.name;t.modifiersData[n]=m6({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})}const xL={name:"popperOffsets",enabled:!0,phase:"read",fn:yL,data:{}};function wL(e){return e==="x"?"y":"x"}function SL(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,s=o===void 0?!0:o,i=n.altAxis,c=i===void 0?!1:i,d=n.boundary,p=n.rootBoundary,h=n.altBoundary,m=n.padding,v=n.tether,b=v===void 0?!0:v,w=n.tetherOffset,y=w===void 0?0:w,S=cd(t,{boundary:d,rootBoundary:p,padding:m,altBoundary:h}),k=ta(t.placement),_=kc(t.placement),P=!_,I=Hb(k),E=wL(I),O=t.modifiersData.popperOffsets,R=t.rects.reference,M=t.rects.popper,D=typeof y=="function"?y(Object.assign({},t.rects,{placement:t.placement})):y,A=typeof D=="number"?{mainAxis:D,altAxis:D}:Object.assign({mainAxis:0,altAxis:0},D),L=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,Q={x:0,y:0};if(O){if(s){var F,V=I==="y"?Po:jo,q=I==="y"?as:is,G=I==="y"?"height":"width",T=O[I],z=T+S[V],$=T-S[q],Y=b?-M[G]/2:0,ae=_===wc?R[G]:M[G],fe=_===wc?-M[G]:-R[G],ie=t.elements.arrow,X=b&&ie?Fb(ie):{width:0,height:0},K=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:d6(),U=K[V],se=K[q],re=qu(0,R[G],X[G]),oe=P?R[G]/2-Y-re-U-A.mainAxis:ae-re-U-A.mainAxis,pe=P?-R[G]/2+Y+re+se+A.mainAxis:fe+re+se+A.mainAxis,le=t.elements.arrow&&Td(t.elements.arrow),ge=le?I==="y"?le.clientTop||0:le.clientLeft||0:0,ke=(F=L==null?void 0:L[I])!=null?F:0,xe=T+oe-ke-ge,de=T+pe-ke,Te=qu(b?oh(z,xe):z,T,b?Qi($,de):$);O[I]=Te,Q[I]=Te-T}if(c){var Ee,$e=I==="x"?Po:jo,kt=I==="x"?as:is,ct=O[E],on=E==="y"?"height":"width",vt=ct+S[$e],bt=ct-S[kt],Se=[Po,jo].indexOf(k)!==-1,Me=(Ee=L==null?void 0:L[E])!=null?Ee:0,_t=Se?vt:ct-R[on]-M[on]-Me+A.altAxis,Tt=Se?ct+R[on]+M[on]-Me-A.altAxis:bt,we=b&&Se?G$(_t,ct,Tt):qu(b?_t:vt,ct,b?Tt:bt);O[E]=we,Q[E]=we-ct}t.modifiersData[r]=Q}}const CL={name:"preventOverflow",enabled:!0,phase:"main",fn:SL,requiresIfExists:["offset"]};function kL(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function _L(e){return e===Fo(e)||!os(e)?Wb(e):kL(e)}function PL(e){var t=e.getBoundingClientRect(),n=Sc(t.width)/e.offsetWidth||1,r=Sc(t.height)/e.offsetHeight||1;return n!==1||r!==1}function jL(e,t,n){n===void 0&&(n=!1);var r=os(t),o=os(t)&&PL(t),s=Pi(t),i=Cc(e,o,n),c={scrollLeft:0,scrollTop:0},d={x:0,y:0};return(r||!r&&!n)&&((ra(t)!=="body"||Ub(s))&&(c=_L(t)),os(t)?(d=Cc(t,!0),d.x+=t.clientLeft,d.y+=t.clientTop):s&&(d.x=Vb(s))),{x:i.left+c.scrollLeft-d.x,y:i.top+c.scrollTop-d.y,width:i.width,height:i.height}}function IL(e){var t=new Map,n=new Set,r=[];e.forEach(function(s){t.set(s.name,s)});function o(s){n.add(s.name);var i=[].concat(s.requires||[],s.requiresIfExists||[]);i.forEach(function(c){if(!n.has(c)){var d=t.get(c);d&&o(d)}}),r.push(s)}return e.forEach(function(s){n.has(s.name)||o(s)}),r}function EL(e){var t=IL(e);return B$.reduce(function(n,r){return n.concat(t.filter(function(o){return o.phase===r}))},[])}function OL(e){var t;return function(){return t||(t=new Promise(function(n){Promise.resolve().then(function(){t=void 0,n(e())})})),t}}function RL(e){var t=e.reduce(function(n,r){var o=n[r.name];return n[r.name]=o?Object.assign({},o,r,{options:Object.assign({},o.options,r.options),data:Object.assign({},o.data,r.data)}):r,n},{});return Object.keys(t).map(function(n){return t[n]})}var lS={placement:"bottom",modifiers:[],strategy:"absolute"};function cS(){for(var e=arguments.length,t=new Array(e),n=0;n{}),P=f.useCallback(()=>{var A;!t||!w.current||!y.current||((A=_.current)==null||A.call(_),S.current=AL(w.current,y.current,{placement:k,modifiers:[_$,S$,w$,{...x$,enabled:!!v},{name:"eventListeners",...y$(i)},{name:"arrow",options:{padding:s}},{name:"offset",options:{offset:c??[0,d]}},{name:"flip",enabled:!!p,options:{padding:8}},{name:"preventOverflow",enabled:!!m,options:{boundary:h}},...n??[]],strategy:o}),S.current.forceUpdate(),_.current=S.current.destroy)},[k,t,n,v,i,s,c,d,p,m,h,o]);f.useEffect(()=>()=>{var A;!w.current&&!y.current&&((A=S.current)==null||A.destroy(),S.current=null)},[]);const I=f.useCallback(A=>{w.current=A,P()},[P]),E=f.useCallback((A={},L=null)=>({...A,ref:cn(I,L)}),[I]),O=f.useCallback(A=>{y.current=A,P()},[P]),R=f.useCallback((A={},L=null)=>({...A,ref:cn(O,L),style:{...A.style,position:o,minWidth:v?void 0:"max-content",inset:"0 auto auto 0"}}),[o,O,v]),M=f.useCallback((A={},L=null)=>{const{size:Q,shadowColor:F,bg:V,style:q,...G}=A;return{...G,ref:L,"data-popper-arrow":"",style:TL(A)}},[]),D=f.useCallback((A={},L=null)=>({...A,ref:L,"data-popper-arrow-inner":""}),[]);return{update(){var A;(A=S.current)==null||A.update()},forceUpdate(){var A;(A=S.current)==null||A.forceUpdate()},transformOrigin:Ir.transformOrigin.varRef,referenceRef:I,popperRef:O,getPopperProps:R,getArrowProps:M,getArrowInnerProps:D,getReferenceProps:E}}function TL(e){const{size:t,shadowColor:n,bg:r,style:o}=e,s={...o,position:"absolute"};return t&&(s["--popper-arrow-size"]=t),n&&(s["--popper-arrow-shadow-color"]=n),r&&(s["--popper-arrow-bg"]=r),s}function qb(e={}){const{onClose:t,onOpen:n,isOpen:r,id:o}=e,s=or(n),i=or(t),[c,d]=f.useState(e.defaultIsOpen||!1),p=r!==void 0?r:c,h=r!==void 0,m=f.useId(),v=o??`disclosure-${m}`,b=f.useCallback(()=>{h||d(!1),i==null||i()},[h,i]),w=f.useCallback(()=>{h||d(!0),s==null||s()},[h,s]),y=f.useCallback(()=>{p?b():w()},[p,w,b]);function S(_={}){return{..._,"aria-expanded":p,"aria-controls":v,onClick(P){var I;(I=_.onClick)==null||I.call(_,P),y()}}}function k(_={}){return{..._,hidden:!p,id:v}}return{isOpen:p,onOpen:w,onClose:b,onToggle:y,isControlled:h,getButtonProps:S,getDisclosureProps:k}}function NL(e){const{ref:t,handler:n,enabled:r=!0}=e,o=or(n),i=f.useRef({isPointerDown:!1,ignoreEmulatedMouseEvents:!1}).current;f.useEffect(()=>{if(!r)return;const c=m=>{N0(m,t)&&(i.isPointerDown=!0)},d=m=>{if(i.ignoreEmulatedMouseEvents){i.ignoreEmulatedMouseEvents=!1;return}i.isPointerDown&&n&&N0(m,t)&&(i.isPointerDown=!1,o(m))},p=m=>{i.ignoreEmulatedMouseEvents=!0,n&&i.isPointerDown&&N0(m,t)&&(i.isPointerDown=!1,o(m))},h=g6(t.current);return h.addEventListener("mousedown",c,!0),h.addEventListener("mouseup",d,!0),h.addEventListener("touchstart",c,!0),h.addEventListener("touchend",p,!0),()=>{h.removeEventListener("mousedown",c,!0),h.removeEventListener("mouseup",d,!0),h.removeEventListener("touchstart",c,!0),h.removeEventListener("touchend",p,!0)}},[n,t,o,i,r])}function N0(e,t){var n;const r=e.target;return r&&!g6(r).contains(r)?!1:!((n=t.current)!=null&&n.contains(r))}function g6(e){var t;return(t=e==null?void 0:e.ownerDocument)!=null?t:document}function v6(e){const{isOpen:t,ref:n}=e,[r,o]=f.useState(t),[s,i]=f.useState(!1);return f.useEffect(()=>{s||(o(t),i(!0))},[t,s,r]),Yi(()=>n.current,"animationend",()=>{o(t)}),{present:!(t?!1:!r),onComplete(){var d;const p=LN(n.current),h=new p.CustomEvent("animationend",{bubbles:!0});(d=n.current)==null||d.dispatchEvent(h)}}}function Kb(e){const{wasSelected:t,enabled:n,isSelected:r,mode:o="unmount"}=e;return!!(!n||r||o==="keepMounted"&&t)}var[$L,LL,zL,BL]=gb(),[FL,Nd]=Dn({strict:!1,name:"MenuContext"});function HL(e,...t){const n=f.useId(),r=e||n;return f.useMemo(()=>t.map(o=>`${o}-${r}`),[r,t])}function b6(e){var t;return(t=e==null?void 0:e.ownerDocument)!=null?t:document}function uS(e){return b6(e).activeElement===e}function WL(e={}){const{id:t,closeOnSelect:n=!0,closeOnBlur:r=!0,initialFocusRef:o,autoSelect:s=!0,isLazy:i,isOpen:c,defaultIsOpen:d,onClose:p,onOpen:h,placement:m="bottom-start",lazyBehavior:v="unmount",direction:b,computePositionOnMount:w=!1,...y}=e,S=f.useRef(null),k=f.useRef(null),_=zL(),P=f.useCallback(()=>{requestAnimationFrame(()=>{var ie;(ie=S.current)==null||ie.focus({preventScroll:!1})})},[]),I=f.useCallback(()=>{const ie=setTimeout(()=>{var X;if(o)(X=o.current)==null||X.focus();else{const K=_.firstEnabled();K&&F(K.index)}});z.current.add(ie)},[_,o]),E=f.useCallback(()=>{const ie=setTimeout(()=>{const X=_.lastEnabled();X&&F(X.index)});z.current.add(ie)},[_]),O=f.useCallback(()=>{h==null||h(),s?I():P()},[s,I,P,h]),{isOpen:R,onOpen:M,onClose:D,onToggle:A}=qb({isOpen:c,defaultIsOpen:d,onClose:p,onOpen:O});NL({enabled:R&&r,ref:S,handler:ie=>{var X;(X=k.current)!=null&&X.contains(ie.target)||D()}});const L=Gb({...y,enabled:R||w,placement:m,direction:b}),[Q,F]=f.useState(-1);Ga(()=>{R||F(-1)},[R]),a6(S,{focusRef:k,visible:R,shouldFocus:!0});const V=v6({isOpen:R,ref:S}),[q,G]=HL(t,"menu-button","menu-list"),T=f.useCallback(()=>{M(),P()},[M,P]),z=f.useRef(new Set([]));QL(()=>{z.current.forEach(ie=>clearTimeout(ie)),z.current.clear()});const $=f.useCallback(()=>{M(),I()},[I,M]),Y=f.useCallback(()=>{M(),E()},[M,E]),ae=f.useCallback(()=>{var ie,X;const K=b6(S.current),U=(ie=S.current)==null?void 0:ie.contains(K.activeElement);if(!(R&&!U))return;const re=(X=_.item(Q))==null?void 0:X.node;re==null||re.focus()},[R,Q,_]),fe=f.useRef(null);return{openAndFocusMenu:T,openAndFocusFirstItem:$,openAndFocusLastItem:Y,onTransitionEnd:ae,unstable__animationState:V,descendants:_,popper:L,buttonId:q,menuId:G,forceUpdate:L.forceUpdate,orientation:"vertical",isOpen:R,onToggle:A,onOpen:M,onClose:D,menuRef:S,buttonRef:k,focusedIndex:Q,closeOnSelect:n,closeOnBlur:r,autoSelect:s,setFocusedIndex:F,isLazy:i,lazyBehavior:v,initialFocusRef:o,rafId:fe}}function VL(e={},t=null){const n=Nd(),{onToggle:r,popper:o,openAndFocusFirstItem:s,openAndFocusLastItem:i}=n,c=f.useCallback(d=>{const p=d.key,m={Enter:s,ArrowDown:s,ArrowUp:i}[p];m&&(d.preventDefault(),d.stopPropagation(),m(d))},[s,i]);return{...e,ref:cn(n.buttonRef,t,o.referenceRef),id:n.buttonId,"data-active":Ft(n.isOpen),"aria-expanded":n.isOpen,"aria-haspopup":"menu","aria-controls":n.menuId,onClick:et(e.onClick,r),onKeyDown:et(e.onKeyDown,c)}}function r1(e){var t;return XL(e)&&!!((t=e==null?void 0:e.getAttribute("role"))!=null&&t.startsWith("menuitem"))}function UL(e={},t=null){const n=Nd();if(!n)throw new Error("useMenuContext: context is undefined. Seems you forgot to wrap component within ");const{focusedIndex:r,setFocusedIndex:o,menuRef:s,isOpen:i,onClose:c,menuId:d,isLazy:p,lazyBehavior:h,unstable__animationState:m}=n,v=LL(),b=c$({preventDefault:k=>k.key!==" "&&r1(k.target)}),w=f.useCallback(k=>{if(!k.currentTarget.contains(k.target))return;const _=k.key,I={Tab:O=>O.preventDefault(),Escape:c,ArrowDown:()=>{const O=v.nextEnabled(r);O&&o(O.index)},ArrowUp:()=>{const O=v.prevEnabled(r);O&&o(O.index)}}[_];if(I){k.preventDefault(),I(k);return}const E=b(O=>{const R=u$(v.values(),O,M=>{var D,A;return(A=(D=M==null?void 0:M.node)==null?void 0:D.textContent)!=null?A:""},v.item(r));if(R){const M=v.indexOf(R.node);o(M)}});r1(k.target)&&E(k)},[v,r,b,c,o]),y=f.useRef(!1);i&&(y.current=!0);const S=Kb({wasSelected:y.current,enabled:p,mode:h,isSelected:m.present});return{...e,ref:cn(s,t),children:S?e.children:null,tabIndex:-1,role:"menu",id:d,style:{...e.style,transformOrigin:"var(--popper-transform-origin)"},"aria-orientation":"vertical",onKeyDown:et(e.onKeyDown,w)}}function GL(e={}){const{popper:t,isOpen:n}=Nd();return t.getPopperProps({...e,style:{visibility:n?"visible":"hidden",...e.style}})}function y6(e={},t=null){const{onMouseEnter:n,onMouseMove:r,onMouseLeave:o,onClick:s,onFocus:i,isDisabled:c,isFocusable:d,closeOnSelect:p,type:h,...m}=e,v=Nd(),{setFocusedIndex:b,focusedIndex:w,closeOnSelect:y,onClose:S,menuRef:k,isOpen:_,menuId:P,rafId:I}=v,E=f.useRef(null),O=`${P}-menuitem-${f.useId()}`,{index:R,register:M}=BL({disabled:c&&!d}),D=f.useCallback(T=>{n==null||n(T),!c&&b(R)},[b,R,c,n]),A=f.useCallback(T=>{r==null||r(T),E.current&&!uS(E.current)&&D(T)},[D,r]),L=f.useCallback(T=>{o==null||o(T),!c&&b(-1)},[b,c,o]),Q=f.useCallback(T=>{s==null||s(T),r1(T.currentTarget)&&(p??y)&&S()},[S,s,y,p]),F=f.useCallback(T=>{i==null||i(T),b(R)},[b,i,R]),V=R===w,q=c&&!d;Ga(()=>{_&&(V&&!q&&E.current?(I.current&&cancelAnimationFrame(I.current),I.current=requestAnimationFrame(()=>{var T;(T=E.current)==null||T.focus(),I.current=null})):k.current&&!uS(k.current)&&k.current.focus({preventScroll:!0}))},[V,q,k,_]);const G=s6({onClick:Q,onFocus:F,onMouseEnter:D,onMouseMove:A,onMouseLeave:L,ref:cn(M,E,t),isDisabled:c,isFocusable:d});return{...m,...G,type:h??G.type,id:O,role:"menuitem",tabIndex:V?0:-1}}function qL(e={},t=null){const{type:n="radio",isChecked:r,...o}=e;return{...y6(o,t),role:`menuitem${n}`,"aria-checked":r}}function KL(e={}){const{children:t,type:n="radio",value:r,defaultValue:o,onChange:s,...i}=e,d=n==="radio"?"":[],[p,h]=Bc({defaultValue:o??d,value:r,onChange:s}),m=f.useCallback(w=>{if(n==="radio"&&typeof p=="string"&&h(w),n==="checkbox"&&Array.isArray(p)){const y=p.includes(w)?p.filter(S=>S!==w):p.concat(w);h(y)}},[p,h,n]),b=Od(t).map(w=>{if(w.type.id!=="MenuItemOption")return w;const y=k=>{var _,P;m(w.props.value),(P=(_=w.props).onClick)==null||P.call(_,k)},S=n==="radio"?w.props.value===p:p.includes(w.props.value);return f.cloneElement(w,{type:n,onClick:y,isChecked:S})});return{...i,children:b}}function XL(e){var t;if(!YL(e))return!1;const n=(t=e.ownerDocument.defaultView)!=null?t:window;return e instanceof n.HTMLElement}function YL(e){return e!=null&&typeof e=="object"&&"nodeType"in e&&e.nodeType===Node.ELEMENT_NODE}function QL(e,t=[]){return f.useEffect(()=>()=>e(),t)}var[JL,Wc]=Dn({name:"MenuStylesContext",errorMessage:`useMenuStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),$d=e=>{const{children:t}=e,n=Hr("Menu",e),r=qn(e),{direction:o}=$c(),{descendants:s,...i}=WL({...r,direction:o}),c=f.useMemo(()=>i,[i]),{isOpen:d,onClose:p,forceUpdate:h}=c;return a.jsx($L,{value:s,children:a.jsx(FL,{value:c,children:a.jsx(JL,{value:n,children:Z1(t,{isOpen:d,onClose:p,forceUpdate:h})})})})};$d.displayName="Menu";var x6=Ae((e,t)=>{const n=Wc();return a.jsx(je.span,{ref:t,...e,__css:n.command,className:"chakra-menu__command"})});x6.displayName="MenuCommand";var w6=Ae((e,t)=>{const{type:n,...r}=e,o=Wc(),s=r.as||n?n??void 0:"button",i=f.useMemo(()=>({textDecoration:"none",color:"inherit",userSelect:"none",display:"flex",width:"100%",alignItems:"center",textAlign:"start",flex:"0 0 auto",outline:0,...o.item}),[o.item]);return a.jsx(je.button,{ref:t,type:s,...r,__css:i})}),Xb=e=>{const{className:t,children:n,...r}=e,o=Wc(),s=f.Children.only(n),i=f.isValidElement(s)?f.cloneElement(s,{focusable:"false","aria-hidden":!0,className:Ct("chakra-menu__icon",s.props.className)}):null,c=Ct("chakra-menu__icon-wrapper",t);return a.jsx(je.span,{className:c,...r,__css:o.icon,children:i})};Xb.displayName="MenuIcon";var jr=Ae((e,t)=>{const{icon:n,iconSpacing:r="0.75rem",command:o,commandSpacing:s="0.75rem",children:i,...c}=e,d=y6(c,t),h=n||o?a.jsx("span",{style:{pointerEvents:"none",flex:1},children:i}):i;return a.jsxs(w6,{...d,className:Ct("chakra-menu__menuitem",d.className),children:[n&&a.jsx(Xb,{fontSize:"0.8em",marginEnd:r,children:n}),h,o&&a.jsx(x6,{marginStart:s,children:o})]})});jr.displayName="MenuItem";var ZL={enter:{visibility:"visible",opacity:1,scale:1,transition:{duration:.2,ease:[.4,0,.2,1]}},exit:{transitionEnd:{visibility:"hidden"},opacity:0,scale:.8,transition:{duration:.1,easings:"easeOut"}}},ez=je(Er.div),il=Ae(function(t,n){var r,o;const{rootProps:s,motionProps:i,...c}=t,{isOpen:d,onTransitionEnd:p,unstable__animationState:h}=Nd(),m=UL(c,n),v=GL(s),b=Wc();return a.jsx(je.div,{...v,__css:{zIndex:(o=t.zIndex)!=null?o:(r=b.list)==null?void 0:r.zIndex},children:a.jsx(ez,{variants:ZL,initial:!1,animate:d?"enter":"exit",__css:{outline:0,...b.list},...i,className:Ct("chakra-menu__menu-list",m.className),...m,onUpdate:p,onAnimationComplete:pm(h.onComplete,m.onAnimationComplete)})})});il.displayName="MenuList";var ud=Ae((e,t)=>{const{title:n,children:r,className:o,...s}=e,i=Ct("chakra-menu__group__title",o),c=Wc();return a.jsxs("div",{ref:t,className:"chakra-menu__group",role:"group",children:[n&&a.jsx(je.p,{className:i,...s,__css:c.groupTitle,children:n}),r]})});ud.displayName="MenuGroup";var S6=e=>{const{className:t,title:n,...r}=e,o=KL(r);return a.jsx(ud,{title:n,className:Ct("chakra-menu__option-group",t),...o})};S6.displayName="MenuOptionGroup";var tz=Ae((e,t)=>{const n=Wc();return a.jsx(je.button,{ref:t,...e,__css:{display:"inline-flex",appearance:"none",alignItems:"center",outline:0,...n.button}})}),Ld=Ae((e,t)=>{const{children:n,as:r,...o}=e,s=VL(o,t),i=r||tz;return a.jsx(i,{...s,className:Ct("chakra-menu__menu-button",e.className),children:a.jsx(je.span,{__css:{pointerEvents:"none",flex:"1 1 auto",minW:0},children:e.children})})});Ld.displayName="MenuButton";var nz=e=>a.jsx("svg",{viewBox:"0 0 14 14",width:"1em",height:"1em",...e,children:a.jsx("polygon",{fill:"currentColor",points:"5.5 11.9993304 14 3.49933039 12.5 2 5.5 8.99933039 1.5 4.9968652 0 6.49933039"})}),sh=Ae((e,t)=>{const{icon:n,iconSpacing:r="0.75rem",...o}=e,s=qL(o,t);return a.jsxs(w6,{...s,className:Ct("chakra-menu__menuitem-option",o.className),children:[n!==null&&a.jsx(Xb,{fontSize:"0.8em",marginEnd:r,opacity:e.isChecked?1:0,children:n||a.jsx(nz,{})}),a.jsx("span",{style:{flex:1},children:s.children})]})});sh.id="MenuItemOption";sh.displayName="MenuItemOption";var rz={slideInBottom:{...Wv,custom:{offsetY:16,reverse:!0}},slideInRight:{...Wv,custom:{offsetX:16,reverse:!0}},scale:{...K5,custom:{initialScale:.95,reverse:!0}},none:{}},oz=je(Er.section),sz=e=>rz[e||"none"],C6=f.forwardRef((e,t)=>{const{preset:n,motionProps:r=sz(n),...o}=e;return a.jsx(oz,{ref:t,...r,...o})});C6.displayName="ModalTransition";var az=Object.defineProperty,iz=(e,t,n)=>t in e?az(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,lz=(e,t,n)=>(iz(e,typeof t!="symbol"?t+"":t,n),n),cz=class{constructor(){lz(this,"modals"),this.modals=new Map}add(e){return this.modals.set(e,this.modals.size+1),this.modals.size}remove(e){this.modals.delete(e)}isTopModal(e){return e?this.modals.get(e)===this.modals.size:!1}},o1=new cz;function k6(e,t){const[n,r]=f.useState(0);return f.useEffect(()=>{const o=e.current;if(o){if(t){const s=o1.add(o);r(s)}return()=>{o1.remove(o),r(0)}}},[t,e]),n}var uz=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},zl=new WeakMap,Uf=new WeakMap,Gf={},$0=0,_6=function(e){return e&&(e.host||_6(e.parentNode))},dz=function(e,t){return t.map(function(n){if(e.contains(n))return n;var r=_6(n);return r&&e.contains(r)?r:(console.error("aria-hidden",n,"in not contained inside",e,". Doing nothing"),null)}).filter(function(n){return!!n})},fz=function(e,t,n,r){var o=dz(t,Array.isArray(e)?e:[e]);Gf[n]||(Gf[n]=new WeakMap);var s=Gf[n],i=[],c=new Set,d=new Set(o),p=function(m){!m||c.has(m)||(c.add(m),p(m.parentNode))};o.forEach(p);var h=function(m){!m||d.has(m)||Array.prototype.forEach.call(m.children,function(v){if(c.has(v))h(v);else{var b=v.getAttribute(r),w=b!==null&&b!=="false",y=(zl.get(v)||0)+1,S=(s.get(v)||0)+1;zl.set(v,y),s.set(v,S),i.push(v),y===1&&w&&Uf.set(v,!0),S===1&&v.setAttribute(n,"true"),w||v.setAttribute(r,"true")}})};return h(t),c.clear(),$0++,function(){i.forEach(function(m){var v=zl.get(m)-1,b=s.get(m)-1;zl.set(m,v),s.set(m,b),v||(Uf.has(m)||m.removeAttribute(r),Uf.delete(m)),b||m.removeAttribute(n)}),$0--,$0||(zl=new WeakMap,zl=new WeakMap,Uf=new WeakMap,Gf={})}},pz=function(e,t,n){n===void 0&&(n="data-aria-hidden");var r=Array.from(Array.isArray(e)?e:[e]),o=t||uz(e);return o?(r.push.apply(r,Array.from(o.querySelectorAll("[aria-live]"))),fz(r,o,n,"aria-hidden")):function(){return null}};function hz(e){const{isOpen:t,onClose:n,id:r,closeOnOverlayClick:o=!0,closeOnEsc:s=!0,useInert:i=!0,onOverlayClick:c,onEsc:d}=e,p=f.useRef(null),h=f.useRef(null),[m,v,b]=gz(r,"chakra-modal","chakra-modal--header","chakra-modal--body");mz(p,t&&i);const w=k6(p,t),y=f.useRef(null),S=f.useCallback(D=>{y.current=D.target},[]),k=f.useCallback(D=>{D.key==="Escape"&&(D.stopPropagation(),s&&(n==null||n()),d==null||d())},[s,n,d]),[_,P]=f.useState(!1),[I,E]=f.useState(!1),O=f.useCallback((D={},A=null)=>({role:"dialog",...D,ref:cn(A,p),id:m,tabIndex:-1,"aria-modal":!0,"aria-labelledby":_?v:void 0,"aria-describedby":I?b:void 0,onClick:et(D.onClick,L=>L.stopPropagation())}),[b,I,m,v,_]),R=f.useCallback(D=>{D.stopPropagation(),y.current===D.target&&o1.isTopModal(p.current)&&(o&&(n==null||n()),c==null||c())},[n,o,c]),M=f.useCallback((D={},A=null)=>({...D,ref:cn(A,h),onClick:et(D.onClick,R),onKeyDown:et(D.onKeyDown,k),onMouseDown:et(D.onMouseDown,S)}),[k,S,R]);return{isOpen:t,onClose:n,headerId:v,bodyId:b,setBodyMounted:E,setHeaderMounted:P,dialogRef:p,overlayRef:h,getDialogProps:O,getDialogContainerProps:M,index:w}}function mz(e,t){const n=e.current;f.useEffect(()=>{if(!(!e.current||!t))return pz(e.current)},[t,e,n])}function gz(e,...t){const n=f.useId(),r=e||n;return f.useMemo(()=>t.map(o=>`${o}-${r}`),[r,t])}var[vz,Vc]=Dn({name:"ModalStylesContext",errorMessage:`useModalStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),[bz,ll]=Dn({strict:!0,name:"ModalContext",errorMessage:"useModalContext: `context` is undefined. Seems you forgot to wrap modal components in ``"}),dd=e=>{const t={scrollBehavior:"outside",autoFocus:!0,trapFocus:!0,returnFocusOnClose:!0,blockScrollOnMount:!0,allowPinchZoom:!1,motionPreset:"scale",lockFocusAcrossFrames:!0,...e},{portalProps:n,children:r,autoFocus:o,trapFocus:s,initialFocusRef:i,finalFocusRef:c,returnFocusOnClose:d,blockScrollOnMount:p,allowPinchZoom:h,preserveScrollBarGap:m,motionPreset:v,lockFocusAcrossFrames:b,onCloseComplete:w}=t,y=Hr("Modal",t),k={...hz(t),autoFocus:o,trapFocus:s,initialFocusRef:i,finalFocusRef:c,returnFocusOnClose:d,blockScrollOnMount:p,allowPinchZoom:h,preserveScrollBarGap:m,motionPreset:v,lockFocusAcrossFrames:b};return a.jsx(bz,{value:k,children:a.jsx(vz,{value:y,children:a.jsx(mo,{onExitComplete:w,children:k.isOpen&&a.jsx(rd,{...n,children:r})})})})};dd.displayName="Modal";var Mp="right-scroll-bar-position",Dp="width-before-scroll-bar",yz="with-scroll-bars-hidden",xz="--removed-body-scroll-bar-size",P6=w3(),L0=function(){},_m=f.forwardRef(function(e,t){var n=f.useRef(null),r=f.useState({onScrollCapture:L0,onWheelCapture:L0,onTouchMoveCapture:L0}),o=r[0],s=r[1],i=e.forwardProps,c=e.children,d=e.className,p=e.removeScrollBar,h=e.enabled,m=e.shards,v=e.sideCar,b=e.noIsolation,w=e.inert,y=e.allowPinchZoom,S=e.as,k=S===void 0?"div":S,_=e.gapMode,P=b3(e,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noIsolation","inert","allowPinchZoom","as","gapMode"]),I=v,E=v3([n,t]),O=Qs(Qs({},P),o);return f.createElement(f.Fragment,null,h&&f.createElement(I,{sideCar:P6,removeScrollBar:p,shards:m,noIsolation:b,inert:w,setCallbacks:s,allowPinchZoom:!!y,lockRef:n,gapMode:_}),i?f.cloneElement(f.Children.only(c),Qs(Qs({},O),{ref:E})):f.createElement(k,Qs({},O,{className:d,ref:E}),c))});_m.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1};_m.classNames={fullWidth:Dp,zeroRight:Mp};var dS,wz=function(){if(dS)return dS;if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function Sz(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=wz();return t&&e.setAttribute("nonce",t),e}function Cz(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function kz(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var _z=function(){var e=0,t=null;return{add:function(n){e==0&&(t=Sz())&&(Cz(t,n),kz(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},Pz=function(){var e=_z();return function(t,n){f.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},j6=function(){var e=Pz(),t=function(n){var r=n.styles,o=n.dynamic;return e(r,o),null};return t},jz={left:0,top:0,right:0,gap:0},z0=function(e){return parseInt(e||"",10)||0},Iz=function(e){var t=window.getComputedStyle(document.body),n=t[e==="padding"?"paddingLeft":"marginLeft"],r=t[e==="padding"?"paddingTop":"marginTop"],o=t[e==="padding"?"paddingRight":"marginRight"];return[z0(n),z0(r),z0(o)]},Ez=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return jz;var t=Iz(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},Oz=j6(),Rz=function(e,t,n,r){var o=e.left,s=e.top,i=e.right,c=e.gap;return n===void 0&&(n="margin"),` + .`.concat(yz,` { + overflow: hidden `).concat(r,`; + padding-right: `).concat(c,"px ").concat(r,`; + } + body { + overflow: hidden `).concat(r,`; + overscroll-behavior: contain; + `).concat([t&&"position: relative ".concat(r,";"),n==="margin"&&` + padding-left: `.concat(o,`px; + padding-top: `).concat(s,`px; + padding-right: `).concat(i,`px; + margin-left:0; + margin-top:0; + margin-right: `).concat(c,"px ").concat(r,`; + `),n==="padding"&&"padding-right: ".concat(c,"px ").concat(r,";")].filter(Boolean).join(""),` + } + + .`).concat(Mp,` { + right: `).concat(c,"px ").concat(r,`; + } + + .`).concat(Dp,` { + margin-right: `).concat(c,"px ").concat(r,`; + } + + .`).concat(Mp," .").concat(Mp,` { + right: 0 `).concat(r,`; + } + + .`).concat(Dp," .").concat(Dp,` { + margin-right: 0 `).concat(r,`; + } + + body { + `).concat(xz,": ").concat(c,`px; + } +`)},Mz=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,o=r===void 0?"margin":r,s=f.useMemo(function(){return Ez(o)},[o]);return f.createElement(Oz,{styles:Rz(s,!t,o,n?"":"!important")})},s1=!1;if(typeof window<"u")try{var qf=Object.defineProperty({},"passive",{get:function(){return s1=!0,!0}});window.addEventListener("test",qf,qf),window.removeEventListener("test",qf,qf)}catch{s1=!1}var Bl=s1?{passive:!1}:!1,Dz=function(e){return e.tagName==="TEXTAREA"},I6=function(e,t){var n=window.getComputedStyle(e);return n[t]!=="hidden"&&!(n.overflowY===n.overflowX&&!Dz(e)&&n[t]==="visible")},Az=function(e){return I6(e,"overflowY")},Tz=function(e){return I6(e,"overflowX")},fS=function(e,t){var n=t.ownerDocument,r=t;do{typeof ShadowRoot<"u"&&r instanceof ShadowRoot&&(r=r.host);var o=E6(e,r);if(o){var s=O6(e,r),i=s[1],c=s[2];if(i>c)return!0}r=r.parentNode}while(r&&r!==n.body);return!1},Nz=function(e){var t=e.scrollTop,n=e.scrollHeight,r=e.clientHeight;return[t,n,r]},$z=function(e){var t=e.scrollLeft,n=e.scrollWidth,r=e.clientWidth;return[t,n,r]},E6=function(e,t){return e==="v"?Az(t):Tz(t)},O6=function(e,t){return e==="v"?Nz(t):$z(t)},Lz=function(e,t){return e==="h"&&t==="rtl"?-1:1},zz=function(e,t,n,r,o){var s=Lz(e,window.getComputedStyle(t).direction),i=s*r,c=n.target,d=t.contains(c),p=!1,h=i>0,m=0,v=0;do{var b=O6(e,c),w=b[0],y=b[1],S=b[2],k=y-S-s*w;(w||k)&&E6(e,c)&&(m+=k,v+=w),c=c.parentNode}while(!d&&c!==document.body||d&&(t.contains(c)||t===c));return(h&&(o&&m===0||!o&&i>m)||!h&&(o&&v===0||!o&&-i>v))&&(p=!0),p},Kf=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},pS=function(e){return[e.deltaX,e.deltaY]},hS=function(e){return e&&"current"in e?e.current:e},Bz=function(e,t){return e[0]===t[0]&&e[1]===t[1]},Fz=function(e){return` + .block-interactivity-`.concat(e,` {pointer-events: none;} + .allow-interactivity-`).concat(e,` {pointer-events: all;} +`)},Hz=0,Fl=[];function Wz(e){var t=f.useRef([]),n=f.useRef([0,0]),r=f.useRef(),o=f.useState(Hz++)[0],s=f.useState(j6)[0],i=f.useRef(e);f.useEffect(function(){i.current=e},[e]),f.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(o));var y=Yv([e.lockRef.current],(e.shards||[]).map(hS),!0).filter(Boolean);return y.forEach(function(S){return S.classList.add("allow-interactivity-".concat(o))}),function(){document.body.classList.remove("block-interactivity-".concat(o)),y.forEach(function(S){return S.classList.remove("allow-interactivity-".concat(o))})}}},[e.inert,e.lockRef.current,e.shards]);var c=f.useCallback(function(y,S){if("touches"in y&&y.touches.length===2)return!i.current.allowPinchZoom;var k=Kf(y),_=n.current,P="deltaX"in y?y.deltaX:_[0]-k[0],I="deltaY"in y?y.deltaY:_[1]-k[1],E,O=y.target,R=Math.abs(P)>Math.abs(I)?"h":"v";if("touches"in y&&R==="h"&&O.type==="range")return!1;var M=fS(R,O);if(!M)return!0;if(M?E=R:(E=R==="v"?"h":"v",M=fS(R,O)),!M)return!1;if(!r.current&&"changedTouches"in y&&(P||I)&&(r.current=E),!E)return!0;var D=r.current||E;return zz(D,S,y,D==="h"?P:I,!0)},[]),d=f.useCallback(function(y){var S=y;if(!(!Fl.length||Fl[Fl.length-1]!==s)){var k="deltaY"in S?pS(S):Kf(S),_=t.current.filter(function(E){return E.name===S.type&&E.target===S.target&&Bz(E.delta,k)})[0];if(_&&_.should){S.cancelable&&S.preventDefault();return}if(!_){var P=(i.current.shards||[]).map(hS).filter(Boolean).filter(function(E){return E.contains(S.target)}),I=P.length>0?c(S,P[0]):!i.current.noIsolation;I&&S.cancelable&&S.preventDefault()}}},[]),p=f.useCallback(function(y,S,k,_){var P={name:y,delta:S,target:k,should:_};t.current.push(P),setTimeout(function(){t.current=t.current.filter(function(I){return I!==P})},1)},[]),h=f.useCallback(function(y){n.current=Kf(y),r.current=void 0},[]),m=f.useCallback(function(y){p(y.type,pS(y),y.target,c(y,e.lockRef.current))},[]),v=f.useCallback(function(y){p(y.type,Kf(y),y.target,c(y,e.lockRef.current))},[]);f.useEffect(function(){return Fl.push(s),e.setCallbacks({onScrollCapture:m,onWheelCapture:m,onTouchMoveCapture:v}),document.addEventListener("wheel",d,Bl),document.addEventListener("touchmove",d,Bl),document.addEventListener("touchstart",h,Bl),function(){Fl=Fl.filter(function(y){return y!==s}),document.removeEventListener("wheel",d,Bl),document.removeEventListener("touchmove",d,Bl),document.removeEventListener("touchstart",h,Bl)}},[]);var b=e.removeScrollBar,w=e.inert;return f.createElement(f.Fragment,null,w?f.createElement(s,{styles:Fz(o)}):null,b?f.createElement(Mz,{gapMode:e.gapMode}):null)}const Vz=FT(P6,Wz);var R6=f.forwardRef(function(e,t){return f.createElement(_m,Qs({},e,{ref:t,sideCar:Vz}))});R6.classNames=_m.classNames;const Uz=R6;function Gz(e){const{autoFocus:t,trapFocus:n,dialogRef:r,initialFocusRef:o,blockScrollOnMount:s,allowPinchZoom:i,finalFocusRef:c,returnFocusOnClose:d,preserveScrollBarGap:p,lockFocusAcrossFrames:h,isOpen:m}=ll(),[v,b]=zR();f.useEffect(()=>{!v&&b&&setTimeout(b)},[v,b]);const w=k6(r,m);return a.jsx(J3,{autoFocus:t,isDisabled:!n,initialFocusRef:o,finalFocusRef:c,restoreFocus:d,contentRef:r,lockFocusAcrossFrames:h,children:a.jsx(Uz,{removeScrollBar:!p,allowPinchZoom:i,enabled:w===1&&s,forwardProps:!0,children:e.children})})}var fd=Ae((e,t)=>{const{className:n,children:r,containerProps:o,motionProps:s,...i}=e,{getDialogProps:c,getDialogContainerProps:d}=ll(),p=c(i,t),h=d(o),m=Ct("chakra-modal__content",n),v=Vc(),b={display:"flex",flexDirection:"column",position:"relative",width:"100%",outline:0,...v.dialog},w={display:"flex",width:"100vw",height:"$100vh",position:"fixed",left:0,top:0,...v.dialogContainer},{motionPreset:y}=ll();return a.jsx(Gz,{children:a.jsx(je.div,{...h,className:"chakra-modal__content-container",tabIndex:-1,__css:w,children:a.jsx(C6,{preset:y,motionProps:s,className:m,...p,__css:b,children:r})})})});fd.displayName="ModalContent";function zd(e){const{leastDestructiveRef:t,...n}=e;return a.jsx(dd,{...n,initialFocusRef:t})}var Bd=Ae((e,t)=>a.jsx(fd,{ref:t,role:"alertdialog",...e})),$a=Ae((e,t)=>{const{className:n,...r}=e,o=Ct("chakra-modal__footer",n),i={display:"flex",alignItems:"center",justifyContent:"flex-end",...Vc().footer};return a.jsx(je.footer,{ref:t,...r,__css:i,className:o})});$a.displayName="ModalFooter";var La=Ae((e,t)=>{const{className:n,...r}=e,{headerId:o,setHeaderMounted:s}=ll();f.useEffect(()=>(s(!0),()=>s(!1)),[s]);const i=Ct("chakra-modal__header",n),d={flex:0,...Vc().header};return a.jsx(je.header,{ref:t,className:i,id:o,...r,__css:d})});La.displayName="ModalHeader";var qz=je(Er.div),za=Ae((e,t)=>{const{className:n,transition:r,motionProps:o,...s}=e,i=Ct("chakra-modal__overlay",n),d={pos:"fixed",left:"0",top:"0",w:"100vw",h:"100vh",...Vc().overlay},{motionPreset:p}=ll(),m=o||(p==="none"?{}:q5);return a.jsx(qz,{...m,__css:d,ref:t,className:i,...s})});za.displayName="ModalOverlay";var Ba=Ae((e,t)=>{const{className:n,...r}=e,{bodyId:o,setBodyMounted:s}=ll();f.useEffect(()=>(s(!0),()=>s(!1)),[s]);const i=Ct("chakra-modal__body",n),c=Vc();return a.jsx(je.div,{ref:t,className:i,id:o,...r,__css:c.body})});Ba.displayName="ModalBody";var Yb=Ae((e,t)=>{const{onClick:n,className:r,...o}=e,{onClose:s}=ll(),i=Ct("chakra-modal__close-btn",r),c=Vc();return a.jsx(a9,{ref:t,__css:c.closeButton,className:i,onClick:et(n,d=>{d.stopPropagation(),s()}),...o})});Yb.displayName="ModalCloseButton";var Kz=e=>a.jsx(fo,{viewBox:"0 0 24 24",...e,children:a.jsx("path",{fill:"currentColor",d:"M21,5H3C2.621,5,2.275,5.214,2.105,5.553C1.937,5.892,1.973,6.297,2.2,6.6l9,12 c0.188,0.252,0.485,0.4,0.8,0.4s0.611-0.148,0.8-0.4l9-12c0.228-0.303,0.264-0.708,0.095-1.047C21.725,5.214,21.379,5,21,5z"})}),Xz=e=>a.jsx(fo,{viewBox:"0 0 24 24",...e,children:a.jsx("path",{fill:"currentColor",d:"M12.8,5.4c-0.377-0.504-1.223-0.504-1.6,0l-9,12c-0.228,0.303-0.264,0.708-0.095,1.047 C2.275,18.786,2.621,19,3,19h18c0.379,0,0.725-0.214,0.895-0.553c0.169-0.339,0.133-0.744-0.095-1.047L12.8,5.4z"})});function mS(e,t,n,r){f.useEffect(()=>{var o;if(!e.current||!r)return;const s=(o=e.current.ownerDocument.defaultView)!=null?o:window,i=Array.isArray(t)?t:[t],c=new s.MutationObserver(d=>{for(const p of d)p.type==="attributes"&&p.attributeName&&i.includes(p.attributeName)&&n(p)});return c.observe(e.current,{attributes:!0,attributeFilter:i}),()=>c.disconnect()})}function Yz(e,t){const n=or(e);f.useEffect(()=>{let r=null;const o=()=>n();return t!==null&&(r=window.setInterval(o,t)),()=>{r&&window.clearInterval(r)}},[t,n])}var Qz=50,gS=300;function Jz(e,t){const[n,r]=f.useState(!1),[o,s]=f.useState(null),[i,c]=f.useState(!0),d=f.useRef(null),p=()=>clearTimeout(d.current);Yz(()=>{o==="increment"&&e(),o==="decrement"&&t()},n?Qz:null);const h=f.useCallback(()=>{i&&e(),d.current=setTimeout(()=>{c(!1),r(!0),s("increment")},gS)},[e,i]),m=f.useCallback(()=>{i&&t(),d.current=setTimeout(()=>{c(!1),r(!0),s("decrement")},gS)},[t,i]),v=f.useCallback(()=>{c(!0),r(!1),p()},[]);return f.useEffect(()=>()=>p(),[]),{up:h,down:m,stop:v,isSpinning:n}}var Zz=/^[Ee0-9+\-.]$/;function eB(e){return Zz.test(e)}function tB(e,t){if(e.key==null)return!0;const n=e.ctrlKey||e.altKey||e.metaKey;return!(e.key.length===1)||n?!0:t(e.key)}function nB(e={}){const{focusInputOnChange:t=!0,clampValueOnBlur:n=!0,keepWithinRange:r=!0,min:o=Number.MIN_SAFE_INTEGER,max:s=Number.MAX_SAFE_INTEGER,step:i=1,isReadOnly:c,isDisabled:d,isRequired:p,isInvalid:h,pattern:m="[0-9]*(.[0-9]+)?",inputMode:v="decimal",allowMouseWheel:b,id:w,onChange:y,precision:S,name:k,"aria-describedby":_,"aria-label":P,"aria-labelledby":I,onFocus:E,onBlur:O,onInvalid:R,getAriaValueText:M,isValidCharacter:D,format:A,parse:L,...Q}=e,F=or(E),V=or(O),q=or(R),G=or(D??eB),T=or(M),z=wT(e),{update:$,increment:Y,decrement:ae}=z,[fe,ie]=f.useState(!1),X=!(c||d),K=f.useRef(null),U=f.useRef(null),se=f.useRef(null),re=f.useRef(null),oe=f.useCallback(we=>we.split("").filter(G).join(""),[G]),pe=f.useCallback(we=>{var ht;return(ht=L==null?void 0:L(we))!=null?ht:we},[L]),le=f.useCallback(we=>{var ht;return((ht=A==null?void 0:A(we))!=null?ht:we).toString()},[A]);Ga(()=>{(z.valueAsNumber>s||z.valueAsNumber{if(!K.current)return;if(K.current.value!=z.value){const ht=pe(K.current.value);z.setValue(oe(ht))}},[pe,oe]);const ge=f.useCallback((we=i)=>{X&&Y(we)},[Y,X,i]),ke=f.useCallback((we=i)=>{X&&ae(we)},[ae,X,i]),xe=Jz(ge,ke);mS(se,"disabled",xe.stop,xe.isSpinning),mS(re,"disabled",xe.stop,xe.isSpinning);const de=f.useCallback(we=>{if(we.nativeEvent.isComposing)return;const $t=pe(we.currentTarget.value);$(oe($t)),U.current={start:we.currentTarget.selectionStart,end:we.currentTarget.selectionEnd}},[$,oe,pe]),Te=f.useCallback(we=>{var ht,$t,Lt;F==null||F(we),U.current&&(we.target.selectionStart=($t=U.current.start)!=null?$t:(ht=we.currentTarget.value)==null?void 0:ht.length,we.currentTarget.selectionEnd=(Lt=U.current.end)!=null?Lt:we.currentTarget.selectionStart)},[F]),Ee=f.useCallback(we=>{if(we.nativeEvent.isComposing)return;tB(we,G)||we.preventDefault();const ht=$e(we)*i,$t=we.key,Le={ArrowUp:()=>ge(ht),ArrowDown:()=>ke(ht),Home:()=>$(o),End:()=>$(s)}[$t];Le&&(we.preventDefault(),Le(we))},[G,i,ge,ke,$,o,s]),$e=we=>{let ht=1;return(we.metaKey||we.ctrlKey)&&(ht=.1),we.shiftKey&&(ht=10),ht},kt=f.useMemo(()=>{const we=T==null?void 0:T(z.value);if(we!=null)return we;const ht=z.value.toString();return ht||void 0},[z.value,T]),ct=f.useCallback(()=>{let we=z.value;if(z.value==="")return;/^[eE]/.test(z.value.toString())?z.setValue(""):(z.valueAsNumbers&&(we=s),z.cast(we))},[z,s,o]),on=f.useCallback(()=>{ie(!1),n&&ct()},[n,ie,ct]),vt=f.useCallback(()=>{t&&requestAnimationFrame(()=>{var we;(we=K.current)==null||we.focus()})},[t]),bt=f.useCallback(we=>{we.preventDefault(),xe.up(),vt()},[vt,xe]),Se=f.useCallback(we=>{we.preventDefault(),xe.down(),vt()},[vt,xe]);Yi(()=>K.current,"wheel",we=>{var ht,$t;const Le=(($t=(ht=K.current)==null?void 0:ht.ownerDocument)!=null?$t:document).activeElement===K.current;if(!b||!Le)return;we.preventDefault();const Ge=$e(we)*i,Pn=Math.sign(we.deltaY);Pn===-1?ge(Ge):Pn===1&&ke(Ge)},{passive:!1});const Me=f.useCallback((we={},ht=null)=>{const $t=d||r&&z.isAtMax;return{...we,ref:cn(ht,se),role:"button",tabIndex:-1,onPointerDown:et(we.onPointerDown,Lt=>{Lt.button!==0||$t||bt(Lt)}),onPointerLeave:et(we.onPointerLeave,xe.stop),onPointerUp:et(we.onPointerUp,xe.stop),disabled:$t,"aria-disabled":rs($t)}},[z.isAtMax,r,bt,xe.stop,d]),_t=f.useCallback((we={},ht=null)=>{const $t=d||r&&z.isAtMin;return{...we,ref:cn(ht,re),role:"button",tabIndex:-1,onPointerDown:et(we.onPointerDown,Lt=>{Lt.button!==0||$t||Se(Lt)}),onPointerLeave:et(we.onPointerLeave,xe.stop),onPointerUp:et(we.onPointerUp,xe.stop),disabled:$t,"aria-disabled":rs($t)}},[z.isAtMin,r,Se,xe.stop,d]),Tt=f.useCallback((we={},ht=null)=>{var $t,Lt,Le,Ge;return{name:k,inputMode:v,type:"text",pattern:m,"aria-labelledby":I,"aria-label":P,"aria-describedby":_,id:w,disabled:d,...we,readOnly:($t=we.readOnly)!=null?$t:c,"aria-readonly":(Lt=we.readOnly)!=null?Lt:c,"aria-required":(Le=we.required)!=null?Le:p,required:(Ge=we.required)!=null?Ge:p,ref:cn(K,ht),value:le(z.value),role:"spinbutton","aria-valuemin":o,"aria-valuemax":s,"aria-valuenow":Number.isNaN(z.valueAsNumber)?void 0:z.valueAsNumber,"aria-invalid":rs(h??z.isOutOfRange),"aria-valuetext":kt,autoComplete:"off",autoCorrect:"off",onChange:et(we.onChange,de),onKeyDown:et(we.onKeyDown,Ee),onFocus:et(we.onFocus,Te,()=>ie(!0)),onBlur:et(we.onBlur,V,on)}},[k,v,m,I,P,le,_,w,d,p,c,h,z.value,z.valueAsNumber,z.isOutOfRange,o,s,kt,de,Ee,Te,V,on]);return{value:le(z.value),valueAsNumber:z.valueAsNumber,isFocused:fe,isDisabled:d,isReadOnly:c,getIncrementButtonProps:Me,getDecrementButtonProps:_t,getInputProps:Tt,htmlProps:Q}}var[rB,Pm]=Dn({name:"NumberInputStylesContext",errorMessage:`useNumberInputStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),[oB,Qb]=Dn({name:"NumberInputContext",errorMessage:"useNumberInputContext: `context` is undefined. Seems you forgot to wrap number-input's components within "}),jm=Ae(function(t,n){const r=Hr("NumberInput",t),o=qn(t),s=xb(o),{htmlProps:i,...c}=nB(s),d=f.useMemo(()=>c,[c]);return a.jsx(oB,{value:d,children:a.jsx(rB,{value:r,children:a.jsx(je.div,{...i,ref:n,className:Ct("chakra-numberinput",t.className),__css:{position:"relative",zIndex:0,...r.root}})})})});jm.displayName="NumberInput";var Im=Ae(function(t,n){const r=Pm();return a.jsx(je.div,{"aria-hidden":!0,ref:n,...t,__css:{display:"flex",flexDirection:"column",position:"absolute",top:"0",insetEnd:"0px",margin:"1px",height:"calc(100% - 2px)",zIndex:1,...r.stepperGroup}})});Im.displayName="NumberInputStepper";var Em=Ae(function(t,n){const{getInputProps:r}=Qb(),o=r(t,n),s=Pm();return a.jsx(je.input,{...o,className:Ct("chakra-numberinput__field",t.className),__css:{width:"100%",...s.field}})});Em.displayName="NumberInputField";var M6=je("div",{baseStyle:{display:"flex",justifyContent:"center",alignItems:"center",flex:1,transitionProperty:"common",transitionDuration:"normal",userSelect:"none",cursor:"pointer",lineHeight:"normal"}}),Om=Ae(function(t,n){var r;const o=Pm(),{getDecrementButtonProps:s}=Qb(),i=s(t,n);return a.jsx(M6,{...i,__css:o.stepper,children:(r=t.children)!=null?r:a.jsx(Kz,{})})});Om.displayName="NumberDecrementStepper";var Rm=Ae(function(t,n){var r;const{getIncrementButtonProps:o}=Qb(),s=o(t,n),i=Pm();return a.jsx(M6,{...s,__css:i.stepper,children:(r=t.children)!=null?r:a.jsx(Xz,{})})});Rm.displayName="NumberIncrementStepper";var[sB,Fd]=Dn({name:"PopoverContext",errorMessage:"usePopoverContext: `context` is undefined. Seems you forgot to wrap all popover components within ``"}),[aB,Jb]=Dn({name:"PopoverStylesContext",errorMessage:`usePopoverStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `});function Zb(e){const t=f.Children.only(e.children),{getTriggerProps:n}=Fd();return f.cloneElement(t,n(t.props,t.ref))}Zb.displayName="PopoverTrigger";var Hl={click:"click",hover:"hover"};function iB(e={}){const{closeOnBlur:t=!0,closeOnEsc:n=!0,initialFocusRef:r,id:o,returnFocusOnClose:s=!0,autoFocus:i=!0,arrowSize:c,arrowShadowColor:d,trigger:p=Hl.click,openDelay:h=200,closeDelay:m=200,isLazy:v,lazyBehavior:b="unmount",computePositionOnMount:w,...y}=e,{isOpen:S,onClose:k,onOpen:_,onToggle:P}=qb(e),I=f.useRef(null),E=f.useRef(null),O=f.useRef(null),R=f.useRef(!1),M=f.useRef(!1);S&&(M.current=!0);const[D,A]=f.useState(!1),[L,Q]=f.useState(!1),F=f.useId(),V=o??F,[q,G,T,z]=["popover-trigger","popover-content","popover-header","popover-body"].map(de=>`${de}-${V}`),{referenceRef:$,getArrowProps:Y,getPopperProps:ae,getArrowInnerProps:fe,forceUpdate:ie}=Gb({...y,enabled:S||!!w}),X=v6({isOpen:S,ref:O});d3({enabled:S,ref:E}),a6(O,{focusRef:E,visible:S,shouldFocus:s&&p===Hl.click}),h$(O,{focusRef:r,visible:S,shouldFocus:i&&p===Hl.click});const K=Kb({wasSelected:M.current,enabled:v,mode:b,isSelected:X.present}),U=f.useCallback((de={},Te=null)=>{const Ee={...de,style:{...de.style,transformOrigin:Ir.transformOrigin.varRef,[Ir.arrowSize.var]:c?`${c}px`:void 0,[Ir.arrowShadowColor.var]:d},ref:cn(O,Te),children:K?de.children:null,id:G,tabIndex:-1,role:"dialog",onKeyDown:et(de.onKeyDown,$e=>{n&&$e.key==="Escape"&&k()}),onBlur:et(de.onBlur,$e=>{const kt=vS($e),ct=B0(O.current,kt),on=B0(E.current,kt);S&&t&&(!ct&&!on)&&k()}),"aria-labelledby":D?T:void 0,"aria-describedby":L?z:void 0};return p===Hl.hover&&(Ee.role="tooltip",Ee.onMouseEnter=et(de.onMouseEnter,()=>{R.current=!0}),Ee.onMouseLeave=et(de.onMouseLeave,$e=>{$e.nativeEvent.relatedTarget!==null&&(R.current=!1,setTimeout(()=>k(),m))})),Ee},[K,G,D,T,L,z,p,n,k,S,t,m,d,c]),se=f.useCallback((de={},Te=null)=>ae({...de,style:{visibility:S?"visible":"hidden",...de.style}},Te),[S,ae]),re=f.useCallback((de,Te=null)=>({...de,ref:cn(Te,I,$)}),[I,$]),oe=f.useRef(),pe=f.useRef(),le=f.useCallback(de=>{I.current==null&&$(de)},[$]),ge=f.useCallback((de={},Te=null)=>{const Ee={...de,ref:cn(E,Te,le),id:q,"aria-haspopup":"dialog","aria-expanded":S,"aria-controls":G};return p===Hl.click&&(Ee.onClick=et(de.onClick,P)),p===Hl.hover&&(Ee.onFocus=et(de.onFocus,()=>{oe.current===void 0&&_()}),Ee.onBlur=et(de.onBlur,$e=>{const kt=vS($e),ct=!B0(O.current,kt);S&&t&&ct&&k()}),Ee.onKeyDown=et(de.onKeyDown,$e=>{$e.key==="Escape"&&k()}),Ee.onMouseEnter=et(de.onMouseEnter,()=>{R.current=!0,oe.current=window.setTimeout(()=>_(),h)}),Ee.onMouseLeave=et(de.onMouseLeave,()=>{R.current=!1,oe.current&&(clearTimeout(oe.current),oe.current=void 0),pe.current=window.setTimeout(()=>{R.current===!1&&k()},m)})),Ee},[q,S,G,p,le,P,_,t,k,h,m]);f.useEffect(()=>()=>{oe.current&&clearTimeout(oe.current),pe.current&&clearTimeout(pe.current)},[]);const ke=f.useCallback((de={},Te=null)=>({...de,id:T,ref:cn(Te,Ee=>{A(!!Ee)})}),[T]),xe=f.useCallback((de={},Te=null)=>({...de,id:z,ref:cn(Te,Ee=>{Q(!!Ee)})}),[z]);return{forceUpdate:ie,isOpen:S,onAnimationComplete:X.onComplete,onClose:k,getAnchorProps:re,getArrowProps:Y,getArrowInnerProps:fe,getPopoverPositionerProps:se,getPopoverProps:U,getTriggerProps:ge,getHeaderProps:ke,getBodyProps:xe}}function B0(e,t){return e===t||(e==null?void 0:e.contains(t))}function vS(e){var t;const n=e.currentTarget.ownerDocument.activeElement;return(t=e.relatedTarget)!=null?t:n}function ey(e){const t=Hr("Popover",e),{children:n,...r}=qn(e),o=$c(),s=iB({...r,direction:o.direction});return a.jsx(sB,{value:s,children:a.jsx(aB,{value:t,children:Z1(n,{isOpen:s.isOpen,onClose:s.onClose,forceUpdate:s.forceUpdate})})})}ey.displayName="Popover";var F0=(e,t)=>t?`${e}.${t}, ${t}`:void 0;function D6(e){var t;const{bg:n,bgColor:r,backgroundColor:o,shadow:s,boxShadow:i,shadowColor:c}=e,{getArrowProps:d,getArrowInnerProps:p}=Fd(),h=Jb(),m=(t=n??r)!=null?t:o,v=s??i;return a.jsx(je.div,{...d(),className:"chakra-popover__arrow-positioner",children:a.jsx(je.div,{className:Ct("chakra-popover__arrow",e.className),...p(e),__css:{"--popper-arrow-shadow-color":F0("colors",c),"--popper-arrow-bg":F0("colors",m),"--popper-arrow-shadow":F0("shadows",v),...h.arrow}})})}D6.displayName="PopoverArrow";var A6=Ae(function(t,n){const{getBodyProps:r}=Fd(),o=Jb();return a.jsx(je.div,{...r(t,n),className:Ct("chakra-popover__body",t.className),__css:o.body})});A6.displayName="PopoverBody";function lB(e){if(e)return{enter:{...e.enter,visibility:"visible"},exit:{...e.exit,transitionEnd:{visibility:"hidden"}}}}var cB={exit:{opacity:0,scale:.95,transition:{duration:.1,ease:[.4,0,1,1]}},enter:{scale:1,opacity:1,transition:{duration:.15,ease:[0,0,.2,1]}}},uB=je(Er.section),T6=Ae(function(t,n){const{variants:r=cB,...o}=t,{isOpen:s}=Fd();return a.jsx(uB,{ref:n,variants:lB(r),initial:!1,animate:s?"enter":"exit",...o})});T6.displayName="PopoverTransition";var ty=Ae(function(t,n){const{rootProps:r,motionProps:o,...s}=t,{getPopoverProps:i,getPopoverPositionerProps:c,onAnimationComplete:d}=Fd(),p=Jb(),h={position:"relative",display:"flex",flexDirection:"column",...p.content};return a.jsx(je.div,{...c(r),__css:p.popper,className:"chakra-popover__popper",children:a.jsx(T6,{...o,...i(s,n),onAnimationComplete:pm(d,s.onAnimationComplete),className:Ct("chakra-popover__content",t.className),__css:h})})});ty.displayName="PopoverContent";function dB(e,t,n){return(e-t)*100/(n-t)}Va({"0%":{strokeDasharray:"1, 400",strokeDashoffset:"0"},"50%":{strokeDasharray:"400, 400",strokeDashoffset:"-100"},"100%":{strokeDasharray:"400, 400",strokeDashoffset:"-260"}});Va({"0%":{transform:"rotate(0deg)"},"100%":{transform:"rotate(360deg)"}});var fB=Va({"0%":{left:"-40%"},"100%":{left:"100%"}}),pB=Va({from:{backgroundPosition:"1rem 0"},to:{backgroundPosition:"0 0"}});function hB(e){const{value:t=0,min:n,max:r,valueText:o,getValueText:s,isIndeterminate:i,role:c="progressbar"}=e,d=dB(t,n,r);return{bind:{"data-indeterminate":i?"":void 0,"aria-valuemax":r,"aria-valuemin":n,"aria-valuenow":i?void 0:t,"aria-valuetext":(()=>{if(t!=null)return typeof s=="function"?s(t,d):o})(),role:c},percent:d,value:t}}var[mB,gB]=Dn({name:"ProgressStylesContext",errorMessage:`useProgressStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),vB=Ae((e,t)=>{const{min:n,max:r,value:o,isIndeterminate:s,role:i,...c}=e,d=hB({value:o,min:n,max:r,isIndeterminate:s,role:i}),h={height:"100%",...gB().filledTrack};return a.jsx(je.div,{ref:t,style:{width:`${d.percent}%`,...c.style},...d.bind,...c,__css:h})}),N6=Ae((e,t)=>{var n;const{value:r,min:o=0,max:s=100,hasStripe:i,isAnimated:c,children:d,borderRadius:p,isIndeterminate:h,"aria-label":m,"aria-labelledby":v,"aria-valuetext":b,title:w,role:y,...S}=qn(e),k=Hr("Progress",e),_=p??((n=k.track)==null?void 0:n.borderRadius),P={animation:`${pB} 1s linear infinite`},O={...!h&&i&&c&&P,...h&&{position:"absolute",willChange:"left",minWidth:"50%",animation:`${fB} 1s ease infinite normal none running`}},R={overflow:"hidden",position:"relative",...k.track};return a.jsx(je.div,{ref:t,borderRadius:_,__css:R,...S,children:a.jsxs(mB,{value:k,children:[a.jsx(vB,{"aria-label":m,"aria-labelledby":v,"aria-valuetext":b,min:o,max:s,value:r,isIndeterminate:h,css:O,borderRadius:_,title:w,role:y}),d]})})});N6.displayName="Progress";function bB(e){return e&&Ev(e)&&Ev(e.target)}function yB(e={}){const{onChange:t,value:n,defaultValue:r,name:o,isDisabled:s,isFocusable:i,isNative:c,...d}=e,[p,h]=f.useState(r||""),m=typeof n<"u",v=m?n:p,b=f.useRef(null),w=f.useCallback(()=>{const E=b.current;if(!E)return;let O="input:not(:disabled):checked";const R=E.querySelector(O);if(R){R.focus();return}O="input:not(:disabled)";const M=E.querySelector(O);M==null||M.focus()},[]),S=`radio-${f.useId()}`,k=o||S,_=f.useCallback(E=>{const O=bB(E)?E.target.value:E;m||h(O),t==null||t(String(O))},[t,m]),P=f.useCallback((E={},O=null)=>({...E,ref:cn(O,b),role:"radiogroup"}),[]),I=f.useCallback((E={},O=null)=>({...E,ref:O,name:k,[c?"checked":"isChecked"]:v!=null?E.value===v:void 0,onChange(M){_(M)},"data-radiogroup":!0}),[c,k,_,v]);return{getRootProps:P,getRadioProps:I,name:k,ref:b,focus:w,setValue:h,value:v,onChange:_,isDisabled:s,isFocusable:i,htmlProps:d}}var[xB,$6]=Dn({name:"RadioGroupContext",strict:!1}),ah=Ae((e,t)=>{const{colorScheme:n,size:r,variant:o,children:s,className:i,isDisabled:c,isFocusable:d,...p}=e,{value:h,onChange:m,getRootProps:v,name:b,htmlProps:w}=yB(p),y=f.useMemo(()=>({name:b,size:r,onChange:m,colorScheme:n,value:h,variant:o,isDisabled:c,isFocusable:d}),[b,r,m,n,h,o,c,d]);return a.jsx(xB,{value:y,children:a.jsx(je.div,{...v(w,t),className:Ct("chakra-radio-group",i),children:s})})});ah.displayName="RadioGroup";var wB={border:"0",clip:"rect(0, 0, 0, 0)",height:"1px",width:"1px",margin:"-1px",padding:"0",overflow:"hidden",whiteSpace:"nowrap",position:"absolute"};function SB(e={}){const{defaultChecked:t,isChecked:n,isFocusable:r,isDisabled:o,isReadOnly:s,isRequired:i,onChange:c,isInvalid:d,name:p,value:h,id:m,"data-radiogroup":v,"aria-describedby":b,...w}=e,y=`radio-${f.useId()}`,S=Rd(),_=!!$6()||!!v;let I=!!S&&!_?S.id:y;I=m??I;const E=o??(S==null?void 0:S.isDisabled),O=s??(S==null?void 0:S.isReadOnly),R=i??(S==null?void 0:S.isRequired),M=d??(S==null?void 0:S.isInvalid),[D,A]=f.useState(!1),[L,Q]=f.useState(!1),[F,V]=f.useState(!1),[q,G]=f.useState(!1),[T,z]=f.useState(!!t),$=typeof n<"u",Y=$?n:T;f.useEffect(()=>e3(A),[]);const ae=f.useCallback(le=>{if(O||E){le.preventDefault();return}$||z(le.target.checked),c==null||c(le)},[$,E,O,c]),fe=f.useCallback(le=>{le.key===" "&&G(!0)},[G]),ie=f.useCallback(le=>{le.key===" "&&G(!1)},[G]),X=f.useCallback((le={},ge=null)=>({...le,ref:ge,"data-active":Ft(q),"data-hover":Ft(F),"data-disabled":Ft(E),"data-invalid":Ft(M),"data-checked":Ft(Y),"data-focus":Ft(L),"data-focus-visible":Ft(L&&D),"data-readonly":Ft(O),"aria-hidden":!0,onMouseDown:et(le.onMouseDown,()=>G(!0)),onMouseUp:et(le.onMouseUp,()=>G(!1)),onMouseEnter:et(le.onMouseEnter,()=>V(!0)),onMouseLeave:et(le.onMouseLeave,()=>V(!1))}),[q,F,E,M,Y,L,O,D]),{onFocus:K,onBlur:U}=S??{},se=f.useCallback((le={},ge=null)=>{const ke=E&&!r;return{...le,id:I,ref:ge,type:"radio",name:p,value:h,onChange:et(le.onChange,ae),onBlur:et(U,le.onBlur,()=>Q(!1)),onFocus:et(K,le.onFocus,()=>Q(!0)),onKeyDown:et(le.onKeyDown,fe),onKeyUp:et(le.onKeyUp,ie),checked:Y,disabled:ke,readOnly:O,required:R,"aria-invalid":rs(M),"aria-disabled":rs(ke),"aria-required":rs(R),"data-readonly":Ft(O),"aria-describedby":b,style:wB}},[E,r,I,p,h,ae,U,K,fe,ie,Y,O,R,M,b]);return{state:{isInvalid:M,isFocused:L,isChecked:Y,isActive:q,isHovered:F,isDisabled:E,isReadOnly:O,isRequired:R},getCheckboxProps:X,getRadioProps:X,getInputProps:se,getLabelProps:(le={},ge=null)=>({...le,ref:ge,onMouseDown:et(le.onMouseDown,CB),"data-disabled":Ft(E),"data-checked":Ft(Y),"data-invalid":Ft(M)}),getRootProps:(le,ge=null)=>({...le,ref:ge,"data-disabled":Ft(E),"data-checked":Ft(Y),"data-invalid":Ft(M)}),htmlProps:w}}function CB(e){e.preventDefault(),e.stopPropagation()}function kB(e,t){const n={},r={};for(const[o,s]of Object.entries(e))t.includes(o)?n[o]=s:r[o]=s;return[n,r]}var ka=Ae((e,t)=>{var n;const r=$6(),{onChange:o,value:s}=e,i=Hr("Radio",{...r,...e}),c=qn(e),{spacing:d="0.5rem",children:p,isDisabled:h=r==null?void 0:r.isDisabled,isFocusable:m=r==null?void 0:r.isFocusable,inputProps:v,...b}=c;let w=e.isChecked;(r==null?void 0:r.value)!=null&&s!=null&&(w=r.value===s);let y=o;r!=null&&r.onChange&&s!=null&&(y=pm(r.onChange,o));const S=(n=e==null?void 0:e.name)!=null?n:r==null?void 0:r.name,{getInputProps:k,getCheckboxProps:_,getLabelProps:P,getRootProps:I,htmlProps:E}=SB({...b,isChecked:w,isFocusable:m,isDisabled:h,onChange:y,name:S}),[O,R]=kB(E,T_),M=_(R),D=k(v,t),A=P(),L=Object.assign({},O,I()),Q={display:"inline-flex",alignItems:"center",verticalAlign:"top",cursor:"pointer",position:"relative",...i.container},F={display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0,...i.control},V={userSelect:"none",marginStart:d,...i.label};return a.jsxs(je.label,{className:"chakra-radio",...L,__css:Q,children:[a.jsx("input",{className:"chakra-radio__input",...D}),a.jsx(je.span,{className:"chakra-radio__control",...M,__css:F}),p&&a.jsx(je.span,{className:"chakra-radio__label",...A,__css:V,children:p})]})});ka.displayName="Radio";var L6=Ae(function(t,n){const{children:r,placeholder:o,className:s,...i}=t;return a.jsxs(je.select,{...i,ref:n,className:Ct("chakra-select",s),children:[o&&a.jsx("option",{value:"",children:o}),r]})});L6.displayName="SelectField";function _B(e,t){const n={},r={};for(const[o,s]of Object.entries(e))t.includes(o)?n[o]=s:r[o]=s;return[n,r]}var z6=Ae((e,t)=>{var n;const r=Hr("Select",e),{rootProps:o,placeholder:s,icon:i,color:c,height:d,h:p,minH:h,minHeight:m,iconColor:v,iconSize:b,...w}=qn(e),[y,S]=_B(w,T_),k=yb(S),_={width:"100%",height:"fit-content",position:"relative",color:c},P={paddingEnd:"2rem",...r.field,_focus:{zIndex:"unset",...(n=r.field)==null?void 0:n._focus}};return a.jsxs(je.div,{className:"chakra-select__wrapper",__css:_,...y,...o,children:[a.jsx(L6,{ref:t,height:p??d,minH:h??m,placeholder:s,...k,__css:P,children:e.children}),a.jsx(B6,{"data-disabled":Ft(k.disabled),...(v||c)&&{color:v||c},__css:r.icon,...b&&{fontSize:b},children:i})]})});z6.displayName="Select";var PB=e=>a.jsx("svg",{viewBox:"0 0 24 24",...e,children:a.jsx("path",{fill:"currentColor",d:"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"})}),jB=je("div",{baseStyle:{position:"absolute",display:"inline-flex",alignItems:"center",justifyContent:"center",pointerEvents:"none",top:"50%",transform:"translateY(-50%)"}}),B6=e=>{const{children:t=a.jsx(PB,{}),...n}=e,r=f.cloneElement(t,{role:"presentation",className:"chakra-select__icon",focusable:!1,"aria-hidden":!0,style:{width:"1em",height:"1em",color:"currentColor"}});return a.jsx(jB,{...n,className:"chakra-select__icon-wrapper",children:f.isValidElement(t)?r:null})};B6.displayName="SelectIcon";function IB(){const e=f.useRef(!0);return f.useEffect(()=>{e.current=!1},[]),e.current}function EB(e){const t=f.useRef();return f.useEffect(()=>{t.current=e},[e]),t.current}var OB=je("div",{baseStyle:{boxShadow:"none",backgroundClip:"padding-box",cursor:"default",color:"transparent",pointerEvents:"none",userSelect:"none","&::before, &::after, *":{visibility:"hidden"}}}),a1=N_("skeleton-start-color"),i1=N_("skeleton-end-color"),RB=Va({from:{opacity:0},to:{opacity:1}}),MB=Va({from:{borderColor:a1.reference,background:a1.reference},to:{borderColor:i1.reference,background:i1.reference}}),Mm=Ae((e,t)=>{const n={...e,fadeDuration:typeof e.fadeDuration=="number"?e.fadeDuration:.4,speed:typeof e.speed=="number"?e.speed:.8},r=fa("Skeleton",n),o=IB(),{startColor:s="",endColor:i="",isLoaded:c,fadeDuration:d,speed:p,className:h,fitContent:m,...v}=qn(n),[b,w]=Lc("colors",[s,i]),y=EB(c),S=Ct("chakra-skeleton",h),k={...b&&{[a1.variable]:b},...w&&{[i1.variable]:w}};if(c){const _=o||y?"none":`${RB} ${d}s`;return a.jsx(je.div,{ref:t,className:S,__css:{animation:_},...v})}return a.jsx(OB,{ref:t,className:S,...v,__css:{width:m?"fit-content":void 0,...r,...k,_dark:{...r._dark,...k},animation:`${p}s linear infinite alternate ${MB}`}})});Mm.displayName="Skeleton";var Zo=e=>e?"":void 0,dc=e=>e?!0:void 0,ji=(...e)=>e.filter(Boolean).join(" ");function fc(...e){return function(n){e.some(r=>(r==null||r(n),n==null?void 0:n.defaultPrevented))}}function DB(e){return{root:`slider-root-${e}`,getThumb:t=>`slider-thumb-${e}-${t}`,getInput:t=>`slider-input-${e}-${t}`,track:`slider-track-${e}`,innerTrack:`slider-filled-track-${e}`,getMarker:t=>`slider-marker-${e}-${t}`,output:`slider-output-${e}`}}function $u(e){const{orientation:t,vertical:n,horizontal:r}=e;return t==="vertical"?n:r}var Ap={width:0,height:0},Xf=e=>e||Ap;function F6(e){const{orientation:t,thumbPercents:n,thumbRects:r,isReversed:o}=e,s=y=>{var S;const k=(S=r[y])!=null?S:Ap;return{position:"absolute",userSelect:"none",WebkitUserSelect:"none",MozUserSelect:"none",msUserSelect:"none",touchAction:"none",...$u({orientation:t,vertical:{bottom:`calc(${n[y]}% - ${k.height/2}px)`},horizontal:{left:`calc(${n[y]}% - ${k.width/2}px)`}})}},i=t==="vertical"?r.reduce((y,S)=>Xf(y).height>Xf(S).height?y:S,Ap):r.reduce((y,S)=>Xf(y).width>Xf(S).width?y:S,Ap),c={position:"relative",touchAction:"none",WebkitTapHighlightColor:"rgba(0,0,0,0)",userSelect:"none",outline:0,...$u({orientation:t,vertical:i?{paddingLeft:i.width/2,paddingRight:i.width/2}:{},horizontal:i?{paddingTop:i.height/2,paddingBottom:i.height/2}:{}})},d={position:"absolute",...$u({orientation:t,vertical:{left:"50%",transform:"translateX(-50%)",height:"100%"},horizontal:{top:"50%",transform:"translateY(-50%)",width:"100%"}})},p=n.length===1,h=[0,o?100-n[0]:n[0]],m=p?h:n;let v=m[0];!p&&o&&(v=100-v);const b=Math.abs(m[m.length-1]-m[0]),w={...d,...$u({orientation:t,vertical:o?{height:`${b}%`,top:`${v}%`}:{height:`${b}%`,bottom:`${v}%`},horizontal:o?{width:`${b}%`,right:`${v}%`}:{width:`${b}%`,left:`${v}%`}})};return{trackStyle:d,innerTrackStyle:w,rootStyle:c,getThumbStyle:s}}function H6(e){const{isReversed:t,direction:n,orientation:r}=e;return n==="ltr"||r==="vertical"?t:!t}function AB(e,t,n,r){return e.addEventListener(t,n,r),()=>{e.removeEventListener(t,n,r)}}function TB(e){const t=$B(e);return typeof t.PointerEvent<"u"&&e instanceof t.PointerEvent?e.pointerType==="mouse":e instanceof t.MouseEvent}function W6(e){return!!e.touches}function NB(e){return W6(e)&&e.touches.length>1}function $B(e){var t;return(t=e.view)!=null?t:window}function LB(e,t="page"){const n=e.touches[0]||e.changedTouches[0];return{x:n[`${t}X`],y:n[`${t}Y`]}}function zB(e,t="page"){return{x:e[`${t}X`],y:e[`${t}Y`]}}function V6(e,t="page"){return W6(e)?LB(e,t):zB(e,t)}function BB(e){return t=>{const n=TB(t);(!n||n&&t.button===0)&&e(t)}}function FB(e,t=!1){function n(o){e(o,{point:V6(o)})}return t?BB(n):n}function Tp(e,t,n,r){return AB(e,t,FB(n,t==="pointerdown"),r)}var HB=Object.defineProperty,WB=(e,t,n)=>t in e?HB(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,vs=(e,t,n)=>(WB(e,typeof t!="symbol"?t+"":t,n),n),VB=class{constructor(e,t,n){vs(this,"history",[]),vs(this,"startEvent",null),vs(this,"lastEvent",null),vs(this,"lastEventInfo",null),vs(this,"handlers",{}),vs(this,"removeListeners",()=>{}),vs(this,"threshold",3),vs(this,"win"),vs(this,"updatePoint",()=>{if(!(this.lastEvent&&this.lastEventInfo))return;const c=H0(this.lastEventInfo,this.history),d=this.startEvent!==null,p=KB(c.offset,{x:0,y:0})>=this.threshold;if(!d&&!p)return;const{timestamp:h}=Mw();this.history.push({...c.point,timestamp:h});const{onStart:m,onMove:v}=this.handlers;d||(m==null||m(this.lastEvent,c),this.startEvent=this.lastEvent),v==null||v(this.lastEvent,c)}),vs(this,"onPointerMove",(c,d)=>{this.lastEvent=c,this.lastEventInfo=d,cA.update(this.updatePoint,!0)}),vs(this,"onPointerUp",(c,d)=>{const p=H0(d,this.history),{onEnd:h,onSessionEnd:m}=this.handlers;m==null||m(c,p),this.end(),!(!h||!this.startEvent)&&(h==null||h(c,p))});var r;if(this.win=(r=e.view)!=null?r:window,NB(e))return;this.handlers=t,n&&(this.threshold=n),e.stopPropagation(),e.preventDefault();const o={point:V6(e)},{timestamp:s}=Mw();this.history=[{...o.point,timestamp:s}];const{onSessionStart:i}=t;i==null||i(e,H0(o,this.history)),this.removeListeners=qB(Tp(this.win,"pointermove",this.onPointerMove),Tp(this.win,"pointerup",this.onPointerUp),Tp(this.win,"pointercancel",this.onPointerUp))}updateHandlers(e){this.handlers=e}end(){var e;(e=this.removeListeners)==null||e.call(this),uA.update(this.updatePoint)}};function bS(e,t){return{x:e.x-t.x,y:e.y-t.y}}function H0(e,t){return{point:e.point,delta:bS(e.point,t[t.length-1]),offset:bS(e.point,t[0]),velocity:GB(t,.1)}}var UB=e=>e*1e3;function GB(e,t){if(e.length<2)return{x:0,y:0};let n=e.length-1,r=null;const o=e[e.length-1];for(;n>=0&&(r=e[n],!(o.timestamp-r.timestamp>UB(t)));)n--;if(!r)return{x:0,y:0};const s=(o.timestamp-r.timestamp)/1e3;if(s===0)return{x:0,y:0};const i={x:(o.x-r.x)/s,y:(o.y-r.y)/s};return i.x===1/0&&(i.x=0),i.y===1/0&&(i.y=0),i}function qB(...e){return t=>e.reduce((n,r)=>r(n),t)}function W0(e,t){return Math.abs(e-t)}function yS(e){return"x"in e&&"y"in e}function KB(e,t){if(typeof e=="number"&&typeof t=="number")return W0(e,t);if(yS(e)&&yS(t)){const n=W0(e.x,t.x),r=W0(e.y,t.y);return Math.sqrt(n**2+r**2)}return 0}function U6(e){const t=f.useRef(null);return t.current=e,t}function G6(e,t){const{onPan:n,onPanStart:r,onPanEnd:o,onPanSessionStart:s,onPanSessionEnd:i,threshold:c}=t,d=!!(n||r||o||s||i),p=f.useRef(null),h=U6({onSessionStart:s,onSessionEnd:i,onStart:r,onMove:n,onEnd(m,v){p.current=null,o==null||o(m,v)}});f.useEffect(()=>{var m;(m=p.current)==null||m.updateHandlers(h.current)}),f.useEffect(()=>{const m=e.current;if(!m||!d)return;function v(b){p.current=new VB(b,h.current,c)}return Tp(m,"pointerdown",v)},[e,d,h,c]),f.useEffect(()=>()=>{var m;(m=p.current)==null||m.end(),p.current=null},[])}function XB(e,t){if(!e){t(void 0);return}t({width:e.offsetWidth,height:e.offsetHeight});const n=e.ownerDocument.defaultView??window,r=new n.ResizeObserver(o=>{if(!Array.isArray(o)||!o.length)return;const[s]=o;let i,c;if("borderBoxSize"in s){const d=s.borderBoxSize,p=Array.isArray(d)?d[0]:d;i=p.inlineSize,c=p.blockSize}else i=e.offsetWidth,c=e.offsetHeight;t({width:i,height:c})});return r.observe(e,{box:"border-box"}),()=>r.unobserve(e)}var YB=globalThis!=null&&globalThis.document?f.useLayoutEffect:f.useEffect;function QB(e,t){var n,r;if(!e||!e.parentElement)return;const o=(r=(n=e.ownerDocument)==null?void 0:n.defaultView)!=null?r:window,s=new o.MutationObserver(()=>{t()});return s.observe(e.parentElement,{childList:!0}),()=>{s.disconnect()}}function q6({getNodes:e,observeMutation:t=!0}){const[n,r]=f.useState([]),[o,s]=f.useState(0);return YB(()=>{const i=e(),c=i.map((d,p)=>XB(d,h=>{r(m=>[...m.slice(0,p),h,...m.slice(p+1)])}));if(t){const d=i[0];c.push(QB(d,()=>{s(p=>p+1)}))}return()=>{c.forEach(d=>{d==null||d()})}},[o]),n}function JB(e){return typeof e=="object"&&e!==null&&"current"in e}function ZB(e){const[t]=q6({observeMutation:!1,getNodes(){return[JB(e)?e.current:e]}});return t}function eF(e){const{min:t=0,max:n=100,onChange:r,value:o,defaultValue:s,isReversed:i,direction:c="ltr",orientation:d="horizontal",id:p,isDisabled:h,isReadOnly:m,onChangeStart:v,onChangeEnd:b,step:w=1,getAriaValueText:y,"aria-valuetext":S,"aria-label":k,"aria-labelledby":_,name:P,focusThumbOnChange:I=!0,minStepsBetweenThumbs:E=0,...O}=e,R=or(v),M=or(b),D=or(y),A=H6({isReversed:i,direction:c,orientation:d}),[L,Q]=Bc({value:o,defaultValue:s??[25,75],onChange:r});if(!Array.isArray(L))throw new TypeError(`[range-slider] You passed an invalid value for \`value\` or \`defaultValue\`, expected \`Array\` but got \`${typeof L}\``);const[F,V]=f.useState(!1),[q,G]=f.useState(!1),[T,z]=f.useState(-1),$=!(h||m),Y=f.useRef(L),ae=L.map(Pe=>ic(Pe,t,n)),fe=E*w,ie=tF(ae,t,n,fe),X=f.useRef({eventSource:null,value:[],valueBounds:[]});X.current.value=ae,X.current.valueBounds=ie;const K=ae.map(Pe=>n-Pe+t),se=(A?K:ae).map(Pe=>Zp(Pe,t,n)),re=d==="vertical",oe=f.useRef(null),pe=f.useRef(null),le=q6({getNodes(){const Pe=pe.current,Qe=Pe==null?void 0:Pe.querySelectorAll("[role=slider]");return Qe?Array.from(Qe):[]}}),ge=f.useId(),xe=DB(p??ge),de=f.useCallback(Pe=>{var Qe,Xe;if(!oe.current)return;X.current.eventSource="pointer";const dt=oe.current.getBoundingClientRect(),{clientX:zt,clientY:cr}=(Xe=(Qe=Pe.touches)==null?void 0:Qe[0])!=null?Xe:Pe,pn=re?dt.bottom-cr:zt-dt.left,ln=re?dt.height:dt.width;let Wr=pn/ln;return A&&(Wr=1-Wr),r3(Wr,t,n)},[re,A,n,t]),Te=(n-t)/10,Ee=w||(n-t)/100,$e=f.useMemo(()=>({setValueAtIndex(Pe,Qe){if(!$)return;const Xe=X.current.valueBounds[Pe];Qe=parseFloat(Kv(Qe,Xe.min,Ee)),Qe=ic(Qe,Xe.min,Xe.max);const dt=[...X.current.value];dt[Pe]=Qe,Q(dt)},setActiveIndex:z,stepUp(Pe,Qe=Ee){const Xe=X.current.value[Pe],dt=A?Xe-Qe:Xe+Qe;$e.setValueAtIndex(Pe,dt)},stepDown(Pe,Qe=Ee){const Xe=X.current.value[Pe],dt=A?Xe+Qe:Xe-Qe;$e.setValueAtIndex(Pe,dt)},reset(){Q(Y.current)}}),[Ee,A,Q,$]),kt=f.useCallback(Pe=>{const Qe=Pe.key,dt={ArrowRight:()=>$e.stepUp(T),ArrowUp:()=>$e.stepUp(T),ArrowLeft:()=>$e.stepDown(T),ArrowDown:()=>$e.stepDown(T),PageUp:()=>$e.stepUp(T,Te),PageDown:()=>$e.stepDown(T,Te),Home:()=>{const{min:zt}=ie[T];$e.setValueAtIndex(T,zt)},End:()=>{const{max:zt}=ie[T];$e.setValueAtIndex(T,zt)}}[Qe];dt&&(Pe.preventDefault(),Pe.stopPropagation(),dt(Pe),X.current.eventSource="keyboard")},[$e,T,Te,ie]),{getThumbStyle:ct,rootStyle:on,trackStyle:vt,innerTrackStyle:bt}=f.useMemo(()=>F6({isReversed:A,orientation:d,thumbRects:le,thumbPercents:se}),[A,d,se,le]),Se=f.useCallback(Pe=>{var Qe;const Xe=Pe??T;if(Xe!==-1&&I){const dt=xe.getThumb(Xe),zt=(Qe=pe.current)==null?void 0:Qe.ownerDocument.getElementById(dt);zt&&setTimeout(()=>zt.focus())}},[I,T,xe]);Ga(()=>{X.current.eventSource==="keyboard"&&(M==null||M(X.current.value))},[ae,M]);const Me=Pe=>{const Qe=de(Pe)||0,Xe=X.current.value.map(ln=>Math.abs(ln-Qe)),dt=Math.min(...Xe);let zt=Xe.indexOf(dt);const cr=Xe.filter(ln=>ln===dt);cr.length>1&&Qe>X.current.value[zt]&&(zt=zt+cr.length-1),z(zt),$e.setValueAtIndex(zt,Qe),Se(zt)},_t=Pe=>{if(T==-1)return;const Qe=de(Pe)||0;z(T),$e.setValueAtIndex(T,Qe),Se(T)};G6(pe,{onPanSessionStart(Pe){$&&(V(!0),Me(Pe),R==null||R(X.current.value))},onPanSessionEnd(){$&&(V(!1),M==null||M(X.current.value))},onPan(Pe){$&&_t(Pe)}});const Tt=f.useCallback((Pe={},Qe=null)=>({...Pe,...O,id:xe.root,ref:cn(Qe,pe),tabIndex:-1,"aria-disabled":dc(h),"data-focused":Zo(q),style:{...Pe.style,...on}}),[O,h,q,on,xe]),we=f.useCallback((Pe={},Qe=null)=>({...Pe,ref:cn(Qe,oe),id:xe.track,"data-disabled":Zo(h),style:{...Pe.style,...vt}}),[h,vt,xe]),ht=f.useCallback((Pe={},Qe=null)=>({...Pe,ref:Qe,id:xe.innerTrack,style:{...Pe.style,...bt}}),[bt,xe]),$t=f.useCallback((Pe,Qe=null)=>{var Xe;const{index:dt,...zt}=Pe,cr=ae[dt];if(cr==null)throw new TypeError(`[range-slider > thumb] Cannot find value at index \`${dt}\`. The \`value\` or \`defaultValue\` length is : ${ae.length}`);const pn=ie[dt];return{...zt,ref:Qe,role:"slider",tabIndex:$?0:void 0,id:xe.getThumb(dt),"data-active":Zo(F&&T===dt),"aria-valuetext":(Xe=D==null?void 0:D(cr))!=null?Xe:S==null?void 0:S[dt],"aria-valuemin":pn.min,"aria-valuemax":pn.max,"aria-valuenow":cr,"aria-orientation":d,"aria-disabled":dc(h),"aria-readonly":dc(m),"aria-label":k==null?void 0:k[dt],"aria-labelledby":k!=null&&k[dt]||_==null?void 0:_[dt],style:{...Pe.style,...ct(dt)},onKeyDown:fc(Pe.onKeyDown,kt),onFocus:fc(Pe.onFocus,()=>{G(!0),z(dt)}),onBlur:fc(Pe.onBlur,()=>{G(!1),z(-1)})}},[xe,ae,ie,$,F,T,D,S,d,h,m,k,_,ct,kt,G]),Lt=f.useCallback((Pe={},Qe=null)=>({...Pe,ref:Qe,id:xe.output,htmlFor:ae.map((Xe,dt)=>xe.getThumb(dt)).join(" "),"aria-live":"off"}),[xe,ae]),Le=f.useCallback((Pe,Qe=null)=>{const{value:Xe,...dt}=Pe,zt=!(Xen),cr=Xe>=ae[0]&&Xe<=ae[ae.length-1];let pn=Zp(Xe,t,n);pn=A?100-pn:pn;const ln={position:"absolute",pointerEvents:"none",...$u({orientation:d,vertical:{bottom:`${pn}%`},horizontal:{left:`${pn}%`}})};return{...dt,ref:Qe,id:xe.getMarker(Pe.value),role:"presentation","aria-hidden":!0,"data-disabled":Zo(h),"data-invalid":Zo(!zt),"data-highlighted":Zo(cr),style:{...Pe.style,...ln}}},[h,A,n,t,d,ae,xe]),Ge=f.useCallback((Pe,Qe=null)=>{const{index:Xe,...dt}=Pe;return{...dt,ref:Qe,id:xe.getInput(Xe),type:"hidden",value:ae[Xe],name:Array.isArray(P)?P[Xe]:`${P}-${Xe}`}},[P,ae,xe]);return{state:{value:ae,isFocused:q,isDragging:F,getThumbPercent:Pe=>se[Pe],getThumbMinValue:Pe=>ie[Pe].min,getThumbMaxValue:Pe=>ie[Pe].max},actions:$e,getRootProps:Tt,getTrackProps:we,getInnerTrackProps:ht,getThumbProps:$t,getMarkerProps:Le,getInputProps:Ge,getOutputProps:Lt}}function tF(e,t,n,r){return e.map((o,s)=>{const i=s===0?t:e[s-1]+r,c=s===e.length-1?n:e[s+1]-r;return{min:i,max:c}})}var[nF,Dm]=Dn({name:"SliderContext",errorMessage:"useSliderContext: `context` is undefined. Seems you forgot to wrap all slider components within "}),[rF,Am]=Dn({name:"RangeSliderStylesContext",errorMessage:`useRangeSliderStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),K6=Ae(function(t,n){const r={orientation:"horizontal",...t},o=Hr("Slider",r),s=qn(r),{direction:i}=$c();s.direction=i;const{getRootProps:c,...d}=eF(s),p=f.useMemo(()=>({...d,name:r.name}),[d,r.name]);return a.jsx(nF,{value:p,children:a.jsx(rF,{value:o,children:a.jsx(je.div,{...c({},n),className:"chakra-slider",__css:o.container,children:r.children})})})});K6.displayName="RangeSlider";var l1=Ae(function(t,n){const{getThumbProps:r,getInputProps:o,name:s}=Dm(),i=Am(),c=r(t,n);return a.jsxs(je.div,{...c,className:ji("chakra-slider__thumb",t.className),__css:i.thumb,children:[c.children,s&&a.jsx("input",{...o({index:t.index})})]})});l1.displayName="RangeSliderThumb";var X6=Ae(function(t,n){const{getTrackProps:r}=Dm(),o=Am(),s=r(t,n);return a.jsx(je.div,{...s,className:ji("chakra-slider__track",t.className),__css:o.track,"data-testid":"chakra-range-slider-track"})});X6.displayName="RangeSliderTrack";var Y6=Ae(function(t,n){const{getInnerTrackProps:r}=Dm(),o=Am(),s=r(t,n);return a.jsx(je.div,{...s,className:"chakra-slider__filled-track",__css:o.filledTrack})});Y6.displayName="RangeSliderFilledTrack";var Np=Ae(function(t,n){const{getMarkerProps:r}=Dm(),o=Am(),s=r(t,n);return a.jsx(je.div,{...s,className:ji("chakra-slider__marker",t.className),__css:o.mark})});Np.displayName="RangeSliderMark";function oF(e){var t;const{min:n=0,max:r=100,onChange:o,value:s,defaultValue:i,isReversed:c,direction:d="ltr",orientation:p="horizontal",id:h,isDisabled:m,isReadOnly:v,onChangeStart:b,onChangeEnd:w,step:y=1,getAriaValueText:S,"aria-valuetext":k,"aria-label":_,"aria-labelledby":P,name:I,focusThumbOnChange:E=!0,...O}=e,R=or(b),M=or(w),D=or(S),A=H6({isReversed:c,direction:d,orientation:p}),[L,Q]=Bc({value:s,defaultValue:i??aF(n,r),onChange:o}),[F,V]=f.useState(!1),[q,G]=f.useState(!1),T=!(m||v),z=(r-n)/10,$=y||(r-n)/100,Y=ic(L,n,r),ae=r-Y+n,ie=Zp(A?ae:Y,n,r),X=p==="vertical",K=U6({min:n,max:r,step:y,isDisabled:m,value:Y,isInteractive:T,isReversed:A,isVertical:X,eventSource:null,focusThumbOnChange:E,orientation:p}),U=f.useRef(null),se=f.useRef(null),re=f.useRef(null),oe=f.useId(),pe=h??oe,[le,ge]=[`slider-thumb-${pe}`,`slider-track-${pe}`],ke=f.useCallback(Le=>{var Ge,Pn;if(!U.current)return;const Pe=K.current;Pe.eventSource="pointer";const Qe=U.current.getBoundingClientRect(),{clientX:Xe,clientY:dt}=(Pn=(Ge=Le.touches)==null?void 0:Ge[0])!=null?Pn:Le,zt=X?Qe.bottom-dt:Xe-Qe.left,cr=X?Qe.height:Qe.width;let pn=zt/cr;A&&(pn=1-pn);let ln=r3(pn,Pe.min,Pe.max);return Pe.step&&(ln=parseFloat(Kv(ln,Pe.min,Pe.step))),ln=ic(ln,Pe.min,Pe.max),ln},[X,A,K]),xe=f.useCallback(Le=>{const Ge=K.current;Ge.isInteractive&&(Le=parseFloat(Kv(Le,Ge.min,$)),Le=ic(Le,Ge.min,Ge.max),Q(Le))},[$,Q,K]),de=f.useMemo(()=>({stepUp(Le=$){const Ge=A?Y-Le:Y+Le;xe(Ge)},stepDown(Le=$){const Ge=A?Y+Le:Y-Le;xe(Ge)},reset(){xe(i||0)},stepTo(Le){xe(Le)}}),[xe,A,Y,$,i]),Te=f.useCallback(Le=>{const Ge=K.current,Pe={ArrowRight:()=>de.stepUp(),ArrowUp:()=>de.stepUp(),ArrowLeft:()=>de.stepDown(),ArrowDown:()=>de.stepDown(),PageUp:()=>de.stepUp(z),PageDown:()=>de.stepDown(z),Home:()=>xe(Ge.min),End:()=>xe(Ge.max)}[Le.key];Pe&&(Le.preventDefault(),Le.stopPropagation(),Pe(Le),Ge.eventSource="keyboard")},[de,xe,z,K]),Ee=(t=D==null?void 0:D(Y))!=null?t:k,$e=ZB(se),{getThumbStyle:kt,rootStyle:ct,trackStyle:on,innerTrackStyle:vt}=f.useMemo(()=>{const Le=K.current,Ge=$e??{width:0,height:0};return F6({isReversed:A,orientation:Le.orientation,thumbRects:[Ge],thumbPercents:[ie]})},[A,$e,ie,K]),bt=f.useCallback(()=>{K.current.focusThumbOnChange&&setTimeout(()=>{var Ge;return(Ge=se.current)==null?void 0:Ge.focus()})},[K]);Ga(()=>{const Le=K.current;bt(),Le.eventSource==="keyboard"&&(M==null||M(Le.value))},[Y,M]);function Se(Le){const Ge=ke(Le);Ge!=null&&Ge!==K.current.value&&Q(Ge)}G6(re,{onPanSessionStart(Le){const Ge=K.current;Ge.isInteractive&&(V(!0),bt(),Se(Le),R==null||R(Ge.value))},onPanSessionEnd(){const Le=K.current;Le.isInteractive&&(V(!1),M==null||M(Le.value))},onPan(Le){K.current.isInteractive&&Se(Le)}});const Me=f.useCallback((Le={},Ge=null)=>({...Le,...O,ref:cn(Ge,re),tabIndex:-1,"aria-disabled":dc(m),"data-focused":Zo(q),style:{...Le.style,...ct}}),[O,m,q,ct]),_t=f.useCallback((Le={},Ge=null)=>({...Le,ref:cn(Ge,U),id:ge,"data-disabled":Zo(m),style:{...Le.style,...on}}),[m,ge,on]),Tt=f.useCallback((Le={},Ge=null)=>({...Le,ref:Ge,style:{...Le.style,...vt}}),[vt]),we=f.useCallback((Le={},Ge=null)=>({...Le,ref:cn(Ge,se),role:"slider",tabIndex:T?0:void 0,id:le,"data-active":Zo(F),"aria-valuetext":Ee,"aria-valuemin":n,"aria-valuemax":r,"aria-valuenow":Y,"aria-orientation":p,"aria-disabled":dc(m),"aria-readonly":dc(v),"aria-label":_,"aria-labelledby":_?void 0:P,style:{...Le.style,...kt(0)},onKeyDown:fc(Le.onKeyDown,Te),onFocus:fc(Le.onFocus,()=>G(!0)),onBlur:fc(Le.onBlur,()=>G(!1))}),[T,le,F,Ee,n,r,Y,p,m,v,_,P,kt,Te]),ht=f.useCallback((Le,Ge=null)=>{const Pn=!(Le.valuer),Pe=Y>=Le.value,Qe=Zp(Le.value,n,r),Xe={position:"absolute",pointerEvents:"none",...sF({orientation:p,vertical:{bottom:A?`${100-Qe}%`:`${Qe}%`},horizontal:{left:A?`${100-Qe}%`:`${Qe}%`}})};return{...Le,ref:Ge,role:"presentation","aria-hidden":!0,"data-disabled":Zo(m),"data-invalid":Zo(!Pn),"data-highlighted":Zo(Pe),style:{...Le.style,...Xe}}},[m,A,r,n,p,Y]),$t=f.useCallback((Le={},Ge=null)=>({...Le,ref:Ge,type:"hidden",value:Y,name:I}),[I,Y]);return{state:{value:Y,isFocused:q,isDragging:F},actions:de,getRootProps:Me,getTrackProps:_t,getInnerTrackProps:Tt,getThumbProps:we,getMarkerProps:ht,getInputProps:$t}}function sF(e){const{orientation:t,vertical:n,horizontal:r}=e;return t==="vertical"?n:r}function aF(e,t){return t"}),[lF,Nm]=Dn({name:"SliderStylesContext",hookName:"useSliderStyles",providerName:""}),Q6=Ae((e,t)=>{var n;const r={...e,orientation:(n=e==null?void 0:e.orientation)!=null?n:"horizontal"},o=Hr("Slider",r),s=qn(r),{direction:i}=$c();s.direction=i;const{getInputProps:c,getRootProps:d,...p}=oF(s),h=d(),m=c({},t);return a.jsx(iF,{value:p,children:a.jsx(lF,{value:o,children:a.jsxs(je.div,{...h,className:ji("chakra-slider",r.className),__css:o.container,children:[r.children,a.jsx("input",{...m})]})})})});Q6.displayName="Slider";var J6=Ae((e,t)=>{const{getThumbProps:n}=Tm(),r=Nm(),o=n(e,t);return a.jsx(je.div,{...o,className:ji("chakra-slider__thumb",e.className),__css:r.thumb})});J6.displayName="SliderThumb";var Z6=Ae((e,t)=>{const{getTrackProps:n}=Tm(),r=Nm(),o=n(e,t);return a.jsx(je.div,{...o,className:ji("chakra-slider__track",e.className),__css:r.track})});Z6.displayName="SliderTrack";var eP=Ae((e,t)=>{const{getInnerTrackProps:n}=Tm(),r=Nm(),o=n(e,t);return a.jsx(je.div,{...o,className:ji("chakra-slider__filled-track",e.className),__css:r.filledTrack})});eP.displayName="SliderFilledTrack";var Kl=Ae((e,t)=>{const{getMarkerProps:n}=Tm(),r=Nm(),o=n(e,t);return a.jsx(je.div,{...o,className:ji("chakra-slider__marker",e.className),__css:r.mark})});Kl.displayName="SliderMark";var ny=Ae(function(t,n){const r=Hr("Switch",t),{spacing:o="0.5rem",children:s,...i}=qn(t),{getIndicatorProps:c,getInputProps:d,getCheckboxProps:p,getRootProps:h,getLabelProps:m}=t3(i),v=f.useMemo(()=>({display:"inline-block",position:"relative",verticalAlign:"middle",lineHeight:0,...r.container}),[r.container]),b=f.useMemo(()=>({display:"inline-flex",flexShrink:0,justifyContent:"flex-start",boxSizing:"content-box",cursor:"pointer",...r.track}),[r.track]),w=f.useMemo(()=>({userSelect:"none",marginStart:o,...r.label}),[o,r.label]);return a.jsxs(je.label,{...h(),className:Ct("chakra-switch",t.className),__css:v,children:[a.jsx("input",{className:"chakra-switch__input",...d({},n)}),a.jsx(je.span,{...p(),className:"chakra-switch__track",__css:b,children:a.jsx(je.span,{__css:r.thumb,className:"chakra-switch__thumb",...c()})}),s&&a.jsx(je.span,{className:"chakra-switch__label",...m(),__css:w,children:s})]})});ny.displayName="Switch";var[cF,uF,dF,fF]=gb();function pF(e){var t;const{defaultIndex:n,onChange:r,index:o,isManual:s,isLazy:i,lazyBehavior:c="unmount",orientation:d="horizontal",direction:p="ltr",...h}=e,[m,v]=f.useState(n??0),[b,w]=Bc({defaultValue:n??0,value:o,onChange:r});f.useEffect(()=>{o!=null&&v(o)},[o]);const y=dF(),S=f.useId();return{id:`tabs-${(t=e.id)!=null?t:S}`,selectedIndex:b,focusedIndex:m,setSelectedIndex:w,setFocusedIndex:v,isManual:s,isLazy:i,lazyBehavior:c,orientation:d,descendants:y,direction:p,htmlProps:h}}var[hF,$m]=Dn({name:"TabsContext",errorMessage:"useTabsContext: `context` is undefined. Seems you forgot to wrap all tabs components within "});function mF(e){const{focusedIndex:t,orientation:n,direction:r}=$m(),o=uF(),s=f.useCallback(i=>{const c=()=>{var _;const P=o.nextEnabled(t);P&&((_=P.node)==null||_.focus())},d=()=>{var _;const P=o.prevEnabled(t);P&&((_=P.node)==null||_.focus())},p=()=>{var _;const P=o.firstEnabled();P&&((_=P.node)==null||_.focus())},h=()=>{var _;const P=o.lastEnabled();P&&((_=P.node)==null||_.focus())},m=n==="horizontal",v=n==="vertical",b=i.key,w=r==="ltr"?"ArrowLeft":"ArrowRight",y=r==="ltr"?"ArrowRight":"ArrowLeft",k={[w]:()=>m&&d(),[y]:()=>m&&c(),ArrowDown:()=>v&&c(),ArrowUp:()=>v&&d(),Home:p,End:h}[b];k&&(i.preventDefault(),k(i))},[o,t,n,r]);return{...e,role:"tablist","aria-orientation":n,onKeyDown:et(e.onKeyDown,s)}}function gF(e){const{isDisabled:t=!1,isFocusable:n=!1,...r}=e,{setSelectedIndex:o,isManual:s,id:i,setFocusedIndex:c,selectedIndex:d}=$m(),{index:p,register:h}=fF({disabled:t&&!n}),m=p===d,v=()=>{o(p)},b=()=>{c(p),!s&&!(t&&n)&&o(p)},w=s6({...r,ref:cn(h,e.ref),isDisabled:t,isFocusable:n,onClick:et(e.onClick,v)}),y="button";return{...w,id:tP(i,p),role:"tab",tabIndex:m?0:-1,type:y,"aria-selected":m,"aria-controls":nP(i,p),onFocus:t?void 0:et(e.onFocus,b)}}var[vF,bF]=Dn({});function yF(e){const t=$m(),{id:n,selectedIndex:r}=t,s=Od(e.children).map((i,c)=>f.createElement(vF,{key:c,value:{isSelected:c===r,id:nP(n,c),tabId:tP(n,c),selectedIndex:r}},i));return{...e,children:s}}function xF(e){const{children:t,...n}=e,{isLazy:r,lazyBehavior:o}=$m(),{isSelected:s,id:i,tabId:c}=bF(),d=f.useRef(!1);s&&(d.current=!0);const p=Kb({wasSelected:d.current,isSelected:s,enabled:r,mode:o});return{tabIndex:0,...n,children:p?t:null,role:"tabpanel","aria-labelledby":c,hidden:!s,id:i}}function tP(e,t){return`${e}--tab-${t}`}function nP(e,t){return`${e}--tabpanel-${t}`}var[wF,Lm]=Dn({name:"TabsStylesContext",errorMessage:`useTabsStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),Hd=Ae(function(t,n){const r=Hr("Tabs",t),{children:o,className:s,...i}=qn(t),{htmlProps:c,descendants:d,...p}=pF(i),h=f.useMemo(()=>p,[p]),{isFitted:m,...v}=c;return a.jsx(cF,{value:d,children:a.jsx(hF,{value:h,children:a.jsx(wF,{value:r,children:a.jsx(je.div,{className:Ct("chakra-tabs",s),ref:n,...v,__css:r.root,children:o})})})})});Hd.displayName="Tabs";var Wd=Ae(function(t,n){const r=mF({...t,ref:n}),s={display:"flex",...Lm().tablist};return a.jsx(je.div,{...r,className:Ct("chakra-tabs__tablist",t.className),__css:s})});Wd.displayName="TabList";var zm=Ae(function(t,n){const r=xF({...t,ref:n}),o=Lm();return a.jsx(je.div,{outline:"0",...r,className:Ct("chakra-tabs__tab-panel",t.className),__css:o.tabpanel})});zm.displayName="TabPanel";var Bm=Ae(function(t,n){const r=yF(t),o=Lm();return a.jsx(je.div,{...r,width:"100%",ref:n,className:Ct("chakra-tabs__tab-panels",t.className),__css:o.tabpanels})});Bm.displayName="TabPanels";var _c=Ae(function(t,n){const r=Lm(),o=gF({...t,ref:n}),s={outline:"0",display:"flex",alignItems:"center",justifyContent:"center",...r.tab};return a.jsx(je.button,{...o,className:Ct("chakra-tabs__tab",t.className),__css:s})});_c.displayName="Tab";function SF(e,t=[]){const n=Object.assign({},e);for(const r of t)r in n&&delete n[r];return n}var CF=["h","minH","height","minHeight"],ry=Ae((e,t)=>{const n=fa("Textarea",e),{className:r,rows:o,...s}=qn(e),i=yb(s),c=o?SF(n,CF):n;return a.jsx(je.textarea,{ref:t,rows:o,...i,className:Ct("chakra-textarea",r),__css:c})});ry.displayName="Textarea";var kF={exit:{scale:.85,opacity:0,transition:{opacity:{duration:.15,easings:"easeInOut"},scale:{duration:.2,easings:"easeInOut"}}},enter:{scale:1,opacity:1,transition:{opacity:{easings:"easeOut",duration:.2},scale:{duration:.2,ease:[.175,.885,.4,1.1]}}}},c1=e=>{var t;return((t=e.current)==null?void 0:t.ownerDocument)||document},$p=e=>{var t,n;return((n=(t=e.current)==null?void 0:t.ownerDocument)==null?void 0:n.defaultView)||window};function _F(e={}){const{openDelay:t=0,closeDelay:n=0,closeOnClick:r=!0,closeOnMouseDown:o,closeOnScroll:s,closeOnPointerDown:i=o,closeOnEsc:c=!0,onOpen:d,onClose:p,placement:h,id:m,isOpen:v,defaultIsOpen:b,arrowSize:w=10,arrowShadowColor:y,arrowPadding:S,modifiers:k,isDisabled:_,gutter:P,offset:I,direction:E,...O}=e,{isOpen:R,onOpen:M,onClose:D}=qb({isOpen:v,defaultIsOpen:b,onOpen:d,onClose:p}),{referenceRef:A,getPopperProps:L,getArrowInnerProps:Q,getArrowProps:F}=Gb({enabled:R,placement:h,arrowPadding:S,modifiers:k,gutter:P,offset:I,direction:E}),V=f.useId(),G=`tooltip-${m??V}`,T=f.useRef(null),z=f.useRef(),$=f.useCallback(()=>{z.current&&(clearTimeout(z.current),z.current=void 0)},[]),Y=f.useRef(),ae=f.useCallback(()=>{Y.current&&(clearTimeout(Y.current),Y.current=void 0)},[]),fe=f.useCallback(()=>{ae(),D()},[D,ae]),ie=PF(T,fe),X=f.useCallback(()=>{if(!_&&!z.current){R&&ie();const ge=$p(T);z.current=ge.setTimeout(M,t)}},[ie,_,R,M,t]),K=f.useCallback(()=>{$();const ge=$p(T);Y.current=ge.setTimeout(fe,n)},[n,fe,$]),U=f.useCallback(()=>{R&&r&&K()},[r,K,R]),se=f.useCallback(()=>{R&&i&&K()},[i,K,R]),re=f.useCallback(ge=>{R&&ge.key==="Escape"&&K()},[R,K]);Yi(()=>c1(T),"keydown",c?re:void 0),Yi(()=>{const ge=T.current;if(!ge)return null;const ke=q3(ge);return ke.localName==="body"?$p(T):ke},"scroll",()=>{R&&s&&fe()},{passive:!0,capture:!0}),f.useEffect(()=>{_&&($(),R&&D())},[_,R,D,$]),f.useEffect(()=>()=>{$(),ae()},[$,ae]),Yi(()=>T.current,"pointerleave",K);const oe=f.useCallback((ge={},ke=null)=>({...ge,ref:cn(T,ke,A),onPointerEnter:et(ge.onPointerEnter,de=>{de.pointerType!=="touch"&&X()}),onClick:et(ge.onClick,U),onPointerDown:et(ge.onPointerDown,se),onFocus:et(ge.onFocus,X),onBlur:et(ge.onBlur,K),"aria-describedby":R?G:void 0}),[X,K,se,R,G,U,A]),pe=f.useCallback((ge={},ke=null)=>L({...ge,style:{...ge.style,[Ir.arrowSize.var]:w?`${w}px`:void 0,[Ir.arrowShadowColor.var]:y}},ke),[L,w,y]),le=f.useCallback((ge={},ke=null)=>{const xe={...ge.style,position:"relative",transformOrigin:Ir.transformOrigin.varRef};return{ref:ke,...O,...ge,id:G,role:"tooltip",style:xe}},[O,G]);return{isOpen:R,show:X,hide:K,getTriggerProps:oe,getTooltipProps:le,getTooltipPositionerProps:pe,getArrowProps:F,getArrowInnerProps:Q}}var V0="chakra-ui:close-tooltip";function PF(e,t){return f.useEffect(()=>{const n=c1(e);return n.addEventListener(V0,t),()=>n.removeEventListener(V0,t)},[t,e]),()=>{const n=c1(e),r=$p(e);n.dispatchEvent(new r.CustomEvent(V0))}}function jF(e,t=[]){const n=Object.assign({},e);for(const r of t)r in n&&delete n[r];return n}function IF(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}var EF=je(Er.div),vn=Ae((e,t)=>{var n,r;const o=fa("Tooltip",e),s=qn(e),i=$c(),{children:c,label:d,shouldWrapChildren:p,"aria-label":h,hasArrow:m,bg:v,portalProps:b,background:w,backgroundColor:y,bgColor:S,motionProps:k,..._}=s,P=(r=(n=w??y)!=null?n:v)!=null?r:S;if(P){o.bg=P;const L=BR(i,"colors",P);o[Ir.arrowBg.var]=L}const I=_F({..._,direction:i.direction}),E=typeof c=="string"||p;let O;if(E)O=a.jsx(je.span,{display:"inline-block",tabIndex:0,...I.getTriggerProps(),children:c});else{const L=f.Children.only(c);O=f.cloneElement(L,I.getTriggerProps(L.props,L.ref))}const R=!!h,M=I.getTooltipProps({},t),D=R?jF(M,["role","id"]):M,A=IF(M,["role","id"]);return d?a.jsxs(a.Fragment,{children:[O,a.jsx(mo,{children:I.isOpen&&a.jsx(rd,{...b,children:a.jsx(je.div,{...I.getTooltipPositionerProps(),__css:{zIndex:o.zIndex,pointerEvents:"none"},children:a.jsxs(EF,{variants:kF,initial:"exit",animate:"enter",exit:"exit",...k,...D,__css:o,children:[d,R&&a.jsx(je.span,{srOnly:!0,...A,children:h}),m&&a.jsx(je.div,{"data-popper-arrow":!0,className:"chakra-tooltip__arrow-wrapper",children:a.jsx(je.div,{"data-popper-arrow-inner":!0,className:"chakra-tooltip__arrow",__css:{bg:o.bg}})})]})})})})]}):a.jsx(a.Fragment,{children:c})});vn.displayName="Tooltip";function OF(e,t={}){let n=f.useCallback(o=>t.keys?T9(e,t.keys,o):e.listen(o),[t.keys,e]),r=e.get.bind(e);return f.useSyncExternalStore(n,r,r)}const vo=e=>e.system,RF=e=>e.system.toastQueue,rP=be(vo,e=>e.language,Ke),kr=be(e=>e,e=>e.system.isProcessing||!e.system.isConnected),MF=be(vo,e=>{const{consoleLogLevel:t,shouldLogToConsole:n}=e;return{consoleLogLevel:t,shouldLogToConsole:n}},{memoizeOptions:{resultEqualityCheck:Zt}}),DF=()=>{const{consoleLogLevel:e,shouldLogToConsole:t}=B(MF);return f.useEffect(()=>{t?(localStorage.setItem("ROARR_LOG","true"),localStorage.setItem("ROARR_FILTER",`context.logLevel:>=${FR[e]}`)):localStorage.setItem("ROARR_LOG","false"),Y2.ROARR.write=HR.createLogWriter()},[e,t]),f.useEffect(()=>{const r={...WR};Q2.set(Y2.Roarr.child(r))},[]),OF(Q2)},AF=()=>{const e=te(),t=B(RF),n=pA();return f.useEffect(()=>{t.forEach(r=>{n(r)}),t.length>0&&e(VR())},[e,n,t]),null},Uc=()=>{const e=te();return f.useCallback(n=>e(On(Mn(n))),[e])};var TF=new Map([["aac","audio/aac"],["abw","application/x-abiword"],["arc","application/x-freearc"],["avif","image/avif"],["avi","video/x-msvideo"],["azw","application/vnd.amazon.ebook"],["bin","application/octet-stream"],["bmp","image/bmp"],["bz","application/x-bzip"],["bz2","application/x-bzip2"],["cda","application/x-cdf"],["csh","application/x-csh"],["css","text/css"],["csv","text/csv"],["doc","application/msword"],["docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"],["eot","application/vnd.ms-fontobject"],["epub","application/epub+zip"],["gz","application/gzip"],["gif","image/gif"],["heic","image/heic"],["heif","image/heif"],["htm","text/html"],["html","text/html"],["ico","image/vnd.microsoft.icon"],["ics","text/calendar"],["jar","application/java-archive"],["jpeg","image/jpeg"],["jpg","image/jpeg"],["js","text/javascript"],["json","application/json"],["jsonld","application/ld+json"],["mid","audio/midi"],["midi","audio/midi"],["mjs","text/javascript"],["mp3","audio/mpeg"],["mp4","video/mp4"],["mpeg","video/mpeg"],["mpkg","application/vnd.apple.installer+xml"],["odp","application/vnd.oasis.opendocument.presentation"],["ods","application/vnd.oasis.opendocument.spreadsheet"],["odt","application/vnd.oasis.opendocument.text"],["oga","audio/ogg"],["ogv","video/ogg"],["ogx","application/ogg"],["opus","audio/opus"],["otf","font/otf"],["png","image/png"],["pdf","application/pdf"],["php","application/x-httpd-php"],["ppt","application/vnd.ms-powerpoint"],["pptx","application/vnd.openxmlformats-officedocument.presentationml.presentation"],["rar","application/vnd.rar"],["rtf","application/rtf"],["sh","application/x-sh"],["svg","image/svg+xml"],["swf","application/x-shockwave-flash"],["tar","application/x-tar"],["tif","image/tiff"],["tiff","image/tiff"],["ts","video/mp2t"],["ttf","font/ttf"],["txt","text/plain"],["vsd","application/vnd.visio"],["wav","audio/wav"],["weba","audio/webm"],["webm","video/webm"],["webp","image/webp"],["woff","font/woff"],["woff2","font/woff2"],["xhtml","application/xhtml+xml"],["xls","application/vnd.ms-excel"],["xlsx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"],["xml","application/xml"],["xul","application/vnd.mozilla.xul+xml"],["zip","application/zip"],["7z","application/x-7z-compressed"],["mkv","video/x-matroska"],["mov","video/quicktime"],["msg","application/vnd.ms-outlook"]]);function Vd(e,t){var n=NF(e);if(typeof n.path!="string"){var r=e.webkitRelativePath;Object.defineProperty(n,"path",{value:typeof t=="string"?t:typeof r=="string"&&r.length>0?r:e.name,writable:!1,configurable:!1,enumerable:!0})}return n}function NF(e){var t=e.name,n=t&&t.lastIndexOf(".")!==-1;if(n&&!e.type){var r=t.split(".").pop().toLowerCase(),o=TF.get(r);o&&Object.defineProperty(e,"type",{value:o,writable:!1,configurable:!1,enumerable:!0})}return e}var $F=[".DS_Store","Thumbs.db"];function LF(e){return Fc(this,void 0,void 0,function(){return Hc(this,function(t){return ih(e)&&zF(e.dataTransfer)?[2,WF(e.dataTransfer,e.type)]:BF(e)?[2,FF(e)]:Array.isArray(e)&&e.every(function(n){return"getFile"in n&&typeof n.getFile=="function"})?[2,HF(e)]:[2,[]]})})}function zF(e){return ih(e)}function BF(e){return ih(e)&&ih(e.target)}function ih(e){return typeof e=="object"&&e!==null}function FF(e){return u1(e.target.files).map(function(t){return Vd(t)})}function HF(e){return Fc(this,void 0,void 0,function(){var t;return Hc(this,function(n){switch(n.label){case 0:return[4,Promise.all(e.map(function(r){return r.getFile()}))];case 1:return t=n.sent(),[2,t.map(function(r){return Vd(r)})]}})})}function WF(e,t){return Fc(this,void 0,void 0,function(){var n,r;return Hc(this,function(o){switch(o.label){case 0:return e.items?(n=u1(e.items).filter(function(s){return s.kind==="file"}),t!=="drop"?[2,n]:[4,Promise.all(n.map(VF))]):[3,2];case 1:return r=o.sent(),[2,xS(oP(r))];case 2:return[2,xS(u1(e.files).map(function(s){return Vd(s)}))]}})})}function xS(e){return e.filter(function(t){return $F.indexOf(t.name)===-1})}function u1(e){if(e===null)return[];for(var t=[],n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);nn)return[!1,_S(n)];if(e.sizen)return[!1,_S(n)]}return[!0,null]}function Vi(e){return e!=null}function aH(e){var t=e.files,n=e.accept,r=e.minSize,o=e.maxSize,s=e.multiple,i=e.maxFiles,c=e.validator;return!s&&t.length>1||s&&i>=1&&t.length>i?!1:t.every(function(d){var p=lP(d,n),h=pd(p,1),m=h[0],v=cP(d,r,o),b=pd(v,1),w=b[0],y=c?c(d):null;return m&&w&&!y})}function lh(e){return typeof e.isPropagationStopped=="function"?e.isPropagationStopped():typeof e.cancelBubble<"u"?e.cancelBubble:!1}function Yf(e){return e.dataTransfer?Array.prototype.some.call(e.dataTransfer.types,function(t){return t==="Files"||t==="application/x-moz-file"}):!!e.target&&!!e.target.files}function jS(e){e.preventDefault()}function iH(e){return e.indexOf("MSIE")!==-1||e.indexOf("Trident/")!==-1}function lH(e){return e.indexOf("Edge/")!==-1}function cH(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:window.navigator.userAgent;return iH(e)||lH(e)}function Gs(){for(var e=arguments.length,t=new Array(e),n=0;n1?o-1:0),i=1;ie.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function PH(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,s;for(s=0;s=0)&&(n[o]=e[o]);return n}var oy=f.forwardRef(function(e,t){var n=e.children,r=ch(e,mH),o=sy(r),s=o.open,i=ch(o,gH);return f.useImperativeHandle(t,function(){return{open:s}},[s]),W.createElement(f.Fragment,null,n(fr(fr({},i),{},{open:s})))});oy.displayName="Dropzone";var pP={disabled:!1,getFilesFromEvent:LF,maxSize:1/0,minSize:0,multiple:!0,maxFiles:0,preventDropOnDocument:!0,noClick:!1,noKeyboard:!1,noDrag:!1,noDragEventsBubbling:!1,validator:null,useFsAccessApi:!0,autoFocus:!1};oy.defaultProps=pP;oy.propTypes={children:zn.func,accept:zn.objectOf(zn.arrayOf(zn.string)),multiple:zn.bool,preventDropOnDocument:zn.bool,noClick:zn.bool,noKeyboard:zn.bool,noDrag:zn.bool,noDragEventsBubbling:zn.bool,minSize:zn.number,maxSize:zn.number,maxFiles:zn.number,disabled:zn.bool,getFilesFromEvent:zn.func,onFileDialogCancel:zn.func,onFileDialogOpen:zn.func,useFsAccessApi:zn.bool,autoFocus:zn.bool,onDragEnter:zn.func,onDragLeave:zn.func,onDragOver:zn.func,onDrop:zn.func,onDropAccepted:zn.func,onDropRejected:zn.func,onError:zn.func,validator:zn.func};var h1={isFocused:!1,isFileDialogActive:!1,isDragActive:!1,isDragAccept:!1,isDragReject:!1,acceptedFiles:[],fileRejections:[]};function sy(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=fr(fr({},pP),e),n=t.accept,r=t.disabled,o=t.getFilesFromEvent,s=t.maxSize,i=t.minSize,c=t.multiple,d=t.maxFiles,p=t.onDragEnter,h=t.onDragLeave,m=t.onDragOver,v=t.onDrop,b=t.onDropAccepted,w=t.onDropRejected,y=t.onFileDialogCancel,S=t.onFileDialogOpen,k=t.useFsAccessApi,_=t.autoFocus,P=t.preventDropOnDocument,I=t.noClick,E=t.noKeyboard,O=t.noDrag,R=t.noDragEventsBubbling,M=t.onError,D=t.validator,A=f.useMemo(function(){return fH(n)},[n]),L=f.useMemo(function(){return dH(n)},[n]),Q=f.useMemo(function(){return typeof S=="function"?S:ES},[S]),F=f.useMemo(function(){return typeof y=="function"?y:ES},[y]),V=f.useRef(null),q=f.useRef(null),G=f.useReducer(jH,h1),T=U0(G,2),z=T[0],$=T[1],Y=z.isFocused,ae=z.isFileDialogActive,fe=f.useRef(typeof window<"u"&&window.isSecureContext&&k&&uH()),ie=function(){!fe.current&&ae&&setTimeout(function(){if(q.current){var Me=q.current.files;Me.length||($({type:"closeDialog"}),F())}},300)};f.useEffect(function(){return window.addEventListener("focus",ie,!1),function(){window.removeEventListener("focus",ie,!1)}},[q,ae,F,fe]);var X=f.useRef([]),K=function(Me){V.current&&V.current.contains(Me.target)||(Me.preventDefault(),X.current=[])};f.useEffect(function(){return P&&(document.addEventListener("dragover",jS,!1),document.addEventListener("drop",K,!1)),function(){P&&(document.removeEventListener("dragover",jS),document.removeEventListener("drop",K))}},[V,P]),f.useEffect(function(){return!r&&_&&V.current&&V.current.focus(),function(){}},[V,_,r]);var U=f.useCallback(function(Se){M?M(Se):console.error(Se)},[M]),se=f.useCallback(function(Se){Se.preventDefault(),Se.persist(),ct(Se),X.current=[].concat(yH(X.current),[Se.target]),Yf(Se)&&Promise.resolve(o(Se)).then(function(Me){if(!(lh(Se)&&!R)){var _t=Me.length,Tt=_t>0&&aH({files:Me,accept:A,minSize:i,maxSize:s,multiple:c,maxFiles:d,validator:D}),we=_t>0&&!Tt;$({isDragAccept:Tt,isDragReject:we,isDragActive:!0,type:"setDraggedFiles"}),p&&p(Se)}}).catch(function(Me){return U(Me)})},[o,p,U,R,A,i,s,c,d,D]),re=f.useCallback(function(Se){Se.preventDefault(),Se.persist(),ct(Se);var Me=Yf(Se);if(Me&&Se.dataTransfer)try{Se.dataTransfer.dropEffect="copy"}catch{}return Me&&m&&m(Se),!1},[m,R]),oe=f.useCallback(function(Se){Se.preventDefault(),Se.persist(),ct(Se);var Me=X.current.filter(function(Tt){return V.current&&V.current.contains(Tt)}),_t=Me.indexOf(Se.target);_t!==-1&&Me.splice(_t,1),X.current=Me,!(Me.length>0)&&($({type:"setDraggedFiles",isDragActive:!1,isDragAccept:!1,isDragReject:!1}),Yf(Se)&&h&&h(Se))},[V,h,R]),pe=f.useCallback(function(Se,Me){var _t=[],Tt=[];Se.forEach(function(we){var ht=lP(we,A),$t=U0(ht,2),Lt=$t[0],Le=$t[1],Ge=cP(we,i,s),Pn=U0(Ge,2),Pe=Pn[0],Qe=Pn[1],Xe=D?D(we):null;if(Lt&&Pe&&!Xe)_t.push(we);else{var dt=[Le,Qe];Xe&&(dt=dt.concat(Xe)),Tt.push({file:we,errors:dt.filter(function(zt){return zt})})}}),(!c&&_t.length>1||c&&d>=1&&_t.length>d)&&(_t.forEach(function(we){Tt.push({file:we,errors:[sH]})}),_t.splice(0)),$({acceptedFiles:_t,fileRejections:Tt,type:"setFiles"}),v&&v(_t,Tt,Me),Tt.length>0&&w&&w(Tt,Me),_t.length>0&&b&&b(_t,Me)},[$,c,A,i,s,d,v,b,w,D]),le=f.useCallback(function(Se){Se.preventDefault(),Se.persist(),ct(Se),X.current=[],Yf(Se)&&Promise.resolve(o(Se)).then(function(Me){lh(Se)&&!R||pe(Me,Se)}).catch(function(Me){return U(Me)}),$({type:"reset"})},[o,pe,U,R]),ge=f.useCallback(function(){if(fe.current){$({type:"openDialog"}),Q();var Se={multiple:c,types:L};window.showOpenFilePicker(Se).then(function(Me){return o(Me)}).then(function(Me){pe(Me,null),$({type:"closeDialog"})}).catch(function(Me){pH(Me)?(F(Me),$({type:"closeDialog"})):hH(Me)?(fe.current=!1,q.current?(q.current.value=null,q.current.click()):U(new Error("Cannot open the file picker because the https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API is not supported and no was provided."))):U(Me)});return}q.current&&($({type:"openDialog"}),Q(),q.current.value=null,q.current.click())},[$,Q,F,k,pe,U,L,c]),ke=f.useCallback(function(Se){!V.current||!V.current.isEqualNode(Se.target)||(Se.key===" "||Se.key==="Enter"||Se.keyCode===32||Se.keyCode===13)&&(Se.preventDefault(),ge())},[V,ge]),xe=f.useCallback(function(){$({type:"focus"})},[]),de=f.useCallback(function(){$({type:"blur"})},[]),Te=f.useCallback(function(){I||(cH()?setTimeout(ge,0):ge())},[I,ge]),Ee=function(Me){return r?null:Me},$e=function(Me){return E?null:Ee(Me)},kt=function(Me){return O?null:Ee(Me)},ct=function(Me){R&&Me.stopPropagation()},on=f.useMemo(function(){return function(){var Se=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},Me=Se.refKey,_t=Me===void 0?"ref":Me,Tt=Se.role,we=Se.onKeyDown,ht=Se.onFocus,$t=Se.onBlur,Lt=Se.onClick,Le=Se.onDragEnter,Ge=Se.onDragOver,Pn=Se.onDragLeave,Pe=Se.onDrop,Qe=ch(Se,vH);return fr(fr(p1({onKeyDown:$e(Gs(we,ke)),onFocus:$e(Gs(ht,xe)),onBlur:$e(Gs($t,de)),onClick:Ee(Gs(Lt,Te)),onDragEnter:kt(Gs(Le,se)),onDragOver:kt(Gs(Ge,re)),onDragLeave:kt(Gs(Pn,oe)),onDrop:kt(Gs(Pe,le)),role:typeof Tt=="string"&&Tt!==""?Tt:"presentation"},_t,V),!r&&!E?{tabIndex:0}:{}),Qe)}},[V,ke,xe,de,Te,se,re,oe,le,E,O,r]),vt=f.useCallback(function(Se){Se.stopPropagation()},[]),bt=f.useMemo(function(){return function(){var Se=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},Me=Se.refKey,_t=Me===void 0?"ref":Me,Tt=Se.onChange,we=Se.onClick,ht=ch(Se,bH),$t=p1({accept:A,multiple:c,type:"file",style:{display:"none"},onChange:Ee(Gs(Tt,le)),onClick:Ee(Gs(we,vt)),tabIndex:-1},_t,q);return fr(fr({},$t),ht)}},[q,n,c,le,r]);return fr(fr({},z),{},{isFocused:Y&&!r,getRootProps:on,getInputProps:bt,rootRef:V,inputRef:q,open:Ee(ge)})}function jH(e,t){switch(t.type){case"focus":return fr(fr({},e),{},{isFocused:!0});case"blur":return fr(fr({},e),{},{isFocused:!1});case"openDialog":return fr(fr({},h1),{},{isFileDialogActive:!0});case"closeDialog":return fr(fr({},e),{},{isFileDialogActive:!1});case"setDraggedFiles":return fr(fr({},e),{},{isDragActive:t.isDragActive,isDragAccept:t.isDragAccept,isDragReject:t.isDragReject});case"setFiles":return fr(fr({},e),{},{acceptedFiles:t.acceptedFiles,fileRejections:t.fileRejections});case"reset":return fr({},h1);default:return e}}function ES(){}function m1(){return m1=Object.assign?Object.assign.bind():function(e){for(var t=1;t'),!0):t?e.some(function(n){return t.includes(n)})||e.includes("*"):!0}var AH=function(t,n,r){r===void 0&&(r=!1);var o=n.alt,s=n.meta,i=n.mod,c=n.shift,d=n.ctrl,p=n.keys,h=t.key,m=t.code,v=t.ctrlKey,b=t.metaKey,w=t.shiftKey,y=t.altKey,S=hi(m),k=h.toLowerCase();if(!r){if(o===!y&&k!=="alt"||c===!w&&k!=="shift")return!1;if(i){if(!b&&!v)return!1}else if(s===!b&&k!=="meta"&&k!=="os"||d===!v&&k!=="ctrl"&&k!=="control")return!1}return p&&p.length===1&&(p.includes(k)||p.includes(S))?!0:p?mP(p):!p},TH=f.createContext(void 0),NH=function(){return f.useContext(TH)};function yP(e,t){return e&&t&&typeof e=="object"&&typeof t=="object"?Object.keys(e).length===Object.keys(t).length&&Object.keys(e).reduce(function(n,r){return n&&yP(e[r],t[r])},!0):e===t}var $H=f.createContext({hotkeys:[],enabledScopes:[],toggleScope:function(){},enableScope:function(){},disableScope:function(){}}),LH=function(){return f.useContext($H)};function zH(e){var t=f.useRef(void 0);return yP(t.current,e)||(t.current=e),t.current}var OS=function(t){t.stopPropagation(),t.preventDefault(),t.stopImmediatePropagation()},BH=typeof window<"u"?f.useLayoutEffect:f.useEffect;function tt(e,t,n,r){var o=f.useRef(null),s=f.useRef(!1),i=n instanceof Array?r instanceof Array?void 0:r:n,c=e instanceof Array?e.join(i==null?void 0:i.splitKey):e,d=n instanceof Array?n:r instanceof Array?r:void 0,p=f.useCallback(t,d??[]),h=f.useRef(p);d?h.current=p:h.current=t;var m=zH(i),v=LH(),b=v.enabledScopes,w=NH();return BH(function(){if(!((m==null?void 0:m.enabled)===!1||!DH(b,m==null?void 0:m.scopes))){var y=function(I,E){var O;if(E===void 0&&(E=!1),!(MH(I)&&!bP(I,m==null?void 0:m.enableOnFormTags))&&!(m!=null&&m.ignoreEventWhen!=null&&m.ignoreEventWhen(I))){if(o.current!==null&&document.activeElement!==o.current&&!o.current.contains(document.activeElement)){OS(I);return}(O=I.target)!=null&&O.isContentEditable&&!(m!=null&&m.enableOnContentEditable)||G0(c,m==null?void 0:m.splitKey).forEach(function(R){var M,D=q0(R,m==null?void 0:m.combinationKey);if(AH(I,D,m==null?void 0:m.ignoreModifiers)||(M=D.keys)!=null&&M.includes("*")){if(E&&s.current)return;if(OH(I,D,m==null?void 0:m.preventDefault),!RH(I,D,m==null?void 0:m.enabled)){OS(I);return}h.current(I,D),E||(s.current=!0)}})}},S=function(I){I.key!==void 0&&(gP(hi(I.code)),((m==null?void 0:m.keydown)===void 0&&(m==null?void 0:m.keyup)!==!0||m!=null&&m.keydown)&&y(I))},k=function(I){I.key!==void 0&&(vP(hi(I.code)),s.current=!1,m!=null&&m.keyup&&y(I,!0))},_=o.current||(i==null?void 0:i.document)||document;return _.addEventListener("keyup",k),_.addEventListener("keydown",S),w&&G0(c,m==null?void 0:m.splitKey).forEach(function(P){return w.addHotkey(q0(P,m==null?void 0:m.combinationKey,m==null?void 0:m.description))}),function(){_.removeEventListener("keyup",k),_.removeEventListener("keydown",S),w&&G0(c,m==null?void 0:m.splitKey).forEach(function(P){return w.removeHotkey(q0(P,m==null?void 0:m.combinationKey,m==null?void 0:m.description))})}}},[c,m,b]),o}const FH=e=>{const{isDragAccept:t,isDragReject:n,setIsHandlingUpload:r}=e;return tt("esc",()=>{r(!1)}),a.jsxs(Oe,{sx:{position:"absolute",top:0,insetInlineStart:0,width:"100vw",height:"100vh",zIndex:999,backdropFilter:"blur(20px)"},children:[a.jsx(H,{sx:{position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full",bg:"base.700",_dark:{bg:"base.900"},opacity:.7,alignItems:"center",justifyContent:"center",transitionProperty:"common",transitionDuration:"0.1s"}}),a.jsx(H,{sx:{position:"absolute",top:0,insetInlineStart:0,width:"full",height:"full",alignItems:"center",justifyContent:"center",p:4},children:a.jsx(H,{sx:{width:"full",height:"full",alignItems:"center",justifyContent:"center",flexDir:"column",gap:4,borderWidth:3,borderRadius:"xl",borderStyle:"dashed",color:"base.100",borderColor:"base.100",_dark:{borderColor:"base.200"}},children:t?a.jsx(Ys,{size:"lg",children:"Drop to Upload"}):a.jsxs(a.Fragment,{children:[a.jsx(Ys,{size:"lg",children:"Invalid Upload"}),a.jsx(Ys,{size:"md",children:"Must be single JPEG or PNG image"})]})})})]})},HH=be([at,Kn],({gallery:e},t)=>{let n={type:"TOAST"};t==="unifiedCanvas"&&(n={type:"SET_CANVAS_INITIAL_IMAGE"}),t==="img2img"&&(n={type:"SET_INITIAL_IMAGE"});const{autoAddBoardId:r}=e;return{autoAddBoardId:r,postUploadAction:n}},Ke),WH=e=>{const{children:t}=e,{autoAddBoardId:n,postUploadAction:r}=B(HH),o=B(kr),s=Uc(),{t:i}=ye(),[c,d]=f.useState(!1),[p]=$_(),h=f.useCallback(P=>{d(!0),s({title:i("toast.uploadFailed"),description:P.errors.map(I=>I.message).join(` +`),status:"error"})},[i,s]),m=f.useCallback(async P=>{p({file:P,image_category:"user",is_intermediate:!1,postUploadAction:r,board_id:n==="none"?void 0:n})},[n,r,p]),v=f.useCallback((P,I)=>{if(I.length>1){s({title:i("toast.uploadFailed"),description:i("toast.uploadFailedInvalidUploadDesc"),status:"error"});return}I.forEach(E=>{h(E)}),P.forEach(E=>{m(E)})},[i,s,m,h]),{getRootProps:b,getInputProps:w,isDragAccept:y,isDragReject:S,isDragActive:k,inputRef:_}=sy({accept:{"image/png":[".png"],"image/jpeg":[".jpg",".jpeg",".png"]},noClick:!0,onDrop:v,onDragOver:()=>d(!0),disabled:o,multiple:!1});return f.useEffect(()=>{const P=async I=>{var E,O;_.current&&(E=I.clipboardData)!=null&&E.files&&(_.current.files=I.clipboardData.files,(O=_.current)==null||O.dispatchEvent(new Event("change",{bubbles:!0})))};return document.addEventListener("paste",P),()=>{document.removeEventListener("paste",P)}},[_]),a.jsxs(Oe,{...b({style:{}}),onKeyDown:P=>{P.key},children:[a.jsx("input",{...w()}),t,a.jsx(mo,{children:k&&c&&a.jsx(Er.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.1}},exit:{opacity:0,transition:{duration:.1}},children:a.jsx(FH,{isDragAccept:y,isDragReject:S,setIsHandlingUpload:d})},"image-upload-overlay")})]})},VH=f.memo(WH),UH=Ae((e,t)=>{const{children:n,tooltip:r="",tooltipProps:{placement:o="top",hasArrow:s=!0,...i}={},isChecked:c,...d}=e;return a.jsx(vn,{label:r,placement:o,hasArrow:s,...i,children:a.jsx(xc,{ref:t,colorScheme:c?"accent":"base",...d,children:n})})}),Yt=f.memo(UH);function GH(e){const t=f.createContext(null);return[({children:o,value:s})=>W.createElement(t.Provider,{value:s},o),()=>{const o=f.useContext(t);if(o===null)throw new Error(e);return o}]}function xP(e){return Array.isArray(e)?e:[e]}const qH=()=>{};function KH(e,t={active:!0}){return typeof e!="function"||!t.active?t.onKeyDown||qH:n=>{var r;n.key==="Escape"&&(e(n),(r=t.onTrigger)==null||r.call(t))}}function wP({data:e}){const t=[],n=[],r=e.reduce((o,s,i)=>(s.group?o[s.group]?o[s.group].push(i):o[s.group]=[i]:n.push(i),o),{});return Object.keys(r).forEach(o=>{t.push(...r[o].map(s=>e[s]))}),t.push(...n.map(o=>e[o])),t}function SP(e){return Array.isArray(e)||e===null?!1:typeof e=="object"?e.type!==W.Fragment:!1}function CP(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e))for(t=0;tr===t[o]).indexOf(!1)>=0)&&(n.current={v:e(),prevDeps:[...t]}),n.current.v}const QH=UR({key:"mantine",prepend:!0});function JH(){return $5()||QH}var ZH=Object.defineProperty,RS=Object.getOwnPropertySymbols,eW=Object.prototype.hasOwnProperty,tW=Object.prototype.propertyIsEnumerable,MS=(e,t,n)=>t in e?ZH(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,nW=(e,t)=>{for(var n in t||(t={}))eW.call(t,n)&&MS(e,n,t[n]);if(RS)for(var n of RS(t))tW.call(t,n)&&MS(e,n,t[n]);return e};const K0="ref";function rW(e){let t;if(e.length!==1)return{args:e,ref:t};const[n]=e;if(!(n instanceof Object))return{args:e,ref:t};if(!(K0 in n))return{args:e,ref:t};t=n[K0];const r=nW({},n);return delete r[K0],{args:[r],ref:t}}const{cssFactory:oW}=(()=>{function e(n,r,o){const s=[],i=KR(n,s,o);return s.length<2?o:i+r(s)}function t(n){const{cache:r}=n,o=(...i)=>{const{ref:c,args:d}=rW(i),p=GR(d,r.registered);return qR(r,p,!1),`${r.key}-${p.name}${c===void 0?"":` ${c}`}`};return{css:o,cx:(...i)=>e(r.registered,o,kP(i))}}return{cssFactory:t}})();function _P(){const e=JH();return YH(()=>oW({cache:e}),[e])}function sW({cx:e,classes:t,context:n,classNames:r,name:o,cache:s}){const i=n.reduce((c,d)=>(Object.keys(d.classNames).forEach(p=>{typeof c[p]!="string"?c[p]=`${d.classNames[p]}`:c[p]=`${c[p]} ${d.classNames[p]}`}),c),{});return Object.keys(t).reduce((c,d)=>(c[d]=e(t[d],i[d],r!=null&&r[d],Array.isArray(o)?o.filter(Boolean).map(p=>`${(s==null?void 0:s.key)||"mantine"}-${p}-${d}`).join(" "):o?`${(s==null?void 0:s.key)||"mantine"}-${o}-${d}`:null),c),{})}var aW=Object.defineProperty,DS=Object.getOwnPropertySymbols,iW=Object.prototype.hasOwnProperty,lW=Object.prototype.propertyIsEnumerable,AS=(e,t,n)=>t in e?aW(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,X0=(e,t)=>{for(var n in t||(t={}))iW.call(t,n)&&AS(e,n,t[n]);if(DS)for(var n of DS(t))lW.call(t,n)&&AS(e,n,t[n]);return e};function g1(e,t){return t&&Object.keys(t).forEach(n=>{e[n]?e[n]=X0(X0({},e[n]),t[n]):e[n]=X0({},t[n])}),e}function TS(e,t,n,r){const o=s=>typeof s=="function"?s(t,n||{},r):s||{};return Array.isArray(e)?e.map(s=>o(s.styles)).reduce((s,i)=>g1(s,i),{}):o(e)}function cW({ctx:e,theme:t,params:n,variant:r,size:o}){return e.reduce((s,i)=>(i.variants&&r in i.variants&&g1(s,i.variants[r](t,n,{variant:r,size:o})),i.sizes&&o in i.sizes&&g1(s,i.sizes[o](t,n,{variant:r,size:o})),s),{})}function so(e){const t=typeof e=="function"?e:()=>e;function n(r,o){const s=qa(),i=i9(o==null?void 0:o.name),c=$5(),d={variant:o==null?void 0:o.variant,size:o==null?void 0:o.size},{css:p,cx:h}=_P(),m=t(s,r,d),v=TS(o==null?void 0:o.styles,s,r,d),b=TS(i,s,r,d),w=cW({ctx:i,theme:s,params:r,variant:o==null?void 0:o.variant,size:o==null?void 0:o.size}),y=Object.fromEntries(Object.keys(m).map(S=>{const k=h({[p(m[S])]:!(o!=null&&o.unstyled)},p(w[S]),p(b[S]),p(v[S]));return[S,k]}));return{classes:sW({cx:h,classes:y,context:i,classNames:o==null?void 0:o.classNames,name:o==null?void 0:o.name,cache:c}),cx:h,theme:s}}return n}function NS(e){return`___ref-${e||""}`}var uW=Object.defineProperty,dW=Object.defineProperties,fW=Object.getOwnPropertyDescriptors,$S=Object.getOwnPropertySymbols,pW=Object.prototype.hasOwnProperty,hW=Object.prototype.propertyIsEnumerable,LS=(e,t,n)=>t in e?uW(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,wu=(e,t)=>{for(var n in t||(t={}))pW.call(t,n)&&LS(e,n,t[n]);if($S)for(var n of $S(t))hW.call(t,n)&&LS(e,n,t[n]);return e},Su=(e,t)=>dW(e,fW(t));const Cu={in:{opacity:1,transform:"scale(1)"},out:{opacity:0,transform:`scale(.9) translateY(${Ue(10)})`},transitionProperty:"transform, opacity"},Qf={fade:{in:{opacity:1},out:{opacity:0},transitionProperty:"opacity"},scale:{in:{opacity:1,transform:"scale(1)"},out:{opacity:0,transform:"scale(0)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"scale-y":{in:{opacity:1,transform:"scaleY(1)"},out:{opacity:0,transform:"scaleY(0)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"scale-x":{in:{opacity:1,transform:"scaleX(1)"},out:{opacity:0,transform:"scaleX(0)"},common:{transformOrigin:"left"},transitionProperty:"transform, opacity"},"skew-up":{in:{opacity:1,transform:"translateY(0) skew(0deg, 0deg)"},out:{opacity:0,transform:`translateY(-${Ue(20)}) skew(-10deg, -5deg)`},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"skew-down":{in:{opacity:1,transform:"translateY(0) skew(0deg, 0deg)"},out:{opacity:0,transform:`translateY(${Ue(20)}) skew(-10deg, -5deg)`},common:{transformOrigin:"bottom"},transitionProperty:"transform, opacity"},"rotate-left":{in:{opacity:1,transform:"translateY(0) rotate(0deg)"},out:{opacity:0,transform:`translateY(${Ue(20)}) rotate(-5deg)`},common:{transformOrigin:"bottom"},transitionProperty:"transform, opacity"},"rotate-right":{in:{opacity:1,transform:"translateY(0) rotate(0deg)"},out:{opacity:0,transform:`translateY(${Ue(20)}) rotate(5deg)`},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"slide-down":{in:{opacity:1,transform:"translateY(0)"},out:{opacity:0,transform:"translateY(-100%)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"slide-up":{in:{opacity:1,transform:"translateY(0)"},out:{opacity:0,transform:"translateY(100%)"},common:{transformOrigin:"bottom"},transitionProperty:"transform, opacity"},"slide-left":{in:{opacity:1,transform:"translateX(0)"},out:{opacity:0,transform:"translateX(100%)"},common:{transformOrigin:"left"},transitionProperty:"transform, opacity"},"slide-right":{in:{opacity:1,transform:"translateX(0)"},out:{opacity:0,transform:"translateX(-100%)"},common:{transformOrigin:"right"},transitionProperty:"transform, opacity"},pop:Su(wu({},Cu),{common:{transformOrigin:"center center"}}),"pop-bottom-left":Su(wu({},Cu),{common:{transformOrigin:"bottom left"}}),"pop-bottom-right":Su(wu({},Cu),{common:{transformOrigin:"bottom right"}}),"pop-top-left":Su(wu({},Cu),{common:{transformOrigin:"top left"}}),"pop-top-right":Su(wu({},Cu),{common:{transformOrigin:"top right"}})},zS=["mousedown","touchstart"];function mW(e,t,n){const r=f.useRef();return f.useEffect(()=>{const o=s=>{const{target:i}=s??{};if(Array.isArray(n)){const c=(i==null?void 0:i.hasAttribute("data-ignore-outside-clicks"))||!document.body.contains(i)&&i.tagName!=="HTML";n.every(p=>!!p&&!s.composedPath().includes(p))&&!c&&e()}else r.current&&!r.current.contains(i)&&e()};return(t||zS).forEach(s=>document.addEventListener(s,o)),()=>{(t||zS).forEach(s=>document.removeEventListener(s,o))}},[r,e,n]),r}function gW(e,t){try{return e.addEventListener("change",t),()=>e.removeEventListener("change",t)}catch{return e.addListener(t),()=>e.removeListener(t)}}function vW(e,t){return typeof t=="boolean"?t:typeof window<"u"&&"matchMedia"in window?window.matchMedia(e).matches:!1}function bW(e,t,{getInitialValueInEffect:n}={getInitialValueInEffect:!0}){const[r,o]=f.useState(n?t:vW(e,t)),s=f.useRef();return f.useEffect(()=>{if("matchMedia"in window)return s.current=window.matchMedia(e),o(s.current.matches),gW(s.current,i=>o(i.matches))},[e]),r}const PP=typeof document<"u"?f.useLayoutEffect:f.useEffect;function ks(e,t){const n=f.useRef(!1);f.useEffect(()=>()=>{n.current=!1},[]),f.useEffect(()=>{if(n.current)return e();n.current=!0},t)}function yW({opened:e,shouldReturnFocus:t=!0}){const n=f.useRef(),r=()=>{var o;n.current&&"focus"in n.current&&typeof n.current.focus=="function"&&((o=n.current)==null||o.focus({preventScroll:!0}))};return ks(()=>{let o=-1;const s=i=>{i.key==="Tab"&&window.clearTimeout(o)};return document.addEventListener("keydown",s),e?n.current=document.activeElement:t&&(o=window.setTimeout(r,10)),()=>{window.clearTimeout(o),document.removeEventListener("keydown",s)}},[e,t]),r}const xW=/input|select|textarea|button|object/,jP="a, input, select, textarea, button, object, [tabindex]";function wW(e){return e.style.display==="none"}function SW(e){if(e.getAttribute("aria-hidden")||e.getAttribute("hidden")||e.getAttribute("type")==="hidden")return!1;let n=e;for(;n&&!(n===document.body||n.nodeType===11);){if(wW(n))return!1;n=n.parentNode}return!0}function IP(e){let t=e.getAttribute("tabindex");return t===null&&(t=void 0),parseInt(t,10)}function v1(e){const t=e.nodeName.toLowerCase(),n=!Number.isNaN(IP(e));return(xW.test(t)&&!e.disabled||e instanceof HTMLAnchorElement&&e.href||n)&&SW(e)}function EP(e){const t=IP(e);return(Number.isNaN(t)||t>=0)&&v1(e)}function CW(e){return Array.from(e.querySelectorAll(jP)).filter(EP)}function kW(e,t){const n=CW(e);if(!n.length){t.preventDefault();return}const r=n[t.shiftKey?0:n.length-1],o=e.getRootNode();if(!(r===o.activeElement||e===o.activeElement))return;t.preventDefault();const i=n[t.shiftKey?n.length-1:0];i&&i.focus()}function iy(){return`mantine-${Math.random().toString(36).slice(2,11)}`}function _W(e,t="body > :not(script)"){const n=iy(),r=Array.from(document.querySelectorAll(t)).map(o=>{var s;if((s=o==null?void 0:o.shadowRoot)!=null&&s.contains(e)||o.contains(e))return;const i=o.getAttribute("aria-hidden"),c=o.getAttribute("data-hidden"),d=o.getAttribute("data-focus-id");return o.setAttribute("data-focus-id",n),i===null||i==="false"?o.setAttribute("aria-hidden","true"):!c&&!d&&o.setAttribute("data-hidden",i),{node:o,ariaHidden:c||null}});return()=>{r.forEach(o=>{!o||n!==o.node.getAttribute("data-focus-id")||(o.ariaHidden===null?o.node.removeAttribute("aria-hidden"):o.node.setAttribute("aria-hidden",o.ariaHidden),o.node.removeAttribute("data-focus-id"),o.node.removeAttribute("data-hidden"))})}}function PW(e=!0){const t=f.useRef(),n=f.useRef(null),r=s=>{let i=s.querySelector("[data-autofocus]");if(!i){const c=Array.from(s.querySelectorAll(jP));i=c.find(EP)||c.find(v1)||null,!i&&v1(s)&&(i=s)}i&&i.focus({preventScroll:!0})},o=f.useCallback(s=>{if(e){if(s===null){n.current&&(n.current(),n.current=null);return}n.current=_W(s),t.current!==s&&(s?(setTimeout(()=>{s.getRootNode()&&r(s)}),t.current=s):t.current=null)}},[e]);return f.useEffect(()=>{if(!e)return;t.current&&setTimeout(()=>r(t.current));const s=i=>{i.key==="Tab"&&t.current&&kW(t.current,i)};return document.addEventListener("keydown",s),()=>{document.removeEventListener("keydown",s),n.current&&n.current()}},[e]),o}const jW=W["useId".toString()]||(()=>{});function IW(){const e=jW();return e?`mantine-${e.replace(/:/g,"")}`:""}function ly(e){const t=IW(),[n,r]=f.useState(t);return PP(()=>{r(iy())},[]),typeof e=="string"?e:typeof window>"u"?t:n}function BS(e,t,n){f.useEffect(()=>(window.addEventListener(e,t,n),()=>window.removeEventListener(e,t,n)),[e,t])}function OP(e,t){typeof e=="function"?e(t):typeof e=="object"&&e!==null&&"current"in e&&(e.current=t)}function EW(...e){return t=>{e.forEach(n=>OP(n,t))}}function Ud(...e){return f.useCallback(EW(...e),e)}function hd({value:e,defaultValue:t,finalValue:n,onChange:r=()=>{}}){const[o,s]=f.useState(t!==void 0?t:n),i=c=>{s(c),r==null||r(c)};return e!==void 0?[e,r,!0]:[o,i,!1]}function RP(e,t){return bW("(prefers-reduced-motion: reduce)",e,t)}const OW=e=>e<.5?2*e*e:-1+(4-2*e)*e,RW=({axis:e,target:t,parent:n,alignment:r,offset:o,isList:s})=>{if(!t||!n&&typeof document>"u")return 0;const i=!!n,d=(n||document.body).getBoundingClientRect(),p=t.getBoundingClientRect(),h=m=>p[m]-d[m];if(e==="y"){const m=h("top");if(m===0)return 0;if(r==="start"){const b=m-o;return b<=p.height*(s?0:1)||!s?b:0}const v=i?d.height:window.innerHeight;if(r==="end"){const b=m+o-v+p.height;return b>=-p.height*(s?0:1)||!s?b:0}return r==="center"?m-v/2+p.height/2:0}if(e==="x"){const m=h("left");if(m===0)return 0;if(r==="start"){const b=m-o;return b<=p.width||!s?b:0}const v=i?d.width:window.innerWidth;if(r==="end"){const b=m+o-v+p.width;return b>=-p.width||!s?b:0}return r==="center"?m-v/2+p.width/2:0}return 0},MW=({axis:e,parent:t})=>{if(!t&&typeof document>"u")return 0;const n=e==="y"?"scrollTop":"scrollLeft";if(t)return t[n];const{body:r,documentElement:o}=document;return r[n]+o[n]},DW=({axis:e,parent:t,distance:n})=>{if(!t&&typeof document>"u")return;const r=e==="y"?"scrollTop":"scrollLeft";if(t)t[r]=n;else{const{body:o,documentElement:s}=document;o[r]=n,s[r]=n}};function MP({duration:e=1250,axis:t="y",onScrollFinish:n,easing:r=OW,offset:o=0,cancelable:s=!0,isList:i=!1}={}){const c=f.useRef(0),d=f.useRef(0),p=f.useRef(!1),h=f.useRef(null),m=f.useRef(null),v=RP(),b=()=>{c.current&&cancelAnimationFrame(c.current)},w=f.useCallback(({alignment:S="start"}={})=>{var k;p.current=!1,c.current&&b();const _=(k=MW({parent:h.current,axis:t}))!=null?k:0,P=RW({parent:h.current,target:m.current,axis:t,alignment:S,offset:o,isList:i})-(h.current?0:_);function I(){d.current===0&&(d.current=performance.now());const O=performance.now()-d.current,R=v||e===0?1:O/e,M=_+P*r(R);DW({parent:h.current,axis:t,distance:M}),!p.current&&R<1?c.current=requestAnimationFrame(I):(typeof n=="function"&&n(),d.current=0,c.current=0,b())}I()},[t,e,r,i,o,n,v]),y=()=>{s&&(p.current=!0)};return BS("wheel",y,{passive:!0}),BS("touchmove",y,{passive:!0}),f.useEffect(()=>b,[]),{scrollableRef:h,targetRef:m,scrollIntoView:w,cancel:b}}var FS=Object.getOwnPropertySymbols,AW=Object.prototype.hasOwnProperty,TW=Object.prototype.propertyIsEnumerable,NW=(e,t)=>{var n={};for(var r in e)AW.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&FS)for(var r of FS(e))t.indexOf(r)<0&&TW.call(e,r)&&(n[r]=e[r]);return n};function Fm(e){const t=e,{m:n,mx:r,my:o,mt:s,mb:i,ml:c,mr:d,p,px:h,py:m,pt:v,pb:b,pl:w,pr:y,bg:S,c:k,opacity:_,ff:P,fz:I,fw:E,lts:O,ta:R,lh:M,fs:D,tt:A,td:L,w:Q,miw:F,maw:V,h:q,mih:G,mah:T,bgsz:z,bgp:$,bgr:Y,bga:ae,pos:fe,top:ie,left:X,bottom:K,right:U,inset:se,display:re}=t,oe=NW(t,["m","mx","my","mt","mb","ml","mr","p","px","py","pt","pb","pl","pr","bg","c","opacity","ff","fz","fw","lts","ta","lh","fs","tt","td","w","miw","maw","h","mih","mah","bgsz","bgp","bgr","bga","pos","top","left","bottom","right","inset","display"]);return{systemStyles:l9({m:n,mx:r,my:o,mt:s,mb:i,ml:c,mr:d,p,px:h,py:m,pt:v,pb:b,pl:w,pr:y,bg:S,c:k,opacity:_,ff:P,fz:I,fw:E,lts:O,ta:R,lh:M,fs:D,tt:A,td:L,w:Q,miw:F,maw:V,h:q,mih:G,mah:T,bgsz:z,bgp:$,bgr:Y,bga:ae,pos:fe,top:ie,left:X,bottom:K,right:U,inset:se,display:re}),rest:oe}}function $W(e,t){const n=Object.keys(e).filter(r=>r!=="base").sort((r,o)=>jw(Vt({size:r,sizes:t.breakpoints}))-jw(Vt({size:o,sizes:t.breakpoints})));return"base"in e?["base",...n]:n}function LW({value:e,theme:t,getValue:n,property:r}){if(e==null)return;if(typeof e=="object")return $W(e,t).reduce((i,c)=>{if(c==="base"&&e.base!==void 0){const p=n(e.base,t);return Array.isArray(r)?(r.forEach(h=>{i[h]=p}),i):(i[r]=p,i)}const d=n(e[c],t);return Array.isArray(r)?(i[t.fn.largerThan(c)]={},r.forEach(p=>{i[t.fn.largerThan(c)][p]=d}),i):(i[t.fn.largerThan(c)]={[r]:d},i)},{});const o=n(e,t);return Array.isArray(r)?r.reduce((s,i)=>(s[i]=o,s),{}):{[r]:o}}function zW(e,t){return e==="dimmed"?t.colorScheme==="dark"?t.colors.dark[2]:t.colors.gray[6]:t.fn.variant({variant:"filled",color:e,primaryFallback:!1}).background}function BW(e){return Ue(e)}function FW(e){return e}function HW(e,t){return Vt({size:e,sizes:t.fontSizes})}const WW=["-xs","-sm","-md","-lg","-xl"];function VW(e,t){return WW.includes(e)?`calc(${Vt({size:e.replace("-",""),sizes:t.spacing})} * -1)`:Vt({size:e,sizes:t.spacing})}const UW={identity:FW,color:zW,size:BW,fontSize:HW,spacing:VW},GW={m:{type:"spacing",property:"margin"},mt:{type:"spacing",property:"marginTop"},mb:{type:"spacing",property:"marginBottom"},ml:{type:"spacing",property:"marginLeft"},mr:{type:"spacing",property:"marginRight"},mx:{type:"spacing",property:["marginRight","marginLeft"]},my:{type:"spacing",property:["marginTop","marginBottom"]},p:{type:"spacing",property:"padding"},pt:{type:"spacing",property:"paddingTop"},pb:{type:"spacing",property:"paddingBottom"},pl:{type:"spacing",property:"paddingLeft"},pr:{type:"spacing",property:"paddingRight"},px:{type:"spacing",property:["paddingRight","paddingLeft"]},py:{type:"spacing",property:["paddingTop","paddingBottom"]},bg:{type:"color",property:"background"},c:{type:"color",property:"color"},opacity:{type:"identity",property:"opacity"},ff:{type:"identity",property:"fontFamily"},fz:{type:"fontSize",property:"fontSize"},fw:{type:"identity",property:"fontWeight"},lts:{type:"size",property:"letterSpacing"},ta:{type:"identity",property:"textAlign"},lh:{type:"identity",property:"lineHeight"},fs:{type:"identity",property:"fontStyle"},tt:{type:"identity",property:"textTransform"},td:{type:"identity",property:"textDecoration"},w:{type:"spacing",property:"width"},miw:{type:"spacing",property:"minWidth"},maw:{type:"spacing",property:"maxWidth"},h:{type:"spacing",property:"height"},mih:{type:"spacing",property:"minHeight"},mah:{type:"spacing",property:"maxHeight"},bgsz:{type:"size",property:"backgroundSize"},bgp:{type:"identity",property:"backgroundPosition"},bgr:{type:"identity",property:"backgroundRepeat"},bga:{type:"identity",property:"backgroundAttachment"},pos:{type:"identity",property:"position"},top:{type:"identity",property:"top"},left:{type:"size",property:"left"},bottom:{type:"size",property:"bottom"},right:{type:"size",property:"right"},inset:{type:"size",property:"inset"},display:{type:"identity",property:"display"}};var qW=Object.defineProperty,HS=Object.getOwnPropertySymbols,KW=Object.prototype.hasOwnProperty,XW=Object.prototype.propertyIsEnumerable,WS=(e,t,n)=>t in e?qW(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,VS=(e,t)=>{for(var n in t||(t={}))KW.call(t,n)&&WS(e,n,t[n]);if(HS)for(var n of HS(t))XW.call(t,n)&&WS(e,n,t[n]);return e};function US(e,t,n=GW){return Object.keys(n).reduce((o,s)=>(s in e&&e[s]!==void 0&&o.push(LW({value:e[s],getValue:UW[n[s].type],property:n[s].property,theme:t})),o),[]).reduce((o,s)=>(Object.keys(s).forEach(i=>{typeof s[i]=="object"&&s[i]!==null&&i in o?o[i]=VS(VS({},o[i]),s[i]):o[i]=s[i]}),o),{})}function GS(e,t){return typeof e=="function"?e(t):e}function YW(e,t,n){const r=qa(),{css:o,cx:s}=_P();return Array.isArray(e)?s(n,o(US(t,r)),e.map(i=>o(GS(i,r)))):s(n,o(GS(e,r)),o(US(t,r)))}var QW=Object.defineProperty,uh=Object.getOwnPropertySymbols,DP=Object.prototype.hasOwnProperty,AP=Object.prototype.propertyIsEnumerable,qS=(e,t,n)=>t in e?QW(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,JW=(e,t)=>{for(var n in t||(t={}))DP.call(t,n)&&qS(e,n,t[n]);if(uh)for(var n of uh(t))AP.call(t,n)&&qS(e,n,t[n]);return e},ZW=(e,t)=>{var n={};for(var r in e)DP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&uh)for(var r of uh(e))t.indexOf(r)<0&&AP.call(e,r)&&(n[r]=e[r]);return n};const TP=f.forwardRef((e,t)=>{var n=e,{className:r,component:o,style:s,sx:i}=n,c=ZW(n,["className","component","style","sx"]);const{systemStyles:d,rest:p}=Fm(c),h=o||"div";return W.createElement(h,JW({ref:t,className:YW(i,d,r),style:s},p))});TP.displayName="@mantine/core/Box";const Eo=TP;var eV=Object.defineProperty,tV=Object.defineProperties,nV=Object.getOwnPropertyDescriptors,KS=Object.getOwnPropertySymbols,rV=Object.prototype.hasOwnProperty,oV=Object.prototype.propertyIsEnumerable,XS=(e,t,n)=>t in e?eV(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,YS=(e,t)=>{for(var n in t||(t={}))rV.call(t,n)&&XS(e,n,t[n]);if(KS)for(var n of KS(t))oV.call(t,n)&&XS(e,n,t[n]);return e},sV=(e,t)=>tV(e,nV(t)),aV=so(e=>({root:sV(YS(YS({},e.fn.focusStyles()),e.fn.fontStyles()),{cursor:"pointer",border:0,padding:0,appearance:"none",fontSize:e.fontSizes.md,backgroundColor:"transparent",textAlign:"left",color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,textDecoration:"none",boxSizing:"border-box"})}));const iV=aV;var lV=Object.defineProperty,dh=Object.getOwnPropertySymbols,NP=Object.prototype.hasOwnProperty,$P=Object.prototype.propertyIsEnumerable,QS=(e,t,n)=>t in e?lV(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,cV=(e,t)=>{for(var n in t||(t={}))NP.call(t,n)&&QS(e,n,t[n]);if(dh)for(var n of dh(t))$P.call(t,n)&&QS(e,n,t[n]);return e},uV=(e,t)=>{var n={};for(var r in e)NP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&dh)for(var r of dh(e))t.indexOf(r)<0&&$P.call(e,r)&&(n[r]=e[r]);return n};const LP=f.forwardRef((e,t)=>{const n=Cr("UnstyledButton",{},e),{className:r,component:o="button",unstyled:s,variant:i}=n,c=uV(n,["className","component","unstyled","variant"]),{classes:d,cx:p}=iV(null,{name:"UnstyledButton",unstyled:s,variant:i});return W.createElement(Eo,cV({component:o,ref:t,className:p(d.root,r),type:o==="button"?"button":void 0},c))});LP.displayName="@mantine/core/UnstyledButton";const dV=LP;var fV=Object.defineProperty,pV=Object.defineProperties,hV=Object.getOwnPropertyDescriptors,JS=Object.getOwnPropertySymbols,mV=Object.prototype.hasOwnProperty,gV=Object.prototype.propertyIsEnumerable,ZS=(e,t,n)=>t in e?fV(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,b1=(e,t)=>{for(var n in t||(t={}))mV.call(t,n)&&ZS(e,n,t[n]);if(JS)for(var n of JS(t))gV.call(t,n)&&ZS(e,n,t[n]);return e},eC=(e,t)=>pV(e,hV(t));const vV=["subtle","filled","outline","light","default","transparent","gradient"],Jf={xs:Ue(18),sm:Ue(22),md:Ue(28),lg:Ue(34),xl:Ue(44)};function bV({variant:e,theme:t,color:n,gradient:r}){const o=t.fn.variant({color:n,variant:e,gradient:r});return e==="gradient"?{border:0,backgroundImage:o.background,color:o.color,"&:hover":t.fn.hover({backgroundSize:"200%"})}:vV.includes(e)?b1({border:`${Ue(1)} solid ${o.border}`,backgroundColor:o.background,color:o.color},t.fn.hover({backgroundColor:o.hover})):null}var yV=so((e,{radius:t,color:n,gradient:r},{variant:o,size:s})=>({root:eC(b1({position:"relative",borderRadius:e.fn.radius(t),padding:0,lineHeight:1,display:"flex",alignItems:"center",justifyContent:"center",height:Vt({size:s,sizes:Jf}),minHeight:Vt({size:s,sizes:Jf}),width:Vt({size:s,sizes:Jf}),minWidth:Vt({size:s,sizes:Jf})},bV({variant:o,theme:e,color:n,gradient:r})),{"&:active":e.activeStyles,"& [data-action-icon-loader]":{maxWidth:"70%"},"&:disabled, &[data-disabled]":{color:e.colors.gray[e.colorScheme==="dark"?6:4],cursor:"not-allowed",backgroundColor:o==="transparent"?void 0:e.fn.themeColor("gray",e.colorScheme==="dark"?8:1),borderColor:o==="transparent"?void 0:e.fn.themeColor("gray",e.colorScheme==="dark"?8:1),backgroundImage:"none",pointerEvents:"none","&:active":{transform:"none"}},"&[data-loading]":{pointerEvents:"none","&::before":eC(b1({content:'""'},e.fn.cover(Ue(-1))),{backgroundColor:e.colorScheme==="dark"?e.fn.rgba(e.colors.dark[7],.5):"rgba(255, 255, 255, .5)",borderRadius:e.fn.radius(t),cursor:"not-allowed"})}})}));const xV=yV;var wV=Object.defineProperty,fh=Object.getOwnPropertySymbols,zP=Object.prototype.hasOwnProperty,BP=Object.prototype.propertyIsEnumerable,tC=(e,t,n)=>t in e?wV(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,nC=(e,t)=>{for(var n in t||(t={}))zP.call(t,n)&&tC(e,n,t[n]);if(fh)for(var n of fh(t))BP.call(t,n)&&tC(e,n,t[n]);return e},rC=(e,t)=>{var n={};for(var r in e)zP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&fh)for(var r of fh(e))t.indexOf(r)<0&&BP.call(e,r)&&(n[r]=e[r]);return n};function SV(e){var t=e,{size:n,color:r}=t,o=rC(t,["size","color"]);const s=o,{style:i}=s,c=rC(s,["style"]);return W.createElement("svg",nC({viewBox:"0 0 135 140",xmlns:"http://www.w3.org/2000/svg",fill:r,style:nC({width:n},i)},c),W.createElement("rect",{y:"10",width:"15",height:"120",rx:"6"},W.createElement("animate",{attributeName:"height",begin:"0.5s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),W.createElement("animate",{attributeName:"y",begin:"0.5s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})),W.createElement("rect",{x:"30",y:"10",width:"15",height:"120",rx:"6"},W.createElement("animate",{attributeName:"height",begin:"0.25s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),W.createElement("animate",{attributeName:"y",begin:"0.25s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})),W.createElement("rect",{x:"60",width:"15",height:"140",rx:"6"},W.createElement("animate",{attributeName:"height",begin:"0s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),W.createElement("animate",{attributeName:"y",begin:"0s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})),W.createElement("rect",{x:"90",y:"10",width:"15",height:"120",rx:"6"},W.createElement("animate",{attributeName:"height",begin:"0.25s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),W.createElement("animate",{attributeName:"y",begin:"0.25s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})),W.createElement("rect",{x:"120",y:"10",width:"15",height:"120",rx:"6"},W.createElement("animate",{attributeName:"height",begin:"0.5s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),W.createElement("animate",{attributeName:"y",begin:"0.5s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})))}var CV=Object.defineProperty,ph=Object.getOwnPropertySymbols,FP=Object.prototype.hasOwnProperty,HP=Object.prototype.propertyIsEnumerable,oC=(e,t,n)=>t in e?CV(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,sC=(e,t)=>{for(var n in t||(t={}))FP.call(t,n)&&oC(e,n,t[n]);if(ph)for(var n of ph(t))HP.call(t,n)&&oC(e,n,t[n]);return e},aC=(e,t)=>{var n={};for(var r in e)FP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&ph)for(var r of ph(e))t.indexOf(r)<0&&HP.call(e,r)&&(n[r]=e[r]);return n};function kV(e){var t=e,{size:n,color:r}=t,o=aC(t,["size","color"]);const s=o,{style:i}=s,c=aC(s,["style"]);return W.createElement("svg",sC({viewBox:"0 0 38 38",xmlns:"http://www.w3.org/2000/svg",stroke:r,style:sC({width:n,height:n},i)},c),W.createElement("g",{fill:"none",fillRule:"evenodd"},W.createElement("g",{transform:"translate(2.5 2.5)",strokeWidth:"5"},W.createElement("circle",{strokeOpacity:".5",cx:"16",cy:"16",r:"16"}),W.createElement("path",{d:"M32 16c0-9.94-8.06-16-16-16"},W.createElement("animateTransform",{attributeName:"transform",type:"rotate",from:"0 16 16",to:"360 16 16",dur:"1s",repeatCount:"indefinite"})))))}var _V=Object.defineProperty,hh=Object.getOwnPropertySymbols,WP=Object.prototype.hasOwnProperty,VP=Object.prototype.propertyIsEnumerable,iC=(e,t,n)=>t in e?_V(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,lC=(e,t)=>{for(var n in t||(t={}))WP.call(t,n)&&iC(e,n,t[n]);if(hh)for(var n of hh(t))VP.call(t,n)&&iC(e,n,t[n]);return e},cC=(e,t)=>{var n={};for(var r in e)WP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&hh)for(var r of hh(e))t.indexOf(r)<0&&VP.call(e,r)&&(n[r]=e[r]);return n};function PV(e){var t=e,{size:n,color:r}=t,o=cC(t,["size","color"]);const s=o,{style:i}=s,c=cC(s,["style"]);return W.createElement("svg",lC({viewBox:"0 0 120 30",xmlns:"http://www.w3.org/2000/svg",fill:r,style:lC({width:n},i)},c),W.createElement("circle",{cx:"15",cy:"15",r:"15"},W.createElement("animate",{attributeName:"r",from:"15",to:"15",begin:"0s",dur:"0.8s",values:"15;9;15",calcMode:"linear",repeatCount:"indefinite"}),W.createElement("animate",{attributeName:"fill-opacity",from:"1",to:"1",begin:"0s",dur:"0.8s",values:"1;.5;1",calcMode:"linear",repeatCount:"indefinite"})),W.createElement("circle",{cx:"60",cy:"15",r:"9",fillOpacity:"0.3"},W.createElement("animate",{attributeName:"r",from:"9",to:"9",begin:"0s",dur:"0.8s",values:"9;15;9",calcMode:"linear",repeatCount:"indefinite"}),W.createElement("animate",{attributeName:"fill-opacity",from:"0.5",to:"0.5",begin:"0s",dur:"0.8s",values:".5;1;.5",calcMode:"linear",repeatCount:"indefinite"})),W.createElement("circle",{cx:"105",cy:"15",r:"15"},W.createElement("animate",{attributeName:"r",from:"15",to:"15",begin:"0s",dur:"0.8s",values:"15;9;15",calcMode:"linear",repeatCount:"indefinite"}),W.createElement("animate",{attributeName:"fill-opacity",from:"1",to:"1",begin:"0s",dur:"0.8s",values:"1;.5;1",calcMode:"linear",repeatCount:"indefinite"})))}var jV=Object.defineProperty,mh=Object.getOwnPropertySymbols,UP=Object.prototype.hasOwnProperty,GP=Object.prototype.propertyIsEnumerable,uC=(e,t,n)=>t in e?jV(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,IV=(e,t)=>{for(var n in t||(t={}))UP.call(t,n)&&uC(e,n,t[n]);if(mh)for(var n of mh(t))GP.call(t,n)&&uC(e,n,t[n]);return e},EV=(e,t)=>{var n={};for(var r in e)UP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&mh)for(var r of mh(e))t.indexOf(r)<0&&GP.call(e,r)&&(n[r]=e[r]);return n};const Y0={bars:SV,oval:kV,dots:PV},OV={xs:Ue(18),sm:Ue(22),md:Ue(36),lg:Ue(44),xl:Ue(58)},RV={size:"md"};function qP(e){const t=Cr("Loader",RV,e),{size:n,color:r,variant:o}=t,s=EV(t,["size","color","variant"]),i=qa(),c=o in Y0?o:i.loader;return W.createElement(Eo,IV({role:"presentation",component:Y0[c]||Y0.bars,size:Vt({size:n,sizes:OV}),color:i.fn.variant({variant:"filled",primaryFallback:!1,color:r||i.primaryColor}).background},s))}qP.displayName="@mantine/core/Loader";var MV=Object.defineProperty,gh=Object.getOwnPropertySymbols,KP=Object.prototype.hasOwnProperty,XP=Object.prototype.propertyIsEnumerable,dC=(e,t,n)=>t in e?MV(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,fC=(e,t)=>{for(var n in t||(t={}))KP.call(t,n)&&dC(e,n,t[n]);if(gh)for(var n of gh(t))XP.call(t,n)&&dC(e,n,t[n]);return e},DV=(e,t)=>{var n={};for(var r in e)KP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&gh)for(var r of gh(e))t.indexOf(r)<0&&XP.call(e,r)&&(n[r]=e[r]);return n};const AV={color:"gray",size:"md",variant:"subtle"},YP=f.forwardRef((e,t)=>{const n=Cr("ActionIcon",AV,e),{className:r,color:o,children:s,radius:i,size:c,variant:d,gradient:p,disabled:h,loaderProps:m,loading:v,unstyled:b,__staticSelector:w}=n,y=DV(n,["className","color","children","radius","size","variant","gradient","disabled","loaderProps","loading","unstyled","__staticSelector"]),{classes:S,cx:k,theme:_}=xV({radius:i,color:o,gradient:p},{name:["ActionIcon",w],unstyled:b,size:c,variant:d}),P=W.createElement(qP,fC({color:_.fn.variant({color:o,variant:d}).color,size:"100%","data-action-icon-loader":!0},m));return W.createElement(dV,fC({className:k(S.root,r),ref:t,disabled:h,"data-disabled":h||void 0,"data-loading":v||void 0,unstyled:b},y),v?P:s)});YP.displayName="@mantine/core/ActionIcon";const TV=YP;var NV=Object.defineProperty,$V=Object.defineProperties,LV=Object.getOwnPropertyDescriptors,vh=Object.getOwnPropertySymbols,QP=Object.prototype.hasOwnProperty,JP=Object.prototype.propertyIsEnumerable,pC=(e,t,n)=>t in e?NV(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,zV=(e,t)=>{for(var n in t||(t={}))QP.call(t,n)&&pC(e,n,t[n]);if(vh)for(var n of vh(t))JP.call(t,n)&&pC(e,n,t[n]);return e},BV=(e,t)=>$V(e,LV(t)),FV=(e,t)=>{var n={};for(var r in e)QP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&vh)for(var r of vh(e))t.indexOf(r)<0&&JP.call(e,r)&&(n[r]=e[r]);return n};function ZP(e){const t=Cr("Portal",{},e),{children:n,target:r,className:o,innerRef:s}=t,i=FV(t,["children","target","className","innerRef"]),c=qa(),[d,p]=f.useState(!1),h=f.useRef();return PP(()=>(p(!0),h.current=r?typeof r=="string"?document.querySelector(r):r:document.createElement("div"),r||document.body.appendChild(h.current),()=>{!r&&document.body.removeChild(h.current)}),[r]),d?_i.createPortal(W.createElement("div",BV(zV({className:o,dir:c.dir},i),{ref:s}),n),h.current):null}ZP.displayName="@mantine/core/Portal";var HV=Object.defineProperty,bh=Object.getOwnPropertySymbols,ej=Object.prototype.hasOwnProperty,tj=Object.prototype.propertyIsEnumerable,hC=(e,t,n)=>t in e?HV(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,WV=(e,t)=>{for(var n in t||(t={}))ej.call(t,n)&&hC(e,n,t[n]);if(bh)for(var n of bh(t))tj.call(t,n)&&hC(e,n,t[n]);return e},VV=(e,t)=>{var n={};for(var r in e)ej.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&bh)for(var r of bh(e))t.indexOf(r)<0&&tj.call(e,r)&&(n[r]=e[r]);return n};function nj(e){var t=e,{withinPortal:n=!0,children:r}=t,o=VV(t,["withinPortal","children"]);return n?W.createElement(ZP,WV({},o),r):W.createElement(W.Fragment,null,r)}nj.displayName="@mantine/core/OptionalPortal";var UV=Object.defineProperty,yh=Object.getOwnPropertySymbols,rj=Object.prototype.hasOwnProperty,oj=Object.prototype.propertyIsEnumerable,mC=(e,t,n)=>t in e?UV(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,gC=(e,t)=>{for(var n in t||(t={}))rj.call(t,n)&&mC(e,n,t[n]);if(yh)for(var n of yh(t))oj.call(t,n)&&mC(e,n,t[n]);return e},GV=(e,t)=>{var n={};for(var r in e)rj.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&yh)for(var r of yh(e))t.indexOf(r)<0&&oj.call(e,r)&&(n[r]=e[r]);return n};function sj(e){const t=e,{width:n,height:r,style:o}=t,s=GV(t,["width","height","style"]);return W.createElement("svg",gC({viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:gC({width:n,height:r},o)},s),W.createElement("path",{d:"M11.7816 4.03157C12.0062 3.80702 12.0062 3.44295 11.7816 3.2184C11.5571 2.99385 11.193 2.99385 10.9685 3.2184L7.50005 6.68682L4.03164 3.2184C3.80708 2.99385 3.44301 2.99385 3.21846 3.2184C2.99391 3.44295 2.99391 3.80702 3.21846 4.03157L6.68688 7.49999L3.21846 10.9684C2.99391 11.193 2.99391 11.557 3.21846 11.7816C3.44301 12.0061 3.80708 12.0061 4.03164 11.7816L7.50005 8.31316L10.9685 11.7816C11.193 12.0061 11.5571 12.0061 11.7816 11.7816C12.0062 11.557 12.0062 11.193 11.7816 10.9684L8.31322 7.49999L11.7816 4.03157Z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"}))}sj.displayName="@mantine/core/CloseIcon";var qV=Object.defineProperty,xh=Object.getOwnPropertySymbols,aj=Object.prototype.hasOwnProperty,ij=Object.prototype.propertyIsEnumerable,vC=(e,t,n)=>t in e?qV(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,KV=(e,t)=>{for(var n in t||(t={}))aj.call(t,n)&&vC(e,n,t[n]);if(xh)for(var n of xh(t))ij.call(t,n)&&vC(e,n,t[n]);return e},XV=(e,t)=>{var n={};for(var r in e)aj.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&xh)for(var r of xh(e))t.indexOf(r)<0&&ij.call(e,r)&&(n[r]=e[r]);return n};const YV={xs:Ue(12),sm:Ue(16),md:Ue(20),lg:Ue(28),xl:Ue(34)},QV={size:"sm"},lj=f.forwardRef((e,t)=>{const n=Cr("CloseButton",QV,e),{iconSize:r,size:o,children:s}=n,i=XV(n,["iconSize","size","children"]),c=Ue(r||YV[o]);return W.createElement(TV,KV({ref:t,__staticSelector:"CloseButton",size:o},i),s||W.createElement(sj,{width:c,height:c}))});lj.displayName="@mantine/core/CloseButton";const cj=lj;var JV=Object.defineProperty,ZV=Object.defineProperties,eU=Object.getOwnPropertyDescriptors,bC=Object.getOwnPropertySymbols,tU=Object.prototype.hasOwnProperty,nU=Object.prototype.propertyIsEnumerable,yC=(e,t,n)=>t in e?JV(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Zf=(e,t)=>{for(var n in t||(t={}))tU.call(t,n)&&yC(e,n,t[n]);if(bC)for(var n of bC(t))nU.call(t,n)&&yC(e,n,t[n]);return e},rU=(e,t)=>ZV(e,eU(t));function oU({underline:e,strikethrough:t}){const n=[];return e&&n.push("underline"),t&&n.push("line-through"),n.length>0?n.join(" "):"none"}function sU({theme:e,color:t}){return t==="dimmed"?e.fn.dimmed():typeof t=="string"&&(t in e.colors||t.split(".")[0]in e.colors)?e.fn.variant({variant:"filled",color:t}).background:t||"inherit"}function aU(e){return typeof e=="number"?{overflow:"hidden",textOverflow:"ellipsis",display:"-webkit-box",WebkitLineClamp:e,WebkitBoxOrient:"vertical"}:null}function iU({theme:e,truncate:t}){return t==="start"?{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",direction:e.dir==="ltr"?"rtl":"ltr",textAlign:e.dir==="ltr"?"right":"left"}:t?{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}:null}var lU=so((e,{color:t,lineClamp:n,truncate:r,inline:o,inherit:s,underline:i,gradient:c,weight:d,transform:p,align:h,strikethrough:m,italic:v},{size:b})=>{const w=e.fn.variant({variant:"gradient",gradient:c});return{root:rU(Zf(Zf(Zf(Zf({},e.fn.fontStyles()),e.fn.focusStyles()),aU(n)),iU({theme:e,truncate:r})),{color:sU({color:t,theme:e}),fontFamily:s?"inherit":e.fontFamily,fontSize:s||b===void 0?"inherit":Vt({size:b,sizes:e.fontSizes}),lineHeight:s?"inherit":o?1:e.lineHeight,textDecoration:oU({underline:i,strikethrough:m}),WebkitTapHighlightColor:"transparent",fontWeight:s?"inherit":d,textTransform:p,textAlign:h,fontStyle:v?"italic":void 0}),gradient:{backgroundImage:w.background,WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent"}}});const cU=lU;var uU=Object.defineProperty,wh=Object.getOwnPropertySymbols,uj=Object.prototype.hasOwnProperty,dj=Object.prototype.propertyIsEnumerable,xC=(e,t,n)=>t in e?uU(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,dU=(e,t)=>{for(var n in t||(t={}))uj.call(t,n)&&xC(e,n,t[n]);if(wh)for(var n of wh(t))dj.call(t,n)&&xC(e,n,t[n]);return e},fU=(e,t)=>{var n={};for(var r in e)uj.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&wh)for(var r of wh(e))t.indexOf(r)<0&&dj.call(e,r)&&(n[r]=e[r]);return n};const pU={variant:"text"},fj=f.forwardRef((e,t)=>{const n=Cr("Text",pU,e),{className:r,size:o,weight:s,transform:i,color:c,align:d,variant:p,lineClamp:h,truncate:m,gradient:v,inline:b,inherit:w,underline:y,strikethrough:S,italic:k,classNames:_,styles:P,unstyled:I,span:E,__staticSelector:O}=n,R=fU(n,["className","size","weight","transform","color","align","variant","lineClamp","truncate","gradient","inline","inherit","underline","strikethrough","italic","classNames","styles","unstyled","span","__staticSelector"]),{classes:M,cx:D}=cU({color:c,lineClamp:h,truncate:m,inline:b,inherit:w,underline:y,strikethrough:S,italic:k,weight:s,transform:i,align:d,gradient:v},{unstyled:I,name:O||"Text",variant:p,size:o});return W.createElement(Eo,dU({ref:t,className:D(M.root,{[M.gradient]:p==="gradient"},r),component:E?"span":"div"},R))});fj.displayName="@mantine/core/Text";const Pc=fj,ep={xs:Ue(1),sm:Ue(2),md:Ue(3),lg:Ue(4),xl:Ue(5)};function tp(e,t){const n=e.fn.variant({variant:"outline",color:t}).border;return typeof t=="string"&&(t in e.colors||t.split(".")[0]in e.colors)?n:t===void 0?e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[4]:t}var hU=so((e,{color:t},{size:n,variant:r})=>({root:{},withLabel:{borderTop:"0 !important"},left:{"&::before":{display:"none"}},right:{"&::after":{display:"none"}},label:{display:"flex",alignItems:"center","&::before":{content:'""',flex:1,height:Ue(1),borderTop:`${Vt({size:n,sizes:ep})} ${r} ${tp(e,t)}`,marginRight:e.spacing.xs},"&::after":{content:'""',flex:1,borderTop:`${Vt({size:n,sizes:ep})} ${r} ${tp(e,t)}`,marginLeft:e.spacing.xs}},labelDefaultStyles:{color:t==="dark"?e.colors.dark[1]:e.fn.themeColor(t,e.colorScheme==="dark"?5:e.fn.primaryShade(),!1)},horizontal:{border:0,borderTopWidth:Ue(Vt({size:n,sizes:ep})),borderTopColor:tp(e,t),borderTopStyle:r,margin:0},vertical:{border:0,alignSelf:"stretch",height:"auto",borderLeftWidth:Ue(Vt({size:n,sizes:ep})),borderLeftColor:tp(e,t),borderLeftStyle:r}}));const mU=hU;var gU=Object.defineProperty,vU=Object.defineProperties,bU=Object.getOwnPropertyDescriptors,Sh=Object.getOwnPropertySymbols,pj=Object.prototype.hasOwnProperty,hj=Object.prototype.propertyIsEnumerable,wC=(e,t,n)=>t in e?gU(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,SC=(e,t)=>{for(var n in t||(t={}))pj.call(t,n)&&wC(e,n,t[n]);if(Sh)for(var n of Sh(t))hj.call(t,n)&&wC(e,n,t[n]);return e},yU=(e,t)=>vU(e,bU(t)),xU=(e,t)=>{var n={};for(var r in e)pj.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Sh)for(var r of Sh(e))t.indexOf(r)<0&&hj.call(e,r)&&(n[r]=e[r]);return n};const wU={orientation:"horizontal",size:"xs",labelPosition:"left",variant:"solid"},y1=f.forwardRef((e,t)=>{const n=Cr("Divider",wU,e),{className:r,color:o,orientation:s,size:i,label:c,labelPosition:d,labelProps:p,variant:h,styles:m,classNames:v,unstyled:b}=n,w=xU(n,["className","color","orientation","size","label","labelPosition","labelProps","variant","styles","classNames","unstyled"]),{classes:y,cx:S}=mU({color:o},{classNames:v,styles:m,unstyled:b,name:"Divider",variant:h,size:i}),k=s==="vertical",_=s==="horizontal",P=!!c&&_,I=!(p!=null&&p.color);return W.createElement(Eo,SC({ref:t,className:S(y.root,{[y.vertical]:k,[y.horizontal]:_,[y.withLabel]:P},r),role:"separator"},w),P&&W.createElement(Pc,yU(SC({},p),{size:(p==null?void 0:p.size)||"xs",mt:Ue(2),className:S(y.label,y[d],{[y.labelDefaultStyles]:I})}),c))});y1.displayName="@mantine/core/Divider";var SU=Object.defineProperty,CU=Object.defineProperties,kU=Object.getOwnPropertyDescriptors,CC=Object.getOwnPropertySymbols,_U=Object.prototype.hasOwnProperty,PU=Object.prototype.propertyIsEnumerable,kC=(e,t,n)=>t in e?SU(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,_C=(e,t)=>{for(var n in t||(t={}))_U.call(t,n)&&kC(e,n,t[n]);if(CC)for(var n of CC(t))PU.call(t,n)&&kC(e,n,t[n]);return e},jU=(e,t)=>CU(e,kU(t)),IU=so((e,t,{size:n})=>({item:jU(_C({},e.fn.fontStyles()),{boxSizing:"border-box",wordBreak:"break-all",textAlign:"left",width:"100%",padding:`calc(${Vt({size:n,sizes:e.spacing})} / 1.5) ${Vt({size:n,sizes:e.spacing})}`,cursor:"pointer",fontSize:Vt({size:n,sizes:e.fontSizes}),color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,borderRadius:e.fn.radius(),"&[data-hovered]":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[1]},"&[data-selected]":_C({backgroundColor:e.fn.variant({variant:"filled"}).background,color:e.fn.variant({variant:"filled"}).color},e.fn.hover({backgroundColor:e.fn.variant({variant:"filled"}).hover})),"&[data-disabled]":{cursor:"default",color:e.colors.dark[2]}}),nothingFound:{boxSizing:"border-box",color:e.colors.gray[6],paddingTop:`calc(${Vt({size:n,sizes:e.spacing})} / 2)`,paddingBottom:`calc(${Vt({size:n,sizes:e.spacing})} / 2)`,textAlign:"center"},separator:{boxSizing:"border-box",textAlign:"left",width:"100%",padding:`calc(${Vt({size:n,sizes:e.spacing})} / 1.5) ${Vt({size:n,sizes:e.spacing})}`},separatorLabel:{color:e.colorScheme==="dark"?e.colors.dark[3]:e.colors.gray[5]}}));const EU=IU;var OU=Object.defineProperty,PC=Object.getOwnPropertySymbols,RU=Object.prototype.hasOwnProperty,MU=Object.prototype.propertyIsEnumerable,jC=(e,t,n)=>t in e?OU(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,DU=(e,t)=>{for(var n in t||(t={}))RU.call(t,n)&&jC(e,n,t[n]);if(PC)for(var n of PC(t))MU.call(t,n)&&jC(e,n,t[n]);return e};function cy({data:e,hovered:t,classNames:n,styles:r,isItemSelected:o,uuid:s,__staticSelector:i,onItemHover:c,onItemSelect:d,itemsRefs:p,itemComponent:h,size:m,nothingFound:v,creatable:b,createLabel:w,unstyled:y,variant:S}){const{classes:k}=EU(null,{classNames:n,styles:r,unstyled:y,name:i,variant:S,size:m}),_=[],P=[];let I=null;const E=(R,M)=>{const D=typeof o=="function"?o(R.value):!1;return W.createElement(h,DU({key:R.value,className:k.item,"data-disabled":R.disabled||void 0,"data-hovered":!R.disabled&&t===M||void 0,"data-selected":!R.disabled&&D||void 0,selected:D,onMouseEnter:()=>c(M),id:`${s}-${M}`,role:"option",tabIndex:-1,"aria-selected":t===M,ref:A=>{p&&p.current&&(p.current[R.value]=A)},onMouseDown:R.disabled?null:A=>{A.preventDefault(),d(R)},disabled:R.disabled,variant:S},R))};let O=null;if(e.forEach((R,M)=>{R.creatable?I=M:R.group?(O!==R.group&&(O=R.group,P.push(W.createElement("div",{className:k.separator,key:`__mantine-divider-${M}`},W.createElement(y1,{classNames:{label:k.separatorLabel},label:R.group})))),P.push(E(R,M))):_.push(E(R,M))}),b){const R=e[I];_.push(W.createElement("div",{key:iy(),className:k.item,"data-hovered":t===I||void 0,onMouseEnter:()=>c(I),onMouseDown:M=>{M.preventDefault(),d(R)},tabIndex:-1,ref:M=>{p&&p.current&&(p.current[R.value]=M)}},w))}return P.length>0&&_.length>0&&_.unshift(W.createElement("div",{className:k.separator,key:"empty-group-separator"},W.createElement(y1,null))),P.length>0||_.length>0?W.createElement(W.Fragment,null,P,_):W.createElement(Pc,{size:m,unstyled:y,className:k.nothingFound},v)}cy.displayName="@mantine/core/SelectItems";var AU=Object.defineProperty,Ch=Object.getOwnPropertySymbols,mj=Object.prototype.hasOwnProperty,gj=Object.prototype.propertyIsEnumerable,IC=(e,t,n)=>t in e?AU(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,TU=(e,t)=>{for(var n in t||(t={}))mj.call(t,n)&&IC(e,n,t[n]);if(Ch)for(var n of Ch(t))gj.call(t,n)&&IC(e,n,t[n]);return e},NU=(e,t)=>{var n={};for(var r in e)mj.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Ch)for(var r of Ch(e))t.indexOf(r)<0&&gj.call(e,r)&&(n[r]=e[r]);return n};const uy=f.forwardRef((e,t)=>{var n=e,{label:r,value:o}=n,s=NU(n,["label","value"]);return W.createElement("div",TU({ref:t},s),r||o)});uy.displayName="@mantine/core/DefaultItem";function $U(e,t){typeof e=="function"?e(t):e!=null&&(e.current=t)}function vj(...e){return t=>e.forEach(n=>$U(n,t))}function vl(...e){return f.useCallback(vj(...e),e)}const bj=f.forwardRef((e,t)=>{const{children:n,...r}=e,o=f.Children.toArray(n),s=o.find(zU);if(s){const i=s.props.children,c=o.map(d=>d===s?f.Children.count(i)>1?f.Children.only(null):f.isValidElement(i)?i.props.children:null:d);return f.createElement(x1,sr({},r,{ref:t}),f.isValidElement(i)?f.cloneElement(i,void 0,c):null)}return f.createElement(x1,sr({},r,{ref:t}),n)});bj.displayName="Slot";const x1=f.forwardRef((e,t)=>{const{children:n,...r}=e;return f.isValidElement(n)?f.cloneElement(n,{...BU(r,n.props),ref:vj(t,n.ref)}):f.Children.count(n)>1?f.Children.only(null):null});x1.displayName="SlotClone";const LU=({children:e})=>f.createElement(f.Fragment,null,e);function zU(e){return f.isValidElement(e)&&e.type===LU}function BU(e,t){const n={...t};for(const r in t){const o=e[r],s=t[r];/^on[A-Z]/.test(r)?o&&s?n[r]=(...c)=>{s(...c),o(...c)}:o&&(n[r]=o):r==="style"?n[r]={...o,...s}:r==="className"&&(n[r]=[o,s].filter(Boolean).join(" "))}return{...e,...n}}const FU=["a","button","div","h2","h3","img","label","li","nav","ol","p","span","svg","ul"],Gd=FU.reduce((e,t)=>{const n=f.forwardRef((r,o)=>{const{asChild:s,...i}=r,c=s?bj:t;return f.useEffect(()=>{window[Symbol.for("radix-ui")]=!0},[]),f.createElement(c,sr({},i,{ref:o}))});return n.displayName=`Primitive.${t}`,{...e,[t]:n}},{}),w1=globalThis!=null&&globalThis.document?f.useLayoutEffect:()=>{};function HU(e,t){return f.useReducer((n,r)=>{const o=t[n][r];return o??n},e)}const qd=e=>{const{present:t,children:n}=e,r=WU(t),o=typeof n=="function"?n({present:r.isPresent}):f.Children.only(n),s=vl(r.ref,o.ref);return typeof n=="function"||r.isPresent?f.cloneElement(o,{ref:s}):null};qd.displayName="Presence";function WU(e){const[t,n]=f.useState(),r=f.useRef({}),o=f.useRef(e),s=f.useRef("none"),i=e?"mounted":"unmounted",[c,d]=HU(i,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return f.useEffect(()=>{const p=np(r.current);s.current=c==="mounted"?p:"none"},[c]),w1(()=>{const p=r.current,h=o.current;if(h!==e){const v=s.current,b=np(p);e?d("MOUNT"):b==="none"||(p==null?void 0:p.display)==="none"?d("UNMOUNT"):d(h&&v!==b?"ANIMATION_OUT":"UNMOUNT"),o.current=e}},[e,d]),w1(()=>{if(t){const p=m=>{const b=np(r.current).includes(m.animationName);m.target===t&&b&&_i.flushSync(()=>d("ANIMATION_END"))},h=m=>{m.target===t&&(s.current=np(r.current))};return t.addEventListener("animationstart",h),t.addEventListener("animationcancel",p),t.addEventListener("animationend",p),()=>{t.removeEventListener("animationstart",h),t.removeEventListener("animationcancel",p),t.removeEventListener("animationend",p)}}else d("ANIMATION_END")},[t,d]),{isPresent:["mounted","unmountSuspended"].includes(c),ref:f.useCallback(p=>{p&&(r.current=getComputedStyle(p)),n(p)},[])}}function np(e){return(e==null?void 0:e.animationName)||"none"}function VU(e,t=[]){let n=[];function r(s,i){const c=f.createContext(i),d=n.length;n=[...n,i];function p(m){const{scope:v,children:b,...w}=m,y=(v==null?void 0:v[e][d])||c,S=f.useMemo(()=>w,Object.values(w));return f.createElement(y.Provider,{value:S},b)}function h(m,v){const b=(v==null?void 0:v[e][d])||c,w=f.useContext(b);if(w)return w;if(i!==void 0)return i;throw new Error(`\`${m}\` must be used within \`${s}\``)}return p.displayName=s+"Provider",[p,h]}const o=()=>{const s=n.map(i=>f.createContext(i));return function(c){const d=(c==null?void 0:c[e])||s;return f.useMemo(()=>({[`__scope${e}`]:{...c,[e]:d}}),[c,d])}};return o.scopeName=e,[r,UU(o,...t)]}function UU(...e){const t=e[0];if(e.length===1)return t;const n=()=>{const r=e.map(o=>({useScope:o(),scopeName:o.scopeName}));return function(s){const i=r.reduce((c,{useScope:d,scopeName:p})=>{const m=d(s)[`__scope${p}`];return{...c,...m}},{});return f.useMemo(()=>({[`__scope${t.scopeName}`]:i}),[i])}};return n.scopeName=t.scopeName,n}function Ui(e){const t=f.useRef(e);return f.useEffect(()=>{t.current=e}),f.useMemo(()=>(...n)=>{var r;return(r=t.current)===null||r===void 0?void 0:r.call(t,...n)},[])}const GU=f.createContext(void 0);function qU(e){const t=f.useContext(GU);return e||t||"ltr"}function KU(e,[t,n]){return Math.min(n,Math.max(t,e))}function Ji(e,t,{checkForDefaultPrevented:n=!0}={}){return function(o){if(e==null||e(o),n===!1||!o.defaultPrevented)return t==null?void 0:t(o)}}function XU(e,t){return f.useReducer((n,r)=>{const o=t[n][r];return o??n},e)}const yj="ScrollArea",[xj,rfe]=VU(yj),[YU,us]=xj(yj),QU=f.forwardRef((e,t)=>{const{__scopeScrollArea:n,type:r="hover",dir:o,scrollHideDelay:s=600,...i}=e,[c,d]=f.useState(null),[p,h]=f.useState(null),[m,v]=f.useState(null),[b,w]=f.useState(null),[y,S]=f.useState(null),[k,_]=f.useState(0),[P,I]=f.useState(0),[E,O]=f.useState(!1),[R,M]=f.useState(!1),D=vl(t,L=>d(L)),A=qU(o);return f.createElement(YU,{scope:n,type:r,dir:A,scrollHideDelay:s,scrollArea:c,viewport:p,onViewportChange:h,content:m,onContentChange:v,scrollbarX:b,onScrollbarXChange:w,scrollbarXEnabled:E,onScrollbarXEnabledChange:O,scrollbarY:y,onScrollbarYChange:S,scrollbarYEnabled:R,onScrollbarYEnabledChange:M,onCornerWidthChange:_,onCornerHeightChange:I},f.createElement(Gd.div,sr({dir:A},i,{ref:D,style:{position:"relative","--radix-scroll-area-corner-width":k+"px","--radix-scroll-area-corner-height":P+"px",...e.style}})))}),JU="ScrollAreaViewport",ZU=f.forwardRef((e,t)=>{const{__scopeScrollArea:n,children:r,...o}=e,s=us(JU,n),i=f.useRef(null),c=vl(t,i,s.onViewportChange);return f.createElement(f.Fragment,null,f.createElement("style",{dangerouslySetInnerHTML:{__html:"[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}"}}),f.createElement(Gd.div,sr({"data-radix-scroll-area-viewport":""},o,{ref:c,style:{overflowX:s.scrollbarXEnabled?"scroll":"hidden",overflowY:s.scrollbarYEnabled?"scroll":"hidden",...e.style}}),f.createElement("div",{ref:s.onContentChange,style:{minWidth:"100%",display:"table"}},r)))}),Xa="ScrollAreaScrollbar",eG=f.forwardRef((e,t)=>{const{forceMount:n,...r}=e,o=us(Xa,e.__scopeScrollArea),{onScrollbarXEnabledChange:s,onScrollbarYEnabledChange:i}=o,c=e.orientation==="horizontal";return f.useEffect(()=>(c?s(!0):i(!0),()=>{c?s(!1):i(!1)}),[c,s,i]),o.type==="hover"?f.createElement(tG,sr({},r,{ref:t,forceMount:n})):o.type==="scroll"?f.createElement(nG,sr({},r,{ref:t,forceMount:n})):o.type==="auto"?f.createElement(wj,sr({},r,{ref:t,forceMount:n})):o.type==="always"?f.createElement(dy,sr({},r,{ref:t})):null}),tG=f.forwardRef((e,t)=>{const{forceMount:n,...r}=e,o=us(Xa,e.__scopeScrollArea),[s,i]=f.useState(!1);return f.useEffect(()=>{const c=o.scrollArea;let d=0;if(c){const p=()=>{window.clearTimeout(d),i(!0)},h=()=>{d=window.setTimeout(()=>i(!1),o.scrollHideDelay)};return c.addEventListener("pointerenter",p),c.addEventListener("pointerleave",h),()=>{window.clearTimeout(d),c.removeEventListener("pointerenter",p),c.removeEventListener("pointerleave",h)}}},[o.scrollArea,o.scrollHideDelay]),f.createElement(qd,{present:n||s},f.createElement(wj,sr({"data-state":s?"visible":"hidden"},r,{ref:t})))}),nG=f.forwardRef((e,t)=>{const{forceMount:n,...r}=e,o=us(Xa,e.__scopeScrollArea),s=e.orientation==="horizontal",i=Wm(()=>d("SCROLL_END"),100),[c,d]=XU("hidden",{hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}});return f.useEffect(()=>{if(c==="idle"){const p=window.setTimeout(()=>d("HIDE"),o.scrollHideDelay);return()=>window.clearTimeout(p)}},[c,o.scrollHideDelay,d]),f.useEffect(()=>{const p=o.viewport,h=s?"scrollLeft":"scrollTop";if(p){let m=p[h];const v=()=>{const b=p[h];m!==b&&(d("SCROLL"),i()),m=b};return p.addEventListener("scroll",v),()=>p.removeEventListener("scroll",v)}},[o.viewport,s,d,i]),f.createElement(qd,{present:n||c!=="hidden"},f.createElement(dy,sr({"data-state":c==="hidden"?"hidden":"visible"},r,{ref:t,onPointerEnter:Ji(e.onPointerEnter,()=>d("POINTER_ENTER")),onPointerLeave:Ji(e.onPointerLeave,()=>d("POINTER_LEAVE"))})))}),wj=f.forwardRef((e,t)=>{const n=us(Xa,e.__scopeScrollArea),{forceMount:r,...o}=e,[s,i]=f.useState(!1),c=e.orientation==="horizontal",d=Wm(()=>{if(n.viewport){const p=n.viewport.offsetWidth{const{orientation:n="vertical",...r}=e,o=us(Xa,e.__scopeScrollArea),s=f.useRef(null),i=f.useRef(0),[c,d]=f.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),p=_j(c.viewport,c.content),h={...r,sizes:c,onSizesChange:d,hasThumb:p>0&&p<1,onThumbChange:v=>s.current=v,onThumbPointerUp:()=>i.current=0,onThumbPointerDown:v=>i.current=v};function m(v,b){return uG(v,i.current,c,b)}return n==="horizontal"?f.createElement(rG,sr({},h,{ref:t,onThumbPositionChange:()=>{if(o.viewport&&s.current){const v=o.viewport.scrollLeft,b=EC(v,c,o.dir);s.current.style.transform=`translate3d(${b}px, 0, 0)`}},onWheelScroll:v=>{o.viewport&&(o.viewport.scrollLeft=v)},onDragScroll:v=>{o.viewport&&(o.viewport.scrollLeft=m(v,o.dir))}})):n==="vertical"?f.createElement(oG,sr({},h,{ref:t,onThumbPositionChange:()=>{if(o.viewport&&s.current){const v=o.viewport.scrollTop,b=EC(v,c);s.current.style.transform=`translate3d(0, ${b}px, 0)`}},onWheelScroll:v=>{o.viewport&&(o.viewport.scrollTop=v)},onDragScroll:v=>{o.viewport&&(o.viewport.scrollTop=m(v))}})):null}),rG=f.forwardRef((e,t)=>{const{sizes:n,onSizesChange:r,...o}=e,s=us(Xa,e.__scopeScrollArea),[i,c]=f.useState(),d=f.useRef(null),p=vl(t,d,s.onScrollbarXChange);return f.useEffect(()=>{d.current&&c(getComputedStyle(d.current))},[d]),f.createElement(Cj,sr({"data-orientation":"horizontal"},o,{ref:p,sizes:n,style:{bottom:0,left:s.dir==="rtl"?"var(--radix-scroll-area-corner-width)":0,right:s.dir==="ltr"?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":Hm(n)+"px",...e.style},onThumbPointerDown:h=>e.onThumbPointerDown(h.x),onDragScroll:h=>e.onDragScroll(h.x),onWheelScroll:(h,m)=>{if(s.viewport){const v=s.viewport.scrollLeft+h.deltaX;e.onWheelScroll(v),jj(v,m)&&h.preventDefault()}},onResize:()=>{d.current&&s.viewport&&i&&r({content:s.viewport.scrollWidth,viewport:s.viewport.offsetWidth,scrollbar:{size:d.current.clientWidth,paddingStart:kh(i.paddingLeft),paddingEnd:kh(i.paddingRight)}})}}))}),oG=f.forwardRef((e,t)=>{const{sizes:n,onSizesChange:r,...o}=e,s=us(Xa,e.__scopeScrollArea),[i,c]=f.useState(),d=f.useRef(null),p=vl(t,d,s.onScrollbarYChange);return f.useEffect(()=>{d.current&&c(getComputedStyle(d.current))},[d]),f.createElement(Cj,sr({"data-orientation":"vertical"},o,{ref:p,sizes:n,style:{top:0,right:s.dir==="ltr"?0:void 0,left:s.dir==="rtl"?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":Hm(n)+"px",...e.style},onThumbPointerDown:h=>e.onThumbPointerDown(h.y),onDragScroll:h=>e.onDragScroll(h.y),onWheelScroll:(h,m)=>{if(s.viewport){const v=s.viewport.scrollTop+h.deltaY;e.onWheelScroll(v),jj(v,m)&&h.preventDefault()}},onResize:()=>{d.current&&s.viewport&&i&&r({content:s.viewport.scrollHeight,viewport:s.viewport.offsetHeight,scrollbar:{size:d.current.clientHeight,paddingStart:kh(i.paddingTop),paddingEnd:kh(i.paddingBottom)}})}}))}),[sG,Sj]=xj(Xa),Cj=f.forwardRef((e,t)=>{const{__scopeScrollArea:n,sizes:r,hasThumb:o,onThumbChange:s,onThumbPointerUp:i,onThumbPointerDown:c,onThumbPositionChange:d,onDragScroll:p,onWheelScroll:h,onResize:m,...v}=e,b=us(Xa,n),[w,y]=f.useState(null),S=vl(t,D=>y(D)),k=f.useRef(null),_=f.useRef(""),P=b.viewport,I=r.content-r.viewport,E=Ui(h),O=Ui(d),R=Wm(m,10);function M(D){if(k.current){const A=D.clientX-k.current.left,L=D.clientY-k.current.top;p({x:A,y:L})}}return f.useEffect(()=>{const D=A=>{const L=A.target;(w==null?void 0:w.contains(L))&&E(A,I)};return document.addEventListener("wheel",D,{passive:!1}),()=>document.removeEventListener("wheel",D,{passive:!1})},[P,w,I,E]),f.useEffect(O,[r,O]),jc(w,R),jc(b.content,R),f.createElement(sG,{scope:n,scrollbar:w,hasThumb:o,onThumbChange:Ui(s),onThumbPointerUp:Ui(i),onThumbPositionChange:O,onThumbPointerDown:Ui(c)},f.createElement(Gd.div,sr({},v,{ref:S,style:{position:"absolute",...v.style},onPointerDown:Ji(e.onPointerDown,D=>{D.button===0&&(D.target.setPointerCapture(D.pointerId),k.current=w.getBoundingClientRect(),_.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",M(D))}),onPointerMove:Ji(e.onPointerMove,M),onPointerUp:Ji(e.onPointerUp,D=>{const A=D.target;A.hasPointerCapture(D.pointerId)&&A.releasePointerCapture(D.pointerId),document.body.style.webkitUserSelect=_.current,k.current=null})})))}),S1="ScrollAreaThumb",aG=f.forwardRef((e,t)=>{const{forceMount:n,...r}=e,o=Sj(S1,e.__scopeScrollArea);return f.createElement(qd,{present:n||o.hasThumb},f.createElement(iG,sr({ref:t},r)))}),iG=f.forwardRef((e,t)=>{const{__scopeScrollArea:n,style:r,...o}=e,s=us(S1,n),i=Sj(S1,n),{onThumbPositionChange:c}=i,d=vl(t,m=>i.onThumbChange(m)),p=f.useRef(),h=Wm(()=>{p.current&&(p.current(),p.current=void 0)},100);return f.useEffect(()=>{const m=s.viewport;if(m){const v=()=>{if(h(),!p.current){const b=dG(m,c);p.current=b,c()}};return c(),m.addEventListener("scroll",v),()=>m.removeEventListener("scroll",v)}},[s.viewport,h,c]),f.createElement(Gd.div,sr({"data-state":i.hasThumb?"visible":"hidden"},o,{ref:d,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...r},onPointerDownCapture:Ji(e.onPointerDownCapture,m=>{const b=m.target.getBoundingClientRect(),w=m.clientX-b.left,y=m.clientY-b.top;i.onThumbPointerDown({x:w,y})}),onPointerUp:Ji(e.onPointerUp,i.onThumbPointerUp)}))}),kj="ScrollAreaCorner",lG=f.forwardRef((e,t)=>{const n=us(kj,e.__scopeScrollArea),r=!!(n.scrollbarX&&n.scrollbarY);return n.type!=="scroll"&&r?f.createElement(cG,sr({},e,{ref:t})):null}),cG=f.forwardRef((e,t)=>{const{__scopeScrollArea:n,...r}=e,o=us(kj,n),[s,i]=f.useState(0),[c,d]=f.useState(0),p=!!(s&&c);return jc(o.scrollbarX,()=>{var h;const m=((h=o.scrollbarX)===null||h===void 0?void 0:h.offsetHeight)||0;o.onCornerHeightChange(m),d(m)}),jc(o.scrollbarY,()=>{var h;const m=((h=o.scrollbarY)===null||h===void 0?void 0:h.offsetWidth)||0;o.onCornerWidthChange(m),i(m)}),p?f.createElement(Gd.div,sr({},r,{ref:t,style:{width:s,height:c,position:"absolute",right:o.dir==="ltr"?0:void 0,left:o.dir==="rtl"?0:void 0,bottom:0,...e.style}})):null});function kh(e){return e?parseInt(e,10):0}function _j(e,t){const n=e/t;return isNaN(n)?0:n}function Hm(e){const t=_j(e.viewport,e.content),n=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,r=(e.scrollbar.size-n)*t;return Math.max(r,18)}function uG(e,t,n,r="ltr"){const o=Hm(n),s=o/2,i=t||s,c=o-i,d=n.scrollbar.paddingStart+i,p=n.scrollbar.size-n.scrollbar.paddingEnd-c,h=n.content-n.viewport,m=r==="ltr"?[0,h]:[h*-1,0];return Pj([d,p],m)(e)}function EC(e,t,n="ltr"){const r=Hm(t),o=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,s=t.scrollbar.size-o,i=t.content-t.viewport,c=s-r,d=n==="ltr"?[0,i]:[i*-1,0],p=KU(e,d);return Pj([0,i],[0,c])(p)}function Pj(e,t){return n=>{if(e[0]===e[1]||t[0]===t[1])return t[0];const r=(t[1]-t[0])/(e[1]-e[0]);return t[0]+r*(n-e[0])}}function jj(e,t){return e>0&&e{})=>{let n={left:e.scrollLeft,top:e.scrollTop},r=0;return function o(){const s={left:e.scrollLeft,top:e.scrollTop},i=n.left!==s.left,c=n.top!==s.top;(i||c)&&t(),n=s,r=window.requestAnimationFrame(o)}(),()=>window.cancelAnimationFrame(r)};function Wm(e,t){const n=Ui(e),r=f.useRef(0);return f.useEffect(()=>()=>window.clearTimeout(r.current),[]),f.useCallback(()=>{window.clearTimeout(r.current),r.current=window.setTimeout(n,t)},[n,t])}function jc(e,t){const n=Ui(t);w1(()=>{let r=0;if(e){const o=new ResizeObserver(()=>{cancelAnimationFrame(r),r=window.requestAnimationFrame(n)});return o.observe(e),()=>{window.cancelAnimationFrame(r),o.unobserve(e)}}},[e,n])}const fG=QU,pG=ZU,OC=eG,RC=aG,hG=lG;var mG=so((e,{scrollbarSize:t,offsetScrollbars:n,scrollbarHovered:r,hidden:o})=>({root:{overflow:"hidden"},viewport:{width:"100%",height:"100%",paddingRight:n?Ue(t):void 0,paddingBottom:n?Ue(t):void 0},scrollbar:{display:o?"none":"flex",userSelect:"none",touchAction:"none",boxSizing:"border-box",padding:`calc(${Ue(t)} / 5)`,transition:"background-color 150ms ease, opacity 150ms ease","&:hover":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[8]:e.colors.gray[0],[`& .${NS("thumb")}`]:{backgroundColor:e.colorScheme==="dark"?e.fn.rgba(e.white,.5):e.fn.rgba(e.black,.5)}},'&[data-orientation="vertical"]':{width:Ue(t)},'&[data-orientation="horizontal"]':{flexDirection:"column",height:Ue(t)},'&[data-state="hidden"]':{display:"none",opacity:0}},thumb:{ref:NS("thumb"),flex:1,backgroundColor:e.colorScheme==="dark"?e.fn.rgba(e.white,.4):e.fn.rgba(e.black,.4),borderRadius:Ue(t),position:"relative",transition:"background-color 150ms ease",display:o?"none":void 0,overflow:"hidden","&::before":{content:'""',position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",width:"100%",height:"100%",minWidth:Ue(44),minHeight:Ue(44)}},corner:{backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[0],transition:"opacity 150ms ease",opacity:r?1:0,display:o?"none":void 0}}));const gG=mG;var vG=Object.defineProperty,bG=Object.defineProperties,yG=Object.getOwnPropertyDescriptors,_h=Object.getOwnPropertySymbols,Ij=Object.prototype.hasOwnProperty,Ej=Object.prototype.propertyIsEnumerable,MC=(e,t,n)=>t in e?vG(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,C1=(e,t)=>{for(var n in t||(t={}))Ij.call(t,n)&&MC(e,n,t[n]);if(_h)for(var n of _h(t))Ej.call(t,n)&&MC(e,n,t[n]);return e},Oj=(e,t)=>bG(e,yG(t)),Rj=(e,t)=>{var n={};for(var r in e)Ij.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&_h)for(var r of _h(e))t.indexOf(r)<0&&Ej.call(e,r)&&(n[r]=e[r]);return n};const Mj={scrollbarSize:12,scrollHideDelay:1e3,type:"hover",offsetScrollbars:!1},Vm=f.forwardRef((e,t)=>{const n=Cr("ScrollArea",Mj,e),{children:r,className:o,classNames:s,styles:i,scrollbarSize:c,scrollHideDelay:d,type:p,dir:h,offsetScrollbars:m,viewportRef:v,onScrollPositionChange:b,unstyled:w,variant:y,viewportProps:S}=n,k=Rj(n,["children","className","classNames","styles","scrollbarSize","scrollHideDelay","type","dir","offsetScrollbars","viewportRef","onScrollPositionChange","unstyled","variant","viewportProps"]),[_,P]=f.useState(!1),I=qa(),{classes:E,cx:O}=gG({scrollbarSize:c,offsetScrollbars:m,scrollbarHovered:_,hidden:p==="never"},{name:"ScrollArea",classNames:s,styles:i,unstyled:w,variant:y});return W.createElement(fG,{type:p==="never"?"always":p,scrollHideDelay:d,dir:h||I.dir,ref:t,asChild:!0},W.createElement(Eo,C1({className:O(E.root,o)},k),W.createElement(pG,Oj(C1({},S),{className:E.viewport,ref:v,onScroll:typeof b=="function"?({currentTarget:R})=>b({x:R.scrollLeft,y:R.scrollTop}):void 0}),r),W.createElement(OC,{orientation:"horizontal",className:E.scrollbar,forceMount:!0,onMouseEnter:()=>P(!0),onMouseLeave:()=>P(!1)},W.createElement(RC,{className:E.thumb})),W.createElement(OC,{orientation:"vertical",className:E.scrollbar,forceMount:!0,onMouseEnter:()=>P(!0),onMouseLeave:()=>P(!1)},W.createElement(RC,{className:E.thumb})),W.createElement(hG,{className:E.corner})))}),Dj=f.forwardRef((e,t)=>{const n=Cr("ScrollAreaAutosize",Mj,e),{children:r,classNames:o,styles:s,scrollbarSize:i,scrollHideDelay:c,type:d,dir:p,offsetScrollbars:h,viewportRef:m,onScrollPositionChange:v,unstyled:b,sx:w,variant:y,viewportProps:S}=n,k=Rj(n,["children","classNames","styles","scrollbarSize","scrollHideDelay","type","dir","offsetScrollbars","viewportRef","onScrollPositionChange","unstyled","sx","variant","viewportProps"]);return W.createElement(Eo,Oj(C1({},k),{ref:t,sx:[{display:"flex"},...xP(w)]}),W.createElement(Eo,{sx:{display:"flex",flexDirection:"column",flex:1}},W.createElement(Vm,{classNames:o,styles:s,scrollHideDelay:c,scrollbarSize:i,type:d,dir:p,offsetScrollbars:h,viewportRef:m,onScrollPositionChange:v,unstyled:b,variant:y,viewportProps:S},r)))});Dj.displayName="@mantine/core/ScrollAreaAutosize";Vm.displayName="@mantine/core/ScrollArea";Vm.Autosize=Dj;const Aj=Vm;var xG=Object.defineProperty,wG=Object.defineProperties,SG=Object.getOwnPropertyDescriptors,Ph=Object.getOwnPropertySymbols,Tj=Object.prototype.hasOwnProperty,Nj=Object.prototype.propertyIsEnumerable,DC=(e,t,n)=>t in e?xG(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,AC=(e,t)=>{for(var n in t||(t={}))Tj.call(t,n)&&DC(e,n,t[n]);if(Ph)for(var n of Ph(t))Nj.call(t,n)&&DC(e,n,t[n]);return e},CG=(e,t)=>wG(e,SG(t)),kG=(e,t)=>{var n={};for(var r in e)Tj.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Ph)for(var r of Ph(e))t.indexOf(r)<0&&Nj.call(e,r)&&(n[r]=e[r]);return n};const Um=f.forwardRef((e,t)=>{var n=e,{style:r}=n,o=kG(n,["style"]);return W.createElement(Aj,CG(AC({},o),{style:AC({width:"100%"},r),viewportProps:{tabIndex:-1},viewportRef:t}),o.children)});Um.displayName="@mantine/core/SelectScrollArea";var _G=so(()=>({dropdown:{},itemsWrapper:{padding:Ue(4),display:"flex",width:"100%",boxSizing:"border-box"}}));const PG=_G;function Gc(e){return e.split("-")[1]}function fy(e){return e==="y"?"height":"width"}function _s(e){return e.split("-")[0]}function Ii(e){return["top","bottom"].includes(_s(e))?"x":"y"}function TC(e,t,n){let{reference:r,floating:o}=e;const s=r.x+r.width/2-o.width/2,i=r.y+r.height/2-o.height/2,c=Ii(t),d=fy(c),p=r[d]/2-o[d]/2,h=c==="x";let m;switch(_s(t)){case"top":m={x:s,y:r.y-o.height};break;case"bottom":m={x:s,y:r.y+r.height};break;case"right":m={x:r.x+r.width,y:i};break;case"left":m={x:r.x-o.width,y:i};break;default:m={x:r.x,y:r.y}}switch(Gc(t)){case"start":m[c]-=p*(n&&h?-1:1);break;case"end":m[c]+=p*(n&&h?-1:1)}return m}const jG=async(e,t,n)=>{const{placement:r="bottom",strategy:o="absolute",middleware:s=[],platform:i}=n,c=s.filter(Boolean),d=await(i.isRTL==null?void 0:i.isRTL(t));let p=await i.getElementRects({reference:e,floating:t,strategy:o}),{x:h,y:m}=TC(p,r,d),v=r,b={},w=0;for(let y=0;y({name:"arrow",options:e,async fn(t){const{x:n,y:r,placement:o,rects:s,platform:i,elements:c}=t,{element:d,padding:p=0}=Fa(e,t)||{};if(d==null)return{};const h=py(p),m={x:n,y:r},v=Ii(o),b=fy(v),w=await i.getDimensions(d),y=v==="y",S=y?"top":"left",k=y?"bottom":"right",_=y?"clientHeight":"clientWidth",P=s.reference[b]+s.reference[v]-m[v]-s.floating[b],I=m[v]-s.reference[v],E=await(i.getOffsetParent==null?void 0:i.getOffsetParent(d));let O=E?E[_]:0;O&&await(i.isElement==null?void 0:i.isElement(E))||(O=c.floating[_]||s.floating[b]);const R=P/2-I/2,M=O/2-w[b]/2-1,D=Si(h[S],M),A=Si(h[k],M),L=D,Q=O-w[b]-A,F=O/2-w[b]/2+R,V=k1(L,F,Q),q=Gc(o)!=null&&F!=V&&s.reference[b]/2-(Fe.concat(t,t+"-start",t+"-end"),[]);const EG={left:"right",right:"left",bottom:"top",top:"bottom"};function jh(e){return e.replace(/left|right|bottom|top/g,t=>EG[t])}function OG(e,t,n){n===void 0&&(n=!1);const r=Gc(e),o=Ii(e),s=fy(o);let i=o==="x"?r===(n?"end":"start")?"right":"left":r==="start"?"bottom":"top";return t.reference[s]>t.floating[s]&&(i=jh(i)),{main:i,cross:jh(i)}}const RG={start:"end",end:"start"};function Q0(e){return e.replace(/start|end/g,t=>RG[t])}const MG=function(e){return e===void 0&&(e={}),{name:"flip",options:e,async fn(t){var n;const{placement:r,middlewareData:o,rects:s,initialPlacement:i,platform:c,elements:d}=t,{mainAxis:p=!0,crossAxis:h=!0,fallbackPlacements:m,fallbackStrategy:v="bestFit",fallbackAxisSideDirection:b="none",flipAlignment:w=!0,...y}=Fa(e,t),S=_s(r),k=_s(i)===i,_=await(c.isRTL==null?void 0:c.isRTL(d.floating)),P=m||(k||!w?[jh(i)]:function(L){const Q=jh(L);return[Q0(L),Q,Q0(Q)]}(i));m||b==="none"||P.push(...function(L,Q,F,V){const q=Gc(L);let G=function(T,z,$){const Y=["left","right"],ae=["right","left"],fe=["top","bottom"],ie=["bottom","top"];switch(T){case"top":case"bottom":return $?z?ae:Y:z?Y:ae;case"left":case"right":return z?fe:ie;default:return[]}}(_s(L),F==="start",V);return q&&(G=G.map(T=>T+"-"+q),Q&&(G=G.concat(G.map(Q0)))),G}(i,w,b,_));const I=[i,...P],E=await hy(t,y),O=[];let R=((n=o.flip)==null?void 0:n.overflows)||[];if(p&&O.push(E[S]),h){const{main:L,cross:Q}=OG(r,s,_);O.push(E[L],E[Q])}if(R=[...R,{placement:r,overflows:O}],!O.every(L=>L<=0)){var M,D;const L=(((M=o.flip)==null?void 0:M.index)||0)+1,Q=I[L];if(Q)return{data:{index:L,overflows:R},reset:{placement:Q}};let F=(D=R.filter(V=>V.overflows[0]<=0).sort((V,q)=>V.overflows[1]-q.overflows[1])[0])==null?void 0:D.placement;if(!F)switch(v){case"bestFit":{var A;const V=(A=R.map(q=>[q.placement,q.overflows.filter(G=>G>0).reduce((G,T)=>G+T,0)]).sort((q,G)=>q[1]-G[1])[0])==null?void 0:A[0];V&&(F=V);break}case"initialPlacement":F=i}if(r!==F)return{reset:{placement:F}}}return{}}}};function $C(e){const t=Si(...e.map(r=>r.left)),n=Si(...e.map(r=>r.top));return{x:t,y:n,width:Ks(...e.map(r=>r.right))-t,height:Ks(...e.map(r=>r.bottom))-n}}const DG=function(e){return e===void 0&&(e={}),{name:"inline",options:e,async fn(t){const{placement:n,elements:r,rects:o,platform:s,strategy:i}=t,{padding:c=2,x:d,y:p}=Fa(e,t),h=Array.from(await(s.getClientRects==null?void 0:s.getClientRects(r.reference))||[]),m=function(y){const S=y.slice().sort((P,I)=>P.y-I.y),k=[];let _=null;for(let P=0;P_.height/2?k.push([I]):k[k.length-1].push(I),_=I}return k.map(P=>Ic($C(P)))}(h),v=Ic($C(h)),b=py(c),w=await s.getElementRects({reference:{getBoundingClientRect:function(){if(m.length===2&&m[0].left>m[1].right&&d!=null&&p!=null)return m.find(y=>d>y.left-b.left&&dy.top-b.top&&p=2){if(Ii(n)==="x"){const E=m[0],O=m[m.length-1],R=_s(n)==="top",M=E.top,D=O.bottom,A=R?E.left:O.left,L=R?E.right:O.right;return{top:M,bottom:D,left:A,right:L,width:L-A,height:D-M,x:A,y:M}}const y=_s(n)==="left",S=Ks(...m.map(E=>E.right)),k=Si(...m.map(E=>E.left)),_=m.filter(E=>y?E.left===k:E.right===S),P=_[0].top,I=_[_.length-1].bottom;return{top:P,bottom:I,left:k,right:S,width:S-k,height:I-P,x:k,y:P}}return v}},floating:r.floating,strategy:i});return o.reference.x!==w.reference.x||o.reference.y!==w.reference.y||o.reference.width!==w.reference.width||o.reference.height!==w.reference.height?{reset:{rects:w}}:{}}}},AG=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){const{x:n,y:r}=t,o=await async function(s,i){const{placement:c,platform:d,elements:p}=s,h=await(d.isRTL==null?void 0:d.isRTL(p.floating)),m=_s(c),v=Gc(c),b=Ii(c)==="x",w=["left","top"].includes(m)?-1:1,y=h&&b?-1:1,S=Fa(i,s);let{mainAxis:k,crossAxis:_,alignmentAxis:P}=typeof S=="number"?{mainAxis:S,crossAxis:0,alignmentAxis:null}:{mainAxis:0,crossAxis:0,alignmentAxis:null,...S};return v&&typeof P=="number"&&(_=v==="end"?-1*P:P),b?{x:_*y,y:k*w}:{x:k*w,y:_*y}}(t,e);return{x:n+o.x,y:r+o.y,data:o}}}};function $j(e){return e==="x"?"y":"x"}const TG=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:r,placement:o}=t,{mainAxis:s=!0,crossAxis:i=!1,limiter:c={fn:S=>{let{x:k,y:_}=S;return{x:k,y:_}}},...d}=Fa(e,t),p={x:n,y:r},h=await hy(t,d),m=Ii(_s(o)),v=$j(m);let b=p[m],w=p[v];if(s){const S=m==="y"?"bottom":"right";b=k1(b+h[m==="y"?"top":"left"],b,b-h[S])}if(i){const S=v==="y"?"bottom":"right";w=k1(w+h[v==="y"?"top":"left"],w,w-h[S])}const y=c.fn({...t,[m]:b,[v]:w});return{...y,data:{x:y.x-n,y:y.y-r}}}}},NG=function(e){return e===void 0&&(e={}),{options:e,fn(t){const{x:n,y:r,placement:o,rects:s,middlewareData:i}=t,{offset:c=0,mainAxis:d=!0,crossAxis:p=!0}=Fa(e,t),h={x:n,y:r},m=Ii(o),v=$j(m);let b=h[m],w=h[v];const y=Fa(c,t),S=typeof y=="number"?{mainAxis:y,crossAxis:0}:{mainAxis:0,crossAxis:0,...y};if(d){const P=m==="y"?"height":"width",I=s.reference[m]-s.floating[P]+S.mainAxis,E=s.reference[m]+s.reference[P]-S.mainAxis;bE&&(b=E)}if(p){var k,_;const P=m==="y"?"width":"height",I=["top","left"].includes(_s(o)),E=s.reference[v]-s.floating[P]+(I&&((k=i.offset)==null?void 0:k[v])||0)+(I?0:S.crossAxis),O=s.reference[v]+s.reference[P]+(I?0:((_=i.offset)==null?void 0:_[v])||0)-(I?S.crossAxis:0);wO&&(w=O)}return{[m]:b,[v]:w}}}},$G=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){const{placement:n,rects:r,platform:o,elements:s}=t,{apply:i=()=>{},...c}=Fa(e,t),d=await hy(t,c),p=_s(n),h=Gc(n),m=Ii(n)==="x",{width:v,height:b}=r.floating;let w,y;p==="top"||p==="bottom"?(w=p,y=h===(await(o.isRTL==null?void 0:o.isRTL(s.floating))?"start":"end")?"left":"right"):(y=p,w=h==="end"?"top":"bottom");const S=b-d[w],k=v-d[y],_=!t.middlewareData.shift;let P=S,I=k;if(m){const O=v-d.left-d.right;I=h||_?Si(k,O):O}else{const O=b-d.top-d.bottom;P=h||_?Si(S,O):O}if(_&&!h){const O=Ks(d.left,0),R=Ks(d.right,0),M=Ks(d.top,0),D=Ks(d.bottom,0);m?I=v-2*(O!==0||R!==0?O+R:Ks(d.left,d.right)):P=b-2*(M!==0||D!==0?M+D:Ks(d.top,d.bottom))}await i({...t,availableWidth:I,availableHeight:P});const E=await o.getDimensions(s.floating);return v!==E.width||b!==E.height?{reset:{rects:!0}}:{}}}};function zo(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function oa(e){return zo(e).getComputedStyle(e)}function Lj(e){return e instanceof zo(e).Node}function Ci(e){return Lj(e)?(e.nodeName||"").toLowerCase():"#document"}function Os(e){return e instanceof HTMLElement||e instanceof zo(e).HTMLElement}function LC(e){return typeof ShadowRoot<"u"&&(e instanceof zo(e).ShadowRoot||e instanceof ShadowRoot)}function md(e){const{overflow:t,overflowX:n,overflowY:r,display:o}=oa(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&!["inline","contents"].includes(o)}function LG(e){return["table","td","th"].includes(Ci(e))}function _1(e){const t=my(),n=oa(e);return n.transform!=="none"||n.perspective!=="none"||!!n.containerType&&n.containerType!=="normal"||!t&&!!n.backdropFilter&&n.backdropFilter!=="none"||!t&&!!n.filter&&n.filter!=="none"||["transform","perspective","filter"].some(r=>(n.willChange||"").includes(r))||["paint","layout","strict","content"].some(r=>(n.contain||"").includes(r))}function my(){return!(typeof CSS>"u"||!CSS.supports)&&CSS.supports("-webkit-backdrop-filter","none")}function Gm(e){return["html","body","#document"].includes(Ci(e))}const P1=Math.min,pc=Math.max,Ih=Math.round,rp=Math.floor,ki=e=>({x:e,y:e});function zj(e){const t=oa(e);let n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;const o=Os(e),s=o?e.offsetWidth:n,i=o?e.offsetHeight:r,c=Ih(n)!==s||Ih(r)!==i;return c&&(n=s,r=i),{width:n,height:r,$:c}}function Oa(e){return e instanceof Element||e instanceof zo(e).Element}function gy(e){return Oa(e)?e:e.contextElement}function hc(e){const t=gy(e);if(!Os(t))return ki(1);const n=t.getBoundingClientRect(),{width:r,height:o,$:s}=zj(t);let i=(s?Ih(n.width):n.width)/r,c=(s?Ih(n.height):n.height)/o;return i&&Number.isFinite(i)||(i=1),c&&Number.isFinite(c)||(c=1),{x:i,y:c}}const zG=ki(0);function Bj(e){const t=zo(e);return my()&&t.visualViewport?{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}:zG}function cl(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);const o=e.getBoundingClientRect(),s=gy(e);let i=ki(1);t&&(r?Oa(r)&&(i=hc(r)):i=hc(e));const c=function(v,b,w){return b===void 0&&(b=!1),!(!w||b&&w!==zo(v))&&b}(s,n,r)?Bj(s):ki(0);let d=(o.left+c.x)/i.x,p=(o.top+c.y)/i.y,h=o.width/i.x,m=o.height/i.y;if(s){const v=zo(s),b=r&&Oa(r)?zo(r):r;let w=v.frameElement;for(;w&&r&&b!==v;){const y=hc(w),S=w.getBoundingClientRect(),k=getComputedStyle(w),_=S.left+(w.clientLeft+parseFloat(k.paddingLeft))*y.x,P=S.top+(w.clientTop+parseFloat(k.paddingTop))*y.y;d*=y.x,p*=y.y,h*=y.x,m*=y.y,d+=_,p+=P,w=zo(w).frameElement}}return Ic({width:h,height:m,x:d,y:p})}function qm(e){return Oa(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Ra(e){var t;return(t=(Lj(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function Fj(e){return cl(Ra(e)).left+qm(e).scrollLeft}function Ec(e){if(Ci(e)==="html")return e;const t=e.assignedSlot||e.parentNode||LC(e)&&e.host||Ra(e);return LC(t)?t.host:t}function Hj(e){const t=Ec(e);return Gm(t)?e.ownerDocument?e.ownerDocument.body:e.body:Os(t)&&md(t)?t:Hj(t)}function Eh(e,t){var n;t===void 0&&(t=[]);const r=Hj(e),o=r===((n=e.ownerDocument)==null?void 0:n.body),s=zo(r);return o?t.concat(s,s.visualViewport||[],md(r)?r:[]):t.concat(r,Eh(r))}function zC(e,t,n){let r;if(t==="viewport")r=function(o,s){const i=zo(o),c=Ra(o),d=i.visualViewport;let p=c.clientWidth,h=c.clientHeight,m=0,v=0;if(d){p=d.width,h=d.height;const b=my();(!b||b&&s==="fixed")&&(m=d.offsetLeft,v=d.offsetTop)}return{width:p,height:h,x:m,y:v}}(e,n);else if(t==="document")r=function(o){const s=Ra(o),i=qm(o),c=o.ownerDocument.body,d=pc(s.scrollWidth,s.clientWidth,c.scrollWidth,c.clientWidth),p=pc(s.scrollHeight,s.clientHeight,c.scrollHeight,c.clientHeight);let h=-i.scrollLeft+Fj(o);const m=-i.scrollTop;return oa(c).direction==="rtl"&&(h+=pc(s.clientWidth,c.clientWidth)-d),{width:d,height:p,x:h,y:m}}(Ra(e));else if(Oa(t))r=function(o,s){const i=cl(o,!0,s==="fixed"),c=i.top+o.clientTop,d=i.left+o.clientLeft,p=Os(o)?hc(o):ki(1);return{width:o.clientWidth*p.x,height:o.clientHeight*p.y,x:d*p.x,y:c*p.y}}(t,n);else{const o=Bj(e);r={...t,x:t.x-o.x,y:t.y-o.y}}return Ic(r)}function Wj(e,t){const n=Ec(e);return!(n===t||!Oa(n)||Gm(n))&&(oa(n).position==="fixed"||Wj(n,t))}function BG(e,t,n){const r=Os(t),o=Ra(t),s=n==="fixed",i=cl(e,!0,s,t);let c={scrollLeft:0,scrollTop:0};const d=ki(0);if(r||!r&&!s)if((Ci(t)!=="body"||md(o))&&(c=qm(t)),Os(t)){const p=cl(t,!0,s,t);d.x=p.x+t.clientLeft,d.y=p.y+t.clientTop}else o&&(d.x=Fj(o));return{x:i.left+c.scrollLeft-d.x,y:i.top+c.scrollTop-d.y,width:i.width,height:i.height}}function BC(e,t){return Os(e)&&oa(e).position!=="fixed"?t?t(e):e.offsetParent:null}function FC(e,t){const n=zo(e);if(!Os(e))return n;let r=BC(e,t);for(;r&&LG(r)&&oa(r).position==="static";)r=BC(r,t);return r&&(Ci(r)==="html"||Ci(r)==="body"&&oa(r).position==="static"&&!_1(r))?n:r||function(o){let s=Ec(o);for(;Os(s)&&!Gm(s);){if(_1(s))return s;s=Ec(s)}return null}(e)||n}const FG={convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{rect:t,offsetParent:n,strategy:r}=e;const o=Os(n),s=Ra(n);if(n===s)return t;let i={scrollLeft:0,scrollTop:0},c=ki(1);const d=ki(0);if((o||!o&&r!=="fixed")&&((Ci(n)!=="body"||md(s))&&(i=qm(n)),Os(n))){const p=cl(n);c=hc(n),d.x=p.x+n.clientLeft,d.y=p.y+n.clientTop}return{width:t.width*c.x,height:t.height*c.y,x:t.x*c.x-i.scrollLeft*c.x+d.x,y:t.y*c.y-i.scrollTop*c.y+d.y}},getDocumentElement:Ra,getClippingRect:function(e){let{element:t,boundary:n,rootBoundary:r,strategy:o}=e;const s=[...n==="clippingAncestors"?function(d,p){const h=p.get(d);if(h)return h;let m=Eh(d).filter(y=>Oa(y)&&Ci(y)!=="body"),v=null;const b=oa(d).position==="fixed";let w=b?Ec(d):d;for(;Oa(w)&&!Gm(w);){const y=oa(w),S=_1(w);S||y.position!=="fixed"||(v=null),(b?!S&&!v:!S&&y.position==="static"&&v&&["absolute","fixed"].includes(v.position)||md(w)&&!S&&Wj(d,w))?m=m.filter(k=>k!==w):v=y,w=Ec(w)}return p.set(d,m),m}(t,this._c):[].concat(n),r],i=s[0],c=s.reduce((d,p)=>{const h=zC(t,p,o);return d.top=pc(h.top,d.top),d.right=P1(h.right,d.right),d.bottom=P1(h.bottom,d.bottom),d.left=pc(h.left,d.left),d},zC(t,i,o));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}},getOffsetParent:FC,getElementRects:async function(e){let{reference:t,floating:n,strategy:r}=e;const o=this.getOffsetParent||FC,s=this.getDimensions;return{reference:BG(t,await o(n),r),floating:{x:0,y:0,...await s(n)}}},getClientRects:function(e){return Array.from(e.getClientRects())},getDimensions:function(e){return zj(e)},getScale:hc,isElement:Oa,isRTL:function(e){return getComputedStyle(e).direction==="rtl"}};function HG(e,t,n,r){r===void 0&&(r={});const{ancestorScroll:o=!0,ancestorResize:s=!0,elementResize:i=typeof ResizeObserver=="function",layoutShift:c=typeof IntersectionObserver=="function",animationFrame:d=!1}=r,p=gy(e),h=o||s?[...p?Eh(p):[],...Eh(t)]:[];h.forEach(S=>{o&&S.addEventListener("scroll",n,{passive:!0}),s&&S.addEventListener("resize",n)});const m=p&&c?function(S,k){let _,P=null;const I=Ra(S);function E(){clearTimeout(_),P&&P.disconnect(),P=null}return function O(R,M){R===void 0&&(R=!1),M===void 0&&(M=1),E();const{left:D,top:A,width:L,height:Q}=S.getBoundingClientRect();if(R||k(),!L||!Q)return;const F={rootMargin:-rp(A)+"px "+-rp(I.clientWidth-(D+L))+"px "+-rp(I.clientHeight-(A+Q))+"px "+-rp(D)+"px",threshold:pc(0,P1(1,M))||1};let V=!0;function q(G){const T=G[0].intersectionRatio;if(T!==M){if(!V)return O();T?O(!1,T):_=setTimeout(()=>{O(!1,1e-7)},100)}V=!1}try{P=new IntersectionObserver(q,{...F,root:I.ownerDocument})}catch{P=new IntersectionObserver(q,F)}P.observe(S)}(!0),E}(p,n):null;let v,b=-1,w=null;i&&(w=new ResizeObserver(S=>{let[k]=S;k&&k.target===p&&w&&(w.unobserve(t),cancelAnimationFrame(b),b=requestAnimationFrame(()=>{w&&w.observe(t)})),n()}),p&&!d&&w.observe(p),w.observe(t));let y=d?cl(e):null;return d&&function S(){const k=cl(e);!y||k.x===y.x&&k.y===y.y&&k.width===y.width&&k.height===y.height||n(),y=k,v=requestAnimationFrame(S)}(),n(),()=>{h.forEach(S=>{o&&S.removeEventListener("scroll",n),s&&S.removeEventListener("resize",n)}),m&&m(),w&&w.disconnect(),w=null,d&&cancelAnimationFrame(v)}}const WG=(e,t,n)=>{const r=new Map,o={platform:FG,...n},s={...o.platform,_c:r};return jG(e,t,{...o,platform:s})},VG=e=>{const{element:t,padding:n}=e;function r(o){return Object.prototype.hasOwnProperty.call(o,"current")}return{name:"arrow",options:e,fn(o){return r(t)?t.current!=null?NC({element:t.current,padding:n}).fn(o):{}:t?NC({element:t,padding:n}).fn(o):{}}}};var Lp=typeof document<"u"?f.useLayoutEffect:f.useEffect;function Oh(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let n,r,o;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(n=e.length,n!=t.length)return!1;for(r=n;r--!==0;)if(!Oh(e[r],t[r]))return!1;return!0}if(o=Object.keys(e),n=o.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!Object.prototype.hasOwnProperty.call(t,o[r]))return!1;for(r=n;r--!==0;){const s=o[r];if(!(s==="_owner"&&e.$$typeof)&&!Oh(e[s],t[s]))return!1}return!0}return e!==e&&t!==t}function HC(e){const t=f.useRef(e);return Lp(()=>{t.current=e}),t}function UG(e){e===void 0&&(e={});const{placement:t="bottom",strategy:n="absolute",middleware:r=[],platform:o,whileElementsMounted:s,open:i}=e,[c,d]=f.useState({x:null,y:null,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[p,h]=f.useState(r);Oh(p,r)||h(r);const m=f.useRef(null),v=f.useRef(null),b=f.useRef(c),w=HC(s),y=HC(o),[S,k]=f.useState(null),[_,P]=f.useState(null),I=f.useCallback(A=>{m.current!==A&&(m.current=A,k(A))},[]),E=f.useCallback(A=>{v.current!==A&&(v.current=A,P(A))},[]),O=f.useCallback(()=>{if(!m.current||!v.current)return;const A={placement:t,strategy:n,middleware:p};y.current&&(A.platform=y.current),WG(m.current,v.current,A).then(L=>{const Q={...L,isPositioned:!0};R.current&&!Oh(b.current,Q)&&(b.current=Q,_i.flushSync(()=>{d(Q)}))})},[p,t,n,y]);Lp(()=>{i===!1&&b.current.isPositioned&&(b.current.isPositioned=!1,d(A=>({...A,isPositioned:!1})))},[i]);const R=f.useRef(!1);Lp(()=>(R.current=!0,()=>{R.current=!1}),[]),Lp(()=>{if(S&&_){if(w.current)return w.current(S,_,O);O()}},[S,_,O,w]);const M=f.useMemo(()=>({reference:m,floating:v,setReference:I,setFloating:E}),[I,E]),D=f.useMemo(()=>({reference:S,floating:_}),[S,_]);return f.useMemo(()=>({...c,update:O,refs:M,elements:D,reference:I,floating:E}),[c,O,M,D,I,E])}var GG=typeof document<"u"?f.useLayoutEffect:f.useEffect;function qG(){const e=new Map;return{emit(t,n){var r;(r=e.get(t))==null||r.forEach(o=>o(n))},on(t,n){e.set(t,[...e.get(t)||[],n])},off(t,n){e.set(t,(e.get(t)||[]).filter(r=>r!==n))}}}const KG=f.createContext(null),XG=()=>f.useContext(KG);function YG(e){return(e==null?void 0:e.ownerDocument)||document}function QG(e){return YG(e).defaultView||window}function op(e){return e?e instanceof QG(e).Element:!1}const JG=eb["useInsertionEffect".toString()],ZG=JG||(e=>e());function eq(e){const t=f.useRef(()=>{});return ZG(()=>{t.current=e}),f.useCallback(function(){for(var n=arguments.length,r=new Array(n),o=0;oqG())[0],[p,h]=f.useState(null),m=f.useCallback(k=>{const _=op(k)?{getBoundingClientRect:()=>k.getBoundingClientRect(),contextElement:k}:k;o.refs.setReference(_)},[o.refs]),v=f.useCallback(k=>{(op(k)||k===null)&&(i.current=k,h(k)),(op(o.refs.reference.current)||o.refs.reference.current===null||k!==null&&!op(k))&&o.refs.setReference(k)},[o.refs]),b=f.useMemo(()=>({...o.refs,setReference:v,setPositionReference:m,domReference:i}),[o.refs,v,m]),w=f.useMemo(()=>({...o.elements,domReference:p}),[o.elements,p]),y=eq(n),S=f.useMemo(()=>({...o,refs:b,elements:w,dataRef:c,nodeId:r,events:d,open:t,onOpenChange:y}),[o,r,d,t,y,b,w]);return GG(()=>{const k=s==null?void 0:s.nodesRef.current.find(_=>_.id===r);k&&(k.context=S)}),f.useMemo(()=>({...o,context:S,refs:b,reference:v,positionReference:m}),[o,b,S,v,m])}function nq({opened:e,floating:t,position:n,positionDependencies:r}){const[o,s]=f.useState(0);f.useEffect(()=>{if(t.refs.reference.current&&t.refs.floating.current)return HG(t.refs.reference.current,t.refs.floating.current,t.update)},[t.refs.reference.current,t.refs.floating.current,e,o,n]),ks(()=>{t.update()},r),ks(()=>{s(i=>i+1)},[e])}function rq(e){const t=[AG(e.offset)];return e.middlewares.shift&&t.push(TG({limiter:NG()})),e.middlewares.flip&&t.push(MG()),e.middlewares.inline&&t.push(DG()),t.push(VG({element:e.arrowRef,padding:e.arrowOffset})),t}function oq(e){const[t,n]=hd({value:e.opened,defaultValue:e.defaultOpened,finalValue:!1,onChange:e.onChange}),r=()=>{var i;(i=e.onClose)==null||i.call(e),n(!1)},o=()=>{var i,c;t?((i=e.onClose)==null||i.call(e),n(!1)):((c=e.onOpen)==null||c.call(e),n(!0))},s=tq({placement:e.position,middleware:[...rq(e),...e.width==="target"?[$G({apply({rects:i}){var c,d;Object.assign((d=(c=s.refs.floating.current)==null?void 0:c.style)!=null?d:{},{width:`${i.reference.width}px`})}})]:[]]});return nq({opened:e.opened,position:e.position,positionDependencies:e.positionDependencies,floating:s}),ks(()=>{var i;(i=e.onPositionChange)==null||i.call(e,s.placement)},[s.placement]),ks(()=>{var i,c;e.opened?(c=e.onOpen)==null||c.call(e):(i=e.onClose)==null||i.call(e)},[e.opened]),{floating:s,controlled:typeof e.opened=="boolean",opened:t,onClose:r,onToggle:o}}const Vj={context:"Popover component was not found in the tree",children:"Popover.Target component children should be an element or a component that accepts ref. Fragments, strings, numbers and other primitive values are not supported"},[sq,Uj]=GH(Vj.context);var aq=Object.defineProperty,iq=Object.defineProperties,lq=Object.getOwnPropertyDescriptors,Rh=Object.getOwnPropertySymbols,Gj=Object.prototype.hasOwnProperty,qj=Object.prototype.propertyIsEnumerable,WC=(e,t,n)=>t in e?aq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,sp=(e,t)=>{for(var n in t||(t={}))Gj.call(t,n)&&WC(e,n,t[n]);if(Rh)for(var n of Rh(t))qj.call(t,n)&&WC(e,n,t[n]);return e},cq=(e,t)=>iq(e,lq(t)),uq=(e,t)=>{var n={};for(var r in e)Gj.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Rh)for(var r of Rh(e))t.indexOf(r)<0&&qj.call(e,r)&&(n[r]=e[r]);return n};const dq={refProp:"ref",popupType:"dialog"},Kj=f.forwardRef((e,t)=>{const n=Cr("PopoverTarget",dq,e),{children:r,refProp:o,popupType:s}=n,i=uq(n,["children","refProp","popupType"]);if(!SP(r))throw new Error(Vj.children);const c=i,d=Uj(),p=Ud(d.reference,r.ref,t),h=d.withRoles?{"aria-haspopup":s,"aria-expanded":d.opened,"aria-controls":d.getDropdownId(),id:d.getTargetId()}:{};return f.cloneElement(r,sp(cq(sp(sp(sp({},c),h),d.targetProps),{className:kP(d.targetProps.className,c.className,r.props.className),[o]:p}),d.controlled?null:{onClick:d.onToggle}))});Kj.displayName="@mantine/core/PopoverTarget";var fq=so((e,{radius:t,shadow:n})=>({dropdown:{position:"absolute",backgroundColor:e.white,background:e.colorScheme==="dark"?e.colors.dark[6]:e.white,border:`${Ue(1)} solid ${e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[2]}`,padding:`${e.spacing.sm} ${e.spacing.md}`,boxShadow:e.shadows[n]||n||"none",borderRadius:e.fn.radius(t),"&:focus":{outline:0}},arrow:{backgroundColor:"inherit",border:`${Ue(1)} solid ${e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[2]}`,zIndex:1}}));const pq=fq;var hq=Object.defineProperty,VC=Object.getOwnPropertySymbols,mq=Object.prototype.hasOwnProperty,gq=Object.prototype.propertyIsEnumerable,UC=(e,t,n)=>t in e?hq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Wl=(e,t)=>{for(var n in t||(t={}))mq.call(t,n)&&UC(e,n,t[n]);if(VC)for(var n of VC(t))gq.call(t,n)&&UC(e,n,t[n]);return e};const GC={entering:"in",entered:"in",exiting:"out",exited:"out","pre-exiting":"out","pre-entering":"out"};function vq({transition:e,state:t,duration:n,timingFunction:r}){const o={transitionDuration:`${n}ms`,transitionTimingFunction:r};return typeof e=="string"?e in Qf?Wl(Wl(Wl({transitionProperty:Qf[e].transitionProperty},o),Qf[e].common),Qf[e][GC[t]]):null:Wl(Wl(Wl({transitionProperty:e.transitionProperty},o),e.common),e[GC[t]])}function bq({duration:e,exitDuration:t,timingFunction:n,mounted:r,onEnter:o,onExit:s,onEntered:i,onExited:c}){const d=qa(),p=RP(),h=d.respectReducedMotion?p:!1,[m,v]=f.useState(h?0:e),[b,w]=f.useState(r?"entered":"exited"),y=f.useRef(-1),S=k=>{const _=k?o:s,P=k?i:c;w(k?"pre-entering":"pre-exiting"),window.clearTimeout(y.current);const I=h?0:k?e:t;if(v(I),I===0)typeof _=="function"&&_(),typeof P=="function"&&P(),w(k?"entered":"exited");else{const E=window.setTimeout(()=>{typeof _=="function"&&_(),w(k?"entering":"exiting")},10);y.current=window.setTimeout(()=>{window.clearTimeout(E),typeof P=="function"&&P(),w(k?"entered":"exited")},I)}};return ks(()=>{S(r)},[r]),f.useEffect(()=>()=>window.clearTimeout(y.current),[]),{transitionDuration:m,transitionStatus:b,transitionTimingFunction:n||d.transitionTimingFunction}}function Xj({keepMounted:e,transition:t,duration:n=250,exitDuration:r=n,mounted:o,children:s,timingFunction:i,onExit:c,onEntered:d,onEnter:p,onExited:h}){const{transitionDuration:m,transitionStatus:v,transitionTimingFunction:b}=bq({mounted:o,exitDuration:r,duration:n,timingFunction:i,onExit:c,onEntered:d,onEnter:p,onExited:h});return m===0?o?W.createElement(W.Fragment,null,s({})):e?s({display:"none"}):null:v==="exited"?e?s({display:"none"}):null:W.createElement(W.Fragment,null,s(vq({transition:t,duration:m,state:v,timingFunction:b})))}Xj.displayName="@mantine/core/Transition";function Yj({children:e,active:t=!0,refProp:n="ref"}){const r=PW(t),o=Ud(r,e==null?void 0:e.ref);return SP(e)?f.cloneElement(e,{[n]:o}):e}Yj.displayName="@mantine/core/FocusTrap";var yq=Object.defineProperty,xq=Object.defineProperties,wq=Object.getOwnPropertyDescriptors,qC=Object.getOwnPropertySymbols,Sq=Object.prototype.hasOwnProperty,Cq=Object.prototype.propertyIsEnumerable,KC=(e,t,n)=>t in e?yq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,ai=(e,t)=>{for(var n in t||(t={}))Sq.call(t,n)&&KC(e,n,t[n]);if(qC)for(var n of qC(t))Cq.call(t,n)&&KC(e,n,t[n]);return e},ap=(e,t)=>xq(e,wq(t));function XC(e,t,n,r){return e==="center"||r==="center"?{top:t}:e==="end"?{bottom:n}:e==="start"?{top:n}:{}}function YC(e,t,n,r,o){return e==="center"||r==="center"?{left:t}:e==="end"?{[o==="ltr"?"right":"left"]:n}:e==="start"?{[o==="ltr"?"left":"right"]:n}:{}}const kq={bottom:"borderTopLeftRadius",left:"borderTopRightRadius",right:"borderBottomLeftRadius",top:"borderBottomRightRadius"};function _q({position:e,arrowSize:t,arrowOffset:n,arrowRadius:r,arrowPosition:o,arrowX:s,arrowY:i,dir:c}){const[d,p="center"]=e.split("-"),h={width:Ue(t),height:Ue(t),transform:"rotate(45deg)",position:"absolute",[kq[d]]:Ue(r)},m=Ue(-t/2);return d==="left"?ap(ai(ai({},h),XC(p,i,n,o)),{right:m,borderLeftColor:"transparent",borderBottomColor:"transparent"}):d==="right"?ap(ai(ai({},h),XC(p,i,n,o)),{left:m,borderRightColor:"transparent",borderTopColor:"transparent"}):d==="top"?ap(ai(ai({},h),YC(p,s,n,o,c)),{bottom:m,borderTopColor:"transparent",borderLeftColor:"transparent"}):d==="bottom"?ap(ai(ai({},h),YC(p,s,n,o,c)),{top:m,borderBottomColor:"transparent",borderRightColor:"transparent"}):{}}var Pq=Object.defineProperty,jq=Object.defineProperties,Iq=Object.getOwnPropertyDescriptors,Mh=Object.getOwnPropertySymbols,Qj=Object.prototype.hasOwnProperty,Jj=Object.prototype.propertyIsEnumerable,QC=(e,t,n)=>t in e?Pq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Eq=(e,t)=>{for(var n in t||(t={}))Qj.call(t,n)&&QC(e,n,t[n]);if(Mh)for(var n of Mh(t))Jj.call(t,n)&&QC(e,n,t[n]);return e},Oq=(e,t)=>jq(e,Iq(t)),Rq=(e,t)=>{var n={};for(var r in e)Qj.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Mh)for(var r of Mh(e))t.indexOf(r)<0&&Jj.call(e,r)&&(n[r]=e[r]);return n};const Zj=f.forwardRef((e,t)=>{var n=e,{position:r,arrowSize:o,arrowOffset:s,arrowRadius:i,arrowPosition:c,visible:d,arrowX:p,arrowY:h}=n,m=Rq(n,["position","arrowSize","arrowOffset","arrowRadius","arrowPosition","visible","arrowX","arrowY"]);const v=qa();return d?W.createElement("div",Oq(Eq({},m),{ref:t,style:_q({position:r,arrowSize:o,arrowOffset:s,arrowRadius:i,arrowPosition:c,dir:v.dir,arrowX:p,arrowY:h})})):null});Zj.displayName="@mantine/core/FloatingArrow";var Mq=Object.defineProperty,Dq=Object.defineProperties,Aq=Object.getOwnPropertyDescriptors,Dh=Object.getOwnPropertySymbols,eI=Object.prototype.hasOwnProperty,tI=Object.prototype.propertyIsEnumerable,JC=(e,t,n)=>t in e?Mq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Vl=(e,t)=>{for(var n in t||(t={}))eI.call(t,n)&&JC(e,n,t[n]);if(Dh)for(var n of Dh(t))tI.call(t,n)&&JC(e,n,t[n]);return e},ip=(e,t)=>Dq(e,Aq(t)),Tq=(e,t)=>{var n={};for(var r in e)eI.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Dh)for(var r of Dh(e))t.indexOf(r)<0&&tI.call(e,r)&&(n[r]=e[r]);return n};const Nq={};function nI(e){var t;const n=Cr("PopoverDropdown",Nq,e),{style:r,className:o,children:s,onKeyDownCapture:i}=n,c=Tq(n,["style","className","children","onKeyDownCapture"]),d=Uj(),{classes:p,cx:h}=pq({radius:d.radius,shadow:d.shadow},{name:d.__staticSelector,classNames:d.classNames,styles:d.styles,unstyled:d.unstyled,variant:d.variant}),m=yW({opened:d.opened,shouldReturnFocus:d.returnFocus}),v=d.withRoles?{"aria-labelledby":d.getTargetId(),id:d.getDropdownId(),role:"dialog"}:{};return d.disabled?null:W.createElement(nj,ip(Vl({},d.portalProps),{withinPortal:d.withinPortal}),W.createElement(Xj,ip(Vl({mounted:d.opened},d.transitionProps),{transition:d.transitionProps.transition||"fade",duration:(t=d.transitionProps.duration)!=null?t:150,keepMounted:d.keepMounted,exitDuration:typeof d.transitionProps.exitDuration=="number"?d.transitionProps.exitDuration:d.transitionProps.duration}),b=>{var w,y;return W.createElement(Yj,{active:d.trapFocus},W.createElement(Eo,Vl(ip(Vl({},v),{tabIndex:-1,ref:d.floating,style:ip(Vl(Vl({},r),b),{zIndex:d.zIndex,top:(w=d.y)!=null?w:0,left:(y=d.x)!=null?y:0,width:d.width==="target"?void 0:Ue(d.width)}),className:h(p.dropdown,o),onKeyDownCapture:KH(d.onClose,{active:d.closeOnEscape,onTrigger:m,onKeyDown:i}),"data-position":d.placement}),c),s,W.createElement(Zj,{ref:d.arrowRef,arrowX:d.arrowX,arrowY:d.arrowY,visible:d.withArrow,position:d.placement,arrowSize:d.arrowSize,arrowRadius:d.arrowRadius,arrowOffset:d.arrowOffset,arrowPosition:d.arrowPosition,className:p.arrow})))}))}nI.displayName="@mantine/core/PopoverDropdown";function $q(e,t){if(e==="rtl"&&(t.includes("right")||t.includes("left"))){const[n,r]=t.split("-"),o=n==="right"?"left":"right";return r===void 0?o:`${o}-${r}`}return t}var ZC=Object.getOwnPropertySymbols,Lq=Object.prototype.hasOwnProperty,zq=Object.prototype.propertyIsEnumerable,Bq=(e,t)=>{var n={};for(var r in e)Lq.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&ZC)for(var r of ZC(e))t.indexOf(r)<0&&zq.call(e,r)&&(n[r]=e[r]);return n};const Fq={position:"bottom",offset:8,positionDependencies:[],transitionProps:{transition:"fade",duration:150},middlewares:{flip:!0,shift:!0,inline:!1},arrowSize:7,arrowOffset:5,arrowRadius:0,arrowPosition:"side",closeOnClickOutside:!0,withinPortal:!1,closeOnEscape:!0,trapFocus:!1,withRoles:!0,returnFocus:!1,clickOutsideEvents:["mousedown","touchstart"],zIndex:ay("popover"),__staticSelector:"Popover",width:"max-content"};function qc(e){var t,n,r,o,s,i;const c=f.useRef(null),d=Cr("Popover",Fq,e),{children:p,position:h,offset:m,onPositionChange:v,positionDependencies:b,opened:w,transitionProps:y,width:S,middlewares:k,withArrow:_,arrowSize:P,arrowOffset:I,arrowRadius:E,arrowPosition:O,unstyled:R,classNames:M,styles:D,closeOnClickOutside:A,withinPortal:L,portalProps:Q,closeOnEscape:F,clickOutsideEvents:V,trapFocus:q,onClose:G,onOpen:T,onChange:z,zIndex:$,radius:Y,shadow:ae,id:fe,defaultOpened:ie,__staticSelector:X,withRoles:K,disabled:U,returnFocus:se,variant:re,keepMounted:oe}=d,pe=Bq(d,["children","position","offset","onPositionChange","positionDependencies","opened","transitionProps","width","middlewares","withArrow","arrowSize","arrowOffset","arrowRadius","arrowPosition","unstyled","classNames","styles","closeOnClickOutside","withinPortal","portalProps","closeOnEscape","clickOutsideEvents","trapFocus","onClose","onOpen","onChange","zIndex","radius","shadow","id","defaultOpened","__staticSelector","withRoles","disabled","returnFocus","variant","keepMounted"]),[le,ge]=f.useState(null),[ke,xe]=f.useState(null),de=ly(fe),Te=qa(),Ee=oq({middlewares:k,width:S,position:$q(Te.dir,h),offset:typeof m=="number"?m+(_?P/2:0):m,arrowRef:c,arrowOffset:I,onPositionChange:v,positionDependencies:b,opened:w,defaultOpened:ie,onChange:z,onOpen:T,onClose:G});mW(()=>Ee.opened&&A&&Ee.onClose(),V,[le,ke]);const $e=f.useCallback(ct=>{ge(ct),Ee.floating.reference(ct)},[Ee.floating.reference]),kt=f.useCallback(ct=>{xe(ct),Ee.floating.floating(ct)},[Ee.floating.floating]);return W.createElement(sq,{value:{returnFocus:se,disabled:U,controlled:Ee.controlled,reference:$e,floating:kt,x:Ee.floating.x,y:Ee.floating.y,arrowX:(r=(n=(t=Ee.floating)==null?void 0:t.middlewareData)==null?void 0:n.arrow)==null?void 0:r.x,arrowY:(i=(s=(o=Ee.floating)==null?void 0:o.middlewareData)==null?void 0:s.arrow)==null?void 0:i.y,opened:Ee.opened,arrowRef:c,transitionProps:y,width:S,withArrow:_,arrowSize:P,arrowOffset:I,arrowRadius:E,arrowPosition:O,placement:Ee.floating.placement,trapFocus:q,withinPortal:L,portalProps:Q,zIndex:$,radius:Y,shadow:ae,closeOnEscape:F,onClose:Ee.onClose,onToggle:Ee.onToggle,getTargetId:()=>`${de}-target`,getDropdownId:()=>`${de}-dropdown`,withRoles:K,targetProps:pe,__staticSelector:X,classNames:M,styles:D,unstyled:R,variant:re,keepMounted:oe}},p)}qc.Target=Kj;qc.Dropdown=nI;qc.displayName="@mantine/core/Popover";var Hq=Object.defineProperty,Ah=Object.getOwnPropertySymbols,rI=Object.prototype.hasOwnProperty,oI=Object.prototype.propertyIsEnumerable,e4=(e,t,n)=>t in e?Hq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Wq=(e,t)=>{for(var n in t||(t={}))rI.call(t,n)&&e4(e,n,t[n]);if(Ah)for(var n of Ah(t))oI.call(t,n)&&e4(e,n,t[n]);return e},Vq=(e,t)=>{var n={};for(var r in e)rI.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Ah)for(var r of Ah(e))t.indexOf(r)<0&&oI.call(e,r)&&(n[r]=e[r]);return n};function Uq(e){var t=e,{children:n,component:r="div",maxHeight:o=220,direction:s="column",id:i,innerRef:c,__staticSelector:d,styles:p,classNames:h,unstyled:m}=t,v=Vq(t,["children","component","maxHeight","direction","id","innerRef","__staticSelector","styles","classNames","unstyled"]);const{classes:b}=PG(null,{name:d,styles:p,classNames:h,unstyled:m});return W.createElement(qc.Dropdown,Wq({p:0,onMouseDown:w=>w.preventDefault()},v),W.createElement("div",{style:{maxHeight:Ue(o),display:"flex"}},W.createElement(Eo,{component:r||"div",id:`${i}-items`,"aria-labelledby":`${i}-label`,role:"listbox",onMouseDown:w=>w.preventDefault(),style:{flex:1,overflowY:r!==Um?"auto":void 0},"data-combobox-popover":!0,tabIndex:-1,ref:c},W.createElement("div",{className:b.itemsWrapper,style:{flexDirection:s}},n))))}function yi({opened:e,transitionProps:t={transition:"fade",duration:0},shadow:n,withinPortal:r,portalProps:o,children:s,__staticSelector:i,onDirectionChange:c,switchDirectionOnFlip:d,zIndex:p,dropdownPosition:h,positionDependencies:m=[],classNames:v,styles:b,unstyled:w,readOnly:y,variant:S}){return W.createElement(qc,{unstyled:w,classNames:v,styles:b,width:"target",withRoles:!1,opened:e,middlewares:{flip:h==="flip",shift:!1},position:h==="flip"?"bottom":h,positionDependencies:m,zIndex:p,__staticSelector:i,withinPortal:r,portalProps:o,transitionProps:t,shadow:n,disabled:y,onPositionChange:k=>d&&(c==null?void 0:c(k==="top"?"column-reverse":"column")),variant:S},s)}yi.Target=qc.Target;yi.Dropdown=Uq;var Gq=Object.defineProperty,qq=Object.defineProperties,Kq=Object.getOwnPropertyDescriptors,Th=Object.getOwnPropertySymbols,sI=Object.prototype.hasOwnProperty,aI=Object.prototype.propertyIsEnumerable,t4=(e,t,n)=>t in e?Gq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,lp=(e,t)=>{for(var n in t||(t={}))sI.call(t,n)&&t4(e,n,t[n]);if(Th)for(var n of Th(t))aI.call(t,n)&&t4(e,n,t[n]);return e},Xq=(e,t)=>qq(e,Kq(t)),Yq=(e,t)=>{var n={};for(var r in e)sI.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Th)for(var r of Th(e))t.indexOf(r)<0&&aI.call(e,r)&&(n[r]=e[r]);return n};function iI(e,t,n){const r=Cr(e,t,n),{label:o,description:s,error:i,required:c,classNames:d,styles:p,className:h,unstyled:m,__staticSelector:v,sx:b,errorProps:w,labelProps:y,descriptionProps:S,wrapperProps:k,id:_,size:P,style:I,inputContainer:E,inputWrapperOrder:O,withAsterisk:R,variant:M}=r,D=Yq(r,["label","description","error","required","classNames","styles","className","unstyled","__staticSelector","sx","errorProps","labelProps","descriptionProps","wrapperProps","id","size","style","inputContainer","inputWrapperOrder","withAsterisk","variant"]),A=ly(_),{systemStyles:L,rest:Q}=Fm(D),F=lp({label:o,description:s,error:i,required:c,classNames:d,className:h,__staticSelector:v,sx:b,errorProps:w,labelProps:y,descriptionProps:S,unstyled:m,styles:p,id:A,size:P,style:I,inputContainer:E,inputWrapperOrder:O,withAsterisk:R,variant:M},k);return Xq(lp({},Q),{classNames:d,styles:p,unstyled:m,wrapperProps:lp(lp({},F),L),inputProps:{required:c,classNames:d,styles:p,unstyled:m,id:A,size:P,__staticSelector:v,error:i,variant:M}})}var Qq=so((e,t,{size:n})=>({label:{display:"inline-block",fontSize:Vt({size:n,sizes:e.fontSizes}),fontWeight:500,color:e.colorScheme==="dark"?e.colors.dark[0]:e.colors.gray[9],wordBreak:"break-word",cursor:"default",WebkitTapHighlightColor:"transparent"},required:{color:e.fn.variant({variant:"filled",color:"red"}).background}}));const Jq=Qq;var Zq=Object.defineProperty,Nh=Object.getOwnPropertySymbols,lI=Object.prototype.hasOwnProperty,cI=Object.prototype.propertyIsEnumerable,n4=(e,t,n)=>t in e?Zq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,eK=(e,t)=>{for(var n in t||(t={}))lI.call(t,n)&&n4(e,n,t[n]);if(Nh)for(var n of Nh(t))cI.call(t,n)&&n4(e,n,t[n]);return e},tK=(e,t)=>{var n={};for(var r in e)lI.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Nh)for(var r of Nh(e))t.indexOf(r)<0&&cI.call(e,r)&&(n[r]=e[r]);return n};const nK={labelElement:"label",size:"sm"},vy=f.forwardRef((e,t)=>{const n=Cr("InputLabel",nK,e),{labelElement:r,children:o,required:s,size:i,classNames:c,styles:d,unstyled:p,className:h,htmlFor:m,__staticSelector:v,variant:b,onMouseDown:w}=n,y=tK(n,["labelElement","children","required","size","classNames","styles","unstyled","className","htmlFor","__staticSelector","variant","onMouseDown"]),{classes:S,cx:k}=Jq(null,{name:["InputWrapper",v],classNames:c,styles:d,unstyled:p,variant:b,size:i});return W.createElement(Eo,eK({component:r,ref:t,className:k(S.label,h),htmlFor:r==="label"?m:void 0,onMouseDown:_=>{w==null||w(_),!_.defaultPrevented&&_.detail>1&&_.preventDefault()}},y),o,s&&W.createElement("span",{className:S.required,"aria-hidden":!0}," *"))});vy.displayName="@mantine/core/InputLabel";var rK=so((e,t,{size:n})=>({error:{wordBreak:"break-word",color:e.fn.variant({variant:"filled",color:"red"}).background,fontSize:`calc(${Vt({size:n,sizes:e.fontSizes})} - ${Ue(2)})`,lineHeight:1.2,display:"block"}}));const oK=rK;var sK=Object.defineProperty,$h=Object.getOwnPropertySymbols,uI=Object.prototype.hasOwnProperty,dI=Object.prototype.propertyIsEnumerable,r4=(e,t,n)=>t in e?sK(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,aK=(e,t)=>{for(var n in t||(t={}))uI.call(t,n)&&r4(e,n,t[n]);if($h)for(var n of $h(t))dI.call(t,n)&&r4(e,n,t[n]);return e},iK=(e,t)=>{var n={};for(var r in e)uI.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&$h)for(var r of $h(e))t.indexOf(r)<0&&dI.call(e,r)&&(n[r]=e[r]);return n};const lK={size:"sm"},by=f.forwardRef((e,t)=>{const n=Cr("InputError",lK,e),{children:r,className:o,classNames:s,styles:i,unstyled:c,size:d,__staticSelector:p,variant:h}=n,m=iK(n,["children","className","classNames","styles","unstyled","size","__staticSelector","variant"]),{classes:v,cx:b}=oK(null,{name:["InputWrapper",p],classNames:s,styles:i,unstyled:c,variant:h,size:d});return W.createElement(Pc,aK({className:b(v.error,o),ref:t},m),r)});by.displayName="@mantine/core/InputError";var cK=so((e,t,{size:n})=>({description:{wordBreak:"break-word",color:e.colorScheme==="dark"?e.colors.dark[2]:e.colors.gray[6],fontSize:`calc(${Vt({size:n,sizes:e.fontSizes})} - ${Ue(2)})`,lineHeight:1.2,display:"block"}}));const uK=cK;var dK=Object.defineProperty,Lh=Object.getOwnPropertySymbols,fI=Object.prototype.hasOwnProperty,pI=Object.prototype.propertyIsEnumerable,o4=(e,t,n)=>t in e?dK(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,fK=(e,t)=>{for(var n in t||(t={}))fI.call(t,n)&&o4(e,n,t[n]);if(Lh)for(var n of Lh(t))pI.call(t,n)&&o4(e,n,t[n]);return e},pK=(e,t)=>{var n={};for(var r in e)fI.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Lh)for(var r of Lh(e))t.indexOf(r)<0&&pI.call(e,r)&&(n[r]=e[r]);return n};const hK={size:"sm"},yy=f.forwardRef((e,t)=>{const n=Cr("InputDescription",hK,e),{children:r,className:o,classNames:s,styles:i,unstyled:c,size:d,__staticSelector:p,variant:h}=n,m=pK(n,["children","className","classNames","styles","unstyled","size","__staticSelector","variant"]),{classes:v,cx:b}=uK(null,{name:["InputWrapper",p],classNames:s,styles:i,unstyled:c,variant:h,size:d});return W.createElement(Pc,fK({color:"dimmed",className:b(v.description,o),ref:t,unstyled:c},m),r)});yy.displayName="@mantine/core/InputDescription";const hI=f.createContext({offsetBottom:!1,offsetTop:!1,describedBy:void 0}),mK=hI.Provider,gK=()=>f.useContext(hI);function vK(e,{hasDescription:t,hasError:n}){const r=e.findIndex(d=>d==="input"),o=e[r-1],s=e[r+1];return{offsetBottom:t&&s==="description"||n&&s==="error",offsetTop:t&&o==="description"||n&&o==="error"}}var bK=Object.defineProperty,yK=Object.defineProperties,xK=Object.getOwnPropertyDescriptors,s4=Object.getOwnPropertySymbols,wK=Object.prototype.hasOwnProperty,SK=Object.prototype.propertyIsEnumerable,a4=(e,t,n)=>t in e?bK(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,CK=(e,t)=>{for(var n in t||(t={}))wK.call(t,n)&&a4(e,n,t[n]);if(s4)for(var n of s4(t))SK.call(t,n)&&a4(e,n,t[n]);return e},kK=(e,t)=>yK(e,xK(t)),_K=so(e=>({root:kK(CK({},e.fn.fontStyles()),{lineHeight:e.lineHeight})}));const PK=_K;var jK=Object.defineProperty,IK=Object.defineProperties,EK=Object.getOwnPropertyDescriptors,zh=Object.getOwnPropertySymbols,mI=Object.prototype.hasOwnProperty,gI=Object.prototype.propertyIsEnumerable,i4=(e,t,n)=>t in e?jK(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,ii=(e,t)=>{for(var n in t||(t={}))mI.call(t,n)&&i4(e,n,t[n]);if(zh)for(var n of zh(t))gI.call(t,n)&&i4(e,n,t[n]);return e},l4=(e,t)=>IK(e,EK(t)),OK=(e,t)=>{var n={};for(var r in e)mI.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&zh)for(var r of zh(e))t.indexOf(r)<0&&gI.call(e,r)&&(n[r]=e[r]);return n};const RK={labelElement:"label",size:"sm",inputContainer:e=>e,inputWrapperOrder:["label","description","input","error"]},vI=f.forwardRef((e,t)=>{const n=Cr("InputWrapper",RK,e),{className:r,label:o,children:s,required:i,id:c,error:d,description:p,labelElement:h,labelProps:m,descriptionProps:v,errorProps:b,classNames:w,styles:y,size:S,inputContainer:k,__staticSelector:_,unstyled:P,inputWrapperOrder:I,withAsterisk:E,variant:O}=n,R=OK(n,["className","label","children","required","id","error","description","labelElement","labelProps","descriptionProps","errorProps","classNames","styles","size","inputContainer","__staticSelector","unstyled","inputWrapperOrder","withAsterisk","variant"]),{classes:M,cx:D}=PK(null,{classNames:w,styles:y,name:["InputWrapper",_],unstyled:P,variant:O,size:S}),A={classNames:w,styles:y,unstyled:P,size:S,variant:O,__staticSelector:_},L=typeof E=="boolean"?E:i,Q=c?`${c}-error`:b==null?void 0:b.id,F=c?`${c}-description`:v==null?void 0:v.id,q=`${!!d&&typeof d!="boolean"?Q:""} ${p?F:""}`,G=q.trim().length>0?q.trim():void 0,T=o&&W.createElement(vy,ii(ii({key:"label",labelElement:h,id:c?`${c}-label`:void 0,htmlFor:c,required:L},A),m),o),z=p&&W.createElement(yy,l4(ii(ii({key:"description"},v),A),{size:(v==null?void 0:v.size)||A.size,id:(v==null?void 0:v.id)||F}),p),$=W.createElement(f.Fragment,{key:"input"},k(s)),Y=typeof d!="boolean"&&d&&W.createElement(by,l4(ii(ii({},b),A),{size:(b==null?void 0:b.size)||A.size,key:"error",id:(b==null?void 0:b.id)||Q}),d),ae=I.map(fe=>{switch(fe){case"label":return T;case"input":return $;case"description":return z;case"error":return Y;default:return null}});return W.createElement(mK,{value:ii({describedBy:G},vK(I,{hasDescription:!!z,hasError:!!Y}))},W.createElement(Eo,ii({className:D(M.root,r),ref:t},R),ae))});vI.displayName="@mantine/core/InputWrapper";var MK=Object.defineProperty,Bh=Object.getOwnPropertySymbols,bI=Object.prototype.hasOwnProperty,yI=Object.prototype.propertyIsEnumerable,c4=(e,t,n)=>t in e?MK(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,DK=(e,t)=>{for(var n in t||(t={}))bI.call(t,n)&&c4(e,n,t[n]);if(Bh)for(var n of Bh(t))yI.call(t,n)&&c4(e,n,t[n]);return e},AK=(e,t)=>{var n={};for(var r in e)bI.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Bh)for(var r of Bh(e))t.indexOf(r)<0&&yI.call(e,r)&&(n[r]=e[r]);return n};const TK={},xI=f.forwardRef((e,t)=>{const n=Cr("InputPlaceholder",TK,e),{sx:r}=n,o=AK(n,["sx"]);return W.createElement(Eo,DK({component:"span",sx:[s=>s.fn.placeholderStyles(),...xP(r)],ref:t},o))});xI.displayName="@mantine/core/InputPlaceholder";var NK=Object.defineProperty,$K=Object.defineProperties,LK=Object.getOwnPropertyDescriptors,u4=Object.getOwnPropertySymbols,zK=Object.prototype.hasOwnProperty,BK=Object.prototype.propertyIsEnumerable,d4=(e,t,n)=>t in e?NK(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,cp=(e,t)=>{for(var n in t||(t={}))zK.call(t,n)&&d4(e,n,t[n]);if(u4)for(var n of u4(t))BK.call(t,n)&&d4(e,n,t[n]);return e},J0=(e,t)=>$K(e,LK(t));const Qo={xs:Ue(30),sm:Ue(36),md:Ue(42),lg:Ue(50),xl:Ue(60)},FK=["default","filled","unstyled"];function HK({theme:e,variant:t}){return FK.includes(t)?t==="default"?{border:`${Ue(1)} solid ${e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[4]}`,backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.white,transition:"border-color 100ms ease","&:focus, &:focus-within":e.focusRingStyles.inputStyles(e)}:t==="filled"?{border:`${Ue(1)} solid transparent`,backgroundColor:e.colorScheme==="dark"?e.colors.dark[5]:e.colors.gray[1],"&:focus, &:focus-within":e.focusRingStyles.inputStyles(e)}:{borderWidth:0,color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,backgroundColor:"transparent",minHeight:Ue(28),outline:0,"&:focus, &:focus-within":{outline:"none",borderColor:"transparent"},"&:disabled":{backgroundColor:"transparent","&:focus, &:focus-within":{outline:"none",borderColor:"transparent"}}}:null}var WK=so((e,{multiline:t,radius:n,invalid:r,rightSectionWidth:o,withRightSection:s,iconWidth:i,offsetBottom:c,offsetTop:d,pointer:p},{variant:h,size:m})=>{const v=e.fn.variant({variant:"filled",color:"red"}).background,b=h==="default"||h==="filled"?{minHeight:Vt({size:m,sizes:Qo}),paddingLeft:`calc(${Vt({size:m,sizes:Qo})} / 3)`,paddingRight:s?o||Vt({size:m,sizes:Qo}):`calc(${Vt({size:m,sizes:Qo})} / 3)`,borderRadius:e.fn.radius(n)}:h==="unstyled"&&s?{paddingRight:o||Vt({size:m,sizes:Qo})}:null;return{wrapper:{position:"relative",marginTop:d?`calc(${e.spacing.xs} / 2)`:void 0,marginBottom:c?`calc(${e.spacing.xs} / 2)`:void 0,"&:has(input:disabled)":{"& .mantine-Input-rightSection":{display:"none"}}},input:J0(cp(cp(J0(cp({},e.fn.fontStyles()),{height:t?h==="unstyled"?void 0:"auto":Vt({size:m,sizes:Qo}),WebkitTapHighlightColor:"transparent",lineHeight:t?e.lineHeight:`calc(${Vt({size:m,sizes:Qo})} - ${Ue(2)})`,appearance:"none",resize:"none",boxSizing:"border-box",fontSize:Vt({size:m,sizes:e.fontSizes}),width:"100%",color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,display:"block",textAlign:"left",cursor:p?"pointer":void 0}),HK({theme:e,variant:h})),b),{"&:disabled, &[data-disabled]":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[1],color:e.colors.dark[2],opacity:.6,cursor:"not-allowed",pointerEvents:"none","&::placeholder":{color:e.colors.dark[2]}},"&[data-invalid]":{color:v,borderColor:v,"&::placeholder":{opacity:1,color:v}},"&[data-with-icon]":{paddingLeft:typeof i=="number"?Ue(i):Vt({size:m,sizes:Qo})},"&::placeholder":J0(cp({},e.fn.placeholderStyles()),{opacity:1}),"&::-webkit-inner-spin-button, &::-webkit-outer-spin-button, &::-webkit-search-decoration, &::-webkit-search-cancel-button, &::-webkit-search-results-button, &::-webkit-search-results-decoration":{appearance:"none"},"&[type=number]":{MozAppearance:"textfield"}}),icon:{pointerEvents:"none",position:"absolute",zIndex:1,left:0,top:0,bottom:0,display:"flex",alignItems:"center",justifyContent:"center",width:i?Ue(i):Vt({size:m,sizes:Qo}),color:r?e.colors.red[e.colorScheme==="dark"?6:7]:e.colorScheme==="dark"?e.colors.dark[2]:e.colors.gray[5]},rightSection:{position:"absolute",top:0,bottom:0,right:0,display:"flex",alignItems:"center",justifyContent:"center",width:o||Vt({size:m,sizes:Qo})}}});const VK=WK;var UK=Object.defineProperty,GK=Object.defineProperties,qK=Object.getOwnPropertyDescriptors,Fh=Object.getOwnPropertySymbols,wI=Object.prototype.hasOwnProperty,SI=Object.prototype.propertyIsEnumerable,f4=(e,t,n)=>t in e?UK(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,up=(e,t)=>{for(var n in t||(t={}))wI.call(t,n)&&f4(e,n,t[n]);if(Fh)for(var n of Fh(t))SI.call(t,n)&&f4(e,n,t[n]);return e},p4=(e,t)=>GK(e,qK(t)),KK=(e,t)=>{var n={};for(var r in e)wI.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Fh)for(var r of Fh(e))t.indexOf(r)<0&&SI.call(e,r)&&(n[r]=e[r]);return n};const XK={size:"sm",variant:"default"},bl=f.forwardRef((e,t)=>{const n=Cr("Input",XK,e),{className:r,error:o,required:s,disabled:i,variant:c,icon:d,style:p,rightSectionWidth:h,iconWidth:m,rightSection:v,rightSectionProps:b,radius:w,size:y,wrapperProps:S,classNames:k,styles:_,__staticSelector:P,multiline:I,sx:E,unstyled:O,pointer:R}=n,M=KK(n,["className","error","required","disabled","variant","icon","style","rightSectionWidth","iconWidth","rightSection","rightSectionProps","radius","size","wrapperProps","classNames","styles","__staticSelector","multiline","sx","unstyled","pointer"]),{offsetBottom:D,offsetTop:A,describedBy:L}=gK(),{classes:Q,cx:F}=VK({radius:w,multiline:I,invalid:!!o,rightSectionWidth:h?Ue(h):void 0,iconWidth:m,withRightSection:!!v,offsetBottom:D,offsetTop:A,pointer:R},{classNames:k,styles:_,name:["Input",P],unstyled:O,variant:c,size:y}),{systemStyles:V,rest:q}=Fm(M);return W.createElement(Eo,up(up({className:F(Q.wrapper,r),sx:E,style:p},V),S),d&&W.createElement("div",{className:Q.icon},d),W.createElement(Eo,p4(up({component:"input"},q),{ref:t,required:s,"aria-invalid":!!o,"aria-describedby":L,disabled:i,"data-disabled":i||void 0,"data-with-icon":!!d||void 0,"data-invalid":!!o||void 0,className:Q.input})),v&&W.createElement("div",p4(up({},b),{className:Q.rightSection}),v))});bl.displayName="@mantine/core/Input";bl.Wrapper=vI;bl.Label=vy;bl.Description=yy;bl.Error=by;bl.Placeholder=xI;const Oc=bl;var YK=Object.defineProperty,Hh=Object.getOwnPropertySymbols,CI=Object.prototype.hasOwnProperty,kI=Object.prototype.propertyIsEnumerable,h4=(e,t,n)=>t in e?YK(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,m4=(e,t)=>{for(var n in t||(t={}))CI.call(t,n)&&h4(e,n,t[n]);if(Hh)for(var n of Hh(t))kI.call(t,n)&&h4(e,n,t[n]);return e},QK=(e,t)=>{var n={};for(var r in e)CI.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Hh)for(var r of Hh(e))t.indexOf(r)<0&&kI.call(e,r)&&(n[r]=e[r]);return n};const JK={multiple:!1},_I=f.forwardRef((e,t)=>{const n=Cr("FileButton",JK,e),{onChange:r,children:o,multiple:s,accept:i,name:c,form:d,resetRef:p,disabled:h,capture:m,inputProps:v}=n,b=QK(n,["onChange","children","multiple","accept","name","form","resetRef","disabled","capture","inputProps"]),w=f.useRef(),y=()=>{!h&&w.current.click()},S=_=>{r(s?Array.from(_.currentTarget.files):_.currentTarget.files[0]||null)};return OP(p,()=>{w.current.value=""}),W.createElement(W.Fragment,null,o(m4({onClick:y},b)),W.createElement("input",m4({style:{display:"none"},type:"file",accept:i,multiple:s,onChange:S,ref:Ud(t,w),name:c,form:d,capture:m},v)))});_I.displayName="@mantine/core/FileButton";const PI={xs:Ue(16),sm:Ue(22),md:Ue(26),lg:Ue(30),xl:Ue(36)},ZK={xs:Ue(10),sm:Ue(12),md:Ue(14),lg:Ue(16),xl:Ue(18)};var eX=so((e,{disabled:t,radius:n,readOnly:r},{size:o,variant:s})=>({defaultValue:{display:"flex",alignItems:"center",backgroundColor:t?e.colorScheme==="dark"?e.colors.dark[5]:e.colors.gray[3]:e.colorScheme==="dark"?e.colors.dark[7]:s==="filled"?e.white:e.colors.gray[1],color:t?e.colorScheme==="dark"?e.colors.dark[1]:e.colors.gray[7]:e.colorScheme==="dark"?e.colors.dark[0]:e.colors.gray[7],height:Vt({size:o,sizes:PI}),paddingLeft:`calc(${Vt({size:o,sizes:e.spacing})} / 1.5)`,paddingRight:t||r?Vt({size:o,sizes:e.spacing}):0,fontWeight:500,fontSize:Vt({size:o,sizes:ZK}),borderRadius:Vt({size:n,sizes:e.radius}),cursor:t?"not-allowed":"default",userSelect:"none",maxWidth:`calc(100% - ${Ue(10)})`},defaultValueRemove:{color:e.colorScheme==="dark"?e.colors.dark[0]:e.colors.gray[7],marginLeft:`calc(${Vt({size:o,sizes:e.spacing})} / 6)`},defaultValueLabel:{display:"block",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}}));const tX=eX;var nX=Object.defineProperty,Wh=Object.getOwnPropertySymbols,jI=Object.prototype.hasOwnProperty,II=Object.prototype.propertyIsEnumerable,g4=(e,t,n)=>t in e?nX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,rX=(e,t)=>{for(var n in t||(t={}))jI.call(t,n)&&g4(e,n,t[n]);if(Wh)for(var n of Wh(t))II.call(t,n)&&g4(e,n,t[n]);return e},oX=(e,t)=>{var n={};for(var r in e)jI.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Wh)for(var r of Wh(e))t.indexOf(r)<0&&II.call(e,r)&&(n[r]=e[r]);return n};const sX={xs:16,sm:22,md:24,lg:26,xl:30};function EI(e){var t=e,{label:n,classNames:r,styles:o,className:s,onRemove:i,disabled:c,readOnly:d,size:p,radius:h="sm",variant:m,unstyled:v}=t,b=oX(t,["label","classNames","styles","className","onRemove","disabled","readOnly","size","radius","variant","unstyled"]);const{classes:w,cx:y}=tX({disabled:c,readOnly:d,radius:h},{name:"MultiSelect",classNames:r,styles:o,unstyled:v,size:p,variant:m});return W.createElement("div",rX({className:y(w.defaultValue,s)},b),W.createElement("span",{className:w.defaultValueLabel},n),!c&&!d&&W.createElement(cj,{"aria-hidden":!0,onMouseDown:i,size:sX[p],radius:2,color:"blue",variant:"transparent",iconSize:"70%",className:w.defaultValueRemove,tabIndex:-1,unstyled:v}))}EI.displayName="@mantine/core/MultiSelect/DefaultValue";function aX({data:e,searchable:t,limit:n,searchValue:r,filter:o,value:s,disableSelectedItemFiltering:i}){if(!t&&s.length===0)return e;if(!t){const d=[];for(let p=0;ph===e[p].value&&!e[p].disabled))&&d.push(e[p]);return d}const c=[];for(let d=0;dp===e[d].value&&!e[d].disabled),e[d])&&c.push(e[d]),!(c.length>=n));d+=1);return c}var iX=Object.defineProperty,Vh=Object.getOwnPropertySymbols,OI=Object.prototype.hasOwnProperty,RI=Object.prototype.propertyIsEnumerable,v4=(e,t,n)=>t in e?iX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,b4=(e,t)=>{for(var n in t||(t={}))OI.call(t,n)&&v4(e,n,t[n]);if(Vh)for(var n of Vh(t))RI.call(t,n)&&v4(e,n,t[n]);return e},lX=(e,t)=>{var n={};for(var r in e)OI.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Vh)for(var r of Vh(e))t.indexOf(r)<0&&RI.call(e,r)&&(n[r]=e[r]);return n};const cX={xs:Ue(14),sm:Ue(18),md:Ue(20),lg:Ue(24),xl:Ue(28)};function uX(e){var t=e,{size:n,error:r,style:o}=t,s=lX(t,["size","error","style"]);const i=qa(),c=Vt({size:n,sizes:cX});return W.createElement("svg",b4({viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:b4({color:r?i.colors.red[6]:i.colors.gray[6],width:c,height:c},o),"data-chevron":!0},s),W.createElement("path",{d:"M4.93179 5.43179C4.75605 5.60753 4.75605 5.89245 4.93179 6.06819C5.10753 6.24392 5.39245 6.24392 5.56819 6.06819L7.49999 4.13638L9.43179 6.06819C9.60753 6.24392 9.89245 6.24392 10.0682 6.06819C10.2439 5.89245 10.2439 5.60753 10.0682 5.43179L7.81819 3.18179C7.73379 3.0974 7.61933 3.04999 7.49999 3.04999C7.38064 3.04999 7.26618 3.0974 7.18179 3.18179L4.93179 5.43179ZM10.0682 9.56819C10.2439 9.39245 10.2439 9.10753 10.0682 8.93179C9.89245 8.75606 9.60753 8.75606 9.43179 8.93179L7.49999 10.8636L5.56819 8.93179C5.39245 8.75606 5.10753 8.75606 4.93179 8.93179C4.75605 9.10753 4.75605 9.39245 4.93179 9.56819L7.18179 11.8182C7.35753 11.9939 7.64245 11.9939 7.81819 11.8182L10.0682 9.56819Z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"}))}var dX=Object.defineProperty,fX=Object.defineProperties,pX=Object.getOwnPropertyDescriptors,y4=Object.getOwnPropertySymbols,hX=Object.prototype.hasOwnProperty,mX=Object.prototype.propertyIsEnumerable,x4=(e,t,n)=>t in e?dX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,gX=(e,t)=>{for(var n in t||(t={}))hX.call(t,n)&&x4(e,n,t[n]);if(y4)for(var n of y4(t))mX.call(t,n)&&x4(e,n,t[n]);return e},vX=(e,t)=>fX(e,pX(t));function MI({shouldClear:e,clearButtonProps:t,onClear:n,size:r,error:o}){return e?W.createElement(cj,vX(gX({},t),{variant:"transparent",onClick:n,size:r,onMouseDown:s=>s.preventDefault()})):W.createElement(uX,{error:o,size:r})}MI.displayName="@mantine/core/SelectRightSection";var bX=Object.defineProperty,yX=Object.defineProperties,xX=Object.getOwnPropertyDescriptors,Uh=Object.getOwnPropertySymbols,DI=Object.prototype.hasOwnProperty,AI=Object.prototype.propertyIsEnumerable,w4=(e,t,n)=>t in e?bX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Z0=(e,t)=>{for(var n in t||(t={}))DI.call(t,n)&&w4(e,n,t[n]);if(Uh)for(var n of Uh(t))AI.call(t,n)&&w4(e,n,t[n]);return e},S4=(e,t)=>yX(e,xX(t)),wX=(e,t)=>{var n={};for(var r in e)DI.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Uh)for(var r of Uh(e))t.indexOf(r)<0&&AI.call(e,r)&&(n[r]=e[r]);return n};function TI(e){var t=e,{styles:n,rightSection:r,rightSectionWidth:o,theme:s}=t,i=wX(t,["styles","rightSection","rightSectionWidth","theme"]);if(r)return{rightSection:r,rightSectionWidth:o,styles:n};const c=typeof n=="function"?n(s):n;return{rightSection:!i.readOnly&&!(i.disabled&&i.shouldClear)&&W.createElement(MI,Z0({},i)),styles:S4(Z0({},c),{rightSection:S4(Z0({},c==null?void 0:c.rightSection),{pointerEvents:i.shouldClear?void 0:"none"})})}}var SX=Object.defineProperty,CX=Object.defineProperties,kX=Object.getOwnPropertyDescriptors,C4=Object.getOwnPropertySymbols,_X=Object.prototype.hasOwnProperty,PX=Object.prototype.propertyIsEnumerable,k4=(e,t,n)=>t in e?SX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,jX=(e,t)=>{for(var n in t||(t={}))_X.call(t,n)&&k4(e,n,t[n]);if(C4)for(var n of C4(t))PX.call(t,n)&&k4(e,n,t[n]);return e},IX=(e,t)=>CX(e,kX(t)),EX=so((e,{invalid:t},{size:n})=>({wrapper:{position:"relative","&:has(input:disabled)":{cursor:"not-allowed",pointerEvents:"none","& .mantine-MultiSelect-input":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[1],color:e.colors.dark[2],opacity:.6,"&::placeholder":{color:e.colors.dark[2]}},"& .mantine-MultiSelect-defaultValue":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[5]:e.colors.gray[3],color:e.colorScheme==="dark"?e.colors.dark[1]:e.colors.gray[7]}}},values:{minHeight:`calc(${Vt({size:n,sizes:Qo})} - ${Ue(2)})`,display:"flex",alignItems:"center",flexWrap:"wrap",marginLeft:`calc(-${e.spacing.xs} / 2)`,boxSizing:"border-box","&[data-clearable]":{marginRight:Vt({size:n,sizes:Qo})}},value:{margin:`calc(${e.spacing.xs} / 2 - ${Ue(2)}) calc(${e.spacing.xs} / 2)`},searchInput:IX(jX({},e.fn.fontStyles()),{flex:1,minWidth:Ue(60),backgroundColor:"transparent",border:0,outline:0,fontSize:Vt({size:n,sizes:e.fontSizes}),padding:0,marginLeft:`calc(${e.spacing.xs} / 2)`,appearance:"none",color:"inherit",maxHeight:Vt({size:n,sizes:PI}),"&::placeholder":{opacity:1,color:t?e.colors.red[e.fn.primaryShade()]:e.colorScheme==="dark"?e.colors.dark[3]:e.colors.gray[5]},"&:disabled":{cursor:"not-allowed",pointerEvents:"none"}}),searchInputEmpty:{width:"100%"},searchInputInputHidden:{flex:0,width:0,minWidth:0,margin:0,overflow:"hidden"},searchInputPointer:{cursor:"pointer","&:disabled":{cursor:"not-allowed",pointerEvents:"none"}},input:{cursor:"pointer","&:disabled":{cursor:"not-allowed",pointerEvents:"none"}}}));const OX=EX;var RX=Object.defineProperty,MX=Object.defineProperties,DX=Object.getOwnPropertyDescriptors,Gh=Object.getOwnPropertySymbols,NI=Object.prototype.hasOwnProperty,$I=Object.prototype.propertyIsEnumerable,_4=(e,t,n)=>t in e?RX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Ul=(e,t)=>{for(var n in t||(t={}))NI.call(t,n)&&_4(e,n,t[n]);if(Gh)for(var n of Gh(t))$I.call(t,n)&&_4(e,n,t[n]);return e},P4=(e,t)=>MX(e,DX(t)),AX=(e,t)=>{var n={};for(var r in e)NI.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Gh)for(var r of Gh(e))t.indexOf(r)<0&&$I.call(e,r)&&(n[r]=e[r]);return n};function TX(e,t,n){return t?!1:n.label.toLowerCase().trim().includes(e.toLowerCase().trim())}function NX(e,t){return!!e&&!t.some(n=>n.value.toLowerCase()===e.toLowerCase())}function j4(e,t){if(!Array.isArray(e))return;if(t.length===0)return[];const n=t.map(r=>typeof r=="object"?r.value:r);return e.filter(r=>n.includes(r))}const $X={size:"sm",valueComponent:EI,itemComponent:uy,transitionProps:{transition:"fade",duration:0},maxDropdownHeight:220,shadow:"sm",searchable:!1,filter:TX,limit:1/0,clearSearchOnChange:!0,clearable:!1,clearSearchOnBlur:!1,disabled:!1,initiallyOpened:!1,creatable:!1,shouldCreate:NX,switchDirectionOnFlip:!1,zIndex:ay("popover"),selectOnBlur:!1,positionDependencies:[],dropdownPosition:"flip"},LI=f.forwardRef((e,t)=>{const n=Cr("MultiSelect",$X,e),{className:r,style:o,required:s,label:i,description:c,size:d,error:p,classNames:h,styles:m,wrapperProps:v,value:b,defaultValue:w,data:y,onChange:S,valueComponent:k,itemComponent:_,id:P,transitionProps:I,maxDropdownHeight:E,shadow:O,nothingFound:R,onFocus:M,onBlur:D,searchable:A,placeholder:L,filter:Q,limit:F,clearSearchOnChange:V,clearable:q,clearSearchOnBlur:G,variant:T,onSearchChange:z,searchValue:$,disabled:Y,initiallyOpened:ae,radius:fe,icon:ie,rightSection:X,rightSectionWidth:K,creatable:U,getCreateLabel:se,shouldCreate:re,onCreate:oe,sx:pe,dropdownComponent:le,onDropdownClose:ge,onDropdownOpen:ke,maxSelectedValues:xe,withinPortal:de,portalProps:Te,switchDirectionOnFlip:Ee,zIndex:$e,selectOnBlur:kt,name:ct,dropdownPosition:on,errorProps:vt,labelProps:bt,descriptionProps:Se,form:Me,positionDependencies:_t,onKeyDown:Tt,unstyled:we,inputContainer:ht,inputWrapperOrder:$t,readOnly:Lt,withAsterisk:Le,clearButtonProps:Ge,hoverOnSearchChange:Pn,disableSelectedItemFiltering:Pe}=n,Qe=AX(n,["className","style","required","label","description","size","error","classNames","styles","wrapperProps","value","defaultValue","data","onChange","valueComponent","itemComponent","id","transitionProps","maxDropdownHeight","shadow","nothingFound","onFocus","onBlur","searchable","placeholder","filter","limit","clearSearchOnChange","clearable","clearSearchOnBlur","variant","onSearchChange","searchValue","disabled","initiallyOpened","radius","icon","rightSection","rightSectionWidth","creatable","getCreateLabel","shouldCreate","onCreate","sx","dropdownComponent","onDropdownClose","onDropdownOpen","maxSelectedValues","withinPortal","portalProps","switchDirectionOnFlip","zIndex","selectOnBlur","name","dropdownPosition","errorProps","labelProps","descriptionProps","form","positionDependencies","onKeyDown","unstyled","inputContainer","inputWrapperOrder","readOnly","withAsterisk","clearButtonProps","hoverOnSearchChange","disableSelectedItemFiltering"]),{classes:Xe,cx:dt,theme:zt}=OX({invalid:!!p},{name:"MultiSelect",classNames:h,styles:m,unstyled:we,size:d,variant:T}),{systemStyles:cr,rest:pn}=Fm(Qe),ln=f.useRef(),Wr=f.useRef({}),xr=ly(P),[Fn,Hn]=f.useState(ae),[Wn,Nr]=f.useState(-1),[Do,Vr]=f.useState("column"),[Ur,ds]=hd({value:$,defaultValue:"",finalValue:void 0,onChange:z}),[$r,$s]=f.useState(!1),{scrollIntoView:fs,targetRef:ga,scrollableRef:Ls}=MP({duration:0,offset:5,cancelable:!1,isList:!0}),J=U&&typeof se=="function";let ee=null;const he=y.map(Be=>typeof Be=="string"?{label:Be,value:Be}:Be),_e=wP({data:he}),[me,ut]=hd({value:j4(b,y),defaultValue:j4(w,y),finalValue:[],onChange:S}),ot=f.useRef(!!xe&&xe{if(!Lt){const yt=me.filter(Mt=>Mt!==Be);ut(yt),xe&&yt.length{ds(Be.currentTarget.value),!Y&&!ot.current&&A&&Hn(!0)},xt=Be=>{typeof M=="function"&&M(Be),!Y&&!ot.current&&A&&Hn(!0)},He=aX({data:_e,searchable:A,searchValue:Ur,limit:F,filter:Q,value:me,disableSelectedItemFiltering:Pe});J&&re(Ur,_e)&&(ee=se(Ur),He.push({label:Ur,value:Ur,creatable:!0}));const Ce=Math.min(Wn,He.length-1),Ye=(Be,yt,Mt)=>{let Wt=Be;for(;Mt(Wt);)if(Wt=yt(Wt),!He[Wt].disabled)return Wt;return Be};ks(()=>{Nr(Pn&&Ur?0:-1)},[Ur,Pn]),ks(()=>{!Y&&me.length>y.length&&Hn(!1),xe&&me.length=xe&&(ot.current=!0,Hn(!1))},[me]);const Pt=Be=>{if(!Lt)if(V&&ds(""),me.includes(Be.value))Ht(Be.value);else{if(Be.creatable&&typeof oe=="function"){const yt=oe(Be.value);typeof yt<"u"&&yt!==null&&ut(typeof yt=="string"?[...me,yt]:[...me,yt.value])}else ut([...me,Be.value]);me.length===xe-1&&(ot.current=!0,Hn(!1)),He.length===1&&Hn(!1)}},Et=Be=>{typeof D=="function"&&D(Be),kt&&He[Ce]&&Fn&&Pt(He[Ce]),G&&ds(""),Hn(!1)},Nt=Be=>{if($r||(Tt==null||Tt(Be),Lt)||Be.key!=="Backspace"&&xe&&ot.current)return;const yt=Do==="column",Mt=()=>{Nr(jn=>{var Gt;const un=Ye(jn,sn=>sn+1,sn=>sn{Nr(jn=>{var Gt;const un=Ye(jn,sn=>sn-1,sn=>sn>0);return Fn&&(ga.current=Wr.current[(Gt=He[un])==null?void 0:Gt.value],fs({alignment:yt?"start":"end"})),un})};switch(Be.key){case"ArrowUp":{Be.preventDefault(),Hn(!0),yt?Wt():Mt();break}case"ArrowDown":{Be.preventDefault(),Hn(!0),yt?Mt():Wt();break}case"Enter":{Be.preventDefault(),He[Ce]&&Fn?Pt(He[Ce]):Hn(!0);break}case" ":{A||(Be.preventDefault(),He[Ce]&&Fn?Pt(He[Ce]):Hn(!0));break}case"Backspace":{me.length>0&&Ur.length===0&&(ut(me.slice(0,-1)),Hn(!0),xe&&(ot.current=!1));break}case"Home":{if(!A){Be.preventDefault(),Fn||Hn(!0);const jn=He.findIndex(Gt=>!Gt.disabled);Nr(jn),fs({alignment:yt?"end":"start"})}break}case"End":{if(!A){Be.preventDefault(),Fn||Hn(!0);const jn=He.map(Gt=>!!Gt.disabled).lastIndexOf(!1);Nr(jn),fs({alignment:yt?"end":"start"})}break}case"Escape":Hn(!1)}},qt=me.map(Be=>{let yt=_e.find(Mt=>Mt.value===Be&&!Mt.disabled);return!yt&&J&&(yt={value:Be,label:Be}),yt}).filter(Be=>!!Be).map((Be,yt)=>W.createElement(k,P4(Ul({},Be),{variant:T,disabled:Y,className:Xe.value,readOnly:Lt,onRemove:Mt=>{Mt.preventDefault(),Mt.stopPropagation(),Ht(Be.value)},key:Be.value,size:d,styles:m,classNames:h,radius:fe,index:yt}))),tn=Be=>me.includes(Be),en=()=>{var Be;ds(""),ut([]),(Be=ln.current)==null||Be.focus(),xe&&(ot.current=!1)},Ut=!Lt&&(He.length>0?Fn:Fn&&!!R);return ks(()=>{const Be=Ut?ke:ge;typeof Be=="function"&&Be()},[Ut]),W.createElement(Oc.Wrapper,Ul(Ul({required:s,id:xr,label:i,error:p,description:c,size:d,className:r,style:o,classNames:h,styles:m,__staticSelector:"MultiSelect",sx:pe,errorProps:vt,descriptionProps:Se,labelProps:bt,inputContainer:ht,inputWrapperOrder:$t,unstyled:we,withAsterisk:Le,variant:T},cr),v),W.createElement(yi,{opened:Ut,transitionProps:I,shadow:"sm",withinPortal:de,portalProps:Te,__staticSelector:"MultiSelect",onDirectionChange:Vr,switchDirectionOnFlip:Ee,zIndex:$e,dropdownPosition:on,positionDependencies:[..._t,Ur],classNames:h,styles:m,unstyled:we,variant:T},W.createElement(yi.Target,null,W.createElement("div",{className:Xe.wrapper,role:"combobox","aria-haspopup":"listbox","aria-owns":Fn&&Ut?`${xr}-items`:null,"aria-controls":xr,"aria-expanded":Fn,onMouseLeave:()=>Nr(-1),tabIndex:-1},W.createElement("input",{type:"hidden",name:ct,value:me.join(","),form:Me,disabled:Y}),W.createElement(Oc,Ul({__staticSelector:"MultiSelect",style:{overflow:"hidden"},component:"div",multiline:!0,size:d,variant:T,disabled:Y,error:p,required:s,radius:fe,icon:ie,unstyled:we,onMouseDown:Be=>{var yt;Be.preventDefault(),!Y&&!ot.current&&Hn(!Fn),(yt=ln.current)==null||yt.focus()},classNames:P4(Ul({},h),{input:dt({[Xe.input]:!A},h==null?void 0:h.input)})},TI({theme:zt,rightSection:X,rightSectionWidth:K,styles:m,size:d,shouldClear:q&&me.length>0,onClear:en,error:p,disabled:Y,clearButtonProps:Ge,readOnly:Lt})),W.createElement("div",{className:Xe.values,"data-clearable":q||void 0},qt,W.createElement("input",Ul({ref:Ud(t,ln),type:"search",id:xr,className:dt(Xe.searchInput,{[Xe.searchInputPointer]:!A,[Xe.searchInputInputHidden]:!Fn&&me.length>0||!A&&me.length>0,[Xe.searchInputEmpty]:me.length===0}),onKeyDown:Nt,value:Ur,onChange:ft,onFocus:xt,onBlur:Et,readOnly:!A||ot.current||Lt,placeholder:me.length===0?L:void 0,disabled:Y,"data-mantine-stop-propagation":Fn,autoComplete:"off",onCompositionStart:()=>$s(!0),onCompositionEnd:()=>$s(!1)},pn)))))),W.createElement(yi.Dropdown,{component:le||Um,maxHeight:E,direction:Do,id:xr,innerRef:Ls,__staticSelector:"MultiSelect",classNames:h,styles:m},W.createElement(cy,{data:He,hovered:Ce,classNames:h,styles:m,uuid:xr,__staticSelector:"MultiSelect",onItemHover:Nr,onItemSelect:Pt,itemsRefs:Wr,itemComponent:_,size:d,nothingFound:R,isItemSelected:tn,creatable:U&&!!ee,createLabel:ee,unstyled:we,variant:T}))))});LI.displayName="@mantine/core/MultiSelect";var LX=Object.defineProperty,zX=Object.defineProperties,BX=Object.getOwnPropertyDescriptors,qh=Object.getOwnPropertySymbols,zI=Object.prototype.hasOwnProperty,BI=Object.prototype.propertyIsEnumerable,I4=(e,t,n)=>t in e?LX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,ev=(e,t)=>{for(var n in t||(t={}))zI.call(t,n)&&I4(e,n,t[n]);if(qh)for(var n of qh(t))BI.call(t,n)&&I4(e,n,t[n]);return e},FX=(e,t)=>zX(e,BX(t)),HX=(e,t)=>{var n={};for(var r in e)zI.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&qh)for(var r of qh(e))t.indexOf(r)<0&&BI.call(e,r)&&(n[r]=e[r]);return n};const WX={type:"text",size:"sm",__staticSelector:"TextInput"},FI=f.forwardRef((e,t)=>{const n=iI("TextInput",WX,e),{inputProps:r,wrapperProps:o}=n,s=HX(n,["inputProps","wrapperProps"]);return W.createElement(Oc.Wrapper,ev({},o),W.createElement(Oc,FX(ev(ev({},r),s),{ref:t})))});FI.displayName="@mantine/core/TextInput";function VX({data:e,searchable:t,limit:n,searchValue:r,filter:o,value:s,filterDataOnExactSearchMatch:i}){if(!t)return e;const c=s!=null&&e.find(p=>p.value===s)||null;if(c&&!i&&(c==null?void 0:c.label)===r){if(n){if(n>=e.length)return e;const p=e.indexOf(c),h=p+n,m=h-e.length;return m>0?e.slice(p-m):e.slice(p,h)}return e}const d=[];for(let p=0;p=n));p+=1);return d}var UX=so(()=>({input:{"&:not(:disabled)":{cursor:"pointer","&::selection":{backgroundColor:"transparent"}}}}));const GX=UX;var qX=Object.defineProperty,KX=Object.defineProperties,XX=Object.getOwnPropertyDescriptors,Kh=Object.getOwnPropertySymbols,HI=Object.prototype.hasOwnProperty,WI=Object.prototype.propertyIsEnumerable,E4=(e,t,n)=>t in e?qX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,ku=(e,t)=>{for(var n in t||(t={}))HI.call(t,n)&&E4(e,n,t[n]);if(Kh)for(var n of Kh(t))WI.call(t,n)&&E4(e,n,t[n]);return e},tv=(e,t)=>KX(e,XX(t)),YX=(e,t)=>{var n={};for(var r in e)HI.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Kh)for(var r of Kh(e))t.indexOf(r)<0&&WI.call(e,r)&&(n[r]=e[r]);return n};function QX(e,t){return t.label.toLowerCase().trim().includes(e.toLowerCase().trim())}function JX(e,t){return!!e&&!t.some(n=>n.label.toLowerCase()===e.toLowerCase())}const ZX={required:!1,size:"sm",shadow:"sm",itemComponent:uy,transitionProps:{transition:"fade",duration:0},initiallyOpened:!1,filter:QX,maxDropdownHeight:220,searchable:!1,clearable:!1,limit:1/0,disabled:!1,creatable:!1,shouldCreate:JX,selectOnBlur:!1,switchDirectionOnFlip:!1,filterDataOnExactSearchMatch:!1,zIndex:ay("popover"),positionDependencies:[],dropdownPosition:"flip"},xy=f.forwardRef((e,t)=>{const n=iI("Select",ZX,e),{inputProps:r,wrapperProps:o,shadow:s,data:i,value:c,defaultValue:d,onChange:p,itemComponent:h,onKeyDown:m,onBlur:v,onFocus:b,transitionProps:w,initiallyOpened:y,unstyled:S,classNames:k,styles:_,filter:P,maxDropdownHeight:I,searchable:E,clearable:O,nothingFound:R,limit:M,disabled:D,onSearchChange:A,searchValue:L,rightSection:Q,rightSectionWidth:F,creatable:V,getCreateLabel:q,shouldCreate:G,selectOnBlur:T,onCreate:z,dropdownComponent:$,onDropdownClose:Y,onDropdownOpen:ae,withinPortal:fe,portalProps:ie,switchDirectionOnFlip:X,zIndex:K,name:U,dropdownPosition:se,allowDeselect:re,placeholder:oe,filterDataOnExactSearchMatch:pe,form:le,positionDependencies:ge,readOnly:ke,clearButtonProps:xe,hoverOnSearchChange:de}=n,Te=YX(n,["inputProps","wrapperProps","shadow","data","value","defaultValue","onChange","itemComponent","onKeyDown","onBlur","onFocus","transitionProps","initiallyOpened","unstyled","classNames","styles","filter","maxDropdownHeight","searchable","clearable","nothingFound","limit","disabled","onSearchChange","searchValue","rightSection","rightSectionWidth","creatable","getCreateLabel","shouldCreate","selectOnBlur","onCreate","dropdownComponent","onDropdownClose","onDropdownOpen","withinPortal","portalProps","switchDirectionOnFlip","zIndex","name","dropdownPosition","allowDeselect","placeholder","filterDataOnExactSearchMatch","form","positionDependencies","readOnly","clearButtonProps","hoverOnSearchChange"]),{classes:Ee,cx:$e,theme:kt}=GX(),[ct,on]=f.useState(y),[vt,bt]=f.useState(-1),Se=f.useRef(),Me=f.useRef({}),[_t,Tt]=f.useState("column"),we=_t==="column",{scrollIntoView:ht,targetRef:$t,scrollableRef:Lt}=MP({duration:0,offset:5,cancelable:!1,isList:!0}),Le=re===void 0?O:re,Ge=ee=>{if(ct!==ee){on(ee);const he=ee?ae:Y;typeof he=="function"&&he()}},Pn=V&&typeof q=="function";let Pe=null;const Qe=i.map(ee=>typeof ee=="string"?{label:ee,value:ee}:ee),Xe=wP({data:Qe}),[dt,zt,cr]=hd({value:c,defaultValue:d,finalValue:null,onChange:p}),pn=Xe.find(ee=>ee.value===dt),[ln,Wr]=hd({value:L,defaultValue:(pn==null?void 0:pn.label)||"",finalValue:void 0,onChange:A}),xr=ee=>{Wr(ee),E&&typeof A=="function"&&A(ee)},Fn=()=>{var ee;ke||(zt(null),cr||xr(""),(ee=Se.current)==null||ee.focus())};f.useEffect(()=>{const ee=Xe.find(he=>he.value===dt);ee?xr(ee.label):(!Pn||!dt)&&xr("")},[dt]),f.useEffect(()=>{pn&&(!E||!ct)&&xr(pn.label)},[pn==null?void 0:pn.label]);const Hn=ee=>{if(!ke)if(Le&&(pn==null?void 0:pn.value)===ee.value)zt(null),Ge(!1);else{if(ee.creatable&&typeof z=="function"){const he=z(ee.value);typeof he<"u"&&he!==null&&zt(typeof he=="string"?he:he.value)}else zt(ee.value);cr||xr(ee.label),bt(-1),Ge(!1),Se.current.focus()}},Wn=VX({data:Xe,searchable:E,limit:M,searchValue:ln,filter:P,filterDataOnExactSearchMatch:pe,value:dt});Pn&&G(ln,Wn)&&(Pe=q(ln),Wn.push({label:ln,value:ln,creatable:!0}));const Nr=(ee,he,_e)=>{let me=ee;for(;_e(me);)if(me=he(me),!Wn[me].disabled)return me;return ee};ks(()=>{bt(de&&ln?0:-1)},[ln,de]);const Do=dt?Wn.findIndex(ee=>ee.value===dt):0,Vr=!ke&&(Wn.length>0?ct:ct&&!!R),Ur=()=>{bt(ee=>{var he;const _e=Nr(ee,me=>me-1,me=>me>0);return $t.current=Me.current[(he=Wn[_e])==null?void 0:he.value],Vr&&ht({alignment:we?"start":"end"}),_e})},ds=()=>{bt(ee=>{var he;const _e=Nr(ee,me=>me+1,me=>mewindow.setTimeout(()=>{var ee;$t.current=Me.current[(ee=Wn[Do])==null?void 0:ee.value],ht({alignment:we?"end":"start"})},50);ks(()=>{Vr&&$r()},[Vr]);const $s=ee=>{switch(typeof m=="function"&&m(ee),ee.key){case"ArrowUp":{ee.preventDefault(),ct?we?Ur():ds():(bt(Do),Ge(!0),$r());break}case"ArrowDown":{ee.preventDefault(),ct?we?ds():Ur():(bt(Do),Ge(!0),$r());break}case"Home":{if(!E){ee.preventDefault(),ct||Ge(!0);const he=Wn.findIndex(_e=>!_e.disabled);bt(he),Vr&&ht({alignment:we?"end":"start"})}break}case"End":{if(!E){ee.preventDefault(),ct||Ge(!0);const he=Wn.map(_e=>!!_e.disabled).lastIndexOf(!1);bt(he),Vr&&ht({alignment:we?"end":"start"})}break}case"Escape":{ee.preventDefault(),Ge(!1),bt(-1);break}case" ":{E||(ee.preventDefault(),Wn[vt]&&ct?Hn(Wn[vt]):(Ge(!0),bt(Do),$r()));break}case"Enter":E||ee.preventDefault(),Wn[vt]&&ct&&(ee.preventDefault(),Hn(Wn[vt]))}},fs=ee=>{typeof v=="function"&&v(ee);const he=Xe.find(_e=>_e.value===dt);T&&Wn[vt]&&ct&&Hn(Wn[vt]),xr((he==null?void 0:he.label)||""),Ge(!1)},ga=ee=>{typeof b=="function"&&b(ee),E&&Ge(!0)},Ls=ee=>{ke||(xr(ee.currentTarget.value),O&&ee.currentTarget.value===""&&zt(null),bt(-1),Ge(!0))},J=()=>{ke||(Ge(!ct),dt&&!ct&&bt(Do))};return W.createElement(Oc.Wrapper,tv(ku({},o),{__staticSelector:"Select"}),W.createElement(yi,{opened:Vr,transitionProps:w,shadow:s,withinPortal:fe,portalProps:ie,__staticSelector:"Select",onDirectionChange:Tt,switchDirectionOnFlip:X,zIndex:K,dropdownPosition:se,positionDependencies:[...ge,ln],classNames:k,styles:_,unstyled:S,variant:r.variant},W.createElement(yi.Target,null,W.createElement("div",{role:"combobox","aria-haspopup":"listbox","aria-owns":Vr?`${r.id}-items`:null,"aria-controls":r.id,"aria-expanded":Vr,onMouseLeave:()=>bt(-1),tabIndex:-1},W.createElement("input",{type:"hidden",name:U,value:dt||"",form:le,disabled:D}),W.createElement(Oc,ku(tv(ku(ku({autoComplete:"off",type:"search"},r),Te),{ref:Ud(t,Se),onKeyDown:$s,__staticSelector:"Select",value:ln,placeholder:oe,onChange:Ls,"aria-autocomplete":"list","aria-controls":Vr?`${r.id}-items`:null,"aria-activedescendant":vt>=0?`${r.id}-${vt}`:null,onMouseDown:J,onBlur:fs,onFocus:ga,readOnly:!E||ke,disabled:D,"data-mantine-stop-propagation":Vr,name:null,classNames:tv(ku({},k),{input:$e({[Ee.input]:!E},k==null?void 0:k.input)})}),TI({theme:kt,rightSection:Q,rightSectionWidth:F,styles:_,size:r.size,shouldClear:O&&!!pn,onClear:Fn,error:o.error,clearButtonProps:xe,disabled:D,readOnly:ke}))))),W.createElement(yi.Dropdown,{component:$||Um,maxHeight:I,direction:_t,id:r.id,innerRef:Lt,__staticSelector:"Select",classNames:k,styles:_},W.createElement(cy,{data:Wn,hovered:vt,classNames:k,styles:_,isItemSelected:ee=>ee===dt,uuid:r.id,__staticSelector:"Select",onItemHover:bt,onItemSelect:Hn,itemsRefs:Me,itemComponent:h,size:r.size,nothingFound:R,creatable:Pn&&!!Pe,createLabel:Pe,"aria-label":o.label,unstyled:S,variant:r.variant}))))});xy.displayName="@mantine/core/Select";const wy=()=>{const[e,t,n,r,o,s,i,c,d,p,h,m,v,b,w,y,S,k,_,P,I,E,O,R,M,D,A,L,Q,F,V,q,G,T,z,$,Y,ae]=Lc("colors",["base.50","base.100","base.150","base.200","base.250","base.300","base.350","base.400","base.450","base.500","base.550","base.600","base.650","base.700","base.750","base.800","base.850","base.900","base.950","accent.50","accent.100","accent.150","accent.200","accent.250","accent.300","accent.350","accent.400","accent.450","accent.500","accent.550","accent.600","accent.650","accent.700","accent.750","accent.800","accent.850","accent.900","accent.950"]);return{base50:e,base100:t,base150:n,base200:r,base250:o,base300:s,base350:i,base400:c,base450:d,base500:p,base550:h,base600:m,base650:v,base700:b,base750:w,base800:y,base850:S,base900:k,base950:_,accent50:P,accent100:I,accent150:E,accent200:O,accent250:R,accent300:M,accent350:D,accent400:A,accent450:L,accent500:Q,accent550:F,accent600:V,accent650:q,accent700:G,accent750:T,accent800:z,accent850:$,accent900:Y,accent950:ae}},Fe=(e,t)=>n=>n==="light"?e:t,VI=()=>{const{base50:e,base100:t,base200:n,base300:r,base400:o,base500:s,base600:i,base700:c,base800:d,base900:p,accent200:h,accent300:m,accent400:v,accent500:b,accent600:w}=wy(),{colorMode:y}=Ds(),[S]=Lc("shadows",["dark-lg"]);return f.useCallback(()=>({label:{color:Fe(c,r)(y)},separatorLabel:{color:Fe(s,s)(y),"::after":{borderTopColor:Fe(r,c)(y)}},input:{backgroundColor:Fe(e,p)(y),borderWidth:"2px",borderColor:Fe(n,d)(y),color:Fe(p,t)(y),paddingRight:24,fontWeight:600,"&:hover":{borderColor:Fe(r,i)(y)},"&:focus":{borderColor:Fe(m,w)(y)},"&:is(:focus, :hover)":{borderColor:Fe(o,s)(y)},"&:focus-within":{borderColor:Fe(h,w)(y)},"&[data-disabled]":{backgroundColor:Fe(r,c)(y),color:Fe(i,o)(y),cursor:"not-allowed"}},value:{backgroundColor:Fe(t,p)(y),color:Fe(p,t)(y),button:{color:Fe(p,t)(y)},"&:hover":{backgroundColor:Fe(r,c)(y),cursor:"pointer"}},dropdown:{backgroundColor:Fe(n,d)(y),borderColor:Fe(n,d)(y),boxShadow:S},item:{backgroundColor:Fe(n,d)(y),color:Fe(d,n)(y),padding:6,"&[data-hovered]":{color:Fe(p,t)(y),backgroundColor:Fe(r,c)(y)},"&[data-active]":{backgroundColor:Fe(r,c)(y),"&:hover":{color:Fe(p,t)(y),backgroundColor:Fe(r,c)(y)}},"&[data-selected]":{backgroundColor:Fe(v,w)(y),color:Fe(e,t)(y),fontWeight:600,"&:hover":{backgroundColor:Fe(b,b)(y),color:Fe("white",e)(y)}},"&[data-disabled]":{color:Fe(s,i)(y),cursor:"not-allowed"}},rightSection:{width:32,button:{color:Fe(p,t)(y)}}}),[h,m,v,b,w,t,n,r,o,e,s,i,c,d,p,S,y])},eY=e=>{const{searchable:t=!0,tooltip:n,inputRef:r,onChange:o,label:s,disabled:i,...c}=e,d=te(),[p,h]=f.useState(""),m=f.useCallback(y=>{y.shiftKey&&d(Io(!0))},[d]),v=f.useCallback(y=>{y.shiftKey||d(Io(!1))},[d]),b=f.useCallback(y=>{o&&o(y)},[o]),w=VI();return a.jsx(vn,{label:n,placement:"top",hasArrow:!0,children:a.jsx(xy,{ref:r,label:s?a.jsx(go,{isDisabled:i,children:a.jsx(Bo,{children:s})}):void 0,disabled:i,searchValue:p,onSearchChange:h,onChange:b,onKeyDown:m,onKeyUp:v,searchable:t,maxDropdownHeight:300,styles:w,...c})})},ar=f.memo(eY),tY=be([at],({changeBoardModal:e})=>{const{isModalOpen:t,imagesToChange:n}=e;return{isModalOpen:t,imagesToChange:n}},Ke),nY=()=>{const e=te(),[t,n]=f.useState(),{data:r,isFetching:o}=hm(),{imagesToChange:s,isModalOpen:i}=B(tY),[c]=XR(),[d]=YR(),p=f.useMemo(()=>{const b=[{label:"Uncategorized",value:"none"}];return(r??[]).forEach(w=>b.push({label:w.board_name,value:w.board_id})),b},[r]),h=f.useCallback(()=>{e(J2()),e(tb(!1))},[e]),m=f.useCallback(()=>{!s.length||!t||(t==="none"?d({imageDTOs:s}):c({imageDTOs:s,board_id:t}),n(null),e(J2()))},[c,e,s,d,t]),v=f.useRef(null);return a.jsx(zd,{isOpen:i,onClose:h,leastDestructiveRef:v,isCentered:!0,children:a.jsx(za,{children:a.jsxs(Bd,{children:[a.jsx(La,{fontSize:"lg",fontWeight:"bold",children:"Change Board"}),a.jsx(Ba,{children:a.jsxs(H,{sx:{flexDir:"column",gap:4},children:[a.jsxs(Je,{children:["Moving ",`${s.length}`," image",`${s.length>1?"s":""}`," to board:"]}),a.jsx(ar,{placeholder:o?"Loading...":"Select Board",disabled:o,onChange:b=>n(b),value:t,data:p})]})}),a.jsxs($a,{children:[a.jsx(Yt,{ref:v,onClick:h,children:"Cancel"}),a.jsx(Yt,{colorScheme:"accent",onClick:m,ml:3,children:"Move"})]})]})})})},rY=f.memo(nY),oY=e=>{const{label:t,isDisabled:n=!1,width:r="auto",formControlProps:o,formLabelProps:s,tooltip:i,...c}=e;return a.jsx(vn,{label:i,hasArrow:!0,placement:"top",isDisabled:!i,children:a.jsxs(go,{isDisabled:n,width:r,display:"flex",alignItems:"center",...o,children:[t&&a.jsx(Bo,{my:1,flexGrow:1,sx:{cursor:n?"not-allowed":"pointer",...s==null?void 0:s.sx,pe:4},...s,children:t}),a.jsx(ny,{...c})]})})},yr=f.memo(oY),sY=e=>{const{imageUsage:t,topMessage:n="This image is currently in use in the following features:",bottomMessage:r="If you delete this image, those features will immediately be reset."}=e;return!t||!Pa(t)?null:a.jsxs(a.Fragment,{children:[a.jsx(Je,{children:n}),a.jsxs($b,{sx:{paddingInlineStart:6},children:[t.isInitialImage&&a.jsx(ja,{children:"Image to Image"}),t.isCanvasImage&&a.jsx(ja,{children:"Unified Canvas"}),t.isControlNetImage&&a.jsx(ja,{children:"ControlNet"}),t.isNodesImage&&a.jsx(ja,{children:"Node Editor"})]}),a.jsx(Je,{children:r})]})},UI=f.memo(sY),aY=be([at,QR],(e,t)=>{const{system:n,config:r,deleteImageModal:o}=e,{shouldConfirmOnDelete:s}=n,{canRestoreDeletedImagesFromBin:i}=r,{imagesToDelete:c,isModalOpen:d}=o,p=(c??[]).map(({image_name:m})=>L_(e,m)),h={isInitialImage:Pa(p,m=>m.isInitialImage),isCanvasImage:Pa(p,m=>m.isCanvasImage),isNodesImage:Pa(p,m=>m.isNodesImage),isControlNetImage:Pa(p,m=>m.isControlNetImage)};return{shouldConfirmOnDelete:s,canRestoreDeletedImagesFromBin:i,imagesToDelete:c,imagesUsage:t,isModalOpen:d,imageUsageSummary:h}},Ke),iY=()=>{const e=te(),{t}=ye(),{shouldConfirmOnDelete:n,canRestoreDeletedImagesFromBin:r,imagesToDelete:o,imagesUsage:s,isModalOpen:i,imageUsageSummary:c}=B(aY),d=f.useCallback(v=>e(z_(!v.target.checked)),[e]),p=f.useCallback(()=>{e(Z2()),e(JR(!1))},[e]),h=f.useCallback(()=>{!o.length||!s.length||(e(Z2()),e(ZR({imageDTOs:o,imagesUsage:s})))},[e,o,s]),m=f.useRef(null);return a.jsx(zd,{isOpen:i,onClose:p,leastDestructiveRef:m,isCentered:!0,children:a.jsx(za,{children:a.jsxs(Bd,{children:[a.jsx(La,{fontSize:"lg",fontWeight:"bold",children:t("gallery.deleteImage")}),a.jsx(Ba,{children:a.jsxs(H,{direction:"column",gap:3,children:[a.jsx(UI,{imageUsage:c}),a.jsx(Ka,{}),a.jsx(Je,{children:t(r?"gallery.deleteImageBin":"gallery.deleteImagePermanent")}),a.jsx(Je,{children:t("common.areYouSure")}),a.jsx(yr,{label:t("common.dontAskMeAgain"),isChecked:!n,onChange:d})]})}),a.jsxs($a,{children:[a.jsx(Yt,{ref:m,onClick:p,children:"Cancel"}),a.jsx(Yt,{colorScheme:"error",onClick:h,ml:3,children:"Delete"})]})]})})})},lY=f.memo(iY),mn=e=>e.canvas,lr=be([mn,Kn,vo],(e,t,n)=>e.layerState.stagingArea.images.length>0||t==="unifiedCanvas"&&n.isProcessing),cY=e=>e.canvas.layerState.objects.find(B_),uY=h9(e=>{e(F_(!0))},300),_o=()=>(e,t)=>{Kn(t())==="unifiedCanvas"&&uY(e)};var dY=globalThis&&globalThis.__extends||function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,o){r.__proto__=o}||function(r,o){for(var s in o)Object.prototype.hasOwnProperty.call(o,s)&&(r[s]=o[s])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}(),Pr=globalThis&&globalThis.__assign||function(){return Pr=Object.assign||function(e){for(var t,n=1,r=arguments.length;n"u"?void 0:Number(r),maxHeight:typeof o>"u"?void 0:Number(o),minWidth:typeof s>"u"?void 0:Number(s),minHeight:typeof i>"u"?void 0:Number(i)}},bY=["as","style","className","grid","snap","bounds","boundsByDirection","size","defaultSize","minWidth","minHeight","maxWidth","maxHeight","lockAspectRatio","lockAspectRatioExtraWidth","lockAspectRatioExtraHeight","enable","handleStyles","handleClasses","handleWrapperStyle","handleWrapperClass","children","onResizeStart","onResize","onResizeStop","handleComponent","scale","resizeRatio","snapGap"],A4="__resizable_base__",yY=function(e){hY(t,e);function t(n){var r=e.call(this,n)||this;return r.ratio=1,r.resizable=null,r.parentLeft=0,r.parentTop=0,r.resizableLeft=0,r.resizableRight=0,r.resizableTop=0,r.resizableBottom=0,r.targetLeft=0,r.targetTop=0,r.appendBase=function(){if(!r.resizable||!r.window)return null;var o=r.parentNode;if(!o)return null;var s=r.window.document.createElement("div");return s.style.width="100%",s.style.height="100%",s.style.position="absolute",s.style.transform="scale(0, 0)",s.style.left="0",s.style.flex="0 0 100%",s.classList?s.classList.add(A4):s.className+=A4,o.appendChild(s),s},r.removeBase=function(o){var s=r.parentNode;s&&s.removeChild(o)},r.ref=function(o){o&&(r.resizable=o)},r.state={isResizing:!1,width:typeof(r.propsSize&&r.propsSize.width)>"u"?"auto":r.propsSize&&r.propsSize.width,height:typeof(r.propsSize&&r.propsSize.height)>"u"?"auto":r.propsSize&&r.propsSize.height,direction:"right",original:{x:0,y:0,width:0,height:0},backgroundStyle:{height:"100%",width:"100%",backgroundColor:"rgba(0,0,0,0)",cursor:"auto",opacity:0,position:"fixed",zIndex:9999,top:"0",left:"0",bottom:"0",right:"0"},flexBasis:void 0},r.onResizeStart=r.onResizeStart.bind(r),r.onMouseMove=r.onMouseMove.bind(r),r.onMouseUp=r.onMouseUp.bind(r),r}return Object.defineProperty(t.prototype,"parentNode",{get:function(){return this.resizable?this.resizable.parentNode:null},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"window",{get:function(){return!this.resizable||!this.resizable.ownerDocument?null:this.resizable.ownerDocument.defaultView},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"propsSize",{get:function(){return this.props.size||this.props.defaultSize||mY},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"size",{get:function(){var n=0,r=0;if(this.resizable&&this.window){var o=this.resizable.offsetWidth,s=this.resizable.offsetHeight,i=this.resizable.style.position;i!=="relative"&&(this.resizable.style.position="relative"),n=this.resizable.style.width!=="auto"?this.resizable.offsetWidth:o,r=this.resizable.style.height!=="auto"?this.resizable.offsetHeight:s,this.resizable.style.position=i}return{width:n,height:r}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"sizeStyle",{get:function(){var n=this,r=this.props.size,o=function(c){if(typeof n.state[c]>"u"||n.state[c]==="auto")return"auto";if(n.propsSize&&n.propsSize[c]&&n.propsSize[c].toString().endsWith("%")){if(n.state[c].toString().endsWith("%"))return n.state[c].toString();var d=n.getParentSize(),p=Number(n.state[c].toString().replace("px","")),h=p/d[c]*100;return h+"%"}return nv(n.state[c])},s=r&&typeof r.width<"u"&&!this.state.isResizing?nv(r.width):o("width"),i=r&&typeof r.height<"u"&&!this.state.isResizing?nv(r.height):o("height");return{width:s,height:i}},enumerable:!1,configurable:!0}),t.prototype.getParentSize=function(){if(!this.parentNode)return this.window?{width:this.window.innerWidth,height:this.window.innerHeight}:{width:0,height:0};var n=this.appendBase();if(!n)return{width:0,height:0};var r=!1,o=this.parentNode.style.flexWrap;o!=="wrap"&&(r=!0,this.parentNode.style.flexWrap="wrap"),n.style.position="relative",n.style.minWidth="100%",n.style.minHeight="100%";var s={width:n.offsetWidth,height:n.offsetHeight};return r&&(this.parentNode.style.flexWrap=o),this.removeBase(n),s},t.prototype.bindEvents=function(){this.window&&(this.window.addEventListener("mouseup",this.onMouseUp),this.window.addEventListener("mousemove",this.onMouseMove),this.window.addEventListener("mouseleave",this.onMouseUp),this.window.addEventListener("touchmove",this.onMouseMove,{capture:!0,passive:!1}),this.window.addEventListener("touchend",this.onMouseUp))},t.prototype.unbindEvents=function(){this.window&&(this.window.removeEventListener("mouseup",this.onMouseUp),this.window.removeEventListener("mousemove",this.onMouseMove),this.window.removeEventListener("mouseleave",this.onMouseUp),this.window.removeEventListener("touchmove",this.onMouseMove,!0),this.window.removeEventListener("touchend",this.onMouseUp))},t.prototype.componentDidMount=function(){if(!(!this.resizable||!this.window)){var n=this.window.getComputedStyle(this.resizable);this.setState({width:this.state.width||this.size.width,height:this.state.height||this.size.height,flexBasis:n.flexBasis!=="auto"?n.flexBasis:void 0})}},t.prototype.componentWillUnmount=function(){this.window&&this.unbindEvents()},t.prototype.createSizeForCssProperty=function(n,r){var o=this.propsSize&&this.propsSize[r];return this.state[r]==="auto"&&this.state.original[r]===n&&(typeof o>"u"||o==="auto")?"auto":n},t.prototype.calculateNewMaxFromBoundary=function(n,r){var o=this.props.boundsByDirection,s=this.state.direction,i=o&&Gl("left",s),c=o&&Gl("top",s),d,p;if(this.props.bounds==="parent"){var h=this.parentNode;h&&(d=i?this.resizableRight-this.parentLeft:h.offsetWidth+(this.parentLeft-this.resizableLeft),p=c?this.resizableBottom-this.parentTop:h.offsetHeight+(this.parentTop-this.resizableTop))}else this.props.bounds==="window"?this.window&&(d=i?this.resizableRight:this.window.innerWidth-this.resizableLeft,p=c?this.resizableBottom:this.window.innerHeight-this.resizableTop):this.props.bounds&&(d=i?this.resizableRight-this.targetLeft:this.props.bounds.offsetWidth+(this.targetLeft-this.resizableLeft),p=c?this.resizableBottom-this.targetTop:this.props.bounds.offsetHeight+(this.targetTop-this.resizableTop));return d&&Number.isFinite(d)&&(n=n&&n"u"?10:s.width,m=typeof o.width>"u"||o.width<0?n:o.width,v=typeof s.height>"u"?10:s.height,b=typeof o.height>"u"||o.height<0?r:o.height,w=d||0,y=p||0;if(c){var S=(v-w)*this.ratio+y,k=(b-w)*this.ratio+y,_=(h-y)/this.ratio+w,P=(m-y)/this.ratio+w,I=Math.max(h,S),E=Math.min(m,k),O=Math.max(v,_),R=Math.min(b,P);n=fp(n,I,E),r=fp(r,O,R)}else n=fp(n,h,m),r=fp(r,v,b);return{newWidth:n,newHeight:r}},t.prototype.setBoundingClientRect=function(){if(this.props.bounds==="parent"){var n=this.parentNode;if(n){var r=n.getBoundingClientRect();this.parentLeft=r.left,this.parentTop=r.top}}if(this.props.bounds&&typeof this.props.bounds!="string"){var o=this.props.bounds.getBoundingClientRect();this.targetLeft=o.left,this.targetTop=o.top}if(this.resizable){var s=this.resizable.getBoundingClientRect(),i=s.left,c=s.top,d=s.right,p=s.bottom;this.resizableLeft=i,this.resizableRight=d,this.resizableTop=c,this.resizableBottom=p}},t.prototype.onResizeStart=function(n,r){if(!(!this.resizable||!this.window)){var o=0,s=0;if(n.nativeEvent&&gY(n.nativeEvent)?(o=n.nativeEvent.clientX,s=n.nativeEvent.clientY):n.nativeEvent&&pp(n.nativeEvent)&&(o=n.nativeEvent.touches[0].clientX,s=n.nativeEvent.touches[0].clientY),this.props.onResizeStart&&this.resizable){var i=this.props.onResizeStart(n,r,this.resizable);if(i===!1)return}this.props.size&&(typeof this.props.size.height<"u"&&this.props.size.height!==this.state.height&&this.setState({height:this.props.size.height}),typeof this.props.size.width<"u"&&this.props.size.width!==this.state.width&&this.setState({width:this.props.size.width})),this.ratio=typeof this.props.lockAspectRatio=="number"?this.props.lockAspectRatio:this.size.width/this.size.height;var c,d=this.window.getComputedStyle(this.resizable);if(d.flexBasis!=="auto"){var p=this.parentNode;if(p){var h=this.window.getComputedStyle(p).flexDirection;this.flexDir=h.startsWith("row")?"row":"column",c=d.flexBasis}}this.setBoundingClientRect(),this.bindEvents();var m={original:{x:o,y:s,width:this.size.width,height:this.size.height},isResizing:!0,backgroundStyle:qs(qs({},this.state.backgroundStyle),{cursor:this.window.getComputedStyle(n.target).cursor||"auto"}),direction:r,flexBasis:c};this.setState(m)}},t.prototype.onMouseMove=function(n){var r=this;if(!(!this.state.isResizing||!this.resizable||!this.window)){if(this.window.TouchEvent&&pp(n))try{n.preventDefault(),n.stopPropagation()}catch{}var o=this.props,s=o.maxWidth,i=o.maxHeight,c=o.minWidth,d=o.minHeight,p=pp(n)?n.touches[0].clientX:n.clientX,h=pp(n)?n.touches[0].clientY:n.clientY,m=this.state,v=m.direction,b=m.original,w=m.width,y=m.height,S=this.getParentSize(),k=vY(S,this.window.innerWidth,this.window.innerHeight,s,i,c,d);s=k.maxWidth,i=k.maxHeight,c=k.minWidth,d=k.minHeight;var _=this.calculateNewSizeFromDirection(p,h),P=_.newHeight,I=_.newWidth,E=this.calculateNewMaxFromBoundary(s,i);this.props.snap&&this.props.snap.x&&(I=D4(I,this.props.snap.x,this.props.snapGap)),this.props.snap&&this.props.snap.y&&(P=D4(P,this.props.snap.y,this.props.snapGap));var O=this.calculateNewSizeFromAspectRatio(I,P,{width:E.maxWidth,height:E.maxHeight},{width:c,height:d});if(I=O.newWidth,P=O.newHeight,this.props.grid){var R=M4(I,this.props.grid[0]),M=M4(P,this.props.grid[1]),D=this.props.snapGap||0;I=D===0||Math.abs(R-I)<=D?R:I,P=D===0||Math.abs(M-P)<=D?M:P}var A={width:I-b.width,height:P-b.height};if(w&&typeof w=="string"){if(w.endsWith("%")){var L=I/S.width*100;I=L+"%"}else if(w.endsWith("vw")){var Q=I/this.window.innerWidth*100;I=Q+"vw"}else if(w.endsWith("vh")){var F=I/this.window.innerHeight*100;I=F+"vh"}}if(y&&typeof y=="string"){if(y.endsWith("%")){var L=P/S.height*100;P=L+"%"}else if(y.endsWith("vw")){var Q=P/this.window.innerWidth*100;P=Q+"vw"}else if(y.endsWith("vh")){var F=P/this.window.innerHeight*100;P=F+"vh"}}var V={width:this.createSizeForCssProperty(I,"width"),height:this.createSizeForCssProperty(P,"height")};this.flexDir==="row"?V.flexBasis=V.width:this.flexDir==="column"&&(V.flexBasis=V.height),_i.flushSync(function(){r.setState(V)}),this.props.onResize&&this.props.onResize(n,v,this.resizable,A)}},t.prototype.onMouseUp=function(n){var r=this.state,o=r.isResizing,s=r.direction,i=r.original;if(!(!o||!this.resizable)){var c={width:this.size.width-i.width,height:this.size.height-i.height};this.props.onResizeStop&&this.props.onResizeStop(n,s,this.resizable,c),this.props.size&&this.setState(this.props.size),this.unbindEvents(),this.setState({isResizing:!1,backgroundStyle:qs(qs({},this.state.backgroundStyle),{cursor:"auto"})})}},t.prototype.updateSize=function(n){this.setState({width:n.width,height:n.height})},t.prototype.renderResizer=function(){var n=this,r=this.props,o=r.enable,s=r.handleStyles,i=r.handleClasses,c=r.handleWrapperStyle,d=r.handleWrapperClass,p=r.handleComponent;if(!o)return null;var h=Object.keys(o).map(function(m){return o[m]!==!1?f.createElement(pY,{key:m,direction:m,onResizeStart:n.onResizeStart,replaceStyles:s&&s[m],className:i&&i[m]},p&&p[m]?p[m]:null):null});return f.createElement("div",{className:d,style:c},h)},t.prototype.render=function(){var n=this,r=Object.keys(this.props).reduce(function(i,c){return bY.indexOf(c)!==-1||(i[c]=n.props[c]),i},{}),o=qs(qs(qs({position:"relative",userSelect:this.state.isResizing?"none":"auto"},this.props.style),this.sizeStyle),{maxWidth:this.props.maxWidth,maxHeight:this.props.maxHeight,minWidth:this.props.minWidth,minHeight:this.props.minHeight,boxSizing:"border-box",flexShrink:0});this.state.flexBasis&&(o.flexBasis=this.state.flexBasis);var s=this.props.as||"div";return f.createElement(s,qs({ref:this.ref,style:o,className:this.props.className},r),this.state.isResizing&&f.createElement("div",{style:this.state.backgroundStyle}),this.props.children,this.renderResizer())},t.defaultProps={as:"div",onResizeStart:function(){},onResize:function(){},onResizeStop:function(){},enable:{top:!0,right:!0,bottom:!0,left:!0,topRight:!0,bottomRight:!0,bottomLeft:!0,topLeft:!0},style:{},grid:[1,1],lockAspectRatio:!1,lockAspectRatioExtraWidth:0,lockAspectRatioExtraHeight:0,scale:1,resizeRatio:1,snapGap:0},t}(f.PureComponent);const xY=({direction:e,langDirection:t})=>({top:e==="bottom",right:t!=="rtl"&&e==="left"||t==="rtl"&&e==="right",bottom:e==="top",left:t!=="rtl"&&e==="right"||t==="rtl"&&e==="left"}),wY=({direction:e,minWidth:t,maxWidth:n,minHeight:r,maxHeight:o})=>{const s=t??(["left","right"].includes(e)?10:void 0),i=n??(["left","right"].includes(e)?"95vw":void 0),c=r??(["top","bottom"].includes(e)?10:void 0),d=o??(["top","bottom"].includes(e)?"95vh":void 0);return{...s?{minWidth:s}:{},...i?{maxWidth:i}:{},...c?{minHeight:c}:{},...d?{maxHeight:d}:{}}},Ca="0.75rem",mp="1rem",_u="5px",SY=({isResizable:e,direction:t})=>{const n=`calc((2 * ${Ca} + ${_u}) / -2)`;return t==="top"?{containerStyles:{borderBottomWidth:_u,paddingBottom:mp},handleStyles:e?{top:{paddingTop:Ca,paddingBottom:Ca,bottom:n}}:{}}:t==="left"?{containerStyles:{borderInlineEndWidth:_u,paddingInlineEnd:mp},handleStyles:e?{right:{paddingInlineStart:Ca,paddingInlineEnd:Ca,insetInlineEnd:n}}:{}}:t==="bottom"?{containerStyles:{borderTopWidth:_u,paddingTop:mp},handleStyles:e?{bottom:{paddingTop:Ca,paddingBottom:Ca,top:n}}:{}}:t==="right"?{containerStyles:{borderInlineStartWidth:_u,paddingInlineStart:mp},handleStyles:e?{left:{paddingInlineStart:Ca,paddingInlineEnd:Ca,insetInlineStart:n}}:{}}:{containerStyles:{},handleStyles:{}}},CY=(e,t)=>["top","bottom"].includes(e)?e:e==="left"?t==="rtl"?"right":"left":e==="right"?t==="rtl"?"left":"right":"left",kY=je(yY,{shouldForwardProp:e=>!["sx"].includes(e)}),GI=({direction:e="left",isResizable:t,isOpen:n,onClose:r,children:o,initialWidth:s,minWidth:i,maxWidth:c,initialHeight:d,minHeight:p,maxHeight:h,onResizeStart:m,onResizeStop:v,onResize:b,sx:w={}})=>{const y=$c().direction,{colorMode:S}=Ds(),k=f.useRef(null),_=f.useMemo(()=>s??i??(["left","right"].includes(e)?"auto":"100%"),[s,i,e]),P=f.useMemo(()=>d??p??(["top","bottom"].includes(e)?"auto":"100%"),[d,p,e]),[I,E]=f.useState(_),[O,R]=f.useState(P);JN({ref:k,handler:()=>{r()},enabled:n});const M=f.useMemo(()=>t?xY({direction:e,langDirection:y}):{},[t,y,e]),D=f.useMemo(()=>wY({direction:e,minWidth:i,maxWidth:c,minHeight:p,maxHeight:h}),[i,c,p,h,e]),{containerStyles:A,handleStyles:L}=f.useMemo(()=>SY({isResizable:t,direction:e}),[t,e]),Q=f.useMemo(()=>CY(e,y),[e,y]);return f.useEffect(()=>{["left","right"].includes(e)&&R("100vh"),["top","bottom"].includes(e)&&E("100vw")},[e]),a.jsx(X5,{direction:Q,in:n,motionProps:{initial:!1},style:{width:"full"},children:a.jsx(Oe,{ref:k,sx:{width:"full",height:"full"},children:a.jsx(kY,{size:{width:t?I:_,height:t?O:P},enable:M,handleStyles:L,...D,sx:{borderColor:Fe("base.200","base.800")(S),p:4,bg:Fe("base.50","base.900")(S),height:"full",shadow:n?"dark-lg":void 0,...A,...w},onResizeStart:(F,V,q)=>{m&&m(F,V,q)},onResize:(F,V,q,G)=>{b&&b(F,V,q,G)},onResizeStop:(F,V,q,G)=>{["left","right"].includes(V)&&E(Number(I)+G.width),["top","bottom"].includes(V)&&R(Number(O)+G.height),v&&v(F,V,q,G)},children:o})})})};var qI={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},T4=W.createContext&&W.createContext(qI),xi=globalThis&&globalThis.__assign||function(){return xi=Object.assign||function(e){for(var t,n=1,r=arguments.length;nt(e[n],n,e));return e}function no(e,t){const n=Ei(t);if(Ms(t)||n){let o=n?"":{};if(e){const s=window.getComputedStyle(e,null);o=n?B4(e,s,t):t.reduce((i,c)=>(i[c]=B4(e,s,c),i),o)}return o}e&&_n(Ho(t),o=>_Q(e,o,t[o]))}const ys=(e,t)=>{const{o:n,u:r,_:o}=e;let s=n,i;const c=(h,m)=>{const v=s,b=h,w=m||(r?!r(v,b):v!==b);return(w||o)&&(s=b,i=v),[s,w,i]};return[t?h=>c(t(s,i),h):c,h=>[s,!!h,i]]},Xd=()=>typeof window<"u",uE=Xd()&&Node.ELEMENT_NODE,{toString:uQ,hasOwnProperty:rv}=Object.prototype,Ya=e=>e===void 0,Xm=e=>e===null,dQ=e=>Ya(e)||Xm(e)?`${e}`:uQ.call(e).replace(/^\[object (.+)\]$/,"$1").toLowerCase(),wi=e=>typeof e=="number",Ei=e=>typeof e=="string",jy=e=>typeof e=="boolean",Rs=e=>typeof e=="function",Ms=e=>Array.isArray(e),gd=e=>typeof e=="object"&&!Ms(e)&&!Xm(e),Ym=e=>{const t=!!e&&e.length,n=wi(t)&&t>-1&&t%1==0;return Ms(e)||!Rs(e)&&n?t>0&&gd(e)?t-1 in e:!0:!1},j1=e=>{if(!e||!gd(e)||dQ(e)!=="object")return!1;let t;const n="constructor",r=e[n],o=r&&r.prototype,s=rv.call(e,n),i=o&&rv.call(o,"isPrototypeOf");if(r&&!s&&!i)return!1;for(t in e);return Ya(t)||rv.call(e,t)},Xh=e=>{const t=HTMLElement;return e?t?e instanceof t:e.nodeType===uE:!1},Qm=e=>{const t=Element;return e?t?e instanceof t:e.nodeType===uE:!1},Iy=(e,t,n)=>e.indexOf(t,n),An=(e,t,n)=>(!n&&!Ei(t)&&Ym(t)?Array.prototype.push.apply(e,t):e.push(t),e),ul=e=>{const t=Array.from,n=[];return t&&e?t(e):(e instanceof Set?e.forEach(r=>{An(n,r)}):_n(e,r=>{An(n,r)}),n)},Ey=e=>!!e&&e.length===0,ha=(e,t,n)=>{_n(e,o=>o&&o.apply(void 0,t||[])),!n&&(e.length=0)},Jm=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),Ho=e=>e?Object.keys(e):[],hr=(e,t,n,r,o,s,i)=>{const c=[t,n,r,o,s,i];return(typeof e!="object"||Xm(e))&&!Rs(e)&&(e={}),_n(c,d=>{_n(Ho(d),p=>{const h=d[p];if(e===h)return!0;const m=Ms(h);if(h&&(j1(h)||m)){const v=e[p];let b=v;m&&!Ms(v)?b=[]:!m&&!j1(v)&&(b={}),e[p]=hr(b,h)}else e[p]=h})}),e},Oy=e=>{for(const t in e)return!1;return!0},dE=(e,t,n,r)=>{if(Ya(r))return n?n[e]:t;n&&(Ei(r)||wi(r))&&(n[e]=r)},to=(e,t,n)=>{if(Ya(n))return e?e.getAttribute(t):null;e&&e.setAttribute(t,n)},Co=(e,t)=>{e&&e.removeAttribute(t)},Zi=(e,t,n,r)=>{if(n){const o=to(e,t)||"",s=new Set(o.split(" "));s[r?"add":"delete"](n);const i=ul(s).join(" ").trim();to(e,t,i)}},fQ=(e,t,n)=>{const r=to(e,t)||"";return new Set(r.split(" ")).has(n)},Ps=(e,t)=>dE("scrollLeft",0,e,t),Ma=(e,t)=>dE("scrollTop",0,e,t),I1=Xd()&&Element.prototype,fE=(e,t)=>{const n=[],r=t?Qm(t)?t:null:document;return r?An(n,r.querySelectorAll(e)):n},pQ=(e,t)=>{const n=t?Qm(t)?t:null:document;return n?n.querySelector(e):null},Yh=(e,t)=>Qm(e)?(I1.matches||I1.msMatchesSelector).call(e,t):!1,Ry=e=>e?ul(e.childNodes):[],Ha=e=>e?e.parentElement:null,Zl=(e,t)=>{if(Qm(e)){const n=I1.closest;if(n)return n.call(e,t);do{if(Yh(e,t))return e;e=Ha(e)}while(e)}return null},hQ=(e,t,n)=>{const r=e&&Zl(e,t),o=e&&pQ(n,r),s=Zl(o,t)===r;return r&&o?r===e||o===e||s&&Zl(Zl(e,n),t)!==r:!1},My=(e,t,n)=>{if(n&&e){let r=t,o;Ym(n)?(o=document.createDocumentFragment(),_n(n,s=>{s===r&&(r=s.previousSibling),o.appendChild(s)})):o=n,t&&(r?r!==t&&(r=r.nextSibling):r=e.firstChild),e.insertBefore(o,r||null)}},ns=(e,t)=>{My(e,null,t)},mQ=(e,t)=>{My(Ha(e),e,t)},$4=(e,t)=>{My(Ha(e),e&&e.nextSibling,t)},sa=e=>{if(Ym(e))_n(ul(e),t=>sa(t));else if(e){const t=Ha(e);t&&t.removeChild(e)}},el=e=>{const t=document.createElement("div");return e&&to(t,"class",e),t},pE=e=>{const t=el();return t.innerHTML=e.trim(),_n(Ry(t),n=>sa(n))},E1=e=>e.charAt(0).toUpperCase()+e.slice(1),gQ=()=>el().style,vQ=["-webkit-","-moz-","-o-","-ms-"],bQ=["WebKit","Moz","O","MS","webkit","moz","o","ms"],ov={},sv={},yQ=e=>{let t=sv[e];if(Jm(sv,e))return t;const n=E1(e),r=gQ();return _n(vQ,o=>{const s=o.replace(/-/g,"");return!(t=[e,o+e,s+n,E1(s)+n].find(c=>r[c]!==void 0))}),sv[e]=t||""},Yd=e=>{if(Xd()){let t=ov[e]||window[e];return Jm(ov,e)||(_n(bQ,n=>(t=t||window[n+E1(e)],!t)),ov[e]=t),t}},xQ=Yd("MutationObserver"),L4=Yd("IntersectionObserver"),ec=Yd("ResizeObserver"),hE=Yd("cancelAnimationFrame"),mE=Yd("requestAnimationFrame"),Qh=Xd()&&window.setTimeout,O1=Xd()&&window.clearTimeout,wQ=/[^\x20\t\r\n\f]+/g,gE=(e,t,n)=>{const r=e&&e.classList;let o,s=0,i=!1;if(r&&t&&Ei(t)){const c=t.match(wQ)||[];for(i=c.length>0;o=c[s++];)i=!!n(r,o)&&i}return i},Dy=(e,t)=>{gE(e,t,(n,r)=>n.remove(r))},Da=(e,t)=>(gE(e,t,(n,r)=>n.add(r)),Dy.bind(0,e,t)),Zm=(e,t,n,r)=>{if(e&&t){let o=!0;return _n(n,s=>{const i=r?r(e[s]):e[s],c=r?r(t[s]):t[s];i!==c&&(o=!1)}),o}return!1},vE=(e,t)=>Zm(e,t,["w","h"]),bE=(e,t)=>Zm(e,t,["x","y"]),SQ=(e,t)=>Zm(e,t,["t","r","b","l"]),z4=(e,t,n)=>Zm(e,t,["width","height"],n&&(r=>Math.round(r))),ts=()=>{},Xl=e=>{let t;const n=e?Qh:mE,r=e?O1:hE;return[o=>{r(t),t=n(o,Rs(e)?e():e)},()=>r(t)]},Ay=(e,t)=>{let n,r,o,s=ts;const{v:i,g:c,p:d}=t||{},p=function(w){s(),O1(n),n=r=void 0,s=ts,e.apply(this,w)},h=b=>d&&r?d(r,b):b,m=()=>{s!==ts&&p(h(o)||o)},v=function(){const w=ul(arguments),y=Rs(i)?i():i;if(wi(y)&&y>=0){const k=Rs(c)?c():c,_=wi(k)&&k>=0,P=y>0?Qh:mE,I=y>0?O1:hE,O=h(w)||w,R=p.bind(0,O);s();const M=P(R,y);s=()=>I(M),_&&!n&&(n=Qh(m,k)),r=o=O}else p(w)};return v.m=m,v},CQ={opacity:1,zindex:1},gp=(e,t)=>{const n=t?parseFloat(e):parseInt(e,10);return n===n?n:0},kQ=(e,t)=>!CQ[e.toLowerCase()]&&wi(t)?`${t}px`:t,B4=(e,t,n)=>t!=null?t[n]||t.getPropertyValue(n):e.style[n],_Q=(e,t,n)=>{try{const{style:r}=e;Ya(r[t])?r.setProperty(t,n):r[t]=kQ(t,n)}catch{}},vd=e=>no(e,"direction")==="rtl",F4=(e,t,n)=>{const r=t?`${t}-`:"",o=n?`-${n}`:"",s=`${r}top${o}`,i=`${r}right${o}`,c=`${r}bottom${o}`,d=`${r}left${o}`,p=no(e,[s,i,c,d]);return{t:gp(p[s],!0),r:gp(p[i],!0),b:gp(p[c],!0),l:gp(p[d],!0)}},{round:H4}=Math,Ty={w:0,h:0},bd=e=>e?{w:e.offsetWidth,h:e.offsetHeight}:Ty,zp=e=>e?{w:e.clientWidth,h:e.clientHeight}:Ty,Jh=e=>e?{w:e.scrollWidth,h:e.scrollHeight}:Ty,Zh=e=>{const t=parseFloat(no(e,"height"))||0,n=parseFloat(no(e,"width"))||0;return{w:n-H4(n),h:t-H4(t)}},Zs=e=>e.getBoundingClientRect();let vp;const PQ=()=>{if(Ya(vp)){vp=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get(){vp=!0}}))}catch{}}return vp},yE=e=>e.split(" "),jQ=(e,t,n,r)=>{_n(yE(t),o=>{e.removeEventListener(o,n,r)})},Tr=(e,t,n,r)=>{var o;const s=PQ(),i=(o=s&&r&&r.S)!=null?o:s,c=r&&r.$||!1,d=r&&r.C||!1,p=[],h=s?{passive:i,capture:c}:c;return _n(yE(t),m=>{const v=d?b=>{e.removeEventListener(m,v,c),n&&n(b)}:n;An(p,jQ.bind(null,e,m,v,c)),e.addEventListener(m,v,h)}),ha.bind(0,p)},xE=e=>e.stopPropagation(),wE=e=>e.preventDefault(),IQ={x:0,y:0},av=e=>{const t=e?Zs(e):0;return t?{x:t.left+window.pageYOffset,y:t.top+window.pageXOffset}:IQ},W4=(e,t)=>{_n(Ms(t)?t:[t],e)},Ny=e=>{const t=new Map,n=(s,i)=>{if(s){const c=t.get(s);W4(d=>{c&&c[d?"delete":"clear"](d)},i)}else t.forEach(c=>{c.clear()}),t.clear()},r=(s,i)=>{if(Ei(s)){const p=t.get(s)||new Set;return t.set(s,p),W4(h=>{Rs(h)&&p.add(h)},i),n.bind(0,s,i)}jy(i)&&i&&n();const c=Ho(s),d=[];return _n(c,p=>{const h=s[p];h&&An(d,r(p,h))}),ha.bind(0,d)},o=(s,i)=>{const c=t.get(s);_n(ul(c),d=>{i&&!Ey(i)?d.apply(0,i):d()})};return r(e||{}),[r,n,o]},V4=e=>JSON.stringify(e,(t,n)=>{if(Rs(n))throw new Error;return n}),EQ={paddingAbsolute:!1,showNativeOverlaidScrollbars:!1,update:{elementEvents:[["img","load"]],debounce:[0,33],attributes:null,ignoreMutation:null},overflow:{x:"scroll",y:"scroll"},scrollbars:{theme:"os-theme-dark",visibility:"auto",autoHide:"never",autoHideDelay:1300,dragScroll:!0,clickScroll:!1,pointers:["mouse","touch","pen"]}},SE=(e,t)=>{const n={},r=Ho(t).concat(Ho(e));return _n(r,o=>{const s=e[o],i=t[o];if(gd(s)&&gd(i))hr(n[o]={},SE(s,i)),Oy(n[o])&&delete n[o];else if(Jm(t,o)&&i!==s){let c=!0;if(Ms(s)||Ms(i))try{V4(s)===V4(i)&&(c=!1)}catch{}c&&(n[o]=i)}}),n},CE="os-environment",kE=`${CE}-flexbox-glue`,OQ=`${kE}-max`,_E="os-scrollbar-hidden",iv="data-overlayscrollbars-initialize",xs="data-overlayscrollbars",PE=`${xs}-overflow-x`,jE=`${xs}-overflow-y`,mc="overflowVisible",RQ="scrollbarHidden",U4="scrollbarPressed",em="updating",di="data-overlayscrollbars-viewport",lv="arrange",IE="scrollbarHidden",gc=mc,R1="data-overlayscrollbars-padding",MQ=gc,G4="data-overlayscrollbars-content",$y="os-size-observer",DQ=`${$y}-appear`,AQ=`${$y}-listener`,TQ="os-trinsic-observer",NQ="os-no-css-vars",$Q="os-theme-none",Ro="os-scrollbar",LQ=`${Ro}-rtl`,zQ=`${Ro}-horizontal`,BQ=`${Ro}-vertical`,EE=`${Ro}-track`,Ly=`${Ro}-handle`,FQ=`${Ro}-visible`,HQ=`${Ro}-cornerless`,q4=`${Ro}-transitionless`,K4=`${Ro}-interaction`,X4=`${Ro}-unusable`,Y4=`${Ro}-auto-hidden`,Q4=`${Ro}-wheel`,WQ=`${EE}-interactive`,VQ=`${Ly}-interactive`,OE={},dl=()=>OE,UQ=e=>{const t=[];return _n(Ms(e)?e:[e],n=>{const r=Ho(n);_n(r,o=>{An(t,OE[o]=n[o])})}),t},GQ="__osOptionsValidationPlugin",qQ="__osSizeObserverPlugin",zy="__osScrollbarsHidingPlugin",KQ="__osClickScrollPlugin";let cv;const J4=(e,t,n,r)=>{ns(e,t);const o=zp(t),s=bd(t),i=Zh(n);return r&&sa(t),{x:s.h-o.h+i.h,y:s.w-o.w+i.w}},XQ=e=>{let t=!1;const n=Da(e,_E);try{t=no(e,yQ("scrollbar-width"))==="none"||window.getComputedStyle(e,"::-webkit-scrollbar").getPropertyValue("display")==="none"}catch{}return n(),t},YQ=(e,t)=>{const n="hidden";no(e,{overflowX:n,overflowY:n,direction:"rtl"}),Ps(e,0);const r=av(e),o=av(t);Ps(e,-999);const s=av(t);return{i:r.x===o.x,n:o.x!==s.x}},QQ=(e,t)=>{const n=Da(e,kE),r=Zs(e),o=Zs(t),s=z4(o,r,!0),i=Da(e,OQ),c=Zs(e),d=Zs(t),p=z4(d,c,!0);return n(),i(),s&&p},JQ=()=>{const{body:e}=document,n=pE(`
`)[0],r=n.firstChild,[o,,s]=Ny(),[i,c]=ys({o:J4(e,n,r),u:bE},J4.bind(0,e,n,r,!0)),[d]=c(),p=XQ(n),h={x:d.x===0,y:d.y===0},m={elements:{host:null,padding:!p,viewport:_=>p&&_===_.ownerDocument.body&&_,content:!1},scrollbars:{slot:!0},cancel:{nativeScrollbarsOverlaid:!1,body:null}},v=hr({},EQ),b=hr.bind(0,{},v),w=hr.bind(0,{},m),y={k:d,A:h,I:p,L:no(n,"zIndex")==="-1",B:YQ(n,r),V:QQ(n,r),Y:o.bind(0,"z"),j:o.bind(0,"r"),N:w,q:_=>hr(m,_)&&w(),F:b,G:_=>hr(v,_)&&b(),X:hr({},m),U:hr({},v)},S=window.addEventListener,k=Ay(_=>s(_?"z":"r"),{v:33,g:99});if(Co(n,"style"),sa(n),S("resize",k.bind(0,!1)),!p&&(!h.x||!h.y)){let _;S("resize",()=>{const P=dl()[zy];_=_||P&&P.R(),_&&_(y,i,k.bind(0,!0))})}return y},Mo=()=>(cv||(cv=JQ()),cv),By=(e,t)=>Rs(t)?t.apply(0,e):t,ZQ=(e,t,n,r)=>{const o=Ya(r)?n:r;return By(e,o)||t.apply(0,e)},RE=(e,t,n,r)=>{const o=Ya(r)?n:r,s=By(e,o);return!!s&&(Xh(s)?s:t.apply(0,e))},eJ=(e,t,n)=>{const{nativeScrollbarsOverlaid:r,body:o}=n||{},{A:s,I:i}=Mo(),{nativeScrollbarsOverlaid:c,body:d}=t,p=r??c,h=Ya(o)?d:o,m=(s.x||s.y)&&p,v=e&&(Xm(h)?!i:h);return!!m||!!v},Fy=new WeakMap,tJ=(e,t)=>{Fy.set(e,t)},nJ=e=>{Fy.delete(e)},ME=e=>Fy.get(e),Z4=(e,t)=>e?t.split(".").reduce((n,r)=>n&&Jm(n,r)?n[r]:void 0,e):void 0,M1=(e,t,n)=>r=>[Z4(e,r),n||Z4(t,r)!==void 0],DE=e=>{let t=e;return[()=>t,n=>{t=hr({},t,n)}]},bp="tabindex",yp=el.bind(0,""),uv=e=>{ns(Ha(e),Ry(e)),sa(e)},rJ=e=>{const t=Mo(),{N:n,I:r}=t,o=dl()[zy],s=o&&o.T,{elements:i}=n(),{host:c,padding:d,viewport:p,content:h}=i,m=Xh(e),v=m?{}:e,{elements:b}=v,{host:w,padding:y,viewport:S,content:k}=b||{},_=m?e:v.target,P=Yh(_,"textarea"),I=_.ownerDocument,E=I.documentElement,O=_===I.body,R=I.defaultView,M=ZQ.bind(0,[_]),D=RE.bind(0,[_]),A=By.bind(0,[_]),L=M.bind(0,yp,p),Q=D.bind(0,yp,h),F=L(S),V=F===_,q=V&&O,G=!V&&Q(k),T=!V&&Xh(F)&&F===G,z=T&&!!A(h),$=z?L():F,Y=z?G:Q(),fe=q?E:T?$:F,ie=P?M(yp,c,w):_,X=q?fe:ie,K=T?Y:G,U=I.activeElement,se=!V&&R.top===R&&U===_,re={W:_,Z:X,J:fe,K:!V&&D(yp,d,y),tt:K,nt:!V&&!r&&s&&s(t),ot:q?E:fe,st:q?I:fe,et:R,ct:I,rt:P,it:O,lt:m,ut:V,dt:T,ft:(vt,bt)=>fQ(fe,V?xs:di,V?bt:vt),_t:(vt,bt,Se)=>Zi(fe,V?xs:di,V?bt:vt,Se)},oe=Ho(re).reduce((vt,bt)=>{const Se=re[bt];return An(vt,Se&&!Ha(Se)?Se:!1)},[]),pe=vt=>vt?Iy(oe,vt)>-1:null,{W:le,Z:ge,K:ke,J:xe,tt:de,nt:Te}=re,Ee=[()=>{Co(ge,xs),Co(ge,iv),Co(le,iv),O&&(Co(E,xs),Co(E,iv))}],$e=P&&pe(ge);let kt=P?le:Ry([de,xe,ke,ge,le].find(vt=>pe(vt)===!1));const ct=q?le:de||xe;return[re,()=>{to(ge,xs,V?"viewport":"host"),to(ke,R1,""),to(de,G4,""),V||to(xe,di,"");const vt=O&&!V?Da(Ha(_),_E):ts;if($e&&($4(le,ge),An(Ee,()=>{$4(ge,le),sa(ge)})),ns(ct,kt),ns(ge,ke),ns(ke||ge,!V&&xe),ns(xe,de),An(Ee,()=>{vt(),Co(ke,R1),Co(de,G4),Co(xe,PE),Co(xe,jE),Co(xe,di),pe(de)&&uv(de),pe(xe)&&uv(xe),pe(ke)&&uv(ke)}),r&&!V&&(Zi(xe,di,IE,!0),An(Ee,Co.bind(0,xe,di))),Te&&(mQ(xe,Te),An(Ee,sa.bind(0,Te))),se){const bt=to(xe,bp);to(xe,bp,"-1"),xe.focus();const Se=()=>bt?to(xe,bp,bt):Co(xe,bp),Me=Tr(I,"pointerdown keydown",()=>{Se(),Me()});An(Ee,[Se,Me])}else U&&U.focus&&U.focus();kt=0},ha.bind(0,Ee)]},oJ=(e,t)=>{const{tt:n}=e,[r]=t;return o=>{const{V:s}=Mo(),{ht:i}=r(),{vt:c}=o,d=(n||!s)&&c;return d&&no(n,{height:i?"":"100%"}),{gt:d,wt:d}}},sJ=(e,t)=>{const[n,r]=t,{Z:o,K:s,J:i,ut:c}=e,[d,p]=ys({u:SQ,o:F4()},F4.bind(0,o,"padding",""));return(h,m,v)=>{let[b,w]=p(v);const{I:y,V:S}=Mo(),{bt:k}=n(),{gt:_,wt:P,yt:I}=h,[E,O]=m("paddingAbsolute");(_||w||!S&&P)&&([b,w]=d(v));const M=!c&&(O||I||w);if(M){const D=!E||!s&&!y,A=b.r+b.l,L=b.t+b.b,Q={marginRight:D&&!k?-A:0,marginBottom:D?-L:0,marginLeft:D&&k?-A:0,top:D?-b.t:0,right:D?k?-b.r:"auto":0,left:D?k?"auto":-b.l:0,width:D?`calc(100% + ${A}px)`:""},F={paddingTop:D?b.t:0,paddingRight:D?b.r:0,paddingBottom:D?b.b:0,paddingLeft:D?b.l:0};no(s||i,Q),no(i,F),r({K:b,St:!D,P:s?F:hr({},Q,F)})}return{xt:M}}},{max:D1}=Math,fi=D1.bind(0,0),AE="visible",ek="hidden",aJ=42,xp={u:vE,o:{w:0,h:0}},iJ={u:bE,o:{x:ek,y:ek}},lJ=(e,t)=>{const n=window.devicePixelRatio%1!==0?1:0,r={w:fi(e.w-t.w),h:fi(e.h-t.h)};return{w:r.w>n?r.w:0,h:r.h>n?r.h:0}},wp=e=>e.indexOf(AE)===0,cJ=(e,t)=>{const[n,r]=t,{Z:o,K:s,J:i,nt:c,ut:d,_t:p,it:h,et:m}=e,{k:v,V:b,I:w,A:y}=Mo(),S=dl()[zy],k=!d&&!w&&(y.x||y.y),_=h&&d,[P,I]=ys(xp,Zh.bind(0,i)),[E,O]=ys(xp,Jh.bind(0,i)),[R,M]=ys(xp),[D,A]=ys(xp),[L]=ys(iJ),Q=(z,$)=>{if(no(i,{height:""}),$){const{St:Y,K:ae}=n(),{$t:fe,D:ie}=z,X=Zh(o),K=zp(o),U=no(i,"boxSizing")==="content-box",se=Y||U?ae.b+ae.t:0,re=!(y.x&&U);no(i,{height:K.h+X.h+(fe.x&&re?ie.x:0)-se})}},F=(z,$)=>{const Y=!w&&!z?aJ:0,ae=(pe,le,ge)=>{const ke=no(i,pe),de=($?$[pe]:ke)==="scroll";return[ke,de,de&&!w?le?Y:ge:0,le&&!!Y]},[fe,ie,X,K]=ae("overflowX",y.x,v.x),[U,se,re,oe]=ae("overflowY",y.y,v.y);return{Ct:{x:fe,y:U},$t:{x:ie,y:se},D:{x:X,y:re},M:{x:K,y:oe}}},V=(z,$,Y,ae)=>{const fe=(se,re)=>{const oe=wp(se),pe=re&&oe&&se.replace(`${AE}-`,"")||"";return[re&&!oe?se:"",wp(pe)?"hidden":pe]},[ie,X]=fe(Y.x,$.x),[K,U]=fe(Y.y,$.y);return ae.overflowX=X&&K?X:ie,ae.overflowY=U&&ie?U:K,F(z,ae)},q=(z,$,Y,ae)=>{const{D:fe,M:ie}=z,{x:X,y:K}=ie,{x:U,y:se}=fe,{P:re}=n(),oe=$?"marginLeft":"marginRight",pe=$?"paddingLeft":"paddingRight",le=re[oe],ge=re.marginBottom,ke=re[pe],xe=re.paddingBottom;ae.width=`calc(100% + ${se+-1*le}px)`,ae[oe]=-se+le,ae.marginBottom=-U+ge,Y&&(ae[pe]=ke+(K?se:0),ae.paddingBottom=xe+(X?U:0))},[G,T]=S?S.H(k,b,i,c,n,F,q):[()=>k,()=>[ts]];return(z,$,Y)=>{const{gt:ae,Ot:fe,wt:ie,xt:X,vt:K,yt:U}=z,{ht:se,bt:re}=n(),[oe,pe]=$("showNativeOverlaidScrollbars"),[le,ge]=$("overflow"),ke=oe&&y.x&&y.y,xe=!d&&!b&&(ae||ie||fe||pe||K),de=wp(le.x),Te=wp(le.y),Ee=de||Te;let $e=I(Y),kt=O(Y),ct=M(Y),on=A(Y),vt;if(pe&&w&&p(IE,RQ,!ke),xe&&(vt=F(ke),Q(vt,se)),ae||X||ie||U||pe){Ee&&p(gc,mc,!1);const[Pe,Qe]=T(ke,re,vt),[Xe,dt]=$e=P(Y),[zt,cr]=kt=E(Y),pn=zp(i);let ln=zt,Wr=pn;Pe(),(cr||dt||pe)&&Qe&&!ke&&G(Qe,zt,Xe,re)&&(Wr=zp(i),ln=Jh(i));const xr={w:fi(D1(zt.w,ln.w)+Xe.w),h:fi(D1(zt.h,ln.h)+Xe.h)},Fn={w:fi((_?m.innerWidth:Wr.w+fi(pn.w-zt.w))+Xe.w),h:fi((_?m.innerHeight+Xe.h:Wr.h+fi(pn.h-zt.h))+Xe.h)};on=D(Fn),ct=R(lJ(xr,Fn),Y)}const[bt,Se]=on,[Me,_t]=ct,[Tt,we]=kt,[ht,$t]=$e,Lt={x:Me.w>0,y:Me.h>0},Le=de&&Te&&(Lt.x||Lt.y)||de&&Lt.x&&!Lt.y||Te&&Lt.y&&!Lt.x;if(X||U||$t||we||Se||_t||ge||pe||xe){const Pe={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},Qe=V(ke,Lt,le,Pe),Xe=G(Qe,Tt,ht,re);d||q(Qe,re,Xe,Pe),xe&&Q(Qe,se),d?(to(o,PE,Pe.overflowX),to(o,jE,Pe.overflowY)):no(i,Pe)}Zi(o,xs,mc,Le),Zi(s,R1,MQ,Le),d||Zi(i,di,gc,Ee);const[Ge,Pn]=L(F(ke).Ct);return r({Ct:Ge,zt:{x:bt.w,y:bt.h},Tt:{x:Me.w,y:Me.h},Et:Lt}),{It:Pn,At:Se,Lt:_t}}},tk=(e,t,n)=>{const r={},o=t||{},s=Ho(e).concat(Ho(o));return _n(s,i=>{const c=e[i],d=o[i];r[i]=!!(n||c||d)}),r},uJ=(e,t)=>{const{W:n,J:r,_t:o,ut:s}=e,{I:i,A:c,V:d}=Mo(),p=!i&&(c.x||c.y),h=[oJ(e,t),sJ(e,t),cJ(e,t)];return(m,v,b)=>{const w=tk(hr({gt:!1,xt:!1,yt:!1,vt:!1,At:!1,Lt:!1,It:!1,Ot:!1,wt:!1},v),{},b),y=p||!d,S=y&&Ps(r),k=y&&Ma(r);o("",em,!0);let _=w;return _n(h,P=>{_=tk(_,P(_,m,!!b)||{},b)}),Ps(r,S),Ma(r,k),o("",em),s||(Ps(n,0),Ma(n,0)),_}},dJ=(e,t,n)=>{let r,o=!1;const s=()=>{o=!0},i=c=>{if(n){const d=n.reduce((p,h)=>{if(h){const[m,v]=h,b=v&&m&&(c?c(m):fE(m,e));b&&b.length&&v&&Ei(v)&&An(p,[b,v.trim()],!0)}return p},[]);_n(d,p=>_n(p[0],h=>{const m=p[1],v=r.get(h)||[];if(e.contains(h)){const w=Tr(h,m,y=>{o?(w(),r.delete(h)):t(y)});r.set(h,An(v,w))}else ha(v),r.delete(h)}))}};return n&&(r=new WeakMap,i()),[s,i]},nk=(e,t,n,r)=>{let o=!1;const{Ht:s,Pt:i,Dt:c,Mt:d,Rt:p,kt:h}=r||{},m=Ay(()=>{o&&n(!0)},{v:33,g:99}),[v,b]=dJ(e,m,c),w=s||[],y=i||[],S=w.concat(y),k=(P,I)=>{const E=p||ts,O=h||ts,R=new Set,M=new Set;let D=!1,A=!1;if(_n(P,L=>{const{attributeName:Q,target:F,type:V,oldValue:q,addedNodes:G,removedNodes:T}=L,z=V==="attributes",$=V==="childList",Y=e===F,ae=z&&Ei(Q)?to(F,Q):0,fe=ae!==0&&q!==ae,ie=Iy(y,Q)>-1&&fe;if(t&&($||!Y)){const X=!z,K=z&&fe,U=K&&d&&Yh(F,d),re=(U?!E(F,Q,q,ae):X||K)&&!O(L,!!U,e,r);_n(G,oe=>R.add(oe)),_n(T,oe=>R.add(oe)),A=A||re}!t&&Y&&fe&&!E(F,Q,q,ae)&&(M.add(Q),D=D||ie)}),R.size>0&&b(L=>ul(R).reduce((Q,F)=>(An(Q,fE(L,F)),Yh(F,L)?An(Q,F):Q),[])),t)return!I&&A&&n(!1),[!1];if(M.size>0||D){const L=[ul(M),D];return!I&&n.apply(0,L),L}},_=new xQ(P=>k(P));return _.observe(e,{attributes:!0,attributeOldValue:!0,attributeFilter:S,subtree:t,childList:t,characterData:t}),o=!0,[()=>{o&&(v(),_.disconnect(),o=!1)},()=>{if(o){m.m();const P=_.takeRecords();return!Ey(P)&&k(P,!0)}}]},Sp=3333333,Cp=e=>e&&(e.height||e.width),TE=(e,t,n)=>{const{Bt:r=!1,Vt:o=!1}=n||{},s=dl()[qQ],{B:i}=Mo(),d=pE(`
`)[0],p=d.firstChild,h=vd.bind(0,e),[m]=ys({o:void 0,_:!0,u:(y,S)=>!(!y||!Cp(y)&&Cp(S))}),v=y=>{const S=Ms(y)&&y.length>0&&gd(y[0]),k=!S&&jy(y[0]);let _=!1,P=!1,I=!0;if(S){const[E,,O]=m(y.pop().contentRect),R=Cp(E),M=Cp(O);_=!O||!R,P=!M&&R,I=!_}else k?[,I]=y:P=y===!0;if(r&&I){const E=k?y[0]:vd(d);Ps(d,E?i.n?-Sp:i.i?0:Sp:Sp),Ma(d,Sp)}_||t({gt:!k,Yt:k?y:void 0,Vt:!!P})},b=[];let w=o?v:!1;return[()=>{ha(b),sa(d)},()=>{if(ec){const y=new ec(v);y.observe(p),An(b,()=>{y.disconnect()})}else if(s){const[y,S]=s.O(p,v,o);w=y,An(b,S)}if(r){const[y]=ys({o:void 0},h);An(b,Tr(d,"scroll",S=>{const k=y(),[_,P,I]=k;P&&(Dy(p,"ltr rtl"),_?Da(p,"rtl"):Da(p,"ltr"),v([!!_,P,I])),xE(S)}))}w&&(Da(d,DQ),An(b,Tr(d,"animationstart",w,{C:!!ec}))),(ec||s)&&ns(e,d)}]},fJ=e=>e.h===0||e.isIntersecting||e.intersectionRatio>0,pJ=(e,t)=>{let n;const r=el(TQ),o=[],[s]=ys({o:!1}),i=(d,p)=>{if(d){const h=s(fJ(d)),[,m]=h;if(m)return!p&&t(h),[h]}},c=(d,p)=>{if(d&&d.length>0)return i(d.pop(),p)};return[()=>{ha(o),sa(r)},()=>{if(L4)n=new L4(d=>c(d),{root:e}),n.observe(r),An(o,()=>{n.disconnect()});else{const d=()=>{const m=bd(r);i(m)},[p,h]=TE(r,d);An(o,p),h(),d()}ns(e,r)},()=>{if(n)return c(n.takeRecords(),!0)}]},rk=`[${xs}]`,hJ=`[${di}]`,dv=["tabindex"],ok=["wrap","cols","rows"],fv=["id","class","style","open"],mJ=(e,t,n)=>{let r,o,s;const{Z:i,J:c,tt:d,rt:p,ut:h,ft:m,_t:v}=e,{V:b}=Mo(),[w]=ys({u:vE,o:{w:0,h:0}},()=>{const V=m(gc,mc),q=m(lv,""),G=q&&Ps(c),T=q&&Ma(c);v(gc,mc),v(lv,""),v("",em,!0);const z=Jh(d),$=Jh(c),Y=Zh(c);return v(gc,mc,V),v(lv,"",q),v("",em),Ps(c,G),Ma(c,T),{w:$.w+z.w+Y.w,h:$.h+z.h+Y.h}}),y=p?ok:fv.concat(ok),S=Ay(n,{v:()=>r,g:()=>o,p(V,q){const[G]=V,[T]=q;return[Ho(G).concat(Ho(T)).reduce((z,$)=>(z[$]=G[$]||T[$],z),{})]}}),k=V=>{_n(V||dv,q=>{if(Iy(dv,q)>-1){const G=to(i,q);Ei(G)?to(c,q,G):Co(c,q)}})},_=(V,q)=>{const[G,T]=V,z={vt:T};return t({ht:G}),!q&&n(z),z},P=({gt:V,Yt:q,Vt:G})=>{const T=!V||G?n:S;let z=!1;if(q){const[$,Y]=q;z=Y,t({bt:$})}T({gt:V,yt:z})},I=(V,q)=>{const[,G]=w(),T={wt:G};return G&&!q&&(V?n:S)(T),T},E=(V,q,G)=>{const T={Ot:q};return q?!G&&S(T):h||k(V),T},[O,R,M]=d||!b?pJ(i,_):[ts,ts,ts],[D,A]=h?[ts,ts]:TE(i,P,{Vt:!0,Bt:!0}),[L,Q]=nk(i,!1,E,{Pt:fv,Ht:fv.concat(dv)}),F=h&&ec&&new ec(P.bind(0,{gt:!0}));return F&&F.observe(i),k(),[()=>{O(),D(),s&&s[0](),F&&F.disconnect(),L()},()=>{A(),R()},()=>{const V={},q=Q(),G=M(),T=s&&s[1]();return q&&hr(V,E.apply(0,An(q,!0))),G&&hr(V,_.apply(0,An(G,!0))),T&&hr(V,I.apply(0,An(T,!0))),V},V=>{const[q]=V("update.ignoreMutation"),[G,T]=V("update.attributes"),[z,$]=V("update.elementEvents"),[Y,ae]=V("update.debounce"),fe=$||T,ie=X=>Rs(q)&&q(X);if(fe&&(s&&(s[1](),s[0]()),s=nk(d||c,!0,I,{Ht:y.concat(G||[]),Dt:z,Mt:rk,kt:(X,K)=>{const{target:U,attributeName:se}=X;return(!K&&se&&!h?hQ(U,rk,hJ):!1)||!!Zl(U,`.${Ro}`)||!!ie(X)}})),ae)if(S.m(),Ms(Y)){const X=Y[0],K=Y[1];r=wi(X)&&X,o=wi(K)&&K}else wi(Y)?(r=Y,o=!1):(r=!1,o=!1)}]},sk={x:0,y:0},gJ=e=>({K:{t:0,r:0,b:0,l:0},St:!1,P:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},zt:sk,Tt:sk,Ct:{x:"hidden",y:"hidden"},Et:{x:!1,y:!1},ht:!1,bt:vd(e.Z)}),vJ=(e,t)=>{const n=M1(t,{}),[r,o,s]=Ny(),[i,c,d]=rJ(e),p=DE(gJ(i)),[h,m]=p,v=uJ(i,p),b=(P,I,E)=>{const R=Ho(P).some(M=>P[M])||!Oy(I)||E;return R&&s("u",[P,I,E]),R},[w,y,S,k]=mJ(i,m,P=>b(v(n,P),{},!1)),_=h.bind(0);return _.jt=P=>r("u",P),_.Nt=()=>{const{W:P,J:I}=i,E=Ps(P),O=Ma(P);y(),c(),Ps(I,E),Ma(I,O)},_.qt=i,[(P,I)=>{const E=M1(t,P,I);return k(E),b(v(E,S(),I),P,!!I)},_,()=>{o(),w(),d()}]},{round:ak}=Math,bJ=e=>{const{width:t,height:n}=Zs(e),{w:r,h:o}=bd(e);return{x:ak(t)/r||1,y:ak(n)/o||1}},yJ=(e,t,n)=>{const r=t.scrollbars,{button:o,isPrimary:s,pointerType:i}=e,{pointers:c}=r;return o===0&&s&&r[n?"dragScroll":"clickScroll"]&&(c||[]).includes(i)},xJ=(e,t)=>Tr(e,"mousedown",Tr.bind(0,t,"click",xE,{C:!0,$:!0}),{$:!0}),ik="pointerup pointerleave pointercancel lostpointercapture",wJ=(e,t,n,r,o,s,i)=>{const{B:c}=Mo(),{Ft:d,Gt:p,Xt:h}=r,m=`scroll${i?"Left":"Top"}`,v=`client${i?"X":"Y"}`,b=i?"width":"height",w=i?"left":"top",y=i?"w":"h",S=i?"x":"y",k=(_,P)=>I=>{const{Tt:E}=s(),O=bd(p)[y]-bd(d)[y],M=P*I/O*E[S],A=vd(h)&&i?c.n||c.i?1:-1:1;o[m]=_+M*A};return Tr(p,"pointerdown",_=>{const P=Zl(_.target,`.${Ly}`)===d,I=P?d:p;if(Zi(t,xs,U4,!0),yJ(_,e,P)){const E=!P&&_.shiftKey,O=()=>Zs(d),R=()=>Zs(p),M=($,Y)=>($||O())[w]-(Y||R())[w],D=k(o[m]||0,1/bJ(o)[S]),A=_[v],L=O(),Q=R(),F=L[b],V=M(L,Q)+F/2,q=A-Q[w],G=P?0:q-V,T=$=>{ha(z),I.releasePointerCapture($.pointerId)},z=[Zi.bind(0,t,xs,U4),Tr(n,ik,T),Tr(n,"selectstart",$=>wE($),{S:!1}),Tr(p,ik,T),Tr(p,"pointermove",$=>{const Y=$[v]-A;(P||E)&&D(G+Y)})];if(E)D(G);else if(!P){const $=dl()[KQ];$&&An(z,$.O(D,M,G,F,q))}I.setPointerCapture(_.pointerId)}})},SJ=(e,t)=>(n,r,o,s,i,c)=>{const{Xt:d}=n,[p,h]=Xl(333),m=!!i.scrollBy;let v=!0;return ha.bind(0,[Tr(d,"pointerenter",()=>{r(K4,!0)}),Tr(d,"pointerleave pointercancel",()=>{r(K4)}),Tr(d,"wheel",b=>{const{deltaX:w,deltaY:y,deltaMode:S}=b;m&&v&&S===0&&Ha(d)===s&&i.scrollBy({left:w,top:y,behavior:"smooth"}),v=!1,r(Q4,!0),p(()=>{v=!0,r(Q4)}),wE(b)},{S:!1,$:!0}),xJ(d,o),wJ(e,s,o,n,i,t,c),h])},{min:A1,max:lk,abs:CJ,round:kJ}=Math,NE=(e,t,n,r)=>{if(r){const c=n?"x":"y",{Tt:d,zt:p}=r,h=p[c],m=d[c];return lk(0,A1(1,h/(h+m)))}const o=n?"width":"height",s=Zs(e)[o],i=Zs(t)[o];return lk(0,A1(1,s/i))},_J=(e,t,n,r,o,s)=>{const{B:i}=Mo(),c=s?"x":"y",d=s?"Left":"Top",{Tt:p}=r,h=kJ(p[c]),m=CJ(n[`scroll${d}`]),v=s&&o,b=i.i?m:h-m,y=A1(1,(v?b:m)/h),S=NE(e,t,s);return 1/S*(1-S)*y},PJ=(e,t,n)=>{const{N:r,L:o}=Mo(),{scrollbars:s}=r(),{slot:i}=s,{ct:c,W:d,Z:p,J:h,lt:m,ot:v,it:b,ut:w}=t,{scrollbars:y}=m?{}:e,{slot:S}=y||{},k=RE([d,p,h],()=>w&&b?d:p,i,S),_=(G,T,z)=>{const $=z?Da:Dy;_n(G,Y=>{$(Y.Xt,T)})},P=(G,T)=>{_n(G,z=>{const[$,Y]=T(z);no($,Y)})},I=(G,T,z)=>{P(G,$=>{const{Ft:Y,Gt:ae}=$;return[Y,{[z?"width":"height"]:`${(100*NE(Y,ae,z,T)).toFixed(3)}%`}]})},E=(G,T,z)=>{const $=z?"X":"Y";P(G,Y=>{const{Ft:ae,Gt:fe,Xt:ie}=Y,X=_J(ae,fe,v,T,vd(ie),z);return[ae,{transform:X===X?`translate${$}(${(100*X).toFixed(3)}%)`:""}]})},O=[],R=[],M=[],D=(G,T,z)=>{const $=jy(z),Y=$?z:!0,ae=$?!z:!0;Y&&_(R,G,T),ae&&_(M,G,T)},A=G=>{I(R,G,!0),I(M,G)},L=G=>{E(R,G,!0),E(M,G)},Q=G=>{const T=G?zQ:BQ,z=G?R:M,$=Ey(z)?q4:"",Y=el(`${Ro} ${T} ${$}`),ae=el(EE),fe=el(Ly),ie={Xt:Y,Gt:ae,Ft:fe};return o||Da(Y,NQ),ns(Y,ae),ns(ae,fe),An(z,ie),An(O,[sa.bind(0,Y),n(ie,D,c,p,v,G)]),ie},F=Q.bind(0,!0),V=Q.bind(0,!1),q=()=>{ns(k,R[0].Xt),ns(k,M[0].Xt),Qh(()=>{D(q4)},300)};return F(),V(),[{Ut:A,Wt:L,Zt:D,Jt:{Kt:R,Qt:F,tn:P.bind(0,R)},nn:{Kt:M,Qt:V,tn:P.bind(0,M)}},q,ha.bind(0,O)]},jJ=(e,t,n,r)=>{let o,s,i,c,d,p=0;const h=DE({}),[m]=h,[v,b]=Xl(),[w,y]=Xl(),[S,k]=Xl(100),[_,P]=Xl(100),[I,E]=Xl(()=>p),[O,R,M]=PJ(e,n.qt,SJ(t,n)),{Z:D,J:A,ot:L,st:Q,ut:F,it:V}=n.qt,{Jt:q,nn:G,Zt:T,Ut:z,Wt:$}=O,{tn:Y}=q,{tn:ae}=G,fe=se=>{const{Xt:re}=se,oe=F&&!V&&Ha(re)===A&&re;return[oe,{transform:oe?`translate(${Ps(L)}px, ${Ma(L)}px)`:""}]},ie=(se,re)=>{if(E(),se)T(Y4);else{const oe=()=>T(Y4,!0);p>0&&!re?I(oe):oe()}},X=()=>{c=s,c&&ie(!0)},K=[k,E,P,y,b,M,Tr(D,"pointerover",X,{C:!0}),Tr(D,"pointerenter",X),Tr(D,"pointerleave",()=>{c=!1,s&&ie(!1)}),Tr(D,"pointermove",()=>{o&&v(()=>{k(),ie(!0),_(()=>{o&&ie(!1)})})}),Tr(Q,"scroll",se=>{w(()=>{$(n()),i&&ie(!0),S(()=>{i&&!c&&ie(!1)})}),r(se),F&&Y(fe),F&&ae(fe)})],U=m.bind(0);return U.qt=O,U.Nt=R,[(se,re,oe)=>{const{At:pe,Lt:le,It:ge,yt:ke}=oe,{A:xe}=Mo(),de=M1(t,se,re),Te=n(),{Tt:Ee,Ct:$e,bt:kt}=Te,[ct,on]=de("showNativeOverlaidScrollbars"),[vt,bt]=de("scrollbars.theme"),[Se,Me]=de("scrollbars.visibility"),[_t,Tt]=de("scrollbars.autoHide"),[we]=de("scrollbars.autoHideDelay"),[ht,$t]=de("scrollbars.dragScroll"),[Lt,Le]=de("scrollbars.clickScroll"),Ge=pe||le||ke,Pn=ge||Me,Pe=ct&&xe.x&&xe.y,Qe=(Xe,dt)=>{const zt=Se==="visible"||Se==="auto"&&Xe==="scroll";return T(FQ,zt,dt),zt};if(p=we,on&&T($Q,Pe),bt&&(T(d),T(vt,!0),d=vt),Tt&&(o=_t==="move",s=_t==="leave",i=_t!=="never",ie(!i,!0)),$t&&T(VQ,ht),Le&&T(WQ,Lt),Pn){const Xe=Qe($e.x,!0),dt=Qe($e.y,!1);T(HQ,!(Xe&&dt))}Ge&&(z(Te),$(Te),T(X4,!Ee.x,!0),T(X4,!Ee.y,!1),T(LQ,kt&&!V))},U,ha.bind(0,K)]},$E=(e,t,n)=>{Rs(e)&&e(t||void 0,n||void 0)},gi=(e,t,n)=>{const{F:r,N:o,Y:s,j:i}=Mo(),c=dl(),d=Xh(e),p=d?e:e.target,h=ME(p);if(t&&!h){let m=!1;const v=F=>{const V=dl()[GQ],q=V&&V.O;return q?q(F,!0):F},b=hr({},r(),v(t)),[w,y,S]=Ny(n),[k,_,P]=vJ(e,b),[I,E,O]=jJ(e,b,_,F=>S("scroll",[Q,F])),R=(F,V)=>k(F,!!V),M=R.bind(0,{},!0),D=s(M),A=i(M),L=F=>{nJ(p),D(),A(),O(),P(),m=!0,S("destroyed",[Q,!!F]),y()},Q={options(F,V){if(F){const q=V?r():{},G=SE(b,hr(q,v(F)));Oy(G)||(hr(b,G),R(G))}return hr({},b)},on:w,off:(F,V)=>{F&&V&&y(F,V)},state(){const{zt:F,Tt:V,Ct:q,Et:G,K:T,St:z,bt:$}=_();return hr({},{overflowEdge:F,overflowAmount:V,overflowStyle:q,hasOverflow:G,padding:T,paddingAbsolute:z,directionRTL:$,destroyed:m})},elements(){const{W:F,Z:V,K:q,J:G,tt:T,ot:z,st:$}=_.qt,{Jt:Y,nn:ae}=E.qt,fe=X=>{const{Ft:K,Gt:U,Xt:se}=X;return{scrollbar:se,track:U,handle:K}},ie=X=>{const{Kt:K,Qt:U}=X,se=fe(K[0]);return hr({},se,{clone:()=>{const re=fe(U());return I({},!0,{}),re}})};return hr({},{target:F,host:V,padding:q||G,viewport:G,content:T||G,scrollOffsetElement:z,scrollEventElement:$,scrollbarHorizontal:ie(Y),scrollbarVertical:ie(ae)})},update:F=>R({},F),destroy:L.bind(0)};return _.jt((F,V,q)=>{I(V,q,F)}),tJ(p,Q),_n(Ho(c),F=>$E(c[F],0,Q)),eJ(_.qt.it,o().cancel,!d&&e.cancel)?(L(!0),Q):(_.Nt(),E.Nt(),S("initialized",[Q]),_.jt((F,V,q)=>{const{gt:G,yt:T,vt:z,At:$,Lt:Y,It:ae,wt:fe,Ot:ie}=F;S("updated",[Q,{updateHints:{sizeChanged:G,directionChanged:T,heightIntrinsicChanged:z,overflowEdgeChanged:$,overflowAmountChanged:Y,overflowStyleChanged:ae,contentMutation:fe,hostMutation:ie},changedOptions:V,force:q}])}),Q.update(!0),Q)}return h};gi.plugin=e=>{_n(UQ(e),t=>$E(t,gi))};gi.valid=e=>{const t=e&&e.elements,n=Rs(t)&&t();return j1(n)&&!!ME(n.target)};gi.env=()=>{const{k:e,A:t,I:n,B:r,V:o,L:s,X:i,U:c,N:d,q:p,F:h,G:m}=Mo();return hr({},{scrollbarsSize:e,scrollbarsOverlaid:t,scrollbarsHiding:n,rtlScrollBehavior:r,flexboxGlue:o,cssCustomProperties:s,staticDefaultInitialization:i,staticDefaultOptions:c,getDefaultInitialization:d,setDefaultInitialization:p,getDefaultOptions:h,setDefaultOptions:m})};const IJ=()=>{if(typeof window>"u"){const p=()=>{};return[p,p]}let e,t;const n=window,r=typeof n.requestIdleCallback=="function",o=n.requestAnimationFrame,s=n.cancelAnimationFrame,i=r?n.requestIdleCallback:o,c=r?n.cancelIdleCallback:s,d=()=>{c(e),s(t)};return[(p,h)=>{d(),e=i(r?()=>{d(),t=o(p)}:p,typeof h=="object"?h:{timeout:2233})},d]},LE=e=>{const{options:t,events:n,defer:r}=e||{},[o,s]=f.useMemo(IJ,[]),i=f.useRef(null),c=f.useRef(r),d=f.useRef(t),p=f.useRef(n);return f.useEffect(()=>{c.current=r},[r]),f.useEffect(()=>{const{current:h}=i;d.current=t,gi.valid(h)&&h.options(t||{},!0)},[t]),f.useEffect(()=>{const{current:h}=i;p.current=n,gi.valid(h)&&h.on(n||{},!0)},[n]),f.useEffect(()=>()=>{var h;s(),(h=i.current)==null||h.destroy()},[]),f.useMemo(()=>[h=>{const m=i.current;if(gi.valid(m))return;const v=c.current,b=d.current||{},w=p.current||{},y=()=>i.current=gi(h,b,w);v?o(y,v):y()},()=>i.current],[])},EJ=(e,t)=>{const{element:n="div",options:r,events:o,defer:s,children:i,...c}=e,d=n,p=f.useRef(null),h=f.useRef(null),[m,v]=LE({options:r,events:o,defer:s});return f.useEffect(()=>{const{current:b}=p,{current:w}=h;return b&&w&&m({target:b,elements:{viewport:w,content:w}}),()=>{var y;return(y=v())==null?void 0:y.destroy()}},[m,n]),f.useImperativeHandle(t,()=>({osInstance:v,getElement:()=>p.current}),[]),W.createElement(d,{"data-overlayscrollbars-initialize":"",ref:p,...c},W.createElement("div",{ref:h},i))},zE=f.forwardRef(EJ);var BE={exports:{}},FE={};const Lo=nb(e7),Pu=nb(t7),OJ=nb(n7);(function(e){var t,n,r=Tl&&Tl.__generator||function(J,ee){var he,_e,me,ut,ot={label:0,sent:function(){if(1&me[0])throw me[1];return me[1]},trys:[],ops:[]};return ut={next:Ht(0),throw:Ht(1),return:Ht(2)},typeof Symbol=="function"&&(ut[Symbol.iterator]=function(){return this}),ut;function Ht(ft){return function(xt){return function(He){if(he)throw new TypeError("Generator is already executing.");for(;ot;)try{if(he=1,_e&&(me=2&He[0]?_e.return:He[0]?_e.throw||((me=_e.return)&&me.call(_e),0):_e.next)&&!(me=me.call(_e,He[1])).done)return me;switch(_e=0,me&&(He=[2&He[0],me.value]),He[0]){case 0:case 1:me=He;break;case 4:return ot.label++,{value:He[1],done:!1};case 5:ot.label++,_e=He[1],He=[0];continue;case 7:He=ot.ops.pop(),ot.trys.pop();continue;default:if(!((me=(me=ot.trys).length>0&&me[me.length-1])||He[0]!==6&&He[0]!==2)){ot=0;continue}if(He[0]===3&&(!me||He[1]>me[0]&&He[1]=200&&J.status<=299},Q=function(J){return/ion\/(vnd\.api\+)?json/.test(J.get("content-type")||"")};function F(J){if(!(0,D.isPlainObject)(J))return J;for(var ee=S({},J),he=0,_e=Object.entries(ee);he<_e.length;he++){var me=_e[he];me[1]===void 0&&delete ee[me[0]]}return ee}function V(J){var ee=this;J===void 0&&(J={});var he=J.baseUrl,_e=J.prepareHeaders,me=_e===void 0?function(en){return en}:_e,ut=J.fetchFn,ot=ut===void 0?A:ut,Ht=J.paramsSerializer,ft=J.isJsonContentType,xt=ft===void 0?Q:ft,He=J.jsonContentType,Ce=He===void 0?"application/json":He,Ye=J.jsonReplacer,Pt=J.timeout,Et=J.responseHandler,Nt=J.validateStatus,qt=P(J,["baseUrl","prepareHeaders","fetchFn","paramsSerializer","isJsonContentType","jsonContentType","jsonReplacer","timeout","responseHandler","validateStatus"]);return typeof fetch>"u"&&ot===A&&console.warn("Warning: `fetch` is not available. Please supply a custom `fetchFn` property to use `fetchBaseQuery` on SSR environments."),function(en,Ut){return E(ee,null,function(){var Be,yt,Mt,Wt,jn,Gt,un,sn,Or,Jn,It,In,Rn,Zn,mr,Tn,Nn,dn,Sn,En,bn,yn,qe,Ot,St,st,wt,Bt,mt,rt,Re,Ie,De,We,Ze,Dt;return r(this,function(Rt){switch(Rt.label){case 0:return Be=Ut.signal,yt=Ut.getState,Mt=Ut.extra,Wt=Ut.endpoint,jn=Ut.forced,Gt=Ut.type,Or=(sn=typeof en=="string"?{url:en}:en).url,It=(Jn=sn.headers)===void 0?new Headers(qt.headers):Jn,Rn=(In=sn.params)===void 0?void 0:In,mr=(Zn=sn.responseHandler)===void 0?Et??"json":Zn,Nn=(Tn=sn.validateStatus)===void 0?Nt??L:Tn,Sn=(dn=sn.timeout)===void 0?Pt:dn,En=P(sn,["url","headers","params","responseHandler","validateStatus","timeout"]),bn=S(k(S({},qt),{signal:Be}),En),It=new Headers(F(It)),yn=bn,[4,me(It,{getState:yt,extra:Mt,endpoint:Wt,forced:jn,type:Gt})];case 1:yn.headers=Rt.sent()||It,qe=function(Ve){return typeof Ve=="object"&&((0,D.isPlainObject)(Ve)||Array.isArray(Ve)||typeof Ve.toJSON=="function")},!bn.headers.has("content-type")&&qe(bn.body)&&bn.headers.set("content-type",Ce),qe(bn.body)&&xt(bn.headers)&&(bn.body=JSON.stringify(bn.body,Ye)),Rn&&(Ot=~Or.indexOf("?")?"&":"?",St=Ht?Ht(Rn):new URLSearchParams(F(Rn)),Or+=Ot+St),Or=function(Ve,nn){if(!Ve)return nn;if(!nn)return Ve;if(function(hn){return new RegExp("(^|:)//").test(hn)}(nn))return nn;var xn=Ve.endsWith("/")||!nn.startsWith("?")?"/":"";return Ve=function(hn){return hn.replace(/\/$/,"")}(Ve),""+Ve+xn+function(hn){return hn.replace(/^\//,"")}(nn)}(he,Or),st=new Request(Or,bn),wt=st.clone(),un={request:wt},mt=!1,rt=Sn&&setTimeout(function(){mt=!0,Ut.abort()},Sn),Rt.label=2;case 2:return Rt.trys.push([2,4,5,6]),[4,ot(st)];case 3:return Bt=Rt.sent(),[3,6];case 4:return Re=Rt.sent(),[2,{error:{status:mt?"TIMEOUT_ERROR":"FETCH_ERROR",error:String(Re)},meta:un}];case 5:return rt&&clearTimeout(rt),[7];case 6:Ie=Bt.clone(),un.response=Ie,We="",Rt.label=7;case 7:return Rt.trys.push([7,9,,10]),[4,Promise.all([tn(Bt,mr).then(function(Ve){return De=Ve},function(Ve){return Ze=Ve}),Ie.text().then(function(Ve){return We=Ve},function(){})])];case 8:if(Rt.sent(),Ze)throw Ze;return[3,10];case 9:return Dt=Rt.sent(),[2,{error:{status:"PARSING_ERROR",originalStatus:Bt.status,data:We,error:String(Dt)},meta:un}];case 10:return[2,Nn(Bt,De)?{data:De,meta:un}:{error:{status:Bt.status,data:De},meta:un}]}})})};function tn(en,Ut){return E(this,null,function(){var Be;return r(this,function(yt){switch(yt.label){case 0:return typeof Ut=="function"?[2,Ut(en)]:(Ut==="content-type"&&(Ut=xt(en.headers)?"json":"text"),Ut!=="json"?[3,2]:[4,en.text()]);case 1:return[2,(Be=yt.sent()).length?JSON.parse(Be):null];case 2:return[2,en.text()]}})})}}var q=function(J,ee){ee===void 0&&(ee=void 0),this.value=J,this.meta=ee};function G(J,ee){return J===void 0&&(J=0),ee===void 0&&(ee=5),E(this,null,function(){var he,_e;return r(this,function(me){switch(me.label){case 0:return he=Math.min(J,ee),_e=~~((Math.random()+.4)*(300<=Ie)}var En=(0,$e.createAsyncThunk)(Rn+"/executeQuery",dn,{getPendingMeta:function(){var qe;return(qe={startedTimeStamp:Date.now()})[$e.SHOULD_AUTOBATCH]=!0,qe},condition:function(qe,Ot){var St,st,wt,Bt=(0,Ot.getState)(),mt=(st=(St=Bt[Rn])==null?void 0:St.queries)==null?void 0:st[qe.queryCacheKey],rt=mt==null?void 0:mt.fulfilledTimeStamp,Re=qe.originalArgs,Ie=mt==null?void 0:mt.originalArgs,De=mr[qe.endpointName];return!(!de(qe)&&((mt==null?void 0:mt.status)==="pending"||!Sn(qe,Bt)&&(!oe(De)||!((wt=De==null?void 0:De.forceRefetch)!=null&&wt.call(De,{currentArg:Re,previousArg:Ie,endpointState:mt,state:Bt})))&&rt))},dispatchConditionRejection:!0}),bn=(0,$e.createAsyncThunk)(Rn+"/executeMutation",dn,{getPendingMeta:function(){var qe;return(qe={startedTimeStamp:Date.now()})[$e.SHOULD_AUTOBATCH]=!0,qe}});function yn(qe){return function(Ot){var St,st;return((st=(St=Ot==null?void 0:Ot.meta)==null?void 0:St.arg)==null?void 0:st.endpointName)===qe}}return{queryThunk:En,mutationThunk:bn,prefetch:function(qe,Ot,St){return function(st,wt){var Bt=function(De){return"force"in De}(St)&&St.force,mt=function(De){return"ifOlderThan"in De}(St)&&St.ifOlderThan,rt=function(De){return De===void 0&&(De=!0),Nn.endpoints[qe].initiate(Ot,{forceRefetch:De})},Re=Nn.endpoints[qe].select(Ot)(wt());if(Bt)st(rt());else if(mt){var Ie=Re==null?void 0:Re.fulfilledTimeStamp;if(!Ie)return void st(rt());(Number(new Date)-Number(new Date(Ie)))/1e3>=mt&&st(rt())}else st(rt(!1))}},updateQueryData:function(qe,Ot,St){return function(st,wt){var Bt,mt,rt=Nn.endpoints[qe].select(Ot)(wt()),Re={patches:[],inversePatches:[],undo:function(){return st(Nn.util.patchQueryData(qe,Ot,Re.inversePatches))}};if(rt.status===t.uninitialized)return Re;if("data"in rt)if((0,Ee.isDraftable)(rt.data)){var Ie=(0,Ee.produceWithPatches)(rt.data,St),De=Ie[2];(Bt=Re.patches).push.apply(Bt,Ie[1]),(mt=Re.inversePatches).push.apply(mt,De)}else{var We=St(rt.data);Re.patches.push({op:"replace",path:[],value:We}),Re.inversePatches.push({op:"replace",path:[],value:rt.data})}return st(Nn.util.patchQueryData(qe,Ot,Re.patches)),Re}},upsertQueryData:function(qe,Ot,St){return function(st){var wt;return st(Nn.endpoints[qe].initiate(Ot,((wt={subscribe:!1,forceRefetch:!0})[xe]=function(){return{data:St}},wt)))}},patchQueryData:function(qe,Ot,St){return function(st){st(Nn.internalActions.queryResultPatched({queryCacheKey:Tn({queryArgs:Ot,endpointDefinition:mr[qe],endpointName:qe}),patches:St}))}},buildMatchThunkActions:function(qe,Ot){return{matchPending:(0,Te.isAllOf)((0,Te.isPending)(qe),yn(Ot)),matchFulfilled:(0,Te.isAllOf)((0,Te.isFulfilled)(qe),yn(Ot)),matchRejected:(0,Te.isAllOf)((0,Te.isRejected)(qe),yn(Ot))}}}}({baseQuery:_e,reducerPath:me,context:he,api:J,serializeQueryArgs:ut}),Ye=Ce.queryThunk,Pt=Ce.mutationThunk,Et=Ce.patchQueryData,Nt=Ce.updateQueryData,qt=Ce.upsertQueryData,tn=Ce.prefetch,en=Ce.buildMatchThunkActions,Ut=function(It){var In=It.reducerPath,Rn=It.queryThunk,Zn=It.mutationThunk,mr=It.context,Tn=mr.endpointDefinitions,Nn=mr.apiUid,dn=mr.extractRehydrationInfo,Sn=mr.hasRehydrationInfo,En=It.assertTagType,bn=It.config,yn=(0,ge.createAction)(In+"/resetApiState"),qe=(0,ge.createSlice)({name:In+"/queries",initialState:_t,reducers:{removeQueryResult:{reducer:function(rt,Re){delete rt[Re.payload.queryCacheKey]},prepare:(0,ge.prepareAutoBatched)()},queryResultPatched:function(rt,Re){var Ie=Re.payload,De=Ie.patches;bt(rt,Ie.queryCacheKey,function(We){We.data=(0,vt.applyPatches)(We.data,De.concat())})}},extraReducers:function(rt){rt.addCase(Rn.pending,function(Re,Ie){var De,We=Ie.meta,Ze=Ie.meta.arg,Dt=de(Ze);(Ze.subscribe||Dt)&&(Re[De=Ze.queryCacheKey]!=null||(Re[De]={status:t.uninitialized,endpointName:Ze.endpointName})),bt(Re,Ze.queryCacheKey,function(Rt){Rt.status=t.pending,Rt.requestId=Dt&&Rt.requestId?Rt.requestId:We.requestId,Ze.originalArgs!==void 0&&(Rt.originalArgs=Ze.originalArgs),Rt.startedTimeStamp=We.startedTimeStamp})}).addCase(Rn.fulfilled,function(Re,Ie){var De=Ie.meta,We=Ie.payload;bt(Re,De.arg.queryCacheKey,function(Ze){var Dt;if(Ze.requestId===De.requestId||de(De.arg)){var Rt=Tn[De.arg.endpointName].merge;if(Ze.status=t.fulfilled,Rt)if(Ze.data!==void 0){var Ve=De.fulfilledTimeStamp,nn=De.arg,xn=De.baseQueryMeta,hn=De.requestId,gr=(0,ge.createNextState)(Ze.data,function(Xn){return Rt(Xn,We,{arg:nn.originalArgs,baseQueryMeta:xn,fulfilledTimeStamp:Ve,requestId:hn})});Ze.data=gr}else Ze.data=We;else Ze.data=(Dt=Tn[De.arg.endpointName].structuralSharing)==null||Dt?M((0,on.isDraft)(Ze.data)?(0,vt.original)(Ze.data):Ze.data,We):We;delete Ze.error,Ze.fulfilledTimeStamp=De.fulfilledTimeStamp}})}).addCase(Rn.rejected,function(Re,Ie){var De=Ie.meta,We=De.condition,Ze=De.requestId,Dt=Ie.error,Rt=Ie.payload;bt(Re,De.arg.queryCacheKey,function(Ve){if(!We){if(Ve.requestId!==Ze)return;Ve.status=t.rejected,Ve.error=Rt??Dt}})}).addMatcher(Sn,function(Re,Ie){for(var De=dn(Ie).queries,We=0,Ze=Object.entries(De);We"u"||navigator.onLine===void 0||navigator.onLine,focused:typeof document>"u"||document.visibilityState!=="hidden",middlewareRegistered:!1},bn),reducers:{middlewareRegistered:function(rt,Re){rt.middlewareRegistered=rt.middlewareRegistered!=="conflict"&&Nn===Re.payload||"conflict"}},extraReducers:function(rt){rt.addCase(fe,function(Re){Re.online=!0}).addCase(ie,function(Re){Re.online=!1}).addCase(Y,function(Re){Re.focused=!0}).addCase(ae,function(Re){Re.focused=!1}).addMatcher(Sn,function(Re){return S({},Re)})}}),mt=(0,ge.combineReducers)({queries:qe.reducer,mutations:Ot.reducer,provided:St.reducer,subscriptions:wt.reducer,config:Bt.reducer});return{reducer:function(rt,Re){return mt(yn.match(Re)?void 0:rt,Re)},actions:k(S(S(S(S(S({},Bt.actions),qe.actions),st.actions),wt.actions),Ot.actions),{unsubscribeMutationResult:Ot.actions.removeMutationResult,resetApiState:yn})}}({context:he,queryThunk:Ye,mutationThunk:Pt,reducerPath:me,assertTagType:He,config:{refetchOnFocus:ft,refetchOnReconnect:xt,refetchOnMountOrArgChange:Ht,keepUnusedDataFor:ot,reducerPath:me}}),Be=Ut.reducer,yt=Ut.actions;$r(J.util,{patchQueryData:Et,updateQueryData:Nt,upsertQueryData:qt,prefetch:tn,resetApiState:yt.resetApiState}),$r(J.internalActions,yt);var Mt=function(It){var In=It.reducerPath,Rn=It.queryThunk,Zn=It.api,mr=It.context,Tn=mr.apiUid,Nn={invalidateTags:(0,cr.createAction)(In+"/invalidateTags")},dn=[Vr,pn,Wr,xr,Wn,Do];return{middleware:function(En){var bn=!1,yn=k(S({},It),{internalState:{currentSubscriptions:{}},refetchQuery:Sn}),qe=dn.map(function(st){return st(yn)}),Ot=function(st){var wt=st.api,Bt=st.queryThunk,mt=st.internalState,rt=wt.reducerPath+"/subscriptions",Re=null,Ie=!1,De=wt.internalActions,We=De.updateSubscriptionOptions,Ze=De.unsubscribeQueryResult;return function(Dt,Rt){var Ve,nn;if(Re||(Re=JSON.parse(JSON.stringify(mt.currentSubscriptions))),wt.util.resetApiState.match(Dt))return Re=mt.currentSubscriptions={},[!0,!1];if(wt.internalActions.internal_probeSubscription.match(Dt)){var xn=Dt.payload;return[!1,!!((Ve=mt.currentSubscriptions[xn.queryCacheKey])!=null&&Ve[xn.requestId])]}var hn=function(gn,Vn){var ao,fn,$n,Gr,Rr,Qa,nf,Ao,va;if(We.match(Vn)){var zs=Vn.payload,ba=zs.queryCacheKey,io=zs.requestId;return(ao=gn==null?void 0:gn[ba])!=null&&ao[io]&&(gn[ba][io]=zs.options),!0}if(Ze.match(Vn)){var lo=Vn.payload;return io=lo.requestId,gn[ba=lo.queryCacheKey]&&delete gn[ba][io],!0}if(wt.internalActions.removeQueryResult.match(Vn))return delete gn[Vn.payload.queryCacheKey],!0;if(Bt.pending.match(Vn)){var co=Vn.meta;if(io=co.requestId,(Yr=co.arg).subscribe)return(Wo=($n=gn[fn=Yr.queryCacheKey])!=null?$n:gn[fn]={})[io]=(Rr=(Gr=Yr.subscriptionOptions)!=null?Gr:Wo[io])!=null?Rr:{},!0}if(Bt.rejected.match(Vn)){var Wo,To=Vn.meta,Yr=To.arg;if(io=To.requestId,To.condition&&Yr.subscribe)return(Wo=(nf=gn[Qa=Yr.queryCacheKey])!=null?nf:gn[Qa]={})[io]=(va=(Ao=Yr.subscriptionOptions)!=null?Ao:Wo[io])!=null?va:{},!0}return!1}(mt.currentSubscriptions,Dt);if(hn){Ie||(ds(function(){var gn=JSON.parse(JSON.stringify(mt.currentSubscriptions)),Vn=(0,Ur.produceWithPatches)(Re,function(){return gn});Rt.next(wt.internalActions.subscriptionsUpdated(Vn[1])),Re=gn,Ie=!1}),Ie=!0);var gr=!!((nn=Dt.type)!=null&&nn.startsWith(rt)),Xn=Bt.rejected.match(Dt)&&Dt.meta.condition&&!!Dt.meta.arg.subscribe;return[!gr&&!Xn,!1]}return[!0,!1]}}(yn),St=function(st){var wt=st.reducerPath,Bt=st.context,mt=st.refetchQuery,rt=st.internalState,Re=st.api.internalActions.removeQueryResult;function Ie(De,We){var Ze=De.getState()[wt],Dt=Ze.queries,Rt=rt.currentSubscriptions;Bt.batch(function(){for(var Ve=0,nn=Object.keys(Rt);Ve{const{boardToDelete:t,setBoardToDelete:n}=e,{t:r}=ye(),o=B(_=>_.config.canRestoreDeletedImagesFromBin),{currentData:s,isFetching:i}=r7((t==null?void 0:t.board_id)??ro.skipToken),c=f.useMemo(()=>be([at],_=>{const P=(s??[]).map(E=>L_(_,E));return{imageUsageSummary:{isInitialImage:Pa(P,E=>E.isInitialImage),isCanvasImage:Pa(P,E=>E.isCanvasImage),isNodesImage:Pa(P,E=>E.isNodesImage),isControlNetImage:Pa(P,E=>E.isControlNetImage)}}}),[s]),[d,{isLoading:p}]=o7(),[h,{isLoading:m}]=s7(),{imageUsageSummary:v}=B(c),b=f.useCallback(()=>{t&&(d(t.board_id),n(void 0))},[t,d,n]),w=f.useCallback(()=>{t&&(h(t.board_id),n(void 0))},[t,h,n]),y=f.useCallback(()=>{n(void 0)},[n]),S=f.useRef(null),k=f.useMemo(()=>m||p||i,[m,p,i]);return t?a.jsx(zd,{isOpen:!!t,onClose:y,leastDestructiveRef:S,isCentered:!0,children:a.jsx(za,{children:a.jsxs(Bd,{children:[a.jsxs(La,{fontSize:"lg",fontWeight:"bold",children:["Delete ",t.board_name]}),a.jsx(Ba,{children:a.jsxs(H,{direction:"column",gap:3,children:[i?a.jsx(Mm,{children:a.jsx(H,{sx:{w:"full",h:32}})}):a.jsx(UI,{imageUsage:v,topMessage:"This board contains images used in the following features:",bottomMessage:"Deleting this board and its images will reset any features currently using them."}),a.jsx(Je,{children:"Deleted boards cannot be restored."}),a.jsx(Je,{children:r(o?"gallery.deleteImageBin":"gallery.deleteImagePermanent")})]})}),a.jsx($a,{children:a.jsxs(H,{sx:{justifyContent:"space-between",width:"full",gap:2},children:[a.jsx(Yt,{ref:S,onClick:y,children:"Cancel"}),a.jsx(Yt,{colorScheme:"warning",isLoading:k,onClick:b,children:"Delete Board Only"}),a.jsx(Yt,{colorScheme:"error",isLoading:k,onClick:w,children:"Delete Board and Images"})]})})]})})}):null},MJ=f.memo(RJ),HE=Ae((e,t)=>{const{role:n,tooltip:r="",tooltipProps:o,isChecked:s,...i}=e;return a.jsx(vn,{label:r,hasArrow:!0,...o,...o!=null&&o.placement?{placement:o.placement}:{placement:"top"},children:a.jsx(Ea,{ref:t,role:n,colorScheme:s?"accent":"base",...i})})});HE.displayName="IAIIconButton";const ze=f.memo(HE),DJ="My Board",AJ=()=>{const[e,{isLoading:t}]=a7(),n=f.useCallback(()=>{e(DJ)},[e]);return a.jsx(ze,{icon:a.jsx(yl,{}),isLoading:t,tooltip:"Add Board","aria-label":"Add Board",onClick:n,size:"sm"})};var ck={path:a.jsxs("g",{stroke:"currentColor",strokeWidth:"1.5",children:[a.jsx("path",{strokeLinecap:"round",fill:"none",d:"M9,9a3,3,0,1,1,4,2.829,1.5,1.5,0,0,0-1,1.415V14.25"}),a.jsx("path",{fill:"currentColor",strokeLinecap:"round",d:"M12,17.25a.375.375,0,1,0,.375.375A.375.375,0,0,0,12,17.25h0"}),a.jsx("circle",{fill:"none",strokeMiterlimit:"10",cx:"12",cy:"12",r:"11.25"})]}),viewBox:"0 0 24 24"},WE=Ae((e,t)=>{const{as:n,viewBox:r,color:o="currentColor",focusable:s=!1,children:i,className:c,__css:d,...p}=e,h=Ct("chakra-icon",c),m=fa("Icon",e),v={w:"1em",h:"1em",display:"inline-block",lineHeight:"1em",flexShrink:0,color:o,...d,...m},b={ref:t,focusable:s,className:h,__css:v},w=r??ck.viewBox;if(n&&typeof n!="string")return a.jsx(je.svg,{as:n,...b,...p});const y=i??ck.path;return a.jsx(je.svg,{verticalAlign:"middle",viewBox:w,...b,...p,children:y})});WE.displayName="Icon";function Qd(e){const{viewBox:t="0 0 24 24",d:n,displayName:r,defaultProps:o={}}=e,s=f.Children.toArray(e.path),i=Ae((c,d)=>a.jsx(WE,{ref:d,viewBox:t,...o,...c,children:s.length?s:a.jsx("path",{fill:"currentColor",d:n})}));return i.displayName=r,i}var VE=Qd({displayName:"ExternalLinkIcon",path:a.jsxs("g",{fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeWidth:"2",children:[a.jsx("path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"}),a.jsx("path",{d:"M15 3h6v6"}),a.jsx("path",{d:"M10 14L21 3"})]})}),Hy=Qd({d:"M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z",displayName:"ChevronUpIcon"}),TJ=Qd({displayName:"CloseIcon",d:"M.439,21.44a1.5,1.5,0,0,0,2.122,2.121L11.823,14.3a.25.25,0,0,1,.354,0l9.262,9.263a1.5,1.5,0,1,0,2.122-2.121L14.3,12.177a.25.25,0,0,1,0-.354l9.263-9.262A1.5,1.5,0,0,0,21.439.44L12.177,9.7a.25.25,0,0,1-.354,0L2.561.44A1.5,1.5,0,0,0,.439,2.561L9.7,11.823a.25.25,0,0,1,0,.354Z"}),NJ=Qd({displayName:"DeleteIcon",path:a.jsx("g",{fill:"currentColor",children:a.jsx("path",{d:"M19.452 7.5H4.547a.5.5 0 00-.5.545l1.287 14.136A2 2 0 007.326 24h9.347a2 2 0 001.992-1.819L19.95 8.045a.5.5 0 00-.129-.382.5.5 0 00-.369-.163zm-9.2 13a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zm5 0a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zM22 4h-4.75a.25.25 0 01-.25-.25V2.5A2.5 2.5 0 0014.5 0h-5A2.5 2.5 0 007 2.5v1.25a.25.25 0 01-.25.25H2a1 1 0 000 2h20a1 1 0 000-2zM9 3.75V2.5a.5.5 0 01.5-.5h5a.5.5 0 01.5.5v1.25a.25.25 0 01-.25.25h-5.5A.25.25 0 019 3.75z"})})}),$J=Qd({displayName:"ChevronDownIcon",d:"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"});const LJ=be([at],({gallery:e})=>{const{boardSearchText:t}=e;return{boardSearchText:t}},Ke),zJ=()=>{const e=te(),{boardSearchText:t}=B(LJ),n=f.useRef(null),r=f.useCallback(c=>{e(ew(c))},[e]),o=f.useCallback(()=>{e(ew(""))},[e]),s=f.useCallback(c=>{c.key==="Escape"&&o()},[o]),i=f.useCallback(c=>{r(c.target.value)},[r]);return f.useEffect(()=>{n.current&&n.current.focus()},[]),a.jsxs(Z3,{children:[a.jsx(Dd,{ref:n,placeholder:"Search Boards...",value:t,onKeyDown:s,onChange:i}),t&&t.length&&a.jsx(Ab,{children:a.jsx(Ea,{onClick:o,size:"xs",variant:"ghost","aria-label":"Clear Search",opacity:.5,icon:a.jsx(TJ,{boxSize:2})})})]})},BJ=f.memo(zJ),FJ=e=>{const{isOver:t,label:n="Drop"}=e,r=f.useRef(vi()),{colorMode:o}=Ds();return a.jsx(Er.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.1}},exit:{opacity:0,transition:{duration:.1}},children:a.jsxs(H,{sx:{position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full"},children:[a.jsx(H,{sx:{position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full",bg:Fe("base.700","base.900")(o),opacity:.7,borderRadius:"base",alignItems:"center",justifyContent:"center",transitionProperty:"common",transitionDuration:"0.1s"}}),a.jsx(H,{sx:{position:"absolute",top:.5,insetInlineStart:.5,insetInlineEnd:.5,bottom:.5,opacity:1,borderWidth:2,borderColor:t?Fe("base.50","base.50")(o):Fe("base.200","base.300")(o),borderRadius:"lg",borderStyle:"dashed",transitionProperty:"common",transitionDuration:"0.1s",alignItems:"center",justifyContent:"center"},children:a.jsx(Oe,{sx:{fontSize:"2xl",fontWeight:600,transform:t?"scale(1.1)":"scale(1)",color:t?Fe("base.50","base.50")(o):Fe("base.200","base.300")(o),transitionProperty:"common",transitionDuration:"0.1s"},children:n})})]})},r.current)},tm=f.memo(FJ),HJ=e=>{const{dropLabel:t,data:n,disabled:r}=e,o=f.useRef(vi()),{isOver:s,setNodeRef:i,active:c}=rb({id:o.current,disabled:r,data:n});return a.jsx(Oe,{ref:i,position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full",pointerEvents:"none",children:a.jsx(mo,{children:Fp(n,c)&&a.jsx(tm,{isOver:s,label:t})})})},Wy=f.memo(HJ),Vy=({isSelected:e,isHovered:t})=>a.jsx(Oe,{className:"selection-box",sx:{position:"absolute",top:0,insetInlineEnd:0,bottom:0,insetInlineStart:0,borderRadius:"base",opacity:e?1:.7,transitionProperty:"common",transitionDuration:"0.1s",shadow:e?t?"hoverSelected.light":"selected.light":t?"hoverUnselected.light":void 0,_dark:{shadow:e?t?"hoverSelected.dark":"selected.dark":t?"hoverUnselected.dark":void 0}}}),UE=()=>a.jsx(H,{sx:{position:"absolute",insetInlineEnd:0,top:0,p:1},children:a.jsx(gl,{variant:"solid",sx:{bg:"accent.400",_dark:{bg:"accent.500"}},children:"auto"})});var Xu=globalThis&&globalThis.__assign||function(){return Xu=Object.assign||function(e){for(var t,n=1,r=arguments.length;n{const{boardName:t}=hm(void 0,{selectFromResult:({data:n})=>{const r=n==null?void 0:n.find(s=>s.board_id===e);return{boardName:(r==null?void 0:r.board_name)||"Uncategorized"}}});return t},WJ=({board:e,setBoardToDelete:t})=>{const n=f.useCallback(()=>{t&&t(e)},[e,t]);return a.jsxs(a.Fragment,{children:[e.image_count>0&&a.jsx(a.Fragment,{}),a.jsx(jr,{sx:{color:"error.600",_dark:{color:"error.300"}},icon:a.jsx(Oo,{}),onClick:n,children:"Delete Board"})]})},VJ=f.memo(WJ),UJ=()=>a.jsx(a.Fragment,{}),GJ=f.memo(UJ),Uy=f.memo(({board:e,board_id:t,setBoardToDelete:n,children:r})=>{const o=te(),s=f.useMemo(()=>be(at,({gallery:v,system:b})=>{const w=v.autoAddBoardId===t,y=b.isProcessing,S=v.autoAssignBoardOnClick;return{isAutoAdd:w,isProcessing:y,autoAssignBoardOnClick:S}}),[t]),{isAutoAdd:i,isProcessing:c,autoAssignBoardOnClick:d}=B(s),p=eg(t),h=f.useCallback(()=>{o(mm(t))},[t,o]),m=f.useCallback(v=>{v.preventDefault()},[]);return a.jsx(GE,{menuProps:{size:"sm",isLazy:!0},menuButtonProps:{bg:"transparent",_hover:{bg:"transparent"}},renderMenu:()=>a.jsx(il,{sx:{visibility:"visible !important"},motionProps:od,onContextMenu:m,children:a.jsxs(ud,{title:p,children:[a.jsx(jr,{icon:a.jsx(yl,{}),isDisabled:i||c||d,onClick:h,children:"Auto-add to this Board"}),!e&&a.jsx(GJ,{}),e&&a.jsx(VJ,{board:e,setBoardToDelete:n})]})}),children:r})});Uy.displayName="HoverableBoard";const qE=f.memo(({board:e,isSelected:t,setBoardToDelete:n})=>{const r=te(),o=f.useMemo(()=>be(at,({gallery:A,system:L})=>{const Q=e.board_id===A.autoAddBoardId,F=A.autoAssignBoardOnClick,V=L.isProcessing;return{isSelectedForAutoAdd:Q,autoAssignBoardOnClick:F,isProcessing:V}},Ke),[e.board_id]),{isSelectedForAutoAdd:s,autoAssignBoardOnClick:i,isProcessing:c}=B(o),[d,p]=f.useState(!1),h=f.useCallback(()=>{p(!0)},[]),m=f.useCallback(()=>{p(!1)},[]),{data:v}=H_(e.board_id),{data:b}=W_(e.board_id),w=f.useMemo(()=>{if(!(!v||!b))return`${v} image${v>1?"s":""}, ${b} asset${b>1?"s":""}`},[b,v]),{currentData:y}=Is(e.cover_image_name??ro.skipToken),{board_name:S,board_id:k}=e,[_,P]=f.useState(S),I=f.useCallback(()=>{r(V_(k)),i&&!c&&r(mm(k))},[k,i,c,r]),[E,{isLoading:O}]=i7(),R=f.useMemo(()=>({id:k,actionType:"ADD_TO_BOARD",context:{boardId:k}}),[k]),M=f.useCallback(async A=>{if(!A.trim()){P(S);return}if(A!==S)try{const{board_name:L}=await E({board_id:k,changes:{board_name:A}}).unwrap();P(L)}catch{P(S)}},[k,S,E]),D=f.useCallback(A=>{P(A)},[]);return a.jsx(Oe,{sx:{w:"full",h:"full",touchAction:"none",userSelect:"none"},children:a.jsx(H,{onMouseOver:h,onMouseOut:m,sx:{position:"relative",justifyContent:"center",alignItems:"center",aspectRatio:"1/1",w:"full",h:"full"},children:a.jsx(Uy,{board:e,board_id:k,setBoardToDelete:n,children:A=>a.jsx(vn,{label:w,openDelay:1e3,hasArrow:!0,children:a.jsxs(H,{ref:A,onClick:I,sx:{w:"full",h:"full",position:"relative",justifyContent:"center",alignItems:"center",borderRadius:"base",cursor:"pointer",bg:"base.200",_dark:{bg:"base.800"}},children:[y!=null&&y.thumbnail_url?a.jsx(zc,{src:y==null?void 0:y.thumbnail_url,draggable:!1,sx:{objectFit:"cover",w:"full",h:"full",maxH:"full",borderRadius:"base",borderBottomRadius:"lg"}}):a.jsx(H,{sx:{w:"full",h:"full",justifyContent:"center",alignItems:"center"},children:a.jsx(fo,{boxSize:12,as:cQ,sx:{mt:-6,opacity:.7,color:"base.500",_dark:{color:"base.500"}}})}),s&&a.jsx(UE,{}),a.jsx(Vy,{isSelected:t,isHovered:d}),a.jsx(H,{sx:{position:"absolute",bottom:0,left:0,p:1,justifyContent:"center",alignItems:"center",w:"full",maxW:"full",borderBottomRadius:"base",bg:t?"accent.400":"base.500",color:t?"base.50":"base.100",_dark:{bg:t?"accent.500":"base.600",color:t?"base.50":"base.100"},lineHeight:"short",fontSize:"xs"},children:a.jsxs(f3,{value:_,isDisabled:O,submitOnBlur:!0,onChange:D,onSubmit:M,sx:{w:"full"},children:[a.jsx(c3,{sx:{p:0,fontWeight:t?700:500,textAlign:"center",overflow:"hidden",textOverflow:"ellipsis"},noOfLines:1}),a.jsx(l3,{sx:{p:0,_focusVisible:{p:0,textAlign:"center",boxShadow:"none"}}})]})}),a.jsx(Wy,{data:R,dropLabel:a.jsx(Je,{fontSize:"md",children:"Move"})})]})})})})})});qE.displayName="HoverableBoard";const qJ=be(at,({gallery:e,system:t})=>{const{autoAddBoardId:n,autoAssignBoardOnClick:r}=e,{isProcessing:o}=t;return{autoAddBoardId:n,autoAssignBoardOnClick:r,isProcessing:o}},Ke),KE=f.memo(({isSelected:e})=>{const t=te(),{autoAddBoardId:n,autoAssignBoardOnClick:r,isProcessing:o}=B(qJ),s=eg("none"),i=f.useCallback(()=>{t(V_("none")),r&&!o&&t(mm("none"))},[t,r,o]),[c,d]=f.useState(!1),p=f.useCallback(()=>{d(!0)},[]),h=f.useCallback(()=>{d(!1)},[]),m=f.useMemo(()=>({id:"no_board",actionType:"REMOVE_FROM_BOARD"}),[]);return a.jsx(Oe,{sx:{w:"full",h:"full",touchAction:"none",userSelect:"none"},children:a.jsx(H,{onMouseOver:p,onMouseOut:h,sx:{position:"relative",justifyContent:"center",alignItems:"center",aspectRatio:"1/1",borderRadius:"base",w:"full",h:"full"},children:a.jsx(Uy,{board_id:"none",children:v=>a.jsxs(H,{ref:v,onClick:i,sx:{w:"full",h:"full",position:"relative",justifyContent:"center",alignItems:"center",borderRadius:"base",cursor:"pointer",bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsx(H,{sx:{w:"full",h:"full",justifyContent:"center",alignItems:"center"},children:a.jsx(zc,{src:U_,alt:"invoke-ai-logo",sx:{opacity:.4,filter:"grayscale(1)",mt:-6,w:16,h:16,minW:16,minH:16,userSelect:"none"}})}),n==="none"&&a.jsx(UE,{}),a.jsx(H,{sx:{position:"absolute",bottom:0,left:0,p:1,justifyContent:"center",alignItems:"center",w:"full",maxW:"full",borderBottomRadius:"base",bg:e?"accent.400":"base.500",color:e?"base.50":"base.100",_dark:{bg:e?"accent.500":"base.600",color:e?"base.50":"base.100"},lineHeight:"short",fontSize:"xs",fontWeight:e?700:500},children:s}),a.jsx(Vy,{isSelected:e,isHovered:c}),a.jsx(Wy,{data:m,dropLabel:a.jsx(Je,{fontSize:"md",children:"Move"})})]})})})})});KE.displayName="HoverableBoard";const KJ=be([at],({gallery:e})=>{const{selectedBoardId:t,boardSearchText:n}=e;return{selectedBoardId:t,boardSearchText:n}},Ke),XJ=e=>{const{isOpen:t}=e,{selectedBoardId:n,boardSearchText:r}=B(KJ),{data:o}=hm(),s=r?o==null?void 0:o.filter(d=>d.board_name.toLowerCase().includes(r.toLowerCase())):o,[i,c]=f.useState();return a.jsxs(a.Fragment,{children:[a.jsx(wm,{in:t,animateOpacity:!0,children:a.jsxs(H,{layerStyle:"first",sx:{flexDir:"column",gap:2,p:2,mt:2,borderRadius:"base"},children:[a.jsxs(H,{sx:{gap:2,alignItems:"center"},children:[a.jsx(BJ,{}),a.jsx(AJ,{})]}),a.jsx(zE,{defer:!0,style:{height:"100%",width:"100%"},options:{scrollbars:{visibility:"auto",autoHide:"move",autoHideDelay:1300,theme:"os-theme-dark"}},children:a.jsxs(sl,{className:"list-container",sx:{gridTemplateColumns:"repeat(auto-fill, minmax(108px, 1fr));",maxH:346},children:[a.jsx(e1,{sx:{p:1.5},children:a.jsx(KE,{isSelected:n==="none"})}),s&&s.map(d=>a.jsx(e1,{sx:{p:1.5},children:a.jsx(qE,{board:d,isSelected:n===d.board_id,setBoardToDelete:c})},d.board_id))]})})]})}),a.jsx(MJ,{boardToDelete:i,setBoardToDelete:c})]})},YJ=f.memo(XJ),QJ=be([at],e=>{const{selectedBoardId:t}=e.gallery;return{selectedBoardId:t}},Ke),JJ=e=>{const{isOpen:t,onToggle:n}=e,{selectedBoardId:r}=B(QJ),o=eg(r),s=f.useMemo(()=>o.length>20?`${o.substring(0,20)}...`:o,[o]);return a.jsxs(H,{as:xc,onClick:n,size:"sm",sx:{position:"relative",gap:2,w:"full",justifyContent:"space-between",alignItems:"center",px:2},children:[a.jsx(Je,{noOfLines:1,sx:{fontWeight:600,w:"100%",textAlign:"center",color:"base.800",_dark:{color:"base.200"}},children:s}),a.jsx(Hy,{sx:{transform:t?"rotate(0deg)":"rotate(180deg)",transitionProperty:"common",transitionDuration:"normal"}})]})},ZJ=f.memo(JJ);function XE(e){return nt({tag:"svg",attr:{fill:"currentColor",viewBox:"0 0 16 16"},child:[{tag:"path",attr:{d:"M9.828.722a.5.5 0 0 1 .354.146l4.95 4.95a.5.5 0 0 1 0 .707c-.48.48-1.072.588-1.503.588-.177 0-.335-.018-.46-.039l-3.134 3.134a5.927 5.927 0 0 1 .16 1.013c.046.702-.032 1.687-.72 2.375a.5.5 0 0 1-.707 0l-2.829-2.828-3.182 3.182c-.195.195-1.219.902-1.414.707-.195-.195.512-1.22.707-1.414l3.182-3.182-2.828-2.829a.5.5 0 0 1 0-.707c.688-.688 1.673-.767 2.375-.72a5.922 5.922 0 0 1 1.013.16l3.134-3.133a2.772 2.772 0 0 1-.04-.461c0-.43.108-1.022.589-1.503a.5.5 0 0 1 .353-.146z"}}]})(e)}function YE(e){return nt({tag:"svg",attr:{fill:"currentColor",viewBox:"0 0 16 16"},child:[{tag:"path",attr:{d:"M9.828.722a.5.5 0 0 1 .354.146l4.95 4.95a.5.5 0 0 1 0 .707c-.48.48-1.072.588-1.503.588-.177 0-.335-.018-.46-.039l-3.134 3.134a5.927 5.927 0 0 1 .16 1.013c.046.702-.032 1.687-.72 2.375a.5.5 0 0 1-.707 0l-2.829-2.828-3.182 3.182c-.195.195-1.219.902-1.414.707-.195-.195.512-1.22.707-1.414l3.182-3.182-2.828-2.829a.5.5 0 0 1 0-.707c.688-.688 1.673-.767 2.375-.72a5.922 5.922 0 0 1 1.013.16l3.134-3.133a2.772 2.772 0 0 1-.04-.461c0-.43.108-1.022.589-1.503a.5.5 0 0 1 .353-.146zm.122 2.112v-.002.002zm0-.002v.002a.5.5 0 0 1-.122.51L6.293 6.878a.5.5 0 0 1-.511.12H5.78l-.014-.004a4.507 4.507 0 0 0-.288-.076 4.922 4.922 0 0 0-.765-.116c-.422-.028-.836.008-1.175.15l5.51 5.509c.141-.34.177-.753.149-1.175a4.924 4.924 0 0 0-.192-1.054l-.004-.013v-.001a.5.5 0 0 1 .12-.512l3.536-3.535a.5.5 0 0 1 .532-.115l.096.022c.087.017.208.034.344.034.114 0 .23-.011.343-.04L9.927 2.028c-.029.113-.04.23-.04.343a1.779 1.779 0 0 0 .062.46z"}}]})(e)}const eZ=be([at],e=>{const{shouldPinGallery:t}=e.ui;return{shouldPinGallery:t}},Ke),tZ=()=>{const e=te(),{t}=ye(),{shouldPinGallery:n}=B(eZ),r=()=>{e(G_()),e(_o())};return a.jsx(ze,{size:"sm","aria-label":t("gallery.pinGallery"),tooltip:`${t("gallery.pinGallery")} (Shift+G)`,onClick:r,icon:n?a.jsx(XE,{}):a.jsx(YE,{})})},nZ=e=>{const{triggerComponent:t,children:n,hasArrow:r=!0,isLazy:o=!0,...s}=e;return a.jsxs(ey,{isLazy:o,...s,children:[a.jsx(Zb,{children:t}),a.jsxs(ty,{shadow:"dark-lg",children:[r&&a.jsx(D6,{}),n]})]})},xl=f.memo(nZ);function rZ(e){return nt({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"M12 16c1.671 0 3-1.331 3-3s-1.329-3-3-3-3 1.331-3 3 1.329 3 3 3z"}},{tag:"path",attr:{d:"M20.817 11.186a8.94 8.94 0 0 0-1.355-3.219 9.053 9.053 0 0 0-2.43-2.43 8.95 8.95 0 0 0-3.219-1.355 9.028 9.028 0 0 0-1.838-.18V2L8 5l3.975 3V6.002c.484-.002.968.044 1.435.14a6.961 6.961 0 0 1 2.502 1.053 7.005 7.005 0 0 1 1.892 1.892A6.967 6.967 0 0 1 19 13a7.032 7.032 0 0 1-.55 2.725 7.11 7.11 0 0 1-.644 1.188 7.2 7.2 0 0 1-.858 1.039 7.028 7.028 0 0 1-3.536 1.907 7.13 7.13 0 0 1-2.822 0 6.961 6.961 0 0 1-2.503-1.054 7.002 7.002 0 0 1-1.89-1.89A6.996 6.996 0 0 1 5 13H3a9.02 9.02 0 0 0 1.539 5.034 9.096 9.096 0 0 0 2.428 2.428A8.95 8.95 0 0 0 12 22a9.09 9.09 0 0 0 1.814-.183 9.014 9.014 0 0 0 3.218-1.355 8.886 8.886 0 0 0 1.331-1.099 9.228 9.228 0 0 0 1.1-1.332A8.952 8.952 0 0 0 21 13a9.09 9.09 0 0 0-.183-1.814z"}}]})(e)}const oZ=e=>{const[t,n]=f.useState(!1),{label:r,value:o,min:s=1,max:i=100,step:c=1,onChange:d,tooltipSuffix:p="",withSliderMarks:h=!1,withInput:m=!1,isInteger:v=!1,inputWidth:b=16,withReset:w=!1,hideTooltip:y=!1,isCompact:S=!1,isDisabled:k=!1,sliderMarks:_,handleReset:P,sliderFormControlProps:I,sliderFormLabelProps:E,sliderMarkProps:O,sliderTrackProps:R,sliderThumbProps:M,sliderNumberInputProps:D,sliderNumberInputFieldProps:A,sliderNumberInputStepperProps:L,sliderTooltipProps:Q,sliderIAIIconButtonProps:F,...V}=e,q=te(),{t:G}=ye(),[T,z]=f.useState(String(o));f.useEffect(()=>{z(o)},[o]);const $=f.useMemo(()=>D!=null&&D.min?D.min:s,[s,D==null?void 0:D.min]),Y=f.useMemo(()=>D!=null&&D.max?D.max:i,[i,D==null?void 0:D.max]),ae=f.useCallback(re=>{d(re)},[d]),fe=f.useCallback(re=>{re.target.value===""&&(re.target.value=String($));const oe=Es(v?Math.floor(Number(re.target.value)):Number(T),$,Y),pe=Mu(oe,c);d(pe),z(pe)},[v,T,$,Y,d,c]),ie=f.useCallback(re=>{z(re)},[]),X=f.useCallback(()=>{P&&P()},[P]),K=f.useCallback(re=>{re.target instanceof HTMLDivElement&&re.target.focus()},[]),U=f.useCallback(re=>{re.shiftKey&&q(Io(!0))},[q]),se=f.useCallback(re=>{re.shiftKey||q(Io(!1))},[q]);return a.jsxs(go,{onClick:K,sx:S?{display:"flex",flexDirection:"row",alignItems:"center",columnGap:4,margin:0,padding:0}:{},isDisabled:k,...I,children:[r&&a.jsx(Bo,{sx:m?{mb:-1.5}:{},...E,children:r}),a.jsxs(bi,{w:"100%",gap:2,alignItems:"center",children:[a.jsxs(Q6,{"aria-label":r,value:o,min:s,max:i,step:c,onChange:ae,onMouseEnter:()=>n(!0),onMouseLeave:()=>n(!1),focusThumbOnChange:!1,isDisabled:k,...V,children:[h&&!_&&a.jsxs(a.Fragment,{children:[a.jsx(Kl,{value:s,sx:{insetInlineStart:"0 !important",insetInlineEnd:"unset !important"},...O,children:s}),a.jsx(Kl,{value:i,sx:{insetInlineStart:"unset !important",insetInlineEnd:"0 !important"},...O,children:i})]}),h&&_&&a.jsx(a.Fragment,{children:_.map((re,oe)=>oe===0?a.jsx(Kl,{value:re,sx:{insetInlineStart:"0 !important",insetInlineEnd:"unset !important"},...O,children:re},re):oe===_.length-1?a.jsx(Kl,{value:re,sx:{insetInlineStart:"unset !important",insetInlineEnd:"0 !important"},...O,children:re},re):a.jsx(Kl,{value:re,sx:{transform:"translateX(-50%)"},...O,children:re},re))}),a.jsx(Z6,{...R,children:a.jsx(eP,{})}),a.jsx(vn,{hasArrow:!0,placement:"top",isOpen:t,label:`${o}${p}`,hidden:y,...Q,children:a.jsx(J6,{...M,zIndex:0})})]}),m&&a.jsxs(jm,{min:$,max:Y,step:c,value:T,onChange:ie,onBlur:fe,focusInputOnChange:!1,...D,children:[a.jsx(Em,{onKeyDown:U,onKeyUp:se,minWidth:b,...A}),a.jsxs(Im,{...L,children:[a.jsx(Rm,{onClick:()=>d(Number(T))}),a.jsx(Om,{onClick:()=>d(Number(T))})]})]}),w&&a.jsx(ze,{size:"sm","aria-label":G("accessibility.reset"),tooltip:G("accessibility.reset"),icon:a.jsx(rZ,{}),isDisabled:k,onClick:X,...F})]})]})},jt=f.memo(oZ),QE=f.forwardRef(({label:e,tooltip:t,description:n,disabled:r,...o},s)=>a.jsx(vn,{label:t,placement:"top",hasArrow:!0,openDelay:500,children:a.jsx(Oe,{ref:s,...o,children:a.jsxs(Oe,{children:[a.jsx(Pc,{children:e}),n&&a.jsx(Pc,{size:"xs",color:"base.600",children:n})]})})}));QE.displayName="IAIMantineSelectItemWithTooltip";const Oi=f.memo(QE),sZ=be([at],({gallery:e,system:t})=>{const{autoAddBoardId:n,autoAssignBoardOnClick:r}=e,{isProcessing:o}=t;return{autoAddBoardId:n,autoAssignBoardOnClick:r,isProcessing:o}},Ke),aZ=()=>{const e=te(),{autoAddBoardId:t,autoAssignBoardOnClick:n,isProcessing:r}=B(sZ),o=f.useRef(null),{boards:s,hasBoards:i}=hm(void 0,{selectFromResult:({data:d})=>{const p=[{label:"None",value:"none"}];return d==null||d.forEach(({board_id:h,board_name:m})=>{p.push({label:m,value:h})}),{boards:p,hasBoards:p.length>1}}}),c=f.useCallback(d=>{d&&e(mm(d))},[e]);return a.jsx(ar,{label:"Auto-Add Board",inputRef:o,autoFocus:!0,placeholder:"Select a Board",value:t,data:s,nothingFound:"No matching Boards",itemComponent:Oi,disabled:!i||n||r,filter:(d,p)=>{var h;return((h=p.label)==null?void 0:h.toLowerCase().includes(d.toLowerCase().trim()))||p.value.toLowerCase().includes(d.toLowerCase().trim())},onChange:c})},iZ=e=>{const{label:t,...n}=e,{colorMode:r}=Ds();return a.jsx(n3,{colorScheme:"accent",...n,children:a.jsx(Je,{sx:{fontSize:"sm",color:Fe("base.800","base.200")(r)},children:t})})},Gn=f.memo(iZ),lZ=be([at],e=>{const{galleryImageMinimumWidth:t,shouldAutoSwitch:n,autoAssignBoardOnClick:r,shouldShowDeleteButton:o}=e.gallery;return{galleryImageMinimumWidth:t,shouldAutoSwitch:n,autoAssignBoardOnClick:r,shouldShowDeleteButton:o}},Ke),cZ=()=>{const e=te(),{t}=ye(),{galleryImageMinimumWidth:n,shouldAutoSwitch:r,autoAssignBoardOnClick:o,shouldShowDeleteButton:s}=B(lZ),i=f.useCallback(h=>{e(Hp(h))},[e]),c=f.useCallback(()=>{e(Hp(64))},[e]),d=f.useCallback(h=>{e(l7(h.target.checked))},[e]),p=f.useCallback(h=>{e(c7(h.target.checked))},[e]);return a.jsx(xl,{triggerComponent:a.jsx(ze,{tooltip:t("gallery.gallerySettings"),"aria-label":t("gallery.gallerySettings"),size:"sm",icon:a.jsx(Py,{})}),children:a.jsxs(H,{direction:"column",gap:2,children:[a.jsx(jt,{value:n,onChange:i,min:32,max:256,hideTooltip:!0,label:t("gallery.galleryImageSize"),withReset:!0,handleReset:c}),a.jsx(yr,{label:t("gallery.autoSwitchNewImages"),isChecked:r,onChange:d}),a.jsx(yr,{label:"Show Delete Button",isChecked:s,onChange:p}),a.jsx(Gn,{label:t("gallery.autoAssignBoardOnClick"),isChecked:o,onChange:h=>e(u7(h.target.checked))}),a.jsx(aZ,{})]})})},uZ=e=>e.image?a.jsx(Mm,{sx:{w:`${e.image.width}px`,h:"auto",objectFit:"contain",aspectRatio:`${e.image.width}/${e.image.height}`}}):a.jsx(H,{sx:{opacity:.7,w:"full",h:"full",alignItems:"center",justifyContent:"center",borderRadius:"base",bg:"base.200",_dark:{bg:"base.900"}},children:a.jsx(hl,{size:"xl"})}),tl=e=>{const{icon:t=Rc,boxSize:n=16}=e;return a.jsxs(H,{sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center",borderRadius:"base",flexDir:"column",gap:2,userSelect:"none",opacity:.7,color:"base.700",_dark:{color:"base.500"},...e.sx},children:[a.jsx(fo,{as:t,boxSize:n,opacity:.7}),e.label&&a.jsx(Je,{textAlign:"center",children:e.label})]})},tg=0,Ri=1,Xc=2,JE=4;function dZ(e,t){return n=>e(t(n))}function fZ(e,t){return t(e)}function ZE(e,t){return n=>e(t,n)}function uk(e,t){return()=>e(t)}function Gy(e,t){return t(e),e}function wl(...e){return e}function pZ(e){e()}function dk(e){return()=>e}function hZ(...e){return()=>{e.map(pZ)}}function ng(){}function ho(e,t){return e(Ri,t)}function Ar(e,t){e(tg,t)}function qy(e){e(Xc)}function rg(e){return e(JE)}function Un(e,t){return ho(e,ZE(t,tg))}function fk(e,t){const n=e(Ri,r=>{n(),t(r)});return n}function Sr(){const e=[];return(t,n)=>{switch(t){case Xc:e.splice(0,e.length);return;case Ri:return e.push(n),()=>{const r=e.indexOf(n);r>-1&&e.splice(r,1)};case tg:e.slice().forEach(r=>{r(n)});return;default:throw new Error(`unrecognized action ${t}`)}}}function Kt(e){let t=e;const n=Sr();return(r,o)=>{switch(r){case Ri:o(t);break;case tg:t=o;break;case JE:return t}return n(r,o)}}function mZ(e){let t,n;const r=()=>t&&t();return function(o,s){switch(o){case Ri:return s?n===s?void 0:(r(),n=s,t=ho(e,s),t):(r(),ng);case Xc:r(),n=null;return;default:throw new Error(`unrecognized action ${o}`)}}}function Yu(e){return Gy(Sr(),t=>Un(e,t))}function vc(e,t){return Gy(Kt(t),n=>Un(e,n))}function gZ(...e){return t=>e.reduceRight(fZ,t)}function Xt(e,...t){const n=gZ(...t);return(r,o)=>{switch(r){case Ri:return ho(e,n(o));case Xc:qy(e);return}}}function eO(e,t){return e===t}function ko(e=eO){let t;return n=>r=>{e(t,r)||(t=r,n(r))}}function Xr(e){return t=>n=>{e(n)&&t(n)}}function nr(e){return t=>dZ(t,e)}function pi(e){return t=>()=>t(e)}function kp(e,t){return n=>r=>n(t=e(t,r))}function T1(e){return t=>n=>{e>0?e--:t(n)}}function Lu(e){let t=null,n;return r=>o=>{t=o,!n&&(n=setTimeout(()=>{n=void 0,r(t)},e))}}function pk(e){let t,n;return r=>o=>{t=o,n&&clearTimeout(n),n=setTimeout(()=>{r(t)},e)}}function Xs(...e){const t=new Array(e.length);let n=0,r=null;const o=Math.pow(2,e.length)-1;return e.forEach((s,i)=>{const c=Math.pow(2,i);ho(s,d=>{const p=n;n=n|c,t[i]=d,p!==o&&n===o&&r&&(r(),r=null)})}),s=>i=>{const c=()=>s([i].concat(t));n===o?c():r=c}}function hk(...e){return function(t,n){switch(t){case Ri:return hZ(...e.map(r=>ho(r,n)));case Xc:return;default:throw new Error(`unrecognized action ${t}`)}}}function wn(e,t=eO){return Xt(e,ko(t))}function Ia(...e){const t=Sr(),n=new Array(e.length);let r=0;const o=Math.pow(2,e.length)-1;return e.forEach((s,i)=>{const c=Math.pow(2,i);ho(s,d=>{n[i]=d,r=r|c,r===o&&Ar(t,n)})}),function(s,i){switch(s){case Ri:return r===o&&i(n),ho(t,i);case Xc:return qy(t);default:throw new Error(`unrecognized action ${s}`)}}}function ma(e,t=[],{singleton:n}={singleton:!0}){return{id:vZ(),constructor:e,dependencies:t,singleton:n}}const vZ=()=>Symbol();function bZ(e){const t=new Map,n=({id:r,constructor:o,dependencies:s,singleton:i})=>{if(i&&t.has(r))return t.get(r);const c=o(s.map(d=>n(d)));return i&&t.set(r,c),c};return n(e)}function yZ(e,t){const n={},r={};let o=0;const s=e.length;for(;o(S[k]=_=>{const P=y[t.methods[k]];Ar(P,_)},S),{})}function h(y){return i.reduce((S,k)=>(S[k]=mZ(y[t.events[k]]),S),{})}return{Component:W.forwardRef((y,S)=>{const{children:k,..._}=y,[P]=W.useState(()=>Gy(bZ(e),E=>d(E,_))),[I]=W.useState(uk(h,P));return _p(()=>{for(const E of i)E in _&&ho(I[E],_[E]);return()=>{Object.values(I).map(qy)}},[_,I,P]),_p(()=>{d(P,_)}),W.useImperativeHandle(S,dk(p(P))),W.createElement(c.Provider,{value:P},n?W.createElement(n,yZ([...r,...o,...i],_),k):k)}),usePublisher:y=>W.useCallback(ZE(Ar,W.useContext(c)[y]),[y]),useEmitterValue:y=>{const k=W.useContext(c)[y],[_,P]=W.useState(uk(rg,k));return _p(()=>ho(k,I=>{I!==_&&P(dk(I))}),[k,_]),_},useEmitter:(y,S)=>{const _=W.useContext(c)[y];_p(()=>ho(_,S),[S,_])}}}const wZ=typeof document<"u"?W.useLayoutEffect:W.useEffect,SZ=wZ;var Ky=(e=>(e[e.DEBUG=0]="DEBUG",e[e.INFO=1]="INFO",e[e.WARN=2]="WARN",e[e.ERROR=3]="ERROR",e))(Ky||{});const CZ={0:"debug",1:"log",2:"warn",3:"error"},kZ=()=>typeof globalThis>"u"?window:globalThis,tO=ma(()=>{const e=Kt(3);return{log:Kt((n,r,o=1)=>{var s;const i=(s=kZ().VIRTUOSO_LOG_LEVEL)!=null?s:rg(e);o>=i&&console[CZ[o]]("%creact-virtuoso: %c%s %o","color: #0253b3; font-weight: bold","color: initial",n,r)}),logLevel:e}},[],{singleton:!0});function nO(e,t=!0){const n=W.useRef(null);let r=o=>{};if(typeof ResizeObserver<"u"){const o=W.useMemo(()=>new ResizeObserver(s=>{const i=s[0].target;i.offsetParent!==null&&e(i)}),[e]);r=s=>{s&&t?(o.observe(s),n.current=s):(n.current&&o.unobserve(n.current),n.current=null)}}return{ref:n,callbackRef:r}}function og(e,t=!0){return nO(e,t).callbackRef}function nm(e,t){return Math.round(e.getBoundingClientRect()[t])}function rO(e,t){return Math.abs(e-t)<1.01}function oO(e,t,n,r=ng,o){const s=W.useRef(null),i=W.useRef(null),c=W.useRef(null),d=W.useCallback(m=>{const v=m.target,b=v===window||v===document,w=b?window.pageYOffset||document.documentElement.scrollTop:v.scrollTop,y=b?document.documentElement.scrollHeight:v.scrollHeight,S=b?window.innerHeight:v.offsetHeight,k=()=>{e({scrollTop:Math.max(w,0),scrollHeight:y,viewportHeight:S})};m.suppressFlushSync?k():d7.flushSync(k),i.current!==null&&(w===i.current||w<=0||w===y-S)&&(i.current=null,t(!0),c.current&&(clearTimeout(c.current),c.current=null))},[e,t]);W.useEffect(()=>{const m=o||s.current;return r(o||s.current),d({target:m,suppressFlushSync:!0}),m.addEventListener("scroll",d,{passive:!0}),()=>{r(null),m.removeEventListener("scroll",d)}},[s,d,n,r,o]);function p(m){const v=s.current;if(!v||"offsetHeight"in v&&v.offsetHeight===0)return;const b=m.behavior==="smooth";let w,y,S;v===window?(y=Math.max(nm(document.documentElement,"height"),document.documentElement.scrollHeight),w=window.innerHeight,S=document.documentElement.scrollTop):(y=v.scrollHeight,w=nm(v,"height"),S=v.scrollTop);const k=y-w;if(m.top=Math.ceil(Math.max(Math.min(k,m.top),0)),rO(w,y)||m.top===S){e({scrollTop:S,scrollHeight:y,viewportHeight:w}),b&&t(!0);return}b?(i.current=m.top,c.current&&clearTimeout(c.current),c.current=setTimeout(()=>{c.current=null,i.current=null,t(!0)},1e3)):i.current=null,v.scrollTo(m)}function h(m){s.current.scrollBy(m)}return{scrollerRef:s,scrollByCallback:h,scrollToCallback:p}}const sg=ma(()=>{const e=Sr(),t=Sr(),n=Kt(0),r=Sr(),o=Kt(0),s=Sr(),i=Sr(),c=Kt(0),d=Kt(0),p=Kt(0),h=Kt(0),m=Sr(),v=Sr(),b=Kt(!1);return Un(Xt(e,nr(({scrollTop:w})=>w)),t),Un(Xt(e,nr(({scrollHeight:w})=>w)),i),Un(t,o),{scrollContainerState:e,scrollTop:t,viewportHeight:s,headerHeight:c,fixedHeaderHeight:d,fixedFooterHeight:p,footerHeight:h,scrollHeight:i,smoothScrollTargetReached:r,scrollTo:m,scrollBy:v,statefulScrollTop:o,deviation:n,scrollingInProgress:b}},[],{singleton:!0}),_Z=typeof document<"u"&&"scrollBehavior"in document.documentElement.style;function PZ(e){const t=typeof e=="number"?{index:e}:e;return t.align||(t.align="start"),(!t.behavior||!_Z)&&(t.behavior="auto"),t.offset||(t.offset=0),t}const rm="up",Qu="down",jZ="none",IZ={atBottom:!1,notAtBottomBecause:"NOT_SHOWING_LAST_ITEM",state:{offsetBottom:0,scrollTop:0,viewportHeight:0,scrollHeight:0}},EZ=0,sO=ma(([{scrollContainerState:e,scrollTop:t,viewportHeight:n,headerHeight:r,footerHeight:o,scrollBy:s}])=>{const i=Kt(!1),c=Kt(!0),d=Sr(),p=Sr(),h=Kt(4),m=Kt(EZ),v=vc(Xt(hk(Xt(wn(t),T1(1),pi(!0)),Xt(wn(t),T1(1),pi(!1),pk(100))),ko()),!1),b=vc(Xt(hk(Xt(s,pi(!0)),Xt(s,pi(!1),pk(200))),ko()),!1);Un(Xt(Ia(wn(t),wn(m)),nr(([_,P])=>_<=P),ko()),c),Un(Xt(c,Lu(50)),p);const w=Yu(Xt(Ia(e,wn(n),wn(r),wn(o),wn(h)),kp((_,[{scrollTop:P,scrollHeight:I},E,O,R,M])=>{const D=P+E-I>-M,A={viewportHeight:E,scrollTop:P,scrollHeight:I};if(D){let Q,F;return P>_.state.scrollTop?(Q="SCROLLED_DOWN",F=_.state.scrollTop-P):(Q="SIZE_DECREASED",F=_.state.scrollTop-P||_.scrollTopDelta),{atBottom:!0,state:A,atBottomBecause:Q,scrollTopDelta:F}}let L;return A.scrollHeight>_.state.scrollHeight?L="SIZE_INCREASED":E<_.state.viewportHeight?L="VIEWPORT_HEIGHT_DECREASING":P<_.state.scrollTop?L="SCROLLING_UPWARDS":L="NOT_FULLY_SCROLLED_TO_LAST_ITEM_BOTTOM",{atBottom:!1,notAtBottomBecause:L,state:A}},IZ),ko((_,P)=>_&&_.atBottom===P.atBottom))),y=vc(Xt(e,kp((_,{scrollTop:P,scrollHeight:I,viewportHeight:E})=>{if(rO(_.scrollHeight,I))return{scrollTop:P,scrollHeight:I,jump:0,changed:!1};{const O=I-(P+E)<1;return _.scrollTop!==P&&O?{scrollHeight:I,scrollTop:P,jump:_.scrollTop-P,changed:!0}:{scrollHeight:I,scrollTop:P,jump:0,changed:!0}}},{scrollHeight:0,jump:0,scrollTop:0,changed:!1}),Xr(_=>_.changed),nr(_=>_.jump)),0);Un(Xt(w,nr(_=>_.atBottom)),i),Un(Xt(i,Lu(50)),d);const S=Kt(Qu);Un(Xt(e,nr(({scrollTop:_})=>_),ko(),kp((_,P)=>rg(b)?{direction:_.direction,prevScrollTop:P}:{direction:P<_.prevScrollTop?rm:Qu,prevScrollTop:P},{direction:Qu,prevScrollTop:0}),nr(_=>_.direction)),S),Un(Xt(e,Lu(50),pi(jZ)),S);const k=Kt(0);return Un(Xt(v,Xr(_=>!_),pi(0)),k),Un(Xt(t,Lu(100),Xs(v),Xr(([_,P])=>!!P),kp(([_,P],[I])=>[P,I],[0,0]),nr(([_,P])=>P-_)),k),{isScrolling:v,isAtTop:c,isAtBottom:i,atBottomState:w,atTopStateChange:p,atBottomStateChange:d,scrollDirection:S,atBottomThreshold:h,atTopThreshold:m,scrollVelocity:k,lastJumpDueToItemResize:y}},wl(sg)),OZ=ma(([{log:e}])=>{const t=Kt(!1),n=Yu(Xt(t,Xr(r=>r),ko()));return ho(t,r=>{r&&rg(e)("props updated",{},Ky.DEBUG)}),{propsReady:t,didMount:n}},wl(tO),{singleton:!0});function aO(e,t){e==0?t():requestAnimationFrame(()=>aO(e-1,t))}function RZ(e,t){const n=t-1;return typeof e=="number"?e:e.index==="LAST"?n:e.index}function N1(e,t){return!!(e&&e[0]===t[0]&&e[1]===t[1])}function MZ(e,t){return!!(e&&e.startIndex===t.startIndex&&e.endIndex===t.endIndex)}const om="top",sm="bottom",mk="none";function gk(e,t,n){return typeof e=="number"?n===rm&&t===om||n===Qu&&t===sm?e:0:n===rm?t===om?e.main:e.reverse:t===sm?e.main:e.reverse}function vk(e,t){return typeof e=="number"?e:e[t]||0}const DZ=ma(([{scrollTop:e,viewportHeight:t,deviation:n,headerHeight:r,fixedHeaderHeight:o}])=>{const s=Sr(),i=Kt(0),c=Kt(0),d=Kt(0),p=vc(Xt(Ia(wn(e),wn(t),wn(r),wn(s,N1),wn(d),wn(i),wn(o),wn(n),wn(c)),nr(([h,m,v,[b,w],y,S,k,_,P])=>{const I=h-_,E=S+k,O=Math.max(v-I,0);let R=mk;const M=vk(P,om),D=vk(P,sm);return b-=_,b+=v+k,w+=v+k,w-=_,b>h+E-M&&(R=rm),wh!=null),ko(N1)),[0,0]);return{listBoundary:s,overscan:d,topListHeight:i,increaseViewportBy:c,visibleRange:p}},wl(sg),{singleton:!0}),AZ=ma(([{scrollVelocity:e}])=>{const t=Kt(!1),n=Sr(),r=Kt(!1);return Un(Xt(e,Xs(r,t,n),Xr(([o,s])=>!!s),nr(([o,s,i,c])=>{const{exit:d,enter:p}=s;if(i){if(d(o,c))return!1}else if(p(o,c))return!0;return i}),ko()),t),ho(Xt(Ia(t,e,n),Xs(r)),([[o,s,i],c])=>o&&c&&c.change&&c.change(s,i)),{isSeeking:t,scrollSeekConfiguration:r,scrollVelocity:e,scrollSeekRangeChanged:n}},wl(sO),{singleton:!0});function TZ(e){let t=!1,n;return()=>(t||(t=!0,n=e()),n)}const NZ=ma(([{scrollTo:e,scrollContainerState:t}])=>{const n=Sr(),r=Sr(),o=Sr(),s=Kt(!1),i=Kt(void 0);return Un(Xt(Ia(n,r),nr(([{viewportHeight:c,scrollTop:d,scrollHeight:p},{offsetTop:h}])=>({scrollTop:Math.max(0,d-h),scrollHeight:p,viewportHeight:c}))),t),Un(Xt(e,Xs(r),nr(([c,{offsetTop:d}])=>({...c,top:c.top+d}))),o),{useWindowScroll:s,customScrollParent:i,windowScrollContainerState:n,windowViewportRect:r,windowScrollTo:o}},wl(sg)),pv="-webkit-sticky",bk="sticky",iO=TZ(()=>{if(typeof document>"u")return bk;const e=document.createElement("div");return e.style.position=pv,e.style.position===pv?pv:bk});function $Z(e,t){const n=W.useRef(null),r=W.useCallback(c=>{if(c===null||!c.offsetParent)return;const d=c.getBoundingClientRect(),p=d.width;let h,m;if(t){const v=t.getBoundingClientRect(),b=d.top-v.top;h=v.height-Math.max(0,b),m=b+t.scrollTop}else h=window.innerHeight-Math.max(0,d.top),m=d.top+window.pageYOffset;n.current={offsetTop:m,visibleHeight:h,visibleWidth:p},e(n.current)},[e,t]),{callbackRef:o,ref:s}=nO(r),i=W.useCallback(()=>{r(s.current)},[r,s]);return W.useEffect(()=>{if(t){t.addEventListener("scroll",i);const c=new ResizeObserver(i);return c.observe(t),()=>{t.removeEventListener("scroll",i),c.unobserve(t)}}else return window.addEventListener("scroll",i),window.addEventListener("resize",i),()=>{window.removeEventListener("scroll",i),window.removeEventListener("resize",i)}},[i,t]),o}W.createContext(void 0);const lO=W.createContext(void 0);function LZ(e){return e}iO();const zZ={height:"100%",outline:"none",overflowY:"auto",position:"relative",WebkitOverflowScrolling:"touch"},cO={width:"100%",height:"100%",position:"absolute",top:0};iO();function nl(e,t){if(typeof e!="string")return{context:t}}function BZ({usePublisher:e,useEmitter:t,useEmitterValue:n}){return W.memo(function({style:s,children:i,...c}){const d=e("scrollContainerState"),p=n("ScrollerComponent"),h=e("smoothScrollTargetReached"),m=n("scrollerRef"),v=n("context"),{scrollerRef:b,scrollByCallback:w,scrollToCallback:y}=oO(d,h,p,m);return t("scrollTo",y),t("scrollBy",w),W.createElement(p,{ref:b,style:{...zZ,...s},"data-test-id":"virtuoso-scroller","data-virtuoso-scroller":!0,tabIndex:0,...c,...nl(p,v)},i)})}function FZ({usePublisher:e,useEmitter:t,useEmitterValue:n}){return W.memo(function({style:s,children:i,...c}){const d=e("windowScrollContainerState"),p=n("ScrollerComponent"),h=e("smoothScrollTargetReached"),m=n("totalListHeight"),v=n("deviation"),b=n("customScrollParent"),w=n("context"),{scrollerRef:y,scrollByCallback:S,scrollToCallback:k}=oO(d,h,p,ng,b);return SZ(()=>(y.current=b||window,()=>{y.current=null}),[y,b]),t("windowScrollTo",k),t("scrollBy",S),W.createElement(p,{style:{position:"relative",...s,...m!==0?{height:m+v}:{}},"data-virtuoso-scroller":!0,...c,...nl(p,w)},i)})}const yk={items:[],offsetBottom:0,offsetTop:0,top:0,bottom:0,itemHeight:0,itemWidth:0},HZ={items:[{index:0}],offsetBottom:0,offsetTop:0,top:0,bottom:0,itemHeight:0,itemWidth:0},{round:xk,ceil:wk,floor:am,min:hv,max:Ju}=Math;function WZ(e){return{...HZ,items:e}}function Sk(e,t,n){return Array.from({length:t-e+1}).map((r,o)=>{const s=n===null?null:n[o+e];return{index:o+e,data:s}})}function VZ(e,t){return e&&e.column===t.column&&e.row===t.row}function Pp(e,t){return e&&e.width===t.width&&e.height===t.height}const UZ=ma(([{overscan:e,visibleRange:t,listBoundary:n},{scrollTop:r,viewportHeight:o,scrollBy:s,scrollTo:i,smoothScrollTargetReached:c,scrollContainerState:d,footerHeight:p,headerHeight:h},m,v,{propsReady:b,didMount:w},{windowViewportRect:y,useWindowScroll:S,customScrollParent:k,windowScrollContainerState:_,windowScrollTo:P},I])=>{const E=Kt(0),O=Kt(0),R=Kt(yk),M=Kt({height:0,width:0}),D=Kt({height:0,width:0}),A=Sr(),L=Sr(),Q=Kt(0),F=Kt(null),V=Kt({row:0,column:0}),q=Sr(),G=Sr(),T=Kt(!1),z=Kt(0),$=Kt(!0),Y=Kt(!1);ho(Xt(w,Xs(z),Xr(([U,se])=>!!se)),()=>{Ar($,!1),Ar(O,0)}),ho(Xt(Ia(w,$,D,M,z,Y),Xr(([U,se,re,oe,,pe])=>U&&!se&&re.height!==0&&oe.height!==0&&!pe)),([,,,,U])=>{Ar(Y,!0),aO(1,()=>{Ar(A,U)}),fk(Xt(r),()=>{Ar(n,[0,0]),Ar($,!0)})}),Un(Xt(G,Xr(U=>U!=null&&U.scrollTop>0),pi(0)),O),ho(Xt(w,Xs(G),Xr(([,U])=>U!=null)),([,U])=>{U&&(Ar(M,U.viewport),Ar(D,U==null?void 0:U.item),Ar(V,U.gap),U.scrollTop>0&&(Ar(T,!0),fk(Xt(r,T1(1)),se=>{Ar(T,!1)}),Ar(i,{top:U.scrollTop})))}),Un(Xt(M,nr(({height:U})=>U)),o),Un(Xt(Ia(wn(M,Pp),wn(D,Pp),wn(V,(U,se)=>U&&U.column===se.column&&U.row===se.row),wn(r)),nr(([U,se,re,oe])=>({viewport:U,item:se,gap:re,scrollTop:oe}))),q),Un(Xt(Ia(wn(E),t,wn(V,VZ),wn(D,Pp),wn(M,Pp),wn(F),wn(O),wn(T),wn($),wn(z)),Xr(([,,,,,,,U])=>!U),nr(([U,[se,re],oe,pe,le,ge,ke,,xe,de])=>{const{row:Te,column:Ee}=oe,{height:$e,width:kt}=pe,{width:ct}=le;if(ke===0&&(U===0||ct===0))return yk;if(kt===0){const $t=RZ(de,U),Lt=$t===0?Math.max(ke-1,0):$t;return WZ(Sk($t,Lt,ge))}const on=uO(ct,kt,Ee);let vt,bt;xe?se===0&&re===0&&ke>0?(vt=0,bt=ke-1):(vt=on*am((se+Te)/($e+Te)),bt=on*wk((re+Te)/($e+Te))-1,bt=hv(U-1,Ju(bt,on-1)),vt=hv(bt,Ju(0,vt))):(vt=0,bt=-1);const Se=Sk(vt,bt,ge),{top:Me,bottom:_t}=Ck(le,oe,pe,Se),Tt=wk(U/on),ht=Tt*$e+(Tt-1)*Te-_t;return{items:Se,offsetTop:Me,offsetBottom:ht,top:Me,bottom:_t,itemHeight:$e,itemWidth:kt}})),R),Un(Xt(F,Xr(U=>U!==null),nr(U=>U.length)),E),Un(Xt(Ia(M,D,R,V),Xr(([U,se,{items:re}])=>re.length>0&&se.height!==0&&U.height!==0),nr(([U,se,{items:re},oe])=>{const{top:pe,bottom:le}=Ck(U,oe,se,re);return[pe,le]}),ko(N1)),n);const ae=Kt(!1);Un(Xt(r,Xs(ae),nr(([U,se])=>se||U!==0)),ae);const fe=Yu(Xt(wn(R),Xr(({items:U})=>U.length>0),Xs(E,ae),Xr(([{items:U},se,re])=>re&&U[U.length-1].index===se-1),nr(([,U])=>U-1),ko())),ie=Yu(Xt(wn(R),Xr(({items:U})=>U.length>0&&U[0].index===0),pi(0),ko())),X=Yu(Xt(wn(R),Xs(T),Xr(([{items:U},se])=>U.length>0&&!se),nr(([{items:U}])=>({startIndex:U[0].index,endIndex:U[U.length-1].index})),ko(MZ),Lu(0)));Un(X,v.scrollSeekRangeChanged),Un(Xt(A,Xs(M,D,E,V),nr(([U,se,re,oe,pe])=>{const le=PZ(U),{align:ge,behavior:ke,offset:xe}=le;let de=le.index;de==="LAST"&&(de=oe-1),de=Ju(0,de,hv(oe-1,de));let Te=$1(se,pe,re,de);return ge==="end"?Te=xk(Te-se.height+re.height):ge==="center"&&(Te=xk(Te-se.height/2+re.height/2)),xe&&(Te+=xe),{top:Te,behavior:ke}})),i);const K=vc(Xt(R,nr(U=>U.offsetBottom+U.bottom)),0);return Un(Xt(y,nr(U=>({width:U.visibleWidth,height:U.visibleHeight}))),M),{data:F,totalCount:E,viewportDimensions:M,itemDimensions:D,scrollTop:r,scrollHeight:L,overscan:e,scrollBy:s,scrollTo:i,scrollToIndex:A,smoothScrollTargetReached:c,windowViewportRect:y,windowScrollTo:P,useWindowScroll:S,customScrollParent:k,windowScrollContainerState:_,deviation:Q,scrollContainerState:d,footerHeight:p,headerHeight:h,initialItemCount:O,gap:V,restoreStateFrom:G,...v,initialTopMostItemIndex:z,gridState:R,totalListHeight:K,...m,startReached:ie,endReached:fe,rangeChanged:X,stateChanged:q,propsReady:b,stateRestoreInProgress:T,...I}},wl(DZ,sg,sO,AZ,OZ,NZ,tO));function Ck(e,t,n,r){const{height:o}=n;if(o===void 0||r.length===0)return{top:0,bottom:0};const s=$1(e,t,n,r[0].index),i=$1(e,t,n,r[r.length-1].index)+o;return{top:s,bottom:i}}function $1(e,t,n,r){const o=uO(e.width,n.width,t.column),s=am(r/o),i=s*n.height+Ju(0,s-1)*t.row;return i>0?i+t.row:i}function uO(e,t,n){return Ju(1,am((e+n)/(am(t)+n)))}const GZ=ma(()=>{const e=Kt(p=>`Item ${p}`),t=Kt({}),n=Kt(null),r=Kt("virtuoso-grid-item"),o=Kt("virtuoso-grid-list"),s=Kt(LZ),i=Kt("div"),c=Kt(ng),d=(p,h=null)=>vc(Xt(t,nr(m=>m[p]),ko()),h);return{context:n,itemContent:e,components:t,computeItemKey:s,itemClassName:r,listClassName:o,headerFooterTag:i,scrollerRef:c,FooterComponent:d("Footer"),HeaderComponent:d("Header"),ListComponent:d("List","div"),ItemComponent:d("Item","div"),ScrollerComponent:d("Scroller","div"),ScrollSeekPlaceholder:d("ScrollSeekPlaceholder","div")}}),qZ=ma(([e,t])=>({...e,...t}),wl(UZ,GZ)),KZ=W.memo(function(){const t=pr("gridState"),n=pr("listClassName"),r=pr("itemClassName"),o=pr("itemContent"),s=pr("computeItemKey"),i=pr("isSeeking"),c=js("scrollHeight"),d=pr("ItemComponent"),p=pr("ListComponent"),h=pr("ScrollSeekPlaceholder"),m=pr("context"),v=js("itemDimensions"),b=js("gap"),w=pr("log"),y=pr("stateRestoreInProgress"),S=og(k=>{const _=k.parentElement.parentElement.scrollHeight;c(_);const P=k.firstChild;if(P){const{width:I,height:E}=P.getBoundingClientRect();v({width:I,height:E})}b({row:kk("row-gap",getComputedStyle(k).rowGap,w),column:kk("column-gap",getComputedStyle(k).columnGap,w)})});return y?null:W.createElement(p,{ref:S,className:n,...nl(p,m),style:{paddingTop:t.offsetTop,paddingBottom:t.offsetBottom},"data-test-id":"virtuoso-item-list"},t.items.map(k=>{const _=s(k.index,k.data,m);return i?W.createElement(h,{key:_,...nl(h,m),index:k.index,height:t.itemHeight,width:t.itemWidth}):W.createElement(d,{...nl(d,m),className:r,"data-index":k.index,key:_},o(k.index,k.data,m))}))}),XZ=W.memo(function(){const t=pr("HeaderComponent"),n=js("headerHeight"),r=pr("headerFooterTag"),o=og(i=>n(nm(i,"height"))),s=pr("context");return t?W.createElement(r,{ref:o},W.createElement(t,nl(t,s))):null}),YZ=W.memo(function(){const t=pr("FooterComponent"),n=js("footerHeight"),r=pr("headerFooterTag"),o=og(i=>n(nm(i,"height"))),s=pr("context");return t?W.createElement(r,{ref:o},W.createElement(t,nl(t,s))):null}),QZ=({children:e})=>{const t=W.useContext(lO),n=js("itemDimensions"),r=js("viewportDimensions"),o=og(s=>{r(s.getBoundingClientRect())});return W.useEffect(()=>{t&&(r({height:t.viewportHeight,width:t.viewportWidth}),n({height:t.itemHeight,width:t.itemWidth}))},[t,r,n]),W.createElement("div",{style:cO,ref:o},e)},JZ=({children:e})=>{const t=W.useContext(lO),n=js("windowViewportRect"),r=js("itemDimensions"),o=pr("customScrollParent"),s=$Z(n,o);return W.useEffect(()=>{t&&(r({height:t.itemHeight,width:t.itemWidth}),n({offsetTop:0,visibleHeight:t.viewportHeight,visibleWidth:t.viewportWidth}))},[t,n,r]),W.createElement("div",{ref:s,style:cO},e)},ZZ=W.memo(function({...t}){const n=pr("useWindowScroll"),r=pr("customScrollParent"),o=r||n?nee:tee,s=r||n?JZ:QZ;return W.createElement(o,{...t},W.createElement(s,null,W.createElement(XZ,null),W.createElement(KZ,null),W.createElement(YZ,null)))}),{Component:eee,usePublisher:js,useEmitterValue:pr,useEmitter:dO}=xZ(qZ,{optional:{context:"context",totalCount:"totalCount",overscan:"overscan",itemContent:"itemContent",components:"components",computeItemKey:"computeItemKey",data:"data",initialItemCount:"initialItemCount",scrollSeekConfiguration:"scrollSeekConfiguration",headerFooterTag:"headerFooterTag",listClassName:"listClassName",itemClassName:"itemClassName",useWindowScroll:"useWindowScroll",customScrollParent:"customScrollParent",scrollerRef:"scrollerRef",logLevel:"logLevel",restoreStateFrom:"restoreStateFrom",initialTopMostItemIndex:"initialTopMostItemIndex"},methods:{scrollTo:"scrollTo",scrollBy:"scrollBy",scrollToIndex:"scrollToIndex"},events:{isScrolling:"isScrolling",endReached:"endReached",startReached:"startReached",rangeChanged:"rangeChanged",atBottomStateChange:"atBottomStateChange",atTopStateChange:"atTopStateChange",stateChanged:"stateChanged"}},ZZ),tee=BZ({usePublisher:js,useEmitterValue:pr,useEmitter:dO}),nee=FZ({usePublisher:js,useEmitterValue:pr,useEmitter:dO});function kk(e,t,n){return t!=="normal"&&!(t!=null&&t.endsWith("px"))&&n(`${e} was not resolved to pixel value correctly`,t,Ky.WARN),t==="normal"?0:parseInt(t??"0",10)}const ree=eee,oee=e=>{const t=B(s=>s.gallery.galleryView),{data:n}=H_(e),{data:r}=W_(e),o=f.useMemo(()=>t==="images"?n:r,[t,r,n]);return{totalImages:n,totalAssets:r,currentViewTotal:o}},see=({imageDTO:e})=>a.jsx(H,{sx:{pointerEvents:"none",flexDirection:"column",position:"absolute",top:0,insetInlineStart:0,p:2,alignItems:"flex-start",gap:2},children:a.jsxs(gl,{variant:"solid",colorScheme:"base",children:[e.width," × ",e.height]})}),ag=({postUploadAction:e,isDisabled:t})=>{const n=B(d=>d.gallery.autoAddBoardId),[r]=$_(),o=f.useCallback(d=>{const p=d[0];p&&r({file:p,image_category:"user",is_intermediate:!1,postUploadAction:e??{type:"TOAST"},board_id:n==="none"?void 0:n})},[n,e,r]),{getRootProps:s,getInputProps:i,open:c}=sy({accept:{"image/png":[".png"],"image/jpeg":[".jpg",".jpeg",".png"]},onDropAccepted:o,disabled:t,noDrag:!0,multiple:!1});return{getUploadButtonProps:s,getUploadInputProps:i,openUploader:c}},Xy=()=>{const e=te(),t=Uc(),{t:n}=ye(),r=f.useCallback(()=>{t({title:n("toast.parameterSet"),status:"info",duration:2500,isClosable:!0})},[n,t]),o=f.useCallback(()=>{t({title:n("toast.parameterNotSet"),status:"warning",duration:2500,isClosable:!0})},[n,t]),s=f.useCallback(()=>{t({title:n("toast.parametersSet"),status:"info",duration:2500,isClosable:!0})},[n,t]),i=f.useCallback(()=>{t({title:n("toast.parametersNotSet"),status:"warning",duration:2500,isClosable:!0})},[n,t]),c=f.useCallback((O,R,M,D)=>{if(Bf(O)||Ff(R)||vu(M)||y0(D)){Bf(O)&&e(Hu(O)),Ff(R)&&e(Wu(R)),vu(M)&&e(Vu(M)),vu(D)&&e(Uu(D)),r();return}o()},[e,r,o]),d=f.useCallback(O=>{if(!Bf(O)){o();return}e(Hu(O)),r()},[e,r,o]),p=f.useCallback(O=>{if(!Ff(O)){o();return}e(Wu(O)),r()},[e,r,o]),h=f.useCallback(O=>{if(!vu(O)){o();return}e(Vu(O)),r()},[e,r,o]),m=f.useCallback(O=>{if(!y0(O)){o();return}e(Uu(O)),r()},[e,r,o]),v=f.useCallback(O=>{if(!tw(O)){o();return}e(Wp(O)),r()},[e,r,o]),b=f.useCallback(O=>{if(!x0(O)){o();return}e(Vp(O)),r()},[e,r,o]),w=f.useCallback(O=>{if(!nw(O)){o();return}e(Ov(O)),r()},[e,r,o]),y=f.useCallback(O=>{if(!w0(O)){o();return}e(Rv(O)),r()},[e,r,o]),S=f.useCallback(O=>{if(!S0(O)){o();return}e(Up(O)),r()},[e,r,o]),k=f.useCallback(O=>{if(!rw(O)){o();return}e(bc(O)),r()},[e,r,o]),_=f.useCallback(O=>{if(!ow(O)){o();return}e(yc(O)),r()},[e,r,o]),P=f.useCallback(O=>{if(!sw(O)){o();return}e(Gp(O)),r()},[e,r,o]),I=f.useCallback(O=>{e(ob(O))},[e]),E=f.useCallback(O=>{if(!O){i();return}const{cfg_scale:R,height:M,model:D,positive_prompt:A,negative_prompt:L,scheduler:Q,seed:F,steps:V,width:q,strength:G,positive_style_prompt:T,negative_style_prompt:z,refiner_model:$,refiner_cfg_scale:Y,refiner_steps:ae,refiner_scheduler:fe,refiner_positive_aesthetic_store:ie,refiner_negative_aesthetic_store:X,refiner_start:K}=O;x0(R)&&e(Vp(R)),nw(D)&&e(Ov(D)),Bf(A)&&e(Hu(A)),Ff(L)&&e(Wu(L)),w0(Q)&&e(Rv(Q)),tw(F)&&e(Wp(F)),S0(V)&&e(Up(V)),rw(q)&&e(bc(q)),ow(M)&&e(yc(M)),sw(G)&&e(Gp(G)),vu(T)&&e(Vu(T)),y0(z)&&e(Uu(z)),f7($)&&e(q_($)),S0(ae)&&e(Mv(ae)),x0(Y)&&e(Dv(Y)),w0(fe)&&e(K_(fe)),p7(ie)&&e(Av(ie)),h7(X)&&e(Tv(X)),m7(K)&&e(Nv(K)),s()},[i,s,e]);return{recallBothPrompts:c,recallPositivePrompt:d,recallNegativePrompt:p,recallSDXLPositiveStylePrompt:h,recallSDXLNegativeStylePrompt:m,recallSeed:v,recallCfgScale:b,recallModel:w,recallScheduler:y,recallSteps:S,recallWidth:k,recallHeight:_,recallStrength:P,recallAllParameters:E,sendToImageToImage:I}},ir=e=>{const t=B(i=>i.config.disabledTabs),n=B(i=>i.config.disabledFeatures),r=B(i=>i.config.disabledSDFeatures),o=f.useMemo(()=>n.includes(e)||r.includes(e)||t.includes(e),[n,r,t,e]),s=f.useMemo(()=>!(n.includes(e)||r.includes(e)||t.includes(e)),[n,r,t,e]);return{isFeatureDisabled:o,isFeatureEnabled:s}},Yy=()=>{const e=Uc(),{t}=ye(),n=f.useMemo(()=>!!navigator.clipboard&&!!window.ClipboardItem,[]),r=f.useCallback(async o=>{n||e({title:t("toast.problemCopyingImage"),description:"Your browser doesn't support the Clipboard API.",status:"error",duration:2500,isClosable:!0});try{const i=await(await fetch(o)).blob();await navigator.clipboard.write([new ClipboardItem({[i.type]:i})]),e({title:t("toast.imageCopied"),status:"success",duration:2500,isClosable:!0})}catch(s){e({title:t("toast.problemCopyingImage"),description:String(s),status:"error",duration:2500,isClosable:!0})}},[n,t,e]);return{isClipboardAPIAvailable:n,copyImageToClipboard:r}};function aee(e,t,n){var r=this,o=f.useRef(null),s=f.useRef(0),i=f.useRef(null),c=f.useRef([]),d=f.useRef(),p=f.useRef(),h=f.useRef(e),m=f.useRef(!0);f.useEffect(function(){h.current=e},[e]);var v=!t&&t!==0&&typeof window<"u";if(typeof e!="function")throw new TypeError("Expected a function");t=+t||0;var b=!!(n=n||{}).leading,w=!("trailing"in n)||!!n.trailing,y="maxWait"in n,S=y?Math.max(+n.maxWait||0,t):null;f.useEffect(function(){return m.current=!0,function(){m.current=!1}},[]);var k=f.useMemo(function(){var _=function(M){var D=c.current,A=d.current;return c.current=d.current=null,s.current=M,p.current=h.current.apply(A,D)},P=function(M,D){v&&cancelAnimationFrame(i.current),i.current=v?requestAnimationFrame(M):setTimeout(M,D)},I=function(M){if(!m.current)return!1;var D=M-o.current;return!o.current||D>=t||D<0||y&&M-s.current>=S},E=function(M){return i.current=null,w&&c.current?_(M):(c.current=d.current=null,p.current)},O=function M(){var D=Date.now();if(I(D))return E(D);if(m.current){var A=t-(D-o.current),L=y?Math.min(A,S-(D-s.current)):A;P(M,L)}},R=function(){var M=Date.now(),D=I(M);if(c.current=[].slice.call(arguments),d.current=r,o.current=M,D){if(!i.current&&m.current)return s.current=o.current,P(O,t),b?_(o.current):p.current;if(y)return P(O,t),_(o.current)}return i.current||P(O,t),p.current};return R.cancel=function(){i.current&&(v?cancelAnimationFrame(i.current):clearTimeout(i.current)),s.current=0,c.current=o.current=d.current=i.current=null},R.isPending=function(){return!!i.current},R.flush=function(){return i.current?E(Date.now()):p.current},R},[b,y,t,S,w,v]);return k}function iee(e,t){return e===t}function _k(e){return typeof e=="function"?function(){return e}:e}function Qy(e,t,n){var r,o,s=n&&n.equalityFn||iee,i=(r=f.useState(_k(e)),o=r[1],[r[0],f.useCallback(function(m){return o(_k(m))},[])]),c=i[0],d=i[1],p=aee(f.useCallback(function(m){return d(m)},[d]),t,n),h=f.useRef(e);return s(h.current,e)||(p(e),h.current=e),[c,p]}sb("gallery/requestedBoardImagesDeletion");const lee=sb("gallery/sentImageToCanvas"),fO=sb("gallery/sentImageToImg2Img"),cee=e=>{const{imageDTO:t}=e,n=te(),{t:r}=ye(),o=Uc(),s=ir("unifiedCanvas").isFeatureEnabled,[i,c]=Qy(t.image_name,500),{currentData:d}=ab(c.isPending()?ro.skipToken:i??ro.skipToken),{isClipboardAPIAvailable:p,copyImageToClipboard:h}=Yy(),m=d==null?void 0:d.metadata,v=f.useCallback(()=>{t&&n(gm([t]))},[n,t]),{recallBothPrompts:b,recallSeed:w,recallAllParameters:y}=Xy(),S=f.useCallback(()=>{b(m==null?void 0:m.positive_prompt,m==null?void 0:m.negative_prompt,m==null?void 0:m.positive_style_prompt,m==null?void 0:m.negative_style_prompt)},[m==null?void 0:m.negative_prompt,m==null?void 0:m.positive_prompt,m==null?void 0:m.positive_style_prompt,m==null?void 0:m.negative_style_prompt,b]),k=f.useCallback(()=>{w(m==null?void 0:m.seed)},[m==null?void 0:m.seed,w]),_=f.useCallback(()=>{n(fO()),n(ob(t))},[n,t]),P=f.useCallback(()=>{n(lee()),n(g7(t)),n(vm()),n(Ql("unifiedCanvas")),o({title:r("toast.sentToUnifiedCanvas"),status:"success",duration:2500,isClosable:!0})},[n,t,r,o]),I=f.useCallback(()=>{console.log(m),y(m)},[m,y]),E=f.useCallback(()=>{n(X_([t])),n(tb(!0))},[n,t]),O=f.useCallback(()=>{h(t.image_url)},[h,t.image_url]);return a.jsxs(a.Fragment,{children:[a.jsx(jr,{as:"a",href:t.image_url,target:"_blank",icon:a.jsx(WY,{}),children:r("common.openInNewTab")}),p&&a.jsx(jr,{icon:a.jsx(Kc,{}),onClickCapture:O,children:r("parameters.copyImage")}),a.jsx(jr,{as:"a",download:!0,href:t.image_url,target:"_blank",icon:a.jsx(Cy,{}),w:"100%",children:r("parameters.downloadImage")}),a.jsx(jr,{icon:a.jsx(iE,{}),onClickCapture:S,isDisabled:(m==null?void 0:m.positive_prompt)===void 0&&(m==null?void 0:m.negative_prompt)===void 0,children:r("parameters.usePrompt")}),a.jsx(jr,{icon:a.jsx(lE,{}),onClickCapture:k,isDisabled:(m==null?void 0:m.seed)===void 0,children:r("parameters.useSeed")}),a.jsx(jr,{icon:a.jsx(YI,{}),onClickCapture:I,isDisabled:!m,children:r("parameters.useAll")}),a.jsx(jr,{icon:a.jsx(N4,{}),onClickCapture:_,id:"send-to-img2img",children:r("parameters.sendToImg2Img")}),s&&a.jsx(jr,{icon:a.jsx(N4,{}),onClickCapture:P,id:"send-to-canvas",children:r("parameters.sendToUnifiedCanvas")}),a.jsx(jr,{icon:a.jsx(nE,{}),onClickCapture:E,children:"Change Board"}),a.jsx(jr,{sx:{color:"error.600",_dark:{color:"error.300"}},icon:a.jsx(Oo,{}),onClickCapture:v,children:r("gallery.deleteImage")})]})},pO=f.memo(cee),uee=()=>{const e=te(),t=B(o=>o.gallery.selection),n=f.useCallback(()=>{e(X_(t)),e(tb(!0))},[e,t]),r=f.useCallback(()=>{e(gm(t))},[e,t]);return a.jsxs(a.Fragment,{children:[a.jsx(jr,{icon:a.jsx(nE,{}),onClickCapture:n,children:"Change Board"}),a.jsx(jr,{sx:{color:"error.600",_dark:{color:"error.300"}},icon:a.jsx(Oo,{}),onClickCapture:r,children:"Delete Selection"})]})},dee=be([at],({gallery:e})=>({selectionCount:e.selection.length}),Ke),fee=({imageDTO:e,children:t})=>{const{selectionCount:n}=B(dee),r=f.useCallback(o=>{o.preventDefault()},[]);return a.jsx(GE,{menuProps:{size:"sm",isLazy:!0},menuButtonProps:{bg:"transparent",_hover:{bg:"transparent"}},renderMenu:()=>e?n>1?a.jsx(il,{sx:{visibility:"visible !important"},motionProps:od,onContextMenu:r,children:a.jsx(uee,{})}):a.jsx(il,{sx:{visibility:"visible !important"},motionProps:od,onContextMenu:r,children:a.jsx(pO,{imageDTO:e})}):null,children:t})},pee=f.memo(fee),hee=e=>{const{data:t,disabled:n,onClick:r}=e,o=f.useRef(vi()),{attributes:s,listeners:i,setNodeRef:c}=v7({id:o.current,disabled:n,data:t});return a.jsx(Oe,{onClick:r,ref:c,position:"absolute",w:"full",h:"full",top:0,insetInlineStart:0,...s,...i})},mee=f.memo(hee),gee=e=>{const{imageDTO:t,onClickReset:n,onError:r,onClick:o,withResetIcon:s=!1,withMetadataOverlay:i=!1,isDropDisabled:c=!1,isDragDisabled:d=!1,isUploadDisabled:p=!1,minSize:h=24,postUploadAction:m,imageSx:v,fitContainer:b=!1,droppableData:w,draggableData:y,dropLabel:S,isSelected:k=!1,thumbnail:_=!1,resetTooltip:P="Reset",resetIcon:I=a.jsx(_y,{}),noContentFallback:E=a.jsx(tl,{icon:Rc}),useThumbailFallback:O,withHoverOverlay:R=!1}=e,{colorMode:M}=Ds(),[D,A]=f.useState(!1),L=f.useCallback(()=>{A(!0)},[]),Q=f.useCallback(()=>{A(!1)},[]),{getUploadButtonProps:F,getUploadInputProps:V}=ag({postUploadAction:m,isDisabled:p}),q=Ep("drop-shadow(0px 0px 0.1rem var(--invokeai-colors-base-600))","drop-shadow(0px 0px 0.1rem var(--invokeai-colors-base-800))"),G=p?{}:{cursor:"pointer",bg:Fe("base.200","base.800")(M),_hover:{bg:Fe("base.300","base.650")(M),color:Fe("base.500","base.300")(M)}};return a.jsx(pee,{imageDTO:t,children:T=>a.jsxs(H,{ref:T,onMouseOver:L,onMouseOut:Q,sx:{width:"full",height:"full",alignItems:"center",justifyContent:"center",position:"relative",minW:h||void 0,minH:h||void 0,userSelect:"none",cursor:d||!t?"default":"pointer"},children:[t&&a.jsxs(H,{sx:{w:"full",h:"full",position:b?"absolute":"relative",alignItems:"center",justifyContent:"center"},children:[a.jsx(zc,{src:_?t.thumbnail_url:t.image_url,fallbackStrategy:"beforeLoadOrError",fallbackSrc:O?t.thumbnail_url:void 0,fallback:O?void 0:a.jsx(uZ,{image:t}),width:t.width,height:t.height,onError:r,draggable:!1,sx:{objectFit:"contain",maxW:"full",maxH:"full",borderRadius:"base",...v}}),i&&a.jsx(see,{imageDTO:t}),a.jsx(Vy,{isSelected:k,isHovered:R?D:!1})]}),!t&&!p&&a.jsx(a.Fragment,{children:a.jsxs(H,{sx:{minH:h,w:"full",h:"full",alignItems:"center",justifyContent:"center",borderRadius:"base",transitionProperty:"common",transitionDuration:"0.1s",color:Fe("base.500","base.500")(M),...G},...F(),children:[a.jsx("input",{...V()}),a.jsx(fo,{as:Kd,sx:{boxSize:16}})]})}),!t&&p&&E,t&&!d&&a.jsx(mee,{data:y,disabled:d||!t,onClick:o}),!c&&a.jsx(Wy,{data:w,disabled:c,dropLabel:S}),n&&s&&t&&a.jsx(ze,{onClick:n,"aria-label":P,tooltip:P,icon:I,size:"sm",variant:"link",sx:{position:"absolute",top:1,insetInlineEnd:1,p:0,minW:0,svg:{transitionProperty:"common",transitionDuration:"normal",fill:"base.100",_hover:{fill:"base.50"},filter:q}}})]})})},fl=f.memo(gee),vee=()=>a.jsx(Mm,{sx:{position:"relative",height:"full",width:"full","::before":{content:"''",display:"block",pt:"100%"}},children:a.jsx(Oe,{sx:{position:"absolute",top:0,insetInlineStart:0,height:"full",width:"full"}})}),bee=be([at,ib],({gallery:e},t)=>{const n=e.selection;return{queryArgs:t,selection:n}},Ke),yee=e=>{const t=te(),{queryArgs:n,selection:r}=B(bee),{imageDTOs:o}=Y_(n,{selectFromResult:p=>({imageDTOs:p.data?b7.selectAll(p.data):[]})}),s=ir("multiselect").isFeatureEnabled,i=f.useCallback(p=>{var h;if(e){if(!s){t(bu([e]));return}if(p.shiftKey){const m=e.image_name,v=(h=r[r.length-1])==null?void 0:h.image_name,b=o.findIndex(y=>y.image_name===v),w=o.findIndex(y=>y.image_name===m);if(b>-1&&w>-1){const y=Math.min(b,w),S=Math.max(b,w),k=o.slice(y,S+1);t(bu(Rw(r.concat(k))))}}else p.ctrlKey||p.metaKey?r.some(m=>m.image_name===e.image_name)&&r.length>1?t(bu(r.filter(m=>m.image_name!==e.image_name))):t(bu(Rw(r.concat(e)))):t(bu([e]))}},[t,e,o,r,s]),c=f.useMemo(()=>e?r.some(p=>p.image_name===e.image_name):!1,[e,r]),d=f.useMemo(()=>r.length,[r.length]);return{selection:r,selectionCount:d,isSelected:c,handleClick:i}},xee=e=>{const t=te(),{imageName:n}=e,{currentData:r}=Is(n),o=B(m=>m.gallery.shouldShowDeleteButton),{handleClick:s,isSelected:i,selection:c,selectionCount:d}=yee(r),p=f.useCallback(m=>{m.stopPropagation(),r&&t(gm([r]))},[t,r]),h=f.useMemo(()=>{if(d>1)return{id:"gallery-image",payloadType:"IMAGE_DTOS",payload:{imageDTOs:c}};if(r)return{id:"gallery-image",payloadType:"IMAGE_DTO",payload:{imageDTO:r}}},[r,c,d]);return r?a.jsx(Oe,{sx:{w:"full",h:"full",touchAction:"none"},children:a.jsx(H,{userSelect:"none",sx:{position:"relative",justifyContent:"center",alignItems:"center",aspectRatio:"1/1"},children:a.jsx(fl,{onClick:s,imageDTO:r,draggableData:h,isSelected:i,minSize:0,onClickReset:p,imageSx:{w:"full",h:"full"},isDropDisabled:!0,isUploadDisabled:!0,thumbnail:!0,withHoverOverlay:!0,resetIcon:a.jsx(Oo,{}),resetTooltip:"Delete image",withResetIcon:o})})}):a.jsx(vee,{})},wee=f.memo(xee),See=Ae((e,t)=>a.jsx(Oe,{className:"item-container",ref:t,p:1.5,children:e.children})),Cee=Ae((e,t)=>{const n=B(r=>r.gallery.galleryImageMinimumWidth);return a.jsx(sl,{...e,className:"list-container",ref:t,sx:{gridTemplateColumns:`repeat(auto-fill, minmax(${n}px, 1fr));`},children:e.children})}),kee={defer:!0,options:{scrollbars:{visibility:"auto",autoHide:"leave",autoHideDelay:1300,theme:"os-theme-dark"},overflow:{x:"hidden"}}},_ee=()=>{const{t:e}=ye(),t=f.useRef(null),[n,r]=f.useState(null),[o,s]=LE(kee),i=B(S=>S.gallery.selectedBoardId),{currentViewTotal:c}=oee(i),d=B(ib),{currentData:p,isFetching:h,isSuccess:m,isError:v}=Y_(d),[b]=Q_(),w=f.useMemo(()=>!p||!c?!1:p.ids.length{w&&b({...d,offset:(p==null?void 0:p.ids.length)??0,limit:J_})},[w,b,d,p==null?void 0:p.ids.length]);return f.useEffect(()=>{const{current:S}=t;return n&&S&&o({target:S,elements:{viewport:n}}),()=>{var k;return(k=s())==null?void 0:k.destroy()}},[n,o,s]),p?m&&(p==null?void 0:p.ids.length)===0?a.jsx(H,{sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center"},children:a.jsx(tl,{label:e("gallery.noImagesInGallery"),icon:Rc})}):m&&p?a.jsxs(a.Fragment,{children:[a.jsx(Oe,{ref:t,"data-overlayscrollbars":"",h:"100%",children:a.jsx(ree,{style:{height:"100%"},data:p.ids,endReached:y,components:{Item:See,List:Cee},scrollerRef:r,itemContent:(S,k)=>a.jsx(wee,{imageName:k},k)})}),a.jsx(Yt,{onClick:y,isDisabled:!w,isLoading:h,loadingText:"Loading",flexShrink:0,children:`Load More (${p.ids.length} of ${c})`})]}):v?a.jsx(Oe,{sx:{w:"full",h:"full"},children:a.jsx(tl,{label:"Unable to load Gallery",icon:ZI})}):null:a.jsx(H,{sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center"},children:a.jsx(tl,{label:"Loading...",icon:Rc})})},Pee=f.memo(_ee),jee=be([at],e=>{const{galleryView:t}=e.gallery;return{galleryView:t}},Ke),Iee=()=>{const e=f.useRef(null),t=f.useRef(null),{galleryView:n}=B(jee),r=te(),{isOpen:o,onToggle:s}=ss(),i=f.useCallback(()=>{r(aw("images"))},[r]),c=f.useCallback(()=>{r(aw("assets"))},[r]);return a.jsxs(o6,{sx:{flexDirection:"column",h:"full",w:"full",borderRadius:"base"},children:[a.jsxs(Oe,{sx:{w:"full"},children:[a.jsxs(H,{ref:e,sx:{alignItems:"center",justifyContent:"space-between",gap:2},children:[a.jsx(ZJ,{isOpen:o,onToggle:s}),a.jsx(cZ,{}),a.jsx(tZ,{})]}),a.jsx(Oe,{children:a.jsx(YJ,{isOpen:o})})]}),a.jsxs(H,{ref:t,direction:"column",gap:2,h:"full",w:"full",children:[a.jsx(H,{sx:{alignItems:"center",justifyContent:"space-between",gap:2},children:a.jsx(Hd,{index:n==="images"?0:1,variant:"unstyled",size:"sm",sx:{w:"full"},children:a.jsx(Wd,{children:a.jsxs(rr,{isAttached:!0,sx:{w:"full"},children:[a.jsx(_c,{as:Yt,size:"sm",isChecked:n==="images",onClick:i,sx:{w:"full"},leftIcon:a.jsx(KY,{}),children:"Images"}),a.jsx(_c,{as:Yt,size:"sm",isChecked:n==="assets",onClick:c,sx:{w:"full"},leftIcon:a.jsx(sQ,{}),children:"Assets"})]})})})}),a.jsx(Pee,{})]})]})},hO=f.memo(Iee),Eee=be([Kn,Ua,y7,lr],(e,t,n,r)=>{const{shouldPinGallery:o,shouldShowGallery:s}=t,{galleryImageMinimumWidth:i}=n;return{activeTabName:e,isStaging:r,shouldPinGallery:o,shouldShowGallery:s,galleryImageMinimumWidth:i,isResizable:e!=="unifiedCanvas"}},{memoizeOptions:{resultEqualityCheck:Zt}}),Oee=()=>{const e=te(),{shouldPinGallery:t,shouldShowGallery:n,galleryImageMinimumWidth:r}=B(Eee),o=()=>{e($v(!1)),t&&e(_o())};tt("esc",()=>{e($v(!1))},{enabled:()=>!t,preventDefault:!0},[t]);const s=32;return tt("shift+up",()=>{if(r<256){const i=Es(r+s,32,256);e(Hp(i))}},[r]),tt("shift+down",()=>{if(r>32){const i=Es(r-s,32,256);e(Hp(i))}},[r]),t?null:a.jsx(GI,{direction:"right",isResizable:!0,isOpen:n,onClose:o,minWidth:400,children:a.jsx(hO,{})})},Ree=f.memo(Oee);function Mee(e){const{title:t,hotkey:n,description:r}=e;return a.jsxs(sl,{sx:{gridTemplateColumns:"auto max-content",justifyContent:"space-between",alignItems:"center"},children:[a.jsxs(sl,{children:[a.jsx(Je,{fontWeight:600,children:t}),r&&a.jsx(Je,{sx:{fontSize:"sm"},variant:"subtext",children:r})]}),a.jsx(Oe,{sx:{fontSize:"sm",fontWeight:600,px:2,py:1},children:n})]})}function Dee({children:e}){const{isOpen:t,onOpen:n,onClose:r}=ss(),{t:o}=ye(),s=[{title:o("hotkeys.invoke.title"),desc:o("hotkeys.invoke.desc"),hotkey:"Ctrl+Enter"},{title:o("hotkeys.cancel.title"),desc:o("hotkeys.cancel.desc"),hotkey:"Shift+X"},{title:o("hotkeys.focusPrompt.title"),desc:o("hotkeys.focusPrompt.desc"),hotkey:"Alt+A"},{title:o("hotkeys.toggleOptions.title"),desc:o("hotkeys.toggleOptions.desc"),hotkey:"O"},{title:o("hotkeys.pinOptions.title"),desc:o("hotkeys.pinOptions.desc"),hotkey:"Shift+O"},{title:o("hotkeys.toggleGallery.title"),desc:o("hotkeys.toggleGallery.desc"),hotkey:"G"},{title:o("hotkeys.maximizeWorkSpace.title"),desc:o("hotkeys.maximizeWorkSpace.desc"),hotkey:"F"},{title:o("hotkeys.changeTabs.title"),desc:o("hotkeys.changeTabs.desc"),hotkey:"1-5"}],i=[{title:o("hotkeys.setPrompt.title"),desc:o("hotkeys.setPrompt.desc"),hotkey:"P"},{title:o("hotkeys.setSeed.title"),desc:o("hotkeys.setSeed.desc"),hotkey:"S"},{title:o("hotkeys.setParameters.title"),desc:o("hotkeys.setParameters.desc"),hotkey:"A"},{title:o("hotkeys.upscale.title"),desc:o("hotkeys.upscale.desc"),hotkey:"Shift+U"},{title:o("hotkeys.showInfo.title"),desc:o("hotkeys.showInfo.desc"),hotkey:"I"},{title:o("hotkeys.sendToImageToImage.title"),desc:o("hotkeys.sendToImageToImage.desc"),hotkey:"Shift+I"},{title:o("hotkeys.deleteImage.title"),desc:o("hotkeys.deleteImage.desc"),hotkey:"Del"},{title:o("hotkeys.closePanels.title"),desc:o("hotkeys.closePanels.desc"),hotkey:"Esc"}],c=[{title:o("hotkeys.previousImage.title"),desc:o("hotkeys.previousImage.desc"),hotkey:"Arrow Left"},{title:o("hotkeys.nextImage.title"),desc:o("hotkeys.nextImage.desc"),hotkey:"Arrow Right"},{title:o("hotkeys.toggleGalleryPin.title"),desc:o("hotkeys.toggleGalleryPin.desc"),hotkey:"Shift+G"},{title:o("hotkeys.increaseGalleryThumbSize.title"),desc:o("hotkeys.increaseGalleryThumbSize.desc"),hotkey:"Shift+Up"},{title:o("hotkeys.decreaseGalleryThumbSize.title"),desc:o("hotkeys.decreaseGalleryThumbSize.desc"),hotkey:"Shift+Down"}],d=[{title:o("hotkeys.selectBrush.title"),desc:o("hotkeys.selectBrush.desc"),hotkey:"B"},{title:o("hotkeys.selectEraser.title"),desc:o("hotkeys.selectEraser.desc"),hotkey:"E"},{title:o("hotkeys.decreaseBrushSize.title"),desc:o("hotkeys.decreaseBrushSize.desc"),hotkey:"["},{title:o("hotkeys.increaseBrushSize.title"),desc:o("hotkeys.increaseBrushSize.desc"),hotkey:"]"},{title:o("hotkeys.decreaseBrushOpacity.title"),desc:o("hotkeys.decreaseBrushOpacity.desc"),hotkey:"Shift + ["},{title:o("hotkeys.increaseBrushOpacity.title"),desc:o("hotkeys.increaseBrushOpacity.desc"),hotkey:"Shift + ]"},{title:o("hotkeys.moveTool.title"),desc:o("hotkeys.moveTool.desc"),hotkey:"V"},{title:o("hotkeys.fillBoundingBox.title"),desc:o("hotkeys.fillBoundingBox.desc"),hotkey:"Shift + F"},{title:o("hotkeys.eraseBoundingBox.title"),desc:o("hotkeys.eraseBoundingBox.desc"),hotkey:"Delete / Backspace"},{title:o("hotkeys.colorPicker.title"),desc:o("hotkeys.colorPicker.desc"),hotkey:"C"},{title:o("hotkeys.toggleSnap.title"),desc:o("hotkeys.toggleSnap.desc"),hotkey:"N"},{title:o("hotkeys.quickToggleMove.title"),desc:o("hotkeys.quickToggleMove.desc"),hotkey:"Hold Space"},{title:o("hotkeys.toggleLayer.title"),desc:o("hotkeys.toggleLayer.desc"),hotkey:"Q"},{title:o("hotkeys.clearMask.title"),desc:o("hotkeys.clearMask.desc"),hotkey:"Shift+C"},{title:o("hotkeys.hideMask.title"),desc:o("hotkeys.hideMask.desc"),hotkey:"H"},{title:o("hotkeys.showHideBoundingBox.title"),desc:o("hotkeys.showHideBoundingBox.desc"),hotkey:"Shift+H"},{title:o("hotkeys.mergeVisible.title"),desc:o("hotkeys.mergeVisible.desc"),hotkey:"Shift+M"},{title:o("hotkeys.saveToGallery.title"),desc:o("hotkeys.saveToGallery.desc"),hotkey:"Shift+S"},{title:o("hotkeys.copyToClipboard.title"),desc:o("hotkeys.copyToClipboard.desc"),hotkey:"Ctrl+C"},{title:o("hotkeys.downloadImage.title"),desc:o("hotkeys.downloadImage.desc"),hotkey:"Shift+D"},{title:o("hotkeys.undoStroke.title"),desc:o("hotkeys.undoStroke.desc"),hotkey:"Ctrl+Z"},{title:o("hotkeys.redoStroke.title"),desc:o("hotkeys.redoStroke.desc"),hotkey:"Ctrl+Shift+Z, Ctrl+Y"},{title:o("hotkeys.resetView.title"),desc:o("hotkeys.resetView.desc"),hotkey:"R"},{title:o("hotkeys.previousStagingImage.title"),desc:o("hotkeys.previousStagingImage.desc"),hotkey:"Arrow Left"},{title:o("hotkeys.nextStagingImage.title"),desc:o("hotkeys.nextStagingImage.desc"),hotkey:"Arrow Right"},{title:o("hotkeys.acceptStagingImage.title"),desc:o("hotkeys.acceptStagingImage.desc"),hotkey:"Enter"}],p=h=>a.jsx(H,{flexDir:"column",gap:4,children:h.map((m,v)=>a.jsxs(H,{flexDir:"column",px:2,gap:4,children:[a.jsx(Mee,{title:m.title,description:m.desc,hotkey:m.hotkey}),v{const{data:t}=x7(),n=f.useRef(null),r=mO(n);return a.jsxs(H,{alignItems:"center",gap:3,ps:1,ref:n,children:[a.jsx(zc,{src:U_,alt:"invoke-ai-logo",sx:{w:"32px",h:"32px",minW:"32px",minH:"32px",userSelect:"none"}}),a.jsxs(H,{sx:{gap:3,alignItems:"center"},children:[a.jsxs(Je,{sx:{fontSize:"xl",userSelect:"none"},children:["invoke ",a.jsx("strong",{children:"ai"})]}),a.jsx(mo,{children:e&&r&&t&&a.jsx(Er.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.15}},exit:{opacity:0,transition:{delay:.8}},children:a.jsx(Je,{sx:{fontWeight:600,marginTop:1,color:"base.300",fontSize:14},variant:"subtext",children:t.version})},"statusText")})]})]})},Bee=e=>{const{tooltip:t,inputRef:n,label:r,disabled:o,required:s,...i}=e,c=VI();return a.jsx(vn,{label:t,placement:"top",hasArrow:!0,children:a.jsx(xy,{label:r?a.jsx(go,{isRequired:s,isDisabled:o,children:a.jsx(Bo,{children:r})}):void 0,disabled:o,ref:n,styles:c,...i})})},Fr=f.memo(Bee);function Yo(e){const{t}=ye(),{label:n,textProps:r,useBadge:o=!1,badgeLabel:s=t("settings.experimental"),badgeProps:i,...c}=e;return a.jsxs(H,{justifyContent:"space-between",py:1,children:[a.jsxs(H,{gap:2,alignItems:"center",children:[a.jsx(Je,{sx:{fontSize:14,_dark:{color:"base.300"}},...r,children:n}),o&&a.jsx(gl,{size:"xs",sx:{px:2,color:"base.700",bg:"accent.200",_dark:{bg:"accent.500",color:"base.200"}},...i,children:s})]}),a.jsx(yr,{...c})]})}const Yl=e=>a.jsx(H,{sx:{flexDirection:"column",gap:2,p:4,borderRadius:"base",bg:"base.100",_dark:{bg:"base.900"}},children:e.children});function Fee(){const e=te(),{data:t,refetch:n}=w7(),[r,{isLoading:o}]=S7(),s=f.useCallback(()=>{r().unwrap().then(c=>{e(C7()),e(lb()),e(On({title:`Cleared ${c} intermediates`,status:"info"}))})},[r,e]);f.useEffect(()=>{n()},[n]);const i=t?`Clear ${t} Intermediate${t>1?"s":""}`:"No Intermediates to Clear";return a.jsxs(Yl,{children:[a.jsx(Ys,{size:"sm",children:"Clear Intermediates"}),a.jsx(Yt,{colorScheme:"warning",onClick:s,isLoading:o,isDisabled:!t,children:i}),a.jsx(Je,{fontWeight:"bold",children:"Clearing intermediates will reset your Canvas and ControlNet state."}),a.jsx(Je,{variant:"subtext",children:"Intermediate images are byproducts of generation, different from the result images in the gallery. Clearing intermediates will free disk space."}),a.jsx(Je,{variant:"subtext",children:"Your gallery images will not be deleted."})]})}const Hee=()=>{const{base50:e,base100:t,base200:n,base300:r,base400:o,base500:s,base600:i,base700:c,base800:d,base900:p,accent200:h,accent300:m,accent400:v,accent500:b,accent600:w}=wy(),{colorMode:y}=Ds(),[S]=Lc("shadows",["dark-lg"]);return f.useCallback(()=>({label:{color:Fe(c,r)(y)},separatorLabel:{color:Fe(s,s)(y),"::after":{borderTopColor:Fe(r,c)(y)}},searchInput:{":placeholder":{color:Fe(r,c)(y)}},input:{backgroundColor:Fe(e,p)(y),borderWidth:"2px",borderColor:Fe(n,d)(y),color:Fe(p,t)(y),paddingRight:24,fontWeight:600,"&:hover":{borderColor:Fe(r,i)(y)},"&:focus":{borderColor:Fe(m,w)(y)},"&:is(:focus, :hover)":{borderColor:Fe(o,s)(y)},"&:focus-within":{borderColor:Fe(h,w)(y)},"&[data-disabled]":{backgroundColor:Fe(r,c)(y),color:Fe(i,o)(y),cursor:"not-allowed"}},value:{backgroundColor:Fe(n,d)(y),color:Fe(p,t)(y),button:{color:Fe(p,t)(y)},"&:hover":{backgroundColor:Fe(r,c)(y),cursor:"pointer"}},dropdown:{backgroundColor:Fe(n,d)(y),borderColor:Fe(n,d)(y),boxShadow:S},item:{backgroundColor:Fe(n,d)(y),color:Fe(d,n)(y),padding:6,"&[data-hovered]":{color:Fe(p,t)(y),backgroundColor:Fe(r,c)(y)},"&[data-active]":{backgroundColor:Fe(r,c)(y),"&:hover":{color:Fe(p,t)(y),backgroundColor:Fe(r,c)(y)}},"&[data-selected]":{backgroundColor:Fe(v,w)(y),color:Fe(e,t)(y),fontWeight:600,"&:hover":{backgroundColor:Fe(b,b)(y),color:Fe("white",e)(y)}},"&[data-disabled]":{color:Fe(s,i)(y),cursor:"not-allowed"}},rightSection:{width:24,padding:20,button:{color:Fe(p,t)(y)}}}),[h,m,v,b,w,t,n,r,o,e,s,i,c,d,p,S,y])},Wee=e=>{const{searchable:t=!0,tooltip:n,inputRef:r,label:o,disabled:s,...i}=e,c=te(),d=f.useCallback(m=>{m.shiftKey&&c(Io(!0))},[c]),p=f.useCallback(m=>{m.shiftKey||c(Io(!1))},[c]),h=Hee();return a.jsx(vn,{label:n,placement:"top",hasArrow:!0,isOpen:!0,children:a.jsx(LI,{label:o?a.jsx(go,{isDisabled:s,children:a.jsx(Bo,{children:o})}):void 0,ref:r,disabled:s,onKeyDown:d,onKeyUp:p,searchable:t,maxDropdownHeight:300,styles:h,...i})})},Vee=f.memo(Wee),Uee=cs(cb,(e,t)=>({value:t,label:e})).sort((e,t)=>e.label.localeCompare(t.label));function Gee(){const e=te(),{t}=ye(),n=B(o=>o.ui.favoriteSchedulers),r=f.useCallback(o=>{e(k7(o))},[e]);return a.jsx(Vee,{label:t("settings.favoriteSchedulers"),value:n,data:Uee,onChange:r,clearable:!0,searchable:!0,maxSelectedValues:99,placeholder:t("settings.favoriteSchedulersPlaceholder")})}const qee={ar:Bn.t("common.langArabic",{lng:"ar"}),nl:Bn.t("common.langDutch",{lng:"nl"}),en:Bn.t("common.langEnglish",{lng:"en"}),fr:Bn.t("common.langFrench",{lng:"fr"}),de:Bn.t("common.langGerman",{lng:"de"}),he:Bn.t("common.langHebrew",{lng:"he"}),it:Bn.t("common.langItalian",{lng:"it"}),ja:Bn.t("common.langJapanese",{lng:"ja"}),ko:Bn.t("common.langKorean",{lng:"ko"}),pl:Bn.t("common.langPolish",{lng:"pl"}),pt_BR:Bn.t("common.langBrPortuguese",{lng:"pt_BR"}),pt:Bn.t("common.langPortuguese",{lng:"pt"}),ru:Bn.t("common.langRussian",{lng:"ru"}),zh_CN:Bn.t("common.langSimplifiedChinese",{lng:"zh_CN"}),es:Bn.t("common.langSpanish",{lng:"es"}),uk:Bn.t("common.langUkranian",{lng:"ua"})},Kee=be([at],({system:e,ui:t,generation:n})=>{const{shouldConfirmOnDelete:r,enableImageDebugging:o,consoleLogLevel:s,shouldLogToConsole:i,shouldAntialiasProgressImage:c,isNodesEnabled:d,shouldUseNSFWChecker:p,shouldUseWatermarker:h}=e,{shouldUseCanvasBetaLayout:m,shouldUseSliders:v,shouldShowProgressInViewer:b}=t,{shouldShowAdvancedOptions:w}=n;return{shouldConfirmOnDelete:r,enableImageDebugging:o,shouldUseCanvasBetaLayout:m,shouldUseSliders:v,shouldShowProgressInViewer:b,consoleLogLevel:s,shouldLogToConsole:i,shouldAntialiasProgressImage:c,shouldShowAdvancedOptions:w,isNodesEnabled:d,shouldUseNSFWChecker:p,shouldUseWatermarker:h}},{memoizeOptions:{resultEqualityCheck:Zt}}),Xee=({children:e,config:t})=>{const n=te(),{t:r}=ye(),o=(t==null?void 0:t.shouldShowBetaLayout)??!0,s=(t==null?void 0:t.shouldShowDeveloperSettings)??!0,i=(t==null?void 0:t.shouldShowResetWebUiText)??!0,c=(t==null?void 0:t.shouldShowAdvancedOptionsSettings)??!0,d=(t==null?void 0:t.shouldShowClearIntermediates)??!0,p=(t==null?void 0:t.shouldShowNodesToggle)??!0,h=(t==null?void 0:t.shouldShowLocalizationToggle)??!0;f.useEffect(()=>{s||n(iw(!1))},[s,n]);const{isNSFWCheckerAvailable:m,isWatermarkerAvailable:v}=Z_(void 0,{selectFromResult:({data:X})=>({isNSFWCheckerAvailable:(X==null?void 0:X.nsfw_methods.includes("nsfw_checker"))??!1,isWatermarkerAvailable:(X==null?void 0:X.watermarking_methods.includes("invisible_watermark"))??!1})}),{isOpen:b,onOpen:w,onClose:y}=ss(),{isOpen:S,onOpen:k,onClose:_}=ss(),{shouldConfirmOnDelete:P,enableImageDebugging:I,shouldUseCanvasBetaLayout:E,shouldUseSliders:O,shouldShowProgressInViewer:R,consoleLogLevel:M,shouldLogToConsole:D,shouldAntialiasProgressImage:A,shouldShowAdvancedOptions:L,isNodesEnabled:Q,shouldUseNSFWChecker:F,shouldUseWatermarker:V}=B(Kee),q=f.useCallback(()=>{Object.keys(window.localStorage).forEach(X=>{(_7.includes(X)||X.startsWith(P7))&&localStorage.removeItem(X)}),y(),k()},[y,k]),G=f.useCallback(X=>{n(j7(X))},[n]),T=f.useCallback(X=>{n(I7(X))},[n]),z=f.useCallback(X=>{n(iw(X.target.checked))},[n]),$=f.useCallback(X=>{n(E7(X.target.checked))},[n]),{colorMode:Y,toggleColorMode:ae}=Ds(),fe=ir("localization").isFeatureEnabled,ie=B(rP);return a.jsxs(a.Fragment,{children:[f.cloneElement(e,{onClick:w}),a.jsxs(dd,{isOpen:b,onClose:y,size:"2xl",isCentered:!0,children:[a.jsx(za,{}),a.jsxs(fd,{children:[a.jsx(La,{bg:"none",children:r("common.settingsLabel")}),a.jsx(Yb,{}),a.jsx(Ba,{children:a.jsxs(H,{sx:{gap:4,flexDirection:"column"},children:[a.jsxs(Yl,{children:[a.jsx(Ys,{size:"sm",children:r("settings.general")}),a.jsx(Yo,{label:r("settings.confirmOnDelete"),isChecked:P,onChange:X=>n(z_(X.target.checked))}),c&&a.jsx(Yo,{label:r("settings.showAdvancedOptions"),isChecked:L,onChange:X=>n(O7(X.target.checked))})]}),a.jsxs(Yl,{children:[a.jsx(Ys,{size:"sm",children:r("settings.generation")}),a.jsx(Gee,{}),a.jsx(Yo,{label:"Enable NSFW Checker",isDisabled:!m,isChecked:F,onChange:X=>n(R7(X.target.checked))}),a.jsx(Yo,{label:"Enable Invisible Watermark",isDisabled:!v,isChecked:V,onChange:X=>n(M7(X.target.checked))})]}),a.jsxs(Yl,{children:[a.jsx(Ys,{size:"sm",children:r("settings.ui")}),a.jsx(Yo,{label:r("common.darkMode"),isChecked:Y==="dark",onChange:ae}),a.jsx(Yo,{label:r("settings.useSlidersForAll"),isChecked:O,onChange:X=>n(D7(X.target.checked))}),a.jsx(Yo,{label:r("settings.showProgressInViewer"),isChecked:R,onChange:X=>n(e5(X.target.checked))}),a.jsx(Yo,{label:r("settings.antialiasProgressImages"),isChecked:A,onChange:X=>n(A7(X.target.checked))}),o&&a.jsx(Yo,{label:r("settings.alternateCanvasLayout"),useBadge:!0,badgeLabel:r("settings.beta"),isChecked:E,onChange:X=>n(T7(X.target.checked))}),p&&a.jsx(Yo,{label:r("settings.enableNodesEditor"),useBadge:!0,isChecked:Q,onChange:$}),h&&a.jsx(Fr,{disabled:!fe,label:r("common.languagePickerLabel"),value:ie,data:Object.entries(qee).map(([X,K])=>({value:X,label:K})),onChange:T})]}),s&&a.jsxs(Yl,{children:[a.jsx(Ys,{size:"sm",children:r("settings.developer")}),a.jsx(Yo,{label:r("settings.shouldLogToConsole"),isChecked:D,onChange:z}),a.jsx(Fr,{disabled:!D,label:r("settings.consoleLogLevel"),onChange:G,value:M,data:N7.concat()}),a.jsx(Yo,{label:r("settings.enableImageDebugging"),isChecked:I,onChange:X=>n($7(X.target.checked))})]}),d&&a.jsx(Fee,{}),a.jsxs(Yl,{children:[a.jsx(Ys,{size:"sm",children:r("settings.resetWebUI")}),a.jsx(Yt,{colorScheme:"error",onClick:q,children:r("settings.resetWebUI")}),i&&a.jsxs(a.Fragment,{children:[a.jsx(Je,{variant:"subtext",children:r("settings.resetWebUIDesc1")}),a.jsx(Je,{variant:"subtext",children:r("settings.resetWebUIDesc2")})]})]})]})}),a.jsx($a,{children:a.jsx(Yt,{onClick:y,children:r("common.close")})})]})]}),a.jsxs(dd,{closeOnOverlayClick:!1,isOpen:S,onClose:_,isCentered:!0,children:[a.jsx(za,{backdropFilter:"blur(40px)"}),a.jsxs(fd,{children:[a.jsx(La,{}),a.jsx(Ba,{children:a.jsx(H,{justifyContent:"center",children:a.jsx(Je,{fontSize:"lg",children:a.jsx(Je,{children:r("settings.resetComplete")})})})}),a.jsx($a,{})]})]})]})},Yee=be(vo,e=>{const{isConnected:t,isProcessing:n,statusTranslationKey:r,currentIteration:o,totalIterations:s,currentStatusHasSteps:i}=e;return{isConnected:t,isProcessing:n,currentIteration:o,totalIterations:s,statusTranslationKey:r,currentStatusHasSteps:i}},Ke),Ik={ok:"green.400",working:"yellow.400",error:"red.400"},Ek={ok:"green.600",working:"yellow.500",error:"red.500"},Qee=()=>{const{isConnected:e,isProcessing:t,currentIteration:n,totalIterations:r,statusTranslationKey:o}=B(Yee),{t:s}=ye(),i=f.useRef(null),c=f.useMemo(()=>t?"working":e?"ok":"error",[t,e]),d=f.useMemo(()=>{if(n&&r)return` (${n}/${r})`},[n,r]),p=mO(i);return a.jsxs(H,{ref:i,h:"full",px:2,alignItems:"center",gap:5,children:[a.jsx(mo,{children:p&&a.jsx(Er.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.15}},exit:{opacity:0,transition:{delay:.8}},children:a.jsxs(Je,{sx:{fontSize:"sm",fontWeight:"600",pb:"1px",userSelect:"none",color:Ek[c],_dark:{color:Ik[c]}},children:[s(o),d]})},"statusText")}),a.jsx(fo,{as:LY,sx:{boxSize:"0.5rem",color:Ek[c],_dark:{color:Ik[c]}}})]})},Jee=()=>{const{t:e}=ye(),t=ir("bugLink").isFeatureEnabled,n=ir("discordLink").isFeatureEnabled,r=ir("githubLink").isFeatureEnabled,o="http://github.com/invoke-ai/InvokeAI",s="https://discord.gg/ZmtBAhwWhy";return a.jsxs(H,{sx:{gap:2,alignItems:"center"},children:[a.jsx(gO,{}),a.jsx(ml,{}),a.jsx(Qee,{}),a.jsxs($d,{children:[a.jsx(Ld,{as:ze,variant:"link","aria-label":e("accessibility.menu"),icon:a.jsx(TY,{}),sx:{boxSize:8}}),a.jsxs(il,{motionProps:od,children:[a.jsxs(ud,{title:e("common.communityLabel"),children:[r&&a.jsx(jr,{as:"a",href:o,target:"_blank",icon:a.jsx(IY,{}),children:e("common.githubLabel")}),t&&a.jsx(jr,{as:"a",href:`${o}/issues`,target:"_blank",icon:a.jsx(NY,{}),children:e("common.reportBugLabel")}),n&&a.jsx(jr,{as:"a",href:s,target:"_blank",icon:a.jsx(jY,{}),children:e("common.discordLabel")})]}),a.jsxs(ud,{title:e("common.settingsLabel"),children:[a.jsx(Dee,{children:a.jsx(jr,{as:"button",icon:a.jsx(QY,{}),children:e("common.hotkeysLabel")})}),a.jsx(Xee,{children:a.jsx(jr,{as:"button",icon:a.jsx(zY,{}),children:e("common.settingsLabel")})})]})]})]})]})},Zee=f.memo(Jee);function ete(e){return nt({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M16.5 9c-.42 0-.83.04-1.24.11L1.01 3 1 10l9 2-9 2 .01 7 8.07-3.46C9.59 21.19 12.71 24 16.5 24c4.14 0 7.5-3.36 7.5-7.5S20.64 9 16.5 9zm0 13c-3.03 0-5.5-2.47-5.5-5.5s2.47-5.5 5.5-5.5 5.5 2.47 5.5 5.5-2.47 5.5-5.5 5.5z"}},{tag:"path",attr:{d:"M18.27 14.03l-1.77 1.76-1.77-1.76-.7.7 1.76 1.77-1.76 1.77.7.7 1.77-1.76 1.77 1.76.7-.7-1.76-1.77 1.76-1.77z"}}]})(e)}function tte(e){return nt({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0V0z"}},{tag:"path",attr:{d:"M17 16l-4-4V8.82C14.16 8.4 15 7.3 15 6c0-1.66-1.34-3-3-3S9 4.34 9 6c0 1.3.84 2.4 2 2.82V12l-4 4H3v5h5v-3.05l4-4.2 4 4.2V21h5v-5h-4z"}}]})(e)}function nte(e){return nt({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM8 20H4v-4h4v4zm0-6H4v-4h4v4zm0-6H4V4h4v4zm6 12h-4v-4h4v4zm0-6h-4v-4h4v4zm0-6h-4V4h4v4zm6 12h-4v-4h4v4zm0-6h-4v-4h4v4zm0-6h-4V4h4v4z"}}]})(e)}function rte(e){return nt({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M22 16V4c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2zm-11-4l2.03 2.71L16 11l4 5H8l3-4zM2 6v14c0 1.1.9 2 2 2h14v-2H4V6H2z"}}]})(e)}function ote(e){return nt({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z"}}]})(e)}function vO(e){return nt({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0V0z"}},{tag:"path",attr:{d:"M16 17.01V10h-2v7.01h-3L15 21l4-3.99h-3zM9 3L5 6.99h3V14h2V6.99h3L9 3zm7 14.01V10h-2v7.01h-3L15 21l4-3.99h-3zM9 3L5 6.99h3V14h2V6.99h3L9 3z"}}]})(e)}const ste=be(vo,e=>{const{isUploading:t}=e;let n="";return t&&(n="Uploading..."),{tooltip:n,shouldShow:t}}),ate=()=>{const{shouldShow:e,tooltip:t}=B(ste);return e?a.jsx(H,{sx:{alignItems:"center",justifyContent:"center",color:"base.600"},children:a.jsx(vn,{label:t,placement:"right",hasArrow:!0,children:a.jsx(hl,{})})}):null},ite=f.memo(ate),bO=e=>e.config,{createElement:Mc,createContext:lte,forwardRef:yO,useCallback:ui,useContext:xO,useEffect:Aa,useImperativeHandle:wO,useLayoutEffect:cte,useMemo:ute,useRef:es,useState:Zu}=eb,Ok=eb["useId".toString()],dte=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",im=dte?cte:()=>{},fte=typeof Ok=="function"?Ok:()=>null;let pte=0;function Jy(e=null){const t=fte(),n=es(e||t||null);return n.current===null&&(n.current=""+pte++),n.current}const ig=lte(null);ig.displayName="PanelGroupContext";function SO({children:e=null,className:t="",collapsedSize:n=0,collapsible:r=!1,defaultSize:o=null,forwardedRef:s,id:i=null,maxSize:c=100,minSize:d=10,onCollapse:p=null,onResize:h=null,order:m=null,style:v={},tagName:b="div"}){const w=xO(ig);if(w===null)throw Error("Panel components must be rendered within a PanelGroup container");const y=Jy(i),{collapsePanel:S,expandPanel:k,getPanelStyle:_,registerPanel:P,resizePanel:I,unregisterPanel:E}=w,O=es({onCollapse:p,onResize:h});if(Aa(()=>{O.current.onCollapse=p,O.current.onResize=h}),d<0||d>100)throw Error(`Panel minSize must be between 0 and 100, but was ${d}`);if(c<0||c>100)throw Error(`Panel maxSize must be between 0 and 100, but was ${c}`);if(o!==null){if(o<0||o>100)throw Error(`Panel defaultSize must be between 0 and 100, but was ${o}`);d>o&&!r&&(console.error(`Panel minSize ${d} cannot be greater than defaultSize ${o}`),o=d)}const R=_(y,o),M=es({size:Rk(R)}),D=es({callbacksRef:O,collapsedSize:n,collapsible:r,defaultSize:o,id:y,maxSize:c,minSize:d,order:m});return im(()=>{M.current.size=Rk(R),D.current.callbacksRef=O,D.current.collapsedSize=n,D.current.collapsible=r,D.current.defaultSize=o,D.current.id=y,D.current.maxSize=c,D.current.minSize=d,D.current.order=m}),im(()=>(P(y,D),()=>{E(y)}),[m,y,P,E]),wO(s,()=>({collapse:()=>S(y),expand:()=>k(y),getCollapsed(){return M.current.size===0},getSize(){return M.current.size},resize:A=>I(y,A)}),[S,k,y,I]),Mc(b,{children:e,className:t,"data-panel":"","data-panel-collapsible":r||void 0,"data-panel-id":y,"data-panel-size":parseFloat(""+R.flexGrow).toFixed(1),id:`data-panel-id-${y}`,style:{...R,...v}})}const yd=yO((e,t)=>Mc(SO,{...e,forwardedRef:t}));SO.displayName="Panel";yd.displayName="forwardRef(Panel)";function Rk(e){const{flexGrow:t}=e;return typeof t=="string"?parseFloat(t):t}const pl=10;function zu(e,t,n,r,o,s,i,c){const{sizes:d}=c||{},p=d||s;if(o===0)return p;const h=Jo(t),m=p.concat();let v=0;{const y=o<0?r:n,S=h.findIndex(I=>I.current.id===y),k=h[S],_=p[S],P=Mk(k,Math.abs(o),_,e);if(_===P)return p;P===0&&_>0&&i.set(y,_),o=o<0?_-P:P-_}let b=o<0?n:r,w=h.findIndex(y=>y.current.id===b);for(;;){const y=h[w],S=p[w],k=Math.abs(o)-Math.abs(v),_=Mk(y,0-k,S,e);if(S!==_&&(_===0&&S>0&&i.set(y.current.id,S),v+=S-_,m[w]=_,v.toPrecision(pl).localeCompare(Math.abs(o).toPrecision(pl),void 0,{numeric:!0})>=0))break;if(o<0){if(--w<0)break}else if(++w>=h.length)break}return v===0?p:(b=o<0?r:n,w=h.findIndex(y=>y.current.id===b),m[w]=p[w]+v,m)}function ql(e,t,n){t.forEach((r,o)=>{const{callbacksRef:s,collapsedSize:i,collapsible:c,id:d}=e[o].current,p=n[d];if(p!==r){n[d]=r;const{onCollapse:h,onResize:m}=s.current;m&&m(r,p),c&&h&&((p==null||p===i)&&r!==i?h(!1):p!==i&&r===i&&h(!0))}})}function mv(e,t){if(t.length<2)return[null,null];const n=t.findIndex(i=>i.current.id===e);if(n<0)return[null,null];const r=n===t.length-1,o=r?t[n-1].current.id:e,s=r?e:t[n+1].current.id;return[o,s]}function CO(e,t,n){if(e.size===1)return"100";const o=Jo(e).findIndex(i=>i.current.id===t),s=n[o];return s==null?"0":s.toPrecision(pl)}function hte(e){const t=document.querySelector(`[data-panel-id="${e}"]`);return t||null}function Zy(e){const t=document.querySelector(`[data-panel-group-id="${e}"]`);return t||null}function lg(e){const t=document.querySelector(`[data-panel-resize-handle-id="${e}"]`);return t||null}function mte(e){return kO().findIndex(r=>r.getAttribute("data-panel-resize-handle-id")===e)??null}function kO(){return Array.from(document.querySelectorAll("[data-panel-resize-handle-id]"))}function _O(e){return Array.from(document.querySelectorAll(`[data-panel-resize-handle-id][data-panel-group-id="${e}"]`))}function ex(e,t,n){var d,p,h,m;const r=lg(t),o=_O(e),s=r?o.indexOf(r):-1,i=((p=(d=n[s])==null?void 0:d.current)==null?void 0:p.id)??null,c=((m=(h=n[s+1])==null?void 0:h.current)==null?void 0:m.id)??null;return[i,c]}function Jo(e){return Array.from(e.values()).sort((t,n)=>{const r=t.current.order,o=n.current.order;return r==null&&o==null?0:r==null?-1:o==null?1:r-o})}function Mk(e,t,n,r){var h;const o=n+t,{collapsedSize:s,collapsible:i,maxSize:c,minSize:d}=e.current;if(i){if(n>s){if(o<=d/2+s)return s}else if(!((h=r==null?void 0:r.type)==null?void 0:h.startsWith("key"))&&o{const{direction:i,panels:c}=e.current,d=Zy(t),{height:p,width:h}=d.getBoundingClientRect(),v=_O(t).map(b=>{const w=b.getAttribute("data-panel-resize-handle-id"),y=Jo(c),[S,k]=ex(t,w,y);if(S==null||k==null)return()=>{};let _=0,P=100,I=0,E=0;y.forEach(L=>{L.current.id===S?(P=L.current.maxSize,_=L.current.minSize):(I+=L.current.minSize,E+=L.current.maxSize)});const O=Math.min(P,100-I),R=Math.max(_,(y.length-1)*100-E),M=CO(c,S,o);b.setAttribute("aria-valuemax",""+Math.round(O)),b.setAttribute("aria-valuemin",""+Math.round(R)),b.setAttribute("aria-valuenow",""+Math.round(parseInt(M)));const D=L=>{if(!L.defaultPrevented)switch(L.key){case"Enter":{L.preventDefault();const Q=y.findIndex(F=>F.current.id===S);if(Q>=0){const F=y[Q],V=o[Q];if(V!=null){let q=0;V.toPrecision(pl)<=F.current.minSize.toPrecision(pl)?q=i==="horizontal"?h:p:q=-(i==="horizontal"?h:p);const G=zu(L,c,S,k,q,o,s.current,null);o!==G&&r(G)}}break}}};b.addEventListener("keydown",D);const A=hte(S);return A!=null&&b.setAttribute("aria-controls",A.id),()=>{b.removeAttribute("aria-valuemax"),b.removeAttribute("aria-valuemin"),b.removeAttribute("aria-valuenow"),b.removeEventListener("keydown",D),A!=null&&b.removeAttribute("aria-controls")}});return()=>{v.forEach(b=>b())}},[e,t,n,s,r,o])}function vte({disabled:e,handleId:t,resizeHandler:n}){Aa(()=>{if(e||n==null)return;const r=lg(t);if(r==null)return;const o=s=>{if(!s.defaultPrevented)switch(s.key){case"ArrowDown":case"ArrowLeft":case"ArrowRight":case"ArrowUp":case"End":case"Home":{s.preventDefault(),n(s);break}case"F6":{s.preventDefault();const i=kO(),c=mte(t);PO(c!==null);const d=s.shiftKey?c>0?c-1:i.length-1:c+1{r.removeEventListener("keydown",o)}},[e,t,n])}function bte(e,t){if(e.length!==t.length)return!1;for(let n=0;nR.current.id===I),O=r[E];if(O.current.collapsible){const R=h[E];(R===0||R.toPrecision(pl)===O.current.minSize.toPrecision(pl))&&(k=k<0?-O.current.minSize*w:O.current.minSize*w)}return k}else return jO(e,n,o,c,d)}function xte(e){return e.type==="keydown"}function L1(e){return e.type.startsWith("mouse")}function z1(e){return e.type.startsWith("touch")}let B1=null,Ki=null;function IO(e){switch(e){case"horizontal":return"ew-resize";case"horizontal-max":return"w-resize";case"horizontal-min":return"e-resize";case"vertical":return"ns-resize";case"vertical-max":return"n-resize";case"vertical-min":return"s-resize"}}function wte(){Ki!==null&&(document.head.removeChild(Ki),B1=null,Ki=null)}function gv(e){if(B1===e)return;B1=e;const t=IO(e);Ki===null&&(Ki=document.createElement("style"),document.head.appendChild(Ki)),Ki.innerHTML=`*{cursor: ${t}!important;}`}function Ste(e,t=10){let n=null;return(...o)=>{n!==null&&clearTimeout(n),n=setTimeout(()=>{e(...o)},t)}}function EO(e){return e.map(t=>{const{minSize:n,order:r}=t.current;return r?`${r}:${n}`:`${n}`}).sort((t,n)=>t.localeCompare(n)).join(",")}function OO(e,t){try{const n=t.getItem(`PanelGroup:sizes:${e}`);if(n){const r=JSON.parse(n);if(typeof r=="object"&&r!=null)return r}}catch{}return null}function Cte(e,t,n){const r=OO(e,n);if(r){const o=EO(t);return r[o]??null}return null}function kte(e,t,n,r){const o=EO(t),s=OO(e,r)||{};s[o]=n;try{r.setItem(`PanelGroup:sizes:${e}`,JSON.stringify(s))}catch(i){console.error(i)}}const vv={};function Dk(e){try{if(typeof localStorage<"u")e.getItem=t=>localStorage.getItem(t),e.setItem=(t,n)=>{localStorage.setItem(t,n)};else throw new Error("localStorage not supported in this environment")}catch(t){console.error(t),e.getItem=()=>null,e.setItem=()=>{}}}const Bu={getItem:e=>(Dk(Bu),Bu.getItem(e)),setItem:(e,t)=>{Dk(Bu),Bu.setItem(e,t)}};function RO({autoSaveId:e,children:t=null,className:n="",direction:r,disablePointerEventsDuringResize:o=!1,forwardedRef:s,id:i=null,onLayout:c,storage:d=Bu,style:p={},tagName:h="div"}){const m=Jy(i),[v,b]=Zu(null),[w,y]=Zu(new Map),S=es(null),k=es({onLayout:c});Aa(()=>{k.current.onLayout=c});const _=es({}),[P,I]=Zu([]),E=es(new Map),O=es(0),R=es({direction:r,panels:w,sizes:P});wO(s,()=>({getLayout:()=>{const{sizes:T}=R.current;return T},setLayout:T=>{const z=T.reduce((fe,ie)=>fe+ie,0);PO(z===100,"Panel sizes must add up to 100%");const{panels:$}=R.current,Y=_.current,ae=Jo($);I(T),ql(ae,T,Y)}}),[]),im(()=>{R.current.direction=r,R.current.panels=w,R.current.sizes=P}),gte({committedValuesRef:R,groupId:m,panels:w,setSizes:I,sizes:P,panelSizeBeforeCollapse:E}),Aa(()=>{const{onLayout:T}=k.current,{panels:z,sizes:$}=R.current;if($.length>0){T&&T($);const Y=_.current,ae=Jo(z);ql(ae,$,Y)}},[P]),im(()=>{if(R.current.sizes.length===w.size)return;let z=null;if(e){const $=Jo(w);z=Cte(e,$,d)}if(z!=null)I(z);else{const $=Jo(w);let Y=0,ae=0,fe=0;if($.forEach(ie=>{fe+=ie.current.minSize,ie.current.defaultSize===null?Y++:ae+=ie.current.defaultSize}),ae>100)throw new Error("Default panel sizes cannot exceed 100%");if($.length>1&&Y===0&&ae!==100)throw new Error("Invalid default sizes specified for panels");if(fe>100)throw new Error("Minimum panel sizes cannot exceed 100%");I($.map(ie=>ie.current.defaultSize===null?(100-ae)/Y:ie.current.defaultSize))}},[e,w,d]),Aa(()=>{if(e){if(P.length===0||P.length!==w.size)return;const T=Jo(w);vv[e]||(vv[e]=Ste(kte,100)),vv[e](e,T,P,d)}},[e,w,P,d]);const M=ui((T,z)=>{const{panels:$}=R.current;return $.size===0?{flexBasis:0,flexGrow:z??void 0,flexShrink:1,overflow:"hidden"}:{flexBasis:0,flexGrow:CO($,T,P),flexShrink:1,overflow:"hidden",pointerEvents:o&&v!==null?"none":void 0}},[v,o,P]),D=ui((T,z)=>{y($=>{if($.has(T))return $;const Y=new Map($);return Y.set(T,z),Y})},[]),A=ui(T=>$=>{$.preventDefault();const{direction:Y,panels:ae,sizes:fe}=R.current,ie=Jo(ae),[X,K]=ex(m,T,ie);if(X==null||K==null)return;let U=yte($,m,T,ie,Y,fe,S.current);if(U===0)return;const re=Zy(m).getBoundingClientRect(),oe=Y==="horizontal";document.dir==="rtl"&&oe&&(U=-U);const pe=oe?re.width:re.height,le=U/pe*100,ge=zu($,ae,X,K,le,fe,E.current,S.current),ke=!bte(fe,ge);if((L1($)||z1($))&&O.current!=le&&gv(ke?oe?"horizontal":"vertical":oe?U<0?"horizontal-min":"horizontal-max":U<0?"vertical-min":"vertical-max"),ke){const xe=_.current;I(ge),ql(ie,ge,xe)}O.current=le},[m]),L=ui(T=>{y(z=>{if(!z.has(T))return z;const $=new Map(z);return $.delete(T),$})},[]),Q=ui(T=>{const{panels:z,sizes:$}=R.current,Y=z.get(T);if(Y==null)return;const{collapsedSize:ae,collapsible:fe}=Y.current;if(!fe)return;const ie=Jo(z),X=ie.indexOf(Y);if(X<0)return;const K=$[X];if(K===ae)return;E.current.set(T,K);const[U,se]=mv(T,ie);if(U==null||se==null)return;const oe=X===ie.length-1?K:ae-K,pe=zu(null,z,U,se,oe,$,E.current,null);if($!==pe){const le=_.current;I(pe),ql(ie,pe,le)}},[]),F=ui(T=>{const{panels:z,sizes:$}=R.current,Y=z.get(T);if(Y==null)return;const{collapsedSize:ae,minSize:fe}=Y.current,ie=E.current.get(T)||fe;if(!ie)return;const X=Jo(z),K=X.indexOf(Y);if(K<0||$[K]!==ae)return;const[se,re]=mv(T,X);if(se==null||re==null)return;const pe=K===X.length-1?ae-ie:ie,le=zu(null,z,se,re,pe,$,E.current,null);if($!==le){const ge=_.current;I(le),ql(X,le,ge)}},[]),V=ui((T,z)=>{const{panels:$,sizes:Y}=R.current,ae=$.get(T);if(ae==null)return;const{collapsedSize:fe,collapsible:ie,maxSize:X,minSize:K}=ae.current,U=Jo($),se=U.indexOf(ae);if(se<0)return;const re=Y[se];if(re===z)return;ie&&z===fe||(z=Math.min(X,Math.max(K,z)));const[oe,pe]=mv(T,U);if(oe==null||pe==null)return;const ge=se===U.length-1?re-z:z-re,ke=zu(null,$,oe,pe,ge,Y,E.current,null);if(Y!==ke){const xe=_.current;I(ke),ql(U,ke,xe)}},[]),q=ute(()=>({activeHandleId:v,collapsePanel:Q,direction:r,expandPanel:F,getPanelStyle:M,groupId:m,registerPanel:D,registerResizeHandle:A,resizePanel:V,startDragging:(T,z)=>{if(b(T),L1(z)||z1(z)){const $=lg(T);S.current={dragHandleRect:$.getBoundingClientRect(),dragOffset:jO(z,T,r),sizes:R.current.sizes}}},stopDragging:()=>{wte(),b(null),S.current=null},unregisterPanel:L}),[v,Q,r,F,M,m,D,A,V,L]),G={display:"flex",flexDirection:r==="horizontal"?"row":"column",height:"100%",overflow:"hidden",width:"100%"};return Mc(ig.Provider,{children:Mc(h,{children:t,className:n,"data-panel-group":"","data-panel-group-direction":r,"data-panel-group-id":m,style:{...G,...p}}),value:q})}const tx=yO((e,t)=>Mc(RO,{...e,forwardedRef:t}));RO.displayName="PanelGroup";tx.displayName="forwardRef(PanelGroup)";function F1({children:e=null,className:t="",disabled:n=!1,id:r=null,onDragging:o,style:s={},tagName:i="div"}){const c=es(null),d=es({onDragging:o});Aa(()=>{d.current.onDragging=o});const p=xO(ig);if(p===null)throw Error("PanelResizeHandle components must be rendered within a PanelGroup container");const{activeHandleId:h,direction:m,groupId:v,registerResizeHandle:b,startDragging:w,stopDragging:y}=p,S=Jy(r),k=h===S,[_,P]=Zu(!1),[I,E]=Zu(null),O=ui(()=>{c.current.blur(),y();const{onDragging:D}=d.current;D&&D(!1)},[y]);Aa(()=>{if(n)E(null);else{const M=b(S);E(()=>M)}},[n,S,b]),Aa(()=>{if(n||I==null||!k)return;const M=Q=>{I(Q)},D=Q=>{I(Q)},L=c.current.ownerDocument;return L.body.addEventListener("contextmenu",O),L.body.addEventListener("mousemove",M),L.body.addEventListener("touchmove",M),L.body.addEventListener("mouseleave",D),window.addEventListener("mouseup",O),window.addEventListener("touchend",O),()=>{L.body.removeEventListener("contextmenu",O),L.body.removeEventListener("mousemove",M),L.body.removeEventListener("touchmove",M),L.body.removeEventListener("mouseleave",D),window.removeEventListener("mouseup",O),window.removeEventListener("touchend",O)}},[m,n,k,I,O]),vte({disabled:n,handleId:S,resizeHandler:I});const R={cursor:IO(m),touchAction:"none",userSelect:"none"};return Mc(i,{children:e,className:t,"data-resize-handle-active":k?"pointer":_?"keyboard":void 0,"data-panel-group-direction":m,"data-panel-group-id":v,"data-panel-resize-handle-enabled":!n,"data-panel-resize-handle-id":S,onBlur:()=>P(!1),onFocus:()=>P(!0),onMouseDown:M=>{w(S,M.nativeEvent);const{onDragging:D}=d.current;D&&D(!0)},onMouseUp:O,onTouchCancel:O,onTouchEnd:O,onTouchStart:M=>{w(S,M.nativeEvent);const{onDragging:D}=d.current;D&&D(!0)},ref:c,role:"separator",style:{...R,...s},tabIndex:0})}F1.displayName="PanelResizeHandle";const _te=(e,t,n,r="horizontal")=>{const o=f.useRef(null),[s,i]=f.useState(t),c=f.useCallback(()=>{var p,h;const d=(p=o.current)==null?void 0:p.getSize();d!==void 0&&d{const d=document.querySelector(`[data-panel-group-id="${n}"]`),p=document.querySelectorAll("[data-panel-resize-handle-id]");if(!d)return;const h=new ResizeObserver(()=>{let m=r==="horizontal"?d.getBoundingClientRect().width:d.getBoundingClientRect().height;p.forEach(v=>{m-=r==="horizontal"?v.getBoundingClientRect().width:v.getBoundingClientRect().height}),i(e/m*100)});return h.observe(d),p.forEach(m=>{h.observe(m)}),window.addEventListener("resize",c),()=>{h.disconnect(),window.removeEventListener("resize",c)}},[n,c,s,e,r]),{ref:o,minSizePct:s}},Pte=be([at],e=>{const{initialImage:t}=e.generation;return{initialImage:t,isResetButtonDisabled:!t}},Ke),jte=()=>{const{initialImage:e}=B(Pte),{currentData:t}=Is((e==null?void 0:e.imageName)??ro.skipToken),n=f.useMemo(()=>{if(t)return{id:"initial-image",payloadType:"IMAGE_DTO",payload:{imageDTO:t}}},[t]),r=f.useMemo(()=>({id:"initial-image",actionType:"SET_INITIAL_IMAGE"}),[]);return a.jsx(fl,{imageDTO:t,droppableData:r,draggableData:n,isUploadDisabled:!0,fitContainer:!0,dropLabel:"Set as Initial Image",noContentFallback:a.jsx(tl,{label:"No initial image selected"})})},Ite=be([at],e=>{const{initialImage:t}=e.generation;return{isResetButtonDisabled:!t}},Ke),Ete={type:"SET_INITIAL_IMAGE"},Ote=()=>{const{isResetButtonDisabled:e}=B(Ite),t=te(),{getUploadButtonProps:n,getUploadInputProps:r}=ag({postUploadAction:Ete}),o=f.useCallback(()=>{t(L7())},[t]);return a.jsxs(H,{layerStyle:"first",sx:{position:"relative",flexDirection:"column",height:"full",width:"full",alignItems:"center",justifyContent:"center",borderRadius:"base",p:4,gap:4},children:[a.jsxs(H,{sx:{w:"full",flexWrap:"wrap",justifyContent:"center",alignItems:"center",gap:2},children:[a.jsx(Je,{sx:{fontWeight:600,userSelect:"none",color:"base.700",_dark:{color:"base.200"}},children:"Initial Image"}),a.jsx(ml,{}),a.jsx(ze,{tooltip:"Upload Initial Image","aria-label":"Upload Initial Image",icon:a.jsx(Kd,{}),...n()}),a.jsx(ze,{tooltip:"Reset Initial Image","aria-label":"Reset Initial Image",icon:a.jsx(_y,{}),onClick:o,isDisabled:e})]}),a.jsx(jte,{}),a.jsx("input",{...r()})]})},Rte=e=>{const{label:t,activeLabel:n,children:r,defaultIsOpen:o=!1}=e,{isOpen:s,onToggle:i}=ss({defaultIsOpen:o}),{colorMode:c}=Ds();return a.jsxs(Oe,{children:[a.jsxs(H,{onClick:i,sx:{alignItems:"center",p:2,px:4,gap:2,borderTopRadius:"base",borderBottomRadius:s?0:"base",bg:s?Fe("base.200","base.750")(c):Fe("base.150","base.800")(c),color:Fe("base.900","base.100")(c),_hover:{bg:s?Fe("base.250","base.700")(c):Fe("base.200","base.750")(c)},fontSize:"sm",fontWeight:600,cursor:"pointer",transitionProperty:"common",transitionDuration:"normal",userSelect:"none"},children:[t,a.jsx(mo,{children:n&&a.jsx(Er.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.1}},exit:{opacity:0,transition:{duration:.1}},children:a.jsx(Je,{sx:{color:"accent.500",_dark:{color:"accent.300"}},children:n})},"statusText")}),a.jsx(ml,{}),a.jsx(Hy,{sx:{w:"1rem",h:"1rem",transform:s?"rotate(0deg)":"rotate(180deg)",transitionProperty:"common",transitionDuration:"normal"}})]}),a.jsx(wm,{in:s,animateOpacity:!0,style:{overflow:"unset"},children:a.jsx(Oe,{sx:{p:4,borderBottomRadius:"base",bg:"base.100",_dark:{bg:"base.800"}},children:r})})]})},bo=f.memo(Rte),Mte=be(at,e=>{const{combinatorial:t,isEnabled:n}=e.dynamicPrompts;return{combinatorial:t,isDisabled:!n}},Ke),Dte=()=>{const{combinatorial:e,isDisabled:t}=B(Mte),n=te(),r=f.useCallback(()=>{n(z7())},[n]);return a.jsx(yr,{isDisabled:t,label:"Combinatorial Generation",isChecked:e,onChange:r})},Ate=be(at,e=>{const{isEnabled:t}=e.dynamicPrompts;return{isEnabled:t}},Ke),Tte=()=>{const e=te(),{isEnabled:t}=B(Ate),n=f.useCallback(()=>{e(B7())},[e]);return a.jsx(yr,{label:"Enable Dynamic Prompts",isChecked:t,onChange:n})},Nte=be(at,e=>{const{maxPrompts:t,combinatorial:n,isEnabled:r}=e.dynamicPrompts,{min:o,sliderMax:s,inputMax:i}=e.config.sd.dynamicPrompts.maxPrompts;return{maxPrompts:t,min:o,sliderMax:s,inputMax:i,isDisabled:!r||!n}},Ke),$te=()=>{const{maxPrompts:e,min:t,sliderMax:n,inputMax:r,isDisabled:o}=B(Nte),s=te(),i=f.useCallback(d=>{s(F7(d))},[s]),c=f.useCallback(()=>{s(H7())},[s]);return a.jsx(jt,{label:"Max Prompts",isDisabled:o,min:t,max:n,value:e,onChange:i,sliderNumberInputProps:{max:r},withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:c})},Lte=be(at,e=>{const{isEnabled:t}=e.dynamicPrompts;return{activeLabel:t?"Enabled":void 0}},Ke),Yc=()=>{const{activeLabel:e}=B(Lte);return ir("dynamicPrompting").isFeatureEnabled?a.jsx(bo,{label:"Dynamic Prompts",activeLabel:e,children:a.jsxs(H,{sx:{gap:2,flexDir:"column"},children:[a.jsx(Tte,{}),a.jsx(Dte,{}),a.jsx($te,{})]})}):null},zte=e=>{const t=te(),{lora:n}=e,r=f.useCallback(i=>{t(W7({id:n.id,weight:i}))},[t,n.id]),o=f.useCallback(()=>{t(V7(n.id))},[t,n.id]),s=f.useCallback(()=>{t(U7(n.id))},[t,n.id]);return a.jsxs(H,{sx:{gap:2.5,alignItems:"flex-end"},children:[a.jsx(jt,{label:n.model_name,value:n.weight,onChange:r,min:-1,max:2,step:.01,withInput:!0,withReset:!0,handleReset:o,withSliderMarks:!0,sliderMarks:[-1,0,1,2],sliderNumberInputProps:{min:-50,max:50}}),a.jsx(ze,{size:"sm",onClick:s,tooltip:"Remove LoRA","aria-label":"Remove LoRA",icon:a.jsx(Oo,{}),colorScheme:"error"})]})},Bte=f.memo(zte),Fte=be(at,({lora:e})=>({lorasArray:cs(e.loras)}),Ke),Hte=()=>{const{lorasArray:e}=B(Fte);return a.jsx(a.Fragment,{children:e.map((t,n)=>a.jsxs(H,{sx:{flexDirection:"column",gap:2},children:[n>0&&a.jsx(Ka,{pt:1}),a.jsx(Bte,{lora:t})]},t.model_name))})},Wte=be(at,({lora:e})=>({loras:e.loras}),Ke),Vte=()=>{const e=te(),{loras:t}=B(Wte),{data:n}=bm(),r=B(i=>i.generation.model),o=f.useMemo(()=>{if(!n)return[];const i=[];return oo(n.entities,(c,d)=>{if(!c||d in t)return;const p=(r==null?void 0:r.base_model)!==c.base_model;i.push({value:d,label:c.model_name,disabled:p,group:Qn[c.base_model],tooltip:p?`Incompatible base model: ${c.base_model}`:void 0})}),i.sort((c,d)=>c.label&&!d.label?1:-1),i.sort((c,d)=>c.disabled&&!d.disabled?1:-1)},[t,n,r==null?void 0:r.base_model]),s=f.useCallback(i=>{if(!i)return;const c=n==null?void 0:n.entities[i];c&&e(G7(c))},[e,n==null?void 0:n.entities]);return(n==null?void 0:n.ids.length)===0?a.jsx(H,{sx:{justifyContent:"center",p:2},children:a.jsx(Je,{sx:{fontSize:"sm",color:"base.500",_dark:"base.700"},children:"No LoRAs Loaded"})}):a.jsx(ar,{placeholder:o.length===0?"All LoRAs added":"Add LoRA",value:null,data:o,nothingFound:"No matching LoRAs",itemComponent:Oi,disabled:o.length===0,filter:(i,c)=>{var d;return((d=c.label)==null?void 0:d.toLowerCase().includes(i.toLowerCase().trim()))||c.value.toLowerCase().includes(i.toLowerCase().trim())},onChange:s})},Ute=be(at,e=>{const t=t5(e.lora.loras);return{activeLabel:t>0?`${t} Active`:void 0}},Ke),Gte=()=>{const{activeLabel:e}=B(Ute);return ir("lora").isFeatureEnabled?a.jsx(bo,{label:"LoRA",activeLabel:e,children:a.jsxs(H,{sx:{flexDir:"column",gap:2},children:[a.jsx(Vte,{}),a.jsx(Hte,{})]})}):null},Qc=f.memo(Gte),MO=e=>{const t=kd("models"),[n,r,o]=e.split("/"),s=q7.safeParse({base_model:n,model_name:o});if(!s.success){t.error({controlNetModelId:e,errors:s.error.format()},"Failed to parse ControlNet model id");return}return s.data},qte=be(at,({generation:e})=>{const{model:t}=e;return{mainModel:t}},Ke),Kte=e=>{const{controlNetId:t,model:n,isEnabled:r}=e.controlNet,o=te(),s=B(kr),{mainModel:i}=B(qte),{data:c}=ub(),d=f.useMemo(()=>{if(!c)return[];const m=[];return oo(c.entities,(v,b)=>{if(!v)return;const w=(v==null?void 0:v.base_model)!==(i==null?void 0:i.base_model);m.push({value:b,label:v.model_name,group:Qn[v.base_model],disabled:w,tooltip:w?`Incompatible base model: ${v.base_model}`:void 0})}),m},[c,i==null?void 0:i.base_model]),p=f.useMemo(()=>(c==null?void 0:c.entities[`${n==null?void 0:n.base_model}/controlnet/${n==null?void 0:n.model_name}`])??null,[n==null?void 0:n.base_model,n==null?void 0:n.model_name,c==null?void 0:c.entities]),h=f.useCallback(m=>{if(!m)return;const v=MO(m);v&&o(n5({controlNetId:t,model:v}))},[t,o]);return a.jsx(ar,{itemComponent:Oi,data:d,error:!p||(i==null?void 0:i.base_model)!==p.base_model,placeholder:"Select a model",value:(p==null?void 0:p.id)??null,onChange:h,disabled:s||!r,tooltip:p==null?void 0:p.description})},Xte=f.memo(Kte),Yte=e=>{const{weight:t,isEnabled:n,controlNetId:r}=e.controlNet,o=te(),s=f.useCallback(i=>{o(K7({controlNetId:r,weight:i}))},[r,o]);return a.jsx(jt,{isDisabled:!n,label:"Weight",value:t,onChange:s,min:0,max:2,step:.01,withSliderMarks:!0,sliderMarks:[0,1,2]})},Qte=f.memo(Yte),Jte=be(at,({controlNet:e})=>{const{pendingControlImages:t}=e;return{pendingControlImages:t}},Ke),Zte=e=>{const{height:t}=e,{controlImage:n,processedControlImage:r,processorType:o,isEnabled:s,controlNetId:i}=e.controlNet,c=te(),{pendingControlImages:d}=B(Jte),[p,h]=f.useState(!1),{currentData:m}=Is(n??ro.skipToken),{currentData:v}=Is(r??ro.skipToken),b=f.useCallback(()=>{c(X7({controlNetId:i,controlImage:null}))},[i,c]),w=f.useCallback(()=>{h(!0)},[]),y=f.useCallback(()=>{h(!1)},[]),S=f.useMemo(()=>{if(m)return{id:i,payloadType:"IMAGE_DTO",payload:{imageDTO:m}}},[m,i]),k=f.useMemo(()=>({id:i,actionType:"SET_CONTROLNET_IMAGE",context:{controlNetId:i}}),[i]),_=f.useMemo(()=>({type:"SET_CONTROLNET_IMAGE",controlNetId:i}),[i]),P=m&&v&&!p&&!d.includes(i)&&o!=="none";return a.jsxs(H,{onMouseEnter:w,onMouseLeave:y,sx:{position:"relative",w:"full",h:t,alignItems:"center",justifyContent:"center",pointerEvents:s?"auto":"none",opacity:s?1:.5},children:[a.jsx(fl,{draggableData:S,droppableData:k,imageDTO:m,isDropDisabled:P||!s,onClickReset:b,postUploadAction:_,resetTooltip:"Reset Control Image",withResetIcon:!!m}),a.jsx(Oe,{sx:{position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full",opacity:P?1:0,transitionProperty:"common",transitionDuration:"normal",pointerEvents:"none"},children:a.jsx(fl,{draggableData:S,droppableData:k,imageDTO:v,isUploadDisabled:!0,isDropDisabled:!s,onClickReset:b,resetTooltip:"Reset Control Image",withResetIcon:!!m})}),d.includes(i)&&a.jsx(H,{sx:{position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full",alignItems:"center",justifyContent:"center",opacity:.8,borderRadius:"base",bg:"base.400",_dark:{bg:"base.900"}},children:a.jsx(hl,{size:"xl",sx:{color:"base.100",_dark:{color:"base.400"}}})})]})},Ak=f.memo(Zte),Ts=()=>{const e=te();return f.useCallback((n,r)=>{e(Y7({controlNetId:n,changes:r}))},[e])};function Ns(e){return a.jsx(H,{sx:{flexDirection:"column",gap:2},children:e.children})}const Tk=ls.canny_image_processor.default,ene=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{low_threshold:o,high_threshold:s}=n,i=B(kr),c=Ts(),d=f.useCallback(v=>{c(t,{low_threshold:v})},[t,c]),p=f.useCallback(()=>{c(t,{low_threshold:Tk.low_threshold})},[t,c]),h=f.useCallback(v=>{c(t,{high_threshold:v})},[t,c]),m=f.useCallback(()=>{c(t,{high_threshold:Tk.high_threshold})},[t,c]);return a.jsxs(Ns,{children:[a.jsx(jt,{isDisabled:i||!r,label:"Low Threshold",value:o,onChange:d,handleReset:p,withReset:!0,min:0,max:255,withInput:!0,withSliderMarks:!0}),a.jsx(jt,{isDisabled:i||!r,label:"High Threshold",value:s,onChange:h,handleReset:m,withReset:!0,min:0,max:255,withInput:!0,withSliderMarks:!0})]})},tne=f.memo(ene),ju=ls.content_shuffle_image_processor.default,nne=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s,w:i,h:c,f:d}=n,p=Ts(),h=B(kr),m=f.useCallback(E=>{p(t,{detect_resolution:E})},[t,p]),v=f.useCallback(()=>{p(t,{detect_resolution:ju.detect_resolution})},[t,p]),b=f.useCallback(E=>{p(t,{image_resolution:E})},[t,p]),w=f.useCallback(()=>{p(t,{image_resolution:ju.image_resolution})},[t,p]),y=f.useCallback(E=>{p(t,{w:E})},[t,p]),S=f.useCallback(()=>{p(t,{w:ju.w})},[t,p]),k=f.useCallback(E=>{p(t,{h:E})},[t,p]),_=f.useCallback(()=>{p(t,{h:ju.h})},[t,p]),P=f.useCallback(E=>{p(t,{f:E})},[t,p]),I=f.useCallback(()=>{p(t,{f:ju.f})},[t,p]);return a.jsxs(Ns,{children:[a.jsx(jt,{label:"Detect Resolution",value:s,onChange:m,handleReset:v,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:h||!r}),a.jsx(jt,{label:"Image Resolution",value:o,onChange:b,handleReset:w,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:h||!r}),a.jsx(jt,{label:"W",value:i,onChange:y,handleReset:S,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:h||!r}),a.jsx(jt,{label:"H",value:c,onChange:k,handleReset:_,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:h||!r}),a.jsx(jt,{label:"F",value:d,onChange:P,handleReset:I,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:h||!r})]})},rne=f.memo(nne),Nk=ls.hed_image_processor.default,one=e=>{const{controlNetId:t,processorNode:{detect_resolution:n,image_resolution:r,scribble:o},isEnabled:s}=e,i=B(kr),c=Ts(),d=f.useCallback(b=>{c(t,{detect_resolution:b})},[t,c]),p=f.useCallback(b=>{c(t,{image_resolution:b})},[t,c]),h=f.useCallback(b=>{c(t,{scribble:b.target.checked})},[t,c]),m=f.useCallback(()=>{c(t,{detect_resolution:Nk.detect_resolution})},[t,c]),v=f.useCallback(()=>{c(t,{image_resolution:Nk.image_resolution})},[t,c]);return a.jsxs(Ns,{children:[a.jsx(jt,{label:"Detect Resolution",value:n,onChange:d,handleReset:m,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:i||!s}),a.jsx(jt,{label:"Image Resolution",value:r,onChange:p,handleReset:v,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:i||!s}),a.jsx(yr,{label:"Scribble",isChecked:o,onChange:h,isDisabled:i||!s})]})},sne=f.memo(one),$k=ls.lineart_anime_image_processor.default,ane=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s}=n,i=Ts(),c=B(kr),d=f.useCallback(v=>{i(t,{detect_resolution:v})},[t,i]),p=f.useCallback(v=>{i(t,{image_resolution:v})},[t,i]),h=f.useCallback(()=>{i(t,{detect_resolution:$k.detect_resolution})},[t,i]),m=f.useCallback(()=>{i(t,{image_resolution:$k.image_resolution})},[t,i]);return a.jsxs(Ns,{children:[a.jsx(jt,{label:"Detect Resolution",value:s,onChange:d,handleReset:h,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:c||!r}),a.jsx(jt,{label:"Image Resolution",value:o,onChange:p,handleReset:m,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:c||!r})]})},ine=f.memo(ane),Lk=ls.lineart_image_processor.default,lne=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s,coarse:i}=n,c=Ts(),d=B(kr),p=f.useCallback(w=>{c(t,{detect_resolution:w})},[t,c]),h=f.useCallback(w=>{c(t,{image_resolution:w})},[t,c]),m=f.useCallback(()=>{c(t,{detect_resolution:Lk.detect_resolution})},[t,c]),v=f.useCallback(()=>{c(t,{image_resolution:Lk.image_resolution})},[t,c]),b=f.useCallback(w=>{c(t,{coarse:w.target.checked})},[t,c]);return a.jsxs(Ns,{children:[a.jsx(jt,{label:"Detect Resolution",value:s,onChange:p,handleReset:m,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:d||!r}),a.jsx(jt,{label:"Image Resolution",value:o,onChange:h,handleReset:v,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:d||!r}),a.jsx(yr,{label:"Coarse",isChecked:i,onChange:b,isDisabled:d||!r})]})},cne=f.memo(lne),zk=ls.mediapipe_face_processor.default,une=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{max_faces:o,min_confidence:s}=n,i=Ts(),c=B(kr),d=f.useCallback(v=>{i(t,{max_faces:v})},[t,i]),p=f.useCallback(v=>{i(t,{min_confidence:v})},[t,i]),h=f.useCallback(()=>{i(t,{max_faces:zk.max_faces})},[t,i]),m=f.useCallback(()=>{i(t,{min_confidence:zk.min_confidence})},[t,i]);return a.jsxs(Ns,{children:[a.jsx(jt,{label:"Max Faces",value:o,onChange:d,handleReset:h,withReset:!0,min:1,max:20,withInput:!0,withSliderMarks:!0,isDisabled:c||!r}),a.jsx(jt,{label:"Min Confidence",value:s,onChange:p,handleReset:m,withReset:!0,min:0,max:1,step:.01,withInput:!0,withSliderMarks:!0,isDisabled:c||!r})]})},dne=f.memo(une),Bk=ls.midas_depth_image_processor.default,fne=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{a_mult:o,bg_th:s}=n,i=Ts(),c=B(kr),d=f.useCallback(v=>{i(t,{a_mult:v})},[t,i]),p=f.useCallback(v=>{i(t,{bg_th:v})},[t,i]),h=f.useCallback(()=>{i(t,{a_mult:Bk.a_mult})},[t,i]),m=f.useCallback(()=>{i(t,{bg_th:Bk.bg_th})},[t,i]);return a.jsxs(Ns,{children:[a.jsx(jt,{label:"a_mult",value:o,onChange:d,handleReset:h,withReset:!0,min:0,max:20,step:.01,withInput:!0,withSliderMarks:!0,isDisabled:c||!r}),a.jsx(jt,{label:"bg_th",value:s,onChange:p,handleReset:m,withReset:!0,min:0,max:20,step:.01,withInput:!0,withSliderMarks:!0,isDisabled:c||!r})]})},pne=f.memo(fne),jp=ls.mlsd_image_processor.default,hne=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s,thr_d:i,thr_v:c}=n,d=Ts(),p=B(kr),h=f.useCallback(_=>{d(t,{detect_resolution:_})},[t,d]),m=f.useCallback(_=>{d(t,{image_resolution:_})},[t,d]),v=f.useCallback(_=>{d(t,{thr_d:_})},[t,d]),b=f.useCallback(_=>{d(t,{thr_v:_})},[t,d]),w=f.useCallback(()=>{d(t,{detect_resolution:jp.detect_resolution})},[t,d]),y=f.useCallback(()=>{d(t,{image_resolution:jp.image_resolution})},[t,d]),S=f.useCallback(()=>{d(t,{thr_d:jp.thr_d})},[t,d]),k=f.useCallback(()=>{d(t,{thr_v:jp.thr_v})},[t,d]);return a.jsxs(Ns,{children:[a.jsx(jt,{label:"Detect Resolution",value:s,onChange:h,handleReset:w,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:p||!r}),a.jsx(jt,{label:"Image Resolution",value:o,onChange:m,handleReset:y,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:p||!r}),a.jsx(jt,{label:"W",value:i,onChange:v,handleReset:S,withReset:!0,min:0,max:1,step:.01,withInput:!0,withSliderMarks:!0,isDisabled:p||!r}),a.jsx(jt,{label:"H",value:c,onChange:b,handleReset:k,withReset:!0,min:0,max:1,step:.01,withInput:!0,withSliderMarks:!0,isDisabled:p||!r})]})},mne=f.memo(hne),Fk=ls.normalbae_image_processor.default,gne=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s}=n,i=Ts(),c=B(kr),d=f.useCallback(v=>{i(t,{detect_resolution:v})},[t,i]),p=f.useCallback(v=>{i(t,{image_resolution:v})},[t,i]),h=f.useCallback(()=>{i(t,{detect_resolution:Fk.detect_resolution})},[t,i]),m=f.useCallback(()=>{i(t,{image_resolution:Fk.image_resolution})},[t,i]);return a.jsxs(Ns,{children:[a.jsx(jt,{label:"Detect Resolution",value:s,onChange:d,handleReset:h,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:c||!r}),a.jsx(jt,{label:"Image Resolution",value:o,onChange:p,handleReset:m,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:c||!r})]})},vne=f.memo(gne),Hk=ls.openpose_image_processor.default,bne=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s,hand_and_face:i}=n,c=Ts(),d=B(kr),p=f.useCallback(w=>{c(t,{detect_resolution:w})},[t,c]),h=f.useCallback(w=>{c(t,{image_resolution:w})},[t,c]),m=f.useCallback(()=>{c(t,{detect_resolution:Hk.detect_resolution})},[t,c]),v=f.useCallback(()=>{c(t,{image_resolution:Hk.image_resolution})},[t,c]),b=f.useCallback(w=>{c(t,{hand_and_face:w.target.checked})},[t,c]);return a.jsxs(Ns,{children:[a.jsx(jt,{label:"Detect Resolution",value:s,onChange:p,handleReset:m,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:d||!r}),a.jsx(jt,{label:"Image Resolution",value:o,onChange:h,handleReset:v,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:d||!r}),a.jsx(yr,{label:"Hand and Face",isChecked:i,onChange:b,isDisabled:d||!r})]})},yne=f.memo(bne),Wk=ls.pidi_image_processor.default,xne=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s,scribble:i,safe:c}=n,d=Ts(),p=B(kr),h=f.useCallback(S=>{d(t,{detect_resolution:S})},[t,d]),m=f.useCallback(S=>{d(t,{image_resolution:S})},[t,d]),v=f.useCallback(()=>{d(t,{detect_resolution:Wk.detect_resolution})},[t,d]),b=f.useCallback(()=>{d(t,{image_resolution:Wk.image_resolution})},[t,d]),w=f.useCallback(S=>{d(t,{scribble:S.target.checked})},[t,d]),y=f.useCallback(S=>{d(t,{safe:S.target.checked})},[t,d]);return a.jsxs(Ns,{children:[a.jsx(jt,{label:"Detect Resolution",value:s,onChange:h,handleReset:v,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:p||!r}),a.jsx(jt,{label:"Image Resolution",value:o,onChange:m,handleReset:b,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:p||!r}),a.jsx(yr,{label:"Scribble",isChecked:i,onChange:w}),a.jsx(yr,{label:"Safe",isChecked:c,onChange:y,isDisabled:p||!r})]})},wne=f.memo(xne),Sne=e=>null,Cne=f.memo(Sne),kne=e=>{const{controlNetId:t,isEnabled:n,processorNode:r}=e.controlNet;return r.type==="canny_image_processor"?a.jsx(tne,{controlNetId:t,processorNode:r,isEnabled:n}):r.type==="hed_image_processor"?a.jsx(sne,{controlNetId:t,processorNode:r,isEnabled:n}):r.type==="lineart_image_processor"?a.jsx(cne,{controlNetId:t,processorNode:r,isEnabled:n}):r.type==="content_shuffle_image_processor"?a.jsx(rne,{controlNetId:t,processorNode:r,isEnabled:n}):r.type==="lineart_anime_image_processor"?a.jsx(ine,{controlNetId:t,processorNode:r,isEnabled:n}):r.type==="mediapipe_face_processor"?a.jsx(dne,{controlNetId:t,processorNode:r,isEnabled:n}):r.type==="midas_depth_image_processor"?a.jsx(pne,{controlNetId:t,processorNode:r,isEnabled:n}):r.type==="mlsd_image_processor"?a.jsx(mne,{controlNetId:t,processorNode:r,isEnabled:n}):r.type==="normalbae_image_processor"?a.jsx(vne,{controlNetId:t,processorNode:r,isEnabled:n}):r.type==="openpose_image_processor"?a.jsx(yne,{controlNetId:t,processorNode:r,isEnabled:n}):r.type==="pidi_image_processor"?a.jsx(wne,{controlNetId:t,processorNode:r,isEnabled:n}):r.type==="zoe_depth_image_processor"?a.jsx(Cne,{controlNetId:t,processorNode:r,isEnabled:n}):null},_ne=f.memo(kne),Pne=e=>{const{controlNetId:t,isEnabled:n,shouldAutoConfig:r}=e.controlNet,o=te(),s=B(kr),i=f.useCallback(()=>{o(Q7({controlNetId:t}))},[t,o]);return a.jsx(yr,{label:"Auto configure processor","aria-label":"Auto configure processor",isChecked:r,onChange:i,isDisabled:s||!n})},jne=f.memo(Pne),Vk=e=>`${Math.round(e*100)}%`,Ine=e=>{const{beginStepPct:t,endStepPct:n,isEnabled:r,controlNetId:o}=e.controlNet,s=te(),i=f.useCallback(c=>{s(J7({controlNetId:o,beginStepPct:c[0]})),s(Z7({controlNetId:o,endStepPct:c[1]}))},[o,s]);return a.jsxs(go,{isDisabled:!r,children:[a.jsx(Bo,{children:"Begin / End Step Percentage"}),a.jsx(bi,{w:"100%",gap:2,alignItems:"center",children:a.jsxs(K6,{"aria-label":["Begin Step %","End Step %"],value:[t,n],onChange:i,min:0,max:1,step:.01,minStepsBetweenThumbs:5,isDisabled:!r,children:[a.jsx(X6,{children:a.jsx(Y6,{})}),a.jsx(vn,{label:Vk(t),placement:"top",hasArrow:!0,children:a.jsx(l1,{index:0})}),a.jsx(vn,{label:Vk(n),placement:"top",hasArrow:!0,children:a.jsx(l1,{index:1})}),a.jsx(Np,{value:0,sx:{insetInlineStart:"0 !important",insetInlineEnd:"unset !important"},children:"0%"}),a.jsx(Np,{value:.5,sx:{insetInlineStart:"50% !important",transform:"translateX(-50%)"},children:"50%"}),a.jsx(Np,{value:1,sx:{insetInlineStart:"unset !important",insetInlineEnd:"0 !important"},children:"100%"})]})})]})},Ene=f.memo(Ine),One=[{label:"Balanced",value:"balanced"},{label:"Prompt",value:"more_prompt"},{label:"Control",value:"more_control"},{label:"Mega Control",value:"unbalanced"}];function Rne(e){const{controlMode:t,isEnabled:n,controlNetId:r}=e.controlNet,o=te(),s=f.useCallback(i=>{o(eM({controlNetId:r,controlMode:i}))},[r,o]);return a.jsx(Fr,{disabled:!n,label:"Control Mode",data:One,value:String(t),onChange:s})}const Mne=be(bO,e=>cs(ls,n=>({value:n.type,label:n.label})).sort((n,r)=>n.value==="none"?-1:r.value==="none"?1:n.label.localeCompare(r.label)).filter(n=>!e.sd.disabledControlNetProcessors.includes(n.value)),Ke),Dne=e=>{const t=te(),{controlNetId:n,isEnabled:r,processorNode:o}=e.controlNet,s=B(kr),i=B(Mne),c=f.useCallback(d=>{t(tM({controlNetId:n,processorType:d}))},[n,t]);return a.jsx(ar,{label:"Processor",value:o.type??"canny_image_processor",data:i,onChange:c,disabled:s||!r})},Ane=f.memo(Dne),Tne=[{label:"Resize",value:"just_resize"},{label:"Crop",value:"crop_resize"},{label:"Fill",value:"fill_resize"}];function Nne(e){const{resizeMode:t,isEnabled:n,controlNetId:r}=e.controlNet,o=te(),s=f.useCallback(i=>{o(nM({controlNetId:r,resizeMode:i}))},[r,o]);return a.jsx(Fr,{disabled:!n,label:"Resize Mode",data:Tne,value:String(t),onChange:s})}const $ne=e=>{const{controlNet:t}=e,{controlNetId:n}=t,r=te(),o=be(at,({controlNet:v})=>{const b=v.controlNets[n];if(!b)return{isEnabled:!1,shouldAutoConfig:!1};const{isEnabled:w,shouldAutoConfig:y}=b;return{isEnabled:w,shouldAutoConfig:y}},Ke),{isEnabled:s,shouldAutoConfig:i}=B(o),[c,d]=Nee(!1),p=f.useCallback(()=>{r(rM({controlNetId:n}))},[n,r]),h=f.useCallback(()=>{r(oM({sourceControlNetId:n,newControlNetId:vi()}))},[n,r]),m=f.useCallback(()=>{r(sM({controlNetId:n}))},[n,r]);return a.jsxs(H,{sx:{flexDir:"column",gap:3,p:3,borderRadius:"base",position:"relative",bg:"base.200",_dark:{bg:"base.850"}},children:[a.jsxs(H,{sx:{gap:2,alignItems:"center"},children:[a.jsx(yr,{tooltip:"Toggle this ControlNet","aria-label":"Toggle this ControlNet",isChecked:s,onChange:m}),a.jsx(Oe,{sx:{w:"full",minW:0,opacity:s?1:.5,pointerEvents:s?"auto":"none",transitionProperty:"common",transitionDuration:"0.1s"},children:a.jsx(Xte,{controlNet:t})}),a.jsx(ze,{size:"sm",tooltip:"Duplicate","aria-label":"Duplicate",onClick:h,icon:a.jsx(Kc,{})}),a.jsx(ze,{size:"sm",tooltip:"Delete","aria-label":"Delete",colorScheme:"error",onClick:p,icon:a.jsx(Oo,{})}),a.jsx(ze,{size:"sm",tooltip:c?"Hide Advanced":"Show Advanced","aria-label":c?"Hide Advanced":"Show Advanced",onClick:d,variant:"ghost",sx:{_hover:{bg:"none"}},icon:a.jsx(Hy,{sx:{boxSize:4,color:"base.700",transform:c?"rotate(0deg)":"rotate(180deg)",transitionProperty:"common",transitionDuration:"normal",_dark:{color:"base.300"}}})}),!i&&a.jsx(Oe,{sx:{position:"absolute",w:1.5,h:1.5,borderRadius:"full",top:4,insetInlineEnd:4,bg:"accent.700",_dark:{bg:"accent.400"}}})]}),a.jsxs(H,{sx:{w:"full",flexDirection:"column",gap:3},children:[a.jsxs(H,{sx:{gap:4,w:"full",alignItems:"center"},children:[a.jsxs(H,{sx:{flexDir:"column",gap:3,h:28,w:"full",paddingInlineStart:1,paddingInlineEnd:c?1:0,pb:2,justifyContent:"space-between"},children:[a.jsx(Qte,{controlNet:t}),a.jsx(Ene,{controlNet:t})]}),!c&&a.jsx(H,{sx:{alignItems:"center",justifyContent:"center",h:28,w:28,aspectRatio:"1/1"},children:a.jsx(Ak,{controlNet:t,height:28})})]}),a.jsxs(H,{sx:{gap:2},children:[a.jsx(Rne,{controlNet:t}),a.jsx(Nne,{controlNet:t})]}),a.jsx(Ane,{controlNet:t})]}),c&&a.jsxs(a.Fragment,{children:[a.jsx(Ak,{controlNet:t,height:"392px"}),a.jsx(jne,{controlNet:t}),a.jsx(_ne,{controlNet:t})]})]})},Lne=f.memo($ne),zne=be(at,e=>{const{isEnabled:t}=e.controlNet;return{isEnabled:t}},Ke),Bne=()=>{const{isEnabled:e}=B(zne),t=te(),n=f.useCallback(()=>{t(aM())},[t]);return a.jsx(yr,{label:"Enable ControlNet",isChecked:e,onChange:n,formControlProps:{width:"100%"}})},Fne=be([at],({controlNet:e})=>{const{controlNets:t,isEnabled:n}=e,r=iM(t),o=n&&r.length>0?`${r.length} Active`:void 0;return{controlNetsArray:cs(t),activeLabel:o}},Ke),Hne=()=>{const{controlNetsArray:e,activeLabel:t}=B(Fne),n=ir("controlNet").isFeatureDisabled,r=te(),{firstModel:o}=ub(void 0,{selectFromResult:i=>({firstModel:i.data?lM.getSelectors().selectAll(i.data)[0]:void 0})}),s=f.useCallback(()=>{if(!o)return;const i=vi();r(cM({controlNetId:i})),r(n5({controlNetId:i,model:o}))},[r,o]);return n?null:a.jsx(bo,{label:"ControlNet",activeLabel:t,children:a.jsxs(H,{sx:{flexDir:"column",gap:3},children:[a.jsxs(H,{gap:2,alignItems:"center",children:[a.jsx(H,{sx:{flexDirection:"column",w:"100%",gap:2,px:4,py:2,borderRadius:4,bg:"base.200",_dark:{bg:"base.850"}},children:a.jsx(Bne,{})}),a.jsx(ze,{tooltip:"Add ControlNet","aria-label":"Add ControlNet",icon:a.jsx(yl,{}),isDisabled:!o,flexGrow:1,size:"md",onClick:s})]}),e.map((i,c)=>a.jsxs(f.Fragment,{children:[c>0&&a.jsx(Ka,{}),a.jsx(Lne,{controlNet:i})]},i.controlNetId))]})})},Jc=f.memo(Hne),Wne=be(at,e=>{const{shouldUseNoiseSettings:t,shouldUseCpuNoise:n}=e.generation;return{isDisabled:!t,shouldUseCpuNoise:n}},Ke),Vne=()=>{const e=te(),{isDisabled:t,shouldUseCpuNoise:n}=B(Wne),r=o=>e(uM(o.target.checked));return a.jsx(yr,{isDisabled:t,label:"Use CPU Noise",isChecked:n,onChange:r})},Une=be(at,e=>{const{shouldUseNoiseSettings:t,threshold:n}=e.generation;return{isDisabled:!t,threshold:n}},Ke);function Gne(){const e=te(),{threshold:t,isDisabled:n}=B(Une),{t:r}=ye();return a.jsx(jt,{isDisabled:n,label:r("parameters.noiseThreshold"),min:0,max:20,step:.1,onChange:o=>e(lw(o)),handleReset:()=>e(lw(0)),value:t,withInput:!0,withReset:!0,withSliderMarks:!0})}const qne=()=>{const e=te(),t=B(r=>r.generation.shouldUseNoiseSettings),n=r=>e(dM(r.target.checked));return a.jsx(yr,{label:"Enable Noise Settings",isChecked:t,onChange:n})},Kne=be(at,e=>{const{shouldUseNoiseSettings:t,perlin:n}=e.generation;return{isDisabled:!t,perlin:n}},Ke);function Xne(){const e=te(),{perlin:t,isDisabled:n}=B(Kne),{t:r}=ye();return a.jsx(jt,{isDisabled:n,label:r("parameters.perlinNoise"),min:0,max:1,step:.05,onChange:o=>e(cw(o)),handleReset:()=>e(cw(0)),value:t,withInput:!0,withReset:!0,withSliderMarks:!0})}const Yne=be(at,e=>{const{shouldUseNoiseSettings:t}=e.generation;return{activeLabel:t?"Enabled":void 0}},Ke),Qne=()=>{const{t:e}=ye(),t=ir("noise").isFeatureEnabled,n=ir("perlinNoise").isFeatureEnabled,r=ir("noiseThreshold").isFeatureEnabled,{activeLabel:o}=B(Yne);return t?a.jsx(bo,{label:e("parameters.noiseSettings"),activeLabel:o,children:a.jsxs(H,{sx:{gap:2,flexDirection:"column"},children:[a.jsx(qne,{}),a.jsx(Vne,{}),n&&a.jsx(Xne,{}),r&&a.jsx(Gne,{})]})}):null},Jd=f.memo(Qne),Jne=be(vo,e=>({isProcessing:e.isProcessing,isConnected:e.isConnected,isCancelable:e.isCancelable,currentIteration:e.currentIteration,totalIterations:e.totalIterations,sessionId:e.sessionId,cancelType:e.cancelType,isCancelScheduled:e.isCancelScheduled}),{memoizeOptions:{resultEqualityCheck:Zt}}),Zne=e=>{const t=te(),{btnGroupWidth:n="auto",...r}=e,{isProcessing:o,isConnected:s,isCancelable:i,cancelType:c,isCancelScheduled:d,sessionId:p}=B(Jne),h=f.useCallback(()=>{if(p){if(c==="scheduled"){t(fM());return}t(pM({session_id:p}))}},[t,p,c]),{t:m}=ye(),v=f.useCallback(y=>{const S=Array.isArray(y)?y[0]:y;t(hM(S))},[t]);tt("shift+x",()=>{(s||o)&&i&&h()},[s,o,i]);const b=f.useMemo(()=>m(d?"parameters.cancel.isScheduled":c==="immediate"?"parameters.cancel.immediate":"parameters.cancel.schedule"),[m,c,d]),w=f.useMemo(()=>d?a.jsx(Jp,{}):c==="immediate"?a.jsx(ote,{}):a.jsx(ete,{}),[c,d]);return a.jsxs(rr,{isAttached:!0,width:n,children:[a.jsx(ze,{icon:w,tooltip:b,"aria-label":b,isDisabled:!s||!o||!i,onClick:h,colorScheme:"error",id:"cancel-button",...r}),a.jsxs($d,{closeOnSelect:!1,children:[a.jsx(Ld,{as:ze,tooltip:m("parameters.cancel.setType"),"aria-label":m("parameters.cancel.setType"),icon:a.jsx($J,{w:"1em",h:"1em"}),paddingX:0,paddingY:0,colorScheme:"error",minWidth:5,...r}),a.jsx(il,{minWidth:"240px",children:a.jsxs(S6,{value:c,title:"Cancel Type",type:"radio",onChange:v,children:[a.jsx(sh,{value:"immediate",children:m("parameters.cancel.immediate")}),a.jsx(sh,{value:"scheduled",children:m("parameters.cancel.schedule")})]})})]})]})},cg=f.memo(Zne),ere=be([at,Kn],(e,t)=>{const{generation:n,system:r}=e,{initialImage:o}=n,{isProcessing:s,isConnected:i}=r;let c=!0;const d=[];t==="img2img"&&!o&&(c=!1,d.push("No initial image selected"));const{isSuccess:p}=mM.endpoints.getMainModels.select(td)(e);return p||(c=!1,d.push("Models are not loaded")),s&&(c=!1,d.push("System Busy")),i||(c=!1,d.push("System Disconnected")),oo(e.controlNet.controlNets,(h,m)=>{h.model||(c=!1,d.push(`ControlNet ${m} has no model selected.`))}),{isReady:c,reasonsWhyNotReady:d}},Ke),Zd=()=>{const{isReady:e}=B(ere);return e},tre=be(vo,e=>({isProcessing:e.isProcessing,currentStep:e.currentStep,totalSteps:e.totalSteps,currentStatusHasSteps:e.currentStatusHasSteps}),{memoizeOptions:{resultEqualityCheck:Zt}}),nre=()=>{const{t:e}=ye(),{isProcessing:t,currentStep:n,totalSteps:r,currentStatusHasSteps:o}=B(tre),s=n?Math.round(n*100/r):0;return a.jsx(N6,{value:s,"aria-label":e("accessibility.invokeProgressBar"),isIndeterminate:t&&!o,height:"full",colorScheme:"accent"})},DO=f.memo(nre),Uk={_disabled:{bg:"none",color:"base.600",cursor:"not-allowed",_hover:{color:"base.600",bg:"none"}}},rre=be([at,Kn,kr],({gallery:e},t,n)=>{const{autoAddBoardId:r}=e;return{isBusy:n,autoAddBoardId:r,activeTabName:t}},Ke);function nx(e){const{iconButton:t=!1,...n}=e,r=te(),o=Zd(),{isBusy:s,autoAddBoardId:i,activeTabName:c}=B(rre),d=eg(i),p=f.useCallback(()=>{r(_d()),r(Pd(c))},[r,c]),{t:h}=ye();return tt(["ctrl+enter","meta+enter"],p,{enabled:()=>o,preventDefault:!0,enableOnFormTags:["input","textarea","select"]},[o,c]),a.jsx(Oe,{style:{flexGrow:4},position:"relative",children:a.jsxs(Oe,{style:{position:"relative"},children:[!o&&a.jsx(Oe,{borderRadius:"base",style:{position:"absolute",bottom:"0",left:"0",right:"0",height:"100%",overflow:"clip"},...n,children:a.jsx(DO,{})}),a.jsx(vn,{placement:"top",hasArrow:!0,openDelay:500,label:i?`Auto-Adding to ${d}`:void 0,children:t?a.jsx(ze,{"aria-label":h("parameters.invoke"),type:"submit",icon:a.jsx(aE,{}),isDisabled:!o||s,onClick:p,tooltip:h("parameters.invoke"),tooltipProps:{placement:"top"},colorScheme:"accent",id:"invoke-button",...n,sx:{w:"full",flexGrow:1,...s?Uk:{}}}):a.jsx(Yt,{"aria-label":h("parameters.invoke"),type:"submit",isDisabled:!o||s,onClick:p,colorScheme:"accent",id:"invoke-button",...n,sx:{w:"full",flexGrow:1,fontWeight:700,...s?Uk:{}},children:"Invoke"})})]})})}const Zc=()=>a.jsxs(H,{gap:2,children:[a.jsx(nx,{}),a.jsx(cg,{})]}),rx=e=>{e.stopPropagation()},ore=Ae((e,t)=>{const n=te(),r=f.useCallback(s=>{s.shiftKey&&n(Io(!0))},[n]),o=f.useCallback(s=>{s.shiftKey||n(Io(!1))},[n]);return a.jsx(ry,{ref:t,onPaste:rx,onKeyDown:r,onKeyUp:o,...e})}),ug=f.memo(ore),sre=e=>{const{onClick:t}=e;return a.jsx(ze,{size:"sm","aria-label":"Add Embedding",tooltip:"Add Embedding",icon:a.jsx(Sy,{}),sx:{p:2,color:"base.500",_hover:{color:"base.600"},_active:{color:"base.700"},_dark:{color:"base.500",_hover:{color:"base.400"},_active:{color:"base.300"}}},variant:"link",onClick:t})},dg=f.memo(sre),ox="28rem",fg=e=>{const{onSelect:t,isOpen:n,onClose:r,children:o}=e,{data:s}=gM(),i=f.useRef(null),c=B(h=>h.generation.model),d=f.useMemo(()=>{if(!s)return[];const h=[];return oo(s.entities,(m,v)=>{if(!m)return;const b=(c==null?void 0:c.base_model)!==m.base_model;h.push({value:m.model_name,label:m.model_name,group:Qn[m.base_model],disabled:b,tooltip:b?`Incompatible base model: ${m.base_model}`:void 0})}),h.sort((m,v)=>{var b;return m.label&&v.label?(b=m.label)!=null&&b.localeCompare(v.label)?-1:1:-1}),h.sort((m,v)=>m.disabled&&!v.disabled?1:-1)},[s,c==null?void 0:c.base_model]),p=f.useCallback(h=>{h&&t(h)},[t]);return a.jsxs(ey,{initialFocusRef:i,isOpen:n,onClose:r,placement:"bottom",openDelay:0,closeDelay:0,closeOnBlur:!0,returnFocusOnClose:!0,children:[a.jsx(Zb,{children:o}),a.jsx(ty,{sx:{p:0,top:-1,shadow:"dark-lg",borderColor:"accent.300",borderWidth:"2px",borderStyle:"solid",_dark:{borderColor:"accent.400"}},children:a.jsx(A6,{sx:{p:0,w:`calc(${ox} - 2rem )`},children:d.length===0?a.jsx(H,{sx:{justifyContent:"center",p:2,fontSize:"sm",color:"base.500",_dark:{color:"base.700"}},children:a.jsx(Je,{children:"No Embeddings Loaded"})}):a.jsx(ar,{inputRef:i,autoFocus:!0,placeholder:"Add Embedding",value:null,data:d,nothingFound:"No matching Embeddings",itemComponent:Oi,disabled:d.length===0,onDropdownClose:r,filter:(h,m)=>{var v;return((v=m.label)==null?void 0:v.toLowerCase().includes(h.toLowerCase().trim()))||m.value.toLowerCase().includes(h.toLowerCase().trim())},onChange:p})})})]})},AO=()=>{const e=B(m=>m.generation.negativePrompt),t=f.useRef(null),{isOpen:n,onClose:r,onOpen:o}=ss(),s=te(),{t:i}=ye(),c=f.useCallback(m=>{s(Wu(m.target.value))},[s]),d=f.useCallback(m=>{m.key==="<"&&o()},[o]),p=f.useCallback(m=>{if(!t.current)return;const v=t.current.selectionStart;if(v===void 0)return;let b=e.slice(0,v);b[b.length-1]!=="<"&&(b+="<"),b+=`${m}>`;const w=b.length;b+=e.slice(v),_i.flushSync(()=>{s(Wu(b))}),t.current.selectionEnd=w,r()},[s,r,e]),h=ir("embedding").isFeatureEnabled;return a.jsxs(go,{children:[a.jsx(fg,{isOpen:n,onClose:r,onSelect:p,children:a.jsx(ug,{id:"negativePrompt",name:"negativePrompt",ref:t,value:e,placeholder:i("parameters.negativePromptPlaceholder"),onChange:c,resize:"vertical",fontSize:"sm",minH:16,...h&&{onKeyDown:d}})}),!n&&h&&a.jsx(Oe,{sx:{position:"absolute",top:0,insetInlineEnd:0},children:a.jsx(dg,{onClick:o})})]})},are=be([at,Kn],({generation:e,ui:t},n)=>({shouldPinParametersPanel:t.shouldPinParametersPanel,prompt:e.positivePrompt,activeTabName:n}),{memoizeOptions:{resultEqualityCheck:Zt}}),TO=()=>{const e=te(),{prompt:t,shouldPinParametersPanel:n,activeTabName:r}=B(are),o=Zd(),s=f.useRef(null),{isOpen:i,onClose:c,onOpen:d}=ss(),{t:p}=ye(),h=f.useCallback(w=>{e(Hu(w.target.value))},[e]);tt("alt+a",()=>{var w;(w=s.current)==null||w.focus()},[]);const m=f.useCallback(w=>{if(!s.current)return;const y=s.current.selectionStart;if(y===void 0)return;let S=t.slice(0,y);S[S.length-1]!=="<"&&(S+="<"),S+=`${w}>`;const k=S.length;S+=t.slice(y),_i.flushSync(()=>{e(Hu(S))}),s.current.selectionStart=k,s.current.selectionEnd=k,c()},[e,c,t]),v=ir("embedding").isFeatureEnabled,b=f.useCallback(w=>{w.key==="Enter"&&w.shiftKey===!1&&o&&(w.preventDefault(),e(_d()),e(Pd(r))),v&&w.key==="<"&&d()},[o,e,r,d,v]);return a.jsxs(Oe,{position:"relative",children:[a.jsx(go,{children:a.jsx(fg,{isOpen:i,onClose:c,onSelect:m,children:a.jsx(ug,{id:"prompt",name:"prompt",ref:s,value:t,placeholder:p("parameters.positivePromptPlaceholder"),onChange:h,onKeyDown:b,resize:"vertical",minH:32})})}),!i&&v&&a.jsx(Oe,{sx:{position:"absolute",top:n?5:0,insetInlineEnd:0},children:a.jsx(dg,{onClick:d})})]})};function ire(){const e=B(o=>o.sdxl.shouldConcatSDXLStylePrompt),t=B(o=>o.ui.shouldPinParametersPanel),n=te(),r=()=>{n(vM(!e))};return a.jsx(ze,{"aria-label":"Concatenate Prompt & Style",tooltip:"Concatenate Prompt & Style",variant:"outline",isChecked:e,onClick:r,icon:a.jsx(oE,{}),size:"xs",sx:{position:"absolute",insetInlineEnd:1,top:t?12:20,border:"none",color:e?"accent.500":"base.500",_hover:{bg:"none"}}})}const Gk={position:"absolute",bg:"none",w:"full",minH:2,borderRadius:0,borderLeft:"none",borderRight:"none",zIndex:2,maskImage:"radial-gradient(circle at center, black, black 65%, black 30%, black 15%, transparent)"};function NO(){return a.jsxs(H,{children:[a.jsx(Oe,{as:Er.div,initial:{scaleX:0,borderWidth:0,display:"none"},animate:{display:["block","block","block","none"],scaleX:[0,.25,.5,1],borderWidth:[0,3,3,0],transition:{duration:.37,times:[0,.25,.5,1]}},sx:{top:"1px",borderTop:"none",borderColor:"base.400",...Gk,_dark:{borderColor:"accent.500"}}}),a.jsx(Oe,{as:Er.div,initial:{opacity:0,scale:0},animate:{opacity:[0,1,1,1],scale:[0,.75,1.5,1],transition:{duration:.42,times:[0,.25,.5,1]}},exit:{opacity:0,scale:0},sx:{zIndex:3,position:"absolute",left:"48%",top:"3px",p:1,borderRadius:4,bg:"accent.400",color:"base.50",_dark:{bg:"accent.500"}},children:a.jsx(oE,{size:12})}),a.jsx(Oe,{as:Er.div,initial:{scaleX:0,borderWidth:0,display:"none"},animate:{display:["block","block","block","none"],scaleX:[0,.25,.5,1],borderWidth:[0,3,3,0],transition:{duration:.37,times:[0,.25,.5,1]}},sx:{top:"17px",borderBottom:"none",borderColor:"base.400",...Gk,_dark:{borderColor:"accent.500"}}})]})}const lre=be([at,Kn],({sdxl:e},t)=>{const{negativeStylePrompt:n,shouldConcatSDXLStylePrompt:r}=e;return{prompt:n,shouldConcatSDXLStylePrompt:r,activeTabName:t}},{memoizeOptions:{resultEqualityCheck:Zt}}),cre=()=>{const e=te(),t=Zd(),n=f.useRef(null),{isOpen:r,onClose:o,onOpen:s}=ss(),{prompt:i,activeTabName:c,shouldConcatSDXLStylePrompt:d}=B(lre),p=f.useCallback(b=>{e(Uu(b.target.value))},[e]),h=f.useCallback(b=>{if(!n.current)return;const w=n.current.selectionStart;if(w===void 0)return;let y=i.slice(0,w);y[y.length-1]!=="<"&&(y+="<"),y+=`${b}>`;const S=y.length;y+=i.slice(w),_i.flushSync(()=>{e(Uu(y))}),n.current.selectionStart=S,n.current.selectionEnd=S,o()},[e,o,i]),m=ir("embedding").isFeatureEnabled,v=f.useCallback(b=>{b.key==="Enter"&&b.shiftKey===!1&&t&&(b.preventDefault(),e(_d()),e(Pd(c))),m&&b.key==="<"&&s()},[t,e,c,s,m]);return a.jsxs(Oe,{position:"relative",children:[a.jsx(mo,{children:d&&a.jsx(Oe,{sx:{position:"absolute",left:"3",w:"94%",top:"-17px"},children:a.jsx(NO,{})})}),a.jsx(go,{children:a.jsx(fg,{isOpen:r,onClose:o,onSelect:h,children:a.jsx(ug,{id:"prompt",name:"prompt",ref:n,value:i,placeholder:"Negative Style Prompt",onChange:p,onKeyDown:v,resize:"vertical",fontSize:"sm",minH:16})})}),!r&&m&&a.jsx(Oe,{sx:{position:"absolute",top:0,insetInlineEnd:0},children:a.jsx(dg,{onClick:s})})]})},ure=be([at,Kn],({sdxl:e},t)=>{const{positiveStylePrompt:n,shouldConcatSDXLStylePrompt:r}=e;return{prompt:n,shouldConcatSDXLStylePrompt:r,activeTabName:t}},{memoizeOptions:{resultEqualityCheck:Zt}}),dre=()=>{const e=te(),t=Zd(),n=f.useRef(null),{isOpen:r,onClose:o,onOpen:s}=ss(),{prompt:i,activeTabName:c,shouldConcatSDXLStylePrompt:d}=B(ure),p=f.useCallback(b=>{e(Vu(b.target.value))},[e]),h=f.useCallback(b=>{if(!n.current)return;const w=n.current.selectionStart;if(w===void 0)return;let y=i.slice(0,w);y[y.length-1]!=="<"&&(y+="<"),y+=`${b}>`;const S=y.length;y+=i.slice(w),_i.flushSync(()=>{e(Vu(y))}),n.current.selectionStart=S,n.current.selectionEnd=S,o()},[e,o,i]),m=ir("embedding").isFeatureEnabled,v=f.useCallback(b=>{b.key==="Enter"&&b.shiftKey===!1&&t&&(b.preventDefault(),e(_d()),e(Pd(c))),m&&b.key==="<"&&s()},[t,e,c,s,m]);return a.jsxs(Oe,{position:"relative",children:[a.jsx(mo,{children:d&&a.jsx(Oe,{sx:{position:"absolute",left:"3",w:"94%",top:"-17px"},children:a.jsx(NO,{})})}),a.jsx(go,{children:a.jsx(fg,{isOpen:r,onClose:o,onSelect:h,children:a.jsx(ug,{id:"prompt",name:"prompt",ref:n,value:i,placeholder:"Positive Style Prompt",onChange:p,onKeyDown:v,resize:"vertical",minH:16})})}),!r&&m&&a.jsx(Oe,{sx:{position:"absolute",top:0,insetInlineEnd:0},children:a.jsx(dg,{onClick:s})})]})};function sx(){return a.jsxs(H,{sx:{flexDirection:"column",gap:2},children:[a.jsx(TO,{}),a.jsx(ire,{}),a.jsx(dre,{}),a.jsx(AO,{}),a.jsx(cre,{})]})}const lm=/^-?(0\.)?\.?$/,fre=e=>{const{label:t,isDisabled:n=!1,showStepper:r=!0,isInvalid:o,value:s,onChange:i,min:c,max:d,isInteger:p=!0,formControlProps:h,formLabelProps:m,numberInputFieldProps:v,numberInputStepperProps:b,tooltipProps:w,...y}=e,S=te(),[k,_]=f.useState(String(s));f.useEffect(()=>{!k.match(lm)&&s!==Number(k)&&_(String(s))},[s,k]);const P=R=>{_(R),R.match(lm)||i(p?Math.floor(Number(R)):Number(R))},I=R=>{const M=Es(p?Math.floor(Number(R.target.value)):Number(R.target.value),c,d);_(String(M)),i(M)},E=f.useCallback(R=>{R.shiftKey&&S(Io(!0))},[S]),O=f.useCallback(R=>{R.shiftKey||S(Io(!1))},[S]);return a.jsx(vn,{...w,children:a.jsxs(go,{isDisabled:n,isInvalid:o,...h,children:[t&&a.jsx(Bo,{...m,children:t}),a.jsxs(jm,{value:k,min:c,max:d,keepWithinRange:!0,clampValueOnBlur:!1,onChange:P,onBlur:I,...y,onPaste:rx,children:[a.jsx(Em,{...v,onKeyDown:E,onKeyUp:O}),r&&a.jsxs(Im,{children:[a.jsx(Rm,{...b}),a.jsx(Om,{...b})]})]})]})})},eu=f.memo(fre),Sl=()=>{const{isRefinerAvailable:e}=na(db,{selectFromResult:({data:t})=>({isRefinerAvailable:t?t.ids.length>0:!1})});return e},pre=be([at],({sdxl:e,ui:t,hotkeys:n})=>{const{refinerCFGScale:r}=e,{shouldUseSliders:o}=t,{shift:s}=n;return{refinerCFGScale:r,shouldUseSliders:o,shift:s}},Ke),hre=()=>{const{refinerCFGScale:e,shouldUseSliders:t,shift:n}=B(pre),r=Sl(),o=te(),{t:s}=ye(),i=f.useCallback(d=>o(Dv(d)),[o]),c=f.useCallback(()=>o(Dv(7)),[o]);return t?a.jsx(jt,{label:s("parameters.cfgScale"),step:n?.1:.5,min:1,max:20,onChange:i,handleReset:c,value:e,sliderNumberInputProps:{max:200},withInput:!0,withReset:!0,withSliderMarks:!0,isInteger:!1,isDisabled:!r}):a.jsx(eu,{label:s("parameters.cfgScale"),step:.5,min:1,max:200,onChange:i,value:e,isInteger:!1,numberInputFieldProps:{textAlign:"center"},isDisabled:!r})},mre=f.memo(hre),gre=e=>{const t=kd("models"),[n,r,o]=e.split("/"),s=bM.safeParse({base_model:n,model_name:o,model_type:r});if(!s.success){t.error({mainModelId:e,errors:s.error.format()},"Failed to parse main model id");return}return s.data};function ef(e){const{iconMode:t=!1}=e,n=te(),{t:r}=ye(),[o,{isLoading:s}]=yM(),i=()=>{o().unwrap().then(c=>{n(On(Mn({title:`${r("modelManager.modelsSynced")}`,status:"success"})))}).catch(c=>{c&&n(On(Mn({title:`${r("modelManager.modelSyncFailed")}`,status:"error"})))})};return t?a.jsx(ze,{icon:a.jsx(cE,{}),tooltip:r("modelManager.syncModels"),"aria-label":r("modelManager.syncModels"),isLoading:s,onClick:i,size:"sm"}):a.jsx(Yt,{isLoading:s,onClick:i,minW:"max-content",children:"Sync Models"})}const vre=be(at,e=>({model:e.sdxl.refinerModel}),Ke),bre=()=>{const e=te(),t=ir("syncModels").isFeatureEnabled,{model:n}=B(vre),{data:r,isLoading:o}=na(db),s=f.useMemo(()=>{if(!r)return[];const d=[];return oo(r.entities,(p,h)=>{p&&d.push({value:h,label:p.model_name,group:Qn[p.base_model]})}),d},[r]),i=f.useMemo(()=>(r==null?void 0:r.entities[`${n==null?void 0:n.base_model}/main/${n==null?void 0:n.model_name}`])??null,[r==null?void 0:r.entities,n]),c=f.useCallback(d=>{if(!d)return;const p=gre(d);p&&e(q_(p))},[e]);return o?a.jsx(ar,{label:"Refiner Model",placeholder:"Loading...",disabled:!0,data:[]}):a.jsxs(H,{w:"100%",alignItems:"center",gap:2,children:[a.jsx(ar,{tooltip:i==null?void 0:i.description,label:"Refiner Model",value:i==null?void 0:i.id,placeholder:s.length>0?"Select a model":"No models available",data:s,error:s.length===0,disabled:s.length===0,onChange:c,w:"100%"}),t&&a.jsx(Oe,{mt:7,children:a.jsx(ef,{iconMode:!0})})]})},yre=f.memo(bre),xre=be([at],({sdxl:e,hotkeys:t})=>{const{refinerNegativeAestheticScore:n}=e,{shift:r}=t;return{refinerNegativeAestheticScore:n,shift:r}},Ke),wre=()=>{const{refinerNegativeAestheticScore:e,shift:t}=B(xre),n=Sl(),r=te(),o=f.useCallback(i=>r(Tv(i)),[r]),s=f.useCallback(()=>r(Tv(2.5)),[r]);return a.jsx(jt,{label:"Negative Aesthetic Score",step:t?.1:.5,min:1,max:10,onChange:o,handleReset:s,value:e,sliderNumberInputProps:{max:10},withInput:!0,withReset:!0,withSliderMarks:!0,isInteger:!1,isDisabled:!n})},Sre=f.memo(wre),Cre=be([at],({sdxl:e,hotkeys:t})=>{const{refinerPositiveAestheticScore:n}=e,{shift:r}=t;return{refinerPositiveAestheticScore:n,shift:r}},Ke),kre=()=>{const{refinerPositiveAestheticScore:e,shift:t}=B(Cre),n=Sl(),r=te(),o=f.useCallback(i=>r(Av(i)),[r]),s=f.useCallback(()=>r(Av(6)),[r]);return a.jsx(jt,{label:"Positive Aesthetic Score",step:t?.1:.5,min:1,max:10,onChange:o,handleReset:s,value:e,sliderNumberInputProps:{max:10},withInput:!0,withReset:!0,withSliderMarks:!0,isInteger:!1,isDisabled:!n})},_re=f.memo(kre),Pre=be(at,({ui:e,sdxl:t})=>{const{refinerScheduler:n}=t,{favoriteSchedulers:r}=e,o=cs(cb,(s,i)=>({value:i,label:s,group:r.includes(i)?"Favorites":void 0})).sort((s,i)=>s.label.localeCompare(i.label));return{refinerScheduler:n,data:o}},Ke),jre=()=>{const e=te(),{t}=ye(),{refinerScheduler:n,data:r}=B(Pre),o=Sl(),s=f.useCallback(i=>{i&&e(K_(i))},[e]);return a.jsx(ar,{w:"100%",label:t("parameters.scheduler"),value:n,data:r,onChange:s,disabled:!o})},Ire=f.memo(jre),Ere=be([at],({sdxl:e})=>{const{refinerStart:t}=e;return{refinerStart:t}},Ke),Ore=()=>{const{refinerStart:e}=B(Ere),t=te(),n=Sl(),r=f.useCallback(s=>t(Nv(s)),[t]),o=f.useCallback(()=>t(Nv(.7)),[t]);return a.jsx(jt,{label:"Refiner Start",step:.01,min:0,max:1,onChange:r,handleReset:o,value:e,withInput:!0,withReset:!0,withSliderMarks:!0,isInteger:!1,isDisabled:!n})},Rre=f.memo(Ore),Mre=be([at],({sdxl:e,ui:t})=>{const{refinerSteps:n}=e,{shouldUseSliders:r}=t;return{refinerSteps:n,shouldUseSliders:r}},Ke),Dre=()=>{const{refinerSteps:e,shouldUseSliders:t}=B(Mre),n=Sl(),r=te(),{t:o}=ye(),s=f.useCallback(c=>{r(Mv(c))},[r]),i=f.useCallback(()=>{r(Mv(20))},[r]);return t?a.jsx(jt,{label:o("parameters.steps"),min:1,max:100,step:1,onChange:s,handleReset:i,value:e,withInput:!0,withReset:!0,withSliderMarks:!0,sliderNumberInputProps:{max:500},isDisabled:!n}):a.jsx(eu,{label:o("parameters.steps"),min:1,max:500,step:1,onChange:s,value:e,numberInputFieldProps:{textAlign:"center"},isDisabled:!n})},Are=f.memo(Dre);function Tre(){const e=B(o=>o.sdxl.shouldUseSDXLRefiner),t=Sl(),n=te(),r=o=>{n(xM(o.target.checked))};return a.jsx(yr,{label:"Use Refiner",isChecked:e,onChange:r,isDisabled:!t})}const Nre=be(at,e=>{const{shouldUseSDXLRefiner:t}=e.sdxl,{shouldUseSliders:n}=e.ui;return{activeLabel:t?"Enabled":void 0,shouldUseSliders:n}},Ke),ax=()=>{const{activeLabel:e,shouldUseSliders:t}=B(Nre);return a.jsx(bo,{label:"Refiner",activeLabel:e,children:a.jsxs(H,{sx:{gap:2,flexDir:"column"},children:[a.jsx(Tre,{}),a.jsx(yre,{}),a.jsxs(H,{gap:2,flexDirection:t?"column":"row",children:[a.jsx(Are,{}),a.jsx(mre,{})]}),a.jsx(Ire,{}),a.jsx(_re,{}),a.jsx(Sre,{}),a.jsx(Rre,{})]})})},$re=be([at],({generation:e,config:t,ui:n,hotkeys:r})=>{const{initial:o,min:s,sliderMax:i,inputMax:c}=t.sd.guidance,{cfgScale:d}=e,{shouldUseSliders:p}=n,{shift:h}=r;return{cfgScale:d,initial:o,min:s,sliderMax:i,inputMax:c,shouldUseSliders:p,shift:h}},Ke),Lre=()=>{const{cfgScale:e,initial:t,min:n,sliderMax:r,inputMax:o,shouldUseSliders:s,shift:i}=B($re),c=te(),{t:d}=ye(),p=f.useCallback(m=>c(Vp(m)),[c]),h=f.useCallback(()=>c(Vp(t)),[c,t]);return s?a.jsx(jt,{label:d("parameters.cfgScale"),step:i?.1:.5,min:n,max:r,onChange:p,handleReset:h,value:e,sliderNumberInputProps:{max:o},withInput:!0,withReset:!0,withSliderMarks:!0,isInteger:!1}):a.jsx(eu,{label:d("parameters.cfgScale"),step:.5,min:n,max:o,onChange:p,value:e,isInteger:!1,numberInputFieldProps:{textAlign:"center"}})},aa=f.memo(Lre),zre=be([at],e=>{const{initial:t,min:n,sliderMax:r,inputMax:o,fineStep:s,coarseStep:i}=e.config.sd.iterations,{iterations:c}=e.generation,{shouldUseSliders:d}=e.ui,p=e.dynamicPrompts.isEnabled&&e.dynamicPrompts.combinatorial,h=e.hotkeys.shift?s:i;return{iterations:c,initial:t,min:n,sliderMax:r,inputMax:o,step:h,shouldUseSliders:d,isDisabled:p}},Ke),Bre=()=>{const{iterations:e,initial:t,min:n,sliderMax:r,inputMax:o,step:s,shouldUseSliders:i,isDisabled:c}=B(zre),d=te(),{t:p}=ye(),h=f.useCallback(v=>{d(uw(v))},[d]),m=f.useCallback(()=>{d(uw(t))},[d,t]);return i?a.jsx(jt,{isDisabled:c,label:p("parameters.images"),step:s,min:n,max:r,onChange:h,handleReset:m,value:e,withInput:!0,withReset:!0,withSliderMarks:!0,sliderNumberInputProps:{max:o}}):a.jsx(eu,{isDisabled:c,label:p("parameters.images"),step:s,min:n,max:o,onChange:h,value:e,numberInputFieldProps:{textAlign:"center"}})},ia=f.memo(Bre),ix=e=>{const t=kd("models"),[n,r,o]=e.split("/"),s=wM.safeParse({base_model:n,model_name:o,model_type:r});if(!s.success){t.error({mainModelId:e,errors:s.error.format()},"Failed to parse main model id");return}return s.data},Fre=be(at,e=>({model:e.generation.model}),Ke),Hre=()=>{const e=te(),{t}=ye(),{model:n}=B(Fre),r=ir("syncModels").isFeatureEnabled,{data:o,isLoading:s}=na(td),{data:i,isLoading:c}=qp(td),d=B(Kn),p=f.useMemo(()=>{if(!o)return[];const v=[];return oo(o.entities,(b,w)=>{b&&v.push({value:w,label:b.model_name,group:Qn[b.base_model]})}),oo(i==null?void 0:i.entities,(b,w)=>{!b||d==="unifiedCanvas"||d==="img2img"||v.push({value:w,label:b.model_name,group:Qn[b.base_model]})}),v},[o,i,d]),h=f.useMemo(()=>((o==null?void 0:o.entities[`${n==null?void 0:n.base_model}/main/${n==null?void 0:n.model_name}`])||(i==null?void 0:i.entities[`${n==null?void 0:n.base_model}/onnx/${n==null?void 0:n.model_name}`]))??null,[o==null?void 0:o.entities,n,i==null?void 0:i.entities]),m=f.useCallback(v=>{if(!v)return;const b=ix(v);b&&e(Ov(b))},[e]);return s||c?a.jsx(ar,{label:t("modelManager.model"),placeholder:"Loading...",disabled:!0,data:[]}):a.jsxs(H,{w:"100%",alignItems:"center",gap:3,children:[a.jsx(ar,{tooltip:h==null?void 0:h.description,label:t("modelManager.model"),value:h==null?void 0:h.id,placeholder:p.length>0?"Select a model":"No models available",data:p,error:p.length===0,disabled:p.length===0,onChange:m,w:"100%"}),r&&a.jsx(Oe,{mt:7,children:a.jsx(ef,{iconMode:!0})})]})},Wre=f.memo(Hre),$O=e=>{const t=kd("models"),[n,r,o]=e.split("/"),s=SM.safeParse({base_model:n,model_name:o});if(!s.success){t.error({vaeModelId:e,errors:s.error.format()},"Failed to parse VAE model id");return}return s.data},Vre=be(at,({generation:e})=>{const{model:t,vae:n}=e;return{model:t,vae:n}},Ke),Ure=()=>{const e=te(),{t}=ye(),{model:n,vae:r}=B(Vre),{data:o}=r5(),s=f.useMemo(()=>{if(!o)return[];const d=[{value:"default",label:"Default",group:"Default"}];return oo(o.entities,(p,h)=>{if(!p)return;const m=(n==null?void 0:n.base_model)!==p.base_model;d.push({value:h,label:p.model_name,group:Qn[p.base_model],disabled:m,tooltip:m?`Incompatible base model: ${p.base_model}`:void 0})}),d.sort((p,h)=>p.disabled&&!h.disabled?1:-1)},[o,n==null?void 0:n.base_model]),i=f.useMemo(()=>(o==null?void 0:o.entities[`${r==null?void 0:r.base_model}/vae/${r==null?void 0:r.model_name}`])??null,[o==null?void 0:o.entities,r]),c=f.useCallback(d=>{if(!d||d==="default"){e(dw(null));return}const p=$O(d);p&&e(dw(p))},[e]);return a.jsx(ar,{itemComponent:Oi,tooltip:i==null?void 0:i.description,label:t("modelManager.vae"),value:(i==null?void 0:i.id)??"default",placeholder:"Default",data:s,onChange:c,disabled:s.length===0,clearable:!0})},Gre=f.memo(Ure),Mi=e=>e.generation,qre=be([Ua,Mi],(e,t)=>{const{scheduler:n}=t,{favoriteSchedulers:r}=e,o=cs(cb,(s,i)=>({value:i,label:s,group:r.includes(i)?"Favorites":void 0})).sort((s,i)=>s.label.localeCompare(i.label));return{scheduler:n,data:o}},Ke),Kre=()=>{const e=te(),{t}=ye(),{scheduler:n,data:r}=B(qre),o=f.useCallback(s=>{s&&e(Rv(s))},[e]);return a.jsx(ar,{label:t("parameters.scheduler"),value:n,data:r,onChange:o})},Xre=f.memo(Kre),Yre=be(at,({generation:e})=>{const{vaePrecision:t}=e;return{vaePrecision:t}},Ke),Qre=["fp16","fp32"],Jre=()=>{const e=te(),{vaePrecision:t}=B(Yre),n=f.useCallback(r=>{r&&e(CM(r))},[e]);return a.jsx(Fr,{label:"VAE Precision",value:t,data:Qre,onChange:n})},Zre=f.memo(Jre),eoe=()=>{const e=ir("vae").isFeatureEnabled;return a.jsxs(H,{gap:3,w:"full",flexWrap:e?"wrap":"nowrap",children:[a.jsx(Oe,{w:"full",children:a.jsx(Wre,{})}),a.jsx(Oe,{w:"full",children:a.jsx(Xre,{})}),e&&a.jsxs(H,{w:"full",gap:3,children:[a.jsx(Gre,{}),a.jsx(Zre,{})]})]})},la=f.memo(eoe),toe=[{name:"Free",value:null},{name:"2:3",value:2/3},{name:"16:9",value:16/9},{name:"1:1",value:1/1}];function LO(){const e=B(o=>o.generation.aspectRatio),t=te(),n=B(o=>o.generation.shouldFitToWidthHeight),r=B(Kn);return a.jsx(H,{gap:2,flexGrow:1,children:a.jsx(rr,{isAttached:!0,children:toe.map(o=>a.jsx(Yt,{size:"sm",isChecked:e===o.value,isDisabled:r==="img2img"?!n:!1,onClick:()=>t(kM(o.value)),children:o.name},o.name))})})}const noe=be([at],({generation:e,hotkeys:t,config:n})=>{const{initial:r,min:o,sliderMax:s,inputMax:i,fineStep:c,coarseStep:d}=n.sd.height,{height:p}=e,{aspectRatio:h}=e,m=t.shift?c:d;return{height:p,initial:r,min:o,sliderMax:s,inputMax:i,step:m,aspectRatio:h}},Ke),roe=e=>{const{height:t,initial:n,min:r,sliderMax:o,inputMax:s,step:i,aspectRatio:c}=B(noe),d=te(),{t:p}=ye(),h=f.useCallback(v=>{if(d(yc(v)),c){const b=ws(v*c,8);d(bc(b))}},[d,c]),m=f.useCallback(()=>{if(d(yc(n)),c){const v=ws(n*c,8);d(bc(v))}},[d,n,c]);return a.jsx(jt,{label:p("parameters.height"),value:t,min:r,step:i,max:o,onChange:h,handleReset:m,withInput:!0,withReset:!0,withSliderMarks:!0,sliderNumberInputProps:{max:s},...e})},ooe=f.memo(roe),soe=be([at],({generation:e,hotkeys:t,config:n})=>{const{initial:r,min:o,sliderMax:s,inputMax:i,fineStep:c,coarseStep:d}=n.sd.width,{width:p,aspectRatio:h}=e,m=t.shift?c:d;return{width:p,initial:r,min:o,sliderMax:s,inputMax:i,step:m,aspectRatio:h}},Ke),aoe=e=>{const{width:t,initial:n,min:r,sliderMax:o,inputMax:s,step:i,aspectRatio:c}=B(soe),d=te(),{t:p}=ye(),h=f.useCallback(v=>{if(d(bc(v)),c){const b=ws(v/c,8);d(yc(b))}},[d,c]),m=f.useCallback(()=>{if(d(bc(n)),c){const v=ws(n/c,8);d(yc(v))}},[d,n,c]);return a.jsx(jt,{label:p("parameters.width"),value:t,min:r,step:i,max:o,onChange:h,handleReset:m,withInput:!0,withReset:!0,withSliderMarks:!0,sliderNumberInputProps:{max:s},...e})},ioe=f.memo(aoe);function Dc(){const{t:e}=ye(),t=te(),n=B(o=>o.generation.shouldFitToWidthHeight),r=B(Kn);return a.jsxs(H,{sx:{gap:2,p:4,borderRadius:4,flexDirection:"column",w:"full",bg:"base.150",_dark:{bg:"base.750"}},children:[a.jsxs(H,{alignItems:"center",gap:2,children:[a.jsx(Je,{sx:{fontSize:"sm",width:"full",color:"base.700",_dark:{color:"base.300"}},children:e("parameters.aspectRatio")}),a.jsx(ml,{}),a.jsx(LO,{}),a.jsx(ze,{tooltip:e("ui.swapSizes"),"aria-label":e("ui.swapSizes"),size:"sm",icon:a.jsx(vO,{}),fontSize:20,isDisabled:r==="img2img"?!n:!1,onClick:()=>t(_M())})]}),a.jsx(H,{gap:2,alignItems:"center",children:a.jsxs(H,{gap:2,flexDirection:"column",width:"full",children:[a.jsx(ioe,{isDisabled:r==="img2img"?!n:!1}),a.jsx(ooe,{isDisabled:r==="img2img"?!n:!1})]})})]})}const loe=be([at],({generation:e,config:t,ui:n,hotkeys:r})=>{const{initial:o,min:s,sliderMax:i,inputMax:c,fineStep:d,coarseStep:p}=t.sd.steps,{steps:h}=e,{shouldUseSliders:m}=n,v=r.shift?d:p;return{steps:h,initial:o,min:s,sliderMax:i,inputMax:c,step:v,shouldUseSliders:m}},Ke),coe=()=>{const{steps:e,initial:t,min:n,sliderMax:r,inputMax:o,step:s,shouldUseSliders:i}=B(loe),c=te(),{t:d}=ye(),p=f.useCallback(v=>{c(Up(v))},[c]),h=f.useCallback(()=>{c(Up(t))},[c,t]),m=f.useCallback(()=>{c(_d())},[c]);return i?a.jsx(jt,{label:d("parameters.steps"),min:n,max:r,step:s,onChange:p,handleReset:h,value:e,withInput:!0,withReset:!0,withSliderMarks:!0,sliderNumberInputProps:{max:o}}):a.jsx(eu,{label:d("parameters.steps"),min:n,max:o,step:s,onChange:p,value:e,numberInputFieldProps:{textAlign:"center"},onBlur:m})},ca=f.memo(coe);function zO(){const e=te(),t=B(o=>o.generation.shouldFitToWidthHeight),n=o=>e(PM(o.target.checked)),{t:r}=ye();return a.jsx(yr,{label:r("parameters.imageFit"),isChecked:t,onChange:n})}function uoe(){const e=B(i=>i.generation.seed),t=B(i=>i.generation.shouldRandomizeSeed),n=B(i=>i.generation.shouldGenerateVariations),{t:r}=ye(),o=te(),s=i=>o(Wp(i));return a.jsx(eu,{label:r("parameters.seed"),step:1,precision:0,flexGrow:1,min:o5,max:s5,isDisabled:t,isInvalid:e<0&&n,onChange:s,value:e})}const doe=(e,t)=>Math.floor(Math.random()*(t-e+1)+e);function foe(){const e=te(),t=B(o=>o.generation.shouldRandomizeSeed),{t:n}=ye(),r=()=>e(Wp(doe(o5,s5)));return a.jsx(ze,{size:"sm",isDisabled:t,"aria-label":n("parameters.shuffle"),tooltip:n("parameters.shuffle"),onClick:r,icon:a.jsx(nQ,{})})}const poe=()=>{const e=te(),{t}=ye(),n=B(o=>o.generation.shouldRandomizeSeed),r=o=>e(jM(o.target.checked));return a.jsx(yr,{label:t("common.random"),isChecked:n,onChange:r})},hoe=f.memo(poe),moe=()=>a.jsxs(H,{sx:{gap:3,alignItems:"flex-end"},children:[a.jsx(uoe,{}),a.jsx(foe,{}),a.jsx(hoe,{})]}),ua=f.memo(moe),goe=be([at],({sdxl:e})=>{const{sdxlImg2ImgDenoisingStrength:t}=e;return{sdxlImg2ImgDenoisingStrength:t}},Ke),voe=()=>{const{sdxlImg2ImgDenoisingStrength:e}=B(goe),t=te(),{t:n}=ye(),r=f.useCallback(s=>t(fw(s)),[t]),o=f.useCallback(()=>{t(fw(.7))},[t]);return a.jsx(jt,{label:`${n("parameters.denoisingStrength")}`,step:.01,min:0,max:1,onChange:r,handleReset:o,value:e,isInteger:!1,withInput:!0,withSliderMarks:!0,withReset:!0})},BO=f.memo(voe),boe=be([Ua,Mi],(e,t)=>{const{shouldUseSliders:n}=e,{shouldRandomizeSeed:r}=t;return{shouldUseSliders:n,activeLabel:r?void 0:"Manual Seed"}},Ke),yoe=()=>{const{shouldUseSliders:e,activeLabel:t}=B(boe);return a.jsx(bo,{label:"General",activeLabel:t,defaultIsOpen:!0,children:a.jsxs(H,{sx:{flexDirection:"column",gap:3},children:[e?a.jsxs(a.Fragment,{children:[a.jsx(ia,{}),a.jsx(ca,{}),a.jsx(aa,{}),a.jsx(la,{}),a.jsx(Oe,{pt:2,children:a.jsx(ua,{})}),a.jsx(Dc,{})]}):a.jsxs(a.Fragment,{children:[a.jsxs(H,{gap:3,children:[a.jsx(ia,{}),a.jsx(ca,{}),a.jsx(aa,{})]}),a.jsx(la,{}),a.jsx(Oe,{pt:2,children:a.jsx(ua,{})}),a.jsx(Dc,{})]}),a.jsx(BO,{}),a.jsx(zO,{})]})})},xoe=f.memo(yoe),FO=()=>a.jsxs(a.Fragment,{children:[a.jsx(sx,{}),a.jsx(Zc,{}),a.jsx(xoe,{}),a.jsx(ax,{}),a.jsx(Jc,{}),a.jsx(Qc,{}),a.jsx(Yc,{}),a.jsx(Jd,{})]}),HO=e=>{const{sx:t}=e,n=te(),r=B(i=>i.ui.shouldPinParametersPanel),{t:o}=ye(),s=()=>{n(IM(!r)),n(_o())};return a.jsx(ze,{...e,tooltip:o("common.pinOptionsPanel"),"aria-label":o("common.pinOptionsPanel"),onClick:s,icon:r?a.jsx(XE,{}):a.jsx(YE,{}),variant:"ghost",size:"sm",sx:{color:"base.500",_hover:{color:"base.600"},_active:{color:"base.700"},_dark:{color:"base.500",_hover:{color:"base.400"},_active:{color:"base.300"}},...t}})},woe=be(Ua,e=>{const{shouldPinParametersPanel:t,shouldShowParametersPanel:n}=e;return{shouldPinParametersPanel:t,shouldShowParametersPanel:n}}),Soe=e=>{const{shouldPinParametersPanel:t,shouldShowParametersPanel:n}=B(woe);return t&&n?a.jsxs(Oe,{sx:{position:"relative",h:"full",w:ox,flexShrink:0},children:[a.jsx(H,{sx:{gap:2,flexDirection:"column",h:"full",w:"full",position:"absolute",overflowY:"auto"},children:e.children}),a.jsx(HO,{sx:{position:"absolute",top:0,insetInlineEnd:0}})]}):null},lx=f.memo(Soe),Coe=e=>{const{direction:t="horizontal",...n}=e,{colorMode:r}=Ds();return t==="horizontal"?a.jsx(F1,{children:a.jsx(H,{sx:{w:6,h:"full",justifyContent:"center",alignItems:"center"},...n,children:a.jsx(Oe,{sx:{w:.5,h:"calc(100% - 4px)",bg:Fe("base.100","base.850")(r)}})})}):a.jsx(F1,{children:a.jsx(H,{sx:{w:"full",h:6,justifyContent:"center",alignItems:"center"},...n,children:a.jsx(Oe,{sx:{w:"calc(100% - 4px)",h:.5,bg:Fe("base.100","base.850")(r)}})})})},WO=f.memo(Coe),koe=be([at],({system:e})=>{const{isProcessing:t,isConnected:n}=e;return n&&!t}),_oe=e=>{const{onClick:t,isDisabled:n}=e,{t:r}=ye(),o=B(koe);return a.jsx(ze,{onClick:t,icon:a.jsx(Oo,{}),tooltip:`${r("gallery.deleteImage")} (Del)`,"aria-label":`${r("gallery.deleteImage")} (Del)`,isDisabled:n||!o,colorScheme:"error"})},Poe=[{label:"RealESRGAN x2 Plus",value:"RealESRGAN_x2plus.pth",tooltip:"Attempts to retain sharpness, low smoothing",group:"x2 Upscalers"},{label:"RealESRGAN x4 Plus",value:"RealESRGAN_x4plus.pth",tooltip:"Best for photos and highly detailed images, medium smoothing",group:"x4 Upscalers"},{label:"RealESRGAN x4 Plus (anime 6B)",value:"RealESRGAN_x4plus_anime_6B.pth",tooltip:"Best for anime/manga, high smoothing",group:"x4 Upscalers"},{label:"ESRGAN SRx4",value:"ESRGAN_SRx4_DF2KOST_official-ff704c30.pth",tooltip:"Retains sharpness, low smoothing",group:"x4 Upscalers"}];function joe(){const e=B(r=>r.postprocessing.esrganModelName),t=te(),n=r=>t(EM(r));return a.jsx(Fr,{label:"ESRGAN Model",value:e,itemComponent:Oi,onChange:n,data:Poe})}const Ioe=e=>{const{imageDTO:t}=e,n=te(),r=B(kr),{t:o}=ye(),{isOpen:s,onOpen:i,onClose:c}=ss(),d=f.useCallback(()=>{c(),t&&n(a5({image_name:t.image_name}))},[n,t,c]);return a.jsx(xl,{isOpen:s,onClose:c,triggerComponent:a.jsx(ze,{onClick:i,icon:a.jsx(FY,{}),"aria-label":o("parameters.upscale")}),children:a.jsxs(H,{sx:{flexDirection:"column",gap:4},children:[a.jsx(joe,{}),a.jsx(Yt,{size:"sm",isDisabled:!t||r,onClick:d,children:o("parameters.upscaleImage")})]})})},Eoe=be([at,Kn],({gallery:e,system:t,ui:n},r)=>{const{isProcessing:o,isConnected:s,shouldConfirmOnDelete:i,progressImage:c}=t,{shouldShowImageDetails:d,shouldHidePreview:p,shouldShowProgressInViewer:h}=n,m=e.selection[e.selection.length-1];return{canDeleteImage:s&&!o,shouldConfirmOnDelete:i,isProcessing:o,isConnected:s,shouldDisableToolbarButtons:!!c||!m,shouldShowImageDetails:d,activeTabName:r,shouldHidePreview:p,shouldShowProgressInViewer:h,lastSelectedImage:m}},{memoizeOptions:{resultEqualityCheck:Zt}}),Ooe=e=>{const t=te(),{isProcessing:n,isConnected:r,shouldDisableToolbarButtons:o,shouldShowImageDetails:s,lastSelectedImage:i,shouldShowProgressInViewer:c}=B(Eoe),d=ir("upscaling").isFeatureEnabled,p=Uc(),{t:h}=ye(),{recallBothPrompts:m,recallSeed:v,recallAllParameters:b}=Xy(),[w,y]=Qy(i,500),{currentData:S}=Is((i==null?void 0:i.image_name)??ro.skipToken),{currentData:k}=ab(y.isPending()?ro.skipToken:(w==null?void 0:w.image_name)??ro.skipToken),_=k==null?void 0:k.metadata,P=f.useCallback(()=>{b(_)},[_,b]);tt("a",()=>{},[_,b]);const I=f.useCallback(()=>{v(_==null?void 0:_.seed)},[_==null?void 0:_.seed,v]);tt("s",I,[S]);const E=f.useCallback(()=>{m(_==null?void 0:_.positive_prompt,_==null?void 0:_.negative_prompt,_==null?void 0:_.positive_style_prompt,_==null?void 0:_.negative_style_prompt)},[_==null?void 0:_.negative_prompt,_==null?void 0:_.positive_prompt,_==null?void 0:_.positive_style_prompt,_==null?void 0:_.negative_style_prompt,m]);tt("p",E,[S]);const O=f.useCallback(()=>{t(fO()),t(ob(S))},[t,S]);tt("shift+i",O,[S]);const R=f.useCallback(()=>{S&&t(a5({image_name:S.image_name}))},[t,S]),M=f.useCallback(()=>{S&&t(gm([S]))},[t,S]);tt("Shift+U",()=>{R()},{enabled:()=>!!(d&&!o&&r&&!n)},[d,S,o,r,n]);const D=f.useCallback(()=>t(OM(!s)),[t,s]);tt("i",()=>{S?D():p({title:h("toast.metadataLoadFailed"),status:"error",duration:2500,isClosable:!0})},[S,s,p]),tt("delete",()=>{M()},[t,S]);const A=f.useCallback(()=>{t(e5(!c))},[t,c]);return a.jsx(a.Fragment,{children:a.jsxs(H,{sx:{flexWrap:"wrap",justifyContent:"center",alignItems:"center",gap:2},...e,children:[a.jsx(rr,{isAttached:!0,isDisabled:o,children:a.jsxs($d,{children:[a.jsx(Ld,{as:ze,"aria-label":`${h("parameters.sendTo")}...`,tooltip:`${h("parameters.sendTo")}...`,isDisabled:!S,icon:a.jsx(aQ,{})}),a.jsx(il,{motionProps:od,children:S&&a.jsx(pO,{imageDTO:S})})]})}),a.jsxs(rr,{isAttached:!0,isDisabled:o,children:[a.jsx(ze,{icon:a.jsx(iE,{}),tooltip:`${h("parameters.usePrompt")} (P)`,"aria-label":`${h("parameters.usePrompt")} (P)`,isDisabled:!(_!=null&&_.positive_prompt),onClick:E}),a.jsx(ze,{icon:a.jsx(lE,{}),tooltip:`${h("parameters.useSeed")} (S)`,"aria-label":`${h("parameters.useSeed")} (S)`,isDisabled:!(_!=null&&_.seed),onClick:I}),a.jsx(ze,{icon:a.jsx(YI,{}),tooltip:`${h("parameters.useAll")} (A)`,"aria-label":`${h("parameters.useAll")} (A)`,isDisabled:!_,onClick:P})]}),d&&a.jsx(rr,{isAttached:!0,isDisabled:o,children:d&&a.jsx(Ioe,{imageDTO:S})}),a.jsx(rr,{isAttached:!0,isDisabled:o,children:a.jsx(ze,{icon:a.jsx(Sy,{}),tooltip:`${h("parameters.info")} (I)`,"aria-label":`${h("parameters.info")} (I)`,isChecked:s,onClick:D})}),a.jsx(rr,{isAttached:!0,children:a.jsx(ze,{"aria-label":h("settings.displayInProgress"),tooltip:h("settings.displayInProgress"),icon:a.jsx(qY,{}),isChecked:c,onClick:A})}),a.jsx(rr,{isAttached:!0,children:a.jsx(_oe,{onClick:M,isDisabled:o})})]})})},Roe=be([at,ib],(e,t)=>{var _,P;const{data:n,status:r}=RM.endpoints.listImages.select(t)(e),{data:o}=e.gallery.galleryView==="images"?pw.endpoints.getBoardImagesTotal.select(t.board_id??"none")(e):pw.endpoints.getBoardAssetsTotal.select(t.board_id??"none")(e),s=e.gallery.selection[e.gallery.selection.length-1],i=r==="pending";if(!n||!s||o===0)return{isFetching:i,queryArgs:t,isOnFirstImage:!0,isOnLastImage:!0};const c={...t,offset:n.ids.length,limit:J_},d=MM.getSelectors(),p=d.selectAll(n),h=p.findIndex(I=>I.image_name===s.image_name),m=Es(h+1,0,p.length-1),v=Es(h-1,0,p.length-1),b=(_=p[m])==null?void 0:_.image_name,w=(P=p[v])==null?void 0:P.image_name,y=b?d.selectById(n,b):void 0,S=w?d.selectById(n,w):void 0,k=p.length;return{loadedImagesCount:p.length,currentImageIndex:h,areMoreImagesAvailable:(o??0)>k,isFetching:r==="pending",nextImage:y,prevImage:S,queryArgs:c}},{memoizeOptions:{resultEqualityCheck:Zt}}),VO=()=>{const e=te(),{nextImage:t,prevImage:n,areMoreImagesAvailable:r,isFetching:o,queryArgs:s,loadedImagesCount:i,currentImageIndex:c}=B(Roe),d=f.useCallback(()=>{n&&e(hw(n))},[e,n]),p=f.useCallback(()=>{t&&e(hw(t))},[e,t]),[h]=Q_(),m=f.useCallback(()=>{h(s)},[h,s]);return{handlePrevImage:d,handleNextImage:p,isOnFirstImage:c===0,isOnLastImage:c!==void 0&&c===i-1,nextImage:t,prevImage:n,areMoreImagesAvailable:r,handleLoadMoreImages:m,isFetching:o}};function Moe(e){return nt({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M245.09 327.74v-37.32c57.07 0 84.51 13.47 108.58 38.68 5.4 5.65 15 1.32 14.29-6.43-5.45-61.45-34.14-117.09-122.87-117.09v-37.32a8.32 8.32 0 00-14.05-6L146.58 242a8.2 8.2 0 000 11.94L231 333.71a8.32 8.32 0 0014.09-5.97z"}},{tag:"path",attr:{fill:"none",strokeMiterlimit:"10",strokeWidth:"32",d:"M256 64C150 64 64 150 64 256s86 192 192 192 192-86 192-192S362 64 256 64z"}}]})(e)}const bs=({label:e,value:t,onClick:n,isLink:r,labelPosition:o,withCopy:s=!1})=>{const{t:i}=ye();return t?a.jsxs(H,{gap:2,children:[n&&a.jsx(vn,{label:`Recall ${e}`,children:a.jsx(Ea,{"aria-label":i("accessibility.useThisParameter"),icon:a.jsx(Moe,{}),size:"xs",variant:"ghost",fontSize:20,onClick:n})}),s&&a.jsx(vn,{label:`Copy ${e}`,children:a.jsx(Ea,{"aria-label":`Copy ${e}`,icon:a.jsx(Kc,{}),size:"xs",variant:"ghost",fontSize:14,onClick:()=>navigator.clipboard.writeText(t.toString())})}),a.jsxs(H,{direction:o?"column":"row",children:[a.jsxs(Je,{fontWeight:"semibold",whiteSpace:"pre-wrap",pr:2,children:[e,":"]}),r?a.jsxs(Tb,{href:t.toString(),isExternal:!0,wordBreak:"break-all",children:[t.toString()," ",a.jsx(VE,{mx:"2px"})]}):a.jsx(Je,{overflowY:"scroll",wordBreak:"break-all",children:t.toString()})]})]}):null},Doe=e=>{const{metadata:t}=e,{recallPositivePrompt:n,recallNegativePrompt:r,recallSeed:o,recallCfgScale:s,recallModel:i,recallScheduler:c,recallSteps:d,recallWidth:p,recallHeight:h,recallStrength:m}=Xy(),v=f.useCallback(()=>{n(t==null?void 0:t.positive_prompt)},[t==null?void 0:t.positive_prompt,n]),b=f.useCallback(()=>{r(t==null?void 0:t.negative_prompt)},[t==null?void 0:t.negative_prompt,r]),w=f.useCallback(()=>{o(t==null?void 0:t.seed)},[t==null?void 0:t.seed,o]),y=f.useCallback(()=>{i(t==null?void 0:t.model)},[t==null?void 0:t.model,i]),S=f.useCallback(()=>{p(t==null?void 0:t.width)},[t==null?void 0:t.width,p]),k=f.useCallback(()=>{h(t==null?void 0:t.height)},[t==null?void 0:t.height,h]),_=f.useCallback(()=>{c(t==null?void 0:t.scheduler)},[t==null?void 0:t.scheduler,c]),P=f.useCallback(()=>{d(t==null?void 0:t.steps)},[t==null?void 0:t.steps,d]),I=f.useCallback(()=>{s(t==null?void 0:t.cfg_scale)},[t==null?void 0:t.cfg_scale,s]),E=f.useCallback(()=>{m(t==null?void 0:t.strength)},[t==null?void 0:t.strength,m]);return!t||Object.keys(t).length===0?null:a.jsxs(a.Fragment,{children:[t.generation_mode&&a.jsx(bs,{label:"Generation Mode",value:t.generation_mode}),t.positive_prompt&&a.jsx(bs,{label:"Positive Prompt",labelPosition:"top",value:t.positive_prompt,onClick:v}),t.negative_prompt&&a.jsx(bs,{label:"Negative Prompt",labelPosition:"top",value:t.negative_prompt,onClick:b}),t.seed!==void 0&&a.jsx(bs,{label:"Seed",value:t.seed,onClick:w}),t.model!==void 0&&a.jsx(bs,{label:"Model",value:t.model.model_name,onClick:y}),t.width&&a.jsx(bs,{label:"Width",value:t.width,onClick:S}),t.height&&a.jsx(bs,{label:"Height",value:t.height,onClick:k}),t.scheduler&&a.jsx(bs,{label:"Scheduler",value:t.scheduler,onClick:_}),t.steps&&a.jsx(bs,{label:"Steps",value:t.steps,onClick:P}),t.cfg_scale!==void 0&&a.jsx(bs,{label:"CFG scale",value:t.cfg_scale,onClick:I}),t.strength&&a.jsx(bs,{label:"Image to image strength",value:t.strength,onClick:E})]})},Aoe=e=>{const{copyTooltip:t,jsonObject:n}=e,r=f.useMemo(()=>JSON.stringify(n,null,2),[n]);return a.jsxs(H,{sx:{borderRadius:"base",bg:"whiteAlpha.500",_dark:{bg:"blackAlpha.500"},flexGrow:1,w:"full",h:"full",position:"relative"},children:[a.jsx(Oe,{sx:{position:"absolute",top:0,left:0,right:0,bottom:0,overflow:"auto",p:4},children:a.jsx(zE,{defer:!0,style:{height:"100%",width:"100%"},options:{scrollbars:{visibility:"auto",autoHide:"move",autoHideDelay:1300,theme:"os-theme-dark"}},children:a.jsx("pre",{children:r})})}),a.jsx(H,{sx:{position:"absolute",top:0,insetInlineEnd:0,p:2},children:a.jsx(vn,{label:t,children:a.jsx(Ea,{"aria-label":t,icon:a.jsx(Kc,{}),variant:"ghost",onClick:()=>navigator.clipboard.writeText(r)})})})]})},Toe=({image:e})=>{const[t,n]=Qy(e.image_name,500),{currentData:r}=ab(n.isPending()?ro.skipToken:t??ro.skipToken),o=r==null?void 0:r.metadata,s=r==null?void 0:r.graph,i=f.useMemo(()=>{const c=[];return o&&c.push({label:"Core Metadata",data:o,copyTooltip:"Copy Core Metadata JSON"}),e&&c.push({label:"Image Details",data:e,copyTooltip:"Copy Image Details JSON"}),s&&c.push({label:"Graph",data:s,copyTooltip:"Copy Graph JSON"}),c},[o,s,e]);return a.jsxs(H,{sx:{padding:4,gap:1,flexDirection:"column",width:"full",height:"full",backdropFilter:"blur(20px)",bg:"baseAlpha.200",_dark:{bg:"blackAlpha.600"},borderRadius:"base",position:"absolute",overflow:"hidden"},children:[a.jsxs(H,{gap:2,children:[a.jsx(Je,{fontWeight:"semibold",children:"File:"}),a.jsxs(Tb,{href:e.image_url,isExternal:!0,maxW:"calc(100% - 3rem)",children:[e.image_name,a.jsx(VE,{mx:"2px"})]})]}),a.jsx(Doe,{metadata:o}),a.jsxs(Hd,{variant:"line",sx:{display:"flex",flexDir:"column",w:"full",h:"full"},children:[a.jsx(Wd,{children:i.map(c=>a.jsx(_c,{sx:{borderTopRadius:"base"},children:a.jsx(Je,{sx:{color:"base.700",_dark:{color:"base.300"}},children:c.label})},c.label))}),a.jsx(Bm,{sx:{w:"full",h:"full"},children:i.map(c=>a.jsx(zm,{sx:{w:"full",h:"full",p:0,pt:4},children:a.jsx(Aoe,{jsonObject:c.data,copyTooltip:c.copyTooltip})},c.label))})]})]})},Noe=f.memo(Toe),bv={color:"base.100",pointerEvents:"auto"},$oe=()=>{const{t:e}=ye(),{handlePrevImage:t,handleNextImage:n,isOnFirstImage:r,isOnLastImage:o,handleLoadMoreImages:s,areMoreImagesAvailable:i,isFetching:c}=VO();return a.jsxs(Oe,{sx:{position:"relative",height:"100%",width:"100%"},children:[a.jsx(Oe,{sx:{pos:"absolute",top:"50%",transform:"translate(0, -50%)",insetInlineStart:0},children:!r&&a.jsx(Ea,{"aria-label":e("accessibility.previousImage"),icon:a.jsx(RY,{size:64}),variant:"unstyled",onClick:t,boxSize:16,sx:bv})}),a.jsxs(Oe,{sx:{pos:"absolute",top:"50%",transform:"translate(0, -50%)",insetInlineEnd:0},children:[!o&&a.jsx(Ea,{"aria-label":e("accessibility.nextImage"),icon:a.jsx(MY,{size:64}),variant:"unstyled",onClick:n,boxSize:16,sx:bv}),o&&i&&!c&&a.jsx(Ea,{"aria-label":e("accessibility.loadMore"),icon:a.jsx(OY,{size:64}),variant:"unstyled",onClick:s,boxSize:16,sx:bv}),o&&i&&c&&a.jsx(H,{sx:{w:16,h:16,alignItems:"center",justifyContent:"center"},children:a.jsx(hl,{opacity:.5,size:"xl"})})]})]})},Loe=f.memo($oe),zoe=be([at,DM],({ui:e,system:t},n)=>{const{shouldShowImageDetails:r,shouldHidePreview:o,shouldShowProgressInViewer:s}=e,{progressImage:i,shouldAntialiasProgressImage:c}=t;return{shouldShowImageDetails:r,shouldHidePreview:o,imageName:n==null?void 0:n.image_name,progressImage:i,shouldShowProgressInViewer:s,shouldAntialiasProgressImage:c}},{memoizeOptions:{resultEqualityCheck:Zt}}),Boe=()=>{const{shouldShowImageDetails:e,imageName:t,progressImage:n,shouldShowProgressInViewer:r,shouldAntialiasProgressImage:o}=B(zoe),{handlePrevImage:s,handleNextImage:i,isOnLastImage:c,handleLoadMoreImages:d,areMoreImagesAvailable:p,isFetching:h}=VO();tt("left",()=>{s()},[s]),tt("right",()=>{if(c&&p&&!h){d();return}c||i()},[c,p,d,h,i]);const{currentData:m}=Is(t??ro.skipToken),v=f.useMemo(()=>{if(m)return{id:"current-image",payloadType:"IMAGE_DTO",payload:{imageDTO:m}}},[m]),b=f.useMemo(()=>({id:"current-image",actionType:"SET_CURRENT_IMAGE"}),[]),[w,y]=f.useState(!1),S=f.useRef(0),k=f.useCallback(()=>{y(!0),window.clearTimeout(S.current)},[]),_=f.useCallback(()=>{S.current=window.setTimeout(()=>{y(!1)},500)},[]);return a.jsxs(H,{onMouseOver:k,onMouseOut:_,sx:{width:"full",height:"full",alignItems:"center",justifyContent:"center",position:"relative"},children:[n&&r?a.jsx(zc,{src:n.dataURL,width:n.width,height:n.height,draggable:!1,sx:{objectFit:"contain",maxWidth:"full",maxHeight:"full",height:"auto",position:"absolute",borderRadius:"base",imageRendering:o?"auto":"pixelated"}}):a.jsx(fl,{imageDTO:m,droppableData:b,draggableData:v,isUploadDisabled:!0,fitContainer:!0,useThumbailFallback:!0,dropLabel:"Set as Current Image",noContentFallback:a.jsx(tl,{icon:Rc,label:"No image selected"})}),e&&m&&a.jsx(Oe,{sx:{position:"absolute",top:"0",width:"full",height:"full",borderRadius:"base"},children:a.jsx(Noe,{image:m})}),a.jsx(mo,{children:!e&&m&&w&&a.jsx(Er.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.1}},exit:{opacity:0,transition:{duration:.1}},style:{position:"absolute",top:"0",width:"100%",height:"100%",pointerEvents:"none"},children:a.jsx(Loe,{})},"nextPrevButtons")})]})},Foe=f.memo(Boe),Hoe=()=>a.jsxs(H,{sx:{position:"relative",flexDirection:"column",height:"100%",width:"100%",rowGap:4,alignItems:"center",justifyContent:"center"},children:[a.jsx(Ooe,{}),a.jsx(Foe,{})]}),UO=()=>a.jsx(Oe,{layerStyle:"first",sx:{position:"relative",width:"100%",height:"100%",p:4,borderRadius:"base"},children:a.jsx(H,{sx:{width:"100%",height:"100%"},children:a.jsx(Hoe,{})})});function Woe(){const e=B(d=>d.generation.clipSkip),{model:t}=B(d=>d.generation),n=te(),{t:r}=ye(),o=f.useCallback(d=>{n(mw(d))},[n]),s=f.useCallback(()=>{n(mw(0))},[n]),i=f.useMemo(()=>t?Hf[t.base_model].maxClip:Hf["sd-1"].maxClip,[t]),c=f.useMemo(()=>t?Hf[t.base_model].markers:Hf["sd-1"].markers,[t]);return a.jsx(jt,{label:r("parameters.clipSkip"),"aria-label":r("parameters.clipSkip"),min:0,max:i,step:1,value:e,onChange:o,withSliderMarks:!0,sliderMarks:c,withInput:!0,withReset:!0,handleReset:s})}const Voe=be(at,e=>({activeLabel:e.generation.clipSkip>0?"Clip Skip":void 0}),Ke);function cx(){const{activeLabel:e}=B(Voe);return B(n=>n.generation.shouldShowAdvancedOptions)?a.jsx(bo,{label:"Advanced",activeLabel:e,children:a.jsx(H,{sx:{flexDir:"column",gap:2},children:a.jsx(Woe,{})})}):null}const Uoe=be(Mi,e=>{const{seamlessXAxis:t}=e;return{seamlessXAxis:t}},Ke),Goe=()=>{const{t:e}=ye(),{seamlessXAxis:t}=B(Uoe),n=te(),r=f.useCallback(o=>{n(AM(o.target.checked))},[n]);return a.jsx(yr,{label:e("parameters.seamlessXAxis"),"aria-label":e("parameters.seamlessXAxis"),isChecked:t,onChange:r})},qoe=f.memo(Goe),Koe=be(Mi,e=>{const{seamlessYAxis:t}=e;return{seamlessYAxis:t}},Ke),Xoe=()=>{const{t:e}=ye(),{seamlessYAxis:t}=B(Koe),n=te(),r=f.useCallback(o=>{n(TM(o.target.checked))},[n]);return a.jsx(yr,{label:e("parameters.seamlessYAxis"),"aria-label":e("parameters.seamlessYAxis"),isChecked:t,onChange:r})},Yoe=f.memo(Xoe),Qoe=(e,t)=>{if(e&&t)return"X & Y";if(e)return"X";if(t)return"Y"},Joe=be(Mi,e=>{const{seamlessXAxis:t,seamlessYAxis:n}=e;return{activeLabel:Qoe(t,n)}},Ke),Zoe=()=>{const{t:e}=ye(),{activeLabel:t}=B(Joe);return ir("seamless").isFeatureEnabled?a.jsx(bo,{label:e("parameters.seamlessTiling"),activeLabel:t,children:a.jsxs(H,{sx:{gap:5},children:[a.jsx(Oe,{flexGrow:1,children:a.jsx(qoe,{})}),a.jsx(Oe,{flexGrow:1,children:a.jsx(Yoe,{})})]})}):null},GO=f.memo(Zoe);function ese(){const e=B(o=>o.generation.horizontalSymmetrySteps),t=B(o=>o.generation.steps),n=te(),{t:r}=ye();return a.jsx(jt,{label:r("parameters.hSymmetryStep"),value:e,onChange:o=>n(gw(o)),min:0,max:t,step:1,withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:()=>n(gw(0))})}function tse(){const e=B(o=>o.generation.verticalSymmetrySteps),t=B(o=>o.generation.steps),n=te(),{t:r}=ye();return a.jsx(jt,{label:r("parameters.vSymmetryStep"),value:e,onChange:o=>n(vw(o)),min:0,max:t,step:1,withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:()=>n(vw(0))})}function nse(){const e=B(n=>n.generation.shouldUseSymmetry),t=te();return a.jsx(yr,{label:"Enable Symmetry",isChecked:e,onChange:n=>t(NM(n.target.checked))})}const rse=be(at,e=>({activeLabel:e.generation.shouldUseSymmetry?"Enabled":void 0}),Ke),ose=()=>{const{t:e}=ye(),{activeLabel:t}=B(rse);return ir("symmetry").isFeatureEnabled?a.jsx(bo,{label:e("parameters.symmetry"),activeLabel:t,children:a.jsxs(H,{sx:{gap:2,flexDirection:"column"},children:[a.jsx(nse,{}),a.jsx(ese,{}),a.jsx(tse,{})]})}):null},ux=f.memo(ose);function dx(){return a.jsxs(H,{sx:{flexDirection:"column",gap:2},children:[a.jsx(TO,{}),a.jsx(AO,{})]})}const sse=be([at],({generation:e,hotkeys:t,config:n})=>{const{initial:r,min:o,sliderMax:s,inputMax:i,fineStep:c,coarseStep:d}=n.sd.img2imgStrength,{img2imgStrength:p}=e,h=t.shift?c:d;return{img2imgStrength:p,initial:r,min:o,sliderMax:s,inputMax:i,step:h}},Ke),ase=()=>{const{img2imgStrength:e,initial:t,min:n,sliderMax:r,inputMax:o,step:s}=B(sse),i=te(),{t:c}=ye(),d=f.useCallback(h=>i(Gp(h)),[i]),p=f.useCallback(()=>{i(Gp(t))},[i,t]);return a.jsx(jt,{label:`${c("parameters.denoisingStrength")}`,step:s,min:n,max:r,onChange:d,handleReset:p,value:e,isInteger:!1,withInput:!0,withSliderMarks:!0,withReset:!0,sliderNumberInputProps:{max:o}})},qO=f.memo(ase),ise=be([Ua,Mi],(e,t)=>{const{shouldUseSliders:n}=e,{shouldRandomizeSeed:r}=t;return{shouldUseSliders:n,activeLabel:r?void 0:"Manual Seed"}},Ke),lse=()=>{const{shouldUseSliders:e,activeLabel:t}=B(ise);return a.jsx(bo,{label:"General",activeLabel:t,defaultIsOpen:!0,children:a.jsxs(H,{sx:{flexDirection:"column",gap:3},children:[e?a.jsxs(a.Fragment,{children:[a.jsx(ia,{}),a.jsx(ca,{}),a.jsx(aa,{}),a.jsx(la,{}),a.jsx(Oe,{pt:2,children:a.jsx(ua,{})}),a.jsx(Dc,{})]}):a.jsxs(a.Fragment,{children:[a.jsxs(H,{gap:3,children:[a.jsx(ia,{}),a.jsx(ca,{}),a.jsx(aa,{})]}),a.jsx(la,{}),a.jsx(Oe,{pt:2,children:a.jsx(ua,{})}),a.jsx(Dc,{})]}),a.jsx(qO,{}),a.jsx(zO,{})]})})},cse=f.memo(lse),KO=()=>a.jsxs(a.Fragment,{children:[a.jsx(dx,{}),a.jsx(Zc,{}),a.jsx(cse,{}),a.jsx(Jc,{}),a.jsx(Qc,{}),a.jsx(Yc,{}),a.jsx(Jd,{}),a.jsx(ux,{}),a.jsx(GO,{}),a.jsx(cx,{})]}),use=()=>{const e=te(),t=f.useRef(null),n=B(o=>o.generation.model),r=f.useCallback(()=>{t.current&&t.current.setLayout([50,50])},[]);return a.jsxs(H,{sx:{gap:4,w:"full",h:"full"},children:[a.jsx(lx,{children:n&&n.base_model==="sdxl"?a.jsx(FO,{}):a.jsx(KO,{})}),a.jsx(Oe,{sx:{w:"full",h:"full"},children:a.jsxs(tx,{ref:t,autoSaveId:"imageTab.content",direction:"horizontal",style:{height:"100%",width:"100%"},children:[a.jsx(yd,{id:"imageTab.content.initImage",order:0,defaultSize:50,minSize:25,style:{position:"relative"},children:a.jsx(Ote,{})}),a.jsx(WO,{onDoubleClick:r}),a.jsx(yd,{id:"imageTab.content.selectedImage",order:1,defaultSize:50,minSize:25,onResize:()=>{e(_o())},children:a.jsx(UO,{})})]})})]})},dse=f.memo(use);var fse=function e(t,n){if(t===n)return!0;if(t&&n&&typeof t=="object"&&typeof n=="object"){if(t.constructor!==n.constructor)return!1;var r,o,s;if(Array.isArray(t)){if(r=t.length,r!=n.length)return!1;for(o=r;o--!==0;)if(!e(t[o],n[o]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if(s=Object.keys(t),r=s.length,r!==Object.keys(n).length)return!1;for(o=r;o--!==0;)if(!Object.prototype.hasOwnProperty.call(n,s[o]))return!1;for(o=r;o--!==0;){var i=s[o];if(!e(t[i],n[i]))return!1}return!0}return t!==t&&n!==n};const qk=Cd(fse);function H1(e){return e===null||typeof e!="object"?{}:Object.keys(e).reduce((t,n)=>{const r=e[n];return r!=null&&r!==!1&&(t[n]=r),t},{})}var pse=Object.defineProperty,Kk=Object.getOwnPropertySymbols,hse=Object.prototype.hasOwnProperty,mse=Object.prototype.propertyIsEnumerable,Xk=(e,t,n)=>t in e?pse(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,gse=(e,t)=>{for(var n in t||(t={}))hse.call(t,n)&&Xk(e,n,t[n]);if(Kk)for(var n of Kk(t))mse.call(t,n)&&Xk(e,n,t[n]);return e};function XO(e,t){if(t===null||typeof t!="object")return{};const n=gse({},t);return Object.keys(t).forEach(r=>{r.includes(`${String(e)}.`)&&delete n[r]}),n}const vse="__MANTINE_FORM_INDEX__";function Yk(e,t){return t?typeof t=="boolean"?t:Array.isArray(t)?t.includes(e.replace(/[.][0-9]/g,`.${vse}`)):!1:!1}function Qk(e,t,n){typeof n.value=="object"&&(n.value=tc(n.value)),!n.enumerable||n.get||n.set||!n.configurable||!n.writable||t==="__proto__"?Object.defineProperty(e,t,n):e[t]=n.value}function tc(e){if(typeof e!="object")return e;var t=0,n,r,o,s=Object.prototype.toString.call(e);if(s==="[object Object]"?o=Object.create(e.__proto__||null):s==="[object Array]"?o=Array(e.length):s==="[object Set]"?(o=new Set,e.forEach(function(i){o.add(tc(i))})):s==="[object Map]"?(o=new Map,e.forEach(function(i,c){o.set(tc(c),tc(i))})):s==="[object Date]"?o=new Date(+e):s==="[object RegExp]"?o=new RegExp(e.source,e.flags):s==="[object DataView]"?o=new e.constructor(tc(e.buffer)):s==="[object ArrayBuffer]"?o=e.slice(0):s.slice(-6)==="Array]"&&(o=new e.constructor(e)),o){for(r=Object.getOwnPropertySymbols(e);t0,errors:t}}function W1(e,t,n="",r={}){return typeof e!="object"||e===null?r:Object.keys(e).reduce((o,s)=>{const i=e[s],c=`${n===""?"":`${n}.`}${s}`,d=_a(c,t);let p=!1;return typeof i=="function"&&(o[c]=i(d,t,c)),typeof i=="object"&&Array.isArray(d)&&(p=!0,d.forEach((h,m)=>W1(i,t,`${c}.${m}`,o))),typeof i=="object"&&typeof d=="object"&&d!==null&&(p||W1(i,t,c,o)),o},r)}function V1(e,t){return Jk(typeof e=="function"?e(t):W1(e,t))}function Ip(e,t,n){if(typeof e!="string")return{hasError:!1,error:null};const r=V1(t,n),o=Object.keys(r.errors).find(s=>e.split(".").every((i,c)=>i===s.split(".")[c]));return{hasError:!!o,error:o?r.errors[o]:null}}function bse(e,{from:t,to:n},r){const o=_a(e,r);if(!Array.isArray(o))return r;const s=[...o],i=o[t];return s.splice(t,1),s.splice(n,0,i),pg(e,s,r)}var yse=Object.defineProperty,Zk=Object.getOwnPropertySymbols,xse=Object.prototype.hasOwnProperty,wse=Object.prototype.propertyIsEnumerable,e_=(e,t,n)=>t in e?yse(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Sse=(e,t)=>{for(var n in t||(t={}))xse.call(t,n)&&e_(e,n,t[n]);if(Zk)for(var n of Zk(t))wse.call(t,n)&&e_(e,n,t[n]);return e};function Cse(e,{from:t,to:n},r){const o=`${e}.${t}`,s=`${e}.${n}`,i=Sse({},r);return Object.keys(r).every(c=>{let d,p;if(c.startsWith(o)&&(d=c,p=c.replace(o,s)),c.startsWith(s)&&(d=c.replace(s,o),p=c),d&&p){const h=i[d],m=i[p];return m===void 0?delete i[d]:i[d]=m,h===void 0?delete i[p]:i[p]=h,!1}return!0}),i}function kse(e,t,n){const r=_a(e,n);return Array.isArray(r)?pg(e,r.filter((o,s)=>s!==t),n):n}var _se=Object.defineProperty,t_=Object.getOwnPropertySymbols,Pse=Object.prototype.hasOwnProperty,jse=Object.prototype.propertyIsEnumerable,n_=(e,t,n)=>t in e?_se(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Ise=(e,t)=>{for(var n in t||(t={}))Pse.call(t,n)&&n_(e,n,t[n]);if(t_)for(var n of t_(t))jse.call(t,n)&&n_(e,n,t[n]);return e};function r_(e,t){const n=e.substring(t.length+1).split(".")[0];return parseInt(n,10)}function o_(e,t,n,r){if(t===void 0)return n;const o=`${String(e)}`;let s=n;r===-1&&(s=XO(`${o}.${t}`,s));const i=Ise({},s),c=new Set;return Object.entries(s).filter(([d])=>{if(!d.startsWith(`${o}.`))return!1;const p=r_(d,o);return Number.isNaN(p)?!1:p>=t}).forEach(([d,p])=>{const h=r_(d,o),m=d.replace(`${o}.${h}`,`${o}.${h+r}`);i[m]=p,c.add(m),c.has(d)||delete i[d]}),i}function Ese(e,t,n,r){const o=_a(e,r);if(!Array.isArray(o))return r;const s=[...o];return s.splice(typeof n=="number"?n:s.length,0,t),pg(e,s,r)}function s_(e,t){const n=Object.keys(e);if(typeof t=="string"){const r=n.filter(o=>o.startsWith(`${t}.`));return e[t]||r.some(o=>e[o])||!1}return n.some(r=>e[r])}function Ose(e){return t=>{if(!t)e(t);else if(typeof t=="function")e(t);else if(typeof t=="object"&&"nativeEvent"in t){const{currentTarget:n}=t;n instanceof HTMLInputElement?n.type==="checkbox"?e(n.checked):e(n.value):(n instanceof HTMLTextAreaElement||n instanceof HTMLSelectElement)&&e(n.value)}else e(t)}}var Rse=Object.defineProperty,Mse=Object.defineProperties,Dse=Object.getOwnPropertyDescriptors,a_=Object.getOwnPropertySymbols,Ase=Object.prototype.hasOwnProperty,Tse=Object.prototype.propertyIsEnumerable,i_=(e,t,n)=>t in e?Rse(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,li=(e,t)=>{for(var n in t||(t={}))Ase.call(t,n)&&i_(e,n,t[n]);if(a_)for(var n of a_(t))Tse.call(t,n)&&i_(e,n,t[n]);return e},yv=(e,t)=>Mse(e,Dse(t));function Cl({initialValues:e={},initialErrors:t={},initialDirty:n={},initialTouched:r={},clearInputErrorOnChange:o=!0,validateInputOnChange:s=!1,validateInputOnBlur:i=!1,transformValues:c=p=>p,validate:d}={}){const[p,h]=f.useState(r),[m,v]=f.useState(n),[b,w]=f.useState(e),[y,S]=f.useState(H1(t)),k=f.useRef(e),_=K=>{k.current=K},P=f.useCallback(()=>h({}),[]),I=K=>{const U=K?li(li({},b),K):b;_(U),v({})},E=f.useCallback(K=>S(U=>H1(typeof K=="function"?K(U):K)),[]),O=f.useCallback(()=>S({}),[]),R=f.useCallback(()=>{w(e),O(),_(e),v({}),P()},[]),M=f.useCallback((K,U)=>E(se=>yv(li({},se),{[K]:U})),[]),D=f.useCallback(K=>E(U=>{if(typeof K!="string")return U;const se=li({},U);return delete se[K],se}),[]),A=f.useCallback(K=>v(U=>{if(typeof K!="string")return U;const se=XO(K,U);return delete se[K],se}),[]),L=f.useCallback((K,U)=>{const se=Yk(K,s);A(K),h(re=>yv(li({},re),{[K]:!0})),w(re=>{const oe=pg(K,U,re);if(se){const pe=Ip(K,d,oe);pe.hasError?M(K,pe.error):D(K)}return oe}),!se&&o&&M(K,null)},[]),Q=f.useCallback(K=>{w(U=>{const se=typeof K=="function"?K(U):K;return li(li({},U),se)}),o&&O()},[]),F=f.useCallback((K,U)=>{A(K),w(se=>bse(K,U,se)),S(se=>Cse(K,U,se))},[]),V=f.useCallback((K,U)=>{A(K),w(se=>kse(K,U,se)),S(se=>o_(K,U,se,-1))},[]),q=f.useCallback((K,U,se)=>{A(K),w(re=>Ese(K,U,se,re)),S(re=>o_(K,se,re,1))},[]),G=f.useCallback(()=>{const K=V1(d,b);return S(K.errors),K},[b,d]),T=f.useCallback(K=>{const U=Ip(K,d,b);return U.hasError?M(K,U.error):D(K),U},[b,d]),z=(K,{type:U="input",withError:se=!0,withFocus:re=!0}={})=>{const pe={onChange:Ose(le=>L(K,le))};return se&&(pe.error=y[K]),U==="checkbox"?pe.checked=_a(K,b):pe.value=_a(K,b),re&&(pe.onFocus=()=>h(le=>yv(li({},le),{[K]:!0})),pe.onBlur=()=>{if(Yk(K,i)){const le=Ip(K,d,b);le.hasError?M(K,le.error):D(K)}}),pe},$=(K,U)=>se=>{se==null||se.preventDefault();const re=G();re.hasErrors?U==null||U(re.errors,b,se):K==null||K(c(b),se)},Y=K=>c(K||b),ae=f.useCallback(K=>{K.preventDefault(),R()},[]),fe=K=>{if(K){const se=_a(K,m);if(typeof se=="boolean")return se;const re=_a(K,b),oe=_a(K,k.current);return!qk(re,oe)}return Object.keys(m).length>0?s_(m):!qk(b,k.current)},ie=f.useCallback(K=>s_(p,K),[p]),X=f.useCallback(K=>K?!Ip(K,d,b).hasError:!V1(d,b).hasErrors,[b,d]);return{values:b,errors:y,setValues:Q,setErrors:E,setFieldValue:L,setFieldError:M,clearFieldError:D,clearErrors:O,reset:R,validate:G,validateField:T,reorderListItem:F,removeListItem:V,insertListItem:q,getInputProps:z,onSubmit:$,onReset:ae,isDirty:fe,isTouched:ie,setTouched:h,setDirty:v,resetTouched:P,resetDirty:I,isValid:X,getTransformedValues:Y}}function br(e){const{...t}=e,{base50:n,base100:r,base200:o,base300:s,base800:i,base700:c,base900:d,accent500:p,accent300:h}=wy(),{colorMode:m}=Ds();return a.jsx(FI,{styles:()=>({input:{color:Fe(d,r)(m),backgroundColor:Fe(n,d)(m),borderColor:Fe(o,i)(m),borderWidth:2,outline:"none",":focus":{borderColor:Fe(h,p)(m)}},label:{color:Fe(c,s)(m),fontWeight:"normal",marginBottom:4}}),...t})}const Nse=[{value:"sd-1",label:Qn["sd-1"]},{value:"sd-2",label:Qn["sd-2"]},{value:"sdxl",label:Qn.sdxl},{value:"sdxl-refiner",label:Qn["sdxl-refiner"]}];function tf(e){const{...t}=e,{t:n}=ye();return a.jsx(Fr,{label:n("modelManager.baseModel"),data:Nse,...t})}function QO(e){const{data:t}=i5(),{...n}=e;return a.jsx(Fr,{label:"Config File",placeholder:"Select A Config File",data:t||[],...n})}const $se=[{value:"normal",label:"Normal"},{value:"inpaint",label:"Inpaint"},{value:"depth",label:"Depth"}];function hg(e){const{...t}=e,{t:n}=ye();return a.jsx(Fr,{label:n("modelManager.variant"),data:$se,...t})}function JO(e){var p;const{t}=ye(),n=te(),{model_path:r}=e,o=Cl({initialValues:{model_name:((p=r==null?void 0:r.split("\\").splice(-1)[0])==null?void 0:p.split(".")[0])??"",base_model:"sd-1",model_type:"main",path:r||"",description:"",model_format:"checkpoint",error:void 0,vae:"",variant:"normal",config:"configs\\stable-diffusion\\v1-inference.yaml"}}),[s]=l5(),[i,c]=f.useState(!1),d=h=>{s({body:h}).unwrap().then(m=>{n(On(Mn({title:`Model Added: ${h.model_name}`,status:"success"}))),o.reset(),r&&n(jd(null))}).catch(m=>{m&&n(On(Mn({title:"Model Add Failed",status:"error"})))})};return a.jsx("form",{onSubmit:o.onSubmit(h=>d(h)),style:{width:"100%"},children:a.jsxs(H,{flexDirection:"column",gap:2,children:[a.jsx(br,{label:"Model Name",required:!0,...o.getInputProps("model_name")}),a.jsx(tf,{...o.getInputProps("base_model")}),a.jsx(br,{label:"Model Location",required:!0,...o.getInputProps("path")}),a.jsx(br,{label:"Description",...o.getInputProps("description")}),a.jsx(br,{label:"VAE Location",...o.getInputProps("vae")}),a.jsx(hg,{...o.getInputProps("variant")}),a.jsxs(H,{flexDirection:"column",width:"100%",gap:2,children:[i?a.jsx(br,{required:!0,label:"Custom Config File Location",...o.getInputProps("config")}):a.jsx(QO,{required:!0,width:"100%",...o.getInputProps("config")}),a.jsx(Gn,{isChecked:i,onChange:()=>c(!i),label:"Use Custom Config"}),a.jsx(Yt,{mt:2,type:"submit",children:t("modelManager.addModel")})]})]})})}function ZO(e){const{t}=ye(),n=te(),{model_path:r}=e,[o]=l5(),s=Cl({initialValues:{model_name:(r==null?void 0:r.split("\\").splice(-1)[0])??"",base_model:"sd-1",model_type:"main",path:r||"",description:"",model_format:"diffusers",error:void 0,vae:"",variant:"normal"}}),i=c=>{o({body:c}).unwrap().then(d=>{n(On(Mn({title:`Model Added: ${c.model_name}`,status:"success"}))),s.reset(),r&&n(jd(null))}).catch(d=>{d&&n(On(Mn({title:"Model Add Failed",status:"error"})))})};return a.jsx("form",{onSubmit:s.onSubmit(c=>i(c)),style:{width:"100%"},children:a.jsxs(H,{flexDirection:"column",gap:2,children:[a.jsx(br,{required:!0,label:"Model Name",...s.getInputProps("model_name")}),a.jsx(tf,{...s.getInputProps("base_model")}),a.jsx(br,{required:!0,label:"Model Location",placeholder:"Provide the path to a local folder where your Diffusers Model is stored",...s.getInputProps("path")}),a.jsx(br,{label:"Description",...s.getInputProps("description")}),a.jsx(br,{label:"VAE Location",...s.getInputProps("vae")}),a.jsx(hg,{...s.getInputProps("variant")}),a.jsx(Yt,{mt:2,type:"submit",children:t("modelManager.addModel")})]})})}const e8=[{label:"Diffusers",value:"diffusers"},{label:"Checkpoint / Safetensors",value:"checkpoint"}];function Lse(){const[e,t]=f.useState("diffusers");return a.jsxs(H,{flexDirection:"column",gap:4,width:"100%",children:[a.jsx(Fr,{label:"Model Type",value:e,data:e8,onChange:n=>{n&&t(n)}}),a.jsxs(H,{sx:{p:4,borderRadius:4,bg:"base.300",_dark:{bg:"base.850"}},children:[e==="diffusers"&&a.jsx(ZO,{}),e==="checkpoint"&&a.jsx(JO,{})]})]})}const zse=[{label:"None",value:"none"},{label:"v_prediction",value:"v_prediction"},{label:"epsilon",value:"epsilon"},{label:"sample",value:"sample"}];function Bse(){const e=te(),{t}=ye(),n=B(c=>c.system.isProcessing),[r,{isLoading:o}]=c5(),s=Cl({initialValues:{location:"",prediction_type:void 0}}),i=c=>{const d={location:c.location,prediction_type:c.prediction_type==="none"?void 0:c.prediction_type};r({body:d}).unwrap().then(p=>{e(On(Mn({title:"Model Added",status:"success"}))),s.reset()}).catch(p=>{p&&(console.log(p),e(On(Mn({title:`${p.data.detail} `,status:"error"}))))})};return a.jsx("form",{onSubmit:s.onSubmit(c=>i(c)),style:{width:"100%"},children:a.jsxs(H,{flexDirection:"column",width:"100%",gap:4,children:[a.jsx(br,{label:"Model Location",placeholder:"Provide a path to a local Diffusers model, local checkpoint / safetensors model a HuggingFace Repo ID, or a checkpoint/diffusers model URL.",w:"100%",...s.getInputProps("location")}),a.jsx(Fr,{label:"Prediction Type (for Stable Diffusion 2.x Models only)",data:zse,defaultValue:"none",...s.getInputProps("prediction_type")}),a.jsx(Yt,{type:"submit",isLoading:o,isDisabled:o||n,children:t("modelManager.addModel")})]})})}function Fse(){const[e,t]=f.useState("simple");return a.jsxs(H,{flexDirection:"column",width:"100%",overflow:"scroll",maxHeight:window.innerHeight-250,gap:4,children:[a.jsxs(rr,{isAttached:!0,children:[a.jsx(Yt,{size:"sm",isChecked:e=="simple",onClick:()=>t("simple"),children:"Simple"}),a.jsx(Yt,{size:"sm",isChecked:e=="advanced",onClick:()=>t("advanced"),children:"Advanced"})]}),a.jsxs(H,{sx:{p:4,borderRadius:4,background:"base.200",_dark:{background:"base.800"}},children:[e==="simple"&&a.jsx(Bse,{}),e==="advanced"&&a.jsx(Lse,{})]})]})}const Hse={display:"flex",flexDirection:"row",alignItems:"center",gap:10},Wse=e=>{const{label:t="",labelPos:n="top",isDisabled:r=!1,isInvalid:o,formControlProps:s,...i}=e,c=te(),d=f.useCallback(h=>{h.shiftKey&&c(Io(!0))},[c]),p=f.useCallback(h=>{h.shiftKey||c(Io(!1))},[c]);return a.jsxs(go,{isInvalid:o,isDisabled:r,...s,style:n==="side"?Hse:void 0,children:[t!==""&&a.jsx(Bo,{children:t}),a.jsx(Dd,{...i,onPaste:rx,onKeyDown:d,onKeyUp:p})]})},Ac=f.memo(Wse);function Vse(e){const{...t}=e;return a.jsx(Aj,{w:"100%",...t,children:e.children})}function Use(){const e=B(y=>y.modelmanager.searchFolder),[t,n]=f.useState(""),{data:r}=na(Gi),{foundModels:o,alreadyInstalled:s,filteredModels:i}=u5({search_path:e||""},{selectFromResult:({data:y})=>{const S=w9(r==null?void 0:r.entities),k=cs(S,"path"),_=b9(y,k),P=P9(y,k);return{foundModels:y,alreadyInstalled:l_(P,t),filteredModels:l_(_,t)}}}),[c,{isLoading:d}]=c5(),p=te(),{t:h}=ye(),m=f.useCallback(y=>{const S=y.currentTarget.id.split("\\").splice(-1)[0];c({body:{location:y.currentTarget.id}}).unwrap().then(k=>{p(On(Mn({title:`Added Model: ${S}`,status:"success"})))}).catch(k=>{k&&p(On(Mn({title:"Failed To Add Model",status:"error"})))})},[p,c]),v=f.useCallback(y=>{n(y.target.value)},[]),b=({models:y,showActions:S=!0})=>y.map(k=>a.jsxs(H,{sx:{p:4,gap:4,alignItems:"center",borderRadius:4,bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsxs(H,{w:"100%",sx:{flexDirection:"column",minW:"25%"},children:[a.jsx(Je,{sx:{fontWeight:600},children:k.split("\\").slice(-1)[0]}),a.jsx(Je,{sx:{fontSize:"sm",color:"base.600",_dark:{color:"base.400"}},children:k})]}),S?a.jsxs(H,{gap:2,children:[a.jsx(Yt,{id:k,onClick:m,isLoading:d,children:"Quick Add"}),a.jsx(Yt,{onClick:()=>p(jd(k)),isLoading:d,children:"Advanced"})]}):a.jsx(Je,{sx:{fontWeight:600,p:2,borderRadius:4,color:"accent.50",bg:"accent.400",_dark:{color:"accent.100",bg:"accent.600"}},children:"Installed"})]},k));return(()=>e?!o||o.length===0?a.jsx(H,{sx:{w:"full",h:"full",justifyContent:"center",alignItems:"center",height:96,userSelect:"none",bg:"base.200",_dark:{bg:"base.900"}},children:a.jsx(Je,{variant:"subtext",children:"No Models Found"})}):a.jsxs(H,{sx:{flexDirection:"column",gap:2,w:"100%",minW:"50%"},children:[a.jsx(Ac,{onChange:v,label:h("modelManager.search"),labelPos:"side"}),a.jsxs(H,{p:2,gap:2,children:[a.jsxs(Je,{sx:{fontWeight:600},children:["Models Found: ",o.length]}),a.jsxs(Je,{sx:{fontWeight:600,color:"accent.500",_dark:{color:"accent.200"}},children:["Not Installed: ",i.length]})]}),a.jsx(Vse,{offsetScrollbars:!0,children:a.jsxs(H,{gap:2,flexDirection:"column",children:[b({models:i}),b({models:s,showActions:!1})]})})]}):null)()}const l_=(e,t)=>{const n=[];return oo(e,r=>{if(!r)return null;r.includes(t)&&n.push(r)}),n};function Gse(){const e=B(i=>i.modelmanager.advancedAddScanModel),[t,n]=f.useState("diffusers"),[r,o]=f.useState(!0);f.useEffect(()=>{e&&[".ckpt",".safetensors",".pth",".pt"].some(i=>e.endsWith(i))?n("checkpoint"):n("diffusers")},[e,n,r]);const s=te();return e?a.jsxs(Oe,{as:Er.div,initial:{x:-100,opacity:0},animate:{x:0,opacity:1,transition:{duration:.2}},sx:{display:"flex",flexDirection:"column",minWidth:"40%",maxHeight:window.innerHeight-300,overflow:"scroll",p:4,gap:4,borderRadius:4,bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsxs(H,{justifyContent:"space-between",alignItems:"center",children:[a.jsx(Je,{size:"xl",fontWeight:600,children:r||t==="checkpoint"?"Add Checkpoint Model":"Add Diffusers Model"}),a.jsx(ze,{icon:a.jsx(lQ,{}),"aria-label":"Close Advanced",onClick:()=>s(jd(null)),size:"sm"})]}),a.jsx(Fr,{label:"Model Type",value:t,data:e8,onChange:i=>{i&&(n(i),o(i==="checkpoint"))}}),r?a.jsx(JO,{model_path:e},e):a.jsx(ZO,{model_path:e},e)]}):null}function qse(){const e=te(),{t}=ye(),n=B(c=>c.modelmanager.searchFolder),{refetch:r}=u5({search_path:n||""}),o=Cl({initialValues:{folder:""}}),s=f.useCallback(c=>{e(bw(c.folder))},[e]),i=()=>{r()};return a.jsx("form",{onSubmit:o.onSubmit(c=>s(c)),style:{width:"100%"},children:a.jsxs(H,{sx:{w:"100%",gap:2,borderRadius:4,alignItems:"center"},children:[a.jsxs(H,{w:"100%",alignItems:"center",gap:4,minH:12,children:[a.jsx(Je,{sx:{fontSize:"sm",fontWeight:600,color:"base.700",minW:"max-content",_dark:{color:"base.300"}},children:"Folder"}),n?a.jsx(H,{sx:{w:"100%",p:2,px:4,bg:"base.300",borderRadius:4,fontSize:"sm",fontWeight:"bold",_dark:{bg:"base.700"}},children:n}):a.jsx(Ac,{w:"100%",size:"md",...o.getInputProps("folder")})]}),a.jsxs(H,{gap:2,children:[n?a.jsx(ze,{"aria-label":t("modelManager.scanAgain"),tooltip:t("modelManager.scanAgain"),icon:a.jsx(cE,{}),onClick:i,fontSize:18,size:"sm"}):a.jsx(ze,{"aria-label":t("modelManager.findModels"),tooltip:t("modelManager.findModels"),icon:a.jsx(oQ,{}),fontSize:18,size:"sm",type:"submit"}),a.jsx(ze,{"aria-label":t("modelManager.clearCheckpointFolder"),tooltip:t("modelManager.clearCheckpointFolder"),icon:a.jsx(Oo,{}),size:"sm",onClick:()=>{e(bw(null)),e(jd(null))},isDisabled:!n,colorScheme:"red"})]})]})})}const Kse=f.memo(qse);function Xse(){return a.jsxs(H,{flexDirection:"column",w:"100%",gap:4,children:[a.jsx(Kse,{}),a.jsxs(H,{gap:4,children:[a.jsx(H,{sx:{maxHeight:window.innerHeight-300,overflow:"scroll",gap:4,w:"100%"},children:a.jsx(Use,{})}),a.jsx(Gse,{})]})]})}function Yse(){const[e,t]=f.useState("add"),{t:n}=ye();return a.jsxs(H,{flexDirection:"column",gap:4,children:[a.jsxs(rr,{isAttached:!0,children:[a.jsx(Yt,{onClick:()=>t("add"),isChecked:e=="add",size:"sm",width:"100%",children:n("modelManager.addModel")}),a.jsx(Yt,{onClick:()=>t("scan"),isChecked:e=="scan",size:"sm",width:"100%",children:n("modelManager.scanForModels")})]}),e=="add"&&a.jsx(Fse,{}),e=="scan"&&a.jsx(Xse,{})]})}const Qse=[{label:"Stable Diffusion 1",value:"sd-1"},{label:"Stable Diffusion 2",value:"sd-2"}];function Jse(){var T,z;const{t:e}=ye(),t=te(),{data:n}=na(Gi),[r,{isLoading:o}]=$M(),[s,i]=f.useState("sd-1"),c=Ew(n==null?void 0:n.entities,($,Y)=>($==null?void 0:$.model_format)==="diffusers"&&($==null?void 0:$.base_model)==="sd-1"),d=Ew(n==null?void 0:n.entities,($,Y)=>($==null?void 0:$.model_format)==="diffusers"&&($==null?void 0:$.base_model)==="sd-2"),p=f.useMemo(()=>({"sd-1":c,"sd-2":d}),[c,d]),[h,m]=f.useState(((T=Object.keys(p[s]))==null?void 0:T[0])??null),[v,b]=f.useState(((z=Object.keys(p[s]))==null?void 0:z[1])??null),[w,y]=f.useState(null),[S,k]=f.useState(""),[_,P]=f.useState(.5),[I,E]=f.useState("weighted_sum"),[O,R]=f.useState("root"),[M,D]=f.useState(""),[A,L]=f.useState(!1),Q=Object.keys(p[s]).filter($=>$!==v&&$!==w),F=Object.keys(p[s]).filter($=>$!==h&&$!==w),V=Object.keys(p[s]).filter($=>$!==h&&$!==v),q=$=>{i($),m(null),b(null)},G=()=>{const $=[];let Y=[h,v,w];Y=Y.filter(fe=>fe!==null),Y.forEach(fe=>{var X;const ie=(X=fe==null?void 0:fe.split("/"))==null?void 0:X[2];ie&&$.push(ie)});const ae={model_names:$,merged_model_name:S!==""?S:$.join("-"),alpha:_,interp:I,force:A,merge_dest_directory:O==="root"?void 0:M};r({base_model:s,body:ae}).unwrap().then(fe=>{t(On(Mn({title:e("modelManager.modelsMerged"),status:"success"})))}).catch(fe=>{fe&&t(On(Mn({title:e("modelManager.modelsMergeFailed"),status:"error"})))})};return a.jsxs(H,{flexDirection:"column",rowGap:4,children:[a.jsxs(H,{sx:{flexDirection:"column",rowGap:1},children:[a.jsx(Je,{children:e("modelManager.modelMergeHeaderHelp1")}),a.jsx(Je,{fontSize:"sm",variant:"subtext",children:e("modelManager.modelMergeHeaderHelp2")})]}),a.jsxs(H,{columnGap:4,children:[a.jsx(Fr,{label:"Model Type",w:"100%",data:Qse,value:s,onChange:q}),a.jsx(ar,{label:e("modelManager.modelOne"),w:"100%",value:h,placeholder:e("modelManager.selectModel"),data:Q,onChange:$=>m($)}),a.jsx(ar,{label:e("modelManager.modelTwo"),w:"100%",placeholder:e("modelManager.selectModel"),value:v,data:F,onChange:$=>b($)}),a.jsx(ar,{label:e("modelManager.modelThree"),data:V,w:"100%",placeholder:e("modelManager.selectModel"),clearable:!0,onChange:$=>{$?(y($),E("weighted_sum")):(y(null),E("add_difference"))}})]}),a.jsx(Ac,{label:e("modelManager.mergedModelName"),value:S,onChange:$=>k($.target.value)}),a.jsxs(H,{sx:{flexDirection:"column",padding:4,borderRadius:"base",gap:4,bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsx(jt,{label:e("modelManager.alpha"),min:.01,max:.99,step:.01,value:_,onChange:$=>P($),withInput:!0,withReset:!0,handleReset:()=>P(.5),withSliderMarks:!0}),a.jsx(Je,{variant:"subtext",fontSize:"sm",children:e("modelManager.modelMergeAlphaHelp")})]}),a.jsxs(H,{sx:{padding:4,borderRadius:"base",gap:4,bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsx(Je,{fontWeight:500,fontSize:"sm",variant:"subtext",children:e("modelManager.interpolationType")}),a.jsx(ah,{value:I,onChange:$=>E($),children:a.jsx(H,{columnGap:4,children:w===null?a.jsxs(a.Fragment,{children:[a.jsx(ka,{value:"weighted_sum",children:a.jsx(Je,{fontSize:"sm",children:e("modelManager.weightedSum")})}),a.jsx(ka,{value:"sigmoid",children:a.jsx(Je,{fontSize:"sm",children:e("modelManager.sigmoid")})}),a.jsx(ka,{value:"inv_sigmoid",children:a.jsx(Je,{fontSize:"sm",children:e("modelManager.inverseSigmoid")})})]}):a.jsx(ka,{value:"add_difference",children:a.jsx(vn,{label:e("modelManager.modelMergeInterpAddDifferenceHelp"),children:a.jsx(Je,{fontSize:"sm",children:e("modelManager.addDifference")})})})})})]}),a.jsxs(H,{sx:{flexDirection:"column",padding:4,borderRadius:"base",gap:4,bg:"base.200",_dark:{bg:"base.900"}},children:[a.jsxs(H,{columnGap:4,children:[a.jsx(Je,{fontWeight:"500",fontSize:"sm",variant:"subtext",children:e("modelManager.mergedModelSaveLocation")}),a.jsx(ah,{value:O,onChange:$=>R($),children:a.jsxs(H,{columnGap:4,children:[a.jsx(ka,{value:"root",children:a.jsx(Je,{fontSize:"sm",children:e("modelManager.invokeAIFolder")})}),a.jsx(ka,{value:"custom",children:a.jsx(Je,{fontSize:"sm",children:e("modelManager.custom")})})]})})]}),O==="custom"&&a.jsx(Ac,{label:e("modelManager.mergedModelCustomSaveLocation"),value:M,onChange:$=>D($.target.value)})]}),a.jsx(Gn,{label:e("modelManager.ignoreMismatch"),isChecked:A,onChange:$=>L($.target.checked),fontWeight:"500"}),a.jsx(Yt,{onClick:G,isLoading:o,isDisabled:h===null||v===null,children:e("modelManager.merge")})]})}const Zse=Ae((e,t)=>{const{t:n}=ye(),{acceptButtonText:r=n("common.accept"),acceptCallback:o,cancelButtonText:s=n("common.cancel"),cancelCallback:i,children:c,title:d,triggerComponent:p}=e,{isOpen:h,onOpen:m,onClose:v}=ss(),b=f.useRef(null),w=()=>{o(),v()},y=()=>{i&&i(),v()};return a.jsxs(a.Fragment,{children:[f.cloneElement(p,{onClick:m,ref:t}),a.jsx(zd,{isOpen:h,leastDestructiveRef:b,onClose:v,isCentered:!0,children:a.jsx(za,{children:a.jsxs(Bd,{children:[a.jsx(La,{fontSize:"lg",fontWeight:"bold",children:d}),a.jsx(Ba,{children:c}),a.jsxs($a,{children:[a.jsx(Yt,{ref:b,onClick:y,children:s}),a.jsx(Yt,{colorScheme:"error",onClick:w,ml:3,children:r})]})]})})})]})}),fx=f.memo(Zse);function eae(e){const{model:t}=e,n=te(),{t:r}=ye(),[o,{isLoading:s}]=LM(),[i,c]=f.useState("InvokeAIRoot"),[d,p]=f.useState("");f.useEffect(()=>{c("InvokeAIRoot")},[t]);const h=()=>{c("InvokeAIRoot")},m=()=>{const v={base_model:t.base_model,model_name:t.model_name,convert_dest_directory:i==="Custom"?d:void 0};if(i==="Custom"&&d===""){n(On(Mn({title:r("modelManager.noCustomLocationProvided"),status:"error"})));return}n(On(Mn({title:`${r("modelManager.convertingModelBegin")}: ${t.model_name}`,status:"info"}))),o(v).unwrap().then(()=>{n(On(Mn({title:`${r("modelManager.modelConverted")}: ${t.model_name}`,status:"success"})))}).catch(()=>{n(On(Mn({title:`${r("modelManager.modelConversionFailed")}: ${t.model_name}`,status:"error"})))})};return a.jsxs(fx,{title:`${r("modelManager.convert")} ${t.model_name}`,acceptCallback:m,cancelCallback:h,acceptButtonText:`${r("modelManager.convert")}`,triggerComponent:a.jsxs(Yt,{size:"sm","aria-label":r("modelManager.convertToDiffusers"),className:" modal-close-btn",isLoading:s,children:["🧨 ",r("modelManager.convertToDiffusers")]}),motionPreset:"slideInBottom",children:[a.jsxs(H,{flexDirection:"column",rowGap:4,children:[a.jsx(Je,{children:r("modelManager.convertToDiffusersHelpText1")}),a.jsxs($b,{children:[a.jsx(ja,{children:r("modelManager.convertToDiffusersHelpText2")}),a.jsx(ja,{children:r("modelManager.convertToDiffusersHelpText3")}),a.jsx(ja,{children:r("modelManager.convertToDiffusersHelpText4")}),a.jsx(ja,{children:r("modelManager.convertToDiffusersHelpText5")})]}),a.jsx(Je,{children:r("modelManager.convertToDiffusersHelpText6")})]}),a.jsxs(H,{flexDir:"column",gap:2,children:[a.jsxs(H,{marginTop:4,flexDir:"column",gap:2,children:[a.jsx(Je,{fontWeight:"600",children:r("modelManager.convertToDiffusersSaveLocation")}),a.jsx(ah,{value:i,onChange:v=>c(v),children:a.jsxs(H,{gap:4,children:[a.jsx(ka,{value:"InvokeAIRoot",children:a.jsx(vn,{label:"Save converted model in the InvokeAI root folder",children:r("modelManager.invokeRoot")})}),a.jsx(ka,{value:"Custom",children:a.jsx(vn,{label:"Save converted model in a custom folder",children:r("modelManager.custom")})})]})})]}),i==="Custom"&&a.jsxs(H,{flexDirection:"column",rowGap:2,children:[a.jsx(Je,{fontWeight:"500",fontSize:"sm",variant:"subtext",children:r("modelManager.customSaveLocation")}),a.jsx(Ac,{value:d,onChange:v=>{p(v.target.value)},width:"full"})]})]})]})}function tae(e){const t=B(kr),{model:n}=e,[r,{isLoading:o}]=d5(),{data:s}=i5(),[i,c]=f.useState(!1);f.useEffect(()=>{s!=null&&s.includes(n.config)||c(!0)},[s,n.config]);const d=te(),{t:p}=ye(),h=Cl({initialValues:{model_name:n.model_name?n.model_name:"",base_model:n.base_model,model_type:"main",path:n.path?n.path:"",description:n.description?n.description:"",model_format:"checkpoint",vae:n.vae?n.vae:"",config:n.config?n.config:"",variant:n.variant},validate:{path:v=>v.trim().length===0?"Must provide a path":null}}),m=f.useCallback(v=>{const b={base_model:n.base_model,model_name:n.model_name,body:v};r(b).unwrap().then(w=>{h.setValues(w),d(On(Mn({title:p("modelManager.modelUpdated"),status:"success"})))}).catch(w=>{h.reset(),d(On(Mn({title:p("modelManager.modelUpdateFailed"),status:"error"})))})},[h,d,n.base_model,n.model_name,p,r]);return a.jsxs(H,{flexDirection:"column",rowGap:4,width:"100%",children:[a.jsxs(H,{justifyContent:"space-between",alignItems:"center",children:[a.jsxs(H,{flexDirection:"column",children:[a.jsx(Je,{fontSize:"lg",fontWeight:"bold",children:n.model_name}),a.jsxs(Je,{fontSize:"sm",color:"base.400",children:[Qn[n.base_model]," Model"]})]}),[""].includes(n.base_model)?a.jsx(gl,{sx:{p:2,borderRadius:4,bg:"error.200",_dark:{bg:"error.400"}},children:"Conversion Not Supported"}):a.jsx(eae,{model:n})]}),a.jsx(Ka,{}),a.jsx(H,{flexDirection:"column",maxHeight:window.innerHeight-270,overflowY:"scroll",children:a.jsx("form",{onSubmit:h.onSubmit(v=>m(v)),children:a.jsxs(H,{flexDirection:"column",overflowY:"scroll",gap:4,children:[a.jsx(br,{label:p("modelManager.name"),...h.getInputProps("model_name")}),a.jsx(br,{label:p("modelManager.description"),...h.getInputProps("description")}),a.jsx(tf,{required:!0,...h.getInputProps("base_model")}),a.jsx(hg,{required:!0,...h.getInputProps("variant")}),a.jsx(br,{required:!0,label:p("modelManager.modelLocation"),...h.getInputProps("path")}),a.jsx(br,{label:p("modelManager.vaeLocation"),...h.getInputProps("vae")}),a.jsxs(H,{flexDirection:"column",gap:2,children:[i?a.jsx(br,{required:!0,label:p("modelManager.config"),...h.getInputProps("config")}):a.jsx(QO,{required:!0,...h.getInputProps("config")}),a.jsx(Gn,{isChecked:i,onChange:()=>c(!i),label:"Use Custom Config"})]}),a.jsx(Yt,{type:"submit",isDisabled:t||o,isLoading:o,children:p("modelManager.updateModel")})]})})})]})}function nae(e){const t=B(kr),{model:n}=e,[r,{isLoading:o}]=d5(),s=te(),{t:i}=ye(),c=Cl({initialValues:{model_name:n.model_name?n.model_name:"",base_model:n.base_model,model_type:"main",path:n.path?n.path:"",description:n.description?n.description:"",model_format:"diffusers",vae:n.vae?n.vae:"",variant:n.variant},validate:{path:p=>p.trim().length===0?"Must provide a path":null}}),d=f.useCallback(p=>{const h={base_model:n.base_model,model_name:n.model_name,body:p};r(h).unwrap().then(m=>{c.setValues(m),s(On(Mn({title:i("modelManager.modelUpdated"),status:"success"})))}).catch(m=>{c.reset(),s(On(Mn({title:i("modelManager.modelUpdateFailed"),status:"error"})))})},[c,s,n.base_model,n.model_name,i,r]);return a.jsxs(H,{flexDirection:"column",rowGap:4,width:"100%",children:[a.jsxs(H,{flexDirection:"column",children:[a.jsx(Je,{fontSize:"lg",fontWeight:"bold",children:n.model_name}),a.jsxs(Je,{fontSize:"sm",color:"base.400",children:[Qn[n.base_model]," Model"]})]}),a.jsx(Ka,{}),a.jsx("form",{onSubmit:c.onSubmit(p=>d(p)),children:a.jsxs(H,{flexDirection:"column",overflowY:"scroll",gap:4,children:[a.jsx(br,{label:i("modelManager.name"),...c.getInputProps("model_name")}),a.jsx(br,{label:i("modelManager.description"),...c.getInputProps("description")}),a.jsx(tf,{required:!0,...c.getInputProps("base_model")}),a.jsx(hg,{required:!0,...c.getInputProps("variant")}),a.jsx(br,{required:!0,label:i("modelManager.modelLocation"),...c.getInputProps("path")}),a.jsx(br,{label:i("modelManager.vaeLocation"),...c.getInputProps("vae")}),a.jsx(Yt,{type:"submit",isDisabled:t||o,isLoading:o,children:i("modelManager.updateModel")})]})})]})}function rae(e){const t=B(kr),{model:n}=e,[r,{isLoading:o}]=zM(),s=te(),{t:i}=ye(),c=Cl({initialValues:{model_name:n.model_name?n.model_name:"",base_model:n.base_model,model_type:"lora",path:n.path?n.path:"",description:n.description?n.description:"",model_format:n.model_format},validate:{path:p=>p.trim().length===0?"Must provide a path":null}}),d=f.useCallback(p=>{const h={base_model:n.base_model,model_name:n.model_name,body:p};r(h).unwrap().then(m=>{c.setValues(m),s(On(Mn({title:i("modelManager.modelUpdated"),status:"success"})))}).catch(m=>{c.reset(),s(On(Mn({title:i("modelManager.modelUpdateFailed"),status:"error"})))})},[s,c,n.base_model,n.model_name,i,r]);return a.jsxs(H,{flexDirection:"column",rowGap:4,width:"100%",children:[a.jsxs(H,{flexDirection:"column",children:[a.jsx(Je,{fontSize:"lg",fontWeight:"bold",children:n.model_name}),a.jsxs(Je,{fontSize:"sm",color:"base.400",children:[Qn[n.base_model]," Model ⋅"," ",BM[n.model_format]," format"]})]}),a.jsx(Ka,{}),a.jsx("form",{onSubmit:c.onSubmit(p=>d(p)),children:a.jsxs(H,{flexDirection:"column",overflowY:"scroll",gap:4,children:[a.jsx(br,{label:i("modelManager.name"),...c.getInputProps("model_name")}),a.jsx(br,{label:i("modelManager.description"),...c.getInputProps("description")}),a.jsx(tf,{...c.getInputProps("base_model")}),a.jsx(br,{label:i("modelManager.modelLocation"),...c.getInputProps("path")}),a.jsx(Yt,{type:"submit",isDisabled:t||o,isLoading:o,children:i("modelManager.updateModel")})]})})]})}function oae(e){const t=B(kr),{t:n}=ye(),r=te(),[o]=FM(),[s]=HM(),{model:i,isSelected:c,setSelectedModelId:d}=e,p=f.useCallback(()=>{d(i.id)},[i.id,d]),h=f.useCallback(()=>{const m={main:o,lora:s,onnx:o}[i.model_type];m(i).unwrap().then(v=>{r(On(Mn({title:`${n("modelManager.modelDeleted")}: ${i.model_name}`,status:"success"})))}).catch(v=>{v&&r(On(Mn({title:`${n("modelManager.modelDeleteFailed")}: ${i.model_name}`,status:"error"})))}),d(void 0)},[o,s,i,d,r,n]);return a.jsxs(H,{sx:{gap:2,alignItems:"center",w:"full"},children:[a.jsx(H,{as:Yt,isChecked:c,sx:{justifyContent:"start",p:2,borderRadius:"base",w:"full",alignItems:"center",bg:c?"accent.400":"base.100",color:c?"base.50":"base.800",_hover:{bg:c?"accent.500":"base.300",color:c?"base.50":"base.800"},_dark:{color:c?"base.50":"base.100",bg:c?"accent.600":"base.850",_hover:{color:c?"base.50":"base.100",bg:c?"accent.550":"base.700"}}},onClick:p,children:a.jsxs(H,{gap:4,alignItems:"center",children:[a.jsx(gl,{minWidth:14,p:.5,fontSize:"sm",variant:"solid",children:WM[i.base_model]}),a.jsx(vn,{label:i.description,hasArrow:!0,placement:"bottom",children:a.jsx(Je,{sx:{fontWeight:500},children:i.model_name})})]})}),a.jsx(fx,{title:n("modelManager.deleteModel"),acceptCallback:h,acceptButtonText:n("modelManager.delete"),triggerComponent:a.jsx(ze,{icon:a.jsx(NJ,{}),"aria-label":n("modelManager.deleteConfig"),isDisabled:t,colorScheme:"error"}),children:a.jsxs(H,{rowGap:4,flexDirection:"column",children:[a.jsx("p",{style:{fontWeight:"bold"},children:n("modelManager.deleteMsg1")}),a.jsx("p",{children:n("modelManager.deleteMsg2")})]})})]})}const sae=e=>{const{selectedModelId:t,setSelectedModelId:n}=e,{t:r}=ye(),[o,s]=f.useState(""),[i,c]=f.useState("all"),{filteredDiffusersModels:d,isLoadingDiffusersModels:p}=na(Gi,{selectFromResult:({data:P,isLoading:I})=>({filteredDiffusersModels:Iu(P,"main","diffusers",o),isLoadingDiffusersModels:I})}),{filteredCheckpointModels:h,isLoadingCheckpointModels:m}=na(Gi,{selectFromResult:({data:P,isLoading:I})=>({filteredCheckpointModels:Iu(P,"main","checkpoint",o),isLoadingCheckpointModels:I})}),{filteredLoraModels:v,isLoadingLoraModels:b}=bm(void 0,{selectFromResult:({data:P,isLoading:I})=>({filteredLoraModels:Iu(P,"lora",void 0,o),isLoadingLoraModels:I})}),{filteredOnnxModels:w,isLoadingOnnxModels:y}=qp(Gi,{selectFromResult:({data:P,isLoading:I})=>({filteredOnnxModels:Iu(P,"onnx","onnx",o),isLoadingOnnxModels:I})}),{filteredOliveModels:S,isLoadingOliveModels:k}=qp(Gi,{selectFromResult:({data:P,isLoading:I})=>({filteredOliveModels:Iu(P,"onnx","olive",o),isLoadingOliveModels:I})}),_=f.useCallback(P=>{s(P.target.value)},[]);return a.jsx(H,{flexDirection:"column",rowGap:4,width:"50%",minWidth:"50%",children:a.jsxs(H,{flexDirection:"column",gap:4,paddingInlineEnd:4,children:[a.jsxs(rr,{isAttached:!0,children:[a.jsx(Yt,{onClick:()=>c("all"),isChecked:i==="all",size:"sm",children:r("modelManager.allModels")}),a.jsx(Yt,{size:"sm",onClick:()=>c("diffusers"),isChecked:i==="diffusers",children:r("modelManager.diffusersModels")}),a.jsx(Yt,{size:"sm",onClick:()=>c("checkpoint"),isChecked:i==="checkpoint",children:r("modelManager.checkpointModels")}),a.jsx(Yt,{size:"sm",onClick:()=>c("onnx"),isChecked:i==="onnx",children:r("modelManager.onnxModels")}),a.jsx(Yt,{size:"sm",onClick:()=>c("olive"),isChecked:i==="olive",children:r("modelManager.oliveModels")}),a.jsx(Yt,{size:"sm",onClick:()=>c("lora"),isChecked:i==="lora",children:r("modelManager.loraModels")})]}),a.jsx(Ac,{onChange:_,label:r("modelManager.search"),labelPos:"side"}),a.jsxs(H,{flexDirection:"column",gap:4,maxHeight:window.innerHeight-280,overflow:"scroll",children:[p&&a.jsx(Ou,{loadingMessage:"Loading Diffusers..."}),["all","diffusers"].includes(i)&&!p&&d.length>0&&a.jsx(Eu,{title:"Diffusers",modelList:d,selected:{selectedModelId:t,setSelectedModelId:n}},"diffusers"),m&&a.jsx(Ou,{loadingMessage:"Loading Checkpoints..."}),["all","checkpoint"].includes(i)&&!m&&h.length>0&&a.jsx(Eu,{title:"Checkpoints",modelList:h,selected:{selectedModelId:t,setSelectedModelId:n}},"checkpoints"),b&&a.jsx(Ou,{loadingMessage:"Loading LoRAs..."}),["all","lora"].includes(i)&&!b&&v.length>0&&a.jsx(Eu,{title:"LoRAs",modelList:v,selected:{selectedModelId:t,setSelectedModelId:n}},"loras"),k&&a.jsx(Ou,{loadingMessage:"Loading Olives..."}),["all","olive"].includes(i)&&!k&&S.length>0&&a.jsx(Eu,{title:"Olives",modelList:S,selected:{selectedModelId:t,setSelectedModelId:n}},"olive"),y&&a.jsx(Ou,{loadingMessage:"Loading ONNX..."}),["all","onnx"].includes(i)&&!y&&w.length>0&&a.jsx(Eu,{title:"ONNX",modelList:w,selected:{selectedModelId:t,setSelectedModelId:n}},"onnx")]})]})})},Iu=(e,t,n,r)=>{const o=[];return oo(e==null?void 0:e.entities,s=>{if(!s)return;const i=s.model_name.toLowerCase().includes(r.toLowerCase()),c=n===void 0||s.model_format===n,d=s.model_type===t;i&&c&&d&&o.push(s)}),o},t8=e=>a.jsx(H,{flexDirection:"column",gap:4,borderRadius:4,p:4,sx:{bg:"base.200",_dark:{bg:"base.800"}},children:e.children});function Eu(e){const{title:t,modelList:n,selected:r}=e;return a.jsx(t8,{children:a.jsxs(H,{sx:{gap:2,flexDir:"column"},children:[a.jsx(Je,{variant:"subtext",fontSize:"sm",children:t}),n.map(o=>a.jsx(oae,{model:o,isSelected:r.selectedModelId===o.id,setSelectedModelId:r.setSelectedModelId},o.id))]})})}function Ou({loadingMessage:e}){return a.jsx(t8,{children:a.jsxs(H,{justifyContent:"center",alignItems:"center",flexDirection:"column",p:4,gap:8,children:[a.jsx(hl,{}),a.jsx(Je,{variant:"subtext",children:e||"Fetching..."})]})})}function aae(){const[e,t]=f.useState(),{mainModel:n}=na(Gi,{selectFromResult:({data:s})=>({mainModel:e?s==null?void 0:s.entities[e]:void 0})}),{loraModel:r}=bm(void 0,{selectFromResult:({data:s})=>({loraModel:e?s==null?void 0:s.entities[e]:void 0})}),o=n||r;return a.jsxs(H,{sx:{gap:8,w:"full",h:"full"},children:[a.jsx(sae,{selectedModelId:e,setSelectedModelId:t}),a.jsx(iae,{model:o})]})}const iae=e=>{const{model:t}=e;return(t==null?void 0:t.model_format)==="checkpoint"?a.jsx(tae,{model:t},t.id):(t==null?void 0:t.model_format)==="diffusers"?a.jsx(nae,{model:t},t.id):(t==null?void 0:t.model_type)==="lora"?a.jsx(rae,{model:t},t.id):a.jsx(H,{sx:{w:"full",h:"full",justifyContent:"center",alignItems:"center",maxH:96,userSelect:"none"},children:a.jsx(Je,{variant:"subtext",children:"No Model Selected"})})};function lae(){const{t:e}=ye();return a.jsxs(H,{sx:{w:"full",p:4,borderRadius:4,gap:4,justifyContent:"space-between",alignItems:"center",bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsxs(H,{sx:{flexDirection:"column",gap:2},children:[a.jsx(Je,{sx:{fontWeight:600},children:e("modelManager.syncModels")}),a.jsx(Je,{fontSize:"sm",sx:{_dark:{color:"base.400"}},children:e("modelManager.syncModelsDesc")})]}),a.jsx(ef,{})]})}function cae(){return a.jsx(H,{children:a.jsx(lae,{})})}const c_=[{id:"modelManager",label:Bn.t("modelManager.modelManager"),content:a.jsx(aae,{})},{id:"importModels",label:Bn.t("modelManager.importModels"),content:a.jsx(Yse,{})},{id:"mergeModels",label:Bn.t("modelManager.mergeModels"),content:a.jsx(Jse,{})},{id:"settings",label:Bn.t("modelManager.settings"),content:a.jsx(cae,{})}],uae=()=>a.jsxs(Hd,{isLazy:!0,variant:"line",layerStyle:"first",sx:{w:"full",h:"full",p:4,gap:4,borderRadius:"base"},children:[a.jsx(Wd,{children:c_.map(e=>a.jsx(_c,{sx:{borderTopRadius:"base"},children:e.label},e.id))}),a.jsx(Bm,{sx:{w:"full",h:"full"},children:c_.map(e=>a.jsx(zm,{sx:{w:"full",h:"full"},children:e.content},e.id))})]}),dae=f.memo(uae);const fae=e=>be([t=>t.nodes],t=>{const n=t.invocationTemplates[e];if(n)return n},{memoizeOptions:{resultEqualityCheck:(t,n)=>t!==void 0&&n!==void 0&&t.type===n.type}}),pae=(e,t)=>{const n={id:e,name:t.name,type:t.type};return t.inputRequirement!=="never"&&(t.type==="string"&&(n.value=t.default??""),t.type==="integer"&&(n.value=t.default??0),t.type==="float"&&(n.value=t.default??0),t.type==="boolean"&&(n.value=t.default??!1),t.type==="enum"&&(t.enumType==="number"&&(n.value=t.default??0),t.enumType==="string"&&(n.value=t.default??"")),t.type==="array"&&(n.value=t.default??1),t.type==="image"&&(n.value=void 0),t.type==="image_collection"&&(n.value=[]),t.type==="latents"&&(n.value=void 0),t.type==="conditioning"&&(n.value=void 0),t.type==="unet"&&(n.value=void 0),t.type==="clip"&&(n.value=void 0),t.type==="vae"&&(n.value=void 0),t.type==="control"&&(n.value=void 0),t.type==="model"&&(n.value=void 0),t.type==="refiner_model"&&(n.value=void 0),t.type==="vae_model"&&(n.value=void 0),t.type==="lora_model"&&(n.value=void 0),t.type==="controlnet_model"&&(n.value=void 0)),n},hae=be([e=>e.nodes],e=>e.invocationTemplates),px="node-drag-handle",u_={dragHandle:`.${px}`},mae=()=>{const e=B(hae),t=fb();return f.useCallback(n=>{if(n==="progress_image"){const{x:h,y:m}=t.project({x:window.innerWidth/2.5,y:window.innerHeight/8});return{...u_,id:"progress_image",type:"progress_image",position:{x:h,y:m},data:{}}}const r=e[n];if(r===void 0){console.error(`Unable to find template ${n}.`);return}const o=vi(),s=yw(r.inputs,(h,m,v)=>{const b=vi(),w=pae(b,m);return h[v]=w,h},{}),i=yw(r.outputs,(h,m,v)=>{const w={id:vi(),name:v,type:m.type};return h[v]=w,h},{}),{x:c,y:d}=t.project({x:window.innerWidth/2.5,y:window.innerHeight/8});return{...u_,id:o,type:"invocation",position:{x:c,y:d},data:{id:o,type:n,inputs:s,outputs:i}}},[e,t])},gae=e=>{const{nodeId:t,title:n,description:r}=e;return a.jsxs(H,{className:px,sx:{borderTopRadius:"md",alignItems:"center",justifyContent:"space-between",px:2,py:1,bg:"base.100",_dark:{bg:"base.900"}},children:[a.jsx(vn,{label:t,children:a.jsx(Ys,{size:"xs",sx:{fontWeight:600,color:"base.900",_dark:{color:"base.200"}},children:n})}),a.jsx(vn,{label:r,placement:"top",hasArrow:!0,shouldWrapChildren:!0,children:a.jsx(fo,{sx:{h:"min-content",color:"base.700",_dark:{color:"base.300"}},as:XY})})]})},n8=f.memo(gae),r8=()=>()=>!0,vae={position:"absolute",width:"1rem",height:"1rem",borderWidth:0},bae={left:"-1rem"},yae={right:"-0.5rem"},xae=e=>{const{field:t,isValidConnection:n,handleType:r,styles:o}=e,{name:s,type:i}=t;return a.jsx(vn,{label:i,placement:r==="target"?"start":"end",hasArrow:!0,openDelay:f5,children:a.jsx(VM,{type:r,id:s,isValidConnection:n,position:r==="target"?xw.Left:xw.Right,style:{backgroundColor:p5[i].colorCssVar,...o,...vae,...r==="target"?bae:yae}})})},o8=f.memo(xae),wae=e=>a.jsx(JY,{}),Sae=f.memo(wae),Cae=e=>{const{nodeId:t,field:n}=e,r=te(),o=s=>{r(As({nodeId:t,fieldName:n.name,value:s.target.checked}))};return a.jsx(ny,{onChange:o,isChecked:n.value})},kae=f.memo(Cae),_ae=e=>null,Pae=f.memo(_ae);function mg(){return(mg=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}function U1(e){var t=f.useRef(e),n=f.useRef(function(r){t.current&&t.current(r)});return t.current=e,n.current}var Tc=function(e,t,n){return t===void 0&&(t=0),n===void 0&&(n=1),e>n?n:e0:S.buttons>0)&&o.current?s(d_(o.current,S,c.current)):y(!1)},w=function(){return y(!1)};function y(S){var k=d.current,_=G1(o.current),P=S?_.addEventListener:_.removeEventListener;P(k?"touchmove":"mousemove",b),P(k?"touchend":"mouseup",w)}return[function(S){var k=S.nativeEvent,_=o.current;if(_&&(f_(k),!function(I,E){return E&&!ed(I)}(k,d.current)&&_)){if(ed(k)){d.current=!0;var P=k.changedTouches||[];P.length&&(c.current=P[0].identifier)}_.focus(),s(d_(_,k,c.current)),y(!0)}},function(S){var k=S.which||S.keyCode;k<37||k>40||(S.preventDefault(),i({left:k===39?.05:k===37?-.05:0,top:k===40?.05:k===38?-.05:0}))},y]},[i,s]),h=p[0],m=p[1],v=p[2];return f.useEffect(function(){return v},[v]),W.createElement("div",mg({},r,{onTouchStart:h,onMouseDown:h,className:"react-colorful__interactive",ref:o,onKeyDown:m,tabIndex:0,role:"slider"}))}),gg=function(e){return e.filter(Boolean).join(" ")},mx=function(e){var t=e.color,n=e.left,r=e.top,o=r===void 0?.5:r,s=gg(["react-colorful__pointer",e.className]);return W.createElement("div",{className:s,style:{top:100*o+"%",left:100*n+"%"}},W.createElement("div",{className:"react-colorful__pointer-fill",style:{backgroundColor:t}}))},po=function(e,t,n){return t===void 0&&(t=0),n===void 0&&(n=Math.pow(10,t)),Math.round(n*e)/n},a8=function(e){var t=e.s,n=e.v,r=e.a,o=(200-t)*n/100;return{h:po(e.h),s:po(o>0&&o<200?t*n/100/(o<=100?o:200-o)*100:0),l:po(o/2),a:po(r,2)}},q1=function(e){var t=a8(e);return"hsl("+t.h+", "+t.s+"%, "+t.l+"%)"},xv=function(e){var t=a8(e);return"hsla("+t.h+", "+t.s+"%, "+t.l+"%, "+t.a+")"},jae=function(e){var t=e.h,n=e.s,r=e.v,o=e.a;t=t/360*6,n/=100,r/=100;var s=Math.floor(t),i=r*(1-n),c=r*(1-(t-s)*n),d=r*(1-(1-t+s)*n),p=s%6;return{r:po(255*[r,c,i,i,d,r][p]),g:po(255*[d,r,r,c,i,i][p]),b:po(255*[i,i,d,r,r,c][p]),a:po(o,2)}},Iae=function(e){var t=e.r,n=e.g,r=e.b,o=e.a,s=Math.max(t,n,r),i=s-Math.min(t,n,r),c=i?s===t?(n-r)/i:s===n?2+(r-t)/i:4+(t-n)/i:0;return{h:po(60*(c<0?c+6:c)),s:po(s?i/s*100:0),v:po(s/255*100),a:o}},Eae=W.memo(function(e){var t=e.hue,n=e.onChange,r=gg(["react-colorful__hue",e.className]);return W.createElement("div",{className:r},W.createElement(hx,{onMove:function(o){n({h:360*o.left})},onKey:function(o){n({h:Tc(t+360*o.left,0,360)})},"aria-label":"Hue","aria-valuenow":po(t),"aria-valuemax":"360","aria-valuemin":"0"},W.createElement(mx,{className:"react-colorful__hue-pointer",left:t/360,color:q1({h:t,s:100,v:100,a:1})})))}),Oae=W.memo(function(e){var t=e.hsva,n=e.onChange,r={backgroundColor:q1({h:t.h,s:100,v:100,a:1})};return W.createElement("div",{className:"react-colorful__saturation",style:r},W.createElement(hx,{onMove:function(o){n({s:100*o.left,v:100-100*o.top})},onKey:function(o){n({s:Tc(t.s+100*o.left,0,100),v:Tc(t.v-100*o.top,0,100)})},"aria-label":"Color","aria-valuetext":"Saturation "+po(t.s)+"%, Brightness "+po(t.v)+"%"},W.createElement(mx,{className:"react-colorful__saturation-pointer",top:1-t.v/100,left:t.s/100,color:q1(t)})))}),i8=function(e,t){if(e===t)return!0;for(var n in e)if(e[n]!==t[n])return!1;return!0};function Rae(e,t,n){var r=U1(n),o=f.useState(function(){return e.toHsva(t)}),s=o[0],i=o[1],c=f.useRef({color:t,hsva:s});f.useEffect(function(){if(!e.equal(t,c.current.color)){var p=e.toHsva(t);c.current={hsva:p,color:t},i(p)}},[t,e]),f.useEffect(function(){var p;i8(s,c.current.hsva)||e.equal(p=e.fromHsva(s),c.current.color)||(c.current={hsva:s,color:p},r(p))},[s,e,r]);var d=f.useCallback(function(p){i(function(h){return Object.assign({},h,p)})},[]);return[s,d]}var Mae=typeof window<"u"?f.useLayoutEffect:f.useEffect,Dae=function(){return typeof __webpack_nonce__<"u"?__webpack_nonce__:void 0},p_=new Map,Aae=function(e){Mae(function(){var t=e.current?e.current.ownerDocument:document;if(t!==void 0&&!p_.has(t)){var n=t.createElement("style");n.innerHTML=`.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:"";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url('data:image/svg+xml;charset=utf-8,')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}`,p_.set(t,n);var r=Dae();r&&n.setAttribute("nonce",r),t.head.appendChild(n)}},[])},Tae=function(e){var t=e.className,n=e.hsva,r=e.onChange,o={backgroundImage:"linear-gradient(90deg, "+xv(Object.assign({},n,{a:0}))+", "+xv(Object.assign({},n,{a:1}))+")"},s=gg(["react-colorful__alpha",t]),i=po(100*n.a);return W.createElement("div",{className:s},W.createElement("div",{className:"react-colorful__alpha-gradient",style:o}),W.createElement(hx,{onMove:function(c){r({a:c.left})},onKey:function(c){r({a:Tc(n.a+c.left)})},"aria-label":"Alpha","aria-valuetext":i+"%","aria-valuenow":i,"aria-valuemin":"0","aria-valuemax":"100"},W.createElement(mx,{className:"react-colorful__alpha-pointer",left:n.a,color:xv(n)})))},Nae=function(e){var t=e.className,n=e.colorModel,r=e.color,o=r===void 0?n.defaultColor:r,s=e.onChange,i=s8(e,["className","colorModel","color","onChange"]),c=f.useRef(null);Aae(c);var d=Rae(n,o,s),p=d[0],h=d[1],m=gg(["react-colorful",t]);return W.createElement("div",mg({},i,{ref:c,className:m}),W.createElement(Oae,{hsva:p,onChange:h}),W.createElement(Eae,{hue:p.h,onChange:h}),W.createElement(Tae,{hsva:p,onChange:h,className:"react-colorful__last-control"}))},$ae={defaultColor:{r:0,g:0,b:0,a:1},toHsva:Iae,fromHsva:jae,equal:i8},l8=function(e){return W.createElement(Nae,mg({},e,{colorModel:$ae}))};const Lae=e=>{const{nodeId:t,field:n}=e,r=te(),o=s=>{r(As({nodeId:t,fieldName:n.name,value:s}))};return a.jsx(l8,{className:"nodrag",color:n.value,onChange:o})},zae=f.memo(Lae),Bae=e=>null,Fae=f.memo(Bae),Hae=e=>null,Wae=f.memo(Hae),Vae=e=>{const{nodeId:t,field:n}=e,r=n.value,o=te(),{data:s}=ub(),i=f.useMemo(()=>(s==null?void 0:s.entities[`${r==null?void 0:r.base_model}/controlnet/${r==null?void 0:r.model_name}`])??null,[r==null?void 0:r.base_model,r==null?void 0:r.model_name,s==null?void 0:s.entities]),c=f.useMemo(()=>{if(!s)return[];const p=[];return oo(s.entities,(h,m)=>{h&&p.push({value:m,label:h.model_name,group:Qn[h.base_model]})}),p},[s]),d=f.useCallback(p=>{if(!p)return;const h=MO(p);h&&o(As({nodeId:t,fieldName:n.name,value:h}))},[o,n.name,t]);return a.jsx(Fr,{tooltip:i==null?void 0:i.description,label:(i==null?void 0:i.base_model)&&Qn[i==null?void 0:i.base_model],value:(i==null?void 0:i.id)??null,placeholder:"Pick one",error:!i,data:c,onChange:d})},Uae=f.memo(Vae),Gae=e=>{const{nodeId:t,field:n,template:r}=e,o=te(),s=i=>{o(As({nodeId:t,fieldName:n.name,value:i.target.value}))};return a.jsx(z6,{onChange:s,value:n.value,children:r.options.map(i=>a.jsx("option",{children:i},i))})},qae=f.memo(Gae),Kae=e=>{var c;const{nodeId:t,field:n}=e,r={id:`node-${t}-${n.name}`,actionType:"SET_MULTI_NODES_IMAGE",context:{nodeId:t,fieldName:n.name}},{isOver:o,setNodeRef:s,active:i}=rb({id:`node_${t}`,data:r});return a.jsxs(H,{ref:s,sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center",position:"relative",minH:"10rem"},children:[(c=n.value)==null?void 0:c.map(({image_name:d})=>a.jsx(Yae,{imageName:d},d)),Fp(r,i)&&a.jsx(tm,{isOver:o})]})},Xae=f.memo(Kae),Yae=e=>{const{currentData:t}=Is(e.imageName);return a.jsx(fl,{imageDTO:t,isDropDisabled:!0,isDragDisabled:!0})},Qae=e=>{var p;const{nodeId:t,field:n}=e,r=te(),{currentData:o}=Is(((p=n.value)==null?void 0:p.image_name)??ro.skipToken),s=f.useCallback(()=>{r(As({nodeId:t,fieldName:n.name,value:void 0}))},[r,n.name,t]),i=f.useMemo(()=>{if(o)return{id:`node-${t}-${n.name}`,payloadType:"IMAGE_DTO",payload:{imageDTO:o}}},[n.name,o,t]),c=f.useMemo(()=>({id:`node-${t}-${n.name}`,actionType:"SET_NODES_IMAGE",context:{nodeId:t,fieldName:n.name}}),[n.name,t]),d=f.useMemo(()=>({type:"SET_NODES_IMAGE",nodeId:t,fieldName:n.name}),[t,n.name]);return a.jsx(H,{sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center"},children:a.jsx(fl,{imageDTO:o,droppableData:c,draggableData:i,onClickReset:s,postUploadAction:d})})},Jae=f.memo(Qae),Zae=e=>a.jsx(EY,{}),h_=f.memo(Zae),eie=e=>null,tie=f.memo(eie),nie=e=>{const t=kd("models"),[n,r,o]=e.split("/"),s=UM.safeParse({base_model:n,model_name:o});if(!s.success){t.error({loraModelId:e,errors:s.error.format()},"Failed to parse LoRA model id");return}return s.data},rie=e=>{const{nodeId:t,field:n}=e,r=n.value,o=te(),{data:s}=bm(),i=f.useMemo(()=>{if(!s)return[];const p=[];return oo(s.entities,(h,m)=>{h&&p.push({value:m,label:h.model_name,group:Qn[h.base_model]})}),p.sort((h,m)=>h.disabled&&!m.disabled?1:-1)},[s]),c=f.useMemo(()=>(s==null?void 0:s.entities[`${r==null?void 0:r.base_model}/lora/${r==null?void 0:r.model_name}`])??null,[s==null?void 0:s.entities,r==null?void 0:r.base_model,r==null?void 0:r.model_name]),d=f.useCallback(p=>{if(!p)return;const h=nie(p);h&&o(As({nodeId:t,fieldName:n.name,value:h}))},[o,n.name,t]);return(s==null?void 0:s.ids.length)===0?a.jsx(H,{sx:{justifyContent:"center",p:2},children:a.jsx(Je,{sx:{fontSize:"sm",color:"base.500",_dark:"base.700"},children:"No LoRAs Loaded"})}):a.jsx(ar,{value:(c==null?void 0:c.id)??null,label:(c==null?void 0:c.base_model)&&Qn[c==null?void 0:c.base_model],placeholder:i.length>0?"Select a LoRA":"No LoRAs available",data:i,nothingFound:"No matching LoRAs",itemComponent:Oi,disabled:i.length===0,filter:(p,h)=>{var m;return((m=h.label)==null?void 0:m.toLowerCase().includes(p.toLowerCase().trim()))||h.value.toLowerCase().includes(p.toLowerCase().trim())},onChange:d})},oie=f.memo(rie),sie=e=>{var v,b;const{nodeId:t,field:n}=e,r=te(),{t:o}=ye(),s=ir("syncModels").isFeatureEnabled,{data:i}=qp(td),{data:c,isLoading:d}=na(td),p=f.useMemo(()=>{if(!c)return[];const w=[];return oo(c.entities,(y,S)=>{y&&w.push({value:S,label:y.model_name,group:Qn[y.base_model]})}),i&&oo(i.entities,(y,S)=>{y&&w.push({value:S,label:y.model_name,group:Qn[y.base_model]})}),w},[c,i]),h=f.useMemo(()=>{var w,y,S,k;return((c==null?void 0:c.entities[`${(w=n.value)==null?void 0:w.base_model}/main/${(y=n.value)==null?void 0:y.model_name}`])||(i==null?void 0:i.entities[`${(S=n.value)==null?void 0:S.base_model}/onnx/${(k=n.value)==null?void 0:k.model_name}`]))??null},[(v=n.value)==null?void 0:v.base_model,(b=n.value)==null?void 0:b.model_name,c==null?void 0:c.entities,i==null?void 0:i.entities]),m=f.useCallback(w=>{if(!w)return;const y=ix(w);y&&r(As({nodeId:t,fieldName:n.name,value:y}))},[r,n.name,t]);return d?a.jsx(ar,{label:o("modelManager.model"),placeholder:"Loading...",disabled:!0,data:[]}):a.jsxs(H,{w:"100%",alignItems:"center",gap:2,children:[a.jsx(ar,{tooltip:h==null?void 0:h.description,label:(h==null?void 0:h.base_model)&&Qn[h==null?void 0:h.base_model],value:h==null?void 0:h.id,placeholder:p.length>0?"Select a model":"No models available",data:p,error:p.length===0,disabled:p.length===0,onChange:m}),s&&a.jsx(Oe,{mt:7,children:a.jsx(ef,{iconMode:!0})})]})},aie=f.memo(sie),iie=e=>{const{nodeId:t,field:n}=e,r=te(),[o,s]=f.useState(String(n.value)),i=c=>{s(c),c.match(lm)||r(As({nodeId:t,fieldName:n.name,value:e.template.type==="integer"?Math.floor(Number(c)):Number(c)}))};return f.useEffect(()=>{!o.match(lm)&&n.value!==Number(o)&&s(String(n.value))},[n.value,o]),a.jsxs(jm,{onChange:i,value:o,step:e.template.type==="integer"?1:.1,precision:e.template.type==="integer"?0:3,children:[a.jsx(Em,{}),a.jsxs(Im,{children:[a.jsx(Rm,{}),a.jsx(Om,{})]})]})},lie=f.memo(iie),cie=e=>{const{nodeId:t,field:n}=e,r=te(),o=s=>{r(As({nodeId:t,fieldName:n.name,value:s.target.value}))};return["prompt","style"].includes(n.name.toLowerCase())?a.jsx(ry,{onChange:o,value:n.value,rows:2}):a.jsx(Dd,{onChange:o,value:n.value})},uie=f.memo(cie),die=e=>null,fie=f.memo(die),pie=e=>null,hie=f.memo(pie),mie=e=>{const{nodeId:t,field:n}=e,r=n.value,o=te(),{data:s}=r5(),i=f.useMemo(()=>{if(!s)return[];const p=[{value:"default",label:"Default",group:"Default"}];return oo(s.entities,(h,m)=>{h&&p.push({value:m,label:h.model_name,group:Qn[h.base_model]})}),p.sort((h,m)=>h.disabled&&!m.disabled?1:-1)},[s]),c=f.useMemo(()=>(s==null?void 0:s.entities[`${r==null?void 0:r.base_model}/vae/${r==null?void 0:r.model_name}`])??null,[s==null?void 0:s.entities,r]),d=f.useCallback(p=>{if(!p)return;const h=$O(p);h&&o(As({nodeId:t,fieldName:n.name,value:h}))},[o,n.name,t]);return a.jsx(ar,{itemComponent:Oi,tooltip:c==null?void 0:c.description,label:(c==null?void 0:c.base_model)&&Qn[c==null?void 0:c.base_model],value:(c==null?void 0:c.id)??"default",placeholder:"Default",data:i,onChange:d,disabled:i.length===0,clearable:!0})},gie=f.memo(mie),vie=e=>{var m,v;const{nodeId:t,field:n}=e,r=te(),{t:o}=ye(),s=ir("syncModels").isFeatureEnabled,{data:i,isLoading:c}=na(db),d=f.useMemo(()=>{if(!i)return[];const b=[];return oo(i.entities,(w,y)=>{w&&b.push({value:y,label:w.model_name,group:Qn[w.base_model]})}),b},[i]),p=f.useMemo(()=>{var b,w;return(i==null?void 0:i.entities[`${(b=n.value)==null?void 0:b.base_model}/main/${(w=n.value)==null?void 0:w.model_name}`])??null},[(m=n.value)==null?void 0:m.base_model,(v=n.value)==null?void 0:v.model_name,i==null?void 0:i.entities]),h=f.useCallback(b=>{if(!b)return;const w=ix(b);w&&r(As({nodeId:t,fieldName:n.name,value:w}))},[r,n.name,t]);return c?a.jsx(ar,{label:o("modelManager.model"),placeholder:"Loading...",disabled:!0,data:[]}):a.jsxs(H,{w:"100%",alignItems:"center",gap:2,children:[a.jsx(ar,{tooltip:p==null?void 0:p.description,label:(p==null?void 0:p.base_model)&&Qn[p==null?void 0:p.base_model],value:p==null?void 0:p.id,placeholder:d.length>0?"Select a model":"No models available",data:d,error:d.length===0,disabled:d.length===0,onChange:h}),s&&a.jsx(Oe,{mt:7,children:a.jsx(ef,{iconMode:!0})})]})},bie=f.memo(vie),yie=e=>{const{nodeId:t,field:n,template:r}=e,{type:o}=n;return o==="string"&&r.type==="string"?a.jsx(uie,{nodeId:t,field:n,template:r}):o==="boolean"&&r.type==="boolean"?a.jsx(kae,{nodeId:t,field:n,template:r}):o==="integer"&&r.type==="integer"||o==="float"&&r.type==="float"?a.jsx(lie,{nodeId:t,field:n,template:r}):o==="enum"&&r.type==="enum"?a.jsx(qae,{nodeId:t,field:n,template:r}):o==="image"&&r.type==="image"?a.jsx(Jae,{nodeId:t,field:n,template:r}):o==="latents"&&r.type==="latents"?a.jsx(tie,{nodeId:t,field:n,template:r}):o==="conditioning"&&r.type==="conditioning"?a.jsx(Fae,{nodeId:t,field:n,template:r}):o==="unet"&&r.type==="unet"?a.jsx(fie,{nodeId:t,field:n,template:r}):o==="clip"&&r.type==="clip"?a.jsx(Pae,{nodeId:t,field:n,template:r}):o==="vae"&&r.type==="vae"?a.jsx(hie,{nodeId:t,field:n,template:r}):o==="control"&&r.type==="control"?a.jsx(Wae,{nodeId:t,field:n,template:r}):o==="model"&&r.type==="model"?a.jsx(aie,{nodeId:t,field:n,template:r}):o==="refiner_model"&&r.type==="refiner_model"?a.jsx(bie,{nodeId:t,field:n,template:r}):o==="vae_model"&&r.type==="vae_model"?a.jsx(gie,{nodeId:t,field:n,template:r}):o==="lora_model"&&r.type==="lora_model"?a.jsx(oie,{nodeId:t,field:n,template:r}):o==="controlnet_model"&&r.type==="controlnet_model"?a.jsx(Uae,{nodeId:t,field:n,template:r}):o==="array"&&r.type==="array"?a.jsx(Sae,{nodeId:t,field:n,template:r}):o==="item"&&r.type==="item"?a.jsx(h_,{nodeId:t,field:n,template:r}):o==="color"&&r.type==="color"?a.jsx(zae,{nodeId:t,field:n,template:r}):o==="item"&&r.type==="item"?a.jsx(h_,{nodeId:t,field:n,template:r}):o==="image_collection"&&r.type==="image_collection"?a.jsx(Xae,{nodeId:t,field:n,template:r}):a.jsxs(Oe,{p:2,children:["Unknown field type: ",o]})},xie=f.memo(yie);function wie(e){const{nodeId:t,input:n,template:r,connected:o}=e,s=r8();return a.jsx(Oe,{className:"nopan",position:"relative",borderColor:r?!o&&["always","connectionOnly"].includes(String(r==null?void 0:r.inputRequirement))&&n.value===void 0?"warning.400":void 0:"error.400",children:a.jsx(go,{isDisabled:r?o:!0,pl:2,children:r?a.jsxs(a.Fragment,{children:[a.jsxs(bi,{justifyContent:"space-between",alignItems:"center",children:[a.jsx(bi,{children:a.jsx(vn,{label:r==null?void 0:r.description,placement:"top",hasArrow:!0,shouldWrapChildren:!0,openDelay:f5,children:a.jsx(Bo,{children:r==null?void 0:r.title})})}),a.jsx(xie,{nodeId:t,field:n,template:r})]}),!["never","directOnly"].includes((r==null?void 0:r.inputRequirement)??"")&&a.jsx(o8,{nodeId:t,field:r,isValidConnection:s,handleType:"target"})]}):a.jsx(bi,{justifyContent:"space-between",alignItems:"center",children:a.jsxs(Bo,{children:["Unknown input: ",n.name]})})})})}const Sie=e=>{const{nodeId:t,template:n,inputs:r}=e,o=B(i=>i.nodes.edges);return f.useCallback(()=>{const i=[],c=cs(r);return c.forEach((d,p)=>{const h=n.inputs[d.name],m=!!o.filter(v=>v.target===t&&v.targetHandle===d.name).length;p{const{nodeId:t,template:n,outputs:r}=e,o=B(i=>i.nodes.edges);return f.useCallback(()=>{const i=[];return cs(r).forEach(d=>{const p=n.outputs[d.name],h=!!o.filter(m=>m.source===t&&m.sourceHandle===d.name).length;i.push(a.jsx(kie,{nodeId:t,output:d,template:p,connected:h},d.id))}),a.jsx(H,{flexDir:"column",children:i})},[o,t,r,n.outputs])()},Pie=f.memo(_ie),jie=e=>{const{...t}=e;return a.jsx(nA,{style:{position:"absolute",border:"none",background:"transparent",width:15,height:15,bottom:0,right:0},minWidth:h5,...t})},K1=f.memo(jie),X1=e=>{const[t,n]=Lc("shadows",["nodeSelectedOutline","dark-lg"]),r=B(o=>o.hotkeys.shift);return a.jsx(Oe,{className:r?px:"nopan",sx:{position:"relative",borderRadius:"md",minWidth:h5,shadow:e.selected?`${t}, ${n}`:`${n}`},children:e.children})},c8=f.memo(e=>{const{id:t,data:n,selected:r}=e,{type:o,inputs:s,outputs:i}=n,c=f.useMemo(()=>fae(o),[o]),d=B(c);return d?a.jsxs(X1,{selected:r,children:[a.jsx(n8,{nodeId:t,title:d.title,description:d.description}),a.jsxs(H,{className:"nopan",sx:{cursor:"auto",flexDirection:"column",borderBottomRadius:"md",py:2,bg:"base.150",_dark:{bg:"base.800"}},children:[a.jsx(Pie,{nodeId:t,outputs:i,template:d}),a.jsx(Cie,{nodeId:t,inputs:s,template:d})]}),a.jsx(K1,{})]}):a.jsx(X1,{selected:r,children:a.jsxs(H,{className:"nopan",sx:{alignItems:"center",justifyContent:"center",cursor:"auto"},children:[a.jsx(fo,{as:ZI,sx:{boxSize:32,color:"base.600",_dark:{color:"base.400"}}}),a.jsx(K1,{})]})})});c8.displayName="InvocationComponent";const Iie=e=>{const t=ww(i=>i.system.progressImage),n=ww(i=>i.nodes.progressNodeSize),r=GM(),{selected:o}=e,s=(i,c)=>{r(qM(c))};return a.jsxs(X1,{selected:o,children:[a.jsx(n8,{title:"Progress Image",description:"Displays the progress image in the Node Editor"}),a.jsx(H,{sx:{flexDirection:"column",flexShrink:0,borderBottomRadius:"md",bg:"base.200",_dark:{bg:"base.800"},width:n.width-2,height:n.height-2,minW:250,minH:250,overflow:"hidden"},children:t?a.jsx(zc,{src:t.dataURL,sx:{w:"full",h:"full",objectFit:"contain"}}):a.jsx(H,{sx:{minW:250,minH:250,width:n.width-2,height:n.height-2},children:a.jsx(tl,{})})}),a.jsx(K1,{onResize:s})]})},Eie=f.memo(Iie),Oie=()=>{const{t:e}=ye(),{zoomIn:t,zoomOut:n,fitView:r}=fb(),o=te(),s=B(w=>w.nodes.shouldShowGraphOverlay),i=B(w=>w.nodes.shouldShowFieldTypeLegend),c=B(w=>w.nodes.shouldShowMinimapPanel),d=f.useCallback(()=>{t()},[t]),p=f.useCallback(()=>{n()},[n]),h=f.useCallback(()=>{r()},[r]),m=f.useCallback(()=>{o(KM(!s))},[s,o]),v=f.useCallback(()=>{o(XM(!i))},[i,o]),b=f.useCallback(()=>{o(YM(!c))},[c,o]);return a.jsxs(rr,{isAttached:!0,orientation:"vertical",children:[a.jsx(vn,{label:e("nodes.zoomInNodes"),children:a.jsx(ze,{"aria-label":"Zoom in ",onClick:d,icon:a.jsx(yl,{})})}),a.jsx(vn,{label:e("nodes.zoomOutNodes"),children:a.jsx(ze,{"aria-label":"Zoom out",onClick:p,icon:a.jsx(tQ,{})})}),a.jsx(vn,{label:e("nodes.fitViewportNodes"),children:a.jsx(ze,{"aria-label":"Fit viewport",onClick:h,icon:a.jsx(HY,{})})}),a.jsx(vn,{label:e(s?"nodes.hideGraphNodes":"nodes.showGraphNodes"),children:a.jsx(ze,{"aria-label":"Toggle nodes graph overlay",isChecked:s,onClick:m,icon:a.jsx(Sy,{})})}),a.jsx(vn,{label:e(i?"nodes.hideLegendNodes":"nodes.showLegendNodes"),children:a.jsx(ze,{"aria-label":"Toggle field type legend",isChecked:i,onClick:v,icon:a.jsx(YY,{})})}),a.jsx(vn,{label:e(c?"nodes.hideMinimapnodes":"nodes.showMinimapnodes"),children:a.jsx(ze,{"aria-label":"Toggle minimap",isChecked:c,onClick:b,icon:a.jsx(ZY,{})})})]})},Rie=f.memo(Oie),Mie=()=>a.jsx(wd,{position:"bottom-left",children:a.jsx(Rie,{})}),Die=f.memo(Mie),Aie=()=>{const e=Ep({background:"var(--invokeai-colors-base-200)"},{background:"var(--invokeai-colors-base-500)"}),t=B(o=>o.nodes.shouldShowMinimapPanel),n=Ep("var(--invokeai-colors-accent-300)","var(--invokeai-colors-accent-700)"),r=Ep("var(--invokeai-colors-blackAlpha-300)","var(--invokeai-colors-blackAlpha-600)");return a.jsx(a.Fragment,{children:t&&a.jsx(G9,{nodeStrokeWidth:3,pannable:!0,zoomable:!0,nodeBorderRadius:30,style:e,nodeColor:n,maskColor:r})})},Tie=f.memo(Aie),Nie=()=>{const{t:e}=ye(),t=te(),{isOpen:n,onOpen:r,onClose:o}=ss(),s=f.useRef(null),i=B(d=>d.nodes.nodes),c=f.useCallback(()=>{t(QM()),t(On(Mn({title:e("toast.nodesCleared"),status:"success"}))),o()},[t,e,o]);return a.jsxs(a.Fragment,{children:[a.jsx(ze,{icon:a.jsx(Oo,{}),tooltip:e("nodes.clearGraph"),"aria-label":e("nodes.clearGraph"),onClick:r,isDisabled:i.length===0}),a.jsxs(zd,{isOpen:n,onClose:o,leastDestructiveRef:s,isCentered:!0,children:[a.jsx(za,{}),a.jsxs(Bd,{children:[a.jsx(La,{fontSize:"lg",fontWeight:"bold",children:e("nodes.clearGraph")}),a.jsx(Ba,{children:a.jsx(Je,{children:e("nodes.clearGraphDesc")})}),a.jsxs($a,{children:[a.jsx(xc,{ref:s,onClick:o,children:e("common.cancel")}),a.jsx(xc,{colorScheme:"red",ml:3,onClick:c,children:e("common.accept")})]})]})]})]})},$ie=f.memo(Nie);function Lie(e){const t=["nodes","edges","viewport"];for(const s of t)if(!(s in e))return{isValid:!1,message:Bn.t("toast.nodesNotValidGraph")};if(!Array.isArray(e.nodes)||!Array.isArray(e.edges))return{isValid:!1,message:Bn.t("toast.nodesNotValidGraph")};const n=["data","type"],r=["invocation","progress_image"];if(e.nodes.length>0)for(const s of e.nodes)for(const i of n){if(!(i in s))return{isValid:!1,message:Bn.t("toast.nodesNotValidGraph")};if(i==="type"&&!r.includes(s[i]))return{isValid:!1,message:Bn.t("toast.nodesUnrecognizedTypes")}}const o=["source","sourceHandle","target","targetHandle"];if(e.edges.length>0){for(const s of e.edges)for(const i of o)if(!(i in s))return{isValid:!1,message:Bn.t("toast.nodesBrokenConnections")}}return{isValid:!0,message:Bn.t("toast.nodesLoaded")}}const zie=()=>{const{t:e}=ye(),t=te(),{fitView:n}=fb(),r=f.useRef(null),o=f.useCallback(s=>{var c;if(!s)return;const i=new FileReader;i.onload=async()=>{const d=i.result;try{const p=await JSON.parse(String(d)),{isValid:h,message:m}=Lie(p);h?(t(JM(p.nodes)),t(ZM(p.edges)),n(),t(On(Mn({title:m,status:"success"})))):t(On(Mn({title:m,status:"error"}))),i.abort()}catch(p){p&&t(On(Mn({title:e("toast.nodesNotValidJSON"),status:"error"})))}},i.readAsText(s),(c=r.current)==null||c.call(r)},[n,t,e]);return a.jsx(_I,{resetRef:r,accept:"application/json",onChange:o,children:s=>a.jsx(ze,{icon:a.jsx(Kd,{}),tooltip:e("nodes.loadGraph"),"aria-label":e("nodes.loadGraph"),...s})})},Bie=f.memo(zie);function Fie(e){const{iconButton:t=!1,...n}=e,r=te(),o=B(Kn),s=Zd(),i=f.useCallback(()=>{r(Pd("nodes"))},[r]),{t:c}=ye();return tt(["ctrl+enter","meta+enter"],i,{enabled:()=>s,preventDefault:!0,enableOnFormTags:["input","textarea","select"]},[s,o]),a.jsx(Oe,{style:{flexGrow:4},position:"relative",children:a.jsxs(Oe,{style:{position:"relative"},children:[!s&&a.jsx(Oe,{borderRadius:"base",style:{position:"absolute",bottom:"0",left:"0",right:"0",height:"100%",overflow:"clip"},children:a.jsx(DO,{})}),t?a.jsx(ze,{"aria-label":c("parameters.invoke"),type:"submit",icon:a.jsx(aE,{}),isDisabled:!s,onClick:i,flexGrow:1,w:"100%",tooltip:c("parameters.invoke"),tooltipProps:{placement:"bottom"},colorScheme:"accent",id:"invoke-button",_disabled:{background:"none",_hover:{background:"none"}},...n}):a.jsx(Yt,{"aria-label":c("parameters.invoke"),type:"submit",isDisabled:!s,onClick:i,flexGrow:1,w:"100%",colorScheme:"accent",id:"invoke-button",fontWeight:700,_disabled:{background:"none",_hover:{background:"none"}},...n,children:"Invoke"})]})})}function Hie(){const{t:e}=ye(),t=te(),n=f.useCallback(()=>{t(eD())},[t]);return a.jsx(ze,{icon:a.jsx(iQ,{}),tooltip:e("nodes.reloadSchema"),"aria-label":e("nodes.reloadSchema"),onClick:n})}const Wie=()=>{const{t:e}=ye(),t=B(o=>o.nodes.editorInstance),n=B(o=>o.nodes.nodes),r=f.useCallback(()=>{if(t){const o=t.toObject();o.edges=cs(o.edges,c=>tD(c,["style"]));const s=new Blob([JSON.stringify(o)]),i=document.createElement("a");i.href=URL.createObjectURL(s),i.download="MyNodes.json",document.body.appendChild(i),i.click(),i.remove()}},[t]);return a.jsx(ze,{icon:a.jsx(Km,{}),fontSize:18,tooltip:e("nodes.saveGraph"),"aria-label":e("nodes.saveGraph"),onClick:r,isDisabled:n.length===0})},Vie=f.memo(Wie),Uie=()=>a.jsx(wd,{position:"top-center",children:a.jsxs(bi,{children:[a.jsx(Fie,{}),a.jsx(cg,{}),a.jsx(Hie,{}),a.jsx(Vie,{}),a.jsx(Bie,{}),a.jsx($ie,{})]})}),Gie=f.memo(Uie),qie=be([at],({nodes:e})=>{const t=cs(e.invocationTemplates,n=>({label:n.title,value:n.type,description:n.description}));return t.push({label:"Progress Image",value:"progress_image",description:"Displays the progress image in the Node Editor"}),{data:t}},Ke),Kie=()=>{const e=te(),{data:t}=B(qie),n=mae(),r=Uc(),o=f.useCallback(i=>{const c=n(i);if(!c){r({status:"error",title:`Unknown Invocation type ${i}`});return}e(nD(c))},[e,n,r]),s=f.useCallback(i=>{i&&o(i)},[o]);return a.jsx(H,{sx:{gap:2,alignItems:"center"},children:a.jsx(ar,{selectOnBlur:!1,placeholder:"Add Node",value:null,data:t,maxDropdownHeight:400,nothingFound:"No matching nodes",itemComponent:u8,filter:(i,c)=>c.label.toLowerCase().includes(i.toLowerCase().trim())||c.value.toLowerCase().includes(i.toLowerCase().trim())||c.description.toLowerCase().includes(i.toLowerCase().trim()),onChange:s,sx:{width:"18rem"}})})},u8=f.forwardRef(({label:e,description:t,...n},r)=>a.jsx("div",{ref:r,...n,children:a.jsxs("div",{children:[a.jsx(Je,{fontWeight:600,children:e}),a.jsx(Je,{size:"xs",sx:{color:"base.600",_dark:{color:"base.500"}},children:t})]})}));u8.displayName="SelectItem";const Xie=()=>a.jsx(wd,{position:"top-left",children:a.jsx(Kie,{})}),Yie=f.memo(Xie),Qie=()=>a.jsx(H,{sx:{gap:2,flexDir:"column"},children:cs(p5,({title:e,description:t,color:n},r)=>a.jsx(vn,{label:t,children:a.jsx(gl,{colorScheme:n,sx:{userSelect:"none"},textAlign:"center",children:e})},r))}),Jie=f.memo(Qie),Zie=()=>{const e=B(n=>n),t=rD(e);return a.jsx(Oe,{as:"pre",sx:{fontFamily:"monospace",position:"absolute",top:2,right:2,opacity:.7,p:2,maxHeight:500,maxWidth:500,overflowY:"scroll",borderRadius:"base",bg:"base.200",_dark:{bg:"base.800"}},children:JSON.stringify(t,null,2)})},ele=f.memo(Zie),tle=()=>{const e=B(n=>n.nodes.shouldShowGraphOverlay),t=B(n=>n.nodes.shouldShowFieldTypeLegend);return a.jsxs(wd,{position:"top-right",children:[t&&a.jsx(Jie,{}),e&&a.jsx(ele,{})]})},nle=f.memo(tle),rle={invocation:c8,progress_image:Eie},ole=()=>{const e=te(),t=B(p=>p.nodes.nodes),n=B(p=>p.nodes.edges),r=f.useCallback(p=>{e(oD(p))},[e]),o=f.useCallback(p=>{e(sD(p))},[e]),s=f.useCallback((p,h)=>{e(aD(h))},[e]),i=f.useCallback(p=>{e(iD(p))},[e]),c=f.useCallback(()=>{e(lD())},[e]),d=f.useCallback(p=>{e(cD(p)),p&&p.fitView()},[e]);return a.jsxs(uD,{nodeTypes:rle,nodes:t,edges:n,onNodesChange:r,onEdgesChange:o,onConnectStart:s,onConnect:i,onConnectEnd:c,onInit:d,defaultEdgeOptions:{style:{strokeWidth:2}},children:[a.jsx(Yie,{}),a.jsx(Gie,{}),a.jsx(nle,{}),a.jsx(Die,{}),a.jsx(J9,{}),a.jsx(Tie,{})]})},sle=()=>a.jsx(Oe,{layerStyle:"first",sx:{position:"relative",width:"full",height:"full",borderRadius:"base"},children:a.jsx(dD,{children:a.jsx(ole,{})})}),ale=f.memo(sle),ile=()=>a.jsx(ale,{}),lle=f.memo(ile),cle=be(at,({ui:e,generation:t})=>{const{shouldUseSliders:n}=e,{shouldRandomizeSeed:r}=t;return{shouldUseSliders:n,activeLabel:r?void 0:"Manual Seed"}},Ke),ule=()=>{const{shouldUseSliders:e,activeLabel:t}=B(cle);return a.jsx(bo,{label:"General",activeLabel:t,defaultIsOpen:!0,children:a.jsx(H,{sx:{flexDirection:"column",gap:3},children:e?a.jsxs(a.Fragment,{children:[a.jsx(ia,{}),a.jsx(ca,{}),a.jsx(aa,{}),a.jsx(la,{}),a.jsx(Oe,{pt:2,children:a.jsx(ua,{})}),a.jsx(Dc,{})]}):a.jsxs(a.Fragment,{children:[a.jsxs(H,{gap:3,children:[a.jsx(ia,{}),a.jsx(ca,{}),a.jsx(aa,{})]}),a.jsx(la,{}),a.jsx(Oe,{pt:2,children:a.jsx(ua,{})}),a.jsx(Dc,{})]})})})},d8=f.memo(ule),f8=()=>a.jsxs(a.Fragment,{children:[a.jsx(sx,{}),a.jsx(Zc,{}),a.jsx(d8,{}),a.jsx(ax,{}),a.jsx(Jc,{}),a.jsx(Qc,{}),a.jsx(Yc,{}),a.jsx(Jd,{})]}),p8=()=>a.jsxs(a.Fragment,{children:[a.jsx(dx,{}),a.jsx(Zc,{}),a.jsx(d8,{}),a.jsx(Jc,{}),a.jsx(Qc,{}),a.jsx(Yc,{}),a.jsx(Jd,{}),a.jsx(ux,{}),a.jsx(GO,{}),a.jsx(cx,{})]}),dle=()=>{const e=B(t=>t.generation.model);return a.jsxs(H,{sx:{gap:4,w:"full",h:"full"},children:[a.jsx(lx,{children:e&&e.base_model==="sdxl"?a.jsx(f8,{}):a.jsx(p8,{})}),a.jsx(UO,{})]})},fle=f.memo(dle),ple=be([at],({generation:e})=>{const{infillMethod:t}=e;return{infillMethod:t}},Ke),hle=()=>{const e=te(),{infillMethod:t}=B(ple),{data:n,isLoading:r}=Z_(),o=n==null?void 0:n.infill_methods,{t:s}=ye(),i=f.useCallback(c=>{e(fD(c))},[e]);return a.jsx(Fr,{disabled:(o==null?void 0:o.length)===0,placeholder:r?"Loading...":void 0,label:s("parameters.infillMethod"),value:t,data:o??[],onChange:i})},mle=f.memo(hle),gle=be([Mi],e=>{const{tileSize:t,infillMethod:n}=e;return{tileSize:t,infillMethod:n}},Ke),vle=()=>{const e=te(),{tileSize:t,infillMethod:n}=B(gle),{t:r}=ye(),o=f.useCallback(i=>{e(Sw(i))},[e]),s=f.useCallback(()=>{e(Sw(32))},[e]);return a.jsx(jt,{isDisabled:n!=="tile",label:r("parameters.tileSize"),min:16,max:64,sliderNumberInputProps:{max:256},value:t,onChange:o,withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:s})},ble=f.memo(vle),yle=be([mn],e=>{const{boundingBoxScaleMethod:t}=e;return{boundingBoxScale:t}},Ke),xle=()=>{const e=te(),{boundingBoxScale:t}=B(yle),{t:n}=ye(),r=o=>{e(hD(o))};return a.jsx(ar,{label:n("parameters.scaleBeforeProcessing"),data:pD,value:t,onChange:r})},wle=f.memo(xle),Sle=be([Mi,vo,mn],(e,t,n)=>{const{scaledBoundingBoxDimensions:r,boundingBoxScaleMethod:o}=n;return{scaledBoundingBoxDimensions:r,isManual:o==="manual"}},Ke),Cle=()=>{const e=te(),{isManual:t,scaledBoundingBoxDimensions:n}=B(Sle),{t:r}=ye(),o=i=>{e(Kp({...n,height:Math.floor(i)}))},s=()=>{e(Kp({...n,height:Math.floor(512)}))};return a.jsx(jt,{isDisabled:!t,label:r("parameters.scaledHeight"),min:64,max:1024,step:64,value:n.height,onChange:o,sliderNumberInputProps:{max:4096},withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:s})},kle=f.memo(Cle),_le=be([mn],e=>{const{boundingBoxScaleMethod:t,scaledBoundingBoxDimensions:n}=e;return{scaledBoundingBoxDimensions:n,isManual:t==="manual"}},Ke),Ple=()=>{const e=te(),{isManual:t,scaledBoundingBoxDimensions:n}=B(_le),{t:r}=ye(),o=i=>{e(Kp({...n,width:Math.floor(i)}))},s=()=>{e(Kp({...n,width:Math.floor(512)}))};return a.jsx(jt,{isDisabled:!t,label:r("parameters.scaledWidth"),min:64,max:1024,step:64,value:n.width,onChange:o,sliderNumberInputProps:{max:4096},withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:s})},jle=f.memo(Ple),Ile=()=>{const{t:e}=ye();return a.jsx(bo,{label:e("parameters.infillScalingHeader"),children:a.jsxs(H,{sx:{gap:2,flexDirection:"column"},children:[a.jsx(mle,{}),a.jsx(ble,{}),a.jsx(wle,{}),a.jsx(jle,{}),a.jsx(kle,{})]})})},h8=f.memo(Ile);function Ele(){const e=te(),t=B(r=>r.generation.maskBlur),{t:n}=ye();return a.jsx(jt,{label:n("parameters.maskBlur"),min:0,max:64,sliderNumberInputProps:{max:512},value:t,onChange:r=>{e(Cw(r))},withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:()=>{e(Cw(16))}})}const Ole=[{label:"Box Blur",value:"box"},{label:"Gaussian Blur",value:"gaussian"}];function Rle(){const e=B(o=>o.generation.maskBlurMethod),t=te(),{t:n}=ye(),r=o=>{o&&t(mD(o))};return a.jsx(Fr,{value:e,onChange:r,label:n("parameters.maskBlurMethod"),data:Ole})}const Mle=()=>{const{t:e}=ye();return a.jsx(bo,{label:e("parameters.maskAdjustmentsHeader"),children:a.jsxs(H,{sx:{flexDirection:"column",gap:2},children:[a.jsx(Ele,{}),a.jsx(Rle,{})]})})},m8=f.memo(Mle),Dle=be([at,lr],({canvas:e,generation:t},n)=>{const{boundingBoxDimensions:r}=e,{aspectRatio:o}=t;return{boundingBoxDimensions:r,isStaging:n,aspectRatio:o}},Ke),Ale=()=>{const e=te(),{boundingBoxDimensions:t,isStaging:n,aspectRatio:r}=B(Dle),{t:o}=ye(),s=c=>{if(e(Js({...t,height:Math.floor(c)})),r){const d=ws(c*r,64);e(Js({width:d,height:Math.floor(c)}))}},i=()=>{if(e(Js({...t,height:Math.floor(512)})),r){const c=ws(512*r,64);e(Js({width:c,height:Math.floor(512)}))}};return a.jsx(jt,{label:o("parameters.boundingBoxHeight"),min:64,max:1024,step:64,value:t.height,onChange:s,isDisabled:n,sliderNumberInputProps:{max:4096},withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:i})},Tle=f.memo(Ale),Nle=be([at,lr],({canvas:e,generation:t},n)=>{const{boundingBoxDimensions:r}=e,{aspectRatio:o}=t;return{boundingBoxDimensions:r,isStaging:n,aspectRatio:o}},Ke),$le=()=>{const e=te(),{boundingBoxDimensions:t,isStaging:n,aspectRatio:r}=B(Nle),{t:o}=ye(),s=c=>{if(e(Js({...t,width:Math.floor(c)})),r){const d=ws(c/r,64);e(Js({width:Math.floor(c),height:d}))}},i=()=>{if(e(Js({...t,width:Math.floor(512)})),r){const c=ws(512/r,64);e(Js({width:Math.floor(512),height:c}))}};return a.jsx(jt,{label:o("parameters.boundingBoxWidth"),min:64,max:1024,step:64,value:t.width,onChange:s,isDisabled:n,sliderNumberInputProps:{max:4096},withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:i})},Lle=f.memo($le);function cm(){const e=te(),{t}=ye();return a.jsxs(H,{sx:{gap:2,p:4,borderRadius:4,flexDirection:"column",w:"full",bg:"base.150",_dark:{bg:"base.750"}},children:[a.jsxs(H,{alignItems:"center",gap:2,children:[a.jsx(Je,{sx:{fontSize:"sm",width:"full",color:"base.700",_dark:{color:"base.300"}},children:t("parameters.aspectRatio")}),a.jsx(ml,{}),a.jsx(LO,{}),a.jsx(ze,{tooltip:t("ui.swapSizes"),"aria-label":t("ui.swapSizes"),size:"sm",icon:a.jsx(vO,{}),fontSize:20,onClick:()=>e(gD())})]}),a.jsx(Lle,{}),a.jsx(Tle,{})]})}const zle=be(at,({ui:e,generation:t})=>{const{shouldUseSliders:n}=e,{shouldRandomizeSeed:r}=t;return{shouldUseSliders:n,activeLabel:r?void 0:"Manual Seed"}},Ke),Ble=()=>{const{shouldUseSliders:e,activeLabel:t}=B(zle);return a.jsx(bo,{label:"General",activeLabel:t,defaultIsOpen:!0,children:a.jsxs(H,{sx:{flexDirection:"column",gap:3},children:[e?a.jsxs(a.Fragment,{children:[a.jsx(ia,{}),a.jsx(ca,{}),a.jsx(aa,{}),a.jsx(la,{}),a.jsx(Oe,{pt:2,children:a.jsx(ua,{})}),a.jsx(cm,{})]}):a.jsxs(a.Fragment,{children:[a.jsxs(H,{gap:3,children:[a.jsx(ia,{}),a.jsx(ca,{}),a.jsx(aa,{})]}),a.jsx(la,{}),a.jsx(Oe,{pt:2,children:a.jsx(ua,{})}),a.jsx(cm,{})]}),a.jsx(BO,{})]})})},Fle=f.memo(Ble);function Hle(){return a.jsxs(a.Fragment,{children:[a.jsx(sx,{}),a.jsx(Zc,{}),a.jsx(Fle,{}),a.jsx(ax,{}),a.jsx(Jc,{}),a.jsx(Qc,{}),a.jsx(Yc,{}),a.jsx(Jd,{}),a.jsx(m8,{}),a.jsx(h8,{})]})}var Y1={exports:{}};(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Konva=void 0;var n=kw;Object.defineProperty(t,"Konva",{enumerable:!0,get:function(){return n.Konva}});const r=kw;e.exports=r.Konva})(Y1,Y1.exports);var Wle=Y1.exports;const xd=Cd(Wle);var g8={exports:{}};/** + * @license React + * react-reconciler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Vle=function(t){var n={},r=f,o=Op,s=Object.assign;function i(l){for(var u="https://reactjs.org/docs/error-decoder.html?invariant="+l,g=1;gZ||C[N]!==j[Z]){var ue=` +`+C[N].replace(" at new "," at ");return l.displayName&&ue.includes("")&&(ue=ue.replace("",l.displayName)),ue}while(1<=N&&0<=Z);break}}}finally{qt=!1,Error.prepareStackTrace=g}return(l=l?l.displayName||l.name:"")?Nt(l):""}var en=Object.prototype.hasOwnProperty,Ut=[],Be=-1;function yt(l){return{current:l}}function Mt(l){0>Be||(l.current=Ut[Be],Ut[Be]=null,Be--)}function Wt(l,u){Be++,Ut[Be]=l.current,l.current=u}var jn={},Gt=yt(jn),un=yt(!1),sn=jn;function Or(l,u){var g=l.type.contextTypes;if(!g)return jn;var x=l.stateNode;if(x&&x.__reactInternalMemoizedUnmaskedChildContext===u)return x.__reactInternalMemoizedMaskedChildContext;var C={},j;for(j in g)C[j]=u[j];return x&&(l=l.stateNode,l.__reactInternalMemoizedUnmaskedChildContext=u,l.__reactInternalMemoizedMaskedChildContext=C),C}function Jn(l){return l=l.childContextTypes,l!=null}function It(){Mt(un),Mt(Gt)}function In(l,u,g){if(Gt.current!==jn)throw Error(i(168));Wt(Gt,u),Wt(un,g)}function Rn(l,u,g){var x=l.stateNode;if(u=u.childContextTypes,typeof x.getChildContext!="function")return g;x=x.getChildContext();for(var C in x)if(!(C in u))throw Error(i(108,M(l)||"Unknown",C));return s({},g,x)}function Zn(l){return l=(l=l.stateNode)&&l.__reactInternalMemoizedMergedChildContext||jn,sn=Gt.current,Wt(Gt,l),Wt(un,un.current),!0}function mr(l,u,g){var x=l.stateNode;if(!x)throw Error(i(169));g?(l=Rn(l,u,sn),x.__reactInternalMemoizedMergedChildContext=l,Mt(un),Mt(Gt),Wt(Gt,l)):Mt(un),Wt(un,g)}var Tn=Math.clz32?Math.clz32:Sn,Nn=Math.log,dn=Math.LN2;function Sn(l){return l>>>=0,l===0?32:31-(Nn(l)/dn|0)|0}var En=64,bn=4194304;function yn(l){switch(l&-l){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return l&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return l&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return l}}function qe(l,u){var g=l.pendingLanes;if(g===0)return 0;var x=0,C=l.suspendedLanes,j=l.pingedLanes,N=g&268435455;if(N!==0){var Z=N&~C;Z!==0?x=yn(Z):(j&=N,j!==0&&(x=yn(j)))}else N=g&~C,N!==0?x=yn(N):j!==0&&(x=yn(j));if(x===0)return 0;if(u!==0&&u!==x&&!(u&C)&&(C=x&-x,j=u&-u,C>=j||C===16&&(j&4194240)!==0))return u;if(x&4&&(x|=g&16),u=l.entangledLanes,u!==0)for(l=l.entanglements,u&=x;0g;g++)u.push(l);return u}function mt(l,u,g){l.pendingLanes|=u,u!==536870912&&(l.suspendedLanes=0,l.pingedLanes=0),l=l.eventTimes,u=31-Tn(u),l[u]=g}function rt(l,u){var g=l.pendingLanes&~u;l.pendingLanes=u,l.suspendedLanes=0,l.pingedLanes=0,l.expiredLanes&=u,l.mutableReadLanes&=u,l.entangledLanes&=u,u=l.entanglements;var x=l.eventTimes;for(l=l.expirationTimes;0>=N,C-=N,To=1<<32-Tn(u)+C|g<Cn?(Br=Jt,Jt=null):Br=Jt.sibling;var kn=it(ce,Jt,ve[Cn],lt);if(kn===null){Jt===null&&(Jt=Br);break}l&&Jt&&kn.alternate===null&&u(ce,Jt),ne=j(kn,ne,Cn),rn===null?At=kn:rn.sibling=kn,rn=kn,Jt=Br}if(Cn===ve.length)return g(ce,Jt),er&&Ai(ce,Cn),At;if(Jt===null){for(;CnCn?(Br=Jt,Jt=null):Br=Jt.sibling;var si=it(ce,Jt,kn.value,lt);if(si===null){Jt===null&&(Jt=Br);break}l&&Jt&&si.alternate===null&&u(ce,Jt),ne=j(si,ne,Cn),rn===null?At=si:rn.sibling=si,rn=si,Jt=Br}if(kn.done)return g(ce,Jt),er&&Ai(ce,Cn),At;if(Jt===null){for(;!kn.done;Cn++,kn=ve.next())kn=Qt(ce,kn.value,lt),kn!==null&&(ne=j(kn,ne,Cn),rn===null?At=kn:rn.sibling=kn,rn=kn);return er&&Ai(ce,Cn),At}for(Jt=x(ce,Jt);!kn.done;Cn++,kn=ve.next())kn=Yn(Jt,ce,Cn,kn.value,lt),kn!==null&&(l&&kn.alternate!==null&&Jt.delete(kn.key===null?Cn:kn.key),ne=j(kn,ne,Cn),rn===null?At=kn:rn.sibling=kn,rn=kn);return l&&Jt.forEach(function(dR){return u(ce,dR)}),er&&Ai(ce,Cn),At}function Sa(ce,ne,ve,lt){if(typeof ve=="object"&&ve!==null&&ve.type===h&&ve.key===null&&(ve=ve.props.children),typeof ve=="object"&&ve!==null){switch(ve.$$typeof){case d:e:{for(var At=ve.key,rn=ne;rn!==null;){if(rn.key===At){if(At=ve.type,At===h){if(rn.tag===7){g(ce,rn.sibling),ne=C(rn,ve.props.children),ne.return=ce,ce=ne;break e}}else if(rn.elementType===At||typeof At=="object"&&At!==null&&At.$$typeof===P&&Dx(At)===rn.type){g(ce,rn.sibling),ne=C(rn,ve.props),ne.ref=nu(ce,rn,ve),ne.return=ce,ce=ne;break e}g(ce,rn);break}else u(ce,rn);rn=rn.sibling}ve.type===h?(ne=Fi(ve.props.children,ce.mode,lt,ve.key),ne.return=ce,ce=ne):(lt=$f(ve.type,ve.key,ve.props,null,ce.mode,lt),lt.ref=nu(ce,ne,ve),lt.return=ce,ce=lt)}return N(ce);case p:e:{for(rn=ve.key;ne!==null;){if(ne.key===rn)if(ne.tag===4&&ne.stateNode.containerInfo===ve.containerInfo&&ne.stateNode.implementation===ve.implementation){g(ce,ne.sibling),ne=C(ne,ve.children||[]),ne.return=ce,ce=ne;break e}else{g(ce,ne);break}else u(ce,ne);ne=ne.sibling}ne=b0(ve,ce.mode,lt),ne.return=ce,ce=ne}return N(ce);case P:return rn=ve._init,Sa(ce,ne,rn(ve._payload),lt)}if(q(ve))return Ln(ce,ne,ve,lt);if(O(ve))return So(ce,ne,ve,lt);df(ce,ve)}return typeof ve=="string"&&ve!==""||typeof ve=="number"?(ve=""+ve,ne!==null&&ne.tag===6?(g(ce,ne.sibling),ne=C(ne,ve),ne.return=ce,ce=ne):(g(ce,ne),ne=v0(ve,ce.mode,lt),ne.return=ce,ce=ne),N(ce)):g(ce,ne)}return Sa}var Il=Ax(!0),Tx=Ax(!1),ru={},Go=yt(ru),ou=yt(ru),El=yt(ru);function Fs(l){if(l===ru)throw Error(i(174));return l}function Rg(l,u){Wt(El,u),Wt(ou,l),Wt(Go,ru),l=T(u),Mt(Go),Wt(Go,l)}function Ol(){Mt(Go),Mt(ou),Mt(El)}function Nx(l){var u=Fs(El.current),g=Fs(Go.current);u=z(g,l.type,u),g!==u&&(Wt(ou,l),Wt(Go,u))}function Mg(l){ou.current===l&&(Mt(Go),Mt(ou))}var ur=yt(0);function ff(l){for(var u=l;u!==null;){if(u.tag===13){var g=u.memoizedState;if(g!==null&&(g=g.dehydrated,g===null||$r(g)||$s(g)))return u}else if(u.tag===19&&u.memoizedProps.revealOrder!==void 0){if(u.flags&128)return u}else if(u.child!==null){u.child.return=u,u=u.child;continue}if(u===l)break;for(;u.sibling===null;){if(u.return===null||u.return===l)return null;u=u.return}u.sibling.return=u.return,u=u.sibling}return null}var Dg=[];function Ag(){for(var l=0;lg?g:4,l(!0);var x=Tg.transition;Tg.transition={};try{l(!1),u()}finally{Ie=g,Tg.transition=x}}function e2(){return qo().memoizedState}function L8(l,u,g){var x=ni(l);if(g={lane:x,action:g,hasEagerState:!1,eagerState:null,next:null},t2(l))n2(u,g);else if(g=_x(l,u,g,x),g!==null){var C=eo();Ko(g,l,x,C),r2(g,u,x)}}function z8(l,u,g){var x=ni(l),C={lane:x,action:g,hasEagerState:!1,eagerState:null,next:null};if(t2(l))n2(u,C);else{var j=l.alternate;if(l.lanes===0&&(j===null||j.lanes===0)&&(j=u.lastRenderedReducer,j!==null))try{var N=u.lastRenderedState,Z=j(N,g);if(C.hasEagerState=!0,C.eagerState=Z,fn(Z,N)){var ue=u.interleaved;ue===null?(C.next=C,jg(u)):(C.next=ue.next,ue.next=C),u.interleaved=C;return}}catch{}finally{}g=_x(l,u,C,x),g!==null&&(C=eo(),Ko(g,l,x,C),r2(g,u,x))}}function t2(l){var u=l.alternate;return l===dr||u!==null&&u===dr}function n2(l,u){su=hf=!0;var g=l.pending;g===null?u.next=u:(u.next=g.next,g.next=u),l.pending=u}function r2(l,u,g){if(g&4194240){var x=u.lanes;x&=l.pendingLanes,g|=x,u.lanes=g,Re(l,g)}}var vf={readContext:Uo,useCallback:Qr,useContext:Qr,useEffect:Qr,useImperativeHandle:Qr,useInsertionEffect:Qr,useLayoutEffect:Qr,useMemo:Qr,useReducer:Qr,useRef:Qr,useState:Qr,useDebugValue:Qr,useDeferredValue:Qr,useTransition:Qr,useMutableSource:Qr,useSyncExternalStore:Qr,useId:Qr,unstable_isNewReconciler:!1},B8={readContext:Uo,useCallback:function(l,u){return Hs().memoizedState=[l,u===void 0?null:u],l},useContext:Uo,useEffect:Gx,useImperativeHandle:function(l,u,g){return g=g!=null?g.concat([l]):null,mf(4194308,4,Xx.bind(null,u,l),g)},useLayoutEffect:function(l,u){return mf(4194308,4,l,u)},useInsertionEffect:function(l,u){return mf(4,2,l,u)},useMemo:function(l,u){var g=Hs();return u=u===void 0?null:u,l=l(),g.memoizedState=[l,u],l},useReducer:function(l,u,g){var x=Hs();return u=g!==void 0?g(u):u,x.memoizedState=x.baseState=u,l={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:l,lastRenderedState:u},x.queue=l,l=l.dispatch=L8.bind(null,dr,l),[x.memoizedState,l]},useRef:function(l){var u=Hs();return l={current:l},u.memoizedState=l},useState:Vx,useDebugValue:Hg,useDeferredValue:function(l){return Hs().memoizedState=l},useTransition:function(){var l=Vx(!1),u=l[0];return l=$8.bind(null,l[1]),Hs().memoizedState=l,[u,l]},useMutableSource:function(){},useSyncExternalStore:function(l,u,g){var x=dr,C=Hs();if(er){if(g===void 0)throw Error(i(407));g=g()}else{if(g=u(),zr===null)throw Error(i(349));Ni&30||zx(x,u,g)}C.memoizedState=g;var j={value:g,getSnapshot:u};return C.queue=j,Gx(Fx.bind(null,x,j,l),[l]),x.flags|=2048,lu(9,Bx.bind(null,x,j,g,u),void 0,null),g},useId:function(){var l=Hs(),u=zr.identifierPrefix;if(er){var g=Yr,x=To;g=(x&~(1<<32-Tn(x)-1)).toString(32)+g,u=":"+u+"R"+g,g=au++,0c0&&(u.flags|=128,x=!0,du(C,!1),u.lanes=4194304)}else{if(!x)if(l=ff(j),l!==null){if(u.flags|=128,x=!0,l=l.updateQueue,l!==null&&(u.updateQueue=l,u.flags|=4),du(C,!0),C.tail===null&&C.tailMode==="hidden"&&!j.alternate&&!er)return Jr(u),null}else 2*Ve()-C.renderingStartTime>c0&&g!==1073741824&&(u.flags|=128,x=!0,du(C,!1),u.lanes=4194304);C.isBackwards?(j.sibling=u.child,u.child=j):(l=C.last,l!==null?l.sibling=j:u.child=j,C.last=j)}return C.tail!==null?(u=C.tail,C.rendering=u,C.tail=u.sibling,C.renderingStartTime=Ve(),u.sibling=null,l=ur.current,Wt(ur,x?l&1|2:l&1),u):(Jr(u),null);case 22:case 23:return h0(),g=u.memoizedState!==null,l!==null&&l.memoizedState!==null!==g&&(u.flags|=8192),g&&u.mode&1?$o&1073741824&&(Jr(u),le&&u.subtreeFlags&6&&(u.flags|=8192)):Jr(u),null;case 24:return null;case 25:return null}throw Error(i(156,u.tag))}function K8(l,u){switch(yg(u),u.tag){case 1:return Jn(u.type)&&It(),l=u.flags,l&65536?(u.flags=l&-65537|128,u):null;case 3:return Ol(),Mt(un),Mt(Gt),Ag(),l=u.flags,l&65536&&!(l&128)?(u.flags=l&-65537|128,u):null;case 5:return Mg(u),null;case 13:if(Mt(ur),l=u.memoizedState,l!==null&&l.dehydrated!==null){if(u.alternate===null)throw Error(i(340));_l()}return l=u.flags,l&65536?(u.flags=l&-65537|128,u):null;case 19:return Mt(ur),null;case 4:return Ol(),null;case 10:return _g(u.type._context),null;case 22:case 23:return h0(),null;case 24:return null;default:return null}}var Sf=!1,Zr=!1,X8=typeof WeakSet=="function"?WeakSet:Set,pt=null;function Ml(l,u){var g=l.ref;if(g!==null)if(typeof g=="function")try{g(null)}catch(x){tr(l,u,x)}else g.current=null}function Qg(l,u,g){try{g()}catch(x){tr(l,u,x)}}var S2=!1;function Y8(l,u){for($(l.containerInfo),pt=u;pt!==null;)if(l=pt,u=l.child,(l.subtreeFlags&1028)!==0&&u!==null)u.return=l,pt=u;else for(;pt!==null;){l=pt;try{var g=l.alternate;if(l.flags&1024)switch(l.tag){case 0:case 11:case 15:break;case 1:if(g!==null){var x=g.memoizedProps,C=g.memoizedState,j=l.stateNode,N=j.getSnapshotBeforeUpdate(l.elementType===l.type?x:hs(l.type,x),C);j.__reactInternalSnapshotBeforeUpdate=N}break;case 3:le&&ln(l.stateNode.containerInfo);break;case 5:case 6:case 4:case 17:break;default:throw Error(i(163))}}catch(Z){tr(l,l.return,Z)}if(u=l.sibling,u!==null){u.return=l.return,pt=u;break}pt=l.return}return g=S2,S2=!1,g}function fu(l,u,g){var x=u.updateQueue;if(x=x!==null?x.lastEffect:null,x!==null){var C=x=x.next;do{if((C.tag&l)===l){var j=C.destroy;C.destroy=void 0,j!==void 0&&Qg(u,g,j)}C=C.next}while(C!==x)}}function Cf(l,u){if(u=u.updateQueue,u=u!==null?u.lastEffect:null,u!==null){var g=u=u.next;do{if((g.tag&l)===l){var x=g.create;g.destroy=x()}g=g.next}while(g!==u)}}function Jg(l){var u=l.ref;if(u!==null){var g=l.stateNode;switch(l.tag){case 5:l=G(g);break;default:l=g}typeof u=="function"?u(l):u.current=l}}function C2(l){var u=l.alternate;u!==null&&(l.alternate=null,C2(u)),l.child=null,l.deletions=null,l.sibling=null,l.tag===5&&(u=l.stateNode,u!==null&&Ee(u)),l.stateNode=null,l.return=null,l.dependencies=null,l.memoizedProps=null,l.memoizedState=null,l.pendingProps=null,l.stateNode=null,l.updateQueue=null}function k2(l){return l.tag===5||l.tag===3||l.tag===4}function _2(l){e:for(;;){for(;l.sibling===null;){if(l.return===null||k2(l.return))return null;l=l.return}for(l.sibling.return=l.return,l=l.sibling;l.tag!==5&&l.tag!==6&&l.tag!==18;){if(l.flags&2||l.child===null||l.tag===4)continue e;l.child.return=l,l=l.child}if(!(l.flags&2))return l.stateNode}}function Zg(l,u,g){var x=l.tag;if(x===5||x===6)l=l.stateNode,u?Pn(g,l,u):ht(g,l);else if(x!==4&&(l=l.child,l!==null))for(Zg(l,u,g),l=l.sibling;l!==null;)Zg(l,u,g),l=l.sibling}function e0(l,u,g){var x=l.tag;if(x===5||x===6)l=l.stateNode,u?Ge(g,l,u):we(g,l);else if(x!==4&&(l=l.child,l!==null))for(e0(l,u,g),l=l.sibling;l!==null;)e0(l,u,g),l=l.sibling}var qr=null,ms=!1;function Vs(l,u,g){for(g=g.child;g!==null;)t0(l,u,g),g=g.sibling}function t0(l,u,g){if(gn&&typeof gn.onCommitFiberUnmount=="function")try{gn.onCommitFiberUnmount(Xn,g)}catch{}switch(g.tag){case 5:Zr||Ml(g,u);case 6:if(le){var x=qr,C=ms;qr=null,Vs(l,u,g),qr=x,ms=C,qr!==null&&(ms?Qe(qr,g.stateNode):Pe(qr,g.stateNode))}else Vs(l,u,g);break;case 18:le&&qr!==null&&(ms?He(qr,g.stateNode):xt(qr,g.stateNode));break;case 4:le?(x=qr,C=ms,qr=g.stateNode.containerInfo,ms=!0,Vs(l,u,g),qr=x,ms=C):(ge&&(x=g.stateNode.containerInfo,C=xr(x),Wn(x,C)),Vs(l,u,g));break;case 0:case 11:case 14:case 15:if(!Zr&&(x=g.updateQueue,x!==null&&(x=x.lastEffect,x!==null))){C=x=x.next;do{var j=C,N=j.destroy;j=j.tag,N!==void 0&&(j&2||j&4)&&Qg(g,u,N),C=C.next}while(C!==x)}Vs(l,u,g);break;case 1:if(!Zr&&(Ml(g,u),x=g.stateNode,typeof x.componentWillUnmount=="function"))try{x.props=g.memoizedProps,x.state=g.memoizedState,x.componentWillUnmount()}catch(Z){tr(g,u,Z)}Vs(l,u,g);break;case 21:Vs(l,u,g);break;case 22:g.mode&1?(Zr=(x=Zr)||g.memoizedState!==null,Vs(l,u,g),Zr=x):Vs(l,u,g);break;default:Vs(l,u,g)}}function P2(l){var u=l.updateQueue;if(u!==null){l.updateQueue=null;var g=l.stateNode;g===null&&(g=l.stateNode=new X8),u.forEach(function(x){var C=sR.bind(null,l,x);g.has(x)||(g.add(x),x.then(C,C))})}}function gs(l,u){var g=u.deletions;if(g!==null)for(var x=0;x";case _f:return":has("+(o0(l)||"")+")";case Pf:return'[role="'+l.value+'"]';case If:return'"'+l.value+'"';case jf:return'[data-testname="'+l.value+'"]';default:throw Error(i(365))}}function M2(l,u){var g=[];l=[l,0];for(var x=0;xC&&(C=N),x&=~j}if(x=C,x=Ve()-x,x=(120>x?120:480>x?480:1080>x?1080:1920>x?1920:3e3>x?3e3:4320>x?4320:1960*J8(x/1960))-x,10l?16:l,ti===null)var x=!1;else{if(l=ti,ti=null,Df=0,an&6)throw Error(i(331));var C=an;for(an|=4,pt=l.current;pt!==null;){var j=pt,N=j.child;if(pt.flags&16){var Z=j.deletions;if(Z!==null){for(var ue=0;ueVe()-l0?Li(l,0):i0|=g),wo(l,u)}function F2(l,u){u===0&&(l.mode&1?(u=bn,bn<<=1,!(bn&130023424)&&(bn=4194304)):u=1);var g=eo();l=Bs(l,u),l!==null&&(mt(l,u,g),wo(l,g))}function oR(l){var u=l.memoizedState,g=0;u!==null&&(g=u.retryLane),F2(l,g)}function sR(l,u){var g=0;switch(l.tag){case 13:var x=l.stateNode,C=l.memoizedState;C!==null&&(g=C.retryLane);break;case 19:x=l.stateNode;break;default:throw Error(i(314))}x!==null&&x.delete(u),F2(l,g)}var H2;H2=function(l,u,g){if(l!==null)if(l.memoizedProps!==u.pendingProps||un.current)yo=!0;else{if(!(l.lanes&g)&&!(u.flags&128))return yo=!1,G8(l,u,g);yo=!!(l.flags&131072)}else yo=!1,er&&u.flags&1048576&&yx(u,io,u.index);switch(u.lanes=0,u.tag){case 2:var x=u.type;yf(l,u),l=u.pendingProps;var C=Or(u,Gt.current);jl(u,g),C=$g(null,u,x,l,C,g);var j=Lg();return u.flags|=1,typeof C=="object"&&C!==null&&typeof C.render=="function"&&C.$$typeof===void 0?(u.tag=1,u.memoizedState=null,u.updateQueue=null,Jn(x)?(j=!0,Zn(u)):j=!1,u.memoizedState=C.state!==null&&C.state!==void 0?C.state:null,Ig(u),C.updater=uf,u.stateNode=C,C._reactInternals=u,Og(u,x,l,g),u=Gg(null,u,x,!0,j,g)):(u.tag=0,er&&j&&bg(u),uo(null,u,C,g),u=u.child),u;case 16:x=u.elementType;e:{switch(yf(l,u),l=u.pendingProps,C=x._init,x=C(x._payload),u.type=x,C=u.tag=iR(x),l=hs(x,l),C){case 0:u=Ug(null,u,x,l,g);break e;case 1:u=h2(null,u,x,l,g);break e;case 11:u=c2(null,u,x,l,g);break e;case 14:u=u2(null,u,x,hs(x.type,l),g);break e}throw Error(i(306,x,""))}return u;case 0:return x=u.type,C=u.pendingProps,C=u.elementType===x?C:hs(x,C),Ug(l,u,x,C,g);case 1:return x=u.type,C=u.pendingProps,C=u.elementType===x?C:hs(x,C),h2(l,u,x,C,g);case 3:e:{if(m2(u),l===null)throw Error(i(387));x=u.pendingProps,j=u.memoizedState,C=j.element,Px(l,u),cf(u,x,null,g);var N=u.memoizedState;if(x=N.element,ke&&j.isDehydrated)if(j={element:x,isDehydrated:!1,cache:N.cache,pendingSuspenseBoundaries:N.pendingSuspenseBoundaries,transitions:N.transitions},u.updateQueue.baseState=j,u.memoizedState=j,u.flags&256){C=Rl(Error(i(423)),u),u=g2(l,u,x,g,C);break e}else if(x!==C){C=Rl(Error(i(424)),u),u=g2(l,u,x,g,C);break e}else for(ke&&(Vo=ee(u.stateNode.containerInfo),No=u,er=!0,ps=null,tu=!1),g=Tx(u,null,x,g),u.child=g;g;)g.flags=g.flags&-3|4096,g=g.sibling;else{if(_l(),x===C){u=xa(l,u,g);break e}uo(l,u,x,g)}u=u.child}return u;case 5:return Nx(u),l===null&&wg(u),x=u.type,C=u.pendingProps,j=l!==null?l.memoizedProps:null,N=C.children,K(x,C)?N=null:j!==null&&K(x,j)&&(u.flags|=32),p2(l,u),uo(l,u,N,g),u.child;case 6:return l===null&&wg(u),null;case 13:return v2(l,u,g);case 4:return Rg(u,u.stateNode.containerInfo),x=u.pendingProps,l===null?u.child=Il(u,null,x,g):uo(l,u,x,g),u.child;case 11:return x=u.type,C=u.pendingProps,C=u.elementType===x?C:hs(x,C),c2(l,u,x,C,g);case 7:return uo(l,u,u.pendingProps,g),u.child;case 8:return uo(l,u,u.pendingProps.children,g),u.child;case 12:return uo(l,u,u.pendingProps.children,g),u.child;case 10:e:{if(x=u.type._context,C=u.pendingProps,j=u.memoizedProps,N=C.value,kx(u,x,N),j!==null)if(fn(j.value,N)){if(j.children===C.children&&!un.current){u=xa(l,u,g);break e}}else for(j=u.child,j!==null&&(j.return=u);j!==null;){var Z=j.dependencies;if(Z!==null){N=j.child;for(var ue=Z.firstContext;ue!==null;){if(ue.context===x){if(j.tag===1){ue=ya(-1,g&-g),ue.tag=2;var Ne=j.updateQueue;if(Ne!==null){Ne=Ne.shared;var gt=Ne.pending;gt===null?ue.next=ue:(ue.next=gt.next,gt.next=ue),Ne.pending=ue}}j.lanes|=g,ue=j.alternate,ue!==null&&(ue.lanes|=g),Pg(j.return,g,u),Z.lanes|=g;break}ue=ue.next}}else if(j.tag===10)N=j.type===u.type?null:j.child;else if(j.tag===18){if(N=j.return,N===null)throw Error(i(341));N.lanes|=g,Z=N.alternate,Z!==null&&(Z.lanes|=g),Pg(N,g,u),N=j.sibling}else N=j.child;if(N!==null)N.return=j;else for(N=j;N!==null;){if(N===u){N=null;break}if(j=N.sibling,j!==null){j.return=N.return,N=j;break}N=N.return}j=N}uo(l,u,C.children,g),u=u.child}return u;case 9:return C=u.type,x=u.pendingProps.children,jl(u,g),C=Uo(C),x=x(C),u.flags|=1,uo(l,u,x,g),u.child;case 14:return x=u.type,C=hs(x,u.pendingProps),C=hs(x.type,C),u2(l,u,x,C,g);case 15:return d2(l,u,u.type,u.pendingProps,g);case 17:return x=u.type,C=u.pendingProps,C=u.elementType===x?C:hs(x,C),yf(l,u),u.tag=1,Jn(x)?(l=!0,Zn(u)):l=!1,jl(u,g),Rx(u,x,C),Og(u,x,C,g),Gg(null,u,x,!0,l,g);case 19:return y2(l,u,g);case 22:return f2(l,u,g)}throw Error(i(156,u.tag))};function W2(l,u){return We(l,u)}function aR(l,u,g,x){this.tag=l,this.key=g,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=u,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=x,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Xo(l,u,g,x){return new aR(l,u,g,x)}function g0(l){return l=l.prototype,!(!l||!l.isReactComponent)}function iR(l){if(typeof l=="function")return g0(l)?1:0;if(l!=null){if(l=l.$$typeof,l===y)return 11;if(l===_)return 14}return 2}function oi(l,u){var g=l.alternate;return g===null?(g=Xo(l.tag,u,l.key,l.mode),g.elementType=l.elementType,g.type=l.type,g.stateNode=l.stateNode,g.alternate=l,l.alternate=g):(g.pendingProps=u,g.type=l.type,g.flags=0,g.subtreeFlags=0,g.deletions=null),g.flags=l.flags&14680064,g.childLanes=l.childLanes,g.lanes=l.lanes,g.child=l.child,g.memoizedProps=l.memoizedProps,g.memoizedState=l.memoizedState,g.updateQueue=l.updateQueue,u=l.dependencies,g.dependencies=u===null?null:{lanes:u.lanes,firstContext:u.firstContext},g.sibling=l.sibling,g.index=l.index,g.ref=l.ref,g}function $f(l,u,g,x,C,j){var N=2;if(x=l,typeof l=="function")g0(l)&&(N=1);else if(typeof l=="string")N=5;else e:switch(l){case h:return Fi(g.children,C,j,u);case m:N=8,C|=8;break;case v:return l=Xo(12,g,u,C|2),l.elementType=v,l.lanes=j,l;case S:return l=Xo(13,g,u,C),l.elementType=S,l.lanes=j,l;case k:return l=Xo(19,g,u,C),l.elementType=k,l.lanes=j,l;case I:return Lf(g,C,j,u);default:if(typeof l=="object"&&l!==null)switch(l.$$typeof){case b:N=10;break e;case w:N=9;break e;case y:N=11;break e;case _:N=14;break e;case P:N=16,x=null;break e}throw Error(i(130,l==null?l:typeof l,""))}return u=Xo(N,g,u,C),u.elementType=l,u.type=x,u.lanes=j,u}function Fi(l,u,g,x){return l=Xo(7,l,x,u),l.lanes=g,l}function Lf(l,u,g,x){return l=Xo(22,l,x,u),l.elementType=I,l.lanes=g,l.stateNode={isHidden:!1},l}function v0(l,u,g){return l=Xo(6,l,null,u),l.lanes=g,l}function b0(l,u,g){return u=Xo(4,l.children!==null?l.children:[],l.key,u),u.lanes=g,u.stateNode={containerInfo:l.containerInfo,pendingChildren:null,implementation:l.implementation},u}function lR(l,u,g,x,C){this.tag=u,this.containerInfo=l,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=oe,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Bt(0),this.expirationTimes=Bt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Bt(0),this.identifierPrefix=x,this.onRecoverableError=C,ke&&(this.mutableSourceEagerHydrationData=null)}function V2(l,u,g,x,C,j,N,Z,ue){return l=new lR(l,u,g,Z,ue),u===1?(u=1,j===!0&&(u|=8)):u=0,j=Xo(3,null,null,u),l.current=j,j.stateNode=l,j.memoizedState={element:x,isDehydrated:g,cache:null,transitions:null,pendingSuspenseBoundaries:null},Ig(j),l}function U2(l){if(!l)return jn;l=l._reactInternals;e:{if(D(l)!==l||l.tag!==1)throw Error(i(170));var u=l;do{switch(u.tag){case 3:u=u.stateNode.context;break e;case 1:if(Jn(u.type)){u=u.stateNode.__reactInternalMemoizedMergedChildContext;break e}}u=u.return}while(u!==null);throw Error(i(171))}if(l.tag===1){var g=l.type;if(Jn(g))return Rn(l,g,u)}return u}function G2(l){var u=l._reactInternals;if(u===void 0)throw typeof l.render=="function"?Error(i(188)):(l=Object.keys(l).join(","),Error(i(268,l)));return l=Q(u),l===null?null:l.stateNode}function q2(l,u){if(l=l.memoizedState,l!==null&&l.dehydrated!==null){var g=l.retryLane;l.retryLane=g!==0&&g=Ne&&j>=Qt&&C<=gt&&N<=it){l.splice(u,1);break}else if(x!==Ne||g.width!==ue.width||itN){if(!(j!==Qt||g.height!==ue.height||gtC)){Ne>x&&(ue.width+=Ne-x,ue.x=x),gtj&&(ue.height+=Qt-j,ue.y=j),itg&&(g=N)),N ")+` + +No matching component was found for: + `)+l.join(" > ")}return null},n.getPublicRootInstance=function(l){if(l=l.current,!l.child)return null;switch(l.child.tag){case 5:return G(l.child.stateNode);default:return l.child.stateNode}},n.injectIntoDevTools=function(l){if(l={bundleType:l.bundleType,version:l.version,rendererPackageName:l.rendererPackageName,rendererConfig:l.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:c.ReactCurrentDispatcher,findHostInstanceByFiber:cR,findFiberByHostInstance:l.findFiberByHostInstance||uR,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.2.0"},typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u")l=!1;else{var u=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(u.isDisabled||!u.supportsFiber)l=!0;else{try{Xn=u.inject(l),gn=u}catch{}l=!!u.checkDCE}}return l},n.isAlreadyRendering=function(){return!1},n.observeVisibleRects=function(l,u,g,x){if(!ct)throw Error(i(363));l=s0(l,u);var C=Tt(l,g,x).disconnect;return{disconnect:function(){C()}}},n.registerMutableSourceForHydration=function(l,u){var g=u._getVersion;g=g(u._source),l.mutableSourceEagerHydrationData==null?l.mutableSourceEagerHydrationData=[u,g]:l.mutableSourceEagerHydrationData.push(u,g)},n.runWithPriority=function(l,u){var g=Ie;try{return Ie=l,u()}finally{Ie=g}},n.shouldError=function(){return null},n.shouldSuspend=function(){return!1},n.updateContainer=function(l,u,g,x){var C=u.current,j=eo(),N=ni(C);return g=U2(g),u.context===null?u.context=g:u.pendingContext=g,u=ya(j,N),u.payload={element:l},x=x===void 0?null:x,x!==null&&(u.callback=x),l=Za(C,u,N),l!==null&&(Ko(l,C,N,j),lf(l,C,N)),N},n};g8.exports=Vle;var Ule=g8.exports;const Gle=Cd(Ule);var v8={exports:{}},kl={};/** + * @license React + * react-reconciler-constants.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */kl.ConcurrentRoot=1;kl.ContinuousEventPriority=4;kl.DefaultEventPriority=16;kl.DiscreteEventPriority=1;kl.IdleEventPriority=536870912;kl.LegacyRoot=0;v8.exports=kl;var b8=v8.exports;const m_={children:!0,ref:!0,key:!0,style:!0,forwardedRef:!0,unstable_applyCache:!0,unstable_applyDrawHitFromCache:!0};let g_=!1,v_=!1;const gx=".react-konva-event",qle=`ReactKonva: You have a Konva node with draggable = true and position defined but no onDragMove or onDragEnd events are handled. +Position of a node will be changed during drag&drop, so you should update state of the react app as well. +Consider to add onDragMove or onDragEnd events. +For more info see: https://github.com/konvajs/react-konva/issues/256 +`,Kle=`ReactKonva: You are using "zIndex" attribute for a Konva node. +react-konva may get confused with ordering. Just define correct order of elements in your render function of a component. +For more info see: https://github.com/konvajs/react-konva/issues/194 +`,Xle={};function vg(e,t,n=Xle){if(!g_&&"zIndex"in t&&(console.warn(Kle),g_=!0),!v_&&t.draggable){var r=t.x!==void 0||t.y!==void 0,o=t.onDragEnd||t.onDragMove;r&&!o&&(console.warn(qle),v_=!0)}for(var s in n)if(!m_[s]){var i=s.slice(0,2)==="on",c=n[s]!==t[s];if(i&&c){var d=s.substr(2).toLowerCase();d.substr(0,7)==="content"&&(d="content"+d.substr(7,1).toUpperCase()+d.substr(8)),e.off(d,n[s])}var p=!t.hasOwnProperty(s);p&&e.setAttr(s,void 0)}var h=t._useStrictMode,m={},v=!1;const b={};for(var s in t)if(!m_[s]){var i=s.slice(0,2)==="on",w=n[s]!==t[s];if(i&&w){var d=s.substr(2).toLowerCase();d.substr(0,7)==="content"&&(d="content"+d.substr(7,1).toUpperCase()+d.substr(8)),t[s]&&(b[d]=t[s])}!i&&(t[s]!==n[s]||h&&t[s]!==e.getAttr(s))&&(v=!0,m[s]=t[s])}v&&(e.setAttrs(m),Di(e));for(var d in b)e.on(d+gx,b[d])}function Di(e){if(!vD.Konva.autoDrawEnabled){var t=e.getLayer()||e.getStage();t&&t.batchDraw()}}const y8={},Yle={};xd.Node.prototype._applyProps=vg;function Qle(e,t){if(typeof t=="string"){console.error(`Do not use plain text as child of Konva.Node. You are using text: ${t}`);return}e.add(t),Di(e)}function Jle(e,t,n){let r=xd[e];r||(console.error(`Konva has no node with the type ${e}. Group will be used instead. If you use minimal version of react-konva, just import required nodes into Konva: "import "konva/lib/shapes/${e}" If you want to render DOM elements as part of canvas tree take a look into this demo: https://konvajs.github.io/docs/react/DOM_Portal.html`),r=xd.Group);const o={},s={};for(var i in t){var c=i.slice(0,2)==="on";c?s[i]=t[i]:o[i]=t[i]}const d=new r(o);return vg(d,s),d}function Zle(e,t,n){console.error(`Text components are not supported for now in ReactKonva. Your text is: "${e}"`)}function ece(e,t,n){return!1}function tce(e){return e}function nce(){return null}function rce(){return null}function oce(e,t,n,r){return Yle}function sce(){}function ace(e){}function ice(e,t){return!1}function lce(){return y8}function cce(){return y8}const uce=setTimeout,dce=clearTimeout,fce=-1;function pce(e,t){return!1}const hce=!1,mce=!0,gce=!0;function vce(e,t){t.parent===e?t.moveToTop():e.add(t),Di(e)}function bce(e,t){t.parent===e?t.moveToTop():e.add(t),Di(e)}function x8(e,t,n){t._remove(),e.add(t),t.setZIndex(n.getZIndex()),Di(e)}function yce(e,t,n){x8(e,t,n)}function xce(e,t){t.destroy(),t.off(gx),Di(e)}function wce(e,t){t.destroy(),t.off(gx),Di(e)}function Sce(e,t,n){console.error(`Text components are not yet supported in ReactKonva. You text is: "${n}"`)}function Cce(e,t,n){}function kce(e,t,n,r,o){vg(e,o,r)}function _ce(e){e.hide(),Di(e)}function Pce(e){}function jce(e,t){(t.visible==null||t.visible)&&e.show()}function Ice(e,t){}function Ece(e){}function Oce(){}const Rce=()=>b8.DefaultEventPriority,Mce=Object.freeze(Object.defineProperty({__proto__:null,appendChild:vce,appendChildToContainer:bce,appendInitialChild:Qle,cancelTimeout:dce,clearContainer:Ece,commitMount:Cce,commitTextUpdate:Sce,commitUpdate:kce,createInstance:Jle,createTextInstance:Zle,detachDeletedInstance:Oce,finalizeInitialChildren:ece,getChildHostContext:cce,getCurrentEventPriority:Rce,getPublicInstance:tce,getRootHostContext:lce,hideInstance:_ce,hideTextInstance:Pce,idlePriority:Op.unstable_IdlePriority,insertBefore:x8,insertInContainerBefore:yce,isPrimaryRenderer:hce,noTimeout:fce,now:Op.unstable_now,prepareForCommit:nce,preparePortalMount:rce,prepareUpdate:oce,removeChild:xce,removeChildFromContainer:wce,resetAfterCommit:sce,resetTextContent:ace,run:Op.unstable_runWithPriority,scheduleTimeout:uce,shouldDeprioritizeSubtree:ice,shouldSetTextContent:pce,supportsMutation:gce,unhideInstance:jce,unhideTextInstance:Ice,warnsIfNotActing:mce},Symbol.toStringTag,{value:"Module"}));var Dce=Object.defineProperty,Ace=Object.defineProperties,Tce=Object.getOwnPropertyDescriptors,b_=Object.getOwnPropertySymbols,Nce=Object.prototype.hasOwnProperty,$ce=Object.prototype.propertyIsEnumerable,y_=(e,t,n)=>t in e?Dce(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,x_=(e,t)=>{for(var n in t||(t={}))Nce.call(t,n)&&y_(e,n,t[n]);if(b_)for(var n of b_(t))$ce.call(t,n)&&y_(e,n,t[n]);return e},Lce=(e,t)=>Ace(e,Tce(t));function w8(e,t,n){if(!e)return;if(n(e)===!0)return e;let r=t?e.return:e.child;for(;r;){const o=w8(r,t,n);if(o)return o;r=t?null:r.sibling}}function S8(e){try{return Object.defineProperties(e,{_currentRenderer:{get(){return null},set(){}},_currentRenderer2:{get(){return null},set(){}}})}catch{return e}}const vx=S8(f.createContext(null));class C8 extends f.Component{render(){return f.createElement(vx.Provider,{value:this._reactInternals},this.props.children)}}const{ReactCurrentOwner:w_,ReactCurrentDispatcher:S_}=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function zce(){const e=f.useContext(vx);if(e===null)throw new Error("its-fine: useFiber must be called within a !");const t=f.useId();return f.useMemo(()=>{for(const r of[w_==null?void 0:w_.current,e,e==null?void 0:e.alternate]){if(!r)continue;const o=w8(r,!1,s=>{let i=s.memoizedState;for(;i;){if(i.memoizedState===t)return!0;i=i.next}});if(o)return o}},[e,t])}function Bce(){var e,t;const n=zce(),[r]=f.useState(()=>new Map);r.clear();let o=n;for(;o;){const s=(e=o.type)==null?void 0:e._context;s&&s!==vx&&!r.has(s)&&r.set(s,(t=S_==null?void 0:S_.current)==null?void 0:t.readContext(S8(s))),o=o.return}return r}function Fce(){const e=Bce();return f.useMemo(()=>Array.from(e.keys()).reduce((t,n)=>r=>f.createElement(t,null,f.createElement(n.Provider,Lce(x_({},r),{value:e.get(n)}))),t=>f.createElement(C8,x_({},t))),[e])}function Hce(e){const t=W.useRef({});return W.useLayoutEffect(()=>{t.current=e}),W.useLayoutEffect(()=>()=>{t.current={}},[]),t.current}const Wce=e=>{const t=W.useRef(),n=W.useRef(),r=W.useRef(),o=Hce(e),s=Fce(),i=c=>{const{forwardedRef:d}=e;d&&(typeof d=="function"?d(c):d.current=c)};return W.useLayoutEffect(()=>(n.current=new xd.Stage({width:e.width,height:e.height,container:t.current}),i(n.current),r.current=Fu.createContainer(n.current,b8.LegacyRoot,!1,null),Fu.updateContainer(W.createElement(s,{},e.children),r.current),()=>{xd.isBrowser&&(i(null),Fu.updateContainer(null,r.current,null),n.current.destroy())}),[]),W.useLayoutEffect(()=>{i(n.current),vg(n.current,e,o),Fu.updateContainer(W.createElement(s,{},e.children),r.current,null)}),W.createElement("div",{ref:t,id:e.id,accessKey:e.accessKey,className:e.className,role:e.role,style:e.style,tabIndex:e.tabIndex,title:e.title})},Ru="Layer",Wa="Group",da="Rect",Hi="Circle",um="Line",k8="Image",Vce="Transformer",Fu=Gle(Mce);Fu.injectIntoDevTools({findHostInstanceByFiber:()=>null,bundleType:0,version:W.version,rendererPackageName:"react-konva"});const Uce=W.forwardRef((e,t)=>W.createElement(C8,{},W.createElement(Wce,{...e,forwardedRef:t}))),Gce=be([mn,lr],(e,t)=>{const{tool:n,isMovingBoundingBox:r}=e;return{tool:n,isStaging:t,isMovingBoundingBox:r}},{memoizeOptions:{resultEqualityCheck:Zt}}),qce=()=>{const e=te(),{tool:t,isStaging:n,isMovingBoundingBox:r}=B(Gce);return{handleDragStart:f.useCallback(()=>{(t==="move"||n)&&!r&&e(Xp(!0))},[e,r,n,t]),handleDragMove:f.useCallback(o=>{if(!((t==="move"||n)&&!r))return;const s={x:o.target.x(),y:o.target.y()};e(m5(s))},[e,r,n,t]),handleDragEnd:f.useCallback(()=>{(t==="move"||n)&&!r&&e(Xp(!1))},[e,r,n,t])}},Kce=be([mn,Kn,lr],(e,t,n)=>{const{cursorPosition:r,shouldLockBoundingBox:o,shouldShowBoundingBox:s,tool:i,isMaskEnabled:c,shouldSnapToGrid:d}=e;return{activeTabName:t,isCursorOnCanvas:!!r,shouldLockBoundingBox:o,shouldShowBoundingBox:s,tool:i,isStaging:n,isMaskEnabled:c,shouldSnapToGrid:d}},{memoizeOptions:{resultEqualityCheck:Zt}}),Xce=()=>{const e=te(),{activeTabName:t,shouldShowBoundingBox:n,tool:r,isStaging:o,isMaskEnabled:s,shouldSnapToGrid:i}=B(Kce),c=f.useRef(null),d=g5(),p=()=>e(pb());tt(["shift+c"],()=>{p()},{enabled:()=>!o,preventDefault:!0},[]);const h=()=>e(Id(!s));tt(["h"],()=>{h()},{enabled:()=>!o,preventDefault:!0},[s]),tt(["n"],()=>{e(nd(!i))},{enabled:!0,preventDefault:!0},[i]),tt("esc",()=>{e(bD())},{enabled:()=>!0,preventDefault:!0}),tt("shift+h",()=>{e(yD(!n))},{enabled:()=>!o,preventDefault:!0},[t,n]),tt(["space"],m=>{m.repeat||(d==null||d.container().focus(),r!=="move"&&(c.current=r,e(ea("move"))),r==="move"&&c.current&&c.current!=="move"&&(e(ea(c.current)),c.current="move"))},{keyup:!0,keydown:!0,preventDefault:!0},[r,c])},bx=e=>{const t=e.getPointerPosition(),n=e.getAbsoluteTransform().copy();if(!t||!n)return;const r=n.invert().point(t);return{x:r.x,y:r.y}},_8=()=>{const e=te(),t=Ta(),n=g5();return{updateColorUnderCursor:()=>{if(!n||!t)return;const r=n.getPointerPosition();if(!r)return;const o=xD.pixelRatio,[s,i,c,d]=t.getContext().getImageData(r.x*o,r.y*o,1,1).data;d&&s&&i&&c&&e(wD({r:s,g:i,b:c,a:d}))},commitColorUnderCursor:()=>{e(SD())}}},Yce=be([Kn,mn,lr],(e,t,n)=>{const{tool:r}=t;return{tool:r,activeTabName:e,isStaging:n}},{memoizeOptions:{resultEqualityCheck:Zt}}),Qce=e=>{const t=te(),{tool:n,isStaging:r}=B(Yce),{commitColorUnderCursor:o}=_8();return f.useCallback(s=>{if(!e.current)return;if(e.current.container().focus(),n==="move"||r){t(Xp(!0));return}if(n==="colorPicker"){o();return}const i=bx(e.current);i&&(s.evt.preventDefault(),t(v5(!0)),t(CD([i.x,i.y])))},[e,n,r,t,o])},Jce=be([Kn,mn,lr],(e,t,n)=>{const{tool:r,isDrawing:o}=t;return{tool:r,isDrawing:o,activeTabName:e,isStaging:n}},{memoizeOptions:{resultEqualityCheck:Zt}}),Zce=(e,t,n)=>{const r=te(),{isDrawing:o,tool:s,isStaging:i}=B(Jce),{updateColorUnderCursor:c}=_8();return f.useCallback(()=>{if(!e.current)return;const d=bx(e.current);if(d){if(r(kD(d)),n.current=d,s==="colorPicker"){c();return}!o||s==="move"||i||(t.current=!0,r(b5([d.x,d.y])))}},[t,r,o,i,n,e,s,c])},eue=()=>{const e=te();return f.useCallback(()=>{e(_D())},[e])},tue=be([Kn,mn,lr],(e,t,n)=>{const{tool:r,isDrawing:o}=t;return{tool:r,isDrawing:o,activeTabName:e,isStaging:n}},{memoizeOptions:{resultEqualityCheck:Zt}}),nue=(e,t)=>{const n=te(),{tool:r,isDrawing:o,isStaging:s}=B(tue);return f.useCallback(()=>{if(r==="move"||s){n(Xp(!1));return}if(!t.current&&o&&e.current){const i=bx(e.current);if(!i)return;n(b5([i.x,i.y]))}else t.current=!1;n(v5(!1))},[t,n,o,s,e,r])},rue=be([mn],e=>{const{isMoveStageKeyHeld:t,stageScale:n}=e;return{isMoveStageKeyHeld:t,stageScale:n}},{memoizeOptions:{resultEqualityCheck:Zt}}),oue=e=>{const t=te(),{isMoveStageKeyHeld:n,stageScale:r}=B(rue);return f.useCallback(o=>{if(!e.current||n)return;o.evt.preventDefault();const s=e.current.getPointerPosition();if(!s)return;const i={x:(s.x-e.current.x())/r,y:(s.y-e.current.y())/r};let c=o.evt.deltaY;o.evt.ctrlKey&&(c=-c);const d=Es(r*ID**c,jD,PD),p={x:s.x-i.x*d,y:s.y-i.y*d};t(ED(d)),t(m5(p))},[e,n,r,t])},sue=be(mn,e=>{const{boundingBoxCoordinates:t,boundingBoxDimensions:n,stageDimensions:r,stageScale:o,shouldDarkenOutsideBoundingBox:s,stageCoordinates:i}=e;return{boundingBoxCoordinates:t,boundingBoxDimensions:n,shouldDarkenOutsideBoundingBox:s,stageCoordinates:i,stageDimensions:r,stageScale:o}},{memoizeOptions:{resultEqualityCheck:Zt}}),aue=()=>{const{boundingBoxCoordinates:e,boundingBoxDimensions:t,shouldDarkenOutsideBoundingBox:n,stageCoordinates:r,stageDimensions:o,stageScale:s}=B(sue);return a.jsxs(Wa,{children:[a.jsx(da,{offsetX:r.x/s,offsetY:r.y/s,height:o.height/s,width:o.width/s,fill:"rgba(0,0,0,0.4)",listening:!1,visible:n}),a.jsx(da,{x:e.x,y:e.y,width:t.width,height:t.height,fill:"rgb(255,255,255)",listening:!1,visible:n,globalCompositeOperation:"destination-out"})]})},iue=be([mn],e=>{const{stageScale:t,stageCoordinates:n,stageDimensions:r}=e;return{stageScale:t,stageCoordinates:n,stageDimensions:r}},{memoizeOptions:{resultEqualityCheck:Zt}}),lue=()=>{const{stageScale:e,stageCoordinates:t,stageDimensions:n}=B(iue),{colorMode:r}=Ds(),[o,s]=f.useState([]),[i,c]=Lc("colors",["base.800","base.200"]),d=f.useCallback(p=>p/e,[e]);return f.useLayoutEffect(()=>{const{width:p,height:h}=n,{x:m,y:v}=t,b={x1:0,y1:0,x2:p,y2:h,offset:{x:d(m),y:d(v)}},w={x:Math.ceil(d(m)/64)*64,y:Math.ceil(d(v)/64)*64},y={x1:-w.x,y1:-w.y,x2:d(p)-w.x+64,y2:d(h)-w.y+64},k={x1:Math.min(b.x1,y.x1),y1:Math.min(b.y1,y.y1),x2:Math.max(b.x2,y.x2),y2:Math.max(b.y2,y.y2)},_=k.x2-k.x1,P=k.y2-k.y1,I=Math.round(_/64)+1,E=Math.round(P/64)+1,O=Ow(0,I).map(M=>a.jsx(um,{x:k.x1+M*64,y:k.y1,points:[0,0,0,P],stroke:r==="dark"?i:c,strokeWidth:1},`x_${M}`)),R=Ow(0,E).map(M=>a.jsx(um,{x:k.x1,y:k.y1+M*64,points:[0,0,_,0],stroke:r==="dark"?i:c,strokeWidth:1},`y_${M}`));s(O.concat(R))},[e,t,n,d,r,i,c]),a.jsx(Wa,{children:o})},cue=be([vo,mn],(e,t)=>{const{progressImage:n,sessionId:r}=e,{sessionId:o,boundingBox:s}=t.layerState.stagingArea;return{boundingBox:s,progressImage:r===o?n:void 0}},{memoizeOptions:{resultEqualityCheck:Zt}}),uue=e=>{const{...t}=e,{progressImage:n,boundingBox:r}=B(cue),[o,s]=f.useState(null);return f.useEffect(()=>{if(!n)return;const i=new Image;i.onload=()=>{s(i)},i.src=n.dataURL},[n]),n&&r&&o?a.jsx(k8,{x:r.x,y:r.y,width:r.width,height:r.height,image:o,listening:!1,...t}):null},rl=e=>{const{r:t,g:n,b:r,a:o}=e;return`rgba(${t}, ${n}, ${r}, ${o})`},due=be(mn,e=>{const{maskColor:t,stageCoordinates:n,stageDimensions:r,stageScale:o}=e;return{stageCoordinates:n,stageDimensions:r,stageScale:o,maskColorString:rl(t)}}),C_=e=>`data:image/svg+xml;utf8, + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +`.replaceAll("black",e),fue=e=>{const{...t}=e,{maskColorString:n,stageCoordinates:r,stageDimensions:o,stageScale:s}=B(due),[i,c]=f.useState(null),[d,p]=f.useState(0),h=f.useRef(null),m=f.useCallback(()=>{p(d+1),setTimeout(m,500)},[d]);return f.useEffect(()=>{if(i)return;const v=new Image;v.onload=()=>{c(v)},v.src=C_(n)},[i,n]),f.useEffect(()=>{i&&(i.src=C_(n))},[i,n]),f.useEffect(()=>{const v=setInterval(()=>p(b=>(b+1)%5),50);return()=>clearInterval(v)},[]),!i||!Nl(r.x)||!Nl(r.y)||!Nl(s)||!Nl(o.width)||!Nl(o.height)?null:a.jsx(da,{ref:h,offsetX:r.x/s,offsetY:r.y/s,height:o.height/s,width:o.width/s,fillPatternImage:i,fillPatternOffsetY:Nl(d)?d:0,fillPatternRepeat:"repeat",fillPatternScale:{x:1/s,y:1/s},listening:!0,globalCompositeOperation:"source-in",...t})},pue=be([mn],e=>({objects:e.layerState.objects}),{memoizeOptions:{resultEqualityCheck:Zt}}),hue=e=>{const{...t}=e,{objects:n}=B(pue);return a.jsx(Wa,{listening:!1,...t,children:n.filter(OD).map((r,o)=>a.jsx(um,{points:r.points,stroke:"rgb(0,0,0)",strokeWidth:r.strokeWidth*2,tension:0,lineCap:"round",lineJoin:"round",shadowForStrokeEnabled:!1,listening:!1,globalCompositeOperation:r.tool==="brush"?"source-over":"destination-out"},o))})};var Wi=f,mue=function(t,n,r){const o=Wi.useRef("loading"),s=Wi.useRef(),[i,c]=Wi.useState(0),d=Wi.useRef(),p=Wi.useRef(),h=Wi.useRef();return(d.current!==t||p.current!==n||h.current!==r)&&(o.current="loading",s.current=void 0,d.current=t,p.current=n,h.current=r),Wi.useLayoutEffect(function(){if(!t)return;var m=document.createElement("img");function v(){o.current="loaded",s.current=m,c(Math.random())}function b(){o.current="failed",s.current=void 0,c(Math.random())}return m.addEventListener("load",v),m.addEventListener("error",b),n&&(m.crossOrigin=n),r&&(m.referrerPolicy=r),m.src=t,function(){m.removeEventListener("load",v),m.removeEventListener("error",b)}},[t,n,r]),[s.current,o.current]};const gue=Cd(mue),P8=e=>{const{width:t,height:n,x:r,y:o,imageName:s}=e.canvasImage,{currentData:i,isError:c}=Is(s??ro.skipToken),[d]=gue((i==null?void 0:i.image_url)??"",RD.get()?"use-credentials":"anonymous");return c?a.jsx(da,{x:r,y:o,width:t,height:n,fill:"red"}):a.jsx(k8,{x:r,y:o,image:d,listening:!1})},vue=be([mn],e=>{const{layerState:{objects:t}}=e;return{objects:t}},{memoizeOptions:{resultEqualityCheck:Zt}}),bue=()=>{const{objects:e}=B(vue);return e?a.jsx(Wa,{name:"outpainting-objects",listening:!1,children:e.map((t,n)=>{if(B_(t))return a.jsx(P8,{canvasImage:t},n);if(MD(t)){const r=a.jsx(um,{points:t.points,stroke:t.color?rl(t.color):"rgb(0,0,0)",strokeWidth:t.strokeWidth*2,tension:0,lineCap:"round",lineJoin:"round",shadowForStrokeEnabled:!1,listening:!1,globalCompositeOperation:t.tool==="brush"?"source-over":"destination-out"},n);return t.clip?a.jsx(Wa,{clipX:t.clip.x,clipY:t.clip.y,clipWidth:t.clip.width,clipHeight:t.clip.height,children:r},n):r}else{if(DD(t))return a.jsx(da,{x:t.x,y:t.y,width:t.width,height:t.height,fill:rl(t.color)},n);if(AD(t))return a.jsx(da,{x:t.x,y:t.y,width:t.width,height:t.height,fill:"rgb(255, 255, 255)",globalCompositeOperation:"destination-out"},n)}})}):null},yue=be([mn],e=>{const{layerState:t,shouldShowStagingImage:n,shouldShowStagingOutline:r,boundingBoxCoordinates:{x:o,y:s},boundingBoxDimensions:{width:i,height:c}}=e,{selectedImageIndex:d,images:p}=t.stagingArea;return{currentStagingAreaImage:p.length>0&&d!==void 0?p[d]:void 0,isOnFirstImage:d===0,isOnLastImage:d===p.length-1,shouldShowStagingImage:n,shouldShowStagingOutline:r,x:o,y:s,width:i,height:c}},{memoizeOptions:{resultEqualityCheck:Zt}}),xue=e=>{const{...t}=e,{currentStagingAreaImage:n,shouldShowStagingImage:r,shouldShowStagingOutline:o,x:s,y:i,width:c,height:d}=B(yue);return a.jsxs(Wa,{...t,children:[r&&n&&a.jsx(P8,{canvasImage:n}),o&&a.jsxs(Wa,{children:[a.jsx(da,{x:s,y:i,width:c,height:d,strokeWidth:1,stroke:"white",strokeScaleEnabled:!1}),a.jsx(da,{x:s,y:i,width:c,height:d,dash:[4,4],strokeWidth:1,stroke:"black",strokeScaleEnabled:!1})]})]})},wue=be([mn],e=>{const{layerState:{stagingArea:{images:t,selectedImageIndex:n,sessionId:r}},shouldShowStagingOutline:o,shouldShowStagingImage:s}=e;return{currentStagingAreaImage:t.length>0?t[n]:void 0,isOnFirstImage:n===0,isOnLastImage:n===t.length-1,shouldShowStagingImage:s,shouldShowStagingOutline:o,sessionId:r}},{memoizeOptions:{resultEqualityCheck:Zt}}),Sue=()=>{const e=te(),{isOnFirstImage:t,isOnLastImage:n,currentStagingAreaImage:r,shouldShowStagingImage:o,sessionId:s}=B(wue),{t:i}=ye(),c=f.useCallback(()=>{e(_w(!0))},[e]),d=f.useCallback(()=>{e(_w(!1))},[e]);tt(["left"],()=>{p()},{enabled:()=>!0,preventDefault:!0}),tt(["right"],()=>{h()},{enabled:()=>!0,preventDefault:!0}),tt(["enter"],()=>{m()},{enabled:()=>!0,preventDefault:!0});const p=f.useCallback(()=>e(TD()),[e]),h=f.useCallback(()=>e(ND()),[e]),m=f.useCallback(()=>e($D(s)),[e,s]),{data:v}=Is((r==null?void 0:r.imageName)??ro.skipToken);return r?a.jsx(H,{pos:"absolute",bottom:4,w:"100%",align:"center",justify:"center",filter:"drop-shadow(0 0.5rem 1rem rgba(0,0,0))",onMouseOver:c,onMouseOut:d,children:a.jsxs(rr,{isAttached:!0,children:[a.jsx(ze,{tooltip:`${i("unifiedCanvas.previous")} (Left)`,"aria-label":`${i("unifiedCanvas.previous")} (Left)`,icon:a.jsx(DY,{}),onClick:p,colorScheme:"accent",isDisabled:t}),a.jsx(ze,{tooltip:`${i("unifiedCanvas.next")} (Right)`,"aria-label":`${i("unifiedCanvas.next")} (Right)`,icon:a.jsx(AY,{}),onClick:h,colorScheme:"accent",isDisabled:n}),a.jsx(ze,{tooltip:`${i("unifiedCanvas.accept")} (Enter)`,"aria-label":`${i("unifiedCanvas.accept")} (Enter)`,icon:a.jsx($Y,{}),onClick:m,colorScheme:"accent"}),a.jsx(ze,{tooltip:i("unifiedCanvas.showHide"),"aria-label":i("unifiedCanvas.showHide"),"data-alert":!o,icon:o?a.jsx(UY,{}):a.jsx(VY,{}),onClick:()=>e(LD(!o)),colorScheme:"accent"}),a.jsx(ze,{tooltip:i("unifiedCanvas.saveToGallery"),"aria-label":i("unifiedCanvas.saveToGallery"),isDisabled:!v||!v.is_intermediate,icon:a.jsx(Km,{}),onClick:()=>{v&&e(zD({imageDTO:v}))},colorScheme:"accent"}),a.jsx(ze,{tooltip:i("unifiedCanvas.discardAll"),"aria-label":i("unifiedCanvas.discardAll"),icon:a.jsx(yl,{style:{transform:"rotate(45deg)"}}),onClick:()=>e(BD()),colorScheme:"error",fontSize:20})]})}):null},Cue=()=>{const e=B(c=>c.canvas.layerState),t=B(c=>c.canvas.boundingBoxCoordinates),n=B(c=>c.canvas.boundingBoxDimensions),r=B(c=>c.canvas.isMaskEnabled),o=B(c=>c.canvas.shouldPreserveMaskedArea),[s,i]=f.useState();return f.useEffect(()=>{i(void 0)},[e,t,n,r,o]),Lee(async()=>{const c=await FD(e,t,n,r,o);if(!c)return;const{baseImageData:d,maskImageData:p}=c,h=HD(d,p);i(h)},1e3,[e,t,n,r,o]),s},kue={txt2img:"Text to Image",img2img:"Image to Image",inpaint:"Inpaint",outpaint:"Inpaint"},_ue=()=>{const e=Cue();return a.jsxs(Oe,{children:["Mode: ",e?kue[e]:"..."]})},nc=e=>Math.round(e*100)/100,Pue=be([mn],e=>{const{cursorPosition:t}=e,{cursorX:n,cursorY:r}=t?{cursorX:t.x,cursorY:t.y}:{cursorX:-1,cursorY:-1};return{cursorCoordinatesString:`(${nc(n)}, ${nc(r)})`}},{memoizeOptions:{resultEqualityCheck:Zt}});function jue(){const{cursorCoordinatesString:e}=B(Pue),{t}=ye();return a.jsx(Oe,{children:`${t("unifiedCanvas.cursorPosition")}: ${e}`})}const Q1="var(--invokeai-colors-warning-500)",Iue=be([mn],e=>{const{stageDimensions:{width:t,height:n},stageCoordinates:{x:r,y:o},boundingBoxDimensions:{width:s,height:i},scaledBoundingBoxDimensions:{width:c,height:d},boundingBoxCoordinates:{x:p,y:h},stageScale:m,shouldShowCanvasDebugInfo:v,layer:b,boundingBoxScaleMethod:w,shouldPreserveMaskedArea:y}=e;let S="inherit";return(w==="none"&&(s<512||i<512)||w==="manual"&&c*d<512*512)&&(S=Q1),{activeLayerColor:b==="mask"?Q1:"inherit",activeLayerString:b.charAt(0).toUpperCase()+b.slice(1),boundingBoxColor:S,boundingBoxCoordinatesString:`(${nc(p)}, ${nc(h)})`,boundingBoxDimensionsString:`${s}×${i}`,scaledBoundingBoxDimensionsString:`${c}×${d}`,canvasCoordinatesString:`${nc(r)}×${nc(o)}`,canvasDimensionsString:`${t}×${n}`,canvasScaleString:Math.round(m*100),shouldShowCanvasDebugInfo:v,shouldShowBoundingBox:w!=="auto",shouldShowScaledBoundingBox:w!=="none",shouldPreserveMaskedArea:y}},{memoizeOptions:{resultEqualityCheck:Zt}}),Eue=()=>{const{activeLayerColor:e,activeLayerString:t,boundingBoxColor:n,boundingBoxCoordinatesString:r,boundingBoxDimensionsString:o,scaledBoundingBoxDimensionsString:s,shouldShowScaledBoundingBox:i,canvasCoordinatesString:c,canvasDimensionsString:d,canvasScaleString:p,shouldShowCanvasDebugInfo:h,shouldShowBoundingBox:m,shouldPreserveMaskedArea:v}=B(Iue),{t:b}=ye();return a.jsxs(H,{sx:{flexDirection:"column",position:"absolute",top:0,insetInlineStart:0,opacity:.65,display:"flex",fontSize:"sm",padding:1,px:2,minWidth:48,margin:1,borderRadius:"base",pointerEvents:"none",bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsx(_ue,{}),a.jsx(Oe,{style:{color:e},children:`${b("unifiedCanvas.activeLayer")}: ${t}`}),a.jsx(Oe,{children:`${b("unifiedCanvas.canvasScale")}: ${p}%`}),v&&a.jsx(Oe,{style:{color:Q1},children:"Preserve Masked Area: On"}),m&&a.jsx(Oe,{style:{color:n},children:`${b("unifiedCanvas.boundingBox")}: ${o}`}),i&&a.jsx(Oe,{style:{color:n},children:`${b("unifiedCanvas.scaledBoundingBox")}: ${s}`}),h&&a.jsxs(a.Fragment,{children:[a.jsx(Oe,{children:`${b("unifiedCanvas.boundingBoxPosition")}: ${r}`}),a.jsx(Oe,{children:`${b("unifiedCanvas.canvasDimensions")}: ${d}`}),a.jsx(Oe,{children:`${b("unifiedCanvas.canvasPosition")}: ${c}`}),a.jsx(jue,{})]})]})},Oue=be([at],({canvas:e,generation:t})=>{const{boundingBoxCoordinates:n,boundingBoxDimensions:r,stageScale:o,isDrawing:s,isTransformingBoundingBox:i,isMovingBoundingBox:c,tool:d,shouldSnapToGrid:p}=e,{aspectRatio:h}=t;return{boundingBoxCoordinates:n,boundingBoxDimensions:r,isDrawing:s,isMovingBoundingBox:c,isTransformingBoundingBox:i,stageScale:o,shouldSnapToGrid:p,tool:d,hitStrokeWidth:20/o,aspectRatio:h}},{memoizeOptions:{resultEqualityCheck:Zt}}),Rue=e=>{const{...t}=e,n=te(),{boundingBoxCoordinates:r,boundingBoxDimensions:o,isDrawing:s,isMovingBoundingBox:i,isTransformingBoundingBox:c,stageScale:d,shouldSnapToGrid:p,tool:h,hitStrokeWidth:m,aspectRatio:v}=B(Oue),b=f.useRef(null),w=f.useRef(null),[y,S]=f.useState(!1);f.useEffect(()=>{var F;!b.current||!w.current||(b.current.nodes([w.current]),(F=b.current.getLayer())==null||F.batchDraw())},[]);const k=64*d;tt("N",()=>{n(nd(!p))});const _=f.useCallback(F=>{if(!p){n(C0({x:Math.floor(F.target.x()),y:Math.floor(F.target.y())}));return}const V=F.target.x(),q=F.target.y(),G=ws(V,64),T=ws(q,64);F.target.x(G),F.target.y(T),n(C0({x:G,y:T}))},[n,p]),P=f.useCallback(()=>{if(!w.current)return;const F=w.current,V=F.scaleX(),q=F.scaleY(),G=Math.round(F.width()*V),T=Math.round(F.height()*q),z=Math.round(F.x()),$=Math.round(F.y());if(v){const Y=ws(G/v,64);n(Js({width:G,height:Y}))}else n(Js({width:G,height:T}));n(C0({x:p?Mu(z,64):z,y:p?Mu($,64):$})),F.scaleX(1),F.scaleY(1)},[n,p,v]),I=f.useCallback((F,V,q)=>{const G=F.x%k,T=F.y%k;return{x:Mu(V.x,k)+G,y:Mu(V.y,k)+T}},[k]),E=()=>{n(k0(!0))},O=()=>{n(k0(!1)),n(_0(!1)),n(Wf(!1)),S(!1)},R=()=>{n(_0(!0))},M=()=>{n(k0(!1)),n(_0(!1)),n(Wf(!1)),S(!1)},D=()=>{S(!0)},A=()=>{!c&&!i&&S(!1)},L=()=>{n(Wf(!0))},Q=()=>{n(Wf(!1))};return a.jsxs(Wa,{...t,children:[a.jsx(da,{height:o.height,width:o.width,x:r.x,y:r.y,onMouseEnter:L,onMouseOver:L,onMouseLeave:Q,onMouseOut:Q}),a.jsx(da,{draggable:!0,fillEnabled:!1,height:o.height,hitStrokeWidth:m,listening:!s&&h==="move",onDragStart:R,onDragEnd:M,onDragMove:_,onMouseDown:R,onMouseOut:A,onMouseOver:D,onMouseEnter:D,onMouseUp:M,onTransform:P,onTransformEnd:O,ref:w,stroke:y?"rgba(255,255,255,0.7)":"white",strokeWidth:(y?8:1)/d,width:o.width,x:r.x,y:r.y}),a.jsx(Vce,{anchorCornerRadius:3,anchorDragBoundFunc:I,anchorFill:"rgba(212,216,234,1)",anchorSize:15,anchorStroke:"rgb(42,42,42)",borderDash:[4,4],borderEnabled:!0,borderStroke:"black",draggable:!1,enabledAnchors:h==="move"?void 0:[],flipEnabled:!1,ignoreStroke:!0,keepRatio:!1,listening:!s&&h==="move",onDragStart:R,onDragEnd:M,onMouseDown:E,onMouseUp:O,onTransformEnd:O,ref:b,rotateEnabled:!1})]})},Mue=be(mn,e=>{const{cursorPosition:t,brushSize:n,colorPickerColor:r,maskColor:o,brushColor:s,tool:i,layer:c,shouldShowBrush:d,isMovingBoundingBox:p,isTransformingBoundingBox:h,stageScale:m,stageDimensions:v,boundingBoxCoordinates:b,boundingBoxDimensions:w,shouldRestrictStrokesToBox:y}=e,S=y?{clipX:b.x,clipY:b.y,clipWidth:w.width,clipHeight:w.height}:{};return{cursorPosition:t,brushX:t?t.x:v.width/2,brushY:t?t.y:v.height/2,radius:n/2,colorPickerOuterRadius:Pw/m,colorPickerInnerRadius:(Pw-Lv+1)/m,maskColorString:rl({...o,a:.5}),brushColorString:rl(s),colorPickerColorString:rl(r),tool:i,layer:c,shouldShowBrush:d,shouldDrawBrushPreview:!(p||h||!t)&&d,strokeWidth:1.5/m,dotRadius:1.5/m,clip:S}},{memoizeOptions:{resultEqualityCheck:Zt}}),Due=e=>{const{...t}=e,{brushX:n,brushY:r,radius:o,maskColorString:s,tool:i,layer:c,shouldDrawBrushPreview:d,dotRadius:p,strokeWidth:h,brushColorString:m,colorPickerColorString:v,colorPickerInnerRadius:b,colorPickerOuterRadius:w,clip:y}=B(Mue);return d?a.jsxs(Wa,{listening:!1,...y,...t,children:[i==="colorPicker"?a.jsxs(a.Fragment,{children:[a.jsx(Hi,{x:n,y:r,radius:w,stroke:m,strokeWidth:Lv,strokeScaleEnabled:!1}),a.jsx(Hi,{x:n,y:r,radius:b,stroke:v,strokeWidth:Lv,strokeScaleEnabled:!1})]}):a.jsxs(a.Fragment,{children:[a.jsx(Hi,{x:n,y:r,radius:o,fill:c==="mask"?s:m,globalCompositeOperation:i==="eraser"?"destination-out":"source-out"}),a.jsx(Hi,{x:n,y:r,radius:o,stroke:"rgba(255,255,255,0.4)",strokeWidth:h*2,strokeEnabled:!0,listening:!1}),a.jsx(Hi,{x:n,y:r,radius:o,stroke:"rgba(0,0,0,1)",strokeWidth:h,strokeEnabled:!0,listening:!1})]}),a.jsx(Hi,{x:n,y:r,radius:p*2,fill:"rgba(255,255,255,0.4)",listening:!1}),a.jsx(Hi,{x:n,y:r,radius:p,fill:"rgba(0,0,0,1)",listening:!1})]}):null},Aue=be([mn,lr],(e,t)=>{const{isMaskEnabled:n,stageScale:r,shouldShowBoundingBox:o,isTransformingBoundingBox:s,isMouseOverBoundingBox:i,isMovingBoundingBox:c,stageDimensions:d,stageCoordinates:p,tool:h,isMovingStage:m,shouldShowIntermediates:v,shouldShowGrid:b,shouldRestrictStrokesToBox:w,shouldAntialias:y}=e;let S="none";return h==="move"||t?m?S="grabbing":S="grab":s?S=void 0:w&&!i&&(S="default"),{isMaskEnabled:n,isModifyingBoundingBox:s||c,shouldShowBoundingBox:o,shouldShowGrid:b,stageCoordinates:p,stageCursor:S,stageDimensions:d,stageScale:r,tool:h,isStaging:t,shouldShowIntermediates:v,shouldAntialias:y}},Ke),Tue=je(Uce,{shouldForwardProp:e=>!["sx"].includes(e)}),k_=()=>{const{isMaskEnabled:e,isModifyingBoundingBox:t,shouldShowBoundingBox:n,shouldShowGrid:r,stageCoordinates:o,stageCursor:s,stageDimensions:i,stageScale:c,tool:d,isStaging:p,shouldShowIntermediates:h,shouldAntialias:m}=B(Aue);Xce();const v=f.useRef(null),b=f.useRef(null),w=f.useCallback(A=>{VD(A),v.current=A},[]),y=f.useCallback(A=>{WD(A),b.current=A},[]),S=f.useRef({x:0,y:0}),k=f.useRef(!1),_=oue(v),P=Qce(v),I=nue(v,k),E=Zce(v,k,S),O=eue(),{handleDragStart:R,handleDragMove:M,handleDragEnd:D}=qce();return a.jsx(H,{sx:{position:"relative",height:"100%",width:"100%",borderRadius:"base"},children:a.jsxs(Oe,{sx:{position:"relative"},children:[a.jsxs(Tue,{tabIndex:-1,ref:w,sx:{outline:"none",overflow:"hidden",cursor:s||void 0,canvas:{outline:"none"}},x:o.x,y:o.y,width:i.width,height:i.height,scale:{x:c,y:c},onTouchStart:P,onTouchMove:E,onTouchEnd:I,onMouseDown:P,onMouseLeave:O,onMouseMove:E,onMouseUp:I,onDragStart:R,onDragMove:M,onDragEnd:D,onContextMenu:A=>A.evt.preventDefault(),onWheel:_,draggable:(d==="move"||p)&&!t,children:[a.jsx(Ru,{id:"grid",visible:r,children:a.jsx(lue,{})}),a.jsx(Ru,{id:"base",ref:y,listening:!1,imageSmoothingEnabled:m,children:a.jsx(bue,{})}),a.jsxs(Ru,{id:"mask",visible:e,listening:!1,children:[a.jsx(hue,{visible:!0,listening:!1}),a.jsx(fue,{listening:!1})]}),a.jsx(Ru,{children:a.jsx(aue,{})}),a.jsxs(Ru,{id:"preview",imageSmoothingEnabled:m,children:[!p&&a.jsx(Due,{visible:d!=="move",listening:!1}),a.jsx(xue,{visible:p}),h&&a.jsx(uue,{}),a.jsx(Rue,{visible:n&&!p})]})]}),a.jsx(Eue,{}),a.jsx(Sue,{})]})})},Nue=be(mn,cY,Kn,(e,t,n)=>{const{doesCanvasNeedScaling:r,isCanvasInitialized:o}=e;return{doesCanvasNeedScaling:r,activeTabName:n,initialCanvasImage:t,isCanvasInitialized:o}}),__=()=>{const e=te(),{doesCanvasNeedScaling:t,activeTabName:n,initialCanvasImage:r,isCanvasInitialized:o}=B(Nue),s=f.useRef(null);return f.useLayoutEffect(()=>{window.setTimeout(()=>{if(!s.current)return;const{clientWidth:i,clientHeight:c}=s.current;e(UD({width:i,height:c})),e(o?GD():vm()),e(F_(!1))},0)},[e,r,t,n,o]),a.jsx(H,{ref:s,sx:{flexDirection:"column",alignItems:"center",justifyContent:"center",gap:4,width:"100%",height:"100%"},children:a.jsx(hl,{thickness:"2px",size:"xl"})})};function j8(e,t,n=250){const[r,o]=f.useState(0);return f.useEffect(()=>{const s=setTimeout(()=>{r===1&&e(),o(0)},n);return r===2&&t(),()=>clearTimeout(s)},[r,e,t,n]),()=>o(s=>s+1)}const $ue=je(l8,{baseStyle:{paddingInline:4},shouldForwardProp:e=>!["pickerColor"].includes(e)}),wv={width:6,height:6,borderColor:"base.100"},Lue=e=>{const{styleClass:t="",...n}=e;return a.jsx($ue,{sx:{".react-colorful__hue-pointer":wv,".react-colorful__saturation-pointer":wv,".react-colorful__alpha-pointer":wv},className:t,...n})},dm=f.memo(Lue),zue=be([mn,lr],(e,t)=>{const{maskColor:n,layer:r,isMaskEnabled:o,shouldPreserveMaskedArea:s}=e;return{layer:r,maskColor:n,maskColorString:rl(n),isMaskEnabled:o,shouldPreserveMaskedArea:s,isStaging:t}},{memoizeOptions:{resultEqualityCheck:Zt}}),Bue=()=>{const e=te(),{t}=ye(),{layer:n,maskColor:r,isMaskEnabled:o,shouldPreserveMaskedArea:s,isStaging:i}=B(zue);tt(["q"],()=>{c()},{enabled:()=>!i,preventDefault:!0},[n]),tt(["shift+c"],()=>{d()},{enabled:()=>!i,preventDefault:!0},[]),tt(["h"],()=>{p()},{enabled:()=>!i,preventDefault:!0},[o]);const c=()=>{e(Yp(n==="mask"?"base":"mask"))},d=()=>e(pb()),p=()=>e(Id(!o));return a.jsx(xl,{triggerComponent:a.jsx(rr,{children:a.jsx(ze,{"aria-label":t("unifiedCanvas.maskingOptions"),tooltip:t("unifiedCanvas.maskingOptions"),icon:a.jsx(eQ,{}),isChecked:n==="mask",isDisabled:i})}),children:a.jsxs(H,{direction:"column",gap:2,children:[a.jsx(Gn,{label:`${t("unifiedCanvas.enableMask")} (H)`,isChecked:o,onChange:p}),a.jsx(Gn,{label:t("unifiedCanvas.preserveMaskedArea"),isChecked:s,onChange:h=>e(y5(h.target.checked))}),a.jsx(dm,{sx:{paddingTop:2,paddingBottom:2},pickerColor:r,onChange:h=>e(x5(h))}),a.jsxs(Yt,{size:"sm",leftIcon:a.jsx(Oo,{}),onClick:d,children:[t("unifiedCanvas.clearMask")," (Shift+C)"]})]})})},Fue=be([mn,Kn,vo],(e,t,n)=>{const{futureLayerStates:r}=e;return{canRedo:r.length>0&&!n.isProcessing,activeTabName:t}},{memoizeOptions:{resultEqualityCheck:Zt}});function I8(){const e=te(),{canRedo:t,activeTabName:n}=B(Fue),{t:r}=ye(),o=()=>{e(qD())};return tt(["meta+shift+z","ctrl+shift+z","control+y","meta+y"],()=>{o()},{enabled:()=>t,preventDefault:!0},[n,t]),a.jsx(ze,{"aria-label":`${r("unifiedCanvas.redo")} (Ctrl+Shift+Z)`,tooltip:`${r("unifiedCanvas.redo")} (Ctrl+Shift+Z)`,icon:a.jsx(rQ,{}),onClick:o,isDisabled:!t})}const E8=()=>{const e=B(lr),t=te(),{t:n}=ye();return a.jsxs(fx,{title:n("unifiedCanvas.clearCanvasHistory"),acceptCallback:()=>t(KD()),acceptButtonText:n("unifiedCanvas.clearHistory"),triggerComponent:a.jsx(Yt,{size:"sm",leftIcon:a.jsx(Oo,{}),isDisabled:e,children:n("unifiedCanvas.clearCanvasHistory")}),children:[a.jsx("p",{children:n("unifiedCanvas.clearCanvasHistoryMessage")}),a.jsx("br",{}),a.jsx("p",{children:n("unifiedCanvas.clearCanvasHistoryConfirm")})]})},Hue=be([mn],e=>{const{shouldAutoSave:t,shouldCropToBoundingBoxOnSave:n,shouldDarkenOutsideBoundingBox:r,shouldShowCanvasDebugInfo:o,shouldShowGrid:s,shouldShowIntermediates:i,shouldSnapToGrid:c,shouldRestrictStrokesToBox:d,shouldAntialias:p}=e;return{shouldAutoSave:t,shouldCropToBoundingBoxOnSave:n,shouldDarkenOutsideBoundingBox:r,shouldShowCanvasDebugInfo:o,shouldShowGrid:s,shouldShowIntermediates:i,shouldSnapToGrid:c,shouldRestrictStrokesToBox:d,shouldAntialias:p}},{memoizeOptions:{resultEqualityCheck:Zt}}),Wue=()=>{const e=te(),{t}=ye(),{shouldAutoSave:n,shouldCropToBoundingBoxOnSave:r,shouldDarkenOutsideBoundingBox:o,shouldShowCanvasDebugInfo:s,shouldShowGrid:i,shouldShowIntermediates:c,shouldSnapToGrid:d,shouldRestrictStrokesToBox:p,shouldAntialias:h}=B(Hue);tt(["n"],()=>{e(nd(!d))},{enabled:!0,preventDefault:!0},[d]);const m=v=>e(nd(v.target.checked));return a.jsx(xl,{isLazy:!1,triggerComponent:a.jsx(ze,{tooltip:t("unifiedCanvas.canvasSettings"),"aria-label":t("unifiedCanvas.canvasSettings"),icon:a.jsx(Py,{})}),children:a.jsxs(H,{direction:"column",gap:2,children:[a.jsx(Gn,{label:t("unifiedCanvas.showIntermediates"),isChecked:c,onChange:v=>e(w5(v.target.checked))}),a.jsx(Gn,{label:t("unifiedCanvas.showGrid"),isChecked:i,onChange:v=>e(S5(v.target.checked))}),a.jsx(Gn,{label:t("unifiedCanvas.snapToGrid"),isChecked:d,onChange:m}),a.jsx(Gn,{label:t("unifiedCanvas.darkenOutsideSelection"),isChecked:o,onChange:v=>e(C5(v.target.checked))}),a.jsx(Gn,{label:t("unifiedCanvas.autoSaveToGallery"),isChecked:n,onChange:v=>e(k5(v.target.checked))}),a.jsx(Gn,{label:t("unifiedCanvas.saveBoxRegionOnly"),isChecked:r,onChange:v=>e(_5(v.target.checked))}),a.jsx(Gn,{label:t("unifiedCanvas.limitStrokesToBox"),isChecked:p,onChange:v=>e(P5(v.target.checked))}),a.jsx(Gn,{label:t("unifiedCanvas.showCanvasDebugInfo"),isChecked:s,onChange:v=>e(j5(v.target.checked))}),a.jsx(Gn,{label:t("unifiedCanvas.antialiasing"),isChecked:h,onChange:v=>e(I5(v.target.checked))}),a.jsx(E8,{})]})})},Vue=be([mn,lr,vo],(e,t,n)=>{const{isProcessing:r}=n,{tool:o,brushColor:s,brushSize:i}=e;return{tool:o,isStaging:t,isProcessing:r,brushColor:s,brushSize:i}},{memoizeOptions:{resultEqualityCheck:Zt}}),Uue=()=>{const e=te(),{tool:t,brushColor:n,brushSize:r,isStaging:o}=B(Vue),{t:s}=ye();tt(["b"],()=>{i()},{enabled:()=>!o,preventDefault:!0},[]),tt(["e"],()=>{c()},{enabled:()=>!o,preventDefault:!0},[t]),tt(["c"],()=>{d()},{enabled:()=>!o,preventDefault:!0},[t]),tt(["shift+f"],()=>{p()},{enabled:()=>!o,preventDefault:!0}),tt(["delete","backspace"],()=>{h()},{enabled:()=>!o,preventDefault:!0}),tt(["BracketLeft"],()=>{e(oc(Math.max(r-5,5)))},{enabled:()=>!o,preventDefault:!0},[r]),tt(["BracketRight"],()=>{e(oc(Math.min(r+5,500)))},{enabled:()=>!o,preventDefault:!0},[r]),tt(["Shift+BracketLeft"],()=>{e(sc({...n,a:Es(n.a-.05,.05,1)}))},{enabled:()=>!o,preventDefault:!0},[n]),tt(["Shift+BracketRight"],()=>{e(sc({...n,a:Es(n.a+.05,.05,1)}))},{enabled:()=>!o,preventDefault:!0},[n]);const i=()=>e(ea("brush")),c=()=>e(ea("eraser")),d=()=>e(ea("colorPicker")),p=()=>e(E5()),h=()=>e(O5());return a.jsxs(rr,{isAttached:!0,children:[a.jsx(ze,{"aria-label":`${s("unifiedCanvas.brush")} (B)`,tooltip:`${s("unifiedCanvas.brush")} (B)`,icon:a.jsx(sE,{}),isChecked:t==="brush"&&!o,onClick:i,isDisabled:o}),a.jsx(ze,{"aria-label":`${s("unifiedCanvas.eraser")} (E)`,tooltip:`${s("unifiedCanvas.eraser")} (E)`,icon:a.jsx(JI,{}),isChecked:t==="eraser"&&!o,isDisabled:o,onClick:c}),a.jsx(ze,{"aria-label":`${s("unifiedCanvas.fillBoundingBox")} (Shift+F)`,tooltip:`${s("unifiedCanvas.fillBoundingBox")} (Shift+F)`,icon:a.jsx(tE,{}),isDisabled:o,onClick:p}),a.jsx(ze,{"aria-label":`${s("unifiedCanvas.eraseBoundingBox")} (Del/Backspace)`,tooltip:`${s("unifiedCanvas.eraseBoundingBox")} (Del/Backspace)`,icon:a.jsx(yl,{style:{transform:"rotate(45deg)"}}),isDisabled:o,onClick:h}),a.jsx(ze,{"aria-label":`${s("unifiedCanvas.colorPicker")} (C)`,tooltip:`${s("unifiedCanvas.colorPicker")} (C)`,icon:a.jsx(eE,{}),isChecked:t==="colorPicker"&&!o,isDisabled:o,onClick:d}),a.jsx(xl,{triggerComponent:a.jsx(ze,{"aria-label":s("unifiedCanvas.brushOptions"),tooltip:s("unifiedCanvas.brushOptions"),icon:a.jsx(ky,{})}),children:a.jsxs(H,{minWidth:60,direction:"column",gap:4,width:"100%",children:[a.jsx(H,{gap:4,justifyContent:"space-between",children:a.jsx(jt,{label:s("unifiedCanvas.brushSize"),value:r,withInput:!0,onChange:m=>e(oc(m)),sliderNumberInputProps:{max:500}})}),a.jsx(dm,{sx:{width:"100%",paddingTop:2,paddingBottom:2},pickerColor:n,onChange:m=>e(sc(m))})]})})]})},Gue=be([mn,Kn,vo],(e,t,n)=>{const{pastLayerStates:r}=e;return{canUndo:r.length>0&&!n.isProcessing,activeTabName:t}},{memoizeOptions:{resultEqualityCheck:Zt}});function O8(){const e=te(),{t}=ye(),{canUndo:n,activeTabName:r}=B(Gue),o=()=>{e(XD())};return tt(["meta+z","ctrl+z"],()=>{o()},{enabled:()=>n,preventDefault:!0},[r,n]),a.jsx(ze,{"aria-label":`${t("unifiedCanvas.undo")} (Ctrl+Z)`,tooltip:`${t("unifiedCanvas.undo")} (Ctrl+Z)`,icon:a.jsx(_y,{}),onClick:o,isDisabled:!n})}const que=be([vo,mn,lr],(e,t,n)=>{const{isProcessing:r}=e,{tool:o,shouldCropToBoundingBoxOnSave:s,layer:i,isMaskEnabled:c}=t;return{isProcessing:r,isStaging:n,isMaskEnabled:c,tool:o,layer:i,shouldCropToBoundingBoxOnSave:s}},{memoizeOptions:{resultEqualityCheck:Zt}}),Kue=()=>{const e=te(),{isProcessing:t,isStaging:n,isMaskEnabled:r,layer:o,tool:s}=B(que),i=Ta(),{t:c}=ye(),{isClipboardAPIAvailable:d}=Yy(),{getUploadButtonProps:p,getUploadInputProps:h}=ag({postUploadAction:{type:"SET_CANVAS_INITIAL_IMAGE"}});tt(["v"],()=>{m()},{enabled:()=>!n,preventDefault:!0},[]),tt(["r"],()=>{b()},{enabled:()=>!0,preventDefault:!0},[i]),tt(["shift+m"],()=>{y()},{enabled:()=>!n,preventDefault:!0},[i,t]),tt(["shift+s"],()=>{S()},{enabled:()=>!n,preventDefault:!0},[i,t]),tt(["meta+c","ctrl+c"],()=>{k()},{enabled:()=>!n&&d,preventDefault:!0},[i,t,d]),tt(["shift+d"],()=>{_()},{enabled:()=>!n,preventDefault:!0},[i,t]);const m=()=>e(ea("move")),v=j8(()=>b(!1),()=>b(!0)),b=(I=!1)=>{const E=Ta();if(!E)return;const O=E.getClientRect({skipTransform:!0});e(R5({contentRect:O,shouldScaleTo1:I}))},w=()=>{e(lb()),e(vm())},y=()=>{e(M5())},S=()=>{e(D5())},k=()=>{d&&e(A5())},_=()=>{e(T5())},P=I=>{const E=I;e(Yp(E)),E==="mask"&&!r&&e(Id(!0))};return a.jsxs(H,{sx:{alignItems:"center",gap:2,flexWrap:"wrap"},children:[a.jsx(Oe,{w:24,children:a.jsx(Fr,{tooltip:`${c("unifiedCanvas.layer")} (Q)`,value:o,data:N5,onChange:P,disabled:n})}),a.jsx(Bue,{}),a.jsx(Uue,{}),a.jsxs(rr,{isAttached:!0,children:[a.jsx(ze,{"aria-label":`${c("unifiedCanvas.move")} (V)`,tooltip:`${c("unifiedCanvas.move")} (V)`,icon:a.jsx(XI,{}),isChecked:s==="move"||n,onClick:m}),a.jsx(ze,{"aria-label":`${c("unifiedCanvas.resetView")} (R)`,tooltip:`${c("unifiedCanvas.resetView")} (R)`,icon:a.jsx(QI,{}),onClick:v})]}),a.jsxs(rr,{isAttached:!0,children:[a.jsx(ze,{"aria-label":`${c("unifiedCanvas.mergeVisible")} (Shift+M)`,tooltip:`${c("unifiedCanvas.mergeVisible")} (Shift+M)`,icon:a.jsx(rE,{}),onClick:y,isDisabled:n}),a.jsx(ze,{"aria-label":`${c("unifiedCanvas.saveToGallery")} (Shift+S)`,tooltip:`${c("unifiedCanvas.saveToGallery")} (Shift+S)`,icon:a.jsx(Km,{}),onClick:S,isDisabled:n}),d&&a.jsx(ze,{"aria-label":`${c("unifiedCanvas.copyToClipboard")} (Cmd/Ctrl+C)`,tooltip:`${c("unifiedCanvas.copyToClipboard")} (Cmd/Ctrl+C)`,icon:a.jsx(Kc,{}),onClick:k,isDisabled:n}),a.jsx(ze,{"aria-label":`${c("unifiedCanvas.downloadAsImage")} (Shift+D)`,tooltip:`${c("unifiedCanvas.downloadAsImage")} (Shift+D)`,icon:a.jsx(Cy,{}),onClick:_,isDisabled:n})]}),a.jsxs(rr,{isAttached:!0,children:[a.jsx(O8,{}),a.jsx(I8,{})]}),a.jsxs(rr,{isAttached:!0,children:[a.jsx(ze,{"aria-label":`${c("common.upload")}`,tooltip:`${c("common.upload")}`,icon:a.jsx(Kd,{}),isDisabled:n,...p()}),a.jsx("input",{...h()}),a.jsx(ze,{"aria-label":`${c("unifiedCanvas.clearCanvas")}`,tooltip:`${c("unifiedCanvas.clearCanvas")}`,icon:a.jsx(Oo,{}),onClick:w,colorScheme:"error",isDisabled:n})]}),a.jsx(rr,{isAttached:!0,children:a.jsx(Wue,{})})]})};function Xue(){const e=te(),t=B(o=>o.canvas.brushSize),{t:n}=ye(),r=B(lr);return tt(["BracketLeft"],()=>{e(oc(Math.max(t-5,5)))},{enabled:()=>!r,preventDefault:!0},[t]),tt(["BracketRight"],()=>{e(oc(Math.min(t+5,500)))},{enabled:()=>!r,preventDefault:!0},[t]),a.jsx(jt,{label:n("unifiedCanvas.brushSize"),value:t,withInput:!0,onChange:o=>e(oc(o)),sliderNumberInputProps:{max:500},isCompact:!0})}const Yue=be([mn,lr],(e,t)=>{const{brushColor:n,maskColor:r,layer:o}=e;return{brushColor:n,maskColor:r,layer:o,isStaging:t}},{memoizeOptions:{resultEqualityCheck:Zt}});function Que(){const e=te(),{brushColor:t,maskColor:n,layer:r,isStaging:o}=B(Yue),s=()=>{if(r==="base")return`rgba(${t.r},${t.g},${t.b},${t.a})`;if(r==="mask")return`rgba(${n.r},${n.g},${n.b},${n.a})`};return tt(["shift+BracketLeft"],()=>{e(sc({...t,a:Es(t.a-.05,.05,1)}))},{enabled:()=>!o,preventDefault:!0},[t]),tt(["shift+BracketRight"],()=>{e(sc({...t,a:Es(t.a+.05,.05,1)}))},{enabled:()=>!o,preventDefault:!0},[t]),a.jsx(xl,{triggerComponent:a.jsx(Oe,{sx:{width:7,height:7,minWidth:7,minHeight:7,borderRadius:"full",bg:s(),cursor:"pointer"}}),children:a.jsxs(H,{minWidth:60,direction:"column",gap:4,width:"100%",children:[r==="base"&&a.jsx(dm,{sx:{width:"100%",paddingTop:2,paddingBottom:2},pickerColor:t,onChange:i=>e(sc(i))}),r==="mask"&&a.jsx(dm,{sx:{width:"100%",paddingTop:2,paddingBottom:2},pickerColor:n,onChange:i=>e(x5(i))})]})})}function R8(){return a.jsxs(H,{columnGap:4,alignItems:"center",children:[a.jsx(Xue,{}),a.jsx(Que,{})]})}function Jue(){const e=te(),t=B(r=>r.canvas.shouldRestrictStrokesToBox),{t:n}=ye();return a.jsx(Gn,{label:n("unifiedCanvas.betaLimitToBox"),isChecked:t,onChange:r=>e(P5(r.target.checked))})}function Zue(){return a.jsxs(H,{gap:4,alignItems:"center",children:[a.jsx(R8,{}),a.jsx(Jue,{})]})}function ede(){const e=te(),{t}=ye(),n=()=>e(pb());return a.jsx(Yt,{size:"sm",leftIcon:a.jsx(Oo,{}),onClick:n,tooltip:`${t("unifiedCanvas.clearMask")} (Shift+C)`,children:t("unifiedCanvas.betaClear")})}function tde(){const e=B(o=>o.canvas.isMaskEnabled),t=te(),{t:n}=ye(),r=()=>t(Id(!e));return a.jsx(Gn,{label:`${n("unifiedCanvas.enableMask")} (H)`,isChecked:e,onChange:r})}function nde(){const e=te(),{t}=ye(),n=B(r=>r.canvas.shouldPreserveMaskedArea);return a.jsx(Gn,{label:t("unifiedCanvas.betaPreserveMasked"),isChecked:n,onChange:r=>e(y5(r.target.checked))})}function rde(){return a.jsxs(H,{gap:4,alignItems:"center",children:[a.jsx(R8,{}),a.jsx(tde,{}),a.jsx(nde,{}),a.jsx(ede,{})]})}function ode(){const e=B(r=>r.canvas.shouldDarkenOutsideBoundingBox),t=te(),{t:n}=ye();return a.jsx(Gn,{label:n("unifiedCanvas.betaDarkenOutside"),isChecked:e,onChange:r=>t(C5(r.target.checked))})}function sde(){const e=B(r=>r.canvas.shouldShowGrid),t=te(),{t:n}=ye();return a.jsx(Gn,{label:n("unifiedCanvas.showGrid"),isChecked:e,onChange:r=>t(S5(r.target.checked))})}function ade(){const e=B(o=>o.canvas.shouldSnapToGrid),t=te(),{t:n}=ye(),r=o=>t(nd(o.target.checked));return a.jsx(Gn,{label:`${n("unifiedCanvas.snapToGrid")} (N)`,isChecked:e,onChange:r})}function ide(){return a.jsxs(H,{alignItems:"center",gap:4,children:[a.jsx(sde,{}),a.jsx(ade,{}),a.jsx(ode,{})]})}const lde=be([mn],e=>{const{tool:t,layer:n}=e;return{tool:t,layer:n}},{memoizeOptions:{resultEqualityCheck:Zt}});function cde(){const{tool:e,layer:t}=B(lde);return a.jsxs(H,{height:8,minHeight:8,maxHeight:8,alignItems:"center",children:[t=="base"&&["brush","eraser","colorPicker"].includes(e)&&a.jsx(Zue,{}),t=="mask"&&["brush","eraser","colorPicker"].includes(e)&&a.jsx(rde,{}),e=="move"&&a.jsx(ide,{})]})}const ude=be([mn],e=>{const{shouldAutoSave:t,shouldCropToBoundingBoxOnSave:n,shouldShowCanvasDebugInfo:r,shouldShowIntermediates:o,shouldAntialias:s}=e;return{shouldAutoSave:t,shouldCropToBoundingBoxOnSave:n,shouldShowCanvasDebugInfo:r,shouldShowIntermediates:o,shouldAntialias:s}},{memoizeOptions:{resultEqualityCheck:Zt}}),dde=()=>{const e=te(),{t}=ye(),{shouldAutoSave:n,shouldCropToBoundingBoxOnSave:r,shouldShowCanvasDebugInfo:o,shouldShowIntermediates:s,shouldAntialias:i}=B(ude);return a.jsx(xl,{isLazy:!1,triggerComponent:a.jsx(ze,{tooltip:t("unifiedCanvas.canvasSettings"),tooltipProps:{placement:"bottom"},"aria-label":t("unifiedCanvas.canvasSettings"),icon:a.jsx(Py,{})}),children:a.jsxs(H,{direction:"column",gap:2,children:[a.jsx(Gn,{label:t("unifiedCanvas.showIntermediates"),isChecked:s,onChange:c=>e(w5(c.target.checked))}),a.jsx(Gn,{label:t("unifiedCanvas.autoSaveToGallery"),isChecked:n,onChange:c=>e(k5(c.target.checked))}),a.jsx(Gn,{label:t("unifiedCanvas.saveBoxRegionOnly"),isChecked:r,onChange:c=>e(_5(c.target.checked))}),a.jsx(Gn,{label:t("unifiedCanvas.showCanvasDebugInfo"),isChecked:o,onChange:c=>e(j5(c.target.checked))}),a.jsx(Gn,{label:t("unifiedCanvas.antialiasing"),isChecked:i,onChange:c=>e(I5(c.target.checked))}),a.jsx(E8,{})]})})};function fde(){const e=B(lr),t=Ta(),{isClipboardAPIAvailable:n}=Yy(),r=B(c=>c.system.isProcessing),o=te(),{t:s}=ye();tt(["meta+c","ctrl+c"],()=>{i()},{enabled:()=>!e&&n,preventDefault:!0},[t,r,n]);const i=f.useCallback(()=>{n&&o(A5())},[o,n]);return n?a.jsx(ze,{"aria-label":`${s("unifiedCanvas.copyToClipboard")} (Cmd/Ctrl+C)`,tooltip:`${s("unifiedCanvas.copyToClipboard")} (Cmd/Ctrl+C)`,icon:a.jsx(Kc,{}),onClick:i,isDisabled:e}):null}function pde(){const e=te(),{t}=ye(),n=Ta(),r=B(lr);tt(["shift+d"],()=>{o()},{enabled:()=>!r,preventDefault:!0},[n]);const o=()=>{e(T5())};return a.jsx(ze,{"aria-label":`${t("unifiedCanvas.downloadAsImage")} (Shift+D)`,tooltip:`${t("unifiedCanvas.downloadAsImage")} (Shift+D)`,icon:a.jsx(Cy,{}),onClick:o,isDisabled:r})}function hde(){const e=B(lr),{getUploadButtonProps:t,getUploadInputProps:n}=ag({postUploadAction:{type:"SET_CANVAS_INITIAL_IMAGE"}}),{t:r}=ye();return a.jsxs(a.Fragment,{children:[a.jsx(ze,{"aria-label":r("common.upload"),tooltip:r("common.upload"),icon:a.jsx(Kd,{}),isDisabled:e,...t()}),a.jsx("input",{...n()})]})}const mde=be([mn,lr],(e,t)=>{const{layer:n,isMaskEnabled:r}=e;return{layer:n,isMaskEnabled:r,isStaging:t}},{memoizeOptions:{resultEqualityCheck:Zt}});function gde(){const e=te(),{t}=ye(),{layer:n,isMaskEnabled:r,isStaging:o}=B(mde),s=()=>{e(Yp(n==="mask"?"base":"mask"))};tt(["q"],()=>{s()},{enabled:()=>!o,preventDefault:!0},[n]);const i=c=>{const d=c;e(Yp(d)),d==="mask"&&!r&&e(Id(!0))};return a.jsx(Fr,{tooltip:`${t("unifiedCanvas.layer")} (Q)`,"aria-label":`${t("unifiedCanvas.layer")} (Q)`,value:n,data:N5,onChange:i,disabled:o,w:"full"})}function vde(){const e=te(),{t}=ye(),n=Ta(),r=B(lr),o=B(i=>i.system.isProcessing);tt(["shift+m"],()=>{s()},{enabled:()=>!r,preventDefault:!0},[n,o]);const s=()=>{e(M5())};return a.jsx(ze,{"aria-label":`${t("unifiedCanvas.mergeVisible")} (Shift+M)`,tooltip:`${t("unifiedCanvas.mergeVisible")} (Shift+M)`,icon:a.jsx(rE,{}),onClick:s,isDisabled:r})}function bde(){const e=B(s=>s.canvas.tool),t=B(lr),n=te(),{t:r}=ye();tt(["v"],()=>{o()},{enabled:()=>!t,preventDefault:!0},[]);const o=()=>n(ea("move"));return a.jsx(ze,{"aria-label":`${r("unifiedCanvas.move")} (V)`,tooltip:`${r("unifiedCanvas.move")} (V)`,icon:a.jsx(XI,{}),isChecked:e==="move"||t,onClick:o})}function yde(){const e=B(s=>s.ui.shouldPinParametersPanel),t=B(s=>s.ui.shouldShowParametersPanel),n=te(),{t:r}=ye(),o=()=>{n(hb(!0)),e&&n(_o())};return!e||!t?a.jsxs(H,{flexDirection:"column",gap:2,children:[a.jsx(ze,{tooltip:`${r("parameters.showOptionsPanel")} (O)`,tooltipProps:{placement:"top"},"aria-label":r("parameters.showOptionsPanel"),onClick:o,children:a.jsx(ky,{})}),a.jsx(H,{children:a.jsx(nx,{iconButton:!0})}),a.jsx(H,{children:a.jsx(cg,{width:"100%",height:"40px",btnGroupWidth:"100%"})})]}):null}function xde(){const e=te(),{t}=ye(),n=B(lr),r=()=>{e(lb()),e(vm())};return a.jsx(ze,{"aria-label":t("unifiedCanvas.clearCanvas"),tooltip:t("unifiedCanvas.clearCanvas"),icon:a.jsx(Oo,{}),onClick:r,isDisabled:n,colorScheme:"error"})}function wde(){const e=Ta(),t=te(),{t:n}=ye();tt(["r"],()=>{o()},{enabled:()=>!0,preventDefault:!0},[e]);const r=j8(()=>o(!1),()=>o(!0)),o=(s=!1)=>{const i=Ta();if(!i)return;const c=i.getClientRect({skipTransform:!0});t(R5({contentRect:c,shouldScaleTo1:s}))};return a.jsx(ze,{"aria-label":`${n("unifiedCanvas.resetView")} (R)`,tooltip:`${n("unifiedCanvas.resetView")} (R)`,icon:a.jsx(QI,{}),onClick:r})}function Sde(){const e=B(lr),t=Ta(),n=B(i=>i.system.isProcessing),r=te(),{t:o}=ye();tt(["shift+s"],()=>{s()},{enabled:()=>!e,preventDefault:!0},[t,n]);const s=()=>{r(D5())};return a.jsx(ze,{"aria-label":`${o("unifiedCanvas.saveToGallery")} (Shift+S)`,tooltip:`${o("unifiedCanvas.saveToGallery")} (Shift+S)`,icon:a.jsx(Km,{}),onClick:s,isDisabled:e})}const Cde=be([mn,lr,vo],(e,t,n)=>{const{isProcessing:r}=n,{tool:o}=e;return{tool:o,isStaging:t,isProcessing:r}},{memoizeOptions:{resultEqualityCheck:Zt}}),kde=()=>{const e=te(),{t}=ye(),{tool:n,isStaging:r}=B(Cde);tt(["b"],()=>{o()},{enabled:()=>!r,preventDefault:!0},[]),tt(["e"],()=>{s()},{enabled:()=>!r,preventDefault:!0},[n]),tt(["c"],()=>{i()},{enabled:()=>!r,preventDefault:!0},[n]),tt(["shift+f"],()=>{c()},{enabled:()=>!r,preventDefault:!0}),tt(["delete","backspace"],()=>{d()},{enabled:()=>!r,preventDefault:!0});const o=()=>e(ea("brush")),s=()=>e(ea("eraser")),i=()=>e(ea("colorPicker")),c=()=>e(E5()),d=()=>e(O5());return a.jsxs(H,{flexDirection:"column",gap:2,children:[a.jsxs(rr,{children:[a.jsx(ze,{"aria-label":`${t("unifiedCanvas.brush")} (B)`,tooltip:`${t("unifiedCanvas.brush")} (B)`,icon:a.jsx(sE,{}),isChecked:n==="brush"&&!r,onClick:o,isDisabled:r}),a.jsx(ze,{"aria-label":`${t("unifiedCanvas.eraser")} (E)`,tooltip:`${t("unifiedCanvas.eraser")} (B)`,icon:a.jsx(JI,{}),isChecked:n==="eraser"&&!r,isDisabled:r,onClick:s})]}),a.jsxs(rr,{children:[a.jsx(ze,{"aria-label":`${t("unifiedCanvas.fillBoundingBox")} (Shift+F)`,tooltip:`${t("unifiedCanvas.fillBoundingBox")} (Shift+F)`,icon:a.jsx(tE,{}),isDisabled:r,onClick:c}),a.jsx(ze,{"aria-label":`${t("unifiedCanvas.eraseBoundingBox")} (Del/Backspace)`,tooltip:`${t("unifiedCanvas.eraseBoundingBox")} (Del/Backspace)`,icon:a.jsx(yl,{style:{transform:"rotate(45deg)"}}),isDisabled:r,onClick:d})]}),a.jsx(ze,{"aria-label":`${t("unifiedCanvas.colorPicker")} (C)`,tooltip:`${t("unifiedCanvas.colorPicker")} (C)`,icon:a.jsx(eE,{}),isChecked:n==="colorPicker"&&!r,isDisabled:r,onClick:i,width:"max-content"})]})},_de=()=>a.jsxs(H,{flexDirection:"column",rowGap:2,width:"min-content",children:[a.jsx(gde,{}),a.jsx(kde,{}),a.jsxs(H,{gap:2,children:[a.jsx(bde,{}),a.jsx(wde,{})]}),a.jsxs(H,{columnGap:2,children:[a.jsx(vde,{}),a.jsx(Sde,{})]}),a.jsxs(H,{columnGap:2,children:[a.jsx(fde,{}),a.jsx(pde,{})]}),a.jsxs(H,{gap:2,children:[a.jsx(O8,{}),a.jsx(I8,{})]}),a.jsxs(H,{gap:2,children:[a.jsx(hde,{}),a.jsx(xde,{})]}),a.jsx(dde,{}),a.jsx(yde,{})]}),Pde=be([mn,Ua],(e,t)=>{const{doesCanvasNeedScaling:n}=e,{shouldUseCanvasBetaLayout:r}=t;return{doesCanvasNeedScaling:n,shouldUseCanvasBetaLayout:r}},Ke),Sv={id:"canvas-intial-image",actionType:"SET_CANVAS_INITIAL_IMAGE"},jde=()=>{const e=te(),{doesCanvasNeedScaling:t,shouldUseCanvasBetaLayout:n}=B(Pde),{isOver:r,setNodeRef:o,active:s}=rb({id:"unifiedCanvas",data:Sv});return f.useLayoutEffect(()=>{const i=()=>{e(_o())};return window.addEventListener("resize",i),()=>window.removeEventListener("resize",i)},[e]),n?a.jsx(Oe,{layerStyle:"first",ref:o,tabIndex:0,sx:{w:"full",h:"full",p:4,borderRadius:"base"},children:a.jsxs(H,{sx:{w:"full",h:"full",gap:4},children:[a.jsx(_de,{}),a.jsxs(H,{sx:{flexDir:"column",w:"full",h:"full",gap:4,position:"relative"},children:[a.jsx(cde,{}),a.jsxs(Oe,{sx:{w:"full",h:"full",position:"relative"},children:[t?a.jsx(__,{}):a.jsx(k_,{}),Fp(Sv,s)&&a.jsx(tm,{isOver:r,label:"Set Canvas Initial Image"})]})]})]})}):a.jsx(Oe,{ref:o,tabIndex:-1,sx:{layerStyle:"first",w:"full",h:"full",p:4,borderRadius:"base"},children:a.jsxs(H,{sx:{flexDirection:"column",alignItems:"center",gap:4,w:"full",h:"full"},children:[a.jsx(Kue,{}),a.jsx(H,{sx:{flexDirection:"column",alignItems:"center",justifyContent:"center",gap:4,w:"full",h:"full"},children:a.jsxs(Oe,{sx:{w:"full",h:"full",position:"relative"},children:[t?a.jsx(__,{}):a.jsx(k_,{}),Fp(Sv,s)&&a.jsx(tm,{isOver:r,label:"Set Canvas Initial Image"})]})})]})})},Ide=f.memo(jde),Ede=be(at,({ui:e,generation:t})=>{const{shouldUseSliders:n}=e,{shouldRandomizeSeed:r}=t;return{shouldUseSliders:n,activeLabel:r?void 0:"Manual Seed"}},Ke),Ode=()=>{const{shouldUseSliders:e,activeLabel:t}=B(Ede);return a.jsx(bo,{label:"General",activeLabel:t,defaultIsOpen:!0,children:a.jsxs(H,{sx:{flexDirection:"column",gap:3},children:[e?a.jsxs(a.Fragment,{children:[a.jsx(ia,{}),a.jsx(ca,{}),a.jsx(aa,{}),a.jsx(la,{}),a.jsx(Oe,{pt:2,children:a.jsx(ua,{})}),a.jsx(cm,{})]}):a.jsxs(a.Fragment,{children:[a.jsxs(H,{gap:3,children:[a.jsx(ia,{}),a.jsx(ca,{}),a.jsx(aa,{})]}),a.jsx(la,{}),a.jsx(Oe,{pt:2,children:a.jsx(ua,{})}),a.jsx(cm,{})]}),a.jsx(qO,{})]})})},Rde=f.memo(Ode),M8=()=>a.jsxs(a.Fragment,{children:[a.jsx(dx,{}),a.jsx(Zc,{}),a.jsx(Rde,{}),a.jsx(Jc,{}),a.jsx(Qc,{}),a.jsx(Yc,{}),a.jsx(ux,{}),a.jsx(m8,{}),a.jsx(h8,{}),a.jsx(cx,{})]}),Mde=()=>{const e=B(t=>t.generation.model);return a.jsxs(H,{sx:{gap:4,w:"full",h:"full"},children:[a.jsx(lx,{children:e&&e.base_model==="sdxl"?a.jsx(Hle,{}):a.jsx(M8,{})}),a.jsx(Ide,{})]})},Dde=f.memo(Mde),Ade=[{id:"txt2img",translationKey:"common.txt2img",icon:a.jsx(fo,{as:GY,sx:{boxSize:6,pointerEvents:"none"}}),content:a.jsx(fle,{})},{id:"img2img",translationKey:"common.img2img",icon:a.jsx(fo,{as:Rc,sx:{boxSize:6,pointerEvents:"none"}}),content:a.jsx(dse,{})},{id:"unifiedCanvas",translationKey:"common.unifiedCanvas",icon:a.jsx(fo,{as:nte,sx:{boxSize:6,pointerEvents:"none"}}),content:a.jsx(Dde,{})},{id:"nodes",translationKey:"common.nodes",icon:a.jsx(fo,{as:tte,sx:{boxSize:6,pointerEvents:"none"}}),content:a.jsx(lle,{})},{id:"modelManager",translationKey:"modelManager.modelManager",icon:a.jsx(fo,{as:BY,sx:{boxSize:6,pointerEvents:"none"}}),content:a.jsx(dae,{})}],Tde=be([bO,vo],(e,t)=>{const{disabledTabs:n}=e,{isNodesEnabled:r}=t;return Ade.filter(s=>s.id==="nodes"?r&&!n.includes(s.id):!n.includes(s.id))},{memoizeOptions:{resultEqualityCheck:Zt}}),Nde=350,Cv=20,D8=["modelManager"],$de=()=>{const e=B(YD),t=B(Kn),n=B(Tde),{shouldPinGallery:r,shouldPinParametersPanel:o,shouldShowGallery:s}=B(y=>y.ui),{t:i}=ye(),c=te();tt("f",()=>{c(QD()),(r||o)&&c(_o())},[r,o]);const d=f.useCallback(()=>{t==="unifiedCanvas"&&c(_o())},[c,t]),p=f.useCallback(y=>{y.target instanceof HTMLElement&&y.target.blur()},[]),h=f.useMemo(()=>n.map(y=>a.jsx(vn,{hasArrow:!0,label:String(i(y.translationKey)),placement:"end",children:a.jsxs(_c,{onClick:p,children:[a.jsx(Z5,{children:String(i(y.translationKey))}),y.icon]})},y.id)),[n,i,p]),m=f.useMemo(()=>n.map(y=>a.jsx(zm,{children:y.content},y.id)),[n]),{ref:v,minSizePct:b}=_te(Nde,Cv,"app"),w=f.useCallback(y=>{const S=JD[y];S&&c(Ql(S))},[c]);return a.jsxs(Hd,{defaultIndex:e,index:e,onChange:w,sx:{flexGrow:1,gap:4},isLazy:!0,children:[a.jsxs(Wd,{sx:{pt:2,gap:4,flexDir:"column"},children:[h,a.jsx(ml,{}),a.jsx(ite,{})]}),a.jsxs(tx,{id:"app",autoSaveId:"app",direction:"horizontal",style:{height:"100%",width:"100%"},children:[a.jsx(yd,{id:"main",children:a.jsx(Bm,{style:{height:"100%",width:"100%"},children:m})}),r&&s&&!D8.includes(t)&&a.jsxs(a.Fragment,{children:[a.jsx(WO,{}),a.jsx(yd,{ref:v,onResize:d,id:"gallery",order:3,defaultSize:b>Cv&&b<100?b:Cv,minSize:b,maxSize:50,children:a.jsx(hO,{})})]})]})]})},Lde=f.memo($de),zde=be([Kn,Ua],(e,t)=>{const{shouldPinGallery:n,shouldShowGallery:r}=t;return{shouldPinGallery:n,shouldShowGalleryButton:D8.includes(e)?!1:!r}},{memoizeOptions:{resultEqualityCheck:Zt}}),Bde=()=>{const{t:e}=ye(),{shouldPinGallery:t,shouldShowGalleryButton:n}=B(zde),r=te(),o=()=>{r($v(!0)),t&&r(_o())};return n?a.jsx(ze,{tooltip:"Show Gallery (G)",tooltipProps:{placement:"top"},"aria-label":e("accessibility.showGallery"),onClick:o,sx:{pos:"absolute",top:"50%",transform:"translate(0, -50%)",p:0,insetInlineEnd:0,px:3,h:48,w:8,borderStartEndRadius:0,borderEndEndRadius:0,shadow:"2xl"},children:a.jsx(rte,{})}):null},Fde=f.memo(Bde),kv={borderStartStartRadius:0,borderEndStartRadius:0,shadow:"2xl"},Hde=be([Ua,Kn],(e,t)=>{const{shouldPinParametersPanel:n,shouldUseCanvasBetaLayout:r,shouldShowParametersPanel:o}=e,s=r&&t==="unifiedCanvas",i=!s&&(!n||!o),c=!s&&!o&&["txt2img","img2img","unifiedCanvas"].includes(t);return{shouldPinParametersPanel:n,shouldShowParametersPanelButton:c,shouldShowProcessButtons:i}},{memoizeOptions:{resultEqualityCheck:Zt}}),Wde=()=>{const e=te(),{t}=ye(),{shouldShowProcessButtons:n,shouldShowParametersPanelButton:r,shouldPinParametersPanel:o}=B(Hde),s=()=>{e(hb(!0)),o&&e(_o())};return r?a.jsxs(H,{pos:"absolute",transform:"translate(0, -50%)",minW:8,top:"50%",insetInlineStart:"4.5rem",direction:"column",gap:2,children:[a.jsx(ze,{tooltip:"Show Options Panel (O)",tooltipProps:{placement:"top"},"aria-label":t("accessibility.showOptionsPanel"),onClick:s,sx:kv,children:a.jsx(ky,{})}),n&&a.jsxs(a.Fragment,{children:[a.jsx(nx,{iconButton:!0,sx:kv}),a.jsx(cg,{sx:kv})]})]}):null},Vde=f.memo(Wde),Ude=be([Ua,Kn],(e,t)=>{const{shouldPinParametersPanel:n,shouldShowParametersPanel:r}=e;return{activeTabName:t,shouldPinParametersPanel:n,shouldShowParametersPanel:r}},Ke),Gde=()=>{const e=te(),{shouldPinParametersPanel:t,shouldShowParametersPanel:n,activeTabName:r}=B(Ude),o=()=>{e(hb(!1))},s=B(c=>c.generation.model),i=f.useMemo(()=>r==="txt2img"?s&&s.base_model==="sdxl"?a.jsx(f8,{}):a.jsx(p8,{}):r==="img2img"?s&&s.base_model==="sdxl"?a.jsx(FO,{}):a.jsx(KO,{}):r==="unifiedCanvas"?a.jsx(M8,{}):null,[r,s]);return t?null:a.jsx(GI,{direction:"left",isResizable:!1,isOpen:n,onClose:o,children:a.jsxs(H,{sx:{flexDir:"column",h:"full",w:ox,gap:2,position:"relative",flexShrink:0,overflowY:"auto"},children:[a.jsxs(H,{paddingBottom:4,justifyContent:"space-between",alignItems:"center",children:[a.jsx(gO,{}),a.jsx(HO,{})]}),a.jsx(H,{sx:{gap:2,flexDirection:"column",h:"full",w:"full"},children:i})]})})},qde=f.memo(Gde),Kde=be([e=>e.hotkeys,e=>e.ui],(e,t)=>{const{shift:n}=e,{shouldPinParametersPanel:r,shouldPinGallery:o}=t;return{shift:n,shouldPinGallery:o,shouldPinParametersPanel:r}},{memoizeOptions:{resultEqualityCheck:Zt}}),Xde=()=>{const e=te(),{shift:t,shouldPinParametersPanel:n,shouldPinGallery:r}=B(Kde),o=B(Kn);return tt("*",()=>{mP("shift")?!t&&e(Io(!0)):t&&e(Io(!1))},{keyup:!0,keydown:!0},[t]),tt("o",()=>{e(ZD()),o==="unifiedCanvas"&&n&&e(_o())}),tt(["shift+o"],()=>{e(e9()),o==="unifiedCanvas"&&e(_o())}),tt("g",()=>{e(t9()),o==="unifiedCanvas"&&r&&e(_o())}),tt(["shift+g"],()=>{e(G_()),o==="unifiedCanvas"&&e(_o())}),tt("1",()=>{e(Ql("txt2img"))}),tt("2",()=>{e(Ql("img2img"))}),tt("3",()=>{e(Ql("unifiedCanvas"))}),tt("4",()=>{e(Ql("nodes"))}),null},Yde=f.memo(Xde),Qde={},Jde=({config:e=Qde,headerComponent:t})=>{const n=B(rP),r=DF(),o=te();return f.useEffect(()=>{Bn.changeLanguage(n)},[n]),f.useEffect(()=>{t5(e)&&(r.info({namespace:"App",config:e},"Received config"),o(n9(e)))},[o,e,r]),f.useEffect(()=>{o(r9())},[o]),a.jsxs(a.Fragment,{children:[a.jsxs(sl,{w:"100vw",h:"100vh",position:"relative",overflow:"hidden",children:[a.jsx(VH,{children:a.jsxs(sl,{sx:{gap:4,p:4,gridAutoRows:"min-content auto",w:"full",h:"full"},children:[t||a.jsx(Zee,{}),a.jsx(H,{sx:{gap:4,w:"full",h:"full"},children:a.jsx(Lde,{})})]})}),a.jsx(Ree,{}),a.jsx(qde,{}),a.jsx(rd,{children:a.jsx(Vde,{})}),a.jsx(rd,{children:a.jsx(Fde,{})})]}),a.jsx(lY,{}),a.jsx(rY,{}),a.jsx(AF,{}),a.jsx(Yde,{})]})},ofe=f.memo(Jde);export{ofe as default}; diff --git a/invokeai/frontend/web/dist/assets/MantineProvider-b20a2267.js b/invokeai/frontend/web/dist/assets/MantineProvider-b20a2267.js deleted file mode 100644 index 644c027f81..0000000000 --- a/invokeai/frontend/web/dist/assets/MantineProvider-b20a2267.js +++ /dev/null @@ -1 +0,0 @@ -import{z as p,A as d,a4 as Z,aH as xe,ga as We,Z as De,U as j,a7 as q,T as z,V as R,a1 as _e,a0 as Be,$ as Ce,_ as Ge,Y as Ue,gb as Ve,gc as Ze,g1 as qe,ab as A,f$ as B,g7 as Xe}from"./index-18f2f740.js";function Je(e,t){return`${e} returned \`undefined\`. Seems you forgot to wrap component within ${t}`}function M(e={}){const{name:t,strict:r=!0,hookName:o="useContext",providerName:a="Provider",errorMessage:n,defaultValue:s}=e,i=p.createContext(s);i.displayName=t;function l(){var c;const u=p.useContext(i);if(!u&&r){const f=new Error(n??Je(o,a));throw f.name="ContextError",(c=Error.captureStackTrace)==null||c.call(Error,f,l),f}return u}return[i.Provider,l,i]}var[Ke,Ye]=M({strict:!1,name:"PortalManagerContext"});function Qe(e){const{children:t,zIndex:r}=e;return d.jsx(Ke,{value:{zIndex:r},children:t})}Qe.displayName="PortalManager";var[ke,et]=M({strict:!1,name:"PortalContext"}),J="chakra-portal",tt=".chakra-portal",rt=e=>d.jsx("div",{className:"chakra-portal-zIndex",style:{position:"absolute",zIndex:e.zIndex,top:0,left:0,right:0},children:e.children}),nt=e=>{const{appendToParentPortal:t,children:r}=e,[o,a]=p.useState(null),n=p.useRef(null),[,s]=p.useState({});p.useEffect(()=>s({}),[]);const i=et(),l=Ye();Z(()=>{if(!o)return;const u=o.ownerDocument,f=t?i??u.body:u.body;if(!f)return;n.current=u.createElement("div"),n.current.className=J,f.appendChild(n.current),s({});const y=n.current;return()=>{f.contains(y)&&f.removeChild(y)}},[o]);const c=l!=null&&l.zIndex?d.jsx(rt,{zIndex:l==null?void 0:l.zIndex,children:r}):r;return n.current?xe.createPortal(d.jsx(ke,{value:n.current,children:c}),n.current):d.jsx("span",{ref:u=>{u&&a(u)}})},ot=e=>{const{children:t,containerRef:r,appendToParentPortal:o}=e,a=r.current,n=a??(typeof window<"u"?document.body:void 0),s=p.useMemo(()=>{const l=a==null?void 0:a.ownerDocument.createElement("div");return l&&(l.className=J),l},[a]),[,i]=p.useState({});return Z(()=>i({}),[]),Z(()=>{if(!(!s||!n))return n.appendChild(s),()=>{n.removeChild(s)}},[s,n]),n&&s?xe.createPortal(d.jsx(ke,{value:o?s:null,children:t}),s):null};function G(e){const t={appendToParentPortal:!0,...e},{containerRef:r,...o}=t;return r?d.jsx(ot,{containerRef:r,...o}):d.jsx(nt,{...o})}G.className=J;G.selector=tt;G.displayName="Portal";function m(e,t={}){let r=!1;function o(){if(!r){r=!0;return}throw new Error("[anatomy] .part(...) should only be called once. Did you mean to use .extend(...) ?")}function a(...u){o();for(const f of u)t[f]=l(f);return m(e,t)}function n(...u){for(const f of u)f in t||(t[f]=l(f));return m(e,t)}function s(){return Object.fromEntries(Object.entries(t).map(([f,y])=>[f,y.selector]))}function i(){return Object.fromEntries(Object.entries(t).map(([f,y])=>[f,y.className]))}function l(u){const g=`chakra-${(["container","root"].includes(u??"")?[e]:[e,u]).filter(Boolean).join("__")}`;return{className:g,selector:`.${g}`,toString:()=>u}}return{parts:a,toPart:l,extend:n,selectors:s,classnames:i,get keys(){return Object.keys(t)},__type:{}}}var Or=m("accordion").parts("root","container","button","panel").extend("icon"),zr=m("alert").parts("title","description","container").extend("icon","spinner"),Rr=m("avatar").parts("label","badge","container").extend("excessLabel","group"),Mr=m("breadcrumb").parts("link","item","container").extend("separator");m("button").parts();var Lr=m("checkbox").parts("control","icon","container").extend("label");m("progress").parts("track","filledTrack").extend("label");var Fr=m("drawer").parts("overlay","dialogContainer","dialog").extend("header","closeButton","body","footer"),Hr=m("editable").parts("preview","input","textarea"),Wr=m("form").parts("container","requiredIndicator","helperText"),Dr=m("formError").parts("text","icon"),Br=m("input").parts("addon","field","element","group"),Gr=m("list").parts("container","item","icon"),at=m("menu").parts("button","list","item").extend("groupTitle","icon","command","divider"),Ur=m("modal").parts("overlay","dialogContainer","dialog").extend("header","closeButton","body","footer"),Vr=m("numberinput").parts("root","field","stepperGroup","stepper");m("pininput").parts("field");var Zr=m("popover").parts("content","header","body","footer").extend("popper","arrow","closeButton"),qr=m("progress").parts("label","filledTrack","track"),Xr=m("radio").parts("container","control","label"),Jr=m("select").parts("field","icon"),Kr=m("slider").parts("container","track","thumb","filledTrack","mark"),Yr=m("stat").parts("container","label","helpText","number","icon"),Qr=m("switch").parts("container","track","thumb"),en=m("table").parts("table","thead","tbody","tr","th","td","tfoot","caption"),tn=m("tabs").parts("root","tab","tablist","tabpanel","tabpanels","indicator"),rn=m("tag").parts("container","label","closeButton"),nn=m("card").parts("container","header","body","footer");function P(e,t){return r=>r.colorMode==="dark"?t:e}function on(e){const{orientation:t,vertical:r,horizontal:o}=e;return t?t==="vertical"?r:o:{}}var st=(e,t)=>e.find(r=>r.id===t);function re(e,t){const r=we(e,t),o=r?e[r].findIndex(a=>a.id===t):-1;return{position:r,index:o}}function we(e,t){for(const[r,o]of Object.entries(e))if(st(o,t))return r}function it(e){const t=e.includes("right"),r=e.includes("left");let o="center";return t&&(o="flex-end"),r&&(o="flex-start"),{display:"flex",flexDirection:"column",alignItems:o}}function lt(e){const r=e==="top"||e==="bottom"?"0 auto":void 0,o=e.includes("top")?"env(safe-area-inset-top, 0px)":void 0,a=e.includes("bottom")?"env(safe-area-inset-bottom, 0px)":void 0,n=e.includes("left")?void 0:"env(safe-area-inset-right, 0px)",s=e.includes("right")?void 0:"env(safe-area-inset-left, 0px)";return{position:"fixed",zIndex:"var(--toast-z-index, 5500)",pointerEvents:"none",display:"flex",flexDirection:"column",margin:r,top:o,bottom:a,right:n,left:s}}function ct(e,t=[]){const r=p.useRef(e);return p.useEffect(()=>{r.current=e}),p.useCallback((...o)=>{var a;return(a=r.current)==null?void 0:a.call(r,...o)},t)}function ut(e,t){const r=ct(e);p.useEffect(()=>{if(t==null)return;let o=null;return o=window.setTimeout(()=>{r()},t),()=>{o&&window.clearTimeout(o)}},[t,r])}function ne(e,t){const r=p.useRef(!1),o=p.useRef(!1);p.useEffect(()=>{if(r.current&&o.current)return e();o.current=!0},t),p.useEffect(()=>(r.current=!0,()=>{r.current=!1}),[])}var dt={initial:e=>{const{position:t}=e,r=["top","bottom"].includes(t)?"y":"x";let o=["top-right","bottom-right"].includes(t)?1:-1;return t==="bottom"&&(o=1),{opacity:0,[r]:o*24}},animate:{opacity:1,y:0,x:0,scale:1,transition:{duration:.4,ease:[.4,0,.2,1]}},exit:{opacity:0,scale:.85,transition:{duration:.2,ease:[.4,0,1,1]}}},Pe=p.memo(e=>{const{id:t,message:r,onCloseComplete:o,onRequestRemove:a,requestClose:n=!1,position:s="bottom",duration:i=5e3,containerStyle:l,motionVariants:c=dt,toastSpacing:u="0.5rem"}=e,[f,y]=p.useState(i),g=We();ne(()=>{g||o==null||o()},[g]),ne(()=>{y(i)},[i]);const h=()=>y(null),$=()=>y(i),S=()=>{g&&a()};p.useEffect(()=>{g&&n&&a()},[g,n,a]),ut(S,f);const H=p.useMemo(()=>({pointerEvents:"auto",maxWidth:560,minWidth:300,margin:u,...l}),[l,u]),N=p.useMemo(()=>it(s),[s]);return d.jsx(De.div,{layout:!0,className:"chakra-toast",variants:c,initial:"initial",animate:"animate",exit:"exit",onHoverStart:h,onHoverEnd:$,custom:{position:s},style:N,children:d.jsx(j.div,{role:"status","aria-atomic":"true",className:"chakra-toast__inner",__css:H,children:q(r,{id:t,onClose:S})})})});Pe.displayName="ToastComponent";function ft(e,t){var r;const o=e??"bottom",n={"top-start":{ltr:"top-left",rtl:"top-right"},"top-end":{ltr:"top-right",rtl:"top-left"},"bottom-start":{ltr:"bottom-left",rtl:"bottom-right"},"bottom-end":{ltr:"bottom-right",rtl:"bottom-left"}}[o];return(r=n==null?void 0:n[t])!=null?r:o}var oe={path:d.jsxs("g",{stroke:"currentColor",strokeWidth:"1.5",children:[d.jsx("path",{strokeLinecap:"round",fill:"none",d:"M9,9a3,3,0,1,1,4,2.829,1.5,1.5,0,0,0-1,1.415V14.25"}),d.jsx("path",{fill:"currentColor",strokeLinecap:"round",d:"M12,17.25a.375.375,0,1,0,.375.375A.375.375,0,0,0,12,17.25h0"}),d.jsx("circle",{fill:"none",strokeMiterlimit:"10",cx:"12",cy:"12",r:"11.25"})]}),viewBox:"0 0 24 24"},L=z((e,t)=>{const{as:r,viewBox:o,color:a="currentColor",focusable:n=!1,children:s,className:i,__css:l,...c}=e,u=R("chakra-icon",i),f=_e("Icon",e),y={w:"1em",h:"1em",display:"inline-block",lineHeight:"1em",flexShrink:0,color:a,...l,...f},g={ref:t,focusable:n,className:u,__css:y},h=o??oe.viewBox;if(r&&typeof r!="string")return d.jsx(j.svg,{as:r,...g,...c});const $=s??oe.path;return d.jsx(j.svg,{verticalAlign:"middle",viewBox:h,...g,...c,children:$})});L.displayName="Icon";function pt(e){return d.jsx(L,{viewBox:"0 0 24 24",...e,children:d.jsx("path",{fill:"currentColor",d:"M12,0A12,12,0,1,0,24,12,12.014,12.014,0,0,0,12,0Zm6.927,8.2-6.845,9.289a1.011,1.011,0,0,1-1.43.188L5.764,13.769a1,1,0,1,1,1.25-1.562l4.076,3.261,6.227-8.451A1,1,0,1,1,18.927,8.2Z"})})}function mt(e){return d.jsx(L,{viewBox:"0 0 24 24",...e,children:d.jsx("path",{fill:"currentColor",d:"M12,0A12,12,0,1,0,24,12,12.013,12.013,0,0,0,12,0Zm.25,5a1.5,1.5,0,1,1-1.5,1.5A1.5,1.5,0,0,1,12.25,5ZM14.5,18.5h-4a1,1,0,0,1,0-2h.75a.25.25,0,0,0,.25-.25v-4.5a.25.25,0,0,0-.25-.25H10.5a1,1,0,0,1,0-2h1a2,2,0,0,1,2,2v4.75a.25.25,0,0,0,.25.25h.75a1,1,0,1,1,0,2Z"})})}function ae(e){return d.jsx(L,{viewBox:"0 0 24 24",...e,children:d.jsx("path",{fill:"currentColor",d:"M11.983,0a12.206,12.206,0,0,0-8.51,3.653A11.8,11.8,0,0,0,0,12.207,11.779,11.779,0,0,0,11.8,24h.214A12.111,12.111,0,0,0,24,11.791h0A11.766,11.766,0,0,0,11.983,0ZM10.5,16.542a1.476,1.476,0,0,1,1.449-1.53h.027a1.527,1.527,0,0,1,1.523,1.47,1.475,1.475,0,0,1-1.449,1.53h-.027A1.529,1.529,0,0,1,10.5,16.542ZM11,12.5v-6a1,1,0,0,1,2,0v6a1,1,0,1,1-2,0Z"})})}var[gt,K]=M({name:"AlertContext",hookName:"useAlertContext",providerName:""}),[bt,Y]=M({name:"AlertStylesContext",hookName:"useAlertStyles",providerName:""}),Ae={info:{icon:mt,colorScheme:"blue"},warning:{icon:ae,colorScheme:"orange"},success:{icon:pt,colorScheme:"green"},error:{icon:ae,colorScheme:"red"},loading:{icon:Be,colorScheme:"blue"}};function yt(e){return Ae[e].colorScheme}function vt(e){return Ae[e].icon}var je=z(function(t,r){const o=Y(),{status:a}=K(),n={display:"inline",...o.description};return d.jsx(j.div,{ref:r,"data-status":a,...t,className:R("chakra-alert__desc",t.className),__css:n})});je.displayName="AlertDescription";function Ee(e){const{status:t}=K(),r=vt(t),o=Y(),a=t==="loading"?o.spinner:o.icon;return d.jsx(j.span,{display:"inherit","data-status":t,...e,className:R("chakra-alert__icon",e.className),__css:a,children:e.children||d.jsx(r,{h:"100%",w:"100%"})})}Ee.displayName="AlertIcon";var Ne=z(function(t,r){const o=Y(),{status:a}=K();return d.jsx(j.div,{ref:r,"data-status":a,...t,className:R("chakra-alert__title",t.className),__css:o.title})});Ne.displayName="AlertTitle";var $e=z(function(t,r){var o;const{status:a="info",addRole:n=!0,...s}=Ce(t),i=(o=t.colorScheme)!=null?o:yt(a),l=Ge("Alert",{...t,colorScheme:i}),c={width:"100%",display:"flex",alignItems:"center",position:"relative",overflow:"hidden",...l.container};return d.jsx(gt,{value:{status:a},children:d.jsx(bt,{value:l,children:d.jsx(j.div,{"data-status":a,role:n?"alert":void 0,ref:r,...s,className:R("chakra-alert",t.className),__css:c})})})});$e.displayName="Alert";function ht(e){return d.jsx(L,{focusable:"false","aria-hidden":!0,...e,children:d.jsx("path",{fill:"currentColor",d:"M.439,21.44a1.5,1.5,0,0,0,2.122,2.121L11.823,14.3a.25.25,0,0,1,.354,0l9.262,9.263a1.5,1.5,0,1,0,2.122-2.121L14.3,12.177a.25.25,0,0,1,0-.354l9.263-9.262A1.5,1.5,0,0,0,21.439.44L12.177,9.7a.25.25,0,0,1-.354,0L2.561.44A1.5,1.5,0,0,0,.439,2.561L9.7,11.823a.25.25,0,0,1,0,.354Z"})})}var Te=z(function(t,r){const o=_e("CloseButton",t),{children:a,isDisabled:n,__css:s,...i}=Ce(t),l={outline:0,display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0};return d.jsx(j.button,{type:"button","aria-label":"Close",ref:r,disabled:n,__css:{...l,...o,...s},...i,children:a||d.jsx(ht,{width:"1em",height:"1em"})})});Te.displayName="CloseButton";var St={top:[],"top-left":[],"top-right":[],"bottom-left":[],bottom:[],"bottom-right":[]},C=xt(St);function xt(e){let t=e;const r=new Set,o=a=>{t=a(t),r.forEach(n=>n())};return{getState:()=>t,subscribe:a=>(r.add(a),()=>{o(()=>e),r.delete(a)}),removeToast:(a,n)=>{o(s=>({...s,[n]:s[n].filter(i=>i.id!=a)}))},notify:(a,n)=>{const s=_t(a,n),{position:i,id:l}=s;return o(c=>{var u,f;const g=i.includes("top")?[s,...(u=c[i])!=null?u:[]]:[...(f=c[i])!=null?f:[],s];return{...c,[i]:g}}),l},update:(a,n)=>{a&&o(s=>{const i={...s},{position:l,index:c}=re(i,a);return l&&c!==-1&&(i[l][c]={...i[l][c],...n,message:Ie(n)}),i})},closeAll:({positions:a}={})=>{o(n=>(a??["bottom","bottom-right","bottom-left","top","top-left","top-right"]).reduce((l,c)=>(l[c]=n[c].map(u=>({...u,requestClose:!0})),l),{...n}))},close:a=>{o(n=>{const s=we(n,a);return s?{...n,[s]:n[s].map(i=>i.id==a?{...i,requestClose:!0}:i)}:n})},isActive:a=>!!re(C.getState(),a).position}}var se=0;function _t(e,t={}){var r,o;se+=1;const a=(r=t.id)!=null?r:se,n=(o=t.position)!=null?o:"bottom";return{id:a,message:e,position:n,duration:t.duration,onCloseComplete:t.onCloseComplete,onRequestRemove:()=>C.removeToast(String(a),n),status:t.status,requestClose:!1,containerStyle:t.containerStyle}}var Ct=e=>{const{status:t,variant:r="solid",id:o,title:a,isClosable:n,onClose:s,description:i,colorScheme:l,icon:c}=e,u=o?{root:`toast-${o}`,title:`toast-${o}-title`,description:`toast-${o}-description`}:void 0;return d.jsxs($e,{addRole:!1,status:t,variant:r,id:u==null?void 0:u.root,alignItems:"start",borderRadius:"md",boxShadow:"lg",paddingEnd:8,textAlign:"start",width:"auto",colorScheme:l,children:[d.jsx(Ee,{children:c}),d.jsxs(j.div,{flex:"1",maxWidth:"100%",children:[a&&d.jsx(Ne,{id:u==null?void 0:u.title,children:a}),i&&d.jsx(je,{id:u==null?void 0:u.description,display:"block",children:i})]}),n&&d.jsx(Te,{size:"sm",onClick:s,position:"absolute",insetEnd:1,top:1})]})};function Ie(e={}){const{render:t,toastComponent:r=Ct}=e;return a=>typeof t=="function"?t({...a,...e}):d.jsx(r,{...a,...e})}function an(e,t){const r=a=>{var n;return{...t,...a,position:ft((n=a==null?void 0:a.position)!=null?n:t==null?void 0:t.position,e)}},o=a=>{const n=r(a),s=Ie(n);return C.notify(s,n)};return o.update=(a,n)=>{C.update(a,r(n))},o.promise=(a,n)=>{const s=o({...n.loading,status:"loading",duration:null});a.then(i=>o.update(s,{status:"success",duration:5e3,...q(n.success,i)})).catch(i=>o.update(s,{status:"error",duration:5e3,...q(n.error,i)}))},o.closeAll=C.closeAll,o.close=C.close,o.isActive=C.isActive,o}var[sn,ln]=M({name:"ToastOptionsContext",strict:!1}),cn=e=>{const t=p.useSyncExternalStore(C.subscribe,C.getState,C.getState),{motionVariants:r,component:o=Pe,portalProps:a}=e,s=Object.keys(t).map(i=>{const l=t[i];return d.jsx("div",{role:"region","aria-live":"polite","aria-label":"Notifications",id:`chakra-toast-manager-${i}`,style:lt(i),children:d.jsx(Ue,{initial:!1,children:l.map(c=>d.jsx(o,{motionVariants:r,...c},c.id))})},i)});return d.jsx(G,{...a,children:s})};function kt(){if(console&&console.warn){for(var e=arguments.length,t=new Array(e),r=0;r()=>{if(e.isInitialized)t();else{const r=()=>{setTimeout(()=>{e.off("initialized",r)},0),t()};e.on("initialized",r)}};function le(e,t,r){e.loadNamespaces(t,Oe(e,r))}function ce(e,t,r,o){typeof r=="string"&&(r=[r]),r.forEach(a=>{e.options.ns.indexOf(a)<0&&e.options.ns.push(a)}),e.loadLanguages(t,Oe(e,o))}function wt(e,t){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const o=t.languages[0],a=t.options?t.options.fallbackLng:!1,n=t.languages[t.languages.length-1];if(o.toLowerCase()==="cimode")return!0;const s=(i,l)=>{const c=t.services.backendConnector.state[`${i}|${l}`];return c===-1||c===2};return r.bindI18n&&r.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!s(t.isLanguageChangingTo,e)?!1:!!(t.hasResourceBundle(o,e)||!t.services.backendConnector.backend||t.options.resources&&!t.options.partialBundledLanguages||s(o,e)&&(!a||s(n,e)))}function Pt(e,t){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return!t.languages||!t.languages.length?(X("i18n.languages were undefined or empty",t.languages),!0):t.options.ignoreJSONStructure!==void 0?t.hasLoadedNamespace(e,{lng:r.lng,precheck:(a,n)=>{if(r.bindI18n&&r.bindI18n.indexOf("languageChanging")>-1&&a.services.backendConnector.backend&&a.isLanguageChangingTo&&!n(a.isLanguageChangingTo,e))return!1}}):wt(e,t,r)}const At=p.createContext();class jt{constructor(){this.usedNamespaces={}}addUsedNamespaces(t){t.forEach(r=>{this.usedNamespaces[r]||(this.usedNamespaces[r]=!0)})}getUsedNamespaces(){return Object.keys(this.usedNamespaces)}}const Et=(e,t)=>{const r=p.useRef();return p.useEffect(()=>{r.current=t?r.current:e},[e,t]),r.current};function un(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const{i18n:r}=t,{i18n:o,defaultNS:a}=p.useContext(At)||{},n=r||o||Ze();if(n&&!n.reportNamespaces&&(n.reportNamespaces=new jt),!n){X("You will need to pass in an i18next instance by using initReactI18next");const v=(w,x)=>typeof x=="string"?x:x&&typeof x=="object"&&typeof x.defaultValue=="string"?x.defaultValue:Array.isArray(w)?w[w.length-1]:w,k=[v,{},!1];return k.t=v,k.i18n={},k.ready=!1,k}n.options.react&&n.options.react.wait!==void 0&&X("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");const s={...Ve(),...n.options.react,...t},{useSuspense:i,keyPrefix:l}=s;let c=e||a||n.options&&n.options.defaultNS;c=typeof c=="string"?[c]:c||["translation"],n.reportNamespaces.addUsedNamespaces&&n.reportNamespaces.addUsedNamespaces(c);const u=(n.isInitialized||n.initializedStoreOnce)&&c.every(v=>Pt(v,n,s));function f(){return n.getFixedT(t.lng||null,s.nsMode==="fallback"?c:c[0],l)}const[y,g]=p.useState(f);let h=c.join();t.lng&&(h=`${t.lng}${h}`);const $=Et(h),S=p.useRef(!0);p.useEffect(()=>{const{bindI18n:v,bindI18nStore:k}=s;S.current=!0,!u&&!i&&(t.lng?ce(n,t.lng,c,()=>{S.current&&g(f)}):le(n,c,()=>{S.current&&g(f)})),u&&$&&$!==h&&S.current&&g(f);function w(){S.current&&g(f)}return v&&n&&n.on(v,w),k&&n&&n.store.on(k,w),()=>{S.current=!1,v&&n&&v.split(" ").forEach(x=>n.off(x,w)),k&&n&&k.split(" ").forEach(x=>n.store.off(x,w))}},[n,h]);const H=p.useRef(!0);p.useEffect(()=>{S.current&&!H.current&&g(f),H.current=!1},[n,l]);const N=[y,n,u];if(N.t=y,N.i18n=n,N.ready=u,u||!u&&!i)return N;throw new Promise(v=>{t.lng?ce(n,t.lng,c,()=>v()):le(n,c,()=>v())})}const{definePartsStyle:Nt,defineMultiStyleConfig:$t}=qe(at.keys),Tt=Nt(e=>({button:{fontWeight:500,bg:P("base.300","base.500")(e),color:P("base.900","base.100")(e),_hover:{bg:P("base.400","base.600")(e),color:P("base.900","base.50")(e),fontWeight:600}},list:{zIndex:9999,color:P("base.900","base.150")(e),bg:P("base.200","base.800")(e),shadow:"dark-lg",border:"none"},item:{fontSize:"sm",bg:P("base.200","base.800")(e),_hover:{bg:P("base.300","base.700")(e),svg:{opacity:1}},_focus:{bg:P("base.400","base.600")(e)},svg:{opacity:.7,fontSize:14}}})),dn=$t({variants:{invokeAI:Tt},defaultProps:{variant:"invokeAI"}}),fn={variants:{enter:{visibility:"visible",opacity:1,scale:1,transition:{duration:.07,ease:[.4,0,.2,1]}},exit:{transitionEnd:{visibility:"hidden"},opacity:0,scale:.8,transition:{duration:.07,easings:"easeOut"}}}},It={dark:["#C1C2C5","#A6A7AB","#909296","#5c5f66","#373A40","#2C2E33","#25262b","#1A1B1E","#141517","#101113"],gray:["#f8f9fa","#f1f3f5","#e9ecef","#dee2e6","#ced4da","#adb5bd","#868e96","#495057","#343a40","#212529"],red:["#fff5f5","#ffe3e3","#ffc9c9","#ffa8a8","#ff8787","#ff6b6b","#fa5252","#f03e3e","#e03131","#c92a2a"],pink:["#fff0f6","#ffdeeb","#fcc2d7","#faa2c1","#f783ac","#f06595","#e64980","#d6336c","#c2255c","#a61e4d"],grape:["#f8f0fc","#f3d9fa","#eebefa","#e599f7","#da77f2","#cc5de8","#be4bdb","#ae3ec9","#9c36b5","#862e9c"],violet:["#f3f0ff","#e5dbff","#d0bfff","#b197fc","#9775fa","#845ef7","#7950f2","#7048e8","#6741d9","#5f3dc4"],indigo:["#edf2ff","#dbe4ff","#bac8ff","#91a7ff","#748ffc","#5c7cfa","#4c6ef5","#4263eb","#3b5bdb","#364fc7"],blue:["#e7f5ff","#d0ebff","#a5d8ff","#74c0fc","#4dabf7","#339af0","#228be6","#1c7ed6","#1971c2","#1864ab"],cyan:["#e3fafc","#c5f6fa","#99e9f2","#66d9e8","#3bc9db","#22b8cf","#15aabf","#1098ad","#0c8599","#0b7285"],teal:["#e6fcf5","#c3fae8","#96f2d7","#63e6be","#38d9a9","#20c997","#12b886","#0ca678","#099268","#087f5b"],green:["#ebfbee","#d3f9d8","#b2f2bb","#8ce99a","#69db7c","#51cf66","#40c057","#37b24d","#2f9e44","#2b8a3e"],lime:["#f4fce3","#e9fac8","#d8f5a2","#c0eb75","#a9e34b","#94d82d","#82c91e","#74b816","#66a80f","#5c940d"],yellow:["#fff9db","#fff3bf","#ffec99","#ffe066","#ffd43b","#fcc419","#fab005","#f59f00","#f08c00","#e67700"],orange:["#fff4e6","#ffe8cc","#ffd8a8","#ffc078","#ffa94d","#ff922b","#fd7e14","#f76707","#e8590c","#d9480f"]};function Ot(e){return()=>({fontFamily:e.fontFamily||"sans-serif"})}var zt=Object.defineProperty,ue=Object.getOwnPropertySymbols,Rt=Object.prototype.hasOwnProperty,Mt=Object.prototype.propertyIsEnumerable,de=(e,t,r)=>t in e?zt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,fe=(e,t)=>{for(var r in t||(t={}))Rt.call(t,r)&&de(e,r,t[r]);if(ue)for(var r of ue(t))Mt.call(t,r)&&de(e,r,t[r]);return e};function Lt(e){return t=>({WebkitTapHighlightColor:"transparent",[t||"&:focus"]:fe({},e.focusRing==="always"||e.focusRing==="auto"?e.focusRingStyles.styles(e):e.focusRingStyles.resetStyles(e)),[t?t.replace(":focus",":focus:not(:focus-visible)"):"&:focus:not(:focus-visible)"]:fe({},e.focusRing==="auto"||e.focusRing==="never"?e.focusRingStyles.resetStyles(e):null)})}function F(e){return t=>typeof e.primaryShade=="number"?e.primaryShade:e.primaryShade[t||e.colorScheme]}function Q(e){const t=F(e);return(r,o,a=!0,n=!0)=>{if(typeof r=="string"&&r.includes(".")){const[i,l]=r.split("."),c=parseInt(l,10);if(i in e.colors&&c>=0&&c<10)return e.colors[i][typeof o=="number"&&!n?o:c]}const s=typeof o=="number"?o:t();return r in e.colors?e.colors[r][s]:a?e.colors[e.primaryColor][s]:r}}function ze(e){let t="";for(let r=1;r{const a={from:(o==null?void 0:o.from)||e.defaultGradient.from,to:(o==null?void 0:o.to)||e.defaultGradient.to,deg:(o==null?void 0:o.deg)||e.defaultGradient.deg};return`linear-gradient(${a.deg}deg, ${t(a.from,r(),!1)} 0%, ${t(a.to,r(),!1)} 100%)`}}function Me(e){return t=>{if(typeof t=="number")return`${t/16}${e}`;if(typeof t=="string"){const r=t.replace("px","");if(!Number.isNaN(Number(r)))return`${Number(r)/16}${e}`}return t}}const E=Me("rem"),U=Me("em");function Le({size:e,sizes:t,units:r}){return e in t?t[e]:typeof e=="number"?r==="em"?U(e):E(e):e||t.md}function W(e){return typeof e=="number"?e:typeof e=="string"&&e.includes("rem")?Number(e.replace("rem",""))*16:typeof e=="string"&&e.includes("em")?Number(e.replace("em",""))*16:Number(e)}function Wt(e){return t=>`@media (min-width: ${U(W(Le({size:t,sizes:e.breakpoints})))})`}function Dt(e){return t=>`@media (max-width: ${U(W(Le({size:t,sizes:e.breakpoints}))-1)})`}function Bt(e){return/^#?([0-9A-F]{3}){1,2}$/i.test(e)}function Gt(e){let t=e.replace("#","");if(t.length===3){const s=t.split("");t=[s[0],s[0],s[1],s[1],s[2],s[2]].join("")}const r=parseInt(t,16),o=r>>16&255,a=r>>8&255,n=r&255;return{r:o,g:a,b:n,a:1}}function Ut(e){const[t,r,o,a]=e.replace(/[^0-9,.]/g,"").split(",").map(Number);return{r:t,g:r,b:o,a:a||1}}function ee(e){return Bt(e)?Gt(e):e.startsWith("rgb")?Ut(e):{r:0,g:0,b:0,a:1}}function T(e,t){if(typeof e!="string"||t>1||t<0)return"rgba(0, 0, 0, 1)";if(e.startsWith("var(--"))return e;const{r,g:o,b:a}=ee(e);return`rgba(${r}, ${o}, ${a}, ${t})`}function Vt(e=0){return{position:"absolute",top:E(e),right:E(e),left:E(e),bottom:E(e)}}function Zt(e,t){if(typeof e=="string"&&e.startsWith("var(--"))return e;const{r,g:o,b:a,a:n}=ee(e),s=1-t,i=l=>Math.round(l*s);return`rgba(${i(r)}, ${i(o)}, ${i(a)}, ${n})`}function qt(e,t){if(typeof e=="string"&&e.startsWith("var(--"))return e;const{r,g:o,b:a,a:n}=ee(e),s=i=>Math.round(i+(255-i)*t);return`rgba(${s(r)}, ${s(o)}, ${s(a)}, ${n})`}function Xt(e){return t=>{if(typeof t=="number")return E(t);const r=typeof e.defaultRadius=="number"?e.defaultRadius:e.radius[e.defaultRadius]||e.defaultRadius;return e.radius[t]||t||r}}function Jt(e,t){if(typeof e=="string"&&e.includes(".")){const[r,o]=e.split("."),a=parseInt(o,10);if(r in t.colors&&a>=0&&a<10)return{isSplittedColor:!0,key:r,shade:a}}return{isSplittedColor:!1}}function Kt(e){const t=Q(e),r=F(e),o=Re(e);return({variant:a,color:n,gradient:s,primaryFallback:i})=>{const l=Jt(n,e);switch(a){case"light":return{border:"transparent",background:T(t(n,e.colorScheme==="dark"?8:0,i,!1),e.colorScheme==="dark"?.2:1),color:n==="dark"?e.colorScheme==="dark"?e.colors.dark[0]:e.colors.dark[9]:t(n,e.colorScheme==="dark"?2:r("light")),hover:T(t(n,e.colorScheme==="dark"?7:1,i,!1),e.colorScheme==="dark"?.25:.65)};case"subtle":return{border:"transparent",background:"transparent",color:n==="dark"?e.colorScheme==="dark"?e.colors.dark[0]:e.colors.dark[9]:t(n,e.colorScheme==="dark"?2:r("light")),hover:T(t(n,e.colorScheme==="dark"?8:0,i,!1),e.colorScheme==="dark"?.2:1)};case"outline":return{border:t(n,e.colorScheme==="dark"?5:r("light")),background:"transparent",color:t(n,e.colorScheme==="dark"?5:r("light")),hover:e.colorScheme==="dark"?T(t(n,5,i,!1),.05):T(t(n,0,i,!1),.35)};case"default":return{border:e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[4],background:e.colorScheme==="dark"?e.colors.dark[6]:e.white,color:e.colorScheme==="dark"?e.white:e.black,hover:e.colorScheme==="dark"?e.colors.dark[5]:e.colors.gray[0]};case"white":return{border:"transparent",background:e.white,color:t(n,r()),hover:null};case"transparent":return{border:"transparent",color:n==="dark"?e.colorScheme==="dark"?e.colors.dark[0]:e.colors.dark[9]:t(n,e.colorScheme==="dark"?2:r("light")),background:"transparent",hover:null};case"gradient":return{background:o(s),color:e.white,border:"transparent",hover:null};default:{const c=r(),u=l.isSplittedColor?l.shade:c,f=l.isSplittedColor?l.key:n;return{border:"transparent",background:t(f,u,i),color:e.white,hover:t(f,u===9?8:u+1)}}}}}function Yt(e){return t=>{const r=F(e)(t);return e.colors[e.primaryColor][r]}}function Qt(e){return{"@media (hover: hover)":{"&:hover":e},"@media (hover: none)":{"&:active":e}}}function er(e){return()=>({userSelect:"none",color:e.colorScheme==="dark"?e.colors.dark[3]:e.colors.gray[5]})}function tr(e){return()=>e.colorScheme==="dark"?e.colors.dark[2]:e.colors.gray[6]}const b={fontStyles:Ot,themeColor:Q,focusStyles:Lt,linearGradient:Ft,radialGradient:Ht,smallerThan:Dt,largerThan:Wt,rgba:T,cover:Vt,darken:Zt,lighten:qt,radius:Xt,variant:Kt,primaryShade:F,hover:Qt,gradient:Re,primaryColor:Yt,placeholderStyles:er,dimmed:tr};var rr=Object.defineProperty,nr=Object.defineProperties,or=Object.getOwnPropertyDescriptors,pe=Object.getOwnPropertySymbols,ar=Object.prototype.hasOwnProperty,sr=Object.prototype.propertyIsEnumerable,me=(e,t,r)=>t in e?rr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,ir=(e,t)=>{for(var r in t||(t={}))ar.call(t,r)&&me(e,r,t[r]);if(pe)for(var r of pe(t))sr.call(t,r)&&me(e,r,t[r]);return e},lr=(e,t)=>nr(e,or(t));function Fe(e){return lr(ir({},e),{fn:{fontStyles:b.fontStyles(e),themeColor:b.themeColor(e),focusStyles:b.focusStyles(e),largerThan:b.largerThan(e),smallerThan:b.smallerThan(e),radialGradient:b.radialGradient,linearGradient:b.linearGradient,gradient:b.gradient(e),rgba:b.rgba,cover:b.cover,lighten:b.lighten,darken:b.darken,primaryShade:b.primaryShade(e),radius:b.radius(e),variant:b.variant(e),hover:b.hover,primaryColor:b.primaryColor(e),placeholderStyles:b.placeholderStyles(e),dimmed:b.dimmed(e)}})}const cr={dir:"ltr",primaryShade:{light:6,dark:8},focusRing:"auto",loader:"oval",colorScheme:"light",white:"#fff",black:"#000",defaultRadius:"sm",transitionTimingFunction:"ease",colors:It,lineHeight:1.55,fontFamily:"-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji",fontFamilyMonospace:"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace",primaryColor:"blue",respectReducedMotion:!0,cursorType:"default",defaultGradient:{from:"indigo",to:"cyan",deg:45},shadows:{xs:"0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.05), 0 0.0625rem 0.125rem rgba(0, 0, 0, 0.1)",sm:"0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 0.625rem 0.9375rem -0.3125rem, rgba(0, 0, 0, 0.04) 0 0.4375rem 0.4375rem -0.3125rem",md:"0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 1.25rem 1.5625rem -0.3125rem, rgba(0, 0, 0, 0.04) 0 0.625rem 0.625rem -0.3125rem",lg:"0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 1.75rem 1.4375rem -0.4375rem, rgba(0, 0, 0, 0.04) 0 0.75rem 0.75rem -0.4375rem",xl:"0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 2.25rem 1.75rem -0.4375rem, rgba(0, 0, 0, 0.04) 0 1.0625rem 1.0625rem -0.4375rem"},fontSizes:{xs:"0.75rem",sm:"0.875rem",md:"1rem",lg:"1.125rem",xl:"1.25rem"},radius:{xs:"0.125rem",sm:"0.25rem",md:"0.5rem",lg:"1rem",xl:"2rem"},spacing:{xs:"0.625rem",sm:"0.75rem",md:"1rem",lg:"1.25rem",xl:"1.5rem"},breakpoints:{xs:"36em",sm:"48em",md:"62em",lg:"75em",xl:"88em"},headings:{fontFamily:"-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji",fontWeight:700,sizes:{h1:{fontSize:"2.125rem",lineHeight:1.3,fontWeight:void 0},h2:{fontSize:"1.625rem",lineHeight:1.35,fontWeight:void 0},h3:{fontSize:"1.375rem",lineHeight:1.4,fontWeight:void 0},h4:{fontSize:"1.125rem",lineHeight:1.45,fontWeight:void 0},h5:{fontSize:"1rem",lineHeight:1.5,fontWeight:void 0},h6:{fontSize:"0.875rem",lineHeight:1.5,fontWeight:void 0}}},other:{},components:{},activeStyles:{transform:"translateY(0.0625rem)"},datesLocale:"en",globalStyles:void 0,focusRingStyles:{styles:e=>({outlineOffset:"0.125rem",outline:`0.125rem solid ${e.colors[e.primaryColor][e.colorScheme==="dark"?7:5]}`}),resetStyles:()=>({outline:"none"}),inputStyles:e=>({outline:"none",borderColor:e.colors[e.primaryColor][typeof e.primaryShade=="object"?e.primaryShade[e.colorScheme]:e.primaryShade]})}},te=Fe(cr);var ur=Object.defineProperty,dr=Object.defineProperties,fr=Object.getOwnPropertyDescriptors,ge=Object.getOwnPropertySymbols,pr=Object.prototype.hasOwnProperty,mr=Object.prototype.propertyIsEnumerable,be=(e,t,r)=>t in e?ur(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,gr=(e,t)=>{for(var r in t||(t={}))pr.call(t,r)&&be(e,r,t[r]);if(ge)for(var r of ge(t))mr.call(t,r)&&be(e,r,t[r]);return e},br=(e,t)=>dr(e,fr(t));function yr({theme:e}){return A.createElement(B,{styles:{"*, *::before, *::after":{boxSizing:"border-box"},html:{colorScheme:e.colorScheme==="dark"?"dark":"light"},body:br(gr({},e.fn.fontStyles()),{backgroundColor:e.colorScheme==="dark"?e.colors.dark[7]:e.white,color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,lineHeight:e.lineHeight,fontSize:e.fontSizes.md,WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"})}})}function I(e,t,r,o=E){Object.keys(t).forEach(a=>{e[`--mantine-${r}-${a}`]=o(t[a])})}function vr({theme:e}){const t={"--mantine-color-white":e.white,"--mantine-color-black":e.black,"--mantine-transition-timing-function":e.transitionTimingFunction,"--mantine-line-height":`${e.lineHeight}`,"--mantine-font-family":e.fontFamily,"--mantine-font-family-monospace":e.fontFamilyMonospace,"--mantine-font-family-headings":e.headings.fontFamily,"--mantine-heading-font-weight":`${e.headings.fontWeight}`};I(t,e.shadows,"shadow"),I(t,e.fontSizes,"font-size"),I(t,e.radius,"radius"),I(t,e.spacing,"spacing"),I(t,e.breakpoints,"breakpoints",U),Object.keys(e.colors).forEach(o=>{e.colors[o].forEach((a,n)=>{t[`--mantine-color-${o}-${n}`]=a})});const r=e.headings.sizes;return Object.keys(r).forEach(o=>{t[`--mantine-${o}-font-size`]=r[o].fontSize,t[`--mantine-${o}-line-height`]=`${r[o].lineHeight}`}),A.createElement(B,{styles:{":root":t}})}var hr=Object.defineProperty,Sr=Object.defineProperties,xr=Object.getOwnPropertyDescriptors,ye=Object.getOwnPropertySymbols,_r=Object.prototype.hasOwnProperty,Cr=Object.prototype.propertyIsEnumerable,ve=(e,t,r)=>t in e?hr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,_=(e,t)=>{for(var r in t||(t={}))_r.call(t,r)&&ve(e,r,t[r]);if(ye)for(var r of ye(t))Cr.call(t,r)&&ve(e,r,t[r]);return e},V=(e,t)=>Sr(e,xr(t));function kr(e,t){var r;if(!t)return e;const o=Object.keys(e).reduce((a,n)=>{if(n==="headings"&&t.headings){const s=t.headings.sizes?Object.keys(e.headings.sizes).reduce((i,l)=>(i[l]=_(_({},e.headings.sizes[l]),t.headings.sizes[l]),i),{}):e.headings.sizes;return V(_({},a),{headings:V(_(_({},e.headings),t.headings),{sizes:s})})}if(n==="breakpoints"&&t.breakpoints){const s=_(_({},e.breakpoints),t.breakpoints);return V(_({},a),{breakpoints:Object.fromEntries(Object.entries(s).sort((i,l)=>W(i[1])-W(l[1])))})}return a[n]=typeof t[n]=="object"?_(_({},e[n]),t[n]):typeof t[n]=="number"||typeof t[n]=="boolean"||typeof t[n]=="function"?t[n]:t[n]||e[n],a},{});if(t!=null&&t.fontFamily&&!((r=t==null?void 0:t.headings)!=null&&r.fontFamily)&&(o.headings.fontFamily=t.fontFamily),!(o.primaryColor in o.colors))throw new Error("MantineProvider: Invalid theme.primaryColor, it accepts only key of theme.colors, learn more – https://mantine.dev/theming/colors/#primary-color");return o}function wr(e,t){return Fe(kr(e,t))}function Pr(e){return Object.keys(e).reduce((t,r)=>(e[r]!==void 0&&(t[r]=e[r]),t),{})}const Ar={html:{fontFamily:"sans-serif",lineHeight:"1.15",textSizeAdjust:"100%"},body:{margin:0},"article, aside, footer, header, nav, section, figcaption, figure, main":{display:"block"},h1:{fontSize:"2em"},hr:{boxSizing:"content-box",height:0,overflow:"visible"},pre:{fontFamily:"monospace, monospace",fontSize:"1em"},a:{background:"transparent",textDecorationSkip:"objects"},"a:active, a:hover":{outlineWidth:0},"abbr[title]":{borderBottom:"none",textDecoration:"underline"},"b, strong":{fontWeight:"bolder"},"code, kbp, samp":{fontFamily:"monospace, monospace",fontSize:"1em"},dfn:{fontStyle:"italic"},mark:{backgroundColor:"#ff0",color:"#000"},small:{fontSize:"80%"},"sub, sup":{fontSize:"75%",lineHeight:0,position:"relative",verticalAlign:"baseline"},sup:{top:"-0.5em"},sub:{bottom:"-0.25em"},"audio, video":{display:"inline-block"},"audio:not([controls])":{display:"none",height:0},img:{borderStyle:"none",verticalAlign:"middle"},"svg:not(:root)":{overflow:"hidden"},"button, input, optgroup, select, textarea":{fontFamily:"sans-serif",fontSize:"100%",lineHeight:"1.15",margin:0},"button, input":{overflow:"visible"},"button, select":{textTransform:"none"},"button, [type=reset], [type=submit]":{WebkitAppearance:"button"},"button::-moz-focus-inner, [type=button]::-moz-focus-inner, [type=reset]::-moz-focus-inner, [type=submit]::-moz-focus-inner":{borderStyle:"none",padding:0},"button:-moz-focusring, [type=button]:-moz-focusring, [type=reset]:-moz-focusring, [type=submit]:-moz-focusring":{outline:`${E(1)} dotted ButtonText`},legend:{boxSizing:"border-box",color:"inherit",display:"table",maxWidth:"100%",padding:0,whiteSpace:"normal"},progress:{display:"inline-block",verticalAlign:"baseline"},textarea:{overflow:"auto"},"[type=checkbox], [type=radio]":{boxSizing:"border-box",padding:0},"[type=number]::-webkit-inner-spin-button, [type=number]::-webkit-outer-spin-button":{height:"auto"},"[type=search]":{appearance:"none"},"[type=search]::-webkit-search-cancel-button, [type=search]::-webkit-search-decoration":{appearance:"none"},"::-webkit-file-upload-button":{appearance:"button",font:"inherit"},"details, menu":{display:"block"},summary:{display:"list-item"},canvas:{display:"inline-block"},template:{display:"none"}};function jr(){return A.createElement(B,{styles:Ar})}var Er=Object.defineProperty,he=Object.getOwnPropertySymbols,Nr=Object.prototype.hasOwnProperty,$r=Object.prototype.propertyIsEnumerable,Se=(e,t,r)=>t in e?Er(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,O=(e,t)=>{for(var r in t||(t={}))Nr.call(t,r)&&Se(e,r,t[r]);if(he)for(var r of he(t))$r.call(t,r)&&Se(e,r,t[r]);return e};const D=p.createContext({theme:te});function He(){var e;return((e=p.useContext(D))==null?void 0:e.theme)||te}function pn(e){const t=He(),r=o=>{var a,n,s,i;return{styles:((a=t.components[o])==null?void 0:a.styles)||{},classNames:((n=t.components[o])==null?void 0:n.classNames)||{},variants:(s=t.components[o])==null?void 0:s.variants,sizes:(i=t.components[o])==null?void 0:i.sizes}};return Array.isArray(e)?e.map(r):[r(e)]}function mn(){var e;return(e=p.useContext(D))==null?void 0:e.emotionCache}function gn(e,t,r){var o;const a=He(),n=(o=a.components[e])==null?void 0:o.defaultProps,s=typeof n=="function"?n(a):n;return O(O(O({},t),s),Pr(r))}function Tr({theme:e,emotionCache:t,withNormalizeCSS:r=!1,withGlobalStyles:o=!1,withCSSVariables:a=!1,inherit:n=!1,children:s}){const i=p.useContext(D),l=wr(te,n?O(O({},i.theme),e):e);return A.createElement(Xe,{theme:l},A.createElement(D.Provider,{value:{theme:l,emotionCache:t}},r&&A.createElement(jr,null),o&&A.createElement(yr,{theme:l}),a&&A.createElement(vr,{theme:l}),typeof l.globalStyles=="function"&&A.createElement(B,{styles:l.globalStyles(l)}),s))}Tr.displayName="@mantine/core/MantineProvider";export{on as A,Yr as B,Te as C,Gr as D,at as E,Ur as F,Vr as G,Zr as H,L as I,Fr as J,Hr as K,Wr as L,Dr as M,Mr as N,nn as O,G as P,Or as Q,zr as R,Rr as S,Qe as T,sn as U,cn as V,dn as W,Tr as X,M as a,ct as b,an as c,ne as d,un as e,mn as f,He as g,pn as h,Pr as i,W as j,Le as k,gn as l,fn as m,P as n,tn as o,rn as p,Br as q,E as r,Qr as s,en as t,ln as u,qr as v,Lr as w,Xr as x,Jr as y,Kr as z}; diff --git a/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-a4dc3f38.js b/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-bc3e6f20.js similarity index 99% rename from invokeai/frontend/web/dist/assets/ThemeLocaleProvider-a4dc3f38.js rename to invokeai/frontend/web/dist/assets/ThemeLocaleProvider-bc3e6f20.js index 9336be16fa..cfe460d9af 100644 --- a/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-a4dc3f38.js +++ b/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-bc3e6f20.js @@ -1,4 +1,4 @@ -import{A as m,f$ as Je,z as y,a4 as Ka,g0 as Xa,af as va,aj as d,g1 as b,g2 as t,g3 as Ya,g4 as h,g5 as ua,g6 as Ja,g7 as Qa,aI as Za,g8 as et,ad as rt,g9 as at}from"./index-18f2f740.js";import{s as fa,n as o,t as tt,o as ha,p as ot,q as ma,v as ga,w as ya,x as it,y as Sa,z as pa,A as xr,B as nt,D as lt,E as st,F as xa,G as $a,H as ka,J as dt,K as _a,L as ct,M as bt,N as vt,O as ut,Q as wa,R as ft,S as ht,T as mt,U as gt,V as yt,W as St,e as pt,X as xt}from"./MantineProvider-b20a2267.js";var za=String.raw,Ca=za` +import{B as m,g7 as Je,A as y,a5 as Ka,g8 as Xa,af as va,aj as d,g9 as b,ga as t,gb as Ya,gc as h,gd as ua,ge as Ja,gf as Qa,aL as Za,gg as et,ad as rt,gh as at}from"./index-2c171c8f.js";import{s as fa,n as o,t as tt,o as ha,p as ot,q as ma,v as ga,w as ya,x as it,y as Sa,z as pa,A as xr,B as nt,D as lt,E as st,F as xa,G as $a,H as ka,J as dt,K as _a,L as ct,M as bt,N as vt,O as ut,Q as wa,R as ft,S as ht,T as mt,U as gt,V as yt,W as St,e as pt,X as xt}from"./menu-971c0572.js";var za=String.raw,Ca=za` :root, :host { --chakra-vh: 100vh; diff --git a/invokeai/frontend/web/dist/assets/index-18f2f740.js b/invokeai/frontend/web/dist/assets/index-18f2f740.js deleted file mode 100644 index 9b01908490..0000000000 --- a/invokeai/frontend/web/dist/assets/index-18f2f740.js +++ /dev/null @@ -1,125 +0,0 @@ -function M8(e,t){for(var n=0;nr[i]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))r(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const s of o.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&r(s)}).observe(document,{childList:!0,subtree:!0});function n(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(i){if(i.ep)return;i.ep=!0;const o=n(i);fetch(i.href,o)}})();var Ee=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function ll(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function iF(e){if(e.__esModule)return e;var t=e.default;if(typeof t=="function"){var n=function r(){if(this instanceof r){var i=[null];i.push.apply(i,arguments);var o=Function.bind.apply(t,i);return new o}return t.apply(this,arguments)};n.prototype=t.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(e).forEach(function(r){var i=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(n,r,i.get?i:{enumerable:!0,get:function(){return e[r]}})}),n}var I8={exports:{}},_y={},N8={exports:{}},Oe={};/** - * @license React - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Jf=Symbol.for("react.element"),oF=Symbol.for("react.portal"),sF=Symbol.for("react.fragment"),aF=Symbol.for("react.strict_mode"),lF=Symbol.for("react.profiler"),uF=Symbol.for("react.provider"),cF=Symbol.for("react.context"),dF=Symbol.for("react.forward_ref"),fF=Symbol.for("react.suspense"),hF=Symbol.for("react.memo"),pF=Symbol.for("react.lazy"),D3=Symbol.iterator;function gF(e){return e===null||typeof e!="object"?null:(e=D3&&e[D3]||e["@@iterator"],typeof e=="function"?e:null)}var D8={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},L8=Object.assign,$8={};function fc(e,t,n){this.props=e,this.context=t,this.refs=$8,this.updater=n||D8}fc.prototype.isReactComponent={};fc.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};fc.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function F8(){}F8.prototype=fc.prototype;function uw(e,t,n){this.props=e,this.context=t,this.refs=$8,this.updater=n||D8}var cw=uw.prototype=new F8;cw.constructor=uw;L8(cw,fc.prototype);cw.isPureReactComponent=!0;var L3=Array.isArray,B8=Object.prototype.hasOwnProperty,dw={current:null},j8={key:!0,ref:!0,__self:!0,__source:!0};function V8(e,t,n){var r,i={},o=null,s=null;if(t!=null)for(r in t.ref!==void 0&&(s=t.ref),t.key!==void 0&&(o=""+t.key),t)B8.call(t,r)&&!j8.hasOwnProperty(r)&&(i[r]=t[r]);var a=arguments.length-2;if(a===1)i.children=n;else if(1>>1,U=O[j];if(0>>1;ji(X,L))Yi(B,X)?(O[j]=B,O[Y]=L,j=Y):(O[j]=X,O[W]=L,j=W);else if(Yi(B,L))O[j]=B,O[Y]=L,j=Y;else break e}}return D}function i(O,D){var L=O.sortIndex-D.sortIndex;return L!==0?L:O.id-D.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var s=Date,a=s.now();e.unstable_now=function(){return s.now()-a}}var l=[],u=[],c=1,d=null,f=3,h=!1,p=!1,m=!1,S=typeof setTimeout=="function"?setTimeout:null,y=typeof clearTimeout=="function"?clearTimeout:null,v=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function g(O){for(var D=n(u);D!==null;){if(D.callback===null)r(u);else if(D.startTime<=O)r(u),D.sortIndex=D.expirationTime,t(l,D);else break;D=n(u)}}function b(O){if(m=!1,g(O),!p)if(n(l)!==null)p=!0,M(_);else{var D=n(u);D!==null&&N(b,D.startTime-O)}}function _(O,D){p=!1,m&&(m=!1,y(T),T=-1),h=!0;var L=f;try{for(g(D),d=n(l);d!==null&&(!(d.expirationTime>D)||O&&!A());){var j=d.callback;if(typeof j=="function"){d.callback=null,f=d.priorityLevel;var U=j(d.expirationTime<=D);D=e.unstable_now(),typeof U=="function"?d.callback=U:d===n(l)&&r(l),g(D)}else r(l);d=n(l)}if(d!==null)var G=!0;else{var W=n(u);W!==null&&N(b,W.startTime-D),G=!1}return G}finally{d=null,f=L,h=!1}}var w=!1,x=null,T=-1,P=5,E=-1;function A(){return!(e.unstable_now()-EO||125j?(O.sortIndex=L,t(u,O),n(l)===null&&O===n(u)&&(m?(y(T),T=-1):m=!0,N(b,L-j))):(O.sortIndex=U,t(l,O),p||h||(p=!0,M(_))),O},e.unstable_shouldYield=A,e.unstable_wrapCallback=function(O){var D=f;return function(){var L=f;f=D;try{return O.apply(this,arguments)}finally{f=L}}}})(H8);G8.exports=H8;var EF=G8.exports;/** - * @license React - * react-dom.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var q8=k,kr=EF;function Z(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),ES=Object.prototype.hasOwnProperty,PF=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,B3={},j3={};function AF(e){return ES.call(j3,e)?!0:ES.call(B3,e)?!1:PF.test(e)?j3[e]=!0:(B3[e]=!0,!1)}function kF(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function RF(e,t,n,r){if(t===null||typeof t>"u"||kF(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function rr(e,t,n,r,i,o,s){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=i,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=s}var kn={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){kn[e]=new rr(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];kn[t]=new rr(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){kn[e]=new rr(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){kn[e]=new rr(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){kn[e]=new rr(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){kn[e]=new rr(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){kn[e]=new rr(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){kn[e]=new rr(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){kn[e]=new rr(e,5,!1,e.toLowerCase(),null,!1,!1)});var hw=/[\-:]([a-z])/g;function pw(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(hw,pw);kn[t]=new rr(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(hw,pw);kn[t]=new rr(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(hw,pw);kn[t]=new rr(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){kn[e]=new rr(e,1,!1,e.toLowerCase(),null,!1,!1)});kn.xlinkHref=new rr("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){kn[e]=new rr(e,1,!1,e.toLowerCase(),null,!0,!0)});function gw(e,t,n,r){var i=kn.hasOwnProperty(t)?kn[t]:null;(i!==null?i.type!==0:r||!(2a||i[s]!==o[a]){var l=` -`+i[s].replace(" at new "," at ");return e.displayName&&l.includes("")&&(l=l.replace("",e.displayName)),l}while(1<=s&&0<=a);break}}}finally{$1=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?ad(e):""}function OF(e){switch(e.tag){case 5:return ad(e.type);case 16:return ad("Lazy");case 13:return ad("Suspense");case 19:return ad("SuspenseList");case 0:case 2:case 15:return e=F1(e.type,!1),e;case 11:return e=F1(e.type.render,!1),e;case 1:return e=F1(e.type,!0),e;default:return""}}function RS(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case tu:return"Fragment";case eu:return"Portal";case PS:return"Profiler";case mw:return"StrictMode";case AS:return"Suspense";case kS:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case X8:return(e.displayName||"Context")+".Consumer";case K8:return(e._context.displayName||"Context")+".Provider";case yw:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case vw:return t=e.displayName||null,t!==null?t:RS(e.type)||"Memo";case ls:t=e._payload,e=e._init;try{return RS(e(t))}catch{}}return null}function MF(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return RS(t);case 8:return t===mw?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function Ls(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Q8(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function IF(e){var t=Q8(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var i=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return i.call(this)},set:function(s){r=""+s,o.call(this,s)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(s){r=""+s},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Qh(e){e._valueTracker||(e._valueTracker=IF(e))}function Z8(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Q8(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Ng(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function OS(e,t){var n=t.checked;return Rt({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function z3(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=Ls(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function J8(e,t){t=t.checked,t!=null&&gw(e,"checked",t,!1)}function MS(e,t){J8(e,t);var n=Ls(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?IS(e,t.type,n):t.hasOwnProperty("defaultValue")&&IS(e,t.type,Ls(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function U3(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function IS(e,t,n){(t!=="number"||Ng(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var ld=Array.isArray;function vu(e,t,n,r){if(e=e.options,t){t={};for(var i=0;i"+t.valueOf().toString()+"",t=Zh.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Bd(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var yd={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},NF=["Webkit","ms","Moz","O"];Object.keys(yd).forEach(function(e){NF.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),yd[t]=yd[e]})});function rA(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||yd.hasOwnProperty(e)&&yd[e]?(""+t).trim():t+"px"}function iA(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,i=rA(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,i):e[n]=i}}var DF=Rt({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function LS(e,t){if(t){if(DF[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(Z(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(Z(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(Z(61))}if(t.style!=null&&typeof t.style!="object")throw Error(Z(62))}}function $S(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var FS=null;function bw(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var BS=null,bu=null,Su=null;function q3(e){if(e=nh(e)){if(typeof BS!="function")throw Error(Z(280));var t=e.stateNode;t&&(t=Ey(t),BS(e.stateNode,e.type,t))}}function oA(e){bu?Su?Su.push(e):Su=[e]:bu=e}function sA(){if(bu){var e=bu,t=Su;if(Su=bu=null,q3(e),t)for(e=0;e>>=0,e===0?32:31-(qF(e)/WF|0)|0}var Jh=64,ep=4194304;function ud(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Fg(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,i=e.suspendedLanes,o=e.pingedLanes,s=n&268435455;if(s!==0){var a=s&~i;a!==0?r=ud(a):(o&=s,o!==0&&(r=ud(o)))}else s=n&~i,s!==0?r=ud(s):o!==0&&(r=ud(o));if(r===0)return 0;if(t!==0&&t!==r&&!(t&i)&&(i=r&-r,o=t&-t,i>=o||i===16&&(o&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function eh(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-mi(t),e[t]=n}function QF(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=bd),t5=String.fromCharCode(32),n5=!1;function EA(e,t){switch(e){case"keyup":return TB.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function PA(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var nu=!1;function PB(e,t){switch(e){case"compositionend":return PA(t);case"keypress":return t.which!==32?null:(n5=!0,t5);case"textInput":return e=t.data,e===t5&&n5?null:e;default:return null}}function AB(e,t){if(nu)return e==="compositionend"||!Pw&&EA(e,t)?(e=CA(),eg=Cw=vs=null,nu=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=s5(n)}}function OA(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?OA(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function MA(){for(var e=window,t=Ng();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Ng(e.document)}return t}function Aw(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function $B(e){var t=MA(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&OA(n.ownerDocument.documentElement,n)){if(r!==null&&Aw(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var i=n.textContent.length,o=Math.min(r.start,i);r=r.end===void 0?o:Math.min(r.end,i),!e.extend&&o>r&&(i=r,r=o,o=i),i=a5(n,o);var s=a5(n,r);i&&s&&(e.rangeCount!==1||e.anchorNode!==i.node||e.anchorOffset!==i.offset||e.focusNode!==s.node||e.focusOffset!==s.offset)&&(t=t.createRange(),t.setStart(i.node,i.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(s.node,s.offset)):(t.setEnd(s.node,s.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,ru=null,HS=null,_d=null,qS=!1;function l5(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;qS||ru==null||ru!==Ng(r)||(r=ru,"selectionStart"in r&&Aw(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),_d&&Hd(_d,r)||(_d=r,r=Vg(HS,"onSelect"),0su||(e.current=ZS[su],ZS[su]=null,su--)}function lt(e,t){su++,ZS[su]=e.current,e.current=t}var $s={},Bn=Qs($s),pr=Qs(!1),qa=$s;function Vu(e,t){var n=e.type.contextTypes;if(!n)return $s;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var i={},o;for(o in n)i[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function gr(e){return e=e.childContextTypes,e!=null}function Ug(){ht(pr),ht(Bn)}function g5(e,t,n){if(Bn.current!==$s)throw Error(Z(168));lt(Bn,t),lt(pr,n)}function VA(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var i in r)if(!(i in t))throw Error(Z(108,MF(e)||"Unknown",i));return Rt({},n,r)}function Gg(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||$s,qa=Bn.current,lt(Bn,e),lt(pr,pr.current),!0}function m5(e,t,n){var r=e.stateNode;if(!r)throw Error(Z(169));n?(e=VA(e,t,qa),r.__reactInternalMemoizedMergedChildContext=e,ht(pr),ht(Bn),lt(Bn,e)):ht(pr),lt(pr,n)}var _o=null,Py=!1,Z1=!1;function zA(e){_o===null?_o=[e]:_o.push(e)}function XB(e){Py=!0,zA(e)}function Zs(){if(!Z1&&_o!==null){Z1=!0;var e=0,t=Ye;try{var n=_o;for(Ye=1;e>=s,i-=s,To=1<<32-mi(t)+i|n<T?(P=x,x=null):P=x.sibling;var E=f(y,x,g[T],b);if(E===null){x===null&&(x=P);break}e&&x&&E.alternate===null&&t(y,x),v=o(E,v,T),w===null?_=E:w.sibling=E,w=E,x=P}if(T===g.length)return n(y,x),bt&&_a(y,T),_;if(x===null){for(;TT?(P=x,x=null):P=x.sibling;var A=f(y,x,E.value,b);if(A===null){x===null&&(x=P);break}e&&x&&A.alternate===null&&t(y,x),v=o(A,v,T),w===null?_=A:w.sibling=A,w=A,x=P}if(E.done)return n(y,x),bt&&_a(y,T),_;if(x===null){for(;!E.done;T++,E=g.next())E=d(y,E.value,b),E!==null&&(v=o(E,v,T),w===null?_=E:w.sibling=E,w=E);return bt&&_a(y,T),_}for(x=r(y,x);!E.done;T++,E=g.next())E=h(x,y,T,E.value,b),E!==null&&(e&&E.alternate!==null&&x.delete(E.key===null?T:E.key),v=o(E,v,T),w===null?_=E:w.sibling=E,w=E);return e&&x.forEach(function($){return t(y,$)}),bt&&_a(y,T),_}function S(y,v,g,b){if(typeof g=="object"&&g!==null&&g.type===tu&&g.key===null&&(g=g.props.children),typeof g=="object"&&g!==null){switch(g.$$typeof){case Yh:e:{for(var _=g.key,w=v;w!==null;){if(w.key===_){if(_=g.type,_===tu){if(w.tag===7){n(y,w.sibling),v=i(w,g.props.children),v.return=y,y=v;break e}}else if(w.elementType===_||typeof _=="object"&&_!==null&&_.$$typeof===ls&&x5(_)===w.type){n(y,w.sibling),v=i(w,g.props),v.ref=Fc(y,w,g),v.return=y,y=v;break e}n(y,w);break}else t(y,w);w=w.sibling}g.type===tu?(v=Fa(g.props.children,y.mode,b,g.key),v.return=y,y=v):(b=lg(g.type,g.key,g.props,null,y.mode,b),b.ref=Fc(y,v,g),b.return=y,y=b)}return s(y);case eu:e:{for(w=g.key;v!==null;){if(v.key===w)if(v.tag===4&&v.stateNode.containerInfo===g.containerInfo&&v.stateNode.implementation===g.implementation){n(y,v.sibling),v=i(v,g.children||[]),v.return=y,y=v;break e}else{n(y,v);break}else t(y,v);v=v.sibling}v=sb(g,y.mode,b),v.return=y,y=v}return s(y);case ls:return w=g._init,S(y,v,w(g._payload),b)}if(ld(g))return p(y,v,g,b);if(Ic(g))return m(y,v,g,b);ap(y,g)}return typeof g=="string"&&g!==""||typeof g=="number"?(g=""+g,v!==null&&v.tag===6?(n(y,v.sibling),v=i(v,g),v.return=y,y=v):(n(y,v),v=ob(g,y.mode,b),v.return=y,y=v),s(y)):n(y,v)}return S}var Uu=YA(!0),QA=YA(!1),rh={},Xi=Qs(rh),Xd=Qs(rh),Yd=Qs(rh);function Oa(e){if(e===rh)throw Error(Z(174));return e}function $w(e,t){switch(lt(Yd,t),lt(Xd,e),lt(Xi,rh),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:DS(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=DS(t,e)}ht(Xi),lt(Xi,t)}function Gu(){ht(Xi),ht(Xd),ht(Yd)}function ZA(e){Oa(Yd.current);var t=Oa(Xi.current),n=DS(t,e.type);t!==n&&(lt(Xd,e),lt(Xi,n))}function Fw(e){Xd.current===e&&(ht(Xi),ht(Xd))}var Et=Qs(0);function Yg(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&128)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var J1=[];function Bw(){for(var e=0;en?n:4,e(!0);var r=eb.transition;eb.transition={};try{e(!1),t()}finally{Ye=n,eb.transition=r}}function p9(){return Qr().memoizedState}function JB(e,t,n){var r=As(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},g9(e))m9(t,n);else if(n=qA(e,t,n,r),n!==null){var i=Zn();yi(n,e,r,i),y9(n,t,r)}}function ej(e,t,n){var r=As(e),i={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(g9(e))m9(t,i);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var s=t.lastRenderedState,a=o(s,n);if(i.hasEagerState=!0,i.eagerState=a,wi(a,s)){var l=t.interleaved;l===null?(i.next=i,Dw(t)):(i.next=l.next,l.next=i),t.interleaved=i;return}}catch{}finally{}n=qA(e,t,i,r),n!==null&&(i=Zn(),yi(n,e,r,i),y9(n,t,r))}}function g9(e){var t=e.alternate;return e===kt||t!==null&&t===kt}function m9(e,t){wd=Qg=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function y9(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,_w(e,n)}}var Zg={readContext:Yr,useCallback:In,useContext:In,useEffect:In,useImperativeHandle:In,useInsertionEffect:In,useLayoutEffect:In,useMemo:In,useReducer:In,useRef:In,useState:In,useDebugValue:In,useDeferredValue:In,useTransition:In,useMutableSource:In,useSyncExternalStore:In,useId:In,unstable_isNewReconciler:!1},tj={readContext:Yr,useCallback:function(e,t){return Di().memoizedState=[e,t===void 0?null:t],e},useContext:Yr,useEffect:T5,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,ig(4194308,4,u9.bind(null,t,e),n)},useLayoutEffect:function(e,t){return ig(4194308,4,e,t)},useInsertionEffect:function(e,t){return ig(4,2,e,t)},useMemo:function(e,t){var n=Di();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Di();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=JB.bind(null,kt,e),[r.memoizedState,e]},useRef:function(e){var t=Di();return e={current:e},t.memoizedState=e},useState:C5,useDebugValue:Gw,useDeferredValue:function(e){return Di().memoizedState=e},useTransition:function(){var e=C5(!1),t=e[0];return e=ZB.bind(null,e[1]),Di().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=kt,i=Di();if(bt){if(n===void 0)throw Error(Z(407));n=n()}else{if(n=t(),pn===null)throw Error(Z(349));Ka&30||t9(r,t,n)}i.memoizedState=n;var o={value:n,getSnapshot:t};return i.queue=o,T5(r9.bind(null,r,o,e),[e]),r.flags|=2048,Jd(9,n9.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=Di(),t=pn.identifierPrefix;if(bt){var n=Eo,r=To;n=(r&~(1<<32-mi(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=Qd++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=s.createElement(n,{is:r.is}):(e=s.createElement(n),n==="select"&&(s=e,r.multiple?s.multiple=!0:r.size&&(s.size=r.size))):e=s.createElementNS(e,n),e[Vi]=t,e[Kd]=r,E9(e,t,!1,!1),t.stateNode=e;e:{switch(s=$S(n,r),n){case"dialog":ct("cancel",e),ct("close",e),i=r;break;case"iframe":case"object":case"embed":ct("load",e),i=r;break;case"video":case"audio":for(i=0;iqu&&(t.flags|=128,r=!0,Bc(o,!1),t.lanes=4194304)}else{if(!r)if(e=Yg(s),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Bc(o,!0),o.tail===null&&o.tailMode==="hidden"&&!s.alternate&&!bt)return Nn(t),null}else 2*Bt()-o.renderingStartTime>qu&&n!==1073741824&&(t.flags|=128,r=!0,Bc(o,!1),t.lanes=4194304);o.isBackwards?(s.sibling=t.child,t.child=s):(n=o.last,n!==null?n.sibling=s:t.child=s,o.last=s)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=Bt(),t.sibling=null,n=Et.current,lt(Et,r?n&1|2:n&1),t):(Nn(t),null);case 22:case 23:return Yw(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?Cr&1073741824&&(Nn(t),t.subtreeFlags&6&&(t.flags|=8192)):Nn(t),null;case 24:return null;case 25:return null}throw Error(Z(156,t.tag))}function uj(e,t){switch(Rw(t),t.tag){case 1:return gr(t.type)&&Ug(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Gu(),ht(pr),ht(Bn),Bw(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return Fw(t),null;case 13:if(ht(Et),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(Z(340));zu()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return ht(Et),null;case 4:return Gu(),null;case 10:return Nw(t.type._context),null;case 22:case 23:return Yw(),null;case 24:return null;default:return null}}var up=!1,Fn=!1,cj=typeof WeakSet=="function"?WeakSet:Set,ae=null;function cu(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){It(e,t,r)}else n.current=null}function c_(e,t,n){try{n()}catch(r){It(e,t,r)}}var N5=!1;function dj(e,t){if(WS=Bg,e=MA(),Aw(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var i=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var s=0,a=-1,l=-1,u=0,c=0,d=e,f=null;t:for(;;){for(var h;d!==n||i!==0&&d.nodeType!==3||(a=s+i),d!==o||r!==0&&d.nodeType!==3||(l=s+r),d.nodeType===3&&(s+=d.nodeValue.length),(h=d.firstChild)!==null;)f=d,d=h;for(;;){if(d===e)break t;if(f===n&&++u===i&&(a=s),f===o&&++c===r&&(l=s),(h=d.nextSibling)!==null)break;d=f,f=d.parentNode}d=h}n=a===-1||l===-1?null:{start:a,end:l}}else n=null}n=n||{start:0,end:0}}else n=null;for(KS={focusedElem:e,selectionRange:n},Bg=!1,ae=t;ae!==null;)if(t=ae,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,ae=e;else for(;ae!==null;){t=ae;try{var p=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(p!==null){var m=p.memoizedProps,S=p.memoizedState,y=t.stateNode,v=y.getSnapshotBeforeUpdate(t.elementType===t.type?m:ai(t.type,m),S);y.__reactInternalSnapshotBeforeUpdate=v}break;case 3:var g=t.stateNode.containerInfo;g.nodeType===1?g.textContent="":g.nodeType===9&&g.documentElement&&g.removeChild(g.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(Z(163))}}catch(b){It(t,t.return,b)}if(e=t.sibling,e!==null){e.return=t.return,ae=e;break}ae=t.return}return p=N5,N5=!1,p}function xd(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var i=r=r.next;do{if((i.tag&e)===e){var o=i.destroy;i.destroy=void 0,o!==void 0&&c_(t,n,o)}i=i.next}while(i!==r)}}function Ry(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function d_(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function k9(e){var t=e.alternate;t!==null&&(e.alternate=null,k9(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Vi],delete t[Kd],delete t[QS],delete t[WB],delete t[KB])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function R9(e){return e.tag===5||e.tag===3||e.tag===4}function D5(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||R9(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function f_(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=zg));else if(r!==4&&(e=e.child,e!==null))for(f_(e,t,n),e=e.sibling;e!==null;)f_(e,t,n),e=e.sibling}function h_(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(h_(e,t,n),e=e.sibling;e!==null;)h_(e,t,n),e=e.sibling}var Cn=null,li=!1;function ts(e,t,n){for(n=n.child;n!==null;)O9(e,t,n),n=n.sibling}function O9(e,t,n){if(Ki&&typeof Ki.onCommitFiberUnmount=="function")try{Ki.onCommitFiberUnmount(wy,n)}catch{}switch(n.tag){case 5:Fn||cu(n,t);case 6:var r=Cn,i=li;Cn=null,ts(e,t,n),Cn=r,li=i,Cn!==null&&(li?(e=Cn,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):Cn.removeChild(n.stateNode));break;case 18:Cn!==null&&(li?(e=Cn,n=n.stateNode,e.nodeType===8?Q1(e.parentNode,n):e.nodeType===1&&Q1(e,n),Ud(e)):Q1(Cn,n.stateNode));break;case 4:r=Cn,i=li,Cn=n.stateNode.containerInfo,li=!0,ts(e,t,n),Cn=r,li=i;break;case 0:case 11:case 14:case 15:if(!Fn&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){i=r=r.next;do{var o=i,s=o.destroy;o=o.tag,s!==void 0&&(o&2||o&4)&&c_(n,t,s),i=i.next}while(i!==r)}ts(e,t,n);break;case 1:if(!Fn&&(cu(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(a){It(n,t,a)}ts(e,t,n);break;case 21:ts(e,t,n);break;case 22:n.mode&1?(Fn=(r=Fn)||n.memoizedState!==null,ts(e,t,n),Fn=r):ts(e,t,n);break;default:ts(e,t,n)}}function L5(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new cj),t.forEach(function(r){var i=Sj.bind(null,e,r);n.has(r)||(n.add(r),r.then(i,i))})}}function oi(e,t){var n=t.deletions;if(n!==null)for(var r=0;ri&&(i=s),r&=~o}if(r=i,r=Bt()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*hj(r/1960))-r,10e?16:e,bs===null)var r=!1;else{if(e=bs,bs=null,tm=0,Fe&6)throw Error(Z(331));var i=Fe;for(Fe|=4,ae=e.current;ae!==null;){var o=ae,s=o.child;if(ae.flags&16){var a=o.deletions;if(a!==null){for(var l=0;lBt()-Kw?$a(e,0):Ww|=n),mr(e,t)}function B9(e,t){t===0&&(e.mode&1?(t=ep,ep<<=1,!(ep&130023424)&&(ep=4194304)):t=1);var n=Zn();e=Fo(e,t),e!==null&&(eh(e,t,n),mr(e,n))}function bj(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),B9(e,n)}function Sj(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,i=e.memoizedState;i!==null&&(n=i.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(Z(314))}r!==null&&r.delete(t),B9(e,n)}var j9;j9=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||pr.current)dr=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return dr=!1,aj(e,t,n);dr=!!(e.flags&131072)}else dr=!1,bt&&t.flags&1048576&&UA(t,qg,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;og(e,t),e=t.pendingProps;var i=Vu(t,Bn.current);wu(t,n),i=Vw(null,t,r,e,i,n);var o=zw();return t.flags|=1,typeof i=="object"&&i!==null&&typeof i.render=="function"&&i.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,gr(r)?(o=!0,Gg(t)):o=!1,t.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,Lw(t),i.updater=Ay,t.stateNode=i,i._reactInternals=t,r_(t,r,e,n),t=s_(null,t,r,!0,o,n)):(t.tag=0,bt&&o&&kw(t),Yn(null,t,i,n),t=t.child),t;case 16:r=t.elementType;e:{switch(og(e,t),e=t.pendingProps,i=r._init,r=i(r._payload),t.type=r,i=t.tag=wj(r),e=ai(r,e),i){case 0:t=o_(null,t,r,e,n);break e;case 1:t=O5(null,t,r,e,n);break e;case 11:t=k5(null,t,r,e,n);break e;case 14:t=R5(null,t,r,ai(r.type,e),n);break e}throw Error(Z(306,r,""))}return t;case 0:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:ai(r,i),o_(e,t,r,i,n);case 1:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:ai(r,i),O5(e,t,r,i,n);case 3:e:{if(x9(t),e===null)throw Error(Z(387));r=t.pendingProps,o=t.memoizedState,i=o.element,WA(e,t),Xg(t,r,null,n);var s=t.memoizedState;if(r=s.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){i=Hu(Error(Z(423)),t),t=M5(e,t,r,n,i);break e}else if(r!==i){i=Hu(Error(Z(424)),t),t=M5(e,t,r,n,i);break e}else for(Er=Ts(t.stateNode.containerInfo.firstChild),Pr=t,bt=!0,ci=null,n=QA(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(zu(),r===i){t=Bo(e,t,n);break e}Yn(e,t,r,n)}t=t.child}return t;case 5:return ZA(t),e===null&&e_(t),r=t.type,i=t.pendingProps,o=e!==null?e.memoizedProps:null,s=i.children,XS(r,i)?s=null:o!==null&&XS(r,o)&&(t.flags|=32),w9(e,t),Yn(e,t,s,n),t.child;case 6:return e===null&&e_(t),null;case 13:return C9(e,t,n);case 4:return $w(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=Uu(t,null,r,n):Yn(e,t,r,n),t.child;case 11:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:ai(r,i),k5(e,t,r,i,n);case 7:return Yn(e,t,t.pendingProps,n),t.child;case 8:return Yn(e,t,t.pendingProps.children,n),t.child;case 12:return Yn(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,i=t.pendingProps,o=t.memoizedProps,s=i.value,lt(Wg,r._currentValue),r._currentValue=s,o!==null)if(wi(o.value,s)){if(o.children===i.children&&!pr.current){t=Bo(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var a=o.dependencies;if(a!==null){s=o.child;for(var l=a.firstContext;l!==null;){if(l.context===r){if(o.tag===1){l=ko(-1,n&-n),l.tag=2;var u=o.updateQueue;if(u!==null){u=u.shared;var c=u.pending;c===null?l.next=l:(l.next=c.next,c.next=l),u.pending=l}}o.lanes|=n,l=o.alternate,l!==null&&(l.lanes|=n),t_(o.return,n,t),a.lanes|=n;break}l=l.next}}else if(o.tag===10)s=o.type===t.type?null:o.child;else if(o.tag===18){if(s=o.return,s===null)throw Error(Z(341));s.lanes|=n,a=s.alternate,a!==null&&(a.lanes|=n),t_(s,n,t),s=o.sibling}else s=o.child;if(s!==null)s.return=o;else for(s=o;s!==null;){if(s===t){s=null;break}if(o=s.sibling,o!==null){o.return=s.return,s=o;break}s=s.return}o=s}Yn(e,t,i.children,n),t=t.child}return t;case 9:return i=t.type,r=t.pendingProps.children,wu(t,n),i=Yr(i),r=r(i),t.flags|=1,Yn(e,t,r,n),t.child;case 14:return r=t.type,i=ai(r,t.pendingProps),i=ai(r.type,i),R5(e,t,r,i,n);case 15:return S9(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:ai(r,i),og(e,t),t.tag=1,gr(r)?(e=!0,Gg(t)):e=!1,wu(t,n),XA(t,r,i),r_(t,r,i,n),s_(null,t,r,!0,e,n);case 19:return T9(e,t,n);case 22:return _9(e,t,n)}throw Error(Z(156,t.tag))};function V9(e,t){return hA(e,t)}function _j(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Wr(e,t,n,r){return new _j(e,t,n,r)}function Zw(e){return e=e.prototype,!(!e||!e.isReactComponent)}function wj(e){if(typeof e=="function")return Zw(e)?1:0;if(e!=null){if(e=e.$$typeof,e===yw)return 11;if(e===vw)return 14}return 2}function ks(e,t){var n=e.alternate;return n===null?(n=Wr(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function lg(e,t,n,r,i,o){var s=2;if(r=e,typeof e=="function")Zw(e)&&(s=1);else if(typeof e=="string")s=5;else e:switch(e){case tu:return Fa(n.children,i,o,t);case mw:s=8,i|=8;break;case PS:return e=Wr(12,n,t,i|2),e.elementType=PS,e.lanes=o,e;case AS:return e=Wr(13,n,t,i),e.elementType=AS,e.lanes=o,e;case kS:return e=Wr(19,n,t,i),e.elementType=kS,e.lanes=o,e;case Y8:return My(n,i,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case K8:s=10;break e;case X8:s=9;break e;case yw:s=11;break e;case vw:s=14;break e;case ls:s=16,r=null;break e}throw Error(Z(130,e==null?e:typeof e,""))}return t=Wr(s,n,t,i),t.elementType=e,t.type=r,t.lanes=o,t}function Fa(e,t,n,r){return e=Wr(7,e,r,t),e.lanes=n,e}function My(e,t,n,r){return e=Wr(22,e,r,t),e.elementType=Y8,e.lanes=n,e.stateNode={isHidden:!1},e}function ob(e,t,n){return e=Wr(6,e,null,t),e.lanes=n,e}function sb(e,t,n){return t=Wr(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function xj(e,t,n,r,i){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=j1(0),this.expirationTimes=j1(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=j1(0),this.identifierPrefix=r,this.onRecoverableError=i,this.mutableSourceEagerHydrationData=null}function Jw(e,t,n,r,i,o,s,a,l){return e=new xj(e,t,n,a,l),t===1?(t=1,o===!0&&(t|=8)):t=0,o=Wr(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Lw(o),e}function Cj(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(H9)}catch(e){console.error(e)}}H9(),U8.exports=Ir;var zi=U8.exports;const ywe=ll(zi);var G5=zi;TS.createRoot=G5.createRoot,TS.hydrateRoot=G5.hydrateRoot;const kj="modulepreload",Rj=function(e,t){return new URL(e,t).href},H5={},q9=function(t,n,r){if(!n||n.length===0)return t();const i=document.getElementsByTagName("link");return Promise.all(n.map(o=>{if(o=Rj(o,r),o in H5)return;H5[o]=!0;const s=o.endsWith(".css"),a=s?'[rel="stylesheet"]':"";if(!!r)for(let c=i.length-1;c>=0;c--){const d=i[c];if(d.href===o&&(!s||d.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${o}"]${a}`))return;const u=document.createElement("link");if(u.rel=s?"stylesheet":kj,s||(u.as="script",u.crossOrigin=""),u.href=o,document.head.appendChild(u),s)return new Promise((c,d)=>{u.addEventListener("load",c),u.addEventListener("error",()=>d(new Error(`Unable to preload CSS for ${o}`)))})})).then(()=>t()).catch(o=>{const s=new Event("vite:preloadError",{cancelable:!0});if(s.payload=o,window.dispatchEvent(s),!s.defaultPrevented)throw o})};var W9={exports:{}},K9={};/** - * @license React - * use-sync-external-store-shim.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Wu=k;function Oj(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var Mj=typeof Object.is=="function"?Object.is:Oj,Ij=Wu.useState,Nj=Wu.useEffect,Dj=Wu.useLayoutEffect,Lj=Wu.useDebugValue;function $j(e,t){var n=t(),r=Ij({inst:{value:n,getSnapshot:t}}),i=r[0].inst,o=r[1];return Dj(function(){i.value=n,i.getSnapshot=t,ab(i)&&o({inst:i})},[e,n,t]),Nj(function(){return ab(i)&&o({inst:i}),e(function(){ab(i)&&o({inst:i})})},[e]),Lj(n),n}function ab(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!Mj(e,n)}catch{return!0}}function Fj(e,t){return t()}var Bj=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?Fj:$j;K9.useSyncExternalStore=Wu.useSyncExternalStore!==void 0?Wu.useSyncExternalStore:Bj;W9.exports=K9;var jj=W9.exports,X9={exports:{}},Y9={};/** - * @license React - * use-sync-external-store-shim/with-selector.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var $y=k,Vj=jj;function zj(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var Uj=typeof Object.is=="function"?Object.is:zj,Gj=Vj.useSyncExternalStore,Hj=$y.useRef,qj=$y.useEffect,Wj=$y.useMemo,Kj=$y.useDebugValue;Y9.useSyncExternalStoreWithSelector=function(e,t,n,r,i){var o=Hj(null);if(o.current===null){var s={hasValue:!1,value:null};o.current=s}else s=o.current;o=Wj(function(){function l(h){if(!u){if(u=!0,c=h,h=r(h),i!==void 0&&s.hasValue){var p=s.value;if(i(p,h))return d=p}return d=h}if(p=d,Uj(c,h))return p;var m=r(h);return i!==void 0&&i(p,m)?p:(c=h,d=m)}var u=!1,c,d,f=n===void 0?null:n;return[function(){return l(t())},f===null?void 0:function(){return l(f())}]},[t,n,r,i]);var a=Gj(e,o[0],o[1]);return qj(function(){s.hasValue=!0,s.value=a},[a]),Kj(a),a};X9.exports=Y9;var Q9=X9.exports;const Xj=ll(Q9);function Yj(e){e()}let Z9=Yj;const Qj=e=>Z9=e,Zj=()=>Z9,q5=Symbol.for(`react-redux-context-${k.version}`),W5=globalThis;function Jj(){let e=W5[q5];return e||(e=k.createContext(null),W5[q5]=e),e}const Fs=new Proxy({},new Proxy({},{get(e,t){const n=Jj();return(r,...i)=>Reflect[t](n,...i)}}));function rx(e=Fs){return function(){return k.useContext(e)}}const J9=rx(),eV=()=>{throw new Error("uSES not initialized!")};let ek=eV;const tV=e=>{ek=e},nV=(e,t)=>e===t;function rV(e=Fs){const t=e===Fs?J9:rx(e);return function(r,i={}){const{equalityFn:o=nV,stabilityCheck:s=void 0,noopCheck:a=void 0}=typeof i=="function"?{equalityFn:i}:i,{store:l,subscription:u,getServerState:c,stabilityCheck:d,noopCheck:f}=t();k.useRef(!0);const h=k.useCallback({[r.name](m){return r(m)}}[r.name],[r,d,s]),p=ek(u.addNestedSub,l.getState,c||l.getState,h,o);return k.useDebugValue(p),p}}const tk=rV();function im(){return im=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let r=t;for(;r;)r.callback(),r=r.next})},get(){let r=[],i=t;for(;i;)r.push(i),i=i.next;return r},subscribe(r){let i=!0,o=n={callback:r,next:null,prev:n};return o.prev?o.prev.next=o:t=o,function(){!i||t===null||(i=!1,o.next?o.next.prev=o.prev:n=o.prev,o.prev?o.prev.next=o.next:t=o.next)}}}}const K5={notify(){},get:()=>[]};function gV(e,t){let n,r=K5;function i(d){return l(),r.subscribe(d)}function o(){r.notify()}function s(){c.onStateChange&&c.onStateChange()}function a(){return!!n}function l(){n||(n=t?t.addNestedSub(s):e.subscribe(s),r=pV())}function u(){n&&(n(),n=void 0,r.clear(),r=K5)}const c={addNestedSub:i,notifyNestedSubs:o,handleChangeWrapper:s,isSubscribed:a,trySubscribe:l,tryUnsubscribe:u,getListeners:()=>r};return c}const mV=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",yV=mV?k.useLayoutEffect:k.useEffect;function X5(e,t){return e===t?e!==0||t!==0||1/e===1/t:e!==e&&t!==t}function om(e,t){if(X5(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;const n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let i=0;i{const u=gV(e);return{store:e,subscription:u,getServerState:r?()=>r:void 0,stabilityCheck:i,noopCheck:o}},[e,r,i,o]),a=k.useMemo(()=>e.getState(),[e]);yV(()=>{const{subscription:u}=s;return u.onStateChange=u.notifyNestedSubs,u.trySubscribe(),a!==e.getState()&&u.notifyNestedSubs(),()=>{u.tryUnsubscribe(),u.onStateChange=void 0}},[s,a]);const l=t||Fs;return Xe.createElement(l.Provider,{value:s},n)}function ak(e=Fs){const t=e===Fs?J9:rx(e);return function(){const{store:r}=t();return r}}const lk=ak();function bV(e=Fs){const t=e===Fs?lk:ak(e);return function(){return t().dispatch}}const uk=bV();tV(Q9.useSyncExternalStoreWithSelector);Qj(zi.unstable_batchedUpdates);function hn(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r3?t.i-4:t.i:Array.isArray(e)?1:i0(e)?2:o0(e)?3:0}function Rs(e,t){return Bs(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function ug(e,t){return Bs(e)===2?e.get(t):e[t]}function ck(e,t,n){var r=Bs(e);r===2?e.set(t,n):r===3?e.add(n):e[t]=n}function dk(e,t){return e===t?e!==0||1/e==1/t:e!=e&&t!=t}function i0(e){return TV&&e instanceof Map}function o0(e){return EV&&e instanceof Set}function ln(e){return e.o||e.t}function cx(e){if(Array.isArray(e))return Array.prototype.slice.call(e);var t=hk(e);delete t[_e];for(var n=Tu(t),r=0;r1&&(e.set=e.add=e.clear=e.delete=SV),Object.freeze(e),t&&jo(e,function(n,r){return ih(r,!0)},!0)),e}function SV(){hn(2)}function dx(e){return e==null||typeof e!="object"||Object.isFrozen(e)}function Yi(e){var t=b_[e];return t||hn(18,e),t}function fx(e,t){b_[e]||(b_[e]=t)}function tf(){return rf}function lb(e,t){t&&(Yi("Patches"),e.u=[],e.s=[],e.v=t)}function sm(e){v_(e),e.p.forEach(_V),e.p=null}function v_(e){e===rf&&(rf=e.l)}function Y5(e){return rf={p:[],l:rf,h:e,m:!0,_:0}}function _V(e){var t=e[_e];t.i===0||t.i===1?t.j():t.g=!0}function ub(e,t){t._=t.p.length;var n=t.p[0],r=e!==void 0&&e!==n;return t.h.O||Yi("ES5").S(t,e,r),r?(n[_e].P&&(sm(t),hn(4)),yr(e)&&(e=am(t,e),t.l||lm(t,e)),t.u&&Yi("Patches").M(n[_e].t,e,t.u,t.s)):e=am(t,n,[]),sm(t),t.u&&t.v(t.u,t.s),e!==a0?e:void 0}function am(e,t,n){if(dx(t))return t;var r=t[_e];if(!r)return jo(t,function(a,l){return Q5(e,r,t,a,l,n)},!0),t;if(r.A!==e)return t;if(!r.P)return lm(e,r.t,!0),r.t;if(!r.I){r.I=!0,r.A._--;var i=r.i===4||r.i===5?r.o=cx(r.k):r.o,o=i,s=!1;r.i===3&&(o=new Set(i),i.clear(),s=!0),jo(o,function(a,l){return Q5(e,r,i,a,l,n,s)}),lm(e,i,!1),n&&e.u&&Yi("Patches").N(r,n,e.u,e.s)}return r.o}function Q5(e,t,n,r,i,o,s){if(er(i)){var a=am(e,i,o&&t&&t.i!==3&&!Rs(t.R,r)?o.concat(r):void 0);if(ck(n,r,a),!er(a))return;e.m=!1}else s&&n.add(i);if(yr(i)&&!dx(i)){if(!e.h.D&&e._<1)return;am(e,i),t&&t.A.l||lm(e,i)}}function lm(e,t,n){n===void 0&&(n=!1),!e.l&&e.h.D&&e.m&&ih(t,n)}function cb(e,t){var n=e[_e];return(n?ln(n):e)[t]}function Z5(e,t){if(t in e)for(var n=Object.getPrototypeOf(e);n;){var r=Object.getOwnPropertyDescriptor(n,t);if(r)return r;n=Object.getPrototypeOf(n)}}function cr(e){e.P||(e.P=!0,e.l&&cr(e.l))}function db(e){e.o||(e.o=cx(e.t))}function nf(e,t,n){var r=i0(t)?Yi("MapSet").F(t,n):o0(t)?Yi("MapSet").T(t,n):e.O?function(i,o){var s=Array.isArray(i),a={i:s?1:0,A:o?o.A:tf(),P:!1,I:!1,R:{},l:o,t:i,k:null,o:null,j:null,C:!1},l=a,u=of;s&&(l=[a],u=dd);var c=Proxy.revocable(l,u),d=c.revoke,f=c.proxy;return a.k=f,a.j=d,f}(t,n):Yi("ES5").J(t,n);return(n?n.A:tf()).p.push(r),r}function s0(e){return er(e)||hn(22,e),function t(n){if(!yr(n))return n;var r,i=n[_e],o=Bs(n);if(i){if(!i.P&&(i.i<4||!Yi("ES5").K(i)))return i.t;i.I=!0,r=J5(n,o),i.I=!1}else r=J5(n,o);return jo(r,function(s,a){i&&ug(i.t,s)===a||ck(r,s,t(a))}),o===3?new Set(r):r}(e)}function J5(e,t){switch(t){case 2:return new Map(e);case 3:return Array.from(e)}return cx(e)}function hx(){function e(o,s){var a=i[o];return a?a.enumerable=s:i[o]=a={configurable:!0,enumerable:s,get:function(){var l=this[_e];return of.get(l,o)},set:function(l){var u=this[_e];of.set(u,o,l)}},a}function t(o){for(var s=o.length-1;s>=0;s--){var a=o[s][_e];if(!a.P)switch(a.i){case 5:r(a)&&cr(a);break;case 4:n(a)&&cr(a)}}}function n(o){for(var s=o.t,a=o.k,l=Tu(a),u=l.length-1;u>=0;u--){var c=l[u];if(c!==_e){var d=s[c];if(d===void 0&&!Rs(s,c))return!0;var f=a[c],h=f&&f[_e];if(h?h.t!==d:!dk(f,d))return!0}}var p=!!s[_e];return l.length!==Tu(s).length+(p?0:1)}function r(o){var s=o.k;if(s.length!==o.t.length)return!0;var a=Object.getOwnPropertyDescriptor(s,s.length-1);if(a&&!a.get)return!0;for(var l=0;l1?y-1:0),g=1;g1?c-1:0),f=1;f=0;i--){var o=r[i];if(o.path.length===0&&o.op==="replace"){n=o.value;break}}i>-1&&(r=r.slice(i+1));var s=Yi("Patches").$;return er(n)?s(n,r):this.produce(n,function(a){return s(a,r)})},e}(),Rr=new pk,gk=Rr.produce,mx=Rr.produceWithPatches.bind(Rr),AV=Rr.setAutoFreeze.bind(Rr),kV=Rr.setUseProxies.bind(Rr),S_=Rr.applyPatches.bind(Rr),RV=Rr.createDraft.bind(Rr),OV=Rr.finishDraft.bind(Rr);const Js=gk,vwe=Object.freeze(Object.defineProperty({__proto__:null,Immer:pk,applyPatches:S_,castDraft:xV,castImmutable:CV,createDraft:RV,current:s0,default:Js,enableAllPlugins:wV,enableES5:hx,enableMapSet:fk,enablePatches:px,finishDraft:OV,freeze:ih,immerable:Cu,isDraft:er,isDraftable:yr,nothing:a0,original:ux,produce:gk,produceWithPatches:mx,setAutoFreeze:AV,setUseProxies:kV},Symbol.toStringTag,{value:"Module"}));function sf(e){"@babel/helpers - typeof";return sf=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},sf(e)}function MV(e,t){if(sf(e)!=="object"||e===null)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||"default");if(sf(r)!=="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function IV(e){var t=MV(e,"string");return sf(t)==="symbol"?t:String(t)}function NV(e,t,n){return t=IV(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function n4(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),n.push.apply(n,r)}return n}function r4(e){for(var t=1;t"u"&&(n=t,t=void 0),typeof n<"u"){if(typeof n!="function")throw new Error(Tn(1));return n(oh)(e,t)}if(typeof e!="function")throw new Error(Tn(2));var i=e,o=t,s=[],a=s,l=!1;function u(){a===s&&(a=s.slice())}function c(){if(l)throw new Error(Tn(3));return o}function d(m){if(typeof m!="function")throw new Error(Tn(4));if(l)throw new Error(Tn(5));var S=!0;return u(),a.push(m),function(){if(S){if(l)throw new Error(Tn(6));S=!1,u();var v=a.indexOf(m);a.splice(v,1),s=null}}}function f(m){if(!DV(m))throw new Error(Tn(7));if(typeof m.type>"u")throw new Error(Tn(8));if(l)throw new Error(Tn(9));try{l=!0,o=i(o,m)}finally{l=!1}for(var S=s=a,y=0;y"u")throw new Error(Tn(12));if(typeof n(void 0,{type:Ku.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(Tn(13))})}function gc(e){for(var t=Object.keys(e),n={},r=0;r"u")throw u&&u.type,new Error(Tn(14));d[h]=S,c=c||S!==m}return c=c||o.length!==Object.keys(l).length,c?d:l}}function o4(e,t){return function(){return t(e.apply(this,arguments))}}function yk(e,t){if(typeof e=="function")return o4(e,t);if(typeof e!="object"||e===null)throw new Error(Tn(16));var n={};for(var r in e){var i=e[r];typeof i=="function"&&(n[r]=o4(i,t))}return n}function Xu(){for(var e=arguments.length,t=new Array(e),n=0;n-1){var u=n[l];return l>0&&(n.splice(l,1),n.unshift(u)),u.value}return um}function i(a,l){r(a)===um&&(n.unshift({key:a,value:l}),n.length>e&&n.pop())}function o(){return n}function s(){n=[]}return{get:r,put:i,getEntries:o,clear:s}}var vk=function(t,n){return t===n};function jV(e){return function(n,r){if(n===null||r===null||n.length!==r.length)return!1;for(var i=n.length,o=0;o1?t-1:0),r=1;r0&&o[o.length-1])&&(u[0]===6||u[0]===2)){n=0;continue}if(u[0]===3&&(!o||u[1]>o[0]&&u[1]",value:e};if(typeof e!="object"||e===null||o!=null&&o.has(e))return!1;for(var a=r!=null?r(e):Object.entries(e),l=i.length>0,u=function(S,y){var v=t?t+"."+S:S;if(l){var g=i.some(function(b){return b instanceof RegExp?b.test(v):v===b});if(g)return"continue"}if(!n(y))return{value:{keyPath:v,value:y}};if(typeof y=="object"&&(s=Ek(y,v,n,r,i,o),s))return{value:s}},c=0,d=a;c-1}function nz(e){return""+e}function Ok(e){var t={},n=[],r,i={addCase:function(o,s){var a=typeof o=="string"?o:o.type;if(a in t)throw new Error("addCase cannot be called with two reducers for the same action type");return t[a]=s,i},addMatcher:function(o,s){return n.push({matcher:o,reducer:s}),i},addDefaultCase:function(o){return r=o,i}};return e(i),[t,n,r]}function rz(e){return typeof e=="function"}function Mk(e,t,n,r){n===void 0&&(n=[]);var i=typeof t=="function"?Ok(t):[t,n,r],o=i[0],s=i[1],a=i[2],l;if(rz(e))l=function(){return __(e())};else{var u=__(e);l=function(){return u}}function c(d,f){d===void 0&&(d=l());var h=js([o[f.type]],s.filter(function(p){var m=p.matcher;return m(f)}).map(function(p){var m=p.reducer;return m}));return h.filter(function(p){return!!p}).length===0&&(h=[a]),h.reduce(function(p,m){if(m)if(er(p)){var S=p,y=m(S,f);return y===void 0?p:y}else{if(yr(p))return Js(p,function(v){return m(v,f)});var y=m(p,f);if(y===void 0){if(p===null)return p;throw Error("A case reducer on a non-draftable value must not return undefined")}return y}return p},d)}return c.getInitialState=l,c}function iz(e,t){return e+"/"+t}function Pt(e){var t=e.name;if(!t)throw new Error("`name` is a required option for createSlice");typeof process<"u";var n=typeof e.initialState=="function"?e.initialState:__(e.initialState),r=e.reducers||{},i=Object.keys(r),o={},s={},a={};i.forEach(function(c){var d=r[c],f=iz(t,c),h,p;"reducer"in d?(h=d.reducer,p=d.prepare):h=d,o[c]=h,s[f]=h,a[c]=p?ue(f,p):ue(f)});function l(){var c=typeof e.extraReducers=="function"?Ok(e.extraReducers):[e.extraReducers],d=c[0],f=d===void 0?{}:d,h=c[1],p=h===void 0?[]:h,m=c[2],S=m===void 0?void 0:m,y=fr(fr({},f),s);return Mk(n,function(v){for(var g in y)v.addCase(g,y[g]);for(var b=0,_=p;b<_.length;b++){var w=_[b];v.addMatcher(w.matcher,w.reducer)}S&&v.addDefaultCase(S)})}var u;return{name:t,reducer:function(c,d){return u||(u=l()),u(c,d)},actions:a,caseReducers:o,getInitialState:function(){return u||(u=l()),u.getInitialState()}}}function oz(){return{ids:[],entities:{}}}function sz(){function e(t){return t===void 0&&(t={}),Object.assign(oz(),t)}return{getInitialState:e}}function az(){function e(t){var n=function(u){return u.ids},r=function(u){return u.entities},i=yo(n,r,function(u,c){return u.map(function(d){return c[d]})}),o=function(u,c){return c},s=function(u,c){return u[c]},a=yo(n,function(u){return u.length});if(!t)return{selectIds:n,selectEntities:r,selectAll:i,selectTotal:a,selectById:yo(r,o,s)};var l=yo(t,r);return{selectIds:yo(t,n),selectEntities:l,selectAll:yo(t,i),selectTotal:yo(t,a),selectById:yo(l,o,s)}}return{getSelectors:e}}function lz(e){var t=Lt(function(n,r){return e(r)});return function(r){return t(r,void 0)}}function Lt(e){return function(n,r){function i(s){return Rk(s)}var o=function(s){i(r)?e(r.payload,s):e(r,s)};return er(n)?(o(n),n):Js(n,o)}}function Ed(e,t){var n=t(e);return n}function Ba(e){return Array.isArray(e)||(e=Object.values(e)),e}function Ik(e,t,n){e=Ba(e);for(var r=[],i=[],o=0,s=e;o0;if(v){var g=p.filter(function(b){return u(S,b,m)}).length>0;g&&(m.ids=Object.keys(m.entities))}}function f(p,m){return h([p],m)}function h(p,m){var S=Ik(p,e,m),y=S[0],v=S[1];d(v,m),n(y,m)}return{removeAll:lz(l),addOne:Lt(t),addMany:Lt(n),setOne:Lt(r),setMany:Lt(i),setAll:Lt(o),updateOne:Lt(c),updateMany:Lt(d),upsertOne:Lt(f),upsertMany:Lt(h),removeOne:Lt(s),removeMany:Lt(a)}}function uz(e,t){var n=Nk(e),r=n.removeOne,i=n.removeMany,o=n.removeAll;function s(v,g){return a([v],g)}function a(v,g){v=Ba(v);var b=v.filter(function(_){return!(Ed(_,e)in g.entities)});b.length!==0&&S(b,g)}function l(v,g){return u([v],g)}function u(v,g){v=Ba(v),v.length!==0&&S(v,g)}function c(v,g){v=Ba(v),g.entities={},g.ids=[],a(v,g)}function d(v,g){return f([v],g)}function f(v,g){for(var b=!1,_=0,w=v;_-1;return n&&r}function lh(e){return typeof e[0]=="function"&&"pending"in e[0]&&"fulfilled"in e[0]&&"rejected"in e[0]}function c0(){for(var e=[],t=0;t0)for(var g=h.getState(),b=Array.from(n.values()),_=0,w=b;_Math.floor(e/t)*t,Ui=(e,t)=>Math.round(e/t)*t;var Pz=typeof global=="object"&&global&&global.Object===Object&&global;const Zk=Pz;var Az=typeof self=="object"&&self&&self.Object===Object&&self,kz=Zk||Az||Function("return this")();const oo=kz;var Rz=oo.Symbol;const Zr=Rz;var Jk=Object.prototype,Oz=Jk.hasOwnProperty,Mz=Jk.toString,Vc=Zr?Zr.toStringTag:void 0;function Iz(e){var t=Oz.call(e,Vc),n=e[Vc];try{e[Vc]=void 0;var r=!0}catch{}var i=Mz.call(e);return r&&(t?e[Vc]=n:delete e[Vc]),i}var Nz=Object.prototype,Dz=Nz.toString;function Lz(e){return Dz.call(e)}var $z="[object Null]",Fz="[object Undefined]",h4=Zr?Zr.toStringTag:void 0;function na(e){return e==null?e===void 0?Fz:$z:h4&&h4 in Object(e)?Iz(e):Lz(e)}function Ci(e){return e!=null&&typeof e=="object"}var Bz="[object Symbol]";function d0(e){return typeof e=="symbol"||Ci(e)&&na(e)==Bz}function eR(e,t){for(var n=-1,r=e==null?0:e.length,i=Array(r);++n0){if(++t>=yU)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function _U(e){return function(){return e}}var wU=function(){try{var e=fl(Object,"defineProperty");return e({},"",{}),e}catch{}}();const hm=wU;var xU=hm?function(e,t){return hm(e,"toString",{configurable:!0,enumerable:!1,value:_U(t),writable:!0})}:f0;const CU=xU;var TU=SU(CU);const iR=TU;function oR(e,t){for(var n=-1,r=e==null?0:e.length;++n-1}var OU=9007199254740991,MU=/^(?:0|[1-9]\d*)$/;function wx(e,t){var n=typeof e;return t=t??OU,!!t&&(n=="number"||n!="symbol"&&MU.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=DU}function yc(e){return e!=null&&Cx(e.length)&&!_x(e)}function uR(e,t,n){if(!vr(n))return!1;var r=typeof t;return(r=="number"?yc(n)&&wx(t,n.length):r=="string"&&t in n)?fh(n[t],e):!1}function cR(e){return lR(function(t,n){var r=-1,i=n.length,o=i>1?n[i-1]:void 0,s=i>2?n[2]:void 0;for(o=e.length>3&&typeof o=="function"?(i--,o):void 0,s&&uR(n[0],n[1],s)&&(o=i<3?void 0:o,i=1),t=Object(t);++r-1}function YG(e,t){var n=this.__data__,r=h0(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}function Ho(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t0&&n(a)?t>1?yR(a,t-1,n,r,i):Ox(i,a):r||(i[i.length]=a)}return i}function pH(e){var t=e==null?0:e.length;return t?yR(e,1):[]}function gH(e){return iR(aR(e,void 0,pH),e+"")}var mH=gR(Object.getPrototypeOf,Object);const Mx=mH;var yH="[object Object]",vH=Function.prototype,bH=Object.prototype,vR=vH.toString,SH=bH.hasOwnProperty,_H=vR.call(Object);function bR(e){if(!Ci(e)||na(e)!=yH)return!1;var t=Mx(e);if(t===null)return!0;var n=SH.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&vR.call(n)==_H}function SR(e,t,n){var r=-1,i=e.length;t<0&&(t=-t>i?0:i+t),n=n>i?i:n,n<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;for(var o=Array(i);++r=r?e:SR(e,t,n)}var xH="\\ud800-\\udfff",CH="\\u0300-\\u036f",TH="\\ufe20-\\ufe2f",EH="\\u20d0-\\u20ff",PH=CH+TH+EH,AH="\\ufe0e\\ufe0f",kH="\\u200d",RH=RegExp("["+kH+xH+PH+AH+"]");function Ix(e){return RH.test(e)}function OH(e){return e.split("")}var _R="\\ud800-\\udfff",MH="\\u0300-\\u036f",IH="\\ufe20-\\ufe2f",NH="\\u20d0-\\u20ff",DH=MH+IH+NH,LH="\\ufe0e\\ufe0f",$H="["+_R+"]",T_="["+DH+"]",E_="\\ud83c[\\udffb-\\udfff]",FH="(?:"+T_+"|"+E_+")",wR="[^"+_R+"]",xR="(?:\\ud83c[\\udde6-\\uddff]){2}",CR="[\\ud800-\\udbff][\\udc00-\\udfff]",BH="\\u200d",TR=FH+"?",ER="["+LH+"]?",jH="(?:"+BH+"(?:"+[wR,xR,CR].join("|")+")"+ER+TR+")*",VH=ER+TR+jH,zH="(?:"+[wR+T_+"?",T_,xR,CR,$H].join("|")+")",UH=RegExp(E_+"(?="+E_+")|"+zH+VH,"g");function GH(e){return e.match(UH)||[]}function HH(e){return Ix(e)?GH(e):OH(e)}function qH(e){return function(t){t=g0(t);var n=Ix(t)?HH(t):void 0,r=n?n[0]:t.charAt(0),i=n?wH(n,1).join(""):t.slice(1);return r[e]()+i}}var WH=qH("toUpperCase");const KH=WH;function PR(e,t,n,r){var i=-1,o=e==null?0:e.length;for(r&&o&&(n=e[++i]);++i=t?e:t)),e}function Ss(e,t,n){return n===void 0&&(n=t,t=void 0),n!==void 0&&(n=gb(n),n=n===n?n:0),t!==void 0&&(t=gb(t),t=t===t?t:0),Fq(gb(e),t,n)}function Bq(){this.__data__=new Ho,this.size=0}function jq(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}function Vq(e){return this.__data__.get(e)}function zq(e){return this.__data__.has(e)}var Uq=200;function Gq(e,t){var n=this.__data__;if(n instanceof Ho){var r=n.__data__;if(!cf||r.lengtha))return!1;var u=o.get(e),c=o.get(t);if(u&&c)return u==t&&c==e;var d=-1,f=!0,h=n&CK?new df:void 0;for(o.set(e,t),o.set(t,e);++d1),o}),mc(e,WR(e),n),r&&(n=Ad(n,AX|kX|RX,PX));for(var i=t.length;i--;)lO(n,t[i]);return n});const w0=OX;var MX=iO("length");const IX=MX;var uO="\\ud800-\\udfff",NX="\\u0300-\\u036f",DX="\\ufe20-\\ufe2f",LX="\\u20d0-\\u20ff",$X=NX+DX+LX,FX="\\ufe0e\\ufe0f",BX="["+uO+"]",M_="["+$X+"]",I_="\\ud83c[\\udffb-\\udfff]",jX="(?:"+M_+"|"+I_+")",cO="[^"+uO+"]",dO="(?:\\ud83c[\\udde6-\\uddff]){2}",fO="[\\ud800-\\udbff][\\udc00-\\udfff]",VX="\\u200d",hO=jX+"?",pO="["+FX+"]?",zX="(?:"+VX+"(?:"+[cO,dO,fO].join("|")+")"+pO+hO+")*",UX=pO+hO+zX,GX="(?:"+[cO+M_+"?",M_,dO,fO,BX].join("|")+")",q4=RegExp(I_+"(?="+I_+")|"+GX+UX,"g");function HX(e){for(var t=q4.lastIndex=0;q4.test(e);)++t;return t}function qX(e){return Ix(e)?HX(e):IX(e)}function WX(e,t,n,r,i){return i(e,function(o,s,a){n=r?(r=!1,o):t(n,o,s,a)}),n}function $x(e,t,n){var r=gn(e)?PR:WX,i=arguments.length<3;return r(e,v0(t),n,i,b0)}var KX="[object Map]",XX="[object Set]";function gO(e){if(e==null)return 0;if(yc(e))return xX(e)?qX(e):e.length;var t=Zu(e);return t==KX||t==XX?e.size:mR(e).length}function YX(e,t){var n;return b0(e,function(r,i,o){return n=t(r,i,o),!n}),!!n}function Pa(e,t,n){var r=gn(e)?JR:YX;return n&&uR(e,t,n)&&(t=void 0),r(e,v0(t))}var QX=$q(function(e,t,n){return e+(n?" ":"")+KH(t)});const ZX=QX;var JX=1/0,eY=ku&&1/Lx(new ku([,-0]))[1]==JX?function(e){return new ku(e)}:mU;const tY=eY;var nY=200;function mO(e,t,n){var r=-1,i=RU,o=e.length,s=!0,a=[],l=a;if(n)s=!1,i=vX;else if(o>=nY){var u=t?null:tY(e);if(u)return Lx(u);s=!1,i=eO,l=new df}else l=t?[]:a;e:for(;++r{EX(e,t.payload)}}}),{configChanged:sY}=vO.actions,aY=vO.reducer,_we={"sd-1":"Stable Diffusion 1.x","sd-2":"Stable Diffusion 2.x",sdxl:"Stable Diffusion XL","sdxl-refiner":"Stable Diffusion XL Refiner"},wwe={"sd-1":"SD1","sd-2":"SD2",sdxl:"SDXL","sdxl-refiner":"SDXLR"},lY={"sd-1":{maxClip:12,markers:[0,1,2,3,4,8,12]},"sd-2":{maxClip:24,markers:[0,1,2,3,5,10,15,20,24]},sdxl:{maxClip:24,markers:[0,1,2,3,5,10,15,20,24]},"sdxl-refiner":{maxClip:24,markers:[0,1,2,3,5,10,15,20,24]}},xwe={lycoris:"LyCORIS",diffusers:"Diffusers"},Cwe=0,uY=4294967295;var Ve;(function(e){e.assertEqual=i=>i;function t(i){}e.assertIs=t;function n(i){throw new Error}e.assertNever=n,e.arrayToEnum=i=>{const o={};for(const s of i)o[s]=s;return o},e.getValidEnumValues=i=>{const o=e.objectKeys(i).filter(a=>typeof i[i[a]]!="number"),s={};for(const a of o)s[a]=i[a];return e.objectValues(s)},e.objectValues=i=>e.objectKeys(i).map(function(o){return i[o]}),e.objectKeys=typeof Object.keys=="function"?i=>Object.keys(i):i=>{const o=[];for(const s in i)Object.prototype.hasOwnProperty.call(i,s)&&o.push(s);return o},e.find=(i,o)=>{for(const s of i)if(o(s))return s},e.isInteger=typeof Number.isInteger=="function"?i=>Number.isInteger(i):i=>typeof i=="number"&&isFinite(i)&&Math.floor(i)===i;function r(i,o=" | "){return i.map(s=>typeof s=="string"?`'${s}'`:s).join(o)}e.joinValues=r,e.jsonStringifyReplacer=(i,o)=>typeof o=="bigint"?o.toString():o})(Ve||(Ve={}));var N_;(function(e){e.mergeShapes=(t,n)=>({...t,...n})})(N_||(N_={}));const re=Ve.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),ms=e=>{switch(typeof e){case"undefined":return re.undefined;case"string":return re.string;case"number":return isNaN(e)?re.nan:re.number;case"boolean":return re.boolean;case"function":return re.function;case"bigint":return re.bigint;case"symbol":return re.symbol;case"object":return Array.isArray(e)?re.array:e===null?re.null:e.then&&typeof e.then=="function"&&e.catch&&typeof e.catch=="function"?re.promise:typeof Map<"u"&&e instanceof Map?re.map:typeof Set<"u"&&e instanceof Set?re.set:typeof Date<"u"&&e instanceof Date?re.date:re.object;default:return re.unknown}},ee=Ve.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),cY=e=>JSON.stringify(e,null,2).replace(/"([^"]+)":/g,"$1:");class bi extends Error{constructor(t){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};const n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=t}get errors(){return this.issues}format(t){const n=t||function(o){return o.message},r={_errors:[]},i=o=>{for(const s of o.issues)if(s.code==="invalid_union")s.unionErrors.map(i);else if(s.code==="invalid_return_type")i(s.returnTypeError);else if(s.code==="invalid_arguments")i(s.argumentsError);else if(s.path.length===0)r._errors.push(n(s));else{let a=r,l=0;for(;ln.message){const n={},r=[];for(const i of this.issues)i.path.length>0?(n[i.path[0]]=n[i.path[0]]||[],n[i.path[0]].push(t(i))):r.push(t(i));return{formErrors:r,fieldErrors:n}}get formErrors(){return this.flatten()}}bi.create=e=>new bi(e);const ff=(e,t)=>{let n;switch(e.code){case ee.invalid_type:e.received===re.undefined?n="Required":n=`Expected ${e.expected}, received ${e.received}`;break;case ee.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(e.expected,Ve.jsonStringifyReplacer)}`;break;case ee.unrecognized_keys:n=`Unrecognized key(s) in object: ${Ve.joinValues(e.keys,", ")}`;break;case ee.invalid_union:n="Invalid input";break;case ee.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${Ve.joinValues(e.options)}`;break;case ee.invalid_enum_value:n=`Invalid enum value. Expected ${Ve.joinValues(e.options)}, received '${e.received}'`;break;case ee.invalid_arguments:n="Invalid function arguments";break;case ee.invalid_return_type:n="Invalid function return type";break;case ee.invalid_date:n="Invalid date";break;case ee.invalid_string:typeof e.validation=="object"?"includes"in e.validation?(n=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${e.validation.position}`)):"startsWith"in e.validation?n=`Invalid input: must start with "${e.validation.startsWith}"`:"endsWith"in e.validation?n=`Invalid input: must end with "${e.validation.endsWith}"`:Ve.assertNever(e.validation):e.validation!=="regex"?n=`Invalid ${e.validation}`:n="Invalid";break;case ee.too_small:e.type==="array"?n=`Array must contain ${e.exact?"exactly":e.inclusive?"at least":"more than"} ${e.minimum} element(s)`:e.type==="string"?n=`String must contain ${e.exact?"exactly":e.inclusive?"at least":"over"} ${e.minimum} character(s)`:e.type==="number"?n=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="date"?n=`Date must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(e.minimum))}`:n="Invalid input";break;case ee.too_big:e.type==="array"?n=`Array must contain ${e.exact?"exactly":e.inclusive?"at most":"less than"} ${e.maximum} element(s)`:e.type==="string"?n=`String must contain ${e.exact?"exactly":e.inclusive?"at most":"under"} ${e.maximum} character(s)`:e.type==="number"?n=`Number must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="bigint"?n=`BigInt must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="date"?n=`Date must be ${e.exact?"exactly":e.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(e.maximum))}`:n="Invalid input";break;case ee.custom:n="Invalid input";break;case ee.invalid_intersection_types:n="Intersection results could not be merged";break;case ee.not_multiple_of:n=`Number must be a multiple of ${e.multipleOf}`;break;case ee.not_finite:n="Number must be finite";break;default:n=t.defaultError,Ve.assertNever(e)}return{message:n}};let bO=ff;function dY(e){bO=e}function gm(){return bO}const mm=e=>{const{data:t,path:n,errorMaps:r,issueData:i}=e,o=[...n,...i.path||[]],s={...i,path:o};let a="";const l=r.filter(u=>!!u).slice().reverse();for(const u of l)a=u(s,{data:t,defaultError:a}).message;return{...i,path:o,message:i.message||a}},fY=[];function oe(e,t){const n=mm({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,gm(),ff].filter(r=>!!r)});e.common.issues.push(n)}class jn{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(t,n){const r=[];for(const i of n){if(i.status==="aborted")return be;i.status==="dirty"&&t.dirty(),r.push(i.value)}return{status:t.value,value:r}}static async mergeObjectAsync(t,n){const r=[];for(const i of n)r.push({key:await i.key,value:await i.value});return jn.mergeObjectSync(t,r)}static mergeObjectSync(t,n){const r={};for(const i of n){const{key:o,value:s}=i;if(o.status==="aborted"||s.status==="aborted")return be;o.status==="dirty"&&t.dirty(),s.status==="dirty"&&t.dirty(),(typeof s.value<"u"||i.alwaysSet)&&(r[o.value]=s.value)}return{status:t.value,value:r}}}const be=Object.freeze({status:"aborted"}),SO=e=>({status:"dirty",value:e}),tr=e=>({status:"valid",value:e}),D_=e=>e.status==="aborted",L_=e=>e.status==="dirty",ym=e=>e.status==="valid",vm=e=>typeof Promise<"u"&&e instanceof Promise;var ge;(function(e){e.errToObj=t=>typeof t=="string"?{message:t}:t||{},e.toString=t=>typeof t=="string"?t:t==null?void 0:t.message})(ge||(ge={}));class eo{constructor(t,n,r,i){this._cachedPath=[],this.parent=t,this.data=n,this._path=r,this._key=i}get path(){return this._cachedPath.length||(this._key instanceof Array?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}}const W4=(e,t)=>{if(ym(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;const n=new bi(e.common.issues);return this._error=n,this._error}}};function we(e){if(!e)return{};const{errorMap:t,invalid_type_error:n,required_error:r,description:i}=e;if(t&&(n||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return t?{errorMap:t,description:i}:{errorMap:(s,a)=>s.code!=="invalid_type"?{message:a.defaultError}:typeof a.data>"u"?{message:r??a.defaultError}:{message:n??a.defaultError},description:i}}class Ce{constructor(t){this.spa=this.safeParseAsync,this._def=t,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this)}get description(){return this._def.description}_getType(t){return ms(t.data)}_getOrReturnCtx(t,n){return n||{common:t.parent.common,data:t.data,parsedType:ms(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}_processInputParams(t){return{status:new jn,ctx:{common:t.parent.common,data:t.data,parsedType:ms(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}}_parseSync(t){const n=this._parse(t);if(vm(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(t){const n=this._parse(t);return Promise.resolve(n)}parse(t,n){const r=this.safeParse(t,n);if(r.success)return r.data;throw r.error}safeParse(t,n){var r;const i={common:{issues:[],async:(r=n==null?void 0:n.async)!==null&&r!==void 0?r:!1,contextualErrorMap:n==null?void 0:n.errorMap},path:(n==null?void 0:n.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:ms(t)},o=this._parseSync({data:t,path:i.path,parent:i});return W4(i,o)}async parseAsync(t,n){const r=await this.safeParseAsync(t,n);if(r.success)return r.data;throw r.error}async safeParseAsync(t,n){const r={common:{issues:[],contextualErrorMap:n==null?void 0:n.errorMap,async:!0},path:(n==null?void 0:n.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:ms(t)},i=this._parse({data:t,path:r.path,parent:r}),o=await(vm(i)?i:Promise.resolve(i));return W4(r,o)}refine(t,n){const r=i=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(i):n;return this._refinement((i,o)=>{const s=t(i),a=()=>o.addIssue({code:ee.custom,...r(i)});return typeof Promise<"u"&&s instanceof Promise?s.then(l=>l?!0:(a(),!1)):s?!0:(a(),!1)})}refinement(t,n){return this._refinement((r,i)=>t(r)?!0:(i.addIssue(typeof n=="function"?n(r,i):n),!1))}_refinement(t){return new Ti({schema:this,typeName:ye.ZodEffects,effect:{type:"refinement",refinement:t}})}superRefine(t){return this._refinement(t)}optional(){return Ro.create(this,this._def)}nullable(){return tl.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return Si.create(this,this._def)}promise(){return ec.create(this,this._def)}or(t){return mf.create([this,t],this._def)}and(t){return yf.create(this,t,this._def)}transform(t){return new Ti({...we(this._def),schema:this,typeName:ye.ZodEffects,effect:{type:"transform",transform:t}})}default(t){const n=typeof t=="function"?t:()=>t;return new wf({...we(this._def),innerType:this,defaultValue:n,typeName:ye.ZodDefault})}brand(){return new wO({typeName:ye.ZodBranded,type:this,...we(this._def)})}catch(t){const n=typeof t=="function"?t:()=>t;return new wm({...we(this._def),innerType:this,catchValue:n,typeName:ye.ZodCatch})}describe(t){const n=this.constructor;return new n({...this._def,description:t})}pipe(t){return mh.create(this,t)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}const hY=/^c[^\s-]{8,}$/i,pY=/^[a-z][a-z0-9]*$/,gY=/[0-9A-HJKMNP-TV-Z]{26}/,mY=/^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i,yY=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\])|(\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\.[A-Za-z]{2,})+))$/,vY=/^(\p{Extended_Pictographic}|\p{Emoji_Component})+$/u,bY=/^(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))$/,SY=/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,_Y=e=>e.precision?e.offset?new RegExp(`^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{${e.precision}}(([+-]\\d{2}(:?\\d{2})?)|Z)$`):new RegExp(`^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{${e.precision}}Z$`):e.precision===0?e.offset?new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(([+-]\\d{2}(:?\\d{2})?)|Z)$"):new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$"):e.offset?new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(([+-]\\d{2}(:?\\d{2})?)|Z)$"):new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?Z$");function wY(e,t){return!!((t==="v4"||!t)&&bY.test(e)||(t==="v6"||!t)&&SY.test(e))}class pi extends Ce{constructor(){super(...arguments),this._regex=(t,n,r)=>this.refinement(i=>t.test(i),{validation:n,code:ee.invalid_string,...ge.errToObj(r)}),this.nonempty=t=>this.min(1,ge.errToObj(t)),this.trim=()=>new pi({...this._def,checks:[...this._def.checks,{kind:"trim"}]}),this.toLowerCase=()=>new pi({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]}),this.toUpperCase=()=>new pi({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}_parse(t){if(this._def.coerce&&(t.data=String(t.data)),this._getType(t)!==re.string){const o=this._getOrReturnCtx(t);return oe(o,{code:ee.invalid_type,expected:re.string,received:o.parsedType}),be}const r=new jn;let i;for(const o of this._def.checks)if(o.kind==="min")t.data.lengtho.value&&(i=this._getOrReturnCtx(t,i),oe(i,{code:ee.too_big,maximum:o.value,type:"string",inclusive:!0,exact:!1,message:o.message}),r.dirty());else if(o.kind==="length"){const s=t.data.length>o.value,a=t.data.length"u"?null:t==null?void 0:t.precision,offset:(n=t==null?void 0:t.offset)!==null&&n!==void 0?n:!1,...ge.errToObj(t==null?void 0:t.message)})}regex(t,n){return this._addCheck({kind:"regex",regex:t,...ge.errToObj(n)})}includes(t,n){return this._addCheck({kind:"includes",value:t,position:n==null?void 0:n.position,...ge.errToObj(n==null?void 0:n.message)})}startsWith(t,n){return this._addCheck({kind:"startsWith",value:t,...ge.errToObj(n)})}endsWith(t,n){return this._addCheck({kind:"endsWith",value:t,...ge.errToObj(n)})}min(t,n){return this._addCheck({kind:"min",value:t,...ge.errToObj(n)})}max(t,n){return this._addCheck({kind:"max",value:t,...ge.errToObj(n)})}length(t,n){return this._addCheck({kind:"length",value:t,...ge.errToObj(n)})}get isDatetime(){return!!this._def.checks.find(t=>t.kind==="datetime")}get isEmail(){return!!this._def.checks.find(t=>t.kind==="email")}get isURL(){return!!this._def.checks.find(t=>t.kind==="url")}get isEmoji(){return!!this._def.checks.find(t=>t.kind==="emoji")}get isUUID(){return!!this._def.checks.find(t=>t.kind==="uuid")}get isCUID(){return!!this._def.checks.find(t=>t.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(t=>t.kind==="cuid2")}get isULID(){return!!this._def.checks.find(t=>t.kind==="ulid")}get isIP(){return!!this._def.checks.find(t=>t.kind==="ip")}get minLength(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxLength(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.value{var t;return new pi({checks:[],typeName:ye.ZodString,coerce:(t=e==null?void 0:e.coerce)!==null&&t!==void 0?t:!1,...we(e)})};function xY(e,t){const n=(e.toString().split(".")[1]||"").length,r=(t.toString().split(".")[1]||"").length,i=n>r?n:r,o=parseInt(e.toFixed(i).replace(".","")),s=parseInt(t.toFixed(i).replace(".",""));return o%s/Math.pow(10,i)}class zs extends Ce{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(t){if(this._def.coerce&&(t.data=Number(t.data)),this._getType(t)!==re.number){const o=this._getOrReturnCtx(t);return oe(o,{code:ee.invalid_type,expected:re.number,received:o.parsedType}),be}let r;const i=new jn;for(const o of this._def.checks)o.kind==="int"?Ve.isInteger(t.data)||(r=this._getOrReturnCtx(t,r),oe(r,{code:ee.invalid_type,expected:"integer",received:"float",message:o.message}),i.dirty()):o.kind==="min"?(o.inclusive?t.datao.value:t.data>=o.value)&&(r=this._getOrReturnCtx(t,r),oe(r,{code:ee.too_big,maximum:o.value,type:"number",inclusive:o.inclusive,exact:!1,message:o.message}),i.dirty()):o.kind==="multipleOf"?xY(t.data,o.value)!==0&&(r=this._getOrReturnCtx(t,r),oe(r,{code:ee.not_multiple_of,multipleOf:o.value,message:o.message}),i.dirty()):o.kind==="finite"?Number.isFinite(t.data)||(r=this._getOrReturnCtx(t,r),oe(r,{code:ee.not_finite,message:o.message}),i.dirty()):Ve.assertNever(o);return{status:i.value,value:t.data}}gte(t,n){return this.setLimit("min",t,!0,ge.toString(n))}gt(t,n){return this.setLimit("min",t,!1,ge.toString(n))}lte(t,n){return this.setLimit("max",t,!0,ge.toString(n))}lt(t,n){return this.setLimit("max",t,!1,ge.toString(n))}setLimit(t,n,r,i){return new zs({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:ge.toString(i)}]})}_addCheck(t){return new zs({...this._def,checks:[...this._def.checks,t]})}int(t){return this._addCheck({kind:"int",message:ge.toString(t)})}positive(t){return this._addCheck({kind:"min",value:0,inclusive:!1,message:ge.toString(t)})}negative(t){return this._addCheck({kind:"max",value:0,inclusive:!1,message:ge.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:0,inclusive:!0,message:ge.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:0,inclusive:!0,message:ge.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:ge.toString(n)})}finite(t){return this._addCheck({kind:"finite",message:ge.toString(t)})}safe(t){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:ge.toString(t)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:ge.toString(t)})}get minValue(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.valuet.kind==="int"||t.kind==="multipleOf"&&Ve.isInteger(t.value))}get isFinite(){let t=null,n=null;for(const r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(n===null||r.value>n)&&(n=r.value):r.kind==="max"&&(t===null||r.valuenew zs({checks:[],typeName:ye.ZodNumber,coerce:(e==null?void 0:e.coerce)||!1,...we(e)});class Us extends Ce{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(t){if(this._def.coerce&&(t.data=BigInt(t.data)),this._getType(t)!==re.bigint){const o=this._getOrReturnCtx(t);return oe(o,{code:ee.invalid_type,expected:re.bigint,received:o.parsedType}),be}let r;const i=new jn;for(const o of this._def.checks)o.kind==="min"?(o.inclusive?t.datao.value:t.data>=o.value)&&(r=this._getOrReturnCtx(t,r),oe(r,{code:ee.too_big,type:"bigint",maximum:o.value,inclusive:o.inclusive,message:o.message}),i.dirty()):o.kind==="multipleOf"?t.data%o.value!==BigInt(0)&&(r=this._getOrReturnCtx(t,r),oe(r,{code:ee.not_multiple_of,multipleOf:o.value,message:o.message}),i.dirty()):Ve.assertNever(o);return{status:i.value,value:t.data}}gte(t,n){return this.setLimit("min",t,!0,ge.toString(n))}gt(t,n){return this.setLimit("min",t,!1,ge.toString(n))}lte(t,n){return this.setLimit("max",t,!0,ge.toString(n))}lt(t,n){return this.setLimit("max",t,!1,ge.toString(n))}setLimit(t,n,r,i){return new Us({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:ge.toString(i)}]})}_addCheck(t){return new Us({...this._def,checks:[...this._def.checks,t]})}positive(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:ge.toString(t)})}negative(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:ge.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:ge.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:ge.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:ge.toString(n)})}get minValue(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.value{var t;return new Us({checks:[],typeName:ye.ZodBigInt,coerce:(t=e==null?void 0:e.coerce)!==null&&t!==void 0?t:!1,...we(e)})};class hf extends Ce{_parse(t){if(this._def.coerce&&(t.data=!!t.data),this._getType(t)!==re.boolean){const r=this._getOrReturnCtx(t);return oe(r,{code:ee.invalid_type,expected:re.boolean,received:r.parsedType}),be}return tr(t.data)}}hf.create=e=>new hf({typeName:ye.ZodBoolean,coerce:(e==null?void 0:e.coerce)||!1,...we(e)});class Ja extends Ce{_parse(t){if(this._def.coerce&&(t.data=new Date(t.data)),this._getType(t)!==re.date){const o=this._getOrReturnCtx(t);return oe(o,{code:ee.invalid_type,expected:re.date,received:o.parsedType}),be}if(isNaN(t.data.getTime())){const o=this._getOrReturnCtx(t);return oe(o,{code:ee.invalid_date}),be}const r=new jn;let i;for(const o of this._def.checks)o.kind==="min"?t.data.getTime()o.value&&(i=this._getOrReturnCtx(t,i),oe(i,{code:ee.too_big,message:o.message,inclusive:!0,exact:!1,maximum:o.value,type:"date"}),r.dirty()):Ve.assertNever(o);return{status:r.value,value:new Date(t.data.getTime())}}_addCheck(t){return new Ja({...this._def,checks:[...this._def.checks,t]})}min(t,n){return this._addCheck({kind:"min",value:t.getTime(),message:ge.toString(n)})}max(t,n){return this._addCheck({kind:"max",value:t.getTime(),message:ge.toString(n)})}get minDate(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t!=null?new Date(t):null}get maxDate(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.valuenew Ja({checks:[],coerce:(e==null?void 0:e.coerce)||!1,typeName:ye.ZodDate,...we(e)});class bm extends Ce{_parse(t){if(this._getType(t)!==re.symbol){const r=this._getOrReturnCtx(t);return oe(r,{code:ee.invalid_type,expected:re.symbol,received:r.parsedType}),be}return tr(t.data)}}bm.create=e=>new bm({typeName:ye.ZodSymbol,...we(e)});class pf extends Ce{_parse(t){if(this._getType(t)!==re.undefined){const r=this._getOrReturnCtx(t);return oe(r,{code:ee.invalid_type,expected:re.undefined,received:r.parsedType}),be}return tr(t.data)}}pf.create=e=>new pf({typeName:ye.ZodUndefined,...we(e)});class gf extends Ce{_parse(t){if(this._getType(t)!==re.null){const r=this._getOrReturnCtx(t);return oe(r,{code:ee.invalid_type,expected:re.null,received:r.parsedType}),be}return tr(t.data)}}gf.create=e=>new gf({typeName:ye.ZodNull,...we(e)});class Ju extends Ce{constructor(){super(...arguments),this._any=!0}_parse(t){return tr(t.data)}}Ju.create=e=>new Ju({typeName:ye.ZodAny,...we(e)});class ja extends Ce{constructor(){super(...arguments),this._unknown=!0}_parse(t){return tr(t.data)}}ja.create=e=>new ja({typeName:ye.ZodUnknown,...we(e)});class Vo extends Ce{_parse(t){const n=this._getOrReturnCtx(t);return oe(n,{code:ee.invalid_type,expected:re.never,received:n.parsedType}),be}}Vo.create=e=>new Vo({typeName:ye.ZodNever,...we(e)});class Sm extends Ce{_parse(t){if(this._getType(t)!==re.undefined){const r=this._getOrReturnCtx(t);return oe(r,{code:ee.invalid_type,expected:re.void,received:r.parsedType}),be}return tr(t.data)}}Sm.create=e=>new Sm({typeName:ye.ZodVoid,...we(e)});class Si extends Ce{_parse(t){const{ctx:n,status:r}=this._processInputParams(t),i=this._def;if(n.parsedType!==re.array)return oe(n,{code:ee.invalid_type,expected:re.array,received:n.parsedType}),be;if(i.exactLength!==null){const s=n.data.length>i.exactLength.value,a=n.data.lengthi.maxLength.value&&(oe(n,{code:ee.too_big,maximum:i.maxLength.value,type:"array",inclusive:!0,exact:!1,message:i.maxLength.message}),r.dirty()),n.common.async)return Promise.all([...n.data].map((s,a)=>i.type._parseAsync(new eo(n,s,n.path,a)))).then(s=>jn.mergeArray(r,s));const o=[...n.data].map((s,a)=>i.type._parseSync(new eo(n,s,n.path,a)));return jn.mergeArray(r,o)}get element(){return this._def.type}min(t,n){return new Si({...this._def,minLength:{value:t,message:ge.toString(n)}})}max(t,n){return new Si({...this._def,maxLength:{value:t,message:ge.toString(n)}})}length(t,n){return new Si({...this._def,exactLength:{value:t,message:ge.toString(n)}})}nonempty(t){return this.min(1,t)}}Si.create=(e,t)=>new Si({type:e,minLength:null,maxLength:null,exactLength:null,typeName:ye.ZodArray,...we(t)});function Kl(e){if(e instanceof Tt){const t={};for(const n in e.shape){const r=e.shape[n];t[n]=Ro.create(Kl(r))}return new Tt({...e._def,shape:()=>t})}else return e instanceof Si?new Si({...e._def,type:Kl(e.element)}):e instanceof Ro?Ro.create(Kl(e.unwrap())):e instanceof tl?tl.create(Kl(e.unwrap())):e instanceof to?to.create(e.items.map(t=>Kl(t))):e}class Tt extends Ce{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;const t=this._def.shape(),n=Ve.objectKeys(t);return this._cached={shape:t,keys:n}}_parse(t){if(this._getType(t)!==re.object){const u=this._getOrReturnCtx(t);return oe(u,{code:ee.invalid_type,expected:re.object,received:u.parsedType}),be}const{status:r,ctx:i}=this._processInputParams(t),{shape:o,keys:s}=this._getCached(),a=[];if(!(this._def.catchall instanceof Vo&&this._def.unknownKeys==="strip"))for(const u in i.data)s.includes(u)||a.push(u);const l=[];for(const u of s){const c=o[u],d=i.data[u];l.push({key:{status:"valid",value:u},value:c._parse(new eo(i,d,i.path,u)),alwaysSet:u in i.data})}if(this._def.catchall instanceof Vo){const u=this._def.unknownKeys;if(u==="passthrough")for(const c of a)l.push({key:{status:"valid",value:c},value:{status:"valid",value:i.data[c]}});else if(u==="strict")a.length>0&&(oe(i,{code:ee.unrecognized_keys,keys:a}),r.dirty());else if(u!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{const u=this._def.catchall;for(const c of a){const d=i.data[c];l.push({key:{status:"valid",value:c},value:u._parse(new eo(i,d,i.path,c)),alwaysSet:c in i.data})}}return i.common.async?Promise.resolve().then(async()=>{const u=[];for(const c of l){const d=await c.key;u.push({key:d,value:await c.value,alwaysSet:c.alwaysSet})}return u}).then(u=>jn.mergeObjectSync(r,u)):jn.mergeObjectSync(r,l)}get shape(){return this._def.shape()}strict(t){return ge.errToObj,new Tt({...this._def,unknownKeys:"strict",...t!==void 0?{errorMap:(n,r)=>{var i,o,s,a;const l=(s=(o=(i=this._def).errorMap)===null||o===void 0?void 0:o.call(i,n,r).message)!==null&&s!==void 0?s:r.defaultError;return n.code==="unrecognized_keys"?{message:(a=ge.errToObj(t).message)!==null&&a!==void 0?a:l}:{message:l}}}:{}})}strip(){return new Tt({...this._def,unknownKeys:"strip"})}passthrough(){return new Tt({...this._def,unknownKeys:"passthrough"})}extend(t){return new Tt({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new Tt({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:ye.ZodObject})}setKey(t,n){return this.augment({[t]:n})}catchall(t){return new Tt({...this._def,catchall:t})}pick(t){const n={};return Ve.objectKeys(t).forEach(r=>{t[r]&&this.shape[r]&&(n[r]=this.shape[r])}),new Tt({...this._def,shape:()=>n})}omit(t){const n={};return Ve.objectKeys(this.shape).forEach(r=>{t[r]||(n[r]=this.shape[r])}),new Tt({...this._def,shape:()=>n})}deepPartial(){return Kl(this)}partial(t){const n={};return Ve.objectKeys(this.shape).forEach(r=>{const i=this.shape[r];t&&!t[r]?n[r]=i:n[r]=i.optional()}),new Tt({...this._def,shape:()=>n})}required(t){const n={};return Ve.objectKeys(this.shape).forEach(r=>{if(t&&!t[r])n[r]=this.shape[r];else{let o=this.shape[r];for(;o instanceof Ro;)o=o._def.innerType;n[r]=o}}),new Tt({...this._def,shape:()=>n})}keyof(){return _O(Ve.objectKeys(this.shape))}}Tt.create=(e,t)=>new Tt({shape:()=>e,unknownKeys:"strip",catchall:Vo.create(),typeName:ye.ZodObject,...we(t)});Tt.strictCreate=(e,t)=>new Tt({shape:()=>e,unknownKeys:"strict",catchall:Vo.create(),typeName:ye.ZodObject,...we(t)});Tt.lazycreate=(e,t)=>new Tt({shape:e,unknownKeys:"strip",catchall:Vo.create(),typeName:ye.ZodObject,...we(t)});class mf extends Ce{_parse(t){const{ctx:n}=this._processInputParams(t),r=this._def.options;function i(o){for(const a of o)if(a.result.status==="valid")return a.result;for(const a of o)if(a.result.status==="dirty")return n.common.issues.push(...a.ctx.common.issues),a.result;const s=o.map(a=>new bi(a.ctx.common.issues));return oe(n,{code:ee.invalid_union,unionErrors:s}),be}if(n.common.async)return Promise.all(r.map(async o=>{const s={...n,common:{...n.common,issues:[]},parent:null};return{result:await o._parseAsync({data:n.data,path:n.path,parent:s}),ctx:s}})).then(i);{let o;const s=[];for(const l of r){const u={...n,common:{...n.common,issues:[]},parent:null},c=l._parseSync({data:n.data,path:n.path,parent:u});if(c.status==="valid")return c;c.status==="dirty"&&!o&&(o={result:c,ctx:u}),u.common.issues.length&&s.push(u.common.issues)}if(o)return n.common.issues.push(...o.ctx.common.issues),o.result;const a=s.map(l=>new bi(l));return oe(n,{code:ee.invalid_union,unionErrors:a}),be}}get options(){return this._def.options}}mf.create=(e,t)=>new mf({options:e,typeName:ye.ZodUnion,...we(t)});const dg=e=>e instanceof bf?dg(e.schema):e instanceof Ti?dg(e.innerType()):e instanceof Sf?[e.value]:e instanceof Gs?e.options:e instanceof _f?Object.keys(e.enum):e instanceof wf?dg(e._def.innerType):e instanceof pf?[void 0]:e instanceof gf?[null]:null;class x0 extends Ce{_parse(t){const{ctx:n}=this._processInputParams(t);if(n.parsedType!==re.object)return oe(n,{code:ee.invalid_type,expected:re.object,received:n.parsedType}),be;const r=this.discriminator,i=n.data[r],o=this.optionsMap.get(i);return o?n.common.async?o._parseAsync({data:n.data,path:n.path,parent:n}):o._parseSync({data:n.data,path:n.path,parent:n}):(oe(n,{code:ee.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),be)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(t,n,r){const i=new Map;for(const o of n){const s=dg(o.shape[t]);if(!s)throw new Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(const a of s){if(i.has(a))throw new Error(`Discriminator property ${String(t)} has duplicate value ${String(a)}`);i.set(a,o)}}return new x0({typeName:ye.ZodDiscriminatedUnion,discriminator:t,options:n,optionsMap:i,...we(r)})}}function $_(e,t){const n=ms(e),r=ms(t);if(e===t)return{valid:!0,data:e};if(n===re.object&&r===re.object){const i=Ve.objectKeys(t),o=Ve.objectKeys(e).filter(a=>i.indexOf(a)!==-1),s={...e,...t};for(const a of o){const l=$_(e[a],t[a]);if(!l.valid)return{valid:!1};s[a]=l.data}return{valid:!0,data:s}}else if(n===re.array&&r===re.array){if(e.length!==t.length)return{valid:!1};const i=[];for(let o=0;o{if(D_(o)||D_(s))return be;const a=$_(o.value,s.value);return a.valid?((L_(o)||L_(s))&&n.dirty(),{status:n.value,value:a.data}):(oe(r,{code:ee.invalid_intersection_types}),be)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([o,s])=>i(o,s)):i(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}}yf.create=(e,t,n)=>new yf({left:e,right:t,typeName:ye.ZodIntersection,...we(n)});class to extends Ce{_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==re.array)return oe(r,{code:ee.invalid_type,expected:re.array,received:r.parsedType}),be;if(r.data.lengththis._def.items.length&&(oe(r,{code:ee.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),n.dirty());const o=[...r.data].map((s,a)=>{const l=this._def.items[a]||this._def.rest;return l?l._parse(new eo(r,s,r.path,a)):null}).filter(s=>!!s);return r.common.async?Promise.all(o).then(s=>jn.mergeArray(n,s)):jn.mergeArray(n,o)}get items(){return this._def.items}rest(t){return new to({...this._def,rest:t})}}to.create=(e,t)=>{if(!Array.isArray(e))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new to({items:e,typeName:ye.ZodTuple,rest:null,...we(t)})};class vf extends Ce{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==re.object)return oe(r,{code:ee.invalid_type,expected:re.object,received:r.parsedType}),be;const i=[],o=this._def.keyType,s=this._def.valueType;for(const a in r.data)i.push({key:o._parse(new eo(r,a,r.path,a)),value:s._parse(new eo(r,r.data[a],r.path,a))});return r.common.async?jn.mergeObjectAsync(n,i):jn.mergeObjectSync(n,i)}get element(){return this._def.valueType}static create(t,n,r){return n instanceof Ce?new vf({keyType:t,valueType:n,typeName:ye.ZodRecord,...we(r)}):new vf({keyType:pi.create(),valueType:t,typeName:ye.ZodRecord,...we(n)})}}class _m extends Ce{_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==re.map)return oe(r,{code:ee.invalid_type,expected:re.map,received:r.parsedType}),be;const i=this._def.keyType,o=this._def.valueType,s=[...r.data.entries()].map(([a,l],u)=>({key:i._parse(new eo(r,a,r.path,[u,"key"])),value:o._parse(new eo(r,l,r.path,[u,"value"]))}));if(r.common.async){const a=new Map;return Promise.resolve().then(async()=>{for(const l of s){const u=await l.key,c=await l.value;if(u.status==="aborted"||c.status==="aborted")return be;(u.status==="dirty"||c.status==="dirty")&&n.dirty(),a.set(u.value,c.value)}return{status:n.value,value:a}})}else{const a=new Map;for(const l of s){const u=l.key,c=l.value;if(u.status==="aborted"||c.status==="aborted")return be;(u.status==="dirty"||c.status==="dirty")&&n.dirty(),a.set(u.value,c.value)}return{status:n.value,value:a}}}}_m.create=(e,t,n)=>new _m({valueType:t,keyType:e,typeName:ye.ZodMap,...we(n)});class el extends Ce{_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==re.set)return oe(r,{code:ee.invalid_type,expected:re.set,received:r.parsedType}),be;const i=this._def;i.minSize!==null&&r.data.sizei.maxSize.value&&(oe(r,{code:ee.too_big,maximum:i.maxSize.value,type:"set",inclusive:!0,exact:!1,message:i.maxSize.message}),n.dirty());const o=this._def.valueType;function s(l){const u=new Set;for(const c of l){if(c.status==="aborted")return be;c.status==="dirty"&&n.dirty(),u.add(c.value)}return{status:n.value,value:u}}const a=[...r.data.values()].map((l,u)=>o._parse(new eo(r,l,r.path,u)));return r.common.async?Promise.all(a).then(l=>s(l)):s(a)}min(t,n){return new el({...this._def,minSize:{value:t,message:ge.toString(n)}})}max(t,n){return new el({...this._def,maxSize:{value:t,message:ge.toString(n)}})}size(t,n){return this.min(t,n).max(t,n)}nonempty(t){return this.min(1,t)}}el.create=(e,t)=>new el({valueType:e,minSize:null,maxSize:null,typeName:ye.ZodSet,...we(t)});class Ru extends Ce{constructor(){super(...arguments),this.validate=this.implement}_parse(t){const{ctx:n}=this._processInputParams(t);if(n.parsedType!==re.function)return oe(n,{code:ee.invalid_type,expected:re.function,received:n.parsedType}),be;function r(a,l){return mm({data:a,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,gm(),ff].filter(u=>!!u),issueData:{code:ee.invalid_arguments,argumentsError:l}})}function i(a,l){return mm({data:a,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,gm(),ff].filter(u=>!!u),issueData:{code:ee.invalid_return_type,returnTypeError:l}})}const o={errorMap:n.common.contextualErrorMap},s=n.data;return this._def.returns instanceof ec?tr(async(...a)=>{const l=new bi([]),u=await this._def.args.parseAsync(a,o).catch(f=>{throw l.addIssue(r(a,f)),l}),c=await s(...u);return await this._def.returns._def.type.parseAsync(c,o).catch(f=>{throw l.addIssue(i(c,f)),l})}):tr((...a)=>{const l=this._def.args.safeParse(a,o);if(!l.success)throw new bi([r(a,l.error)]);const u=s(...l.data),c=this._def.returns.safeParse(u,o);if(!c.success)throw new bi([i(u,c.error)]);return c.data})}parameters(){return this._def.args}returnType(){return this._def.returns}args(...t){return new Ru({...this._def,args:to.create(t).rest(ja.create())})}returns(t){return new Ru({...this._def,returns:t})}implement(t){return this.parse(t)}strictImplement(t){return this.parse(t)}static create(t,n,r){return new Ru({args:t||to.create([]).rest(ja.create()),returns:n||ja.create(),typeName:ye.ZodFunction,...we(r)})}}class bf extends Ce{get schema(){return this._def.getter()}_parse(t){const{ctx:n}=this._processInputParams(t);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}}bf.create=(e,t)=>new bf({getter:e,typeName:ye.ZodLazy,...we(t)});class Sf extends Ce{_parse(t){if(t.data!==this._def.value){const n=this._getOrReturnCtx(t);return oe(n,{received:n.data,code:ee.invalid_literal,expected:this._def.value}),be}return{status:"valid",value:t.data}}get value(){return this._def.value}}Sf.create=(e,t)=>new Sf({value:e,typeName:ye.ZodLiteral,...we(t)});function _O(e,t){return new Gs({values:e,typeName:ye.ZodEnum,...we(t)})}class Gs extends Ce{_parse(t){if(typeof t.data!="string"){const n=this._getOrReturnCtx(t),r=this._def.values;return oe(n,{expected:Ve.joinValues(r),received:n.parsedType,code:ee.invalid_type}),be}if(this._def.values.indexOf(t.data)===-1){const n=this._getOrReturnCtx(t),r=this._def.values;return oe(n,{received:n.data,code:ee.invalid_enum_value,options:r}),be}return tr(t.data)}get options(){return this._def.values}get enum(){const t={};for(const n of this._def.values)t[n]=n;return t}get Values(){const t={};for(const n of this._def.values)t[n]=n;return t}get Enum(){const t={};for(const n of this._def.values)t[n]=n;return t}extract(t){return Gs.create(t)}exclude(t){return Gs.create(this.options.filter(n=>!t.includes(n)))}}Gs.create=_O;class _f extends Ce{_parse(t){const n=Ve.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(t);if(r.parsedType!==re.string&&r.parsedType!==re.number){const i=Ve.objectValues(n);return oe(r,{expected:Ve.joinValues(i),received:r.parsedType,code:ee.invalid_type}),be}if(n.indexOf(t.data)===-1){const i=Ve.objectValues(n);return oe(r,{received:r.data,code:ee.invalid_enum_value,options:i}),be}return tr(t.data)}get enum(){return this._def.values}}_f.create=(e,t)=>new _f({values:e,typeName:ye.ZodNativeEnum,...we(t)});class ec extends Ce{unwrap(){return this._def.type}_parse(t){const{ctx:n}=this._processInputParams(t);if(n.parsedType!==re.promise&&n.common.async===!1)return oe(n,{code:ee.invalid_type,expected:re.promise,received:n.parsedType}),be;const r=n.parsedType===re.promise?n.data:Promise.resolve(n.data);return tr(r.then(i=>this._def.type.parseAsync(i,{path:n.path,errorMap:n.common.contextualErrorMap})))}}ec.create=(e,t)=>new ec({type:e,typeName:ye.ZodPromise,...we(t)});class Ti extends Ce{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===ye.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(t){const{status:n,ctx:r}=this._processInputParams(t),i=this._def.effect||null;if(i.type==="preprocess"){const s=i.transform(r.data);return r.common.async?Promise.resolve(s).then(a=>this._def.schema._parseAsync({data:a,path:r.path,parent:r})):this._def.schema._parseSync({data:s,path:r.path,parent:r})}const o={addIssue:s=>{oe(r,s),s.fatal?n.abort():n.dirty()},get path(){return r.path}};if(o.addIssue=o.addIssue.bind(o),i.type==="refinement"){const s=a=>{const l=i.refinement(a,o);if(r.common.async)return Promise.resolve(l);if(l instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return a};if(r.common.async===!1){const a=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return a.status==="aborted"?be:(a.status==="dirty"&&n.dirty(),s(a.value),{status:n.value,value:a.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(a=>a.status==="aborted"?be:(a.status==="dirty"&&n.dirty(),s(a.value).then(()=>({status:n.value,value:a.value}))))}if(i.type==="transform")if(r.common.async===!1){const s=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!ym(s))return s;const a=i.transform(s.value,o);if(a instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:n.value,value:a}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(s=>ym(s)?Promise.resolve(i.transform(s.value,o)).then(a=>({status:n.value,value:a})):s);Ve.assertNever(i)}}Ti.create=(e,t,n)=>new Ti({schema:e,typeName:ye.ZodEffects,effect:t,...we(n)});Ti.createWithPreprocess=(e,t,n)=>new Ti({schema:t,effect:{type:"preprocess",transform:e},typeName:ye.ZodEffects,...we(n)});class Ro extends Ce{_parse(t){return this._getType(t)===re.undefined?tr(void 0):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}}Ro.create=(e,t)=>new Ro({innerType:e,typeName:ye.ZodOptional,...we(t)});class tl extends Ce{_parse(t){return this._getType(t)===re.null?tr(null):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}}tl.create=(e,t)=>new tl({innerType:e,typeName:ye.ZodNullable,...we(t)});class wf extends Ce{_parse(t){const{ctx:n}=this._processInputParams(t);let r=n.data;return n.parsedType===re.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:n.path,parent:n})}removeDefault(){return this._def.innerType}}wf.create=(e,t)=>new wf({innerType:e,typeName:ye.ZodDefault,defaultValue:typeof t.default=="function"?t.default:()=>t.default,...we(t)});class wm extends Ce{_parse(t){const{ctx:n}=this._processInputParams(t),r={...n,common:{...n.common,issues:[]}},i=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return vm(i)?i.then(o=>({status:"valid",value:o.status==="valid"?o.value:this._def.catchValue({get error(){return new bi(r.common.issues)},input:r.data})})):{status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new bi(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}}wm.create=(e,t)=>new wm({innerType:e,typeName:ye.ZodCatch,catchValue:typeof t.catch=="function"?t.catch:()=>t.catch,...we(t)});class xm extends Ce{_parse(t){if(this._getType(t)!==re.nan){const r=this._getOrReturnCtx(t);return oe(r,{code:ee.invalid_type,expected:re.nan,received:r.parsedType}),be}return{status:"valid",value:t.data}}}xm.create=e=>new xm({typeName:ye.ZodNaN,...we(e)});const CY=Symbol("zod_brand");class wO extends Ce{_parse(t){const{ctx:n}=this._processInputParams(t),r=n.data;return this._def.type._parse({data:r,path:n.path,parent:n})}unwrap(){return this._def.type}}class mh extends Ce{_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.common.async)return(async()=>{const o=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return o.status==="aborted"?be:o.status==="dirty"?(n.dirty(),SO(o.value)):this._def.out._parseAsync({data:o.value,path:r.path,parent:r})})();{const i=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?be:i.status==="dirty"?(n.dirty(),{status:"dirty",value:i.value}):this._def.out._parseSync({data:i.value,path:r.path,parent:r})}}static create(t,n){return new mh({in:t,out:n,typeName:ye.ZodPipeline})}}const xO=(e,t={},n)=>e?Ju.create().superRefine((r,i)=>{var o,s;if(!e(r)){const a=typeof t=="function"?t(r):typeof t=="string"?{message:t}:t,l=(s=(o=a.fatal)!==null&&o!==void 0?o:n)!==null&&s!==void 0?s:!0,u=typeof a=="string"?{message:a}:a;i.addIssue({code:"custom",...u,fatal:l})}}):Ju.create(),TY={object:Tt.lazycreate};var ye;(function(e){e.ZodString="ZodString",e.ZodNumber="ZodNumber",e.ZodNaN="ZodNaN",e.ZodBigInt="ZodBigInt",e.ZodBoolean="ZodBoolean",e.ZodDate="ZodDate",e.ZodSymbol="ZodSymbol",e.ZodUndefined="ZodUndefined",e.ZodNull="ZodNull",e.ZodAny="ZodAny",e.ZodUnknown="ZodUnknown",e.ZodNever="ZodNever",e.ZodVoid="ZodVoid",e.ZodArray="ZodArray",e.ZodObject="ZodObject",e.ZodUnion="ZodUnion",e.ZodDiscriminatedUnion="ZodDiscriminatedUnion",e.ZodIntersection="ZodIntersection",e.ZodTuple="ZodTuple",e.ZodRecord="ZodRecord",e.ZodMap="ZodMap",e.ZodSet="ZodSet",e.ZodFunction="ZodFunction",e.ZodLazy="ZodLazy",e.ZodLiteral="ZodLiteral",e.ZodEnum="ZodEnum",e.ZodEffects="ZodEffects",e.ZodNativeEnum="ZodNativeEnum",e.ZodOptional="ZodOptional",e.ZodNullable="ZodNullable",e.ZodDefault="ZodDefault",e.ZodCatch="ZodCatch",e.ZodPromise="ZodPromise",e.ZodBranded="ZodBranded",e.ZodPipeline="ZodPipeline"})(ye||(ye={}));const EY=(e,t={message:`Input not instance of ${e.name}`})=>xO(n=>n instanceof e,t),CO=pi.create,TO=zs.create,PY=xm.create,AY=Us.create,EO=hf.create,kY=Ja.create,RY=bm.create,OY=pf.create,MY=gf.create,IY=Ju.create,NY=ja.create,DY=Vo.create,LY=Sm.create,$Y=Si.create,FY=Tt.create,BY=Tt.strictCreate,jY=mf.create,VY=x0.create,zY=yf.create,UY=to.create,GY=vf.create,HY=_m.create,qY=el.create,WY=Ru.create,KY=bf.create,XY=Sf.create,YY=Gs.create,QY=_f.create,ZY=ec.create,K4=Ti.create,JY=Ro.create,eQ=tl.create,tQ=Ti.createWithPreprocess,nQ=mh.create,rQ=()=>CO().optional(),iQ=()=>TO().optional(),oQ=()=>EO().optional(),sQ={string:e=>pi.create({...e,coerce:!0}),number:e=>zs.create({...e,coerce:!0}),boolean:e=>hf.create({...e,coerce:!0}),bigint:e=>Us.create({...e,coerce:!0}),date:e=>Ja.create({...e,coerce:!0})},aQ=be;var _t=Object.freeze({__proto__:null,defaultErrorMap:ff,setErrorMap:dY,getErrorMap:gm,makeIssue:mm,EMPTY_PATH:fY,addIssueToContext:oe,ParseStatus:jn,INVALID:be,DIRTY:SO,OK:tr,isAborted:D_,isDirty:L_,isValid:ym,isAsync:vm,get util(){return Ve},get objectUtil(){return N_},ZodParsedType:re,getParsedType:ms,ZodType:Ce,ZodString:pi,ZodNumber:zs,ZodBigInt:Us,ZodBoolean:hf,ZodDate:Ja,ZodSymbol:bm,ZodUndefined:pf,ZodNull:gf,ZodAny:Ju,ZodUnknown:ja,ZodNever:Vo,ZodVoid:Sm,ZodArray:Si,ZodObject:Tt,ZodUnion:mf,ZodDiscriminatedUnion:x0,ZodIntersection:yf,ZodTuple:to,ZodRecord:vf,ZodMap:_m,ZodSet:el,ZodFunction:Ru,ZodLazy:bf,ZodLiteral:Sf,ZodEnum:Gs,ZodNativeEnum:_f,ZodPromise:ec,ZodEffects:Ti,ZodTransformer:Ti,ZodOptional:Ro,ZodNullable:tl,ZodDefault:wf,ZodCatch:wm,ZodNaN:xm,BRAND:CY,ZodBranded:wO,ZodPipeline:mh,custom:xO,Schema:Ce,ZodSchema:Ce,late:TY,get ZodFirstPartyTypeKind(){return ye},coerce:sQ,any:IY,array:$Y,bigint:AY,boolean:EO,date:kY,discriminatedUnion:VY,effect:K4,enum:YY,function:WY,instanceof:EY,intersection:zY,lazy:KY,literal:XY,map:HY,nan:PY,nativeEnum:QY,never:DY,null:MY,nullable:eQ,number:TO,object:FY,oboolean:oQ,onumber:iQ,optional:JY,ostring:rQ,pipeline:nQ,preprocess:tQ,promise:ZY,record:GY,set:qY,strictObject:BY,string:CO,symbol:RY,transformer:K4,tuple:UY,undefined:OY,union:jY,unknown:NY,void:LY,NEVER:aQ,ZodIssueCode:ee,quotelessJson:cY,ZodError:bi});const lQ=_t.string(),Twe=e=>lQ.safeParse(e).success,uQ=_t.string(),Ewe=e=>uQ.safeParse(e).success,cQ=_t.string(),Pwe=e=>cQ.safeParse(e).success,dQ=_t.string(),Awe=e=>dQ.safeParse(e).success,fQ=_t.number().int().min(1),kwe=e=>fQ.safeParse(e).success,hQ=_t.number().min(1),Rwe=e=>hQ.safeParse(e).success,pQ=_t.enum(["euler","deis","ddim","ddpm","dpmpp_2s","dpmpp_2m","dpmpp_2m_sde","dpmpp_sde","heun","kdpm_2","lms","pndm","unipc","euler_k","dpmpp_2s_k","dpmpp_2m_k","dpmpp_2m_sde_k","dpmpp_sde_k","heun_k","lms_k","euler_a","kdpm_2_a"]),Owe=e=>pQ.safeParse(e).success,Mwe={euler:"Euler",deis:"DEIS",ddim:"DDIM",ddpm:"DDPM",dpmpp_sde:"DPM++ SDE",dpmpp_2s:"DPM++ 2S",dpmpp_2m:"DPM++ 2M",dpmpp_2m_sde:"DPM++ 2M SDE",heun:"Heun",kdpm_2:"KDPM 2",lms:"LMS",pndm:"PNDM",unipc:"UniPC",euler_k:"Euler Karras",dpmpp_sde_k:"DPM++ SDE Karras",dpmpp_2s_k:"DPM++ 2S Karras",dpmpp_2m_k:"DPM++ 2M Karras",dpmpp_2m_sde_k:"DPM++ 2M SDE Karras",heun_k:"Heun Karras",lms_k:"LMS Karras",euler_a:"Euler Ancestral",kdpm_2_a:"KDPM 2 Ancestral"},gQ=_t.number().int().min(0).max(uY),Iwe=e=>gQ.safeParse(e).success,mQ=_t.number().multipleOf(8).min(64),Nwe=e=>mQ.safeParse(e).success,yQ=_t.number().multipleOf(8).min(64),Dwe=e=>yQ.safeParse(e).success,vQ=_t.enum(["vae","lora","onnx","main","controlnet","embedding"]),C0=_t.enum(["sd-1","sd-2","sdxl","sdxl-refiner"]),xf=_t.object({model_name:_t.string().min(1),base_model:C0,model_type:vQ}),Lwe=e=>xf.safeParse(e).success,bQ=_t.object({model_name:_t.string().min(1),base_model:C0}),$we=_t.object({model_name:_t.string().min(1),base_model:C0}),Fwe=_t.object({model_name:_t.string().min(1),base_model:C0}),SQ=_t.number().min(0).max(1),Bwe=e=>SQ.safeParse(e).success;_t.enum(["fp16","fp32"]);const _Q=_t.number().min(1).max(10),jwe=e=>_Q.safeParse(e).success,wQ=_t.number().min(0).max(1),Vwe=e=>wQ.safeParse(e).success,Wo={cfgScale:7.5,height:512,img2imgStrength:.75,infillMethod:"patchmatch",iterations:1,perlin:0,positivePrompt:"",negativePrompt:"",scheduler:"euler",seamBlur:16,seamSize:96,seamSteps:30,seamStrength:.7,seed:0,seedWeights:"",shouldFitToWidthHeight:!0,shouldGenerateVariations:!1,shouldRandomizeSeed:!0,shouldUseNoiseSettings:!1,steps:50,threshold:0,tileSize:32,variationAmount:.1,width:512,shouldUseSymmetry:!1,horizontalSymmetrySteps:0,verticalSymmetrySteps:0,model:null,vae:null,vaePrecision:"fp32",seamlessXAxis:!1,seamlessYAxis:!1,clipSkip:0,shouldUseCpuNoise:!0,shouldShowAdvancedOptions:!1,aspectRatio:null},xQ=Wo,PO=Pt({name:"generation",initialState:xQ,reducers:{setPositivePrompt:(e,t)=>{e.positivePrompt=t.payload},setNegativePrompt:(e,t)=>{e.negativePrompt=t.payload},setIterations:(e,t)=>{e.iterations=t.payload},setSteps:(e,t)=>{e.steps=t.payload},clampSymmetrySteps:e=>{e.horizontalSymmetrySteps=Ss(e.horizontalSymmetrySteps,0,e.steps),e.verticalSymmetrySteps=Ss(e.verticalSymmetrySteps,0,e.steps)},setCfgScale:(e,t)=>{e.cfgScale=t.payload},setThreshold:(e,t)=>{e.threshold=t.payload},setPerlin:(e,t)=>{e.perlin=t.payload},setHeight:(e,t)=>{e.height=t.payload},setWidth:(e,t)=>{e.width=t.payload},toggleSize:e=>{const[t,n]=[e.width,e.height];e.width=n,e.height=t},setScheduler:(e,t)=>{e.scheduler=t.payload},setSeed:(e,t)=>{e.seed=t.payload,e.shouldRandomizeSeed=!1},setImg2imgStrength:(e,t)=>{e.img2imgStrength=t.payload},setSeamlessXAxis:(e,t)=>{e.seamlessXAxis=t.payload},setSeamlessYAxis:(e,t)=>{e.seamlessYAxis=t.payload},setShouldFitToWidthHeight:(e,t)=>{e.shouldFitToWidthHeight=t.payload},resetSeed:e=>{e.seed=-1},setShouldGenerateVariations:(e,t)=>{e.shouldGenerateVariations=t.payload},setVariationAmount:(e,t)=>{e.variationAmount=t.payload},setSeedWeights:(e,t)=>{e.seedWeights=t.payload,e.shouldGenerateVariations=!0,e.variationAmount=0},resetParametersState:e=>({...e,...Wo}),setShouldRandomizeSeed:(e,t)=>{e.shouldRandomizeSeed=t.payload},clearInitialImage:e=>{e.initialImage=void 0},setSeamSize:(e,t)=>{e.seamSize=t.payload},setSeamBlur:(e,t)=>{e.seamBlur=t.payload},setSeamStrength:(e,t)=>{e.seamStrength=t.payload},setSeamSteps:(e,t)=>{e.seamSteps=t.payload},setTileSize:(e,t)=>{e.tileSize=t.payload},setInfillMethod:(e,t)=>{e.infillMethod=t.payload},setShouldUseSymmetry:(e,t)=>{e.shouldUseSymmetry=t.payload},setHorizontalSymmetrySteps:(e,t)=>{e.horizontalSymmetrySteps=t.payload},setVerticalSymmetrySteps:(e,t)=>{e.verticalSymmetrySteps=t.payload},setShouldUseNoiseSettings:(e,t)=>{e.shouldUseNoiseSettings=t.payload},initialImageChanged:(e,t)=>{const{image_name:n,width:r,height:i}=t.payload;e.initialImage={imageName:n,width:r,height:i}},modelChanged:(e,t)=>{if(e.model=t.payload,e.model===null)return;const{maxClip:n}=lY[e.model.base_model];e.clipSkip=Ss(e.clipSkip,0,n)},vaeSelected:(e,t)=>{e.vae=t.payload},vaePrecisionChanged:(e,t)=>{e.vaePrecision=t.payload},setClipSkip:(e,t)=>{e.clipSkip=t.payload},shouldUseCpuNoiseChanged:(e,t)=>{e.shouldUseCpuNoise=t.payload},setShouldShowAdvancedOptions:(e,t)=>{e.shouldShowAdvancedOptions=t.payload,t.payload||(e.clipSkip=0)},setAspectRatio:(e,t)=>{const n=t.payload;e.aspectRatio=n,n&&(e.height=Ui(e.width/n,8))}},extraReducers:e=>{e.addCase(sY,(t,n)=>{var i;const r=(i=n.payload.sd)==null?void 0:i.defaultModel;if(r&&!t.model){const[o,s,a]=r.split("/"),l=xf.safeParse({model_name:a,base_model:o,model_type:s});l.success&&(t.model=l.data)}}),e.addCase(TQ,(t,n)=>{n.payload||(t.clipSkip=0)})}}),{clampSymmetrySteps:zwe,clearInitialImage:AO,resetParametersState:Uwe,resetSeed:Gwe,setCfgScale:Hwe,setWidth:qwe,setHeight:Wwe,toggleSize:Kwe,setImg2imgStrength:Xwe,setInfillMethod:CQ,setIterations:Ywe,setPerlin:Qwe,setPositivePrompt:Zwe,setNegativePrompt:Jwe,setScheduler:exe,setSeamBlur:txe,setSeamSize:nxe,setSeamSteps:rxe,setSeamStrength:ixe,setSeed:oxe,setSeedWeights:sxe,setShouldFitToWidthHeight:axe,setShouldGenerateVariations:lxe,setShouldRandomizeSeed:uxe,setSteps:cxe,setThreshold:dxe,setTileSize:fxe,setVariationAmount:hxe,setShouldUseSymmetry:pxe,setHorizontalSymmetrySteps:gxe,setVerticalSymmetrySteps:mxe,initialImageChanged:T0,modelChanged:Va,vaeSelected:kO,setShouldUseNoiseSettings:yxe,setSeamlessXAxis:vxe,setSeamlessYAxis:bxe,setClipSkip:Sxe,shouldUseCpuNoiseChanged:_xe,setShouldShowAdvancedOptions:TQ,setAspectRatio:EQ,vaePrecisionChanged:wxe}=PO.actions,PQ=PO.reducer,RO=["txt2img","img2img","unifiedCanvas","nodes","modelManager","batch"],X4=(e,t)=>{typeof t=="number"?e.activeTab=t:e.activeTab=RO.indexOf(t)},OO={activeTab:0,shouldPinParametersPanel:!0,shouldShowParametersPanel:!0,shouldShowImageDetails:!1,shouldUseCanvasBetaLayout:!1,shouldShowExistingModelsInSearch:!1,shouldUseSliders:!1,shouldPinGallery:!0,shouldShowGallery:!0,shouldHidePreview:!1,shouldShowProgressInViewer:!0,shouldShowEmbeddingPicker:!1,favoriteSchedulers:[]},MO=Pt({name:"ui",initialState:OO,reducers:{setActiveTab:(e,t)=>{X4(e,t.payload)},setShouldPinParametersPanel:(e,t)=>{e.shouldPinParametersPanel=t.payload,e.shouldShowParametersPanel=!0},setShouldShowParametersPanel:(e,t)=>{e.shouldShowParametersPanel=t.payload},setShouldShowImageDetails:(e,t)=>{e.shouldShowImageDetails=t.payload},setShouldUseCanvasBetaLayout:(e,t)=>{e.shouldUseCanvasBetaLayout=t.payload},setShouldHidePreview:(e,t)=>{e.shouldHidePreview=t.payload},setShouldShowExistingModelsInSearch:(e,t)=>{e.shouldShowExistingModelsInSearch=t.payload},setShouldUseSliders:(e,t)=>{e.shouldUseSliders=t.payload},setShouldShowGallery:(e,t)=>{e.shouldShowGallery=t.payload},togglePinGalleryPanel:e=>{e.shouldPinGallery=!e.shouldPinGallery,e.shouldPinGallery||(e.shouldShowGallery=!0)},togglePinParametersPanel:e=>{e.shouldPinParametersPanel=!e.shouldPinParametersPanel,e.shouldPinParametersPanel||(e.shouldShowParametersPanel=!0)},toggleParametersPanel:e=>{e.shouldShowParametersPanel=!e.shouldShowParametersPanel},toggleGalleryPanel:e=>{e.shouldShowGallery=!e.shouldShowGallery},togglePanels:e=>{e.shouldShowGallery||e.shouldShowParametersPanel?(e.shouldShowGallery=!1,e.shouldShowParametersPanel=!1):(e.shouldShowGallery=!0,e.shouldShowParametersPanel=!0)},setShouldShowProgressInViewer:(e,t)=>{e.shouldShowProgressInViewer=t.payload},favoriteSchedulersChanged:(e,t)=>{e.favoriteSchedulers=t.payload},toggleEmbeddingPicker:e=>{e.shouldShowEmbeddingPicker=!e.shouldShowEmbeddingPicker}},extraReducers(e){e.addCase(T0,t=>{X4(t,"img2img")})}}),{setActiveTab:IO,setShouldPinParametersPanel:xxe,setShouldShowParametersPanel:Cxe,setShouldShowImageDetails:Txe,setShouldUseCanvasBetaLayout:AQ,setShouldShowExistingModelsInSearch:Exe,setShouldUseSliders:Pxe,setShouldHidePreview:Axe,setShouldShowGallery:kxe,togglePanels:Rxe,togglePinGalleryPanel:Oxe,togglePinParametersPanel:Mxe,toggleParametersPanel:Ixe,toggleGalleryPanel:Nxe,setShouldShowProgressInViewer:Dxe,favoriteSchedulersChanged:Lxe,toggleEmbeddingPicker:$xe}=MO.actions,kQ=MO.reducer;let Wn=[],E0=(e,t)=>{let n=[],r={get(){return r.lc||r.listen(()=>{})(),r.value},l:t||0,lc:0,listen(i,o){return r.lc=n.push(i,o||r.l)/2,()=>{let s=n.indexOf(i);~s&&(n.splice(s,2),r.lc--,r.lc||r.off())}},notify(i){let o=!Wn.length;for(let s=0;s(e.events=e.events||{},e.events[n+mp]||(e.events[n+mp]=r(i=>{e.events[n].reduceRight((o,s)=>(s(o),o),{shared:{},...i})})),e.events[n]=e.events[n]||[],e.events[n].push(t),()=>{let i=e.events[n],o=i.indexOf(t);i.splice(o,1),i.length||(delete e.events[n],e.events[n+mp](),delete e.events[n+mp])}),MQ=1e3,IQ=(e,t)=>OQ(e,r=>{let i=t(r);i&&e.events[gp].push(i)},RQ,r=>{let i=e.listen;e.listen=(...s)=>(!e.lc&&!e.active&&(e.active=!0,r()),i(...s));let o=e.off;return e.events[gp]=[],e.off=()=>{o(),setTimeout(()=>{if(e.active&&!e.lc){e.active=!1;for(let s of e.events[gp])s();e.events[gp]=[]}},MQ)},()=>{e.listen=i,e.off=o}}),NQ=(e,t)=>{Array.isArray(e)||(e=[e]);let n,r=()=>{let o=e.map(s=>s.get());(n===void 0||o.some((s,a)=>s!==n[a]))&&(n=o,i.set(t(...o)))},i=E0(void 0,Math.max(...e.map(o=>o.l))+1);return IQ(i,()=>{let o=e.map(s=>s.listen(r,i.l));return r(),()=>{for(let s of o)s()}}),i};const DQ={"Content-Type":"application/json"},LQ=/\/*$/;function $Q(e){const t=new URLSearchParams;if(e&&typeof e=="object")for(const[n,r]of Object.entries(e))r!=null&&t.set(n,r);return t.toString()}function FQ(e){return JSON.stringify(e)}function BQ(e,t){let n=`${t.baseUrl?t.baseUrl.replace(LQ,""):""}${e}`;if(t.params.path)for(const[r,i]of Object.entries(t.params.path))n=n.replace(`{${r}}`,encodeURIComponent(String(i)));if(t.params.query){const r=t.querySerializer(t.params.query);r&&(n+=`?${r}`)}return n}function jQ(e={}){const{fetch:t=globalThis.fetch,querySerializer:n,bodySerializer:r,...i}=e,o=new Headers({...DQ,...i.headers??{}});async function s(a,l){const{headers:u,body:c,params:d={},parseAs:f="json",querySerializer:h=n??$Q,bodySerializer:p=r??FQ,...m}=l||{},S=BQ(a,{baseUrl:i.baseUrl,params:d,querySerializer:h}),y=new Headers(o),v=new Headers(u);for(const[w,x]of v.entries())x==null?y.delete(w):y.set(w,x);const g={redirect:"follow",...i,...m,headers:y};c&&(g.body=p(c)),g.body instanceof FormData&&y.delete("Content-Type");const b=await t(S,g);if(b.status===204||b.headers.get("Content-Length")==="0")return b.ok?{data:{},response:b}:{error:{},response:b};if(b.ok){let w=b.body;if(f!=="stream"){const x=b.clone();w=typeof x[f]=="function"?await x[f]():await x.text()}return{data:w,response:b}}let _={};try{_=await b.clone().json()}catch{_=await b.clone().text()}return{error:_,response:b}}return{async get(a,l){return s(a,{...l,method:"GET"})},async put(a,l){return s(a,{...l,method:"PUT"})},async post(a,l){return s(a,{...l,method:"POST"})},async del(a,l){return s(a,{...l,method:"DELETE"})},async options(a,l){return s(a,{...l,method:"OPTIONS"})},async head(a,l){return s(a,{...l,method:"HEAD"})},async patch(a,l){return s(a,{...l,method:"PATCH"})},async trace(a,l){return s(a,{...l,method:"TRACE"})}}}const Cf=E0(),Tf=E0(),P0=NQ([Cf,Tf],(e,t)=>jQ({headers:e?{Authorization:`Bearer ${e}`}:{},baseUrl:`${t??""}`})),Rn=Vs("api/sessionCreated",async(e,{rejectWithValue:t})=>{const{graph:n}=e,{post:r}=P0.get(),{data:i,error:o,response:s}=await r("/api/v1/sessions/",{body:n});return o?t({arg:e,status:s.status,error:o}):i}),VQ=e=>vr(e)&&"status"in e,yh=Vs("api/sessionInvoked",async(e,{rejectWithValue:t})=>{const{session_id:n}=e,{put:r}=P0.get(),{data:i,error:o,response:s}=await r("/api/v1/sessions/{session_id}/invoke",{params:{query:{all:!0},path:{session_id:n}}});if(o)return VQ(o)&&o.status===403?t({arg:e,status:s.status,error:o.body.detail}):t({arg:e,status:s.status,error:o})}),hl=Vs("api/sessionCanceled",async(e,{rejectWithValue:t})=>{const{session_id:n}=e,{del:r}=P0.get(),{data:i,error:o,response:s}=await r("/api/v1/sessions/{session_id}/invoke",{params:{path:{session_id:n}}});return o?t({arg:e,error:o}):i});Vs("api/listSessions",async(e,{rejectWithValue:t})=>{const{params:n}=e,{get:r}=P0.get(),{data:i,error:o,response:s}=await r("/api/v1/sessions/",{params:n});return o?t({arg:e,error:o}):i});const NO=ei(Rn.rejected,yh.rejected),Il=(e,t,n,r,i,o,s)=>{const a=Math.floor(e/2-(n+i/2)*s),l=Math.floor(t/2-(r+o/2)*s);return{x:a,y:l}},Nl=(e,t,n,r,i=.95)=>{const o=e*i/n,s=t*i/r;return Math.min(1,Math.min(o,s))},Fxe=.999,Bxe=.1,jxe=20,zc=.95,Vxe=30,zxe=10,Y4=e=>({x:Math.floor(e.x),y:Math.floor(e.y)}),ga=e=>{const{width:t,height:n}=e,r={width:t,height:n},i=512*512,o=t/n;let s=t*n,a=448;for(;s1?(r.width=a,r.height=Ui(a/o,64)):o<1&&(r.height=a,r.width=Ui(a*o,64)),s=r.width*r.height;return r},zQ=e=>({width:Ui(e.width,64),height:Ui(e.height,64)}),Uxe=[{label:"Base",value:"base"},{label:"Mask",value:"mask"}],Gxe=[{label:"Auto",value:"auto"},{label:"Manual",value:"manual"},{label:"None",value:"none"}],DO=e=>e.kind==="line"&&e.layer==="mask",Hxe=e=>e.kind==="line"&&e.layer==="base",Q4=e=>e.kind==="image"&&e.layer==="base",qxe=e=>e.kind==="fillRect"&&e.layer==="base",Wxe=e=>e.kind==="eraseRect"&&e.layer==="base",UQ=e=>e.kind==="line",Xl={objects:[],stagingArea:{images:[],selectedImageIndex:-1}},LO={boundingBoxCoordinates:{x:0,y:0},boundingBoxDimensions:{width:512,height:512},boundingBoxPreviewFill:{r:0,g:0,b:0,a:.5},boundingBoxScaleMethod:"auto",brushColor:{r:90,g:90,b:255,a:1},brushSize:50,canvasContainerDimensions:{width:0,height:0},colorPickerColor:{r:90,g:90,b:255,a:1},cursorPosition:null,doesCanvasNeedScaling:!1,futureLayerStates:[],isCanvasInitialized:!1,isDrawing:!1,isMaskEnabled:!0,isMouseOverBoundingBox:!1,isMoveBoundingBoxKeyHeld:!1,isMoveStageKeyHeld:!1,isMovingBoundingBox:!1,isMovingStage:!1,isTransformingBoundingBox:!1,layer:"base",layerState:Xl,maskColor:{r:255,g:90,b:90,a:1},maxHistory:128,minimumStageScale:1,pastLayerStates:[],scaledBoundingBoxDimensions:{width:512,height:512},shouldAntialias:!0,shouldAutoSave:!1,shouldCropToBoundingBoxOnSave:!1,shouldDarkenOutsideBoundingBox:!1,shouldLockBoundingBox:!1,shouldPreserveMaskedArea:!1,shouldRestrictStrokesToBox:!0,shouldShowBoundingBox:!0,shouldShowBrush:!0,shouldShowBrushPreview:!1,shouldShowCanvasDebugInfo:!1,shouldShowCheckboardTransparency:!1,shouldShowGrid:!0,shouldShowIntermediates:!0,shouldShowStagingImage:!0,shouldShowStagingOutline:!0,shouldSnapToGrid:!0,stageCoordinates:{x:0,y:0},stageDimensions:{width:0,height:0},stageScale:1,tool:"brush"},$O=Pt({name:"canvas",initialState:LO,reducers:{setTool:(e,t)=>{const n=t.payload;e.tool=t.payload,n!=="move"&&(e.isTransformingBoundingBox=!1,e.isMouseOverBoundingBox=!1,e.isMovingBoundingBox=!1,e.isMovingStage=!1)},setLayer:(e,t)=>{e.layer=t.payload},toggleTool:e=>{const t=e.tool;t!=="move"&&(e.tool=t==="brush"?"eraser":"brush")},setMaskColor:(e,t)=>{e.maskColor=t.payload},setBrushColor:(e,t)=>{e.brushColor=t.payload},setBrushSize:(e,t)=>{e.brushSize=t.payload},clearMask:e=>{e.pastLayerStates.push(Ln(e.layerState)),e.layerState.objects=e.layerState.objects.filter(t=>!DO(t)),e.futureLayerStates=[],e.shouldPreserveMaskedArea=!1},toggleShouldInvertMask:e=>{e.shouldPreserveMaskedArea=!e.shouldPreserveMaskedArea},toggleShouldShowMask:e=>{e.isMaskEnabled=!e.isMaskEnabled},setShouldPreserveMaskedArea:(e,t)=>{e.shouldPreserveMaskedArea=t.payload},setIsMaskEnabled:(e,t)=>{e.isMaskEnabled=t.payload,e.layer=t.payload?"mask":"base"},setShouldShowCheckboardTransparency:(e,t)=>{e.shouldShowCheckboardTransparency=t.payload},setShouldShowBrushPreview:(e,t)=>{e.shouldShowBrushPreview=t.payload},setShouldShowBrush:(e,t)=>{e.shouldShowBrush=t.payload},setCursorPosition:(e,t)=>{e.cursorPosition=t.payload},setInitialCanvasImage:(e,t)=>{const n=t.payload,{width:r,height:i}=n,{stageDimensions:o}=e,s={width:hp(Ss(r,64,512),64),height:hp(Ss(i,64,512),64)},a={x:Ui(r/2-s.width/2,64),y:Ui(i/2-s.height/2,64)};if(e.boundingBoxScaleMethod==="auto"){const c=ga(s);e.scaledBoundingBoxDimensions=c}e.boundingBoxDimensions=s,e.boundingBoxCoordinates=a,e.pastLayerStates.push(Ln(e.layerState)),e.layerState={...Xl,objects:[{kind:"image",layer:"base",x:0,y:0,width:r,height:i,imageName:n.image_name}]},e.futureLayerStates=[],e.isCanvasInitialized=!1;const l=Nl(o.width,o.height,r,i,zc),u=Il(o.width,o.height,0,0,r,i,l);e.stageScale=l,e.stageCoordinates=u,e.doesCanvasNeedScaling=!0},setBoundingBoxDimensions:(e,t)=>{const n=zQ(t.payload);if(e.boundingBoxDimensions=n,e.boundingBoxScaleMethod==="auto"){const r=ga(n);e.scaledBoundingBoxDimensions=r}},flipBoundingBoxAxes:e=>{const[t,n]=[e.boundingBoxDimensions.width,e.boundingBoxDimensions.height];e.boundingBoxDimensions={width:n,height:t}},setBoundingBoxCoordinates:(e,t)=>{e.boundingBoxCoordinates=Y4(t.payload)},setStageCoordinates:(e,t)=>{e.stageCoordinates=t.payload},setBoundingBoxPreviewFill:(e,t)=>{e.boundingBoxPreviewFill=t.payload},setDoesCanvasNeedScaling:(e,t)=>{e.doesCanvasNeedScaling=t.payload},setStageScale:(e,t)=>{e.stageScale=t.payload},setShouldDarkenOutsideBoundingBox:(e,t)=>{e.shouldDarkenOutsideBoundingBox=t.payload},setIsDrawing:(e,t)=>{e.isDrawing=t.payload},clearCanvasHistory:e=>{e.pastLayerStates=[],e.futureLayerStates=[]},setShouldLockBoundingBox:(e,t)=>{e.shouldLockBoundingBox=t.payload},toggleShouldLockBoundingBox:e=>{e.shouldLockBoundingBox=!e.shouldLockBoundingBox},setShouldShowBoundingBox:(e,t)=>{e.shouldShowBoundingBox=t.payload},setIsTransformingBoundingBox:(e,t)=>{e.isTransformingBoundingBox=t.payload},setIsMovingBoundingBox:(e,t)=>{e.isMovingBoundingBox=t.payload},setIsMouseOverBoundingBox:(e,t)=>{e.isMouseOverBoundingBox=t.payload},setIsMoveBoundingBoxKeyHeld:(e,t)=>{e.isMoveBoundingBoxKeyHeld=t.payload},setIsMoveStageKeyHeld:(e,t)=>{e.isMoveStageKeyHeld=t.payload},canvasSessionIdChanged:(e,t)=>{e.layerState.stagingArea.sessionId=t.payload},stagingAreaInitialized:(e,t)=>{const{sessionId:n,boundingBox:r}=t.payload;e.layerState.stagingArea={boundingBox:r,sessionId:n,images:[],selectedImageIndex:-1}},addImageToStagingArea:(e,t)=>{const n=t.payload;!n||!e.layerState.stagingArea.boundingBox||(e.pastLayerStates.push(Ln(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift(),e.layerState.stagingArea.images.push({kind:"image",layer:"base",...e.layerState.stagingArea.boundingBox,imageName:n.image_name}),e.layerState.stagingArea.selectedImageIndex=e.layerState.stagingArea.images.length-1,e.futureLayerStates=[])},discardStagedImages:e=>{e.pastLayerStates.push(Ln(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift(),e.layerState.stagingArea={...Xl.stagingArea},e.futureLayerStates=[],e.shouldShowStagingOutline=!0,e.shouldShowStagingOutline=!0},addFillRect:e=>{const{boundingBoxCoordinates:t,boundingBoxDimensions:n,brushColor:r}=e;e.pastLayerStates.push(Ln(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift(),e.layerState.objects.push({kind:"fillRect",layer:"base",...t,...n,color:r}),e.futureLayerStates=[]},addEraseRect:e=>{const{boundingBoxCoordinates:t,boundingBoxDimensions:n}=e;e.pastLayerStates.push(Ln(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift(),e.layerState.objects.push({kind:"eraseRect",layer:"base",...t,...n}),e.futureLayerStates=[]},addLine:(e,t)=>{const{tool:n,layer:r,brushColor:i,brushSize:o,shouldRestrictStrokesToBox:s}=e;if(n==="move"||n==="colorPicker")return;const a=o/2,l=r==="base"&&n==="brush"?{color:i}:{};e.pastLayerStates.push(Ln(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift();const u={kind:"line",layer:r,tool:n,strokeWidth:a,points:t.payload,...l};s&&(u.clip={...e.boundingBoxCoordinates,...e.boundingBoxDimensions}),e.layerState.objects.push(u),e.futureLayerStates=[]},addPointToCurrentLine:(e,t)=>{const n=e.layerState.objects.findLast(UQ);n&&n.points.push(...t.payload)},undo:e=>{const t=e.pastLayerStates.pop();t&&(e.futureLayerStates.unshift(Ln(e.layerState)),e.futureLayerStates.length>e.maxHistory&&e.futureLayerStates.pop(),e.layerState=t)},redo:e=>{const t=e.futureLayerStates.shift();t&&(e.pastLayerStates.push(Ln(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift(),e.layerState=t)},setShouldShowGrid:(e,t)=>{e.shouldShowGrid=t.payload},setIsMovingStage:(e,t)=>{e.isMovingStage=t.payload},setShouldSnapToGrid:(e,t)=>{e.shouldSnapToGrid=t.payload},setShouldAutoSave:(e,t)=>{e.shouldAutoSave=t.payload},setShouldShowIntermediates:(e,t)=>{e.shouldShowIntermediates=t.payload},resetCanvas:e=>{e.pastLayerStates.push(Ln(e.layerState)),e.layerState=Xl,e.futureLayerStates=[]},setCanvasContainerDimensions:(e,t)=>{e.canvasContainerDimensions=t.payload},resizeAndScaleCanvas:e=>{const{width:t,height:n}=e.canvasContainerDimensions,r=e.layerState.objects.find(Q4),i={width:Math.floor(t),height:Math.floor(n)};if(!r){const c=Nl(i.width,i.height,512,512,zc),d=Il(i.width,i.height,0,0,512,512,c),f={width:512,height:512};if(e.stageScale=c,e.stageCoordinates=d,e.stageDimensions=i,e.boundingBoxCoordinates={x:0,y:0},e.boundingBoxDimensions=f,e.boundingBoxScaleMethod==="auto"){const h=ga(f);e.scaledBoundingBoxDimensions=h}return}const{width:o,height:s}=r,l=Nl(t,n,o,s,.95),u=Il(i.width,i.height,0,0,o,s,l);e.minimumStageScale=l,e.stageScale=l,e.stageCoordinates=Y4(u),e.stageDimensions=i,e.isCanvasInitialized=!0},resizeCanvas:e=>{const{width:t,height:n}=e.canvasContainerDimensions,r={width:Math.floor(t),height:Math.floor(n)};if(e.stageDimensions=r,!e.layerState.objects.find(Q4)){const i=Nl(r.width,r.height,512,512,zc),o=Il(r.width,r.height,0,0,512,512,i),s={width:512,height:512};if(e.stageScale=i,e.stageCoordinates=o,e.boundingBoxCoordinates={x:0,y:0},e.boundingBoxDimensions=s,e.boundingBoxScaleMethod==="auto"){const a=ga(s);e.scaledBoundingBoxDimensions=a}}},resetCanvasView:(e,t)=>{const{contentRect:n,shouldScaleTo1:r}=t.payload,{stageDimensions:{width:i,height:o}}=e,{x:s,y:a,width:l,height:u}=n;if(l!==0&&u!==0){const c=r?1:Nl(i,o,l,u,zc),d=Il(i,o,s,a,l,u,c);e.stageScale=c,e.stageCoordinates=d}else{const c=Nl(i,o,512,512,zc),d=Il(i,o,0,0,512,512,c),f={width:512,height:512};if(e.stageScale=c,e.stageCoordinates=d,e.boundingBoxCoordinates={x:0,y:0},e.boundingBoxDimensions=f,e.boundingBoxScaleMethod==="auto"){const h=ga(f);e.scaledBoundingBoxDimensions=h}}},nextStagingAreaImage:e=>{if(!e.layerState.stagingArea.images.length)return;const t=e.layerState.stagingArea.selectedImageIndex,n=e.layerState.stagingArea.images.length;e.layerState.stagingArea.selectedImageIndex=Math.min(t+1,n-1)},prevStagingAreaImage:e=>{if(!e.layerState.stagingArea.images.length)return;const t=e.layerState.stagingArea.selectedImageIndex;e.layerState.stagingArea.selectedImageIndex=Math.max(t-1,0)},commitStagingAreaImage:(e,t)=>{if(!e.layerState.stagingArea.images.length)return;const{images:n,selectedImageIndex:r}=e.layerState.stagingArea;e.pastLayerStates.push(Ln(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift(),e.layerState.objects.push({...n[r]}),e.layerState.stagingArea={...Xl.stagingArea},e.futureLayerStates=[],e.shouldShowStagingOutline=!0,e.shouldShowStagingImage=!0},fitBoundingBoxToStage:e=>{const{boundingBoxDimensions:t,boundingBoxCoordinates:n,stageDimensions:r,stageScale:i}=e,o=r.width/i,s=r.height/i;if(n.x<0||n.x+t.width>o||n.y<0||n.y+t.height>s){const a={width:hp(Ss(o,64,512),64),height:hp(Ss(s,64,512),64)},l={x:Ui(o/2-a.width/2,64),y:Ui(s/2-a.height/2,64)};if(e.boundingBoxDimensions=a,e.boundingBoxCoordinates=l,e.boundingBoxScaleMethod==="auto"){const u=ga(a);e.scaledBoundingBoxDimensions=u}}},setBoundingBoxScaleMethod:(e,t)=>{if(e.boundingBoxScaleMethod=t.payload,t.payload==="auto"){const n=ga(e.boundingBoxDimensions);e.scaledBoundingBoxDimensions=n}},setScaledBoundingBoxDimensions:(e,t)=>{e.scaledBoundingBoxDimensions=t.payload},setShouldShowStagingImage:(e,t)=>{e.shouldShowStagingImage=t.payload},setShouldShowStagingOutline:(e,t)=>{e.shouldShowStagingOutline=t.payload},setShouldShowCanvasDebugInfo:(e,t)=>{e.shouldShowCanvasDebugInfo=t.payload},setShouldRestrictStrokesToBox:(e,t)=>{e.shouldRestrictStrokesToBox=t.payload},setShouldAntialias:(e,t)=>{e.shouldAntialias=t.payload},setShouldCropToBoundingBoxOnSave:(e,t)=>{e.shouldCropToBoundingBoxOnSave=t.payload},setColorPickerColor:(e,t)=>{e.colorPickerColor=t.payload},commitColorPickerColor:e=>{e.brushColor={...e.colorPickerColor,a:e.brushColor.a},e.tool="brush"},setMergedCanvas:(e,t)=>{e.pastLayerStates.push(Ln(e.layerState)),e.futureLayerStates=[],e.layerState.objects=[t.payload]},resetCanvasInteractionState:e=>{e.cursorPosition=null,e.isDrawing=!1,e.isMouseOverBoundingBox=!1,e.isMoveBoundingBoxKeyHeld=!1,e.isMoveStageKeyHeld=!1,e.isMovingBoundingBox=!1,e.isMovingStage=!1,e.isTransformingBoundingBox=!1},mouseLeftCanvas:e=>{e.cursorPosition=null,e.isDrawing=!1,e.isMouseOverBoundingBox=!1,e.isMovingBoundingBox=!1,e.isTransformingBoundingBox=!1}},extraReducers:e=>{e.addCase(hl.pending,t=>{t.layerState.stagingArea.images.length||(t.layerState.stagingArea=Xl.stagingArea)}),e.addCase(AQ,t=>{t.doesCanvasNeedScaling=!0}),e.addCase(IO,t=>{t.doesCanvasNeedScaling=!0}),e.addCase(EQ,(t,n)=>{const r=n.payload;r&&(t.boundingBoxDimensions.height=Ui(t.boundingBoxDimensions.width/r,64))})}}),{addEraseRect:Kxe,addFillRect:Xxe,addImageToStagingArea:GQ,addLine:Yxe,addPointToCurrentLine:Qxe,clearCanvasHistory:Zxe,clearMask:Jxe,commitColorPickerColor:eCe,commitStagingAreaImage:HQ,discardStagedImages:tCe,fitBoundingBoxToStage:nCe,mouseLeftCanvas:rCe,nextStagingAreaImage:iCe,prevStagingAreaImage:oCe,redo:sCe,resetCanvas:FO,resetCanvasInteractionState:aCe,resetCanvasView:lCe,resizeAndScaleCanvas:uCe,resizeCanvas:cCe,setBoundingBoxCoordinates:dCe,setBoundingBoxDimensions:fCe,setBoundingBoxPreviewFill:hCe,setBoundingBoxScaleMethod:pCe,flipBoundingBoxAxes:gCe,setBrushColor:mCe,setBrushSize:yCe,setCanvasContainerDimensions:vCe,setColorPickerColor:bCe,setCursorPosition:SCe,setDoesCanvasNeedScaling:_Ce,setInitialCanvasImage:BO,setIsDrawing:wCe,setIsMaskEnabled:xCe,setIsMouseOverBoundingBox:CCe,setIsMoveBoundingBoxKeyHeld:TCe,setIsMoveStageKeyHeld:ECe,setIsMovingBoundingBox:PCe,setIsMovingStage:ACe,setIsTransformingBoundingBox:kCe,setLayer:RCe,setMaskColor:OCe,setMergedCanvas:qQ,setShouldAutoSave:MCe,setShouldCropToBoundingBoxOnSave:ICe,setShouldDarkenOutsideBoundingBox:NCe,setShouldLockBoundingBox:DCe,setShouldPreserveMaskedArea:LCe,setShouldShowBoundingBox:$Ce,setShouldShowBrush:FCe,setShouldShowBrushPreview:BCe,setShouldShowCanvasDebugInfo:jCe,setShouldShowCheckboardTransparency:VCe,setShouldShowGrid:zCe,setShouldShowIntermediates:UCe,setShouldShowStagingImage:GCe,setShouldShowStagingOutline:HCe,setShouldSnapToGrid:qCe,setStageCoordinates:WCe,setStageScale:KCe,setTool:XCe,toggleShouldLockBoundingBox:YCe,toggleTool:QCe,undo:ZCe,setScaledBoundingBoxDimensions:JCe,setShouldRestrictStrokesToBox:e3e,stagingAreaInitialized:WQ,canvasSessionIdChanged:KQ,setShouldAntialias:t3e}=$O.actions,XQ=$O.reducer,YQ=(e,t)=>{const n=new Date(e),r=new Date(t);return n>r?1:ne==null,rZ=e=>encodeURIComponent(e).replace(/[!'()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`),B_=Symbol("encodeFragmentIdentifier");function iZ(e){switch(e.arrayFormat){case"index":return t=>(n,r)=>{const i=n.length;return r===void 0||e.skipNull&&r===null||e.skipEmptyString&&r===""?n:r===null?[...n,[Ht(t,e),"[",i,"]"].join("")]:[...n,[Ht(t,e),"[",Ht(i,e),"]=",Ht(r,e)].join("")]};case"bracket":return t=>(n,r)=>r===void 0||e.skipNull&&r===null||e.skipEmptyString&&r===""?n:r===null?[...n,[Ht(t,e),"[]"].join("")]:[...n,[Ht(t,e),"[]=",Ht(r,e)].join("")];case"colon-list-separator":return t=>(n,r)=>r===void 0||e.skipNull&&r===null||e.skipEmptyString&&r===""?n:r===null?[...n,[Ht(t,e),":list="].join("")]:[...n,[Ht(t,e),":list=",Ht(r,e)].join("")];case"comma":case"separator":case"bracket-separator":{const t=e.arrayFormat==="bracket-separator"?"[]=":"=";return n=>(r,i)=>i===void 0||e.skipNull&&i===null||e.skipEmptyString&&i===""?r:(i=i===null?"":i,r.length===0?[[Ht(n,e),t,Ht(i,e)].join("")]:[[r,Ht(i,e)].join(e.arrayFormatSeparator)])}default:return t=>(n,r)=>r===void 0||e.skipNull&&r===null||e.skipEmptyString&&r===""?n:r===null?[...n,Ht(t,e)]:[...n,[Ht(t,e),"=",Ht(r,e)].join("")]}}function oZ(e){let t;switch(e.arrayFormat){case"index":return(n,r,i)=>{if(t=/\[(\d*)]$/.exec(n),n=n.replace(/\[\d*]$/,""),!t){i[n]=r;return}i[n]===void 0&&(i[n]={}),i[n][t[1]]=r};case"bracket":return(n,r,i)=>{if(t=/(\[])$/.exec(n),n=n.replace(/\[]$/,""),!t){i[n]=r;return}if(i[n]===void 0){i[n]=[r];return}i[n]=[...i[n],r]};case"colon-list-separator":return(n,r,i)=>{if(t=/(:list)$/.exec(n),n=n.replace(/:list$/,""),!t){i[n]=r;return}if(i[n]===void 0){i[n]=[r];return}i[n]=[...i[n],r]};case"comma":case"separator":return(n,r,i)=>{const o=typeof r=="string"&&r.includes(e.arrayFormatSeparator),s=typeof r=="string"&&!o&&wo(r,e).includes(e.arrayFormatSeparator);r=s?wo(r,e):r;const a=o||s?r.split(e.arrayFormatSeparator).map(l=>wo(l,e)):r===null?r:wo(r,e);i[n]=a};case"bracket-separator":return(n,r,i)=>{const o=/(\[])$/.test(n);if(n=n.replace(/\[]$/,""),!o){i[n]=r&&wo(r,e);return}const s=r===null?[]:r.split(e.arrayFormatSeparator).map(a=>wo(a,e));if(i[n]===void 0){i[n]=s;return}i[n]=[...i[n],...s]};default:return(n,r,i)=>{if(i[n]===void 0){i[n]=r;return}i[n]=[...[i[n]].flat(),r]}}}function zO(e){if(typeof e!="string"||e.length!==1)throw new TypeError("arrayFormatSeparator must be single character string")}function Ht(e,t){return t.encode?t.strict?rZ(e):encodeURIComponent(e):e}function wo(e,t){return t.decode?eZ(e):e}function UO(e){return Array.isArray(e)?e.sort():typeof e=="object"?UO(Object.keys(e)).sort((t,n)=>Number(t)-Number(n)).map(t=>e[t]):e}function GO(e){const t=e.indexOf("#");return t!==-1&&(e=e.slice(0,t)),e}function sZ(e){let t="";const n=e.indexOf("#");return n!==-1&&(t=e.slice(n)),t}function eT(e,t){return t.parseNumbers&&!Number.isNaN(Number(e))&&typeof e=="string"&&e.trim()!==""?e=Number(e):t.parseBooleans&&e!==null&&(e.toLowerCase()==="true"||e.toLowerCase()==="false")&&(e=e.toLowerCase()==="true"),e}function Fx(e){e=GO(e);const t=e.indexOf("?");return t===-1?"":e.slice(t+1)}function Bx(e,t){t={decode:!0,sort:!0,arrayFormat:"none",arrayFormatSeparator:",",parseNumbers:!1,parseBooleans:!1,...t},zO(t.arrayFormatSeparator);const n=oZ(t),r=Object.create(null);if(typeof e!="string"||(e=e.trim().replace(/^[?#&]/,""),!e))return r;for(const i of e.split("&")){if(i==="")continue;const o=t.decode?i.replace(/\+/g," "):i;let[s,a]=VO(o,"=");s===void 0&&(s=o),a=a===void 0?null:["comma","separator","bracket-separator"].includes(t.arrayFormat)?a:wo(a,t),n(wo(s,t),a,r)}for(const[i,o]of Object.entries(r))if(typeof o=="object"&&o!==null)for(const[s,a]of Object.entries(o))o[s]=eT(a,t);else r[i]=eT(o,t);return t.sort===!1?r:(t.sort===!0?Object.keys(r).sort():Object.keys(r).sort(t.sort)).reduce((i,o)=>{const s=r[o];return s&&typeof s=="object"&&!Array.isArray(s)?i[o]=UO(s):i[o]=s,i},Object.create(null))}function HO(e,t){if(!e)return"";t={encode:!0,strict:!0,arrayFormat:"none",arrayFormatSeparator:",",...t},zO(t.arrayFormatSeparator);const n=s=>t.skipNull&&nZ(e[s])||t.skipEmptyString&&e[s]==="",r=iZ(t),i={};for(const[s,a]of Object.entries(e))n(s)||(i[s]=a);const o=Object.keys(i);return t.sort!==!1&&o.sort(t.sort),o.map(s=>{const a=e[s];return a===void 0?"":a===null?Ht(s,t):Array.isArray(a)?a.length===0&&t.arrayFormat==="bracket-separator"?Ht(s,t)+"[]":a.reduce(r(s),[]).join("&"):Ht(s,t)+"="+Ht(a,t)}).filter(s=>s.length>0).join("&")}function qO(e,t){var i;t={decode:!0,...t};let[n,r]=VO(e,"#");return n===void 0&&(n=e),{url:((i=n==null?void 0:n.split("?"))==null?void 0:i[0])??"",query:Bx(Fx(e),t),...t&&t.parseFragmentIdentifier&&r?{fragmentIdentifier:wo(r,t)}:{}}}function WO(e,t){t={encode:!0,strict:!0,[B_]:!0,...t};const n=GO(e.url).split("?")[0]||"",r=Fx(e.url),i={...Bx(r,{sort:!1}),...e.query};let o=HO(i,t);o&&(o=`?${o}`);let s=sZ(e.url);if(e.fragmentIdentifier){const a=new URL(n);a.hash=e.fragmentIdentifier,s=t[B_]?a.hash:`#${e.fragmentIdentifier}`}return`${n}${o}${s}`}function KO(e,t,n){n={parseFragmentIdentifier:!0,[B_]:!1,...n};const{url:r,query:i,fragmentIdentifier:o}=qO(e,n);return WO({url:r,query:tZ(i,t),fragmentIdentifier:o},n)}function aZ(e,t,n){const r=Array.isArray(t)?i=>!t.includes(i):(i,o)=>!t(i,o);return KO(e,r,n)}const fg=Object.freeze(Object.defineProperty({__proto__:null,exclude:aZ,extract:Fx,parse:Bx,parseUrl:qO,pick:KO,stringify:HO,stringifyUrl:WO},Symbol.toStringTag,{value:"Module"}));var Cm=globalThis&&globalThis.__generator||function(e,t){var n={label:0,sent:function(){if(o[0]&1)throw o[1];return o[1]},trys:[],ops:[]},r,i,o,s;return s={next:a(0),throw:a(1),return:a(2)},typeof Symbol=="function"&&(s[Symbol.iterator]=function(){return this}),s;function a(u){return function(c){return l([u,c])}}function l(u){if(r)throw new TypeError("Generator is already executing.");for(;n;)try{if(r=1,i&&(o=u[0]&2?i.return:u[0]?i.throw||((o=i.return)&&o.call(i),0):i.next)&&!(o=o.call(i,u[1])).done)return o;switch(i=0,o&&(u=[u[0]&2,o.value]),u[0]){case 0:case 1:o=u;break;case 4:return n.label++,{value:u[1],done:!1};case 5:n.label++,i=u[1],u=[0];continue;case 7:u=n.ops.pop(),n.trys.pop();continue;default:if(o=n.trys,!(o=o.length>0&&o[o.length-1])&&(u[0]===6||u[0]===2)){n=0;continue}if(u[0]===3&&(!o||u[1]>o[0]&&u[1]"u"||navigator.onLine===void 0?!0:navigator.onLine}function yZ(){return typeof document>"u"?!0:document.visibilityState!=="hidden"}var iT=xi;function QO(e,t){if(e===t||!(iT(e)&&iT(t)||Array.isArray(e)&&Array.isArray(t)))return t;for(var n=Object.keys(t),r=Object.keys(e),i=n.length===r.length,o=Array.isArray(t)?[]:{},s=0,a=n;s=200&&e.status<=299},bZ=function(e){return/ion\/(vnd\.api\+)?json/.test(e.get("content-type")||"")};function sT(e){if(!xi(e))return e;for(var t=$t({},e),n=0,r=Object.entries(t);n"u"&&a===oT&&console.warn("Warning: `fetch` is not available. Please supply a custom `fetchFn` property to use `fetchBaseQuery` on SSR environments."),function(g,b){return Pm(t,null,function(){var _,w,x,T,P,E,A,$,I,C,R,M,N,O,D,L,j,U,G,W,X,Y,B,H,Q,J,ne,te,xe,ve,ce,De,se,pt,yn,Mt;return Cm(this,function(ut){switch(ut.label){case 0:return _=b.signal,w=b.getState,x=b.extra,T=b.endpoint,P=b.forced,E=b.type,$=typeof g=="string"?{url:g}:g,I=$.url,C=$.headers,R=C===void 0?new Headers(y.headers):C,M=$.params,N=M===void 0?void 0:M,O=$.responseHandler,D=O===void 0?m??"json":O,L=$.validateStatus,j=L===void 0?S??vZ:L,U=$.timeout,G=U===void 0?p:U,W=nT($,["url","headers","params","responseHandler","validateStatus","timeout"]),X=$t(Hi($t({},y),{signal:_}),W),R=new Headers(sT(R)),Y=X,[4,o(R,{getState:w,extra:x,endpoint:T,forced:P,type:E})];case 1:Y.headers=ut.sent()||R,B=function(tt){return typeof tt=="object"&&(xi(tt)||Array.isArray(tt)||typeof tt.toJSON=="function")},!X.headers.has("content-type")&&B(X.body)&&X.headers.set("content-type",f),B(X.body)&&c(X.headers)&&(X.body=JSON.stringify(X.body,h)),N&&(H=~I.indexOf("?")?"&":"?",Q=l?l(N):new URLSearchParams(sT(N)),I+=H+Q),I=gZ(r,I),J=new Request(I,X),ne=J.clone(),A={request:ne},xe=!1,ve=G&&setTimeout(function(){xe=!0,b.abort()},G),ut.label=2;case 2:return ut.trys.push([2,4,5,6]),[4,a(J)];case 3:return te=ut.sent(),[3,6];case 4:return ce=ut.sent(),[2,{error:{status:xe?"TIMEOUT_ERROR":"FETCH_ERROR",error:String(ce)},meta:A}];case 5:return ve&&clearTimeout(ve),[7];case 6:De=te.clone(),A.response=De,pt="",ut.label=7;case 7:return ut.trys.push([7,9,,10]),[4,Promise.all([v(te,D).then(function(tt){return se=tt},function(tt){return yn=tt}),De.text().then(function(tt){return pt=tt},function(){})])];case 8:if(ut.sent(),yn)throw yn;return[3,10];case 9:return Mt=ut.sent(),[2,{error:{status:"PARSING_ERROR",originalStatus:te.status,data:pt,error:String(Mt)},meta:A}];case 10:return[2,j(te,se)?{data:se,meta:A}:{error:{status:te.status,data:se},meta:A}]}})})};function v(g,b){return Pm(this,null,function(){var _;return Cm(this,function(w){switch(w.label){case 0:return typeof b=="function"?[2,b(g)]:(b==="content-type"&&(b=c(g.headers)?"json":"text"),b!=="json"?[3,2]:[4,g.text()]);case 1:return _=w.sent(),[2,_.length?JSON.parse(_):null];case 2:return[2,g.text()]}})})}}var aT=function(){function e(t,n){n===void 0&&(n=void 0),this.value=t,this.meta=n}return e}(),jx=ue("__rtkq/focused"),ZO=ue("__rtkq/unfocused"),Vx=ue("__rtkq/online"),JO=ue("__rtkq/offline"),no;(function(e){e.query="query",e.mutation="mutation"})(no||(no={}));function e7(e){return e.type===no.query}function _Z(e){return e.type===no.mutation}function t7(e,t,n,r,i,o){return wZ(e)?e(t,n,r,i).map(j_).map(o):Array.isArray(e)?e.map(j_).map(o):[]}function wZ(e){return typeof e=="function"}function j_(e){return typeof e=="string"?{type:e}:e}function bb(e){return e!=null}var Ef=Symbol("forceQueryFn"),V_=function(e){return typeof e[Ef]=="function"};function xZ(e){var t=e.serializeQueryArgs,n=e.queryThunk,r=e.mutationThunk,i=e.api,o=e.context,s=new Map,a=new Map,l=i.internalActions,u=l.unsubscribeQueryResult,c=l.removeMutationResult,d=l.updateSubscriptionOptions;return{buildInitiateQuery:v,buildInitiateMutation:g,getRunningQueryThunk:p,getRunningMutationThunk:m,getRunningQueriesThunk:S,getRunningMutationsThunk:y,getRunningOperationPromises:h,removalWarning:f};function f(){throw new Error(`This method had to be removed due to a conceptual bug in RTK. - Please see https://github.com/reduxjs/redux-toolkit/pull/2481 for details. - See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for new guidance on SSR.`)}function h(){typeof process<"u";var b=function(_){return Array.from(_.values()).flatMap(function(w){return w?Object.values(w):[]})};return Tm(Tm([],b(s)),b(a)).filter(bb)}function p(b,_){return function(w){var x,T=o.endpointDefinitions[b],P=t({queryArgs:_,endpointDefinition:T,endpointName:b});return(x=s.get(w))==null?void 0:x[P]}}function m(b,_){return function(w){var x;return(x=a.get(w))==null?void 0:x[_]}}function S(){return function(b){return Object.values(s.get(b)||{}).filter(bb)}}function y(){return function(b){return Object.values(a.get(b)||{}).filter(bb)}}function v(b,_){var w=function(x,T){var P=T===void 0?{}:T,E=P.subscribe,A=E===void 0?!0:E,$=P.forceRefetch,I=P.subscriptionOptions,C=Ef,R=P[C];return function(M,N){var O,D,L=t({queryArgs:x,endpointDefinition:_,endpointName:b}),j=n((O={type:"query",subscribe:A,forceRefetch:$,subscriptionOptions:I,endpointName:b,originalArgs:x,queryCacheKey:L},O[Ef]=R,O)),U=i.endpoints[b].select(x),G=M(j),W=U(N()),X=G.requestId,Y=G.abort,B=W.requestId!==X,H=(D=s.get(M))==null?void 0:D[L],Q=function(){return U(N())},J=Object.assign(R?G.then(Q):B&&!H?Promise.resolve(W):Promise.all([H,G]).then(Q),{arg:x,requestId:X,subscriptionOptions:I,queryCacheKey:L,abort:Y,unwrap:function(){return Pm(this,null,function(){var te;return Cm(this,function(xe){switch(xe.label){case 0:return[4,J];case 1:if(te=xe.sent(),te.isError)throw te.error;return[2,te.data]}})})},refetch:function(){return M(w(x,{subscribe:!1,forceRefetch:!0}))},unsubscribe:function(){A&&M(u({queryCacheKey:L,requestId:X}))},updateSubscriptionOptions:function(te){J.subscriptionOptions=te,M(d({endpointName:b,requestId:X,queryCacheKey:L,options:te}))}});if(!H&&!B&&!R){var ne=s.get(M)||{};ne[L]=J,s.set(M,ne),J.then(function(){delete ne[L],Object.keys(ne).length||s.delete(M)})}return J}};return w}function g(b){return function(_,w){var x=w===void 0?{}:w,T=x.track,P=T===void 0?!0:T,E=x.fixedCacheKey;return function(A,$){var I=r({type:"mutation",endpointName:b,originalArgs:_,track:P,fixedCacheKey:E}),C=A(I),R=C.requestId,M=C.abort,N=C.unwrap,O=C.unwrap().then(function(U){return{data:U}}).catch(function(U){return{error:U}}),D=function(){A(c({requestId:R,fixedCacheKey:E}))},L=Object.assign(O,{arg:C.arg,requestId:R,abort:M,unwrap:N,unsubscribe:D,reset:D}),j=a.get(A)||{};return a.set(A,j),j[R]=L,L.then(function(){delete j[R],Object.keys(j).length||a.delete(A)}),E&&(j[E]=L,L.then(function(){j[E]===L&&(delete j[E],Object.keys(j).length||a.delete(A))})),L}}}}function lT(e){return e}function CZ(e){var t=this,n=e.reducerPath,r=e.baseQuery,i=e.context.endpointDefinitions,o=e.serializeQueryArgs,s=e.api,a=function(g,b,_){return function(w){var x=i[g];w(s.internalActions.queryResultPatched({queryCacheKey:o({queryArgs:b,endpointDefinition:x,endpointName:g}),patches:_}))}},l=function(g,b,_){return function(w,x){var T,P,E=s.endpoints[g].select(b)(x()),A={patches:[],inversePatches:[],undo:function(){return w(s.util.patchQueryData(g,b,A.inversePatches))}};if(E.status===yt.uninitialized)return A;if("data"in E)if(yr(E.data)){var $=mx(E.data,_),I=$[1],C=$[2];(T=A.patches).push.apply(T,I),(P=A.inversePatches).push.apply(P,C)}else{var R=_(E.data);A.patches.push({op:"replace",path:[],value:R}),A.inversePatches.push({op:"replace",path:[],value:E.data})}return w(s.util.patchQueryData(g,b,A.patches)),A}},u=function(g,b,_){return function(w){var x;return w(s.endpoints[g].initiate(b,(x={subscribe:!1,forceRefetch:!0},x[Ef]=function(){return{data:_}},x)))}},c=function(g,b){return Pm(t,[g,b],function(_,w){var x,T,P,E,A,$,I,C,R,M,N,O,D,L,j,U,G,W,X=w.signal,Y=w.abort,B=w.rejectWithValue,H=w.fulfillWithValue,Q=w.dispatch,J=w.getState,ne=w.extra;return Cm(this,function(te){switch(te.label){case 0:x=i[_.endpointName],te.label=1;case 1:return te.trys.push([1,8,,13]),T=lT,P=void 0,E={signal:X,abort:Y,dispatch:Q,getState:J,extra:ne,endpoint:_.endpointName,type:_.type,forced:_.type==="query"?d(_,J()):void 0},A=_.type==="query"?_[Ef]:void 0,A?(P=A(),[3,6]):[3,2];case 2:return x.query?[4,r(x.query(_.originalArgs),E,x.extraOptions)]:[3,4];case 3:return P=te.sent(),x.transformResponse&&(T=x.transformResponse),[3,6];case 4:return[4,x.queryFn(_.originalArgs,E,x.extraOptions,function(xe){return r(xe,E,x.extraOptions)})];case 5:P=te.sent(),te.label=6;case 6:if(typeof process<"u",P.error)throw new aT(P.error,P.meta);return N=H,[4,T(P.data,P.meta,_.originalArgs)];case 7:return[2,N.apply(void 0,[te.sent(),(G={fulfilledTimeStamp:Date.now(),baseQueryMeta:P.meta},G[Ma]=!0,G)])];case 8:if(O=te.sent(),D=O,!(D instanceof aT))return[3,12];L=lT,x.query&&x.transformErrorResponse&&(L=x.transformErrorResponse),te.label=9;case 9:return te.trys.push([9,11,,12]),j=B,[4,L(D.value,D.meta,_.originalArgs)];case 10:return[2,j.apply(void 0,[te.sent(),(W={baseQueryMeta:D.meta},W[Ma]=!0,W)])];case 11:return U=te.sent(),D=U,[3,12];case 12:throw typeof process<"u",console.error(D),D;case 13:return[2]}})})};function d(g,b){var _,w,x,T,P=(w=(_=b[n])==null?void 0:_.queries)==null?void 0:w[g.queryCacheKey],E=(x=b[n])==null?void 0:x.config.refetchOnMountOrArgChange,A=P==null?void 0:P.fulfilledTimeStamp,$=(T=g.forceRefetch)!=null?T:g.subscribe&&E;return $?$===!0||(Number(new Date)-Number(A))/1e3>=$:!1}var f=Vs(n+"/executeQuery",c,{getPendingMeta:function(){var g;return g={startedTimeStamp:Date.now()},g[Ma]=!0,g},condition:function(g,b){var _=b.getState,w,x,T,P=_(),E=(x=(w=P[n])==null?void 0:w.queries)==null?void 0:x[g.queryCacheKey],A=E==null?void 0:E.fulfilledTimeStamp,$=g.originalArgs,I=E==null?void 0:E.originalArgs,C=i[g.endpointName];return V_(g)?!0:(E==null?void 0:E.status)==="pending"?!1:d(g,P)||e7(C)&&((T=C==null?void 0:C.forceRefetch)!=null&&T.call(C,{currentArg:$,previousArg:I,endpointState:E,state:P}))?!0:!A},dispatchConditionRejection:!0}),h=Vs(n+"/executeMutation",c,{getPendingMeta:function(){var g;return g={startedTimeStamp:Date.now()},g[Ma]=!0,g}}),p=function(g){return"force"in g},m=function(g){return"ifOlderThan"in g},S=function(g,b,_){return function(w,x){var T=p(_)&&_.force,P=m(_)&&_.ifOlderThan,E=function(C){return C===void 0&&(C=!0),s.endpoints[g].initiate(b,{forceRefetch:C})},A=s.endpoints[g].select(b)(x());if(T)w(E());else if(P){var $=A==null?void 0:A.fulfilledTimeStamp;if(!$){w(E());return}var I=(Number(new Date)-Number(new Date($)))/1e3>=P;I&&w(E())}else w(E(!1))}};function y(g){return function(b){var _,w;return((w=(_=b==null?void 0:b.meta)==null?void 0:_.arg)==null?void 0:w.endpointName)===g}}function v(g,b){return{matchPending:Eu(c0(g),y(b)),matchFulfilled:Eu(ta(g),y(b)),matchRejected:Eu(Yu(g),y(b))}}return{queryThunk:f,mutationThunk:h,prefetch:S,updateQueryData:l,upsertQueryData:u,patchQueryData:a,buildMatchThunkActions:v}}function n7(e,t,n,r){return t7(n[e.meta.arg.endpointName][t],ta(e)?e.payload:void 0,uh(e)?e.payload:void 0,e.meta.arg.originalArgs,"baseQueryMeta"in e.meta?e.meta.baseQueryMeta:void 0,r)}function yp(e,t,n){var r=e[t];r&&n(r)}function Pf(e){var t;return(t="arg"in e?e.arg.fixedCacheKey:e.fixedCacheKey)!=null?t:e.requestId}function uT(e,t,n){var r=e[Pf(t)];r&&n(r)}var Uc={};function TZ(e){var t=e.reducerPath,n=e.queryThunk,r=e.mutationThunk,i=e.context,o=i.endpointDefinitions,s=i.apiUid,a=i.extractRehydrationInfo,l=i.hasRehydrationInfo,u=e.assertTagType,c=e.config,d=ue(t+"/resetApiState"),f=Pt({name:t+"/queries",initialState:Uc,reducers:{removeQueryResult:{reducer:function(_,w){var x=w.payload.queryCacheKey;delete _[x]},prepare:cg()},queryResultPatched:function(_,w){var x=w.payload,T=x.queryCacheKey,P=x.patches;yp(_,T,function(E){E.data=S_(E.data,P.concat())})}},extraReducers:function(_){_.addCase(n.pending,function(w,x){var T=x.meta,P=x.meta.arg,E,A,$=V_(P);(P.subscribe||$)&&((A=w[E=P.queryCacheKey])!=null||(w[E]={status:yt.uninitialized,endpointName:P.endpointName})),yp(w,P.queryCacheKey,function(I){I.status=yt.pending,I.requestId=$&&I.requestId?I.requestId:T.requestId,P.originalArgs!==void 0&&(I.originalArgs=P.originalArgs),I.startedTimeStamp=T.startedTimeStamp})}).addCase(n.fulfilled,function(w,x){var T=x.meta,P=x.payload;yp(w,T.arg.queryCacheKey,function(E){var A;if(!(E.requestId!==T.requestId&&!V_(T.arg))){var $=o[T.arg.endpointName].merge;if(E.status=yt.fulfilled,$)if(E.data!==void 0){var I=T.fulfilledTimeStamp,C=T.arg,R=T.baseQueryMeta,M=T.requestId,N=Js(E.data,function(O){return $(O,P,{arg:C.originalArgs,baseQueryMeta:R,fulfilledTimeStamp:I,requestId:M})});E.data=N}else E.data=P;else E.data=(A=o[T.arg.endpointName].structuralSharing)==null||A?QO(er(E.data)?ux(E.data):E.data,P):P;delete E.error,E.fulfilledTimeStamp=T.fulfilledTimeStamp}})}).addCase(n.rejected,function(w,x){var T=x.meta,P=T.condition,E=T.arg,A=T.requestId,$=x.error,I=x.payload;yp(w,E.queryCacheKey,function(C){if(!P){if(C.requestId!==A)return;C.status=yt.rejected,C.error=I??$}})}).addMatcher(l,function(w,x){for(var T=a(x).queries,P=0,E=Object.entries(T);P{const r=Tf.get(),i=Cf.get();return SZ({baseUrl:`${r??""}/api/v1`,prepareHeaders:s=>(i&&s.set("Authorization",`Bearer ${i}`),s)})(e,t,n)},Hs=nJ({baseQuery:iJ,reducerPath:"api",tagTypes:rJ,endpoints:()=>({})}),xb=(e,t)=>{if(!e)return!1;const n=z_.selectAll(e);if(n.length>1){const r=new Date(t.created_at),i=new Date(n[n.length-1].created_at);return r>=i}else if([0,1].includes(n.length))return!0;return!1},Gc=e=>gi.includes(e.image_category)?gi:_s,Kn=ea({selectId:e=>e.image_name,sortComparer:(e,t)=>YQ(t.updated_at,e.updated_at)}),z_=Kn.getSelectors(),di=e=>`images/?${fg.stringify(e,{arrayFormat:"none"})}`,he=Hs.injectEndpoints({endpoints:e=>({listImages:e.query({query:t=>({url:di(t),method:"GET"}),providesTags:(t,n,{board_id:r,categories:i})=>[{type:"ImageList",id:di({board_id:r,categories:i})}],serializeQueryArgs:({queryArgs:t})=>{const{board_id:n,categories:r}=t;return di({board_id:n,categories:r})},transformResponse(t){const{total:n,items:r}=t;return Kn.addMany(Kn.getInitialState({total:n}),r)},merge:(t,n)=>{Kn.addMany(t,z_.selectAll(n)),t.total=n.total},forceRefetch({currentArg:t,previousArg:n}){return(t==null?void 0:t.offset)!==(n==null?void 0:n.offset)},async onQueryStarted(t,{dispatch:n,queryFulfilled:r}){try{const{data:i}=await r;z_.selectAll(i).forEach(o=>{n(he.util.upsertQueryData("getImageDTO",o.image_name,o))})}catch{}},keepUnusedDataFor:86400}),getIntermediatesCount:e.query({query:()=>({url:di({is_intermediate:!0})}),providesTags:["IntermediatesCount"],transformResponse:t=>t.total}),getImageDTO:e.query({query:t=>({url:`images/${t}`}),providesTags:(t,n,r)=>{const i=[{type:"Image",id:r}];return t!=null&&t.board_id&&i.push({type:"Board",id:t.board_id}),i},keepUnusedDataFor:86400}),getImageMetadata:e.query({query:t=>({url:`images/${t}/metadata`}),providesTags:(t,n,r)=>[{type:"ImageMetadata",id:r}],keepUnusedDataFor:86400}),getBoardImagesTotal:e.query({query:t=>({url:di({board_id:t??"none",categories:gi,is_intermediate:!1,limit:0,offset:0}),method:"GET"}),providesTags:(t,n,r)=>[{type:"BoardImagesTotal",id:r??"none"}],transformResponse:t=>t.total}),getBoardAssetsTotal:e.query({query:t=>({url:di({board_id:t??"none",categories:_s,is_intermediate:!1,limit:0,offset:0}),method:"GET"}),providesTags:(t,n,r)=>[{type:"BoardAssetsTotal",id:r??"none"}],transformResponse:t=>t.total}),clearIntermediates:e.mutation({query:()=>({url:"images/clear-intermediates",method:"POST"}),invalidatesTags:["IntermediatesCount"]}),deleteImage:e.mutation({query:({image_name:t})=>({url:`images/${t}`,method:"DELETE"}),invalidatesTags:(t,n,{board_id:r})=>[{type:"BoardImagesTotal",id:r??"none"},{type:"BoardAssetsTotal",id:r??"none"}],async onQueryStarted(t,{dispatch:n,queryFulfilled:r}){const{image_name:i,board_id:o}=t,s=[],a=Gc(t);s.push(n(he.util.updateQueryData("listImages",{board_id:o??"none",categories:a},l=>{const u=l.total,d=Kn.removeOne(l,i).total-u;l.total=l.total+d})));try{await r}catch{s.forEach(l=>l.undo())}}}),changeImageIsIntermediate:e.mutation({query:({imageDTO:t,is_intermediate:n})=>({url:`images/${t.image_name}`,method:"PATCH",body:{is_intermediate:n}}),invalidatesTags:(t,n,{imageDTO:r})=>[{type:"BoardImagesTotal",id:r.board_id??"none"},{type:"BoardAssetsTotal",id:r.board_id??"none"}],async onQueryStarted({imageDTO:t,is_intermediate:n},{dispatch:r,queryFulfilled:i,getState:o}){const s=[];s.push(r(he.util.updateQueryData("getImageDTO",t.image_name,l=>{Object.assign(l,{is_intermediate:n})})));const a=Gc(t);if(n)s.push(r(he.util.updateQueryData("listImages",{board_id:t.board_id??"none",categories:a},l=>{const u=l.total,d=Kn.removeOne(l,t.image_name).total-u;l.total=l.total+d})));else{console.log(t);const l={board_id:t.board_id??"none",categories:a},u=he.endpoints.listImages.select(l)(o()),c=u.data&&u.data.ids.length>=u.data.total,d=xb(u.data,t);(c||d)&&s.push(r(he.util.updateQueryData("listImages",l,f=>{const h=f.total,m=Kn.upsertOne(f,t).total-h;f.total=f.total+m})))}try{await i}catch{s.forEach(l=>l.undo())}}}),changeImageSessionId:e.mutation({query:({imageDTO:t,session_id:n})=>({url:`images/${t.image_name}`,method:"PATCH",body:{session_id:n}}),invalidatesTags:(t,n,{imageDTO:r})=>[{type:"BoardImagesTotal",id:r.board_id??"none"},{type:"BoardAssetsTotal",id:r.board_id??"none"}],async onQueryStarted({imageDTO:t,session_id:n},{dispatch:r,queryFulfilled:i,getState:o}){const s=[];s.push(r(he.util.updateQueryData("getImageDTO",t.image_name,a=>{Object.assign(a,{session_id:n})})));try{await i}catch{s.forEach(a=>a.undo())}}}),uploadImage:e.mutation({query:({file:t,image_category:n,is_intermediate:r,session_id:i,board_id:o,crop_visible:s})=>{const a=new FormData;return a.append("file",t),{url:"images/",method:"POST",body:a,params:{image_category:n,is_intermediate:r,session_id:i,board_id:o,crop_visible:s}}},async onQueryStarted({file:t,image_category:n,is_intermediate:r,postUploadAction:i,session_id:o,board_id:s},{dispatch:a,queryFulfilled:l}){try{const{data:u}=await l;if(u.is_intermediate)return;a(he.util.upsertQueryData("getImageDTO",u.image_name,u));const c=Gc(u);a(he.util.updateQueryData("listImages",{board_id:u.board_id??"none",categories:c},d=>{const f=d.total,p=Kn.addOne(d,u).total-f;d.total=d.total+p})),a(he.util.invalidateTags([{type:"BoardImagesTotal",id:u.board_id??"none"},{type:"BoardAssetsTotal",id:u.board_id??"none"}]))}catch{}}}),addImageToBoard:e.mutation({query:({board_id:t,imageDTO:n})=>{const{image_name:r}=n;return{url:"board_images/",method:"POST",body:{board_id:t,image_name:r}}},invalidatesTags:(t,n,{board_id:r,imageDTO:i})=>[{type:"Board",id:r},{type:"BoardImagesTotal",id:r},{type:"BoardImagesTotal",id:i.board_id??"none"},{type:"BoardAssetsTotal",id:r},{type:"BoardAssetsTotal",id:i.board_id??"none"}],async onQueryStarted({board_id:t,imageDTO:n},{dispatch:r,queryFulfilled:i,getState:o}){const s=[],a=Gc(n);if(s.push(r(he.util.updateQueryData("getImageDTO",n.image_name,l=>{Object.assign(l,{board_id:t})}))),!n.is_intermediate){s.push(r(he.util.updateQueryData("listImages",{board_id:n.board_id??"none",categories:a},f=>{const h=f.total,m=Kn.removeOne(f,n.image_name).total-h;f.total=f.total+m})));const l={board_id:t??"none",categories:a},u=he.endpoints.listImages.select(l)(o()),c=u.data&&u.data.ids.length>=u.data.total,d=xb(u.data,n);(c||d)&&s.push(r(he.util.updateQueryData("listImages",l,f=>{const h=f.total,m=Kn.addOne(f,n).total-h;f.total=f.total+m})))}try{await i}catch{s.forEach(l=>l.undo())}}}),removeImageFromBoard:e.mutation({query:({imageDTO:t})=>{const{board_id:n,image_name:r}=t;return{url:"board_images/",method:"DELETE",body:{board_id:n,image_name:r}}},invalidatesTags:(t,n,{imageDTO:r})=>[{type:"Board",id:r.board_id},{type:"BoardImagesTotal",id:r.board_id},{type:"BoardImagesTotal",id:"none"},{type:"BoardAssetsTotal",id:r.board_id},{type:"BoardAssetsTotal",id:"none"}],async onQueryStarted({imageDTO:t},{dispatch:n,queryFulfilled:r,getState:i}){const o=Gc(t),s=[];s.push(n(he.util.updateQueryData("getImageDTO",t.image_name,d=>{Object.assign(d,{board_id:void 0})}))),s.push(n(he.util.updateQueryData("listImages",{board_id:t.board_id??"none",categories:o},d=>{const f=d.total,p=Kn.removeOne(d,t.image_name).total-f;d.total=d.total+p})));const a={board_id:"none",categories:o},l=he.endpoints.listImages.select(a)(i()),u=l.data&&l.data.ids.length>=l.data.total,c=xb(l.data,t);(u||c)&&s.push(n(he.util.updateQueryData("listImages",a,d=>{const f=d.total,p=Kn.upsertOne(d,t).total-f;d.total=d.total+p})));try{await r}catch{s.forEach(d=>d.undo())}}})})}),{useGetIntermediatesCountQuery:r3e,useListImagesQuery:i3e,useLazyListImagesQuery:o3e,useGetImageDTOQuery:s3e,useGetImageMetadataQuery:a3e,useDeleteImageMutation:l3e,useGetBoardImagesTotalQuery:u3e,useGetBoardAssetsTotalQuery:c3e,useUploadImageMutation:d3e,useAddImageToBoardMutation:f3e,useRemoveImageFromBoardMutation:h3e,useClearIntermediatesMutation:p3e}=he,i7=ue("socket/socketConnected"),o7=ue("socket/appSocketConnected"),s7=ue("socket/socketDisconnected"),a7=ue("socket/appSocketDisconnected"),zx=ue("socket/socketSubscribed"),l7=ue("socket/appSocketSubscribed"),u7=ue("socket/socketUnsubscribed"),c7=ue("socket/appSocketUnsubscribed"),d7=ue("socket/socketInvocationStarted"),f7=ue("socket/appSocketInvocationStarted"),Ux=ue("socket/socketInvocationComplete"),h7=ue("socket/appSocketInvocationComplete"),p7=ue("socket/socketInvocationError"),Gx=ue("socket/appSocketInvocationError"),g7=ue("socket/socketGraphExecutionStateComplete"),m7=ue("socket/appSocketGraphExecutionStateComplete"),y7=ue("socket/socketGeneratorProgress"),v7=ue("socket/appSocketGeneratorProgress"),b7=ue("socket/socketModelLoadStarted"),oJ=ue("socket/appSocketModelLoadStarted"),S7=ue("socket/socketModelLoadCompleted"),sJ=ue("socket/appSocketModelLoadCompleted"),_7=ue("socket/socketSessionRetrievalError"),w7=ue("socket/appSocketSessionRetrievalError"),x7=ue("socket/socketInvocationRetrievalError"),C7=ue("socket/appSocketInvocationRetrievalError"),Hx=ue("controlNet/imageProcessed"),Yl={none:{type:"none",label:"none",description:"",default:{type:"none"}},canny_image_processor:{type:"canny_image_processor",label:"Canny",description:"",default:{id:"canny_image_processor",type:"canny_image_processor",low_threshold:100,high_threshold:200}},content_shuffle_image_processor:{type:"content_shuffle_image_processor",label:"Content Shuffle",description:"",default:{id:"content_shuffle_image_processor",type:"content_shuffle_image_processor",detect_resolution:512,image_resolution:512,h:512,w:512,f:256}},hed_image_processor:{type:"hed_image_processor",label:"HED",description:"",default:{id:"hed_image_processor",type:"hed_image_processor",detect_resolution:512,image_resolution:512,scribble:!1}},lineart_anime_image_processor:{type:"lineart_anime_image_processor",label:"Lineart Anime",description:"",default:{id:"lineart_anime_image_processor",type:"lineart_anime_image_processor",detect_resolution:512,image_resolution:512}},lineart_image_processor:{type:"lineart_image_processor",label:"Lineart",description:"",default:{id:"lineart_image_processor",type:"lineart_image_processor",detect_resolution:512,image_resolution:512,coarse:!1}},mediapipe_face_processor:{type:"mediapipe_face_processor",label:"Mediapipe Face",description:"",default:{id:"mediapipe_face_processor",type:"mediapipe_face_processor",max_faces:1,min_confidence:.5}},midas_depth_image_processor:{type:"midas_depth_image_processor",label:"Depth (Midas)",description:"",default:{id:"midas_depth_image_processor",type:"midas_depth_image_processor",a_mult:2,bg_th:.1}},mlsd_image_processor:{type:"mlsd_image_processor",label:"M-LSD",description:"",default:{id:"mlsd_image_processor",type:"mlsd_image_processor",detect_resolution:512,image_resolution:512,thr_d:.1,thr_v:.1}},normalbae_image_processor:{type:"normalbae_image_processor",label:"Normal BAE",description:"",default:{id:"normalbae_image_processor",type:"normalbae_image_processor",detect_resolution:512,image_resolution:512}},openpose_image_processor:{type:"openpose_image_processor",label:"Openpose",description:"",default:{id:"openpose_image_processor",type:"openpose_image_processor",detect_resolution:512,image_resolution:512,hand_and_face:!1}},pidi_image_processor:{type:"pidi_image_processor",label:"PIDI",description:"",default:{id:"pidi_image_processor",type:"pidi_image_processor",detect_resolution:512,image_resolution:512,scribble:!1,safe:!1}},zoe_depth_image_processor:{type:"zoe_depth_image_processor",label:"Depth (Zoe)",description:"",default:{id:"zoe_depth_image_processor",type:"zoe_depth_image_processor"}}},_p={canny:"canny_image_processor",mlsd:"mlsd_image_processor",depth:"midas_depth_image_processor",bae:"normalbae_image_processor",lineart:"lineart_image_processor",lineart_anime:"lineart_anime_image_processor",softedge:"hed_image_processor",shuffle:"content_shuffle_image_processor",openpose:"openpose_image_processor",mediapipe:"mediapipe_face_processor"},bT={isEnabled:!0,model:null,weight:1,beginStepPct:0,endStepPct:1,controlMode:"balanced",resizeMode:"just_resize",controlImage:null,processedControlImage:null,processorType:"canny_image_processor",processorNode:Yl.canny_image_processor.default,shouldAutoConfig:!0},U_={controlNets:{},isEnabled:!1,pendingControlImages:[]},T7=Pt({name:"controlNet",initialState:U_,reducers:{isControlNetEnabledToggled:e=>{e.isEnabled=!e.isEnabled},controlNetAdded:(e,t)=>{const{controlNetId:n,controlNet:r}=t.payload;e.controlNets[n]={...r??bT,controlNetId:n}},controlNetDuplicated:(e,t)=>{const{sourceControlNetId:n,newControlNetId:r}=t.payload,i=Ln(e.controlNets[n]);i.controlNetId=r,e.controlNets[r]=i},controlNetAddedFromImage:(e,t)=>{const{controlNetId:n,controlImage:r}=t.payload;e.controlNets[n]={...bT,controlNetId:n,controlImage:r}},controlNetRemoved:(e,t)=>{const{controlNetId:n}=t.payload;delete e.controlNets[n]},controlNetToggled:(e,t)=>{const{controlNetId:n}=t.payload;e.controlNets[n].isEnabled=!e.controlNets[n].isEnabled},controlNetImageChanged:(e,t)=>{const{controlNetId:n,controlImage:r}=t.payload;e.controlNets[n].controlImage=r,e.controlNets[n].processedControlImage=null,r!==null&&e.controlNets[n].processorType!=="none"&&e.pendingControlImages.push(n)},controlNetProcessedImageChanged:(e,t)=>{const{controlNetId:n,processedControlImage:r}=t.payload;e.controlNets[n].processedControlImage=r,e.pendingControlImages=e.pendingControlImages.filter(i=>i!==n)},controlNetModelChanged:(e,t)=>{const{controlNetId:n,model:r}=t.payload;if(e.controlNets[n].model=r,e.controlNets[n].processedControlImage=null,e.controlNets[n].shouldAutoConfig){let i;for(const o in _p)if(r.model_name.includes(o)){i=_p[o];break}i?(e.controlNets[n].processorType=i,e.controlNets[n].processorNode=Yl[i].default):(e.controlNets[n].processorType="none",e.controlNets[n].processorNode=Yl.none.default)}},controlNetWeightChanged:(e,t)=>{const{controlNetId:n,weight:r}=t.payload;e.controlNets[n].weight=r},controlNetBeginStepPctChanged:(e,t)=>{const{controlNetId:n,beginStepPct:r}=t.payload;e.controlNets[n].beginStepPct=r},controlNetEndStepPctChanged:(e,t)=>{const{controlNetId:n,endStepPct:r}=t.payload;e.controlNets[n].endStepPct=r},controlNetControlModeChanged:(e,t)=>{const{controlNetId:n,controlMode:r}=t.payload;e.controlNets[n].controlMode=r},controlNetResizeModeChanged:(e,t)=>{const{controlNetId:n,resizeMode:r}=t.payload;e.controlNets[n].resizeMode=r},controlNetProcessorParamsChanged:(e,t)=>{const{controlNetId:n,changes:r}=t.payload,i=e.controlNets[n].processorNode;e.controlNets[n].processorNode={...i,...r},e.controlNets[n].shouldAutoConfig=!1},controlNetProcessorTypeChanged:(e,t)=>{const{controlNetId:n,processorType:r}=t.payload;e.controlNets[n].processedControlImage=null,e.controlNets[n].processorType=r,e.controlNets[n].processorNode=Yl[r].default,e.controlNets[n].shouldAutoConfig=!1},controlNetAutoConfigToggled:(e,t)=>{var i;const{controlNetId:n}=t.payload,r=!e.controlNets[n].shouldAutoConfig;if(r){let o;for(const s in _p)if((i=e.controlNets[n].model)!=null&&i.model_name.includes(s)){o=_p[s];break}o?(e.controlNets[n].processorType=o,e.controlNets[n].processorNode=Yl[o].default):(e.controlNets[n].processorType="none",e.controlNets[n].processorNode=Yl.none.default)}e.controlNets[n].shouldAutoConfig=r},controlNetReset:()=>({...U_})},extraReducers:e=>{e.addCase(Hx,(t,n)=>{t.controlNets[n.payload.controlNetId].controlImage!==null&&t.pendingControlImages.push(n.payload.controlNetId)}),e.addCase(Gx,t=>{t.pendingControlImages=[]}),e.addMatcher(NO,t=>{t.pendingControlImages=[]}),e.addMatcher(he.endpoints.deleteImage.matchFulfilled,(t,n)=>{const{image_name:r}=n.meta.arg.originalArgs;Za(t.controlNets,i=>{i.controlImage===r&&(i.controlImage=null,i.processedControlImage=null),i.processedControlImage===r&&(i.processedControlImage=null)})})}}),{isControlNetEnabledToggled:g3e,controlNetAdded:m3e,controlNetDuplicated:y3e,controlNetAddedFromImage:v3e,controlNetRemoved:E7,controlNetImageChanged:qx,controlNetProcessedImageChanged:aJ,controlNetToggled:b3e,controlNetModelChanged:ST,controlNetWeightChanged:S3e,controlNetBeginStepPctChanged:_3e,controlNetEndStepPctChanged:w3e,controlNetControlModeChanged:x3e,controlNetResizeModeChanged:C3e,controlNetProcessorParamsChanged:lJ,controlNetProcessorTypeChanged:uJ,controlNetReset:P7,controlNetAutoConfigToggled:_T}=T7.actions,cJ=T7.reducer,A7={isEnabled:!1,maxPrompts:100,combinatorial:!0},dJ=A7,k7=Pt({name:"dynamicPrompts",initialState:dJ,reducers:{maxPromptsChanged:(e,t)=>{e.maxPrompts=t.payload},maxPromptsReset:e=>{e.maxPrompts=A7.maxPrompts},combinatorialToggled:e=>{e.combinatorial=!e.combinatorial},isEnabledToggled:e=>{e.isEnabled=!e.isEnabled}}}),{isEnabledToggled:T3e,maxPromptsChanged:E3e,maxPromptsReset:P3e,combinatorialToggled:A3e}=k7.actions,fJ=k7.reducer,hJ={updateBoardModalOpen:!1,searchText:""},R7=Pt({name:"boards",initialState:hJ,reducers:{setBoardSearchText:(e,t)=>{e.searchText=t.payload},setUpdateBoardModalOpen:(e,t)=>{e.updateBoardModalOpen=t.payload}}}),{setBoardSearchText:k3e,setUpdateBoardModalOpen:R3e}=R7.actions,pJ=R7.reducer,tc=Hs.injectEndpoints({endpoints:e=>({listBoards:e.query({query:t=>({url:"boards/",params:t}),providesTags:(t,n,r)=>{const i=[{type:"Board",id:Ie}];return t&&i.push(...t.items.map(({board_id:o})=>({type:"Board",id:o}))),i}}),listAllBoards:e.query({query:()=>({url:"boards/",params:{all:!0}}),providesTags:(t,n,r)=>{const i=[{type:"Board",id:Ie}];return t&&i.push(...t.map(({board_id:o})=>({type:"Board",id:o}))),i}}),listAllImageNamesForBoard:e.query({query:t=>({url:`boards/${t}/image_names`}),providesTags:(t,n,r)=>[{type:"ImageNameList",id:r}],keepUnusedDataFor:0}),createBoard:e.mutation({query:t=>({url:"boards/",method:"POST",params:{board_name:t}}),invalidatesTags:[{type:"Board",id:Ie}]}),updateBoard:e.mutation({query:({board_id:t,changes:n})=>({url:`boards/${t}`,method:"PATCH",body:n}),invalidatesTags:(t,n,r)=>[{type:"Board",id:r.board_id}]}),deleteBoard:e.mutation({query:t=>({url:`boards/${t}`,method:"DELETE"}),invalidatesTags:(t,n,r)=>[{type:"Board",id:Ie},{type:"ImageList",id:di({board_id:"none",categories:gi})},{type:"ImageList",id:di({board_id:"none",categories:_s})},{type:"BoardImagesTotal",id:"none"},{type:"BoardAssetsTotal",id:"none"}],async onQueryStarted(t,{dispatch:n,queryFulfilled:r,getState:i}){try{const{data:o}=await r,{deleted_board_images:s}=o;s.forEach(u=>{n(he.util.updateQueryData("getImageDTO",u,c=>{c.board_id=void 0}))});const a=[{categories:gi},{categories:_s}],l=s.map(u=>({id:u,changes:{board_id:void 0}}));a.forEach(u=>{n(he.util.updateQueryData("listImages",u,c=>{const d=c.total,h=Kn.updateMany(c,l).total-d;c.total=c.total+h}))})}catch{}}}),deleteBoardAndImages:e.mutation({query:t=>({url:`boards/${t}`,method:"DELETE",params:{include_images:!0}}),invalidatesTags:(t,n,r)=>[{type:"Board",id:Ie},{type:"ImageList",id:di({board_id:"none",categories:gi})},{type:"ImageList",id:di({board_id:"none",categories:_s})},{type:"BoardImagesTotal",id:"none"},{type:"BoardAssetsTotal",id:"none"}],async onQueryStarted(t,{dispatch:n,queryFulfilled:r,getState:i}){try{const{data:o}=await r,{deleted_images:s}=o;[{categories:gi},{categories:_s}].forEach(l=>{n(he.util.updateQueryData("listImages",l,u=>{const c=u.total,f=Kn.removeMany(u,s).total-c;u.total=u.total+f}))})}catch{}}})})}),{useListBoardsQuery:O3e,useListAllBoardsQuery:M3e,useCreateBoardMutation:I3e,useUpdateBoardMutation:N3e,useDeleteBoardMutation:D3e,useDeleteBoardAndImagesMutation:L3e,useListAllImageNamesForBoardQuery:$3e}=tc,O7={selection:[],shouldAutoSwitch:!0,autoAddBoardId:void 0,galleryImageMinimumWidth:96,selectedBoardId:void 0,galleryView:"images",batchImageNames:[],isBatchEnabled:!1},M7=Pt({name:"gallery",initialState:O7,reducers:{imageRangeEndSelected:()=>{},imageSelectionToggled:()=>{},imageSelected:(e,t)=>{e.selection=t.payload?[t.payload]:[]},shouldAutoSwitchChanged:(e,t)=>{e.shouldAutoSwitch=t.payload},setGalleryImageMinimumWidth:(e,t)=>{e.galleryImageMinimumWidth=t.payload},boardIdSelected:(e,t)=>{e.selectedBoardId=t.payload,e.galleryView="images"},isBatchEnabledChanged:(e,t)=>{e.isBatchEnabled=t.payload},imagesAddedToBatch:(e,t)=>{e.batchImageNames=rY(e.batchImageNames.concat(t.payload))},imagesRemovedFromBatch:(e,t)=>{e.batchImageNames=e.batchImageNames.filter(r=>!t.payload.includes(r));const n=e.selection.filter(r=>!t.payload.includes(r));if(n.length){e.selection=n;return}e.selection=[e.batchImageNames[0]]},batchReset:e=>{e.batchImageNames=[],e.selection=[]},autoAddBoardIdChanged:(e,t)=>{e.autoAddBoardId=t.payload},galleryViewChanged:(e,t)=>{e.galleryView=t.payload}},extraReducers:e=>{e.addMatcher(mJ,(t,n)=>{const r=n.meta.arg.originalArgs;r===t.selectedBoardId&&(t.selectedBoardId=void 0,t.galleryView="images"),r===t.autoAddBoardId&&(t.autoAddBoardId=void 0)}),e.addMatcher(tc.endpoints.listAllBoards.matchFulfilled,(t,n)=>{const r=n.payload;t.autoAddBoardId&&(r.map(i=>i.board_id).includes(t.autoAddBoardId)||(t.autoAddBoardId=void 0))})}}),{imageRangeEndSelected:F3e,imageSelectionToggled:B3e,imageSelected:Os,shouldAutoSwitchChanged:j3e,setGalleryImageMinimumWidth:V3e,boardIdSelected:G_,isBatchEnabledChanged:z3e,imagesAddedToBatch:H_,imagesRemovedFromBatch:U3e,autoAddBoardIdChanged:G3e,galleryViewChanged:km}=M7.actions,gJ=M7.reducer,mJ=ei(tc.endpoints.deleteBoard.matchFulfilled,tc.endpoints.deleteBoardAndImages.matchFulfilled),yJ={imageToDelete:null,isModalOpen:!1},I7=Pt({name:"imageDeletion",initialState:yJ,reducers:{isModalOpenChanged:(e,t)=>{e.isModalOpen=t.payload},imageToDeleteSelected:(e,t)=>{e.imageToDelete=t.payload},imageToDeleteCleared:e=>{e.imageToDelete=null,e.isModalOpen=!1}}}),{isModalOpenChanged:N7,imageToDeleteSelected:vJ,imageToDeleteCleared:H3e}=I7.actions,bJ=I7.reducer,wT={weight:.75},SJ={loras:{}},D7=Pt({name:"lora",initialState:SJ,reducers:{loraAdded:(e,t)=>{const{model_name:n,id:r,base_model:i}=t.payload;e.loras[r]={id:r,model_name:n,base_model:i,...wT}},loraRemoved:(e,t)=>{const n=t.payload;delete e.loras[n]},lorasCleared:e=>{e.loras={}},loraWeightChanged:(e,t)=>{const{id:n,weight:r}=t.payload;e.loras[n].weight=r},loraWeightReset:(e,t)=>{const n=t.payload;e.loras[n].weight=wT.weight}}}),{loraAdded:q3e,loraRemoved:L7,loraWeightChanged:W3e,loraWeightReset:K3e,lorasCleared:X3e}=D7.actions,_J=D7.reducer;function ti(e){if(typeof e=="string"||typeof e=="number")return""+e;let t="";if(Array.isArray(e))for(let n=0,r;n{let t;const n=new Set,r=(l,u)=>{const c=typeof l=="function"?l(t):l;if(!Object.is(c,t)){const d=t;t=u??typeof c!="object"?c:Object.assign({},t,c),n.forEach(f=>f(t,d))}},i=()=>t,a={setState:r,getState:i,subscribe:l=>(n.add(l),()=>n.delete(l)),destroy:()=>{n.clear()}};return t=e(r,i,a),a},wJ=e=>e?xT(e):xT,{useSyncExternalStoreWithSelector:xJ}=Xj;function CJ(e,t=e.getState,n){const r=xJ(e.subscribe,e.getState,e.getServerState||e.getState,t,n);return k.useDebugValue(r),r}function br(e,t){if(Object.is(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;if(e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(const[r,i]of e)if(!Object.is(i,t.get(r)))return!1;return!0}if(e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(const r of e)if(!t.has(r))return!1;return!0}const n=Object.keys(e);if(n.length!==Object.keys(t).length)return!1;for(let r=0;r{}};function A0(){for(var e=0,t=arguments.length,n={},r;e=0&&(r=n.slice(i+1),n=n.slice(0,i)),n&&!t.hasOwnProperty(n))throw new Error("unknown type: "+n);return{type:n,name:r}})}pg.prototype=A0.prototype={constructor:pg,on:function(e,t){var n=this._,r=EJ(e+"",n),i,o=-1,s=r.length;if(arguments.length<2){for(;++o0)for(var n=new Array(i),r=0,i,o;r=0&&(t=e.slice(0,n))!=="xmlns"&&(e=e.slice(n+1)),TT.hasOwnProperty(t)?{space:TT[t],local:e}:e}function AJ(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===q_&&t.documentElement.namespaceURI===q_?t.createElement(e):t.createElementNS(n,e)}}function kJ(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function $7(e){var t=k0(e);return(t.local?kJ:AJ)(t)}function RJ(){}function Wx(e){return e==null?RJ:function(){return this.querySelector(e)}}function OJ(e){typeof e!="function"&&(e=Wx(e));for(var t=this._groups,n=t.length,r=new Array(n),i=0;i=g&&(g=v+1);!(_=S[g])&&++g=0;)(s=r[i])&&(o&&s.compareDocumentPosition(o)^4&&o.parentNode.insertBefore(s,o),o=s);return this}function nee(e){e||(e=ree);function t(d,f){return d&&f?e(d.__data__,f.__data__):!d-!f}for(var n=this._groups,r=n.length,i=new Array(r),o=0;ot?1:e>=t?0:NaN}function iee(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function oee(){return Array.from(this)}function see(){for(var e=this._groups,t=0,n=e.length;t1?this.each((t==null?yee:typeof t=="function"?bee:vee)(e,t,n??"")):nc(this.node(),e)}function nc(e,t){return e.style.getPropertyValue(t)||z7(e).getComputedStyle(e,null).getPropertyValue(t)}function _ee(e){return function(){delete this[e]}}function wee(e,t){return function(){this[e]=t}}function xee(e,t){return function(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function Cee(e,t){return arguments.length>1?this.each((t==null?_ee:typeof t=="function"?xee:wee)(e,t)):this.node()[e]}function U7(e){return e.trim().split(/^|\s+/)}function Kx(e){return e.classList||new G7(e)}function G7(e){this._node=e,this._names=U7(e.getAttribute("class")||"")}G7.prototype={add:function(e){var t=this._names.indexOf(e);t<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function H7(e,t){for(var n=Kx(e),r=-1,i=t.length;++r=0&&(n=t.slice(r+1),t=t.slice(0,r)),{type:t,name:n}})}function Zee(e){return function(){var t=this.__on;if(t){for(var n=0,r=-1,i=t.length,o;n()=>e;function W_(e,{sourceEvent:t,subject:n,target:r,identifier:i,active:o,x:s,y:a,dx:l,dy:u,dispatch:c}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},subject:{value:n,enumerable:!0,configurable:!0},target:{value:r,enumerable:!0,configurable:!0},identifier:{value:i,enumerable:!0,configurable:!0},active:{value:o,enumerable:!0,configurable:!0},x:{value:s,enumerable:!0,configurable:!0},y:{value:a,enumerable:!0,configurable:!0},dx:{value:l,enumerable:!0,configurable:!0},dy:{value:u,enumerable:!0,configurable:!0},_:{value:c}})}W_.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function lte(e){return!e.ctrlKey&&!e.button}function ute(){return this.parentNode}function cte(e,t){return t??{x:e.x,y:e.y}}function dte(){return navigator.maxTouchPoints||"ontouchstart"in this}function fte(){var e=lte,t=ute,n=cte,r=dte,i={},o=A0("start","drag","end"),s=0,a,l,u,c,d=0;function f(b){b.on("mousedown.drag",h).filter(r).on("touchstart.drag",S).on("touchmove.drag",y,ate).on("touchend.drag touchcancel.drag",v).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function h(b,_){if(!(c||!e.call(this,b,_))){var w=g(this,t.call(this,b,_),b,_,"mouse");w&&(fi(b.view).on("mousemove.drag",p,Af).on("mouseup.drag",m,Af),X7(b.view),Cb(b),u=!1,a=b.clientX,l=b.clientY,w("start",b))}}function p(b){if(Ou(b),!u){var _=b.clientX-a,w=b.clientY-l;u=_*_+w*w>d}i.mouse("drag",b)}function m(b){fi(b.view).on("mousemove.drag mouseup.drag",null),Y7(b.view,u),Ou(b),i.mouse("end",b)}function S(b,_){if(e.call(this,b,_)){var w=b.changedTouches,x=t.call(this,b,_),T=w.length,P,E;for(P=0;P>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?xp(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?xp(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=pte.exec(e))?new hr(t[1],t[2],t[3],1):(t=gte.exec(e))?new hr(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=mte.exec(e))?xp(t[1],t[2],t[3],t[4]):(t=yte.exec(e))?xp(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=vte.exec(e))?MT(t[1],t[2]/100,t[3]/100,1):(t=bte.exec(e))?MT(t[1],t[2]/100,t[3]/100,t[4]):ET.hasOwnProperty(e)?kT(ET[e]):e==="transparent"?new hr(NaN,NaN,NaN,0):null}function kT(e){return new hr(e>>16&255,e>>8&255,e&255,1)}function xp(e,t,n,r){return r<=0&&(e=t=n=NaN),new hr(e,t,n,r)}function wte(e){return e instanceof bh||(e=Of(e)),e?(e=e.rgb(),new hr(e.r,e.g,e.b,e.opacity)):new hr}function K_(e,t,n,r){return arguments.length===1?wte(e):new hr(e,t,n,r??1)}function hr(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}Xx(hr,K_,Q7(bh,{brighter(e){return e=e==null?Om:Math.pow(Om,e),new hr(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?kf:Math.pow(kf,e),new hr(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new hr(za(this.r),za(this.g),za(this.b),Mm(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:RT,formatHex:RT,formatHex8:xte,formatRgb:OT,toString:OT}));function RT(){return`#${Na(this.r)}${Na(this.g)}${Na(this.b)}`}function xte(){return`#${Na(this.r)}${Na(this.g)}${Na(this.b)}${Na((isNaN(this.opacity)?1:this.opacity)*255)}`}function OT(){const e=Mm(this.opacity);return`${e===1?"rgb(":"rgba("}${za(this.r)}, ${za(this.g)}, ${za(this.b)}${e===1?")":`, ${e})`}`}function Mm(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function za(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Na(e){return e=za(e),(e<16?"0":"")+e.toString(16)}function MT(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new hi(e,t,n,r)}function Z7(e){if(e instanceof hi)return new hi(e.h,e.s,e.l,e.opacity);if(e instanceof bh||(e=Of(e)),!e)return new hi;if(e instanceof hi)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),o=Math.max(t,n,r),s=NaN,a=o-i,l=(o+i)/2;return a?(t===o?s=(n-r)/a+(n0&&l<1?0:s,new hi(s,a,l,e.opacity)}function Cte(e,t,n,r){return arguments.length===1?Z7(e):new hi(e,t,n,r??1)}function hi(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}Xx(hi,Cte,Q7(bh,{brighter(e){return e=e==null?Om:Math.pow(Om,e),new hi(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?kf:Math.pow(kf,e),new hi(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new hr(Tb(e>=240?e-240:e+120,i,r),Tb(e,i,r),Tb(e<120?e+240:e-120,i,r),this.opacity)},clamp(){return new hi(IT(this.h),Cp(this.s),Cp(this.l),Mm(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=Mm(this.opacity);return`${e===1?"hsl(":"hsla("}${IT(this.h)}, ${Cp(this.s)*100}%, ${Cp(this.l)*100}%${e===1?")":`, ${e})`}`}}));function IT(e){return e=(e||0)%360,e<0?e+360:e}function Cp(e){return Math.max(0,Math.min(1,e||0))}function Tb(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}const J7=e=>()=>e;function Tte(e,t){return function(n){return e+n*t}}function Ete(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}function Pte(e){return(e=+e)==1?eM:function(t,n){return n-t?Ete(t,n,e):J7(isNaN(t)?n:t)}}function eM(e,t){var n=t-e;return n?Tte(e,n):J7(isNaN(e)?t:e)}const NT=function e(t){var n=Pte(t);function r(i,o){var s=n((i=K_(i)).r,(o=K_(o)).r),a=n(i.g,o.g),l=n(i.b,o.b),u=eM(i.opacity,o.opacity);return function(c){return i.r=s(c),i.g=a(c),i.b=l(c),i.opacity=u(c),i+""}}return r.gamma=e,r}(1);function cs(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}var X_=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Eb=new RegExp(X_.source,"g");function Ate(e){return function(){return e}}function kte(e){return function(t){return e(t)+""}}function Rte(e,t){var n=X_.lastIndex=Eb.lastIndex=0,r,i,o,s=-1,a=[],l=[];for(e=e+"",t=t+"";(r=X_.exec(e))&&(i=Eb.exec(t));)(o=i.index)>n&&(o=t.slice(n,o),a[s]?a[s]+=o:a[++s]=o),(r=r[0])===(i=i[0])?a[s]?a[s]+=i:a[++s]=i:(a[++s]=null,l.push({i:s,x:cs(r,i)})),n=Eb.lastIndex;return n180?c+=360:c-u>180&&(u+=360),f.push({i:d.push(i(d)+"rotate(",null,r)-2,x:cs(u,c)})):c&&d.push(i(d)+"rotate("+c+r)}function a(u,c,d,f){u!==c?f.push({i:d.push(i(d)+"skewX(",null,r)-2,x:cs(u,c)}):c&&d.push(i(d)+"skewX("+c+r)}function l(u,c,d,f,h,p){if(u!==d||c!==f){var m=h.push(i(h)+"scale(",null,",",null,")");p.push({i:m-4,x:cs(u,d)},{i:m-2,x:cs(c,f)})}else(d!==1||f!==1)&&h.push(i(h)+"scale("+d+","+f+")")}return function(u,c){var d=[],f=[];return u=e(u),c=e(c),o(u.translateX,u.translateY,c.translateX,c.translateY,d,f),s(u.rotate,c.rotate,d,f),a(u.skewX,c.skewX,d,f),l(u.scaleX,u.scaleY,c.scaleX,c.scaleY,d,f),u=c=null,function(h){for(var p=-1,m=f.length,S;++p=0&&e._call.call(void 0,t),e=e._next;--rc}function $T(){nl=(Nm=Mf.now())+R0,rc=fd=0;try{jte()}finally{rc=0,zte(),nl=0}}function Vte(){var e=Mf.now(),t=e-Nm;t>rM&&(R0-=t,Nm=e)}function zte(){for(var e,t=Im,n,r=1/0;t;)t._call?(r>t._time&&(r=t._time),e=t,t=t._next):(n=t._next,t._next=null,t=e?e._next=n:Im=n);hd=e,Q_(r)}function Q_(e){if(!rc){fd&&(fd=clearTimeout(fd));var t=e-nl;t>24?(e<1/0&&(fd=setTimeout($T,e-Mf.now()-R0)),Hc&&(Hc=clearInterval(Hc))):(Hc||(Nm=Mf.now(),Hc=setInterval(Vte,rM)),rc=1,iM($T))}}function FT(e,t,n){var r=new Dm;return t=t==null?0:+t,r.restart(i=>{r.stop(),e(i+t)},t,n),r}var Ute=A0("start","end","cancel","interrupt"),Gte=[],sM=0,BT=1,Z_=2,gg=3,jT=4,J_=5,mg=6;function O0(e,t,n,r,i,o){var s=e.__transition;if(!s)e.__transition={};else if(n in s)return;Hte(e,n,{name:t,index:r,group:i,on:Ute,tween:Gte,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:sM})}function Qx(e,t){var n=Pi(e,t);if(n.state>sM)throw new Error("too late; already scheduled");return n}function so(e,t){var n=Pi(e,t);if(n.state>gg)throw new Error("too late; already running");return n}function Pi(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function Hte(e,t,n){var r=e.__transition,i;r[t]=n,n.timer=oM(o,0,n.time);function o(u){n.state=BT,n.timer.restart(s,n.delay,n.time),n.delay<=u&&s(u-n.delay)}function s(u){var c,d,f,h;if(n.state!==BT)return l();for(c in r)if(h=r[c],h.name===n.name){if(h.state===gg)return FT(s);h.state===jT?(h.state=mg,h.timer.stop(),h.on.call("interrupt",e,e.__data__,h.index,h.group),delete r[c]):+cZ_&&r.state=0&&(t=t.slice(0,n)),!t||t==="start"})}function _ne(e,t,n){var r,i,o=Sne(t)?Qx:so;return function(){var s=o(this,e),a=s.on;a!==r&&(i=(r=a).copy()).on(t,n),s.on=i}}function wne(e,t){var n=this._id;return arguments.length<2?Pi(this.node(),n).on.on(e):this.each(_ne(n,e,t))}function xne(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}function Cne(){return this.on("end.remove",xne(this._id))}function Tne(e){var t=this._name,n=this._id;typeof e!="function"&&(e=Wx(e));for(var r=this._groups,i=r.length,o=new Array(i),s=0;s()=>e;function Yne(e,{sourceEvent:t,target:n,transform:r,dispatch:i}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},transform:{value:r,enumerable:!0,configurable:!0},_:{value:i}})}function Po(e,t,n){this.k=e,this.x=t,this.y=n}Po.prototype={constructor:Po,scale:function(e){return e===1?this:new Po(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new Po(this.k,this.x+this.k*e,this.y+this.k*t)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var Ms=new Po(1,0,0);Po.prototype;function Pb(e){e.stopImmediatePropagation()}function qc(e){e.preventDefault(),e.stopImmediatePropagation()}function Qne(e){return(!e.ctrlKey||e.type==="wheel")&&!e.button}function Zne(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,e.hasAttribute("viewBox")?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]):[[0,0],[e.clientWidth,e.clientHeight]]}function VT(){return this.__zoom||Ms}function Jne(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function ere(){return navigator.maxTouchPoints||"ontouchstart"in this}function tre(e,t,n){var r=e.invertX(t[0][0])-n[0][0],i=e.invertX(t[1][0])-n[1][0],o=e.invertY(t[0][1])-n[0][1],s=e.invertY(t[1][1])-n[1][1];return e.translate(i>r?(r+i)/2:Math.min(0,r)||Math.max(0,i),s>o?(o+s)/2:Math.min(0,o)||Math.max(0,s))}function nre(){var e=Qne,t=Zne,n=tre,r=Jne,i=ere,o=[0,1/0],s=[[-1/0,-1/0],[1/0,1/0]],a=250,l=Fte,u=A0("start","zoom","end"),c,d,f,h=500,p=150,m=0,S=10;function y(C){C.property("__zoom",VT).on("wheel.zoom",T,{passive:!1}).on("mousedown.zoom",P).on("dblclick.zoom",E).filter(i).on("touchstart.zoom",A).on("touchmove.zoom",$).on("touchend.zoom touchcancel.zoom",I).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}y.transform=function(C,R,M,N){var O=C.selection?C.selection():C;O.property("__zoom",VT),C!==O?_(C,R,M,N):O.interrupt().each(function(){w(this,arguments).event(N).start().zoom(null,typeof R=="function"?R.apply(this,arguments):R).end()})},y.scaleBy=function(C,R,M,N){y.scaleTo(C,function(){var O=this.__zoom.k,D=typeof R=="function"?R.apply(this,arguments):R;return O*D},M,N)},y.scaleTo=function(C,R,M,N){y.transform(C,function(){var O=t.apply(this,arguments),D=this.__zoom,L=M==null?b(O):typeof M=="function"?M.apply(this,arguments):M,j=D.invert(L),U=typeof R=="function"?R.apply(this,arguments):R;return n(g(v(D,U),L,j),O,s)},M,N)},y.translateBy=function(C,R,M,N){y.transform(C,function(){return n(this.__zoom.translate(typeof R=="function"?R.apply(this,arguments):R,typeof M=="function"?M.apply(this,arguments):M),t.apply(this,arguments),s)},null,N)},y.translateTo=function(C,R,M,N,O){y.transform(C,function(){var D=t.apply(this,arguments),L=this.__zoom,j=N==null?b(D):typeof N=="function"?N.apply(this,arguments):N;return n(Ms.translate(j[0],j[1]).scale(L.k).translate(typeof R=="function"?-R.apply(this,arguments):-R,typeof M=="function"?-M.apply(this,arguments):-M),D,s)},N,O)};function v(C,R){return R=Math.max(o[0],Math.min(o[1],R)),R===C.k?C:new Po(R,C.x,C.y)}function g(C,R,M){var N=R[0]-M[0]*C.k,O=R[1]-M[1]*C.k;return N===C.x&&O===C.y?C:new Po(C.k,N,O)}function b(C){return[(+C[0][0]+ +C[1][0])/2,(+C[0][1]+ +C[1][1])/2]}function _(C,R,M,N){C.on("start.zoom",function(){w(this,arguments).event(N).start()}).on("interrupt.zoom end.zoom",function(){w(this,arguments).event(N).end()}).tween("zoom",function(){var O=this,D=arguments,L=w(O,D).event(N),j=t.apply(O,D),U=M==null?b(j):typeof M=="function"?M.apply(O,D):M,G=Math.max(j[1][0]-j[0][0],j[1][1]-j[0][1]),W=O.__zoom,X=typeof R=="function"?R.apply(O,D):R,Y=l(W.invert(U).concat(G/W.k),X.invert(U).concat(G/X.k));return function(B){if(B===1)B=X;else{var H=Y(B),Q=G/H[2];B=new Po(Q,U[0]-H[0]*Q,U[1]-H[1]*Q)}L.zoom(null,B)}})}function w(C,R,M){return!M&&C.__zooming||new x(C,R)}function x(C,R){this.that=C,this.args=R,this.active=0,this.sourceEvent=null,this.extent=t.apply(C,R),this.taps=0}x.prototype={event:function(C){return C&&(this.sourceEvent=C),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(C,R){return this.mouse&&C!=="mouse"&&(this.mouse[1]=R.invert(this.mouse[0])),this.touch0&&C!=="touch"&&(this.touch0[1]=R.invert(this.touch0[0])),this.touch1&&C!=="touch"&&(this.touch1[1]=R.invert(this.touch1[0])),this.that.__zoom=R,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(C){var R=fi(this.that).datum();u.call(C,this.that,new Yne(C,{sourceEvent:this.sourceEvent,target:y,type:C,transform:this.that.__zoom,dispatch:u}),R)}};function T(C,...R){if(!e.apply(this,arguments))return;var M=w(this,R).event(C),N=this.__zoom,O=Math.max(o[0],Math.min(o[1],N.k*Math.pow(2,r.apply(this,arguments)))),D=$i(C);if(M.wheel)(M.mouse[0][0]!==D[0]||M.mouse[0][1]!==D[1])&&(M.mouse[1]=N.invert(M.mouse[0]=D)),clearTimeout(M.wheel);else{if(N.k===O)return;M.mouse=[D,N.invert(D)],yg(this),M.start()}qc(C),M.wheel=setTimeout(L,p),M.zoom("mouse",n(g(v(N,O),M.mouse[0],M.mouse[1]),M.extent,s));function L(){M.wheel=null,M.end()}}function P(C,...R){if(f||!e.apply(this,arguments))return;var M=C.currentTarget,N=w(this,R,!0).event(C),O=fi(C.view).on("mousemove.zoom",U,!0).on("mouseup.zoom",G,!0),D=$i(C,M),L=C.clientX,j=C.clientY;X7(C.view),Pb(C),N.mouse=[D,this.__zoom.invert(D)],yg(this),N.start();function U(W){if(qc(W),!N.moved){var X=W.clientX-L,Y=W.clientY-j;N.moved=X*X+Y*Y>m}N.event(W).zoom("mouse",n(g(N.that.__zoom,N.mouse[0]=$i(W,M),N.mouse[1]),N.extent,s))}function G(W){O.on("mousemove.zoom mouseup.zoom",null),Y7(W.view,N.moved),qc(W),N.event(W).end()}}function E(C,...R){if(e.apply(this,arguments)){var M=this.__zoom,N=$i(C.changedTouches?C.changedTouches[0]:C,this),O=M.invert(N),D=M.k*(C.shiftKey?.5:2),L=n(g(v(M,D),N,O),t.apply(this,R),s);qc(C),a>0?fi(this).transition().duration(a).call(_,L,N,C):fi(this).call(y.transform,L,N,C)}}function A(C,...R){if(e.apply(this,arguments)){var M=C.touches,N=M.length,O=w(this,R,C.changedTouches.length===N).event(C),D,L,j,U;for(Pb(C),L=0;L"[React Flow]: Seems like you have not used zustand provider as an ancestor. Help: https://reactflow.dev/error#001",error002:()=>"It looks like you've created a new nodeTypes or edgeTypes object. If this wasn't on purpose please define the nodeTypes/edgeTypes outside of the component or memoize them.",error003:e=>`Node type "${e}" not found. Using fallback type "default".`,error004:()=>"The React Flow parent container needs a width and a height to render the graph.",error005:()=>"Only child nodes can use a parent extent.",error006:()=>"Can't create edge. An edge needs a source and a target.",error007:e=>`The old edge with id=${e} does not exist.`,error009:e=>`Marker type "${e}" doesn't exist.`,error008:(e,t)=>`Couldn't create edge for ${e?"target":"source"} handle id: "${e?t.targetHandle:t.sourceHandle}", edge id: ${t.id}.`,error010:()=>"Handle: No node id found. Make sure to only use a Handle inside a custom Node.",error011:e=>`Edge type "${e}" not found. Using fallback type "default".`},cM=qs.error001();function jt(e,t){const n=k.useContext(M0);if(n===null)throw new Error(cM);return CJ(n,e,t)}const Vn=()=>{const e=k.useContext(M0);if(e===null)throw new Error(cM);return k.useMemo(()=>({getState:e.getState,setState:e.setState,subscribe:e.subscribe,destroy:e.destroy}),[e])},ire=e=>e.userSelectionActive?"none":"all";function ore({position:e,children:t,className:n,style:r,...i}){const o=jt(ire),s=`${e}`.split("-");return K.jsx("div",{className:ti(["react-flow__panel",n,...s]),style:{...r,pointerEvents:o},...i,children:t})}function sre({proOptions:e,position:t="bottom-right"}){return e!=null&&e.hideAttribution?null:K.jsx(ore,{position:t,className:"react-flow__attribution","data-message":"Please only hide this attribution when you are subscribed to React Flow Pro: https://pro.reactflow.dev",children:K.jsx("a",{href:"https://reactflow.dev",target:"_blank",rel:"noopener noreferrer","aria-label":"React Flow attribution",children:"React Flow"})})}const are=({x:e,y:t,label:n,labelStyle:r={},labelShowBg:i=!0,labelBgStyle:o={},labelBgPadding:s=[2,4],labelBgBorderRadius:a=2,children:l,className:u,...c})=>{const d=k.useRef(null),[f,h]=k.useState({x:0,y:0,width:0,height:0}),p=ti(["react-flow__edge-textwrapper",u]);return k.useEffect(()=>{if(d.current){const m=d.current.getBBox();h({x:m.x,y:m.y,width:m.width,height:m.height})}},[n]),typeof n>"u"||!n?null:K.jsxs("g",{transform:`translate(${e-f.width/2} ${t-f.height/2})`,className:p,visibility:f.width?"visible":"hidden",...c,children:[i&&K.jsx("rect",{width:f.width+2*s[0],x:-s[0],y:-s[1],height:f.height+2*s[1],className:"react-flow__edge-textbg",style:o,rx:a,ry:a}),K.jsx("text",{className:"react-flow__edge-text",y:f.height/2,dy:"0.3em",ref:d,style:r,children:n}),l]})};var lre=k.memo(are);const Jx=e=>({width:e.offsetWidth,height:e.offsetHeight}),ic=(e,t=0,n=1)=>Math.min(Math.max(e,t),n),eC=(e={x:0,y:0},t)=>({x:ic(e.x,t[0][0],t[1][0]),y:ic(e.y,t[0][1],t[1][1])}),zT=(e,t,n)=>en?-ic(Math.abs(e-n),1,50)/50:0,dM=(e,t)=>{const n=zT(e.x,35,t.width-35)*20,r=zT(e.y,35,t.height-35)*20;return[n,r]},fM=e=>{var t;return((t=e.getRootNode)==null?void 0:t.call(e))||(window==null?void 0:window.document)},hM=(e,t)=>({x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x2,t.x2),y2:Math.max(e.y2,t.y2)}),Lm=({x:e,y:t,width:n,height:r})=>({x:e,y:t,x2:e+n,y2:t+r}),pM=({x:e,y:t,x2:n,y2:r})=>({x:e,y:t,width:n-e,height:r-t}),UT=e=>({...e.positionAbsolute||{x:0,y:0},width:e.width||0,height:e.height||0}),Y3e=(e,t)=>pM(hM(Lm(e),Lm(t))),e2=(e,t)=>{const n=Math.max(0,Math.min(e.x+e.width,t.x+t.width)-Math.max(e.x,t.x)),r=Math.max(0,Math.min(e.y+e.height,t.y+t.height)-Math.max(e.y,t.y));return Math.ceil(n*r)},ure=e=>Kr(e.width)&&Kr(e.height)&&Kr(e.x)&&Kr(e.y),Kr=e=>!isNaN(e)&&isFinite(e),rn=Symbol.for("internals"),gM=["Enter"," ","Escape"],cre=(e,t)=>{},dre=e=>"nativeEvent"in e;function t2(e){var i,o;const t=dre(e)?e.nativeEvent:e,n=((o=(i=t.composedPath)==null?void 0:i.call(t))==null?void 0:o[0])||e.target;return["INPUT","SELECT","TEXTAREA"].includes(n==null?void 0:n.nodeName)||(n==null?void 0:n.hasAttribute("contenteditable"))||!!(n!=null&&n.closest(".nokey"))}const mM=e=>"clientX"in e,Is=(e,t)=>{var o,s;const n=mM(e),r=n?e.clientX:(o=e.touches)==null?void 0:o[0].clientX,i=n?e.clientY:(s=e.touches)==null?void 0:s[0].clientY;return{x:r-((t==null?void 0:t.left)??0),y:i-((t==null?void 0:t.top)??0)}},Sh=({id:e,path:t,labelX:n,labelY:r,label:i,labelStyle:o,labelShowBg:s,labelBgStyle:a,labelBgPadding:l,labelBgBorderRadius:u,style:c,markerEnd:d,markerStart:f,interactionWidth:h=20})=>K.jsxs(K.Fragment,{children:[K.jsx("path",{id:e,style:c,d:t,fill:"none",className:"react-flow__edge-path",markerEnd:d,markerStart:f}),h&&K.jsx("path",{d:t,fill:"none",strokeOpacity:0,strokeWidth:h,className:"react-flow__edge-interaction"}),i&&Kr(n)&&Kr(r)?K.jsx(lre,{x:n,y:r,label:i,labelStyle:o,labelShowBg:s,labelBgStyle:a,labelBgPadding:l,labelBgBorderRadius:u}):null]});Sh.displayName="BaseEdge";function Wc(e,t,n){return n===void 0?n:r=>{const i=t().edges.find(o=>o.id===e);i&&n(r,{...i})}}function yM({sourceX:e,sourceY:t,targetX:n,targetY:r}){const i=Math.abs(n-e)/2,o=n{const[S,y,v]=bM({sourceX:e,sourceY:t,sourcePosition:i,targetX:n,targetY:r,targetPosition:o});return K.jsx(Sh,{path:S,labelX:y,labelY:v,label:s,labelStyle:a,labelShowBg:l,labelBgStyle:u,labelBgPadding:c,labelBgBorderRadius:d,style:f,markerEnd:h,markerStart:p,interactionWidth:m})});tC.displayName="SimpleBezierEdge";const HT={[pe.Left]:{x:-1,y:0},[pe.Right]:{x:1,y:0},[pe.Top]:{x:0,y:-1},[pe.Bottom]:{x:0,y:1}},fre=({source:e,sourcePosition:t=pe.Bottom,target:n})=>t===pe.Left||t===pe.Right?e.xMath.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2));function hre({source:e,sourcePosition:t=pe.Bottom,target:n,targetPosition:r=pe.Top,center:i,offset:o}){const s=HT[t],a=HT[r],l={x:e.x+s.x*o,y:e.y+s.y*o},u={x:n.x+a.x*o,y:n.y+a.y*o},c=fre({source:l,sourcePosition:t,target:u}),d=c.x!==0?"x":"y",f=c[d];let h=[],p,m;const[S,y,v,g]=yM({sourceX:e.x,sourceY:e.y,targetX:n.x,targetY:n.y});if(s[d]*a[d]===-1){p=i.x||S,m=i.y||y;const _=[{x:p,y:l.y},{x:p,y:u.y}],w=[{x:l.x,y:m},{x:u.x,y:m}];s[d]===f?h=d==="x"?_:w:h=d==="x"?w:_}else{const _=[{x:l.x,y:u.y}],w=[{x:u.x,y:l.y}];if(d==="x"?h=s.x===f?w:_:h=s.y===f?_:w,t!==r){const x=d==="x"?"y":"x",T=s[d]===a[x],P=l[x]>u[x],E=l[x]{let g="";return v>0&&v{const[y,v,g]=n2({sourceX:e,sourceY:t,sourcePosition:d,targetX:n,targetY:r,targetPosition:f,borderRadius:m==null?void 0:m.borderRadius,offset:m==null?void 0:m.offset});return K.jsx(Sh,{path:y,labelX:v,labelY:g,label:i,labelStyle:o,labelShowBg:s,labelBgStyle:a,labelBgPadding:l,labelBgBorderRadius:u,style:c,markerEnd:h,markerStart:p,interactionWidth:S})});I0.displayName="SmoothStepEdge";const nC=k.memo(e=>{var t;return K.jsx(I0,{...e,pathOptions:k.useMemo(()=>{var n;return{borderRadius:0,offset:(n=e.pathOptions)==null?void 0:n.offset}},[(t=e.pathOptions)==null?void 0:t.offset])})});nC.displayName="StepEdge";function gre({sourceX:e,sourceY:t,targetX:n,targetY:r}){const[i,o,s,a]=yM({sourceX:e,sourceY:t,targetX:n,targetY:r});return[`M ${e},${t}L ${n},${r}`,i,o,s,a]}const rC=k.memo(({sourceX:e,sourceY:t,targetX:n,targetY:r,label:i,labelStyle:o,labelShowBg:s,labelBgStyle:a,labelBgPadding:l,labelBgBorderRadius:u,style:c,markerEnd:d,markerStart:f,interactionWidth:h})=>{const[p,m,S]=gre({sourceX:e,sourceY:t,targetX:n,targetY:r});return K.jsx(Sh,{path:p,labelX:m,labelY:S,label:i,labelStyle:o,labelShowBg:s,labelBgStyle:a,labelBgPadding:l,labelBgBorderRadius:u,style:c,markerEnd:d,markerStart:f,interactionWidth:h})});rC.displayName="StraightEdge";function Pp(e,t){return e>=0?.5*e:t*25*Math.sqrt(-e)}function WT({pos:e,x1:t,y1:n,x2:r,y2:i,c:o}){switch(e){case pe.Left:return[t-Pp(t-r,o),n];case pe.Right:return[t+Pp(r-t,o),n];case pe.Top:return[t,n-Pp(n-i,o)];case pe.Bottom:return[t,n+Pp(i-n,o)]}}function SM({sourceX:e,sourceY:t,sourcePosition:n=pe.Bottom,targetX:r,targetY:i,targetPosition:o=pe.Top,curvature:s=.25}){const[a,l]=WT({pos:n,x1:e,y1:t,x2:r,y2:i,c:s}),[u,c]=WT({pos:o,x1:r,y1:i,x2:e,y2:t,c:s}),[d,f,h,p]=vM({sourceX:e,sourceY:t,targetX:r,targetY:i,sourceControlX:a,sourceControlY:l,targetControlX:u,targetControlY:c});return[`M${e},${t} C${a},${l} ${u},${c} ${r},${i}`,d,f,h,p]}const Fm=k.memo(({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:i=pe.Bottom,targetPosition:o=pe.Top,label:s,labelStyle:a,labelShowBg:l,labelBgStyle:u,labelBgPadding:c,labelBgBorderRadius:d,style:f,markerEnd:h,markerStart:p,pathOptions:m,interactionWidth:S})=>{const[y,v,g]=SM({sourceX:e,sourceY:t,sourcePosition:i,targetX:n,targetY:r,targetPosition:o,curvature:m==null?void 0:m.curvature});return K.jsx(Sh,{path:y,labelX:v,labelY:g,label:s,labelStyle:a,labelShowBg:l,labelBgStyle:u,labelBgPadding:c,labelBgBorderRadius:d,style:f,markerEnd:h,markerStart:p,interactionWidth:S})});Fm.displayName="BezierEdge";const iC=k.createContext(null),mre=iC.Provider;iC.Consumer;const yre=()=>k.useContext(iC),vre=e=>"id"in e&&"source"in e&&"target"in e,bre=({source:e,sourceHandle:t,target:n,targetHandle:r})=>`reactflow__edge-${e}${t||""}-${n}${r||""}`,r2=(e,t)=>typeof e>"u"?"":typeof e=="string"?e:`${t?`${t}__`:""}${Object.keys(e).sort().map(r=>`${r}=${e[r]}`).join("&")}`,Sre=(e,t)=>t.some(n=>n.source===e.source&&n.target===e.target&&(n.sourceHandle===e.sourceHandle||!n.sourceHandle&&!e.sourceHandle)&&(n.targetHandle===e.targetHandle||!n.targetHandle&&!e.targetHandle)),_M=(e,t)=>{if(!e.source||!e.target)return t;let n;return vre(e)?n={...e}:n={...e,id:bre(e)},Sre(n,t)?t:t.concat(n)},wM=({x:e,y:t},[n,r,i],o,[s,a])=>{const l={x:(e-n)/i,y:(t-r)/i};return o?{x:s*Math.round(l.x/s),y:a*Math.round(l.y/a)}:l},_re=({x:e,y:t},[n,r,i])=>({x:e*i+n,y:t*i+r}),Nu=(e,t=[0,0])=>{if(!e)return{x:0,y:0,positionAbsolute:{x:0,y:0}};const n=(e.width??0)*t[0],r=(e.height??0)*t[1],i={x:e.position.x-n,y:e.position.y-r};return{...i,positionAbsolute:e.positionAbsolute?{x:e.positionAbsolute.x-n,y:e.positionAbsolute.y-r}:i}},xM=(e,t=[0,0])=>{if(e.length===0)return{x:0,y:0,width:0,height:0};const n=e.reduce((r,i)=>{const{x:o,y:s}=Nu(i,t).positionAbsolute;return hM(r,Lm({x:o,y:s,width:i.width||0,height:i.height||0}))},{x:1/0,y:1/0,x2:-1/0,y2:-1/0});return pM(n)},CM=(e,t,[n,r,i]=[0,0,1],o=!1,s=!1,a=[0,0])=>{const l={x:(t.x-n)/i,y:(t.y-r)/i,width:t.width/i,height:t.height/i},u=[];return e.forEach(c=>{const{width:d,height:f,selectable:h=!0,hidden:p=!1}=c;if(s&&!h||p)return!1;const{positionAbsolute:m}=Nu(c,a),S={x:m.x,y:m.y,width:d||0,height:f||0},y=e2(l,S),v=typeof d>"u"||typeof f>"u"||d===null||f===null,g=o&&y>0,b=(d||0)*(f||0);(v||g||y>=b||c.dragging)&&u.push(c)}),u},TM=(e,t)=>{const n=e.map(r=>r.id);return t.filter(r=>n.includes(r.source)||n.includes(r.target))},EM=(e,t,n,r,i,o=.1)=>{const s=t/(e.width*(1+o)),a=n/(e.height*(1+o)),l=Math.min(s,a),u=ic(l,r,i),c=e.x+e.width/2,d=e.y+e.height/2,f=t/2-c*u,h=n/2-d*u;return[f,h,u]},Ca=(e,t=0)=>e.transition().duration(t);function KT(e,t,n,r){return(t[n]||[]).reduce((i,o)=>{var s,a;return`${e.id}-${o.id}-${n}`!==r&&i.push({id:o.id||null,type:n,nodeId:e.id,x:(((s=e.positionAbsolute)==null?void 0:s.x)??0)+o.x+o.width/2,y:(((a=e.positionAbsolute)==null?void 0:a.y)??0)+o.y+o.height/2}),i},[])}function wre(e,t,n,r,i,o){const{x:s,y:a}=Is(e),u=t.elementsFromPoint(s,a).find(p=>p.classList.contains("react-flow__handle"));if(u){const p=u.getAttribute("data-nodeid");if(p){const m=oC(void 0,u),S=u.getAttribute("data-handleid"),y=o({nodeId:p,id:S,type:m});if(y)return{handle:{id:S,type:m,nodeId:p,x:n.x,y:n.y},validHandleResult:y}}}let c=[],d=1/0;if(i.forEach(p=>{const m=Math.sqrt((p.x-n.x)**2+(p.y-n.y)**2);if(m<=r){const S=o(p);m<=d&&(mp.isValid),h=c.some(({handle:p})=>p.type==="target");return c.find(({handle:p,validHandleResult:m})=>h?p.type==="target":f?m.isValid:!0)||c[0]}const xre={source:null,target:null,sourceHandle:null,targetHandle:null},PM=()=>({handleDomNode:null,isValid:!1,connection:xre,endHandle:null});function AM(e,t,n,r,i,o,s){const a=i==="target",l=s.querySelector(`.react-flow__handle[data-id="${e==null?void 0:e.nodeId}-${e==null?void 0:e.id}-${e==null?void 0:e.type}"]`),u={...PM(),handleDomNode:l};if(l){const c=oC(void 0,l),d=l.getAttribute("data-nodeid"),f=l.getAttribute("data-handleid"),h=l.classList.contains("connectable"),p=l.classList.contains("connectableend"),m={source:a?d:n,sourceHandle:a?f:r,target:a?n:d,targetHandle:a?r:f};u.connection=m,h&&p&&(t===rl.Strict?a&&c==="source"||!a&&c==="target":d!==n||f!==r)&&(u.endHandle={nodeId:d,handleId:f,type:c},u.isValid=o(m))}return u}function Cre({nodes:e,nodeId:t,handleId:n,handleType:r}){return e.reduce((i,o)=>{if(o[rn]){const{handleBounds:s}=o[rn];let a=[],l=[];s&&(a=KT(o,s,"source",`${t}-${n}-${r}`),l=KT(o,s,"target",`${t}-${n}-${r}`)),i.push(...a,...l)}return i},[])}function oC(e,t){return e||(t!=null&&t.classList.contains("target")?"target":t!=null&&t.classList.contains("source")?"source":null)}function Ab(e){e==null||e.classList.remove("valid","connecting","react-flow__handle-valid","react-flow__handle-connecting")}function Tre(e,t){let n=null;return t?n="valid":e&&!t&&(n="invalid"),n}function kM({event:e,handleId:t,nodeId:n,onConnect:r,isTarget:i,getState:o,setState:s,isValidConnection:a,edgeUpdaterType:l,onEdgeUpdateEnd:u}){const c=fM(e.target),{connectionMode:d,domNode:f,autoPanOnConnect:h,connectionRadius:p,onConnectStart:m,panBy:S,getNodes:y,cancelConnection:v}=o();let g=0,b;const{x:_,y:w}=Is(e),x=c==null?void 0:c.elementFromPoint(_,w),T=oC(l,x),P=f==null?void 0:f.getBoundingClientRect();if(!P||!T)return;let E,A=Is(e,P),$=!1,I=null,C=!1,R=null;const M=Cre({nodes:y(),nodeId:n,handleId:t,handleType:T}),N=()=>{if(!h)return;const[L,j]=dM(A,P);S({x:L,y:j}),g=requestAnimationFrame(N)};s({connectionPosition:A,connectionStatus:null,connectionNodeId:n,connectionHandleId:t,connectionHandleType:T,connectionStartHandle:{nodeId:n,handleId:t,type:T},connectionEndHandle:null}),m==null||m(e,{nodeId:n,handleId:t,handleType:T});function O(L){const{transform:j}=o();A=Is(L,P);const{handle:U,validHandleResult:G}=wre(L,c,wM(A,j,!1,[1,1]),p,M,W=>AM(W,d,n,t,i?"target":"source",a,c));if(b=U,$||(N(),$=!0),R=G.handleDomNode,I=G.connection,C=G.isValid,s({connectionPosition:b&&C?_re({x:b.x,y:b.y},j):A,connectionStatus:Tre(!!b,C),connectionEndHandle:G.endHandle}),!b&&!C&&!R)return Ab(E);I.source!==I.target&&R&&(Ab(E),E=R,R.classList.add("connecting","react-flow__handle-connecting"),R.classList.toggle("valid",C),R.classList.toggle("react-flow__handle-valid",C))}function D(L){var j,U;(b||R)&&I&&C&&(r==null||r(I)),(U=(j=o()).onConnectEnd)==null||U.call(j,L),l&&(u==null||u(L)),Ab(E),v(),cancelAnimationFrame(g),$=!1,C=!1,I=null,R=null,c.removeEventListener("mousemove",O),c.removeEventListener("mouseup",D),c.removeEventListener("touchmove",O),c.removeEventListener("touchend",D)}c.addEventListener("mousemove",O),c.addEventListener("mouseup",D),c.addEventListener("touchmove",O),c.addEventListener("touchend",D)}const XT=()=>!0,Ere=e=>({connectionStartHandle:e.connectionStartHandle,connectOnClick:e.connectOnClick,noPanClassName:e.noPanClassName}),Pre=(e,t,n)=>r=>{const{connectionStartHandle:i,connectionEndHandle:o,connectionClickStartHandle:s}=r;return{connecting:(i==null?void 0:i.nodeId)===e&&(i==null?void 0:i.handleId)===t&&(i==null?void 0:i.type)===n||(o==null?void 0:o.nodeId)===e&&(o==null?void 0:o.handleId)===t&&(o==null?void 0:o.type)===n,clickConnecting:(s==null?void 0:s.nodeId)===e&&(s==null?void 0:s.handleId)===t&&(s==null?void 0:s.type)===n}},RM=k.forwardRef(({type:e="source",position:t=pe.Top,isValidConnection:n,isConnectable:r=!0,isConnectableStart:i=!0,isConnectableEnd:o=!0,id:s,onConnect:a,children:l,className:u,onMouseDown:c,onTouchStart:d,...f},h)=>{var P,E;const p=s||null,m=e==="target",S=Vn(),y=yre(),{connectOnClick:v,noPanClassName:g}=jt(Ere,br),{connecting:b,clickConnecting:_}=jt(Pre(y,p,e),br);y||(E=(P=S.getState()).onError)==null||E.call(P,"010",qs.error010());const w=A=>{const{defaultEdgeOptions:$,onConnect:I,hasDefaultEdges:C}=S.getState(),R={...$,...A};if(C){const{edges:M,setEdges:N}=S.getState();N(_M(R,M))}I==null||I(R),a==null||a(R)},x=A=>{if(!y)return;const $=mM(A);i&&($&&A.button===0||!$)&&kM({event:A,handleId:p,nodeId:y,onConnect:w,isTarget:m,getState:S.getState,setState:S.setState,isValidConnection:n||S.getState().isValidConnection||XT}),$?c==null||c(A):d==null||d(A)},T=A=>{const{onClickConnectStart:$,onClickConnectEnd:I,connectionClickStartHandle:C,connectionMode:R,isValidConnection:M}=S.getState();if(!y||!C&&!i)return;if(!C){$==null||$(A,{nodeId:y,handleId:p,handleType:e}),S.setState({connectionClickStartHandle:{nodeId:y,type:e,handleId:p}});return}const N=fM(A.target),O=n||M||XT,{connection:D,isValid:L}=AM({nodeId:y,id:p,type:e},R,C.nodeId,C.handleId||null,C.type,O,N);L&&w(D),I==null||I(A),S.setState({connectionClickStartHandle:null})};return K.jsx("div",{"data-handleid":p,"data-nodeid":y,"data-handlepos":t,"data-id":`${y}-${p}-${e}`,className:ti(["react-flow__handle",`react-flow__handle-${t}`,"nodrag",g,u,{source:!m,target:m,connectable:r,connectablestart:i,connectableend:o,connecting:_,connectionindicator:r&&(i&&!b||o&&b)}]),onMouseDown:x,onTouchStart:x,onClick:v?T:void 0,ref:h,...f,children:l})});RM.displayName="Handle";var Bm=k.memo(RM);const OM=({data:e,isConnectable:t,targetPosition:n=pe.Top,sourcePosition:r=pe.Bottom})=>K.jsxs(K.Fragment,{children:[K.jsx(Bm,{type:"target",position:n,isConnectable:t}),e==null?void 0:e.label,K.jsx(Bm,{type:"source",position:r,isConnectable:t})]});OM.displayName="DefaultNode";var i2=k.memo(OM);const MM=({data:e,isConnectable:t,sourcePosition:n=pe.Bottom})=>K.jsxs(K.Fragment,{children:[e==null?void 0:e.label,K.jsx(Bm,{type:"source",position:n,isConnectable:t})]});MM.displayName="InputNode";var IM=k.memo(MM);const NM=({data:e,isConnectable:t,targetPosition:n=pe.Top})=>K.jsxs(K.Fragment,{children:[K.jsx(Bm,{type:"target",position:n,isConnectable:t}),e==null?void 0:e.label]});NM.displayName="OutputNode";var DM=k.memo(NM);const sC=()=>null;sC.displayName="GroupNode";const Are=e=>({selectedNodes:e.getNodes().filter(t=>t.selected),selectedEdges:e.edges.filter(t=>t.selected)}),Ap=e=>e.id;function kre(e,t){return br(e.selectedNodes.map(Ap),t.selectedNodes.map(Ap))&&br(e.selectedEdges.map(Ap),t.selectedEdges.map(Ap))}const LM=k.memo(({onSelectionChange:e})=>{const t=Vn(),{selectedNodes:n,selectedEdges:r}=jt(Are,kre);return k.useEffect(()=>{var o,s;const i={nodes:n,edges:r};e==null||e(i),(s=(o=t.getState()).onSelectionChange)==null||s.call(o,i)},[n,r,e]),null});LM.displayName="SelectionListener";const Rre=e=>!!e.onSelectionChange;function Ore({onSelectionChange:e}){const t=jt(Rre);return e||t?K.jsx(LM,{onSelectionChange:e}):null}const Mre=e=>({setNodes:e.setNodes,setEdges:e.setEdges,setDefaultNodesAndEdges:e.setDefaultNodesAndEdges,setMinZoom:e.setMinZoom,setMaxZoom:e.setMaxZoom,setTranslateExtent:e.setTranslateExtent,setNodeExtent:e.setNodeExtent,reset:e.reset});function Dl(e,t){k.useEffect(()=>{typeof e<"u"&&t(e)},[e])}function Ae(e,t,n){k.useEffect(()=>{typeof t<"u"&&n({[e]:t})},[t])}const Ire=({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,onConnect:i,onConnectStart:o,onConnectEnd:s,onClickConnectStart:a,onClickConnectEnd:l,nodesDraggable:u,nodesConnectable:c,nodesFocusable:d,edgesFocusable:f,edgesUpdatable:h,elevateNodesOnSelect:p,minZoom:m,maxZoom:S,nodeExtent:y,onNodesChange:v,onEdgesChange:g,elementsSelectable:b,connectionMode:_,snapGrid:w,snapToGrid:x,translateExtent:T,connectOnClick:P,defaultEdgeOptions:E,fitView:A,fitViewOptions:$,onNodesDelete:I,onEdgesDelete:C,onNodeDrag:R,onNodeDragStart:M,onNodeDragStop:N,onSelectionDrag:O,onSelectionDragStart:D,onSelectionDragStop:L,noPanClassName:j,nodeOrigin:U,rfId:G,autoPanOnConnect:W,autoPanOnNodeDrag:X,onError:Y,connectionRadius:B,isValidConnection:H})=>{const{setNodes:Q,setEdges:J,setDefaultNodesAndEdges:ne,setMinZoom:te,setMaxZoom:xe,setTranslateExtent:ve,setNodeExtent:ce,reset:De}=jt(Mre,br),se=Vn();return k.useEffect(()=>{const pt=r==null?void 0:r.map(yn=>({...yn,...E}));return ne(n,pt),()=>{De()}},[]),Ae("defaultEdgeOptions",E,se.setState),Ae("connectionMode",_,se.setState),Ae("onConnect",i,se.setState),Ae("onConnectStart",o,se.setState),Ae("onConnectEnd",s,se.setState),Ae("onClickConnectStart",a,se.setState),Ae("onClickConnectEnd",l,se.setState),Ae("nodesDraggable",u,se.setState),Ae("nodesConnectable",c,se.setState),Ae("nodesFocusable",d,se.setState),Ae("edgesFocusable",f,se.setState),Ae("edgesUpdatable",h,se.setState),Ae("elementsSelectable",b,se.setState),Ae("elevateNodesOnSelect",p,se.setState),Ae("snapToGrid",x,se.setState),Ae("snapGrid",w,se.setState),Ae("onNodesChange",v,se.setState),Ae("onEdgesChange",g,se.setState),Ae("connectOnClick",P,se.setState),Ae("fitViewOnInit",A,se.setState),Ae("fitViewOnInitOptions",$,se.setState),Ae("onNodesDelete",I,se.setState),Ae("onEdgesDelete",C,se.setState),Ae("onNodeDrag",R,se.setState),Ae("onNodeDragStart",M,se.setState),Ae("onNodeDragStop",N,se.setState),Ae("onSelectionDrag",O,se.setState),Ae("onSelectionDragStart",D,se.setState),Ae("onSelectionDragStop",L,se.setState),Ae("noPanClassName",j,se.setState),Ae("nodeOrigin",U,se.setState),Ae("rfId",G,se.setState),Ae("autoPanOnConnect",W,se.setState),Ae("autoPanOnNodeDrag",X,se.setState),Ae("onError",Y,se.setState),Ae("connectionRadius",B,se.setState),Ae("isValidConnection",H,se.setState),Dl(e,Q),Dl(t,J),Dl(m,te),Dl(S,xe),Dl(T,ve),Dl(y,ce),null},YT={display:"none"},Nre={position:"absolute",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)",clipPath:"inset(100%)"},$M="react-flow__node-desc",FM="react-flow__edge-desc",Dre="react-flow__aria-live",Lre=e=>e.ariaLiveMessage;function $re({rfId:e}){const t=jt(Lre);return K.jsx("div",{id:`${Dre}-${e}`,"aria-live":"assertive","aria-atomic":"true",style:Nre,children:t})}function Fre({rfId:e,disableKeyboardA11y:t}){return K.jsxs(K.Fragment,{children:[K.jsxs("div",{id:`${$M}-${e}`,style:YT,children:["Press enter or space to select a node.",!t&&"You can then use the arrow keys to move the node around."," Press delete to remove it and escape to cancel."," "]}),K.jsx("div",{id:`${FM}-${e}`,style:YT,children:"Press enter or space to select an edge. You can then press delete to remove it or escape to cancel."}),!t&&K.jsx($re,{rfId:e})]})}const Bre=(e,t,n)=>n===pe.Left?e-t:n===pe.Right?e+t:e,jre=(e,t,n)=>n===pe.Top?e-t:n===pe.Bottom?e+t:e,QT="react-flow__edgeupdater",ZT=({position:e,centerX:t,centerY:n,radius:r=10,onMouseDown:i,onMouseEnter:o,onMouseOut:s,type:a})=>K.jsx("circle",{onMouseDown:i,onMouseEnter:o,onMouseOut:s,className:ti([QT,`${QT}-${a}`]),cx:Bre(t,r,e),cy:jre(n,r,e),r,stroke:"transparent",fill:"transparent"}),Vre=()=>!0;var Ll=e=>{const t=({id:n,className:r,type:i,data:o,onClick:s,onEdgeDoubleClick:a,selected:l,animated:u,label:c,labelStyle:d,labelShowBg:f,labelBgStyle:h,labelBgPadding:p,labelBgBorderRadius:m,style:S,source:y,target:v,sourceX:g,sourceY:b,targetX:_,targetY:w,sourcePosition:x,targetPosition:T,elementsSelectable:P,hidden:E,sourceHandleId:A,targetHandleId:$,onContextMenu:I,onMouseEnter:C,onMouseMove:R,onMouseLeave:M,edgeUpdaterRadius:N,onEdgeUpdate:O,onEdgeUpdateStart:D,onEdgeUpdateEnd:L,markerEnd:j,markerStart:U,rfId:G,ariaLabel:W,isFocusable:X,isUpdatable:Y,pathOptions:B,interactionWidth:H})=>{const Q=k.useRef(null),[J,ne]=k.useState(!1),[te,xe]=k.useState(!1),ve=Vn(),ce=k.useMemo(()=>`url(#${r2(U,G)})`,[U,G]),De=k.useMemo(()=>`url(#${r2(j,G)})`,[j,G]);if(E)return null;const se=Gt=>{const{edges:xt,addSelectedEdges:wr}=ve.getState();if(P&&(ve.setState({nodesSelectionActive:!1}),wr([n])),s){const $r=xt.find(ri=>ri.id===n);s(Gt,$r)}},pt=Wc(n,ve.getState,a),yn=Wc(n,ve.getState,I),Mt=Wc(n,ve.getState,C),ut=Wc(n,ve.getState,R),tt=Wc(n,ve.getState,M),Ut=(Gt,xt)=>{if(Gt.button!==0)return;const{edges:wr,isValidConnection:$r}=ve.getState(),ri=xt?v:y,uo=(xt?$:A)||null,bn=xt?"target":"source",ii=$r||Vre,da=xt,ki=wr.find(nt=>nt.id===n);xe(!0),D==null||D(Gt,ki,bn);const fa=nt=>{xe(!1),L==null||L(nt,ki,bn)};kM({event:Gt,handleId:uo,nodeId:ri,onConnect:nt=>O==null?void 0:O(ki,nt),isTarget:da,getState:ve.getState,setState:ve.setState,isValidConnection:ii,edgeUpdaterType:bn,onEdgeUpdateEnd:fa})},sr=Gt=>Ut(Gt,!0),ni=Gt=>Ut(Gt,!1),Lr=()=>ne(!0),On=()=>ne(!1),vn=!P&&!s,Un=Gt=>{var xt;if(gM.includes(Gt.key)&&P){const{unselectNodesAndEdges:wr,addSelectedEdges:$r,edges:ri}=ve.getState();Gt.key==="Escape"?((xt=Q.current)==null||xt.blur(),wr({edges:[ri.find(bn=>bn.id===n)]})):$r([n])}};return K.jsxs("g",{className:ti(["react-flow__edge",`react-flow__edge-${i}`,r,{selected:l,animated:u,inactive:vn,updating:J}]),onClick:se,onDoubleClick:pt,onContextMenu:yn,onMouseEnter:Mt,onMouseMove:ut,onMouseLeave:tt,onKeyDown:X?Un:void 0,tabIndex:X?0:void 0,role:X?"button":void 0,"data-testid":`rf__edge-${n}`,"aria-label":W===null?void 0:W||`Edge from ${y} to ${v}`,"aria-describedby":X?`${FM}-${G}`:void 0,ref:Q,children:[!te&&K.jsx(e,{id:n,source:y,target:v,selected:l,animated:u,label:c,labelStyle:d,labelShowBg:f,labelBgStyle:h,labelBgPadding:p,labelBgBorderRadius:m,data:o,style:S,sourceX:g,sourceY:b,targetX:_,targetY:w,sourcePosition:x,targetPosition:T,sourceHandleId:A,targetHandleId:$,markerStart:ce,markerEnd:De,pathOptions:B,interactionWidth:H}),Y&&K.jsxs(K.Fragment,{children:[(Y==="source"||Y===!0)&&K.jsx(ZT,{position:x,centerX:g,centerY:b,radius:N,onMouseDown:sr,onMouseEnter:Lr,onMouseOut:On,type:"source"}),(Y==="target"||Y===!0)&&K.jsx(ZT,{position:T,centerX:_,centerY:w,radius:N,onMouseDown:ni,onMouseEnter:Lr,onMouseOut:On,type:"target"})]})]})};return t.displayName="EdgeWrapper",k.memo(t)};function zre(e){const t={default:Ll(e.default||Fm),straight:Ll(e.bezier||rC),step:Ll(e.step||nC),smoothstep:Ll(e.step||I0),simplebezier:Ll(e.simplebezier||tC)},n={},r=Object.keys(e).filter(i=>!["default","bezier"].includes(i)).reduce((i,o)=>(i[o]=Ll(e[o]||Fm),i),n);return{...t,...r}}function JT(e,t,n=null){const r=((n==null?void 0:n.x)||0)+t.x,i=((n==null?void 0:n.y)||0)+t.y,o=(n==null?void 0:n.width)||t.width,s=(n==null?void 0:n.height)||t.height;switch(e){case pe.Top:return{x:r+o/2,y:i};case pe.Right:return{x:r+o,y:i+s/2};case pe.Bottom:return{x:r+o/2,y:i+s};case pe.Left:return{x:r,y:i+s/2}}}function eE(e,t){return e?e.length===1||!t?e[0]:t&&e.find(n=>n.id===t)||null:null}const Ure=(e,t,n,r,i,o)=>{const s=JT(n,e,t),a=JT(o,r,i);return{sourceX:s.x,sourceY:s.y,targetX:a.x,targetY:a.y}};function Gre({sourcePos:e,targetPos:t,sourceWidth:n,sourceHeight:r,targetWidth:i,targetHeight:o,width:s,height:a,transform:l}){const u={x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x+n,t.x+i),y2:Math.max(e.y+r,t.y+o)};u.x===u.x2&&(u.x2+=1),u.y===u.y2&&(u.y2+=1);const c=Lm({x:(0-l[0])/l[2],y:(0-l[1])/l[2],width:s/l[2],height:a/l[2]}),d=Math.max(0,Math.min(c.x2,u.x2)-Math.max(c.x,u.x)),f=Math.max(0,Math.min(c.y2,u.y2)-Math.max(c.y,u.y));return Math.ceil(d*f)>0}function tE(e){var r,i,o,s,a;const t=((r=e==null?void 0:e[rn])==null?void 0:r.handleBounds)||null,n=t&&(e==null?void 0:e.width)&&(e==null?void 0:e.height)&&typeof((i=e==null?void 0:e.positionAbsolute)==null?void 0:i.x)<"u"&&typeof((o=e==null?void 0:e.positionAbsolute)==null?void 0:o.y)<"u";return[{x:((s=e==null?void 0:e.positionAbsolute)==null?void 0:s.x)||0,y:((a=e==null?void 0:e.positionAbsolute)==null?void 0:a.y)||0,width:(e==null?void 0:e.width)||0,height:(e==null?void 0:e.height)||0},t,!!n]}function BM(e,t){if(!e.parentNode)return!1;const n=t.get(e.parentNode);return n?n.selected?!0:BM(n,t):!1}function nE(e,t,n){let r=e;do{if(r!=null&&r.matches(t))return!0;if(r===n.current)return!1;r=r.parentElement}while(r);return!1}function Hre(e,t,n,r){return Array.from(e.values()).filter(i=>(i.selected||i.id===r)&&(!i.parentNode||!BM(i,e))&&(i.draggable||t&&typeof i.draggable>"u")).map(i=>{var o,s;return{id:i.id,position:i.position||{x:0,y:0},positionAbsolute:i.positionAbsolute||{x:0,y:0},distance:{x:n.x-(((o=i.positionAbsolute)==null?void 0:o.x)??0),y:n.y-(((s=i.positionAbsolute)==null?void 0:s.y)??0)},delta:{x:0,y:0},extent:i.extent,parentNode:i.parentNode,width:i.width,height:i.height}})}function qre(e,t){return!t||t==="parent"?t:[t[0],[t[1][0]-(e.width||0),t[1][1]-(e.height||0)]]}function jM(e,t,n,r,i=[0,0],o){const s=qre(e,e.extent||r);let a=s;if(e.extent==="parent")if(e.parentNode&&e.width&&e.height){const c=n.get(e.parentNode),{x:d,y:f}=Nu(c,i).positionAbsolute;a=c&&Kr(d)&&Kr(f)&&Kr(c.width)&&Kr(c.height)?[[d+e.width*i[0],f+e.height*i[1]],[d+c.width-e.width+e.width*i[0],f+c.height-e.height+e.height*i[1]]]:a}else o==null||o("005",qs.error005()),a=s;else if(e.extent&&e.parentNode){const c=n.get(e.parentNode),{x:d,y:f}=Nu(c,i).positionAbsolute;a=[[e.extent[0][0]+d,e.extent[0][1]+f],[e.extent[1][0]+d,e.extent[1][1]+f]]}let l={x:0,y:0};if(e.parentNode){const c=n.get(e.parentNode);l=Nu(c,i).positionAbsolute}const u=a?eC(t,a):t;return{position:{x:u.x-l.x,y:u.y-l.y},positionAbsolute:u}}function kb({nodeId:e,dragItems:t,nodeInternals:n}){const r=t.map(i=>({...n.get(i.id),position:i.position,positionAbsolute:i.positionAbsolute}));return[e?r.find(i=>i.id===e):r[0],r]}const rE=(e,t,n,r)=>{const i=t.querySelectorAll(e);if(!i||!i.length)return null;const o=Array.from(i),s=t.getBoundingClientRect(),a={x:s.width*r[0],y:s.height*r[1]};return o.map(l=>{const u=l.getBoundingClientRect();return{id:l.getAttribute("data-handleid"),position:l.getAttribute("data-handlepos"),x:(u.left-s.left-a.x)/n,y:(u.top-s.top-a.y)/n,...Jx(l)}})};function Kc(e,t,n){return n===void 0?n:r=>{const i=t().nodeInternals.get(e);n(r,{...i})}}function o2({id:e,store:t,unselect:n=!1,nodeRef:r}){const{addSelectedNodes:i,unselectNodesAndEdges:o,multiSelectionActive:s,nodeInternals:a}=t.getState(),l=a.get(e);t.setState({nodesSelectionActive:!1}),l.selected?(n||l.selected&&s)&&(o({nodes:[l]}),requestAnimationFrame(()=>{var u;return(u=r==null?void 0:r.current)==null?void 0:u.blur()})):i([e])}function Wre(){const e=Vn();return k.useCallback(({sourceEvent:n})=>{const{transform:r,snapGrid:i,snapToGrid:o}=e.getState(),s=n.touches?n.touches[0].clientX:n.clientX,a=n.touches?n.touches[0].clientY:n.clientY,l={x:(s-r[0])/r[2],y:(a-r[1])/r[2]};return{xSnapped:o?i[0]*Math.round(l.x/i[0]):l.x,ySnapped:o?i[1]*Math.round(l.y/i[1]):l.y,...l}},[])}function Rb(e){return(t,n,r)=>e==null?void 0:e(t,r)}function VM({nodeRef:e,disabled:t=!1,noDragClassName:n,handleSelector:r,nodeId:i,isSelectable:o,selectNodesOnDrag:s}){const a=Vn(),[l,u]=k.useState(!1),c=k.useRef([]),d=k.useRef({x:null,y:null}),f=k.useRef(0),h=k.useRef(null),p=k.useRef({x:0,y:0}),m=k.useRef(null),S=k.useRef(!1),y=Wre();return k.useEffect(()=>{if(e!=null&&e.current){const v=fi(e.current),g=({x:_,y:w})=>{const{nodeInternals:x,onNodeDrag:T,onSelectionDrag:P,updateNodePositions:E,nodeExtent:A,snapGrid:$,snapToGrid:I,nodeOrigin:C,onError:R}=a.getState();d.current={x:_,y:w};let M=!1;if(c.current=c.current.map(O=>{const D={x:_-O.distance.x,y:w-O.distance.y};I&&(D.x=$[0]*Math.round(D.x/$[0]),D.y=$[1]*Math.round(D.y/$[1]));const L=jM(O,D,x,A,C,R);return M=M||O.position.x!==L.position.x||O.position.y!==L.position.y,O.position=L.position,O.positionAbsolute=L.positionAbsolute,O}),!M)return;E(c.current,!0,!0),u(!0);const N=i?T:Rb(P);if(N&&m.current){const[O,D]=kb({nodeId:i,dragItems:c.current,nodeInternals:x});N(m.current,O,D)}},b=()=>{if(!h.current)return;const[_,w]=dM(p.current,h.current);if(_!==0||w!==0){const{transform:x,panBy:T}=a.getState();d.current.x=(d.current.x??0)-_/x[2],d.current.y=(d.current.y??0)-w/x[2],T({x:_,y:w})&&g(d.current)}f.current=requestAnimationFrame(b)};if(t)v.on(".drag",null);else{const _=fte().on("start",w=>{var M;const{nodeInternals:x,multiSelectionActive:T,domNode:P,nodesDraggable:E,unselectNodesAndEdges:A,onNodeDragStart:$,onSelectionDragStart:I}=a.getState(),C=i?$:Rb(I);!s&&!T&&i&&((M=x.get(i))!=null&&M.selected||A()),i&&o&&s&&o2({id:i,store:a,nodeRef:e});const R=y(w);if(d.current=R,c.current=Hre(x,E,R,i),C&&c.current){const[N,O]=kb({nodeId:i,dragItems:c.current,nodeInternals:x});C(w.sourceEvent,N,O)}h.current=(P==null?void 0:P.getBoundingClientRect())||null,p.current=Is(w.sourceEvent,h.current)}).on("drag",w=>{const x=y(w),{autoPanOnNodeDrag:T}=a.getState();!S.current&&T&&(S.current=!0,b()),(d.current.x!==x.xSnapped||d.current.y!==x.ySnapped)&&c.current&&(m.current=w.sourceEvent,p.current=Is(w.sourceEvent,h.current),g(x))}).on("end",w=>{if(u(!1),S.current=!1,cancelAnimationFrame(f.current),c.current){const{updateNodePositions:x,nodeInternals:T,onNodeDragStop:P,onSelectionDragStop:E}=a.getState(),A=i?P:Rb(E);if(x(c.current,!1,!1),A){const[$,I]=kb({nodeId:i,dragItems:c.current,nodeInternals:T});A(w.sourceEvent,$,I)}}}).filter(w=>{const x=w.target;return!w.button&&(!n||!nE(x,`.${n}`,e))&&(!r||nE(x,r,e))});return v.call(_),()=>{v.on(".drag",null)}}}},[e,t,n,r,o,a,i,s,y]),l}function zM(){const e=Vn();return k.useCallback(n=>{const{nodeInternals:r,nodeExtent:i,updateNodePositions:o,getNodes:s,snapToGrid:a,snapGrid:l,onError:u,nodesDraggable:c}=e.getState(),d=s().filter(v=>v.selected&&(v.draggable||c&&typeof v.draggable>"u")),f=a?l[0]:5,h=a?l[1]:5,p=n.isShiftPressed?4:1,m=n.x*f*p,S=n.y*h*p,y=d.map(v=>{if(v.positionAbsolute){const g={x:v.positionAbsolute.x+m,y:v.positionAbsolute.y+S};a&&(g.x=l[0]*Math.round(g.x/l[0]),g.y=l[1]*Math.round(g.y/l[1]));const{positionAbsolute:b,position:_}=jM(v,g,r,i,void 0,u);v.position=_,v.positionAbsolute=b}return v});o(y,!0,!1)},[])}const Du={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}};var Xc=e=>{const t=({id:n,type:r,data:i,xPos:o,yPos:s,xPosOrigin:a,yPosOrigin:l,selected:u,onClick:c,onMouseEnter:d,onMouseMove:f,onMouseLeave:h,onContextMenu:p,onDoubleClick:m,style:S,className:y,isDraggable:v,isSelectable:g,isConnectable:b,isFocusable:_,selectNodesOnDrag:w,sourcePosition:x,targetPosition:T,hidden:P,resizeObserver:E,dragHandle:A,zIndex:$,isParent:I,noDragClassName:C,noPanClassName:R,initialized:M,disableKeyboardA11y:N,ariaLabel:O,rfId:D})=>{const L=Vn(),j=k.useRef(null),U=k.useRef(x),G=k.useRef(T),W=k.useRef(r),X=g||v||c||d||f||h,Y=zM(),B=Kc(n,L.getState,d),H=Kc(n,L.getState,f),Q=Kc(n,L.getState,h),J=Kc(n,L.getState,p),ne=Kc(n,L.getState,m),te=ce=>{if(g&&(!w||!v)&&o2({id:n,store:L,nodeRef:j}),c){const De=L.getState().nodeInternals.get(n);c(ce,{...De})}},xe=ce=>{if(!t2(ce))if(gM.includes(ce.key)&&g){const De=ce.key==="Escape";o2({id:n,store:L,unselect:De,nodeRef:j})}else!N&&v&&u&&Object.prototype.hasOwnProperty.call(Du,ce.key)&&(L.setState({ariaLiveMessage:`Moved selected node ${ce.key.replace("Arrow","").toLowerCase()}. New position, x: ${~~o}, y: ${~~s}`}),Y({x:Du[ce.key].x,y:Du[ce.key].y,isShiftPressed:ce.shiftKey}))};k.useEffect(()=>{if(j.current&&!P){const ce=j.current;return E==null||E.observe(ce),()=>E==null?void 0:E.unobserve(ce)}},[P]),k.useEffect(()=>{const ce=W.current!==r,De=U.current!==x,se=G.current!==T;j.current&&(ce||De||se)&&(ce&&(W.current=r),De&&(U.current=x),se&&(G.current=T),L.getState().updateNodeDimensions([{id:n,nodeElement:j.current,forceUpdate:!0}]))},[n,r,x,T]);const ve=VM({nodeRef:j,disabled:P||!v,noDragClassName:C,handleSelector:A,nodeId:n,isSelectable:g,selectNodesOnDrag:w});return P?null:K.jsx("div",{className:ti(["react-flow__node",`react-flow__node-${r}`,{[R]:v},y,{selected:u,selectable:g,parent:I,dragging:ve}]),ref:j,style:{zIndex:$,transform:`translate(${a}px,${l}px)`,pointerEvents:X?"all":"none",visibility:M?"visible":"hidden",...S},"data-id":n,"data-testid":`rf__node-${n}`,onMouseEnter:B,onMouseMove:H,onMouseLeave:Q,onContextMenu:J,onClick:te,onDoubleClick:ne,onKeyDown:_?xe:void 0,tabIndex:_?0:void 0,role:_?"button":void 0,"aria-describedby":N?void 0:`${$M}-${D}`,"aria-label":O,children:K.jsx(mre,{value:n,children:K.jsx(e,{id:n,data:i,type:r,xPos:o,yPos:s,selected:u,isConnectable:b,sourcePosition:x,targetPosition:T,dragging:ve,dragHandle:A,zIndex:$})})})};return t.displayName="NodeWrapper",k.memo(t)};function Kre(e){const t={input:Xc(e.input||IM),default:Xc(e.default||i2),output:Xc(e.output||DM),group:Xc(e.group||sC)},n={},r=Object.keys(e).filter(i=>!["input","default","output","group"].includes(i)).reduce((i,o)=>(i[o]=Xc(e[o]||i2),i),n);return{...t,...r}}const Xre=({x:e,y:t,width:n,height:r,origin:i})=>!n||!r?{x:e,y:t}:i[0]<0||i[1]<0||i[0]>1||i[1]>1?{x:e,y:t}:{x:e-n*i[0],y:t-r*i[1]},Yre=typeof document<"u"?document:null;var Nf=(e=null,t={target:Yre})=>{const[n,r]=k.useState(!1),i=k.useRef(!1),o=k.useRef(new Set([])),[s,a]=k.useMemo(()=>{if(e!==null){const u=(Array.isArray(e)?e:[e]).filter(d=>typeof d=="string").map(d=>d.split("+")),c=u.reduce((d,f)=>d.concat(...f),[]);return[u,c]}return[[],[]]},[e]);return k.useEffect(()=>{var l,u;if(e!==null){const c=h=>{if(i.current=h.ctrlKey||h.metaKey||h.shiftKey,!i.current&&t2(h))return!1;const p=oE(h.code,a);o.current.add(h[p]),iE(s,o.current,!1)&&(h.preventDefault(),r(!0))},d=h=>{if(!i.current&&t2(h))return!1;const p=oE(h.code,a);iE(s,o.current,!0)?(r(!1),o.current.clear()):o.current.delete(h[p]),i.current=!1},f=()=>{o.current.clear(),r(!1)};return(l=t==null?void 0:t.target)==null||l.addEventListener("keydown",c),(u=t==null?void 0:t.target)==null||u.addEventListener("keyup",d),window.addEventListener("blur",f),()=>{var h,p;(h=t==null?void 0:t.target)==null||h.removeEventListener("keydown",c),(p=t==null?void 0:t.target)==null||p.removeEventListener("keyup",d),window.removeEventListener("blur",f)}}},[e,r]),n};function iE(e,t,n){return e.filter(r=>n||r.length===t.size).some(r=>r.every(i=>t.has(i)))}function oE(e,t){return t.includes(e)?"code":"key"}function UM(e,t,n,r){var s,a;if(!e.parentNode)return n;const i=t.get(e.parentNode),o=Nu(i,r);return UM(i,t,{x:(n.x??0)+o.x,y:(n.y??0)+o.y,z:(((s=i[rn])==null?void 0:s.z)??0)>(n.z??0)?((a=i[rn])==null?void 0:a.z)??0:n.z??0},r)}function GM(e,t,n){e.forEach(r=>{var i;if(r.parentNode&&!e.has(r.parentNode))throw new Error(`Parent node ${r.parentNode} not found`);if(r.parentNode||n!=null&&n[r.id]){const{x:o,y:s,z:a}=UM(r,e,{...r.position,z:((i=r[rn])==null?void 0:i.z)??0},t);r.positionAbsolute={x:o,y:s},r[rn].z=a,n!=null&&n[r.id]&&(r[rn].isParent=!0)}})}function Ob(e,t,n,r){const i=new Map,o={},s=r?1e3:0;return e.forEach(a=>{var d;const l=(Kr(a.zIndex)?a.zIndex:0)+(a.selected?s:0),u=t.get(a.id),c={width:u==null?void 0:u.width,height:u==null?void 0:u.height,...a,positionAbsolute:{x:a.position.x,y:a.position.y}};a.parentNode&&(c.parentNode=a.parentNode,o[a.parentNode]=!0),Object.defineProperty(c,rn,{enumerable:!1,value:{handleBounds:(d=u==null?void 0:u[rn])==null?void 0:d.handleBounds,z:l}}),i.set(a.id,c)}),GM(i,n,o),i}function HM(e,t={}){const{getNodes:n,width:r,height:i,minZoom:o,maxZoom:s,d3Zoom:a,d3Selection:l,fitViewOnInitDone:u,fitViewOnInit:c,nodeOrigin:d}=e(),f=t.initial&&!u&&c;if(a&&l&&(f||!t.initial)){const p=n().filter(S=>{var v;const y=t.includeHiddenNodes?S.width&&S.height:!S.hidden;return(v=t.nodes)!=null&&v.length?y&&t.nodes.some(g=>g.id===S.id):y}),m=p.every(S=>S.width&&S.height);if(p.length>0&&m){const S=xM(p,d),[y,v,g]=EM(S,r,i,t.minZoom??o,t.maxZoom??s,t.padding??.1),b=Ms.translate(y,v).scale(g);return typeof t.duration=="number"&&t.duration>0?a.transform(Ca(l,t.duration),b):a.transform(l,b),!0}}return!1}function Qre(e,t){return e.forEach(n=>{const r=t.get(n.id);r&&t.set(r.id,{...r,[rn]:r[rn],selected:n.selected})}),new Map(t)}function Zre(e,t){return t.map(n=>{const r=e.find(i=>i.id===n.id);return r&&(n.selected=r.selected),n})}function kp({changedNodes:e,changedEdges:t,get:n,set:r}){const{nodeInternals:i,edges:o,onNodesChange:s,onEdgesChange:a,hasDefaultNodes:l,hasDefaultEdges:u}=n();e!=null&&e.length&&(l&&r({nodeInternals:Qre(e,i)}),s==null||s(e)),t!=null&&t.length&&(u&&r({edges:Zre(t,o)}),a==null||a(t))}const $l=()=>{},Jre={zoomIn:$l,zoomOut:$l,zoomTo:$l,getZoom:()=>1,setViewport:$l,getViewport:()=>({x:0,y:0,zoom:1}),fitView:()=>!1,setCenter:$l,fitBounds:$l,project:e=>e,viewportInitialized:!1},eie=e=>({d3Zoom:e.d3Zoom,d3Selection:e.d3Selection}),tie=()=>{const e=Vn(),{d3Zoom:t,d3Selection:n}=jt(eie,br);return k.useMemo(()=>n&&t?{zoomIn:i=>t.scaleBy(Ca(n,i==null?void 0:i.duration),1.2),zoomOut:i=>t.scaleBy(Ca(n,i==null?void 0:i.duration),1/1.2),zoomTo:(i,o)=>t.scaleTo(Ca(n,o==null?void 0:o.duration),i),getZoom:()=>e.getState().transform[2],setViewport:(i,o)=>{const[s,a,l]=e.getState().transform,u=Ms.translate(i.x??s,i.y??a).scale(i.zoom??l);t.transform(Ca(n,o==null?void 0:o.duration),u)},getViewport:()=>{const[i,o,s]=e.getState().transform;return{x:i,y:o,zoom:s}},fitView:i=>HM(e.getState,i),setCenter:(i,o,s)=>{const{width:a,height:l,maxZoom:u}=e.getState(),c=typeof(s==null?void 0:s.zoom)<"u"?s.zoom:u,d=a/2-i*c,f=l/2-o*c,h=Ms.translate(d,f).scale(c);t.transform(Ca(n,s==null?void 0:s.duration),h)},fitBounds:(i,o)=>{const{width:s,height:a,minZoom:l,maxZoom:u}=e.getState(),[c,d,f]=EM(i,s,a,l,u,(o==null?void 0:o.padding)??.1),h=Ms.translate(c,d).scale(f);t.transform(Ca(n,o==null?void 0:o.duration),h)},project:i=>{const{transform:o,snapToGrid:s,snapGrid:a}=e.getState();return wM(i,o,s,a)},viewportInitialized:!0}:Jre,[t,n])};function qM(){const e=tie(),t=Vn(),n=k.useCallback(()=>t.getState().getNodes().map(m=>({...m})),[]),r=k.useCallback(m=>t.getState().nodeInternals.get(m),[]),i=k.useCallback(()=>{const{edges:m=[]}=t.getState();return m.map(S=>({...S}))},[]),o=k.useCallback(m=>{const{edges:S=[]}=t.getState();return S.find(y=>y.id===m)},[]),s=k.useCallback(m=>{const{getNodes:S,setNodes:y,hasDefaultNodes:v,onNodesChange:g}=t.getState(),b=S(),_=typeof m=="function"?m(b):m;if(v)y(_);else if(g){const w=_.length===0?b.map(x=>({type:"remove",id:x.id})):_.map(x=>({item:x,type:"reset"}));g(w)}},[]),a=k.useCallback(m=>{const{edges:S=[],setEdges:y,hasDefaultEdges:v,onEdgesChange:g}=t.getState(),b=typeof m=="function"?m(S):m;if(v)y(b);else if(g){const _=b.length===0?S.map(w=>({type:"remove",id:w.id})):b.map(w=>({item:w,type:"reset"}));g(_)}},[]),l=k.useCallback(m=>{const S=Array.isArray(m)?m:[m],{getNodes:y,setNodes:v,hasDefaultNodes:g,onNodesChange:b}=t.getState();if(g){const w=[...y(),...S];v(w)}else if(b){const _=S.map(w=>({item:w,type:"add"}));b(_)}},[]),u=k.useCallback(m=>{const S=Array.isArray(m)?m:[m],{edges:y=[],setEdges:v,hasDefaultEdges:g,onEdgesChange:b}=t.getState();if(g)v([...y,...S]);else if(b){const _=S.map(w=>({item:w,type:"add"}));b(_)}},[]),c=k.useCallback(()=>{const{getNodes:m,edges:S=[],transform:y}=t.getState(),[v,g,b]=y;return{nodes:m().map(_=>({..._})),edges:S.map(_=>({..._})),viewport:{x:v,y:g,zoom:b}}},[]),d=k.useCallback(({nodes:m,edges:S})=>{const{nodeInternals:y,getNodes:v,edges:g,hasDefaultNodes:b,hasDefaultEdges:_,onNodesDelete:w,onEdgesDelete:x,onNodesChange:T,onEdgesChange:P}=t.getState(),E=(m||[]).map(R=>R.id),A=(S||[]).map(R=>R.id),$=v().reduce((R,M)=>{const N=!E.includes(M.id)&&M.parentNode&&R.find(D=>D.id===M.parentNode);return(typeof M.deletable=="boolean"?M.deletable:!0)&&(E.includes(M.id)||N)&&R.push(M),R},[]),I=g.filter(R=>typeof R.deletable=="boolean"?R.deletable:!0),C=I.filter(R=>A.includes(R.id));if($||C){const R=TM($,I),M=[...C,...R],N=M.reduce((O,D)=>(O.includes(D.id)||O.push(D.id),O),[]);if((_||b)&&(_&&t.setState({edges:g.filter(O=>!N.includes(O.id))}),b&&($.forEach(O=>{y.delete(O.id)}),t.setState({nodeInternals:new Map(y)}))),N.length>0&&(x==null||x(M),P&&P(N.map(O=>({id:O,type:"remove"})))),$.length>0&&(w==null||w($),T)){const O=$.map(D=>({id:D.id,type:"remove"}));T(O)}}},[]),f=k.useCallback(m=>{const S=ure(m),y=S?null:t.getState().nodeInternals.get(m.id);return[S?m:UT(y),y,S]},[]),h=k.useCallback((m,S=!0,y)=>{const[v,g,b]=f(m);return v?(y||t.getState().getNodes()).filter(_=>{if(!b&&(_.id===g.id||!_.positionAbsolute))return!1;const w=UT(_),x=e2(w,v);return S&&x>0||x>=m.width*m.height}):[]},[]),p=k.useCallback((m,S,y=!0)=>{const[v]=f(m);if(!v)return!1;const g=e2(v,S);return y&&g>0||g>=m.width*m.height},[]);return k.useMemo(()=>({...e,getNodes:n,getNode:r,getEdges:i,getEdge:o,setNodes:s,setEdges:a,addNodes:l,addEdges:u,toObject:c,deleteElements:d,getIntersectingNodes:h,isNodeIntersecting:p}),[e,n,r,i,o,s,a,l,u,c,d,h,p])}var nie=({deleteKeyCode:e,multiSelectionKeyCode:t})=>{const n=Vn(),{deleteElements:r}=qM(),i=Nf(e),o=Nf(t);k.useEffect(()=>{if(i){const{edges:s,getNodes:a}=n.getState(),l=a().filter(c=>c.selected),u=s.filter(c=>c.selected);r({nodes:l,edges:u}),n.setState({nodesSelectionActive:!1})}},[i]),k.useEffect(()=>{n.setState({multiSelectionActive:o})},[o])};function rie(e){const t=Vn();k.useEffect(()=>{let n;const r=()=>{var o,s;if(!e.current)return;const i=Jx(e.current);(i.height===0||i.width===0)&&((s=(o=t.getState()).onError)==null||s.call(o,"004",qs.error004())),t.setState({width:i.width||500,height:i.height||500})};return r(),window.addEventListener("resize",r),e.current&&(n=new ResizeObserver(()=>r()),n.observe(e.current)),()=>{window.removeEventListener("resize",r),n&&e.current&&n.unobserve(e.current)}},[])}const aC={position:"absolute",width:"100%",height:"100%",top:0,left:0},iie=(e,t)=>e.x!==t.x||e.y!==t.y||e.zoom!==t.k,Mb=e=>({x:e.x,y:e.y,zoom:e.k}),Fl=(e,t)=>e.target.closest(`.${t}`),sE=(e,t)=>t===2&&Array.isArray(e)&&e.includes(2),oie=e=>({d3Zoom:e.d3Zoom,d3Selection:e.d3Selection,d3ZoomHandler:e.d3ZoomHandler,userSelectionActive:e.userSelectionActive}),sie=({onMove:e,onMoveStart:t,onMoveEnd:n,onPaneContextMenu:r,zoomOnScroll:i=!0,zoomOnPinch:o=!0,panOnScroll:s=!1,panOnScrollSpeed:a=.5,panOnScrollMode:l=Iu.Free,zoomOnDoubleClick:u=!0,elementsSelectable:c,panOnDrag:d=!0,defaultViewport:f,translateExtent:h,minZoom:p,maxZoom:m,zoomActivationKeyCode:S,preventScrolling:y=!0,children:v,noWheelClassName:g,noPanClassName:b})=>{const _=k.useRef(),w=Vn(),x=k.useRef(!1),T=k.useRef(!1),P=k.useRef(null),E=k.useRef({x:0,y:0,zoom:0}),{d3Zoom:A,d3Selection:$,d3ZoomHandler:I,userSelectionActive:C}=jt(oie,br),R=Nf(S),M=k.useRef(0);return rie(P),k.useEffect(()=>{if(P.current){const N=P.current.getBoundingClientRect(),O=nre().scaleExtent([p,m]).translateExtent(h),D=fi(P.current).call(O),L=Ms.translate(f.x,f.y).scale(ic(f.zoom,p,m)),j=[[0,0],[N.width,N.height]],U=O.constrain()(L,j,h);O.transform(D,U),w.setState({d3Zoom:O,d3Selection:D,d3ZoomHandler:D.on("wheel.zoom"),transform:[U.x,U.y,U.k],domNode:P.current.closest(".react-flow")})}},[]),k.useEffect(()=>{$&&A&&(s&&!R&&!C?$.on("wheel.zoom",N=>{if(Fl(N,g))return!1;N.preventDefault(),N.stopImmediatePropagation();const O=$.property("__zoom").k||1;if(N.ctrlKey&&o){const U=$i(N),G=-N.deltaY*(N.deltaMode===1?.05:N.deltaMode?1:.002)*10,W=O*Math.pow(2,G);A.scaleTo($,W,U);return}const D=N.deltaMode===1?20:1,L=l===Iu.Vertical?0:N.deltaX*D,j=l===Iu.Horizontal?0:N.deltaY*D;A.translateBy($,-(L/O)*a,-(j/O)*a)},{passive:!1}):typeof I<"u"&&$.on("wheel.zoom",function(N,O){if(!y||Fl(N,g))return null;N.preventDefault(),I.call(this,N,O)},{passive:!1}))},[C,s,l,$,A,I,R,o,y,g]),k.useEffect(()=>{A&&A.on("start",N=>{var D;if(!N.sourceEvent)return null;M.current=N.sourceEvent.button;const{onViewportChangeStart:O}=w.getState();if(x.current=!0,((D=N.sourceEvent)==null?void 0:D.type)==="mousedown"&&w.setState({paneDragging:!0}),t||O){const L=Mb(N.transform);E.current=L,O==null||O(L),t==null||t(N.sourceEvent,L)}})},[A,t]),k.useEffect(()=>{A&&(C&&!x.current?A.on("zoom",null):C||A.on("zoom",N=>{const{onViewportChange:O}=w.getState();if(w.setState({transform:[N.transform.x,N.transform.y,N.transform.k]}),T.current=!!(r&&sE(d,M.current??0)),e||O){const D=Mb(N.transform);O==null||O(D),e==null||e(N.sourceEvent,D)}}))},[C,A,e,d,r]),k.useEffect(()=>{A&&A.on("end",N=>{if(!N.sourceEvent)return null;const{onViewportChangeEnd:O}=w.getState();if(x.current=!1,w.setState({paneDragging:!1}),r&&sE(d,M.current??0)&&!T.current&&r(N.sourceEvent),T.current=!1,(n||O)&&iie(E.current,N.transform)){const D=Mb(N.transform);E.current=D,clearTimeout(_.current),_.current=setTimeout(()=>{O==null||O(D),n==null||n(N.sourceEvent,D)},s?150:0)}})},[A,s,d,n,r]),k.useEffect(()=>{A&&A.filter(N=>{const O=R||i,D=o&&N.ctrlKey;if(N.button===1&&N.type==="mousedown"&&(Fl(N,"react-flow__node")||Fl(N,"react-flow__edge")))return!0;if(!d&&!O&&!s&&!u&&!o||C||!u&&N.type==="dblclick"||Fl(N,g)&&N.type==="wheel"||Fl(N,b)&&N.type!=="wheel"||!o&&N.ctrlKey&&N.type==="wheel"||!O&&!s&&!D&&N.type==="wheel"||!d&&(N.type==="mousedown"||N.type==="touchstart")||Array.isArray(d)&&!d.includes(N.button)&&(N.type==="mousedown"||N.type==="touchstart"))return!1;const L=Array.isArray(d)&&d.includes(N.button)||!N.button||N.button<=1;return(!N.ctrlKey||N.type==="wheel")&&L})},[C,A,i,o,s,u,d,c,R]),K.jsx("div",{className:"react-flow__renderer",ref:P,style:aC,children:v})},aie=e=>({userSelectionActive:e.userSelectionActive,userSelectionRect:e.userSelectionRect});function lie(){const{userSelectionActive:e,userSelectionRect:t}=jt(aie,br);return e&&t?K.jsx("div",{className:"react-flow__selection react-flow__container",style:{width:t.width,height:t.height,transform:`translate(${t.x}px, ${t.y}px)`}}):null}function aE(e,t){const n=e.find(r=>r.id===t.parentNode);if(n){const r=t.position.x+t.width-n.width,i=t.position.y+t.height-n.height;if(r>0||i>0||t.position.x<0||t.position.y<0){if(n.style={...n.style},n.style.width=n.style.width??n.width,n.style.height=n.style.height??n.height,r>0&&(n.style.width+=r),i>0&&(n.style.height+=i),t.position.x<0){const o=Math.abs(t.position.x);n.position.x=n.position.x-o,n.style.width+=o,t.position.x=0}if(t.position.y<0){const o=Math.abs(t.position.y);n.position.y=n.position.y-o,n.style.height+=o,t.position.y=0}n.width=n.style.width,n.height=n.style.height}}}function WM(e,t){if(e.some(r=>r.type==="reset"))return e.filter(r=>r.type==="reset").map(r=>r.item);const n=e.filter(r=>r.type==="add").map(r=>r.item);return t.reduce((r,i)=>{const o=e.filter(a=>a.id===i.id);if(o.length===0)return r.push(i),r;const s={...i};for(const a of o)if(a)switch(a.type){case"select":{s.selected=a.selected;break}case"position":{typeof a.position<"u"&&(s.position=a.position),typeof a.positionAbsolute<"u"&&(s.positionAbsolute=a.positionAbsolute),typeof a.dragging<"u"&&(s.dragging=a.dragging),s.expandParent&&aE(r,s);break}case"dimensions":{typeof a.dimensions<"u"&&(s.width=a.dimensions.width,s.height=a.dimensions.height),typeof a.updateStyle<"u"&&(s.style={...s.style||{},...a.dimensions}),typeof a.resizing=="boolean"&&(s.resizing=a.resizing),s.expandParent&&aE(r,s);break}case"remove":return r}return r.push(s),r},n)}function KM(e,t){return WM(e,t)}function uie(e,t){return WM(e,t)}const ds=(e,t)=>({id:e,type:"select",selected:t});function fu(e,t){return e.reduce((n,r)=>{const i=t.includes(r.id);return!r.selected&&i?(r.selected=!0,n.push(ds(r.id,!0))):r.selected&&!i&&(r.selected=!1,n.push(ds(r.id,!1))),n},[])}const Ib=(e,t)=>n=>{n.target===t.current&&(e==null||e(n))},cie=e=>({userSelectionActive:e.userSelectionActive,elementsSelectable:e.elementsSelectable,dragging:e.paneDragging}),XM=k.memo(({isSelecting:e,selectionMode:t=If.Full,panOnDrag:n,onSelectionStart:r,onSelectionEnd:i,onPaneClick:o,onPaneContextMenu:s,onPaneScroll:a,onPaneMouseEnter:l,onPaneMouseMove:u,onPaneMouseLeave:c,children:d})=>{const f=k.useRef(null),h=Vn(),p=k.useRef(0),m=k.useRef(0),S=k.useRef(),{userSelectionActive:y,elementsSelectable:v,dragging:g}=jt(cie,br),b=()=>{h.setState({userSelectionActive:!1,userSelectionRect:null}),p.current=0,m.current=0},_=I=>{o==null||o(I),h.getState().resetSelectedElements(),h.setState({nodesSelectionActive:!1})},w=I=>{if(Array.isArray(n)&&(n!=null&&n.includes(2))){I.preventDefault();return}s==null||s(I)},x=a?I=>a(I):void 0,T=I=>{const{resetSelectedElements:C,domNode:R}=h.getState();if(S.current=R==null?void 0:R.getBoundingClientRect(),!v||!e||I.button!==0||I.target!==f.current||!S.current)return;const{x:M,y:N}=Is(I,S.current);C(),h.setState({userSelectionRect:{width:0,height:0,startX:M,startY:N,x:M,y:N}}),r==null||r(I)},P=I=>{const{userSelectionRect:C,nodeInternals:R,edges:M,transform:N,onNodesChange:O,onEdgesChange:D,nodeOrigin:L,getNodes:j}=h.getState();if(!e||!S.current||!C)return;h.setState({userSelectionActive:!0,nodesSelectionActive:!1});const U=Is(I,S.current),G=C.startX??0,W=C.startY??0,X={...C,x:U.xJ.id),Q=B.map(J=>J.id);if(p.current!==Q.length){p.current=Q.length;const J=fu(Y,Q);J.length&&(O==null||O(J))}if(m.current!==H.length){m.current=H.length;const J=fu(M,H);J.length&&(D==null||D(J))}h.setState({userSelectionRect:X})},E=I=>{if(I.button!==0)return;const{userSelectionRect:C}=h.getState();!y&&C&&I.target===f.current&&(_==null||_(I)),h.setState({nodesSelectionActive:p.current>0}),b(),i==null||i(I)},A=I=>{y&&(h.setState({nodesSelectionActive:p.current>0}),i==null||i(I)),b()},$=v&&(e||y);return K.jsxs("div",{className:ti(["react-flow__pane",{dragging:g,selection:e}]),onClick:$?void 0:Ib(_,f),onContextMenu:Ib(w,f),onWheel:Ib(x,f),onMouseEnter:$?void 0:l,onMouseDown:$?T:void 0,onMouseMove:$?P:u,onMouseUp:$?E:void 0,onMouseLeave:$?A:c,ref:f,style:aC,children:[d,K.jsx(lie,{})]})});XM.displayName="Pane";const die=e=>{const t=e.getNodes().filter(n=>n.selected);return{...xM(t,e.nodeOrigin),transformString:`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]})`,userSelectionActive:e.userSelectionActive}};function fie({onSelectionContextMenu:e,noPanClassName:t,disableKeyboardA11y:n}){const r=Vn(),{width:i,height:o,x:s,y:a,transformString:l,userSelectionActive:u}=jt(die,br),c=zM(),d=k.useRef(null);if(k.useEffect(()=>{var p;n||(p=d.current)==null||p.focus({preventScroll:!0})},[n]),VM({nodeRef:d}),u||!i||!o)return null;const f=e?p=>{const m=r.getState().getNodes().filter(S=>S.selected);e(p,m)}:void 0,h=p=>{Object.prototype.hasOwnProperty.call(Du,p.key)&&c({x:Du[p.key].x,y:Du[p.key].y,isShiftPressed:p.shiftKey})};return K.jsx("div",{className:ti(["react-flow__nodesselection","react-flow__container",t]),style:{transform:l},children:K.jsx("div",{ref:d,className:"react-flow__nodesselection-rect",onContextMenu:f,tabIndex:n?void 0:-1,onKeyDown:n?void 0:h,style:{width:i,height:o,top:a,left:s}})})}var hie=k.memo(fie);const pie=e=>e.nodesSelectionActive,YM=({children:e,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:i,onPaneContextMenu:o,onPaneScroll:s,deleteKeyCode:a,onMove:l,onMoveStart:u,onMoveEnd:c,selectionKeyCode:d,selectionOnDrag:f,selectionMode:h,onSelectionStart:p,onSelectionEnd:m,multiSelectionKeyCode:S,panActivationKeyCode:y,zoomActivationKeyCode:v,elementsSelectable:g,zoomOnScroll:b,zoomOnPinch:_,panOnScroll:w,panOnScrollSpeed:x,panOnScrollMode:T,zoomOnDoubleClick:P,panOnDrag:E,defaultViewport:A,translateExtent:$,minZoom:I,maxZoom:C,preventScrolling:R,onSelectionContextMenu:M,noWheelClassName:N,noPanClassName:O,disableKeyboardA11y:D})=>{const L=jt(pie),j=Nf(d),G=Nf(y)||E,W=j||f&&G!==!0;return nie({deleteKeyCode:a,multiSelectionKeyCode:S}),K.jsx(sie,{onMove:l,onMoveStart:u,onMoveEnd:c,onPaneContextMenu:o,elementsSelectable:g,zoomOnScroll:b,zoomOnPinch:_,panOnScroll:w,panOnScrollSpeed:x,panOnScrollMode:T,zoomOnDoubleClick:P,panOnDrag:!j&&G,defaultViewport:A,translateExtent:$,minZoom:I,maxZoom:C,zoomActivationKeyCode:v,preventScrolling:R,noWheelClassName:N,noPanClassName:O,children:K.jsxs(XM,{onSelectionStart:p,onSelectionEnd:m,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:i,onPaneContextMenu:o,onPaneScroll:s,panOnDrag:G,isSelecting:!!W,selectionMode:h,children:[e,L&&K.jsx(hie,{onSelectionContextMenu:M,noPanClassName:O,disableKeyboardA11y:D})]})})};YM.displayName="FlowRenderer";var gie=k.memo(YM);function mie(e){return jt(k.useCallback(n=>e?CM(n.nodeInternals,{x:0,y:0,width:n.width,height:n.height},n.transform,!0):n.getNodes(),[e]))}const yie=e=>({nodesDraggable:e.nodesDraggable,nodesConnectable:e.nodesConnectable,nodesFocusable:e.nodesFocusable,elementsSelectable:e.elementsSelectable,updateNodeDimensions:e.updateNodeDimensions,onError:e.onError}),QM=e=>{const{nodesDraggable:t,nodesConnectable:n,nodesFocusable:r,elementsSelectable:i,updateNodeDimensions:o,onError:s}=jt(yie,br),a=mie(e.onlyRenderVisibleElements),l=k.useRef(),u=k.useMemo(()=>{if(typeof ResizeObserver>"u")return null;const c=new ResizeObserver(d=>{const f=d.map(h=>({id:h.target.getAttribute("data-id"),nodeElement:h.target,forceUpdate:!0}));o(f)});return l.current=c,c},[]);return k.useEffect(()=>()=>{var c;(c=l==null?void 0:l.current)==null||c.disconnect()},[]),K.jsx("div",{className:"react-flow__nodes",style:aC,children:a.map(c=>{var _,w;let d=c.type||"default";e.nodeTypes[d]||(s==null||s("003",qs.error003(d)),d="default");const f=e.nodeTypes[d]||e.nodeTypes.default,h=!!(c.draggable||t&&typeof c.draggable>"u"),p=!!(c.selectable||i&&typeof c.selectable>"u"),m=!!(c.connectable||n&&typeof c.connectable>"u"),S=!!(c.focusable||r&&typeof c.focusable>"u"),y=e.nodeExtent?eC(c.positionAbsolute,e.nodeExtent):c.positionAbsolute,v=(y==null?void 0:y.x)??0,g=(y==null?void 0:y.y)??0,b=Xre({x:v,y:g,width:c.width??0,height:c.height??0,origin:e.nodeOrigin});return K.jsx(f,{id:c.id,className:c.className,style:c.style,type:d,data:c.data,sourcePosition:c.sourcePosition||pe.Bottom,targetPosition:c.targetPosition||pe.Top,hidden:c.hidden,xPos:v,yPos:g,xPosOrigin:b.x,yPosOrigin:b.y,selectNodesOnDrag:e.selectNodesOnDrag,onClick:e.onNodeClick,onMouseEnter:e.onNodeMouseEnter,onMouseMove:e.onNodeMouseMove,onMouseLeave:e.onNodeMouseLeave,onContextMenu:e.onNodeContextMenu,onDoubleClick:e.onNodeDoubleClick,selected:!!c.selected,isDraggable:h,isSelectable:p,isConnectable:m,isFocusable:S,resizeObserver:u,dragHandle:c.dragHandle,zIndex:((_=c[rn])==null?void 0:_.z)??0,isParent:!!((w=c[rn])!=null&&w.isParent),noDragClassName:e.noDragClassName,noPanClassName:e.noPanClassName,initialized:!!c.width&&!!c.height,rfId:e.rfId,disableKeyboardA11y:e.disableKeyboardA11y,ariaLabel:c.ariaLabel},c.id)})})};QM.displayName="NodeRenderer";var vie=k.memo(QM);const bie=[{level:0,isMaxLevel:!0,edges:[]}];function Sie(e,t,n=!1){let r=-1;const i=e.reduce((s,a)=>{var c,d;const l=Kr(a.zIndex);let u=l?a.zIndex:0;if(n){const f=t.get(a.target),h=t.get(a.source),p=a.selected||(f==null?void 0:f.selected)||(h==null?void 0:h.selected),m=Math.max(((c=h==null?void 0:h[rn])==null?void 0:c.z)||0,((d=f==null?void 0:f[rn])==null?void 0:d.z)||0,1e3);u=(l?a.zIndex:0)+(p?m:0)}return s[u]?s[u].push(a):s[u]=[a],r=u>r?u:r,s},{}),o=Object.entries(i).map(([s,a])=>{const l=+s;return{edges:a,level:l,isMaxLevel:l===r}});return o.length===0?bie:o}function _ie(e,t,n){const r=jt(k.useCallback(i=>e?i.edges.filter(o=>{const s=t.get(o.source),a=t.get(o.target);return(s==null?void 0:s.width)&&(s==null?void 0:s.height)&&(a==null?void 0:a.width)&&(a==null?void 0:a.height)&&Gre({sourcePos:s.positionAbsolute||{x:0,y:0},targetPos:a.positionAbsolute||{x:0,y:0},sourceWidth:s.width,sourceHeight:s.height,targetWidth:a.width,targetHeight:a.height,width:i.width,height:i.height,transform:i.transform})}):i.edges,[e,t]));return Sie(r,t,n)}const wie=({color:e="none",strokeWidth:t=1})=>K.jsx("polyline",{stroke:e,strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:t,fill:"none",points:"-5,-4 0,0 -5,4"}),xie=({color:e="none",strokeWidth:t=1})=>K.jsx("polyline",{stroke:e,strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:t,fill:e,points:"-5,-4 0,0 -5,4 -5,-4"}),lE={[$m.Arrow]:wie,[$m.ArrowClosed]:xie};function Cie(e){const t=Vn();return k.useMemo(()=>{var i,o;return Object.prototype.hasOwnProperty.call(lE,e)?lE[e]:((o=(i=t.getState()).onError)==null||o.call(i,"009",qs.error009(e)),null)},[e])}const Tie=({id:e,type:t,color:n,width:r=12.5,height:i=12.5,markerUnits:o="strokeWidth",strokeWidth:s,orient:a="auto-start-reverse"})=>{const l=Cie(t);return l?K.jsx("marker",{className:"react-flow__arrowhead",id:e,markerWidth:`${r}`,markerHeight:`${i}`,viewBox:"-10 -10 20 20",markerUnits:o,orient:a,refX:"0",refY:"0",children:K.jsx(l,{color:n,strokeWidth:s})}):null},Eie=({defaultColor:e,rfId:t})=>n=>{const r=[];return n.edges.reduce((i,o)=>([o.markerStart,o.markerEnd].forEach(s=>{if(s&&typeof s=="object"){const a=r2(s,t);r.includes(a)||(i.push({id:a,color:s.color||e,...s}),r.push(a))}}),i),[]).sort((i,o)=>i.id.localeCompare(o.id))},ZM=({defaultColor:e,rfId:t})=>{const n=jt(k.useCallback(Eie({defaultColor:e,rfId:t}),[e,t]),(r,i)=>!(r.length!==i.length||r.some((o,s)=>o.id!==i[s].id)));return K.jsx("defs",{children:n.map(r=>K.jsx(Tie,{id:r.id,type:r.type,color:r.color,width:r.width,height:r.height,markerUnits:r.markerUnits,strokeWidth:r.strokeWidth,orient:r.orient},r.id))})};ZM.displayName="MarkerDefinitions";var Pie=k.memo(ZM);const Aie=e=>({nodesConnectable:e.nodesConnectable,edgesFocusable:e.edgesFocusable,edgesUpdatable:e.edgesUpdatable,elementsSelectable:e.elementsSelectable,width:e.width,height:e.height,connectionMode:e.connectionMode,nodeInternals:e.nodeInternals,onError:e.onError}),JM=({defaultMarkerColor:e,onlyRenderVisibleElements:t,elevateEdgesOnSelect:n,rfId:r,edgeTypes:i,noPanClassName:o,onEdgeUpdate:s,onEdgeContextMenu:a,onEdgeMouseEnter:l,onEdgeMouseMove:u,onEdgeMouseLeave:c,onEdgeClick:d,edgeUpdaterRadius:f,onEdgeDoubleClick:h,onEdgeUpdateStart:p,onEdgeUpdateEnd:m,children:S})=>{const{edgesFocusable:y,edgesUpdatable:v,elementsSelectable:g,width:b,height:_,connectionMode:w,nodeInternals:x,onError:T}=jt(Aie,br),P=_ie(t,x,n);return b?K.jsxs(K.Fragment,{children:[P.map(({level:E,edges:A,isMaxLevel:$})=>K.jsxs("svg",{style:{zIndex:E},width:b,height:_,className:"react-flow__edges react-flow__container",children:[$&&K.jsx(Pie,{defaultColor:e,rfId:r}),K.jsx("g",{children:A.map(I=>{const[C,R,M]=tE(x.get(I.source)),[N,O,D]=tE(x.get(I.target));if(!M||!D)return null;let L=I.type||"default";i[L]||(T==null||T("011",qs.error011(L)),L="default");const j=i[L]||i.default,U=w===rl.Strict?O.target:(O.target??[]).concat(O.source??[]),G=eE(R.source,I.sourceHandle),W=eE(U,I.targetHandle),X=(G==null?void 0:G.position)||pe.Bottom,Y=(W==null?void 0:W.position)||pe.Top,B=!!(I.focusable||y&&typeof I.focusable>"u"),H=typeof s<"u"&&(I.updatable||v&&typeof I.updatable>"u");if(!G||!W)return T==null||T("008",qs.error008(G,I)),null;const{sourceX:Q,sourceY:J,targetX:ne,targetY:te}=Ure(C,G,X,N,W,Y);return K.jsx(j,{id:I.id,className:ti([I.className,o]),type:L,data:I.data,selected:!!I.selected,animated:!!I.animated,hidden:!!I.hidden,label:I.label,labelStyle:I.labelStyle,labelShowBg:I.labelShowBg,labelBgStyle:I.labelBgStyle,labelBgPadding:I.labelBgPadding,labelBgBorderRadius:I.labelBgBorderRadius,style:I.style,source:I.source,target:I.target,sourceHandleId:I.sourceHandle,targetHandleId:I.targetHandle,markerEnd:I.markerEnd,markerStart:I.markerStart,sourceX:Q,sourceY:J,targetX:ne,targetY:te,sourcePosition:X,targetPosition:Y,elementsSelectable:g,onEdgeUpdate:s,onContextMenu:a,onMouseEnter:l,onMouseMove:u,onMouseLeave:c,onClick:d,edgeUpdaterRadius:f,onEdgeDoubleClick:h,onEdgeUpdateStart:p,onEdgeUpdateEnd:m,rfId:r,ariaLabel:I.ariaLabel,isFocusable:B,isUpdatable:H,pathOptions:"pathOptions"in I?I.pathOptions:void 0,interactionWidth:I.interactionWidth},I.id)})})]},E)),S]}):null};JM.displayName="EdgeRenderer";var kie=k.memo(JM);const Rie=e=>`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]})`;function Oie({children:e}){const t=jt(Rie);return K.jsx("div",{className:"react-flow__viewport react-flow__container",style:{transform:t},children:e})}function Mie(e){const t=qM(),n=k.useRef(!1);k.useEffect(()=>{!n.current&&t.viewportInitialized&&e&&(setTimeout(()=>e(t),1),n.current=!0)},[e,t.viewportInitialized])}const Iie={[pe.Left]:pe.Right,[pe.Right]:pe.Left,[pe.Top]:pe.Bottom,[pe.Bottom]:pe.Top},eI=({nodeId:e,handleType:t,style:n,type:r=ys.Bezier,CustomComponent:i,connectionStatus:o})=>{var w,x,T;const{fromNode:s,handleId:a,toX:l,toY:u,connectionMode:c}=jt(k.useCallback(P=>({fromNode:P.nodeInternals.get(e),handleId:P.connectionHandleId,toX:(P.connectionPosition.x-P.transform[0])/P.transform[2],toY:(P.connectionPosition.y-P.transform[1])/P.transform[2],connectionMode:P.connectionMode}),[e]),br),d=(w=s==null?void 0:s[rn])==null?void 0:w.handleBounds;let f=d==null?void 0:d[t];if(c===rl.Loose&&(f=f||(d==null?void 0:d[t==="source"?"target":"source"])),!s||!f)return null;const h=a?f.find(P=>P.id===a):f[0],p=h?h.x+h.width/2:(s.width??0)/2,m=h?h.y+h.height/2:s.height??0,S=(((x=s.positionAbsolute)==null?void 0:x.x)??0)+p,y=(((T=s.positionAbsolute)==null?void 0:T.y)??0)+m,v=h==null?void 0:h.position,g=v?Iie[v]:null;if(!v||!g)return null;if(i)return K.jsx(i,{connectionLineType:r,connectionLineStyle:n,fromNode:s,fromHandle:h,fromX:S,fromY:y,toX:l,toY:u,fromPosition:v,toPosition:g,connectionStatus:o});let b="";const _={sourceX:S,sourceY:y,sourcePosition:v,targetX:l,targetY:u,targetPosition:g};return r===ys.Bezier?[b]=SM(_):r===ys.Step?[b]=n2({..._,borderRadius:0}):r===ys.SmoothStep?[b]=n2(_):r===ys.SimpleBezier?[b]=bM(_):b=`M${S},${y} ${l},${u}`,K.jsx("path",{d:b,fill:"none",className:"react-flow__connection-path",style:n})};eI.displayName="ConnectionLine";const Nie=e=>({nodeId:e.connectionNodeId,handleType:e.connectionHandleType,nodesConnectable:e.nodesConnectable,connectionStatus:e.connectionStatus,width:e.width,height:e.height});function Die({containerStyle:e,style:t,type:n,component:r}){const{nodeId:i,handleType:o,nodesConnectable:s,width:a,height:l,connectionStatus:u}=jt(Nie,br);return!(i&&o&&a&&s)?null:K.jsx("svg",{style:e,width:a,height:l,className:"react-flow__edges react-flow__connectionline react-flow__container",children:K.jsx("g",{className:ti(["react-flow__connection",u]),children:K.jsx(eI,{nodeId:i,handleType:o,style:t,type:n,CustomComponent:r,connectionStatus:u})})})}const tI=({nodeTypes:e,edgeTypes:t,onMove:n,onMoveStart:r,onMoveEnd:i,onInit:o,onNodeClick:s,onEdgeClick:a,onNodeDoubleClick:l,onEdgeDoubleClick:u,onNodeMouseEnter:c,onNodeMouseMove:d,onNodeMouseLeave:f,onNodeContextMenu:h,onSelectionContextMenu:p,onSelectionStart:m,onSelectionEnd:S,connectionLineType:y,connectionLineStyle:v,connectionLineComponent:g,connectionLineContainerStyle:b,selectionKeyCode:_,selectionOnDrag:w,selectionMode:x,multiSelectionKeyCode:T,panActivationKeyCode:P,zoomActivationKeyCode:E,deleteKeyCode:A,onlyRenderVisibleElements:$,elementsSelectable:I,selectNodesOnDrag:C,defaultViewport:R,translateExtent:M,minZoom:N,maxZoom:O,preventScrolling:D,defaultMarkerColor:L,zoomOnScroll:j,zoomOnPinch:U,panOnScroll:G,panOnScrollSpeed:W,panOnScrollMode:X,zoomOnDoubleClick:Y,panOnDrag:B,onPaneClick:H,onPaneMouseEnter:Q,onPaneMouseMove:J,onPaneMouseLeave:ne,onPaneScroll:te,onPaneContextMenu:xe,onEdgeUpdate:ve,onEdgeContextMenu:ce,onEdgeMouseEnter:De,onEdgeMouseMove:se,onEdgeMouseLeave:pt,edgeUpdaterRadius:yn,onEdgeUpdateStart:Mt,onEdgeUpdateEnd:ut,noDragClassName:tt,noWheelClassName:Ut,noPanClassName:sr,elevateEdgesOnSelect:ni,disableKeyboardA11y:Lr,nodeOrigin:On,nodeExtent:vn,rfId:Un})=>(Mie(o),K.jsx(gie,{onPaneClick:H,onPaneMouseEnter:Q,onPaneMouseMove:J,onPaneMouseLeave:ne,onPaneContextMenu:xe,onPaneScroll:te,deleteKeyCode:A,selectionKeyCode:_,selectionOnDrag:w,selectionMode:x,onSelectionStart:m,onSelectionEnd:S,multiSelectionKeyCode:T,panActivationKeyCode:P,zoomActivationKeyCode:E,elementsSelectable:I,onMove:n,onMoveStart:r,onMoveEnd:i,zoomOnScroll:j,zoomOnPinch:U,zoomOnDoubleClick:Y,panOnScroll:G,panOnScrollSpeed:W,panOnScrollMode:X,panOnDrag:B,defaultViewport:R,translateExtent:M,minZoom:N,maxZoom:O,onSelectionContextMenu:p,preventScrolling:D,noDragClassName:tt,noWheelClassName:Ut,noPanClassName:sr,disableKeyboardA11y:Lr,children:K.jsxs(Oie,{children:[K.jsx(kie,{edgeTypes:t,onEdgeClick:a,onEdgeDoubleClick:u,onEdgeUpdate:ve,onlyRenderVisibleElements:$,onEdgeContextMenu:ce,onEdgeMouseEnter:De,onEdgeMouseMove:se,onEdgeMouseLeave:pt,onEdgeUpdateStart:Mt,onEdgeUpdateEnd:ut,edgeUpdaterRadius:yn,defaultMarkerColor:L,noPanClassName:sr,elevateEdgesOnSelect:!!ni,disableKeyboardA11y:Lr,rfId:Un,children:K.jsx(Die,{style:v,type:y,component:g,containerStyle:b})}),K.jsx("div",{className:"react-flow__edgelabel-renderer"}),K.jsx(vie,{nodeTypes:e,onNodeClick:s,onNodeDoubleClick:l,onNodeMouseEnter:c,onNodeMouseMove:d,onNodeMouseLeave:f,onNodeContextMenu:h,selectNodesOnDrag:C,onlyRenderVisibleElements:$,noPanClassName:sr,noDragClassName:tt,disableKeyboardA11y:Lr,nodeOrigin:On,nodeExtent:vn,rfId:Un})]})}));tI.displayName="GraphView";var Lie=k.memo(tI);const s2=[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],rs={rfId:"1",width:0,height:0,transform:[0,0,1],nodeInternals:new Map,edges:[],onNodesChange:null,onEdgesChange:null,hasDefaultNodes:!1,hasDefaultEdges:!1,d3Zoom:null,d3Selection:null,d3ZoomHandler:void 0,minZoom:.5,maxZoom:2,translateExtent:s2,nodeExtent:s2,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionNodeId:null,connectionHandleId:null,connectionHandleType:"source",connectionPosition:{x:0,y:0},connectionStatus:null,connectionMode:rl.Strict,domNode:null,paneDragging:!1,noPanClassName:"nopan",nodeOrigin:[0,0],snapGrid:[15,15],snapToGrid:!1,nodesDraggable:!0,nodesConnectable:!0,nodesFocusable:!0,edgesFocusable:!0,edgesUpdatable:!0,elementsSelectable:!0,elevateNodesOnSelect:!0,fitViewOnInit:!1,fitViewOnInitDone:!1,fitViewOnInitOptions:void 0,multiSelectionActive:!1,connectionStartHandle:null,connectionEndHandle:null,connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:"",autoPanOnConnect:!0,autoPanOnNodeDrag:!0,connectionRadius:20,onError:cre,isValidConnection:void 0},$ie=()=>wJ((e,t)=>({...rs,setNodes:n=>{const{nodeInternals:r,nodeOrigin:i,elevateNodesOnSelect:o}=t();e({nodeInternals:Ob(n,r,i,o)})},getNodes:()=>Array.from(t().nodeInternals.values()),setEdges:n=>{const{defaultEdgeOptions:r={}}=t();e({edges:n.map(i=>({...r,...i}))})},setDefaultNodesAndEdges:(n,r)=>{const i=typeof n<"u",o=typeof r<"u",s=i?Ob(n,new Map,t().nodeOrigin,t().elevateNodesOnSelect):new Map;e({nodeInternals:s,edges:o?r:[],hasDefaultNodes:i,hasDefaultEdges:o})},updateNodeDimensions:n=>{const{onNodesChange:r,nodeInternals:i,fitViewOnInit:o,fitViewOnInitDone:s,fitViewOnInitOptions:a,domNode:l,nodeOrigin:u}=t(),c=l==null?void 0:l.querySelector(".react-flow__viewport");if(!c)return;const d=window.getComputedStyle(c),{m22:f}=new window.DOMMatrixReadOnly(d.transform),h=n.reduce((m,S)=>{const y=i.get(S.id);if(y){const v=Jx(S.nodeElement);!!(v.width&&v.height&&(y.width!==v.width||y.height!==v.height||S.forceUpdate))&&(i.set(y.id,{...y,[rn]:{...y[rn],handleBounds:{source:rE(".source",S.nodeElement,f,u),target:rE(".target",S.nodeElement,f,u)}},...v}),m.push({id:y.id,type:"dimensions",dimensions:v}))}return m},[]);GM(i,u);const p=s||o&&!s&&HM(t,{initial:!0,...a});e({nodeInternals:new Map(i),fitViewOnInitDone:p}),(h==null?void 0:h.length)>0&&(r==null||r(h))},updateNodePositions:(n,r=!0,i=!1)=>{const{triggerNodeChanges:o}=t(),s=n.map(a=>{const l={id:a.id,type:"position",dragging:i};return r&&(l.positionAbsolute=a.positionAbsolute,l.position=a.position),l});o(s)},triggerNodeChanges:n=>{const{onNodesChange:r,nodeInternals:i,hasDefaultNodes:o,nodeOrigin:s,getNodes:a,elevateNodesOnSelect:l}=t();if(n!=null&&n.length){if(o){const u=KM(n,a()),c=Ob(u,i,s,l);e({nodeInternals:c})}r==null||r(n)}},addSelectedNodes:n=>{const{multiSelectionActive:r,edges:i,getNodes:o}=t();let s,a=null;r?s=n.map(l=>ds(l,!0)):(s=fu(o(),n),a=fu(i,[])),kp({changedNodes:s,changedEdges:a,get:t,set:e})},addSelectedEdges:n=>{const{multiSelectionActive:r,edges:i,getNodes:o}=t();let s,a=null;r?s=n.map(l=>ds(l,!0)):(s=fu(i,n),a=fu(o(),[])),kp({changedNodes:a,changedEdges:s,get:t,set:e})},unselectNodesAndEdges:({nodes:n,edges:r}={})=>{const{edges:i,getNodes:o}=t(),s=n||o(),a=r||i,l=s.map(c=>(c.selected=!1,ds(c.id,!1))),u=a.map(c=>ds(c.id,!1));kp({changedNodes:l,changedEdges:u,get:t,set:e})},setMinZoom:n=>{const{d3Zoom:r,maxZoom:i}=t();r==null||r.scaleExtent([n,i]),e({minZoom:n})},setMaxZoom:n=>{const{d3Zoom:r,minZoom:i}=t();r==null||r.scaleExtent([i,n]),e({maxZoom:n})},setTranslateExtent:n=>{var r;(r=t().d3Zoom)==null||r.translateExtent(n),e({translateExtent:n})},resetSelectedElements:()=>{const{edges:n,getNodes:r}=t(),o=r().filter(a=>a.selected).map(a=>ds(a.id,!1)),s=n.filter(a=>a.selected).map(a=>ds(a.id,!1));kp({changedNodes:o,changedEdges:s,get:t,set:e})},setNodeExtent:n=>{const{nodeInternals:r}=t();r.forEach(i=>{i.positionAbsolute=eC(i.position,n)}),e({nodeExtent:n,nodeInternals:new Map(r)})},panBy:n=>{const{transform:r,width:i,height:o,d3Zoom:s,d3Selection:a,translateExtent:l}=t();if(!s||!a||!n.x&&!n.y)return!1;const u=Ms.translate(r[0]+n.x,r[1]+n.y).scale(r[2]),c=[[0,0],[i,o]],d=s==null?void 0:s.constrain()(u,c,l);return s.transform(a,d),r[0]!==d.x||r[1]!==d.y||r[2]!==d.k},cancelConnection:()=>e({connectionNodeId:rs.connectionNodeId,connectionHandleId:rs.connectionHandleId,connectionHandleType:rs.connectionHandleType,connectionStatus:rs.connectionStatus,connectionStartHandle:rs.connectionStartHandle,connectionEndHandle:rs.connectionEndHandle}),reset:()=>e({...rs})})),nI=({children:e})=>{const t=k.useRef(null);return t.current||(t.current=$ie()),K.jsx(rre,{value:t.current,children:e})};nI.displayName="ReactFlowProvider";const rI=({children:e})=>k.useContext(M0)?K.jsx(K.Fragment,{children:e}):K.jsx(nI,{children:e});rI.displayName="ReactFlowWrapper";function uE(e,t){return k.useRef(null),k.useMemo(()=>t(e),[e])}const Fie={input:IM,default:i2,output:DM,group:sC},Bie={default:Fm,straight:rC,step:nC,smoothstep:I0,simplebezier:tC},jie=[0,0],Vie=[15,15],zie={x:0,y:0,zoom:1},Uie={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0},Gie=k.forwardRef(({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,className:i,nodeTypes:o=Fie,edgeTypes:s=Bie,onNodeClick:a,onEdgeClick:l,onInit:u,onMove:c,onMoveStart:d,onMoveEnd:f,onConnect:h,onConnectStart:p,onConnectEnd:m,onClickConnectStart:S,onClickConnectEnd:y,onNodeMouseEnter:v,onNodeMouseMove:g,onNodeMouseLeave:b,onNodeContextMenu:_,onNodeDoubleClick:w,onNodeDragStart:x,onNodeDrag:T,onNodeDragStop:P,onNodesDelete:E,onEdgesDelete:A,onSelectionChange:$,onSelectionDragStart:I,onSelectionDrag:C,onSelectionDragStop:R,onSelectionContextMenu:M,onSelectionStart:N,onSelectionEnd:O,connectionMode:D=rl.Strict,connectionLineType:L=ys.Bezier,connectionLineStyle:j,connectionLineComponent:U,connectionLineContainerStyle:G,deleteKeyCode:W="Backspace",selectionKeyCode:X="Shift",selectionOnDrag:Y=!1,selectionMode:B=If.Full,panActivationKeyCode:H="Space",multiSelectionKeyCode:Q="Meta",zoomActivationKeyCode:J="Meta",snapToGrid:ne=!1,snapGrid:te=Vie,onlyRenderVisibleElements:xe=!1,selectNodesOnDrag:ve=!0,nodesDraggable:ce,nodesConnectable:De,nodesFocusable:se,nodeOrigin:pt=jie,edgesFocusable:yn,edgesUpdatable:Mt,elementsSelectable:ut,defaultViewport:tt=zie,minZoom:Ut=.5,maxZoom:sr=2,translateExtent:ni=s2,preventScrolling:Lr=!0,nodeExtent:On,defaultMarkerColor:vn="#b1b1b7",zoomOnScroll:Un=!0,zoomOnPinch:Gt=!0,panOnScroll:xt=!1,panOnScrollSpeed:wr=.5,panOnScrollMode:$r=Iu.Free,zoomOnDoubleClick:ri=!0,panOnDrag:uo=!0,onPaneClick:bn,onPaneMouseEnter:ii,onPaneMouseMove:da,onPaneMouseLeave:ki,onPaneScroll:fa,onPaneContextMenu:Ct,children:nt,onEdgeUpdate:Sn,onEdgeContextMenu:an,onEdgeDoubleClick:Mn,onEdgeMouseEnter:Gn,onEdgeMouseMove:ar,onEdgeMouseLeave:Ri,onEdgeUpdateStart:Hn,onEdgeUpdateEnd:_n,edgeUpdaterRadius:co=10,onNodesChange:Zo,onEdgesChange:Jo,noDragClassName:Al="nodrag",noWheelClassName:fo="nowheel",noPanClassName:qn="nopan",fitView:ha=!1,fitViewOptions:g1,connectOnClick:m1=!0,attributionPosition:y1,proOptions:v1,defaultEdgeOptions:es,elevateNodesOnSelect:b1=!0,elevateEdgesOnSelect:S1=!1,disableKeyboardA11y:Hh=!1,autoPanOnConnect:_1=!0,autoPanOnNodeDrag:w1=!0,connectionRadius:x1=20,isValidConnection:kc,onError:C1,style:kl,id:Rl,...T1},Ol)=>{const qh=uE(o,Kre),E1=uE(s,zre),Rc=Rl||"1";return K.jsx("div",{...T1,style:{...kl,...Uie},ref:Ol,className:ti(["react-flow",i]),"data-testid":"rf__wrapper",id:Rl,children:K.jsxs(rI,{children:[K.jsx(Lie,{onInit:u,onMove:c,onMoveStart:d,onMoveEnd:f,onNodeClick:a,onEdgeClick:l,onNodeMouseEnter:v,onNodeMouseMove:g,onNodeMouseLeave:b,onNodeContextMenu:_,onNodeDoubleClick:w,nodeTypes:qh,edgeTypes:E1,connectionLineType:L,connectionLineStyle:j,connectionLineComponent:U,connectionLineContainerStyle:G,selectionKeyCode:X,selectionOnDrag:Y,selectionMode:B,deleteKeyCode:W,multiSelectionKeyCode:Q,panActivationKeyCode:H,zoomActivationKeyCode:J,onlyRenderVisibleElements:xe,selectNodesOnDrag:ve,defaultViewport:tt,translateExtent:ni,minZoom:Ut,maxZoom:sr,preventScrolling:Lr,zoomOnScroll:Un,zoomOnPinch:Gt,zoomOnDoubleClick:ri,panOnScroll:xt,panOnScrollSpeed:wr,panOnScrollMode:$r,panOnDrag:uo,onPaneClick:bn,onPaneMouseEnter:ii,onPaneMouseMove:da,onPaneMouseLeave:ki,onPaneScroll:fa,onPaneContextMenu:Ct,onSelectionContextMenu:M,onSelectionStart:N,onSelectionEnd:O,onEdgeUpdate:Sn,onEdgeContextMenu:an,onEdgeDoubleClick:Mn,onEdgeMouseEnter:Gn,onEdgeMouseMove:ar,onEdgeMouseLeave:Ri,onEdgeUpdateStart:Hn,onEdgeUpdateEnd:_n,edgeUpdaterRadius:co,defaultMarkerColor:vn,noDragClassName:Al,noWheelClassName:fo,noPanClassName:qn,elevateEdgesOnSelect:S1,rfId:Rc,disableKeyboardA11y:Hh,nodeOrigin:pt,nodeExtent:On}),K.jsx(Ire,{nodes:e,edges:t,defaultNodes:n,defaultEdges:r,onConnect:h,onConnectStart:p,onConnectEnd:m,onClickConnectStart:S,onClickConnectEnd:y,nodesDraggable:ce,nodesConnectable:De,nodesFocusable:se,edgesFocusable:yn,edgesUpdatable:Mt,elementsSelectable:ut,elevateNodesOnSelect:b1,minZoom:Ut,maxZoom:sr,nodeExtent:On,onNodesChange:Zo,onEdgesChange:Jo,snapToGrid:ne,snapGrid:te,connectionMode:D,translateExtent:ni,connectOnClick:m1,defaultEdgeOptions:es,fitView:ha,fitViewOptions:g1,onNodesDelete:E,onEdgesDelete:A,onNodeDragStart:x,onNodeDrag:T,onNodeDragStop:P,onSelectionDrag:C,onSelectionDragStart:I,onSelectionDragStop:R,noPanClassName:qn,nodeOrigin:pt,rfId:Rc,autoPanOnConnect:_1,autoPanOnNodeDrag:w1,onError:C1,connectionRadius:x1,isValidConnection:kc}),K.jsx(Ore,{onSelectionChange:$}),nt,K.jsx(sre,{proOptions:v1,position:y1}),K.jsx(Fre,{rfId:Rc,disableKeyboardA11y:Hh})]})})});Gie.displayName="ReactFlow";var iI={},N0={},D0={};Object.defineProperty(D0,"__esModule",{value:!0});D0.createLogMethods=void 0;var Hie=function(){return{debug:console.debug.bind(console),error:console.error.bind(console),fatal:console.error.bind(console),info:console.info.bind(console),trace:console.debug.bind(console),warn:console.warn.bind(console)}};D0.createLogMethods=Hie;var lC={},L0={};Object.defineProperty(L0,"__esModule",{value:!0});L0.boolean=void 0;const qie=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1"].includes(e.trim().toLowerCase());case"[object Number]":return e.valueOf()===1;case"[object Boolean]":return e.valueOf();default:return!1}};L0.boolean=qie;var $0={};Object.defineProperty($0,"__esModule",{value:!0});$0.isBooleanable=void 0;const Wie=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1","false","f","no","n","off","0"].includes(e.trim().toLowerCase());case"[object Number]":return[0,1].includes(e.valueOf());case"[object Boolean]":return!0;default:return!1}};$0.isBooleanable=Wie;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.isBooleanable=e.boolean=void 0;const t=L0;Object.defineProperty(e,"boolean",{enumerable:!0,get:function(){return t.boolean}});const n=$0;Object.defineProperty(e,"isBooleanable",{enumerable:!0,get:function(){return n.isBooleanable}})})(lC);var cE=Object.prototype.toString,oI=function(t){var n=cE.call(t),r=n==="[object Arguments]";return r||(r=n!=="[object Array]"&&t!==null&&typeof t=="object"&&typeof t.length=="number"&&t.length>=0&&cE.call(t.callee)==="[object Function]"),r},Nb,dE;function Kie(){if(dE)return Nb;dE=1;var e;if(!Object.keys){var t=Object.prototype.hasOwnProperty,n=Object.prototype.toString,r=oI,i=Object.prototype.propertyIsEnumerable,o=!i.call({toString:null},"toString"),s=i.call(function(){},"prototype"),a=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],l=function(f){var h=f.constructor;return h&&h.prototype===f},u={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},c=function(){if(typeof window>"u")return!1;for(var f in window)try{if(!u["$"+f]&&t.call(window,f)&&window[f]!==null&&typeof window[f]=="object")try{l(window[f])}catch{return!0}}catch{return!0}return!1}(),d=function(f){if(typeof window>"u"||!c)return l(f);try{return l(f)}catch{return!1}};e=function(h){var p=h!==null&&typeof h=="object",m=n.call(h)==="[object Function]",S=r(h),y=p&&n.call(h)==="[object String]",v=[];if(!p&&!m&&!S)throw new TypeError("Object.keys called on a non-object");var g=s&&m;if(y&&h.length>0&&!t.call(h,0))for(var b=0;b0)for(var _=0;_"u"||!un?Re:un(Uint8Array),Ga={"%AggregateError%":typeof AggregateError>"u"?Re:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer>"u"?Re:ArrayBuffer,"%ArrayIteratorPrototype%":Bl&&un?un([][Symbol.iterator]()):Re,"%AsyncFromSyncIteratorPrototype%":Re,"%AsyncFunction%":Ql,"%AsyncGenerator%":Ql,"%AsyncGeneratorFunction%":Ql,"%AsyncIteratorPrototype%":Ql,"%Atomics%":typeof Atomics>"u"?Re:Atomics,"%BigInt%":typeof BigInt>"u"?Re:BigInt,"%BigInt64Array%":typeof BigInt64Array>"u"?Re:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array>"u"?Re:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView>"u"?Re:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":typeof Float32Array>"u"?Re:Float32Array,"%Float64Array%":typeof Float64Array>"u"?Re:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry>"u"?Re:FinalizationRegistry,"%Function%":aI,"%GeneratorFunction%":Ql,"%Int8Array%":typeof Int8Array>"u"?Re:Int8Array,"%Int16Array%":typeof Int16Array>"u"?Re:Int16Array,"%Int32Array%":typeof Int32Array>"u"?Re:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":Bl&&un?un(un([][Symbol.iterator]())):Re,"%JSON%":typeof JSON=="object"?JSON:Re,"%Map%":typeof Map>"u"?Re:Map,"%MapIteratorPrototype%":typeof Map>"u"||!Bl||!un?Re:un(new Map()[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise>"u"?Re:Promise,"%Proxy%":typeof Proxy>"u"?Re:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":typeof Reflect>"u"?Re:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set>"u"?Re:Set,"%SetIteratorPrototype%":typeof Set>"u"||!Bl||!un?Re:un(new Set()[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer>"u"?Re:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":Bl&&un?un(""[Symbol.iterator]()):Re,"%Symbol%":Bl?Symbol:Re,"%SyntaxError%":oc,"%ThrowTypeError%":coe,"%TypedArray%":foe,"%TypeError%":Lu,"%Uint8Array%":typeof Uint8Array>"u"?Re:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray>"u"?Re:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array>"u"?Re:Uint16Array,"%Uint32Array%":typeof Uint32Array>"u"?Re:Uint32Array,"%URIError%":URIError,"%WeakMap%":typeof WeakMap>"u"?Re:WeakMap,"%WeakRef%":typeof WeakRef>"u"?Re:WeakRef,"%WeakSet%":typeof WeakSet>"u"?Re:WeakSet};if(un)try{null.error}catch(e){var hoe=un(un(e));Ga["%Error.prototype%"]=hoe}var poe=function e(t){var n;if(t==="%AsyncFunction%")n=Lb("async function () {}");else if(t==="%GeneratorFunction%")n=Lb("function* () {}");else if(t==="%AsyncGeneratorFunction%")n=Lb("async function* () {}");else if(t==="%AsyncGenerator%"){var r=e("%AsyncGeneratorFunction%");r&&(n=r.prototype)}else if(t==="%AsyncIteratorPrototype%"){var i=e("%AsyncGenerator%");i&&un&&(n=un(i.prototype))}return Ga[t]=n,n},mE={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},_h=sI,jm=uoe,goe=_h.call(Function.call,Array.prototype.concat),moe=_h.call(Function.apply,Array.prototype.splice),yE=_h.call(Function.call,String.prototype.replace),Vm=_h.call(Function.call,String.prototype.slice),yoe=_h.call(Function.call,RegExp.prototype.exec),voe=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,boe=/\\(\\)?/g,Soe=function(t){var n=Vm(t,0,1),r=Vm(t,-1);if(n==="%"&&r!=="%")throw new oc("invalid intrinsic syntax, expected closing `%`");if(r==="%"&&n!=="%")throw new oc("invalid intrinsic syntax, expected opening `%`");var i=[];return yE(t,voe,function(o,s,a,l){i[i.length]=a?yE(l,boe,"$1"):s||o}),i},_oe=function(t,n){var r=t,i;if(jm(mE,r)&&(i=mE[r],r="%"+i[0]+"%"),jm(Ga,r)){var o=Ga[r];if(o===Ql&&(o=poe(r)),typeof o>"u"&&!n)throw new Lu("intrinsic "+t+" exists, but is not available. Please file an issue!");return{alias:i,name:r,value:o}}throw new oc("intrinsic "+t+" does not exist!")},woe=function(t,n){if(typeof t!="string"||t.length===0)throw new Lu("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof n!="boolean")throw new Lu('"allowMissing" argument must be a boolean');if(yoe(/^%?[^%]*%?$/,t)===null)throw new oc("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var r=Soe(t),i=r.length>0?r[0]:"",o=_oe("%"+i+"%",n),s=o.name,a=o.value,l=!1,u=o.alias;u&&(i=u[0],moe(r,goe([0,1],u)));for(var c=1,d=!0;c=r.length){var m=Ua(a,f);d=!!m,d&&"get"in m&&!("originalValue"in m.get)?a=m.get:a=a[f]}else d=jm(a,f),a=a[f];d&&!l&&(Ga[s]=a)}}return a},xoe=woe,a2=xoe("%Object.defineProperty%",!0),l2=function(){if(a2)try{return a2({},"a",{value:1}),!0}catch{return!1}return!1};l2.hasArrayLengthDefineBug=function(){if(!l2())return null;try{return a2([],"length",{value:1}).length!==1}catch{return!0}};var Coe=l2,Toe=Qie,Eoe=typeof Symbol=="function"&&typeof Symbol("foo")=="symbol",Poe=Object.prototype.toString,Aoe=Array.prototype.concat,lI=Object.defineProperty,koe=function(e){return typeof e=="function"&&Poe.call(e)==="[object Function]"},Roe=Coe(),uI=lI&&Roe,Ooe=function(e,t,n,r){if(t in e){if(r===!0){if(e[t]===n)return}else if(!koe(r)||!r())return}uI?lI(e,t,{configurable:!0,enumerable:!1,value:n,writable:!0}):e[t]=n},cI=function(e,t){var n=arguments.length>2?arguments[2]:{},r=Toe(t);Eoe&&(r=Aoe.call(r,Object.getOwnPropertySymbols(t)));for(var i=0;i":return t>e;case":<":return t=":return t>=e;case":<=":return t<=e;default:throw new Error("Unimplemented comparison operator: ".concat(n))}};V0.testComparisonRange=Zoe;var z0={};Object.defineProperty(z0,"__esModule",{value:!0});z0.testRange=void 0;var Joe=function(e,t){return typeof e=="number"?!(et.max||e===t.max&&!t.maxInclusive):!1};z0.testRange=Joe;(function(e){var t=Ee&&Ee.__assign||function(){return t=Object.assign||function(c){for(var d,f=1,h=arguments.length;f0?{path:l.path,query:new RegExp("("+l.keywords.map(function(u){return(0,nse.escapeRegexString)(u.trim())}).join("|")+")")}:{path:l.path}})};U0.highlight=ise;var G0={},yI={exports:{}};(function(e){(function(t,n){e.exports?e.exports=n():t.nearley=n()})(Ee,function(){function t(u,c,d){return this.id=++t.highestId,this.name=u,this.symbols=c,this.postprocess=d,this}t.highestId=0,t.prototype.toString=function(u){var c=typeof u>"u"?this.symbols.map(l).join(" "):this.symbols.slice(0,u).map(l).join(" ")+" ● "+this.symbols.slice(u).map(l).join(" ");return this.name+" → "+c};function n(u,c,d,f){this.rule=u,this.dot=c,this.reference=d,this.data=[],this.wantedBy=f,this.isComplete=this.dot===u.symbols.length}n.prototype.toString=function(){return"{"+this.rule.toString(this.dot)+"}, from: "+(this.reference||0)},n.prototype.nextState=function(u){var c=new n(this.rule,this.dot+1,this.reference,this.wantedBy);return c.left=this,c.right=u,c.isComplete&&(c.data=c.build(),c.right=void 0),c},n.prototype.build=function(){var u=[],c=this;do u.push(c.right.data),c=c.left;while(c.left);return u.reverse(),u},n.prototype.finish=function(){this.rule.postprocess&&(this.data=this.rule.postprocess(this.data,this.reference,s.fail))};function r(u,c){this.grammar=u,this.index=c,this.states=[],this.wants={},this.scannable=[],this.completed={}}r.prototype.process=function(u){for(var c=this.states,d=this.wants,f=this.completed,h=0;h0&&c.push(" ^ "+f+" more lines identical to this"),f=0,c.push(" "+m)),d=m}},s.prototype.getSymbolDisplay=function(u){return a(u)},s.prototype.buildFirstStateStack=function(u,c){if(c.indexOf(u)!==-1)return null;if(u.wantedBy.length===0)return[u];var d=u.wantedBy[0],f=[u].concat(c),h=this.buildFirstStateStack(d,f);return h===null?null:[u].concat(h)},s.prototype.save=function(){var u=this.table[this.current];return u.lexerState=this.lexerState,u},s.prototype.restore=function(u){var c=u.index;this.current=c,this.table[c]=u,this.table.splice(c+1),this.lexerState=u.lexerState,this.results=this.finish()},s.prototype.rewind=function(u){if(!this.options.keepHistory)throw new Error("set option `keepHistory` to enable rewinding");this.restore(this.table[u])},s.prototype.finish=function(){var u=[],c=this.grammar.start,d=this.table[this.table.length-1];return d.states.forEach(function(f){f.rule.name===c&&f.dot===f.rule.symbols.length&&f.reference===0&&f.data!==s.fail&&u.push(f)}),u.map(function(f){return f.data})};function a(u){var c=typeof u;if(c==="string")return u;if(c==="object"){if(u.literal)return JSON.stringify(u.literal);if(u instanceof RegExp)return"character matching "+u;if(u.type)return u.type+" token";if(u.test)return"token matching "+String(u.test);throw new Error("Unknown symbol type: "+u)}}function l(u){var c=typeof u;if(c==="string")return u;if(c==="object"){if(u.literal)return JSON.stringify(u.literal);if(u instanceof RegExp)return u.toString();if(u.type)return"%"+u.type;if(u.test)return"<"+String(u.test)+">";throw new Error("Unknown symbol type: "+u)}}return{Parser:s,Grammar:i,Rule:t}})})(yI);var ose=yI.exports,il={},vI={},ra={};ra.__esModule=void 0;ra.__esModule=!0;var sse=typeof Object.setPrototypeOf=="function",ase=typeof Object.getPrototypeOf=="function",lse=typeof Object.defineProperty=="function",use=typeof Object.create=="function",cse=typeof Object.prototype.hasOwnProperty=="function",dse=function(t,n){sse?Object.setPrototypeOf(t,n):t.__proto__=n};ra.setPrototypeOf=dse;var fse=function(t){return ase?Object.getPrototypeOf(t):t.__proto__||t.prototype};ra.getPrototypeOf=fse;var vE=!1,hse=function e(t,n,r){if(lse&&!vE)try{Object.defineProperty(t,n,r)}catch{vE=!0,e(t,n,r)}else t[n]=r.value};ra.defineProperty=hse;var bI=function(t,n){return cse?t.hasOwnProperty(t,n):t[n]===void 0};ra.hasOwnProperty=bI;var pse=function(t,n){if(use)return Object.create(t,n);var r=function(){};r.prototype=t;var i=new r;if(typeof n>"u")return i;if(typeof n=="null")throw new Error("PropertyDescriptors must not be null.");if(typeof n=="object")for(var o in n)bI(n,o)&&(i[o]=n[o].value);return i};ra.objectCreate=pse;(function(e){e.__esModule=void 0,e.__esModule=!0;var t=ra,n=t.setPrototypeOf,r=t.getPrototypeOf,i=t.defineProperty,o=t.objectCreate,s=new Error().toString()==="[object Error]",a="";function l(u){var c=this.constructor,d=c.name||function(){var S=c.toString().match(/^function\s*([^\s(]+)/);return S===null?a||"Error":S[1]}(),f=d==="Error",h=f?a:d,p=Error.apply(this,arguments);if(n(p,r(this)),!(p instanceof c)||!(p instanceof l)){var p=this;Error.apply(this,arguments),i(p,"message",{configurable:!0,enumerable:!1,value:u,writable:!0})}if(i(p,"name",{configurable:!0,enumerable:!1,value:h,writable:!0}),Error.captureStackTrace&&Error.captureStackTrace(p,f?l:c),p.stack===void 0){var m=new Error(u);m.name=p.name,p.stack=m.stack}return s&&i(p,"toString",{configurable:!0,enumerable:!1,value:function(){return(this.name||"Error")+(typeof this.message>"u"?"":": "+this.message)},writable:!0}),p}a=l.name||"ExtendableError",l.prototype=o(Error.prototype,{constructor:{value:Error,enumerable:!1,writable:!0,configurable:!0}}),e.ExtendableError=l,e.default=e.ExtendableError})(vI);var SI=Ee&&Ee.__extends||function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},e(t,n)};return function(t,n){if(typeof n!="function"&&n!==null)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(il,"__esModule",{value:!0});il.SyntaxError=il.LiqeError=void 0;var gse=vI,_I=function(e){SI(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t}(gse.ExtendableError);il.LiqeError=_I;var mse=function(e){SI(t,e);function t(n,r,i,o){var s=e.call(this,n)||this;return s.message=n,s.offset=r,s.line=i,s.column=o,s}return t}(_I);il.SyntaxError=mse;var dC={},zm=Ee&&Ee.__assign||function(){return zm=Object.assign||function(e){for(var t,n=1,r=arguments.length;n"}],postprocess:function(e){return e.join("")}},{name:"comparison_operator$subexpression$1",symbols:["comparison_operator$subexpression$1$string$2"]},{name:"comparison_operator$subexpression$1$string$3",symbols:[{literal:":"},{literal:"<"}],postprocess:function(e){return e.join("")}},{name:"comparison_operator$subexpression$1",symbols:["comparison_operator$subexpression$1$string$3"]},{name:"comparison_operator$subexpression$1$string$4",symbols:[{literal:":"},{literal:">"},{literal:"="}],postprocess:function(e){return e.join("")}},{name:"comparison_operator$subexpression$1",symbols:["comparison_operator$subexpression$1$string$4"]},{name:"comparison_operator$subexpression$1$string$5",symbols:[{literal:":"},{literal:"<"},{literal:"="}],postprocess:function(e){return e.join("")}},{name:"comparison_operator$subexpression$1",symbols:["comparison_operator$subexpression$1$string$5"]},{name:"comparison_operator",symbols:["comparison_operator$subexpression$1"],postprocess:function(e,t){return{location:{start:t,end:t+e[0][0].length},type:"ComparisonOperator",operator:e[0][0]}}},{name:"regex",symbols:["regex_body","regex_flags"],postprocess:function(e){return e.join("")}},{name:"regex_body$ebnf$1",symbols:[]},{name:"regex_body$ebnf$1",symbols:["regex_body$ebnf$1","regex_body_char"],postprocess:function(e){return e[0].concat([e[1]])}},{name:"regex_body",symbols:[{literal:"/"},"regex_body$ebnf$1",{literal:"/"}],postprocess:function(e){return"/"+e[1].join("")+"/"}},{name:"regex_body_char",symbols:[/[^\\]/],postprocess:po},{name:"regex_body_char",symbols:[{literal:"\\"},/[^\\]/],postprocess:function(e){return"\\"+e[1]}},{name:"regex_flags",symbols:[]},{name:"regex_flags$ebnf$1",symbols:[/[gmiyusd]/]},{name:"regex_flags$ebnf$1",symbols:["regex_flags$ebnf$1",/[gmiyusd]/],postprocess:function(e){return e[0].concat([e[1]])}},{name:"regex_flags",symbols:["regex_flags$ebnf$1"],postprocess:function(e){return e[0].join("")}},{name:"unquoted_value$ebnf$1",symbols:[]},{name:"unquoted_value$ebnf$1",symbols:["unquoted_value$ebnf$1",/[a-zA-Z\.\-_*@#$]/],postprocess:function(e){return e[0].concat([e[1]])}},{name:"unquoted_value",symbols:[/[a-zA-Z_*@#$]/,"unquoted_value$ebnf$1"],postprocess:function(e){return e[0]+e[1].join("")}}],ParserStart:"main"};dC.default=yse;var wI={},H0={},Ch={};Object.defineProperty(Ch,"__esModule",{value:!0});Ch.isSafePath=void 0;var vse=/^(\.(?:[_a-zA-Z][a-zA-Z\d_]*|\0|[1-9]\d*))+$/u,bse=function(e){return vse.test(e)};Ch.isSafePath=bse;Object.defineProperty(H0,"__esModule",{value:!0});H0.createGetValueFunctionBody=void 0;var Sse=Ch,_se=function(e){if(!(0,Sse.isSafePath)(e))throw new Error("Unsafe path.");var t="return subject"+e;return t.replace(/(\.(\d+))/g,".[$2]").replace(/\./g,"?.")};H0.createGetValueFunctionBody=_se;(function(e){var t=Ee&&Ee.__assign||function(){return t=Object.assign||function(o){for(var s,a=1,l=arguments.length;a\d+) col (?\d+)/,Pse=function(e){if(e.trim()==="")return{location:{end:0,start:0},type:"EmptyExpression"};var t=new CI.default.Parser(Tse),n;try{n=t.feed(e).results}catch(o){if(typeof(o==null?void 0:o.message)=="string"&&typeof(o==null?void 0:o.offset)=="number"){var r=o.message.match(Ese);throw r?new wse.SyntaxError("Syntax error at line ".concat(r.groups.line," column ").concat(r.groups.column),o.offset,Number(r.groups.line),Number(r.groups.column)):o}throw o}if(n.length===0)throw new Error("Found no parsings.");if(n.length>1)throw new Error("Ambiguous results.");var i=(0,Cse.hydrateAst)(n[0]);return i};G0.parse=Pse;var q0={};Object.defineProperty(q0,"__esModule",{value:!0});q0.test=void 0;var Ase=wh,kse=function(e,t){return(0,Ase.filter)(e,[t]).length===1};q0.test=kse;var TI={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.serialize=void 0;var t=function(o,s){return s==="double"?'"'.concat(o,'"'):s==="single"?"'".concat(o,"'"):o},n=function(o){if(o.type==="LiteralExpression")return o.quoted&&typeof o.value=="string"?t(o.value,o.quotes):String(o.value);if(o.type==="RegexExpression")return String(o.value);if(o.type==="RangeExpression"){var s=o.range,a=s.min,l=s.max,u=s.minInclusive,c=s.maxInclusive;return"".concat(u?"[":"{").concat(a," TO ").concat(l).concat(c?"]":"}")}if(o.type==="EmptyExpression")return"";throw new Error("Unexpected AST type.")},r=function(o){if(o.type!=="Tag")throw new Error("Expected a tag expression.");var s=o.field,a=o.expression,l=o.operator;if(s.type==="ImplicitField")return n(a);var u=s.quoted?t(s.name,s.quotes):s.name,c=" ".repeat(a.location.start-l.location.end);return u+l.operator+c+n(a)},i=function(o){if(o.type==="ParenthesizedExpression"){if(!("location"in o.expression))throw new Error("Expected location in expression.");if(!o.location.end)throw new Error("Expected location end.");var s=" ".repeat(o.expression.location.start-(o.location.start+1)),a=" ".repeat(o.location.end-o.expression.location.end-1);return"(".concat(s).concat((0,e.serialize)(o.expression)).concat(a,")")}if(o.type==="Tag")return r(o);if(o.type==="LogicalExpression"){var l="";return o.operator.type==="BooleanOperator"?(l+=" ".repeat(o.operator.location.start-o.left.location.end),l+=o.operator.operator,l+=" ".repeat(o.right.location.start-o.operator.location.end)):l=" ".repeat(o.right.location.start-o.left.location.end),"".concat((0,e.serialize)(o.left)).concat(l).concat((0,e.serialize)(o.right))}if(o.type==="UnaryOperator")return(o.operator==="NOT"?"NOT ":o.operator)+(0,e.serialize)(o.operand);if(o.type==="EmptyExpression")return"";throw new Error("Unexpected AST type.")};e.serialize=i})(TI);var W0={};Object.defineProperty(W0,"__esModule",{value:!0});W0.isSafeUnquotedExpression=void 0;var Rse=function(e){return/^[#$*@A-Z_a-z][#$*.@A-Z_a-z-]*$/.test(e)};W0.isSafeUnquotedExpression=Rse;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.isSafeUnquotedExpression=e.serialize=e.SyntaxError=e.LiqeError=e.test=e.parse=e.highlight=e.filter=void 0;var t=wh;Object.defineProperty(e,"filter",{enumerable:!0,get:function(){return t.filter}});var n=U0;Object.defineProperty(e,"highlight",{enumerable:!0,get:function(){return n.highlight}});var r=G0;Object.defineProperty(e,"parse",{enumerable:!0,get:function(){return r.parse}});var i=q0;Object.defineProperty(e,"test",{enumerable:!0,get:function(){return i.test}});var o=il;Object.defineProperty(e,"LiqeError",{enumerable:!0,get:function(){return o.LiqeError}}),Object.defineProperty(e,"SyntaxError",{enumerable:!0,get:function(){return o.SyntaxError}});var s=TI;Object.defineProperty(e,"serialize",{enumerable:!0,get:function(){return s.serialize}});var a=W0;Object.defineProperty(e,"isSafeUnquotedExpression",{enumerable:!0,get:function(){return a.isSafeUnquotedExpression}})})(mI);var Th={},EI={},ol={};Object.defineProperty(ol,"__esModule",{value:!0});ol.ROARR_LOG_FORMAT_VERSION=ol.ROARR_VERSION=void 0;ol.ROARR_VERSION="5.0.0";ol.ROARR_LOG_FORMAT_VERSION="2.0.0";var Eh={};Object.defineProperty(Eh,"__esModule",{value:!0});Eh.logLevels=void 0;Eh.logLevels={debug:20,error:50,fatal:60,info:30,trace:10,warn:40};var PI={},K0={};Object.defineProperty(K0,"__esModule",{value:!0});K0.hasOwnProperty=void 0;const Ose=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);K0.hasOwnProperty=Ose;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.hasOwnProperty=void 0;var t=K0;Object.defineProperty(e,"hasOwnProperty",{enumerable:!0,get:function(){return t.hasOwnProperty}})})(PI);var AI={},X0={},Y0={};Object.defineProperty(Y0,"__esModule",{value:!0});Y0.tokenize=void 0;const Mse=/(?:%(?([+0-]|-\+))?(?\d+)?(?\d+\$)?(?\.\d+)?(?[%BCESb-iosux]))|(\\%)/g,Ise=e=>{let t;const n=[];let r=0,i=0,o=null;for(;(t=Mse.exec(e))!==null;){t.index>i&&(o={literal:e.slice(i,t.index),type:"literal"},n.push(o));const s=t[0];i=t.index+s.length,s==="\\%"||s==="%%"?o&&o.type==="literal"?o.literal+="%":(o={literal:"%",type:"literal"},n.push(o)):t.groups&&(o={conversion:t.groups.conversion,flag:t.groups.flag||null,placeholder:s,position:t.groups.position?Number.parseInt(t.groups.position,10)-1:r++,precision:t.groups.precision?Number.parseInt(t.groups.precision.slice(1),10):null,type:"placeholder",width:t.groups.width?Number.parseInt(t.groups.width,10):null},n.push(o))}return i<=e.length-1&&(o&&o.type==="literal"?o.literal+=e.slice(i):n.push({literal:e.slice(i),type:"literal"})),n};Y0.tokenize=Ise;Object.defineProperty(X0,"__esModule",{value:!0});X0.createPrintf=void 0;const bE=lC,Nse=Y0,Dse=(e,t)=>t.placeholder,Lse=e=>{var t;const n=(o,s,a)=>a==="-"?o.padEnd(s," "):a==="-+"?((Number(o)>=0?"+":"")+o).padEnd(s," "):a==="+"?((Number(o)>=0?"+":"")+o).padStart(s," "):a==="0"?o.padStart(s,"0"):o.padStart(s," "),r=(t=e==null?void 0:e.formatUnboundExpression)!==null&&t!==void 0?t:Dse,i={};return(o,...s)=>{let a=i[o];a||(a=i[o]=Nse.tokenize(o));let l="";for(const u of a)if(u.type==="literal")l+=u.literal;else{let c=s[u.position];if(c===void 0)l+=r(o,u,s);else if(u.conversion==="b")l+=bE.boolean(c)?"true":"false";else if(u.conversion==="B")l+=bE.boolean(c)?"TRUE":"FALSE";else if(u.conversion==="c")l+=c;else if(u.conversion==="C")l+=String(c).toUpperCase();else if(u.conversion==="i"||u.conversion==="d")c=String(Math.trunc(c)),u.width!==null&&(c=n(c,u.width,u.flag)),l+=c;else if(u.conversion==="e")l+=Number(c).toExponential();else if(u.conversion==="E")l+=Number(c).toExponential().toUpperCase();else if(u.conversion==="f")u.precision!==null&&(c=Number(c).toFixed(u.precision)),u.width!==null&&(c=n(String(c),u.width,u.flag)),l+=c;else if(u.conversion==="o")l+=(Number.parseInt(String(c),10)>>>0).toString(8);else if(u.conversion==="s")u.width!==null&&(c=n(String(c),u.width,u.flag)),l+=c;else if(u.conversion==="S")u.width!==null&&(c=n(String(c),u.width,u.flag)),l+=String(c).toUpperCase();else if(u.conversion==="u")l+=Number.parseInt(String(c),10)>>>0;else if(u.conversion==="x")c=(Number.parseInt(String(c),10)>>>0).toString(16),u.width!==null&&(c=n(String(c),u.width,u.flag)),l+=c;else throw new Error("Unknown format specifier.")}return l}};X0.createPrintf=Lse;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.printf=e.createPrintf=void 0;const t=X0;Object.defineProperty(e,"createPrintf",{enumerable:!0,get:function(){return t.createPrintf}}),e.printf=t.createPrintf()})(AI);var u2={exports:{}};(function(e,t){const{hasOwnProperty:n}=Object.prototype,r=S();r.configure=S,r.stringify=r,r.default=r,t.stringify=r,t.configure=S,e.exports=r;const i=/[\u0000-\u001f\u0022\u005c\ud800-\udfff]|[\ud800-\udbff](?![\udc00-\udfff])|(?:[^\ud800-\udbff]|^)[\udc00-\udfff]/;function o(y){return y.length<5e3&&!i.test(y)?`"${y}"`:JSON.stringify(y)}function s(y){if(y.length>200)return y.sort();for(let v=1;vg;)y[b]=y[b-1],b--;y[b]=g}return y}const a=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(Object.getPrototypeOf(new Int8Array)),Symbol.toStringTag).get;function l(y){return a.call(y)!==void 0&&y.length!==0}function u(y,v,g){y.length= 1`)}return g===void 0?1/0:g}function h(y){return y===1?"1 item":`${y} items`}function p(y){const v=new Set;for(const g of y)(typeof g=="string"||typeof g=="number")&&v.add(String(g));return v}function m(y){if(n.call(y,"strict")){const v=y.strict;if(typeof v!="boolean")throw new TypeError('The "strict" argument must be of type boolean');if(v)return g=>{let b=`Object can not safely be stringified. Received type ${typeof g}`;throw typeof g!="function"&&(b+=` (${g.toString()})`),new Error(b)}}}function S(y){y={...y};const v=m(y);v&&(y.bigint===void 0&&(y.bigint=!1),"circularValue"in y||(y.circularValue=Error));const g=c(y),b=d(y,"bigint"),_=d(y,"deterministic"),w=f(y,"maximumDepth"),x=f(y,"maximumBreadth");function T(I,C,R,M,N,O){let D=C[I];switch(typeof D=="object"&&D!==null&&typeof D.toJSON=="function"&&(D=D.toJSON(I)),D=M.call(C,I,D),typeof D){case"string":return o(D);case"object":{if(D===null)return"null";if(R.indexOf(D)!==-1)return g;let L="",j=",";const U=O;if(Array.isArray(D)){if(D.length===0)return"[]";if(wx){const ne=D.length-x-1;L+=`${j}"... ${h(ne)} not stringified"`}return N!==""&&(L+=` -${U}`),R.pop(),`[${L}]`}let G=Object.keys(D);const W=G.length;if(W===0)return"{}";if(wx){const H=W-x;L+=`${Y}"...":${X}"${h(H)} not stringified"`,Y=j}return N!==""&&Y.length>1&&(L=` -${O}${L} -${U}`),R.pop(),`{${L}}`}case"number":return isFinite(D)?String(D):v?v(D):"null";case"boolean":return D===!0?"true":"false";case"undefined":return;case"bigint":if(b)return String(D);default:return v?v(D):void 0}}function P(I,C,R,M,N,O){switch(typeof C=="object"&&C!==null&&typeof C.toJSON=="function"&&(C=C.toJSON(I)),typeof C){case"string":return o(C);case"object":{if(C===null)return"null";if(R.indexOf(C)!==-1)return g;const D=O;let L="",j=",";if(Array.isArray(C)){if(C.length===0)return"[]";if(wx){const B=C.length-x-1;L+=`${j}"... ${h(B)} not stringified"`}return N!==""&&(L+=` -${D}`),R.pop(),`[${L}]`}R.push(C);let U="";N!==""&&(O+=N,j=`, -${O}`,U=" ");let G="";for(const W of M){const X=P(W,C[W],R,M,N,O);X!==void 0&&(L+=`${G}${o(W)}:${U}${X}`,G=j)}return N!==""&&G.length>1&&(L=` -${O}${L} -${D}`),R.pop(),`{${L}}`}case"number":return isFinite(C)?String(C):v?v(C):"null";case"boolean":return C===!0?"true":"false";case"undefined":return;case"bigint":if(b)return String(C);default:return v?v(C):void 0}}function E(I,C,R,M,N){switch(typeof C){case"string":return o(C);case"object":{if(C===null)return"null";if(typeof C.toJSON=="function"){if(C=C.toJSON(I),typeof C!="object")return E(I,C,R,M,N);if(C===null)return"null"}if(R.indexOf(C)!==-1)return g;const O=N;if(Array.isArray(C)){if(C.length===0)return"[]";if(wx){const J=C.length-x-1;X+=`${Y}"... ${h(J)} not stringified"`}return X+=` -${O}`,R.pop(),`[${X}]`}let D=Object.keys(C);const L=D.length;if(L===0)return"{}";if(wx){const X=L-x;U+=`${G}"...": "${h(X)} not stringified"`,G=j}return G!==""&&(U=` -${N}${U} -${O}`),R.pop(),`{${U}}`}case"number":return isFinite(C)?String(C):v?v(C):"null";case"boolean":return C===!0?"true":"false";case"undefined":return;case"bigint":if(b)return String(C);default:return v?v(C):void 0}}function A(I,C,R){switch(typeof C){case"string":return o(C);case"object":{if(C===null)return"null";if(typeof C.toJSON=="function"){if(C=C.toJSON(I),typeof C!="object")return A(I,C,R);if(C===null)return"null"}if(R.indexOf(C)!==-1)return g;let M="";if(Array.isArray(C)){if(C.length===0)return"[]";if(wx){const W=C.length-x-1;M+=`,"... ${h(W)} not stringified"`}return R.pop(),`[${M}]`}let N=Object.keys(C);const O=N.length;if(O===0)return"{}";if(wx){const j=O-x;M+=`${D}"...":"${h(j)} not stringified"`}return R.pop(),`{${M}}`}case"number":return isFinite(C)?String(C):v?v(C):"null";case"boolean":return C===!0?"true":"false";case"undefined":return;case"bigint":if(b)return String(C);default:return v?v(C):void 0}}function $(I,C,R){if(arguments.length>1){let M="";if(typeof R=="number"?M=" ".repeat(Math.min(R,10)):typeof R=="string"&&(M=R.slice(0,10)),C!=null){if(typeof C=="function")return T("",{"":I},[],C,M,"");if(Array.isArray(C))return P("",I,[],p(C),M,"")}if(M.length!==0)return E("",I,[],M,"")}return A("",I,[])}return $}})(u2,u2.exports);var $se=u2.exports;(function(e){var t=Ee&&Ee.__importDefault||function(g){return g&&g.__esModule?g:{default:g}};Object.defineProperty(e,"__esModule",{value:!0}),e.createLogger=void 0;const n=ol,r=Eh,i=PI,o=AI,s=t(uC),a=t($se);let l=!1;const u=(0,s.default)(),c=()=>u.ROARR,d=()=>({messageContext:{},transforms:[]}),f=()=>{const g=c().asyncLocalStorage;if(!g)throw new Error("AsyncLocalContext is unavailable.");const b=g.getStore();return b||d()},h=()=>!!c().asyncLocalStorage,p=()=>{if(h()){const g=f();return(0,i.hasOwnProperty)(g,"sequenceRoot")&&(0,i.hasOwnProperty)(g,"sequence")&&typeof g.sequence=="number"?String(g.sequenceRoot)+"."+String(g.sequence++):String(c().sequence++)}return String(c().sequence++)},m=(g,b)=>(_,w,x,T,P,E,A,$,I,C)=>{g.child({logLevel:b})(_,w,x,T,P,E,A,$,I,C)},S=1e3,y=(g,b)=>(_,w,x,T,P,E,A,$,I,C)=>{const R=(0,a.default)({a:_,b:w,c:x,d:T,e:P,f:E,g:A,h:$,i:I,j:C,logLevel:b});if(!R)throw new Error("Expected key to be a string");const M=c().onceLog;M.has(R)||(M.add(R),M.size>S&&M.clear(),g.child({logLevel:b})(_,w,x,T,P,E,A,$,I,C))},v=(g,b={},_=[])=>{const w=(x,T,P,E,A,$,I,C,R,M)=>{const N=Date.now(),O=p();let D;h()?D=f():D=d();let L,j;if(typeof x=="string"?L={...D.messageContext,...b}:L={...D.messageContext,...b,...x},typeof x=="string"&&T===void 0)j=x;else if(typeof x=="string"){if(!x.includes("%"))throw new Error("When a string parameter is followed by other arguments, then it is assumed that you are attempting to format a message using printf syntax. You either forgot to add printf bindings or if you meant to add context to the log message, pass them in an object as the first parameter.");j=(0,o.printf)(x,T,P,E,A,$,I,C,R,M)}else{let G=T;if(typeof T!="string")if(T===void 0)G="";else throw new TypeError("Message must be a string. Received "+typeof T+".");j=(0,o.printf)(G,P,E,A,$,I,C,R,M)}let U={context:L,message:j,sequence:O,time:N,version:n.ROARR_LOG_FORMAT_VERSION};for(const G of[...D.transforms,..._])if(U=G(U),typeof U!="object"||U===null)throw new Error("Message transform function must return a message object.");g(U)};return w.child=x=>{let T;return h()?T=f():T=d(),typeof x=="function"?(0,e.createLogger)(g,{...T.messageContext,...b,...x},[x,..._]):(0,e.createLogger)(g,{...T.messageContext,...b,...x},_)},w.getContext=()=>{let x;return h()?x=f():x=d(),{...x.messageContext,...b}},w.adopt=async(x,T)=>{if(!h())return l===!1&&(l=!0,g({context:{logLevel:r.logLevels.warn,package:"roarr"},message:"async_hooks are unavailable; Roarr.adopt will not function as expected",sequence:p(),time:Date.now(),version:n.ROARR_LOG_FORMAT_VERSION})),x();const P=f();let E;(0,i.hasOwnProperty)(P,"sequenceRoot")&&(0,i.hasOwnProperty)(P,"sequence")&&typeof P.sequence=="number"?E=P.sequenceRoot+"."+String(P.sequence++):E=String(c().sequence++);let A={...P.messageContext};const $=[...P.transforms];typeof T=="function"?$.push(T):A={...A,...T};const I=c().asyncLocalStorage;if(!I)throw new Error("Async local context unavailable.");return I.run({messageContext:A,sequence:0,sequenceRoot:E,transforms:$},()=>x())},w.debug=m(w,r.logLevels.debug),w.debugOnce=y(w,r.logLevels.debug),w.error=m(w,r.logLevels.error),w.errorOnce=y(w,r.logLevels.error),w.fatal=m(w,r.logLevels.fatal),w.fatalOnce=y(w,r.logLevels.fatal),w.info=m(w,r.logLevels.info),w.infoOnce=y(w,r.logLevels.info),w.trace=m(w,r.logLevels.trace),w.traceOnce=y(w,r.logLevels.trace),w.warn=m(w,r.logLevels.warn),w.warnOnce=y(w,r.logLevels.warn),w};e.createLogger=v})(EI);var Q0={},Fse=function(t,n){for(var r=t.split("."),i=n.split("."),o=0;o<3;o++){var s=Number(r[o]),a=Number(i[o]);if(s>a)return 1;if(a>s)return-1;if(!isNaN(s)&&isNaN(a))return 1;if(isNaN(s)&&!isNaN(a))return-1}return 0},Bse=Ee&&Ee.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Q0,"__esModule",{value:!0});Q0.createRoarrInitialGlobalStateBrowser=void 0;const SE=ol,_E=Bse(Fse),jse=e=>{const t=(e.versions||[]).concat();return t.length>1&&t.sort(_E.default),t.includes(SE.ROARR_VERSION)||t.push(SE.ROARR_VERSION),t.sort(_E.default),{sequence:0,...e,versions:t}};Q0.createRoarrInitialGlobalStateBrowser=jse;var Z0={};Object.defineProperty(Z0,"__esModule",{value:!0});Z0.getLogLevelName=void 0;const Vse=e=>e<=10?"trace":e<=20?"debug":e<=30?"info":e<=40?"warn":e<=50?"error":"fatal";Z0.getLogLevelName=Vse;(function(e){var t=Ee&&Ee.__importDefault||function(d){return d&&d.__esModule?d:{default:d}};Object.defineProperty(e,"__esModule",{value:!0}),e.getLogLevelName=e.logLevels=e.Roarr=e.ROARR=void 0;const n=EI,r=Q0,o=(0,t(uC).default)(),s=(0,r.createRoarrInitialGlobalStateBrowser)(o.ROARR||{});e.ROARR=s,o.ROARR=s;const a=d=>JSON.stringify(d),l=(0,n.createLogger)(d=>{var f;s.write&&s.write(((f=s.serializeMessage)!==null&&f!==void 0?f:a)(d))});e.Roarr=l;var u=Eh;Object.defineProperty(e,"logLevels",{enumerable:!0,get:function(){return u.logLevels}});var c=Z0;Object.defineProperty(e,"getLogLevelName",{enumerable:!0,get:function(){return c.getLogLevelName}})})(Th);var zse=Ee&&Ee.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(e);i0?h("%c ".concat(f," %c").concat(c?" [".concat(String(c),"]:"):"","%c ").concat(a.message," %O"),m,S,y,d):h("%c ".concat(f," %c").concat(c?" [".concat(String(c),"]:"):"","%c ").concat(a.message),m,S,y)}}};N0.createLogWriter=Qse;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.createLogWriter=void 0;var t=N0;Object.defineProperty(e,"createLogWriter",{enumerable:!0,get:function(){return t.createLogWriter}})})(iI);Th.ROARR.write=iI.createLogWriter();const RI={};Th.Roarr.child(RI);const J0=E0(Th.Roarr.child(RI)),fe=e=>J0.get().child({namespace:e}),Q3e=["trace","debug","info","warn","error","fatal"],Z3e={trace:10,debug:20,info:30,warn:40,error:50,fatal:60};function Zse(){const e=[];return function(t,n){if(typeof n!="object"||n===null)return n;for(;e.length>0&&e.at(-1)!==this;)e.pop();return e.includes(n)?"[Circular]":(e.push(n),n)}}const Df=Vs("nodes/receivedOpenAPISchema",async(e,{dispatch:t,rejectWithValue:n})=>{const r=fe("system");try{const o=await(await fetch("openapi.json")).json();return r.info({openAPISchema:o},"Received OpenAPI schema"),JSON.parse(JSON.stringify(o,Zse()))}catch(i){return n({error:i})}}),OI={nodes:[],edges:[],schema:null,invocationTemplates:{},connectionStartParams:null,shouldShowGraphOverlay:!1,shouldShowFieldTypeLegend:!1,shouldShowMinimapPanel:!0,editorInstance:void 0,progressNodeSize:{width:512,height:512}},MI=Pt({name:"nodes",initialState:OI,reducers:{nodesChanged:(e,t)=>{e.nodes=KM(t.payload,e.nodes)},nodeAdded:(e,t)=>{e.nodes.push(t.payload)},edgesChanged:(e,t)=>{e.edges=uie(t.payload,e.edges)},connectionStarted:(e,t)=>{e.connectionStartParams=t.payload},connectionMade:(e,t)=>{e.edges=_M(t.payload,e.edges)},connectionEnded:e=>{e.connectionStartParams=null},fieldValueChanged:(e,t)=>{const{nodeId:n,fieldName:r,value:i}=t.payload,o=e.nodes.findIndex(s=>s.id===n);o>-1&&(e.nodes[o].data.inputs[r].value=i)},imageCollectionFieldValueChanged:(e,t)=>{const{nodeId:n,fieldName:r,value:i}=t.payload,o=e.nodes.findIndex(a=>a.id===n);if(o===-1)return;const s=Ln(e.nodes[o].data.inputs[r].value);if(!s){e.nodes[o].data.inputs[r].value=i;return}e.nodes[o].data.inputs[r].value=iY(s.concat(i),"image_name")},shouldShowGraphOverlayChanged:(e,t)=>{e.shouldShowGraphOverlay=t.payload},shouldShowFieldTypeLegendChanged:(e,t)=>{e.shouldShowFieldTypeLegend=t.payload},shouldShowMinimapPanelChanged:(e,t)=>{e.shouldShowMinimapPanel=t.payload},nodeTemplatesBuilt:(e,t)=>{e.invocationTemplates=t.payload},nodeEditorReset:e=>{e.nodes=[],e.edges=[]},setEditorInstance:(e,t)=>{e.editorInstance=t.payload},loadFileNodes:(e,t)=>{e.nodes=t.payload},loadFileEdges:(e,t)=>{e.edges=t.payload},setProgressNodeSize:(e,t)=>{e.progressNodeSize=t.payload}},extraReducers:e=>{e.addCase(Df.fulfilled,(t,n)=>{t.schema=n.payload})}}),{nodesChanged:J3e,edgesChanged:e5e,nodeAdded:t5e,fieldValueChanged:c2,connectionMade:n5e,connectionStarted:r5e,connectionEnded:i5e,shouldShowGraphOverlayChanged:o5e,shouldShowFieldTypeLegendChanged:s5e,shouldShowMinimapPanelChanged:a5e,nodeTemplatesBuilt:fC,nodeEditorReset:II,imageCollectionFieldValueChanged:l5e,setEditorInstance:u5e,loadFileNodes:c5e,loadFileEdges:d5e,setProgressNodeSize:f5e}=MI.actions,Jse=MI.reducer,NI={esrganModelName:"RealESRGAN_x4plus.pth"},DI=Pt({name:"postprocessing",initialState:NI,reducers:{esrganModelNameChanged:(e,t)=>{e.esrganModelName=t.payload}}}),{esrganModelNameChanged:h5e}=DI.actions,eae=DI.reducer,tae={positiveStylePrompt:"",negativeStylePrompt:"",shouldConcatSDXLStylePrompt:!0,shouldUseSDXLRefiner:!1,sdxlImg2ImgDenoisingStrength:.7,refinerModel:null,refinerSteps:20,refinerCFGScale:7.5,refinerScheduler:"euler",refinerAestheticScore:6,refinerStart:.7},LI=Pt({name:"sdxl",initialState:tae,reducers:{setPositiveStylePromptSDXL:(e,t)=>{e.positiveStylePrompt=t.payload},setNegativeStylePromptSDXL:(e,t)=>{e.negativeStylePrompt=t.payload},setShouldConcatSDXLStylePrompt:(e,t)=>{e.shouldConcatSDXLStylePrompt=t.payload},setShouldUseSDXLRefiner:(e,t)=>{e.shouldUseSDXLRefiner=t.payload},setSDXLImg2ImgDenoisingStrength:(e,t)=>{e.sdxlImg2ImgDenoisingStrength=t.payload},refinerModelChanged:(e,t)=>{e.refinerModel=t.payload},setRefinerSteps:(e,t)=>{e.refinerSteps=t.payload},setRefinerCFGScale:(e,t)=>{e.refinerCFGScale=t.payload},setRefinerScheduler:(e,t)=>{e.refinerScheduler=t.payload},setRefinerAestheticScore:(e,t)=>{e.refinerAestheticScore=t.payload},setRefinerStart:(e,t)=>{e.refinerStart=t.payload}}}),{setPositiveStylePromptSDXL:p5e,setNegativeStylePromptSDXL:g5e,setShouldConcatSDXLStylePrompt:m5e,setShouldUseSDXLRefiner:nae,setSDXLImg2ImgDenoisingStrength:y5e,refinerModelChanged:xE,setRefinerSteps:v5e,setRefinerCFGScale:b5e,setRefinerScheduler:S5e,setRefinerAestheticScore:_5e,setRefinerStart:w5e}=LI.actions,rae=LI.reducer,Ph=ue("app/userInvoked"),iae={type:"logger",log(e){this.output("log",e)},warn(e){this.output("warn",e)},error(e){this.output("error",e)},output(e,t){console&&console[e]&&console[e].apply(console,t)}};class Um{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.init(t,n)}init(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.prefix=n.prefix||"i18next:",this.logger=t||iae,this.options=n,this.debug=n.debug}log(){for(var t=arguments.length,n=new Array(t),r=0;r{this.observers[r]=this.observers[r]||[],this.observers[r].push(n)}),this}off(t,n){if(this.observers[t]){if(!n){delete this.observers[t];return}this.observers[t]=this.observers[t].filter(r=>r!==n)}}emit(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;i{s(...r)}),this.observers["*"]&&[].concat(this.observers["*"]).forEach(s=>{s.apply(s,[t,...r])})}}function Yc(){let e,t;const n=new Promise((r,i)=>{e=r,t=i});return n.resolve=e,n.reject=t,n}function CE(e){return e==null?"":""+e}function oae(e,t,n){e.forEach(r=>{t[r]&&(n[r]=t[r])})}function hC(e,t,n){function r(s){return s&&s.indexOf("###")>-1?s.replace(/###/g,"."):s}function i(){return!e||typeof e=="string"}const o=typeof t!="string"?[].concat(t):t.split(".");for(;o.length>1;){if(i())return{};const s=r(o.shift());!e[s]&&n&&(e[s]=new n),Object.prototype.hasOwnProperty.call(e,s)?e=e[s]:e={}}return i()?{}:{obj:e,k:r(o.shift())}}function TE(e,t,n){const{obj:r,k:i}=hC(e,t,Object);r[i]=n}function sae(e,t,n,r){const{obj:i,k:o}=hC(e,t,Object);i[o]=i[o]||[],r&&(i[o]=i[o].concat(n)),r||i[o].push(n)}function Gm(e,t){const{obj:n,k:r}=hC(e,t);if(n)return n[r]}function aae(e,t,n){const r=Gm(e,n);return r!==void 0?r:Gm(t,n)}function $I(e,t,n){for(const r in t)r!=="__proto__"&&r!=="constructor"&&(r in e?typeof e[r]=="string"||e[r]instanceof String||typeof t[r]=="string"||t[r]instanceof String?n&&(e[r]=t[r]):$I(e[r],t[r],n):e[r]=t[r]);return e}function jl(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}var lae={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};function uae(e){return typeof e=="string"?e.replace(/[&<>"'\/]/g,t=>lae[t]):e}const cae=[" ",",","?","!",";"];function dae(e,t,n){t=t||"",n=n||"";const r=cae.filter(s=>t.indexOf(s)<0&&n.indexOf(s)<0);if(r.length===0)return!0;const i=new RegExp(`(${r.map(s=>s==="?"?"\\?":s).join("|")})`);let o=!i.test(e);if(!o){const s=e.indexOf(n);s>0&&!i.test(e.substring(0,s))&&(o=!0)}return o}function Hm(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:".";if(!e)return;if(e[t])return e[t];const r=t.split(n);let i=e;for(let o=0;oo+s;)s++,a=r.slice(o,o+s).join(n),l=i[a];if(l===void 0)return;if(l===null)return null;if(t.endsWith(a)){if(typeof l=="string")return l;if(a&&typeof l[a]=="string")return l[a]}const u=r.slice(o+s).join(n);return u?Hm(l,u,n):void 0}i=i[r[o]]}return i}function qm(e){return e&&e.indexOf("_")>0?e.replace("_","-"):e}class EE extends ev{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{ns:["translation"],defaultNS:"translation"};super(),this.data=t||{},this.options=n,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.options.ignoreJSONStructure===void 0&&(this.options.ignoreJSONStructure=!0)}addNamespaces(t){this.options.ns.indexOf(t)<0&&this.options.ns.push(t)}removeNamespaces(t){const n=this.options.ns.indexOf(t);n>-1&&this.options.ns.splice(n,1)}getResource(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};const o=i.keySeparator!==void 0?i.keySeparator:this.options.keySeparator,s=i.ignoreJSONStructure!==void 0?i.ignoreJSONStructure:this.options.ignoreJSONStructure;let a=[t,n];r&&typeof r!="string"&&(a=a.concat(r)),r&&typeof r=="string"&&(a=a.concat(o?r.split(o):r)),t.indexOf(".")>-1&&(a=t.split("."));const l=Gm(this.data,a);return l||!s||typeof r!="string"?l:Hm(this.data&&this.data[t]&&this.data[t][n],r,o)}addResource(t,n,r,i){let o=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{silent:!1};const s=o.keySeparator!==void 0?o.keySeparator:this.options.keySeparator;let a=[t,n];r&&(a=a.concat(s?r.split(s):r)),t.indexOf(".")>-1&&(a=t.split("."),i=n,n=a[1]),this.addNamespaces(n),TE(this.data,a,i),o.silent||this.emit("added",t,n,r,i)}addResources(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{silent:!1};for(const o in r)(typeof r[o]=="string"||Object.prototype.toString.apply(r[o])==="[object Array]")&&this.addResource(t,n,o,r[o],{silent:!0});i.silent||this.emit("added",t,n,r)}addResourceBundle(t,n,r,i,o){let s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{silent:!1},a=[t,n];t.indexOf(".")>-1&&(a=t.split("."),i=r,r=n,n=a[1]),this.addNamespaces(n);let l=Gm(this.data,a)||{};i?$I(l,r,o):l={...l,...r},TE(this.data,a,l),s.silent||this.emit("added",t,n,r)}removeResourceBundle(t,n){this.hasResourceBundle(t,n)&&delete this.data[t][n],this.removeNamespaces(n),this.emit("removed",t,n)}hasResourceBundle(t,n){return this.getResource(t,n)!==void 0}getResourceBundle(t,n){return n||(n=this.options.defaultNS),this.options.compatibilityAPI==="v1"?{...this.getResource(t,n)}:this.getResource(t,n)}getDataByLanguage(t){return this.data[t]}hasLanguageSomeTranslations(t){const n=this.getDataByLanguage(t);return!!(n&&Object.keys(n)||[]).find(i=>n[i]&&Object.keys(n[i]).length>0)}toJSON(){return this.data}}var FI={processors:{},addPostProcessor(e){this.processors[e.name]=e},handle(e,t,n,r,i){return e.forEach(o=>{this.processors[o]&&(t=this.processors[o].process(t,n,r,i))}),t}};const PE={};class Wm extends ev{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(),oae(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],t,this),this.options=n,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.logger=qi.create("translator")}changeLanguage(t){t&&(this.language=t)}exists(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}};if(t==null)return!1;const r=this.resolve(t,n);return r&&r.res!==void 0}extractFromKey(t,n){let r=n.nsSeparator!==void 0?n.nsSeparator:this.options.nsSeparator;r===void 0&&(r=":");const i=n.keySeparator!==void 0?n.keySeparator:this.options.keySeparator;let o=n.ns||this.options.defaultNS||[];const s=r&&t.indexOf(r)>-1,a=!this.options.userDefinedKeySeparator&&!n.keySeparator&&!this.options.userDefinedNsSeparator&&!n.nsSeparator&&!dae(t,r,i);if(s&&!a){const l=t.match(this.interpolator.nestingRegexp);if(l&&l.length>0)return{key:t,namespaces:o};const u=t.split(r);(r!==i||r===i&&this.options.ns.indexOf(u[0])>-1)&&(o=u.shift()),t=u.join(i)}return typeof o=="string"&&(o=[o]),{key:t,namespaces:o}}translate(t,n,r){if(typeof n!="object"&&this.options.overloadTranslationOptionHandler&&(n=this.options.overloadTranslationOptionHandler(arguments)),typeof n=="object"&&(n={...n}),n||(n={}),t==null)return"";Array.isArray(t)||(t=[String(t)]);const i=n.returnDetails!==void 0?n.returnDetails:this.options.returnDetails,o=n.keySeparator!==void 0?n.keySeparator:this.options.keySeparator,{key:s,namespaces:a}=this.extractFromKey(t[t.length-1],n),l=a[a.length-1],u=n.lng||this.language,c=n.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(u&&u.toLowerCase()==="cimode"){if(c){const b=n.nsSeparator||this.options.nsSeparator;return i?{res:`${l}${b}${s}`,usedKey:s,exactUsedKey:s,usedLng:u,usedNS:l}:`${l}${b}${s}`}return i?{res:s,usedKey:s,exactUsedKey:s,usedLng:u,usedNS:l}:s}const d=this.resolve(t,n);let f=d&&d.res;const h=d&&d.usedKey||s,p=d&&d.exactUsedKey||s,m=Object.prototype.toString.apply(f),S=["[object Number]","[object Function]","[object RegExp]"],y=n.joinArrays!==void 0?n.joinArrays:this.options.joinArrays,v=!this.i18nFormat||this.i18nFormat.handleAsObject;if(v&&f&&(typeof f!="string"&&typeof f!="boolean"&&typeof f!="number")&&S.indexOf(m)<0&&!(typeof y=="string"&&m==="[object Array]")){if(!n.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");const b=this.options.returnedObjectHandler?this.options.returnedObjectHandler(h,f,{...n,ns:a}):`key '${s} (${this.language})' returned an object instead of string.`;return i?(d.res=b,d):b}if(o){const b=m==="[object Array]",_=b?[]:{},w=b?p:h;for(const x in f)if(Object.prototype.hasOwnProperty.call(f,x)){const T=`${w}${o}${x}`;_[x]=this.translate(T,{...n,joinArrays:!1,ns:a}),_[x]===T&&(_[x]=f[x])}f=_}}else if(v&&typeof y=="string"&&m==="[object Array]")f=f.join(y),f&&(f=this.extendTranslation(f,t,n,r));else{let b=!1,_=!1;const w=n.count!==void 0&&typeof n.count!="string",x=Wm.hasDefaultValue(n),T=w?this.pluralResolver.getSuffix(u,n.count,n):"",P=n.ordinal&&w?this.pluralResolver.getSuffix(u,n.count,{ordinal:!1}):"",E=n[`defaultValue${T}`]||n[`defaultValue${P}`]||n.defaultValue;!this.isValidLookup(f)&&x&&(b=!0,f=E),this.isValidLookup(f)||(_=!0,f=s);const $=(n.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&_?void 0:f,I=x&&E!==f&&this.options.updateMissing;if(_||b||I){if(this.logger.log(I?"updateKey":"missingKey",u,l,s,I?E:f),o){const N=this.resolve(s,{...n,keySeparator:!1});N&&N.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}let C=[];const R=this.languageUtils.getFallbackCodes(this.options.fallbackLng,n.lng||this.language);if(this.options.saveMissingTo==="fallback"&&R&&R[0])for(let N=0;N{const L=x&&D!==f?D:$;this.options.missingKeyHandler?this.options.missingKeyHandler(N,l,O,L,I,n):this.backendConnector&&this.backendConnector.saveMissing&&this.backendConnector.saveMissing(N,l,O,L,I,n),this.emit("missingKey",N,l,O,f)};this.options.saveMissing&&(this.options.saveMissingPlurals&&w?C.forEach(N=>{this.pluralResolver.getSuffixes(N,n).forEach(O=>{M([N],s+O,n[`defaultValue${O}`]||E)})}):M(C,s,E))}f=this.extendTranslation(f,t,n,d,r),_&&f===s&&this.options.appendNamespaceToMissingKey&&(f=`${l}:${s}`),(_||b)&&this.options.parseMissingKeyHandler&&(this.options.compatibilityAPI!=="v1"?f=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${l}:${s}`:s,b?f:void 0):f=this.options.parseMissingKeyHandler(f))}return i?(d.res=f,d):f}extendTranslation(t,n,r,i,o){var s=this;if(this.i18nFormat&&this.i18nFormat.parse)t=this.i18nFormat.parse(t,{...this.options.interpolation.defaultVariables,...r},i.usedLng,i.usedNS,i.usedKey,{resolved:i});else if(!r.skipInterpolation){r.interpolation&&this.interpolator.init({...r,interpolation:{...this.options.interpolation,...r.interpolation}});const u=typeof t=="string"&&(r&&r.interpolation&&r.interpolation.skipOnVariables!==void 0?r.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables);let c;if(u){const f=t.match(this.interpolator.nestingRegexp);c=f&&f.length}let d=r.replace&&typeof r.replace!="string"?r.replace:r;if(this.options.interpolation.defaultVariables&&(d={...this.options.interpolation.defaultVariables,...d}),t=this.interpolator.interpolate(t,d,r.lng||this.language,r),u){const f=t.match(this.interpolator.nestingRegexp),h=f&&f.length;c1&&arguments[1]!==void 0?arguments[1]:{},r,i,o,s,a;return typeof t=="string"&&(t=[t]),t.forEach(l=>{if(this.isValidLookup(r))return;const u=this.extractFromKey(l,n),c=u.key;i=c;let d=u.namespaces;this.options.fallbackNS&&(d=d.concat(this.options.fallbackNS));const f=n.count!==void 0&&typeof n.count!="string",h=f&&!n.ordinal&&n.count===0&&this.pluralResolver.shouldUseIntlApi(),p=n.context!==void 0&&(typeof n.context=="string"||typeof n.context=="number")&&n.context!=="",m=n.lngs?n.lngs:this.languageUtils.toResolveHierarchy(n.lng||this.language,n.fallbackLng);d.forEach(S=>{this.isValidLookup(r)||(a=S,!PE[`${m[0]}-${S}`]&&this.utils&&this.utils.hasLoadedNamespace&&!this.utils.hasLoadedNamespace(a)&&(PE[`${m[0]}-${S}`]=!0,this.logger.warn(`key "${i}" for languages "${m.join(", ")}" won't get resolved as namespace "${a}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),m.forEach(y=>{if(this.isValidLookup(r))return;s=y;const v=[c];if(this.i18nFormat&&this.i18nFormat.addLookupKeys)this.i18nFormat.addLookupKeys(v,c,y,S,n);else{let b;f&&(b=this.pluralResolver.getSuffix(y,n.count,n));const _=`${this.options.pluralSeparator}zero`,w=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(f&&(v.push(c+b),n.ordinal&&b.indexOf(w)===0&&v.push(c+b.replace(w,this.options.pluralSeparator)),h&&v.push(c+_)),p){const x=`${c}${this.options.contextSeparator}${n.context}`;v.push(x),f&&(v.push(x+b),n.ordinal&&b.indexOf(w)===0&&v.push(x+b.replace(w,this.options.pluralSeparator)),h&&v.push(x+_))}}let g;for(;g=v.pop();)this.isValidLookup(r)||(o=g,r=this.getResource(y,S,g,n))}))})}),{res:r,usedKey:i,exactUsedKey:o,usedLng:s,usedNS:a}}isValidLookup(t){return t!==void 0&&!(!this.options.returnNull&&t===null)&&!(!this.options.returnEmptyString&&t==="")}getResource(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return this.i18nFormat&&this.i18nFormat.getResource?this.i18nFormat.getResource(t,n,r,i):this.resourceStore.getResource(t,n,r,i)}static hasDefaultValue(t){const n="defaultValue";for(const r in t)if(Object.prototype.hasOwnProperty.call(t,r)&&n===r.substring(0,n.length)&&t[r]!==void 0)return!0;return!1}}function Bb(e){return e.charAt(0).toUpperCase()+e.slice(1)}class AE{constructor(t){this.options=t,this.supportedLngs=this.options.supportedLngs||!1,this.logger=qi.create("languageUtils")}getScriptPartFromCode(t){if(t=qm(t),!t||t.indexOf("-")<0)return null;const n=t.split("-");return n.length===2||(n.pop(),n[n.length-1].toLowerCase()==="x")?null:this.formatLanguageCode(n.join("-"))}getLanguagePartFromCode(t){if(t=qm(t),!t||t.indexOf("-")<0)return t;const n=t.split("-");return this.formatLanguageCode(n[0])}formatLanguageCode(t){if(typeof t=="string"&&t.indexOf("-")>-1){const n=["hans","hant","latn","cyrl","cans","mong","arab"];let r=t.split("-");return this.options.lowerCaseLng?r=r.map(i=>i.toLowerCase()):r.length===2?(r[0]=r[0].toLowerCase(),r[1]=r[1].toUpperCase(),n.indexOf(r[1].toLowerCase())>-1&&(r[1]=Bb(r[1].toLowerCase()))):r.length===3&&(r[0]=r[0].toLowerCase(),r[1].length===2&&(r[1]=r[1].toUpperCase()),r[0]!=="sgn"&&r[2].length===2&&(r[2]=r[2].toUpperCase()),n.indexOf(r[1].toLowerCase())>-1&&(r[1]=Bb(r[1].toLowerCase())),n.indexOf(r[2].toLowerCase())>-1&&(r[2]=Bb(r[2].toLowerCase()))),r.join("-")}return this.options.cleanCode||this.options.lowerCaseLng?t.toLowerCase():t}isSupportedCode(t){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(t=this.getLanguagePartFromCode(t)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(t)>-1}getBestMatchFromCodes(t){if(!t)return null;let n;return t.forEach(r=>{if(n)return;const i=this.formatLanguageCode(r);(!this.options.supportedLngs||this.isSupportedCode(i))&&(n=i)}),!n&&this.options.supportedLngs&&t.forEach(r=>{if(n)return;const i=this.getLanguagePartFromCode(r);if(this.isSupportedCode(i))return n=i;n=this.options.supportedLngs.find(o=>{if(o===i)return o;if(!(o.indexOf("-")<0&&i.indexOf("-")<0)&&o.indexOf(i)===0)return o})}),n||(n=this.getFallbackCodes(this.options.fallbackLng)[0]),n}getFallbackCodes(t,n){if(!t)return[];if(typeof t=="function"&&(t=t(n)),typeof t=="string"&&(t=[t]),Object.prototype.toString.apply(t)==="[object Array]")return t;if(!n)return t.default||[];let r=t[n];return r||(r=t[this.getScriptPartFromCode(n)]),r||(r=t[this.formatLanguageCode(n)]),r||(r=t[this.getLanguagePartFromCode(n)]),r||(r=t.default),r||[]}toResolveHierarchy(t,n){const r=this.getFallbackCodes(n||this.options.fallbackLng||[],t),i=[],o=s=>{s&&(this.isSupportedCode(s)?i.push(s):this.logger.warn(`rejecting language code not found in supportedLngs: ${s}`))};return typeof t=="string"&&(t.indexOf("-")>-1||t.indexOf("_")>-1)?(this.options.load!=="languageOnly"&&o(this.formatLanguageCode(t)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&o(this.getScriptPartFromCode(t)),this.options.load!=="currentOnly"&&o(this.getLanguagePartFromCode(t))):typeof t=="string"&&o(this.formatLanguageCode(t)),r.forEach(s=>{i.indexOf(s)<0&&o(this.formatLanguageCode(s))}),i}}let fae=[{lngs:["ach","ak","am","arn","br","fil","gun","ln","mfe","mg","mi","oc","pt","pt-BR","tg","tl","ti","tr","uz","wa"],nr:[1,2],fc:1},{lngs:["af","an","ast","az","bg","bn","ca","da","de","dev","el","en","eo","es","et","eu","fi","fo","fur","fy","gl","gu","ha","hi","hu","hy","ia","it","kk","kn","ku","lb","mai","ml","mn","mr","nah","nap","nb","ne","nl","nn","no","nso","pa","pap","pms","ps","pt-PT","rm","sco","se","si","so","son","sq","sv","sw","ta","te","tk","ur","yo"],nr:[1,2],fc:2},{lngs:["ay","bo","cgg","fa","ht","id","ja","jbo","ka","km","ko","ky","lo","ms","sah","su","th","tt","ug","vi","wo","zh"],nr:[1],fc:3},{lngs:["be","bs","cnr","dz","hr","ru","sr","uk"],nr:[1,2,5],fc:4},{lngs:["ar"],nr:[0,1,2,3,11,100],fc:5},{lngs:["cs","sk"],nr:[1,2,5],fc:6},{lngs:["csb","pl"],nr:[1,2,5],fc:7},{lngs:["cy"],nr:[1,2,3,8],fc:8},{lngs:["fr"],nr:[1,2],fc:9},{lngs:["ga"],nr:[1,2,3,7,11],fc:10},{lngs:["gd"],nr:[1,2,3,20],fc:11},{lngs:["is"],nr:[1,2],fc:12},{lngs:["jv"],nr:[0,1],fc:13},{lngs:["kw"],nr:[1,2,3,4],fc:14},{lngs:["lt"],nr:[1,2,10],fc:15},{lngs:["lv"],nr:[1,2,0],fc:16},{lngs:["mk"],nr:[1,2],fc:17},{lngs:["mnk"],nr:[0,1,2],fc:18},{lngs:["mt"],nr:[1,2,11,20],fc:19},{lngs:["or"],nr:[2,1],fc:2},{lngs:["ro"],nr:[1,2,20],fc:20},{lngs:["sl"],nr:[5,1,2,3],fc:21},{lngs:["he","iw"],nr:[1,2,20,21],fc:22}],hae={1:function(e){return+(e>1)},2:function(e){return+(e!=1)},3:function(e){return 0},4:function(e){return e%10==1&&e%100!=11?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2},5:function(e){return e==0?0:e==1?1:e==2?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},6:function(e){return e==1?0:e>=2&&e<=4?1:2},7:function(e){return e==1?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2},8:function(e){return e==1?0:e==2?1:e!=8&&e!=11?2:3},9:function(e){return+(e>=2)},10:function(e){return e==1?0:e==2?1:e<7?2:e<11?3:4},11:function(e){return e==1||e==11?0:e==2||e==12?1:e>2&&e<20?2:3},12:function(e){return+(e%10!=1||e%100==11)},13:function(e){return+(e!==0)},14:function(e){return e==1?0:e==2?1:e==3?2:3},15:function(e){return e%10==1&&e%100!=11?0:e%10>=2&&(e%100<10||e%100>=20)?1:2},16:function(e){return e%10==1&&e%100!=11?0:e!==0?1:2},17:function(e){return e==1||e%10==1&&e%100!=11?0:1},18:function(e){return e==0?0:e==1?1:2},19:function(e){return e==1?0:e==0||e%100>1&&e%100<11?1:e%100>10&&e%100<20?2:3},20:function(e){return e==1?0:e==0||e%100>0&&e%100<20?1:2},21:function(e){return e%100==1?1:e%100==2?2:e%100==3||e%100==4?3:0},22:function(e){return e==1?0:e==2?1:(e<0||e>10)&&e%10==0?2:3}};const pae=["v1","v2","v3"],gae=["v4"],kE={zero:0,one:1,two:2,few:3,many:4,other:5};function mae(){const e={};return fae.forEach(t=>{t.lngs.forEach(n=>{e[n]={numbers:t.nr,plurals:hae[t.fc]}})}),e}class yae{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.languageUtils=t,this.options=n,this.logger=qi.create("pluralResolver"),(!this.options.compatibilityJSON||gae.includes(this.options.compatibilityJSON))&&(typeof Intl>"u"||!Intl.PluralRules)&&(this.options.compatibilityJSON="v3",this.logger.error("Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.")),this.rules=mae()}addRule(t,n){this.rules[t]=n}getRule(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(this.shouldUseIntlApi())try{return new Intl.PluralRules(qm(t),{type:n.ordinal?"ordinal":"cardinal"})}catch{return}return this.rules[t]||this.rules[this.languageUtils.getLanguagePartFromCode(t)]}needsPlural(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const r=this.getRule(t,n);return this.shouldUseIntlApi()?r&&r.resolvedOptions().pluralCategories.length>1:r&&r.numbers.length>1}getPluralFormsOfKey(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return this.getSuffixes(t,r).map(i=>`${n}${i}`)}getSuffixes(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const r=this.getRule(t,n);return r?this.shouldUseIntlApi()?r.resolvedOptions().pluralCategories.sort((i,o)=>kE[i]-kE[o]).map(i=>`${this.options.prepend}${n.ordinal?`ordinal${this.options.prepend}`:""}${i}`):r.numbers.map(i=>this.getSuffix(t,i,n)):[]}getSuffix(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const i=this.getRule(t,r);return i?this.shouldUseIntlApi()?`${this.options.prepend}${r.ordinal?`ordinal${this.options.prepend}`:""}${i.select(n)}`:this.getSuffixRetroCompatible(i,n):(this.logger.warn(`no plural rule found for: ${t}`),"")}getSuffixRetroCompatible(t,n){const r=t.noAbs?t.plurals(n):t.plurals(Math.abs(n));let i=t.numbers[r];this.options.simplifyPluralSuffix&&t.numbers.length===2&&t.numbers[0]===1&&(i===2?i="plural":i===1&&(i=""));const o=()=>this.options.prepend&&i.toString()?this.options.prepend+i.toString():i.toString();return this.options.compatibilityJSON==="v1"?i===1?"":typeof i=="number"?`_plural_${i.toString()}`:o():this.options.compatibilityJSON==="v2"||this.options.simplifyPluralSuffix&&t.numbers.length===2&&t.numbers[0]===1?o():this.options.prepend&&r.toString()?this.options.prepend+r.toString():r.toString()}shouldUseIntlApi(){return!pae.includes(this.options.compatibilityJSON)}}function RE(e,t,n){let r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:".",i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,o=aae(e,t,n);return!o&&i&&typeof n=="string"&&(o=Hm(e,n,r),o===void 0&&(o=Hm(t,n,r))),o}class vae{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger=qi.create("interpolator"),this.options=t,this.format=t.interpolation&&t.interpolation.format||(n=>n),this.init(t)}init(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};t.interpolation||(t.interpolation={escapeValue:!0});const n=t.interpolation;this.escape=n.escape!==void 0?n.escape:uae,this.escapeValue=n.escapeValue!==void 0?n.escapeValue:!0,this.useRawValueToEscape=n.useRawValueToEscape!==void 0?n.useRawValueToEscape:!1,this.prefix=n.prefix?jl(n.prefix):n.prefixEscaped||"{{",this.suffix=n.suffix?jl(n.suffix):n.suffixEscaped||"}}",this.formatSeparator=n.formatSeparator?n.formatSeparator:n.formatSeparator||",",this.unescapePrefix=n.unescapeSuffix?"":n.unescapePrefix||"-",this.unescapeSuffix=this.unescapePrefix?"":n.unescapeSuffix||"",this.nestingPrefix=n.nestingPrefix?jl(n.nestingPrefix):n.nestingPrefixEscaped||jl("$t("),this.nestingSuffix=n.nestingSuffix?jl(n.nestingSuffix):n.nestingSuffixEscaped||jl(")"),this.nestingOptionsSeparator=n.nestingOptionsSeparator?n.nestingOptionsSeparator:n.nestingOptionsSeparator||",",this.maxReplaces=n.maxReplaces?n.maxReplaces:1e3,this.alwaysFormat=n.alwaysFormat!==void 0?n.alwaysFormat:!1,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){const t=`${this.prefix}(.+?)${this.suffix}`;this.regexp=new RegExp(t,"g");const n=`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`;this.regexpUnescape=new RegExp(n,"g");const r=`${this.nestingPrefix}(.+?)${this.nestingSuffix}`;this.nestingRegexp=new RegExp(r,"g")}interpolate(t,n,r,i){let o,s,a;const l=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{};function u(p){return p.replace(/\$/g,"$$$$")}const c=p=>{if(p.indexOf(this.formatSeparator)<0){const v=RE(n,l,p,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(v,void 0,r,{...i,...n,interpolationkey:p}):v}const m=p.split(this.formatSeparator),S=m.shift().trim(),y=m.join(this.formatSeparator).trim();return this.format(RE(n,l,S,this.options.keySeparator,this.options.ignoreJSONStructure),y,r,{...i,...n,interpolationkey:S})};this.resetRegExp();const d=i&&i.missingInterpolationHandler||this.options.missingInterpolationHandler,f=i&&i.interpolation&&i.interpolation.skipOnVariables!==void 0?i.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:p=>u(p)},{regex:this.regexp,safeValue:p=>this.escapeValue?u(this.escape(p)):u(p)}].forEach(p=>{for(a=0;o=p.regex.exec(t);){const m=o[1].trim();if(s=c(m),s===void 0)if(typeof d=="function"){const y=d(t,o,i);s=typeof y=="string"?y:""}else if(i&&Object.prototype.hasOwnProperty.call(i,m))s="";else if(f){s=o[0];continue}else this.logger.warn(`missed to pass in variable ${m} for interpolating ${t}`),s="";else typeof s!="string"&&!this.useRawValueToEscape&&(s=CE(s));const S=p.safeValue(s);if(t=t.replace(o[0],S),f?(p.regex.lastIndex+=s.length,p.regex.lastIndex-=o[0].length):p.regex.lastIndex=0,a++,a>=this.maxReplaces)break}}),t}nest(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i,o,s;function a(l,u){const c=this.nestingOptionsSeparator;if(l.indexOf(c)<0)return l;const d=l.split(new RegExp(`${c}[ ]*{`));let f=`{${d[1]}`;l=d[0],f=this.interpolate(f,s);const h=f.match(/'/g),p=f.match(/"/g);(h&&h.length%2===0&&!p||p.length%2!==0)&&(f=f.replace(/'/g,'"'));try{s=JSON.parse(f),u&&(s={...u,...s})}catch(m){return this.logger.warn(`failed parsing options string in nesting for key ${l}`,m),`${l}${c}${f}`}return delete s.defaultValue,l}for(;i=this.nestingRegexp.exec(t);){let l=[];s={...r},s=s.replace&&typeof s.replace!="string"?s.replace:s,s.applyPostProcessor=!1,delete s.defaultValue;let u=!1;if(i[0].indexOf(this.formatSeparator)!==-1&&!/{.*}/.test(i[1])){const c=i[1].split(this.formatSeparator).map(d=>d.trim());i[1]=c.shift(),l=c,u=!0}if(o=n(a.call(this,i[1].trim(),s),s),o&&i[0]===t&&typeof o!="string")return o;typeof o!="string"&&(o=CE(o)),o||(this.logger.warn(`missed to resolve ${i[1]} for nesting ${t}`),o=""),u&&(o=l.reduce((c,d)=>this.format(c,d,r.lng,{...r,interpolationkey:i[1].trim()}),o.trim())),t=t.replace(i[0],o),this.regexp.lastIndex=0}return t}}function bae(e){let t=e.toLowerCase().trim();const n={};if(e.indexOf("(")>-1){const r=e.split("(");t=r[0].toLowerCase().trim();const i=r[1].substring(0,r[1].length-1);t==="currency"&&i.indexOf(":")<0?n.currency||(n.currency=i.trim()):t==="relativetime"&&i.indexOf(":")<0?n.range||(n.range=i.trim()):i.split(";").forEach(s=>{if(!s)return;const[a,...l]=s.split(":"),u=l.join(":").trim().replace(/^'+|'+$/g,"");n[a.trim()]||(n[a.trim()]=u),u==="false"&&(n[a.trim()]=!1),u==="true"&&(n[a.trim()]=!0),isNaN(u)||(n[a.trim()]=parseInt(u,10))})}return{formatName:t,formatOptions:n}}function Vl(e){const t={};return function(r,i,o){const s=i+JSON.stringify(o);let a=t[s];return a||(a=e(qm(i),o),t[s]=a),a(r)}}class Sae{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger=qi.create("formatter"),this.options=t,this.formats={number:Vl((n,r)=>{const i=new Intl.NumberFormat(n,{...r});return o=>i.format(o)}),currency:Vl((n,r)=>{const i=new Intl.NumberFormat(n,{...r,style:"currency"});return o=>i.format(o)}),datetime:Vl((n,r)=>{const i=new Intl.DateTimeFormat(n,{...r});return o=>i.format(o)}),relativetime:Vl((n,r)=>{const i=new Intl.RelativeTimeFormat(n,{...r});return o=>i.format(o,r.range||"day")}),list:Vl((n,r)=>{const i=new Intl.ListFormat(n,{...r});return o=>i.format(o)})},this.init(t)}init(t){const r=(arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}}).interpolation;this.formatSeparator=r.formatSeparator?r.formatSeparator:r.formatSeparator||","}add(t,n){this.formats[t.toLowerCase().trim()]=n}addCached(t,n){this.formats[t.toLowerCase().trim()]=Vl(n)}format(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return n.split(this.formatSeparator).reduce((a,l)=>{const{formatName:u,formatOptions:c}=bae(l);if(this.formats[u]){let d=a;try{const f=i&&i.formatParams&&i.formatParams[i.interpolationkey]||{},h=f.locale||f.lng||i.locale||i.lng||r;d=this.formats[u](a,h,{...c,...i,...f})}catch(f){this.logger.warn(f)}return d}else this.logger.warn(`there was no format function for ${u}`);return a},t)}}function _ae(e,t){e.pending[t]!==void 0&&(delete e.pending[t],e.pendingCount--)}class wae extends ev{constructor(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};super(),this.backend=t,this.store=n,this.services=r,this.languageUtils=r.languageUtils,this.options=i,this.logger=qi.create("backendConnector"),this.waitingReads=[],this.maxParallelReads=i.maxParallelReads||10,this.readingCalls=0,this.maxRetries=i.maxRetries>=0?i.maxRetries:5,this.retryTimeout=i.retryTimeout>=1?i.retryTimeout:350,this.state={},this.queue=[],this.backend&&this.backend.init&&this.backend.init(r,i.backend,i)}queueLoad(t,n,r,i){const o={},s={},a={},l={};return t.forEach(u=>{let c=!0;n.forEach(d=>{const f=`${u}|${d}`;!r.reload&&this.store.hasResourceBundle(u,d)?this.state[f]=2:this.state[f]<0||(this.state[f]===1?s[f]===void 0&&(s[f]=!0):(this.state[f]=1,c=!1,s[f]===void 0&&(s[f]=!0),o[f]===void 0&&(o[f]=!0),l[d]===void 0&&(l[d]=!0)))}),c||(a[u]=!0)}),(Object.keys(o).length||Object.keys(s).length)&&this.queue.push({pending:s,pendingCount:Object.keys(s).length,loaded:{},errors:[],callback:i}),{toLoad:Object.keys(o),pending:Object.keys(s),toLoadLanguages:Object.keys(a),toLoadNamespaces:Object.keys(l)}}loaded(t,n,r){const i=t.split("|"),o=i[0],s=i[1];n&&this.emit("failedLoading",o,s,n),r&&this.store.addResourceBundle(o,s,r),this.state[t]=n?-1:2;const a={};this.queue.forEach(l=>{sae(l.loaded,[o],s),_ae(l,t),n&&l.errors.push(n),l.pendingCount===0&&!l.done&&(Object.keys(l.loaded).forEach(u=>{a[u]||(a[u]={});const c=l.loaded[u];c.length&&c.forEach(d=>{a[u][d]===void 0&&(a[u][d]=!0)})}),l.done=!0,l.errors.length?l.callback(l.errors):l.callback())}),this.emit("loaded",a),this.queue=this.queue.filter(l=>!l.done)}read(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,o=arguments.length>4&&arguments[4]!==void 0?arguments[4]:this.retryTimeout,s=arguments.length>5?arguments[5]:void 0;if(!t.length)return s(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:t,ns:n,fcName:r,tried:i,wait:o,callback:s});return}this.readingCalls++;const a=(u,c)=>{if(this.readingCalls--,this.waitingReads.length>0){const d=this.waitingReads.shift();this.read(d.lng,d.ns,d.fcName,d.tried,d.wait,d.callback)}if(u&&c&&i{this.read.call(this,t,n,r,i+1,o*2,s)},o);return}s(u,c)},l=this.backend[r].bind(this.backend);if(l.length===2){try{const u=l(t,n);u&&typeof u.then=="function"?u.then(c=>a(null,c)).catch(a):a(null,u)}catch(u){a(u)}return}return l(t,n,a)}prepareLoading(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=arguments.length>3?arguments[3]:void 0;if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),i&&i();typeof t=="string"&&(t=this.languageUtils.toResolveHierarchy(t)),typeof n=="string"&&(n=[n]);const o=this.queueLoad(t,n,r,i);if(!o.toLoad.length)return o.pending.length||i(),null;o.toLoad.forEach(s=>{this.loadOne(s)})}load(t,n,r){this.prepareLoading(t,n,{},r)}reload(t,n,r){this.prepareLoading(t,n,{reload:!0},r)}loadOne(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";const r=t.split("|"),i=r[0],o=r[1];this.read(i,o,"read",void 0,void 0,(s,a)=>{s&&this.logger.warn(`${n}loading namespace ${o} for language ${i} failed`,s),!s&&a&&this.logger.log(`${n}loaded namespace ${o} for language ${i}`,a),this.loaded(t,s,a)})}saveMissing(t,n,r,i,o){let s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{},a=arguments.length>6&&arguments[6]!==void 0?arguments[6]:()=>{};if(this.services.utils&&this.services.utils.hasLoadedNamespace&&!this.services.utils.hasLoadedNamespace(n)){this.logger.warn(`did not save key "${r}" as the namespace "${n}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");return}if(!(r==null||r==="")){if(this.backend&&this.backend.create){const l={...s,isUpdate:o},u=this.backend.create.bind(this.backend);if(u.length<6)try{let c;u.length===5?c=u(t,n,r,i,l):c=u(t,n,r,i),c&&typeof c.then=="function"?c.then(d=>a(null,d)).catch(a):a(null,c)}catch(c){a(c)}else u(t,n,r,i,a,l)}!t||!t[0]||this.store.addResource(t[0],n,r,i)}}}function OE(){return{debug:!1,initImmediate:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:function(t){let n={};if(typeof t[1]=="object"&&(n=t[1]),typeof t[1]=="string"&&(n.defaultValue=t[1]),typeof t[2]=="string"&&(n.tDescription=t[2]),typeof t[2]=="object"||typeof t[3]=="object"){const r=t[3]||t[2];Object.keys(r).forEach(i=>{n[i]=r[i]})}return n},interpolation:{escapeValue:!0,format:(e,t,n,r)=>e,prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0}}}function ME(e){return typeof e.ns=="string"&&(e.ns=[e.ns]),typeof e.fallbackLng=="string"&&(e.fallbackLng=[e.fallbackLng]),typeof e.fallbackNS=="string"&&(e.fallbackNS=[e.fallbackNS]),e.supportedLngs&&e.supportedLngs.indexOf("cimode")<0&&(e.supportedLngs=e.supportedLngs.concat(["cimode"])),e}function Rp(){}function xae(e){Object.getOwnPropertyNames(Object.getPrototypeOf(e)).forEach(n=>{typeof e[n]=="function"&&(e[n]=e[n].bind(e))})}class Lf extends ev{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;if(super(),this.options=ME(t),this.services={},this.logger=qi,this.modules={external:[]},xae(this),n&&!this.isInitialized&&!t.isClone){if(!this.options.initImmediate)return this.init(t,n),this;setTimeout(()=>{this.init(t,n)},0)}}init(){var t=this;let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=arguments.length>1?arguments[1]:void 0;typeof n=="function"&&(r=n,n={}),!n.defaultNS&&n.defaultNS!==!1&&n.ns&&(typeof n.ns=="string"?n.defaultNS=n.ns:n.ns.indexOf("translation")<0&&(n.defaultNS=n.ns[0]));const i=OE();this.options={...i,...this.options,...ME(n)},this.options.compatibilityAPI!=="v1"&&(this.options.interpolation={...i.interpolation,...this.options.interpolation}),n.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=n.keySeparator),n.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=n.nsSeparator);function o(c){return c?typeof c=="function"?new c:c:null}if(!this.options.isClone){this.modules.logger?qi.init(o(this.modules.logger),this.options):qi.init(null,this.options);let c;this.modules.formatter?c=this.modules.formatter:typeof Intl<"u"&&(c=Sae);const d=new AE(this.options);this.store=new EE(this.options.resources,this.options);const f=this.services;f.logger=qi,f.resourceStore=this.store,f.languageUtils=d,f.pluralResolver=new yae(d,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),c&&(!this.options.interpolation.format||this.options.interpolation.format===i.interpolation.format)&&(f.formatter=o(c),f.formatter.init(f,this.options),this.options.interpolation.format=f.formatter.format.bind(f.formatter)),f.interpolator=new vae(this.options),f.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},f.backendConnector=new wae(o(this.modules.backend),f.resourceStore,f,this.options),f.backendConnector.on("*",function(h){for(var p=arguments.length,m=new Array(p>1?p-1:0),S=1;S1?p-1:0),S=1;S{h.init&&h.init(this)})}if(this.format=this.options.interpolation.format,r||(r=Rp),this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){const c=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);c.length>0&&c[0]!=="dev"&&(this.options.lng=c[0])}!this.services.languageDetector&&!this.options.lng&&this.logger.warn("init: no languageDetector is used and no lng is defined"),["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"].forEach(c=>{this[c]=function(){return t.store[c](...arguments)}}),["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach(c=>{this[c]=function(){return t.store[c](...arguments),t}});const l=Yc(),u=()=>{const c=(d,f)=>{this.isInitialized&&!this.initializedStoreOnce&&this.logger.warn("init: i18next is already initialized. You should call init just once!"),this.isInitialized=!0,this.options.isClone||this.logger.log("initialized",this.options),this.emit("initialized",this.options),l.resolve(f),r(d,f)};if(this.languages&&this.options.compatibilityAPI!=="v1"&&!this.isInitialized)return c(null,this.t.bind(this));this.changeLanguage(this.options.lng,c)};return this.options.resources||!this.options.initImmediate?u():setTimeout(u,0),l}loadResources(t){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Rp;const i=typeof t=="string"?t:this.language;if(typeof t=="function"&&(r=t),!this.options.resources||this.options.partialBundledLanguages){if(i&&i.toLowerCase()==="cimode")return r();const o=[],s=a=>{if(!a)return;this.services.languageUtils.toResolveHierarchy(a).forEach(u=>{o.indexOf(u)<0&&o.push(u)})};i?s(i):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(l=>s(l)),this.options.preload&&this.options.preload.forEach(a=>s(a)),this.services.backendConnector.load(o,this.options.ns,a=>{!a&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),r(a)})}else r(null)}reloadResources(t,n,r){const i=Yc();return t||(t=this.languages),n||(n=this.options.ns),r||(r=Rp),this.services.backendConnector.reload(t,n,o=>{i.resolve(),r(o)}),i}use(t){if(!t)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!t.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return t.type==="backend"&&(this.modules.backend=t),(t.type==="logger"||t.log&&t.warn&&t.error)&&(this.modules.logger=t),t.type==="languageDetector"&&(this.modules.languageDetector=t),t.type==="i18nFormat"&&(this.modules.i18nFormat=t),t.type==="postProcessor"&&FI.addPostProcessor(t),t.type==="formatter"&&(this.modules.formatter=t),t.type==="3rdParty"&&this.modules.external.push(t),this}setResolvedLanguage(t){if(!(!t||!this.languages)&&!(["cimode","dev"].indexOf(t)>-1))for(let n=0;n-1)&&this.store.hasLanguageSomeTranslations(r)){this.resolvedLanguage=r;break}}}changeLanguage(t,n){var r=this;this.isLanguageChangingTo=t;const i=Yc();this.emit("languageChanging",t);const o=l=>{this.language=l,this.languages=this.services.languageUtils.toResolveHierarchy(l),this.resolvedLanguage=void 0,this.setResolvedLanguage(l)},s=(l,u)=>{u?(o(u),this.translator.changeLanguage(u),this.isLanguageChangingTo=void 0,this.emit("languageChanged",u),this.logger.log("languageChanged",u)):this.isLanguageChangingTo=void 0,i.resolve(function(){return r.t(...arguments)}),n&&n(l,function(){return r.t(...arguments)})},a=l=>{!t&&!l&&this.services.languageDetector&&(l=[]);const u=typeof l=="string"?l:this.services.languageUtils.getBestMatchFromCodes(l);u&&(this.language||o(u),this.translator.language||this.translator.changeLanguage(u),this.services.languageDetector&&this.services.languageDetector.cacheUserLanguage&&this.services.languageDetector.cacheUserLanguage(u)),this.loadResources(u,c=>{s(c,u)})};return!t&&this.services.languageDetector&&!this.services.languageDetector.async?a(this.services.languageDetector.detect()):!t&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(a):this.services.languageDetector.detect(a):a(t),i}getFixedT(t,n,r){var i=this;const o=function(s,a){let l;if(typeof a!="object"){for(var u=arguments.length,c=new Array(u>2?u-2:0),d=2;d`${l.keyPrefix}${f}${p}`):h=l.keyPrefix?`${l.keyPrefix}${f}${s}`:s,i.t(h,l)};return typeof t=="string"?o.lng=t:o.lngs=t,o.ns=n,o.keyPrefix=r,o}t(){return this.translator&&this.translator.translate(...arguments)}exists(){return this.translator&&this.translator.exists(...arguments)}setDefaultNamespace(t){this.options.defaultNS=t}hasLoadedNamespace(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;const r=n.lng||this.resolvedLanguage||this.languages[0],i=this.options?this.options.fallbackLng:!1,o=this.languages[this.languages.length-1];if(r.toLowerCase()==="cimode")return!0;const s=(a,l)=>{const u=this.services.backendConnector.state[`${a}|${l}`];return u===-1||u===2};if(n.precheck){const a=n.precheck(this,s);if(a!==void 0)return a}return!!(this.hasResourceBundle(r,t)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||s(r,t)&&(!i||s(o,t)))}loadNamespaces(t,n){const r=Yc();return this.options.ns?(typeof t=="string"&&(t=[t]),t.forEach(i=>{this.options.ns.indexOf(i)<0&&this.options.ns.push(i)}),this.loadResources(i=>{r.resolve(),n&&n(i)}),r):(n&&n(),Promise.resolve())}loadLanguages(t,n){const r=Yc();typeof t=="string"&&(t=[t]);const i=this.options.preload||[],o=t.filter(s=>i.indexOf(s)<0);return o.length?(this.options.preload=i.concat(o),this.loadResources(s=>{r.resolve(),n&&n(s)}),r):(n&&n(),Promise.resolve())}dir(t){if(t||(t=this.resolvedLanguage||(this.languages&&this.languages.length>0?this.languages[0]:this.language)),!t)return"rtl";const n=["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"],r=this.services&&this.services.languageUtils||new AE(OE());return n.indexOf(r.getLanguagePartFromCode(t))>-1||t.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}static createInstance(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;return new Lf(t,n)}cloneInstance(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Rp;const r=t.forkResourceStore;r&&delete t.forkResourceStore;const i={...this.options,...t,isClone:!0},o=new Lf(i);return(t.debug!==void 0||t.prefix!==void 0)&&(o.logger=o.logger.clone(t)),["store","services","language"].forEach(a=>{o[a]=this[a]}),o.services={...this.services},o.services.utils={hasLoadedNamespace:o.hasLoadedNamespace.bind(o)},r&&(o.store=new EE(this.store.data,i),o.services.resourceStore=o.store),o.translator=new Wm(o.services,i),o.translator.on("*",function(a){for(var l=arguments.length,u=new Array(l>1?l-1:0),c=1;ctypeof e=="string"?{title:e,status:"info",isClosable:!0,duration:2500}:{status:"info",isClosable:!0,duration:2500,...e},BI={isConnected:!1,isProcessing:!1,isGFPGANAvailable:!0,isESRGANAvailable:!0,shouldConfirmOnDelete:!0,currentStep:0,totalSteps:0,currentIteration:0,totalIterations:0,currentStatusHasSteps:!1,isCancelable:!0,enableImageDebugging:!1,toastQueue:[],progressImage:null,shouldAntialiasProgressImage:!1,sessionId:null,cancelType:"immediate",isCancelScheduled:!1,subscribedNodeIds:[],wereModelsReceived:!1,wasSchemaParsed:!1,consoleLogLevel:"debug",shouldLogToConsole:!0,statusTranslationKey:"common.statusDisconnected",canceledSession:"",isPersisted:!1,language:"en",isUploading:!1,isNodesEnabled:!1,shouldUseNSFWChecker:!1,shouldUseWatermarker:!1},jI=Pt({name:"system",initialState:BI,reducers:{setIsProcessing:(e,t)=>{e.isProcessing=t.payload},setCurrentStatus:(e,t)=>{e.statusTranslationKey=t.payload},setShouldConfirmOnDelete:(e,t)=>{e.shouldConfirmOnDelete=t.payload},setIsCancelable:(e,t)=>{e.isCancelable=t.payload},setEnableImageDebugging:(e,t)=>{e.enableImageDebugging=t.payload},addToast:(e,t)=>{e.toastQueue.push(t.payload)},clearToastQueue:e=>{e.toastQueue=[]},cancelScheduled:e=>{e.isCancelScheduled=!0},scheduledCancelAborted:e=>{e.isCancelScheduled=!1},cancelTypeChanged:(e,t)=>{e.cancelType=t.payload},subscribedNodeIdsSet:(e,t)=>{e.subscribedNodeIds=t.payload},consoleLogLevelChanged:(e,t)=>{e.consoleLogLevel=t.payload},shouldLogToConsoleChanged:(e,t)=>{e.shouldLogToConsole=t.payload},shouldAntialiasProgressImageChanged:(e,t)=>{e.shouldAntialiasProgressImage=t.payload},isPersistedChanged:(e,t)=>{e.isPersisted=t.payload},languageChanged:(e,t)=>{e.language=t.payload},progressImageSet(e,t){e.progressImage=t.payload},setIsNodesEnabled(e,t){e.isNodesEnabled=t.payload},shouldUseNSFWCheckerChanged(e,t){e.shouldUseNSFWChecker=t.payload},shouldUseWatermarkerChanged(e,t){e.shouldUseWatermarker=t.payload}},extraReducers(e){e.addCase(l7,(t,n)=>{t.sessionId=n.payload.sessionId,t.canceledSession=""}),e.addCase(c7,t=>{t.sessionId=null}),e.addCase(o7,t=>{t.isConnected=!0,t.isCancelable=!0,t.isProcessing=!1,t.currentStatusHasSteps=!1,t.currentStep=0,t.totalSteps=0,t.currentIteration=0,t.totalIterations=0,t.statusTranslationKey="common.statusConnected"}),e.addCase(a7,t=>{t.isConnected=!1,t.isProcessing=!1,t.isCancelable=!0,t.currentStatusHasSteps=!1,t.currentStep=0,t.totalSteps=0,t.statusTranslationKey="common.statusDisconnected"}),e.addCase(f7,t=>{t.isCancelable=!0,t.isProcessing=!0,t.currentStatusHasSteps=!1,t.currentStep=0,t.totalSteps=0,t.statusTranslationKey="common.statusGenerating"}),e.addCase(v7,(t,n)=>{const{step:r,total_steps:i,progress_image:o}=n.payload.data;t.isProcessing=!0,t.isCancelable=!0,t.currentStatusHasSteps=!0,t.currentStep=r+1,t.totalSteps=i,t.progressImage=o??null,t.statusTranslationKey="common.statusGenerating"}),e.addCase(h7,(t,n)=>{const{data:r}=n.payload;t.currentStatusHasSteps=!1,t.currentStep=0,t.totalSteps=0,t.statusTranslationKey="common.statusProcessingComplete",t.canceledSession===r.graph_execution_state_id&&(t.isProcessing=!1,t.isCancelable=!0)}),e.addCase(m7,t=>{t.isProcessing=!1,t.isCancelable=!1,t.isCancelScheduled=!1,t.currentStep=0,t.totalSteps=0,t.statusTranslationKey="common.statusConnected",t.progressImage=null}),e.addCase(Ph,t=>{t.isProcessing=!0,t.isCancelable=!0,t.currentStatusHasSteps=!1,t.statusTranslationKey="common.statusPreparing"}),e.addCase(hl.fulfilled,(t,n)=>{t.canceledSession=n.meta.arg.session_id,t.isProcessing=!1,t.isCancelable=!1,t.isCancelScheduled=!1,t.currentStep=0,t.totalSteps=0,t.statusTranslationKey="common.statusConnected",t.progressImage=null,t.toastQueue.push(Ha({title:kd("toast.canceled"),status:"warning"}))}),e.addCase(fC,t=>{t.wasSchemaParsed=!0}),e.addMatcher(NO,(t,n)=>{var r;t.isProcessing=!1,t.isCancelable=!1,t.isCancelScheduled=!1,t.currentStep=0,t.totalSteps=0,t.statusTranslationKey="common.statusConnected",t.progressImage=null,t.toastQueue.push(Ha({title:kd("toast.serverError"),status:"error",description:((r=n.payload)==null?void 0:r.status)===422?"Validation Error":void 0}))}),e.addMatcher(Aae,(t,n)=>{t.isProcessing=!1,t.isCancelable=!0,t.currentStatusHasSteps=!1,t.currentStep=0,t.totalSteps=0,t.statusTranslationKey="common.statusError",t.progressImage=null,t.toastQueue.push(Ha({title:kd("toast.serverError"),status:"error",description:ZX(n.payload.data.error_type)}))})}}),{setIsProcessing:x5e,setShouldConfirmOnDelete:C5e,setCurrentStatus:T5e,setIsCancelable:E5e,setEnableImageDebugging:P5e,addToast:Ft,clearToastQueue:A5e,cancelScheduled:k5e,scheduledCancelAborted:R5e,cancelTypeChanged:O5e,subscribedNodeIdsSet:M5e,consoleLogLevelChanged:I5e,shouldLogToConsoleChanged:N5e,isPersistedChanged:D5e,shouldAntialiasProgressImageChanged:L5e,languageChanged:$5e,progressImageSet:Cae,setIsNodesEnabled:F5e,shouldUseNSFWCheckerChanged:Tae,shouldUseWatermarkerChanged:Eae}=jI.actions,Pae=jI.reducer,Aae=ei(Gx,w7,C7),kae={searchFolder:null,advancedAddScanModel:null},VI=Pt({name:"modelmanager",initialState:kae,reducers:{setSearchFolder:(e,t)=>{e.searchFolder=t.payload},setAdvancedAddScanModel:(e,t)=>{e.advancedAddScanModel=t.payload}}}),{setSearchFolder:B5e,setAdvancedAddScanModel:j5e}=VI.actions,Rae=VI.reducer,zI={shift:!1},UI=Pt({name:"hotkeys",initialState:zI,reducers:{shiftKeyPressed:(e,t)=>{e.shift=t.payload}}}),{shiftKeyPressed:V5e}=UI.actions,Oae=UI.reducer,Mae=iF($V);GI=d2=void 0;var Iae=Mae,Nae=function(){var t=[],n=[],r=void 0,i=function(u){return r=u,function(c){return function(d){return Iae.compose.apply(void 0,n)(c)(d)}}},o=function(){for(var u,c,d=arguments.length,f=Array(d),h=0;h=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(u){throw u},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o=!0,s=!1,a;return{s:function(){n=n.call(e)},n:function(){var u=n.next();return o=u.done,u},e:function(u){s=!0,a=u},f:function(){try{!o&&n.return!=null&&n.return()}finally{if(s)throw a}}}}function qI(e,t){if(e){if(typeof e=="string")return NE(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return NE(e,t)}}function NE(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=arguments.length>2?arguments[2]:void 0,i=r.prefix,o=r.driver,s=r.persistWholeStore,a=r.serialize;try{var l=s?Kae:Xae;yield l(t,n,{prefix:i,driver:o,serialize:a})}catch(u){console.warn("redux-remember: persist error",u)}});return function(){return e.apply(this,arguments)}}();function FE(e,t,n,r,i,o,s){try{var a=e[o](s),l=a.value}catch(u){n(u);return}a.done?t(l):Promise.resolve(l).then(r,i)}function BE(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var o=e.apply(t,n);function s(l){FE(o,r,i,s,a,"next",l)}function a(l){FE(o,r,i,s,a,"throw",l)}s(void 0)})}}var Qae=function(){var e=BE(function*(t,n,r){var i=r.prefix,o=r.driver,s=r.serialize,a=r.unserialize,l=r.persistThrottle,u=r.persistDebounce,c=r.persistWholeStore;yield Uae(t,n,{prefix:i,driver:o,unserialize:a,persistWholeStore:c});var d={},f=function(){var h=BE(function*(){var p=HI(t.getState(),n);yield Yae(p,d,{prefix:i,driver:o,serialize:s,persistWholeStore:c}),gC(p,d)||t.dispatch({type:Fae,payload:p}),d=p});return function(){return h.apply(this,arguments)}}();u&&u>0?t.subscribe(jae(f,u)):t.subscribe(Bae(f,l))});return function(n,r,i){return e.apply(this,arguments)}}();const Zae=Qae;function $f(e){"@babel/helpers - typeof";return $f=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},$f(e)}function jE(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),n.push.apply(n,r)}return n}function zb(e){for(var t=1;t0&&arguments[0]!==void 0?arguments[0]:n.state,i=arguments.length>1?arguments[1]:void 0;i.type&&(i.type==="@@INIT"||i.type.startsWith("@@redux/INIT"))&&(n.state=zb({},r));var o=typeof t=="function"?t:gc(t);switch(i.type){case f2:return n.state=o(zb(zb({},n.state),i.payload||{}),{type:f2}),n.state;default:return o(r,i)}}},rle=function(t,n){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=r.prefix,o=i===void 0?"@@remember-":i,s=r.serialize,a=s===void 0?function(S,y){return JSON.stringify(S)}:s,l=r.unserialize,u=l===void 0?function(S,y){return JSON.parse(S)}:l,c=r.persistThrottle,d=c===void 0?100:c,f=r.persistDebounce,h=r.persistWholeStore,p=h===void 0?!1:h;if(!t)throw Error("redux-remember error: driver required");if(!Array.isArray(n))throw Error("redux-remember error: rememberedKeys needs to be an array");var m=function(y){return function(v,g,b){var _=y(v,g,b);return Zae(_,n,{driver:t,prefix:o,serialize:a,unserialize:u,persistThrottle:d,persistDebounce:f,persistWholeStore:p}),_}};return m};const z5e=["chakra-ui-color-mode","i18nextLng","ROARR_FILTER","ROARR_LOG"],ile="@@invokeai-",ole=["cursorPosition","isCanvasInitialized","doesCanvasNeedScaling"],sle=["pendingControlImages"],ale=["selection","selectedBoardId","galleryView"],lle=["schema","invocationTemplates"],ule=[],cle=[],dle=["currentIteration","currentStep","isCancelable","isConnected","isESRGANAvailable","isGFPGANAvailable","isProcessing","totalIterations","totalSteps","isCancelScheduled","progressImage","wereModelsReceived","wasSchemaParsed","isPersisted","isUploading"],fle=["shouldShowImageDetails"],hle={canvas:ole,gallery:ale,generation:ule,nodes:lle,postprocessing:cle,system:dle,ui:fle,controlNet:sle},ple=(e,t)=>{const n=w0(e,hle[t]);return JSON.stringify(n)},gle={canvas:LO,gallery:O7,generation:Wo,nodes:OI,postprocessing:NI,system:BI,config:yO,ui:OO,hotkeys:zI,controlNet:U_},mle=(e,t)=>yX(JSON.parse(e),gle[t]),KI=ue("nodes/textToImageGraphBuilt"),XI=ue("nodes/imageToImageGraphBuilt"),YI=ue("nodes/canvasGraphBuilt"),QI=ue("nodes/nodesGraphBuilt"),yle=ei(KI,XI,YI,QI),vle=e=>{if(yle(e)&&e.payload.nodes){const t={};return{...e,payload:{...e.payload,nodes:t}}}return Df.fulfilled.match(e)?{...e,payload:""}:fC.match(e)?{...e,payload:""}:e},ble=["canvas/setCursorPosition","canvas/setStageCoordinates","canvas/setStageScale","canvas/setIsDrawing","canvas/setBoundingBoxCoordinates","canvas/setBoundingBoxDimensions","canvas/setIsDrawing","canvas/addPointToCurrentLine","socket/socketGeneratorProgress","socket/appSocketGeneratorProgress","hotkeys/shiftKeyPressed","@@REMEMBER_PERSISTED"],Sle=e=>e,_le=()=>{le({actionCreator:HQ,effect:async(e,{dispatch:t,getState:n})=>{const r=fe("canvas"),i=n(),{sessionId:o,isProcessing:s}=i.system,a=e.payload;if(s){if(!a){r.debug("No canvas session, skipping cancel");return}if(a!==o){r.debug({canvasSessionId:a,session_id:o},"Canvas session does not match global session, skipping cancel");return}t(hl({session_id:o}))}}})};ue("app/appStarted");const wle=()=>{le({matcher:he.endpoints.listImages.matchFulfilled,effect:async(e,{dispatch:t,unsubscribe:n,cancelActiveListeners:r})=>{if(e.meta.arg.queryCacheKey!==di({board_id:"none",categories:gi}))return;r(),n();const i=e.payload;i.ids.length>0&&t(Os(i.ids[0]))}})},mC=Hs.injectEndpoints({endpoints:e=>({getAppVersion:e.query({query:()=>({url:"app/version",method:"GET"}),providesTags:["AppVersion"],keepUnusedDataFor:864e5}),getAppConfig:e.query({query:()=>({url:"app/config",method:"GET"}),providesTags:["AppConfig"],keepUnusedDataFor:864e5})})}),{useGetAppVersionQuery:U5e,useGetAppConfigQuery:G5e}=mC,xle=()=>{le({matcher:mC.endpoints.getAppConfig.matchFulfilled,effect:async(e,{getState:t,dispatch:n})=>{const{infill_methods:r=[],nsfw_methods:i=[],watermarking_methods:o=[]}=e.payload,s=t().generation.infillMethod;r.includes(s)||n(CQ(r[0])),i.includes("nsfw_checker")||n(Tae(!1)),o.includes("invisible_watermark")||n(Eae(!1))}})},Cle=ue("app/appStarted"),Tle=()=>{le({actionCreator:Cle,effect:async(e,{unsubscribe:t,cancelActiveListeners:n})=>{n(),t()}})},yC={memoizeOptions:{resultEqualityCheck:_0}},ZI=(e,t)=>{var d;const{generation:n,canvas:r,nodes:i,controlNet:o}=e,s=((d=n.initialImage)==null?void 0:d.imageName)===t,a=r.layerState.objects.some(f=>f.kind==="image"&&f.imageName===t),l=i.nodes.some(f=>Pa(f.data.inputs,h=>{var p;return h.type==="image"&&((p=h.value)==null?void 0:p.image_name)===t})),u=Pa(o.controlNets,f=>f.controlImage===t||f.processedControlImage===t);return{isInitialImage:s,isCanvasImage:a,isNodesImage:l,isControlNetImage:u}},Ele=Jn([e=>e],e=>{const{imageToDelete:t}=e.imageDeletion;if(!t)return;const{image_name:n}=t;return ZI(e,n)},yC),Ple=()=>{le({matcher:tc.endpoints.deleteBoardAndImages.matchFulfilled,effect:async(e,{dispatch:t,getState:n})=>{const{deleted_images:r}=e.payload;let i=!1,o=!1,s=!1,a=!1;const l=n();r.forEach(u=>{const c=ZI(l,u);c.isInitialImage&&!i&&(t(AO()),i=!0),c.isCanvasImage&&!o&&(t(FO()),o=!0),c.isNodesImage&&!s&&(t(II()),s=!0),c.isControlNetImage&&!a&&(t(P7()),a=!0)})}})},Ale=()=>{le({matcher:ei(G_,km),effect:async(e,{getState:t,dispatch:n,condition:r,cancelActiveListeners:i})=>{i();const o=t(),s=G_.match(e)?e.payload:o.gallery.selectedBoardId,l=(km.match(e)?e.payload:o.gallery.galleryView)==="images"?gi:_s,u={board_id:s??"none",categories:l};if(await r(()=>he.endpoints.listImages.select(u)(t()).isSuccess,5e3)){const{data:d}=he.endpoints.listImages.select(u)(t());d!=null&&d.ids.length?n(Os(d.ids[0]??null)):n(Os(null))}else n(Os(null))}})},kle=ue("canvas/canvasSavedToGallery"),Rle=ue("canvas/canvasCopiedToClipboard"),Ole=ue("canvas/canvasDownloadedAsImage"),Mle=ue("canvas/canvasMerged"),Ile=ue("canvas/stagingAreaImageSaved");let JI=null,eN=null;const H5e=e=>{JI=e},nv=()=>JI,q5e=e=>{eN=e},Nle=()=>eN,Dle=async e=>new Promise((t,n)=>{e.toBlob(r=>{if(r){t(r);return}n("Unable to create Blob")})}),Xm=async(e,t)=>await Dle(e.toCanvas(t)),vC=async e=>{const t=nv();if(!t)return;const{shouldCropToBoundingBoxOnSave:n,boundingBoxCoordinates:r,boundingBoxDimensions:i}=e.canvas,o=t.clone();o.scale({x:1,y:1});const s=o.getAbsolutePosition(),a=n?{x:r.x+s.x,y:r.y+s.y,width:i.width,height:i.height}:o.getClientRect();return Xm(o,a)},Lle=e=>{navigator.clipboard.write([new ClipboardItem({[e.type]:e})])},$le=()=>{le({actionCreator:Rle,effect:async(e,{dispatch:t,getState:n})=>{const r=J0.get().child({namespace:"canvasCopiedToClipboardListener"}),i=n(),o=await vC(i);if(!o){r.error("Problem getting base layer blob"),t(Ft({title:"Problem Copying Canvas",description:"Unable to export base layer",status:"error"}));return}Lle(o),t(Ft({title:"Canvas Copied to Clipboard",status:"success"}))}})},Fle=(e,t)=>{const n=URL.createObjectURL(e),r=document.createElement("a");r.href=n,r.download=t,document.body.appendChild(r),r.click(),document.body.removeChild(r),r.remove()},Ble=()=>{le({actionCreator:Ole,effect:async(e,{dispatch:t,getState:n})=>{const r=J0.get().child({namespace:"canvasSavedToGalleryListener"}),i=n(),o=await vC(i);if(!o){r.error("Problem getting base layer blob"),t(Ft({title:"Problem Downloading Canvas",description:"Unable to export base layer",status:"error"}));return}Fle(o,"canvas.png"),t(Ft({title:"Canvas Downloaded",status:"success"}))}})},jle=async()=>{const e=nv();if(!e)return;const t=e.clone();return t.scale({x:1,y:1}),Xm(t,t.getClientRect())},Vle=()=>{le({actionCreator:Mle,effect:async(e,{dispatch:t})=>{const n=J0.get().child({namespace:"canvasCopiedToClipboardListener"}),r=await jle();if(!r){n.error("Problem getting base layer blob"),t(Ft({title:"Problem Merging Canvas",description:"Unable to export base layer",status:"error"}));return}const i=nv();if(!i){n.error("Problem getting canvas base layer"),t(Ft({title:"Problem Merging Canvas",description:"Unable to export base layer",status:"error"}));return}const o=i.getClientRect({relativeTo:i.getParent()}),s=await t(he.endpoints.uploadImage.initiate({file:new File([r],"mergedCanvas.png",{type:"image/png"}),image_category:"general",is_intermediate:!0,postUploadAction:{type:"TOAST",toastOptions:{title:"Canvas Merged"}}})).unwrap(),{image_name:a}=s;t(qQ({kind:"image",layer:"base",imageName:a,...o}))}})},zle=()=>{le({actionCreator:kle,effect:async(e,{dispatch:t,getState:n})=>{const r=fe("canvas"),i=n(),o=await vC(i);if(!o){r.error("Problem getting base layer blob"),t(Ft({title:"Problem Saving Canvas",description:"Unable to export base layer",status:"error"}));return}t(he.endpoints.uploadImage.initiate({file:new File([o],"savedCanvas.png",{type:"image/png"}),image_category:"general",is_intermediate:!1,board_id:i.gallery.autoAddBoardId,crop_visible:!0,postUploadAction:{type:"TOAST",toastOptions:{title:"Canvas Saved to Gallery"}}}))}})},Ule=(e,t,n)=>{if(!(lJ.match(e)||ST.match(e)||qx.match(e)||uJ.match(e)||_T.match(e))||_T.match(e)&&n.controlNet.controlNets[e.payload.controlNetId].shouldAutoConfig===!0)return!1;const{controlImage:i,processorType:o,shouldAutoConfig:s}=t.controlNet.controlNets[e.payload.controlNetId];if(ST.match(e)&&!s)return!1;const a=o!=="none",l=t.system.isProcessing;return a&&!l&&!!i},Gle=()=>{le({predicate:Ule,effect:async(e,{dispatch:t,cancelActiveListeners:n,delay:r})=>{const i=fe("session"),{controlNetId:o}=e.payload;n(),i.trace("ControlNet auto-process triggered"),await r(300),t(Hx({controlNetId:o}))}})},pl=ue("system/sessionReadyToInvoke"),tN=e=>(e==null?void 0:e.type)==="image_output",Hle=()=>{le({actionCreator:Hx,effect:async(e,{dispatch:t,getState:n,take:r})=>{const i=fe("session"),{controlNetId:o}=e.payload,s=n().controlNet.controlNets[o];if(!s.controlImage){i.error("Unable to process ControlNet image");return}const a={nodes:{[s.processorNode.id]:{...s.processorNode,is_intermediate:!0,image:{image_name:s.controlImage}}}},l=t(Rn({graph:a})),[u]=await r(f=>Rn.fulfilled.match(f)&&f.meta.requestId===l.requestId),c=u.payload.id;t(pl());const[d]=await r(f=>Ux.match(f)&&f.payload.data.graph_execution_state_id===c);if(tN(d.payload.data.result)){const{image_name:f}=d.payload.data.result.image,[{payload:h}]=await r(m=>he.endpoints.getImageDTO.matchFulfilled(m)&&m.payload.image_name===f),p=h;i.debug({controlNetId:e.payload,processedControlImage:p},"ControlNet image processed"),t(aJ({controlNetId:o,processedControlImage:p.image_name}))}}})},qle=()=>{le({matcher:he.endpoints.addImageToBoard.matchFulfilled,effect:e=>{const t=fe("images"),{board_id:n,imageDTO:r}=e.meta.arg.originalArgs;t.debug({board_id:n,imageDTO:r},"Image added to board")}})},Wle=()=>{le({matcher:he.endpoints.addImageToBoard.matchRejected,effect:e=>{const t=fe("images"),{board_id:n,imageDTO:r}=e.meta.arg.originalArgs;t.debug({board_id:n,imageDTO:r},"Problem adding image to board")}})},W5e=e=>e.gallery,K5e=Jn(e=>e,e=>e.gallery.selection[e.gallery.selection.length-1],yC),Kle=Jn([e=>e],e=>{const{selectedBoardId:t,galleryView:n}=e.gallery;return{board_id:t??"none",categories:n==="images"?gi:_s,offset:0,limit:QQ,is_intermediate:!1}},yC),nN=ue("imageDeletion/imageDeletionConfirmed"),Xle=()=>{le({actionCreator:nN,effect:async(e,{dispatch:t,getState:n,condition:r})=>{const{imageDTO:i,imageUsage:o}=e.payload;t(N7(!1));const{image_name:s}=i,a=n();if(a.gallery.selection[a.gallery.selection.length-1]===s){const d=Kle(a),{data:f}=he.endpoints.listImages.select(d)(a),h=(f==null?void 0:f.ids)??[],p=h.findIndex(v=>v.toString()===s),m=h.filter(v=>v.toString()!==s),S=Ss(p,0,m.length-1),y=m[S];t(Os(y||null))}o.isCanvasImage&&t(FO()),o.isControlNetImage&&t(P7()),o.isInitialImage&&t(AO()),o.isNodesImage&&t(II());const{requestId:u}=t(he.endpoints.deleteImage.initiate(i));await r(d=>he.endpoints.deleteImage.matchFulfilled(d)&&d.meta.requestId===u,3e4)&&t(Hs.util.invalidateTags([{type:"Board",id:i.board_id}]))}})},Yle=()=>{le({matcher:he.endpoints.deleteImage.matchPending,effect:()=>{}})},Qle=()=>{le({matcher:he.endpoints.deleteImage.matchFulfilled,effect:e=>{fe("images").debug({imageDTO:e.meta.arg.originalArgs},"Image deleted")}})},Zle=()=>{le({matcher:he.endpoints.deleteImage.matchRejected,effect:e=>{fe("images").debug({imageDTO:e.meta.arg.originalArgs},"Unable to delete image")}})},rN=ue("dnd/dndDropped"),Jle=()=>{le({actionCreator:rN,effect:async(e,{dispatch:t})=>{const n=fe("images"),{activeData:r,overData:i}=e.payload;if(n.debug({activeData:r,overData:i},"Image or selection dropped"),i.actionType==="SET_CURRENT_IMAGE"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){t(Os(r.payload.imageDTO.image_name));return}if(i.actionType==="SET_INITIAL_IMAGE"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){t(T0(r.payload.imageDTO));return}if(i.actionType==="ADD_TO_BATCH"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){t(H_([r.payload.imageDTO.image_name]));return}if(i.actionType==="ADD_TO_BATCH"&&r.payloadType==="IMAGE_NAMES"){t(H_(r.payload.image_names));return}if(i.actionType==="SET_CONTROLNET_IMAGE"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){const{controlNetId:o}=i.context;t(qx({controlImage:r.payload.imageDTO.image_name,controlNetId:o}));return}if(i.actionType==="SET_CANVAS_INITIAL_IMAGE"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){t(BO(r.payload.imageDTO));return}if(i.actionType==="SET_NODES_IMAGE"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){const{fieldName:o,nodeId:s}=i.context;t(c2({nodeId:s,fieldName:o,value:r.payload.imageDTO}));return}if(i.actionType==="SET_MULTI_NODES_IMAGE"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){const{fieldName:o,nodeId:s}=i.context;t(c2({nodeId:s,fieldName:o,value:[r.payload.imageDTO]}));return}if(i.actionType==="MOVE_BOARD"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){const{imageDTO:o}=r.payload,{boardId:s}=i.context;if(!s){t(he.endpoints.removeImageFromBoard.initiate({imageDTO:o}));return}t(he.endpoints.addImageToBoard.initiate({imageDTO:o,board_id:s}));return}}})},eue=()=>{le({matcher:he.endpoints.removeImageFromBoard.matchFulfilled,effect:e=>{const t=fe("images"),n=e.meta.arg.originalArgs;t.debug({imageDTO:n},"Image removed from board")}})},tue=()=>{le({matcher:he.endpoints.removeImageFromBoard.matchRejected,effect:e=>{const t=fe("images"),n=e.meta.arg.originalArgs;t.debug({imageDTO:n},"Problem removing image from board")}})},nue=()=>{le({actionCreator:vJ,effect:async(e,{dispatch:t,getState:n})=>{const r=e.payload,i=n(),{shouldConfirmOnDelete:o}=i.system,s=Ele(n());if(!s)return;const a=s.isCanvasImage||s.isInitialImage||s.isControlNetImage||s.isNodesImage;if(o||a){t(N7(!0));return}t(nN({imageDTO:r,imageUsage:s}))}})},ma={title:"Image Uploaded",status:"success"},rue=()=>{le({matcher:he.endpoints.uploadImage.matchFulfilled,effect:(e,{dispatch:t,getState:n})=>{const r=fe("images"),i=e.payload,o=n(),{autoAddBoardId:s}=o.gallery;r.debug({imageDTO:i},"Image uploaded");const{postUploadAction:a}=e.meta.arg.originalArgs;if(!(e.payload.is_intermediate&&!a)){if((a==null?void 0:a.type)==="TOAST"){const{toastOptions:l}=a;if(!s)t(Ft({...ma,...l}));else{t(he.endpoints.addImageToBoard.initiate({board_id:s,imageDTO:i}));const{data:u}=tc.endpoints.listAllBoards.select()(o),c=u==null?void 0:u.find(f=>f.board_id===s),d=c?`Added to board ${c.board_name}`:`Added to board ${s}`;t(Ft({...ma,description:d}))}return}if((a==null?void 0:a.type)==="SET_CANVAS_INITIAL_IMAGE"){t(BO(i)),t(Ft({...ma,description:"Set as canvas initial image"}));return}if((a==null?void 0:a.type)==="SET_CONTROLNET_IMAGE"){const{controlNetId:l}=a;t(qx({controlNetId:l,controlImage:i.image_name})),t(Ft({...ma,description:"Set as control image"}));return}if((a==null?void 0:a.type)==="SET_INITIAL_IMAGE"){t(T0(i)),t(Ft({...ma,description:"Set as initial image"}));return}if((a==null?void 0:a.type)==="SET_NODES_IMAGE"){const{nodeId:l,fieldName:u}=a;t(c2({nodeId:l,fieldName:u,value:i})),t(Ft({...ma,description:`Set as node field ${u}`}));return}if((a==null?void 0:a.type)==="ADD_TO_BATCH"){t(H_([i.image_name])),t(Ft({...ma,description:"Added to batch"}));return}}}})},iue=()=>{le({matcher:he.endpoints.uploadImage.matchRejected,effect:(e,{dispatch:t})=>{const n=fe("images"),r={arg:{...w0(e.meta.arg.originalArgs,["file","postUploadAction"]),file:""}};n.error({...r},"Image upload failed"),t(Ft({title:"Image Upload Failed",description:e.error.message,status:"error"}))}})},oue=ue("generation/initialImageSelected"),sue=ue("generation/modelSelected"),aue=()=>{le({actionCreator:oue,effect:(e,{dispatch:t})=>{if(!e.payload){t(Ft(Ha({title:kd("toast.imageNotLoadedDesc"),status:"error"})));return}t(T0(e.payload)),t(Ft(Ha(kd("toast.sentToImageToImage"))))}})},lue=()=>{le({actionCreator:sue,effect:(e,{getState:t,dispatch:n})=>{var l;const r=fe("models"),i=t(),o=xf.safeParse(e.payload);if(!o.success){r.error({error:o.error.format()},"Failed to parse main model");return}const s=o.data,{base_model:a}=s;if(((l=i.generation.model)==null?void 0:l.base_model)!==a){let u=0;Za(i.lora.loras,(f,h)=>{f.base_model!==a&&(n(L7(h)),u+=1)});const{vae:c}=i.generation;c&&c.base_model!==a&&(n(kO(null)),u+=1);const{controlNets:d}=i.controlNet;Za(d,(f,h)=>{var p;((p=f.model)==null?void 0:p.base_model)!==a&&(n(E7({controlNetId:h})),u+=1)}),u>0&&n(Ft(Ha({title:`Base model changed, cleared ${u} incompatible submodel${u===1?"":"s"}`,status:"warning"})))}n(Va(s))}})},VE=ea({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),zE=ea({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),UE=ea({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),GE=ea({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),HE=ea({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),qE=ea({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),uue=({base_model:e,model_type:t,model_name:n})=>`${e}/${t}/${n}`,zl=e=>{const t=[];return e.forEach(n=>{const r={...Ln(n),id:uue(n)};t.push(r)}),t},xo=Hs.injectEndpoints({endpoints:e=>({getOnnxModels:e.query({query:t=>{const n={model_type:"onnx",base_models:t};return`models/?${fg.stringify(n,{arrayFormat:"none"})}`},providesTags:(t,n,r)=>{const i=[{id:"OnnxModel",type:Ie}];return t&&i.push(...t.ids.map(o=>({type:"OnnxModel",id:o}))),i},transformResponse:(t,n,r)=>{const i=zl(t.models);return zE.setAll(zE.getInitialState(),i)}}),getMainModels:e.query({query:t=>{const n={model_type:"main",base_models:t};return`models/?${fg.stringify(n,{arrayFormat:"none"})}`},providesTags:(t,n,r)=>{const i=[{type:"MainModel",id:Ie}];return t&&i.push(...t.ids.map(o=>({type:"MainModel",id:o}))),i},transformResponse:(t,n,r)=>{const i=zl(t.models);return VE.setAll(VE.getInitialState(),i)}}),updateMainModels:e.mutation({query:({base_model:t,model_name:n,body:r})=>({url:`models/${t}/main/${n}`,method:"PATCH",body:r}),invalidatesTags:[{type:"MainModel",id:Ie},{type:"SDXLRefinerModel",id:Ie}]}),importMainModels:e.mutation({query:({body:t})=>({url:"models/import",method:"POST",body:t}),invalidatesTags:[{type:"MainModel",id:Ie},{type:"SDXLRefinerModel",id:Ie}]}),addMainModels:e.mutation({query:({body:t})=>({url:"models/add",method:"POST",body:t}),invalidatesTags:[{type:"MainModel",id:Ie},{type:"SDXLRefinerModel",id:Ie}]}),deleteMainModels:e.mutation({query:({base_model:t,model_name:n,model_type:r})=>({url:`models/${t}/${r}/${n}`,method:"DELETE"}),invalidatesTags:[{type:"MainModel",id:Ie},{type:"SDXLRefinerModel",id:Ie}]}),convertMainModels:e.mutation({query:({base_model:t,model_name:n,params:r})=>({url:`models/convert/${t}/main/${n}`,method:"PUT",params:r}),invalidatesTags:[{type:"MainModel",id:Ie},{type:"SDXLRefinerModel",id:Ie}]}),mergeMainModels:e.mutation({query:({base_model:t,body:n})=>({url:`models/merge/${t}`,method:"PUT",body:n}),invalidatesTags:[{type:"MainModel",id:Ie},{type:"SDXLRefinerModel",id:Ie}]}),syncModels:e.mutation({query:()=>({url:"models/sync",method:"POST"}),invalidatesTags:[{type:"MainModel",id:Ie},{type:"SDXLRefinerModel",id:Ie}]}),getLoRAModels:e.query({query:()=>({url:"models/",params:{model_type:"lora"}}),providesTags:(t,n,r)=>{const i=[{type:"LoRAModel",id:Ie}];return t&&i.push(...t.ids.map(o=>({type:"LoRAModel",id:o}))),i},transformResponse:(t,n,r)=>{const i=zl(t.models);return UE.setAll(UE.getInitialState(),i)}}),updateLoRAModels:e.mutation({query:({base_model:t,model_name:n,body:r})=>({url:`models/${t}/lora/${n}`,method:"PATCH",body:r}),invalidatesTags:[{type:"LoRAModel",id:Ie}]}),deleteLoRAModels:e.mutation({query:({base_model:t,model_name:n})=>({url:`models/${t}/lora/${n}`,method:"DELETE"}),invalidatesTags:[{type:"LoRAModel",id:Ie}]}),getControlNetModels:e.query({query:()=>({url:"models/",params:{model_type:"controlnet"}}),providesTags:(t,n,r)=>{const i=[{type:"ControlNetModel",id:Ie}];return t&&i.push(...t.ids.map(o=>({type:"ControlNetModel",id:o}))),i},transformResponse:(t,n,r)=>{const i=zl(t.models);return GE.setAll(GE.getInitialState(),i)}}),getVaeModels:e.query({query:()=>({url:"models/",params:{model_type:"vae"}}),providesTags:(t,n,r)=>{const i=[{type:"VaeModel",id:Ie}];return t&&i.push(...t.ids.map(o=>({type:"VaeModel",id:o}))),i},transformResponse:(t,n,r)=>{const i=zl(t.models);return qE.setAll(qE.getInitialState(),i)}}),getTextualInversionModels:e.query({query:()=>({url:"models/",params:{model_type:"embedding"}}),providesTags:(t,n,r)=>{const i=[{type:"TextualInversionModel",id:Ie}];return t&&i.push(...t.ids.map(o=>({type:"TextualInversionModel",id:o}))),i},transformResponse:(t,n,r)=>{const i=zl(t.models);return HE.setAll(HE.getInitialState(),i)}}),getModelsInFolder:e.query({query:t=>({url:`/models/search?${fg.stringify(t,{})}`}),providesTags:(t,n,r)=>{const i=[{type:"ScannedModels",id:Ie}];return t&&i.push(...t.map(o=>({type:"ScannedModels",id:o}))),i}}),getCheckpointConfigs:e.query({query:()=>({url:"/models/ckpt_confs"})})})}),{useGetMainModelsQuery:X5e,useGetOnnxModelsQuery:Y5e,useGetControlNetModelsQuery:Q5e,useGetLoRAModelsQuery:Z5e,useGetTextualInversionModelsQuery:J5e,useGetVaeModelsQuery:e4e,useUpdateMainModelsMutation:t4e,useDeleteMainModelsMutation:n4e,useImportMainModelsMutation:r4e,useAddMainModelsMutation:i4e,useConvertMainModelsMutation:o4e,useMergeMainModelsMutation:s4e,useDeleteLoRAModelsMutation:a4e,useUpdateLoRAModelsMutation:l4e,useSyncModelsMutation:u4e,useGetModelsInFolderQuery:c4e,useGetCheckpointConfigsQuery:d4e}=xo,cue=()=>{le({predicate:(e,t)=>xo.endpoints.getMainModels.matchFulfilled(t)&&!t.meta.arg.originalArgs.includes("sdxl-refiner"),effect:async(e,{getState:t,dispatch:n})=>{const r=fe("models");r.info({models:e.payload.entities},`Main models loaded (${e.payload.ids.length})`);const i=t().generation.model;if(Pa(e.payload.entities,u=>(u==null?void 0:u.model_name)===(i==null?void 0:i.model_name)&&(u==null?void 0:u.base_model)===(i==null?void 0:i.base_model)&&(u==null?void 0:u.model_type)===(i==null?void 0:i.model_type)))return;const s=e.payload.ids[0],a=e.payload.entities[s];if(!a){n(Va(null));return}const l=xf.safeParse(a);if(!l.success){r.error({error:l.error.format()},"Failed to parse main model");return}n(Va(l.data))}}),le({predicate:(e,t)=>xo.endpoints.getMainModels.matchFulfilled(t)&&t.meta.arg.originalArgs.includes("sdxl-refiner"),effect:async(e,{getState:t,dispatch:n})=>{const r=fe("models");r.info({models:e.payload.entities},`SDXL Refiner models loaded (${e.payload.ids.length})`);const i=t().sdxl.refinerModel;if(Pa(e.payload.entities,u=>(u==null?void 0:u.model_name)===(i==null?void 0:i.model_name)&&(u==null?void 0:u.base_model)===(i==null?void 0:i.base_model)&&(u==null?void 0:u.model_type)===(i==null?void 0:i.model_type)))return;const s=e.payload.ids[0],a=e.payload.entities[s];if(!a){n(xE(null)),n(nae(!1));return}const l=xf.safeParse(a);if(!l.success){r.error({error:l.error.format()},"Failed to parse SDXL Refiner Model");return}n(xE(l.data))}}),le({matcher:xo.endpoints.getVaeModels.matchFulfilled,effect:async(e,{getState:t,dispatch:n})=>{const r=fe("models");r.info({models:e.payload.entities},`VAEs loaded (${e.payload.ids.length})`);const i=t().generation.vae;if(i===null||Pa(e.payload.entities,u=>(u==null?void 0:u.model_name)===(i==null?void 0:i.model_name)&&(u==null?void 0:u.base_model)===(i==null?void 0:i.base_model)))return;const s=e.payload.ids[0],a=e.payload.entities[s];if(!a){n(Va(null));return}const l=bQ.safeParse(a);if(!l.success){r.error({error:l.error.format()},"Failed to parse VAE model");return}n(kO(l.data))}}),le({matcher:xo.endpoints.getLoRAModels.matchFulfilled,effect:async(e,{getState:t,dispatch:n})=>{fe("models").info({models:e.payload.entities},`LoRAs loaded (${e.payload.ids.length})`);const i=t().lora.loras;Za(i,(o,s)=>{Pa(e.payload.entities,l=>(l==null?void 0:l.model_name)===(o==null?void 0:o.model_name)&&(l==null?void 0:l.base_model)===(o==null?void 0:o.base_model))||n(L7(s))})}}),le({matcher:xo.endpoints.getControlNetModels.matchFulfilled,effect:async(e,{getState:t,dispatch:n})=>{fe("models").info({models:e.payload.entities},`ControlNet models loaded (${e.payload.ids.length})`);const i=t().controlNet.controlNets;Za(i,(o,s)=>{Pa(e.payload.entities,l=>{var u,c;return(l==null?void 0:l.model_name)===((u=o==null?void 0:o.model)==null?void 0:u.model_name)&&(l==null?void 0:l.base_model)===((c=o==null?void 0:o.model)==null?void 0:c.base_model)})||n(E7({controlNetId:s}))})}}),le({matcher:xo.endpoints.getTextualInversionModels.matchFulfilled,effect:async e=>{fe("models").info({models:e.payload.entities},`Embeddings loaded (${e.payload.ids.length})`)}})},ia=e=>JSON.parse(JSON.stringify(e)),p2=e=>!("$ref"in e),due=e=>!("$ref"in e),f4e=500,fue={integer:"integer",float:"float",number:"float",string:"string",boolean:"boolean",enum:"enum",ImageField:"image",image_collection:"image_collection",LatentsField:"latents",ConditioningField:"conditioning",UNetField:"unet",ClipField:"clip",VaeField:"vae",model:"model",refiner_model:"refiner_model",vae_model:"vae_model",lora_model:"lora_model",controlnet_model:"controlnet_model",ControlNetModelField:"controlnet_model",array:"array",item:"item",ColorField:"color",ControlField:"control",control:"control",cfg_scale:"float",control_weight:"float"},hue=500,Dt=e=>`var(--invokeai-colors-${e}-${hue})`,h4e={integer:{color:"red",colorCssVar:Dt("red"),title:"Integer",description:"Integers are whole numbers, without a decimal point."},float:{color:"orange",colorCssVar:Dt("orange"),title:"Float",description:"Floats are numbers with a decimal point."},string:{color:"yellow",colorCssVar:Dt("yellow"),title:"String",description:"Strings are text."},boolean:{color:"green",colorCssVar:Dt("green"),title:"Boolean",description:"Booleans are true or false."},enum:{color:"blue",colorCssVar:Dt("blue"),title:"Enum",description:"Enums are values that may be one of a number of options."},image:{color:"purple",colorCssVar:Dt("purple"),title:"Image",description:"Images may be passed between nodes."},image_collection:{color:"purple",colorCssVar:Dt("purple"),title:"Image Collection",description:"A collection of images."},latents:{color:"pink",colorCssVar:Dt("pink"),title:"Latents",description:"Latents may be passed between nodes."},conditioning:{color:"cyan",colorCssVar:Dt("cyan"),title:"Conditioning",description:"Conditioning may be passed between nodes."},unet:{color:"red",colorCssVar:Dt("red"),title:"UNet",description:"UNet submodel."},clip:{color:"green",colorCssVar:Dt("green"),title:"Clip",description:"Tokenizer and text_encoder submodels."},vae:{color:"blue",colorCssVar:Dt("blue"),title:"Vae",description:"Vae submodel."},control:{color:"cyan",colorCssVar:Dt("cyan"),title:"Control",description:"Control info passed between nodes."},model:{color:"teal",colorCssVar:Dt("teal"),title:"Model",description:"Models are models."},refiner_model:{color:"teal",colorCssVar:Dt("teal"),title:"Refiner Model",description:"Models are models."},vae_model:{color:"teal",colorCssVar:Dt("teal"),title:"VAE",description:"Models are models."},lora_model:{color:"teal",colorCssVar:Dt("teal"),title:"LoRA",description:"Models are models."},controlnet_model:{color:"teal",colorCssVar:Dt("teal"),title:"ControlNet",description:"Models are models."},array:{color:"gray",colorCssVar:Dt("gray"),title:"Array",description:"TODO: Array type description."},item:{color:"gray",colorCssVar:Dt("gray"),title:"Collection Item",description:"TODO: Collection Item type description."},color:{color:"gray",colorCssVar:Dt("gray"),title:"Color",description:"A RGBA color."}},p4e=250,Ub=e=>e.$ref.split("/").slice(-1)[0],pue=({schemaObject:e,baseField:t})=>{const n={...t,type:"integer",inputRequirement:"always",inputKind:"any",default:e.default??0};return e.multipleOf!==void 0&&(n.multipleOf=e.multipleOf),e.maximum!==void 0&&(n.maximum=e.maximum),e.exclusiveMaximum!==void 0&&(n.exclusiveMaximum=e.exclusiveMaximum),e.minimum!==void 0&&(n.minimum=e.minimum),e.exclusiveMinimum!==void 0&&(n.exclusiveMinimum=e.exclusiveMinimum),n},gue=({schemaObject:e,baseField:t})=>{const n={...t,type:"float",inputRequirement:"always",inputKind:"any",default:e.default??0};return e.multipleOf!==void 0&&(n.multipleOf=e.multipleOf),e.maximum!==void 0&&(n.maximum=e.maximum),e.exclusiveMaximum!==void 0&&(n.exclusiveMaximum=e.exclusiveMaximum),e.minimum!==void 0&&(n.minimum=e.minimum),e.exclusiveMinimum!==void 0&&(n.exclusiveMinimum=e.exclusiveMinimum),n},mue=({schemaObject:e,baseField:t})=>{const n={...t,type:"string",inputRequirement:"always",inputKind:"any",default:e.default??""};return e.minLength!==void 0&&(n.minLength=e.minLength),e.maxLength!==void 0&&(n.maxLength=e.maxLength),e.pattern!==void 0&&(n.pattern=e.pattern),n},yue=({schemaObject:e,baseField:t})=>({...t,type:"boolean",inputRequirement:"always",inputKind:"any",default:e.default??!1}),vue=({schemaObject:e,baseField:t})=>({...t,type:"model",inputRequirement:"always",inputKind:"direct",default:e.default??void 0}),bue=({schemaObject:e,baseField:t})=>({...t,type:"refiner_model",inputRequirement:"always",inputKind:"direct",default:e.default??void 0}),Sue=({schemaObject:e,baseField:t})=>({...t,type:"vae_model",inputRequirement:"always",inputKind:"direct",default:e.default??void 0}),_ue=({schemaObject:e,baseField:t})=>({...t,type:"lora_model",inputRequirement:"always",inputKind:"direct",default:e.default??void 0}),wue=({schemaObject:e,baseField:t})=>({...t,type:"controlnet_model",inputRequirement:"always",inputKind:"direct",default:e.default??void 0}),xue=({schemaObject:e,baseField:t})=>({...t,type:"image",inputRequirement:"always",inputKind:"any",default:e.default??void 0}),Cue=({schemaObject:e,baseField:t})=>({...t,type:"image_collection",inputRequirement:"always",inputKind:"any",default:e.default??void 0}),Tue=({schemaObject:e,baseField:t})=>({...t,type:"latents",inputRequirement:"always",inputKind:"connection",default:e.default??void 0}),Eue=({schemaObject:e,baseField:t})=>({...t,type:"conditioning",inputRequirement:"always",inputKind:"connection",default:e.default??void 0}),Pue=({schemaObject:e,baseField:t})=>({...t,type:"unet",inputRequirement:"always",inputKind:"connection",default:e.default??void 0}),Aue=({schemaObject:e,baseField:t})=>({...t,type:"clip",inputRequirement:"always",inputKind:"connection",default:e.default??void 0}),kue=({schemaObject:e,baseField:t})=>({...t,type:"vae",inputRequirement:"always",inputKind:"connection",default:e.default??void 0}),Rue=({schemaObject:e,baseField:t})=>({...t,type:"control",inputRequirement:"always",inputKind:"connection",default:e.default??void 0}),Oue=({schemaObject:e,baseField:t})=>{const n=e.enum??[];return{...t,type:"enum",enumType:e.type??"string",options:n,inputRequirement:"always",inputKind:"direct",default:e.default??n[0]}},WE=({baseField:e})=>({...e,type:"array",inputRequirement:"always",inputKind:"direct",default:[]}),KE=({baseField:e})=>({...e,type:"item",inputRequirement:"always",inputKind:"direct",default:void 0}),Mue=({schemaObject:e,baseField:t})=>({...t,type:"color",inputRequirement:"always",inputKind:"direct",default:e.default??{r:127,g:127,b:127,a:255}}),iN=(e,t,n)=>{let r="";n&&t in n?r=n[t]:e.type?e.enum?r="enum":e.type&&(r=e.type):e.allOf?r=Ub(e.allOf[0]):e.anyOf?r=Ub(e.anyOf[0]):e.oneOf&&(r=Ub(e.oneOf[0]));const i=fue[r];if(!i)throw`Field type "${r}" is unknown!`;return i},Iue=(e,t,n)=>{const r=iN(e,t,n),i={name:t,title:e.title??"",description:e.description??""};if(["image"].includes(r))return xue({schemaObject:e,baseField:i});if(["image_collection"].includes(r))return Cue({schemaObject:e,baseField:i});if(["latents"].includes(r))return Tue({schemaObject:e,baseField:i});if(["conditioning"].includes(r))return Eue({schemaObject:e,baseField:i});if(["unet"].includes(r))return Pue({schemaObject:e,baseField:i});if(["clip"].includes(r))return Aue({schemaObject:e,baseField:i});if(["vae"].includes(r))return kue({schemaObject:e,baseField:i});if(["control"].includes(r))return Rue({schemaObject:e,baseField:i});if(["model"].includes(r))return vue({schemaObject:e,baseField:i});if(["refiner_model"].includes(r))return bue({schemaObject:e,baseField:i});if(["vae_model"].includes(r))return Sue({schemaObject:e,baseField:i});if(["lora_model"].includes(r))return _ue({schemaObject:e,baseField:i});if(["controlnet_model"].includes(r))return wue({schemaObject:e,baseField:i});if(["enum"].includes(r))return Oue({schemaObject:e,baseField:i});if(["integer"].includes(r))return pue({schemaObject:e,baseField:i});if(["number","float"].includes(r))return gue({schemaObject:e,baseField:i});if(["string"].includes(r))return mue({schemaObject:e,baseField:i});if(["boolean"].includes(r))return yue({schemaObject:e,baseField:i});if(["array"].includes(r))return WE({schemaObject:e,baseField:i});if(["item"].includes(r))return KE({schemaObject:e,baseField:i});if(["color"].includes(r))return Mue({schemaObject:e,baseField:i});if(["array"].includes(r))return WE({schemaObject:e,baseField:i});if(["item"].includes(r))return KE({schemaObject:e,baseField:i})},Nue=(e,t,n)=>{const r=e.$ref.split("/").slice(-1)[0],i=t.components.schemas[r];return p2(i)?$x(i.properties,(s,a,l)=>{if(!["type","id"].includes(l)&&!["object"].includes(a.type)&&p2(a)){const u=iN(a,l,n);s[l]={name:l,title:a.title??"",description:a.description??"",type:u}}return s},{}):{}},Due=e=>e==="l2i"?["id","type","metadata"]:["id","type","is_intermediate","metadata"],Lue=["Graph","InvocationMeta","MetadataAccumulatorInvocation"],$ue=e=>{var r;return aO((r=e.components)==null?void 0:r.schemas,(i,o)=>o.includes("Invocation")&&!o.includes("InvocationOutput")&&!Lue.some(s=>o.includes(s))).reduce((i,o)=>{var s,a,l,u,c;if(due(o)){const d=o.properties.type.default,f=Due(d),h=((s=o.ui)==null?void 0:s.title)??o.title.replace("Invocation",""),p=(a=o.ui)==null?void 0:a.type_hints,m={};if(d==="collect"){const g=o.properties.item;m.item={type:"item",name:"item",description:g.description??"",title:"Collection Item",inputKind:"connection",inputRequirement:"always",default:void 0}}else if(d==="iterate"){const g=o.properties.collection;m.collection={type:"array",name:"collection",title:g.title??"",default:[],description:g.description??"",inputRequirement:"always",inputKind:"connection"}}else $x(o.properties,(g,b,_)=>{if(!f.includes(_)&&p2(b)){const w=Iue(b,_,p);w&&(g[_]=w)}return g},m);const S=o.output;let y;if(d==="iterate"){const g=(u=(l=e.components)==null?void 0:l.schemas)==null?void 0:u.IterateInvocationOutput;y={item:{name:"item",title:(g==null?void 0:g.title)??"",description:(g==null?void 0:g.description)??"",type:"array"}}}else y=Nue(S,e,p);const v={title:h,type:d,tags:((c=o.ui)==null?void 0:c.tags)??[],description:o.description??"",inputs:m,outputs:y};Object.assign(i,{[d]:v})}return i},{})},Fue=()=>{le({actionCreator:Df.fulfilled,effect:(e,{dispatch:t})=>{const n=fe("system"),r=e.payload;n.debug({schemaJSON:r},"Dereferenced OpenAPI schema");const i=$ue(r);n.debug({nodeTemplates:ia(i)},`Built ${gO(i)} node templates`),t(fC(i))}}),le({actionCreator:Df.rejected,effect:()=>{fe("system").error("Problem dereferencing OpenAPI Schema")}})},Bue=[EvalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError,globalThis.DOMException,globalThis.AssertionError,globalThis.SystemError].filter(Boolean).map(e=>[e.name,e]),jue=new Map(Bue),Vue=[{property:"name",enumerable:!1},{property:"message",enumerable:!1},{property:"stack",enumerable:!1},{property:"code",enumerable:!0},{property:"cause",enumerable:!1}],g2=Symbol(".toJSON was called"),zue=e=>{e[g2]=!0;const t=e.toJSON();return delete e[g2],t},Uue=e=>jue.get(e)??Error,oN=({from:e,seen:t,to:n,forceEnumerable:r,maxDepth:i,depth:o,useToJSON:s,serialize:a})=>{if(!n)if(Array.isArray(e))n=[];else if(!a&&XE(e)){const u=Uue(e.name);n=new u}else n={};if(t.push(e),o>=i)return n;if(s&&typeof e.toJSON=="function"&&e[g2]!==!0)return zue(e);const l=u=>oN({from:u,seen:[...t],forceEnumerable:r,maxDepth:i,depth:o,useToJSON:s,serialize:a});for(const[u,c]of Object.entries(e)){if(typeof Buffer=="function"&&Buffer.isBuffer(c)){n[u]="[object Buffer]";continue}if(c!==null&&typeof c=="object"&&typeof c.pipe=="function"){n[u]="[object Stream]";continue}if(typeof c!="function"){if(!c||typeof c!="object"){n[u]=c;continue}if(!t.includes(e[u])){o++,n[u]=l(e[u]);continue}n[u]="[Circular]"}}for(const{property:u,enumerable:c}of Vue)typeof e[u]<"u"&&e[u]!==null&&Object.defineProperty(n,u,{value:XE(e[u])?l(e[u]):e[u],enumerable:r?!0:c,configurable:!0,writable:!0});return n};function bC(e,t={}){const{maxDepth:n=Number.POSITIVE_INFINITY,useToJSON:r=!0}=t;return typeof e=="object"&&e!==null?oN({from:e,seen:[],forceEnumerable:!0,maxDepth:n,depth:0,useToJSON:r,serialize:!0}):typeof e=="function"?`[Function: ${e.name??"anonymous"}]`:e}function XE(e){return!!e&&typeof e=="object"&&"name"in e&&"message"in e&&"stack"in e}const Gue=()=>{le({actionCreator:hl.pending,effect:()=>{}})},Hue=()=>{le({actionCreator:hl.fulfilled,effect:e=>{const t=fe("session"),{session_id:n}=e.meta.arg;t.debug({session_id:n},`Session canceled (${n})`)}})},que=()=>{le({actionCreator:hl.rejected,effect:e=>{const t=fe("session"),{session_id:n}=e.meta.arg;if(e.payload){const{error:r}=e.payload;t.error({session_id:n,error:bC(r)},"Problem canceling session")}}})},Wue=()=>{le({actionCreator:Rn.pending,effect:()=>{}})},Kue=()=>{le({actionCreator:Rn.fulfilled,effect:e=>{const t=fe("session"),n=e.payload;t.debug({session:ia(n)},`Session created (${n.id})`)}})},Xue=()=>{le({actionCreator:Rn.rejected,effect:e=>{const t=fe("session");if(e.payload){const{error:n,status:r}=e.payload,i=ia(e.meta.arg);t.error({graph:i,status:r,error:bC(n)},"Problem creating session")}}})},Yue=()=>{le({actionCreator:yh.pending,effect:()=>{}})},Que=()=>{le({actionCreator:yh.fulfilled,effect:e=>{const t=fe("session"),{session_id:n}=e.meta.arg;t.debug({session_id:n},`Session invoked (${n})`)}})},Zue=()=>{le({actionCreator:yh.rejected,effect:e=>{const t=fe("session"),{session_id:n}=e.meta.arg;if(e.payload){const{error:r}=e.payload;t.error({session_id:n,error:bC(r)},"Problem invoking session")}}})},Jue=()=>{le({actionCreator:pl,effect:(e,{getState:t,dispatch:n})=>{const r=fe("session"),{sessionId:i}=t().system;i&&(r.debug({session_id:i},`Session ready to invoke (${i})})`),n(yh({session_id:i})))}})},ece=()=>{le({actionCreator:i7,effect:(e,{dispatch:t,getState:n})=>{fe("socketio").debug("Connected");const{nodes:i,config:o}=n(),{disabledTabs:s}=o;!i.schema&&!s.includes("nodes")&&t(Df()),t(o7(e.payload)),t(xo.util.invalidateTags([{type:"MainModel",id:Ie},{type:"SDXLRefinerModel",id:Ie},{type:"LoRAModel",id:Ie},{type:"ControlNetModel",id:Ie},{type:"VaeModel",id:Ie},{type:"TextualInversionModel",id:Ie},{type:"ScannedModels",id:Ie}])),t(mC.util.invalidateTags(["AppConfig","AppVersion"]))}})},tce=()=>{le({actionCreator:s7,effect:(e,{dispatch:t})=>{fe("socketio").debug("Disconnected"),t(a7(e.payload))}})},nce=()=>{le({actionCreator:y7,effect:(e,{dispatch:t,getState:n})=>{const r=fe("socketio");if(n().system.canceledSession===e.payload.data.graph_execution_state_id){r.trace(e.payload,"Ignored generator progress for canceled session");return}r.trace(e.payload,`Generator progress (${e.payload.data.node.type})`),t(v7(e.payload))}})},rce=()=>{le({actionCreator:g7,effect:(e,{dispatch:t})=>{fe("socketio").debug(e.payload,"Session complete"),t(m7(e.payload))}})},ice=["dataURL_image"],oce=()=>{le({actionCreator:Ux,effect:async(e,{dispatch:t,getState:n})=>{const r=fe("socketio"),{data:i}=e.payload;r.debug({data:ia(i)},`Invocation complete (${e.payload.data.node.type})`);const o=e.payload.data.graph_execution_state_id,{cancelType:s,isCancelScheduled:a}=n().system;s==="scheduled"&&a&&t(hl({session_id:o}));const{result:l,node:u,graph_execution_state_id:c}=i;if(tN(l)&&!ice.includes(u.type)){const{image_name:d}=l.image,{canvas:f,gallery:h}=n(),p=await t(he.endpoints.getImageDTO.initiate(d)).unwrap();if(c===f.layerState.stagingArea.sessionId&&t(GQ(p)),!p.is_intermediate){const{autoAddBoardId:m}=h;t(m?he.endpoints.addImageToBoard.initiate({board_id:m,imageDTO:p}):he.util.updateQueryData("listImages",{board_id:"none",categories:gi},v=>{const g=v.total,_=Kn.addOne(v,p).total-g;v.total=v.total+_})),t(he.util.invalidateTags([{type:"BoardImagesTotal",id:m??"none"},{type:"BoardAssetsTotal",id:m??"none"}]));const{selectedBoardId:S,shouldAutoSwitch:y}=h;y&&(m&&m!==S?(t(G_(m)),t(km("images"))):m||t(km("images")),t(Os(p.image_name)))}t(Cae(null))}t(h7(e.payload))}})},sce=()=>{le({actionCreator:p7,effect:(e,{dispatch:t})=>{fe("socketio").error(e.payload,`Invocation error (${e.payload.data.node.type})`),t(Gx(e.payload))}})},ace=()=>{le({actionCreator:x7,effect:(e,{dispatch:t})=>{fe("socketio").error(e.payload,`Invocation retrieval error (${e.payload.data.graph_execution_state_id})`),t(C7(e.payload))}})},lce=()=>{le({actionCreator:d7,effect:(e,{dispatch:t,getState:n})=>{const r=fe("socketio");if(n().system.canceledSession===e.payload.data.graph_execution_state_id){r.trace(e.payload,"Ignored invocation started for canceled session");return}r.debug(e.payload,`Invocation started (${e.payload.data.node.type})`),t(f7(e.payload))}})},uce=()=>{le({actionCreator:b7,effect:(e,{dispatch:t})=>{const n=fe("socketio"),{base_model:r,model_name:i,model_type:o,submodel:s}=e.payload.data;let a=`Model load started: ${r}/${o}/${i}`;s&&(a=a.concat(`/${s}`)),n.debug(e.payload,a),t(oJ(e.payload))}}),le({actionCreator:S7,effect:(e,{dispatch:t})=>{const n=fe("socketio"),{base_model:r,model_name:i,model_type:o,submodel:s}=e.payload.data;let a=`Model load complete: ${r}/${o}/${i}`;s&&(a=a.concat(`/${s}`)),n.debug(e.payload,a),t(sJ(e.payload))}})},cce=()=>{le({actionCreator:_7,effect:(e,{dispatch:t})=>{fe("socketio").error(e.payload,`Session retrieval error (${e.payload.data.graph_execution_state_id})`),t(w7(e.payload))}})},dce=()=>{le({actionCreator:zx,effect:(e,{dispatch:t})=>{fe("socketio").debug(e.payload,"Subscribed"),t(l7(e.payload))}})},fce=()=>{le({actionCreator:u7,effect:(e,{dispatch:t})=>{fe("socketio").debug(e.payload,"Unsubscribed"),t(c7(e.payload))}})},hce=()=>{le({actionCreator:Ile,effect:async(e,{dispatch:t,getState:n})=>{const{imageDTO:r}=e.payload;try{const i=await t(he.endpoints.changeImageIsIntermediate.initiate({imageDTO:r,is_intermediate:!1})).unwrap(),{autoAddBoardId:o}=n().gallery;o&&await t(he.endpoints.addImageToBoard.initiate({imageDTO:i,board_id:o})),t(Ft({title:"Image Saved",status:"success"}))}catch(i){t(Ft({title:"Image Saving Failed",description:i==null?void 0:i.message,status:"error"}))}}})},g4e=["sd-1","sd-2","sdxl","sdxl-refiner"],pce=["sd-1","sd-2","sdxl"],m4e=["sdxl-refiner"],gce=()=>{le({actionCreator:IO,effect:(e,{getState:t,dispatch:n})=>{if(e.payload==="unifiedCanvas"){const{data:i}=xo.endpoints.getMainModels.select(pce)(t());if(!i){n(Va(null));return}const o=[];Za(i.entities,c=>{c&&["sd-1","sd-2"].includes(c.base_model)&&o.push(c)});const s=o[0];if(!s){n(Va(null));return}const{base_model:a,model_name:l,model_type:u}=s;n(Va({base_model:a,model_name:l,model_type:u}))}}})},Be="positive_conditioning",qe="negative_conditioning",cn="text_to_latents",We="latents_to_image",hu="nsfw_checker",Qc="invisible_watermark",$e="noise",Fi="rand_int",Co="range_of_size",lr="iterate",Pn="main_model_loader",rv="onnx_model_loader",Zc="vae_loader",mce="lora_loader",it="clip_skip",vt="image_to_latents",Wt="latents_to_latents",Qn="resize_image",Ii="inpaint",Op="control_net_collect",Gb="dynamic_prompt",Ke="metadata_accumulator",YE="esrgan",Jt="sdxl_model_loader",is="t2l_sdxl",Ni="l2l_sdxl",Ul="sdxl_refiner_model_loader",Mp="sdxl_refiner_positive_conditioning",Ip="sdxl_refiner_negative_conditioning",ya="l2l_sdxl_refiner",SC="text_to_image_graph",yce="sdxl_text_to_image_graph",vce="sxdl_image_to_image_graph",Ym="image_to_image_graph",sN="inpaint_graph",bce=({image_name:e,esrganModelName:t})=>{const n={id:YE,type:"esrgan",image:{image_name:e},model_name:t,is_intermediate:!1};return{id:"adhoc-esrgan-graph",nodes:{[YE]:n},edges:[]}},Sce=ue("upscale/upscaleRequested"),_ce=()=>{le({actionCreator:Sce,effect:async(e,{dispatch:t,getState:n,take:r})=>{const{image_name:i}=e.payload,{esrganModelName:o}=n().postprocessing,s=bce({image_name:i,esrganModelName:o});t(Rn({graph:s})),await r(Rn.fulfilled.match),t(pl())}})},wce=e=>{const t=window.open("");t&&e.forEach(n=>{const r=new Image;r.src=n.base64,t.document.write(n.caption),t.document.write("
"),t.document.write(r.outerHTML),t.document.write("

")})},QE=e=>new Promise((t,n)=>{const r=new FileReader;r.onload=i=>t(r.result),r.onerror=i=>n(r.error),r.onabort=i=>n(new Error("Read aborted")),r.readAsDataURL(e)});var _C={exports:{}},iv={},aN={},Pe={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e._registerNode=e.Konva=e.glob=void 0;var t=Math.PI/180;function n(){return typeof window<"u"&&({}.toString.call(window)==="[object Window]"||{}.toString.call(window)==="[object global]")}e.glob=typeof Ee<"u"?Ee:typeof window<"u"?window:typeof WorkerGlobalScope<"u"?self:{},e.Konva={_global:e.glob,version:"9.2.0",isBrowser:n(),isUnminified:/param/.test((function(i){}).toString()),dblClickWindow:400,getAngle(i){return e.Konva.angleDeg?i*t:i},enableTrace:!1,pointerEventsEnabled:!0,autoDrawEnabled:!0,hitOnDragEnabled:!1,capturePointerEventsEnabled:!1,_mouseListenClick:!1,_touchListenClick:!1,_pointerListenClick:!1,_mouseInDblClickWindow:!1,_touchInDblClickWindow:!1,_pointerInDblClickWindow:!1,_mouseDblClickPointerId:null,_touchDblClickPointerId:null,_pointerDblClickPointerId:null,pixelRatio:typeof window<"u"&&window.devicePixelRatio||1,dragDistance:3,angleDeg:!0,showWarnings:!0,dragButtons:[0,1],isDragging(){return e.Konva.DD.isDragging},isDragReady(){return!!e.Konva.DD.node},releaseCanvasOnDestroy:!0,document:e.glob.document,_injectGlobal(i){e.glob.Konva=i}};const r=i=>{e.Konva[i.prototype.getClassName()]=i};e._registerNode=r,e.Konva._injectGlobal(e.Konva)})(Pe);var Ot={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Util=e.Transform=void 0;const t=Pe;class n{constructor(b=[1,0,0,1,0,0]){this.dirty=!1,this.m=b&&b.slice()||[1,0,0,1,0,0]}reset(){this.m[0]=1,this.m[1]=0,this.m[2]=0,this.m[3]=1,this.m[4]=0,this.m[5]=0}copy(){return new n(this.m)}copyInto(b){b.m[0]=this.m[0],b.m[1]=this.m[1],b.m[2]=this.m[2],b.m[3]=this.m[3],b.m[4]=this.m[4],b.m[5]=this.m[5]}point(b){var _=this.m;return{x:_[0]*b.x+_[2]*b.y+_[4],y:_[1]*b.x+_[3]*b.y+_[5]}}translate(b,_){return this.m[4]+=this.m[0]*b+this.m[2]*_,this.m[5]+=this.m[1]*b+this.m[3]*_,this}scale(b,_){return this.m[0]*=b,this.m[1]*=b,this.m[2]*=_,this.m[3]*=_,this}rotate(b){var _=Math.cos(b),w=Math.sin(b),x=this.m[0]*_+this.m[2]*w,T=this.m[1]*_+this.m[3]*w,P=this.m[0]*-w+this.m[2]*_,E=this.m[1]*-w+this.m[3]*_;return this.m[0]=x,this.m[1]=T,this.m[2]=P,this.m[3]=E,this}getTranslation(){return{x:this.m[4],y:this.m[5]}}skew(b,_){var w=this.m[0]+this.m[2]*_,x=this.m[1]+this.m[3]*_,T=this.m[2]+this.m[0]*b,P=this.m[3]+this.m[1]*b;return this.m[0]=w,this.m[1]=x,this.m[2]=T,this.m[3]=P,this}multiply(b){var _=this.m[0]*b.m[0]+this.m[2]*b.m[1],w=this.m[1]*b.m[0]+this.m[3]*b.m[1],x=this.m[0]*b.m[2]+this.m[2]*b.m[3],T=this.m[1]*b.m[2]+this.m[3]*b.m[3],P=this.m[0]*b.m[4]+this.m[2]*b.m[5]+this.m[4],E=this.m[1]*b.m[4]+this.m[3]*b.m[5]+this.m[5];return this.m[0]=_,this.m[1]=w,this.m[2]=x,this.m[3]=T,this.m[4]=P,this.m[5]=E,this}invert(){var b=1/(this.m[0]*this.m[3]-this.m[1]*this.m[2]),_=this.m[3]*b,w=-this.m[1]*b,x=-this.m[2]*b,T=this.m[0]*b,P=b*(this.m[2]*this.m[5]-this.m[3]*this.m[4]),E=b*(this.m[1]*this.m[4]-this.m[0]*this.m[5]);return this.m[0]=_,this.m[1]=w,this.m[2]=x,this.m[3]=T,this.m[4]=P,this.m[5]=E,this}getMatrix(){return this.m}decompose(){var b=this.m[0],_=this.m[1],w=this.m[2],x=this.m[3],T=this.m[4],P=this.m[5],E=b*x-_*w;let A={x:T,y:P,rotation:0,scaleX:0,scaleY:0,skewX:0,skewY:0};if(b!=0||_!=0){var $=Math.sqrt(b*b+_*_);A.rotation=_>0?Math.acos(b/$):-Math.acos(b/$),A.scaleX=$,A.scaleY=E/$,A.skewX=(b*w+_*x)/E,A.skewY=0}else if(w!=0||x!=0){var I=Math.sqrt(w*w+x*x);A.rotation=Math.PI/2-(x>0?Math.acos(-w/I):-Math.acos(w/I)),A.scaleX=E/I,A.scaleY=I,A.skewX=0,A.skewY=(b*w+_*x)/E}return A.rotation=e.Util._getRotation(A.rotation),A}}e.Transform=n;var r="[object Array]",i="[object Number]",o="[object String]",s="[object Boolean]",a=Math.PI/180,l=180/Math.PI,u="#",c="",d="0",f="Konva warning: ",h="Konva error: ",p="rgb(",m={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,132,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,255,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,203],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[119,128,144],slategrey:[119,128,144],snow:[255,255,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],transparent:[255,255,255,0],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,5]},S=/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/,y=[];const v=typeof requestAnimationFrame<"u"&&requestAnimationFrame||function(g){setTimeout(g,60)};e.Util={_isElement(g){return!!(g&&g.nodeType==1)},_isFunction(g){return!!(g&&g.constructor&&g.call&&g.apply)},_isPlainObject(g){return!!g&&g.constructor===Object},_isArray(g){return Object.prototype.toString.call(g)===r},_isNumber(g){return Object.prototype.toString.call(g)===i&&!isNaN(g)&&isFinite(g)},_isString(g){return Object.prototype.toString.call(g)===o},_isBoolean(g){return Object.prototype.toString.call(g)===s},isObject(g){return g instanceof Object},isValidSelector(g){if(typeof g!="string")return!1;var b=g[0];return b==="#"||b==="."||b===b.toUpperCase()},_sign(g){return g===0||g>0?1:-1},requestAnimFrame(g){y.push(g),y.length===1&&v(function(){const b=y;y=[],b.forEach(function(_){_()})})},createCanvasElement(){var g=document.createElement("canvas");try{g.style=g.style||{}}catch{}return g},createImageElement(){return document.createElement("img")},_isInDocument(g){for(;g=g.parentNode;)if(g==document)return!0;return!1},_urlToImage(g,b){var _=e.Util.createImageElement();_.onload=function(){b(_)},_.src=g},_rgbToHex(g,b,_){return((1<<24)+(g<<16)+(b<<8)+_).toString(16).slice(1)},_hexToRgb(g){g=g.replace(u,c);var b=parseInt(g,16);return{r:b>>16&255,g:b>>8&255,b:b&255}},getRandomColor(){for(var g=(Math.random()*16777215<<0).toString(16);g.length<6;)g=d+g;return u+g},getRGB(g){var b;return g in m?(b=m[g],{r:b[0],g:b[1],b:b[2]}):g[0]===u?this._hexToRgb(g.substring(1)):g.substr(0,4)===p?(b=S.exec(g.replace(/ /g,"")),{r:parseInt(b[1],10),g:parseInt(b[2],10),b:parseInt(b[3],10)}):{r:0,g:0,b:0}},colorToRGBA(g){return g=g||"black",e.Util._namedColorToRBA(g)||e.Util._hex3ColorToRGBA(g)||e.Util._hex4ColorToRGBA(g)||e.Util._hex6ColorToRGBA(g)||e.Util._hex8ColorToRGBA(g)||e.Util._rgbColorToRGBA(g)||e.Util._rgbaColorToRGBA(g)||e.Util._hslColorToRGBA(g)},_namedColorToRBA(g){var b=m[g.toLowerCase()];return b?{r:b[0],g:b[1],b:b[2],a:1}:null},_rgbColorToRGBA(g){if(g.indexOf("rgb(")===0){g=g.match(/rgb\(([^)]+)\)/)[1];var b=g.split(/ *, */).map(Number);return{r:b[0],g:b[1],b:b[2],a:1}}},_rgbaColorToRGBA(g){if(g.indexOf("rgba(")===0){g=g.match(/rgba\(([^)]+)\)/)[1];var b=g.split(/ *, */).map((_,w)=>_.slice(-1)==="%"?w===3?parseInt(_)/100:parseInt(_)/100*255:Number(_));return{r:b[0],g:b[1],b:b[2],a:b[3]}}},_hex8ColorToRGBA(g){if(g[0]==="#"&&g.length===9)return{r:parseInt(g.slice(1,3),16),g:parseInt(g.slice(3,5),16),b:parseInt(g.slice(5,7),16),a:parseInt(g.slice(7,9),16)/255}},_hex6ColorToRGBA(g){if(g[0]==="#"&&g.length===7)return{r:parseInt(g.slice(1,3),16),g:parseInt(g.slice(3,5),16),b:parseInt(g.slice(5,7),16),a:1}},_hex4ColorToRGBA(g){if(g[0]==="#"&&g.length===5)return{r:parseInt(g[1]+g[1],16),g:parseInt(g[2]+g[2],16),b:parseInt(g[3]+g[3],16),a:parseInt(g[4]+g[4],16)/255}},_hex3ColorToRGBA(g){if(g[0]==="#"&&g.length===4)return{r:parseInt(g[1]+g[1],16),g:parseInt(g[2]+g[2],16),b:parseInt(g[3]+g[3],16),a:1}},_hslColorToRGBA(g){if(/hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.test(g)){const[b,..._]=/hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.exec(g),w=Number(_[0])/360,x=Number(_[1])/100,T=Number(_[2])/100;let P,E,A;if(x===0)return A=T*255,{r:Math.round(A),g:Math.round(A),b:Math.round(A),a:1};T<.5?P=T*(1+x):P=T+x-T*x;const $=2*T-P,I=[0,0,0];for(let C=0;C<3;C++)E=w+1/3*-(C-1),E<0&&E++,E>1&&E--,6*E<1?A=$+(P-$)*6*E:2*E<1?A=P:3*E<2?A=$+(P-$)*(2/3-E)*6:A=$,I[C]=A*255;return{r:Math.round(I[0]),g:Math.round(I[1]),b:Math.round(I[2]),a:1}}},haveIntersection(g,b){return!(b.x>g.x+g.width||b.x+b.widthg.y+g.height||b.y+b.height1?(P=_,E=w,A=(_-x)*(_-x)+(w-T)*(w-T)):(P=g+I*(_-g),E=b+I*(w-b),A=(P-x)*(P-x)+(E-T)*(E-T))}return[P,E,A]},_getProjectionToLine(g,b,_){var w=e.Util.cloneObject(g),x=Number.MAX_VALUE;return b.forEach(function(T,P){if(!(!_&&P===b.length-1)){var E=b[(P+1)%b.length],A=e.Util._getProjectionToSegment(T.x,T.y,E.x,E.y,g.x,g.y),$=A[0],I=A[1],C=A[2];Cb.length){var P=b;b=g,g=P}for(w=0;w{b.width=0,b.height=0})},drawRoundedRectPath(g,b,_,w){let x=0,T=0,P=0,E=0;typeof w=="number"?x=T=P=E=Math.min(w,b/2,_/2):(x=Math.min(w[0]||0,b/2,_/2),T=Math.min(w[1]||0,b/2,_/2),E=Math.min(w[2]||0,b/2,_/2),P=Math.min(w[3]||0,b/2,_/2)),g.moveTo(x,0),g.lineTo(b-T,0),g.arc(b-T,T,T,Math.PI*3/2,0,!1),g.lineTo(b,_-E),g.arc(b-E,_-E,E,0,Math.PI/2,!1),g.lineTo(P,_),g.arc(P,_-P,P,Math.PI/2,Math.PI,!1),g.lineTo(0,x),g.arc(x,x,x,Math.PI,Math.PI*3/2,!1)}}})(Ot);var wt={},Te={},de={};Object.defineProperty(de,"__esModule",{value:!0});de.getComponentValidator=de.getBooleanValidator=de.getNumberArrayValidator=de.getFunctionValidator=de.getStringOrGradientValidator=de.getStringValidator=de.getNumberOrAutoValidator=de.getNumberOrArrayOfNumbersValidator=de.getNumberValidator=de.alphaComponent=de.RGBComponent=void 0;const Ko=Pe,Nt=Ot;function Xo(e){return Nt.Util._isString(e)?'"'+e+'"':Object.prototype.toString.call(e)==="[object Number]"||Nt.Util._isBoolean(e)?e:Object.prototype.toString.call(e)}function xce(e){return e>255?255:e<0?0:Math.round(e)}de.RGBComponent=xce;function Cce(e){return e>1?1:e<1e-4?1e-4:e}de.alphaComponent=Cce;function Tce(){if(Ko.Konva.isUnminified)return function(e,t){return Nt.Util._isNumber(e)||Nt.Util.warn(Xo(e)+' is a not valid value for "'+t+'" attribute. The value should be a number.'),e}}de.getNumberValidator=Tce;function Ece(e){if(Ko.Konva.isUnminified)return function(t,n){let r=Nt.Util._isNumber(t),i=Nt.Util._isArray(t)&&t.length==e;return!r&&!i&&Nt.Util.warn(Xo(t)+' is a not valid value for "'+n+'" attribute. The value should be a number or Array('+e+")"),t}}de.getNumberOrArrayOfNumbersValidator=Ece;function Pce(){if(Ko.Konva.isUnminified)return function(e,t){var n=Nt.Util._isNumber(e),r=e==="auto";return n||r||Nt.Util.warn(Xo(e)+' is a not valid value for "'+t+'" attribute. The value should be a number or "auto".'),e}}de.getNumberOrAutoValidator=Pce;function Ace(){if(Ko.Konva.isUnminified)return function(e,t){return Nt.Util._isString(e)||Nt.Util.warn(Xo(e)+' is a not valid value for "'+t+'" attribute. The value should be a string.'),e}}de.getStringValidator=Ace;function kce(){if(Ko.Konva.isUnminified)return function(e,t){const n=Nt.Util._isString(e),r=Object.prototype.toString.call(e)==="[object CanvasGradient]"||e&&e.addColorStop;return n||r||Nt.Util.warn(Xo(e)+' is a not valid value for "'+t+'" attribute. The value should be a string or a native gradient.'),e}}de.getStringOrGradientValidator=kce;function Rce(){if(Ko.Konva.isUnminified)return function(e,t){return Nt.Util._isFunction(e)||Nt.Util.warn(Xo(e)+' is a not valid value for "'+t+'" attribute. The value should be a function.'),e}}de.getFunctionValidator=Rce;function Oce(){if(Ko.Konva.isUnminified)return function(e,t){const n=Int8Array?Object.getPrototypeOf(Int8Array):null;return n&&e instanceof n||(Nt.Util._isArray(e)?e.forEach(function(r){Nt.Util._isNumber(r)||Nt.Util.warn('"'+t+'" attribute has non numeric element '+r+". Make sure that all elements are numbers.")}):Nt.Util.warn(Xo(e)+' is a not valid value for "'+t+'" attribute. The value should be a array of numbers.')),e}}de.getNumberArrayValidator=Oce;function Mce(){if(Ko.Konva.isUnminified)return function(e,t){var n=e===!0||e===!1;return n||Nt.Util.warn(Xo(e)+' is a not valid value for "'+t+'" attribute. The value should be a boolean.'),e}}de.getBooleanValidator=Mce;function Ice(e){if(Ko.Konva.isUnminified)return function(t,n){return t==null||Nt.Util.isObject(t)||Nt.Util.warn(Xo(t)+' is a not valid value for "'+n+'" attribute. The value should be an object with properties '+e),t}}de.getComponentValidator=Ice;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Factory=void 0;const t=Ot,n=de;var r="get",i="set";e.Factory={addGetterSetter(o,s,a,l,u){e.Factory.addGetter(o,s,a),e.Factory.addSetter(o,s,l,u),e.Factory.addOverloadedGetterSetter(o,s)},addGetter(o,s,a){var l=r+t.Util._capitalize(s);o.prototype[l]=o.prototype[l]||function(){var u=this.attrs[s];return u===void 0?a:u}},addSetter(o,s,a,l){var u=i+t.Util._capitalize(s);o.prototype[u]||e.Factory.overWriteSetter(o,s,a,l)},overWriteSetter(o,s,a,l){var u=i+t.Util._capitalize(s);o.prototype[u]=function(c){return a&&c!==void 0&&c!==null&&(c=a.call(this,c,s)),this._setAttr(s,c),l&&l.call(this),this}},addComponentsGetterSetter(o,s,a,l,u){var c=a.length,d=t.Util._capitalize,f=r+d(s),h=i+d(s),p,m;o.prototype[f]=function(){var y={};for(p=0;p{this._setAttr(s+d(b),void 0)}),this._fireChangeEvent(s,v,y),u&&u.call(this),this},e.Factory.addOverloadedGetterSetter(o,s)},addOverloadedGetterSetter(o,s){var a=t.Util._capitalize(s),l=i+a,u=r+a;o.prototype[s]=function(){return arguments.length?(this[l](arguments[0]),this):this[u]()}},addDeprecatedGetterSetter(o,s,a,l){t.Util.error("Adding deprecated "+s);var u=r+t.Util._capitalize(s),c=s+" property is deprecated and will be removed soon. Look at Konva change log for more information.";o.prototype[u]=function(){t.Util.error(c);var d=this.attrs[s];return d===void 0?a:d},e.Factory.addSetter(o,s,l,function(){t.Util.error(c)}),e.Factory.addOverloadedGetterSetter(o,s)},backCompat(o,s){t.Util.each(s,function(a,l){var u=o.prototype[l],c=r+t.Util._capitalize(a),d=i+t.Util._capitalize(a);function f(){u.apply(this,arguments),t.Util.error('"'+a+'" method is deprecated and will be removed soon. Use ""'+l+'" instead.')}o.prototype[a]=f,o.prototype[c]=f,o.prototype[d]=f})},afterSetFilter(){this._filterUpToDate=!1}}})(Te);var _i={},Oo={};Object.defineProperty(Oo,"__esModule",{value:!0});Oo.HitContext=Oo.SceneContext=Oo.Context=void 0;const lN=Ot,Nce=Pe;function Dce(e){var t=[],n=e.length,r=lN.Util,i,o;for(i=0;itypeof c=="number"?Math.floor(c):c)),o+=Lce+u.join(ZE)+$ce)):(o+=a.property,t||(o+=zce+a.val)),o+=jce;return o}clearTrace(){this.traceArr=[]}_trace(t){var n=this.traceArr,r;n.push(t),r=n.length,r>=Gce&&n.shift()}reset(){var t=this.getCanvas().getPixelRatio();this.setTransform(1*t,0,0,1*t,0,0)}getCanvas(){return this.canvas}clear(t){var n=this.getCanvas();t?this.clearRect(t.x||0,t.y||0,t.width||0,t.height||0):this.clearRect(0,0,n.getWidth()/n.pixelRatio,n.getHeight()/n.pixelRatio)}_applyLineCap(t){const n=t.attrs.lineCap;n&&this.setAttr("lineCap",n)}_applyOpacity(t){var n=t.getAbsoluteOpacity();n!==1&&this.setAttr("globalAlpha",n)}_applyLineJoin(t){const n=t.attrs.lineJoin;n&&this.setAttr("lineJoin",n)}setAttr(t,n){this._context[t]=n}arc(t,n,r,i,o,s){this._context.arc(t,n,r,i,o,s)}arcTo(t,n,r,i,o){this._context.arcTo(t,n,r,i,o)}beginPath(){this._context.beginPath()}bezierCurveTo(t,n,r,i,o,s){this._context.bezierCurveTo(t,n,r,i,o,s)}clearRect(t,n,r,i){this._context.clearRect(t,n,r,i)}clip(...t){this._context.clip.apply(this._context,t)}closePath(){this._context.closePath()}createImageData(t,n){var r=arguments;if(r.length===2)return this._context.createImageData(t,n);if(r.length===1)return this._context.createImageData(t)}createLinearGradient(t,n,r,i){return this._context.createLinearGradient(t,n,r,i)}createPattern(t,n){return this._context.createPattern(t,n)}createRadialGradient(t,n,r,i,o,s){return this._context.createRadialGradient(t,n,r,i,o,s)}drawImage(t,n,r,i,o,s,a,l,u){var c=arguments,d=this._context;c.length===3?d.drawImage(t,n,r):c.length===5?d.drawImage(t,n,r,i,o):c.length===9&&d.drawImage(t,n,r,i,o,s,a,l,u)}ellipse(t,n,r,i,o,s,a,l){this._context.ellipse(t,n,r,i,o,s,a,l)}isPointInPath(t,n,r,i){return r?this._context.isPointInPath(r,t,n,i):this._context.isPointInPath(t,n,i)}fill(...t){this._context.fill.apply(this._context,t)}fillRect(t,n,r,i){this._context.fillRect(t,n,r,i)}strokeRect(t,n,r,i){this._context.strokeRect(t,n,r,i)}fillText(t,n,r,i){i?this._context.fillText(t,n,r,i):this._context.fillText(t,n,r)}measureText(t){return this._context.measureText(t)}getImageData(t,n,r,i){return this._context.getImageData(t,n,r,i)}lineTo(t,n){this._context.lineTo(t,n)}moveTo(t,n){this._context.moveTo(t,n)}rect(t,n,r,i){this._context.rect(t,n,r,i)}putImageData(t,n,r){this._context.putImageData(t,n,r)}quadraticCurveTo(t,n,r,i){this._context.quadraticCurveTo(t,n,r,i)}restore(){this._context.restore()}rotate(t){this._context.rotate(t)}save(){this._context.save()}scale(t,n){this._context.scale(t,n)}setLineDash(t){this._context.setLineDash?this._context.setLineDash(t):"mozDash"in this._context?this._context.mozDash=t:"webkitLineDash"in this._context&&(this._context.webkitLineDash=t)}getLineDash(){return this._context.getLineDash()}setTransform(t,n,r,i,o,s){this._context.setTransform(t,n,r,i,o,s)}stroke(t){t?this._context.stroke(t):this._context.stroke()}strokeText(t,n,r,i){this._context.strokeText(t,n,r,i)}transform(t,n,r,i,o,s){this._context.transform(t,n,r,i,o,s)}translate(t,n){this._context.translate(t,n)}_enableTrace(){var t=this,n=JE.length,r=this.setAttr,i,o,s=function(a){var l=t[a],u;t[a]=function(){return o=Dce(Array.prototype.slice.call(arguments,0)),u=l.apply(t,arguments),t._trace({method:a,args:o}),u}};for(i=0;i{i.dragStatus==="dragging"&&(r=!0)}),r},justDragged:!1,get node(){var r;return e.DD._dragElements.forEach(i=>{r=i.node}),r},_dragElements:new Map,_drag(r){const i=[];e.DD._dragElements.forEach((o,s)=>{const{node:a}=o,l=a.getStage();l.setPointersPositions(r),o.pointerId===void 0&&(o.pointerId=n.Util._getFirstPointerId(r));const u=l._changedPointerPositions.find(f=>f.id===o.pointerId);if(u){if(o.dragStatus!=="dragging"){var c=a.dragDistance(),d=Math.max(Math.abs(u.x-o.startPointerPos.x),Math.abs(u.y-o.startPointerPos.y));if(d{o.fire("dragmove",{type:"dragmove",target:o,evt:r},!0)})},_endDragBefore(r){const i=[];e.DD._dragElements.forEach(o=>{const{node:s}=o,a=s.getStage();if(r&&a.setPointersPositions(r),!a._changedPointerPositions.find(c=>c.id===o.pointerId))return;(o.dragStatus==="dragging"||o.dragStatus==="stopped")&&(e.DD.justDragged=!0,t.Konva._mouseListenClick=!1,t.Konva._touchListenClick=!1,t.Konva._pointerListenClick=!1,o.dragStatus="stopped");const u=o.node.getLayer()||o.node instanceof t.Konva.Stage&&o.node;u&&i.indexOf(u)===-1&&i.push(u)}),i.forEach(o=>{o.draw()})},_endDragAfter(r){e.DD._dragElements.forEach((i,o)=>{i.dragStatus==="stopped"&&i.node.fire("dragend",{type:"dragend",target:i.node,evt:r},!0),i.dragStatus!=="dragging"&&e.DD._dragElements.delete(o)})}},t.Konva.isBrowser&&(window.addEventListener("mouseup",e.DD._endDragBefore,!0),window.addEventListener("touchend",e.DD._endDragBefore,!0),window.addEventListener("mousemove",e.DD._drag),window.addEventListener("touchmove",e.DD._drag),window.addEventListener("mouseup",e.DD._endDragAfter,!1),window.addEventListener("touchend",e.DD._endDragAfter,!1))})(av);Object.defineProperty(wt,"__esModule",{value:!0});wt.Node=void 0;const ke=Ot,Ah=Te,Dp=_i,va=Pe,Br=av,Vt=de;var Sg="absoluteOpacity",Lp="allEventListeners",bo="absoluteTransform",e6="absoluteScale",ba="canvas",Zce="Change",Jce="children",ede="konva",m2="listening",t6="mouseenter",n6="mouseleave",r6="set",i6="Shape",_g=" ",o6="stage",ss="transform",tde="Stage",y2="visible",nde=["xChange.konva","yChange.konva","scaleXChange.konva","scaleYChange.konva","skewXChange.konva","skewYChange.konva","rotationChange.konva","offsetXChange.konva","offsetYChange.konva","transformsEnabledChange.konva"].join(_g);let rde=1,Se=class v2{constructor(t){this._id=rde++,this.eventListeners={},this.attrs={},this.index=0,this._allEventListeners=null,this.parent=null,this._cache=new Map,this._attachedDepsListeners=new Map,this._lastPos=null,this._batchingTransformChange=!1,this._needClearTransformCache=!1,this._filterUpToDate=!1,this._isUnderCache=!1,this._dragEventId=null,this._shouldFireChangeEvents=!1,this.setAttrs(t),this._shouldFireChangeEvents=!0}hasChildren(){return!1}_clearCache(t){(t===ss||t===bo)&&this._cache.get(t)?this._cache.get(t).dirty=!0:t?this._cache.delete(t):this._cache.clear()}_getCache(t,n){var r=this._cache.get(t),i=t===ss||t===bo,o=r===void 0||i&&r.dirty===!0;return o&&(r=n.call(this),this._cache.set(t,r)),r}_calculate(t,n,r){if(!this._attachedDepsListeners.get(t)){const i=n.map(o=>o+"Change.konva").join(_g);this.on(i,()=>{this._clearCache(t)}),this._attachedDepsListeners.set(t,!0)}return this._getCache(t,r)}_getCanvasCache(){return this._cache.get(ba)}_clearSelfAndDescendantCache(t){this._clearCache(t),t===bo&&this.fire("absoluteTransformChange")}clearCache(){if(this._cache.has(ba)){const{scene:t,filter:n,hit:r}=this._cache.get(ba);ke.Util.releaseCanvas(t,n,r),this._cache.delete(ba)}return this._clearSelfAndDescendantCache(),this._requestDraw(),this}cache(t){var n=t||{},r={};(n.x===void 0||n.y===void 0||n.width===void 0||n.height===void 0)&&(r=this.getClientRect({skipTransform:!0,relativeTo:this.getParent()}));var i=Math.ceil(n.width||r.width),o=Math.ceil(n.height||r.height),s=n.pixelRatio,a=n.x===void 0?Math.floor(r.x):n.x,l=n.y===void 0?Math.floor(r.y):n.y,u=n.offset||0,c=n.drawBorder||!1,d=n.hitCanvasPixelRatio||1;if(!i||!o){ke.Util.error("Can not cache the node. Width or height of the node equals 0. Caching is skipped.");return}i+=u*2+1,o+=u*2+1,a-=u,l-=u;var f=new Dp.SceneCanvas({pixelRatio:s,width:i,height:o}),h=new Dp.SceneCanvas({pixelRatio:s,width:0,height:0,willReadFrequently:!0}),p=new Dp.HitCanvas({pixelRatio:d,width:i,height:o}),m=f.getContext(),S=p.getContext();return p.isCache=!0,f.isCache=!0,this._cache.delete(ba),this._filterUpToDate=!1,n.imageSmoothingEnabled===!1&&(f.getContext()._context.imageSmoothingEnabled=!1,h.getContext()._context.imageSmoothingEnabled=!1),m.save(),S.save(),m.translate(-a,-l),S.translate(-a,-l),this._isUnderCache=!0,this._clearSelfAndDescendantCache(Sg),this._clearSelfAndDescendantCache(e6),this.drawScene(f,this),this.drawHit(p,this),this._isUnderCache=!1,m.restore(),S.restore(),c&&(m.save(),m.beginPath(),m.rect(0,0,i,o),m.closePath(),m.setAttr("strokeStyle","red"),m.setAttr("lineWidth",5),m.stroke(),m.restore()),this._cache.set(ba,{scene:f,filter:h,hit:p,x:a,y:l}),this._requestDraw(),this}isCached(){return this._cache.has(ba)}getClientRect(t){throw new Error('abstract "getClientRect" method call')}_transformedRect(t,n){var r=[{x:t.x,y:t.y},{x:t.x+t.width,y:t.y},{x:t.x+t.width,y:t.y+t.height},{x:t.x,y:t.y+t.height}],i,o,s,a,l=this.getAbsoluteTransform(n);return r.forEach(function(u){var c=l.point(u);i===void 0&&(i=s=c.x,o=a=c.y),i=Math.min(i,c.x),o=Math.min(o,c.y),s=Math.max(s,c.x),a=Math.max(a,c.y)}),{x:i,y:o,width:s-i,height:a-o}}_drawCachedSceneCanvas(t){t.save(),t._applyOpacity(this),t._applyGlobalCompositeOperation(this);const n=this._getCanvasCache();t.translate(n.x,n.y);var r=this._getCachedSceneCanvas(),i=r.pixelRatio;t.drawImage(r._canvas,0,0,r.width/i,r.height/i),t.restore()}_drawCachedHitCanvas(t){var n=this._getCanvasCache(),r=n.hit;t.save(),t.translate(n.x,n.y),t.drawImage(r._canvas,0,0,r.width/r.pixelRatio,r.height/r.pixelRatio),t.restore()}_getCachedSceneCanvas(){var t=this.filters(),n=this._getCanvasCache(),r=n.scene,i=n.filter,o=i.getContext(),s,a,l,u;if(t){if(!this._filterUpToDate){var c=r.pixelRatio;i.setSize(r.width/r.pixelRatio,r.height/r.pixelRatio);try{for(s=t.length,o.clear(),o.drawImage(r._canvas,0,0,r.getWidth()/c,r.getHeight()/c),a=o.getImageData(0,0,i.getWidth(),i.getHeight()),l=0;l{var n,r;if(!t)return this;for(n in t)n!==Jce&&(r=r6+ke.Util._capitalize(n),ke.Util._isFunction(this[r])?this[r](t[n]):this._setAttr(n,t[n]))}),this}isListening(){return this._getCache(m2,this._isListening)}_isListening(t){if(!this.listening())return!1;const r=this.getParent();return r&&r!==t&&this!==t?r._isListening(t):!0}isVisible(){return this._getCache(y2,this._isVisible)}_isVisible(t){if(!this.visible())return!1;const r=this.getParent();return r&&r!==t&&this!==t?r._isVisible(t):!0}shouldDrawHit(t,n=!1){if(t)return this._isVisible(t)&&this._isListening(t);var r=this.getLayer(),i=!1;Br.DD._dragElements.forEach(s=>{s.dragStatus==="dragging"&&(s.node.nodeType==="Stage"||s.node.getLayer()===r)&&(i=!0)});var o=!n&&!va.Konva.hitOnDragEnabled&&i;return this.isListening()&&this.isVisible()&&!o}show(){return this.visible(!0),this}hide(){return this.visible(!1),this}getZIndex(){return this.index||0}getAbsoluteZIndex(){var t=this.getDepth(),n=this,r=0,i,o,s,a;function l(u){for(i=[],o=u.length,s=0;s0&&i[0].getDepth()<=t&&l(i)}return n.nodeType!==tde&&l(n.getStage().getChildren()),r}getDepth(){for(var t=0,n=this.parent;n;)t++,n=n.parent;return t}_batchTransformChanges(t){this._batchingTransformChange=!0,t(),this._batchingTransformChange=!1,this._needClearTransformCache&&(this._clearCache(ss),this._clearSelfAndDescendantCache(bo)),this._needClearTransformCache=!1}setPosition(t){return this._batchTransformChanges(()=>{this.x(t.x),this.y(t.y)}),this}getPosition(){return{x:this.x(),y:this.y()}}getRelativePointerPosition(){if(!this.getStage())return null;var t=this.getStage().getPointerPosition();if(!t)return null;var n=this.getAbsoluteTransform().copy();return n.invert(),n.point(t)}getAbsolutePosition(t){let n=!1,r=this.parent;for(;r;){if(r.isCached()){n=!0;break}r=r.parent}n&&!t&&(t=!0);var i=this.getAbsoluteTransform(t).getMatrix(),o=new ke.Transform,s=this.offset();return o.m=i.slice(),o.translate(s.x,s.y),o.getTranslation()}setAbsolutePosition(t){var n=this._clearTransform();this.attrs.x=n.x,this.attrs.y=n.y,delete n.x,delete n.y,this._clearCache(ss);var r=this._getAbsoluteTransform().copy();return r.invert(),r.translate(t.x,t.y),t={x:this.attrs.x+r.getTranslation().x,y:this.attrs.y+r.getTranslation().y},this._setTransform(n),this.setPosition({x:t.x,y:t.y}),this._clearCache(ss),this._clearSelfAndDescendantCache(bo),this}_setTransform(t){var n;for(n in t)this.attrs[n]=t[n]}_clearTransform(){var t={x:this.x(),y:this.y(),rotation:this.rotation(),scaleX:this.scaleX(),scaleY:this.scaleY(),offsetX:this.offsetX(),offsetY:this.offsetY(),skewX:this.skewX(),skewY:this.skewY()};return this.attrs.x=0,this.attrs.y=0,this.attrs.rotation=0,this.attrs.scaleX=1,this.attrs.scaleY=1,this.attrs.offsetX=0,this.attrs.offsetY=0,this.attrs.skewX=0,this.attrs.skewY=0,t}move(t){var n=t.x,r=t.y,i=this.x(),o=this.y();return n!==void 0&&(i+=n),r!==void 0&&(o+=r),this.setPosition({x:i,y:o}),this}_eachAncestorReverse(t,n){var r=[],i=this.getParent(),o,s;if(!(n&&n._id===this._id)){for(r.unshift(this);i&&(!n||i._id!==n._id);)r.unshift(i),i=i.parent;for(o=r.length,s=0;s0?(this.parent.children.splice(t,1),this.parent.children.splice(t-1,0,this),this.parent._setChildrenIndices(),!0):!1}moveToBottom(){if(!this.parent)return ke.Util.warn("Node has no parent. moveToBottom function is ignored."),!1;var t=this.index;return t>0?(this.parent.children.splice(t,1),this.parent.children.unshift(this),this.parent._setChildrenIndices(),!0):!1}setZIndex(t){if(!this.parent)return ke.Util.warn("Node has no parent. zIndex parameter is ignored."),this;(t<0||t>=this.parent.children.length)&&ke.Util.warn("Unexpected value "+t+" for zIndex property. zIndex is just index of a node in children of its parent. Expected value is from 0 to "+(this.parent.children.length-1)+".");var n=this.index;return this.parent.children.splice(n,1),this.parent.children.splice(t,0,this),this.parent._setChildrenIndices(),this}getAbsoluteOpacity(){return this._getCache(Sg,this._getAbsoluteOpacity)}_getAbsoluteOpacity(){var t=this.opacity(),n=this.getParent();return n&&!n._isUnderCache&&(t*=n.getAbsoluteOpacity()),t}moveTo(t){return this.getParent()!==t&&(this._remove(),t.add(this)),this}toObject(){var t={},n=this.getAttrs(),r,i,o,s,a;t.attrs={};for(r in n)i=n[r],a=ke.Util.isObject(i)&&!ke.Util._isPlainObject(i)&&!ke.Util._isArray(i),!a&&(o=typeof this[r]=="function"&&this[r],delete n[r],s=o?o.call(this):null,n[r]=i,s!==i&&(t.attrs[r]=i));return t.className=this.getClassName(),ke.Util._prepareToStringify(t)}toJSON(){return JSON.stringify(this.toObject())}getParent(){return this.parent}findAncestors(t,n,r){var i=[];n&&this._isMatch(t)&&i.push(this);for(var o=this.parent;o;){if(o===r)return i;o._isMatch(t)&&i.push(o),o=o.parent}return i}isAncestorOf(t){return!1}findAncestor(t,n,r){return this.findAncestors(t,n,r)[0]}_isMatch(t){if(!t)return!1;if(typeof t=="function")return t(this);var n=t.replace(/ /g,"").split(","),r=n.length,i,o;for(i=0;i{try{const i=t==null?void 0:t.callback;i&&delete t.callback,ke.Util._urlToImage(this.toDataURL(t),function(o){n(o),i==null||i(o)})}catch(i){r(i)}})}toBlob(t){return new Promise((n,r)=>{try{const i=t==null?void 0:t.callback;i&&delete t.callback,this.toCanvas(t).toBlob(o=>{n(o),i==null||i(o)})}catch(i){r(i)}})}setSize(t){return this.width(t.width),this.height(t.height),this}getSize(){return{width:this.width(),height:this.height()}}getClassName(){return this.className||this.nodeType}getType(){return this.nodeType}getDragDistance(){return this.attrs.dragDistance!==void 0?this.attrs.dragDistance:this.parent?this.parent.getDragDistance():va.Konva.dragDistance}_off(t,n,r){var i=this.eventListeners[t],o,s,a;for(o=0;o=0;if(r&&!this.isDragging()){var i=!1;Br.DD._dragElements.forEach(o=>{this.isAncestorOf(o.node)&&(i=!0)}),i||this._createDragElement(t)}})}_dragChange(){if(this.attrs.draggable)this._listenDrag();else{this._dragCleanup();var t=this.getStage();if(!t)return;const n=Br.DD._dragElements.get(this._id),r=n&&n.dragStatus==="dragging",i=n&&n.dragStatus==="ready";r?this.stopDrag():i&&Br.DD._dragElements.delete(this._id)}}_dragCleanup(){this.off("mousedown.konva"),this.off("touchstart.konva")}isClientRectOnScreen(t={x:0,y:0}){const n=this.getStage();if(!n)return!1;const r={x:-t.x,y:-t.y,width:n.width()+2*t.x,height:n.height()+2*t.y};return ke.Util.haveIntersection(r,this.getClientRect())}static create(t,n){return ke.Util._isString(t)&&(t=JSON.parse(t)),this._createNode(t,n)}static _createNode(t,n){var r=v2.prototype.getClassName.call(t),i=t.children,o,s,a;n&&(t.attrs.container=n),va.Konva[r]||(ke.Util.warn('Can not find a node with class name "'+r+'". Fallback to "Shape".'),r="Shape");const l=va.Konva[r];if(o=new l(t.attrs),i)for(s=i.length,a=0;a0}removeChildren(){return this.getChildren().forEach(t=>{t.parent=null,t.index=0,t.remove()}),this.children=[],this._requestDraw(),this}destroyChildren(){return this.getChildren().forEach(t=>{t.parent=null,t.index=0,t.destroy()}),this.children=[],this._requestDraw(),this}add(...t){if(t.length===0)return this;if(t.length>1){for(var n=0;n0?n[0]:void 0}_generalFind(t,n){var r=[];return this._descendants(i=>{const o=i._isMatch(t);return o&&r.push(i),!!(o&&n)}),r}_descendants(t){let n=!1;const r=this.getChildren();for(const i of r){if(n=t(i),n)return!0;if(i.hasChildren()&&(n=i._descendants(t),n))return!0}return!1}toObject(){var t=Hb.Node.prototype.toObject.call(this);return t.children=[],this.getChildren().forEach(n=>{t.children.push(n.toObject())}),t}isAncestorOf(t){for(var n=t.getParent();n;){if(n._id===this._id)return!0;n=n.getParent()}return!1}clone(t){var n=Hb.Node.prototype.clone.call(this,t);return this.getChildren().forEach(function(r){n.add(r.clone())}),n}getAllIntersections(t){var n=[];return this.find("Shape").forEach(function(r){r.isVisible()&&r.intersects(t)&&n.push(r)}),n}_clearSelfAndDescendantCache(t){var n;super._clearSelfAndDescendantCache(t),!this.isCached()&&((n=this.children)===null||n===void 0||n.forEach(function(r){r._clearSelfAndDescendantCache(t)}))}_setChildrenIndices(){var t;(t=this.children)===null||t===void 0||t.forEach(function(n,r){n.index=r}),this._requestDraw()}drawScene(t,n){var r=this.getLayer(),i=t||r&&r.getCanvas(),o=i&&i.getContext(),s=this._getCanvasCache(),a=s&&s.scene,l=i&&i.isCache;if(!this.isVisible()&&!l)return this;if(a){o.save();var u=this.getAbsoluteTransform(n).getMatrix();o.transform(u[0],u[1],u[2],u[3],u[4],u[5]),this._drawCachedSceneCanvas(o),o.restore()}else this._drawChildren("drawScene",i,n);return this}drawHit(t,n){if(!this.shouldDrawHit(n))return this;var r=this.getLayer(),i=t||r&&r.hitCanvas,o=i&&i.getContext(),s=this._getCanvasCache(),a=s&&s.hit;if(a){o.save();var l=this.getAbsoluteTransform(n).getMatrix();o.transform(l[0],l[1],l[2],l[3],l[4],l[5]),this._drawCachedHitCanvas(o),o.restore()}else this._drawChildren("drawHit",i,n);return this}_drawChildren(t,n,r){var i,o=n&&n.getContext(),s=this.clipWidth(),a=this.clipHeight(),l=this.clipFunc(),u=s&&a||l;const c=r===this;if(u){o.save();var d=this.getAbsoluteTransform(r),f=d.getMatrix();o.transform(f[0],f[1],f[2],f[3],f[4],f[5]),o.beginPath();let S;if(l)S=l.call(this,o,this);else{var h=this.clipX(),p=this.clipY();o.rect(h,p,s,a)}o.clip.apply(o,S),f=d.copy().invert().getMatrix(),o.transform(f[0],f[1],f[2],f[3],f[4],f[5])}var m=!c&&this.globalCompositeOperation()!=="source-over"&&t==="drawScene";m&&(o.save(),o._applyGlobalCompositeOperation(this)),(i=this.children)===null||i===void 0||i.forEach(function(S){S[t](n,r)}),m&&o.restore(),u&&o.restore()}getClientRect(t){var n;t=t||{};var r=t.skipTransform,i=t.relativeTo,o,s,a,l,u={x:1/0,y:1/0,width:0,height:0},c=this;(n=this.children)===null||n===void 0||n.forEach(function(m){if(m.visible()){var S=m.getClientRect({relativeTo:c,skipShadow:t.skipShadow,skipStroke:t.skipStroke});S.width===0&&S.height===0||(o===void 0?(o=S.x,s=S.y,a=S.x+S.width,l=S.y+S.height):(o=Math.min(o,S.x),s=Math.min(s,S.y),a=Math.max(a,S.x+S.width),l=Math.max(l,S.y+S.height)))}});for(var d=this.find("Shape"),f=!1,h=0;hY.indexOf("pointer")>=0?"pointer":Y.indexOf("touch")>=0?"touch":"mouse",U=Y=>{const B=j(Y);if(B==="pointer")return i.Konva.pointerEventsEnabled&&L.pointer;if(B==="touch")return L.touch;if(B==="mouse")return L.mouse};function G(Y={}){return(Y.clipFunc||Y.clipWidth||Y.clipHeight)&&t.Util.warn("Stage does not support clipping. Please use clip for Layers or Groups."),Y}const W="Pointer position is missing and not registered by the stage. Looks like it is outside of the stage container. You can set it manually from event: stage.setPointersPositions(event);";e.stages=[];class X extends r.Container{constructor(B){super(G(B)),this._pointerPositions=[],this._changedPointerPositions=[],this._buildDOM(),this._bindContentEvents(),e.stages.push(this),this.on("widthChange.konva heightChange.konva",this._resizeDOM),this.on("visibleChange.konva",this._checkVisibility),this.on("clipWidthChange.konva clipHeightChange.konva clipFuncChange.konva",()=>{G(this.attrs)}),this._checkVisibility()}_validateAdd(B){const H=B.getType()==="Layer",Q=B.getType()==="FastLayer";H||Q||t.Util.throw("You may only add layers to the stage.")}_checkVisibility(){if(!this.content)return;const B=this.visible()?"":"none";this.content.style.display=B}setContainer(B){if(typeof B===c){if(B.charAt(0)==="."){var H=B.slice(1);B=document.getElementsByClassName(H)[0]}else{var Q;B.charAt(0)!=="#"?Q=B:Q=B.slice(1),B=document.getElementById(Q)}if(!B)throw"Can not find container in document with id "+Q}return this._setAttr("container",B),this.content&&(this.content.parentElement&&this.content.parentElement.removeChild(this.content),B.appendChild(this.content)),this}shouldDrawHit(){return!0}clear(){var B=this.children,H=B.length,Q;for(Q=0;Q-1&&e.stages.splice(H,1),t.Util.releaseCanvas(this.bufferCanvas._canvas,this.bufferHitCanvas._canvas),this}getPointerPosition(){const B=this._pointerPositions[0]||this._changedPointerPositions[0];return B?{x:B.x,y:B.y}:(t.Util.warn(W),null)}_getPointerById(B){return this._pointerPositions.find(H=>H.id===B)}getPointersPositions(){return this._pointerPositions}getStage(){return this}getContent(){return this.content}_toKonvaCanvas(B){B=B||{},B.x=B.x||0,B.y=B.y||0,B.width=B.width||this.width(),B.height=B.height||this.height();var H=new o.SceneCanvas({width:B.width,height:B.height,pixelRatio:B.pixelRatio||1}),Q=H.getContext()._context,J=this.children;return(B.x||B.y)&&Q.translate(-1*B.x,-1*B.y),J.forEach(function(ne){if(ne.isVisible()){var te=ne._toKonvaCanvas(B);Q.drawImage(te._canvas,B.x,B.y,te.getWidth()/te.getPixelRatio(),te.getHeight()/te.getPixelRatio())}}),H}getIntersection(B){if(!B)return null;var H=this.children,Q=H.length,J=Q-1,ne;for(ne=J;ne>=0;ne--){const te=H[ne].getIntersection(B);if(te)return te}return null}_resizeDOM(){var B=this.width(),H=this.height();this.content&&(this.content.style.width=B+d,this.content.style.height=H+d),this.bufferCanvas.setSize(B,H),this.bufferHitCanvas.setSize(B,H),this.children.forEach(Q=>{Q.setSize({width:B,height:H}),Q.draw()})}add(B,...H){if(arguments.length>1){for(var Q=0;QO&&t.Util.warn("The stage has "+J+" layers. Recommended maximum number of layers is 3-5. Adding more layers into the stage may drop the performance. Rethink your tree structure, you can use Konva.Group."),B.setSize({width:this.width(),height:this.height()}),B.draw(),i.Konva.isBrowser&&this.content.appendChild(B.canvas._canvas),this}getParent(){return null}getLayer(){return null}hasPointerCapture(B){return l.hasPointerCapture(B,this)}setPointerCapture(B){l.setPointerCapture(B,this)}releaseCapture(B){l.releaseCapture(B,this)}getLayers(){return this.children}_bindContentEvents(){i.Konva.isBrowser&&D.forEach(([B,H])=>{this.content.addEventListener(B,Q=>{this[H](Q)},{passive:!1})})}_pointerenter(B){this.setPointersPositions(B);const H=U(B.type);this._fire(H.pointerenter,{evt:B,target:this,currentTarget:this})}_pointerover(B){this.setPointersPositions(B);const H=U(B.type);this._fire(H.pointerover,{evt:B,target:this,currentTarget:this})}_getTargetShape(B){let H=this[B+"targetShape"];return H&&!H.getStage()&&(H=null),H}_pointerleave(B){const H=U(B.type),Q=j(B.type);if(H){this.setPointersPositions(B);var J=this._getTargetShape(Q),ne=!s.DD.isDragging||i.Konva.hitOnDragEnabled;J&&ne?(J._fireAndBubble(H.pointerout,{evt:B}),J._fireAndBubble(H.pointerleave,{evt:B}),this._fire(H.pointerleave,{evt:B,target:this,currentTarget:this}),this[Q+"targetShape"]=null):ne&&(this._fire(H.pointerleave,{evt:B,target:this,currentTarget:this}),this._fire(H.pointerout,{evt:B,target:this,currentTarget:this})),this.pointerPos=void 0,this._pointerPositions=[]}}_pointerdown(B){const H=U(B.type),Q=j(B.type);if(H){this.setPointersPositions(B);var J=!1;this._changedPointerPositions.forEach(ne=>{var te=this.getIntersection(ne);if(s.DD.justDragged=!1,i.Konva["_"+Q+"ListenClick"]=!0,!(te&&te.isListening()))return;i.Konva.capturePointerEventsEnabled&&te.setPointerCapture(ne.id),this[Q+"ClickStartShape"]=te,te._fireAndBubble(H.pointerdown,{evt:B,pointerId:ne.id}),J=!0;const ve=B.type.indexOf("touch")>=0;te.preventDefault()&&B.cancelable&&ve&&B.preventDefault()}),J||this._fire(H.pointerdown,{evt:B,target:this,currentTarget:this,pointerId:this._pointerPositions[0].id})}}_pointermove(B){const H=U(B.type),Q=j(B.type);if(!H)return;s.DD.isDragging&&s.DD.node.preventDefault()&&B.cancelable&&B.preventDefault(),this.setPointersPositions(B);var J=!s.DD.isDragging||i.Konva.hitOnDragEnabled;if(!J)return;var ne={};let te=!1;var xe=this._getTargetShape(Q);this._changedPointerPositions.forEach(ve=>{const ce=l.getCapturedShape(ve.id)||this.getIntersection(ve),De=ve.id,se={evt:B,pointerId:De};var pt=xe!==ce;if(pt&&xe&&(xe._fireAndBubble(H.pointerout,Object.assign({},se),ce),xe._fireAndBubble(H.pointerleave,Object.assign({},se),ce)),ce){if(ne[ce._id])return;ne[ce._id]=!0}ce&&ce.isListening()?(te=!0,pt&&(ce._fireAndBubble(H.pointerover,Object.assign({},se),xe),ce._fireAndBubble(H.pointerenter,Object.assign({},se),xe),this[Q+"targetShape"]=ce),ce._fireAndBubble(H.pointermove,Object.assign({},se))):xe&&(this._fire(H.pointerover,{evt:B,target:this,currentTarget:this,pointerId:De}),this[Q+"targetShape"]=null)}),te||this._fire(H.pointermove,{evt:B,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id})}_pointerup(B){const H=U(B.type),Q=j(B.type);if(!H)return;this.setPointersPositions(B);const J=this[Q+"ClickStartShape"],ne=this[Q+"ClickEndShape"];var te={};let xe=!1;this._changedPointerPositions.forEach(ve=>{const ce=l.getCapturedShape(ve.id)||this.getIntersection(ve);if(ce){if(ce.releaseCapture(ve.id),te[ce._id])return;te[ce._id]=!0}const De=ve.id,se={evt:B,pointerId:De};let pt=!1;i.Konva["_"+Q+"InDblClickWindow"]?(pt=!0,clearTimeout(this[Q+"DblTimeout"])):s.DD.justDragged||(i.Konva["_"+Q+"InDblClickWindow"]=!0,clearTimeout(this[Q+"DblTimeout"])),this[Q+"DblTimeout"]=setTimeout(function(){i.Konva["_"+Q+"InDblClickWindow"]=!1},i.Konva.dblClickWindow),ce&&ce.isListening()?(xe=!0,this[Q+"ClickEndShape"]=ce,ce._fireAndBubble(H.pointerup,Object.assign({},se)),i.Konva["_"+Q+"ListenClick"]&&J&&J===ce&&(ce._fireAndBubble(H.pointerclick,Object.assign({},se)),pt&&ne&&ne===ce&&ce._fireAndBubble(H.pointerdblclick,Object.assign({},se)))):(this[Q+"ClickEndShape"]=null,i.Konva["_"+Q+"ListenClick"]&&this._fire(H.pointerclick,{evt:B,target:this,currentTarget:this,pointerId:De}),pt&&this._fire(H.pointerdblclick,{evt:B,target:this,currentTarget:this,pointerId:De}))}),xe||this._fire(H.pointerup,{evt:B,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id}),i.Konva["_"+Q+"ListenClick"]=!1,B.cancelable&&Q!=="touch"&&B.preventDefault()}_contextmenu(B){this.setPointersPositions(B);var H=this.getIntersection(this.getPointerPosition());H&&H.isListening()?H._fireAndBubble($,{evt:B}):this._fire($,{evt:B,target:this,currentTarget:this})}_wheel(B){this.setPointersPositions(B);var H=this.getIntersection(this.getPointerPosition());H&&H.isListening()?H._fireAndBubble(N,{evt:B}):this._fire(N,{evt:B,target:this,currentTarget:this})}_pointercancel(B){this.setPointersPositions(B);const H=l.getCapturedShape(B.pointerId)||this.getIntersection(this.getPointerPosition());H&&H._fireAndBubble(_,l.createEvent(B)),l.releaseCapture(B.pointerId)}_lostpointercapture(B){l.releaseCapture(B.pointerId)}setPointersPositions(B){var H=this._getContentPosition(),Q=null,J=null;B=B||window.event,B.touches!==void 0?(this._pointerPositions=[],this._changedPointerPositions=[],Array.prototype.forEach.call(B.touches,ne=>{this._pointerPositions.push({id:ne.identifier,x:(ne.clientX-H.left)/H.scaleX,y:(ne.clientY-H.top)/H.scaleY})}),Array.prototype.forEach.call(B.changedTouches||B.touches,ne=>{this._changedPointerPositions.push({id:ne.identifier,x:(ne.clientX-H.left)/H.scaleX,y:(ne.clientY-H.top)/H.scaleY})})):(Q=(B.clientX-H.left)/H.scaleX,J=(B.clientY-H.top)/H.scaleY,this.pointerPos={x:Q,y:J},this._pointerPositions=[{x:Q,y:J,id:t.Util._getFirstPointerId(B)}],this._changedPointerPositions=[{x:Q,y:J,id:t.Util._getFirstPointerId(B)}])}_setPointerPosition(B){t.Util.warn('Method _setPointerPosition is deprecated. Use "stage.setPointersPositions(event)" instead.'),this.setPointersPositions(B)}_getContentPosition(){if(!this.content||!this.content.getBoundingClientRect)return{top:0,left:0,scaleX:1,scaleY:1};var B=this.content.getBoundingClientRect();return{top:B.top,left:B.left,scaleX:B.width/this.content.clientWidth||1,scaleY:B.height/this.content.clientHeight||1}}_buildDOM(){if(this.bufferCanvas=new o.SceneCanvas({width:this.width(),height:this.height()}),this.bufferHitCanvas=new o.HitCanvas({pixelRatio:1,width:this.width(),height:this.height()}),!!i.Konva.isBrowser){var B=this.container();if(!B)throw"Stage has no container. A container is required.";B.innerHTML="",this.content=document.createElement("div"),this.content.style.position="relative",this.content.style.userSelect="none",this.content.className="konvajs-content",this.content.setAttribute("role","presentation"),B.appendChild(this.content),this._resizeDOM()}}cache(){return t.Util.warn("Cache function is not allowed for stage. You may use cache only for layers, groups and shapes."),this}clearCache(){return this}batchDraw(){return this.getChildren().forEach(function(B){B.batchDraw()}),this}}e.Stage=X,X.prototype.nodeType=u,(0,a._registerNode)(X),n.Factory.addGetterSetter(X,"container")})(dN);var kh={},on={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Shape=e.shapes=void 0;const t=Pe,n=Ot,r=Te,i=wt,o=de,s=Pe,a=Tr;var l="hasShadow",u="shadowRGBA",c="patternImage",d="linearGradient",f="radialGradient";let h;function p(){return h||(h=n.Util.createCanvasElement().getContext("2d"),h)}e.shapes={};function m(P){const E=this.attrs.fillRule;E?P.fill(E):P.fill()}function S(P){P.stroke()}function y(P){P.fill()}function v(P){P.stroke()}function g(){this._clearCache(l)}function b(){this._clearCache(u)}function _(){this._clearCache(c)}function w(){this._clearCache(d)}function x(){this._clearCache(f)}class T extends i.Node{constructor(E){super(E);let A;for(;A=n.Util.getRandomColor(),!(A&&!(A in e.shapes)););this.colorKey=A,e.shapes[A]=this}getContext(){return n.Util.warn("shape.getContext() method is deprecated. Please do not use it."),this.getLayer().getContext()}getCanvas(){return n.Util.warn("shape.getCanvas() method is deprecated. Please do not use it."),this.getLayer().getCanvas()}getSceneFunc(){return this.attrs.sceneFunc||this._sceneFunc}getHitFunc(){return this.attrs.hitFunc||this._hitFunc}hasShadow(){return this._getCache(l,this._hasShadow)}_hasShadow(){return this.shadowEnabled()&&this.shadowOpacity()!==0&&!!(this.shadowColor()||this.shadowBlur()||this.shadowOffsetX()||this.shadowOffsetY())}_getFillPattern(){return this._getCache(c,this.__getFillPattern)}__getFillPattern(){if(this.fillPatternImage()){var E=p();const A=E.createPattern(this.fillPatternImage(),this.fillPatternRepeat()||"repeat");if(A&&A.setTransform){const $=new n.Transform;$.translate(this.fillPatternX(),this.fillPatternY()),$.rotate(t.Konva.getAngle(this.fillPatternRotation())),$.scale(this.fillPatternScaleX(),this.fillPatternScaleY()),$.translate(-1*this.fillPatternOffsetX(),-1*this.fillPatternOffsetY());const I=$.getMatrix(),C=typeof DOMMatrix>"u"?{a:I[0],b:I[1],c:I[2],d:I[3],e:I[4],f:I[5]}:new DOMMatrix(I);A.setTransform(C)}return A}}_getLinearGradient(){return this._getCache(d,this.__getLinearGradient)}__getLinearGradient(){var E=this.fillLinearGradientColorStops();if(E){for(var A=p(),$=this.fillLinearGradientStartPoint(),I=this.fillLinearGradientEndPoint(),C=A.createLinearGradient($.x,$.y,I.x,I.y),R=0;Rthis.fillEnabled()&&!!(this.fill()||this.fillPatternImage()||this.fillLinearGradientColorStops()||this.fillRadialGradientColorStops()))}hasStroke(){return this._calculate("hasStroke",["strokeEnabled","strokeWidth","stroke","strokeLinearGradientColorStops"],()=>this.strokeEnabled()&&this.strokeWidth()&&!!(this.stroke()||this.strokeLinearGradientColorStops()))}hasHitStroke(){const E=this.hitStrokeWidth();return E==="auto"?this.hasStroke():this.strokeEnabled()&&!!E}intersects(E){var A=this.getStage(),$=A.bufferHitCanvas,I;return $.getContext().clear(),this.drawHit($,null,!0),I=$.context.getImageData(Math.round(E.x),Math.round(E.y),1,1).data,I[3]>0}destroy(){return i.Node.prototype.destroy.call(this),delete e.shapes[this.colorKey],delete this.colorKey,this}_useBufferCanvas(E){var A;if(!this.getStage()||!((A=this.attrs.perfectDrawEnabled)!==null&&A!==void 0?A:!0))return!1;const I=E||this.hasFill(),C=this.hasStroke(),R=this.getAbsoluteOpacity()!==1;if(I&&C&&R)return!0;const M=this.hasShadow(),N=this.shadowForStrokeEnabled();return!!(I&&C&&M&&N)}setStrokeHitEnabled(E){n.Util.warn("strokeHitEnabled property is deprecated. Please use hitStrokeWidth instead."),E?this.hitStrokeWidth("auto"):this.hitStrokeWidth(0)}getStrokeHitEnabled(){return this.hitStrokeWidth()!==0}getSelfRect(){var E=this.size();return{x:this._centroid?-E.width/2:0,y:this._centroid?-E.height/2:0,width:E.width,height:E.height}}getClientRect(E={}){const A=E.skipTransform,$=E.relativeTo,I=this.getSelfRect(),R=!E.skipStroke&&this.hasStroke()&&this.strokeWidth()||0,M=I.width+R,N=I.height+R,O=!E.skipShadow&&this.hasShadow(),D=O?this.shadowOffsetX():0,L=O?this.shadowOffsetY():0,j=M+Math.abs(D),U=N+Math.abs(L),G=O&&this.shadowBlur()||0,W=j+G*2,X=U+G*2,Y={width:W,height:X,x:-(R/2+G)+Math.min(D,0)+I.x,y:-(R/2+G)+Math.min(L,0)+I.y};return A?Y:this._transformedRect(Y,$)}drawScene(E,A){var $=this.getLayer(),I=E||$.getCanvas(),C=I.getContext(),R=this._getCanvasCache(),M=this.getSceneFunc(),N=this.hasShadow(),O,D,L,j=I.isCache,U=A===this;if(!this.isVisible()&&!U)return this;if(R){C.save();var G=this.getAbsoluteTransform(A).getMatrix();return C.transform(G[0],G[1],G[2],G[3],G[4],G[5]),this._drawCachedSceneCanvas(C),C.restore(),this}if(!M)return this;if(C.save(),this._useBufferCanvas()&&!j){O=this.getStage(),D=O.bufferCanvas,L=D.getContext(),L.clear(),L.save(),L._applyLineJoin(this);var W=this.getAbsoluteTransform(A).getMatrix();L.transform(W[0],W[1],W[2],W[3],W[4],W[5]),M.call(this,L,this),L.restore();var X=D.pixelRatio;N&&C._applyShadow(this),C._applyOpacity(this),C._applyGlobalCompositeOperation(this),C.drawImage(D._canvas,0,0,D.width/X,D.height/X)}else{if(C._applyLineJoin(this),!U){var W=this.getAbsoluteTransform(A).getMatrix();C.transform(W[0],W[1],W[2],W[3],W[4],W[5]),C._applyOpacity(this),C._applyGlobalCompositeOperation(this)}N&&C._applyShadow(this),M.call(this,C,this)}return C.restore(),this}drawHit(E,A,$=!1){if(!this.shouldDrawHit(A,$))return this;var I=this.getLayer(),C=E||I.hitCanvas,R=C&&C.getContext(),M=this.hitFunc()||this.sceneFunc(),N=this._getCanvasCache(),O=N&&N.hit;if(this.colorKey||n.Util.warn("Looks like your canvas has a destroyed shape in it. Do not reuse shape after you destroyed it. If you want to reuse shape you should call remove() instead of destroy()"),O){R.save();var D=this.getAbsoluteTransform(A).getMatrix();return R.transform(D[0],D[1],D[2],D[3],D[4],D[5]),this._drawCachedHitCanvas(R),R.restore(),this}if(!M)return this;if(R.save(),R._applyLineJoin(this),!(this===A)){var j=this.getAbsoluteTransform(A).getMatrix();R.transform(j[0],j[1],j[2],j[3],j[4],j[5])}return M.call(this,R,this),R.restore(),this}drawHitFromCache(E=0){var A=this._getCanvasCache(),$=this._getCachedSceneCanvas(),I=A.hit,C=I.getContext(),R=I.getWidth(),M=I.getHeight(),N,O,D,L,j,U;C.clear(),C.drawImage($._canvas,0,0,R,M);try{for(N=C.getImageData(0,0,R,M),O=N.data,D=O.length,L=n.Util._hexToRgb(this.colorKey),j=0;jE?(O[j]=L.r,O[j+1]=L.g,O[j+2]=L.b,O[j+3]=255):O[j+3]=0;C.putImageData(N,0,0)}catch(G){n.Util.error("Unable to draw hit graph from cached scene canvas. "+G.message)}return this}hasPointerCapture(E){return a.hasPointerCapture(E,this)}setPointerCapture(E){a.setPointerCapture(E,this)}releaseCapture(E){a.releaseCapture(E,this)}}e.Shape=T,T.prototype._fillFunc=m,T.prototype._strokeFunc=S,T.prototype._fillFuncHit=y,T.prototype._strokeFuncHit=v,T.prototype._centroid=!1,T.prototype.nodeType="Shape",(0,s._registerNode)(T),T.prototype.eventListeners={},T.prototype.on.call(T.prototype,"shadowColorChange.konva shadowBlurChange.konva shadowOffsetChange.konva shadowOpacityChange.konva shadowEnabledChange.konva",g),T.prototype.on.call(T.prototype,"shadowColorChange.konva shadowOpacityChange.konva shadowEnabledChange.konva",b),T.prototype.on.call(T.prototype,"fillPriorityChange.konva fillPatternImageChange.konva fillPatternRepeatChange.konva fillPatternScaleXChange.konva fillPatternScaleYChange.konva fillPatternOffsetXChange.konva fillPatternOffsetYChange.konva fillPatternXChange.konva fillPatternYChange.konva fillPatternRotationChange.konva",_),T.prototype.on.call(T.prototype,"fillPriorityChange.konva fillLinearGradientColorStopsChange.konva fillLinearGradientStartPointXChange.konva fillLinearGradientStartPointYChange.konva fillLinearGradientEndPointXChange.konva fillLinearGradientEndPointYChange.konva",w),T.prototype.on.call(T.prototype,"fillPriorityChange.konva fillRadialGradientColorStopsChange.konva fillRadialGradientStartPointXChange.konva fillRadialGradientStartPointYChange.konva fillRadialGradientEndPointXChange.konva fillRadialGradientEndPointYChange.konva fillRadialGradientStartRadiusChange.konva fillRadialGradientEndRadiusChange.konva",x),r.Factory.addGetterSetter(T,"stroke",void 0,(0,o.getStringOrGradientValidator)()),r.Factory.addGetterSetter(T,"strokeWidth",2,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(T,"fillAfterStrokeEnabled",!1),r.Factory.addGetterSetter(T,"hitStrokeWidth","auto",(0,o.getNumberOrAutoValidator)()),r.Factory.addGetterSetter(T,"strokeHitEnabled",!0,(0,o.getBooleanValidator)()),r.Factory.addGetterSetter(T,"perfectDrawEnabled",!0,(0,o.getBooleanValidator)()),r.Factory.addGetterSetter(T,"shadowForStrokeEnabled",!0,(0,o.getBooleanValidator)()),r.Factory.addGetterSetter(T,"lineJoin"),r.Factory.addGetterSetter(T,"lineCap"),r.Factory.addGetterSetter(T,"sceneFunc"),r.Factory.addGetterSetter(T,"hitFunc"),r.Factory.addGetterSetter(T,"dash"),r.Factory.addGetterSetter(T,"dashOffset",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(T,"shadowColor",void 0,(0,o.getStringValidator)()),r.Factory.addGetterSetter(T,"shadowBlur",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(T,"shadowOpacity",1,(0,o.getNumberValidator)()),r.Factory.addComponentsGetterSetter(T,"shadowOffset",["x","y"]),r.Factory.addGetterSetter(T,"shadowOffsetX",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(T,"shadowOffsetY",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(T,"fillPatternImage"),r.Factory.addGetterSetter(T,"fill",void 0,(0,o.getStringOrGradientValidator)()),r.Factory.addGetterSetter(T,"fillPatternX",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(T,"fillPatternY",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(T,"fillLinearGradientColorStops"),r.Factory.addGetterSetter(T,"strokeLinearGradientColorStops"),r.Factory.addGetterSetter(T,"fillRadialGradientStartRadius",0),r.Factory.addGetterSetter(T,"fillRadialGradientEndRadius",0),r.Factory.addGetterSetter(T,"fillRadialGradientColorStops"),r.Factory.addGetterSetter(T,"fillPatternRepeat","repeat"),r.Factory.addGetterSetter(T,"fillEnabled",!0),r.Factory.addGetterSetter(T,"strokeEnabled",!0),r.Factory.addGetterSetter(T,"shadowEnabled",!0),r.Factory.addGetterSetter(T,"dashEnabled",!0),r.Factory.addGetterSetter(T,"strokeScaleEnabled",!0),r.Factory.addGetterSetter(T,"fillPriority","color"),r.Factory.addComponentsGetterSetter(T,"fillPatternOffset",["x","y"]),r.Factory.addGetterSetter(T,"fillPatternOffsetX",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(T,"fillPatternOffsetY",0,(0,o.getNumberValidator)()),r.Factory.addComponentsGetterSetter(T,"fillPatternScale",["x","y"]),r.Factory.addGetterSetter(T,"fillPatternScaleX",1,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(T,"fillPatternScaleY",1,(0,o.getNumberValidator)()),r.Factory.addComponentsGetterSetter(T,"fillLinearGradientStartPoint",["x","y"]),r.Factory.addComponentsGetterSetter(T,"strokeLinearGradientStartPoint",["x","y"]),r.Factory.addGetterSetter(T,"fillLinearGradientStartPointX",0),r.Factory.addGetterSetter(T,"strokeLinearGradientStartPointX",0),r.Factory.addGetterSetter(T,"fillLinearGradientStartPointY",0),r.Factory.addGetterSetter(T,"strokeLinearGradientStartPointY",0),r.Factory.addComponentsGetterSetter(T,"fillLinearGradientEndPoint",["x","y"]),r.Factory.addComponentsGetterSetter(T,"strokeLinearGradientEndPoint",["x","y"]),r.Factory.addGetterSetter(T,"fillLinearGradientEndPointX",0),r.Factory.addGetterSetter(T,"strokeLinearGradientEndPointX",0),r.Factory.addGetterSetter(T,"fillLinearGradientEndPointY",0),r.Factory.addGetterSetter(T,"strokeLinearGradientEndPointY",0),r.Factory.addComponentsGetterSetter(T,"fillRadialGradientStartPoint",["x","y"]),r.Factory.addGetterSetter(T,"fillRadialGradientStartPointX",0),r.Factory.addGetterSetter(T,"fillRadialGradientStartPointY",0),r.Factory.addComponentsGetterSetter(T,"fillRadialGradientEndPoint",["x","y"]),r.Factory.addGetterSetter(T,"fillRadialGradientEndPointX",0),r.Factory.addGetterSetter(T,"fillRadialGradientEndPointY",0),r.Factory.addGetterSetter(T,"fillPatternRotation",0),r.Factory.addGetterSetter(T,"fillRule",void 0,(0,o.getStringValidator)()),r.Factory.backCompat(T,{dashArray:"dash",getDashArray:"getDash",setDashArray:"getDash",drawFunc:"sceneFunc",getDrawFunc:"getSceneFunc",setDrawFunc:"setSceneFunc",drawHitFunc:"hitFunc",getDrawHitFunc:"getHitFunc",setDrawHitFunc:"setHitFunc"})})(on);Object.defineProperty(kh,"__esModule",{value:!0});kh.Layer=void 0;const go=Ot,qb=gl,Gl=wt,xC=Te,s6=_i,lde=de,ude=on,cde=Pe;var dde="#",fde="beforeDraw",hde="draw",pN=[{x:0,y:0},{x:-1,y:-1},{x:1,y:-1},{x:1,y:1},{x:-1,y:1}],pde=pN.length;class bc extends qb.Container{constructor(t){super(t),this.canvas=new s6.SceneCanvas,this.hitCanvas=new s6.HitCanvas({pixelRatio:1}),this._waitingForDraw=!1,this.on("visibleChange.konva",this._checkVisibility),this._checkVisibility(),this.on("imageSmoothingEnabledChange.konva",this._setSmoothEnabled),this._setSmoothEnabled()}createPNGStream(){return this.canvas._canvas.createPNGStream()}getCanvas(){return this.canvas}getNativeCanvasElement(){return this.canvas._canvas}getHitCanvas(){return this.hitCanvas}getContext(){return this.getCanvas().getContext()}clear(t){return this.getContext().clear(t),this.getHitCanvas().getContext().clear(t),this}setZIndex(t){super.setZIndex(t);var n=this.getStage();return n&&n.content&&(n.content.removeChild(this.getNativeCanvasElement()),t{this.draw(),this._waitingForDraw=!1})),this}getIntersection(t){if(!this.isListening()||!this.isVisible())return null;for(var n=1,r=!1;;){for(let i=0;i0)return{antialiased:!0};return{}}drawScene(t,n){var r=this.getLayer(),i=t||r&&r.getCanvas();return this._fire(fde,{node:this}),this.clearBeforeDraw()&&i.getContext().clear(),qb.Container.prototype.drawScene.call(this,i,n),this._fire(hde,{node:this}),this}drawHit(t,n){var r=this.getLayer(),i=t||r&&r.hitCanvas;return r&&r.clearBeforeDraw()&&r.getHitCanvas().getContext().clear(),qb.Container.prototype.drawHit.call(this,i,n),this}enableHitGraph(){return this.hitGraphEnabled(!0),this}disableHitGraph(){return this.hitGraphEnabled(!1),this}setHitGraphEnabled(t){go.Util.warn("hitGraphEnabled method is deprecated. Please use layer.listening() instead."),this.listening(t)}getHitGraphEnabled(t){return go.Util.warn("hitGraphEnabled method is deprecated. Please use layer.listening() instead."),this.listening()}toggleHitCanvas(){if(!(!this.parent||!this.parent.content)){var t=this.parent,n=!!this.hitCanvas._canvas.parentNode;n?t.content.removeChild(this.hitCanvas._canvas):t.content.appendChild(this.hitCanvas._canvas)}}destroy(){return go.Util.releaseCanvas(this.getNativeCanvasElement(),this.getHitCanvas()._canvas),super.destroy()}}kh.Layer=bc;bc.prototype.nodeType="Layer";(0,cde._registerNode)(bc);xC.Factory.addGetterSetter(bc,"imageSmoothingEnabled",!0);xC.Factory.addGetterSetter(bc,"clearBeforeDraw",!0);xC.Factory.addGetterSetter(bc,"hitGraphEnabled",!0,(0,lde.getBooleanValidator)());var uv={};Object.defineProperty(uv,"__esModule",{value:!0});uv.FastLayer=void 0;const gde=Ot,mde=kh,yde=Pe;class CC extends mde.Layer{constructor(t){super(t),this.listening(!1),gde.Util.warn('Konva.Fast layer is deprecated. Please use "new Konva.Layer({ listening: false })" instead.')}}uv.FastLayer=CC;CC.prototype.nodeType="FastLayer";(0,yde._registerNode)(CC);var Sc={};Object.defineProperty(Sc,"__esModule",{value:!0});Sc.Group=void 0;const vde=Ot,bde=gl,Sde=Pe;class TC extends bde.Container{_validateAdd(t){var n=t.getType();n!=="Group"&&n!=="Shape"&&vde.Util.throw("You may only add groups and shapes to groups.")}}Sc.Group=TC;TC.prototype.nodeType="Group";(0,Sde._registerNode)(TC);var _c={};Object.defineProperty(_c,"__esModule",{value:!0});_c.Animation=void 0;const Wb=Pe,a6=Ot;var Kb=function(){return Wb.glob.performance&&Wb.glob.performance.now?function(){return Wb.glob.performance.now()}:function(){return new Date().getTime()}}();class Gi{constructor(t,n){this.id=Gi.animIdCounter++,this.frame={time:0,timeDiff:0,lastTime:Kb(),frameRate:0},this.func=t,this.setLayers(n)}setLayers(t){var n=[];return t?t.length>0?n=t:n=[t]:n=[],this.layers=n,this}getLayers(){return this.layers}addLayer(t){var n=this.layers,r=n.length,i;for(i=0;ithis.duration?this.yoyo?(this._time=this.duration,this.reverse()):this.finish():p<0?this.yoyo?(this._time=0,this.play()):this.reset():(this._time=p,this.update())}getTime(){return this._time}setPosition(p){this.prevPos=this._pos,this.propFunc(p),this._pos=p}getPosition(p){return p===void 0&&(p=this._time),this.func(p,this.begin,this._change,this.duration)}play(){this.state=a,this._startTime=this.getTimer()-this._time,this.onEnterFrame(),this.fire("onPlay")}reverse(){this.state=l,this._time=this.duration-this._time,this._startTime=this.getTimer()-this._time,this.onEnterFrame(),this.fire("onReverse")}seek(p){this.pause(),this._time=p,this.update(),this.fire("onSeek")}reset(){this.pause(),this._time=0,this.update(),this.fire("onReset")}finish(){this.pause(),this._time=this.duration,this.update(),this.fire("onFinish")}update(){this.setPosition(this.getPosition(this._time)),this.fire("onUpdate")}onEnterFrame(){var p=this.getTimer()-this._startTime;this.state===a?this.setTime(p):this.state===l&&this.setTime(this.duration-p)}pause(){this.state=s,this.fire("onPause")}getTimer(){return new Date().getTime()}}class f{constructor(p){var m=this,S=p.node,y=S._id,v,g=p.easing||e.Easings.Linear,b=!!p.yoyo,_;typeof p.duration>"u"?v=.3:p.duration===0?v=.001:v=p.duration,this.node=S,this._id=u++;var w=S.getLayer()||(S instanceof i.Konva.Stage?S.getLayers():null);w||t.Util.error("Tween constructor have `node` that is not in a layer. Please add node into layer first."),this.anim=new n.Animation(function(){m.tween.onEnterFrame()},w),this.tween=new d(_,function(x){m._tweenFunc(x)},g,0,1,v*1e3,b),this._addListeners(),f.attrs[y]||(f.attrs[y]={}),f.attrs[y][this._id]||(f.attrs[y][this._id]={}),f.tweens[y]||(f.tweens[y]={});for(_ in p)o[_]===void 0&&this._addAttr(_,p[_]);this.reset(),this.onFinish=p.onFinish,this.onReset=p.onReset,this.onUpdate=p.onUpdate}_addAttr(p,m){var S=this.node,y=S._id,v,g,b,_,w,x,T,P;if(b=f.tweens[y][p],b&&delete f.attrs[y][b][p],v=S.getAttr(p),t.Util._isArray(m))if(g=[],w=Math.max(m.length,v.length),p==="points"&&m.length!==v.length&&(m.length>v.length?(T=v,v=t.Util._prepareArrayForTween(v,m,S.closed())):(x=m,m=t.Util._prepareArrayForTween(m,v,S.closed()))),p.indexOf("fill")===0)for(_=0;_{this.anim.start()},this.tween.onReverse=()=>{this.anim.start()},this.tween.onPause=()=>{this.anim.stop()},this.tween.onFinish=()=>{var p=this.node,m=f.attrs[p._id][this._id];m.points&&m.points.trueEnd&&p.setAttr("points",m.points.trueEnd),this.onFinish&&this.onFinish.call(this)},this.tween.onReset=()=>{var p=this.node,m=f.attrs[p._id][this._id];m.points&&m.points.trueStart&&p.points(m.points.trueStart),this.onReset&&this.onReset()},this.tween.onUpdate=()=>{this.onUpdate&&this.onUpdate.call(this)}}play(){return this.tween.play(),this}reverse(){return this.tween.reverse(),this}reset(){return this.tween.reset(),this}seek(p){return this.tween.seek(p*1e3),this}pause(){return this.tween.pause(),this}finish(){return this.tween.finish(),this}destroy(){var p=this.node._id,m=this._id,S=f.tweens[p],y;this.pause();for(y in S)delete f.tweens[p][y];delete f.attrs[p][m]}}e.Tween=f,f.attrs={},f.tweens={},r.Node.prototype.to=function(h){var p=h.onFinish;h.node=this,h.onFinish=function(){this.destroy(),p&&p()};var m=new f(h);m.play()},e.Easings={BackEaseIn(h,p,m,S){var y=1.70158;return m*(h/=S)*h*((y+1)*h-y)+p},BackEaseOut(h,p,m,S){var y=1.70158;return m*((h=h/S-1)*h*((y+1)*h+y)+1)+p},BackEaseInOut(h,p,m,S){var y=1.70158;return(h/=S/2)<1?m/2*(h*h*(((y*=1.525)+1)*h-y))+p:m/2*((h-=2)*h*(((y*=1.525)+1)*h+y)+2)+p},ElasticEaseIn(h,p,m,S,y,v){var g=0;return h===0?p:(h/=S)===1?p+m:(v||(v=S*.3),!y||y0?t:n),c=s*n,d=a*(a>0?t:n),f=l*(l>0?n:t);return{x:u,y:r?-1*f:d,width:c-u,height:f-d}}}cv.Arc=Yo;Yo.prototype._centroid=!0;Yo.prototype.className="Arc";Yo.prototype._attrsAffectingSize=["innerRadius","outerRadius"];(0,wde._registerNode)(Yo);dv.Factory.addGetterSetter(Yo,"innerRadius",0,(0,fv.getNumberValidator)());dv.Factory.addGetterSetter(Yo,"outerRadius",0,(0,fv.getNumberValidator)());dv.Factory.addGetterSetter(Yo,"angle",0,(0,fv.getNumberValidator)());dv.Factory.addGetterSetter(Yo,"clockwise",!1,(0,fv.getBooleanValidator)());var hv={},Rh={};Object.defineProperty(Rh,"__esModule",{value:!0});Rh.Line=void 0;const pv=Te,xde=on,mN=de,Cde=Pe;function b2(e,t,n,r,i,o,s){var a=Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2)),l=Math.sqrt(Math.pow(i-n,2)+Math.pow(o-r,2)),u=s*a/(a+l),c=s*l/(a+l),d=n-u*(i-e),f=r-u*(o-t),h=n+c*(i-e),p=r+c*(o-t);return[d,f,h,p]}function u6(e,t){var n=e.length,r=[],i,o;for(i=2;i4){for(a=this.getTensionPoints(),l=a.length,u=o?0:4,o||t.quadraticCurveTo(a[0],a[1],a[2],a[3]);u{let u,c,d;u=l/2,c=0;for(let h=0;h<20;h++)d=u*e.tValues[20][h]+u,c+=e.cValues[20][h]*r(s,a,d);return u*c};e.getCubicArcLength=t;const n=(s,a,l)=>{l===void 0&&(l=1);const u=s[0]-2*s[1]+s[2],c=a[0]-2*a[1]+a[2],d=2*s[1]-2*s[0],f=2*a[1]-2*a[0],h=4*(u*u+c*c),p=4*(u*d+c*f),m=d*d+f*f;if(h===0)return l*Math.sqrt(Math.pow(s[2]-s[0],2)+Math.pow(a[2]-a[0],2));const S=p/(2*h),y=m/h,v=l+S,g=y-S*S,b=v*v+g>0?Math.sqrt(v*v+g):0,_=S*S+g>0?Math.sqrt(S*S+g):0,w=S+Math.sqrt(S*S+g)!==0?g*Math.log(Math.abs((v+b)/(S+_))):0;return Math.sqrt(h)/2*(v*b-S*_+w)};e.getQuadraticArcLength=n;function r(s,a,l){const u=i(1,l,s),c=i(1,l,a),d=u*u+c*c;return Math.sqrt(d)}const i=(s,a,l)=>{const u=l.length-1;let c,d;if(u===0)return 0;if(s===0){d=0;for(let f=0;f<=u;f++)d+=e.binomialCoefficients[u][f]*Math.pow(1-a,u-f)*Math.pow(a,f)*l[f];return d}else{c=new Array(u);for(let f=0;f{let u=1,c=s/a,d=(s-l(c))/a,f=0;for(;u>.001;){const h=l(c+d),p=Math.abs(s-h)/a;if(p500)break}return c};e.t2length=o})(yN);Object.defineProperty(wc,"__esModule",{value:!0});wc.Path=void 0;const Tde=Te,Ede=on,Pde=Pe,Hl=yN;class Zt extends Ede.Shape{constructor(t){super(t),this.dataArray=[],this.pathLength=0,this._readDataAttribute(),this.on("dataChange.konva",function(){this._readDataAttribute()})}_readDataAttribute(){this.dataArray=Zt.parsePathData(this.data()),this.pathLength=Zt.getPathLength(this.dataArray)}_sceneFunc(t){var n=this.dataArray;t.beginPath();for(var r=!1,i=0;ic?u:c,S=u>c?1:u/c,y=u>c?c/u:1;t.translate(a,l),t.rotate(h),t.scale(S,y),t.arc(0,0,m,d,d+f,1-p),t.scale(1/S,1/y),t.rotate(-h),t.translate(-a,-l);break;case"z":r=!0,t.closePath();break}}!r&&!this.hasFill()?t.strokeShape(this):t.fillStrokeShape(this)}getSelfRect(){var t=[];this.dataArray.forEach(function(u){if(u.command==="A"){var c=u.points[4],d=u.points[5],f=u.points[4]+d,h=Math.PI/180;if(Math.abs(c-f)f;p-=h){const m=Zt.getPointOnEllipticalArc(u.points[0],u.points[1],u.points[2],u.points[3],p,0);t.push(m.x,m.y)}else for(let p=c+h;pn[i].pathLength;)t-=n[i].pathLength,++i;if(i===o)return r=n[i-1].points.slice(-2),{x:r[0],y:r[1]};if(t<.01)return r=n[i].points.slice(0,2),{x:r[0],y:r[1]};var s=n[i],a=s.points;switch(s.command){case"L":return Zt.getPointOnLine(t,s.start.x,s.start.y,a[0],a[1]);case"C":return Zt.getPointOnCubicBezier((0,Hl.t2length)(t,Zt.getPathLength(n),m=>(0,Hl.getCubicArcLength)([s.start.x,a[0],a[2],a[4]],[s.start.y,a[1],a[3],a[5]],m)),s.start.x,s.start.y,a[0],a[1],a[2],a[3],a[4],a[5]);case"Q":return Zt.getPointOnQuadraticBezier((0,Hl.t2length)(t,Zt.getPathLength(n),m=>(0,Hl.getQuadraticArcLength)([s.start.x,a[0],a[2]],[s.start.y,a[1],a[3]],m)),s.start.x,s.start.y,a[0],a[1],a[2],a[3]);case"A":var l=a[0],u=a[1],c=a[2],d=a[3],f=a[4],h=a[5],p=a[6];return f+=h*t/s.pathLength,Zt.getPointOnEllipticalArc(l,u,c,d,f,p)}return null}static getPointOnLine(t,n,r,i,o,s,a){s===void 0&&(s=n),a===void 0&&(a=r);var l=(o-r)/(i-n+1e-8),u=Math.sqrt(t*t/(1+l*l));i0&&!isNaN(p[0]);){var v=null,g=[],b=l,_=u,w,x,T,P,E,A,$,I,C,R;switch(h){case"l":l+=p.shift(),u+=p.shift(),v="L",g.push(l,u);break;case"L":l=p.shift(),u=p.shift(),g.push(l,u);break;case"m":var M=p.shift(),N=p.shift();if(l+=M,u+=N,v="M",s.length>2&&s[s.length-1].command==="z"){for(var O=s.length-2;O>=0;O--)if(s[O].command==="M"){l=s[O].points[0]+M,u=s[O].points[1]+N;break}}g.push(l,u),h="l";break;case"M":l=p.shift(),u=p.shift(),v="M",g.push(l,u),h="L";break;case"h":l+=p.shift(),v="L",g.push(l,u);break;case"H":l=p.shift(),v="L",g.push(l,u);break;case"v":u+=p.shift(),v="L",g.push(l,u);break;case"V":u=p.shift(),v="L",g.push(l,u);break;case"C":g.push(p.shift(),p.shift(),p.shift(),p.shift()),l=p.shift(),u=p.shift(),g.push(l,u);break;case"c":g.push(l+p.shift(),u+p.shift(),l+p.shift(),u+p.shift()),l+=p.shift(),u+=p.shift(),v="C",g.push(l,u);break;case"S":x=l,T=u,w=s[s.length-1],w.command==="C"&&(x=l+(l-w.points[2]),T=u+(u-w.points[3])),g.push(x,T,p.shift(),p.shift()),l=p.shift(),u=p.shift(),v="C",g.push(l,u);break;case"s":x=l,T=u,w=s[s.length-1],w.command==="C"&&(x=l+(l-w.points[2]),T=u+(u-w.points[3])),g.push(x,T,l+p.shift(),u+p.shift()),l+=p.shift(),u+=p.shift(),v="C",g.push(l,u);break;case"Q":g.push(p.shift(),p.shift()),l=p.shift(),u=p.shift(),g.push(l,u);break;case"q":g.push(l+p.shift(),u+p.shift()),l+=p.shift(),u+=p.shift(),v="Q",g.push(l,u);break;case"T":x=l,T=u,w=s[s.length-1],w.command==="Q"&&(x=l+(l-w.points[0]),T=u+(u-w.points[1])),l=p.shift(),u=p.shift(),v="Q",g.push(x,T,l,u);break;case"t":x=l,T=u,w=s[s.length-1],w.command==="Q"&&(x=l+(l-w.points[0]),T=u+(u-w.points[1])),l+=p.shift(),u+=p.shift(),v="Q",g.push(x,T,l,u);break;case"A":P=p.shift(),E=p.shift(),A=p.shift(),$=p.shift(),I=p.shift(),C=l,R=u,l=p.shift(),u=p.shift(),v="A",g=this.convertEndpointToCenterParameterization(C,R,l,u,$,I,P,E,A);break;case"a":P=p.shift(),E=p.shift(),A=p.shift(),$=p.shift(),I=p.shift(),C=l,R=u,l+=p.shift(),u+=p.shift(),v="A",g=this.convertEndpointToCenterParameterization(C,R,l,u,$,I,P,E,A);break}s.push({command:v||h,points:g,start:{x:b,y:_},pathLength:this.calcLength(b,_,v||h,g)})}(h==="z"||h==="Z")&&s.push({command:"z",points:[],start:void 0,pathLength:0})}return s}static calcLength(t,n,r,i){var o,s,a,l,u=Zt;switch(r){case"L":return u.getLineLength(t,n,i[0],i[1]);case"C":return(0,Hl.getCubicArcLength)([t,i[0],i[2],i[4]],[n,i[1],i[3],i[5]],1);case"Q":return(0,Hl.getQuadraticArcLength)([t,i[0],i[2]],[n,i[1],i[3]],1);case"A":o=0;var c=i[4],d=i[5],f=i[4]+d,h=Math.PI/180;if(Math.abs(c-f)f;l-=h)a=u.getPointOnEllipticalArc(i[0],i[1],i[2],i[3],l,0),o+=u.getLineLength(s.x,s.y,a.x,a.y),s=a;else for(l=c+h;l1&&(a*=Math.sqrt(h),l*=Math.sqrt(h));var p=Math.sqrt((a*a*(l*l)-a*a*(f*f)-l*l*(d*d))/(a*a*(f*f)+l*l*(d*d)));o===s&&(p*=-1),isNaN(p)&&(p=0);var m=p*a*f/l,S=p*-l*d/a,y=(t+r)/2+Math.cos(c)*m-Math.sin(c)*S,v=(n+i)/2+Math.sin(c)*m+Math.cos(c)*S,g=function(E){return Math.sqrt(E[0]*E[0]+E[1]*E[1])},b=function(E,A){return(E[0]*A[0]+E[1]*A[1])/(g(E)*g(A))},_=function(E,A){return(E[0]*A[1]=1&&(P=0),s===0&&P>0&&(P=P-2*Math.PI),s===1&&P<0&&(P=P+2*Math.PI),[y,v,a,l,w,P,c,s]}}wc.Path=Zt;Zt.prototype.className="Path";Zt.prototype._attrsAffectingSize=["data"];(0,Pde._registerNode)(Zt);Tde.Factory.addGetterSetter(Zt,"data");Object.defineProperty(hv,"__esModule",{value:!0});hv.Arrow=void 0;const gv=Te,Ade=Rh,vN=de,kde=Pe,c6=wc;class yl extends Ade.Line{_sceneFunc(t){super._sceneFunc(t);var n=Math.PI*2,r=this.points(),i=r,o=this.tension()!==0&&r.length>4;o&&(i=this.getTensionPoints());var s=this.pointerLength(),a=r.length,l,u;if(o){const f=[i[i.length-4],i[i.length-3],i[i.length-2],i[i.length-1],r[a-2],r[a-1]],h=c6.Path.calcLength(i[i.length-4],i[i.length-3],"C",f),p=c6.Path.getPointOnQuadraticBezier(Math.min(1,1-s/h),f[0],f[1],f[2],f[3],f[4],f[5]);l=r[a-2]-p.x,u=r[a-1]-p.y}else l=r[a-2]-r[a-4],u=r[a-1]-r[a-3];var c=(Math.atan2(u,l)+n)%n,d=this.pointerWidth();this.pointerAtEnding()&&(t.save(),t.beginPath(),t.translate(r[a-2],r[a-1]),t.rotate(c),t.moveTo(0,0),t.lineTo(-s,d/2),t.lineTo(-s,-d/2),t.closePath(),t.restore(),this.__fillStroke(t)),this.pointerAtBeginning()&&(t.save(),t.beginPath(),t.translate(r[0],r[1]),o?(l=(i[0]+i[2])/2-r[0],u=(i[1]+i[3])/2-r[1]):(l=r[2]-r[0],u=r[3]-r[1]),t.rotate((Math.atan2(-u,-l)+n)%n),t.moveTo(0,0),t.lineTo(-s,d/2),t.lineTo(-s,-d/2),t.closePath(),t.restore(),this.__fillStroke(t))}__fillStroke(t){var n=this.dashEnabled();n&&(this.attrs.dashEnabled=!1,t.setLineDash([])),t.fillStrokeShape(this),n&&(this.attrs.dashEnabled=!0)}getSelfRect(){const t=super.getSelfRect(),n=this.pointerWidth()/2;return{x:t.x-n,y:t.y-n,width:t.width+n*2,height:t.height+n*2}}}hv.Arrow=yl;yl.prototype.className="Arrow";(0,kde._registerNode)(yl);gv.Factory.addGetterSetter(yl,"pointerLength",10,(0,vN.getNumberValidator)());gv.Factory.addGetterSetter(yl,"pointerWidth",10,(0,vN.getNumberValidator)());gv.Factory.addGetterSetter(yl,"pointerAtBeginning",!1);gv.Factory.addGetterSetter(yl,"pointerAtEnding",!0);var mv={};Object.defineProperty(mv,"__esModule",{value:!0});mv.Circle=void 0;const Rde=Te,Ode=on,Mde=de,Ide=Pe;let xc=class extends Ode.Shape{_sceneFunc(t){t.beginPath(),t.arc(0,0,this.attrs.radius||0,0,Math.PI*2,!1),t.closePath(),t.fillStrokeShape(this)}getWidth(){return this.radius()*2}getHeight(){return this.radius()*2}setWidth(t){this.radius()!==t/2&&this.radius(t/2)}setHeight(t){this.radius()!==t/2&&this.radius(t/2)}};mv.Circle=xc;xc.prototype._centroid=!0;xc.prototype.className="Circle";xc.prototype._attrsAffectingSize=["radius"];(0,Ide._registerNode)(xc);Rde.Factory.addGetterSetter(xc,"radius",0,(0,Mde.getNumberValidator)());var yv={};Object.defineProperty(yv,"__esModule",{value:!0});yv.Ellipse=void 0;const EC=Te,Nde=on,bN=de,Dde=Pe;class sa extends Nde.Shape{_sceneFunc(t){var n=this.radiusX(),r=this.radiusY();t.beginPath(),t.save(),n!==r&&t.scale(1,r/n),t.arc(0,0,n,0,Math.PI*2,!1),t.restore(),t.closePath(),t.fillStrokeShape(this)}getWidth(){return this.radiusX()*2}getHeight(){return this.radiusY()*2}setWidth(t){this.radiusX(t/2)}setHeight(t){this.radiusY(t/2)}}yv.Ellipse=sa;sa.prototype.className="Ellipse";sa.prototype._centroid=!0;sa.prototype._attrsAffectingSize=["radiusX","radiusY"];(0,Dde._registerNode)(sa);EC.Factory.addComponentsGetterSetter(sa,"radius",["x","y"]);EC.Factory.addGetterSetter(sa,"radiusX",0,(0,bN.getNumberValidator)());EC.Factory.addGetterSetter(sa,"radiusY",0,(0,bN.getNumberValidator)());var vv={};Object.defineProperty(vv,"__esModule",{value:!0});vv.Image=void 0;const Xb=Ot,vl=Te,Lde=on,$de=Pe,Oh=de;let ao=class SN extends Lde.Shape{constructor(t){super(t),this.on("imageChange.konva",()=>{this._setImageLoad()}),this._setImageLoad()}_setImageLoad(){const t=this.image();t&&t.complete||t&&t.readyState===4||t&&t.addEventListener&&t.addEventListener("load",()=>{this._requestDraw()})}_useBufferCanvas(){return super._useBufferCanvas(!0)}_sceneFunc(t){const n=this.getWidth(),r=this.getHeight(),i=this.cornerRadius(),o=this.attrs.image;let s;if(o){const a=this.attrs.cropWidth,l=this.attrs.cropHeight;a&&l?s=[o,this.cropX(),this.cropY(),a,l,0,0,n,r]:s=[o,0,0,n,r]}(this.hasFill()||this.hasStroke()||i)&&(t.beginPath(),i?Xb.Util.drawRoundedRectPath(t,n,r,i):t.rect(0,0,n,r),t.closePath(),t.fillStrokeShape(this)),o&&(i&&t.clip(),t.drawImage.apply(t,s))}_hitFunc(t){var n=this.width(),r=this.height(),i=this.cornerRadius();t.beginPath(),i?Xb.Util.drawRoundedRectPath(t,n,r,i):t.rect(0,0,n,r),t.closePath(),t.fillStrokeShape(this)}getWidth(){var t,n;return(t=this.attrs.width)!==null&&t!==void 0?t:(n=this.image())===null||n===void 0?void 0:n.width}getHeight(){var t,n;return(t=this.attrs.height)!==null&&t!==void 0?t:(n=this.image())===null||n===void 0?void 0:n.height}static fromURL(t,n,r=null){var i=Xb.Util.createImageElement();i.onload=function(){var o=new SN({image:i});n(o)},i.onerror=r,i.crossOrigin="Anonymous",i.src=t}};vv.Image=ao;ao.prototype.className="Image";(0,$de._registerNode)(ao);vl.Factory.addGetterSetter(ao,"cornerRadius",0,(0,Oh.getNumberOrArrayOfNumbersValidator)(4));vl.Factory.addGetterSetter(ao,"image");vl.Factory.addComponentsGetterSetter(ao,"crop",["x","y","width","height"]);vl.Factory.addGetterSetter(ao,"cropX",0,(0,Oh.getNumberValidator)());vl.Factory.addGetterSetter(ao,"cropY",0,(0,Oh.getNumberValidator)());vl.Factory.addGetterSetter(ao,"cropWidth",0,(0,Oh.getNumberValidator)());vl.Factory.addGetterSetter(ao,"cropHeight",0,(0,Oh.getNumberValidator)());var sc={};Object.defineProperty(sc,"__esModule",{value:!0});sc.Tag=sc.Label=void 0;const bv=Te,Fde=on,Bde=Sc,PC=de,_N=Pe;var wN=["fontFamily","fontSize","fontStyle","padding","lineHeight","text","width","height","pointerDirection","pointerWidth","pointerHeight"],jde="Change.konva",Vde="none",S2="up",_2="right",w2="down",x2="left",zde=wN.length;class AC extends Bde.Group{constructor(t){super(t),this.on("add.konva",function(n){this._addListeners(n.child),this._sync()})}getText(){return this.find("Text")[0]}getTag(){return this.find("Tag")[0]}_addListeners(t){var n=this,r,i=function(){n._sync()};for(r=0;r{n=Math.min(n,s.x),r=Math.max(r,s.x),i=Math.min(i,s.y),o=Math.max(o,s.y)}),{x:n,y:i,width:r-n,height:o-i}}getWidth(){return this.radius()*2}getHeight(){return this.radius()*2}setWidth(t){this.radius(t/2)}setHeight(t){this.radius(t/2)}}_v.RegularPolygon=Sl;Sl.prototype.className="RegularPolygon";Sl.prototype._centroid=!0;Sl.prototype._attrsAffectingSize=["radius"];(0,Xde._registerNode)(Sl);xN.Factory.addGetterSetter(Sl,"radius",0,(0,CN.getNumberValidator)());xN.Factory.addGetterSetter(Sl,"sides",0,(0,CN.getNumberValidator)());var wv={};Object.defineProperty(wv,"__esModule",{value:!0});wv.Ring=void 0;const TN=Te,Yde=on,EN=de,Qde=Pe;var d6=Math.PI*2;class _l extends Yde.Shape{_sceneFunc(t){t.beginPath(),t.arc(0,0,this.innerRadius(),0,d6,!1),t.moveTo(this.outerRadius(),0),t.arc(0,0,this.outerRadius(),d6,0,!0),t.closePath(),t.fillStrokeShape(this)}getWidth(){return this.outerRadius()*2}getHeight(){return this.outerRadius()*2}setWidth(t){this.outerRadius(t/2)}setHeight(t){this.outerRadius(t/2)}}wv.Ring=_l;_l.prototype.className="Ring";_l.prototype._centroid=!0;_l.prototype._attrsAffectingSize=["innerRadius","outerRadius"];(0,Qde._registerNode)(_l);TN.Factory.addGetterSetter(_l,"innerRadius",0,(0,EN.getNumberValidator)());TN.Factory.addGetterSetter(_l,"outerRadius",0,(0,EN.getNumberValidator)());var xv={};Object.defineProperty(xv,"__esModule",{value:!0});xv.Sprite=void 0;const wl=Te,Zde=on,Jde=_c,PN=de,efe=Pe;class lo extends Zde.Shape{constructor(t){super(t),this._updated=!0,this.anim=new Jde.Animation(()=>{var n=this._updated;return this._updated=!1,n}),this.on("animationChange.konva",function(){this.frameIndex(0)}),this.on("frameIndexChange.konva",function(){this._updated=!0}),this.on("frameRateChange.konva",function(){this.anim.isRunning()&&(clearInterval(this.interval),this._setInterval())})}_sceneFunc(t){var n=this.animation(),r=this.frameIndex(),i=r*4,o=this.animations()[n],s=this.frameOffsets(),a=o[i+0],l=o[i+1],u=o[i+2],c=o[i+3],d=this.image();if((this.hasFill()||this.hasStroke())&&(t.beginPath(),t.rect(0,0,u,c),t.closePath(),t.fillStrokeShape(this)),d)if(s){var f=s[n],h=r*2;t.drawImage(d,a,l,u,c,f[h+0],f[h+1],u,c)}else t.drawImage(d,a,l,u,c,0,0,u,c)}_hitFunc(t){var n=this.animation(),r=this.frameIndex(),i=r*4,o=this.animations()[n],s=this.frameOffsets(),a=o[i+2],l=o[i+3];if(t.beginPath(),s){var u=s[n],c=r*2;t.rect(u[c+0],u[c+1],a,l)}else t.rect(0,0,a,l);t.closePath(),t.fillShape(this)}_useBufferCanvas(){return super._useBufferCanvas(!0)}_setInterval(){var t=this;this.interval=setInterval(function(){t._updateIndex()},1e3/this.frameRate())}start(){if(!this.isRunning()){var t=this.getLayer();this.anim.setLayers(t),this._setInterval(),this.anim.start()}}stop(){this.anim.stop(),clearInterval(this.interval)}isRunning(){return this.anim.isRunning()}_updateIndex(){var t=this.frameIndex(),n=this.animation(),r=this.animations(),i=r[n],o=i.length/4;t{t=t.trim();const n=t.indexOf(" ")>=0,r=t.indexOf('"')>=0||t.indexOf("'")>=0;return n&&!r&&(t=`"${t}"`),t}).join(", ")}var Fp;function Qb(){return Fp||(Fp=C2.Util.createCanvasElement().getContext(afe),Fp)}function vfe(e){e.fillText(this._partialText,this._partialTextX,this._partialTextY)}function bfe(e){e.setAttr("miterLimit",2),e.strokeText(this._partialText,this._partialTextX,this._partialTextY)}function Sfe(e){return e=e||{},!e.fillLinearGradientColorStops&&!e.fillRadialGradientColorStops&&!e.fillPatternImage&&(e.fill=e.fill||"black"),e}class zt extends rfe.Shape{constructor(t){super(Sfe(t)),this._partialTextX=0,this._partialTextY=0;for(var n=0;n1&&(y+=s)}}}_hitFunc(t){var n=this.getWidth(),r=this.getHeight();t.beginPath(),t.rect(0,0,n,r),t.closePath(),t.fillStrokeShape(this)}setText(t){var n=C2.Util._isString(t)?t:t==null?"":t+"";return this._setAttr(lfe,n),this}getWidth(){var t=this.attrs.width===ql||this.attrs.width===void 0;return t?this.getTextWidth()+this.padding()*2:this.attrs.width}getHeight(){var t=this.attrs.height===ql||this.attrs.height===void 0;return t?this.fontSize()*this.textArr.length*this.lineHeight()+this.padding()*2:this.attrs.height}getTextWidth(){return this.textWidth}getTextHeight(){return C2.Util.warn("text.getTextHeight() method is deprecated. Use text.height() - for full height and text.fontSize() - for one line height."),this.textHeight}measureSize(t){var n=Qb(),r=this.fontSize(),i;return n.save(),n.font=this._getContextFont(),i=n.measureText(t),n.restore(),{width:i.width,height:r}}_getContextFont(){return this.fontStyle()+$p+this.fontVariant()+$p+(this.fontSize()+ffe)+yfe(this.fontFamily())}_addTextLine(t){this.align()===Jc&&(t=t.trim());var r=this._getTextWidth(t);return this.textArr.push({text:t,width:r,lastInParagraph:!1})}_getTextWidth(t){var n=this.letterSpacing(),r=t.length;return Qb().measureText(t).width+(r?n*(r-1):0)}_setTextData(){var t=this.text().split(` -`),n=+this.fontSize(),r=0,i=this.lineHeight()*n,o=this.attrs.width,s=this.attrs.height,a=o!==ql&&o!==void 0,l=s!==ql&&s!==void 0,u=this.padding(),c=o-u*2,d=s-u*2,f=0,h=this.wrap(),p=h!==p6,m=h!==gfe&&p,S=this.ellipsis();this.textArr=[],Qb().font=this._getContextFont();for(var y=S?this._getTextWidth(Yb):0,v=0,g=t.length;vc)for(;b.length>0;){for(var w=0,x=b.length,T="",P=0;w>>1,A=b.slice(0,E+1),$=this._getTextWidth(A)+y;$<=c?(w=E+1,T=A,P=$):x=E}if(T){if(m){var I,C=b[T.length],R=C===$p||C===f6;R&&P<=c?I=T.length:I=Math.max(T.lastIndexOf($p),T.lastIndexOf(f6))+1,I>0&&(w=I,T=T.slice(0,w),P=this._getTextWidth(T))}T=T.trimRight(),this._addTextLine(T),r=Math.max(r,P),f+=i;var M=this._shouldHandleEllipsis(f);if(M){this._tryToAddEllipsisToLastLine();break}if(b=b.slice(w),b=b.trimLeft(),b.length>0&&(_=this._getTextWidth(b),_<=c)){this._addTextLine(b),f+=i,r=Math.max(r,_);break}}else break}else this._addTextLine(b),f+=i,r=Math.max(r,_),this._shouldHandleEllipsis(f)&&vd)break}this.textHeight=n,this.textWidth=r}_shouldHandleEllipsis(t){var n=+this.fontSize(),r=this.lineHeight()*n,i=this.attrs.height,o=i!==ql&&i!==void 0,s=this.padding(),a=i-s*2,l=this.wrap(),u=l!==p6;return!u||o&&t+r>a}_tryToAddEllipsisToLastLine(){var t=this.attrs.width,n=t!==ql&&t!==void 0,r=this.padding(),i=t-r*2,o=this.ellipsis(),s=this.textArr[this.textArr.length-1];if(!(!s||!o)){if(n){var a=this._getTextWidth(s.text+Yb)n?null:ed.Path.getPointAtLengthOfDataArray(t,this.dataArray)}_readDataAttribute(){this.dataArray=ed.Path.parsePathData(this.attrs.data),this.pathLength=this._getTextPathLength()}_sceneFunc(t){t.setAttr("font",this._getContextFont()),t.setAttr("textBaseline",this.textBaseline()),t.setAttr("textAlign","left"),t.save();var n=this.textDecoration(),r=this.fill(),i=this.fontSize(),o=this.glyphInfo;n==="underline"&&t.beginPath();for(var s=0;s=1){var r=n[0].p0;t.moveTo(r.x,r.y)}for(var i=0;ie+`.${LN}`).join(" "),y6="nodesRect",Afe=["widthChange","heightChange","scaleXChange","scaleYChange","skewXChange","skewYChange","rotationChange","offsetXChange","offsetYChange","transformsEnabledChange","strokeWidthChange"],kfe={"top-left":-45,"top-center":0,"top-right":45,"middle-right":-90,"middle-left":90,"bottom-left":-135,"bottom-center":180,"bottom-right":135};const Rfe="ontouchstart"in si.Konva._global;function Ofe(e,t){if(e==="rotater")return"crosshair";t+=Je.Util.degToRad(kfe[e]||0);var n=(Je.Util.radToDeg(t)%360+360)%360;return Je.Util._inRange(n,315+22.5,360)||Je.Util._inRange(n,0,22.5)?"ns-resize":Je.Util._inRange(n,45-22.5,45+22.5)?"nesw-resize":Je.Util._inRange(n,90-22.5,90+22.5)?"ew-resize":Je.Util._inRange(n,135-22.5,135+22.5)?"nwse-resize":Je.Util._inRange(n,180-22.5,180+22.5)?"ns-resize":Je.Util._inRange(n,225-22.5,225+22.5)?"nesw-resize":Je.Util._inRange(n,270-22.5,270+22.5)?"ew-resize":Je.Util._inRange(n,315-22.5,315+22.5)?"nwse-resize":(Je.Util.error("Transformer has unknown angle for cursor detection: "+n),"pointer")}var Zm=["top-left","top-center","top-right","middle-right","middle-left","bottom-left","bottom-center","bottom-right"],v6=1e8;function Mfe(e){return{x:e.x+e.width/2*Math.cos(e.rotation)+e.height/2*Math.sin(-e.rotation),y:e.y+e.height/2*Math.cos(e.rotation)+e.width/2*Math.sin(e.rotation)}}function $N(e,t,n){const r=n.x+(e.x-n.x)*Math.cos(t)-(e.y-n.y)*Math.sin(t),i=n.y+(e.x-n.x)*Math.sin(t)+(e.y-n.y)*Math.cos(t);return Object.assign(Object.assign({},e),{rotation:e.rotation+t,x:r,y:i})}function Ife(e,t){const n=Mfe(e);return $N(e,t,n)}function Nfe(e,t,n){let r=t;for(let i=0;ii.isAncestorOf(this)?(Je.Util.error("Konva.Transformer cannot be an a child of the node you are trying to attach"),!1):!0);this._nodes=t=n,t.length===1&&this.useSingleNodeRotation()?this.rotation(t[0].getAbsoluteRotation()):this.rotation(0),this._nodes.forEach(i=>{const o=()=>{this.nodes().length===1&&this.useSingleNodeRotation()&&this.rotation(this.nodes()[0].getAbsoluteRotation()),this._resetTransformCache(),!this._transforming&&!this.isDragging()&&this.update()},s=i._attrsAffectingSize.map(a=>a+"Change."+this._getEventNamespace()).join(" ");i.on(s,o),i.on(Afe.map(a=>a+`.${this._getEventNamespace()}`).join(" "),o),i.on(`absoluteTransformChange.${this._getEventNamespace()}`,o),this._proxyDrag(i)}),this._resetTransformCache();var r=!!this.findOne(".top-left");return r&&this.update(),this}_proxyDrag(t){let n;t.on(`dragstart.${this._getEventNamespace()}`,r=>{n=t.getAbsolutePosition(),!this.isDragging()&&t!==this.findOne(".back")&&this.startDrag(r,!1)}),t.on(`dragmove.${this._getEventNamespace()}`,r=>{if(!n)return;const i=t.getAbsolutePosition(),o=i.x-n.x,s=i.y-n.y;this.nodes().forEach(a=>{if(a===t||a.isDragging())return;const l=a.getAbsolutePosition();a.setAbsolutePosition({x:l.x+o,y:l.y+s}),a.startDrag(r)}),n=null})}getNodes(){return this._nodes||[]}getActiveAnchor(){return this._movingAnchorName}detach(){this._nodes&&this._nodes.forEach(t=>{t.off("."+this._getEventNamespace())}),this._nodes=[],this._resetTransformCache()}_resetTransformCache(){this._clearCache(y6),this._clearCache("transform"),this._clearSelfAndDescendantCache("absoluteTransform")}_getNodeRect(){return this._getCache(y6,this.__getNodeRect)}__getNodeShape(t,n=this.rotation(),r){var i=t.getClientRect({skipTransform:!0,skipShadow:!0,skipStroke:this.ignoreStroke()}),o=t.getAbsoluteScale(r),s=t.getAbsolutePosition(r),a=i.x*o.x-t.offsetX()*o.x,l=i.y*o.y-t.offsetY()*o.y;const u=(si.Konva.getAngle(t.getAbsoluteRotation())+Math.PI*2)%(Math.PI*2),c={x:s.x+a*Math.cos(u)+l*Math.sin(-u),y:s.y+l*Math.cos(u)+a*Math.sin(u),width:i.width*o.x,height:i.height*o.y,rotation:u};return $N(c,-si.Konva.getAngle(n),{x:0,y:0})}__getNodeRect(){var t=this.getNode();if(!t)return{x:-v6,y:-v6,width:0,height:0,rotation:0};const n=[];this.nodes().map(u=>{const c=u.getClientRect({skipTransform:!0,skipShadow:!0,skipStroke:this.ignoreStroke()});var d=[{x:c.x,y:c.y},{x:c.x+c.width,y:c.y},{x:c.x+c.width,y:c.y+c.height},{x:c.x,y:c.y+c.height}],f=u.getAbsoluteTransform();d.forEach(function(h){var p=f.point(h);n.push(p)})});const r=new Je.Transform;r.rotate(-si.Konva.getAngle(this.rotation()));var i,o,s,a;n.forEach(function(u){var c=r.point(u);i===void 0&&(i=s=c.x,o=a=c.y),i=Math.min(i,c.x),o=Math.min(o,c.y),s=Math.max(s,c.x),a=Math.max(a,c.y)}),r.invert();const l=r.point({x:i,y:o});return{x:l.x,y:l.y,width:s-i,height:a-o,rotation:si.Konva.getAngle(this.rotation())}}getX(){return this._getNodeRect().x}getY(){return this._getNodeRect().y}getWidth(){return this._getNodeRect().width}getHeight(){return this._getNodeRect().height}_createElements(){this._createBack(),Zm.forEach((function(t){this._createAnchor(t)}).bind(this)),this._createAnchor("rotater")}_createAnchor(t){var n=new Tfe.Rect({stroke:"rgb(0, 161, 255)",fill:"white",strokeWidth:1,name:t+" _anchor",dragDistance:0,draggable:!0,hitStrokeWidth:Rfe?10:"auto"}),r=this;n.on("mousedown touchstart",function(i){r._handleMouseDown(i)}),n.on("dragstart",i=>{n.stopDrag(),i.cancelBubble=!0}),n.on("dragend",i=>{i.cancelBubble=!0}),n.on("mouseenter",()=>{var i=si.Konva.getAngle(this.rotation()),o=Ofe(t,i);n.getStage().content&&(n.getStage().content.style.cursor=o),this._cursorChange=!0}),n.on("mouseout",()=>{n.getStage().content&&(n.getStage().content.style.cursor=""),this._cursorChange=!1}),this.add(n)}_createBack(){var t=new Cfe.Shape({name:"back",width:0,height:0,draggable:!0,sceneFunc(n){var r=this.getParent(),i=r.padding();n.beginPath(),n.rect(-i,-i,this.width()+i*2,this.height()+i*2),n.moveTo(this.width()/2,-i),r.rotateEnabled()&&n.lineTo(this.width()/2,-r.rotateAnchorOffset()*Je.Util._sign(this.height())-i),n.fillStrokeShape(this)},hitFunc:(n,r)=>{if(this.shouldOverdrawWholeArea()){var i=this.padding();n.beginPath(),n.rect(-i,-i,r.width()+i*2,r.height()+i*2),n.fillStrokeShape(r)}}});this.add(t),this._proxyDrag(t),t.on("dragstart",n=>{n.cancelBubble=!0}),t.on("dragmove",n=>{n.cancelBubble=!0}),t.on("dragend",n=>{n.cancelBubble=!0}),this.on("dragmove",n=>{this.update()})}_handleMouseDown(t){this._movingAnchorName=t.target.name().split(" ")[0];var n=this._getNodeRect(),r=n.width,i=n.height,o=Math.sqrt(Math.pow(r,2)+Math.pow(i,2));this.sin=Math.abs(i/o),this.cos=Math.abs(r/o),typeof window<"u"&&(window.addEventListener("mousemove",this._handleMouseMove),window.addEventListener("touchmove",this._handleMouseMove),window.addEventListener("mouseup",this._handleMouseUp,!0),window.addEventListener("touchend",this._handleMouseUp,!0)),this._transforming=!0;var s=t.target.getAbsolutePosition(),a=t.target.getStage().getPointerPosition();this._anchorDragOffset={x:a.x-s.x,y:a.y-s.y},this._fire("transformstart",{evt:t.evt,target:this.getNode()}),this._nodes.forEach(l=>{l._fire("transformstart",{evt:t.evt,target:l})})}_handleMouseMove(t){var n,r,i,o=this.findOne("."+this._movingAnchorName),s=o.getStage();s.setPointersPositions(t);const a=s.getPointerPosition();let l={x:a.x-this._anchorDragOffset.x,y:a.y-this._anchorDragOffset.y};const u=o.getAbsolutePosition();this.anchorDragBoundFunc()&&(l=this.anchorDragBoundFunc()(u,l,t)),o.setAbsolutePosition(l);const c=o.getAbsolutePosition();if(!(u.x===c.x&&u.y===c.y)){if(this._movingAnchorName==="rotater"){var d=this._getNodeRect();n=o.x()-d.width/2,r=-o.y()+d.height/2;let I=Math.atan2(-r,n)+Math.PI/2;d.height<0&&(I-=Math.PI);var f=si.Konva.getAngle(this.rotation());const C=f+I,R=si.Konva.getAngle(this.rotationSnapTolerance()),N=Nfe(this.rotationSnaps(),C,R)-d.rotation,O=Ife(d,N);this._fitNodesInto(O,t);return}var h=this.shiftBehavior(),p;h==="inverted"?p=this.keepRatio()&&!t.shiftKey:h==="none"?p=this.keepRatio():p=this.keepRatio()||t.shiftKey;var g=this.centeredScaling()||t.altKey;if(this._movingAnchorName==="top-left"){if(p){var m=g?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(".bottom-right").x(),y:this.findOne(".bottom-right").y()};i=Math.sqrt(Math.pow(m.x-o.x(),2)+Math.pow(m.y-o.y(),2));var S=this.findOne(".top-left").x()>m.x?-1:1,y=this.findOne(".top-left").y()>m.y?-1:1;n=i*this.cos*S,r=i*this.sin*y,this.findOne(".top-left").x(m.x-n),this.findOne(".top-left").y(m.y-r)}}else if(this._movingAnchorName==="top-center")this.findOne(".top-left").y(o.y());else if(this._movingAnchorName==="top-right"){if(p){var m=g?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(".bottom-left").x(),y:this.findOne(".bottom-left").y()};i=Math.sqrt(Math.pow(o.x()-m.x,2)+Math.pow(m.y-o.y(),2));var S=this.findOne(".top-right").x()m.y?-1:1;n=i*this.cos*S,r=i*this.sin*y,this.findOne(".top-right").x(m.x+n),this.findOne(".top-right").y(m.y-r)}var v=o.position();this.findOne(".top-left").y(v.y),this.findOne(".bottom-right").x(v.x)}else if(this._movingAnchorName==="middle-left")this.findOne(".top-left").x(o.x());else if(this._movingAnchorName==="middle-right")this.findOne(".bottom-right").x(o.x());else if(this._movingAnchorName==="bottom-left"){if(p){var m=g?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(".top-right").x(),y:this.findOne(".top-right").y()};i=Math.sqrt(Math.pow(m.x-o.x(),2)+Math.pow(o.y()-m.y,2));var S=m.x{r._fire("transformend",{evt:t,target:r})}),this._movingAnchorName=null}}_fitNodesInto(t,n){var r=this._getNodeRect();const i=1;if(Je.Util._inRange(t.width,-this.padding()*2-i,i)){this.update();return}if(Je.Util._inRange(t.height,-this.padding()*2-i,i)){this.update();return}const o=this.flipEnabled();var s=new Je.Transform;if(s.rotate(si.Konva.getAngle(this.rotation())),this._movingAnchorName&&t.width<0&&this._movingAnchorName.indexOf("left")>=0){const d=s.point({x:-this.padding()*2,y:0});if(t.x+=d.x,t.y+=d.y,t.width+=this.padding()*2,this._movingAnchorName=this._movingAnchorName.replace("left","right"),this._anchorDragOffset.x-=d.x,this._anchorDragOffset.y-=d.y,!o){this.update();return}}else if(this._movingAnchorName&&t.width<0&&this._movingAnchorName.indexOf("right")>=0){const d=s.point({x:this.padding()*2,y:0});if(this._movingAnchorName=this._movingAnchorName.replace("right","left"),this._anchorDragOffset.x-=d.x,this._anchorDragOffset.y-=d.y,t.width+=this.padding()*2,!o){this.update();return}}if(this._movingAnchorName&&t.height<0&&this._movingAnchorName.indexOf("top")>=0){const d=s.point({x:0,y:-this.padding()*2});if(t.x+=d.x,t.y+=d.y,this._movingAnchorName=this._movingAnchorName.replace("top","bottom"),this._anchorDragOffset.x-=d.x,this._anchorDragOffset.y-=d.y,t.height+=this.padding()*2,!o){this.update();return}}else if(this._movingAnchorName&&t.height<0&&this._movingAnchorName.indexOf("bottom")>=0){const d=s.point({x:0,y:this.padding()*2});if(this._movingAnchorName=this._movingAnchorName.replace("bottom","top"),this._anchorDragOffset.x-=d.x,this._anchorDragOffset.y-=d.y,t.height+=this.padding()*2,!o){this.update();return}}if(this.boundBoxFunc()){const d=this.boundBoxFunc()(r,t);d?t=d:Je.Util.warn("boundBoxFunc returned falsy. You should return new bound rect from it!")}const a=1e7,l=new Je.Transform;l.translate(r.x,r.y),l.rotate(r.rotation),l.scale(r.width/a,r.height/a);const u=new Je.Transform;u.translate(t.x,t.y),u.rotate(t.rotation),u.scale(t.width/a,t.height/a);const c=u.multiply(l.invert());this._nodes.forEach(d=>{var f;const h=d.getParent().getAbsoluteTransform(),p=d.getTransform().copy();p.translate(d.offsetX(),d.offsetY());const m=new Je.Transform;m.multiply(h.copy().invert()).multiply(c).multiply(h).multiply(p);const S=m.decompose();d.setAttrs(S),this._fire("transform",{evt:n,target:d}),d._fire("transform",{evt:n,target:d}),(f=d.getLayer())===null||f===void 0||f.batchDraw()}),this.rotation(Je.Util._getRotation(t.rotation)),this._resetTransformCache(),this.update(),this.getLayer().batchDraw()}forceUpdate(){this._resetTransformCache(),this.update()}_batchChangeChild(t,n){this.findOne(t).setAttrs(n)}update(){var t,n=this._getNodeRect();this.rotation(Je.Util._getRotation(n.rotation));var r=n.width,i=n.height,o=this.enabledAnchors(),s=this.resizeEnabled(),a=this.padding(),l=this.anchorSize();const u=this.find("._anchor");u.forEach(d=>{d.setAttrs({width:l,height:l,offsetX:l/2,offsetY:l/2,stroke:this.anchorStroke(),strokeWidth:this.anchorStrokeWidth(),fill:this.anchorFill(),cornerRadius:this.anchorCornerRadius()})}),this._batchChangeChild(".top-left",{x:0,y:0,offsetX:l/2+a,offsetY:l/2+a,visible:s&&o.indexOf("top-left")>=0}),this._batchChangeChild(".top-center",{x:r/2,y:0,offsetY:l/2+a,visible:s&&o.indexOf("top-center")>=0}),this._batchChangeChild(".top-right",{x:r,y:0,offsetX:l/2-a,offsetY:l/2+a,visible:s&&o.indexOf("top-right")>=0}),this._batchChangeChild(".middle-left",{x:0,y:i/2,offsetX:l/2+a,visible:s&&o.indexOf("middle-left")>=0}),this._batchChangeChild(".middle-right",{x:r,y:i/2,offsetX:l/2-a,visible:s&&o.indexOf("middle-right")>=0}),this._batchChangeChild(".bottom-left",{x:0,y:i,offsetX:l/2+a,offsetY:l/2-a,visible:s&&o.indexOf("bottom-left")>=0}),this._batchChangeChild(".bottom-center",{x:r/2,y:i,offsetY:l/2-a,visible:s&&o.indexOf("bottom-center")>=0}),this._batchChangeChild(".bottom-right",{x:r,y:i,offsetX:l/2-a,offsetY:l/2-a,visible:s&&o.indexOf("bottom-right")>=0}),this._batchChangeChild(".rotater",{x:r/2,y:-this.rotateAnchorOffset()*Je.Util._sign(i)-a,visible:this.rotateEnabled()}),this._batchChangeChild(".back",{width:r,height:i,visible:this.borderEnabled(),stroke:this.borderStroke(),strokeWidth:this.borderStrokeWidth(),dash:this.borderDash(),x:0,y:0});const c=this.anchorStyleFunc();c&&u.forEach(d=>{c(d)}),(t=this.getLayer())===null||t===void 0||t.batchDraw()}isTransforming(){return this._transforming}stopTransform(){if(this._transforming){this._removeEvents();var t=this.findOne("."+this._movingAnchorName);t&&t.stopDrag()}}destroy(){return this.getStage()&&this._cursorChange&&this.getStage().content&&(this.getStage().content.style.cursor=""),m6.Group.prototype.destroy.call(this),this.detach(),this._removeEvents(),this}toObject(){return g6.Node.prototype.toObject.call(this)}clone(t){var n=g6.Node.prototype.clone.call(this,t);return n}getClientRect(){return this.nodes().length>0?super.getClientRect():{x:0,y:0,width:0,height:0}}}Ev.Transformer=ze;function Dfe(e){return e instanceof Array||Je.Util.warn("enabledAnchors value should be an array"),e instanceof Array&&e.forEach(function(t){Zm.indexOf(t)===-1&&Je.Util.warn("Unknown anchor name: "+t+". Available names are: "+Zm.join(", "))}),e||[]}ze.prototype.className="Transformer";(0,Efe._registerNode)(ze);Ze.Factory.addGetterSetter(ze,"enabledAnchors",Zm,Dfe);Ze.Factory.addGetterSetter(ze,"flipEnabled",!0,(0,ua.getBooleanValidator)());Ze.Factory.addGetterSetter(ze,"resizeEnabled",!0);Ze.Factory.addGetterSetter(ze,"anchorSize",10,(0,ua.getNumberValidator)());Ze.Factory.addGetterSetter(ze,"rotateEnabled",!0);Ze.Factory.addGetterSetter(ze,"rotationSnaps",[]);Ze.Factory.addGetterSetter(ze,"rotateAnchorOffset",50,(0,ua.getNumberValidator)());Ze.Factory.addGetterSetter(ze,"rotationSnapTolerance",5,(0,ua.getNumberValidator)());Ze.Factory.addGetterSetter(ze,"borderEnabled",!0);Ze.Factory.addGetterSetter(ze,"anchorStroke","rgb(0, 161, 255)");Ze.Factory.addGetterSetter(ze,"anchorStrokeWidth",1,(0,ua.getNumberValidator)());Ze.Factory.addGetterSetter(ze,"anchorFill","white");Ze.Factory.addGetterSetter(ze,"anchorCornerRadius",0,(0,ua.getNumberValidator)());Ze.Factory.addGetterSetter(ze,"borderStroke","rgb(0, 161, 255)");Ze.Factory.addGetterSetter(ze,"borderStrokeWidth",1,(0,ua.getNumberValidator)());Ze.Factory.addGetterSetter(ze,"borderDash");Ze.Factory.addGetterSetter(ze,"keepRatio",!0);Ze.Factory.addGetterSetter(ze,"shiftBehavior","default");Ze.Factory.addGetterSetter(ze,"centeredScaling",!1);Ze.Factory.addGetterSetter(ze,"ignoreStroke",!1);Ze.Factory.addGetterSetter(ze,"padding",0,(0,ua.getNumberValidator)());Ze.Factory.addGetterSetter(ze,"node");Ze.Factory.addGetterSetter(ze,"nodes");Ze.Factory.addGetterSetter(ze,"boundBoxFunc");Ze.Factory.addGetterSetter(ze,"anchorDragBoundFunc");Ze.Factory.addGetterSetter(ze,"anchorStyleFunc");Ze.Factory.addGetterSetter(ze,"shouldOverdrawWholeArea",!1);Ze.Factory.addGetterSetter(ze,"useSingleNodeRotation",!0);Ze.Factory.backCompat(ze,{lineEnabled:"borderEnabled",rotateHandlerOffset:"rotateAnchorOffset",enabledHandlers:"enabledAnchors"});var Pv={};Object.defineProperty(Pv,"__esModule",{value:!0});Pv.Wedge=void 0;const Av=Te,Lfe=on,$fe=Pe,FN=de,Ffe=Pe;class Qo extends Lfe.Shape{_sceneFunc(t){t.beginPath(),t.arc(0,0,this.radius(),0,$fe.Konva.getAngle(this.angle()),this.clockwise()),t.lineTo(0,0),t.closePath(),t.fillStrokeShape(this)}getWidth(){return this.radius()*2}getHeight(){return this.radius()*2}setWidth(t){this.radius(t/2)}setHeight(t){this.radius(t/2)}}Pv.Wedge=Qo;Qo.prototype.className="Wedge";Qo.prototype._centroid=!0;Qo.prototype._attrsAffectingSize=["radius"];(0,Ffe._registerNode)(Qo);Av.Factory.addGetterSetter(Qo,"radius",0,(0,FN.getNumberValidator)());Av.Factory.addGetterSetter(Qo,"angle",0,(0,FN.getNumberValidator)());Av.Factory.addGetterSetter(Qo,"clockwise",!1);Av.Factory.backCompat(Qo,{angleDeg:"angle",getAngleDeg:"getAngle",setAngleDeg:"setAngle"});var kv={};Object.defineProperty(kv,"__esModule",{value:!0});kv.Blur=void 0;const b6=Te,Bfe=wt,jfe=de;function S6(){this.r=0,this.g=0,this.b=0,this.a=0,this.next=null}var Vfe=[512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512,454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512,482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456,437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512,497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328,320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456,446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335,329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512,505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405,399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328,324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271,268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456,451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388,385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335,332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292,289,287,285,282,280,278,275,273,271,269,267,265,263,261,259],zfe=[9,11,12,13,13,14,14,15,15,15,15,16,16,16,16,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24];function Ufe(e,t){var n=e.data,r=e.width,i=e.height,o,s,a,l,u,c,d,f,h,p,m,S,y,v,g,b,_,w,x,T,P,E,A,$,I=t+t+1,C=r-1,R=i-1,M=t+1,N=M*(M+1)/2,O=new S6,D=null,L=O,j=null,U=null,G=Vfe[t],W=zfe[t];for(a=1;a>W,A!==0?(A=255/A,n[c]=(f*G>>W)*A,n[c+1]=(h*G>>W)*A,n[c+2]=(p*G>>W)*A):n[c]=n[c+1]=n[c+2]=0,f-=S,h-=y,p-=v,m-=g,S-=j.r,y-=j.g,v-=j.b,g-=j.a,l=d+((l=o+t+1)>W,A>0?(A=255/A,n[l]=(f*G>>W)*A,n[l+1]=(h*G>>W)*A,n[l+2]=(p*G>>W)*A):n[l]=n[l+1]=n[l+2]=0,f-=S,h-=y,p-=v,m-=g,S-=j.r,y-=j.g,v-=j.b,g-=j.a,l=o+((l=s+M)0&&Ufe(t,n)};kv.Blur=Gfe;b6.Factory.addGetterSetter(Bfe.Node,"blurRadius",0,(0,jfe.getNumberValidator)(),b6.Factory.afterSetFilter);var Rv={};Object.defineProperty(Rv,"__esModule",{value:!0});Rv.Brighten=void 0;const _6=Te,Hfe=wt,qfe=de,Wfe=function(e){var t=this.brightness()*255,n=e.data,r=n.length,i;for(i=0;i255?255:i,o=o<0?0:o>255?255:o,s=s<0?0:s>255?255:s,n[a]=i,n[a+1]=o,n[a+2]=s};Ov.Contrast=Yfe;w6.Factory.addGetterSetter(Kfe.Node,"contrast",0,(0,Xfe.getNumberValidator)(),w6.Factory.afterSetFilter);var Mv={};Object.defineProperty(Mv,"__esModule",{value:!0});Mv.Emboss=void 0;const Ws=Te,Iv=wt,Qfe=Ot,BN=de,Zfe=function(e){var t=this.embossStrength()*10,n=this.embossWhiteLevel()*255,r=this.embossDirection(),i=this.embossBlend(),o=0,s=0,a=e.data,l=e.width,u=e.height,c=l*4,d=u;switch(r){case"top-left":o=-1,s=-1;break;case"top":o=-1,s=0;break;case"top-right":o=-1,s=1;break;case"right":o=0,s=1;break;case"bottom-right":o=1,s=1;break;case"bottom":o=1,s=0;break;case"bottom-left":o=1,s=-1;break;case"left":o=0,s=-1;break;default:Qfe.Util.error("Unknown emboss direction: "+r)}do{var f=(d-1)*c,h=o;d+h<1&&(h=0),d+h>u&&(h=0);var p=(d-1+h)*l*4,m=l;do{var S=f+(m-1)*4,y=s;m+y<1&&(y=0),m+y>l&&(y=0);var v=p+(m-1+y)*4,g=a[S]-a[v],b=a[S+1]-a[v+1],_=a[S+2]-a[v+2],w=g,x=w>0?w:-w,T=b>0?b:-b,P=_>0?_:-_;if(T>x&&(w=b),P>x&&(w=_),w*=t,i){var E=a[S]+w,A=a[S+1]+w,$=a[S+2]+w;a[S]=E>255?255:E<0?0:E,a[S+1]=A>255?255:A<0?0:A,a[S+2]=$>255?255:$<0?0:$}else{var I=n-w;I<0?I=0:I>255&&(I=255),a[S]=a[S+1]=a[S+2]=I}}while(--m)}while(--d)};Mv.Emboss=Zfe;Ws.Factory.addGetterSetter(Iv.Node,"embossStrength",.5,(0,BN.getNumberValidator)(),Ws.Factory.afterSetFilter);Ws.Factory.addGetterSetter(Iv.Node,"embossWhiteLevel",.5,(0,BN.getNumberValidator)(),Ws.Factory.afterSetFilter);Ws.Factory.addGetterSetter(Iv.Node,"embossDirection","top-left",null,Ws.Factory.afterSetFilter);Ws.Factory.addGetterSetter(Iv.Node,"embossBlend",!1,null,Ws.Factory.afterSetFilter);var Nv={};Object.defineProperty(Nv,"__esModule",{value:!0});Nv.Enhance=void 0;const x6=Te,Jfe=wt,ehe=de;function eS(e,t,n,r,i){var o=n-t,s=i-r,a;return o===0?r+s/2:s===0?r:(a=(e-t)/o,a=s*a+r,a)}const the=function(e){var t=e.data,n=t.length,r=t[0],i=r,o,s=t[1],a=s,l,u=t[2],c=u,d,f,h=this.enhance();if(h!==0){for(f=0;fi&&(i=o),l=t[f+1],la&&(a=l),d=t[f+2],dc&&(c=d);i===r&&(i=255,r=0),a===s&&(a=255,s=0),c===u&&(c=255,u=0);var p,m,S,y,v,g,b,_,w;for(h>0?(m=i+h*(255-i),S=r-h*(r-0),v=a+h*(255-a),g=s-h*(s-0),_=c+h*(255-c),w=u-h*(u-0)):(p=(i+r)*.5,m=i+h*(i-p),S=r+h*(r-p),y=(a+s)*.5,v=a+h*(a-y),g=s+h*(s-y),b=(c+u)*.5,_=c+h*(c-b),w=u+h*(u-b)),f=0;fy?S:y;var v=s,g=o,b,_,w=360/g*Math.PI/180,x,T;for(_=0;_g?v:g;var b=s,_=o,w,x,T=n.polarRotation||0,P,E;for(c=0;ct&&(b=g,_=0,w=-1),i=0;i=0&&h=0&&p=0&&h=0&&p=255*4?255:0}return s}function mhe(e,t,n){for(var r=[.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111],i=Math.round(Math.sqrt(r.length)),o=Math.floor(i/2),s=[],a=0;a=0&&h=0&&p=n))for(o=m;o=r||(s=(n*o+i)*4,a+=b[s+0],l+=b[s+1],u+=b[s+2],c+=b[s+3],g+=1);for(a=a/g,l=l/g,u=u/g,c=c/g,i=h;i=n))for(o=m;o=r||(s=(n*o+i)*4,b[s+0]=a,b[s+1]=l,b[s+2]=u,b[s+3]=c)}};zv.Pixelate=Che;P6.Factory.addGetterSetter(whe.Node,"pixelSize",8,(0,xhe.getNumberValidator)(),P6.Factory.afterSetFilter);var Uv={};Object.defineProperty(Uv,"__esModule",{value:!0});Uv.Posterize=void 0;const A6=Te,The=wt,Ehe=de,Phe=function(e){var t=Math.round(this.levels()*254)+1,n=e.data,r=n.length,i=255/t,o;for(o=0;o255?255:e<0?0:Math.round(e)});ey.Factory.addGetterSetter(DC.Node,"green",0,function(e){return this._filterUpToDate=!1,e>255?255:e<0?0:Math.round(e)});ey.Factory.addGetterSetter(DC.Node,"blue",0,Ahe.RGBComponent,ey.Factory.afterSetFilter);var Hv={};Object.defineProperty(Hv,"__esModule",{value:!0});Hv.RGBA=void 0;const Bf=Te,qv=wt,Rhe=de,Ohe=function(e){var t=e.data,n=t.length,r=this.red(),i=this.green(),o=this.blue(),s=this.alpha(),a,l;for(a=0;a255?255:e<0?0:Math.round(e)});Bf.Factory.addGetterSetter(qv.Node,"green",0,function(e){return this._filterUpToDate=!1,e>255?255:e<0?0:Math.round(e)});Bf.Factory.addGetterSetter(qv.Node,"blue",0,Rhe.RGBComponent,Bf.Factory.afterSetFilter);Bf.Factory.addGetterSetter(qv.Node,"alpha",1,function(e){return this._filterUpToDate=!1,e>1?1:e<0?0:e});var Wv={};Object.defineProperty(Wv,"__esModule",{value:!0});Wv.Sepia=void 0;const Mhe=function(e){var t=e.data,n=t.length,r,i,o,s;for(r=0;r127&&(u=255-u),c>127&&(c=255-c),d>127&&(d=255-d),t[l]=u,t[l+1]=c,t[l+2]=d}while(--a)}while(--o)};Kv.Solarize=Ihe;var Xv={};Object.defineProperty(Xv,"__esModule",{value:!0});Xv.Threshold=void 0;const k6=Te,Nhe=wt,Dhe=de,Lhe=function(e){var t=this.threshold()*255,n=e.data,r=n.length,i;for(i=0;i{const{width:r,height:i}=t,o=document.createElement("div"),s=new nd.Stage({container:o,width:r,height:i}),a=new nd.Layer,l=new nd.Layer;return a.add(new nd.Rect({...t,fill:n?"black":"white"})),e.forEach(u=>l.add(new nd.Line({points:u.points,stroke:n?"white":"black",strokeWidth:u.strokeWidth*2,tension:0,lineCap:"round",lineJoin:"round",shadowForStrokeEnabled:!1,globalCompositeOperation:u.tool==="brush"?"source-over":"destination-out"}))),s.add(a),s.add(l),o.remove(),s},wpe=async(e,t,n)=>new Promise((r,i)=>{const o=document.createElement("canvas");o.width=t,o.height=n;const s=o.getContext("2d"),a=new Image;if(!s){o.remove(),i("Unable to get context");return}a.onload=function(){s.drawImage(a,0,0),o.remove(),r(s.getImageData(0,0,t,n))},a.src=e}),M6=async(e,t)=>{const n=e.toDataURL(t);return await wpe(n,t.width,t.height)},xpe=async(e,t,n,r,i)=>{const o=fe("canvas"),s=nv(),a=Nle();if(!s||!a){o.error("Unable to find canvas / stage");return}const l={...t,...n},u=s.clone();u.scale({x:1,y:1});const c=u.getAbsolutePosition(),d={x:l.x+c.x,y:l.y+c.y,width:l.width,height:l.height},f=await Xm(u,d),h=await M6(u,d),p=await _pe(r?e.objects.filter(DO):[],l,i),m=await Xm(p,l),S=await M6(p,l);return{baseBlob:f,baseImageData:h,maskBlob:m,maskImageData:S}},Cpe=e=>{let t=!0,n=!1;const r=e.length;let i=3;for(i;i{const t=e.length;let n=0;for(n;n{const{isPartiallyTransparent:n,isFullyTransparent:r}=Cpe(e.data),i=Tpe(t.data);return n?r?"txt2img":"outpaint":i?"inpaint":"img2img"},Ppe=e=>aO(e,n=>n.isEnabled&&(!!n.processedControlImage||n.processorType==="none"&&!!n.controlImage)),Yv=(e,t,n)=>{const{isEnabled:r,controlNets:i}=e.controlNet,o=Ppe(i),s=t.nodes[Ke];if(r&&o.length&&o.length){const a={id:Op,type:"collect",is_intermediate:!0};t.nodes[Op]=a,t.edges.push({source:{node_id:Op,field:"collection"},destination:{node_id:n,field:"control"}}),o.forEach(l=>{const{controlNetId:u,controlImage:c,processedControlImage:d,beginStepPct:f,endStepPct:h,controlMode:p,resizeMode:m,model:S,processorType:y,weight:v}=l,g={id:`control_net_${u}`,type:"controlnet",is_intermediate:!0,begin_step_percent:f,end_step_percent:h,control_mode:p,resize_mode:m,control_model:S,control_weight:v};if(d&&y!=="none")g.image={image_name:d};else if(c)g.image={image_name:c};else return;if(t.nodes[g.id]=g,s){const b=w0(g,["id","type"]);s.controlnets.push(b)}t.edges.push({source:{node_id:g.id,field:"control"},destination:{node_id:Op,field:"item"}})})}},Cc=(e,t)=>{const{positivePrompt:n,iterations:r,seed:i,shouldRandomizeSeed:o}=e.generation,{combinatorial:s,isEnabled:a,maxPrompts:l}=e.dynamicPrompts,u=t.nodes[Ke];if(a){oY(t.nodes[Be],"prompt");const c={id:Gb,type:"dynamic_prompt",is_intermediate:!0,max_prompts:s?l:r,combinatorial:s,prompt:n},d={id:lr,type:"iterate",is_intermediate:!0};if(t.nodes[Gb]=c,t.nodes[lr]=d,t.edges.push({source:{node_id:Gb,field:"prompt_collection"},destination:{node_id:lr,field:"collection"}},{source:{node_id:lr,field:"item"},destination:{node_id:Be,field:"prompt"}}),u&&t.edges.push({source:{node_id:lr,field:"item"},destination:{node_id:Ke,field:"positive_prompt"}}),o){const f={id:Fi,type:"rand_int",is_intermediate:!0};t.nodes[Fi]=f,t.edges.push({source:{node_id:Fi,field:"a"},destination:{node_id:$e,field:"seed"}}),u&&t.edges.push({source:{node_id:Fi,field:"a"},destination:{node_id:Ke,field:"seed"}})}else t.nodes[$e].seed=i,u&&(u.seed=i)}else{u&&(u.positive_prompt=n);const c={id:Co,type:"range_of_size",is_intermediate:!0,size:r,step:1},d={id:lr,type:"iterate",is_intermediate:!0};if(t.nodes[lr]=d,t.nodes[Co]=c,t.edges.push({source:{node_id:Co,field:"collection"},destination:{node_id:lr,field:"collection"}}),t.edges.push({source:{node_id:lr,field:"item"},destination:{node_id:$e,field:"seed"}}),u&&t.edges.push({source:{node_id:lr,field:"item"},destination:{node_id:Ke,field:"seed"}}),o){const f={id:Fi,type:"rand_int",is_intermediate:!0};t.nodes[Fi]=f,t.edges.push({source:{node_id:Fi,field:"a"},destination:{node_id:Co,field:"start"}})}else c.start=i}},Ih=(e,t,n,r=Pn)=>{const{loras:i}=e.lora,o=gO(i),s=t.nodes[Ke];o>0&&(t.edges=t.edges.filter(u=>!(u.source.node_id===Pn&&["unet"].includes(u.source.field))&&!(u.source.node_id===rv&&["unet"].includes(u.source.field))),t.edges=t.edges.filter(u=>!(u.source.node_id===it&&["clip"].includes(u.source.field))));let a="",l=0;Za(i,u=>{const{model_name:c,base_model:d,weight:f}=u,h=`${mce}_${c.replace(".","_")}`,p={type:"lora_loader",id:h,is_intermediate:!0,lora:{model_name:c,base_model:d},weight:f};s&&s.loras.push({lora:{model_name:c,base_model:d},weight:f}),t.nodes[h]=p,l===0?(t.edges.push({source:{node_id:r,field:"unet"},destination:{node_id:h,field:"unet"}}),t.edges.push({source:{node_id:it,field:"clip"},destination:{node_id:h,field:"clip"}})):(t.edges.push({source:{node_id:a,field:"unet"},destination:{node_id:h,field:"unet"}}),t.edges.push({source:{node_id:a,field:"clip"},destination:{node_id:h,field:"clip"}})),l===o-1&&(t.edges.push({source:{node_id:h,field:"unet"},destination:{node_id:n,field:"unet"}}),t.edges.push({source:{node_id:h,field:"clip"},destination:{node_id:Be,field:"clip"}}),t.edges.push({source:{node_id:h,field:"clip"},destination:{node_id:qe,field:"clip"}})),a=h,l+=1})},zN=Jn(e=>e.ui,e=>RO[e.activeTab],{memoizeOptions:{equalityCheck:_0}}),b4e=Jn(e=>e.ui,e=>e.activeTab,{memoizeOptions:{equalityCheck:_0}}),S4e=Jn(e=>e.ui,e=>e,{memoizeOptions:{equalityCheck:_0}}),xl=(e,t,n=We)=>{const i=zN(e)==="unifiedCanvas"?!e.canvas.shouldAutoSave:!1,o=t.nodes[n],s=t.nodes[Ke];if(!o)return;o.is_intermediate=!0;const a={id:hu,type:"img_nsfw",is_intermediate:i};t.nodes[hu]=a,t.edges.push({source:{node_id:n,field:"image"},destination:{node_id:hu,field:"image"}}),s&&t.edges.push({source:{node_id:Ke,field:"metadata"},destination:{node_id:hu,field:"metadata"}})},Nh=(e,t,n=Pn)=>{const{vae:r}=e.generation,i=!r,o=t.nodes[Ke];i||(t.nodes[Zc]={type:"vae_loader",id:Zc,is_intermediate:!0,vae_model:r});const s=n==rv;(t.id===SC||t.id===Ym)&&t.edges.push({source:{node_id:i?n:Zc,field:i&&s?"vae_decoder":"vae"},destination:{node_id:We,field:"vae"}}),t.id===Ym&&t.edges.push({source:{node_id:i?n:Zc,field:i&&s?"vae_decoder":"vae"},destination:{node_id:vt,field:"vae"}}),t.id===sN&&t.edges.push({source:{node_id:i?n:Zc,field:i&&s?"vae_decoder":"vae"},destination:{node_id:Ii,field:"vae"}}),r&&o&&(o.vae=r)},Cl=(e,t,n=We)=>{const i=zN(e)==="unifiedCanvas"?!e.canvas.shouldAutoSave:!1,o=t.nodes[n],s=t.nodes[hu],a=t.nodes[Ke];if(!o)return;const l={id:Qc,type:"img_watermark",is_intermediate:i};t.nodes[Qc]=l,o.is_intermediate=!0,s?(s.is_intermediate=!0,t.edges.push({source:{node_id:hu,field:"image"},destination:{node_id:Qc,field:"image"}})):t.edges.push({source:{node_id:n,field:"image"},destination:{node_id:Qc,field:"image"}}),a&&t.edges.push({source:{node_id:Ke,field:"metadata"},destination:{node_id:Qc,field:"metadata"}})},Ape=(e,t)=>{const n=fe("nodes"),{positivePrompt:r,negativePrompt:i,model:o,cfgScale:s,scheduler:a,steps:l,img2imgStrength:u,clipSkip:c,shouldUseCpuNoise:d,shouldUseNoiseSettings:f}=e.generation,{width:h,height:p}=e.canvas.boundingBoxDimensions,{shouldAutoSave:m}=e.canvas;if(!o)throw n.error("No model found in state"),new Error("No model found in state");const S=f?d:Wo.shouldUseCpuNoise,y={id:Ym,nodes:{[Be]:{type:"compel",id:Be,is_intermediate:!0,prompt:r},[qe]:{type:"compel",id:qe,is_intermediate:!0,prompt:i},[$e]:{type:"noise",id:$e,is_intermediate:!0,use_cpu:S},[Pn]:{type:"main_model_loader",id:Pn,is_intermediate:!0,model:o},[it]:{type:"clip_skip",id:it,is_intermediate:!0,skipped_layers:c},[Wt]:{type:"l2l",id:Wt,is_intermediate:!0,cfg_scale:s,scheduler:a,steps:l,strength:u},[vt]:{type:"i2l",id:vt,is_intermediate:!0},[We]:{type:"l2i",id:We,is_intermediate:!m}},edges:[{source:{node_id:Pn,field:"clip"},destination:{node_id:it,field:"clip"}},{source:{node_id:it,field:"clip"},destination:{node_id:Be,field:"clip"}},{source:{node_id:it,field:"clip"},destination:{node_id:qe,field:"clip"}},{source:{node_id:Wt,field:"latents"},destination:{node_id:We,field:"latents"}},{source:{node_id:vt,field:"latents"},destination:{node_id:Wt,field:"latents"}},{source:{node_id:$e,field:"noise"},destination:{node_id:Wt,field:"noise"}},{source:{node_id:Pn,field:"unet"},destination:{node_id:Wt,field:"unet"}},{source:{node_id:qe,field:"conditioning"},destination:{node_id:Wt,field:"negative_conditioning"}},{source:{node_id:Be,field:"conditioning"},destination:{node_id:Wt,field:"positive_conditioning"}}]};if(t.width!==h||t.height!==p){const v={id:Qn,type:"img_resize",image:{image_name:t.image_name},is_intermediate:!0,width:h,height:p};y.nodes[Qn]=v,y.edges.push({source:{node_id:Qn,field:"image"},destination:{node_id:vt,field:"image"}}),y.edges.push({source:{node_id:Qn,field:"width"},destination:{node_id:$e,field:"width"}}),y.edges.push({source:{node_id:Qn,field:"height"},destination:{node_id:$e,field:"height"}})}else y.nodes[vt].image={image_name:t.image_name},y.edges.push({source:{node_id:vt,field:"width"},destination:{node_id:$e,field:"width"}}),y.edges.push({source:{node_id:vt,field:"height"},destination:{node_id:$e,field:"height"}});return y.nodes[Ke]={id:Ke,type:"metadata_accumulator",generation_mode:"img2img",cfg_scale:s,height:p,width:h,positive_prompt:"",negative_prompt:i,model:o,seed:0,steps:l,rand_device:S?"cpu":"cuda",scheduler:a,vae:void 0,controlnets:[],loras:[],clip_skip:c,strength:u,init_image:t.image_name},y.edges.push({source:{node_id:Ke,field:"metadata"},destination:{node_id:We,field:"metadata"}}),Ih(e,y,Wt),Nh(e,y),Cc(e,y),Yv(e,y,Wt),e.system.shouldUseNSFWChecker&&xl(e,y),e.system.shouldUseWatermarker&&Cl(e,y),y},kpe=(e,t,n)=>{const r=fe("nodes"),{positivePrompt:i,negativePrompt:o,model:s,cfgScale:a,scheduler:l,steps:u,img2imgStrength:c,shouldFitToWidthHeight:d,iterations:f,seed:h,shouldRandomizeSeed:p,seamSize:m,seamBlur:S,seamSteps:y,seamStrength:v,tileSize:g,infillMethod:b,clipSkip:_}=e.generation;if(!s)throw r.error("No model found in state"),new Error("No model found in state");const{width:w,height:x}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:T,boundingBoxScaleMethod:P,shouldAutoSave:E}=e.canvas,A={id:sN,nodes:{[Ii]:{is_intermediate:!E,type:"inpaint",id:Ii,steps:u,width:w,height:x,cfg_scale:a,scheduler:l,image:{image_name:t.image_name},strength:c,fit:d,mask:{image_name:n.image_name},seam_size:m,seam_blur:S,seam_strength:v,seam_steps:y,tile_size:b==="tile"?g:void 0,infill_method:b,inpaint_width:P!=="none"?T.width:void 0,inpaint_height:P!=="none"?T.height:void 0},[Be]:{type:"compel",id:Be,is_intermediate:!0,prompt:i},[qe]:{type:"compel",id:qe,is_intermediate:!0,prompt:o},[Pn]:{type:"main_model_loader",id:Pn,is_intermediate:!0,model:s},[it]:{type:"clip_skip",id:it,is_intermediate:!0,skipped_layers:_},[Co]:{type:"range_of_size",id:Co,is_intermediate:!0,size:f,step:1},[lr]:{type:"iterate",id:lr,is_intermediate:!0}},edges:[{source:{node_id:Pn,field:"unet"},destination:{node_id:Ii,field:"unet"}},{source:{node_id:Pn,field:"clip"},destination:{node_id:it,field:"clip"}},{source:{node_id:it,field:"clip"},destination:{node_id:Be,field:"clip"}},{source:{node_id:it,field:"clip"},destination:{node_id:qe,field:"clip"}},{source:{node_id:qe,field:"conditioning"},destination:{node_id:Ii,field:"negative_conditioning"}},{source:{node_id:Be,field:"conditioning"},destination:{node_id:Ii,field:"positive_conditioning"}},{source:{node_id:Co,field:"collection"},destination:{node_id:lr,field:"collection"}},{source:{node_id:lr,field:"item"},destination:{node_id:Ii,field:"seed"}}]};if(Ih(e,A,Ii),Nh(e,A),p){const $={id:Fi,type:"rand_int"};A.nodes[Fi]=$,A.edges.push({source:{node_id:Fi,field:"a"},destination:{node_id:Co,field:"start"}})}else A.nodes[Co].start=h;return e.system.shouldUseNSFWChecker&&xl(e,A,Ii),e.system.shouldUseWatermarker&&Cl(e,A,Ii),A},Rpe=e=>{const t=fe("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,scheduler:s,steps:a,clipSkip:l,shouldUseCpuNoise:u,shouldUseNoiseSettings:c}=e.generation,{width:d,height:f}=e.canvas.boundingBoxDimensions,{shouldAutoSave:h}=e.canvas;if(!i)throw t.error("No model found in state"),new Error("No model found in state");const p=c?u:Wo.shouldUseCpuNoise,m=i.model_type.includes("onnx"),S=m?rv:Pn,y={id:SC,nodes:{[Be]:{type:m?"prompt_onnx":"compel",id:Be,is_intermediate:!0,prompt:n},[qe]:{type:m?"prompt_onnx":"compel",id:qe,is_intermediate:!0,prompt:r},[$e]:{type:"noise",id:$e,is_intermediate:!0,width:d,height:f,use_cpu:p},[cn]:{type:m?"t2l_onnx":"t2l",id:cn,is_intermediate:!0,cfg_scale:o,scheduler:s,steps:a},[S]:{type:S,id:S,is_intermediate:!0,model:i},[it]:{type:"clip_skip",id:it,is_intermediate:!0,skipped_layers:l},[We]:{type:m?"l2i_onnx":"l2i",id:We,is_intermediate:!h}},edges:[{source:{node_id:qe,field:"conditioning"},destination:{node_id:cn,field:"negative_conditioning"}},{source:{node_id:Be,field:"conditioning"},destination:{node_id:cn,field:"positive_conditioning"}},{source:{node_id:S,field:"clip"},destination:{node_id:it,field:"clip"}},{source:{node_id:it,field:"clip"},destination:{node_id:Be,field:"clip"}},{source:{node_id:it,field:"clip"},destination:{node_id:qe,field:"clip"}},{source:{node_id:S,field:"unet"},destination:{node_id:cn,field:"unet"}},{source:{node_id:cn,field:"latents"},destination:{node_id:We,field:"latents"}},{source:{node_id:$e,field:"noise"},destination:{node_id:cn,field:"noise"}}]};return y.nodes[Ke]={id:Ke,type:"metadata_accumulator",generation_mode:"txt2img",cfg_scale:o,height:f,width:d,positive_prompt:"",negative_prompt:r,model:i,seed:0,steps:a,rand_device:p?"cpu":"cuda",scheduler:s,vae:void 0,controlnets:[],loras:[],clip_skip:l},y.edges.push({source:{node_id:Ke,field:"metadata"},destination:{node_id:We,field:"metadata"}}),Ih(e,y,cn,S),Nh(e,y,S),Cc(e,y),Yv(e,y,cn),e.system.shouldUseNSFWChecker&&xl(e,y),e.system.shouldUseWatermarker&&Cl(e,y),y},Ope=(e,t,n,r)=>{let i;if(t==="txt2img")i=Rpe(e);else if(t==="img2img"){if(!n)throw new Error("Missing canvas init image");i=Ape(e,n)}else{if(!n||!r)throw new Error("Missing canvas init and mask images");i=kpe(e,n,r)}return i},Mpe=()=>{le({predicate:e=>Ph.match(e)&&e.payload==="unifiedCanvas",effect:async(e,{getState:t,dispatch:n,take:r})=>{const i=fe("session"),o=t(),{layerState:s,boundingBoxCoordinates:a,boundingBoxDimensions:l,isMaskEnabled:u,shouldPreserveMaskedArea:c}=o.canvas,d=await xpe(s,a,l,u,c);if(!d){i.error("Unable to create canvas data");return}const{baseBlob:f,baseImageData:h,maskBlob:p,maskImageData:m}=d,S=Epe(h,m);if(o.system.enableImageDebugging){const x=await QE(f),T=await QE(p);wce([{base64:T,caption:"mask b64"},{base64:x,caption:"image b64"}])}i.debug(`Generation mode: ${S}`);let y,v;["img2img","inpaint","outpaint"].includes(S)&&(y=await n(he.endpoints.uploadImage.initiate({file:new File([f],"canvasInitImage.png",{type:"image/png"}),image_category:"general",is_intermediate:!0})).unwrap()),["inpaint","outpaint"].includes(S)&&(v=await n(he.endpoints.uploadImage.initiate({file:new File([p],"canvasMaskImage.png",{type:"image/png"}),image_category:"mask",is_intermediate:!0})).unwrap());const g=Ope(o,S,y,v);i.debug({graph:ia(g)},"Canvas graph built"),n(YI(g));const{requestId:b}=n(Rn({graph:g})),[_]=await r(x=>Rn.fulfilled.match(x)&&x.meta.requestId===b),w=_.payload.id;["img2img","inpaint"].includes(S)&&y&&n(he.endpoints.changeImageSessionId.initiate({imageDTO:y,session_id:w})),["inpaint"].includes(S)&&v&&n(he.endpoints.changeImageSessionId.initiate({imageDTO:v,session_id:w})),o.canvas.layerState.stagingArea.boundingBox||n(WQ({sessionId:w,boundingBox:{...o.canvas.boundingBoxCoordinates,...o.canvas.boundingBoxDimensions}})),n(KQ(w)),n(pl())}})},Ipe=e=>{const t=fe("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,scheduler:s,steps:a,initialImage:l,img2imgStrength:u,shouldFitToWidthHeight:c,width:d,height:f,clipSkip:h,shouldUseCpuNoise:p,shouldUseNoiseSettings:m,vaePrecision:S}=e.generation;if(!l)throw t.error("No initial image found in state"),new Error("No initial image found in state");if(!i)throw t.error("No model found in state"),new Error("No model found in state");const y=m?p:Wo.shouldUseCpuNoise,v={id:Ym,nodes:{[Pn]:{type:"main_model_loader",id:Pn,model:i},[it]:{type:"clip_skip",id:it,skipped_layers:h},[Be]:{type:"compel",id:Be,prompt:n},[qe]:{type:"compel",id:qe,prompt:r},[$e]:{type:"noise",id:$e,use_cpu:y},[We]:{type:"l2i",id:We,fp32:S==="fp32"},[Wt]:{type:"l2l",id:Wt,cfg_scale:o,scheduler:s,steps:a,strength:u},[vt]:{type:"i2l",id:vt,fp32:S==="fp32"}},edges:[{source:{node_id:Pn,field:"unet"},destination:{node_id:Wt,field:"unet"}},{source:{node_id:Pn,field:"clip"},destination:{node_id:it,field:"clip"}},{source:{node_id:it,field:"clip"},destination:{node_id:Be,field:"clip"}},{source:{node_id:it,field:"clip"},destination:{node_id:qe,field:"clip"}},{source:{node_id:Wt,field:"latents"},destination:{node_id:We,field:"latents"}},{source:{node_id:vt,field:"latents"},destination:{node_id:Wt,field:"latents"}},{source:{node_id:$e,field:"noise"},destination:{node_id:Wt,field:"noise"}},{source:{node_id:qe,field:"conditioning"},destination:{node_id:Wt,field:"negative_conditioning"}},{source:{node_id:Be,field:"conditioning"},destination:{node_id:Wt,field:"positive_conditioning"}}]};if(c&&(l.width!==d||l.height!==f)){const g={id:Qn,type:"img_resize",image:{image_name:l.imageName},is_intermediate:!0,width:d,height:f};v.nodes[Qn]=g,v.edges.push({source:{node_id:Qn,field:"image"},destination:{node_id:vt,field:"image"}}),v.edges.push({source:{node_id:Qn,field:"width"},destination:{node_id:$e,field:"width"}}),v.edges.push({source:{node_id:Qn,field:"height"},destination:{node_id:$e,field:"height"}})}else v.nodes[vt].image={image_name:l.imageName},v.edges.push({source:{node_id:vt,field:"width"},destination:{node_id:$e,field:"width"}}),v.edges.push({source:{node_id:vt,field:"height"},destination:{node_id:$e,field:"height"}});return v.nodes[Ke]={id:Ke,type:"metadata_accumulator",generation_mode:"img2img",cfg_scale:o,height:f,width:d,positive_prompt:"",negative_prompt:r,model:i,seed:0,steps:a,rand_device:y?"cpu":"cuda",scheduler:s,vae:void 0,controlnets:[],loras:[],clip_skip:h,strength:u,init_image:l.imageName},v.edges.push({source:{node_id:Ke,field:"metadata"},destination:{node_id:We,field:"metadata"}}),Ih(e,v,Wt),Nh(e,v),Cc(e,v),Yv(e,v,Wt),e.system.shouldUseNSFWChecker&&xl(e,v),e.system.shouldUseWatermarker&&Cl(e,v),v},UN=(e,t,n)=>{const{positivePrompt:r,negativePrompt:i}=e.generation,{refinerModel:o,refinerAestheticScore:s,positiveStylePrompt:a,negativeStylePrompt:l,refinerSteps:u,refinerScheduler:c,refinerCFGScale:d,refinerStart:f}=e.sdxl;if(!o)return;const h=t.nodes[Ke];h&&(h.refiner_model=o,h.refiner_aesthetic_store=s,h.refiner_cfg_scale=d,h.refiner_scheduler=c,h.refiner_start=f,h.refiner_steps=u),t.edges=t.edges.filter(p=>!(p.source.node_id===n&&["latents"].includes(p.source.field))),t.edges=t.edges.filter(p=>!(p.source.node_id===Jt&&["vae"].includes(p.source.field))),n===Ni&&t.edges.push({source:{node_id:Jt,field:"vae"},destination:{node_id:vt,field:"vae"}}),t.nodes[Ul]={type:"sdxl_refiner_model_loader",id:Ul,model:o},t.nodes[Mp]={type:"sdxl_refiner_compel_prompt",id:Mp,style:`${r} ${a}`,aesthetic_score:s},t.nodes[Ip]={type:"sdxl_refiner_compel_prompt",id:Ip,style:`${i} ${l}`,aesthetic_score:s},t.nodes[ya]={type:"l2l_sdxl",id:ya,cfg_scale:d,steps:u/(1-Math.min(f,.99)),scheduler:c,denoising_start:f,denoising_end:1},t.edges.push({source:{node_id:Ul,field:"unet"},destination:{node_id:ya,field:"unet"}},{source:{node_id:Ul,field:"vae"},destination:{node_id:We,field:"vae"}},{source:{node_id:Ul,field:"clip2"},destination:{node_id:Mp,field:"clip2"}},{source:{node_id:Ul,field:"clip2"},destination:{node_id:Ip,field:"clip2"}},{source:{node_id:Mp,field:"conditioning"},destination:{node_id:ya,field:"positive_conditioning"}},{source:{node_id:Ip,field:"conditioning"},destination:{node_id:ya,field:"negative_conditioning"}},{source:{node_id:n,field:"latents"},destination:{node_id:ya,field:"latents"}},{source:{node_id:ya,field:"latents"},destination:{node_id:We,field:"latents"}})},Npe=e=>{const t=fe("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,scheduler:s,steps:a,initialImage:l,shouldFitToWidthHeight:u,width:c,height:d,clipSkip:f,shouldUseCpuNoise:h,shouldUseNoiseSettings:p,vaePrecision:m}=e.generation,{positiveStylePrompt:S,negativeStylePrompt:y,shouldConcatSDXLStylePrompt:v,shouldUseSDXLRefiner:g,refinerStart:b,sdxlImg2ImgDenoisingStrength:_}=e.sdxl;if(!l)throw t.error("No initial image found in state"),new Error("No initial image found in state");if(!i)throw t.error("No model found in state"),new Error("No model found in state");const w=p?h:Wo.shouldUseCpuNoise,x={id:vce,nodes:{[Jt]:{type:"sdxl_model_loader",id:Jt,model:i},[Be]:{type:"sdxl_compel_prompt",id:Be,prompt:n,style:v?`${n} ${S}`:S},[qe]:{type:"sdxl_compel_prompt",id:qe,prompt:r,style:v?`${r} ${y}`:y},[$e]:{type:"noise",id:$e,use_cpu:w},[We]:{type:"l2i",id:We,fp32:m==="fp32"},[Ni]:{type:"l2l_sdxl",id:Ni,cfg_scale:o,scheduler:s,steps:a,denoising_start:g?Math.min(b,1-_):1-_,denoising_end:g?b:1},[vt]:{type:"i2l",id:vt,fp32:m==="fp32"}},edges:[{source:{node_id:Jt,field:"unet"},destination:{node_id:Ni,field:"unet"}},{source:{node_id:Jt,field:"vae"},destination:{node_id:We,field:"vae"}},{source:{node_id:Jt,field:"vae"},destination:{node_id:vt,field:"vae"}},{source:{node_id:Jt,field:"clip"},destination:{node_id:Be,field:"clip"}},{source:{node_id:Jt,field:"clip2"},destination:{node_id:Be,field:"clip2"}},{source:{node_id:Jt,field:"clip"},destination:{node_id:qe,field:"clip"}},{source:{node_id:Jt,field:"clip2"},destination:{node_id:qe,field:"clip2"}},{source:{node_id:Ni,field:"latents"},destination:{node_id:We,field:"latents"}},{source:{node_id:vt,field:"latents"},destination:{node_id:Ni,field:"latents"}},{source:{node_id:$e,field:"noise"},destination:{node_id:Ni,field:"noise"}},{source:{node_id:Be,field:"conditioning"},destination:{node_id:Ni,field:"positive_conditioning"}},{source:{node_id:qe,field:"conditioning"},destination:{node_id:Ni,field:"negative_conditioning"}}]};if(u&&(l.width!==c||l.height!==d)){const T={id:Qn,type:"img_resize",image:{image_name:l.imageName},is_intermediate:!0,width:c,height:d};x.nodes[Qn]=T,x.edges.push({source:{node_id:Qn,field:"image"},destination:{node_id:vt,field:"image"}}),x.edges.push({source:{node_id:Qn,field:"width"},destination:{node_id:$e,field:"width"}}),x.edges.push({source:{node_id:Qn,field:"height"},destination:{node_id:$e,field:"height"}})}else x.nodes[vt].image={image_name:l.imageName},x.edges.push({source:{node_id:vt,field:"width"},destination:{node_id:$e,field:"width"}}),x.edges.push({source:{node_id:vt,field:"height"},destination:{node_id:$e,field:"height"}});return x.nodes[Ke]={id:Ke,type:"metadata_accumulator",generation_mode:"sdxl_img2img",cfg_scale:o,height:d,width:c,positive_prompt:"",negative_prompt:r,model:i,seed:0,steps:a,rand_device:w?"cpu":"cuda",scheduler:s,vae:void 0,controlnets:[],loras:[],clip_skip:f,strength:_,init_image:l.imageName,positive_style_prompt:S,negative_style_prompt:y},x.edges.push({source:{node_id:Ke,field:"metadata"},destination:{node_id:We,field:"metadata"}}),g&&UN(e,x,Ni),Cc(e,x),e.system.shouldUseNSFWChecker&&xl(e,x),e.system.shouldUseWatermarker&&Cl(e,x),x},Dpe=()=>{le({predicate:e=>Ph.match(e)&&e.payload==="img2img",effect:async(e,{getState:t,dispatch:n,take:r})=>{const i=fe("session"),o=t(),s=o.generation.model;let a;s&&s.base_model==="sdxl"?a=Npe(o):a=Ipe(o),n(XI(a)),i.debug({graph:ia(a)},"Image to Image graph built"),n(Rn({graph:a})),await r(Rn.fulfilled.match),n(pl())}})};let jp;const Lpe=new Uint8Array(16);function $pe(){if(!jp&&(jp=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!jp))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return jp(Lpe)}const xn=[];for(let e=0;e<256;++e)xn.push((e+256).toString(16).slice(1));function Fpe(e,t=0){return(xn[e[t+0]]+xn[e[t+1]]+xn[e[t+2]]+xn[e[t+3]]+"-"+xn[e[t+4]]+xn[e[t+5]]+"-"+xn[e[t+6]]+xn[e[t+7]]+"-"+xn[e[t+8]]+xn[e[t+9]]+"-"+xn[e[t+10]]+xn[e[t+11]]+xn[e[t+12]]+xn[e[t+13]]+xn[e[t+14]]+xn[e[t+15]]).toLowerCase()}const Bpe=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),I6={randomUUID:Bpe};function jpe(e,t,n){if(I6.randomUUID&&!t&&!e)return I6.randomUUID();e=e||{};const r=e.random||(e.rng||$pe)();if(r[6]=r[6]&15|64,r[8]=r[8]&63|128,t){n=n||0;for(let i=0;i<16;++i)t[n+i]=r[i];return t}return Fpe(r)}const Vpe=e=>{if(e.type==="color"&&e.value){const t=Ln(e.value),{r:n,g:r,b:i,a:o}=e.value,s=Math.max(0,Math.min(o*255,255));return Object.assign(t,{r:n,g:r,b:i,a:s}),t}return e.value},zpe=e=>{const{nodes:t,edges:n}=e.nodes,i=t.filter(a=>a.type!=="progress_image").reduce((a,l)=>{const{id:u,data:c}=l,{type:d,inputs:f}=c,h=$x(f,(m,S,y)=>{const v=Vpe(S);return m[y]=v,m},{}),p={type:d,id:u,...h};return Object.assign(a,{[u]:p}),a},{}),o=n.reduce((a,l)=>{const{source:u,target:c,sourceHandle:d,targetHandle:f}=l;return a.push({source:{node_id:u,field:d},destination:{node_id:c,field:f}}),a},[]);return o.forEach(a=>{const l=i[a.destination.node_id],u=a.destination.field;i[a.destination.node_id]=w0(l,u)}),{id:jpe(),nodes:i,edges:o}},Upe=()=>{le({predicate:e=>Ph.match(e)&&e.payload==="nodes",effect:async(e,{getState:t,dispatch:n,take:r})=>{const i=fe("session"),o=t(),s=zpe(o);n(QI(s)),i.debug({graph:ia(s)},"Nodes graph built"),n(Rn({graph:s})),await r(Rn.fulfilled.match),n(pl())}})},Gpe=e=>{const t=fe("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,scheduler:s,steps:a,width:l,height:u,clipSkip:c,shouldUseCpuNoise:d,shouldUseNoiseSettings:f,vaePrecision:h}=e.generation,{positiveStylePrompt:p,negativeStylePrompt:m,shouldConcatSDXLStylePrompt:S,shouldUseSDXLRefiner:y,refinerStart:v}=e.sdxl,g=f?d:Wo.shouldUseCpuNoise;if(!i)throw t.error("No model found in state"),new Error("No model found in state");const b={id:yce,nodes:{[Jt]:{type:"sdxl_model_loader",id:Jt,model:i},[Be]:{type:"sdxl_compel_prompt",id:Be,prompt:n,style:S?`${n} ${p}`:p},[qe]:{type:"sdxl_compel_prompt",id:qe,prompt:r,style:S?`${r} ${m}`:m},[$e]:{type:"noise",id:$e,width:l,height:u,use_cpu:g},[is]:{type:"t2l_sdxl",id:is,cfg_scale:o,scheduler:s,steps:a,denoising_end:y?v:1},[We]:{type:"l2i",id:We,fp32:h==="fp32"}},edges:[{source:{node_id:Jt,field:"unet"},destination:{node_id:is,field:"unet"}},{source:{node_id:Jt,field:"vae"},destination:{node_id:We,field:"vae"}},{source:{node_id:Jt,field:"clip"},destination:{node_id:Be,field:"clip"}},{source:{node_id:Jt,field:"clip2"},destination:{node_id:Be,field:"clip2"}},{source:{node_id:Jt,field:"clip"},destination:{node_id:qe,field:"clip"}},{source:{node_id:Jt,field:"clip2"},destination:{node_id:qe,field:"clip2"}},{source:{node_id:Be,field:"conditioning"},destination:{node_id:is,field:"positive_conditioning"}},{source:{node_id:qe,field:"conditioning"},destination:{node_id:is,field:"negative_conditioning"}},{source:{node_id:$e,field:"noise"},destination:{node_id:is,field:"noise"}},{source:{node_id:is,field:"latents"},destination:{node_id:We,field:"latents"}}]};return b.nodes[Ke]={id:Ke,type:"metadata_accumulator",generation_mode:"sdxl_txt2img",cfg_scale:o,height:u,width:l,positive_prompt:"",negative_prompt:r,model:i,seed:0,steps:a,rand_device:g?"cpu":"cuda",scheduler:s,vae:void 0,controlnets:[],loras:[],clip_skip:c,positive_style_prompt:p,negative_style_prompt:m},b.edges.push({source:{node_id:Ke,field:"metadata"},destination:{node_id:We,field:"metadata"}}),y&&UN(e,b,is),Cc(e,b),e.system.shouldUseNSFWChecker&&xl(e,b),e.system.shouldUseWatermarker&&Cl(e,b),b},Hpe=e=>{const t=fe("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,scheduler:s,steps:a,width:l,height:u,clipSkip:c,shouldUseCpuNoise:d,shouldUseNoiseSettings:f,vaePrecision:h}=e.generation,p=f?d:Wo.shouldUseCpuNoise;if(!i)throw t.error("No model found in state"),new Error("No model found in state");const m=i.model_type.includes("onnx"),S=m?rv:Pn,y={id:SC,nodes:{[S]:{type:S,id:S,model:i},[it]:{type:"clip_skip",id:it,skipped_layers:c},[Be]:{type:m?"prompt_onnx":"compel",id:Be,prompt:n},[qe]:{type:m?"prompt_onnx":"compel",id:qe,prompt:r},[$e]:{type:"noise",id:$e,width:l,height:u,use_cpu:p},[cn]:{type:m?"t2l_onnx":"t2l",id:cn,cfg_scale:o,scheduler:s,steps:a},[We]:{type:m?"l2i_onnx":"l2i",id:We,fp32:h==="fp32"}},edges:[{source:{node_id:S,field:"clip"},destination:{node_id:it,field:"clip"}},{source:{node_id:S,field:"unet"},destination:{node_id:cn,field:"unet"}},{source:{node_id:it,field:"clip"},destination:{node_id:Be,field:"clip"}},{source:{node_id:it,field:"clip"},destination:{node_id:qe,field:"clip"}},{source:{node_id:Be,field:"conditioning"},destination:{node_id:cn,field:"positive_conditioning"}},{source:{node_id:qe,field:"conditioning"},destination:{node_id:cn,field:"negative_conditioning"}},{source:{node_id:cn,field:"latents"},destination:{node_id:We,field:"latents"}},{source:{node_id:$e,field:"noise"},destination:{node_id:cn,field:"noise"}}]};return y.nodes[Ke]={id:Ke,type:"metadata_accumulator",generation_mode:"txt2img",cfg_scale:o,height:u,width:l,positive_prompt:"",negative_prompt:r,model:i,seed:0,steps:a,rand_device:p?"cpu":"cuda",scheduler:s,vae:void 0,controlnets:[],loras:[],clip_skip:c},y.edges.push({source:{node_id:Ke,field:"metadata"},destination:{node_id:We,field:"metadata"}}),Ih(e,y,cn,S),Nh(e,y,S),Cc(e,y),Yv(e,y,cn),e.system.shouldUseNSFWChecker&&xl(e,y),e.system.shouldUseWatermarker&&Cl(e,y),y},qpe=()=>{le({predicate:e=>Ph.match(e)&&e.payload==="txt2img",effect:async(e,{getState:t,dispatch:n,take:r})=>{const i=fe("session"),o=t(),s=o.generation.model;let a;s&&s.base_model==="sdxl"?a=Gpe(o):a=Hpe(o),n(KI(a)),i.debug({graph:ia(a)},"Text to Image graph built"),n(Rn({graph:a})),await r(Rn.fulfilled.match),n(pl())}})},GN=Xk(),le=GN.startListening;rue();iue();aue();Xle();Yle();Qle();Zle();Ple();nue();Mpe();Upe();qpe();Dpe();Jue();zle();Ble();$le();Vle();hce();_le();nce();rce();oce();sce();lce();ece();tce();dce();fce();uce();cce();ace();Wue();Kue();Xue();Yue();Que();Zue();Gue();Hue();que();Hle();Gle();qle();Wle();eue();tue();Ale();Fue();Jle();lue();Tle();cue();xle();wle();_ce();gce();const Wpe={canvas:XQ,gallery:gJ,generation:PQ,nodes:Jse,postprocessing:eae,system:Pae,config:aY,ui:kQ,hotkeys:Oae,controlNet:cJ,boards:pJ,dynamicPrompts:fJ,imageDeletion:bJ,lora:_J,modelmanager:Rae,sdxl:rae,[Hs.reducerPath]:Hs.reducer},Kpe=gc(Wpe),Xpe=nle(Kpe),Ype=["canvas","gallery","generation","sdxl","nodes","postprocessing","system","ui","controlNet","dynamicPrompts","lora","modelmanager"],Qpe=kk({reducer:Xpe,enhancers:e=>e.concat(rle(window.localStorage,Ype,{persistDebounce:300,serialize:ple,unserialize:mle,prefix:ile})).concat(Qk()),middleware:e=>e({immutableCheck:!1,serializableCheck:!1}).concat(Hs.middleware).concat(Dae).prepend(GN.middleware),devTools:{actionSanitizer:vle,stateSanitizer:Sle,trace:!0,predicate:(e,t)=>!ble.includes(t.type)}}),_4e=e=>e;function Zpe(e){if(e.sheet)return e.sheet;for(var t=0;t0?En(Tc,--Sr):0,uc--,Kt===10&&(uc=1,Zv--),Kt}function Ar(){return Kt=Sr2||Vf(Kt)>3?"":" "}function dge(e,t){for(;--t&&Ar()&&!(Kt<48||Kt>102||Kt>57&&Kt<65||Kt>70&&Kt<97););return Dh(e,wg()+(t<6&&Zi()==32&&Ar()==32))}function E2(e){for(;Ar();)switch(Kt){case e:return Sr;case 34:case 39:e!==34&&e!==39&&E2(Kt);break;case 40:e===41&&E2(e);break;case 92:Ar();break}return Sr}function fge(e,t){for(;Ar()&&e+Kt!==47+10;)if(e+Kt===42+42&&Zi()===47)break;return"/*"+Dh(t,Sr-1)+"*"+Qv(e===47?e:Ar())}function hge(e){for(;!Vf(Zi());)Ar();return Dh(e,Sr)}function pge(e){return YN(Cg("",null,null,null,[""],e=XN(e),0,[0],e))}function Cg(e,t,n,r,i,o,s,a,l){for(var u=0,c=0,d=s,f=0,h=0,p=0,m=1,S=1,y=1,v=0,g="",b=i,_=o,w=r,x=g;S;)switch(p=v,v=Ar()){case 40:if(p!=108&&En(x,d-1)==58){T2(x+=He(xg(v),"&","&\f"),"&\f")!=-1&&(y=-1);break}case 34:case 39:case 91:x+=xg(v);break;case 9:case 10:case 13:case 32:x+=cge(p);break;case 92:x+=dge(wg()-1,7);continue;case 47:switch(Zi()){case 42:case 47:Vp(gge(fge(Ar(),wg()),t,n),l);break;default:x+="/"}break;case 123*m:a[u++]=Bi(x)*y;case 125*m:case 59:case 0:switch(v){case 0:case 125:S=0;case 59+c:y==-1&&(x=He(x,/\f/g,"")),h>0&&Bi(x)-d&&Vp(h>32?D6(x+";",r,n,d-1):D6(He(x," ","")+";",r,n,d-2),l);break;case 59:x+=";";default:if(Vp(w=N6(x,t,n,u,c,i,a,g,b=[],_=[],d),o),v===123)if(c===0)Cg(x,t,w,w,b,o,d,a,_);else switch(f===99&&En(x,3)===110?100:f){case 100:case 108:case 109:case 115:Cg(e,w,w,r&&Vp(N6(e,w,w,0,0,i,a,g,i,b=[],d),_),i,_,d,a,r?b:_);break;default:Cg(x,w,w,w,[""],_,0,a,_)}}u=c=h=0,m=y=1,g=x="",d=s;break;case 58:d=1+Bi(x),h=p;default:if(m<1){if(v==123)--m;else if(v==125&&m++==0&&uge()==125)continue}switch(x+=Qv(v),v*m){case 38:y=c>0?1:(x+="\f",-1);break;case 44:a[u++]=(Bi(x)-1)*y,y=1;break;case 64:Zi()===45&&(x+=xg(Ar())),f=Zi(),c=d=Bi(g=x+=hge(wg())),v++;break;case 45:p===45&&Bi(x)==2&&(m=0)}}return o}function N6(e,t,n,r,i,o,s,a,l,u,c){for(var d=i-1,f=i===0?o:[""],h=FC(f),p=0,m=0,S=0;p0?f[y]+" "+v:He(v,/&\f/g,f[y])))&&(l[S++]=g);return Jv(e,t,n,i===0?LC:a,l,u,c)}function gge(e,t,n){return Jv(e,t,n,HN,Qv(lge()),jf(e,2,-2),0)}function D6(e,t,n,r){return Jv(e,t,n,$C,jf(e,0,r),jf(e,r+1,-1),r)}function $u(e,t){for(var n="",r=FC(e),i=0;i6)switch(En(e,t+1)){case 109:if(En(e,t+4)!==45)break;case 102:return He(e,/(.+:)(.+)-([^]+)/,"$1"+Ge+"$2-$3$1"+ty+(En(e,t+3)==108?"$3":"$2-$3"))+e;case 115:return~T2(e,"stretch")?ZN(He(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(En(e,t+1)!==115)break;case 6444:switch(En(e,Bi(e)-3-(~T2(e,"!important")&&10))){case 107:return He(e,":",":"+Ge)+e;case 101:return He(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+Ge+(En(e,14)===45?"inline-":"")+"box$3$1"+Ge+"$2$3$1"+Dn+"$2box$3")+e}break;case 5936:switch(En(e,t+11)){case 114:return Ge+e+Dn+He(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return Ge+e+Dn+He(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return Ge+e+Dn+He(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return Ge+e+Dn+e+e}return e}var Cge=function(t,n,r,i){if(t.length>-1&&!t.return)switch(t.type){case $C:t.return=ZN(t.value,t.length);break;case qN:return $u([rd(t,{value:He(t.value,"@","@"+Ge)})],i);case LC:if(t.length)return age(t.props,function(o){switch(sge(o,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return $u([rd(t,{props:[He(o,/:(read-\w+)/,":"+ty+"$1")]})],i);case"::placeholder":return $u([rd(t,{props:[He(o,/:(plac\w+)/,":"+Ge+"input-$1")]}),rd(t,{props:[He(o,/:(plac\w+)/,":"+ty+"$1")]}),rd(t,{props:[He(o,/:(plac\w+)/,Dn+"input-$1")]})],i)}return""})}},Tge=[Cge],Ege=function(t){var n=t.key;if(n==="css"){var r=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(r,function(m){var S=m.getAttribute("data-emotion");S.indexOf(" ")!==-1&&(document.head.appendChild(m),m.setAttribute("data-s",""))})}var i=t.stylisPlugins||Tge,o={},s,a=[];s=t.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+n+' "]'),function(m){for(var S=m.getAttribute("data-emotion").split(" "),y=1;y=4;++r,i-=4)n=e.charCodeAt(r)&255|(e.charCodeAt(++r)&255)<<8|(e.charCodeAt(++r)&255)<<16|(e.charCodeAt(++r)&255)<<24,n=(n&65535)*1540483477+((n>>>16)*59797<<16),n^=n>>>24,t=(n&65535)*1540483477+((n>>>16)*59797<<16)^(t&65535)*1540483477+((t>>>16)*59797<<16);switch(i){case 3:t^=(e.charCodeAt(r+2)&255)<<16;case 2:t^=(e.charCodeAt(r+1)&255)<<8;case 1:t^=e.charCodeAt(r)&255,t=(t&65535)*1540483477+((t>>>16)*59797<<16)}return t^=t>>>13,t=(t&65535)*1540483477+((t>>>16)*59797<<16),((t^t>>>15)>>>0).toString(36)}var Rge={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},Oge=/[A-Z]|^ms/g,Mge=/_EMO_([^_]+?)_([^]*?)_EMO_/g,tD=function(t){return t.charCodeAt(1)===45},F6=function(t){return t!=null&&typeof t!="boolean"},tS=QN(function(e){return tD(e)?e:e.replace(Oge,"-$&").toLowerCase()}),B6=function(t,n){switch(t){case"animation":case"animationName":if(typeof n=="string")return n.replace(Mge,function(r,i,o){return ji={name:i,styles:o,next:ji},i})}return Rge[t]!==1&&!tD(t)&&typeof n=="number"&&n!==0?n+"px":n};function zf(e,t,n){if(n==null)return"";if(n.__emotion_styles!==void 0)return n;switch(typeof n){case"boolean":return"";case"object":{if(n.anim===1)return ji={name:n.name,styles:n.styles,next:ji},n.name;if(n.styles!==void 0){var r=n.next;if(r!==void 0)for(;r!==void 0;)ji={name:r.name,styles:r.styles,next:ji},r=r.next;var i=n.styles+";";return i}return Ige(e,t,n)}case"function":{if(e!==void 0){var o=ji,s=n(e);return ji=o,zf(e,t,s)}break}}if(t==null)return n;var a=t[n];return a!==void 0?a:n}function Ige(e,t,n){var r="";if(Array.isArray(n))for(var i=0;i` or ``");return e}var sD=k.createContext({});sD.displayName="ColorModeContext";function jC(){const e=k.useContext(sD);if(e===void 0)throw new Error("useColorMode must be used within a ColorModeProvider");return e}function C4e(e,t){const{colorMode:n}=jC();return n==="dark"?t:e}function Vge(){const e=jC(),t=oD();return{...e,theme:t}}function zge(e,t,n){var r,i;if(t==null)return t;const o=s=>{var a,l;return(l=(a=e.__breakpoints)==null?void 0:a.asArray)==null?void 0:l[s]};return(i=(r=o(t))!=null?r:o(n))!=null?i:n}function Uge(e,t,n){var r,i;if(t==null)return t;const o=s=>{var a,l;return(l=(a=e.__cssMap)==null?void 0:a[s])==null?void 0:l.value};return(i=(r=o(t))!=null?r:o(n))!=null?i:n}function T4e(e,t,n){const r=oD();return Gge(e,t,n)(r)}function Gge(e,t,n){const r=Array.isArray(t)?t:[t],i=Array.isArray(n)?n:[n];return o=>{const s=i.filter(Boolean),a=r.map((l,u)=>{var c,d;if(e==="breakpoints")return zge(o,l,(c=s[u])!=null?c:l);const f=`${e}.${l}`;return Uge(o,f,(d=s[u])!=null?d:l)});return Array.isArray(t)?a:a[0]}}var aD=(...e)=>e.filter(Boolean).join(" ");function Hge(){return!1}function Mo(e){const t=typeof e;return e!=null&&(t==="object"||t==="function")&&!Array.isArray(e)}var E4e=e=>{const{condition:t,message:n}=e;t&&Hge()&&console.warn(n)};function Da(e,...t){return qge(e)?e(...t):e}var qge=e=>typeof e=="function",P4e=e=>e?"":void 0,A4e=e=>e?!0:void 0;function k4e(...e){return function(n){e.some(r=>(r==null||r(n),n==null?void 0:n.defaultPrevented))}}function R4e(...e){return function(n){e.forEach(r=>{r==null||r(n)})}}var ny={exports:{}};ny.exports;(function(e,t){var n=200,r="__lodash_hash_undefined__",i=800,o=16,s=9007199254740991,a="[object Arguments]",l="[object Array]",u="[object AsyncFunction]",c="[object Boolean]",d="[object Date]",f="[object Error]",h="[object Function]",p="[object GeneratorFunction]",m="[object Map]",S="[object Number]",y="[object Null]",v="[object Object]",g="[object Proxy]",b="[object RegExp]",_="[object Set]",w="[object String]",x="[object Undefined]",T="[object WeakMap]",P="[object ArrayBuffer]",E="[object DataView]",A="[object Float32Array]",$="[object Float64Array]",I="[object Int8Array]",C="[object Int16Array]",R="[object Int32Array]",M="[object Uint8Array]",N="[object Uint8ClampedArray]",O="[object Uint16Array]",D="[object Uint32Array]",L=/[\\^$.*+?()[\]{}|]/g,j=/^\[object .+?Constructor\]$/,U=/^(?:0|[1-9]\d*)$/,G={};G[A]=G[$]=G[I]=G[C]=G[R]=G[M]=G[N]=G[O]=G[D]=!0,G[a]=G[l]=G[P]=G[c]=G[E]=G[d]=G[f]=G[h]=G[m]=G[S]=G[v]=G[b]=G[_]=G[w]=G[T]=!1;var W=typeof Ee=="object"&&Ee&&Ee.Object===Object&&Ee,X=typeof self=="object"&&self&&self.Object===Object&&self,Y=W||X||Function("return this")(),B=t&&!t.nodeType&&t,H=B&&!0&&e&&!e.nodeType&&e,Q=H&&H.exports===B,J=Q&&W.process,ne=function(){try{var F=H&&H.require&&H.require("util").types;return F||J&&J.binding&&J.binding("util")}catch{}}(),te=ne&&ne.isTypedArray;function xe(F,V,q){switch(q.length){case 0:return F.call(V);case 1:return F.call(V,q[0]);case 2:return F.call(V,q[0],q[1]);case 3:return F.call(V,q[0],q[1],q[2])}return F.apply(V,q)}function ve(F,V){for(var q=-1,ie=Array(F);++q-1}function fo(F,V){var q=this.__data__,ie=kl(q,F);return ie<0?(++this.size,q.push([F,V])):q[ie][1]=V,this}_n.prototype.clear=co,_n.prototype.delete=Zo,_n.prototype.get=Jo,_n.prototype.has=Al,_n.prototype.set=fo;function qn(F){var V=-1,q=F==null?0:F.length;for(this.clear();++V1?q[Le-1]:void 0,gt=Le>2?q[2]:void 0;for(rt=F.length>3&&typeof rt=="function"?(Le--,rt):void 0,gt&&U$(q[0],q[1],gt)&&(rt=Le<3?void 0:rt,Le=1),V=Object(V);++ie-1&&F%1==0&&F0){if(++V>=i)return arguments[0]}else V=0;return F.apply(void 0,arguments)}}function Q$(F){if(F!=null){try{return tt.call(F)}catch{}try{return F+""}catch{}}return""}function Kh(F,V){return F===V||F!==F&&V!==V}var k1=qh(function(){return arguments}())?qh:function(F){return Oc(F)&&Ut.call(F,"callee")&&!ri.call(F,"callee")},R1=Array.isArray;function O1(F){return F!=null&&R3(F.length)&&!M1(F)}function Z$(F){return Oc(F)&&O1(F)}var k3=da||rF;function M1(F){if(!pa(F))return!1;var V=Ol(F);return V==h||V==p||V==u||V==g}function R3(F){return typeof F=="number"&&F>-1&&F%1==0&&F<=s}function pa(F){var V=typeof F;return F!=null&&(V=="object"||V=="function")}function Oc(F){return F!=null&&typeof F=="object"}function J$(F){if(!Oc(F)||Ol(F)!=v)return!1;var V=wr(F);if(V===null)return!0;var q=Ut.call(V,"constructor")&&V.constructor;return typeof q=="function"&&q instanceof q&&tt.call(q)==Lr}var O3=te?ce(te):Rc;function eF(F){return F$(F,M3(F))}function M3(F){return O1(F)?x1(F,!0):R$(F)}var tF=B$(function(F,V,q,ie){E3(F,V,q,ie)});function nF(F){return function(){return F}}function I3(F){return F}function rF(){return!1}e.exports=tF})(ny,ny.exports);var Wge=ny.exports;const Wi=ll(Wge);var Kge=e=>/!(important)?$/.test(e),z6=e=>typeof e=="string"?e.replace(/!(important)?$/,"").trim():e,Xge=(e,t)=>n=>{const r=String(t),i=Kge(r),o=z6(r),s=e?`${e}.${o}`:o;let a=Mo(n.__cssMap)&&s in n.__cssMap?n.__cssMap[s].varRef:t;return a=z6(a),i?`${a} !important`:a};function VC(e){const{scale:t,transform:n,compose:r}=e;return(o,s)=>{var a;const l=Xge(t,o)(s);let u=(a=n==null?void 0:n(l,s))!=null?a:l;return r&&(u=r(u,s)),u}}var zp=(...e)=>t=>e.reduce((n,r)=>r(n),t);function jr(e,t){return n=>{const r={property:n,scale:e};return r.transform=VC({scale:e,transform:t}),r}}var Yge=({rtl:e,ltr:t})=>n=>n.direction==="rtl"?e:t;function Qge(e){const{property:t,scale:n,transform:r}=e;return{scale:n,property:Yge(t),transform:n?VC({scale:n,compose:r}):r}}var lD=["rotate(var(--chakra-rotate, 0))","scaleX(var(--chakra-scale-x, 1))","scaleY(var(--chakra-scale-y, 1))","skewX(var(--chakra-skew-x, 0))","skewY(var(--chakra-skew-y, 0))"];function Zge(){return["translateX(var(--chakra-translate-x, 0))","translateY(var(--chakra-translate-y, 0))",...lD].join(" ")}function Jge(){return["translate3d(var(--chakra-translate-x, 0), var(--chakra-translate-y, 0), 0)",...lD].join(" ")}var eme={"--chakra-blur":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-brightness":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-contrast":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-grayscale":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-hue-rotate":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-invert":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-saturate":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-sepia":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-drop-shadow":"var(--chakra-empty,/*!*/ /*!*/)",filter:["var(--chakra-blur)","var(--chakra-brightness)","var(--chakra-contrast)","var(--chakra-grayscale)","var(--chakra-hue-rotate)","var(--chakra-invert)","var(--chakra-saturate)","var(--chakra-sepia)","var(--chakra-drop-shadow)"].join(" ")},tme={backdropFilter:["var(--chakra-backdrop-blur)","var(--chakra-backdrop-brightness)","var(--chakra-backdrop-contrast)","var(--chakra-backdrop-grayscale)","var(--chakra-backdrop-hue-rotate)","var(--chakra-backdrop-invert)","var(--chakra-backdrop-opacity)","var(--chakra-backdrop-saturate)","var(--chakra-backdrop-sepia)"].join(" "),"--chakra-backdrop-blur":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-brightness":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-contrast":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-grayscale":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-hue-rotate":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-invert":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-opacity":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-saturate":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-sepia":"var(--chakra-empty,/*!*/ /*!*/)"};function nme(e){return{"--chakra-ring-offset-shadow":"var(--chakra-ring-inset) 0 0 0 var(--chakra-ring-offset-width) var(--chakra-ring-offset-color)","--chakra-ring-shadow":"var(--chakra-ring-inset) 0 0 0 calc(var(--chakra-ring-width) + var(--chakra-ring-offset-width)) var(--chakra-ring-color)","--chakra-ring-width":e,boxShadow:["var(--chakra-ring-offset-shadow)","var(--chakra-ring-shadow)","var(--chakra-shadow, 0 0 #0000)"].join(", ")}}var rme={"row-reverse":{space:"--chakra-space-x-reverse",divide:"--chakra-divide-x-reverse"},"column-reverse":{space:"--chakra-space-y-reverse",divide:"--chakra-divide-y-reverse"}},P2={"to-t":"to top","to-tr":"to top right","to-r":"to right","to-br":"to bottom right","to-b":"to bottom","to-bl":"to bottom left","to-l":"to left","to-tl":"to top left"},ime=new Set(Object.values(P2)),A2=new Set(["none","-moz-initial","inherit","initial","revert","unset"]),ome=e=>e.trim();function sme(e,t){if(e==null||A2.has(e))return e;if(!(k2(e)||A2.has(e)))return`url('${e}')`;const i=/(^[a-z-A-Z]+)\((.*)\)/g.exec(e),o=i==null?void 0:i[1],s=i==null?void 0:i[2];if(!o||!s)return e;const a=o.includes("-gradient")?o:`${o}-gradient`,[l,...u]=s.split(",").map(ome).filter(Boolean);if((u==null?void 0:u.length)===0)return e;const c=l in P2?P2[l]:l;u.unshift(c);const d=u.map(f=>{if(ime.has(f))return f;const h=f.indexOf(" "),[p,m]=h!==-1?[f.substr(0,h),f.substr(h+1)]:[f],S=k2(m)?m:m&&m.split(" "),y=`colors.${p}`,v=y in t.__cssMap?t.__cssMap[y].varRef:p;return S?[v,...Array.isArray(S)?S:[S]].join(" "):v});return`${a}(${d.join(", ")})`}var k2=e=>typeof e=="string"&&e.includes("(")&&e.includes(")"),ame=(e,t)=>sme(e,t??{});function lme(e){return/^var\(--.+\)$/.test(e)}var ume=e=>{const t=parseFloat(e.toString()),n=e.toString().replace(String(t),"");return{unitless:!n,value:t,unit:n}},Mi=e=>t=>`${e}(${t})`,je={filter(e){return e!=="auto"?e:eme},backdropFilter(e){return e!=="auto"?e:tme},ring(e){return nme(je.px(e))},bgClip(e){return e==="text"?{color:"transparent",backgroundClip:"text"}:{backgroundClip:e}},transform(e){return e==="auto"?Zge():e==="auto-gpu"?Jge():e},vh(e){return e==="$100vh"?"var(--chakra-vh)":e},px(e){if(e==null)return e;const{unitless:t}=ume(e);return t||typeof e=="number"?`${e}px`:e},fraction(e){return typeof e!="number"||e>1?e:`${e*100}%`},float(e,t){const n={left:"right",right:"left"};return t.direction==="rtl"?n[e]:e},degree(e){if(lme(e)||e==null)return e;const t=typeof e=="string"&&!e.endsWith("deg");return typeof e=="number"||t?`${e}deg`:e},gradient:ame,blur:Mi("blur"),opacity:Mi("opacity"),brightness:Mi("brightness"),contrast:Mi("contrast"),dropShadow:Mi("drop-shadow"),grayscale:Mi("grayscale"),hueRotate:Mi("hue-rotate"),invert:Mi("invert"),saturate:Mi("saturate"),sepia:Mi("sepia"),bgImage(e){return e==null||k2(e)||A2.has(e)?e:`url(${e})`},outline(e){const t=String(e)==="0"||String(e)==="none";return e!==null&&t?{outline:"2px solid transparent",outlineOffset:"2px"}:{outline:e}},flexDirection(e){var t;const{space:n,divide:r}=(t=rme[e])!=null?t:{},i={flexDirection:e};return n&&(i[n]=1),r&&(i[r]=1),i}},z={borderWidths:jr("borderWidths"),borderStyles:jr("borderStyles"),colors:jr("colors"),borders:jr("borders"),gradients:jr("gradients",je.gradient),radii:jr("radii",je.px),space:jr("space",zp(je.vh,je.px)),spaceT:jr("space",zp(je.vh,je.px)),degreeT(e){return{property:e,transform:je.degree}},prop(e,t,n){return{property:e,scale:t,...t&&{transform:VC({scale:t,transform:n})}}},propT(e,t){return{property:e,transform:t}},sizes:jr("sizes",zp(je.vh,je.px)),sizesT:jr("sizes",zp(je.vh,je.fraction)),shadows:jr("shadows"),logical:Qge,blur:jr("blur",je.blur)},Tg={background:z.colors("background"),backgroundColor:z.colors("backgroundColor"),backgroundImage:z.gradients("backgroundImage"),backgroundSize:!0,backgroundPosition:!0,backgroundRepeat:!0,backgroundAttachment:!0,backgroundClip:{transform:je.bgClip},bgSize:z.prop("backgroundSize"),bgPosition:z.prop("backgroundPosition"),bg:z.colors("background"),bgColor:z.colors("backgroundColor"),bgPos:z.prop("backgroundPosition"),bgRepeat:z.prop("backgroundRepeat"),bgAttachment:z.prop("backgroundAttachment"),bgGradient:z.gradients("backgroundImage"),bgClip:{transform:je.bgClip}};Object.assign(Tg,{bgImage:Tg.backgroundImage,bgImg:Tg.backgroundImage});var Ue={border:z.borders("border"),borderWidth:z.borderWidths("borderWidth"),borderStyle:z.borderStyles("borderStyle"),borderColor:z.colors("borderColor"),borderRadius:z.radii("borderRadius"),borderTop:z.borders("borderTop"),borderBlockStart:z.borders("borderBlockStart"),borderTopLeftRadius:z.radii("borderTopLeftRadius"),borderStartStartRadius:z.logical({scale:"radii",property:{ltr:"borderTopLeftRadius",rtl:"borderTopRightRadius"}}),borderEndStartRadius:z.logical({scale:"radii",property:{ltr:"borderBottomLeftRadius",rtl:"borderBottomRightRadius"}}),borderTopRightRadius:z.radii("borderTopRightRadius"),borderStartEndRadius:z.logical({scale:"radii",property:{ltr:"borderTopRightRadius",rtl:"borderTopLeftRadius"}}),borderEndEndRadius:z.logical({scale:"radii",property:{ltr:"borderBottomRightRadius",rtl:"borderBottomLeftRadius"}}),borderRight:z.borders("borderRight"),borderInlineEnd:z.borders("borderInlineEnd"),borderBottom:z.borders("borderBottom"),borderBlockEnd:z.borders("borderBlockEnd"),borderBottomLeftRadius:z.radii("borderBottomLeftRadius"),borderBottomRightRadius:z.radii("borderBottomRightRadius"),borderLeft:z.borders("borderLeft"),borderInlineStart:{property:"borderInlineStart",scale:"borders"},borderInlineStartRadius:z.logical({scale:"radii",property:{ltr:["borderTopLeftRadius","borderBottomLeftRadius"],rtl:["borderTopRightRadius","borderBottomRightRadius"]}}),borderInlineEndRadius:z.logical({scale:"radii",property:{ltr:["borderTopRightRadius","borderBottomRightRadius"],rtl:["borderTopLeftRadius","borderBottomLeftRadius"]}}),borderX:z.borders(["borderLeft","borderRight"]),borderInline:z.borders("borderInline"),borderY:z.borders(["borderTop","borderBottom"]),borderBlock:z.borders("borderBlock"),borderTopWidth:z.borderWidths("borderTopWidth"),borderBlockStartWidth:z.borderWidths("borderBlockStartWidth"),borderTopColor:z.colors("borderTopColor"),borderBlockStartColor:z.colors("borderBlockStartColor"),borderTopStyle:z.borderStyles("borderTopStyle"),borderBlockStartStyle:z.borderStyles("borderBlockStartStyle"),borderBottomWidth:z.borderWidths("borderBottomWidth"),borderBlockEndWidth:z.borderWidths("borderBlockEndWidth"),borderBottomColor:z.colors("borderBottomColor"),borderBlockEndColor:z.colors("borderBlockEndColor"),borderBottomStyle:z.borderStyles("borderBottomStyle"),borderBlockEndStyle:z.borderStyles("borderBlockEndStyle"),borderLeftWidth:z.borderWidths("borderLeftWidth"),borderInlineStartWidth:z.borderWidths("borderInlineStartWidth"),borderLeftColor:z.colors("borderLeftColor"),borderInlineStartColor:z.colors("borderInlineStartColor"),borderLeftStyle:z.borderStyles("borderLeftStyle"),borderInlineStartStyle:z.borderStyles("borderInlineStartStyle"),borderRightWidth:z.borderWidths("borderRightWidth"),borderInlineEndWidth:z.borderWidths("borderInlineEndWidth"),borderRightColor:z.colors("borderRightColor"),borderInlineEndColor:z.colors("borderInlineEndColor"),borderRightStyle:z.borderStyles("borderRightStyle"),borderInlineEndStyle:z.borderStyles("borderInlineEndStyle"),borderTopRadius:z.radii(["borderTopLeftRadius","borderTopRightRadius"]),borderBottomRadius:z.radii(["borderBottomLeftRadius","borderBottomRightRadius"]),borderLeftRadius:z.radii(["borderTopLeftRadius","borderBottomLeftRadius"]),borderRightRadius:z.radii(["borderTopRightRadius","borderBottomRightRadius"])};Object.assign(Ue,{rounded:Ue.borderRadius,roundedTop:Ue.borderTopRadius,roundedTopLeft:Ue.borderTopLeftRadius,roundedTopRight:Ue.borderTopRightRadius,roundedTopStart:Ue.borderStartStartRadius,roundedTopEnd:Ue.borderStartEndRadius,roundedBottom:Ue.borderBottomRadius,roundedBottomLeft:Ue.borderBottomLeftRadius,roundedBottomRight:Ue.borderBottomRightRadius,roundedBottomStart:Ue.borderEndStartRadius,roundedBottomEnd:Ue.borderEndEndRadius,roundedLeft:Ue.borderLeftRadius,roundedRight:Ue.borderRightRadius,roundedStart:Ue.borderInlineStartRadius,roundedEnd:Ue.borderInlineEndRadius,borderStart:Ue.borderInlineStart,borderEnd:Ue.borderInlineEnd,borderTopStartRadius:Ue.borderStartStartRadius,borderTopEndRadius:Ue.borderStartEndRadius,borderBottomStartRadius:Ue.borderEndStartRadius,borderBottomEndRadius:Ue.borderEndEndRadius,borderStartRadius:Ue.borderInlineStartRadius,borderEndRadius:Ue.borderInlineEndRadius,borderStartWidth:Ue.borderInlineStartWidth,borderEndWidth:Ue.borderInlineEndWidth,borderStartColor:Ue.borderInlineStartColor,borderEndColor:Ue.borderInlineEndColor,borderStartStyle:Ue.borderInlineStartStyle,borderEndStyle:Ue.borderInlineEndStyle});var cme={color:z.colors("color"),textColor:z.colors("color"),fill:z.colors("fill"),stroke:z.colors("stroke")},R2={boxShadow:z.shadows("boxShadow"),mixBlendMode:!0,blendMode:z.prop("mixBlendMode"),backgroundBlendMode:!0,bgBlendMode:z.prop("backgroundBlendMode"),opacity:!0};Object.assign(R2,{shadow:R2.boxShadow});var dme={filter:{transform:je.filter},blur:z.blur("--chakra-blur"),brightness:z.propT("--chakra-brightness",je.brightness),contrast:z.propT("--chakra-contrast",je.contrast),hueRotate:z.degreeT("--chakra-hue-rotate"),invert:z.propT("--chakra-invert",je.invert),saturate:z.propT("--chakra-saturate",je.saturate),dropShadow:z.propT("--chakra-drop-shadow",je.dropShadow),backdropFilter:{transform:je.backdropFilter},backdropBlur:z.blur("--chakra-backdrop-blur"),backdropBrightness:z.propT("--chakra-backdrop-brightness",je.brightness),backdropContrast:z.propT("--chakra-backdrop-contrast",je.contrast),backdropHueRotate:z.degreeT("--chakra-backdrop-hue-rotate"),backdropInvert:z.propT("--chakra-backdrop-invert",je.invert),backdropSaturate:z.propT("--chakra-backdrop-saturate",je.saturate)},ry={alignItems:!0,alignContent:!0,justifyItems:!0,justifyContent:!0,flexWrap:!0,flexDirection:{transform:je.flexDirection},flex:!0,flexFlow:!0,flexGrow:!0,flexShrink:!0,flexBasis:z.sizes("flexBasis"),justifySelf:!0,alignSelf:!0,order:!0,placeItems:!0,placeContent:!0,placeSelf:!0,gap:z.space("gap"),rowGap:z.space("rowGap"),columnGap:z.space("columnGap")};Object.assign(ry,{flexDir:ry.flexDirection});var uD={gridGap:z.space("gridGap"),gridColumnGap:z.space("gridColumnGap"),gridRowGap:z.space("gridRowGap"),gridColumn:!0,gridRow:!0,gridAutoFlow:!0,gridAutoColumns:!0,gridColumnStart:!0,gridColumnEnd:!0,gridRowStart:!0,gridRowEnd:!0,gridAutoRows:!0,gridTemplate:!0,gridTemplateColumns:!0,gridTemplateRows:!0,gridTemplateAreas:!0,gridArea:!0},fme={appearance:!0,cursor:!0,resize:!0,userSelect:!0,pointerEvents:!0,outline:{transform:je.outline},outlineOffset:!0,outlineColor:z.colors("outlineColor")},zr={width:z.sizesT("width"),inlineSize:z.sizesT("inlineSize"),height:z.sizes("height"),blockSize:z.sizes("blockSize"),boxSize:z.sizes(["width","height"]),minWidth:z.sizes("minWidth"),minInlineSize:z.sizes("minInlineSize"),minHeight:z.sizes("minHeight"),minBlockSize:z.sizes("minBlockSize"),maxWidth:z.sizes("maxWidth"),maxInlineSize:z.sizes("maxInlineSize"),maxHeight:z.sizes("maxHeight"),maxBlockSize:z.sizes("maxBlockSize"),overflow:!0,overflowX:!0,overflowY:!0,overscrollBehavior:!0,overscrollBehaviorX:!0,overscrollBehaviorY:!0,display:!0,aspectRatio:!0,hideFrom:{scale:"breakpoints",transform:(e,t)=>{var n,r,i;return{[`@media screen and (min-width: ${(i=(r=(n=t.__breakpoints)==null?void 0:n.get(e))==null?void 0:r.minW)!=null?i:e})`]:{display:"none"}}}},hideBelow:{scale:"breakpoints",transform:(e,t)=>{var n,r,i;return{[`@media screen and (max-width: ${(i=(r=(n=t.__breakpoints)==null?void 0:n.get(e))==null?void 0:r._minW)!=null?i:e})`]:{display:"none"}}}},verticalAlign:!0,boxSizing:!0,boxDecorationBreak:!0,float:z.propT("float",je.float),objectFit:!0,objectPosition:!0,visibility:!0,isolation:!0};Object.assign(zr,{w:zr.width,h:zr.height,minW:zr.minWidth,maxW:zr.maxWidth,minH:zr.minHeight,maxH:zr.maxHeight,overscroll:zr.overscrollBehavior,overscrollX:zr.overscrollBehaviorX,overscrollY:zr.overscrollBehaviorY});var hme={listStyleType:!0,listStylePosition:!0,listStylePos:z.prop("listStylePosition"),listStyleImage:!0,listStyleImg:z.prop("listStyleImage")};function pme(e,t,n,r){const i=typeof t=="string"?t.split("."):[t];for(r=0;r{const t=new WeakMap;return(r,i,o,s)=>{if(typeof r>"u")return e(r,i,o);t.has(r)||t.set(r,new Map);const a=t.get(r);if(a.has(i))return a.get(i);const l=e(r,i,o,s);return a.set(i,l),l}},mme=gme(pme),yme={border:"0px",clip:"rect(0, 0, 0, 0)",width:"1px",height:"1px",margin:"-1px",padding:"0px",overflow:"hidden",whiteSpace:"nowrap",position:"absolute"},vme={position:"static",width:"auto",height:"auto",clip:"auto",padding:"0",margin:"0",overflow:"visible",whiteSpace:"normal"},nS=(e,t,n)=>{const r={},i=mme(e,t,{});for(const o in i)o in n&&n[o]!=null||(r[o]=i[o]);return r},bme={srOnly:{transform(e){return e===!0?yme:e==="focusable"?vme:{}}},layerStyle:{processResult:!0,transform:(e,t,n)=>nS(t,`layerStyles.${e}`,n)},textStyle:{processResult:!0,transform:(e,t,n)=>nS(t,`textStyles.${e}`,n)},apply:{processResult:!0,transform:(e,t,n)=>nS(t,e,n)}},Rd={position:!0,pos:z.prop("position"),zIndex:z.prop("zIndex","zIndices"),inset:z.spaceT("inset"),insetX:z.spaceT(["left","right"]),insetInline:z.spaceT("insetInline"),insetY:z.spaceT(["top","bottom"]),insetBlock:z.spaceT("insetBlock"),top:z.spaceT("top"),insetBlockStart:z.spaceT("insetBlockStart"),bottom:z.spaceT("bottom"),insetBlockEnd:z.spaceT("insetBlockEnd"),left:z.spaceT("left"),insetInlineStart:z.logical({scale:"space",property:{ltr:"left",rtl:"right"}}),right:z.spaceT("right"),insetInlineEnd:z.logical({scale:"space",property:{ltr:"right",rtl:"left"}})};Object.assign(Rd,{insetStart:Rd.insetInlineStart,insetEnd:Rd.insetInlineEnd});var Sme={ring:{transform:je.ring},ringColor:z.colors("--chakra-ring-color"),ringOffset:z.prop("--chakra-ring-offset-width"),ringOffsetColor:z.colors("--chakra-ring-offset-color"),ringInset:z.prop("--chakra-ring-inset")},dt={margin:z.spaceT("margin"),marginTop:z.spaceT("marginTop"),marginBlockStart:z.spaceT("marginBlockStart"),marginRight:z.spaceT("marginRight"),marginInlineEnd:z.spaceT("marginInlineEnd"),marginBottom:z.spaceT("marginBottom"),marginBlockEnd:z.spaceT("marginBlockEnd"),marginLeft:z.spaceT("marginLeft"),marginInlineStart:z.spaceT("marginInlineStart"),marginX:z.spaceT(["marginInlineStart","marginInlineEnd"]),marginInline:z.spaceT("marginInline"),marginY:z.spaceT(["marginTop","marginBottom"]),marginBlock:z.spaceT("marginBlock"),padding:z.space("padding"),paddingTop:z.space("paddingTop"),paddingBlockStart:z.space("paddingBlockStart"),paddingRight:z.space("paddingRight"),paddingBottom:z.space("paddingBottom"),paddingBlockEnd:z.space("paddingBlockEnd"),paddingLeft:z.space("paddingLeft"),paddingInlineStart:z.space("paddingInlineStart"),paddingInlineEnd:z.space("paddingInlineEnd"),paddingX:z.space(["paddingInlineStart","paddingInlineEnd"]),paddingInline:z.space("paddingInline"),paddingY:z.space(["paddingTop","paddingBottom"]),paddingBlock:z.space("paddingBlock")};Object.assign(dt,{m:dt.margin,mt:dt.marginTop,mr:dt.marginRight,me:dt.marginInlineEnd,marginEnd:dt.marginInlineEnd,mb:dt.marginBottom,ml:dt.marginLeft,ms:dt.marginInlineStart,marginStart:dt.marginInlineStart,mx:dt.marginX,my:dt.marginY,p:dt.padding,pt:dt.paddingTop,py:dt.paddingY,px:dt.paddingX,pb:dt.paddingBottom,pl:dt.paddingLeft,ps:dt.paddingInlineStart,paddingStart:dt.paddingInlineStart,pr:dt.paddingRight,pe:dt.paddingInlineEnd,paddingEnd:dt.paddingInlineEnd});var _me={textDecorationColor:z.colors("textDecorationColor"),textDecoration:!0,textDecor:{property:"textDecoration"},textDecorationLine:!0,textDecorationStyle:!0,textDecorationThickness:!0,textUnderlineOffset:!0,textShadow:z.shadows("textShadow")},wme={clipPath:!0,transform:z.propT("transform",je.transform),transformOrigin:!0,translateX:z.spaceT("--chakra-translate-x"),translateY:z.spaceT("--chakra-translate-y"),skewX:z.degreeT("--chakra-skew-x"),skewY:z.degreeT("--chakra-skew-y"),scaleX:z.prop("--chakra-scale-x"),scaleY:z.prop("--chakra-scale-y"),scale:z.prop(["--chakra-scale-x","--chakra-scale-y"]),rotate:z.degreeT("--chakra-rotate")},xme={transition:!0,transitionDelay:!0,animation:!0,willChange:!0,transitionDuration:z.prop("transitionDuration","transition.duration"),transitionProperty:z.prop("transitionProperty","transition.property"),transitionTimingFunction:z.prop("transitionTimingFunction","transition.easing")},Cme={fontFamily:z.prop("fontFamily","fonts"),fontSize:z.prop("fontSize","fontSizes",je.px),fontWeight:z.prop("fontWeight","fontWeights"),lineHeight:z.prop("lineHeight","lineHeights"),letterSpacing:z.prop("letterSpacing","letterSpacings"),textAlign:!0,fontStyle:!0,textIndent:!0,wordBreak:!0,overflowWrap:!0,textOverflow:!0,textTransform:!0,whiteSpace:!0,isTruncated:{transform(e){if(e===!0)return{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}}},noOfLines:{static:{overflow:"hidden",textOverflow:"ellipsis",display:"-webkit-box",WebkitBoxOrient:"vertical",WebkitLineClamp:"var(--chakra-line-clamp)"},property:"--chakra-line-clamp"}},Tme={scrollBehavior:!0,scrollSnapAlign:!0,scrollSnapStop:!0,scrollSnapType:!0,scrollMargin:z.spaceT("scrollMargin"),scrollMarginTop:z.spaceT("scrollMarginTop"),scrollMarginBottom:z.spaceT("scrollMarginBottom"),scrollMarginLeft:z.spaceT("scrollMarginLeft"),scrollMarginRight:z.spaceT("scrollMarginRight"),scrollMarginX:z.spaceT(["scrollMarginLeft","scrollMarginRight"]),scrollMarginY:z.spaceT(["scrollMarginTop","scrollMarginBottom"]),scrollPadding:z.spaceT("scrollPadding"),scrollPaddingTop:z.spaceT("scrollPaddingTop"),scrollPaddingBottom:z.spaceT("scrollPaddingBottom"),scrollPaddingLeft:z.spaceT("scrollPaddingLeft"),scrollPaddingRight:z.spaceT("scrollPaddingRight"),scrollPaddingX:z.spaceT(["scrollPaddingLeft","scrollPaddingRight"]),scrollPaddingY:z.spaceT(["scrollPaddingTop","scrollPaddingBottom"])};function cD(e){return Mo(e)&&e.reference?e.reference:String(e)}var e1=(e,...t)=>t.map(cD).join(` ${e} `).replace(/calc/g,""),U6=(...e)=>`calc(${e1("+",...e)})`,G6=(...e)=>`calc(${e1("-",...e)})`,O2=(...e)=>`calc(${e1("*",...e)})`,H6=(...e)=>`calc(${e1("/",...e)})`,q6=e=>{const t=cD(e);return t!=null&&!Number.isNaN(parseFloat(t))?String(t).startsWith("-")?String(t).slice(1):`-${t}`:O2(t,-1)},Aa=Object.assign(e=>({add:(...t)=>Aa(U6(e,...t)),subtract:(...t)=>Aa(G6(e,...t)),multiply:(...t)=>Aa(O2(e,...t)),divide:(...t)=>Aa(H6(e,...t)),negate:()=>Aa(q6(e)),toString:()=>e.toString()}),{add:U6,subtract:G6,multiply:O2,divide:H6,negate:q6});function Eme(e,t="-"){return e.replace(/\s+/g,t)}function Pme(e){const t=Eme(e.toString());return kme(Ame(t))}function Ame(e){return e.includes("\\.")?e:!Number.isInteger(parseFloat(e.toString()))?e.replace(".","\\."):e}function kme(e){return e.replace(/[!-,/:-@[-^`{-~]/g,"\\$&")}function Rme(e,t=""){return[t,e].filter(Boolean).join("-")}function Ome(e,t){return`var(${e}${t?`, ${t}`:""})`}function Mme(e,t=""){return Pme(`--${Rme(e,t)}`)}function M2(e,t,n){const r=Mme(e,n);return{variable:r,reference:Ome(r,t)}}function O4e(e,t){const n={};for(const r of t){if(Array.isArray(r)){const[i,o]=r;n[i]=M2(`${e}-${i}`,o);continue}n[r]=M2(`${e}-${r}`)}return n}function Ime(e){const t=e==null?0:e.length;return t?e[t-1]:void 0}function Nme(e){const t=parseFloat(e.toString()),n=e.toString().replace(String(t),"");return{unitless:!n,value:t,unit:n}}function I2(e){if(e==null)return e;const{unitless:t}=Nme(e);return t||typeof e=="number"?`${e}px`:e}var dD=(e,t)=>parseInt(e[1],10)>parseInt(t[1],10)?1:-1,zC=e=>Object.fromEntries(Object.entries(e).sort(dD));function W6(e){const t=zC(e);return Object.assign(Object.values(t),t)}function Dme(e){const t=Object.keys(zC(e));return new Set(t)}function K6(e){var t;if(!e)return e;e=(t=I2(e))!=null?t:e;const n=-.02;return typeof e=="number"?`${e+n}`:e.replace(/(\d+\.?\d*)/u,r=>`${parseFloat(r)+n}`)}function pd(e,t){const n=["@media screen"];return e&&n.push("and",`(min-width: ${I2(e)})`),t&&n.push("and",`(max-width: ${I2(t)})`),n.join(" ")}function Lme(e){var t;if(!e)return null;e.base=(t=e.base)!=null?t:"0px";const n=W6(e),r=Object.entries(e).sort(dD).map(([s,a],l,u)=>{var c;let[,d]=(c=u[l+1])!=null?c:[];return d=parseFloat(d)>0?K6(d):void 0,{_minW:K6(a),breakpoint:s,minW:a,maxW:d,maxWQuery:pd(null,d),minWQuery:pd(a),minMaxQuery:pd(a,d)}}),i=Dme(e),o=Array.from(i.values());return{keys:i,normalized:n,isResponsive(s){const a=Object.keys(s);return a.length>0&&a.every(l=>i.has(l))},asObject:zC(e),asArray:W6(e),details:r,get(s){return r.find(a=>a.breakpoint===s)},media:[null,...n.map(s=>pd(s)).slice(1)],toArrayValue(s){if(!Mo(s))throw new Error("toArrayValue: value must be an object");const a=o.map(l=>{var u;return(u=s[l])!=null?u:null});for(;Ime(a)===null;)a.pop();return a},toObjectValue(s){if(!Array.isArray(s))throw new Error("toObjectValue: value must be an array");return s.reduce((a,l,u)=>{const c=o[u];return c!=null&&l!=null&&(a[c]=l),a},{})}}}var wn={hover:(e,t)=>`${e}:hover ${t}, ${e}[data-hover] ${t}`,focus:(e,t)=>`${e}:focus ${t}, ${e}[data-focus] ${t}`,focusVisible:(e,t)=>`${e}:focus-visible ${t}`,focusWithin:(e,t)=>`${e}:focus-within ${t}`,active:(e,t)=>`${e}:active ${t}, ${e}[data-active] ${t}`,disabled:(e,t)=>`${e}:disabled ${t}, ${e}[data-disabled] ${t}`,invalid:(e,t)=>`${e}:invalid ${t}, ${e}[data-invalid] ${t}`,checked:(e,t)=>`${e}:checked ${t}, ${e}[data-checked] ${t}`,indeterminate:(e,t)=>`${e}:indeterminate ${t}, ${e}[aria-checked=mixed] ${t}, ${e}[data-indeterminate] ${t}`,readOnly:(e,t)=>`${e}:read-only ${t}, ${e}[readonly] ${t}, ${e}[data-read-only] ${t}`,expanded:(e,t)=>`${e}:read-only ${t}, ${e}[aria-expanded=true] ${t}, ${e}[data-expanded] ${t}`,placeholderShown:(e,t)=>`${e}:placeholder-shown ${t}`},os=e=>fD(t=>e(t,"&"),"[role=group]","[data-group]",".group"),mo=e=>fD(t=>e(t,"~ &"),"[data-peer]",".peer"),fD=(e,...t)=>t.map(e).join(", "),t1={_hover:"&:hover, &[data-hover]",_active:"&:active, &[data-active]",_focus:"&:focus, &[data-focus]",_highlighted:"&[data-highlighted]",_focusWithin:"&:focus-within",_focusVisible:"&:focus-visible, &[data-focus-visible]",_disabled:"&:disabled, &[disabled], &[aria-disabled=true], &[data-disabled]",_readOnly:"&[aria-readonly=true], &[readonly], &[data-readonly]",_before:"&::before",_after:"&::after",_empty:"&:empty",_expanded:"&[aria-expanded=true], &[data-expanded]",_checked:"&[aria-checked=true], &[data-checked]",_grabbed:"&[aria-grabbed=true], &[data-grabbed]",_pressed:"&[aria-pressed=true], &[data-pressed]",_invalid:"&[aria-invalid=true], &[data-invalid]",_valid:"&[data-valid], &[data-state=valid]",_loading:"&[data-loading], &[aria-busy=true]",_selected:"&[aria-selected=true], &[data-selected]",_hidden:"&[hidden], &[data-hidden]",_autofill:"&:-webkit-autofill",_even:"&:nth-of-type(even)",_odd:"&:nth-of-type(odd)",_first:"&:first-of-type",_firstLetter:"&::first-letter",_last:"&:last-of-type",_notFirst:"&:not(:first-of-type)",_notLast:"&:not(:last-of-type)",_visited:"&:visited",_activeLink:"&[aria-current=page]",_activeStep:"&[aria-current=step]",_indeterminate:"&:indeterminate, &[aria-checked=mixed], &[data-indeterminate]",_groupHover:os(wn.hover),_peerHover:mo(wn.hover),_groupFocus:os(wn.focus),_peerFocus:mo(wn.focus),_groupFocusVisible:os(wn.focusVisible),_peerFocusVisible:mo(wn.focusVisible),_groupActive:os(wn.active),_peerActive:mo(wn.active),_groupDisabled:os(wn.disabled),_peerDisabled:mo(wn.disabled),_groupInvalid:os(wn.invalid),_peerInvalid:mo(wn.invalid),_groupChecked:os(wn.checked),_peerChecked:mo(wn.checked),_groupFocusWithin:os(wn.focusWithin),_peerFocusWithin:mo(wn.focusWithin),_peerPlaceholderShown:mo(wn.placeholderShown),_placeholder:"&::placeholder",_placeholderShown:"&:placeholder-shown",_fullScreen:"&:fullscreen",_selection:"&::selection",_rtl:"[dir=rtl] &, &[dir=rtl]",_ltr:"[dir=ltr] &, &[dir=ltr]",_mediaDark:"@media (prefers-color-scheme: dark)",_mediaReduceMotion:"@media (prefers-reduced-motion: reduce)",_dark:".chakra-ui-dark &:not([data-theme]),[data-theme=dark] &:not([data-theme]),&[data-theme=dark]",_light:".chakra-ui-light &:not([data-theme]),[data-theme=light] &:not([data-theme]),&[data-theme=light]",_horizontal:"&[data-orientation=horizontal]",_vertical:"&[data-orientation=vertical]"},hD=Object.keys(t1);function X6(e,t){return M2(String(e).replace(/\./g,"-"),void 0,t)}function $me(e,t){let n={};const r={};for(const[i,o]of Object.entries(e)){const{isSemantic:s,value:a}=o,{variable:l,reference:u}=X6(i,t==null?void 0:t.cssVarPrefix);if(!s){if(i.startsWith("space")){const f=i.split("."),[h,...p]=f,m=`${h}.-${p.join(".")}`,S=Aa.negate(a),y=Aa.negate(u);r[m]={value:S,var:l,varRef:y}}n[l]=a,r[i]={value:a,var:l,varRef:u};continue}const c=f=>{const p=[String(i).split(".")[0],f].join(".");if(!e[p])return f;const{reference:S}=X6(p,t==null?void 0:t.cssVarPrefix);return S},d=Mo(a)?a:{default:a};n=Wi(n,Object.entries(d).reduce((f,[h,p])=>{var m,S;if(!p)return f;const y=c(`${p}`);if(h==="default")return f[l]=y,f;const v=(S=(m=t1)==null?void 0:m[h])!=null?S:h;return f[v]={[l]:y},f},{})),r[i]={value:u,var:l,varRef:u}}return{cssVars:n,cssMap:r}}function Fme(e,t=[]){const n=Object.assign({},e);for(const r of t)r in n&&delete n[r];return n}function Bme(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function jme(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function Y6(e,t,n={}){const{stop:r,getKey:i}=n;function o(s,a=[]){var l;if(jme(s)||Array.isArray(s)){const u={};for(const[c,d]of Object.entries(s)){const f=(l=i==null?void 0:i(c))!=null?l:c,h=[...a,f];if(r!=null&&r(s,h))return t(s,a);u[f]=o(d,h)}return u}return t(s,a)}return o(e)}var Vme=["colors","borders","borderWidths","borderStyles","fonts","fontSizes","fontWeights","gradients","letterSpacings","lineHeights","radii","space","shadows","sizes","zIndices","transition","blur","breakpoints"];function zme(e){return Bme(e,Vme)}function Ume(e){return e.semanticTokens}function Gme(e){const{__cssMap:t,__cssVars:n,__breakpoints:r,...i}=e;return i}var Hme=e=>hD.includes(e)||e==="default";function qme({tokens:e,semanticTokens:t}){const n={};return Y6(e,(r,i)=>{r!=null&&(n[i.join(".")]={isSemantic:!1,value:r})}),Y6(t,(r,i)=>{r!=null&&(n[i.join(".")]={isSemantic:!0,value:r})},{stop:r=>Object.keys(r).every(Hme)}),n}function M4e(e){var t;const n=Gme(e),r=zme(n),i=Ume(n),o=qme({tokens:r,semanticTokens:i}),s=(t=n.config)==null?void 0:t.cssVarPrefix,{cssMap:a,cssVars:l}=$me(o,{cssVarPrefix:s});return Object.assign(n,{__cssVars:{...{"--chakra-ring-inset":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-ring-offset-width":"0px","--chakra-ring-offset-color":"#fff","--chakra-ring-color":"rgba(66, 153, 225, 0.6)","--chakra-ring-offset-shadow":"0 0 #0000","--chakra-ring-shadow":"0 0 #0000","--chakra-space-x-reverse":"0","--chakra-space-y-reverse":"0"},...l},__cssMap:a,__breakpoints:Lme(n.breakpoints)}),n}var UC=Wi({},Tg,Ue,cme,ry,zr,dme,Sme,fme,uD,bme,Rd,R2,dt,Tme,Cme,_me,wme,hme,xme),Wme=Object.assign({},dt,zr,ry,uD,Rd),I4e=Object.keys(Wme),Kme=[...Object.keys(UC),...hD],Xme={...UC,...t1},Yme=e=>e in Xme,Qme=e=>t=>{if(!t.__breakpoints)return e;const{isResponsive:n,toArrayValue:r,media:i}=t.__breakpoints,o={};for(const s in e){let a=Da(e[s],t);if(a==null)continue;if(a=Mo(a)&&n(a)?r(a):a,!Array.isArray(a)){o[s]=a;continue}const l=a.slice(0,i.length).length;for(let u=0;ue.startsWith("--")&&typeof t=="string"&&!Jme(t),tye=(e,t)=>{var n,r;if(t==null)return t;const i=l=>{var u,c;return(c=(u=e.__cssMap)==null?void 0:u[l])==null?void 0:c.varRef},o=l=>{var u;return(u=i(l))!=null?u:l},[s,a]=Zme(t);return t=(r=(n=i(s))!=null?n:o(a))!=null?r:o(t),t};function nye(e){const{configs:t={},pseudos:n={},theme:r}=e,i=(o,s=!1)=>{var a,l,u;const c=Da(o,r),d=Qme(c)(r);let f={};for(let h in d){const p=d[h];let m=Da(p,r);h in n&&(h=n[h]),eye(h,m)&&(m=tye(r,m));let S=t[h];if(S===!0&&(S={property:h}),Mo(m)){f[h]=(a=f[h])!=null?a:{},f[h]=Wi({},f[h],i(m,!0));continue}let y=(u=(l=S==null?void 0:S.transform)==null?void 0:l.call(S,m,r,c))!=null?u:m;y=S!=null&&S.processResult?i(y,!0):y;const v=Da(S==null?void 0:S.property,r);if(!s&&(S!=null&&S.static)){const g=Da(S.static,r);f=Wi({},f,g)}if(v&&Array.isArray(v)){for(const g of v)f[g]=y;continue}if(v){v==="&"&&Mo(y)?f=Wi({},f,y):f[v]=y;continue}if(Mo(y)){f=Wi({},f,y);continue}f[h]=y}return f};return i}var rye=e=>t=>nye({theme:t,pseudos:t1,configs:UC})(e);function N4e(e){return e}function D4e(e){return e}function L4e(e){return{definePartsStyle(t){return t},defineMultiStyleConfig(t){return{parts:e,...t}}}}function iye(e,t){if(Array.isArray(e))return e;if(Mo(e))return t(e);if(e!=null)return[e]}function oye(e,t){for(let n=t+1;n{Wi(u,{[g]:f?v[g]:{[y]:v[g]}})});continue}if(!h){f?Wi(u,v):u[y]=v;continue}u[y]=v}}return u}}function aye(e){return t=>{var n;const{variant:r,size:i,theme:o}=t,s=sye(o);return Wi({},Da((n=e.baseStyle)!=null?n:{},t),s(e,"sizes",i,t),s(e,"variants",r,t))}}function $4e(e,t,n){var r,i,o;return(o=(i=(r=e.__cssMap)==null?void 0:r[`${t}.${n}`])==null?void 0:i.varRef)!=null?o:n}function pD(e){return Fme(e,["styleConfig","size","variant","colorScheme"])}function lye(e){return e!=null&&typeof e=="object"&&"nodeType"in e&&e.nodeType===Node.ELEMENT_NODE}function F4e(e){var t;return lye(e)&&(t=e.ownerDocument)!=null?t:document}function uye(){return!!(typeof window<"u"&&window.document&&window.document.createElement)}var cye=uye();function dye(e,t){const n={};return Object.keys(e).forEach(r=>{t.includes(r)||(n[r]=e[r])}),n}function fye(e,t,n,r){const i=typeof t=="string"?t.split("."):[t];for(r=0;r{const t=new WeakMap;return(r,i,o,s)=>{if(typeof r>"u")return e(r,i,o);t.has(r)||t.set(r,new Map);const a=t.get(r);if(a.has(i))return a.get(i);const l=e(r,i,o,s);return a.set(i,l),l}},pye=hye(fye);function gD(e,t){const n={};return Object.keys(e).forEach(r=>{const i=e[r];t(i,r,e)&&(n[r]=i)}),n}var mD=e=>gD(e,t=>t!=null);function gye(e){return typeof e=="function"}function mye(e,...t){return gye(e)?e(...t):e}function yye(...e){return function(n){e.some(r=>(r==null||r(n),n==null?void 0:n.defaultPrevented))}}var vye=typeof Element<"u",bye=typeof Map=="function",Sye=typeof Set=="function",_ye=typeof ArrayBuffer=="function"&&!!ArrayBuffer.isView;function Eg(e,t){if(e===t)return!0;if(e&&t&&typeof e=="object"&&typeof t=="object"){if(e.constructor!==t.constructor)return!1;var n,r,i;if(Array.isArray(e)){if(n=e.length,n!=t.length)return!1;for(r=n;r--!==0;)if(!Eg(e[r],t[r]))return!1;return!0}var o;if(bye&&e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(o=e.entries();!(r=o.next()).done;)if(!t.has(r.value[0]))return!1;for(o=e.entries();!(r=o.next()).done;)if(!Eg(r.value[1],t.get(r.value[0])))return!1;return!0}if(Sye&&e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(o=e.entries();!(r=o.next()).done;)if(!t.has(r.value[0]))return!1;return!0}if(_ye&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(t)){if(n=e.length,n!=t.length)return!1;for(r=n;r--!==0;)if(e[r]!==t[r])return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(e.valueOf!==Object.prototype.valueOf&&typeof e.valueOf=="function"&&typeof t.valueOf=="function")return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString&&typeof e.toString=="function"&&typeof t.toString=="function")return e.toString()===t.toString();if(i=Object.keys(e),n=i.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!Object.prototype.hasOwnProperty.call(t,i[r]))return!1;if(vye&&e instanceof Element)return!1;for(r=n;r--!==0;)if(!((i[r]==="_owner"||i[r]==="__v"||i[r]==="__o")&&e.$$typeof)&&!Eg(e[i[r]],t[i[r]]))return!1;return!0}return e!==e&&t!==t}var wye=function(t,n){try{return Eg(t,n)}catch(r){if((r.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw r}};const xye=ll(wye);function yD(e,t={}){var n;const{styleConfig:r,...i}=t,{theme:o,colorMode:s}=Vge(),a=e?pye(o,`components.${e}`):void 0,l=r||a,u=Wi({theme:o,colorMode:s},(n=l==null?void 0:l.defaultProps)!=null?n:{},mD(dye(i,["children"]))),c=k.useRef({});if(l){const f=aye(l)(u);xye(c.current,f)||(c.current=f)}return c.current}function vD(e,t={}){return yD(e,t)}function B4e(e,t={}){return yD(e,t)}var Cye=new Set([...Kme,"textStyle","layerStyle","apply","noOfLines","focusBorderColor","errorBorderColor","as","__css","css","sx"]),Tye=new Set(["htmlWidth","htmlHeight","htmlSize","htmlTranslate"]);function Eye(e){return Tye.has(e)||!Cye.has(e)}function Pye(e,...t){if(e==null)throw new TypeError("Cannot convert undefined or null to object");const n={...e};for(const r of t)if(r!=null)for(const i in r)Object.prototype.hasOwnProperty.call(r,i)&&(i in n&&delete n[i],n[i]=r[i]);return n}var Aye=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,kye=QN(function(e){return Aye.test(e)||e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)<91}),Rye=kye,Oye=function(t){return t!=="theme"},Q6=function(t){return typeof t=="string"&&t.charCodeAt(0)>96?Rye:Oye},Z6=function(t,n,r){var i;if(n){var o=n.shouldForwardProp;i=t.__emotion_forwardProp&&o?function(s){return t.__emotion_forwardProp(s)&&o(s)}:o}return typeof i!="function"&&r&&(i=t.__emotion_forwardProp),i},Mye=function(t){var n=t.cache,r=t.serialized,i=t.isStringTag;return JN(n,r,i),Dge(function(){return eD(n,r,i)}),null},Iye=function e(t,n){var r=t.__emotion_real===t,i=r&&t.__emotion_base||t,o,s;n!==void 0&&(o=n.label,s=n.target);var a=Z6(t,n,r),l=a||Q6(i),u=!l("as");return function(){var c=arguments,d=r&&t.__emotion_styles!==void 0?t.__emotion_styles.slice(0):[];if(o!==void 0&&d.push("label:"+o+";"),c[0]==null||c[0].raw===void 0)d.push.apply(d,c);else{d.push(c[0][0]);for(var f=c.length,h=1;ht=>{const{theme:n,css:r,__css:i,sx:o,...s}=t,a=gD(s,(d,f)=>Yme(f)),l=mye(e,t),u=Pye({},i,l,mD(a),o),c=rye(u)(t.theme);return r?[c,r]:c};function rS(e,t){const{baseStyle:n,...r}=t??{};r.shouldForwardProp||(r.shouldForwardProp=Eye);const i=Lye({baseStyle:n}),o=Dye(e,r)(i);return Xe.forwardRef(function(l,u){const{colorMode:c,forced:d}=jC();return Xe.createElement(o,{ref:u,"data-theme":d?c:void 0,...l})})}function $ye(){const e=new Map;return new Proxy(rS,{apply(t,n,r){return rS(...r)},get(t,n){return e.has(n)||e.set(n,rS(n)),e.get(n)}})}var al=$ye();function Tl(e){return k.forwardRef(e)}const bD=k.createContext({transformPagePoint:e=>e,isStatic:!1,reducedMotion:"never"}),n1=k.createContext({}),Lh=k.createContext(null),r1=typeof document<"u",oy=r1?k.useLayoutEffect:k.useEffect,SD=k.createContext({strict:!1});function Fye(e,t,n,r){const{visualElement:i}=k.useContext(n1),o=k.useContext(SD),s=k.useContext(Lh),a=k.useContext(bD).reducedMotion,l=k.useRef();r=r||o.renderer,!l.current&&r&&(l.current=r(e,{visualState:t,parent:i,props:n,presenceContext:s,blockInitialAnimation:s?s.initial===!1:!1,reducedMotionConfig:a}));const u=l.current;return k.useInsertionEffect(()=>{u&&u.update(n,s)}),oy(()=>{u&&u.render()}),k.useEffect(()=>{u&&u.updateFeatures()}),(window.HandoffAppearAnimations?oy:k.useEffect)(()=>{u&&u.animationState&&u.animationState.animateChanges()}),u}function pu(e){return typeof e=="object"&&Object.prototype.hasOwnProperty.call(e,"current")}function Bye(e,t,n){return k.useCallback(r=>{r&&e.mount&&e.mount(r),t&&(r?t.mount(r):t.unmount()),n&&(typeof n=="function"?n(r):pu(n)&&(n.current=r))},[t])}function Gf(e){return typeof e=="string"||Array.isArray(e)}function i1(e){return typeof e=="object"&&typeof e.start=="function"}const GC=["animate","whileInView","whileFocus","whileHover","whileTap","whileDrag","exit"],HC=["initial",...GC];function o1(e){return i1(e.animate)||HC.some(t=>Gf(e[t]))}function _D(e){return!!(o1(e)||e.variants)}function jye(e,t){if(o1(e)){const{initial:n,animate:r}=e;return{initial:n===!1||Gf(n)?n:void 0,animate:Gf(r)?r:void 0}}return e.inherit!==!1?t:{}}function Vye(e){const{initial:t,animate:n}=jye(e,k.useContext(n1));return k.useMemo(()=>({initial:t,animate:n}),[eP(t),eP(n)])}function eP(e){return Array.isArray(e)?e.join(" "):e}const tP={animation:["animate","variants","whileHover","whileTap","exit","whileInView","whileFocus","whileDrag"],exit:["exit"],drag:["drag","dragControls"],focus:["whileFocus"],hover:["whileHover","onHoverStart","onHoverEnd"],tap:["whileTap","onTap","onTapStart","onTapCancel"],pan:["onPan","onPanStart","onPanSessionStart","onPanEnd"],inView:["whileInView","onViewportEnter","onViewportLeave"],layout:["layout","layoutId"]},Hf={};for(const e in tP)Hf[e]={isEnabled:t=>tP[e].some(n=>!!t[n])};function zye(e){for(const t in e)Hf[t]={...Hf[t],...e[t]}}const qC=k.createContext({}),wD=k.createContext({}),Uye=Symbol.for("motionComponentSymbol");function Gye({preloadedFeatures:e,createVisualElement:t,useRender:n,useVisualState:r,Component:i}){e&&zye(e);function o(a,l){let u;const c={...k.useContext(bD),...a,layoutId:Hye(a)},{isStatic:d}=c,f=Vye(a),h=r(a,d);if(!d&&r1){f.visualElement=Fye(i,h,c,t);const p=k.useContext(wD),m=k.useContext(SD).strict;f.visualElement&&(u=f.visualElement.loadFeatures(c,m,e,p))}return k.createElement(n1.Provider,{value:f},u&&f.visualElement?k.createElement(u,{visualElement:f.visualElement,...c}):null,n(i,a,Bye(h,f.visualElement,l),h,d,f.visualElement))}const s=k.forwardRef(o);return s[Uye]=i,s}function Hye({layoutId:e}){const t=k.useContext(qC).id;return t&&e!==void 0?t+"-"+e:e}function qye(e){function t(r,i={}){return Gye(e(r,i))}if(typeof Proxy>"u")return t;const n=new Map;return new Proxy(t,{get:(r,i)=>(n.has(i)||n.set(i,t(i)),n.get(i))})}const Wye=["animate","circle","defs","desc","ellipse","g","image","line","filter","marker","mask","metadata","path","pattern","polygon","polyline","rect","stop","switch","symbol","svg","text","tspan","use","view"];function WC(e){return typeof e!="string"||e.includes("-")?!1:!!(Wye.indexOf(e)>-1||/[A-Z]/.test(e))}const sy={};function Kye(e){Object.assign(sy,e)}const $h=["transformPerspective","x","y","z","translateX","translateY","translateZ","scale","scaleX","scaleY","rotate","rotateX","rotateY","rotateZ","skew","skewX","skewY"],El=new Set($h);function xD(e,{layout:t,layoutId:n}){return El.has(e)||e.startsWith("origin")||(t||n!==void 0)&&(!!sy[e]||e==="opacity")}const _r=e=>!!(e&&e.getVelocity),Xye={x:"translateX",y:"translateY",z:"translateZ",transformPerspective:"perspective"},Yye=$h.length;function Qye(e,{enableHardwareAcceleration:t=!0,allowTransformNone:n=!0},r,i){let o="";for(let s=0;st=>typeof t=="string"&&t.startsWith(e),TD=CD("--"),N2=CD("var(--"),Zye=/var\s*\(\s*--[\w-]+(\s*,\s*(?:(?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)+)?\s*\)/g,Jye=(e,t)=>t&&typeof e=="number"?t.transform(e):e,Ks=(e,t,n)=>Math.min(Math.max(n,e),t),Pl={test:e=>typeof e=="number",parse:parseFloat,transform:e=>e},Od={...Pl,transform:e=>Ks(0,1,e)},Up={...Pl,default:1},Md=e=>Math.round(e*1e5)/1e5,s1=/(-)?([\d]*\.?[\d])+/g,ED=/(#[0-9a-f]{3,8}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2}(-?[\d\.]+%?)\s*[\,\/]?\s*[\d\.]*%?\))/gi,e0e=/^(#[0-9a-f]{3,8}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2}(-?[\d\.]+%?)\s*[\,\/]?\s*[\d\.]*%?\))$/i;function Fh(e){return typeof e=="string"}const Bh=e=>({test:t=>Fh(t)&&t.endsWith(e)&&t.split(" ").length===1,parse:parseFloat,transform:t=>`${t}${e}`}),as=Bh("deg"),Ji=Bh("%"),me=Bh("px"),t0e=Bh("vh"),n0e=Bh("vw"),nP={...Ji,parse:e=>Ji.parse(e)/100,transform:e=>Ji.transform(e*100)},rP={...Pl,transform:Math.round},PD={borderWidth:me,borderTopWidth:me,borderRightWidth:me,borderBottomWidth:me,borderLeftWidth:me,borderRadius:me,radius:me,borderTopLeftRadius:me,borderTopRightRadius:me,borderBottomRightRadius:me,borderBottomLeftRadius:me,width:me,maxWidth:me,height:me,maxHeight:me,size:me,top:me,right:me,bottom:me,left:me,padding:me,paddingTop:me,paddingRight:me,paddingBottom:me,paddingLeft:me,margin:me,marginTop:me,marginRight:me,marginBottom:me,marginLeft:me,rotate:as,rotateX:as,rotateY:as,rotateZ:as,scale:Up,scaleX:Up,scaleY:Up,scaleZ:Up,skew:as,skewX:as,skewY:as,distance:me,translateX:me,translateY:me,translateZ:me,x:me,y:me,z:me,perspective:me,transformPerspective:me,opacity:Od,originX:nP,originY:nP,originZ:me,zIndex:rP,fillOpacity:Od,strokeOpacity:Od,numOctaves:rP};function KC(e,t,n,r){const{style:i,vars:o,transform:s,transformOrigin:a}=e;let l=!1,u=!1,c=!0;for(const d in t){const f=t[d];if(TD(d)){o[d]=f;continue}const h=PD[d],p=Jye(f,h);if(El.has(d)){if(l=!0,s[d]=p,!c)continue;f!==(h.default||0)&&(c=!1)}else d.startsWith("origin")?(u=!0,a[d]=p):i[d]=p}if(t.transform||(l||r?i.transform=Qye(e.transform,n,c,r):i.transform&&(i.transform="none")),u){const{originX:d="50%",originY:f="50%",originZ:h=0}=a;i.transformOrigin=`${d} ${f} ${h}`}}const XC=()=>({style:{},transform:{},transformOrigin:{},vars:{}});function AD(e,t,n){for(const r in t)!_r(t[r])&&!xD(r,n)&&(e[r]=t[r])}function r0e({transformTemplate:e},t,n){return k.useMemo(()=>{const r=XC();return KC(r,t,{enableHardwareAcceleration:!n},e),Object.assign({},r.vars,r.style)},[t])}function i0e(e,t,n){const r=e.style||{},i={};return AD(i,r,e),Object.assign(i,r0e(e,t,n)),e.transformValues?e.transformValues(i):i}function o0e(e,t,n){const r={},i=i0e(e,t,n);return e.drag&&e.dragListener!==!1&&(r.draggable=!1,i.userSelect=i.WebkitUserSelect=i.WebkitTouchCallout="none",i.touchAction=e.drag===!0?"none":`pan-${e.drag==="x"?"y":"x"}`),e.tabIndex===void 0&&(e.onTap||e.onTapStart||e.whileTap)&&(r.tabIndex=0),r.style=i,r}const s0e=new Set(["animate","exit","variants","initial","style","values","variants","transition","transformTemplate","transformValues","custom","inherit","onLayoutAnimationStart","onLayoutAnimationComplete","onLayoutMeasure","onBeforeLayoutMeasure","onAnimationStart","onAnimationComplete","onUpdate","onDragStart","onDrag","onDragEnd","onMeasureDragConstraints","onDirectionLock","onDragTransitionEnd","_dragX","_dragY","onHoverStart","onHoverEnd","onViewportEnter","onViewportLeave","ignoreStrict","viewport"]);function ay(e){return e.startsWith("while")||e.startsWith("drag")&&e!=="draggable"||e.startsWith("layout")||e.startsWith("onTap")||e.startsWith("onPan")||s0e.has(e)}let kD=e=>!ay(e);function a0e(e){e&&(kD=t=>t.startsWith("on")?!ay(t):e(t))}try{a0e(require("@emotion/is-prop-valid").default)}catch{}function l0e(e,t,n){const r={};for(const i in e)i==="values"&&typeof e.values=="object"||(kD(i)||n===!0&&ay(i)||!t&&!ay(i)||e.draggable&&i.startsWith("onDrag"))&&(r[i]=e[i]);return r}function iP(e,t,n){return typeof e=="string"?e:me.transform(t+n*e)}function u0e(e,t,n){const r=iP(t,e.x,e.width),i=iP(n,e.y,e.height);return`${r} ${i}`}const c0e={offset:"stroke-dashoffset",array:"stroke-dasharray"},d0e={offset:"strokeDashoffset",array:"strokeDasharray"};function f0e(e,t,n=1,r=0,i=!0){e.pathLength=1;const o=i?c0e:d0e;e[o.offset]=me.transform(-r);const s=me.transform(t),a=me.transform(n);e[o.array]=`${s} ${a}`}function YC(e,{attrX:t,attrY:n,attrScale:r,originX:i,originY:o,pathLength:s,pathSpacing:a=1,pathOffset:l=0,...u},c,d,f){if(KC(e,u,c,f),d){e.style.viewBox&&(e.attrs.viewBox=e.style.viewBox);return}e.attrs=e.style,e.style={};const{attrs:h,style:p,dimensions:m}=e;h.transform&&(m&&(p.transform=h.transform),delete h.transform),m&&(i!==void 0||o!==void 0||p.transform)&&(p.transformOrigin=u0e(m,i!==void 0?i:.5,o!==void 0?o:.5)),t!==void 0&&(h.x=t),n!==void 0&&(h.y=n),r!==void 0&&(h.scale=r),s!==void 0&&f0e(h,s,a,l,!1)}const RD=()=>({...XC(),attrs:{}}),QC=e=>typeof e=="string"&&e.toLowerCase()==="svg";function h0e(e,t,n,r){const i=k.useMemo(()=>{const o=RD();return YC(o,t,{enableHardwareAcceleration:!1},QC(r),e.transformTemplate),{...o.attrs,style:{...o.style}}},[t]);if(e.style){const o={};AD(o,e.style,e),i.style={...o,...i.style}}return i}function p0e(e=!1){return(n,r,i,{latestValues:o},s)=>{const l=(WC(n)?h0e:o0e)(r,o,s,n),c={...l0e(r,typeof n=="string",e),...l,ref:i},{children:d}=r,f=k.useMemo(()=>_r(d)?d.get():d,[d]);return k.createElement(n,{...c,children:f})}}const ZC=e=>e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase();function OD(e,{style:t,vars:n},r,i){Object.assign(e.style,t,i&&i.getProjectionStyles(r));for(const o in n)e.style.setProperty(o,n[o])}const MD=new Set(["baseFrequency","diffuseConstant","kernelMatrix","kernelUnitLength","keySplines","keyTimes","limitingConeAngle","markerHeight","markerWidth","numOctaves","targetX","targetY","surfaceScale","specularConstant","specularExponent","stdDeviation","tableValues","viewBox","gradientTransform","pathLength","startOffset","textLength","lengthAdjust"]);function ID(e,t,n,r){OD(e,t,void 0,r);for(const i in t.attrs)e.setAttribute(MD.has(i)?i:ZC(i),t.attrs[i])}function JC(e,t){const{style:n}=e,r={};for(const i in n)(_r(n[i])||t.style&&_r(t.style[i])||xD(i,e))&&(r[i]=n[i]);return r}function ND(e,t){const n=JC(e,t);for(const r in e)if(_r(e[r])||_r(t[r])){const i=$h.indexOf(r)!==-1?"attr"+r.charAt(0).toUpperCase()+r.substring(1):r;n[i]=e[r]}return n}function e3(e,t,n,r={},i={}){return typeof t=="function"&&(t=t(n!==void 0?n:e.custom,r,i)),typeof t=="string"&&(t=e.variants&&e.variants[t]),typeof t=="function"&&(t=t(n!==void 0?n:e.custom,r,i)),t}function DD(e){const t=k.useRef(null);return t.current===null&&(t.current=e()),t.current}const ly=e=>Array.isArray(e),g0e=e=>!!(e&&typeof e=="object"&&e.mix&&e.toValue),m0e=e=>ly(e)?e[e.length-1]||0:e;function Pg(e){const t=_r(e)?e.get():e;return g0e(t)?t.toValue():t}function y0e({scrapeMotionValuesFromProps:e,createRenderState:t,onMount:n},r,i,o){const s={latestValues:v0e(r,i,o,e),renderState:t()};return n&&(s.mount=a=>n(r,a,s)),s}const LD=e=>(t,n)=>{const r=k.useContext(n1),i=k.useContext(Lh),o=()=>y0e(e,t,r,i);return n?o():DD(o)};function v0e(e,t,n,r){const i={},o=r(e,{});for(const f in o)i[f]=Pg(o[f]);let{initial:s,animate:a}=e;const l=o1(e),u=_D(e);t&&u&&!l&&e.inherit!==!1&&(s===void 0&&(s=t.initial),a===void 0&&(a=t.animate));let c=n?n.initial===!1:!1;c=c||s===!1;const d=c?a:s;return d&&typeof d!="boolean"&&!i1(d)&&(Array.isArray(d)?d:[d]).forEach(h=>{const p=e3(e,h);if(!p)return;const{transitionEnd:m,transition:S,...y}=p;for(const v in y){let g=y[v];if(Array.isArray(g)){const b=c?g.length-1:0;g=g[b]}g!==null&&(i[v]=g)}for(const v in m)i[v]=m[v]}),i}const b0e={useVisualState:LD({scrapeMotionValuesFromProps:ND,createRenderState:RD,onMount:(e,t,{renderState:n,latestValues:r})=>{try{n.dimensions=typeof t.getBBox=="function"?t.getBBox():t.getBoundingClientRect()}catch{n.dimensions={x:0,y:0,width:0,height:0}}YC(n,r,{enableHardwareAcceleration:!1},QC(t.tagName),e.transformTemplate),ID(t,n)}})},S0e={useVisualState:LD({scrapeMotionValuesFromProps:JC,createRenderState:XC})};function _0e(e,{forwardMotionProps:t=!1},n,r){return{...WC(e)?b0e:S0e,preloadedFeatures:n,useRender:p0e(t),createVisualElement:r,Component:e}}function Ao(e,t,n,r={passive:!0}){return e.addEventListener(t,n,r),()=>e.removeEventListener(t,n)}const $D=e=>e.pointerType==="mouse"?typeof e.button!="number"||e.button<=0:e.isPrimary!==!1;function a1(e,t="page"){return{point:{x:e[t+"X"],y:e[t+"Y"]}}}const w0e=e=>t=>$D(t)&&e(t,a1(t));function Io(e,t,n,r){return Ao(e,t,w0e(n),r)}const x0e=(e,t)=>n=>t(e(n)),Ns=(...e)=>e.reduce(x0e);function FD(e){let t=null;return()=>{const n=()=>{t=null};return t===null?(t=e,n):!1}}const oP=FD("dragHorizontal"),sP=FD("dragVertical");function BD(e){let t=!1;if(e==="y")t=sP();else if(e==="x")t=oP();else{const n=oP(),r=sP();n&&r?t=()=>{n(),r()}:(n&&n(),r&&r())}return t}function jD(){const e=BD(!0);return e?(e(),!1):!0}class ca{constructor(t){this.isMounted=!1,this.node=t}update(){}}const Yt=e=>e;function C0e(e){let t=[],n=[],r=0,i=!1,o=!1;const s=new WeakSet,a={schedule:(l,u=!1,c=!1)=>{const d=c&&i,f=d?t:n;return u&&s.add(l),f.indexOf(l)===-1&&(f.push(l),d&&i&&(r=t.length)),l},cancel:l=>{const u=n.indexOf(l);u!==-1&&n.splice(u,1),s.delete(l)},process:l=>{if(i){o=!0;return}if(i=!0,[t,n]=[n,t],n.length=0,r=t.length,r)for(let u=0;u(d[f]=C0e(()=>n=!0),d),{}),s=d=>o[d].process(i),a=d=>{n=!1,i.delta=r?1e3/60:Math.max(Math.min(d-i.timestamp,T0e),1),i.timestamp=d,i.isProcessing=!0,Gp.forEach(s),i.isProcessing=!1,n&&t&&(r=!1,e(a))},l=()=>{n=!0,r=!0,i.isProcessing||e(a)};return{schedule:Gp.reduce((d,f)=>{const h=o[f];return d[f]=(p,m=!1,S=!1)=>(n||l(),h.schedule(p,m,S)),d},{}),cancel:d=>Gp.forEach(f=>o[f].cancel(d)),state:i,steps:o}}const{schedule:St,cancel:Uo,state:$n,steps:iS}=E0e(typeof requestAnimationFrame<"u"?requestAnimationFrame:Yt,!0);function aP(e,t){const n="pointer"+(t?"enter":"leave"),r="onHover"+(t?"Start":"End"),i=(o,s)=>{if(o.type==="touch"||jD())return;const a=e.getProps();e.animationState&&a.whileHover&&e.animationState.setActive("whileHover",t),a[r]&&St.update(()=>a[r](o,s))};return Io(e.current,n,i,{passive:!e.getProps()[r]})}class P0e extends ca{mount(){this.unmount=Ns(aP(this.node,!0),aP(this.node,!1))}unmount(){}}class A0e extends ca{constructor(){super(...arguments),this.isActive=!1}onFocus(){let t=!1;try{t=this.node.current.matches(":focus-visible")}catch{t=!0}!t||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!0),this.isActive=!0)}onBlur(){!this.isActive||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!1),this.isActive=!1)}mount(){this.unmount=Ns(Ao(this.node.current,"focus",()=>this.onFocus()),Ao(this.node.current,"blur",()=>this.onBlur()))}unmount(){}}const VD=(e,t)=>t?e===t?!0:VD(e,t.parentElement):!1;function oS(e,t){if(!t)return;const n=new PointerEvent("pointer"+e);t(n,a1(n))}class k0e extends ca{constructor(){super(...arguments),this.removeStartListeners=Yt,this.removeEndListeners=Yt,this.removeAccessibleListeners=Yt,this.startPointerPress=(t,n)=>{if(this.removeEndListeners(),this.isPressing)return;const r=this.node.getProps(),o=Io(window,"pointerup",(a,l)=>{if(!this.checkPressEnd())return;const{onTap:u,onTapCancel:c}=this.node.getProps();St.update(()=>{VD(this.node.current,a.target)?u&&u(a,l):c&&c(a,l)})},{passive:!(r.onTap||r.onPointerUp)}),s=Io(window,"pointercancel",(a,l)=>this.cancelPress(a,l),{passive:!(r.onTapCancel||r.onPointerCancel)});this.removeEndListeners=Ns(o,s),this.startPress(t,n)},this.startAccessiblePress=()=>{const t=o=>{if(o.key!=="Enter"||this.isPressing)return;const s=a=>{a.key!=="Enter"||!this.checkPressEnd()||oS("up",(l,u)=>{const{onTap:c}=this.node.getProps();c&&St.update(()=>c(l,u))})};this.removeEndListeners(),this.removeEndListeners=Ao(this.node.current,"keyup",s),oS("down",(a,l)=>{this.startPress(a,l)})},n=Ao(this.node.current,"keydown",t),r=()=>{this.isPressing&&oS("cancel",(o,s)=>this.cancelPress(o,s))},i=Ao(this.node.current,"blur",r);this.removeAccessibleListeners=Ns(n,i)}}startPress(t,n){this.isPressing=!0;const{onTapStart:r,whileTap:i}=this.node.getProps();i&&this.node.animationState&&this.node.animationState.setActive("whileTap",!0),r&&St.update(()=>r(t,n))}checkPressEnd(){return this.removeEndListeners(),this.isPressing=!1,this.node.getProps().whileTap&&this.node.animationState&&this.node.animationState.setActive("whileTap",!1),!jD()}cancelPress(t,n){if(!this.checkPressEnd())return;const{onTapCancel:r}=this.node.getProps();r&&St.update(()=>r(t,n))}mount(){const t=this.node.getProps(),n=Io(this.node.current,"pointerdown",this.startPointerPress,{passive:!(t.onTapStart||t.onPointerStart)}),r=Ao(this.node.current,"focus",this.startAccessiblePress);this.removeStartListeners=Ns(n,r)}unmount(){this.removeStartListeners(),this.removeEndListeners(),this.removeAccessibleListeners()}}const D2=new WeakMap,sS=new WeakMap,R0e=e=>{const t=D2.get(e.target);t&&t(e)},O0e=e=>{e.forEach(R0e)};function M0e({root:e,...t}){const n=e||document;sS.has(n)||sS.set(n,{});const r=sS.get(n),i=JSON.stringify(t);return r[i]||(r[i]=new IntersectionObserver(O0e,{root:e,...t})),r[i]}function I0e(e,t,n){const r=M0e(t);return D2.set(e,n),r.observe(e),()=>{D2.delete(e),r.unobserve(e)}}const N0e={some:0,all:1};class D0e extends ca{constructor(){super(...arguments),this.hasEnteredView=!1,this.isInView=!1}startObserver(){this.unmount();const{viewport:t={}}=this.node.getProps(),{root:n,margin:r,amount:i="some",once:o}=t,s={root:n?n.current:void 0,rootMargin:r,threshold:typeof i=="number"?i:N0e[i]},a=l=>{const{isIntersecting:u}=l;if(this.isInView===u||(this.isInView=u,o&&!u&&this.hasEnteredView))return;u&&(this.hasEnteredView=!0),this.node.animationState&&this.node.animationState.setActive("whileInView",u);const{onViewportEnter:c,onViewportLeave:d}=this.node.getProps(),f=u?c:d;f&&f(l)};return I0e(this.node.current,s,a)}mount(){this.startObserver()}update(){if(typeof IntersectionObserver>"u")return;const{props:t,prevProps:n}=this.node;["amount","margin","root"].some(L0e(t,n))&&this.startObserver()}unmount(){}}function L0e({viewport:e={}},{viewport:t={}}={}){return n=>e[n]!==t[n]}const $0e={inView:{Feature:D0e},tap:{Feature:k0e},focus:{Feature:A0e},hover:{Feature:P0e}};function zD(e,t){if(!Array.isArray(t))return!1;const n=t.length;if(n!==e.length)return!1;for(let r=0;rt[r]=n.get()),t}function B0e(e){const t={};return e.values.forEach((n,r)=>t[r]=n.getVelocity()),t}function l1(e,t,n){const r=e.getProps();return e3(r,t,n!==void 0?n:r.custom,F0e(e),B0e(e))}const j0e="framerAppearId",V0e="data-"+ZC(j0e);let z0e=Yt,t3=Yt;const Ds=e=>e*1e3,No=e=>e/1e3,U0e={current:!1},UD=e=>Array.isArray(e)&&typeof e[0]=="number";function GD(e){return!!(!e||typeof e=="string"&&HD[e]||UD(e)||Array.isArray(e)&&e.every(GD))}const gd=([e,t,n,r])=>`cubic-bezier(${e}, ${t}, ${n}, ${r})`,HD={linear:"linear",ease:"ease",easeIn:"ease-in",easeOut:"ease-out",easeInOut:"ease-in-out",circIn:gd([0,.65,.55,1]),circOut:gd([.55,0,1,.45]),backIn:gd([.31,.01,.66,-.59]),backOut:gd([.33,1.53,.69,.99])};function qD(e){if(e)return UD(e)?gd(e):Array.isArray(e)?e.map(qD):HD[e]}function G0e(e,t,n,{delay:r=0,duration:i,repeat:o=0,repeatType:s="loop",ease:a,times:l}={}){const u={[t]:n};l&&(u.offset=l);const c=qD(a);return Array.isArray(c)&&(u.easing=c),e.animate(u,{delay:r,duration:i,easing:Array.isArray(c)?"linear":c,fill:"both",iterations:o+1,direction:s==="reverse"?"alternate":"normal"})}const lP={waapi:()=>Object.hasOwnProperty.call(Element.prototype,"animate")},aS={},WD={};for(const e in lP)WD[e]=()=>(aS[e]===void 0&&(aS[e]=lP[e]()),aS[e]);function H0e(e,{repeat:t,repeatType:n="loop"}){const r=t&&n!=="loop"&&t%2===1?0:e.length-1;return e[r]}const KD=(e,t,n)=>(((1-3*n+3*t)*e+(3*n-6*t))*e+3*t)*e,q0e=1e-7,W0e=12;function K0e(e,t,n,r,i){let o,s,a=0;do s=t+(n-t)/2,o=KD(s,r,i)-e,o>0?n=s:t=s;while(Math.abs(o)>q0e&&++aK0e(o,0,1,e,n);return o=>o===0||o===1?o:KD(i(o),t,r)}const X0e=jh(.42,0,1,1),Y0e=jh(0,0,.58,1),XD=jh(.42,0,.58,1),Q0e=e=>Array.isArray(e)&&typeof e[0]!="number",YD=e=>t=>t<=.5?e(2*t)/2:(2-e(2*(1-t)))/2,QD=e=>t=>1-e(1-t),ZD=e=>1-Math.sin(Math.acos(e)),n3=QD(ZD),Z0e=YD(n3),JD=jh(.33,1.53,.69,.99),r3=QD(JD),J0e=YD(r3),eve=e=>(e*=2)<1?.5*r3(e):.5*(2-Math.pow(2,-10*(e-1))),tve={linear:Yt,easeIn:X0e,easeInOut:XD,easeOut:Y0e,circIn:ZD,circInOut:Z0e,circOut:n3,backIn:r3,backInOut:J0e,backOut:JD,anticipate:eve},uP=e=>{if(Array.isArray(e)){t3(e.length===4);const[t,n,r,i]=e;return jh(t,n,r,i)}else if(typeof e=="string")return tve[e];return e},i3=(e,t)=>n=>!!(Fh(n)&&e0e.test(n)&&n.startsWith(e)||t&&Object.prototype.hasOwnProperty.call(n,t)),eL=(e,t,n)=>r=>{if(!Fh(r))return r;const[i,o,s,a]=r.match(s1);return{[e]:parseFloat(i),[t]:parseFloat(o),[n]:parseFloat(s),alpha:a!==void 0?parseFloat(a):1}},nve=e=>Ks(0,255,e),lS={...Pl,transform:e=>Math.round(nve(e))},La={test:i3("rgb","red"),parse:eL("red","green","blue"),transform:({red:e,green:t,blue:n,alpha:r=1})=>"rgba("+lS.transform(e)+", "+lS.transform(t)+", "+lS.transform(n)+", "+Md(Od.transform(r))+")"};function rve(e){let t="",n="",r="",i="";return e.length>5?(t=e.substring(1,3),n=e.substring(3,5),r=e.substring(5,7),i=e.substring(7,9)):(t=e.substring(1,2),n=e.substring(2,3),r=e.substring(3,4),i=e.substring(4,5),t+=t,n+=n,r+=r,i+=i),{red:parseInt(t,16),green:parseInt(n,16),blue:parseInt(r,16),alpha:i?parseInt(i,16)/255:1}}const L2={test:i3("#"),parse:rve,transform:La.transform},gu={test:i3("hsl","hue"),parse:eL("hue","saturation","lightness"),transform:({hue:e,saturation:t,lightness:n,alpha:r=1})=>"hsla("+Math.round(e)+", "+Ji.transform(Md(t))+", "+Ji.transform(Md(n))+", "+Md(Od.transform(r))+")"},Xn={test:e=>La.test(e)||L2.test(e)||gu.test(e),parse:e=>La.test(e)?La.parse(e):gu.test(e)?gu.parse(e):L2.parse(e),transform:e=>Fh(e)?e:e.hasOwnProperty("red")?La.transform(e):gu.transform(e)},At=(e,t,n)=>-n*e+n*t+e;function uS(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function ive({hue:e,saturation:t,lightness:n,alpha:r}){e/=360,t/=100,n/=100;let i=0,o=0,s=0;if(!t)i=o=s=n;else{const a=n<.5?n*(1+t):n+t-n*t,l=2*n-a;i=uS(l,a,e+1/3),o=uS(l,a,e),s=uS(l,a,e-1/3)}return{red:Math.round(i*255),green:Math.round(o*255),blue:Math.round(s*255),alpha:r}}const cS=(e,t,n)=>{const r=e*e;return Math.sqrt(Math.max(0,n*(t*t-r)+r))},ove=[L2,La,gu],sve=e=>ove.find(t=>t.test(e));function cP(e){const t=sve(e);let n=t.parse(e);return t===gu&&(n=ive(n)),n}const tL=(e,t)=>{const n=cP(e),r=cP(t),i={...n};return o=>(i.red=cS(n.red,r.red,o),i.green=cS(n.green,r.green,o),i.blue=cS(n.blue,r.blue,o),i.alpha=At(n.alpha,r.alpha,o),La.transform(i))};function ave(e){var t,n;return isNaN(e)&&Fh(e)&&(((t=e.match(s1))===null||t===void 0?void 0:t.length)||0)+(((n=e.match(ED))===null||n===void 0?void 0:n.length)||0)>0}const nL={regex:Zye,countKey:"Vars",token:"${v}",parse:Yt},rL={regex:ED,countKey:"Colors",token:"${c}",parse:Xn.parse},iL={regex:s1,countKey:"Numbers",token:"${n}",parse:Pl.parse};function dS(e,{regex:t,countKey:n,token:r,parse:i}){const o=e.tokenised.match(t);o&&(e["num"+n]=o.length,e.tokenised=e.tokenised.replace(t,r),e.values.push(...o.map(i)))}function uy(e){const t=e.toString(),n={value:t,tokenised:t,values:[],numVars:0,numColors:0,numNumbers:0};return n.value.includes("var(--")&&dS(n,nL),dS(n,rL),dS(n,iL),n}function oL(e){return uy(e).values}function sL(e){const{values:t,numColors:n,numVars:r,tokenised:i}=uy(e),o=t.length;return s=>{let a=i;for(let l=0;ltypeof e=="number"?0:e;function uve(e){const t=oL(e);return sL(e)(t.map(lve))}const Xs={test:ave,parse:oL,createTransformer:sL,getAnimatableNone:uve},aL=(e,t)=>n=>`${n>0?t:e}`;function lL(e,t){return typeof e=="number"?n=>At(e,t,n):Xn.test(e)?tL(e,t):e.startsWith("var(")?aL(e,t):cL(e,t)}const uL=(e,t)=>{const n=[...e],r=n.length,i=e.map((o,s)=>lL(o,t[s]));return o=>{for(let s=0;s{const n={...e,...t},r={};for(const i in n)e[i]!==void 0&&t[i]!==void 0&&(r[i]=lL(e[i],t[i]));return i=>{for(const o in r)n[o]=r[o](i);return n}},cL=(e,t)=>{const n=Xs.createTransformer(t),r=uy(e),i=uy(t);return r.numVars===i.numVars&&r.numColors===i.numColors&&r.numNumbers>=i.numNumbers?Ns(uL(r.values,i.values),n):aL(e,t)},qf=(e,t,n)=>{const r=t-e;return r===0?1:(n-e)/r},dP=(e,t)=>n=>At(e,t,n);function dve(e){return typeof e=="number"?dP:typeof e=="string"?Xn.test(e)?tL:cL:Array.isArray(e)?uL:typeof e=="object"?cve:dP}function fve(e,t,n){const r=[],i=n||dve(e[0]),o=e.length-1;for(let s=0;st[0];e[0]>e[o-1]&&(e=[...e].reverse(),t=[...t].reverse());const s=fve(t,r,i),a=s.length,l=u=>{let c=0;if(a>1)for(;cl(Ks(e[0],e[o-1],u)):l}function hve(e,t){const n=e[e.length-1];for(let r=1;r<=t;r++){const i=qf(0,t,r);e.push(At(n,1,i))}}function pve(e){const t=[0];return hve(t,e.length-1),t}function gve(e,t){return e.map(n=>n*t)}function mve(e,t){return e.map(()=>t||XD).splice(0,e.length-1)}function cy({duration:e=300,keyframes:t,times:n,ease:r="easeInOut"}){const i=Q0e(r)?r.map(uP):uP(r),o={done:!1,value:t[0]},s=gve(n&&n.length===t.length?n:pve(t),e),a=dL(s,t,{ease:Array.isArray(i)?i:mve(t,i)});return{calculatedDuration:e,next:l=>(o.value=a(l),o.done=l>=e,o)}}function fL(e,t){return t?e*(1e3/t):0}const yve=5;function hL(e,t,n){const r=Math.max(t-yve,0);return fL(n-e(r),t-r)}const fS=.001,vve=.01,fP=10,bve=.05,Sve=1;function _ve({duration:e=800,bounce:t=.25,velocity:n=0,mass:r=1}){let i,o;z0e(e<=Ds(fP));let s=1-t;s=Ks(bve,Sve,s),e=Ks(vve,fP,No(e)),s<1?(i=u=>{const c=u*s,d=c*e,f=c-n,h=$2(u,s),p=Math.exp(-d);return fS-f/h*p},o=u=>{const d=u*s*e,f=d*n+n,h=Math.pow(s,2)*Math.pow(u,2)*e,p=Math.exp(-d),m=$2(Math.pow(u,2),s);return(-i(u)+fS>0?-1:1)*((f-h)*p)/m}):(i=u=>{const c=Math.exp(-u*e),d=(u-n)*e+1;return-fS+c*d},o=u=>{const c=Math.exp(-u*e),d=(n-u)*(e*e);return c*d});const a=5/e,l=xve(i,o,a);if(e=Ds(e),isNaN(l))return{stiffness:100,damping:10,duration:e};{const u=Math.pow(l,2)*r;return{stiffness:u,damping:s*2*Math.sqrt(r*u),duration:e}}}const wve=12;function xve(e,t,n){let r=n;for(let i=1;ie[n]!==void 0)}function Eve(e){let t={velocity:0,stiffness:100,damping:10,mass:1,isResolvedFromDuration:!1,...e};if(!hP(e,Tve)&&hP(e,Cve)){const n=_ve(e);t={...t,...n,velocity:0,mass:1},t.isResolvedFromDuration=!0}return t}function pL({keyframes:e,restDelta:t,restSpeed:n,...r}){const i=e[0],o=e[e.length-1],s={done:!1,value:i},{stiffness:a,damping:l,mass:u,velocity:c,duration:d,isResolvedFromDuration:f}=Eve(r),h=c?-No(c):0,p=l/(2*Math.sqrt(a*u)),m=o-i,S=No(Math.sqrt(a/u)),y=Math.abs(m)<5;n||(n=y?.01:2),t||(t=y?.005:.5);let v;if(p<1){const g=$2(S,p);v=b=>{const _=Math.exp(-p*S*b);return o-_*((h+p*S*m)/g*Math.sin(g*b)+m*Math.cos(g*b))}}else if(p===1)v=g=>o-Math.exp(-S*g)*(m+(h+S*m)*g);else{const g=S*Math.sqrt(p*p-1);v=b=>{const _=Math.exp(-p*S*b),w=Math.min(g*b,300);return o-_*((h+p*S*m)*Math.sinh(w)+g*m*Math.cosh(w))/g}}return{calculatedDuration:f&&d||null,next:g=>{const b=v(g);if(f)s.done=g>=d;else{let _=h;g!==0&&(p<1?_=hL(v,g,b):_=0);const w=Math.abs(_)<=n,x=Math.abs(o-b)<=t;s.done=w&&x}return s.value=s.done?o:b,s}}}function pP({keyframes:e,velocity:t=0,power:n=.8,timeConstant:r=325,bounceDamping:i=10,bounceStiffness:o=500,modifyTarget:s,min:a,max:l,restDelta:u=.5,restSpeed:c}){const d=e[0],f={done:!1,value:d},h=T=>a!==void 0&&Tl,p=T=>a===void 0?l:l===void 0||Math.abs(a-T)-m*Math.exp(-T/r),g=T=>y+v(T),b=T=>{const P=v(T),E=g(T);f.done=Math.abs(P)<=u,f.value=f.done?y:E};let _,w;const x=T=>{h(f.value)&&(_=T,w=pL({keyframes:[f.value,p(f.value)],velocity:hL(g,T,f.value),damping:i,stiffness:o,restDelta:u,restSpeed:c}))};return x(0),{calculatedDuration:null,next:T=>{let P=!1;return!w&&_===void 0&&(P=!0,b(T),x(T)),_!==void 0&&T>_?w.next(T-_):(!P&&b(T),f)}}}const Pve=e=>{const t=({timestamp:n})=>e(n);return{start:()=>St.update(t,!0),stop:()=>Uo(t),now:()=>$n.isProcessing?$n.timestamp:performance.now()}},gP=2e4;function mP(e){let t=0;const n=50;let r=e.next(t);for(;!r.done&&t=gP?1/0:t}const Ave={decay:pP,inertia:pP,tween:cy,keyframes:cy,spring:pL};function dy({autoplay:e=!0,delay:t=0,driver:n=Pve,keyframes:r,type:i="keyframes",repeat:o=0,repeatDelay:s=0,repeatType:a="loop",onPlay:l,onStop:u,onComplete:c,onUpdate:d,...f}){let h=1,p=!1,m,S;const y=()=>{S=new Promise(j=>{m=j})};y();let v;const g=Ave[i]||cy;let b;g!==cy&&typeof r[0]!="number"&&(b=dL([0,100],r,{clamp:!1}),r=[0,100]);const _=g({...f,keyframes:r});let w;a==="mirror"&&(w=g({...f,keyframes:[...r].reverse(),velocity:-(f.velocity||0)}));let x="idle",T=null,P=null,E=null;_.calculatedDuration===null&&o&&(_.calculatedDuration=mP(_));const{calculatedDuration:A}=_;let $=1/0,I=1/0;A!==null&&($=A+s,I=$*(o+1)-s);let C=0;const R=j=>{if(P===null)return;h>0&&(P=Math.min(P,j)),h<0&&(P=Math.min(j-I/h,P)),T!==null?C=T:C=Math.round(j-P)*h;const U=C-t*(h>=0?1:-1),G=h>=0?U<0:U>I;C=Math.max(U,0),x==="finished"&&T===null&&(C=I);let W=C,X=_;if(o){const Q=C/$;let J=Math.floor(Q),ne=Q%1;!ne&&Q>=1&&(ne=1),ne===1&&J--,J=Math.min(J,o+1);const te=!!(J%2);te&&(a==="reverse"?(ne=1-ne,s&&(ne-=s/$)):a==="mirror"&&(X=w));let xe=Ks(0,1,ne);C>I&&(xe=a==="reverse"&&te?1:0),W=xe*$}const Y=G?{done:!1,value:r[0]}:X.next(W);b&&(Y.value=b(Y.value));let{done:B}=Y;!G&&A!==null&&(B=h>=0?C>=I:C<=0);const H=T===null&&(x==="finished"||x==="running"&&B);return d&&d(Y.value),H&&O(),Y},M=()=>{v&&v.stop(),v=void 0},N=()=>{x="idle",M(),m(),y(),P=E=null},O=()=>{x="finished",c&&c(),M(),m()},D=()=>{if(p)return;v||(v=n(R));const j=v.now();l&&l(),T!==null?P=j-T:(!P||x==="finished")&&(P=j),x==="finished"&&y(),E=P,T=null,x="running",v.start()};e&&D();const L={then(j,U){return S.then(j,U)},get time(){return No(C)},set time(j){j=Ds(j),C=j,T!==null||!v||h===0?T=j:P=v.now()-j/h},get duration(){const j=_.calculatedDuration===null?mP(_):_.calculatedDuration;return No(j)},get speed(){return h},set speed(j){j===h||!v||(h=j,L.time=No(C))},get state(){return x},play:D,pause:()=>{x="paused",T=C},stop:()=>{p=!0,x!=="idle"&&(x="idle",u&&u(),N())},cancel:()=>{E!==null&&R(E),N()},complete:()=>{x="finished"},sample:j=>(P=0,R(j))};return L}const kve=new Set(["opacity","clipPath","filter","transform","backgroundColor"]),Hp=10,Rve=2e4,Ove=(e,t)=>t.type==="spring"||e==="backgroundColor"||!GD(t.ease);function Mve(e,t,{onUpdate:n,onComplete:r,...i}){if(!(WD.waapi()&&kve.has(t)&&!i.repeatDelay&&i.repeatType!=="mirror"&&i.damping!==0&&i.type!=="inertia"))return!1;let s=!1,a,l;const u=()=>{l=new Promise(y=>{a=y})};u();let{keyframes:c,duration:d=300,ease:f,times:h}=i;if(Ove(t,i)){const y=dy({...i,repeat:0,delay:0});let v={done:!1,value:c[0]};const g=[];let b=0;for(;!v.done&&bp.cancel(),S=()=>{St.update(m),a(),u()};return p.onfinish=()=>{e.set(H0e(c,i)),r&&r(),S()},{then(y,v){return l.then(y,v)},get time(){return No(p.currentTime||0)},set time(y){p.currentTime=Ds(y)},get speed(){return p.playbackRate},set speed(y){p.playbackRate=y},get duration(){return No(d)},play:()=>{s||(p.play(),Uo(m))},pause:()=>p.pause(),stop:()=>{if(s=!0,p.playState==="idle")return;const{currentTime:y}=p;if(y){const v=dy({...i,autoplay:!1});e.setWithVelocity(v.sample(y-Hp).value,v.sample(y).value,Hp)}S()},complete:()=>p.finish(),cancel:S}}function Ive({keyframes:e,delay:t,onUpdate:n,onComplete:r}){const i=()=>(n&&n(e[e.length-1]),r&&r(),{time:0,speed:1,duration:0,play:Yt,pause:Yt,stop:Yt,then:o=>(o(),Promise.resolve()),cancel:Yt,complete:Yt});return t?dy({keyframes:[0,1],duration:0,delay:t,onComplete:i}):i()}const Nve={type:"spring",stiffness:500,damping:25,restSpeed:10},Dve=e=>({type:"spring",stiffness:550,damping:e===0?2*Math.sqrt(550):30,restSpeed:10}),Lve={type:"keyframes",duration:.8},$ve={type:"keyframes",ease:[.25,.1,.35,1],duration:.3},Fve=(e,{keyframes:t})=>t.length>2?Lve:El.has(e)?e.startsWith("scale")?Dve(t[1]):Nve:$ve,F2=(e,t)=>e==="zIndex"?!1:!!(typeof t=="number"||Array.isArray(t)||typeof t=="string"&&(Xs.test(t)||t==="0")&&!t.startsWith("url(")),Bve=new Set(["brightness","contrast","saturate","opacity"]);function jve(e){const[t,n]=e.slice(0,-1).split("(");if(t==="drop-shadow")return e;const[r]=n.match(s1)||[];if(!r)return e;const i=n.replace(r,"");let o=Bve.has(t)?1:0;return r!==n&&(o*=100),t+"("+o+i+")"}const Vve=/([a-z-]*)\(.*?\)/g,B2={...Xs,getAnimatableNone:e=>{const t=e.match(Vve);return t?t.map(jve).join(" "):e}},zve={...PD,color:Xn,backgroundColor:Xn,outlineColor:Xn,fill:Xn,stroke:Xn,borderColor:Xn,borderTopColor:Xn,borderRightColor:Xn,borderBottomColor:Xn,borderLeftColor:Xn,filter:B2,WebkitFilter:B2},o3=e=>zve[e];function gL(e,t){let n=o3(e);return n!==B2&&(n=Xs),n.getAnimatableNone?n.getAnimatableNone(t):void 0}const mL=e=>/^0[^.\s]+$/.test(e);function Uve(e){if(typeof e=="number")return e===0;if(e!==null)return e==="none"||e==="0"||mL(e)}function Gve(e,t,n,r){const i=F2(t,n);let o;Array.isArray(n)?o=[...n]:o=[null,n];const s=r.from!==void 0?r.from:e.get();let a;const l=[];for(let u=0;ui=>{const o=yL(r,e)||{},s=o.delay||r.delay||0;let{elapsed:a=0}=r;a=a-Ds(s);const l=Gve(t,e,n,o),u=l[0],c=l[l.length-1],d=F2(e,u),f=F2(e,c);let h={keyframes:l,velocity:t.getVelocity(),ease:"easeOut",...o,delay:-a,onUpdate:p=>{t.set(p),o.onUpdate&&o.onUpdate(p)},onComplete:()=>{i(),o.onComplete&&o.onComplete()}};if(Hve(o)||(h={...h,...Fve(e,h)}),h.duration&&(h.duration=Ds(h.duration)),h.repeatDelay&&(h.repeatDelay=Ds(h.repeatDelay)),!d||!f||U0e.current||o.type===!1)return Ive(h);if(t.owner&&t.owner.current instanceof HTMLElement&&!t.owner.getProps().onUpdate){const p=Mve(t,e,h);if(p)return p}return dy(h)};function fy(e){return!!(_r(e)&&e.add)}const qve=e=>/^\-?\d*\.?\d+$/.test(e);function a3(e,t){e.indexOf(t)===-1&&e.push(t)}function l3(e,t){const n=e.indexOf(t);n>-1&&e.splice(n,1)}class u3{constructor(){this.subscriptions=[]}add(t){return a3(this.subscriptions,t),()=>l3(this.subscriptions,t)}notify(t,n,r){const i=this.subscriptions.length;if(i)if(i===1)this.subscriptions[0](t,n,r);else for(let o=0;o!isNaN(parseFloat(e));class Kve{constructor(t,n={}){this.version="10.12.22",this.timeDelta=0,this.lastUpdated=0,this.canTrackVelocity=!1,this.events={},this.updateAndNotify=(r,i=!0)=>{this.prev=this.current,this.current=r;const{delta:o,timestamp:s}=$n;this.lastUpdated!==s&&(this.timeDelta=o,this.lastUpdated=s,St.postRender(this.scheduleVelocityCheck)),this.prev!==this.current&&this.events.change&&this.events.change.notify(this.current),this.events.velocityChange&&this.events.velocityChange.notify(this.getVelocity()),i&&this.events.renderRequest&&this.events.renderRequest.notify(this.current)},this.scheduleVelocityCheck=()=>St.postRender(this.velocityCheck),this.velocityCheck=({timestamp:r})=>{r!==this.lastUpdated&&(this.prev=this.current,this.events.velocityChange&&this.events.velocityChange.notify(this.getVelocity()))},this.hasAnimated=!1,this.prev=this.current=t,this.canTrackVelocity=Wve(this.current),this.owner=n.owner}onChange(t){return this.on("change",t)}on(t,n){this.events[t]||(this.events[t]=new u3);const r=this.events[t].add(n);return t==="change"?()=>{r(),St.read(()=>{this.events.change.getSize()||this.stop()})}:r}clearListeners(){for(const t in this.events)this.events[t].clear()}attach(t,n){this.passiveEffect=t,this.stopPassiveEffect=n}set(t,n=!0){!n||!this.passiveEffect?this.updateAndNotify(t,n):this.passiveEffect(t,this.updateAndNotify)}setWithVelocity(t,n,r){this.set(n),this.prev=t,this.timeDelta=r}jump(t){this.updateAndNotify(t),this.prev=t,this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}get(){return this.current}getPrevious(){return this.prev}getVelocity(){return this.canTrackVelocity?fL(parseFloat(this.current)-parseFloat(this.prev),this.timeDelta):0}start(t){return this.stop(),new Promise(n=>{this.hasAnimated=!0,this.animation=t(n),this.events.animationStart&&this.events.animationStart.notify()}).then(()=>{this.events.animationComplete&&this.events.animationComplete.notify(),this.clearAnimation()})}stop(){this.animation&&(this.animation.stop(),this.events.animationCancel&&this.events.animationCancel.notify()),this.clearAnimation()}isAnimating(){return!!this.animation}clearAnimation(){delete this.animation}destroy(){this.clearListeners(),this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}}function cc(e,t){return new Kve(e,t)}const vL=e=>t=>t.test(e),Xve={test:e=>e==="auto",parse:e=>e},bL=[Pl,me,Ji,as,n0e,t0e,Xve],id=e=>bL.find(vL(e)),Yve=[...bL,Xn,Xs],Qve=e=>Yve.find(vL(e));function Zve(e,t,n){e.hasValue(t)?e.getValue(t).set(n):e.addValue(t,cc(n))}function Jve(e,t){const n=l1(e,t);let{transitionEnd:r={},transition:i={},...o}=n?e.makeTargetAnimatable(n,!1):{};o={...o,...r};for(const s in o){const a=m0e(o[s]);Zve(e,s,a)}}function e1e(e,t,n){var r,i;const o=Object.keys(t).filter(a=>!e.hasValue(a)),s=o.length;if(s)for(let a=0;al.remove(d))),u.push(m)}return s&&Promise.all(u).then(()=>{s&&Jve(e,s)}),u}function j2(e,t,n={}){const r=l1(e,t,n.custom);let{transition:i=e.getDefaultTransition()||{}}=r||{};n.transitionOverride&&(i=n.transitionOverride);const o=r?()=>Promise.all(SL(e,r,n)):()=>Promise.resolve(),s=e.variantChildren&&e.variantChildren.size?(l=0)=>{const{delayChildren:u=0,staggerChildren:c,staggerDirection:d}=i;return i1e(e,t,u+l,c,d,n)}:()=>Promise.resolve(),{when:a}=i;if(a){const[l,u]=a==="beforeChildren"?[o,s]:[s,o];return l().then(()=>u())}else return Promise.all([o(),s(n.delay)])}function i1e(e,t,n=0,r=0,i=1,o){const s=[],a=(e.variantChildren.size-1)*r,l=i===1?(u=0)=>u*r:(u=0)=>a-u*r;return Array.from(e.variantChildren).sort(o1e).forEach((u,c)=>{u.notify("AnimationStart",t),s.push(j2(u,t,{...o,delay:n+l(c)}).then(()=>u.notify("AnimationComplete",t)))}),Promise.all(s)}function o1e(e,t){return e.sortNodePosition(t)}function s1e(e,t,n={}){e.notify("AnimationStart",t);let r;if(Array.isArray(t)){const i=t.map(o=>j2(e,o,n));r=Promise.all(i)}else if(typeof t=="string")r=j2(e,t,n);else{const i=typeof t=="function"?l1(e,t,n.custom):t;r=Promise.all(SL(e,i,n))}return r.then(()=>e.notify("AnimationComplete",t))}const a1e=[...GC].reverse(),l1e=GC.length;function u1e(e){return t=>Promise.all(t.map(({animation:n,options:r})=>s1e(e,n,r)))}function c1e(e){let t=u1e(e);const n=f1e();let r=!0;const i=(l,u)=>{const c=l1(e,u);if(c){const{transition:d,transitionEnd:f,...h}=c;l={...l,...h,...f}}return l};function o(l){t=l(e)}function s(l,u){const c=e.getProps(),d=e.getVariantContext(!0)||{},f=[],h=new Set;let p={},m=1/0;for(let y=0;ym&&_;const E=Array.isArray(b)?b:[b];let A=E.reduce(i,{});w===!1&&(A={});const{prevResolvedValues:$={}}=g,I={...$,...A},C=R=>{P=!0,h.delete(R),g.needsAnimating[R]=!0};for(const R in I){const M=A[R],N=$[R];p.hasOwnProperty(R)||(M!==N?ly(M)&&ly(N)?!zD(M,N)||T?C(R):g.protectedKeys[R]=!0:M!==void 0?C(R):h.add(R):M!==void 0&&h.has(R)?C(R):g.protectedKeys[R]=!0)}g.prevProp=b,g.prevResolvedValues=A,g.isActive&&(p={...p,...A}),r&&e.blockInitialAnimation&&(P=!1),P&&!x&&f.push(...E.map(R=>({animation:R,options:{type:v,...l}})))}if(h.size){const y={};h.forEach(v=>{const g=e.getBaseTarget(v);g!==void 0&&(y[v]=g)}),f.push({animation:y})}let S=!!f.length;return r&&c.initial===!1&&!e.manuallyAnimateOnMount&&(S=!1),r=!1,S?t(f):Promise.resolve()}function a(l,u,c){var d;if(n[l].isActive===u)return Promise.resolve();(d=e.variantChildren)===null||d===void 0||d.forEach(h=>{var p;return(p=h.animationState)===null||p===void 0?void 0:p.setActive(l,u)}),n[l].isActive=u;const f=s(c,l);for(const h in n)n[h].protectedKeys={};return f}return{animateChanges:s,setActive:a,setAnimateFunction:o,getState:()=>n}}function d1e(e,t){return typeof t=="string"?t!==e:Array.isArray(t)?!zD(t,e):!1}function Sa(e=!1){return{isActive:e,protectedKeys:{},needsAnimating:{},prevResolvedValues:{}}}function f1e(){return{animate:Sa(!0),whileInView:Sa(),whileHover:Sa(),whileTap:Sa(),whileDrag:Sa(),whileFocus:Sa(),exit:Sa()}}class h1e extends ca{constructor(t){super(t),t.animationState||(t.animationState=c1e(t))}updateAnimationControlsSubscription(){const{animate:t}=this.node.getProps();this.unmount(),i1(t)&&(this.unmount=t.subscribe(this.node))}mount(){this.updateAnimationControlsSubscription()}update(){const{animate:t}=this.node.getProps(),{animate:n}=this.node.prevProps||{};t!==n&&this.updateAnimationControlsSubscription()}unmount(){}}let p1e=0;class g1e extends ca{constructor(){super(...arguments),this.id=p1e++}update(){if(!this.node.presenceContext)return;const{isPresent:t,onExitComplete:n,custom:r}=this.node.presenceContext,{isPresent:i}=this.node.prevPresenceContext||{};if(!this.node.animationState||t===i)return;const o=this.node.animationState.setActive("exit",!t,{custom:r??this.node.getProps().custom});n&&!t&&o.then(()=>n(this.id))}mount(){const{register:t}=this.node.presenceContext||{};t&&(this.unmount=t(this.id))}unmount(){}}const m1e={animation:{Feature:h1e},exit:{Feature:g1e}},yP=(e,t)=>Math.abs(e-t);function y1e(e,t){const n=yP(e.x,t.x),r=yP(e.y,t.y);return Math.sqrt(n**2+r**2)}class _L{constructor(t,n,{transformPagePoint:r}={}){if(this.startEvent=null,this.lastMoveEvent=null,this.lastMoveEventInfo=null,this.handlers={},this.updatePoint=()=>{if(!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const u=pS(this.lastMoveEventInfo,this.history),c=this.startEvent!==null,d=y1e(u.offset,{x:0,y:0})>=3;if(!c&&!d)return;const{point:f}=u,{timestamp:h}=$n;this.history.push({...f,timestamp:h});const{onStart:p,onMove:m}=this.handlers;c||(p&&p(this.lastMoveEvent,u),this.startEvent=this.lastMoveEvent),m&&m(this.lastMoveEvent,u)},this.handlePointerMove=(u,c)=>{this.lastMoveEvent=u,this.lastMoveEventInfo=hS(c,this.transformPagePoint),St.update(this.updatePoint,!0)},this.handlePointerUp=(u,c)=>{if(this.end(),!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const{onEnd:d,onSessionEnd:f}=this.handlers,h=pS(u.type==="pointercancel"?this.lastMoveEventInfo:hS(c,this.transformPagePoint),this.history);this.startEvent&&d&&d(u,h),f&&f(u,h)},!$D(t))return;this.handlers=n,this.transformPagePoint=r;const i=a1(t),o=hS(i,this.transformPagePoint),{point:s}=o,{timestamp:a}=$n;this.history=[{...s,timestamp:a}];const{onSessionStart:l}=n;l&&l(t,pS(o,this.history)),this.removeListeners=Ns(Io(window,"pointermove",this.handlePointerMove),Io(window,"pointerup",this.handlePointerUp),Io(window,"pointercancel",this.handlePointerUp))}updateHandlers(t){this.handlers=t}end(){this.removeListeners&&this.removeListeners(),Uo(this.updatePoint)}}function hS(e,t){return t?{point:t(e.point)}:e}function vP(e,t){return{x:e.x-t.x,y:e.y-t.y}}function pS({point:e},t){return{point:e,delta:vP(e,wL(t)),offset:vP(e,v1e(t)),velocity:b1e(t,.1)}}function v1e(e){return e[0]}function wL(e){return e[e.length-1]}function b1e(e,t){if(e.length<2)return{x:0,y:0};let n=e.length-1,r=null;const i=wL(e);for(;n>=0&&(r=e[n],!(i.timestamp-r.timestamp>Ds(t)));)n--;if(!r)return{x:0,y:0};const o=No(i.timestamp-r.timestamp);if(o===0)return{x:0,y:0};const s={x:(i.x-r.x)/o,y:(i.y-r.y)/o};return s.x===1/0&&(s.x=0),s.y===1/0&&(s.y=0),s}function Mr(e){return e.max-e.min}function V2(e,t=0,n=.01){return Math.abs(e-t)<=n}function bP(e,t,n,r=.5){e.origin=r,e.originPoint=At(t.min,t.max,e.origin),e.scale=Mr(n)/Mr(t),(V2(e.scale,1,1e-4)||isNaN(e.scale))&&(e.scale=1),e.translate=At(n.min,n.max,e.origin)-e.originPoint,(V2(e.translate)||isNaN(e.translate))&&(e.translate=0)}function Id(e,t,n,r){bP(e.x,t.x,n.x,r?r.originX:void 0),bP(e.y,t.y,n.y,r?r.originY:void 0)}function SP(e,t,n){e.min=n.min+t.min,e.max=e.min+Mr(t)}function S1e(e,t,n){SP(e.x,t.x,n.x),SP(e.y,t.y,n.y)}function _P(e,t,n){e.min=t.min-n.min,e.max=e.min+Mr(t)}function Nd(e,t,n){_P(e.x,t.x,n.x),_P(e.y,t.y,n.y)}function _1e(e,{min:t,max:n},r){return t!==void 0&&en&&(e=r?At(n,e,r.max):Math.min(e,n)),e}function wP(e,t,n){return{min:t!==void 0?e.min+t:void 0,max:n!==void 0?e.max+n-(e.max-e.min):void 0}}function w1e(e,{top:t,left:n,bottom:r,right:i}){return{x:wP(e.x,n,i),y:wP(e.y,t,r)}}function xP(e,t){let n=t.min-e.min,r=t.max-e.max;return t.max-t.minr?n=qf(t.min,t.max-r,e.min):r>i&&(n=qf(e.min,e.max-i,t.min)),Ks(0,1,n)}function T1e(e,t){const n={};return t.min!==void 0&&(n.min=t.min-e.min),t.max!==void 0&&(n.max=t.max-e.min),n}const z2=.35;function E1e(e=z2){return e===!1?e=0:e===!0&&(e=z2),{x:CP(e,"left","right"),y:CP(e,"top","bottom")}}function CP(e,t,n){return{min:TP(e,t),max:TP(e,n)}}function TP(e,t){return typeof e=="number"?e:e[t]||0}const EP=()=>({translate:0,scale:1,origin:0,originPoint:0}),mu=()=>({x:EP(),y:EP()}),PP=()=>({min:0,max:0}),qt=()=>({x:PP(),y:PP()});function Li(e){return[e("x"),e("y")]}function xL({top:e,left:t,right:n,bottom:r}){return{x:{min:t,max:n},y:{min:e,max:r}}}function P1e({x:e,y:t}){return{top:t.min,right:e.max,bottom:t.max,left:e.min}}function A1e(e,t){if(!t)return e;const n=t({x:e.left,y:e.top}),r=t({x:e.right,y:e.bottom});return{top:n.y,left:n.x,bottom:r.y,right:r.x}}function gS(e){return e===void 0||e===1}function U2({scale:e,scaleX:t,scaleY:n}){return!gS(e)||!gS(t)||!gS(n)}function Ta(e){return U2(e)||CL(e)||e.z||e.rotate||e.rotateX||e.rotateY}function CL(e){return AP(e.x)||AP(e.y)}function AP(e){return e&&e!=="0%"}function hy(e,t,n){const r=e-n,i=t*r;return n+i}function kP(e,t,n,r,i){return i!==void 0&&(e=hy(e,i,r)),hy(e,n,r)+t}function G2(e,t=0,n=1,r,i){e.min=kP(e.min,t,n,r,i),e.max=kP(e.max,t,n,r,i)}function TL(e,{x:t,y:n}){G2(e.x,t.translate,t.scale,t.originPoint),G2(e.y,n.translate,n.scale,n.originPoint)}function k1e(e,t,n,r=!1){const i=n.length;if(!i)return;t.x=t.y=1;let o,s;for(let a=0;a1.0000000000001||e<.999999999999?e:1}function fs(e,t){e.min=e.min+t,e.max=e.max+t}function OP(e,t,[n,r,i]){const o=t[i]!==void 0?t[i]:.5,s=At(e.min,e.max,o);G2(e,t[n],t[r],s,t.scale)}const R1e=["x","scaleX","originX"],O1e=["y","scaleY","originY"];function yu(e,t){OP(e.x,t,R1e),OP(e.y,t,O1e)}function EL(e,t){return xL(A1e(e.getBoundingClientRect(),t))}function M1e(e,t,n){const r=EL(e,n),{scroll:i}=t;return i&&(fs(r.x,i.offset.x),fs(r.y,i.offset.y)),r}const I1e=new WeakMap;class N1e{constructor(t){this.openGlobalLock=null,this.isDragging=!1,this.currentDirection=null,this.originPoint={x:0,y:0},this.constraints=!1,this.hasMutatedConstraints=!1,this.elastic=qt(),this.visualElement=t}start(t,{snapToCursor:n=!1}={}){const{presenceContext:r}=this.visualElement;if(r&&r.isPresent===!1)return;const i=l=>{this.stopAnimation(),n&&this.snapToCursor(a1(l,"page").point)},o=(l,u)=>{const{drag:c,dragPropagation:d,onDragStart:f}=this.getProps();if(c&&!d&&(this.openGlobalLock&&this.openGlobalLock(),this.openGlobalLock=BD(c),!this.openGlobalLock))return;this.isDragging=!0,this.currentDirection=null,this.resolveConstraints(),this.visualElement.projection&&(this.visualElement.projection.isAnimationBlocked=!0,this.visualElement.projection.target=void 0),Li(p=>{let m=this.getAxisMotionValue(p).get()||0;if(Ji.test(m)){const{projection:S}=this.visualElement;if(S&&S.layout){const y=S.layout.layoutBox[p];y&&(m=Mr(y)*(parseFloat(m)/100))}}this.originPoint[p]=m}),f&&St.update(()=>f(l,u),!1,!0);const{animationState:h}=this.visualElement;h&&h.setActive("whileDrag",!0)},s=(l,u)=>{const{dragPropagation:c,dragDirectionLock:d,onDirectionLock:f,onDrag:h}=this.getProps();if(!c&&!this.openGlobalLock)return;const{offset:p}=u;if(d&&this.currentDirection===null){this.currentDirection=D1e(p),this.currentDirection!==null&&f&&f(this.currentDirection);return}this.updateAxis("x",u.point,p),this.updateAxis("y",u.point,p),this.visualElement.render(),h&&h(l,u)},a=(l,u)=>this.stop(l,u);this.panSession=new _L(t,{onSessionStart:i,onStart:o,onMove:s,onSessionEnd:a},{transformPagePoint:this.visualElement.getTransformPagePoint()})}stop(t,n){const r=this.isDragging;if(this.cancel(),!r)return;const{velocity:i}=n;this.startAnimation(i);const{onDragEnd:o}=this.getProps();o&&St.update(()=>o(t,n))}cancel(){this.isDragging=!1;const{projection:t,animationState:n}=this.visualElement;t&&(t.isAnimationBlocked=!1),this.panSession&&this.panSession.end(),this.panSession=void 0;const{dragPropagation:r}=this.getProps();!r&&this.openGlobalLock&&(this.openGlobalLock(),this.openGlobalLock=null),n&&n.setActive("whileDrag",!1)}updateAxis(t,n,r){const{drag:i}=this.getProps();if(!r||!qp(t,i,this.currentDirection))return;const o=this.getAxisMotionValue(t);let s=this.originPoint[t]+r[t];this.constraints&&this.constraints[t]&&(s=_1e(s,this.constraints[t],this.elastic[t])),o.set(s)}resolveConstraints(){const{dragConstraints:t,dragElastic:n}=this.getProps(),{layout:r}=this.visualElement.projection||{},i=this.constraints;t&&pu(t)?this.constraints||(this.constraints=this.resolveRefConstraints()):t&&r?this.constraints=w1e(r.layoutBox,t):this.constraints=!1,this.elastic=E1e(n),i!==this.constraints&&r&&this.constraints&&!this.hasMutatedConstraints&&Li(o=>{this.getAxisMotionValue(o)&&(this.constraints[o]=T1e(r.layoutBox[o],this.constraints[o]))})}resolveRefConstraints(){const{dragConstraints:t,onMeasureDragConstraints:n}=this.getProps();if(!t||!pu(t))return!1;const r=t.current,{projection:i}=this.visualElement;if(!i||!i.layout)return!1;const o=M1e(r,i.root,this.visualElement.getTransformPagePoint());let s=x1e(i.layout.layoutBox,o);if(n){const a=n(P1e(s));this.hasMutatedConstraints=!!a,a&&(s=xL(a))}return s}startAnimation(t){const{drag:n,dragMomentum:r,dragElastic:i,dragTransition:o,dragSnapToOrigin:s,onDragTransitionEnd:a}=this.getProps(),l=this.constraints||{},u=Li(c=>{if(!qp(c,n,this.currentDirection))return;let d=l&&l[c]||{};s&&(d={min:0,max:0});const f=i?200:1e6,h=i?40:1e7,p={type:"inertia",velocity:r?t[c]:0,bounceStiffness:f,bounceDamping:h,timeConstant:750,restDelta:1,restSpeed:10,...o,...d};return this.startAxisValueAnimation(c,p)});return Promise.all(u).then(a)}startAxisValueAnimation(t,n){const r=this.getAxisMotionValue(t);return r.start(s3(t,r,0,n))}stopAnimation(){Li(t=>this.getAxisMotionValue(t).stop())}getAxisMotionValue(t){const n="_drag"+t.toUpperCase(),r=this.visualElement.getProps(),i=r[n];return i||this.visualElement.getValue(t,(r.initial?r.initial[t]:void 0)||0)}snapToCursor(t){Li(n=>{const{drag:r}=this.getProps();if(!qp(n,r,this.currentDirection))return;const{projection:i}=this.visualElement,o=this.getAxisMotionValue(n);if(i&&i.layout){const{min:s,max:a}=i.layout.layoutBox[n];o.set(t[n]-At(s,a,.5))}})}scalePositionWithinConstraints(){if(!this.visualElement.current)return;const{drag:t,dragConstraints:n}=this.getProps(),{projection:r}=this.visualElement;if(!pu(n)||!r||!this.constraints)return;this.stopAnimation();const i={x:0,y:0};Li(s=>{const a=this.getAxisMotionValue(s);if(a){const l=a.get();i[s]=C1e({min:l,max:l},this.constraints[s])}});const{transformTemplate:o}=this.visualElement.getProps();this.visualElement.current.style.transform=o?o({},""):"none",r.root&&r.root.updateScroll(),r.updateLayout(),this.resolveConstraints(),Li(s=>{if(!qp(s,t,null))return;const a=this.getAxisMotionValue(s),{min:l,max:u}=this.constraints[s];a.set(At(l,u,i[s]))})}addListeners(){if(!this.visualElement.current)return;I1e.set(this.visualElement,this);const t=this.visualElement.current,n=Io(t,"pointerdown",l=>{const{drag:u,dragListener:c=!0}=this.getProps();u&&c&&this.start(l)}),r=()=>{const{dragConstraints:l}=this.getProps();pu(l)&&(this.constraints=this.resolveRefConstraints())},{projection:i}=this.visualElement,o=i.addEventListener("measure",r);i&&!i.layout&&(i.root&&i.root.updateScroll(),i.updateLayout()),r();const s=Ao(window,"resize",()=>this.scalePositionWithinConstraints()),a=i.addEventListener("didUpdate",({delta:l,hasLayoutChanged:u})=>{this.isDragging&&u&&(Li(c=>{const d=this.getAxisMotionValue(c);d&&(this.originPoint[c]+=l[c].translate,d.set(d.get()+l[c].translate))}),this.visualElement.render())});return()=>{s(),n(),o(),a&&a()}}getProps(){const t=this.visualElement.getProps(),{drag:n=!1,dragDirectionLock:r=!1,dragPropagation:i=!1,dragConstraints:o=!1,dragElastic:s=z2,dragMomentum:a=!0}=t;return{...t,drag:n,dragDirectionLock:r,dragPropagation:i,dragConstraints:o,dragElastic:s,dragMomentum:a}}}function qp(e,t,n){return(t===!0||t===e)&&(n===null||n===e)}function D1e(e,t=10){let n=null;return Math.abs(e.y)>t?n="y":Math.abs(e.x)>t&&(n="x"),n}class L1e extends ca{constructor(t){super(t),this.removeGroupControls=Yt,this.removeListeners=Yt,this.controls=new N1e(t)}mount(){const{dragControls:t}=this.node.getProps();t&&(this.removeGroupControls=t.subscribe(this.controls)),this.removeListeners=this.controls.addListeners()||Yt}unmount(){this.removeGroupControls(),this.removeListeners()}}const MP=e=>(t,n)=>{e&&St.update(()=>e(t,n))};class $1e extends ca{constructor(){super(...arguments),this.removePointerDownListener=Yt}onPointerDown(t){this.session=new _L(t,this.createPanHandlers(),{transformPagePoint:this.node.getTransformPagePoint()})}createPanHandlers(){const{onPanSessionStart:t,onPanStart:n,onPan:r,onPanEnd:i}=this.node.getProps();return{onSessionStart:MP(t),onStart:MP(n),onMove:r,onEnd:(o,s)=>{delete this.session,i&&St.update(()=>i(o,s))}}}mount(){this.removePointerDownListener=Io(this.node.current,"pointerdown",t=>this.onPointerDown(t))}update(){this.session&&this.session.updateHandlers(this.createPanHandlers())}unmount(){this.removePointerDownListener(),this.session&&this.session.end()}}function F1e(){const e=k.useContext(Lh);if(e===null)return[!0,null];const{isPresent:t,onExitComplete:n,register:r}=e,i=k.useId();return k.useEffect(()=>r(i),[]),!t&&n?[!1,()=>n&&n(i)]:[!0]}function j4e(){return B1e(k.useContext(Lh))}function B1e(e){return e===null?!0:e.isPresent}const Ag={hasAnimatedSinceResize:!0,hasEverUpdated:!1};function IP(e,t){return t.max===t.min?0:e/(t.max-t.min)*100}const od={correct:(e,t)=>{if(!t.target)return e;if(typeof e=="string")if(me.test(e))e=parseFloat(e);else return e;const n=IP(e,t.target.x),r=IP(e,t.target.y);return`${n}% ${r}%`}},j1e={correct:(e,{treeScale:t,projectionDelta:n})=>{const r=e,i=Xs.parse(e);if(i.length>5)return r;const o=Xs.createTransformer(e),s=typeof i[0]!="number"?1:0,a=n.x.scale*t.x,l=n.y.scale*t.y;i[0+s]/=a,i[1+s]/=l;const u=At(a,l,.5);return typeof i[2+s]=="number"&&(i[2+s]/=u),typeof i[3+s]=="number"&&(i[3+s]/=u),o(i)}};class V1e extends Xe.Component{componentDidMount(){const{visualElement:t,layoutGroup:n,switchLayoutGroup:r,layoutId:i}=this.props,{projection:o}=t;Kye(z1e),o&&(n.group&&n.group.add(o),r&&r.register&&i&&r.register(o),o.root.didUpdate(),o.addEventListener("animationComplete",()=>{this.safeToRemove()}),o.setOptions({...o.options,onExitComplete:()=>this.safeToRemove()})),Ag.hasEverUpdated=!0}getSnapshotBeforeUpdate(t){const{layoutDependency:n,visualElement:r,drag:i,isPresent:o}=this.props,s=r.projection;return s&&(s.isPresent=o,i||t.layoutDependency!==n||n===void 0?s.willUpdate():this.safeToRemove(),t.isPresent!==o&&(o?s.promote():s.relegate()||St.postRender(()=>{const a=s.getStack();(!a||!a.members.length)&&this.safeToRemove()}))),null}componentDidUpdate(){const{projection:t}=this.props.visualElement;t&&(t.root.didUpdate(),queueMicrotask(()=>{!t.currentAnimation&&t.isLead()&&this.safeToRemove()}))}componentWillUnmount(){const{visualElement:t,layoutGroup:n,switchLayoutGroup:r}=this.props,{projection:i}=t;i&&(i.scheduleCheckAfterUnmount(),n&&n.group&&n.group.remove(i),r&&r.deregister&&r.deregister(i))}safeToRemove(){const{safeToRemove:t}=this.props;t&&t()}render(){return null}}function PL(e){const[t,n]=F1e(),r=k.useContext(qC);return Xe.createElement(V1e,{...e,layoutGroup:r,switchLayoutGroup:k.useContext(wD),isPresent:t,safeToRemove:n})}const z1e={borderRadius:{...od,applyTo:["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"]},borderTopLeftRadius:od,borderTopRightRadius:od,borderBottomLeftRadius:od,borderBottomRightRadius:od,boxShadow:j1e},AL=["TopLeft","TopRight","BottomLeft","BottomRight"],U1e=AL.length,NP=e=>typeof e=="string"?parseFloat(e):e,DP=e=>typeof e=="number"||me.test(e);function G1e(e,t,n,r,i,o){i?(e.opacity=At(0,n.opacity!==void 0?n.opacity:1,H1e(r)),e.opacityExit=At(t.opacity!==void 0?t.opacity:1,0,q1e(r))):o&&(e.opacity=At(t.opacity!==void 0?t.opacity:1,n.opacity!==void 0?n.opacity:1,r));for(let s=0;srt?1:n(qf(e,t,r))}function $P(e,t){e.min=t.min,e.max=t.max}function Vr(e,t){$P(e.x,t.x),$P(e.y,t.y)}function FP(e,t,n,r,i){return e-=t,e=hy(e,1/n,r),i!==void 0&&(e=hy(e,1/i,r)),e}function W1e(e,t=0,n=1,r=.5,i,o=e,s=e){if(Ji.test(t)&&(t=parseFloat(t),t=At(s.min,s.max,t/100)-s.min),typeof t!="number")return;let a=At(o.min,o.max,r);e===o&&(a-=t),e.min=FP(e.min,t,n,a,i),e.max=FP(e.max,t,n,a,i)}function BP(e,t,[n,r,i],o,s){W1e(e,t[n],t[r],t[i],t.scale,o,s)}const K1e=["x","scaleX","originX"],X1e=["y","scaleY","originY"];function jP(e,t,n,r){BP(e.x,t,K1e,n?n.x:void 0,r?r.x:void 0),BP(e.y,t,X1e,n?n.y:void 0,r?r.y:void 0)}function VP(e){return e.translate===0&&e.scale===1}function RL(e){return VP(e.x)&&VP(e.y)}function H2(e,t){return e.x.min===t.x.min&&e.x.max===t.x.max&&e.y.min===t.y.min&&e.y.max===t.y.max}function zP(e){return Mr(e.x)/Mr(e.y)}class Y1e{constructor(){this.members=[]}add(t){a3(this.members,t),t.scheduleRender()}remove(t){if(l3(this.members,t),t===this.prevLead&&(this.prevLead=void 0),t===this.lead){const n=this.members[this.members.length-1];n&&this.promote(n)}}relegate(t){const n=this.members.findIndex(i=>t===i);if(n===0)return!1;let r;for(let i=n;i>=0;i--){const o=this.members[i];if(o.isPresent!==!1){r=o;break}}return r?(this.promote(r),!0):!1}promote(t,n){const r=this.lead;if(t!==r&&(this.prevLead=r,this.lead=t,t.show(),r)){r.instance&&r.scheduleRender(),t.scheduleRender(),t.resumeFrom=r,n&&(t.resumeFrom.preserveOpacity=!0),r.snapshot&&(t.snapshot=r.snapshot,t.snapshot.latestValues=r.animationValues||r.latestValues),t.root&&t.root.isUpdating&&(t.isLayoutDirty=!0);const{crossfade:i}=t.options;i===!1&&r.hide()}}exitAnimationComplete(){this.members.forEach(t=>{const{options:n,resumingFrom:r}=t;n.onExitComplete&&n.onExitComplete(),r&&r.options.onExitComplete&&r.options.onExitComplete()})}scheduleRender(){this.members.forEach(t=>{t.instance&&t.scheduleRender(!1)})}removeLeadSnapshot(){this.lead&&this.lead.snapshot&&(this.lead.snapshot=void 0)}}function UP(e,t,n){let r="";const i=e.x.translate/t.x,o=e.y.translate/t.y;if((i||o)&&(r=`translate3d(${i}px, ${o}px, 0) `),(t.x!==1||t.y!==1)&&(r+=`scale(${1/t.x}, ${1/t.y}) `),n){const{rotate:l,rotateX:u,rotateY:c}=n;l&&(r+=`rotate(${l}deg) `),u&&(r+=`rotateX(${u}deg) `),c&&(r+=`rotateY(${c}deg) `)}const s=e.x.scale*t.x,a=e.y.scale*t.y;return(s!==1||a!==1)&&(r+=`scale(${s}, ${a})`),r||"none"}const Q1e=(e,t)=>e.depth-t.depth;class Z1e{constructor(){this.children=[],this.isDirty=!1}add(t){a3(this.children,t),this.isDirty=!0}remove(t){l3(this.children,t),this.isDirty=!0}forEach(t){this.isDirty&&this.children.sort(Q1e),this.isDirty=!1,this.children.forEach(t)}}function J1e(e,t){const n=performance.now(),r=({timestamp:i})=>{const o=i-n;o>=t&&(Uo(r),e(o-t))};return St.read(r,!0),()=>Uo(r)}function ebe(e){window.MotionDebug&&window.MotionDebug.record(e)}function tbe(e){return e instanceof SVGElement&&e.tagName!=="svg"}function nbe(e,t,n){const r=_r(e)?e:cc(e);return r.start(s3("",r,t,n)),r.animation}const GP=["","X","Y","Z"],HP=1e3;let rbe=0;const Ea={type:"projectionFrame",totalNodes:0,resolvedTargetDeltas:0,recalculatedProjection:0};function OL({attachResizeListener:e,defaultParent:t,measureScroll:n,checkIsScrollRoot:r,resetTransform:i}){return class{constructor(s={},a=t==null?void 0:t()){this.id=rbe++,this.animationId=0,this.children=new Set,this.options={},this.isTreeAnimating=!1,this.isAnimationBlocked=!1,this.isLayoutDirty=!1,this.isProjectionDirty=!1,this.isSharedProjectionDirty=!1,this.isTransformDirty=!1,this.updateManuallyBlocked=!1,this.updateBlockedByResize=!1,this.isUpdating=!1,this.isSVG=!1,this.needsReset=!1,this.shouldResetTransform=!1,this.treeScale={x:1,y:1},this.eventHandlers=new Map,this.hasTreeAnimated=!1,this.updateScheduled=!1,this.checkUpdateFailed=()=>{this.isUpdating&&(this.isUpdating=!1,this.clearAllSnapshots())},this.updateProjection=()=>{Ea.totalNodes=Ea.resolvedTargetDeltas=Ea.recalculatedProjection=0,this.nodes.forEach(sbe),this.nodes.forEach(dbe),this.nodes.forEach(fbe),this.nodes.forEach(abe),ebe(Ea)},this.hasProjected=!1,this.isVisible=!0,this.animationProgress=0,this.sharedNodes=new Map,this.latestValues=s,this.root=a?a.root||a:this,this.path=a?[...a.path,a]:[],this.parent=a,this.depth=a?a.depth+1:0;for(let l=0;lthis.root.updateBlockedByResize=!1;e(s,()=>{this.root.updateBlockedByResize=!0,d&&d(),d=J1e(f,250),Ag.hasAnimatedSinceResize&&(Ag.hasAnimatedSinceResize=!1,this.nodes.forEach(WP))})}l&&this.root.registerSharedNode(l,this),this.options.animate!==!1&&c&&(l||u)&&this.addEventListener("didUpdate",({delta:d,hasLayoutChanged:f,hasRelativeTargetChanged:h,layout:p})=>{if(this.isTreeAnimationBlocked()){this.target=void 0,this.relativeTarget=void 0;return}const m=this.options.transition||c.getDefaultTransition()||ybe,{onLayoutAnimationStart:S,onLayoutAnimationComplete:y}=c.getProps(),v=!this.targetLayout||!H2(this.targetLayout,p)||h,g=!f&&h;if(this.options.layoutRoot||this.resumeFrom&&this.resumeFrom.instance||g||f&&(v||!this.currentAnimation)){this.resumeFrom&&(this.resumingFrom=this.resumeFrom,this.resumingFrom.resumingFrom=void 0),this.setAnimationOrigin(d,g);const b={...yL(m,"layout"),onPlay:S,onComplete:y};(c.shouldReduceMotion||this.options.layoutRoot)&&(b.delay=0,b.type=!1),this.startAnimation(b)}else f||WP(this),this.isLead()&&this.options.onExitComplete&&this.options.onExitComplete();this.targetLayout=p})}unmount(){this.options.layoutId&&this.willUpdate(),this.root.nodes.remove(this);const s=this.getStack();s&&s.remove(this),this.parent&&this.parent.children.delete(this),this.instance=void 0,Uo(this.updateProjection)}blockUpdate(){this.updateManuallyBlocked=!0}unblockUpdate(){this.updateManuallyBlocked=!1}isUpdateBlocked(){return this.updateManuallyBlocked||this.updateBlockedByResize}isTreeAnimationBlocked(){return this.isAnimationBlocked||this.parent&&this.parent.isTreeAnimationBlocked()||!1}startUpdate(){this.isUpdateBlocked()||(this.isUpdating=!0,this.nodes&&this.nodes.forEach(hbe),this.animationId++)}getTransformTemplate(){const{visualElement:s}=this.options;return s&&s.getProps().transformTemplate}willUpdate(s=!0){if(this.root.hasTreeAnimated=!0,this.root.isUpdateBlocked()){this.options.onExitComplete&&this.options.onExitComplete();return}if(!this.root.isUpdating&&this.root.startUpdate(),this.isLayoutDirty)return;this.isLayoutDirty=!0;for(let c=0;cthis.update()))}clearAllSnapshots(){this.nodes.forEach(lbe),this.sharedNodes.forEach(pbe)}scheduleUpdateProjection(){St.preRender(this.updateProjection,!1,!0)}scheduleCheckAfterUnmount(){St.postRender(()=>{this.isLayoutDirty?this.root.didUpdate():this.root.checkUpdateFailed()})}updateSnapshot(){this.snapshot||!this.instance||(this.snapshot=this.measure())}updateLayout(){if(!this.instance||(this.updateScroll(),!(this.options.alwaysMeasureLayout&&this.isLead())&&!this.isLayoutDirty))return;if(this.resumeFrom&&!this.resumeFrom.instance)for(let l=0;l{const _=b/1e3;KP(d.x,s.x,_),KP(d.y,s.y,_),this.setTargetDelta(d),this.relativeTarget&&this.relativeTargetOrigin&&this.layout&&this.relativeParent&&this.relativeParent.layout&&(Nd(f,this.layout.layoutBox,this.relativeParent.layout.layoutBox),gbe(this.relativeTarget,this.relativeTargetOrigin,f,_),g&&H2(this.relativeTarget,g)&&(this.isProjectionDirty=!1),g||(g=qt()),Vr(g,this.relativeTarget)),m&&(this.animationValues=c,G1e(c,u,this.latestValues,_,v,y)),this.root.scheduleUpdateProjection(),this.scheduleRender(),this.animationProgress=_},this.mixTargetDelta(this.options.layoutRoot?1e3:0)}startAnimation(s){this.notifyListeners("animationStart"),this.currentAnimation&&this.currentAnimation.stop(),this.resumingFrom&&this.resumingFrom.currentAnimation&&this.resumingFrom.currentAnimation.stop(),this.pendingAnimation&&(Uo(this.pendingAnimation),this.pendingAnimation=void 0),this.pendingAnimation=St.update(()=>{Ag.hasAnimatedSinceResize=!0,this.currentAnimation=nbe(0,HP,{...s,onUpdate:a=>{this.mixTargetDelta(a),s.onUpdate&&s.onUpdate(a)},onComplete:()=>{s.onComplete&&s.onComplete(),this.completeAnimation()}}),this.resumingFrom&&(this.resumingFrom.currentAnimation=this.currentAnimation),this.pendingAnimation=void 0})}completeAnimation(){this.resumingFrom&&(this.resumingFrom.currentAnimation=void 0,this.resumingFrom.preserveOpacity=void 0);const s=this.getStack();s&&s.exitAnimationComplete(),this.resumingFrom=this.currentAnimation=this.animationValues=void 0,this.notifyListeners("animationComplete")}finishAnimation(){this.currentAnimation&&(this.mixTargetDelta&&this.mixTargetDelta(HP),this.currentAnimation.stop()),this.completeAnimation()}applyTransformsToTarget(){const s=this.getLead();let{targetWithTransforms:a,target:l,layout:u,latestValues:c}=s;if(!(!a||!l||!u)){if(this!==s&&this.layout&&u&&ML(this.options.animationType,this.layout.layoutBox,u.layoutBox)){l=this.target||qt();const d=Mr(this.layout.layoutBox.x);l.x.min=s.target.x.min,l.x.max=l.x.min+d;const f=Mr(this.layout.layoutBox.y);l.y.min=s.target.y.min,l.y.max=l.y.min+f}Vr(a,l),yu(a,c),Id(this.projectionDeltaWithTransform,this.layoutCorrected,a,c)}}registerSharedNode(s,a){this.sharedNodes.has(s)||this.sharedNodes.set(s,new Y1e),this.sharedNodes.get(s).add(a);const u=a.options.initialPromotionConfig;a.promote({transition:u?u.transition:void 0,preserveFollowOpacity:u&&u.shouldPreserveFollowOpacity?u.shouldPreserveFollowOpacity(a):void 0})}isLead(){const s=this.getStack();return s?s.lead===this:!0}getLead(){var s;const{layoutId:a}=this.options;return a?((s=this.getStack())===null||s===void 0?void 0:s.lead)||this:this}getPrevLead(){var s;const{layoutId:a}=this.options;return a?(s=this.getStack())===null||s===void 0?void 0:s.prevLead:void 0}getStack(){const{layoutId:s}=this.options;if(s)return this.root.sharedNodes.get(s)}promote({needsReset:s,transition:a,preserveFollowOpacity:l}={}){const u=this.getStack();u&&u.promote(this,l),s&&(this.projectionDelta=void 0,this.needsReset=!0),a&&this.setOptions({transition:a})}relegate(){const s=this.getStack();return s?s.relegate(this):!1}resetRotation(){const{visualElement:s}=this.options;if(!s)return;let a=!1;const{latestValues:l}=s;if((l.rotate||l.rotateX||l.rotateY||l.rotateZ)&&(a=!0),!a)return;const u={};for(let c=0;c{var a;return(a=s.currentAnimation)===null||a===void 0?void 0:a.stop()}),this.root.nodes.forEach(qP),this.root.sharedNodes.clear()}}}function ibe(e){e.updateLayout()}function obe(e){var t;const n=((t=e.resumeFrom)===null||t===void 0?void 0:t.snapshot)||e.snapshot;if(e.isLead()&&e.layout&&n&&e.hasListeners("didUpdate")){const{layoutBox:r,measuredBox:i}=e.layout,{animationType:o}=e.options,s=n.source!==e.layout.source;o==="size"?Li(d=>{const f=s?n.measuredBox[d]:n.layoutBox[d],h=Mr(f);f.min=r[d].min,f.max=f.min+h}):ML(o,n.layoutBox,r)&&Li(d=>{const f=s?n.measuredBox[d]:n.layoutBox[d],h=Mr(r[d]);f.max=f.min+h,e.relativeTarget&&!e.currentAnimation&&(e.isProjectionDirty=!0,e.relativeTarget[d].max=e.relativeTarget[d].min+h)});const a=mu();Id(a,r,n.layoutBox);const l=mu();s?Id(l,e.applyTransform(i,!0),n.measuredBox):Id(l,r,n.layoutBox);const u=!RL(a);let c=!1;if(!e.resumeFrom){const d=e.getClosestProjectingParent();if(d&&!d.resumeFrom){const{snapshot:f,layout:h}=d;if(f&&h){const p=qt();Nd(p,n.layoutBox,f.layoutBox);const m=qt();Nd(m,r,h.layoutBox),H2(p,m)||(c=!0),d.options.layoutRoot&&(e.relativeTarget=m,e.relativeTargetOrigin=p,e.relativeParent=d)}}}e.notifyListeners("didUpdate",{layout:r,snapshot:n,delta:l,layoutDelta:a,hasLayoutChanged:u,hasRelativeTargetChanged:c})}else if(e.isLead()){const{onExitComplete:r}=e.options;r&&r()}e.options.transition=void 0}function sbe(e){Ea.totalNodes++,e.parent&&(e.isProjecting()||(e.isProjectionDirty=e.parent.isProjectionDirty),e.isSharedProjectionDirty||(e.isSharedProjectionDirty=!!(e.isProjectionDirty||e.parent.isProjectionDirty||e.parent.isSharedProjectionDirty)),e.isTransformDirty||(e.isTransformDirty=e.parent.isTransformDirty))}function abe(e){e.isProjectionDirty=e.isSharedProjectionDirty=e.isTransformDirty=!1}function lbe(e){e.clearSnapshot()}function qP(e){e.clearMeasurements()}function ube(e){e.isLayoutDirty=!1}function cbe(e){const{visualElement:t}=e.options;t&&t.getProps().onBeforeLayoutMeasure&&t.notify("BeforeLayoutMeasure"),e.resetTransform()}function WP(e){e.finishAnimation(),e.targetDelta=e.relativeTarget=e.target=void 0,e.isProjectionDirty=!0}function dbe(e){e.resolveTargetDelta()}function fbe(e){e.calcProjection()}function hbe(e){e.resetRotation()}function pbe(e){e.removeLeadSnapshot()}function KP(e,t,n){e.translate=At(t.translate,0,n),e.scale=At(t.scale,1,n),e.origin=t.origin,e.originPoint=t.originPoint}function XP(e,t,n,r){e.min=At(t.min,n.min,r),e.max=At(t.max,n.max,r)}function gbe(e,t,n,r){XP(e.x,t.x,n.x,r),XP(e.y,t.y,n.y,r)}function mbe(e){return e.animationValues&&e.animationValues.opacityExit!==void 0}const ybe={duration:.45,ease:[.4,0,.1,1]};function YP(e){e.min=Math.round(e.min*2)/2,e.max=Math.round(e.max*2)/2}function vbe(e){YP(e.x),YP(e.y)}function ML(e,t,n){return e==="position"||e==="preserve-aspect"&&!V2(zP(t),zP(n),.2)}const bbe=OL({attachResizeListener:(e,t)=>Ao(e,"resize",t),measureScroll:()=>({x:document.documentElement.scrollLeft||document.body.scrollLeft,y:document.documentElement.scrollTop||document.body.scrollTop}),checkIsScrollRoot:()=>!0}),mS={current:void 0},IL=OL({measureScroll:e=>({x:e.scrollLeft,y:e.scrollTop}),defaultParent:()=>{if(!mS.current){const e=new bbe({});e.mount(window),e.setOptions({layoutScroll:!0}),mS.current=e}return mS.current},resetTransform:(e,t)=>{e.style.transform=t!==void 0?t:"none"},checkIsScrollRoot:e=>window.getComputedStyle(e).position==="fixed"}),Sbe={pan:{Feature:$1e},drag:{Feature:L1e,ProjectionNode:IL,MeasureLayout:PL}},_be=/var\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\)/;function wbe(e){const t=_be.exec(e);if(!t)return[,];const[,n,r]=t;return[n,r]}function q2(e,t,n=1){const[r,i]=wbe(e);if(!r)return;const o=window.getComputedStyle(t).getPropertyValue(r);return o?o.trim():N2(i)?q2(i,t,n+1):i}function xbe(e,{...t},n){const r=e.current;if(!(r instanceof Element))return{target:t,transitionEnd:n};n&&(n={...n}),e.values.forEach(i=>{const o=i.get();if(!N2(o))return;const s=q2(o,r);s&&i.set(s)});for(const i in t){const o=t[i];if(!N2(o))continue;const s=q2(o,r);s&&(t[i]=s,n||(n={}),n[i]===void 0&&(n[i]=o))}return{target:t,transitionEnd:n}}const Cbe=new Set(["width","height","top","left","right","bottom","x","y","translateX","translateY"]),NL=e=>Cbe.has(e),Tbe=e=>Object.keys(e).some(NL),QP=e=>e===Pl||e===me,ZP=(e,t)=>parseFloat(e.split(", ")[t]),JP=(e,t)=>(n,{transform:r})=>{if(r==="none"||!r)return 0;const i=r.match(/^matrix3d\((.+)\)$/);if(i)return ZP(i[1],t);{const o=r.match(/^matrix\((.+)\)$/);return o?ZP(o[1],e):0}},Ebe=new Set(["x","y","z"]),Pbe=$h.filter(e=>!Ebe.has(e));function Abe(e){const t=[];return Pbe.forEach(n=>{const r=e.getValue(n);r!==void 0&&(t.push([n,r.get()]),r.set(n.startsWith("scale")?1:0))}),t.length&&e.render(),t}const dc={width:({x:e},{paddingLeft:t="0",paddingRight:n="0"})=>e.max-e.min-parseFloat(t)-parseFloat(n),height:({y:e},{paddingTop:t="0",paddingBottom:n="0"})=>e.max-e.min-parseFloat(t)-parseFloat(n),top:(e,{top:t})=>parseFloat(t),left:(e,{left:t})=>parseFloat(t),bottom:({y:e},{top:t})=>parseFloat(t)+(e.max-e.min),right:({x:e},{left:t})=>parseFloat(t)+(e.max-e.min),x:JP(4,13),y:JP(5,14)};dc.translateX=dc.x;dc.translateY=dc.y;const kbe=(e,t,n)=>{const r=t.measureViewportBox(),i=t.current,o=getComputedStyle(i),{display:s}=o,a={};s==="none"&&t.setStaticValue("display",e.display||"block"),n.forEach(u=>{a[u]=dc[u](r,o)}),t.render();const l=t.measureViewportBox();return n.forEach(u=>{const c=t.getValue(u);c&&c.jump(a[u]),e[u]=dc[u](l,o)}),e},Rbe=(e,t,n={},r={})=>{t={...t},r={...r};const i=Object.keys(t).filter(NL);let o=[],s=!1;const a=[];if(i.forEach(l=>{const u=e.getValue(l);if(!e.hasValue(l))return;let c=n[l],d=id(c);const f=t[l];let h;if(ly(f)){const p=f.length,m=f[0]===null?1:0;c=f[m],d=id(c);for(let S=m;S=0?window.pageYOffset:null,u=kbe(t,e,a);return o.length&&o.forEach(([c,d])=>{e.getValue(c).set(d)}),e.render(),r1&&l!==null&&window.scrollTo({top:l}),{target:u,transitionEnd:r}}else return{target:t,transitionEnd:r}};function Obe(e,t,n,r){return Tbe(t)?Rbe(e,t,n,r):{target:t,transitionEnd:r}}const Mbe=(e,t,n,r)=>{const i=xbe(e,t,r);return t=i.target,r=i.transitionEnd,Obe(e,t,n,r)},W2={current:null},DL={current:!1};function Ibe(){if(DL.current=!0,!!r1)if(window.matchMedia){const e=window.matchMedia("(prefers-reduced-motion)"),t=()=>W2.current=e.matches;e.addListener(t),t()}else W2.current=!1}function Nbe(e,t,n){const{willChange:r}=t;for(const i in t){const o=t[i],s=n[i];if(_r(o))e.addValue(i,o),fy(r)&&r.add(i);else if(_r(s))e.addValue(i,cc(o,{owner:e})),fy(r)&&r.remove(i);else if(s!==o)if(e.hasValue(i)){const a=e.getValue(i);!a.hasAnimated&&a.set(o)}else{const a=e.getStaticValue(i);e.addValue(i,cc(a!==void 0?a:o,{owner:e}))}}for(const i in n)t[i]===void 0&&e.removeValue(i);return t}const e8=new WeakMap,LL=Object.keys(Hf),Dbe=LL.length,t8=["AnimationStart","AnimationComplete","Update","BeforeLayoutMeasure","LayoutMeasure","LayoutAnimationStart","LayoutAnimationComplete"],Lbe=HC.length;class $be{constructor({parent:t,props:n,presenceContext:r,reducedMotionConfig:i,visualState:o},s={}){this.current=null,this.children=new Set,this.isVariantNode=!1,this.isControllingVariants=!1,this.shouldReduceMotion=null,this.values=new Map,this.features={},this.valueSubscriptions=new Map,this.prevMotionValues={},this.events={},this.propEventSubscriptions={},this.notifyUpdate=()=>this.notify("Update",this.latestValues),this.render=()=>{this.current&&(this.triggerBuild(),this.renderInstance(this.current,this.renderState,this.props.style,this.projection))},this.scheduleRender=()=>St.render(this.render,!1,!0);const{latestValues:a,renderState:l}=o;this.latestValues=a,this.baseTarget={...a},this.initialValues=n.initial?{...a}:{},this.renderState=l,this.parent=t,this.props=n,this.presenceContext=r,this.depth=t?t.depth+1:0,this.reducedMotionConfig=i,this.options=s,this.isControllingVariants=o1(n),this.isVariantNode=_D(n),this.isVariantNode&&(this.variantChildren=new Set),this.manuallyAnimateOnMount=!!(t&&t.current);const{willChange:u,...c}=this.scrapeMotionValuesFromProps(n,{});for(const d in c){const f=c[d];a[d]!==void 0&&_r(f)&&(f.set(a[d],!1),fy(u)&&u.add(d))}}scrapeMotionValuesFromProps(t,n){return{}}mount(t){this.current=t,e8.set(t,this),this.projection&&!this.projection.instance&&this.projection.mount(t),this.parent&&this.isVariantNode&&!this.isControllingVariants&&(this.removeFromVariantTree=this.parent.addVariantChild(this)),this.values.forEach((n,r)=>this.bindToMotionValue(r,n)),DL.current||Ibe(),this.shouldReduceMotion=this.reducedMotionConfig==="never"?!1:this.reducedMotionConfig==="always"?!0:W2.current,this.parent&&this.parent.children.add(this),this.update(this.props,this.presenceContext)}unmount(){e8.delete(this.current),this.projection&&this.projection.unmount(),Uo(this.notifyUpdate),Uo(this.render),this.valueSubscriptions.forEach(t=>t()),this.removeFromVariantTree&&this.removeFromVariantTree(),this.parent&&this.parent.children.delete(this);for(const t in this.events)this.events[t].clear();for(const t in this.features)this.features[t].unmount();this.current=null}bindToMotionValue(t,n){const r=El.has(t),i=n.on("change",s=>{this.latestValues[t]=s,this.props.onUpdate&&St.update(this.notifyUpdate,!1,!0),r&&this.projection&&(this.projection.isTransformDirty=!0)}),o=n.on("renderRequest",this.scheduleRender);this.valueSubscriptions.set(t,()=>{i(),o()})}sortNodePosition(t){return!this.current||!this.sortInstanceNodePosition||this.type!==t.type?0:this.sortInstanceNodePosition(this.current,t.current)}loadFeatures({children:t,...n},r,i,o){let s,a;for(let l=0;lthis.scheduleRender(),animationType:typeof u=="string"?u:"both",initialPromotionConfig:o,layoutScroll:f,layoutRoot:h})}return a}updateFeatures(){for(const t in this.features){const n=this.features[t];n.isMounted?n.update():(n.mount(),n.isMounted=!0)}}triggerBuild(){this.build(this.renderState,this.latestValues,this.options,this.props)}measureViewportBox(){return this.current?this.measureInstanceViewportBox(this.current,this.props):qt()}getStaticValue(t){return this.latestValues[t]}setStaticValue(t,n){this.latestValues[t]=n}makeTargetAnimatable(t,n=!0){return this.makeTargetAnimatableFromInstance(t,this.props,n)}update(t,n){(t.transformTemplate||this.props.transformTemplate)&&this.scheduleRender(),this.prevProps=this.props,this.props=t,this.prevPresenceContext=this.presenceContext,this.presenceContext=n;for(let r=0;rn.variantChildren.delete(t)}addValue(t,n){n!==this.values.get(t)&&(this.removeValue(t),this.bindToMotionValue(t,n)),this.values.set(t,n),this.latestValues[t]=n.get()}removeValue(t){this.values.delete(t);const n=this.valueSubscriptions.get(t);n&&(n(),this.valueSubscriptions.delete(t)),delete this.latestValues[t],this.removeValueFromRenderState(t,this.renderState)}hasValue(t){return this.values.has(t)}getValue(t,n){if(this.props.values&&this.props.values[t])return this.props.values[t];let r=this.values.get(t);return r===void 0&&n!==void 0&&(r=cc(n,{owner:this}),this.addValue(t,r)),r}readValue(t){var n;return this.latestValues[t]!==void 0||!this.current?this.latestValues[t]:(n=this.getBaseTargetFromProps(this.props,t))!==null&&n!==void 0?n:this.readValueFromInstance(this.current,t,this.options)}setBaseTarget(t,n){this.baseTarget[t]=n}getBaseTarget(t){var n;const{initial:r}=this.props,i=typeof r=="string"||typeof r=="object"?(n=e3(this.props,r))===null||n===void 0?void 0:n[t]:void 0;if(r&&i!==void 0)return i;const o=this.getBaseTargetFromProps(this.props,t);return o!==void 0&&!_r(o)?o:this.initialValues[t]!==void 0&&i===void 0?void 0:this.baseTarget[t]}on(t,n){return this.events[t]||(this.events[t]=new u3),this.events[t].add(n)}notify(t,...n){this.events[t]&&this.events[t].notify(...n)}}class $L extends $be{sortInstanceNodePosition(t,n){return t.compareDocumentPosition(n)&2?1:-1}getBaseTargetFromProps(t,n){return t.style?t.style[n]:void 0}removeValueFromRenderState(t,{vars:n,style:r}){delete n[t],delete r[t]}makeTargetAnimatableFromInstance({transition:t,transitionEnd:n,...r},{transformValues:i},o){let s=n1e(r,t||{},this);if(i&&(n&&(n=i(n)),r&&(r=i(r)),s&&(s=i(s))),o){e1e(this,r,s);const a=Mbe(this,r,s,n);n=a.transitionEnd,r=a.target}return{transition:t,transitionEnd:n,...r}}}function Fbe(e){return window.getComputedStyle(e)}class Bbe extends $L{readValueFromInstance(t,n){if(El.has(n)){const r=o3(n);return r&&r.default||0}else{const r=Fbe(t),i=(TD(n)?r.getPropertyValue(n):r[n])||0;return typeof i=="string"?i.trim():i}}measureInstanceViewportBox(t,{transformPagePoint:n}){return EL(t,n)}build(t,n,r,i){KC(t,n,r,i.transformTemplate)}scrapeMotionValuesFromProps(t,n){return JC(t,n)}handleChildMotionValue(){this.childSubscription&&(this.childSubscription(),delete this.childSubscription);const{children:t}=this.props;_r(t)&&(this.childSubscription=t.on("change",n=>{this.current&&(this.current.textContent=`${n}`)}))}renderInstance(t,n,r,i){OD(t,n,r,i)}}class jbe extends $L{constructor(){super(...arguments),this.isSVGTag=!1}getBaseTargetFromProps(t,n){return t[n]}readValueFromInstance(t,n){if(El.has(n)){const r=o3(n);return r&&r.default||0}return n=MD.has(n)?n:ZC(n),t.getAttribute(n)}measureInstanceViewportBox(){return qt()}scrapeMotionValuesFromProps(t,n){return ND(t,n)}build(t,n,r,i){YC(t,n,r,this.isSVGTag,i.transformTemplate)}renderInstance(t,n,r,i){ID(t,n,r,i)}mount(t){this.isSVGTag=QC(t.tagName),super.mount(t)}}const Vbe=(e,t)=>WC(e)?new jbe(t,{enableHardwareAcceleration:!1}):new Bbe(t,{enableHardwareAcceleration:!0}),zbe={layout:{ProjectionNode:IL,MeasureLayout:PL}},Ube={...m1e,...$0e,...Sbe,...zbe},Gbe=qye((e,t)=>_0e(e,t,Ube,Vbe));function FL(){const e=k.useRef(!1);return oy(()=>(e.current=!0,()=>{e.current=!1}),[]),e}function Hbe(){const e=FL(),[t,n]=k.useState(0),r=k.useCallback(()=>{e.current&&n(t+1)},[t]);return[k.useCallback(()=>St.postRender(r),[r]),t]}class qbe extends k.Component{getSnapshotBeforeUpdate(t){const n=this.props.childRef.current;if(n&&t.isPresent&&!this.props.isPresent){const r=this.props.sizeRef.current;r.height=n.offsetHeight||0,r.width=n.offsetWidth||0,r.top=n.offsetTop,r.left=n.offsetLeft}return null}componentDidUpdate(){}render(){return this.props.children}}function Wbe({children:e,isPresent:t}){const n=k.useId(),r=k.useRef(null),i=k.useRef({width:0,height:0,top:0,left:0});return k.useInsertionEffect(()=>{const{width:o,height:s,top:a,left:l}=i.current;if(t||!r.current||!o||!s)return;r.current.dataset.motionPopId=n;const u=document.createElement("style");return document.head.appendChild(u),u.sheet&&u.sheet.insertRule(` - [data-motion-pop-id="${n}"] { - position: absolute !important; - width: ${o}px !important; - height: ${s}px !important; - top: ${a}px !important; - left: ${l}px !important; - } - `),()=>{document.head.removeChild(u)}},[t]),k.createElement(qbe,{isPresent:t,childRef:r,sizeRef:i},k.cloneElement(e,{ref:r}))}const yS=({children:e,initial:t,isPresent:n,onExitComplete:r,custom:i,presenceAffectsLayout:o,mode:s})=>{const a=DD(Kbe),l=k.useId(),u=k.useMemo(()=>({id:l,initial:t,isPresent:n,custom:i,onExitComplete:c=>{a.set(c,!0);for(const d of a.values())if(!d)return;r&&r()},register:c=>(a.set(c,!1),()=>a.delete(c))}),o?void 0:[n]);return k.useMemo(()=>{a.forEach((c,d)=>a.set(d,!1))},[n]),k.useEffect(()=>{!n&&!a.size&&r&&r()},[n]),s==="popLayout"&&(e=k.createElement(Wbe,{isPresent:n},e)),k.createElement(Lh.Provider,{value:u},e)};function Kbe(){return new Map}function Xbe(e){return k.useEffect(()=>()=>e(),[])}const Zl=e=>e.key||"";function Ybe(e,t){e.forEach(n=>{const r=Zl(n);t.set(r,n)})}function Qbe(e){const t=[];return k.Children.forEach(e,n=>{k.isValidElement(n)&&t.push(n)}),t}const Zbe=({children:e,custom:t,initial:n=!0,onExitComplete:r,exitBeforeEnter:i,presenceAffectsLayout:o=!0,mode:s="sync"})=>{const a=k.useContext(qC).forceRender||Hbe()[0],l=FL(),u=Qbe(e);let c=u;const d=k.useRef(new Map).current,f=k.useRef(c),h=k.useRef(new Map).current,p=k.useRef(!0);if(oy(()=>{p.current=!1,Ybe(u,h),f.current=c}),Xbe(()=>{p.current=!0,h.clear(),d.clear()}),p.current)return k.createElement(k.Fragment,null,c.map(v=>k.createElement(yS,{key:Zl(v),isPresent:!0,initial:n?void 0:!1,presenceAffectsLayout:o,mode:s},v)));c=[...c];const m=f.current.map(Zl),S=u.map(Zl),y=m.length;for(let v=0;v{if(S.indexOf(g)!==-1)return;const b=h.get(g);if(!b)return;const _=m.indexOf(g);let w=v;if(!w){const x=()=>{h.delete(g),d.delete(g);const T=f.current.findIndex(P=>P.key===g);if(f.current.splice(T,1),!d.size){if(f.current=u,l.current===!1)return;a(),r&&r()}};w=k.createElement(yS,{key:Zl(b),isPresent:!1,onExitComplete:x,custom:t,presenceAffectsLayout:o,mode:s},b),d.set(g,w)}c.splice(_,0,w)}),c=c.map(v=>{const g=v.key;return d.has(g)?v:k.createElement(yS,{key:Zl(v),isPresent:!0,presenceAffectsLayout:o,mode:s},v)}),k.createElement(k.Fragment,null,d.size?c:c.map(v=>k.cloneElement(v)))};var Jbe=Bge({"0%":{transform:"rotate(0deg)"},"100%":{transform:"rotate(360deg)"}}),BL=Tl((e,t)=>{const n=vD("Spinner",e),{label:r="Loading...",thickness:i="2px",speed:o="0.45s",emptyColor:s="transparent",className:a,...l}=pD(e),u=aD("chakra-spinner",a),c={display:"inline-block",borderColor:"currentColor",borderStyle:"solid",borderRadius:"99999px",borderWidth:i,borderBottomColor:s,borderLeftColor:s,animation:`${Jbe} ${o} linear infinite`,...n};return K.jsx(al.div,{ref:t,__css:c,className:u,...l,children:r&&K.jsx(al.span,{srOnly:!0,children:r})})});BL.displayName="Spinner";var K2=Tl(function(t,n){const{htmlWidth:r,htmlHeight:i,alt:o,...s}=t;return K.jsx("img",{width:r,height:i,ref:n,alt:o,...s})});K2.displayName="NativeImage";function eSe(e){const{loading:t,src:n,srcSet:r,onLoad:i,onError:o,crossOrigin:s,sizes:a,ignoreFallback:l}=e,[u,c]=k.useState("pending");k.useEffect(()=>{c(n?"loading":"pending")},[n]);const d=k.useRef(),f=k.useCallback(()=>{if(!n)return;h();const p=new Image;p.src=n,s&&(p.crossOrigin=s),r&&(p.srcset=r),a&&(p.sizes=a),t&&(p.loading=t),p.onload=m=>{h(),c("loaded"),i==null||i(m)},p.onerror=m=>{h(),c("failed"),o==null||o(m)},d.current=p},[n,s,r,a,i,o,t]),h=()=>{d.current&&(d.current.onload=null,d.current.onerror=null,d.current=null)};return jge(()=>{if(!l)return u==="loading"&&f(),()=>{h()}},[u,f,l]),l?"loaded":u}var tSe=(e,t)=>e!=="loaded"&&t==="beforeLoadOrError"||e==="failed"&&t==="onError";function nSe(e,t=[]){const n=Object.assign({},e);for(const r of t)r in n&&delete n[r];return n}var c3=Tl(function(t,n){const{fallbackSrc:r,fallback:i,src:o,srcSet:s,align:a,fit:l,loading:u,ignoreFallback:c,crossOrigin:d,fallbackStrategy:f="beforeLoadOrError",referrerPolicy:h,...p}=t,m=r!==void 0||i!==void 0,S=u!=null||c||!m,y=eSe({...t,crossOrigin:d,ignoreFallback:S}),v=tSe(y,f),g={ref:n,objectFit:l,objectPosition:a,...S?p:nSe(p,["onError","onLoad"])};return v?i||K.jsx(al.img,{as:K2,className:"chakra-image__placeholder",src:r,...g}):K.jsx(al.img,{as:K2,src:o,srcSet:s,crossOrigin:d,loading:u,referrerPolicy:h,className:"chakra-image",...g})});c3.displayName="Image";var rSe=cye?k.useLayoutEffect:k.useEffect;function n8(e,t=[]){const n=k.useRef(e);return rSe(()=>{n.current=e}),k.useCallback((...r)=>{var i;return(i=n.current)==null?void 0:i.call(n,...r)},t)}function iSe(e,t){const n=k.useId();return k.useMemo(()=>e||[t,n].filter(Boolean).join("-"),[e,t,n])}function oSe(e,t){const n=e!==void 0;return[n,n&&typeof e<"u"?e:t]}function sSe(e={}){const{onClose:t,onOpen:n,isOpen:r,id:i}=e,o=n8(n),s=n8(t),[a,l]=k.useState(e.defaultIsOpen||!1),[u,c]=oSe(r,a),d=iSe(i,"disclosure"),f=k.useCallback(()=>{u||l(!1),s==null||s()},[u,s]),h=k.useCallback(()=>{u||l(!0),o==null||o()},[u,o]),p=k.useCallback(()=>{(c?f:h)()},[c,h,f]);return{isOpen:!!c,onOpen:h,onClose:f,onToggle:p,isControlled:u,getButtonProps:(m={})=>({...m,"aria-expanded":c,"aria-controls":d,onClick:yye(m.onClick,p)}),getDisclosureProps:(m={})=>({...m,hidden:!c,id:d})}}var X2=Tl(function(t,n){const r=vD("Heading",t),{className:i,...o}=pD(t);return K.jsx(al.h2,{ref:n,className:aD("chakra-heading",t.className),...o,__css:r})});X2.displayName="Heading";var d3=al("div");d3.displayName="Box";var jL=Tl(function(t,n){const{size:r,centerContent:i=!0,...o}=t,s=i?{display:"flex",alignItems:"center",justifyContent:"center"}:{};return K.jsx(d3,{ref:n,boxSize:r,__css:{...s,flexShrink:0,flexGrow:0},...o})});jL.displayName="Square";var aSe=Tl(function(t,n){const{size:r,...i}=t;return K.jsx(jL,{size:r,ref:n,borderRadius:"9999px",...i})});aSe.displayName="Circle";var f3=Tl(function(t,n){const{direction:r,align:i,justify:o,wrap:s,basis:a,grow:l,shrink:u,...c}=t,d={display:"flex",flexDirection:r,alignItems:i,justifyContent:o,flexWrap:s,flexBasis:a,flexGrow:l,flexShrink:u};return K.jsx(al.div,{ref:n,__css:d,...c})});f3.displayName="Flex";const lSe=""+new URL("logo-13003d72.png",import.meta.url).href,uSe=()=>K.jsxs(f3,{position:"relative",width:"100vw",height:"100vh",alignItems:"center",justifyContent:"center",bg:"#151519",children:[K.jsx(c3,{src:lSe,w:"8rem",h:"8rem"}),K.jsx(BL,{label:"Loading",color:"grey",position:"absolute",size:"sm",width:"24px !important",height:"24px !important",right:"1.5rem",bottom:"1.5rem"})]}),cSe=k.memo(uSe);function Y2(e){"@babel/helpers - typeof";return Y2=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Y2(e)}var VL=[],dSe=VL.forEach,fSe=VL.slice;function Q2(e){return dSe.call(fSe.call(arguments,1),function(t){if(t)for(var n in t)e[n]===void 0&&(e[n]=t[n])}),e}function zL(){return typeof XMLHttpRequest=="function"||(typeof XMLHttpRequest>"u"?"undefined":Y2(XMLHttpRequest))==="object"}function hSe(e){return!!e&&typeof e.then=="function"}function pSe(e){return hSe(e)?e:Promise.resolve(e)}function gSe(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var Z2={exports:{}},Wp={exports:{}},r8;function mSe(){return r8||(r8=1,function(e,t){var n=typeof self<"u"?self:Ee,r=function(){function o(){this.fetch=!1,this.DOMException=n.DOMException}return o.prototype=n,new o}();(function(o){(function(s){var a={searchParams:"URLSearchParams"in o,iterable:"Symbol"in o&&"iterator"in Symbol,blob:"FileReader"in o&&"Blob"in o&&function(){try{return new Blob,!0}catch{return!1}}(),formData:"FormData"in o,arrayBuffer:"ArrayBuffer"in o};function l(C){return C&&DataView.prototype.isPrototypeOf(C)}if(a.arrayBuffer)var u=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],c=ArrayBuffer.isView||function(C){return C&&u.indexOf(Object.prototype.toString.call(C))>-1};function d(C){if(typeof C!="string"&&(C=String(C)),/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(C))throw new TypeError("Invalid character in header field name");return C.toLowerCase()}function f(C){return typeof C!="string"&&(C=String(C)),C}function h(C){var R={next:function(){var M=C.shift();return{done:M===void 0,value:M}}};return a.iterable&&(R[Symbol.iterator]=function(){return R}),R}function p(C){this.map={},C instanceof p?C.forEach(function(R,M){this.append(M,R)},this):Array.isArray(C)?C.forEach(function(R){this.append(R[0],R[1])},this):C&&Object.getOwnPropertyNames(C).forEach(function(R){this.append(R,C[R])},this)}p.prototype.append=function(C,R){C=d(C),R=f(R);var M=this.map[C];this.map[C]=M?M+", "+R:R},p.prototype.delete=function(C){delete this.map[d(C)]},p.prototype.get=function(C){return C=d(C),this.has(C)?this.map[C]:null},p.prototype.has=function(C){return this.map.hasOwnProperty(d(C))},p.prototype.set=function(C,R){this.map[d(C)]=f(R)},p.prototype.forEach=function(C,R){for(var M in this.map)this.map.hasOwnProperty(M)&&C.call(R,this.map[M],M,this)},p.prototype.keys=function(){var C=[];return this.forEach(function(R,M){C.push(M)}),h(C)},p.prototype.values=function(){var C=[];return this.forEach(function(R){C.push(R)}),h(C)},p.prototype.entries=function(){var C=[];return this.forEach(function(R,M){C.push([M,R])}),h(C)},a.iterable&&(p.prototype[Symbol.iterator]=p.prototype.entries);function m(C){if(C.bodyUsed)return Promise.reject(new TypeError("Already read"));C.bodyUsed=!0}function S(C){return new Promise(function(R,M){C.onload=function(){R(C.result)},C.onerror=function(){M(C.error)}})}function y(C){var R=new FileReader,M=S(R);return R.readAsArrayBuffer(C),M}function v(C){var R=new FileReader,M=S(R);return R.readAsText(C),M}function g(C){for(var R=new Uint8Array(C),M=new Array(R.length),N=0;N-1?R:C}function T(C,R){R=R||{};var M=R.body;if(C instanceof T){if(C.bodyUsed)throw new TypeError("Already read");this.url=C.url,this.credentials=C.credentials,R.headers||(this.headers=new p(C.headers)),this.method=C.method,this.mode=C.mode,this.signal=C.signal,!M&&C._bodyInit!=null&&(M=C._bodyInit,C.bodyUsed=!0)}else this.url=String(C);if(this.credentials=R.credentials||this.credentials||"same-origin",(R.headers||!this.headers)&&(this.headers=new p(R.headers)),this.method=x(R.method||this.method||"GET"),this.mode=R.mode||this.mode||null,this.signal=R.signal||this.signal,this.referrer=null,(this.method==="GET"||this.method==="HEAD")&&M)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(M)}T.prototype.clone=function(){return new T(this,{body:this._bodyInit})};function P(C){var R=new FormData;return C.trim().split("&").forEach(function(M){if(M){var N=M.split("="),O=N.shift().replace(/\+/g," "),D=N.join("=").replace(/\+/g," ");R.append(decodeURIComponent(O),decodeURIComponent(D))}}),R}function E(C){var R=new p,M=C.replace(/\r?\n[\t ]+/g," ");return M.split(/\r?\n/).forEach(function(N){var O=N.split(":"),D=O.shift().trim();if(D){var L=O.join(":").trim();R.append(D,L)}}),R}_.call(T.prototype);function A(C,R){R||(R={}),this.type="default",this.status=R.status===void 0?200:R.status,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in R?R.statusText:"OK",this.headers=new p(R.headers),this.url=R.url||"",this._initBody(C)}_.call(A.prototype),A.prototype.clone=function(){return new A(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new p(this.headers),url:this.url})},A.error=function(){var C=new A(null,{status:0,statusText:""});return C.type="error",C};var $=[301,302,303,307,308];A.redirect=function(C,R){if($.indexOf(R)===-1)throw new RangeError("Invalid status code");return new A(null,{status:R,headers:{location:C}})},s.DOMException=o.DOMException;try{new s.DOMException}catch{s.DOMException=function(R,M){this.message=R,this.name=M;var N=Error(R);this.stack=N.stack},s.DOMException.prototype=Object.create(Error.prototype),s.DOMException.prototype.constructor=s.DOMException}function I(C,R){return new Promise(function(M,N){var O=new T(C,R);if(O.signal&&O.signal.aborted)return N(new s.DOMException("Aborted","AbortError"));var D=new XMLHttpRequest;function L(){D.abort()}D.onload=function(){var j={status:D.status,statusText:D.statusText,headers:E(D.getAllResponseHeaders()||"")};j.url="responseURL"in D?D.responseURL:j.headers.get("X-Request-URL");var U="response"in D?D.response:D.responseText;M(new A(U,j))},D.onerror=function(){N(new TypeError("Network request failed"))},D.ontimeout=function(){N(new TypeError("Network request failed"))},D.onabort=function(){N(new s.DOMException("Aborted","AbortError"))},D.open(O.method,O.url,!0),O.credentials==="include"?D.withCredentials=!0:O.credentials==="omit"&&(D.withCredentials=!1),"responseType"in D&&a.blob&&(D.responseType="blob"),O.headers.forEach(function(j,U){D.setRequestHeader(U,j)}),O.signal&&(O.signal.addEventListener("abort",L),D.onreadystatechange=function(){D.readyState===4&&O.signal.removeEventListener("abort",L)}),D.send(typeof O._bodyInit>"u"?null:O._bodyInit)})}return I.polyfill=!0,o.fetch||(o.fetch=I,o.Headers=p,o.Request=T,o.Response=A),s.Headers=p,s.Request=T,s.Response=A,s.fetch=I,Object.defineProperty(s,"__esModule",{value:!0}),s})({})})(r),r.fetch.ponyfill=!0,delete r.fetch.polyfill;var i=r;t=i.fetch,t.default=i.fetch,t.fetch=i.fetch,t.Headers=i.Headers,t.Request=i.Request,t.Response=i.Response,e.exports=t}(Wp,Wp.exports)),Wp.exports}(function(e,t){var n;if(typeof fetch=="function"&&(typeof Ee<"u"&&Ee.fetch?n=Ee.fetch:typeof window<"u"&&window.fetch?n=window.fetch:n=fetch),typeof gSe<"u"&&(typeof window>"u"||typeof window.document>"u")){var r=n||mSe();r.default&&(r=r.default),t.default=r,e.exports=t.default}})(Z2,Z2.exports);var UL=Z2.exports;const GL=ll(UL),i8=M8({__proto__:null,default:GL},[UL]);function py(e){"@babel/helpers - typeof";return py=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},py(e)}var Do;typeof fetch=="function"&&(typeof global<"u"&&global.fetch?Do=global.fetch:typeof window<"u"&&window.fetch?Do=window.fetch:Do=fetch);var Wf;zL()&&(typeof global<"u"&&global.XMLHttpRequest?Wf=global.XMLHttpRequest:typeof window<"u"&&window.XMLHttpRequest&&(Wf=window.XMLHttpRequest));var gy;typeof ActiveXObject=="function"&&(typeof global<"u"&&global.ActiveXObject?gy=global.ActiveXObject:typeof window<"u"&&window.ActiveXObject&&(gy=window.ActiveXObject));!Do&&i8&&!Wf&&!gy&&(Do=GL||i8);typeof Do!="function"&&(Do=void 0);var J2=function(t,n){if(n&&py(n)==="object"){var r="";for(var i in n)r+="&"+encodeURIComponent(i)+"="+encodeURIComponent(n[i]);if(!r)return t;t=t+(t.indexOf("?")!==-1?"&":"?")+r.slice(1)}return t},o8=function(t,n,r){Do(t,n).then(function(i){if(!i.ok)return r(i.statusText||"Error",{status:i.status});i.text().then(function(o){r(null,{status:i.status,data:o})}).catch(r)}).catch(r)},s8=!1,ySe=function(t,n,r,i){t.queryStringParams&&(n=J2(n,t.queryStringParams));var o=Q2({},typeof t.customHeaders=="function"?t.customHeaders():t.customHeaders);r&&(o["Content-Type"]="application/json");var s=typeof t.requestOptions=="function"?t.requestOptions(r):t.requestOptions,a=Q2({method:r?"POST":"GET",body:r?t.stringify(r):void 0,headers:o},s8?{}:s);try{o8(n,a,i)}catch(l){if(!s||Object.keys(s).length===0||!l.message||l.message.indexOf("not implemented")<0)return i(l);try{Object.keys(s).forEach(function(u){delete a[u]}),o8(n,a,i),s8=!0}catch(u){i(u)}}},vSe=function(t,n,r,i){r&&py(r)==="object"&&(r=J2("",r).slice(1)),t.queryStringParams&&(n=J2(n,t.queryStringParams));try{var o;Wf?o=new Wf:o=new gy("MSXML2.XMLHTTP.3.0"),o.open(r?"POST":"GET",n,1),t.crossDomain||o.setRequestHeader("X-Requested-With","XMLHttpRequest"),o.withCredentials=!!t.withCredentials,r&&o.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),o.overrideMimeType&&o.overrideMimeType("application/json");var s=t.customHeaders;if(s=typeof s=="function"?s():s,s)for(var a in s)o.setRequestHeader(a,s[a]);o.onreadystatechange=function(){o.readyState>3&&i(o.status>=400?o.statusText:null,{status:o.status,data:o.responseText})},o.send(r)}catch(l){console&&console.log(l)}},bSe=function(t,n,r,i){if(typeof r=="function"&&(i=r,r=void 0),i=i||function(){},Do&&n.indexOf("file:")!==0)return ySe(t,n,r,i);if(zL()||typeof ActiveXObject=="function")return vSe(t,n,r,i);i(new Error("No fetch and no xhr implementation found!"))};function Kf(e){"@babel/helpers - typeof";return Kf=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Kf(e)}function SSe(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a8(e,t){for(var n=0;n1&&arguments[1]!==void 0?arguments[1]:{},r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};SSe(this,e),this.services=t,this.options=n,this.allOptions=r,this.type="backend",this.init(t,n,r)}return _Se(e,[{key:"init",value:function(n){var r=this,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.services=n,this.options=Q2(i,this.options||{},CSe()),this.allOptions=o,this.services&&this.options.reloadInterval&&setInterval(function(){return r.reload()},this.options.reloadInterval)}},{key:"readMulti",value:function(n,r,i){this._readAny(n,n,r,r,i)}},{key:"read",value:function(n,r,i){this._readAny([n],n,[r],r,i)}},{key:"_readAny",value:function(n,r,i,o,s){var a=this,l=this.options.loadPath;typeof this.options.loadPath=="function"&&(l=this.options.loadPath(n,i)),l=pSe(l),l.then(function(u){if(!u)return s(null,{});var c=a.services.interpolator.interpolate(u,{lng:n.join("+"),ns:i.join("+")});a.loadUrl(c,s,r,o)})}},{key:"loadUrl",value:function(n,r,i,o){var s=this,a=typeof i=="string"?[i]:i,l=typeof o=="string"?[o]:o,u=this.options.parseLoadPayload(a,l);this.options.request(this.options,n,u,function(c,d){if(d&&(d.status>=500&&d.status<600||!d.status))return r("failed loading "+n+"; status code: "+d.status,!0);if(d&&d.status>=400&&d.status<500)return r("failed loading "+n+"; status code: "+d.status,!1);if(!d&&c&&c.message&&c.message.indexOf("Failed to fetch")>-1)return r("failed loading "+n+": "+c.message,!0);if(c)return r(c,!1);var f,h;try{typeof d.data=="string"?f=s.options.parse(d.data,i,o):f=d.data}catch{h="failed parsing "+n+" to json"}if(h)return r(h,!1);r(null,f)})}},{key:"create",value:function(n,r,i,o,s){var a=this;if(this.options.addPath){typeof n=="string"&&(n=[n]);var l=this.options.parsePayload(r,i,o),u=0,c=[],d=[];n.forEach(function(f){var h=a.options.addPath;typeof a.options.addPath=="function"&&(h=a.options.addPath(f,r));var p=a.services.interpolator.interpolate(h,{lng:f,ns:r});a.options.request(a.options,p,l,function(m,S){u+=1,c.push(m),d.push(S),u===n.length&&typeof s=="function"&&s(c,d)})})}}},{key:"reload",value:function(){var n=this,r=this.services,i=r.backendConnector,o=r.languageUtils,s=r.logger,a=i.language;if(!(a&&a.toLowerCase()==="cimode")){var l=[],u=function(d){var f=o.toResolveHierarchy(d);f.forEach(function(h){l.indexOf(h)<0&&l.push(h)})};u(a),this.allOptions.preload&&this.allOptions.preload.forEach(function(c){return u(c)}),l.forEach(function(c){n.allOptions.ns.forEach(function(d){i.read(c,d,"read",null,null,function(f,h){f&&s.warn("loading namespace ".concat(d," for language ").concat(c," failed"),f),!f&&h&&s.log("loaded namespace ".concat(d," for language ").concat(c),h),i.loaded("".concat(c,"|").concat(d),f,h)})})})}}}]),e}();qL.type="backend";const TSe=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,ESe={"&":"&","&":"&","<":"<","<":"<",">":">",">":">","'":"'","'":"'",""":'"',""":'"'," ":" "," ":" ","©":"©","©":"©","®":"®","®":"®","…":"…","…":"…","/":"/","/":"/"},PSe=e=>ESe[e],ASe=e=>e.replace(TSe,PSe);let ew={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:ASe};function kSe(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};ew={...ew,...e}}function z4e(){return ew}let WL;function RSe(e){WL=e}function U4e(){return WL}const OSe={type:"3rdParty",init(e){kSe(e.options.react),RSe(e)}};zn.use(qL).use(OSe).init({fallbackLng:"en",debug:!1,backend:{loadPath:"/locales/{{lng}}.json"},interpolation:{escapeValue:!1},returnNull:!1});const MSe=e=>{const{socket:t,storeApi:n}=e,{dispatch:r,getState:i}=n;t.on("connect",()=>{fe("socketio").debug("Connected"),r(i7());const{sessionId:s}=i().system;s&&(t.emit("subscribe",{session:s}),r(zx({sessionId:s})))}),t.on("connect_error",o=>{o&&o.message&&o.data==="ERR_UNAUTHENTICATED"&&r(Ft(Ha({title:o.message,status:"error",duration:1e4})))}),t.on("disconnect",()=>{r(s7())}),t.on("invocation_started",o=>{r(d7({data:o}))}),t.on("generator_progress",o=>{r(y7({data:o}))}),t.on("invocation_error",o=>{r(p7({data:o}))}),t.on("invocation_complete",o=>{r(Ux({data:o}))}),t.on("graph_execution_state_complete",o=>{r(g7({data:o}))}),t.on("model_load_started",o=>{r(b7({data:o}))}),t.on("model_load_completed",o=>{r(S7({data:o}))}),t.on("session_retrieval_error",o=>{r(_7({data:o}))}),t.on("invocation_retrieval_error",o=>{r(x7({data:o}))})},ro=Object.create(null);ro.open="0";ro.close="1";ro.ping="2";ro.pong="3";ro.message="4";ro.upgrade="5";ro.noop="6";const kg=Object.create(null);Object.keys(ro).forEach(e=>{kg[ro[e]]=e});const ISe={type:"error",data:"parser error"},KL=typeof Blob=="function"||typeof Blob<"u"&&Object.prototype.toString.call(Blob)==="[object BlobConstructor]",XL=typeof ArrayBuffer=="function",YL=e=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(e):e&&e.buffer instanceof ArrayBuffer,h3=({type:e,data:t},n,r)=>KL&&t instanceof Blob?n?r(t):l8(t,r):XL&&(t instanceof ArrayBuffer||YL(t))?n?r(t):l8(new Blob([t]),r):r(ro[e]+(t||"")),l8=(e,t)=>{const n=new FileReader;return n.onload=function(){const r=n.result.split(",")[1];t("b"+(r||""))},n.readAsDataURL(e)};function u8(e){return e instanceof Uint8Array?e:e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}let vS;function NSe(e,t){if(KL&&e.data instanceof Blob)return e.data.arrayBuffer().then(u8).then(t);if(XL&&(e.data instanceof ArrayBuffer||YL(e.data)))return t(u8(e.data));h3(e,!1,n=>{vS||(vS=new TextEncoder),t(vS.encode(n))})}const c8="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",md=typeof Uint8Array>"u"?[]:new Uint8Array(256);for(let e=0;e{let t=e.length*.75,n=e.length,r,i=0,o,s,a,l;e[e.length-1]==="="&&(t--,e[e.length-2]==="="&&t--);const u=new ArrayBuffer(t),c=new Uint8Array(u);for(r=0;r>4,c[i++]=(s&15)<<4|a>>2,c[i++]=(a&3)<<6|l&63;return u},LSe=typeof ArrayBuffer=="function",p3=(e,t)=>{if(typeof e!="string")return{type:"message",data:QL(e,t)};const n=e.charAt(0);return n==="b"?{type:"message",data:$Se(e.substring(1),t)}:kg[n]?e.length>1?{type:kg[n],data:e.substring(1)}:{type:kg[n]}:ISe},$Se=(e,t)=>{if(LSe){const n=DSe(e);return QL(n,t)}else return{base64:!0,data:e}},QL=(e,t)=>{switch(t){case"blob":return e instanceof Blob?e:new Blob([e]);case"arraybuffer":default:return e instanceof ArrayBuffer?e:e.buffer}},ZL=String.fromCharCode(30),FSe=(e,t)=>{const n=e.length,r=new Array(n);let i=0;e.forEach((o,s)=>{h3(o,!1,a=>{r[s]=a,++i===n&&t(r.join(ZL))})})},BSe=(e,t)=>{const n=e.split(ZL),r=[];for(let i=0;i54;return p3(r?e:bS.decode(e),n)}const JL=4;function Qt(e){if(e)return VSe(e)}function VSe(e){for(var t in Qt.prototype)e[t]=Qt.prototype[t];return e}Qt.prototype.on=Qt.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this};Qt.prototype.once=function(e,t){function n(){this.off(e,n),t.apply(this,arguments)}return n.fn=t,this.on(e,n),this};Qt.prototype.off=Qt.prototype.removeListener=Qt.prototype.removeAllListeners=Qt.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},arguments.length==0)return this._callbacks={},this;var n=this._callbacks["$"+e];if(!n)return this;if(arguments.length==1)return delete this._callbacks["$"+e],this;for(var r,i=0;itypeof self<"u"?self:typeof window<"u"?window:Function("return this")())();function e$(e,...t){return t.reduce((n,r)=>(e.hasOwnProperty(r)&&(n[r]=e[r]),n),{})}const zSe=qr.setTimeout,USe=qr.clearTimeout;function u1(e,t){t.useNativeTimers?(e.setTimeoutFn=zSe.bind(qr),e.clearTimeoutFn=USe.bind(qr)):(e.setTimeoutFn=qr.setTimeout.bind(qr),e.clearTimeoutFn=qr.clearTimeout.bind(qr))}const GSe=1.33;function HSe(e){return typeof e=="string"?qSe(e):Math.ceil((e.byteLength||e.size)*GSe)}function qSe(e){let t=0,n=0;for(let r=0,i=e.length;r=57344?n+=3:(r++,n+=4);return n}function WSe(e){let t="";for(let n in e)e.hasOwnProperty(n)&&(t.length&&(t+="&"),t+=encodeURIComponent(n)+"="+encodeURIComponent(e[n]));return t}function KSe(e){let t={},n=e.split("&");for(let r=0,i=n.length;r0);return t}function n$(){const e=h8(+new Date);return e!==f8?(d8=0,f8=e):e+"."+h8(d8++)}for(;Kp{this.readyState="paused",t()};if(this.polling||!this.writable){let r=0;this.polling&&(r++,this.once("pollComplete",function(){--r||n()})),this.writable||(r++,this.once("drain",function(){--r||n()}))}else n()}poll(){this.polling=!0,this.doPoll(),this.emitReserved("poll")}onData(t){const n=r=>{if(this.readyState==="opening"&&r.type==="open"&&this.onOpen(),r.type==="close")return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(r)};BSe(t,this.socket.binaryType).forEach(n),this.readyState!=="closed"&&(this.polling=!1,this.emitReserved("pollComplete"),this.readyState==="open"&&this.poll())}doClose(){const t=()=>{this.write([{type:"close"}])};this.readyState==="open"?t():this.once("open",t)}write(t){this.writable=!1,FSe(t,n=>{this.doWrite(n,()=>{this.writable=!0,this.emitReserved("drain")})})}uri(){const t=this.opts.secure?"https":"http",n=this.query||{};return this.opts.timestampRequests!==!1&&(n[this.opts.timestampParam]=n$()),!this.supportsBinary&&!n.sid&&(n.b64=1),this.createUri(t,n)}request(t={}){return Object.assign(t,{xd:this.xd,cookieJar:this.cookieJar},this.opts),new Fu(this.uri(),t)}doWrite(t,n){const r=this.request({method:"POST",data:t});r.on("success",n),r.on("error",(i,o)=>{this.onError("xhr post error",i,o)})}doPoll(){const t=this.request();t.on("data",this.onData.bind(this)),t.on("error",(n,r)=>{this.onError("xhr poll error",n,r)}),this.pollXhr=t}}let Fu=class Rg extends Qt{constructor(t,n){super(),u1(this,n),this.opts=n,this.method=n.method||"GET",this.uri=t,this.data=n.data!==void 0?n.data:null,this.create()}create(){var t;const n=e$(this.opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");n.xdomain=!!this.opts.xd;const r=this.xhr=new i$(n);try{r.open(this.method,this.uri,!0);try{if(this.opts.extraHeaders){r.setDisableHeaderCheck&&r.setDisableHeaderCheck(!0);for(let i in this.opts.extraHeaders)this.opts.extraHeaders.hasOwnProperty(i)&&r.setRequestHeader(i,this.opts.extraHeaders[i])}}catch{}if(this.method==="POST")try{r.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch{}try{r.setRequestHeader("Accept","*/*")}catch{}(t=this.opts.cookieJar)===null||t===void 0||t.addCookies(r),"withCredentials"in r&&(r.withCredentials=this.opts.withCredentials),this.opts.requestTimeout&&(r.timeout=this.opts.requestTimeout),r.onreadystatechange=()=>{var i;r.readyState===3&&((i=this.opts.cookieJar)===null||i===void 0||i.parseCookies(r)),r.readyState===4&&(r.status===200||r.status===1223?this.onLoad():this.setTimeoutFn(()=>{this.onError(typeof r.status=="number"?r.status:0)},0))},r.send(this.data)}catch(i){this.setTimeoutFn(()=>{this.onError(i)},0);return}typeof document<"u"&&(this.index=Rg.requestsCount++,Rg.requests[this.index]=this)}onError(t){this.emitReserved("error",t,this.xhr),this.cleanup(!0)}cleanup(t){if(!(typeof this.xhr>"u"||this.xhr===null)){if(this.xhr.onreadystatechange=ZSe,t)try{this.xhr.abort()}catch{}typeof document<"u"&&delete Rg.requests[this.index],this.xhr=null}}onLoad(){const t=this.xhr.responseText;t!==null&&(this.emitReserved("data",t),this.emitReserved("success"),this.cleanup())}abort(){this.cleanup()}};Fu.requestsCount=0;Fu.requests={};if(typeof document<"u"){if(typeof attachEvent=="function")attachEvent("onunload",p8);else if(typeof addEventListener=="function"){const e="onpagehide"in qr?"pagehide":"unload";addEventListener(e,p8,!1)}}function p8(){for(let e in Fu.requests)Fu.requests.hasOwnProperty(e)&&Fu.requests[e].abort()}const m3=(()=>typeof Promise=="function"&&typeof Promise.resolve=="function"?t=>Promise.resolve().then(t):(t,n)=>n(t,0))(),Xp=qr.WebSocket||qr.MozWebSocket,g8=!0,t_e="arraybuffer",m8=typeof navigator<"u"&&typeof navigator.product=="string"&&navigator.product.toLowerCase()==="reactnative";class n_e extends g3{constructor(t){super(t),this.supportsBinary=!t.forceBase64}get name(){return"websocket"}doOpen(){if(!this.check())return;const t=this.uri(),n=this.opts.protocols,r=m8?{}:e$(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(r.headers=this.opts.extraHeaders);try{this.ws=g8&&!m8?n?new Xp(t,n):new Xp(t):new Xp(t,n,r)}catch(i){return this.emitReserved("error",i)}this.ws.binaryType=this.socket.binaryType||t_e,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=t=>this.onClose({description:"websocket connection closed",context:t}),this.ws.onmessage=t=>this.onData(t.data),this.ws.onerror=t=>this.onError("websocket error",t)}write(t){this.writable=!1;for(let n=0;n{const s={};try{g8&&this.ws.send(o)}catch{}i&&m3(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){typeof this.ws<"u"&&(this.ws.close(),this.ws=null)}uri(){const t=this.opts.secure?"wss":"ws",n=this.query||{};return this.opts.timestampRequests&&(n[this.opts.timestampParam]=n$()),this.supportsBinary||(n.b64=1),this.createUri(t,n)}check(){return!!Xp}}function r_e(e,t){return e.type==="message"&&typeof e.data!="string"&&t[0]>=48&&t[0]<=54}class i_e extends g3{get name(){return"webtransport"}doOpen(){typeof WebTransport=="function"&&(this.transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name]),this.transport.closed.then(()=>{this.onClose()}).catch(t=>{this.onError("webtransport error",t)}),this.transport.ready.then(()=>{this.transport.createBidirectionalStream().then(t=>{const n=t.readable.getReader();this.writer=t.writable.getWriter();let r;const i=()=>{n.read().then(({done:s,value:a})=>{s||(!r&&a.byteLength===1&&a[0]===54?r=!0:(this.onPacket(jSe(a,r,"arraybuffer")),r=!1),i())}).catch(s=>{})};i();const o=this.query.sid?`0{"sid":"${this.query.sid}"}`:"0";this.writer.write(new TextEncoder().encode(o)).then(()=>this.onOpen())})}))}write(t){this.writable=!1;for(let n=0;n{r_e(r,o)&&this.writer.write(Uint8Array.of(54)),this.writer.write(o).then(()=>{i&&m3(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})})}}doClose(){var t;(t=this.transport)===null||t===void 0||t.close()}}const o_e={websocket:n_e,webtransport:i_e,polling:e_e},s_e=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,a_e=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function nw(e){const t=e,n=e.indexOf("["),r=e.indexOf("]");n!=-1&&r!=-1&&(e=e.substring(0,n)+e.substring(n,r).replace(/:/g,";")+e.substring(r,e.length));let i=s_e.exec(e||""),o={},s=14;for(;s--;)o[a_e[s]]=i[s]||"";return n!=-1&&r!=-1&&(o.source=t,o.host=o.host.substring(1,o.host.length-1).replace(/;/g,":"),o.authority=o.authority.replace("[","").replace("]","").replace(/;/g,":"),o.ipv6uri=!0),o.pathNames=l_e(o,o.path),o.queryKey=u_e(o,o.query),o}function l_e(e,t){const n=/\/{2,9}/g,r=t.replace(n,"/").split("/");return(t.slice(0,1)=="/"||t.length===0)&&r.splice(0,1),t.slice(-1)=="/"&&r.splice(r.length-1,1),r}function u_e(e,t){const n={};return t.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(r,i,o){i&&(n[i]=o)}),n}let o$=class Jl extends Qt{constructor(t,n={}){super(),this.writeBuffer=[],t&&typeof t=="object"&&(n=t,t=null),t?(t=nw(t),n.hostname=t.host,n.secure=t.protocol==="https"||t.protocol==="wss",n.port=t.port,t.query&&(n.query=t.query)):n.host&&(n.hostname=nw(n.host).host),u1(this,n),this.secure=n.secure!=null?n.secure:typeof location<"u"&&location.protocol==="https:",n.hostname&&!n.port&&(n.port=this.secure?"443":"80"),this.hostname=n.hostname||(typeof location<"u"?location.hostname:"localhost"),this.port=n.port||(typeof location<"u"&&location.port?location.port:this.secure?"443":"80"),this.transports=n.transports||["polling","websocket","webtransport"],this.writeBuffer=[],this.prevBufferLen=0,this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},n),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),typeof this.opts.query=="string"&&(this.opts.query=KSe(this.opts.query)),this.id=null,this.upgrades=null,this.pingInterval=null,this.pingTimeout=null,this.pingTimeoutTimer=null,typeof addEventListener=="function"&&(this.opts.closeOnBeforeunload&&(this.beforeunloadEventListener=()=>{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this.beforeunloadEventListener,!1)),this.hostname!=="localhost"&&(this.offlineEventListener=()=>{this.onClose("transport close",{description:"network connection lost"})},addEventListener("offline",this.offlineEventListener,!1))),this.open()}createTransport(t){const n=Object.assign({},this.opts.query);n.EIO=JL,n.transport=t,this.id&&(n.sid=this.id);const r=Object.assign({},this.opts,{query:n,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[t]);return new o_e[t](r)}open(){let t;if(this.opts.rememberUpgrade&&Jl.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1)t="websocket";else if(this.transports.length===0){this.setTimeoutFn(()=>{this.emitReserved("error","No transports available")},0);return}else t=this.transports[0];this.readyState="opening";try{t=this.createTransport(t)}catch{this.transports.shift(),this.open();return}t.open(),this.setTransport(t)}setTransport(t){this.transport&&this.transport.removeAllListeners(),this.transport=t,t.on("drain",this.onDrain.bind(this)).on("packet",this.onPacket.bind(this)).on("error",this.onError.bind(this)).on("close",n=>this.onClose("transport close",n))}probe(t){let n=this.createTransport(t),r=!1;Jl.priorWebsocketSuccess=!1;const i=()=>{r||(n.send([{type:"ping",data:"probe"}]),n.once("packet",d=>{if(!r)if(d.type==="pong"&&d.data==="probe"){if(this.upgrading=!0,this.emitReserved("upgrading",n),!n)return;Jl.priorWebsocketSuccess=n.name==="websocket",this.transport.pause(()=>{r||this.readyState!=="closed"&&(c(),this.setTransport(n),n.send([{type:"upgrade"}]),this.emitReserved("upgrade",n),n=null,this.upgrading=!1,this.flush())})}else{const f=new Error("probe error");f.transport=n.name,this.emitReserved("upgradeError",f)}}))};function o(){r||(r=!0,c(),n.close(),n=null)}const s=d=>{const f=new Error("probe error: "+d);f.transport=n.name,o(),this.emitReserved("upgradeError",f)};function a(){s("transport closed")}function l(){s("socket closed")}function u(d){n&&d.name!==n.name&&o()}const c=()=>{n.removeListener("open",i),n.removeListener("error",s),n.removeListener("close",a),this.off("close",l),this.off("upgrading",u)};n.once("open",i),n.once("error",s),n.once("close",a),this.once("close",l),this.once("upgrading",u),this.upgrades.indexOf("webtransport")!==-1&&t!=="webtransport"?this.setTimeoutFn(()=>{r||n.open()},200):n.open()}onOpen(){if(this.readyState="open",Jl.priorWebsocketSuccess=this.transport.name==="websocket",this.emitReserved("open"),this.flush(),this.readyState==="open"&&this.opts.upgrade){let t=0;const n=this.upgrades.length;for(;t{this.onClose("ping timeout")},this.pingInterval+this.pingTimeout),this.opts.autoUnref&&this.pingTimeoutTimer.unref()}onDrain(){this.writeBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,this.writeBuffer.length===0?this.emitReserved("drain"):this.flush()}flush(){if(this.readyState!=="closed"&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const t=this.getWritablePackets();this.transport.send(t),this.prevBufferLen=t.length,this.emitReserved("flush")}}getWritablePackets(){if(!(this.maxPayload&&this.transport.name==="polling"&&this.writeBuffer.length>1))return this.writeBuffer;let n=1;for(let r=0;r0&&n>this.maxPayload)return this.writeBuffer.slice(0,r);n+=2}return this.writeBuffer}write(t,n,r){return this.sendPacket("message",t,n,r),this}send(t,n,r){return this.sendPacket("message",t,n,r),this}sendPacket(t,n,r,i){if(typeof n=="function"&&(i=n,n=void 0),typeof r=="function"&&(i=r,r=null),this.readyState==="closing"||this.readyState==="closed")return;r=r||{},r.compress=r.compress!==!1;const o={type:t,data:n,options:r};this.emitReserved("packetCreate",o),this.writeBuffer.push(o),i&&this.once("flush",i),this.flush()}close(){const t=()=>{this.onClose("forced close"),this.transport.close()},n=()=>{this.off("upgrade",n),this.off("upgradeError",n),t()},r=()=>{this.once("upgrade",n),this.once("upgradeError",n)};return(this.readyState==="opening"||this.readyState==="open")&&(this.readyState="closing",this.writeBuffer.length?this.once("drain",()=>{this.upgrading?r():t()}):this.upgrading?r():t()),this}onError(t){Jl.priorWebsocketSuccess=!1,this.emitReserved("error",t),this.onClose("transport error",t)}onClose(t,n){(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing")&&(this.clearTimeoutFn(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),typeof removeEventListener=="function"&&(removeEventListener("beforeunload",this.beforeunloadEventListener,!1),removeEventListener("offline",this.offlineEventListener,!1)),this.readyState="closed",this.id=null,this.emitReserved("close",t,n),this.writeBuffer=[],this.prevBufferLen=0)}filterUpgrades(t){const n=[];let r=0;const i=t.length;for(;rtypeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(e):e.buffer instanceof ArrayBuffer,s$=Object.prototype.toString,h_e=typeof Blob=="function"||typeof Blob<"u"&&s$.call(Blob)==="[object BlobConstructor]",p_e=typeof File=="function"||typeof File<"u"&&s$.call(File)==="[object FileConstructor]";function y3(e){return d_e&&(e instanceof ArrayBuffer||f_e(e))||h_e&&e instanceof Blob||p_e&&e instanceof File}function Og(e,t){if(!e||typeof e!="object")return!1;if(Array.isArray(e)){for(let n=0,r=e.length;n=0&&e.num{delete this.acks[t];for(let s=0;s{this.io.clearTimeoutFn(o),n.apply(this,[null,...s])}}emitWithAck(t,...n){const r=this.flags.timeout!==void 0||this._opts.ackTimeout!==void 0;return new Promise((i,o)=>{n.push((s,a)=>r?s?o(s):i(a):i(s)),this.emit(t,...n)})}_addToQueue(t){let n;typeof t[t.length-1]=="function"&&(n=t.pop());const r={id:this._queueSeq++,tryCount:0,pending:!1,args:t,flags:Object.assign({fromQueue:!0},this.flags)};t.push((i,...o)=>r!==this._queue[0]?void 0:(i!==null?r.tryCount>this._opts.retries&&(this._queue.shift(),n&&n(i)):(this._queue.shift(),n&&n(null,...o)),r.pending=!1,this._drainQueue())),this._queue.push(r),this._drainQueue()}_drainQueue(t=!1){if(!this.connected||this._queue.length===0)return;const n=this._queue[0];n.pending&&!t||(n.pending=!0,n.tryCount++,this.flags=n.flags,this.emit.apply(this,n.args))}packet(t){t.nsp=this.nsp,this.io._packet(t)}onopen(){typeof this.auth=="function"?this.auth(t=>{this._sendConnectPacket(t)}):this._sendConnectPacket(this.auth)}_sendConnectPacket(t){this.packet({type:Ne.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},t):t})}onerror(t){this.connected||this.emitReserved("connect_error",t)}onclose(t,n){this.connected=!1,delete this.id,this.emitReserved("disconnect",t,n)}onpacket(t){if(t.nsp===this.nsp)switch(t.type){case Ne.CONNECT:t.data&&t.data.sid?this.onconnect(t.data.sid,t.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case Ne.EVENT:case Ne.BINARY_EVENT:this.onevent(t);break;case Ne.ACK:case Ne.BINARY_ACK:this.onack(t);break;case Ne.DISCONNECT:this.ondisconnect();break;case Ne.CONNECT_ERROR:this.destroy();const r=new Error(t.data.message);r.data=t.data.data,this.emitReserved("connect_error",r);break}}onevent(t){const n=t.data||[];t.id!=null&&n.push(this.ack(t.id)),this.connected?this.emitEvent(n):this.receiveBuffer.push(Object.freeze(n))}emitEvent(t){if(this._anyListeners&&this._anyListeners.length){const n=this._anyListeners.slice();for(const r of n)r.apply(this,t)}super.emit.apply(this,t),this._pid&&t.length&&typeof t[t.length-1]=="string"&&(this._lastOffset=t[t.length-1])}ack(t){const n=this;let r=!1;return function(...i){r||(r=!0,n.packet({type:Ne.ACK,id:t,data:i}))}}onack(t){const n=this.acks[t.id];typeof n=="function"&&(n.apply(this,t.data),delete this.acks[t.id])}onconnect(t,n){this.id=t,this.recovered=n&&this._pid===n,this._pid=n,this.connected=!0,this.emitBuffered(),this.emitReserved("connect"),this._drainQueue(!0)}emitBuffered(){this.receiveBuffer.forEach(t=>this.emitEvent(t)),this.receiveBuffer=[],this.sendBuffer.forEach(t=>{this.notifyOutgoingListeners(t),this.packet(t)}),this.sendBuffer=[]}ondisconnect(){this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach(t=>t()),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&this.packet({type:Ne.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(t){return this.flags.compress=t,this}get volatile(){return this.flags.volatile=!0,this}timeout(t){return this.flags.timeout=t,this}onAny(t){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(t),this}prependAny(t){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(t),this}offAny(t){if(!this._anyListeners)return this;if(t){const n=this._anyListeners;for(let r=0;r0&&e.jitter<=1?e.jitter:0,this.attempts=0}Ec.prototype.duration=function(){var e=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var t=Math.random(),n=Math.floor(t*this.jitter*e);e=Math.floor(t*10)&1?e+n:e-n}return Math.min(e,this.max)|0};Ec.prototype.reset=function(){this.attempts=0};Ec.prototype.setMin=function(e){this.ms=e};Ec.prototype.setMax=function(e){this.max=e};Ec.prototype.setJitter=function(e){this.jitter=e};class ow extends Qt{constructor(t,n){var r;super(),this.nsps={},this.subs=[],t&&typeof t=="object"&&(n=t,t=void 0),n=n||{},n.path=n.path||"/socket.io",this.opts=n,u1(this,n),this.reconnection(n.reconnection!==!1),this.reconnectionAttempts(n.reconnectionAttempts||1/0),this.reconnectionDelay(n.reconnectionDelay||1e3),this.reconnectionDelayMax(n.reconnectionDelayMax||5e3),this.randomizationFactor((r=n.randomizationFactor)!==null&&r!==void 0?r:.5),this.backoff=new Ec({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(n.timeout==null?2e4:n.timeout),this._readyState="closed",this.uri=t;const i=n.parser||__e;this.encoder=new i.Encoder,this.decoder=new i.Decoder,this._autoConnect=n.autoConnect!==!1,this._autoConnect&&this.open()}reconnection(t){return arguments.length?(this._reconnection=!!t,this):this._reconnection}reconnectionAttempts(t){return t===void 0?this._reconnectionAttempts:(this._reconnectionAttempts=t,this)}reconnectionDelay(t){var n;return t===void 0?this._reconnectionDelay:(this._reconnectionDelay=t,(n=this.backoff)===null||n===void 0||n.setMin(t),this)}randomizationFactor(t){var n;return t===void 0?this._randomizationFactor:(this._randomizationFactor=t,(n=this.backoff)===null||n===void 0||n.setJitter(t),this)}reconnectionDelayMax(t){var n;return t===void 0?this._reconnectionDelayMax:(this._reconnectionDelayMax=t,(n=this.backoff)===null||n===void 0||n.setMax(t),this)}timeout(t){return arguments.length?(this._timeout=t,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&this.backoff.attempts===0&&this.reconnect()}open(t){if(~this._readyState.indexOf("open"))return this;this.engine=new o$(this.uri,this.opts);const n=this.engine,r=this;this._readyState="opening",this.skipReconnect=!1;const i=ui(n,"open",function(){r.onopen(),t&&t()}),o=a=>{this.cleanup(),this._readyState="closed",this.emitReserved("error",a),t?t(a):this.maybeReconnectOnOpen()},s=ui(n,"error",o);if(this._timeout!==!1){const a=this._timeout,l=this.setTimeoutFn(()=>{i(),o(new Error("timeout")),n.close()},a);this.opts.autoUnref&&l.unref(),this.subs.push(()=>{this.clearTimeoutFn(l)})}return this.subs.push(i),this.subs.push(s),this}connect(t){return this.open(t)}onopen(){this.cleanup(),this._readyState="open",this.emitReserved("open");const t=this.engine;this.subs.push(ui(t,"ping",this.onping.bind(this)),ui(t,"data",this.ondata.bind(this)),ui(t,"error",this.onerror.bind(this)),ui(t,"close",this.onclose.bind(this)),ui(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(t){try{this.decoder.add(t)}catch(n){this.onclose("parse error",n)}}ondecoded(t){m3(()=>{this.emitReserved("packet",t)},this.setTimeoutFn)}onerror(t){this.emitReserved("error",t)}socket(t,n){let r=this.nsps[t];return r?this._autoConnect&&!r.active&&r.connect():(r=new a$(this,t,n),this.nsps[t]=r),r}_destroy(t){const n=Object.keys(this.nsps);for(const r of n)if(this.nsps[r].active)return;this._close()}_packet(t){const n=this.encoder.encode(t);for(let r=0;rt()),this.subs.length=0,this.decoder.destroy()}_close(){this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close"),this.engine&&this.engine.close()}disconnect(){return this._close()}onclose(t,n){this.cleanup(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",t,n),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const t=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{const n=this.backoff.duration();this._reconnecting=!0;const r=this.setTimeoutFn(()=>{t.skipReconnect||(this.emitReserved("reconnect_attempt",t.backoff.attempts),!t.skipReconnect&&t.open(i=>{i?(t._reconnecting=!1,t.reconnect(),this.emitReserved("reconnect_error",i)):t.onreconnect()}))},n);this.opts.autoUnref&&r.unref(),this.subs.push(()=>{this.clearTimeoutFn(r)})}}onreconnect(){const t=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",t)}}const sd={};function Mg(e,t){typeof e=="object"&&(t=e,e=void 0),t=t||{};const n=c_e(e,t.path||"/socket.io"),r=n.source,i=n.id,o=n.path,s=sd[i]&&o in sd[i].nsps,a=t.forceNew||t["force new connection"]||t.multiplex===!1||s;let l;return a?l=new ow(r,t):(sd[i]||(sd[i]=new ow(r,t)),l=sd[i]),n.query&&!t.query&&(t.query=n.queryKey),l.socket(n.path,t)}Object.assign(Mg,{Manager:ow,Socket:a$,io:Mg,connect:Mg});const v8=()=>{let e=!1,t=`ws://${window.location.host}`;const n={timeout:6e4,path:"/ws/socket.io",autoConnect:!1};if(["nodes","package"].includes("production")){const o=Tf.get();o&&(t=o.replace(/^https?\:\/\//i,""));const s=Cf.get();s&&(n.auth={token:s}),n.transports=["websocket","polling"]}const r=Mg(t,n);return o=>s=>a=>{const{dispatch:l,getState:u}=o;if(e||(MSe({storeApi:o,socket:r}),e=!0,r.connect()),Rn.fulfilled.match(a)){const c=a.payload.id,d=u().system.sessionId;d&&(r.emit("unsubscribe",{session:d}),l(u7({sessionId:d}))),r.emit("subscribe",{session:c}),l(zx({sessionId:c}))}s(a)}},c1=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function Pc(e){const t=Object.prototype.toString.call(e);return t==="[object Window]"||t==="[object global]"}function b3(e){return"nodeType"in e}function or(e){var t,n;return e?Pc(e)?e:b3(e)&&(t=(n=e.ownerDocument)==null?void 0:n.defaultView)!=null?t:window:window}function S3(e){const{Document:t}=or(e);return e instanceof t}function Vh(e){return Pc(e)?!1:e instanceof or(e).HTMLElement}function x_e(e){return e instanceof or(e).SVGElement}function Ac(e){return e?Pc(e)?e.document:b3(e)?S3(e)?e:Vh(e)?e.ownerDocument:document:document:document}const io=c1?k.useLayoutEffect:k.useEffect;function d1(e){const t=k.useRef(e);return io(()=>{t.current=e}),k.useCallback(function(){for(var n=arguments.length,r=new Array(n),i=0;i{e.current=setInterval(r,i)},[]),n=k.useCallback(()=>{e.current!==null&&(clearInterval(e.current),e.current=null)},[]);return[t,n]}function Xf(e,t){t===void 0&&(t=[e]);const n=k.useRef(e);return io(()=>{n.current!==e&&(n.current=e)},t),n}function zh(e,t){const n=k.useRef();return k.useMemo(()=>{const r=e(n.current);return n.current=r,r},[...t])}function my(e){const t=d1(e),n=k.useRef(null),r=k.useCallback(i=>{i!==n.current&&(t==null||t(i,n.current)),n.current=i},[]);return[n,r]}function yy(e){const t=k.useRef();return k.useEffect(()=>{t.current=e},[e]),t.current}let SS={};function f1(e,t){return k.useMemo(()=>{if(t)return t;const n=SS[e]==null?0:SS[e]+1;return SS[e]=n,e+"-"+n},[e,t])}function l$(e){return function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;i{const a=Object.entries(s);for(const[l,u]of a){const c=o[l];c!=null&&(o[l]=c+e*u)}return o},{...t})}}const Bu=l$(1),vy=l$(-1);function T_e(e){return"clientX"in e&&"clientY"in e}function _3(e){if(!e)return!1;const{KeyboardEvent:t}=or(e.target);return t&&e instanceof t}function E_e(e){if(!e)return!1;const{TouchEvent:t}=or(e.target);return t&&e instanceof t}function Yf(e){if(E_e(e)){if(e.touches&&e.touches.length){const{clientX:t,clientY:n}=e.touches[0];return{x:t,y:n}}else if(e.changedTouches&&e.changedTouches.length){const{clientX:t,clientY:n}=e.changedTouches[0];return{x:t,y:n}}}return T_e(e)?{x:e.clientX,y:e.clientY}:null}const Qf=Object.freeze({Translate:{toString(e){if(!e)return;const{x:t,y:n}=e;return"translate3d("+(t?Math.round(t):0)+"px, "+(n?Math.round(n):0)+"px, 0)"}},Scale:{toString(e){if(!e)return;const{scaleX:t,scaleY:n}=e;return"scaleX("+t+") scaleY("+n+")"}},Transform:{toString(e){if(e)return[Qf.Translate.toString(e),Qf.Scale.toString(e)].join(" ")}},Transition:{toString(e){let{property:t,duration:n,easing:r}=e;return t+" "+n+"ms "+r}}}),b8="a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]";function P_e(e){return e.matches(b8)?e:e.querySelector(b8)}const A_e={display:"none"};function k_e(e){let{id:t,value:n}=e;return Xe.createElement("div",{id:t,style:A_e},n)}const R_e={position:"fixed",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0 0 0 0)",clipPath:"inset(100%)",whiteSpace:"nowrap"};function O_e(e){let{id:t,announcement:n}=e;return Xe.createElement("div",{id:t,style:R_e,role:"status","aria-live":"assertive","aria-atomic":!0},n)}function M_e(){const[e,t]=k.useState("");return{announce:k.useCallback(r=>{r!=null&&t(r)},[]),announcement:e}}const u$=k.createContext(null);function I_e(e){const t=k.useContext(u$);k.useEffect(()=>{if(!t)throw new Error("useDndMonitor must be used within a children of ");return t(e)},[e,t])}function N_e(){const[e]=k.useState(()=>new Set),t=k.useCallback(r=>(e.add(r),()=>e.delete(r)),[e]);return[k.useCallback(r=>{let{type:i,event:o}=r;e.forEach(s=>{var a;return(a=s[i])==null?void 0:a.call(s,o)})},[e]),t]}const D_e={draggable:` - To pick up a draggable item, press the space bar. - While dragging, use the arrow keys to move the item. - Press space again to drop the item in its new position, or press escape to cancel. - `},L_e={onDragStart(e){let{active:t}=e;return"Picked up draggable item "+t.id+"."},onDragOver(e){let{active:t,over:n}=e;return n?"Draggable item "+t.id+" was moved over droppable area "+n.id+".":"Draggable item "+t.id+" is no longer over a droppable area."},onDragEnd(e){let{active:t,over:n}=e;return n?"Draggable item "+t.id+" was dropped over droppable area "+n.id:"Draggable item "+t.id+" was dropped."},onDragCancel(e){let{active:t}=e;return"Dragging was cancelled. Draggable item "+t.id+" was dropped."}};function $_e(e){let{announcements:t=L_e,container:n,hiddenTextDescribedById:r,screenReaderInstructions:i=D_e}=e;const{announce:o,announcement:s}=M_e(),a=f1("DndLiveRegion"),[l,u]=k.useState(!1);if(k.useEffect(()=>{u(!0)},[]),I_e(k.useMemo(()=>({onDragStart(d){let{active:f}=d;o(t.onDragStart({active:f}))},onDragMove(d){let{active:f,over:h}=d;t.onDragMove&&o(t.onDragMove({active:f,over:h}))},onDragOver(d){let{active:f,over:h}=d;o(t.onDragOver({active:f,over:h}))},onDragEnd(d){let{active:f,over:h}=d;o(t.onDragEnd({active:f,over:h}))},onDragCancel(d){let{active:f,over:h}=d;o(t.onDragCancel({active:f,over:h}))}}),[o,t])),!l)return null;const c=Xe.createElement(Xe.Fragment,null,Xe.createElement(k_e,{id:r,value:i.draggable}),Xe.createElement(O_e,{id:a,announcement:s}));return n?zi.createPortal(c,n):c}var tn;(function(e){e.DragStart="dragStart",e.DragMove="dragMove",e.DragEnd="dragEnd",e.DragCancel="dragCancel",e.DragOver="dragOver",e.RegisterDroppable="registerDroppable",e.SetDroppableDisabled="setDroppableDisabled",e.UnregisterDroppable="unregisterDroppable"})(tn||(tn={}));function by(){}function S8(e,t){return k.useMemo(()=>({sensor:e,options:t??{}}),[e,t])}function F_e(){for(var e=arguments.length,t=new Array(e),n=0;n[...t].filter(r=>r!=null),[...t])}const Ei=Object.freeze({x:0,y:0});function B_e(e,t){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function j_e(e,t){const n=Yf(e);if(!n)return"0 0";const r={x:(n.x-t.left)/t.width*100,y:(n.y-t.top)/t.height*100};return r.x+"% "+r.y+"%"}function V_e(e,t){let{data:{value:n}}=e,{data:{value:r}}=t;return n-r}function z_e(e,t){let{data:{value:n}}=e,{data:{value:r}}=t;return r-n}function U_e(e){let{left:t,top:n,height:r,width:i}=e;return[{x:t,y:n},{x:t+i,y:n},{x:t,y:n+r},{x:t+i,y:n+r}]}function G_e(e,t){if(!e||e.length===0)return null;const[n]=e;return t?n[t]:n}function H_e(e,t){const n=Math.max(t.top,e.top),r=Math.max(t.left,e.left),i=Math.min(t.left+t.width,e.left+e.width),o=Math.min(t.top+t.height,e.top+e.height),s=i-r,a=o-n;if(r{let{collisionRect:t,droppableRects:n,droppableContainers:r}=e;const i=[];for(const o of r){const{id:s}=o,a=n.get(s);if(a){const l=H_e(a,t);l>0&&i.push({id:s,data:{droppableContainer:o,value:l}})}}return i.sort(z_e)};function W_e(e,t){const{top:n,left:r,bottom:i,right:o}=t;return n<=e.y&&e.y<=i&&r<=e.x&&e.x<=o}const K_e=e=>{let{droppableContainers:t,droppableRects:n,pointerCoordinates:r}=e;if(!r)return[];const i=[];for(const o of t){const{id:s}=o,a=n.get(s);if(a&&W_e(r,a)){const u=U_e(a).reduce((d,f)=>d+B_e(r,f),0),c=Number((u/4).toFixed(4));i.push({id:s,data:{droppableContainer:o,value:c}})}}return i.sort(V_e)};function X_e(e,t,n){return{...e,scaleX:t&&n?t.width/n.width:1,scaleY:t&&n?t.height/n.height:1}}function c$(e,t){return e&&t?{x:e.left-t.left,y:e.top-t.top}:Ei}function Y_e(e){return function(n){for(var r=arguments.length,i=new Array(r>1?r-1:0),o=1;o({...s,top:s.top+e*a.y,bottom:s.bottom+e*a.y,left:s.left+e*a.x,right:s.right+e*a.x}),{...n})}}const Q_e=Y_e(1);function d$(e){if(e.startsWith("matrix3d(")){const t=e.slice(9,-1).split(/, /);return{x:+t[12],y:+t[13],scaleX:+t[0],scaleY:+t[5]}}else if(e.startsWith("matrix(")){const t=e.slice(7,-1).split(/, /);return{x:+t[4],y:+t[5],scaleX:+t[0],scaleY:+t[3]}}return null}function Z_e(e,t,n){const r=d$(t);if(!r)return e;const{scaleX:i,scaleY:o,x:s,y:a}=r,l=e.left-s-(1-i)*parseFloat(n),u=e.top-a-(1-o)*parseFloat(n.slice(n.indexOf(" ")+1)),c=i?e.width/i:e.width,d=o?e.height/o:e.height;return{width:c,height:d,top:u,right:l+c,bottom:u+d,left:l}}const J_e={ignoreTransform:!1};function Uh(e,t){t===void 0&&(t=J_e);let n=e.getBoundingClientRect();if(t.ignoreTransform){const{transform:u,transformOrigin:c}=or(e).getComputedStyle(e);u&&(n=Z_e(n,u,c))}const{top:r,left:i,width:o,height:s,bottom:a,right:l}=n;return{top:r,left:i,width:o,height:s,bottom:a,right:l}}function _8(e){return Uh(e,{ignoreTransform:!0})}function e2e(e){const t=e.innerWidth,n=e.innerHeight;return{top:0,left:0,right:t,bottom:n,width:t,height:n}}function t2e(e,t){return t===void 0&&(t=or(e).getComputedStyle(e)),t.position==="fixed"}function n2e(e,t){t===void 0&&(t=or(e).getComputedStyle(e));const n=/(auto|scroll|overlay)/;return["overflow","overflowX","overflowY"].some(i=>{const o=t[i];return typeof o=="string"?n.test(o):!1})}function w3(e,t){const n=[];function r(i){if(t!=null&&n.length>=t||!i)return n;if(S3(i)&&i.scrollingElement!=null&&!n.includes(i.scrollingElement))return n.push(i.scrollingElement),n;if(!Vh(i)||x_e(i)||n.includes(i))return n;const o=or(e).getComputedStyle(i);return i!==e&&n2e(i,o)&&n.push(i),t2e(i,o)?n:r(i.parentNode)}return e?r(e):n}function f$(e){const[t]=w3(e,1);return t??null}function _S(e){return!c1||!e?null:Pc(e)?e:b3(e)?S3(e)||e===Ac(e).scrollingElement?window:Vh(e)?e:null:null}function h$(e){return Pc(e)?e.scrollX:e.scrollLeft}function p$(e){return Pc(e)?e.scrollY:e.scrollTop}function sw(e){return{x:h$(e),y:p$(e)}}var fn;(function(e){e[e.Forward=1]="Forward",e[e.Backward=-1]="Backward"})(fn||(fn={}));function g$(e){return!c1||!e?!1:e===document.scrollingElement}function m$(e){const t={x:0,y:0},n=g$(e)?{height:window.innerHeight,width:window.innerWidth}:{height:e.clientHeight,width:e.clientWidth},r={x:e.scrollWidth-n.width,y:e.scrollHeight-n.height},i=e.scrollTop<=t.y,o=e.scrollLeft<=t.x,s=e.scrollTop>=r.y,a=e.scrollLeft>=r.x;return{isTop:i,isLeft:o,isBottom:s,isRight:a,maxScroll:r,minScroll:t}}const r2e={x:.2,y:.2};function i2e(e,t,n,r,i){let{top:o,left:s,right:a,bottom:l}=n;r===void 0&&(r=10),i===void 0&&(i=r2e);const{isTop:u,isBottom:c,isLeft:d,isRight:f}=m$(e),h={x:0,y:0},p={x:0,y:0},m={height:t.height*i.y,width:t.width*i.x};return!u&&o<=t.top+m.height?(h.y=fn.Backward,p.y=r*Math.abs((t.top+m.height-o)/m.height)):!c&&l>=t.bottom-m.height&&(h.y=fn.Forward,p.y=r*Math.abs((t.bottom-m.height-l)/m.height)),!f&&a>=t.right-m.width?(h.x=fn.Forward,p.x=r*Math.abs((t.right-m.width-a)/m.width)):!d&&s<=t.left+m.width&&(h.x=fn.Backward,p.x=r*Math.abs((t.left+m.width-s)/m.width)),{direction:h,speed:p}}function o2e(e){if(e===document.scrollingElement){const{innerWidth:o,innerHeight:s}=window;return{top:0,left:0,right:o,bottom:s,width:o,height:s}}const{top:t,left:n,right:r,bottom:i}=e.getBoundingClientRect();return{top:t,left:n,right:r,bottom:i,width:e.clientWidth,height:e.clientHeight}}function y$(e){return e.reduce((t,n)=>Bu(t,sw(n)),Ei)}function s2e(e){return e.reduce((t,n)=>t+h$(n),0)}function a2e(e){return e.reduce((t,n)=>t+p$(n),0)}function v$(e,t){if(t===void 0&&(t=Uh),!e)return;const{top:n,left:r,bottom:i,right:o}=t(e);f$(e)&&(i<=0||o<=0||n>=window.innerHeight||r>=window.innerWidth)&&e.scrollIntoView({block:"center",inline:"center"})}const l2e=[["x",["left","right"],s2e],["y",["top","bottom"],a2e]];class x3{constructor(t,n){this.rect=void 0,this.width=void 0,this.height=void 0,this.top=void 0,this.bottom=void 0,this.right=void 0,this.left=void 0;const r=w3(n),i=y$(r);this.rect={...t},this.width=t.width,this.height=t.height;for(const[o,s,a]of l2e)for(const l of s)Object.defineProperty(this,l,{get:()=>{const u=a(r),c=i[o]-u;return this.rect[l]+c},enumerable:!0});Object.defineProperty(this,"rect",{enumerable:!1})}}class Dd{constructor(t){this.target=void 0,this.listeners=[],this.removeAll=()=>{this.listeners.forEach(n=>{var r;return(r=this.target)==null?void 0:r.removeEventListener(...n)})},this.target=t}add(t,n,r){var i;(i=this.target)==null||i.addEventListener(t,n,r),this.listeners.push([t,n,r])}}function u2e(e){const{EventTarget:t}=or(e);return e instanceof t?e:Ac(e)}function wS(e,t){const n=Math.abs(e.x),r=Math.abs(e.y);return typeof t=="number"?Math.sqrt(n**2+r**2)>t:"x"in t&&"y"in t?n>t.x&&r>t.y:"x"in t?n>t.x:"y"in t?r>t.y:!1}var Ur;(function(e){e.Click="click",e.DragStart="dragstart",e.Keydown="keydown",e.ContextMenu="contextmenu",e.Resize="resize",e.SelectionChange="selectionchange",e.VisibilityChange="visibilitychange"})(Ur||(Ur={}));function w8(e){e.preventDefault()}function c2e(e){e.stopPropagation()}var at;(function(e){e.Space="Space",e.Down="ArrowDown",e.Right="ArrowRight",e.Left="ArrowLeft",e.Up="ArrowUp",e.Esc="Escape",e.Enter="Enter"})(at||(at={}));const b$={start:[at.Space,at.Enter],cancel:[at.Esc],end:[at.Space,at.Enter]},d2e=(e,t)=>{let{currentCoordinates:n}=t;switch(e.code){case at.Right:return{...n,x:n.x+25};case at.Left:return{...n,x:n.x-25};case at.Down:return{...n,y:n.y+25};case at.Up:return{...n,y:n.y-25}}};class S${constructor(t){this.props=void 0,this.autoScrollEnabled=!1,this.referenceCoordinates=void 0,this.listeners=void 0,this.windowListeners=void 0,this.props=t;const{event:{target:n}}=t;this.props=t,this.listeners=new Dd(Ac(n)),this.windowListeners=new Dd(or(n)),this.handleKeyDown=this.handleKeyDown.bind(this),this.handleCancel=this.handleCancel.bind(this),this.attach()}attach(){this.handleStart(),this.windowListeners.add(Ur.Resize,this.handleCancel),this.windowListeners.add(Ur.VisibilityChange,this.handleCancel),setTimeout(()=>this.listeners.add(Ur.Keydown,this.handleKeyDown))}handleStart(){const{activeNode:t,onStart:n}=this.props,r=t.node.current;r&&v$(r),n(Ei)}handleKeyDown(t){if(_3(t)){const{active:n,context:r,options:i}=this.props,{keyboardCodes:o=b$,coordinateGetter:s=d2e,scrollBehavior:a="smooth"}=i,{code:l}=t;if(o.end.includes(l)){this.handleEnd(t);return}if(o.cancel.includes(l)){this.handleCancel(t);return}const{collisionRect:u}=r.current,c=u?{x:u.left,y:u.top}:Ei;this.referenceCoordinates||(this.referenceCoordinates=c);const d=s(t,{active:n,context:r.current,currentCoordinates:c});if(d){const f=vy(d,c),h={x:0,y:0},{scrollableAncestors:p}=r.current;for(const m of p){const S=t.code,{isTop:y,isRight:v,isLeft:g,isBottom:b,maxScroll:_,minScroll:w}=m$(m),x=o2e(m),T={x:Math.min(S===at.Right?x.right-x.width/2:x.right,Math.max(S===at.Right?x.left:x.left+x.width/2,d.x)),y:Math.min(S===at.Down?x.bottom-x.height/2:x.bottom,Math.max(S===at.Down?x.top:x.top+x.height/2,d.y))},P=S===at.Right&&!v||S===at.Left&&!g,E=S===at.Down&&!b||S===at.Up&&!y;if(P&&T.x!==d.x){const A=m.scrollLeft+f.x,$=S===at.Right&&A<=_.x||S===at.Left&&A>=w.x;if($&&!f.y){m.scrollTo({left:A,behavior:a});return}$?h.x=m.scrollLeft-A:h.x=S===at.Right?m.scrollLeft-_.x:m.scrollLeft-w.x,h.x&&m.scrollBy({left:-h.x,behavior:a});break}else if(E&&T.y!==d.y){const A=m.scrollTop+f.y,$=S===at.Down&&A<=_.y||S===at.Up&&A>=w.y;if($&&!f.x){m.scrollTo({top:A,behavior:a});return}$?h.y=m.scrollTop-A:h.y=S===at.Down?m.scrollTop-_.y:m.scrollTop-w.y,h.y&&m.scrollBy({top:-h.y,behavior:a});break}}this.handleMove(t,Bu(vy(d,this.referenceCoordinates),h))}}}handleMove(t,n){const{onMove:r}=this.props;t.preventDefault(),r(n)}handleEnd(t){const{onEnd:n}=this.props;t.preventDefault(),this.detach(),n()}handleCancel(t){const{onCancel:n}=this.props;t.preventDefault(),this.detach(),n()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll()}}S$.activators=[{eventName:"onKeyDown",handler:(e,t,n)=>{let{keyboardCodes:r=b$,onActivation:i}=t,{active:o}=n;const{code:s}=e.nativeEvent;if(r.start.includes(s)){const a=o.activatorNode.current;return a&&e.target!==a?!1:(e.preventDefault(),i==null||i({event:e.nativeEvent}),!0)}return!1}}];function x8(e){return!!(e&&"distance"in e)}function C8(e){return!!(e&&"delay"in e)}class C3{constructor(t,n,r){var i;r===void 0&&(r=u2e(t.event.target)),this.props=void 0,this.events=void 0,this.autoScrollEnabled=!0,this.document=void 0,this.activated=!1,this.initialCoordinates=void 0,this.timeoutId=null,this.listeners=void 0,this.documentListeners=void 0,this.windowListeners=void 0,this.props=t,this.events=n;const{event:o}=t,{target:s}=o;this.props=t,this.events=n,this.document=Ac(s),this.documentListeners=new Dd(this.document),this.listeners=new Dd(r),this.windowListeners=new Dd(or(s)),this.initialCoordinates=(i=Yf(o))!=null?i:Ei,this.handleStart=this.handleStart.bind(this),this.handleMove=this.handleMove.bind(this),this.handleEnd=this.handleEnd.bind(this),this.handleCancel=this.handleCancel.bind(this),this.handleKeydown=this.handleKeydown.bind(this),this.removeTextSelection=this.removeTextSelection.bind(this),this.attach()}attach(){const{events:t,props:{options:{activationConstraint:n}}}=this;if(this.listeners.add(t.move.name,this.handleMove,{passive:!1}),this.listeners.add(t.end.name,this.handleEnd),this.windowListeners.add(Ur.Resize,this.handleCancel),this.windowListeners.add(Ur.DragStart,w8),this.windowListeners.add(Ur.VisibilityChange,this.handleCancel),this.windowListeners.add(Ur.ContextMenu,w8),this.documentListeners.add(Ur.Keydown,this.handleKeydown),n){if(x8(n))return;if(C8(n)){this.timeoutId=setTimeout(this.handleStart,n.delay);return}}this.handleStart()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll(),setTimeout(this.documentListeners.removeAll,50),this.timeoutId!==null&&(clearTimeout(this.timeoutId),this.timeoutId=null)}handleStart(){const{initialCoordinates:t}=this,{onStart:n}=this.props;t&&(this.activated=!0,this.documentListeners.add(Ur.Click,c2e,{capture:!0}),this.removeTextSelection(),this.documentListeners.add(Ur.SelectionChange,this.removeTextSelection),n(t))}handleMove(t){var n;const{activated:r,initialCoordinates:i,props:o}=this,{onMove:s,options:{activationConstraint:a}}=o;if(!i)return;const l=(n=Yf(t))!=null?n:Ei,u=vy(i,l);if(!r&&a){if(C8(a))return wS(u,a.tolerance)?this.handleCancel():void 0;if(x8(a))return a.tolerance!=null&&wS(u,a.tolerance)?this.handleCancel():wS(u,a.distance)?this.handleStart():void 0}t.cancelable&&t.preventDefault(),s(l)}handleEnd(){const{onEnd:t}=this.props;this.detach(),t()}handleCancel(){const{onCancel:t}=this.props;this.detach(),t()}handleKeydown(t){t.code===at.Esc&&this.handleCancel()}removeTextSelection(){var t;(t=this.document.getSelection())==null||t.removeAllRanges()}}const f2e={move:{name:"pointermove"},end:{name:"pointerup"}};class _$ extends C3{constructor(t){const{event:n}=t,r=Ac(n.target);super(t,f2e,r)}}_$.activators=[{eventName:"onPointerDown",handler:(e,t)=>{let{nativeEvent:n}=e,{onActivation:r}=t;return!n.isPrimary||n.button!==0?!1:(r==null||r({event:n}),!0)}}];const h2e={move:{name:"mousemove"},end:{name:"mouseup"}};var aw;(function(e){e[e.RightClick=2]="RightClick"})(aw||(aw={}));class w$ extends C3{constructor(t){super(t,h2e,Ac(t.event.target))}}w$.activators=[{eventName:"onMouseDown",handler:(e,t)=>{let{nativeEvent:n}=e,{onActivation:r}=t;return n.button===aw.RightClick?!1:(r==null||r({event:n}),!0)}}];const xS={move:{name:"touchmove"},end:{name:"touchend"}};class x$ extends C3{constructor(t){super(t,xS)}static setup(){return window.addEventListener(xS.move.name,t,{capture:!1,passive:!1}),function(){window.removeEventListener(xS.move.name,t)};function t(){}}}x$.activators=[{eventName:"onTouchStart",handler:(e,t)=>{let{nativeEvent:n}=e,{onActivation:r}=t;const{touches:i}=n;return i.length>1?!1:(r==null||r({event:n}),!0)}}];var Ld;(function(e){e[e.Pointer=0]="Pointer",e[e.DraggableRect=1]="DraggableRect"})(Ld||(Ld={}));var Sy;(function(e){e[e.TreeOrder=0]="TreeOrder",e[e.ReversedTreeOrder=1]="ReversedTreeOrder"})(Sy||(Sy={}));function p2e(e){let{acceleration:t,activator:n=Ld.Pointer,canScroll:r,draggingRect:i,enabled:o,interval:s=5,order:a=Sy.TreeOrder,pointerCoordinates:l,scrollableAncestors:u,scrollableAncestorRects:c,delta:d,threshold:f}=e;const h=m2e({delta:d,disabled:!o}),[p,m]=C_e(),S=k.useRef({x:0,y:0}),y=k.useRef({x:0,y:0}),v=k.useMemo(()=>{switch(n){case Ld.Pointer:return l?{top:l.y,bottom:l.y,left:l.x,right:l.x}:null;case Ld.DraggableRect:return i}},[n,i,l]),g=k.useRef(null),b=k.useCallback(()=>{const w=g.current;if(!w)return;const x=S.current.x*y.current.x,T=S.current.y*y.current.y;w.scrollBy(x,T)},[]),_=k.useMemo(()=>a===Sy.TreeOrder?[...u].reverse():u,[a,u]);k.useEffect(()=>{if(!o||!u.length||!v){m();return}for(const w of _){if((r==null?void 0:r(w))===!1)continue;const x=u.indexOf(w),T=c[x];if(!T)continue;const{direction:P,speed:E}=i2e(w,T,v,t,f);for(const A of["x","y"])h[A][P[A]]||(E[A]=0,P[A]=0);if(E.x>0||E.y>0){m(),g.current=w,p(b,s),S.current=E,y.current=P;return}}S.current={x:0,y:0},y.current={x:0,y:0},m()},[t,b,r,m,o,s,JSON.stringify(v),JSON.stringify(h),p,u,_,c,JSON.stringify(f)])}const g2e={x:{[fn.Backward]:!1,[fn.Forward]:!1},y:{[fn.Backward]:!1,[fn.Forward]:!1}};function m2e(e){let{delta:t,disabled:n}=e;const r=yy(t);return zh(i=>{if(n||!r||!i)return g2e;const o={x:Math.sign(t.x-r.x),y:Math.sign(t.y-r.y)};return{x:{[fn.Backward]:i.x[fn.Backward]||o.x===-1,[fn.Forward]:i.x[fn.Forward]||o.x===1},y:{[fn.Backward]:i.y[fn.Backward]||o.y===-1,[fn.Forward]:i.y[fn.Forward]||o.y===1}}},[n,t,r])}function y2e(e,t){const n=t!==null?e.get(t):void 0,r=n?n.node.current:null;return zh(i=>{var o;return t===null?null:(o=r??i)!=null?o:null},[r,t])}function v2e(e,t){return k.useMemo(()=>e.reduce((n,r)=>{const{sensor:i}=r,o=i.activators.map(s=>({eventName:s.eventName,handler:t(s.handler,r)}));return[...n,...o]},[]),[e,t])}var Zf;(function(e){e[e.Always=0]="Always",e[e.BeforeDragging=1]="BeforeDragging",e[e.WhileDragging=2]="WhileDragging"})(Zf||(Zf={}));var lw;(function(e){e.Optimized="optimized"})(lw||(lw={}));const T8=new Map;function b2e(e,t){let{dragging:n,dependencies:r,config:i}=t;const[o,s]=k.useState(null),{frequency:a,measure:l,strategy:u}=i,c=k.useRef(e),d=S(),f=Xf(d),h=k.useCallback(function(y){y===void 0&&(y=[]),!f.current&&s(v=>v===null?y:v.concat(y.filter(g=>!v.includes(g))))},[f]),p=k.useRef(null),m=zh(y=>{if(d&&!n)return T8;if(!y||y===T8||c.current!==e||o!=null){const v=new Map;for(let g of e){if(!g)continue;if(o&&o.length>0&&!o.includes(g.id)&&g.rect.current){v.set(g.id,g.rect.current);continue}const b=g.node.current,_=b?new x3(l(b),b):null;g.rect.current=_,_&&v.set(g.id,_)}return v}return y},[e,o,n,d,l]);return k.useEffect(()=>{c.current=e},[e]),k.useEffect(()=>{d||h()},[n,d]),k.useEffect(()=>{o&&o.length>0&&s(null)},[JSON.stringify(o)]),k.useEffect(()=>{d||typeof a!="number"||p.current!==null||(p.current=setTimeout(()=>{h(),p.current=null},a))},[a,d,h,...r]),{droppableRects:m,measureDroppableContainers:h,measuringScheduled:o!=null};function S(){switch(u){case Zf.Always:return!1;case Zf.BeforeDragging:return n;default:return!n}}}function T3(e,t){return zh(n=>e?n||(typeof t=="function"?t(e):e):null,[t,e])}function S2e(e,t){return T3(e,t)}function _2e(e){let{callback:t,disabled:n}=e;const r=d1(t),i=k.useMemo(()=>{if(n||typeof window>"u"||typeof window.MutationObserver>"u")return;const{MutationObserver:o}=window;return new o(r)},[r,n]);return k.useEffect(()=>()=>i==null?void 0:i.disconnect(),[i]),i}function h1(e){let{callback:t,disabled:n}=e;const r=d1(t),i=k.useMemo(()=>{if(n||typeof window>"u"||typeof window.ResizeObserver>"u")return;const{ResizeObserver:o}=window;return new o(r)},[n]);return k.useEffect(()=>()=>i==null?void 0:i.disconnect(),[i]),i}function w2e(e){return new x3(Uh(e),e)}function E8(e,t,n){t===void 0&&(t=w2e);const[r,i]=k.useReducer(a,null),o=_2e({callback(l){if(e)for(const u of l){const{type:c,target:d}=u;if(c==="childList"&&d instanceof HTMLElement&&d.contains(e)){i();break}}}}),s=h1({callback:i});return io(()=>{i(),e?(s==null||s.observe(e),o==null||o.observe(document.body,{childList:!0,subtree:!0})):(s==null||s.disconnect(),o==null||o.disconnect())},[e]),r;function a(l){if(!e)return null;if(e.isConnected===!1){var u;return(u=l??n)!=null?u:null}const c=t(e);return JSON.stringify(l)===JSON.stringify(c)?l:c}}function x2e(e){const t=T3(e);return c$(e,t)}const P8=[];function C2e(e){const t=k.useRef(e),n=zh(r=>e?r&&r!==P8&&e&&t.current&&e.parentNode===t.current.parentNode?r:w3(e):P8,[e]);return k.useEffect(()=>{t.current=e},[e]),n}function T2e(e){const[t,n]=k.useState(null),r=k.useRef(e),i=k.useCallback(o=>{const s=_S(o.target);s&&n(a=>a?(a.set(s,sw(s)),new Map(a)):null)},[]);return k.useEffect(()=>{const o=r.current;if(e!==o){s(o);const a=e.map(l=>{const u=_S(l);return u?(u.addEventListener("scroll",i,{passive:!0}),[u,sw(u)]):null}).filter(l=>l!=null);n(a.length?new Map(a):null),r.current=e}return()=>{s(e),s(o)};function s(a){a.forEach(l=>{const u=_S(l);u==null||u.removeEventListener("scroll",i)})}},[i,e]),k.useMemo(()=>e.length?t?Array.from(t.values()).reduce((o,s)=>Bu(o,s),Ei):y$(e):Ei,[e,t])}function A8(e,t){t===void 0&&(t=[]);const n=k.useRef(null);return k.useEffect(()=>{n.current=null},t),k.useEffect(()=>{const r=e!==Ei;r&&!n.current&&(n.current=e),!r&&n.current&&(n.current=null)},[e]),n.current?vy(e,n.current):Ei}function E2e(e){k.useEffect(()=>{if(!c1)return;const t=e.map(n=>{let{sensor:r}=n;return r.setup==null?void 0:r.setup()});return()=>{for(const n of t)n==null||n()}},e.map(t=>{let{sensor:n}=t;return n}))}function P2e(e,t){return k.useMemo(()=>e.reduce((n,r)=>{let{eventName:i,handler:o}=r;return n[i]=s=>{o(s,t)},n},{}),[e,t])}function C$(e){return k.useMemo(()=>e?e2e(e):null,[e])}const CS=[];function A2e(e,t){t===void 0&&(t=Uh);const[n]=e,r=C$(n?or(n):null),[i,o]=k.useReducer(a,CS),s=h1({callback:o});return e.length>0&&i===CS&&o(),io(()=>{e.length?e.forEach(l=>s==null?void 0:s.observe(l)):(s==null||s.disconnect(),o())},[e]),i;function a(){return e.length?e.map(l=>g$(l)?r:new x3(t(l),l)):CS}}function T$(e){if(!e)return null;if(e.children.length>1)return e;const t=e.children[0];return Vh(t)?t:e}function k2e(e){let{measure:t}=e;const[n,r]=k.useState(null),i=k.useCallback(u=>{for(const{target:c}of u)if(Vh(c)){r(d=>{const f=t(c);return d?{...d,width:f.width,height:f.height}:f});break}},[t]),o=h1({callback:i}),s=k.useCallback(u=>{const c=T$(u);o==null||o.disconnect(),c&&(o==null||o.observe(c)),r(c?t(c):null)},[t,o]),[a,l]=my(s);return k.useMemo(()=>({nodeRef:a,rect:n,setRef:l}),[n,a,l])}const R2e=[{sensor:_$,options:{}},{sensor:S$,options:{}}],O2e={current:{}},Ig={draggable:{measure:_8},droppable:{measure:_8,strategy:Zf.WhileDragging,frequency:lw.Optimized},dragOverlay:{measure:Uh}};class $d extends Map{get(t){var n;return t!=null&&(n=super.get(t))!=null?n:void 0}toArray(){return Array.from(this.values())}getEnabled(){return this.toArray().filter(t=>{let{disabled:n}=t;return!n})}getNodeFor(t){var n,r;return(n=(r=this.get(t))==null?void 0:r.node.current)!=null?n:void 0}}const M2e={activatorEvent:null,active:null,activeNode:null,activeNodeRect:null,collisions:null,containerNodeRect:null,draggableNodes:new Map,droppableRects:new Map,droppableContainers:new $d,over:null,dragOverlay:{nodeRef:{current:null},rect:null,setRef:by},scrollableAncestors:[],scrollableAncestorRects:[],measuringConfiguration:Ig,measureDroppableContainers:by,windowRect:null,measuringScheduled:!1},E$={activatorEvent:null,activators:[],active:null,activeNodeRect:null,ariaDescribedById:{draggable:""},dispatch:by,draggableNodes:new Map,over:null,measureDroppableContainers:by},Gh=k.createContext(E$),P$=k.createContext(M2e);function I2e(){return{draggable:{active:null,initialCoordinates:{x:0,y:0},nodes:new Map,translate:{x:0,y:0}},droppable:{containers:new $d}}}function N2e(e,t){switch(t.type){case tn.DragStart:return{...e,draggable:{...e.draggable,initialCoordinates:t.initialCoordinates,active:t.active}};case tn.DragMove:return e.draggable.active?{...e,draggable:{...e.draggable,translate:{x:t.coordinates.x-e.draggable.initialCoordinates.x,y:t.coordinates.y-e.draggable.initialCoordinates.y}}}:e;case tn.DragEnd:case tn.DragCancel:return{...e,draggable:{...e.draggable,active:null,initialCoordinates:{x:0,y:0},translate:{x:0,y:0}}};case tn.RegisterDroppable:{const{element:n}=t,{id:r}=n,i=new $d(e.droppable.containers);return i.set(r,n),{...e,droppable:{...e.droppable,containers:i}}}case tn.SetDroppableDisabled:{const{id:n,key:r,disabled:i}=t,o=e.droppable.containers.get(n);if(!o||r!==o.key)return e;const s=new $d(e.droppable.containers);return s.set(n,{...o,disabled:i}),{...e,droppable:{...e.droppable,containers:s}}}case tn.UnregisterDroppable:{const{id:n,key:r}=t,i=e.droppable.containers.get(n);if(!i||r!==i.key)return e;const o=new $d(e.droppable.containers);return o.delete(n),{...e,droppable:{...e.droppable,containers:o}}}default:return e}}function D2e(e){let{disabled:t}=e;const{active:n,activatorEvent:r,draggableNodes:i}=k.useContext(Gh),o=yy(r),s=yy(n==null?void 0:n.id);return k.useEffect(()=>{if(!t&&!r&&o&&s!=null){if(!_3(o)||document.activeElement===o.target)return;const a=i.get(s);if(!a)return;const{activatorNode:l,node:u}=a;if(!l.current&&!u.current)return;requestAnimationFrame(()=>{for(const c of[l.current,u.current]){if(!c)continue;const d=P_e(c);if(d){d.focus();break}}})}},[r,t,i,s,o]),null}function A$(e,t){let{transform:n,...r}=t;return e!=null&&e.length?e.reduce((i,o)=>o({transform:i,...r}),n):n}function L2e(e){return k.useMemo(()=>({draggable:{...Ig.draggable,...e==null?void 0:e.draggable},droppable:{...Ig.droppable,...e==null?void 0:e.droppable},dragOverlay:{...Ig.dragOverlay,...e==null?void 0:e.dragOverlay}}),[e==null?void 0:e.draggable,e==null?void 0:e.droppable,e==null?void 0:e.dragOverlay])}function $2e(e){let{activeNode:t,measure:n,initialRect:r,config:i=!0}=e;const o=k.useRef(!1),{x:s,y:a}=typeof i=="boolean"?{x:i,y:i}:i;io(()=>{if(!s&&!a||!t){o.current=!1;return}if(o.current||!r)return;const u=t==null?void 0:t.node.current;if(!u||u.isConnected===!1)return;const c=n(u),d=c$(c,r);if(s||(d.x=0),a||(d.y=0),o.current=!0,Math.abs(d.x)>0||Math.abs(d.y)>0){const f=f$(u);f&&f.scrollBy({top:d.y,left:d.x})}},[t,s,a,r,n])}const p1=k.createContext({...Ei,scaleX:1,scaleY:1});var hs;(function(e){e[e.Uninitialized=0]="Uninitialized",e[e.Initializing=1]="Initializing",e[e.Initialized=2]="Initialized"})(hs||(hs={}));const F2e=k.memo(function(t){var n,r,i,o;let{id:s,accessibility:a,autoScroll:l=!0,children:u,sensors:c=R2e,collisionDetection:d=q_e,measuring:f,modifiers:h,...p}=t;const m=k.useReducer(N2e,void 0,I2e),[S,y]=m,[v,g]=N_e(),[b,_]=k.useState(hs.Uninitialized),w=b===hs.Initialized,{draggable:{active:x,nodes:T,translate:P},droppable:{containers:E}}=S,A=x?T.get(x):null,$=k.useRef({initial:null,translated:null}),I=k.useMemo(()=>{var Ct;return x!=null?{id:x,data:(Ct=A==null?void 0:A.data)!=null?Ct:O2e,rect:$}:null},[x,A]),C=k.useRef(null),[R,M]=k.useState(null),[N,O]=k.useState(null),D=Xf(p,Object.values(p)),L=f1("DndDescribedBy",s),j=k.useMemo(()=>E.getEnabled(),[E]),U=L2e(f),{droppableRects:G,measureDroppableContainers:W,measuringScheduled:X}=b2e(j,{dragging:w,dependencies:[P.x,P.y],config:U.droppable}),Y=y2e(T,x),B=k.useMemo(()=>N?Yf(N):null,[N]),H=fa(),Q=S2e(Y,U.draggable.measure);$2e({activeNode:x?T.get(x):null,config:H.layoutShiftCompensation,initialRect:Q,measure:U.draggable.measure});const J=E8(Y,U.draggable.measure,Q),ne=E8(Y?Y.parentElement:null),te=k.useRef({activatorEvent:null,active:null,activeNode:Y,collisionRect:null,collisions:null,droppableRects:G,draggableNodes:T,draggingNode:null,draggingNodeRect:null,droppableContainers:E,over:null,scrollableAncestors:[],scrollAdjustedTranslate:null}),xe=E.getNodeFor((n=te.current.over)==null?void 0:n.id),ve=k2e({measure:U.dragOverlay.measure}),ce=(r=ve.nodeRef.current)!=null?r:Y,De=w?(i=ve.rect)!=null?i:J:null,se=!!(ve.nodeRef.current&&ve.rect),pt=x2e(se?null:J),yn=C$(ce?or(ce):null),Mt=C2e(w?xe??Y:null),ut=A2e(Mt),tt=A$(h,{transform:{x:P.x-pt.x,y:P.y-pt.y,scaleX:1,scaleY:1},activatorEvent:N,active:I,activeNodeRect:J,containerNodeRect:ne,draggingNodeRect:De,over:te.current.over,overlayNodeRect:ve.rect,scrollableAncestors:Mt,scrollableAncestorRects:ut,windowRect:yn}),Ut=B?Bu(B,P):null,sr=T2e(Mt),ni=A8(sr),Lr=A8(sr,[J]),On=Bu(tt,ni),vn=De?Q_e(De,tt):null,Un=I&&vn?d({active:I,collisionRect:vn,droppableRects:G,droppableContainers:j,pointerCoordinates:Ut}):null,Gt=G_e(Un,"id"),[xt,wr]=k.useState(null),$r=se?tt:Bu(tt,Lr),ri=X_e($r,(o=xt==null?void 0:xt.rect)!=null?o:null,J),uo=k.useCallback((Ct,nt)=>{let{sensor:Sn,options:an}=nt;if(C.current==null)return;const Mn=T.get(C.current);if(!Mn)return;const Gn=Ct.nativeEvent,ar=new Sn({active:C.current,activeNode:Mn,event:Gn,options:an,context:te,onStart(Hn){const _n=C.current;if(_n==null)return;const co=T.get(_n);if(!co)return;const{onDragStart:Zo}=D.current,Jo={active:{id:_n,data:co.data,rect:$}};zi.unstable_batchedUpdates(()=>{Zo==null||Zo(Jo),_(hs.Initializing),y({type:tn.DragStart,initialCoordinates:Hn,active:_n}),v({type:"onDragStart",event:Jo})})},onMove(Hn){y({type:tn.DragMove,coordinates:Hn})},onEnd:Ri(tn.DragEnd),onCancel:Ri(tn.DragCancel)});zi.unstable_batchedUpdates(()=>{M(ar),O(Ct.nativeEvent)});function Ri(Hn){return async function(){const{active:co,collisions:Zo,over:Jo,scrollAdjustedTranslate:Al}=te.current;let fo=null;if(co&&Al){const{cancelDrop:qn}=D.current;fo={activatorEvent:Gn,active:co,collisions:Zo,delta:Al,over:Jo},Hn===tn.DragEnd&&typeof qn=="function"&&await Promise.resolve(qn(fo))&&(Hn=tn.DragCancel)}C.current=null,zi.unstable_batchedUpdates(()=>{y({type:Hn}),_(hs.Uninitialized),wr(null),M(null),O(null);const qn=Hn===tn.DragEnd?"onDragEnd":"onDragCancel";if(fo){const ha=D.current[qn];ha==null||ha(fo),v({type:qn,event:fo})}})}}},[T]),bn=k.useCallback((Ct,nt)=>(Sn,an)=>{const Mn=Sn.nativeEvent,Gn=T.get(an);if(C.current!==null||!Gn||Mn.dndKit||Mn.defaultPrevented)return;const ar={active:Gn};Ct(Sn,nt.options,ar)===!0&&(Mn.dndKit={capturedBy:nt.sensor},C.current=an,uo(Sn,nt))},[T,uo]),ii=v2e(c,bn);E2e(c),io(()=>{J&&b===hs.Initializing&&_(hs.Initialized)},[J,b]),k.useEffect(()=>{const{onDragMove:Ct}=D.current,{active:nt,activatorEvent:Sn,collisions:an,over:Mn}=te.current;if(!nt||!Sn)return;const Gn={active:nt,activatorEvent:Sn,collisions:an,delta:{x:On.x,y:On.y},over:Mn};zi.unstable_batchedUpdates(()=>{Ct==null||Ct(Gn),v({type:"onDragMove",event:Gn})})},[On.x,On.y]),k.useEffect(()=>{const{active:Ct,activatorEvent:nt,collisions:Sn,droppableContainers:an,scrollAdjustedTranslate:Mn}=te.current;if(!Ct||C.current==null||!nt||!Mn)return;const{onDragOver:Gn}=D.current,ar=an.get(Gt),Ri=ar&&ar.rect.current?{id:ar.id,rect:ar.rect.current,data:ar.data,disabled:ar.disabled}:null,Hn={active:Ct,activatorEvent:nt,collisions:Sn,delta:{x:Mn.x,y:Mn.y},over:Ri};zi.unstable_batchedUpdates(()=>{wr(Ri),Gn==null||Gn(Hn),v({type:"onDragOver",event:Hn})})},[Gt]),io(()=>{te.current={activatorEvent:N,active:I,activeNode:Y,collisionRect:vn,collisions:Un,droppableRects:G,draggableNodes:T,draggingNode:ce,draggingNodeRect:De,droppableContainers:E,over:xt,scrollableAncestors:Mt,scrollAdjustedTranslate:On},$.current={initial:De,translated:vn}},[I,Y,Un,vn,T,ce,De,G,E,xt,Mt,On]),p2e({...H,delta:P,draggingRect:vn,pointerCoordinates:Ut,scrollableAncestors:Mt,scrollableAncestorRects:ut});const da=k.useMemo(()=>({active:I,activeNode:Y,activeNodeRect:J,activatorEvent:N,collisions:Un,containerNodeRect:ne,dragOverlay:ve,draggableNodes:T,droppableContainers:E,droppableRects:G,over:xt,measureDroppableContainers:W,scrollableAncestors:Mt,scrollableAncestorRects:ut,measuringConfiguration:U,measuringScheduled:X,windowRect:yn}),[I,Y,J,N,Un,ne,ve,T,E,G,xt,W,Mt,ut,U,X,yn]),ki=k.useMemo(()=>({activatorEvent:N,activators:ii,active:I,activeNodeRect:J,ariaDescribedById:{draggable:L},dispatch:y,draggableNodes:T,over:xt,measureDroppableContainers:W}),[N,ii,I,J,y,L,T,xt,W]);return Xe.createElement(u$.Provider,{value:g},Xe.createElement(Gh.Provider,{value:ki},Xe.createElement(P$.Provider,{value:da},Xe.createElement(p1.Provider,{value:ri},u)),Xe.createElement(D2e,{disabled:(a==null?void 0:a.restoreFocus)===!1})),Xe.createElement($_e,{...a,hiddenTextDescribedById:L}));function fa(){const Ct=(R==null?void 0:R.autoScrollEnabled)===!1,nt=typeof l=="object"?l.enabled===!1:l===!1,Sn=w&&!Ct&&!nt;return typeof l=="object"?{...l,enabled:Sn}:{enabled:Sn}}}),B2e=k.createContext(null),k8="button",j2e="Droppable";function V2e(e){let{id:t,data:n,disabled:r=!1,attributes:i}=e;const o=f1(j2e),{activators:s,activatorEvent:a,active:l,activeNodeRect:u,ariaDescribedById:c,draggableNodes:d,over:f}=k.useContext(Gh),{role:h=k8,roleDescription:p="draggable",tabIndex:m=0}=i??{},S=(l==null?void 0:l.id)===t,y=k.useContext(S?p1:B2e),[v,g]=my(),[b,_]=my(),w=P2e(s,t),x=Xf(n);io(()=>(d.set(t,{id:t,key:o,node:v,activatorNode:b,data:x}),()=>{const P=d.get(t);P&&P.key===o&&d.delete(t)}),[d,t]);const T=k.useMemo(()=>({role:h,tabIndex:m,"aria-disabled":r,"aria-pressed":S&&h===k8?!0:void 0,"aria-roledescription":p,"aria-describedby":c.draggable}),[r,h,m,S,p,c.draggable]);return{active:l,activatorEvent:a,activeNodeRect:u,attributes:T,isDragging:S,listeners:r?void 0:w,node:v,over:f,setNodeRef:g,setActivatorNodeRef:_,transform:y}}function z2e(){return k.useContext(P$)}const U2e="Droppable",G2e={timeout:25};function H2e(e){let{data:t,disabled:n=!1,id:r,resizeObserverConfig:i}=e;const o=f1(U2e),{active:s,dispatch:a,over:l,measureDroppableContainers:u}=k.useContext(Gh),c=k.useRef({disabled:n}),d=k.useRef(!1),f=k.useRef(null),h=k.useRef(null),{disabled:p,updateMeasurementsFor:m,timeout:S}={...G2e,...i},y=Xf(m??r),v=k.useCallback(()=>{if(!d.current){d.current=!0;return}h.current!=null&&clearTimeout(h.current),h.current=setTimeout(()=>{u(Array.isArray(y.current)?y.current:[y.current]),h.current=null},S)},[S]),g=h1({callback:v,disabled:p||!s}),b=k.useCallback((T,P)=>{g&&(P&&(g.unobserve(P),d.current=!1),T&&g.observe(T))},[g]),[_,w]=my(b),x=Xf(t);return k.useEffect(()=>{!g||!_.current||(g.disconnect(),d.current=!1,g.observe(_.current))},[_,g]),io(()=>(a({type:tn.RegisterDroppable,element:{id:r,key:o,disabled:n,node:_,rect:f,data:x}}),()=>a({type:tn.UnregisterDroppable,key:o,id:r})),[r]),k.useEffect(()=>{n!==c.current.disabled&&(a({type:tn.SetDroppableDisabled,id:r,key:o,disabled:n}),c.current.disabled=n)},[r,o,n,a]),{active:s,rect:f,isOver:(l==null?void 0:l.id)===r,node:_,over:l,setNodeRef:w}}function q2e(e){let{animation:t,children:n}=e;const[r,i]=k.useState(null),[o,s]=k.useState(null),a=yy(n);return!n&&!r&&a&&i(a),io(()=>{if(!o)return;const l=r==null?void 0:r.key,u=r==null?void 0:r.props.id;if(l==null||u==null){i(null);return}Promise.resolve(t(u,o)).then(()=>{i(null)})},[t,r,o]),Xe.createElement(Xe.Fragment,null,n,r?k.cloneElement(r,{ref:s}):null)}const W2e={x:0,y:0,scaleX:1,scaleY:1};function K2e(e){let{children:t}=e;return Xe.createElement(Gh.Provider,{value:E$},Xe.createElement(p1.Provider,{value:W2e},t))}const X2e={position:"fixed",touchAction:"none"},Y2e=e=>_3(e)?"transform 250ms ease":void 0,Q2e=k.forwardRef((e,t)=>{let{as:n,activatorEvent:r,adjustScale:i,children:o,className:s,rect:a,style:l,transform:u,transition:c=Y2e}=e;if(!a)return null;const d=i?u:{...u,scaleX:1,scaleY:1},f={...X2e,width:a.width,height:a.height,top:a.top,left:a.left,transform:Qf.Transform.toString(d),transformOrigin:i&&r?j_e(r,a):void 0,transition:typeof c=="function"?c(r):c,...l};return Xe.createElement(n,{className:s,style:f,ref:t},o)}),Z2e=e=>t=>{let{active:n,dragOverlay:r}=t;const i={},{styles:o,className:s}=e;if(o!=null&&o.active)for(const[a,l]of Object.entries(o.active))l!==void 0&&(i[a]=n.node.style.getPropertyValue(a),n.node.style.setProperty(a,l));if(o!=null&&o.dragOverlay)for(const[a,l]of Object.entries(o.dragOverlay))l!==void 0&&r.node.style.setProperty(a,l);return s!=null&&s.active&&n.node.classList.add(s.active),s!=null&&s.dragOverlay&&r.node.classList.add(s.dragOverlay),function(){for(const[l,u]of Object.entries(i))n.node.style.setProperty(l,u);s!=null&&s.active&&n.node.classList.remove(s.active)}},J2e=e=>{let{transform:{initial:t,final:n}}=e;return[{transform:Qf.Transform.toString(t)},{transform:Qf.Transform.toString(n)}]},ewe={duration:250,easing:"ease",keyframes:J2e,sideEffects:Z2e({styles:{active:{opacity:"0"}}})};function twe(e){let{config:t,draggableNodes:n,droppableContainers:r,measuringConfiguration:i}=e;return d1((o,s)=>{if(t===null)return;const a=n.get(o);if(!a)return;const l=a.node.current;if(!l)return;const u=T$(s);if(!u)return;const{transform:c}=or(s).getComputedStyle(s),d=d$(c);if(!d)return;const f=typeof t=="function"?t:nwe(t);return v$(l,i.draggable.measure),f({active:{id:o,data:a.data,node:l,rect:i.draggable.measure(l)},draggableNodes:n,dragOverlay:{node:s,rect:i.dragOverlay.measure(u)},droppableContainers:r,measuringConfiguration:i,transform:d})})}function nwe(e){const{duration:t,easing:n,sideEffects:r,keyframes:i}={...ewe,...e};return o=>{let{active:s,dragOverlay:a,transform:l,...u}=o;if(!t)return;const c={x:a.rect.left-s.rect.left,y:a.rect.top-s.rect.top},d={scaleX:l.scaleX!==1?s.rect.width*l.scaleX/a.rect.width:1,scaleY:l.scaleY!==1?s.rect.height*l.scaleY/a.rect.height:1},f={x:l.x-c.x,y:l.y-c.y,...d},h=i({...u,active:s,dragOverlay:a,transform:{initial:l,final:f}}),[p]=h,m=h[h.length-1];if(JSON.stringify(p)===JSON.stringify(m))return;const S=r==null?void 0:r({active:s,dragOverlay:a,...u}),y=a.node.animate(h,{duration:t,easing:n,fill:"forwards"});return new Promise(v=>{y.onfinish=()=>{S==null||S(),v()}})}}let R8=0;function rwe(e){return k.useMemo(()=>{if(e!=null)return R8++,R8},[e])}const iwe=Xe.memo(e=>{let{adjustScale:t=!1,children:n,dropAnimation:r,style:i,transition:o,modifiers:s,wrapperElement:a="div",className:l,zIndex:u=999}=e;const{activatorEvent:c,active:d,activeNodeRect:f,containerNodeRect:h,draggableNodes:p,droppableContainers:m,dragOverlay:S,over:y,measuringConfiguration:v,scrollableAncestors:g,scrollableAncestorRects:b,windowRect:_}=z2e(),w=k.useContext(p1),x=rwe(d==null?void 0:d.id),T=A$(s,{activatorEvent:c,active:d,activeNodeRect:f,containerNodeRect:h,draggingNodeRect:S.rect,over:y,overlayNodeRect:S.rect,scrollableAncestors:g,scrollableAncestorRects:b,transform:w,windowRect:_}),P=T3(f),E=twe({config:r,draggableNodes:p,droppableContainers:m,measuringConfiguration:v}),A=P?S.setRef:void 0;return Xe.createElement(K2e,null,Xe.createElement(q2e,{animation:E},d&&x?Xe.createElement(Q2e,{key:x,id:d.id,ref:A,as:a,activatorEvent:c,adjustScale:t,className:l,transition:o,rect:P,style:{zIndex:u,...i},transform:T},n):null))}),owe=e=>{let{activatorEvent:t,draggingNodeRect:n,transform:r}=e;if(n&&t){const i=Yf(t);if(!i)return r;const o=i.x-n.left,s=i.y-n.top;return{...r,x:r.x+o-n.width/2,y:r.y+s-n.height/2}}return r},k$=()=>uk(),G4e=tk,Yp=28,O8={w:Yp,h:Yp,maxW:Yp,maxH:Yp,shadow:"dark-lg",borderRadius:"lg",opacity:.3,bg:"base.800",color:"base.50",_dark:{borderColor:"base.200",bg:"base.900",color:"base.100"}},swe=e=>{if(!e.dragData)return null;if(e.dragData.payloadType==="IMAGE_DTO"){const{thumbnail_url:t,width:n,height:r}=e.dragData.payload.imageDTO;return K.jsx(d3,{sx:{position:"relative",width:"100%",height:"100%",display:"flex",alignItems:"center",justifyContent:"center",userSelect:"none",cursor:"none"},children:K.jsx(c3,{sx:{...O8},objectFit:"contain",src:t,width:n,height:r})})}return e.dragData.payloadType==="IMAGE_NAMES"?K.jsxs(f3,{sx:{cursor:"none",userSelect:"none",position:"relative",alignItems:"center",justifyContent:"center",flexDir:"column",...O8},children:[K.jsx(X2,{children:e.dragData.payload.image_names.length}),K.jsx(X2,{size:"sm",children:"Images"})]}):null},awe=k.memo(swe);function H4e(e){return H2e(e)}function q4e(e){return V2e(e)}const W4e=(e,t)=>{if(!e||!(t!=null&&t.data.current))return!1;const{actionType:n}=e,{payloadType:r}=t.data.current;if(e.id===t.data.current.id)return!1;switch(n){case"SET_CURRENT_IMAGE":return r==="IMAGE_DTO";case"SET_INITIAL_IMAGE":return r==="IMAGE_DTO";case"SET_CONTROLNET_IMAGE":return r==="IMAGE_DTO";case"SET_CANVAS_INITIAL_IMAGE":return r==="IMAGE_DTO";case"SET_NODES_IMAGE":return r==="IMAGE_DTO";case"SET_MULTI_NODES_IMAGE":return r==="IMAGE_DTO"||"IMAGE_NAMES";case"ADD_TO_BATCH":return r==="IMAGE_DTO"||"IMAGE_NAMES";case"MOVE_BOARD":{if(!(r==="IMAGE_DTO"||"IMAGE_NAMES"))return!1;if(r==="IMAGE_DTO"){const{imageDTO:o}=t.data.current.payload,s=o.board_id,a=e.context.boardId;return!(s===a)&&(s?!0:a)}return r!=="IMAGE_NAMES"}default:return!1}};function lwe(e){return K.jsx(F2e,{...e})}const uwe=e=>{const[t,n]=k.useState(null),r=k$(),i=k.useCallback(u=>{console.log("dragStart",u.active.data.current);const c=u.active.data.current;c&&n(c)},[]),o=k.useCallback(u=>{var d;console.log("dragEnd",u.active.data.current);const c=(d=u.over)==null?void 0:d.data.current;!t||!c||(r(rN({overData:c,activeData:t})),n(null))},[t,r]),s=S8(w$,{activationConstraint:{distance:10}}),a=S8(x$,{activationConstraint:{distance:10}}),l=F_e(s,a);return K.jsxs(lwe,{onDragStart:i,onDragEnd:o,sensors:l,collisionDetection:K_e,children:[e.children,K.jsx(iwe,{dropAnimation:null,modifiers:[owe],children:K.jsx(Zbe,{children:t&&K.jsx(Gbe.div,{layout:!0,initial:{opacity:0,scale:.7},animate:{opacity:1,scale:1,transition:{duration:.1}},children:K.jsx(awe,{dragData:t})},"overlay-drag-image")})})]})},cwe=k.memo(uwe),dwe=k.createContext({isOpen:!1,onClose:()=>{},onClickAddToBoard:()=>{},handleAddToBoard:()=>{}}),fwe=e=>{const[t,n]=k.useState(),{isOpen:r,onOpen:i,onClose:o}=sSe(),s=k$(),a=k.useCallback(()=>{n(void 0),o()},[o]),l=k.useCallback(c=>{c&&(n(c),i())},[n,i]),u=k.useCallback(c=>{t&&(s(he.endpoints.addImageToBoard.initiate({imageDTO:t,board_id:c})),a())},[s,a,t]);return K.jsx(dwe.Provider,{value:{isOpen:r,image:t,onClose:a,onClickAddToBoard:l,handleAddToBoard:u},children:e.children})},hwe=k.lazy(()=>q9(()=>import("./App-44cdaaf3.js"),["./App-44cdaaf3.js","./MantineProvider-b20a2267.js","./App-6125620a.css"],import.meta.url)),pwe=k.lazy(()=>q9(()=>import("./ThemeLocaleProvider-a4dc3f38.js"),["./ThemeLocaleProvider-a4dc3f38.js","./MantineProvider-b20a2267.js","./ThemeLocaleProvider-5b992bc7.css"],import.meta.url)),gwe=({apiUrl:e,token:t,config:n,headerComponent:r,middleware:i})=>(k.useEffect(()=>(t&&Cf.set(t),e&&Tf.set(e),GI(),i&&i.length>0?d2(v8(),...i):d2(v8()),()=>{Tf.set(void 0),Cf.set(void 0)}),[e,t,i]),K.jsx(Xe.StrictMode,{children:K.jsx(vV,{store:Qpe,children:K.jsx(Xe.Suspense,{fallback:K.jsx(cSe,{}),children:K.jsx(pwe,{children:K.jsx(cwe,{children:K.jsx(fwe,{children:K.jsx(hwe,{config:n,headerComponent:r})})})})})})})),mwe=k.memo(gwe);TS.createRoot(document.getElementById("root")).render(K.jsx(mwe,{}));export{pD as $,K as A,ti as B,jt as C,Nu as D,Vn as E,fi as F,nre as G,br as H,Ms as I,$i as J,Y3e as K,xM as L,yre as M,Wre as N,fte as O,ore as P,ic as Q,Vge as R,df as S,Tl as T,al as U,aD as V,k4e as W,E4e as X,Zbe as Y,Gbe as Z,B4e as _,eR as a,G_ as a$,BL as a0,vD as a1,P4e as a2,A4e as a3,jge as a4,Bge as a5,R4e as a6,Da as a7,ll as a8,im as a9,f3 as aA,X2 as aB,_4e as aC,zN as aD,d3e as aE,Q4 as aF,_Ce as aG,zi as aH,jC as aI,iF as aJ,Swe as aK,vwe as aL,bwe as aM,Ee as aN,Pa as aO,$3e as aP,ZI as aQ,D3e as aR,L3e as aS,I3e as aT,k3e as aU,jpe as aV,H4e as aW,W4e as aX,M3e as aY,G3e as aZ,s3e as a_,NV as aa,Xe as ab,n8 as ac,mye as ad,F4e as ae,Mo as af,oD as ag,F1e as ah,I4e as ai,M2 as aj,T4e as ak,$4e as al,Jn as am,yC as an,_0 as ao,G4e as ap,Z3e as aq,Th as ar,iI as as,RI as at,J0 as au,k$ as av,A5e as aw,Ft as ax,Ha as ay,d3 as az,Ex as b,Kle as b$,N3e as b0,c3 as b1,lSe as b2,Oxe as b3,Ss as b4,V5e as b5,hp as b6,Ege as b7,BC as b8,eD as b9,Wwe as bA,Bwe as bB,Xwe as bC,oue as bD,xE as bE,v5e as bF,b5e as bG,S5e as bH,jwe as bI,_5e as bJ,Vwe as bK,w5e as bL,ue as bM,dwe as bN,a3e as bO,vJ as bP,h3e as bQ,BO as bR,uCe as bS,IO as bT,H_ as bU,q4e as bV,C4e as bW,U3e as bX,u3e as bY,c3e as bZ,Os as b_,Age as ba,F3 as bb,V3e as bc,j3e as bd,ywe as be,Twe as bf,Ewe as bg,Pwe as bh,Awe as bi,Zwe as bj,Jwe as bk,p5e as bl,g5e as bm,Iwe as bn,oxe as bo,Rwe as bp,Hwe as bq,Lwe as br,sue as bs,Owe as bt,exe as bu,kwe as bv,cxe as bw,Nwe as bx,qwe as by,Dwe as bz,RU as c,Ywe as c$,i3e as c0,o3e as c1,n3e as c2,sSe as c3,km as c4,S4e as c5,W5e as c6,kxe as c7,Ele as c8,C5e as c9,P5e as cA,AO as cB,A3e as cC,T3e as cD,E3e as cE,P3e as cF,_xe as cG,dxe as cH,yxe as cI,Qwe as cJ,k5e as cK,hl as cL,O5e as cM,xo as cN,pce as cO,Za as cP,zwe as cQ,Ph as cR,J5e as cS,_we as cT,m5e as cU,X5e as cV,m4e as cW,fe as cX,xf as cY,u4e as cZ,nae as c_,H3e as ca,N7 as cb,nN as cc,U5e as cd,r3e as ce,p3e as cf,P7 as cg,FO as ch,Mwe as ci,Lxe as cj,zn as ck,N5e as cl,G5e as cm,z5e as cn,ile as co,I5e as cp,$5e as cq,F5e as cr,TQ as cs,Tae as ct,Eae as cu,Pxe as cv,Dxe as cw,L5e as cx,AQ as cy,Q3e as cz,vX as d,l4e as d$,Y5e as d0,bQ as d1,e4e as d2,kO as d3,wxe as d4,EQ as d5,Ui as d6,Kwe as d7,axe as d8,Cwe as d9,_T as dA,_3e as dB,w3e as dC,x3e as dD,uJ as dE,C3e as dF,E7 as dG,y3e as dH,b3e as dI,g3e as dJ,Ppe as dK,m3e as dL,vxe as dM,bxe as dN,gxe as dO,mxe as dP,pxe as dQ,d4e as dR,i4e as dS,j5e as dT,r4e as dU,g4e as dV,c4e as dW,B5e as dX,s4e as dY,o4e as dZ,t4e as d_,uY as da,uxe as db,y5e as dc,xxe as dd,h5e as de,Sce as df,Txe as dg,he as dh,Kn as di,K5e as dj,W3e as dk,K3e as dl,L7 as dm,Z5e as dn,q3e as dp,gO as dq,Sxe as dr,lY as ds,Fwe as dt,Q5e as du,ST as dv,S3e as dw,qx as dx,lJ as dy,Yl as dz,eO as e,Wxe as e$,xwe as e0,n4e as e1,a4e as e2,wwe as e3,qM as e4,$x as e5,f4e as e6,Bm as e7,pe as e8,h4e as e9,Pe as eA,ACe as eB,WCe as eC,qCe as eD,aCe as eE,$Ce as eF,XCe as eG,Nle as eH,Jxe as eI,xCe as eJ,nd as eK,bCe as eL,eCe as eM,nv as eN,wCe as eO,Yxe as eP,SCe as eQ,Qxe as eR,rCe as eS,jxe as eT,Bxe as eU,Fxe as eV,KCe as eW,DO as eX,Cf as eY,Hxe as eZ,qxe as e_,c2 as ea,$we as eb,p4e as ec,tk as ed,uk as ee,f5e as ef,o5e as eg,s5e as eh,a5e as ei,II as ej,c5e as ek,d5e as el,Df as em,w0 as en,t5e as eo,zpe as ep,J3e as eq,e5e as er,r5e as es,n5e as et,i5e as eu,u5e as ev,Gie as ew,nI as ex,aN as ey,EF as ez,lR as f,x4e as f$,HCe as f0,oCe as f1,iCe as f2,HQ as f3,GCe as f4,Ile as f5,tCe as f6,xpe as f7,Epe as f8,dCe as f9,Kxe as fA,ZCe as fB,lCe as fC,Mle as fD,kle as fE,Rle as fF,Ole as fG,Uxe as fH,Cxe as fI,CQ as fJ,fxe as fK,Gxe as fL,pCe as fM,JCe as fN,txe as fO,nxe as fP,rxe as fQ,ixe as fR,gCe as fS,b4e as fT,Rxe as fU,RO as fV,Ixe as fW,Mxe as fX,Nxe as fY,sY as fZ,Cle as f_,fCe as fa,kCe as fb,PCe as fc,CCe as fd,Vxe as fe,zxe as ff,H5e as fg,q5e as fh,vCe as fi,cCe as fj,RCe as fk,LCe as fl,OCe as fm,sCe as fn,Zxe as fo,UCe as fp,zCe as fq,NCe as fr,MCe as fs,ICe as ft,e3e as fu,jCe as fv,t3e as fw,yCe as fx,mCe as fy,Xxe as fz,dX as g,sD as g0,L4e as g1,N4e as g2,O4e as g3,D4e as g4,Wi as g5,M4e as g6,w4e as g7,pye as g8,rye as g9,j4e as ga,z4e as gb,U4e as gc,yR as h,vr as i,yc as j,b0 as k,gn as l,v0 as m,hh as n,Ci as o,na as p,m0 as q,oo as r,gh as s,gb as t,wx as u,sR as v,Rx as w,WR as x,uR as y,k as z}; diff --git a/invokeai/frontend/web/dist/assets/index-2c171c8f.js b/invokeai/frontend/web/dist/assets/index-2c171c8f.js new file mode 100644 index 0000000000..4b38e2b112 --- /dev/null +++ b/invokeai/frontend/web/dist/assets/index-2c171c8f.js @@ -0,0 +1,151 @@ +function $7(e,t){for(var n=0;nr[i]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))r(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const s of o.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&r(s)}).observe(document,{childList:!0,subtree:!0});function n(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(i){if(i.ep)return;i.ep=!0;const o=n(i);fetch(i.href,o)}})();var Ze=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Tc(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function dQ(e){if(e.__esModule)return e;var t=e.default;if(typeof t=="function"){var n=function r(){if(this instanceof r){var i=[null];i.push.apply(i,arguments);var o=Function.bind.apply(t,i);return new o}return t.apply(this,arguments)};n.prototype=t.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(e).forEach(function(r){var i=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(n,r,i.get?i:{enumerable:!0,get:function(){return e[r]}})}),n}var F7={exports:{}},D_={},B7={exports:{}},xt={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var dm=Symbol.for("react.element"),fQ=Symbol.for("react.portal"),hQ=Symbol.for("react.fragment"),pQ=Symbol.for("react.strict_mode"),gQ=Symbol.for("react.profiler"),mQ=Symbol.for("react.provider"),yQ=Symbol.for("react.context"),vQ=Symbol.for("react.forward_ref"),_Q=Symbol.for("react.suspense"),bQ=Symbol.for("react.memo"),SQ=Symbol.for("react.lazy"),VP=Symbol.iterator;function wQ(e){return e===null||typeof e!="object"?null:(e=VP&&e[VP]||e["@@iterator"],typeof e=="function"?e:null)}var U7={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},z7=Object.assign,V7={};function Kf(e,t,n){this.props=e,this.context=t,this.refs=V7,this.updater=n||U7}Kf.prototype.isReactComponent={};Kf.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};Kf.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function j7(){}j7.prototype=Kf.prototype;function h4(e,t,n){this.props=e,this.context=t,this.refs=V7,this.updater=n||U7}var p4=h4.prototype=new j7;p4.constructor=h4;z7(p4,Kf.prototype);p4.isPureReactComponent=!0;var jP=Array.isArray,G7=Object.prototype.hasOwnProperty,g4={current:null},H7={key:!0,ref:!0,__self:!0,__source:!0};function W7(e,t,n){var r,i={},o=null,s=null;if(t!=null)for(r in t.ref!==void 0&&(s=t.ref),t.key!==void 0&&(o=""+t.key),t)G7.call(t,r)&&!H7.hasOwnProperty(r)&&(i[r]=t[r]);var a=arguments.length-2;if(a===1)i.children=n;else if(1>>1,Z=$[q];if(0>>1;qi(se,G))lei(W,se)?($[q]=W,$[le]=G,q=le):($[q]=se,$[ie]=G,q=ie);else if(lei(W,G))$[q]=W,$[le]=G,q=le;else break e}}return j}function i($,j){var G=$.sortIndex-j.sortIndex;return G!==0?G:$.id-j.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var s=Date,a=s.now();e.unstable_now=function(){return s.now()-a}}var l=[],u=[],d=1,f=null,h=3,g=!1,m=!1,v=!1,x=typeof setTimeout=="function"?setTimeout:null,_=typeof clearTimeout=="function"?clearTimeout:null,b=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function y($){for(var j=n(u);j!==null;){if(j.callback===null)r(u);else if(j.startTime<=$)r(u),j.sortIndex=j.expirationTime,t(l,j);else break;j=n(u)}}function S($){if(v=!1,y($),!m)if(n(l)!==null)m=!0,D(C);else{var j=n(u);j!==null&&U(S,j.startTime-$)}}function C($,j){m=!1,v&&(v=!1,_(P),P=-1),g=!0;var G=h;try{for(y(j),f=n(l);f!==null&&(!(f.expirationTime>j)||$&&!M());){var q=f.callback;if(typeof q=="function"){f.callback=null,h=f.priorityLevel;var Z=q(f.expirationTime<=j);j=e.unstable_now(),typeof Z=="function"?f.callback=Z:f===n(l)&&r(l),y(j)}else r(l);f=n(l)}if(f!==null)var ee=!0;else{var ie=n(u);ie!==null&&U(S,ie.startTime-j),ee=!1}return ee}finally{f=null,h=G,g=!1}}var T=!1,E=null,P=-1,k=5,O=-1;function M(){return!(e.unstable_now()-O$||125<$?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):k=0<$?Math.floor(1e3/$):5},e.unstable_getCurrentPriorityLevel=function(){return h},e.unstable_getFirstCallbackNode=function(){return n(l)},e.unstable_next=function($){switch(h){case 1:case 2:case 3:var j=3;break;default:j=h}var G=h;h=j;try{return $()}finally{h=G}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=function(){},e.unstable_runWithPriority=function($,j){switch($){case 1:case 2:case 3:case 4:case 5:break;default:$=3}var G=h;h=$;try{return j()}finally{h=G}},e.unstable_scheduleCallback=function($,j,G){var q=e.unstable_now();switch(typeof G=="object"&&G!==null?(G=G.delay,G=typeof G=="number"&&0q?($.sortIndex=G,t(u,$),n(l)===null&&$===n(u)&&(v?(_(P),P=-1):v=!0,U(S,G-q))):($.sortIndex=Z,t(l,$),m||g||(m=!0,D(C))),$},e.unstable_shouldYield=M,e.unstable_wrapCallback=function($){var j=h;return function(){var G=h;h=j;try{return $.apply(this,arguments)}finally{h=G}}}})(Y7);X7.exports=Y7;var MQ=X7.exports;/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Q7=L,no=MQ;function ge(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),RC=Object.prototype.hasOwnProperty,NQ=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,WP={},qP={};function LQ(e){return RC.call(qP,e)?!0:RC.call(WP,e)?!1:NQ.test(e)?qP[e]=!0:(WP[e]=!0,!1)}function DQ(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function $Q(e,t,n,r){if(t===null||typeof t>"u"||DQ(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Si(e,t,n,r,i,o,s){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=i,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=s}var Vr={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Vr[e]=new Si(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Vr[t]=new Si(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Vr[e]=new Si(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Vr[e]=new Si(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){Vr[e]=new Si(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Vr[e]=new Si(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Vr[e]=new Si(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Vr[e]=new Si(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Vr[e]=new Si(e,5,!1,e.toLowerCase(),null,!1,!1)});var y4=/[\-:]([a-z])/g;function v4(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(y4,v4);Vr[t]=new Si(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(y4,v4);Vr[t]=new Si(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(y4,v4);Vr[t]=new Si(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Vr[e]=new Si(e,1,!1,e.toLowerCase(),null,!1,!1)});Vr.xlinkHref=new Si("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Vr[e]=new Si(e,1,!1,e.toLowerCase(),null,!0,!0)});function _4(e,t,n,r){var i=Vr.hasOwnProperty(t)?Vr[t]:null;(i!==null?i.type!==0:r||!(2a||i[s]!==o[a]){var l=` +`+i[s].replace(" at new "," at ");return e.displayName&&l.includes("")&&(l=l.replace("",e.displayName)),l}while(1<=s&&0<=a);break}}}finally{zw=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Sp(e):""}function FQ(e){switch(e.tag){case 5:return Sp(e.type);case 16:return Sp("Lazy");case 13:return Sp("Suspense");case 19:return Sp("SuspenseList");case 0:case 2:case 15:return e=Vw(e.type,!1),e;case 11:return e=Vw(e.type.render,!1),e;case 1:return e=Vw(e.type,!0),e;default:return""}}function MC(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Dd:return"Fragment";case Ld:return"Portal";case OC:return"Profiler";case b4:return"StrictMode";case kC:return"Suspense";case IC:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case eM:return(e.displayName||"Context")+".Consumer";case J7:return(e._context.displayName||"Context")+".Provider";case S4:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case w4:return t=e.displayName||null,t!==null?t:MC(e.type)||"Memo";case Sl:t=e._payload,e=e._init;try{return MC(e(t))}catch{}}return null}function BQ(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return MC(t);case 8:return t===b4?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function Xl(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function nM(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function UQ(e){var t=nM(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var i=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return i.call(this)},set:function(s){r=""+s,o.call(this,s)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(s){r=""+s},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function u0(e){e._valueTracker||(e._valueTracker=UQ(e))}function rM(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=nM(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Wv(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function NC(e,t){var n=t.checked;return On({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function XP(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=Xl(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function iM(e,t){t=t.checked,t!=null&&_4(e,"checked",t,!1)}function LC(e,t){iM(e,t);var n=Xl(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?DC(e,t.type,n):t.hasOwnProperty("defaultValue")&&DC(e,t.type,Xl(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function YP(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function DC(e,t,n){(t!=="number"||Wv(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var wp=Array.isArray;function Jd(e,t,n,r){if(e=e.options,t){t={};for(var i=0;i"+t.valueOf().toString()+"",t=c0.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Jp(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var kp={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},zQ=["Webkit","ms","Moz","O"];Object.keys(kp).forEach(function(e){zQ.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),kp[t]=kp[e]})});function lM(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||kp.hasOwnProperty(e)&&kp[e]?(""+t).trim():t+"px"}function uM(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,i=lM(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,i):e[n]=i}}var VQ=On({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function BC(e,t){if(t){if(VQ[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(ge(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(ge(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(ge(61))}if(t.style!=null&&typeof t.style!="object")throw Error(ge(62))}}function UC(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var zC=null;function x4(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var VC=null,ef=null,tf=null;function JP(e){if(e=pm(e)){if(typeof VC!="function")throw Error(ge(280));var t=e.stateNode;t&&(t=z_(t),VC(e.stateNode,e.type,t))}}function cM(e){ef?tf?tf.push(e):tf=[e]:ef=e}function dM(){if(ef){var e=ef,t=tf;if(tf=ef=null,JP(e),t)for(e=0;e>>=0,e===0?32:31-(JQ(e)/eZ|0)|0}var d0=64,f0=4194304;function xp(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Yv(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,i=e.suspendedLanes,o=e.pingedLanes,s=n&268435455;if(s!==0){var a=s&~i;a!==0?r=xp(a):(o&=s,o!==0&&(r=xp(o)))}else s=n&~i,s!==0?r=xp(s):o!==0&&(r=xp(o));if(r===0)return 0;if(t!==0&&t!==r&&!(t&i)&&(i=r&-r,o=t&-t,i>=o||i===16&&(o&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function fm(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-ss(t),e[t]=n}function iZ(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=Mp),l8=String.fromCharCode(32),u8=!1;function kM(e,t){switch(e){case"keyup":return IZ.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function IM(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var $d=!1;function NZ(e,t){switch(e){case"compositionend":return IM(t);case"keypress":return t.which!==32?null:(u8=!0,l8);case"textInput":return e=t.data,e===l8&&u8?null:e;default:return null}}function LZ(e,t){if($d)return e==="compositionend"||!k4&&kM(e,t)?(e=RM(),fv=P4=kl=null,$d=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=h8(n)}}function DM(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?DM(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function $M(){for(var e=window,t=Wv();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Wv(e.document)}return t}function I4(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function GZ(e){var t=$M(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&DM(n.ownerDocument.documentElement,n)){if(r!==null&&I4(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var i=n.textContent.length,o=Math.min(r.start,i);r=r.end===void 0?o:Math.min(r.end,i),!e.extend&&o>r&&(i=r,r=o,o=i),i=p8(n,o);var s=p8(n,r);i&&s&&(e.rangeCount!==1||e.anchorNode!==i.node||e.anchorOffset!==i.offset||e.focusNode!==s.node||e.focusOffset!==s.offset)&&(t=t.createRange(),t.setStart(i.node,i.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(s.node,s.offset)):(t.setEnd(s.node,s.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,Fd=null,KC=null,Lp=null,XC=!1;function g8(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;XC||Fd==null||Fd!==Wv(r)||(r=Fd,"selectionStart"in r&&I4(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Lp&&og(Lp,r)||(Lp=r,r=Jv(KC,"onSelect"),0zd||(e.current=t3[zd],t3[zd]=null,zd--)}function ln(e,t){zd++,t3[zd]=e.current,e.current=t}var Yl={},ni=cu(Yl),Li=cu(!1),uc=Yl;function Cf(e,t){var n=e.type.contextTypes;if(!n)return Yl;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var i={},o;for(o in n)i[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function Di(e){return e=e.childContextTypes,e!=null}function t1(){pn(Li),pn(ni)}function w8(e,t,n){if(ni.current!==Yl)throw Error(ge(168));ln(ni,t),ln(Li,n)}function WM(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var i in r)if(!(i in t))throw Error(ge(108,BQ(e)||"Unknown",i));return On({},n,r)}function n1(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Yl,uc=ni.current,ln(ni,e),ln(Li,Li.current),!0}function x8(e,t,n){var r=e.stateNode;if(!r)throw Error(ge(169));n?(e=WM(e,t,uc),r.__reactInternalMemoizedMergedChildContext=e,pn(Li),pn(ni),ln(ni,e)):pn(Li),ln(Li,n)}var Ta=null,V_=!1,nx=!1;function qM(e){Ta===null?Ta=[e]:Ta.push(e)}function nJ(e){V_=!0,qM(e)}function du(){if(!nx&&Ta!==null){nx=!0;var e=0,t=Gt;try{var n=Ta;for(Gt=1;e>=s,i-=s,Pa=1<<32-ss(t)+i|n<P?(k=E,E=null):k=E.sibling;var O=h(_,E,y[P],S);if(O===null){E===null&&(E=k);break}e&&E&&O.alternate===null&&t(_,E),b=o(O,b,P),T===null?C=O:T.sibling=O,T=O,E=k}if(P===y.length)return n(_,E),_n&&Bu(_,P),C;if(E===null){for(;PP?(k=E,E=null):k=E.sibling;var M=h(_,E,O.value,S);if(M===null){E===null&&(E=k);break}e&&E&&M.alternate===null&&t(_,E),b=o(M,b,P),T===null?C=M:T.sibling=M,T=M,E=k}if(O.done)return n(_,E),_n&&Bu(_,P),C;if(E===null){for(;!O.done;P++,O=y.next())O=f(_,O.value,S),O!==null&&(b=o(O,b,P),T===null?C=O:T.sibling=O,T=O);return _n&&Bu(_,P),C}for(E=r(_,E);!O.done;P++,O=y.next())O=g(E,_,P,O.value,S),O!==null&&(e&&O.alternate!==null&&E.delete(O.key===null?P:O.key),b=o(O,b,P),T===null?C=O:T.sibling=O,T=O);return e&&E.forEach(function(V){return t(_,V)}),_n&&Bu(_,P),C}function x(_,b,y,S){if(typeof y=="object"&&y!==null&&y.type===Dd&&y.key===null&&(y=y.props.children),typeof y=="object"&&y!==null){switch(y.$$typeof){case l0:e:{for(var C=y.key,T=b;T!==null;){if(T.key===C){if(C=y.type,C===Dd){if(T.tag===7){n(_,T.sibling),b=i(T,y.props.children),b.return=_,_=b;break e}}else if(T.elementType===C||typeof C=="object"&&C!==null&&C.$$typeof===Sl&&O8(C)===T.type){n(_,T.sibling),b=i(T,y.props),b.ref=Zh(_,T,y),b.return=_,_=b;break e}n(_,T);break}else t(_,T);T=T.sibling}y.type===Dd?(b=nc(y.props.children,_.mode,S,y.key),b.return=_,_=b):(S=bv(y.type,y.key,y.props,null,_.mode,S),S.ref=Zh(_,b,y),S.return=_,_=S)}return s(_);case Ld:e:{for(T=y.key;b!==null;){if(b.key===T)if(b.tag===4&&b.stateNode.containerInfo===y.containerInfo&&b.stateNode.implementation===y.implementation){n(_,b.sibling),b=i(b,y.children||[]),b.return=_,_=b;break e}else{n(_,b);break}else t(_,b);b=b.sibling}b=cx(y,_.mode,S),b.return=_,_=b}return s(_);case Sl:return T=y._init,x(_,b,T(y._payload),S)}if(wp(y))return m(_,b,y,S);if(qh(y))return v(_,b,y,S);_0(_,y)}return typeof y=="string"&&y!==""||typeof y=="number"?(y=""+y,b!==null&&b.tag===6?(n(_,b.sibling),b=i(b,y),b.return=_,_=b):(n(_,b),b=ux(y,_.mode,S),b.return=_,_=b),s(_)):n(_,b)}return x}var Ef=tN(!0),nN=tN(!1),gm={},Vs=cu(gm),ug=cu(gm),cg=cu(gm);function Xu(e){if(e===gm)throw Error(ge(174));return e}function z4(e,t){switch(ln(cg,t),ln(ug,e),ln(Vs,gm),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:FC(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=FC(t,e)}pn(Vs),ln(Vs,t)}function Af(){pn(Vs),pn(ug),pn(cg)}function rN(e){Xu(cg.current);var t=Xu(Vs.current),n=FC(t,e.type);t!==n&&(ln(ug,e),ln(Vs,n))}function V4(e){ug.current===e&&(pn(Vs),pn(ug))}var En=cu(0);function l1(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&128)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var rx=[];function j4(){for(var e=0;en?n:4,e(!0);var r=ix.transition;ix.transition={};try{e(!1),t()}finally{Gt=n,ix.transition=r}}function _N(){return Mo().memoizedState}function sJ(e,t,n){var r=Vl(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},bN(e))SN(t,n);else if(n=QM(e,t,n,r),n!==null){var i=gi();as(n,e,r,i),wN(n,t,r)}}function aJ(e,t,n){var r=Vl(e),i={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(bN(e))SN(t,i);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var s=t.lastRenderedState,a=o(s,n);if(i.hasEagerState=!0,i.eagerState=a,fs(a,s)){var l=t.interleaved;l===null?(i.next=i,B4(t)):(i.next=l.next,l.next=i),t.interleaved=i;return}}catch{}finally{}n=QM(e,t,i,r),n!==null&&(i=gi(),as(n,e,r,i),wN(n,t,r))}}function bN(e){var t=e.alternate;return e===Rn||t!==null&&t===Rn}function SN(e,t){Dp=u1=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function wN(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,T4(e,n)}}var c1={readContext:Io,useCallback:Kr,useContext:Kr,useEffect:Kr,useImperativeHandle:Kr,useInsertionEffect:Kr,useLayoutEffect:Kr,useMemo:Kr,useReducer:Kr,useRef:Kr,useState:Kr,useDebugValue:Kr,useDeferredValue:Kr,useTransition:Kr,useMutableSource:Kr,useSyncExternalStore:Kr,useId:Kr,unstable_isNewReconciler:!1},lJ={readContext:Io,useCallback:function(e,t){return As().memoizedState=[e,t===void 0?null:t],e},useContext:Io,useEffect:I8,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,mv(4194308,4,pN.bind(null,t,e),n)},useLayoutEffect:function(e,t){return mv(4194308,4,e,t)},useInsertionEffect:function(e,t){return mv(4,2,e,t)},useMemo:function(e,t){var n=As();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=As();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=sJ.bind(null,Rn,e),[r.memoizedState,e]},useRef:function(e){var t=As();return e={current:e},t.memoizedState=e},useState:k8,useDebugValue:K4,useDeferredValue:function(e){return As().memoizedState=e},useTransition:function(){var e=k8(!1),t=e[0];return e=oJ.bind(null,e[1]),As().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=Rn,i=As();if(_n){if(n===void 0)throw Error(ge(407));n=n()}else{if(n=t(),Tr===null)throw Error(ge(349));dc&30||sN(r,t,n)}i.memoizedState=n;var o={value:n,getSnapshot:t};return i.queue=o,I8(lN.bind(null,r,o,e),[e]),r.flags|=2048,hg(9,aN.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=As(),t=Tr.identifierPrefix;if(_n){var n=Ra,r=Pa;n=(r&~(1<<32-ss(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=dg++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=s.createElement(n,{is:r.is}):(e=s.createElement(n),n==="select"&&(s=e,r.multiple?s.multiple=!0:r.size&&(s.size=r.size))):e=s.createElementNS(e,n),e[Is]=t,e[lg]=r,kN(e,t,!1,!1),t.stateNode=e;e:{switch(s=UC(n,r),n){case"dialog":cn("cancel",e),cn("close",e),i=r;break;case"iframe":case"object":case"embed":cn("load",e),i=r;break;case"video":case"audio":for(i=0;iRf&&(t.flags|=128,r=!0,Jh(o,!1),t.lanes=4194304)}else{if(!r)if(e=l1(s),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Jh(o,!0),o.tail===null&&o.tailMode==="hidden"&&!s.alternate&&!_n)return Xr(t),null}else 2*jn()-o.renderingStartTime>Rf&&n!==1073741824&&(t.flags|=128,r=!0,Jh(o,!1),t.lanes=4194304);o.isBackwards?(s.sibling=t.child,t.child=s):(n=o.last,n!==null?n.sibling=s:t.child=s,o.last=s)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=jn(),t.sibling=null,n=En.current,ln(En,r?n&1|2:n&1),t):(Xr(t),null);case 22:case 23:return eT(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?Qi&1073741824&&(Xr(t),t.subtreeFlags&6&&(t.flags|=8192)):Xr(t),null;case 24:return null;case 25:return null}throw Error(ge(156,t.tag))}function mJ(e,t){switch(N4(t),t.tag){case 1:return Di(t.type)&&t1(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Af(),pn(Li),pn(ni),j4(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return V4(t),null;case 13:if(pn(En),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(ge(340));Tf()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return pn(En),null;case 4:return Af(),null;case 10:return F4(t.type._context),null;case 22:case 23:return eT(),null;case 24:return null;default:return null}}var S0=!1,ei=!1,yJ=typeof WeakSet=="function"?WeakSet:Set,Pe=null;function Hd(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){Ln(e,t,r)}else n.current=null}function h3(e,t,n){try{n()}catch(r){Ln(e,t,r)}}var z8=!1;function vJ(e,t){if(YC=Qv,e=$M(),I4(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var i=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var s=0,a=-1,l=-1,u=0,d=0,f=e,h=null;t:for(;;){for(var g;f!==n||i!==0&&f.nodeType!==3||(a=s+i),f!==o||r!==0&&f.nodeType!==3||(l=s+r),f.nodeType===3&&(s+=f.nodeValue.length),(g=f.firstChild)!==null;)h=f,f=g;for(;;){if(f===e)break t;if(h===n&&++u===i&&(a=s),h===o&&++d===r&&(l=s),(g=f.nextSibling)!==null)break;f=h,h=f.parentNode}f=g}n=a===-1||l===-1?null:{start:a,end:l}}else n=null}n=n||{start:0,end:0}}else n=null;for(QC={focusedElem:e,selectionRange:n},Qv=!1,Pe=t;Pe!==null;)if(t=Pe,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,Pe=e;else for(;Pe!==null;){t=Pe;try{var m=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(m!==null){var v=m.memoizedProps,x=m.memoizedState,_=t.stateNode,b=_.getSnapshotBeforeUpdate(t.elementType===t.type?v:Zo(t.type,v),x);_.__reactInternalSnapshotBeforeUpdate=b}break;case 3:var y=t.stateNode.containerInfo;y.nodeType===1?y.textContent="":y.nodeType===9&&y.documentElement&&y.removeChild(y.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(ge(163))}}catch(S){Ln(t,t.return,S)}if(e=t.sibling,e!==null){e.return=t.return,Pe=e;break}Pe=t.return}return m=z8,z8=!1,m}function $p(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var i=r=r.next;do{if((i.tag&e)===e){var o=i.destroy;i.destroy=void 0,o!==void 0&&h3(t,n,o)}i=i.next}while(i!==r)}}function H_(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function p3(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function NN(e){var t=e.alternate;t!==null&&(e.alternate=null,NN(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Is],delete t[lg],delete t[e3],delete t[eJ],delete t[tJ])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function LN(e){return e.tag===5||e.tag===3||e.tag===4}function V8(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||LN(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function g3(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=e1));else if(r!==4&&(e=e.child,e!==null))for(g3(e,t,n),e=e.sibling;e!==null;)g3(e,t,n),e=e.sibling}function m3(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(m3(e,t,n),e=e.sibling;e!==null;)m3(e,t,n),e=e.sibling}var Fr=null,es=!1;function pl(e,t,n){for(n=n.child;n!==null;)DN(e,t,n),n=n.sibling}function DN(e,t,n){if(zs&&typeof zs.onCommitFiberUnmount=="function")try{zs.onCommitFiberUnmount($_,n)}catch{}switch(n.tag){case 5:ei||Hd(n,t);case 6:var r=Fr,i=es;Fr=null,pl(e,t,n),Fr=r,es=i,Fr!==null&&(es?(e=Fr,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):Fr.removeChild(n.stateNode));break;case 18:Fr!==null&&(es?(e=Fr,n=n.stateNode,e.nodeType===8?tx(e.parentNode,n):e.nodeType===1&&tx(e,n),rg(e)):tx(Fr,n.stateNode));break;case 4:r=Fr,i=es,Fr=n.stateNode.containerInfo,es=!0,pl(e,t,n),Fr=r,es=i;break;case 0:case 11:case 14:case 15:if(!ei&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){i=r=r.next;do{var o=i,s=o.destroy;o=o.tag,s!==void 0&&(o&2||o&4)&&h3(n,t,s),i=i.next}while(i!==r)}pl(e,t,n);break;case 1:if(!ei&&(Hd(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(a){Ln(n,t,a)}pl(e,t,n);break;case 21:pl(e,t,n);break;case 22:n.mode&1?(ei=(r=ei)||n.memoizedState!==null,pl(e,t,n),ei=r):pl(e,t,n);break;default:pl(e,t,n)}}function j8(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new yJ),t.forEach(function(r){var i=AJ.bind(null,e,r);n.has(r)||(n.add(r),r.then(i,i))})}}function Yo(e,t){var n=t.deletions;if(n!==null)for(var r=0;ri&&(i=s),r&=~o}if(r=i,r=jn()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*bJ(r/1960))-r,10e?16:e,Il===null)var r=!1;else{if(e=Il,Il=null,h1=0,Pt&6)throw Error(ge(331));var i=Pt;for(Pt|=4,Pe=e.current;Pe!==null;){var o=Pe,s=o.child;if(Pe.flags&16){var a=o.deletions;if(a!==null){for(var l=0;ljn()-Z4?tc(e,0):Q4|=n),$i(e,t)}function GN(e,t){t===0&&(e.mode&1?(t=f0,f0<<=1,!(f0&130023424)&&(f0=4194304)):t=1);var n=gi();e=za(e,t),e!==null&&(fm(e,t,n),$i(e,n))}function EJ(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),GN(e,n)}function AJ(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,i=e.memoizedState;i!==null&&(n=i.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(ge(314))}r!==null&&r.delete(t),GN(e,n)}var HN;HN=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||Li.current)ki=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return ki=!1,pJ(e,t,n);ki=!!(e.flags&131072)}else ki=!1,_n&&t.flags&1048576&&KM(t,i1,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;yv(e,t),e=t.pendingProps;var i=Cf(t,ni.current);rf(t,n),i=H4(null,t,r,e,i,n);var o=W4();return t.flags|=1,typeof i=="object"&&i!==null&&typeof i.render=="function"&&i.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Di(r)?(o=!0,n1(t)):o=!1,t.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,U4(t),i.updater=j_,t.stateNode=i,i._reactInternals=t,s3(t,r,e,n),t=u3(null,t,r,!0,o,n)):(t.tag=0,_n&&o&&M4(t),pi(null,t,i,n),t=t.child),t;case 16:r=t.elementType;e:{switch(yv(e,t),e=t.pendingProps,i=r._init,r=i(r._payload),t.type=r,i=t.tag=RJ(r),e=Zo(r,e),i){case 0:t=l3(null,t,r,e,n);break e;case 1:t=F8(null,t,r,e,n);break e;case 11:t=D8(null,t,r,e,n);break e;case 14:t=$8(null,t,r,Zo(r.type,e),n);break e}throw Error(ge(306,r,""))}return t;case 0:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:Zo(r,i),l3(e,t,r,i,n);case 1:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:Zo(r,i),F8(e,t,r,i,n);case 3:e:{if(PN(t),e===null)throw Error(ge(387));r=t.pendingProps,o=t.memoizedState,i=o.element,ZM(e,t),a1(t,r,null,n);var s=t.memoizedState;if(r=s.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){i=Pf(Error(ge(423)),t),t=B8(e,t,r,n,i);break e}else if(r!==i){i=Pf(Error(ge(424)),t),t=B8(e,t,r,n,i);break e}else for(Ji=Bl(t.stateNode.containerInfo.firstChild),eo=t,_n=!0,ns=null,n=nN(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(Tf(),r===i){t=Va(e,t,n);break e}pi(e,t,r,n)}t=t.child}return t;case 5:return rN(t),e===null&&r3(t),r=t.type,i=t.pendingProps,o=e!==null?e.memoizedProps:null,s=i.children,ZC(r,i)?s=null:o!==null&&ZC(r,o)&&(t.flags|=32),AN(e,t),pi(e,t,s,n),t.child;case 6:return e===null&&r3(t),null;case 13:return RN(e,t,n);case 4:return z4(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=Ef(t,null,r,n):pi(e,t,r,n),t.child;case 11:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:Zo(r,i),D8(e,t,r,i,n);case 7:return pi(e,t,t.pendingProps,n),t.child;case 8:return pi(e,t,t.pendingProps.children,n),t.child;case 12:return pi(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,i=t.pendingProps,o=t.memoizedProps,s=i.value,ln(o1,r._currentValue),r._currentValue=s,o!==null)if(fs(o.value,s)){if(o.children===i.children&&!Li.current){t=Va(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var a=o.dependencies;if(a!==null){s=o.child;for(var l=a.firstContext;l!==null;){if(l.context===r){if(o.tag===1){l=Ia(-1,n&-n),l.tag=2;var u=o.updateQueue;if(u!==null){u=u.shared;var d=u.pending;d===null?l.next=l:(l.next=d.next,d.next=l),u.pending=l}}o.lanes|=n,l=o.alternate,l!==null&&(l.lanes|=n),i3(o.return,n,t),a.lanes|=n;break}l=l.next}}else if(o.tag===10)s=o.type===t.type?null:o.child;else if(o.tag===18){if(s=o.return,s===null)throw Error(ge(341));s.lanes|=n,a=s.alternate,a!==null&&(a.lanes|=n),i3(s,n,t),s=o.sibling}else s=o.child;if(s!==null)s.return=o;else for(s=o;s!==null;){if(s===t){s=null;break}if(o=s.sibling,o!==null){o.return=s.return,s=o;break}s=s.return}o=s}pi(e,t,i.children,n),t=t.child}return t;case 9:return i=t.type,r=t.pendingProps.children,rf(t,n),i=Io(i),r=r(i),t.flags|=1,pi(e,t,r,n),t.child;case 14:return r=t.type,i=Zo(r,t.pendingProps),i=Zo(r.type,i),$8(e,t,r,i,n);case 15:return TN(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:Zo(r,i),yv(e,t),t.tag=1,Di(r)?(e=!0,n1(t)):e=!1,rf(t,n),eN(t,r,i),s3(t,r,i,n),u3(null,t,r,!0,e,n);case 19:return ON(e,t,n);case 22:return EN(e,t,n)}throw Error(ge(156,t.tag))};function WN(e,t){return vM(e,t)}function PJ(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Po(e,t,n,r){return new PJ(e,t,n,r)}function nT(e){return e=e.prototype,!(!e||!e.isReactComponent)}function RJ(e){if(typeof e=="function")return nT(e)?1:0;if(e!=null){if(e=e.$$typeof,e===S4)return 11;if(e===w4)return 14}return 2}function jl(e,t){var n=e.alternate;return n===null?(n=Po(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function bv(e,t,n,r,i,o){var s=2;if(r=e,typeof e=="function")nT(e)&&(s=1);else if(typeof e=="string")s=5;else e:switch(e){case Dd:return nc(n.children,i,o,t);case b4:s=8,i|=8;break;case OC:return e=Po(12,n,t,i|2),e.elementType=OC,e.lanes=o,e;case kC:return e=Po(13,n,t,i),e.elementType=kC,e.lanes=o,e;case IC:return e=Po(19,n,t,i),e.elementType=IC,e.lanes=o,e;case tM:return q_(n,i,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case J7:s=10;break e;case eM:s=9;break e;case S4:s=11;break e;case w4:s=14;break e;case Sl:s=16,r=null;break e}throw Error(ge(130,e==null?e:typeof e,""))}return t=Po(s,n,t,i),t.elementType=e,t.type=r,t.lanes=o,t}function nc(e,t,n,r){return e=Po(7,e,r,t),e.lanes=n,e}function q_(e,t,n,r){return e=Po(22,e,r,t),e.elementType=tM,e.lanes=n,e.stateNode={isHidden:!1},e}function ux(e,t,n){return e=Po(6,e,null,t),e.lanes=n,e}function cx(e,t,n){return t=Po(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function OJ(e,t,n,r,i){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Gw(0),this.expirationTimes=Gw(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Gw(0),this.identifierPrefix=r,this.onRecoverableError=i,this.mutableSourceEagerHydrationData=null}function rT(e,t,n,r,i,o,s,a,l){return e=new OJ(e,t,n,a,l),t===1?(t=1,o===!0&&(t|=8)):t=0,o=Po(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},U4(o),e}function kJ(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(YN)}catch(e){console.error(e)}}YN(),K7.exports=so;var Ms=K7.exports;const bRe=Tc(Ms);var Q8=Ms;PC.createRoot=Q8.createRoot,PC.hydrateRoot=Q8.hydrateRoot;const DJ="modulepreload",$J=function(e,t){return new URL(e,t).href},Z8={},QN=function(t,n,r){if(!n||n.length===0)return t();const i=document.getElementsByTagName("link");return Promise.all(n.map(o=>{if(o=$J(o,r),o in Z8)return;Z8[o]=!0;const s=o.endsWith(".css"),a=s?'[rel="stylesheet"]':"";if(!!r)for(let d=i.length-1;d>=0;d--){const f=i[d];if(f.href===o&&(!s||f.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${o}"]${a}`))return;const u=document.createElement("link");if(u.rel=s?"stylesheet":DJ,s||(u.as="script",u.crossOrigin=""),u.href=o,document.head.appendChild(u),s)return new Promise((d,f)=>{u.addEventListener("load",d),u.addEventListener("error",()=>f(new Error(`Unable to preload CSS for ${o}`)))})})).then(()=>t()).catch(o=>{const s=new Event("vite:preloadError",{cancelable:!0});if(s.payload=o,window.dispatchEvent(s),!s.defaultPrevented)throw o})};function Cr(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r3?t.i-4:t.i:Array.isArray(e)?1:Z_(e)?2:J_(e)?3:0}function Gl(e,t){return Ql(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function Sv(e,t){return Ql(e)===2?e.get(t):e[t]}function ZN(e,t,n){var r=Ql(e);r===2?e.set(t,n):r===3?e.add(n):e[t]=n}function JN(e,t){return e===t?e!==0||1/e==1/t:e!=e&&t!=t}function Z_(e){return jJ&&e instanceof Map}function J_(e){return GJ&&e instanceof Set}function br(e){return e.o||e.t}function lT(e){if(Array.isArray(e))return Array.prototype.slice.call(e);var t=tL(e);delete t[nt];for(var n=af(t),r=0;r1&&(e.set=e.add=e.clear=e.delete=FJ),Object.freeze(e),t&&ja(e,function(n,r){return mm(r,!0)},!0)),e}function FJ(){Cr(2)}function uT(e){return e==null||typeof e!="object"||Object.isFrozen(e)}function js(e){var t=w3[e];return t||Cr(18,e),t}function cT(e,t){w3[e]||(w3[e]=t)}function gg(){return yg}function dx(e,t){t&&(js("Patches"),e.u=[],e.s=[],e.v=t)}function m1(e){S3(e),e.p.forEach(BJ),e.p=null}function S3(e){e===yg&&(yg=e.l)}function J8(e){return yg={p:[],l:yg,h:e,m:!0,_:0}}function BJ(e){var t=e[nt];t.i===0||t.i===1?t.j():t.g=!0}function fx(e,t){t._=t.p.length;var n=t.p[0],r=e!==void 0&&e!==n;return t.h.O||js("ES5").S(t,e,r),r?(n[nt].P&&(m1(t),Cr(4)),Fi(e)&&(e=y1(t,e),t.l||v1(t,e)),t.u&&js("Patches").M(n[nt].t,e,t.u,t.s)):e=y1(t,n,[]),m1(t),t.u&&t.v(t.u,t.s),e!==tb?e:void 0}function y1(e,t,n){if(uT(t))return t;var r=t[nt];if(!r)return ja(t,function(a,l){return e9(e,r,t,a,l,n)},!0),t;if(r.A!==e)return t;if(!r.P)return v1(e,r.t,!0),r.t;if(!r.I){r.I=!0,r.A._--;var i=r.i===4||r.i===5?r.o=lT(r.k):r.o,o=i,s=!1;r.i===3&&(o=new Set(i),i.clear(),s=!0),ja(o,function(a,l){return e9(e,r,i,a,l,n,s)}),v1(e,i,!1),n&&e.u&&js("Patches").N(r,n,e.u,e.s)}return r.o}function e9(e,t,n,r,i,o,s){if(yi(i)){var a=y1(e,i,o&&t&&t.i!==3&&!Gl(t.R,r)?o.concat(r):void 0);if(ZN(n,r,a),!yi(a))return;e.m=!1}else s&&n.add(i);if(Fi(i)&&!uT(i)){if(!e.h.D&&e._<1)return;y1(e,i),t&&t.A.l||v1(e,i)}}function v1(e,t,n){n===void 0&&(n=!1),!e.l&&e.h.D&&e.m&&mm(t,n)}function hx(e,t){var n=e[nt];return(n?br(n):e)[t]}function t9(e,t){if(t in e)for(var n=Object.getPrototypeOf(e);n;){var r=Object.getOwnPropertyDescriptor(n,t);if(r)return r;n=Object.getPrototypeOf(n)}}function Oi(e){e.P||(e.P=!0,e.l&&Oi(e.l))}function px(e){e.o||(e.o=lT(e.t))}function mg(e,t,n){var r=Z_(t)?js("MapSet").F(t,n):J_(t)?js("MapSet").T(t,n):e.O?function(i,o){var s=Array.isArray(i),a={i:s?1:0,A:o?o.A:gg(),P:!1,I:!1,R:{},l:o,t:i,k:null,o:null,j:null,C:!1},l=a,u=vg;s&&(l=[a],u=Tp);var d=Proxy.revocable(l,u),f=d.revoke,h=d.proxy;return a.k=h,a.j=f,h}(t,n):js("ES5").J(t,n);return(n?n.A:gg()).p.push(r),r}function eb(e){return yi(e)||Cr(22,e),function t(n){if(!Fi(n))return n;var r,i=n[nt],o=Ql(n);if(i){if(!i.P&&(i.i<4||!js("ES5").K(i)))return i.t;i.I=!0,r=n9(n,o),i.I=!1}else r=n9(n,o);return ja(r,function(s,a){i&&Sv(i.t,s)===a||ZN(r,s,t(a))}),o===3?new Set(r):r}(e)}function n9(e,t){switch(t){case 2:return new Map(e);case 3:return Array.from(e)}return lT(e)}function dT(){function e(o,s){var a=i[o];return a?a.enumerable=s:i[o]=a={configurable:!0,enumerable:s,get:function(){var l=this[nt];return vg.get(l,o)},set:function(l){var u=this[nt];vg.set(u,o,l)}},a}function t(o){for(var s=o.length-1;s>=0;s--){var a=o[s][nt];if(!a.P)switch(a.i){case 5:r(a)&&Oi(a);break;case 4:n(a)&&Oi(a)}}}function n(o){for(var s=o.t,a=o.k,l=af(a),u=l.length-1;u>=0;u--){var d=l[u];if(d!==nt){var f=s[d];if(f===void 0&&!Gl(s,d))return!0;var h=a[d],g=h&&h[nt];if(g?g.t!==f:!JN(h,f))return!0}}var m=!!s[nt];return l.length!==af(s).length+(m?0:1)}function r(o){var s=o.k;if(s.length!==o.t.length)return!0;var a=Object.getOwnPropertyDescriptor(s,s.length-1);if(a&&!a.get)return!0;for(var l=0;l1?_-1:0),y=1;y<_;y++)b[y-1]=arguments[y];return l.produce(v,function(S){var C;return(C=o).call.apply(C,[x,S].concat(b))})}}var u;if(typeof o!="function"&&Cr(6),s!==void 0&&typeof s!="function"&&Cr(7),Fi(i)){var d=J8(r),f=mg(r,i,void 0),h=!0;try{u=o(f),h=!1}finally{h?m1(d):S3(d)}return typeof Promise<"u"&&u instanceof Promise?u.then(function(v){return dx(d,s),fx(v,d)},function(v){throw m1(d),v}):(dx(d,s),fx(u,d))}if(!i||typeof i!="object"){if((u=o(i))===void 0&&(u=i),u===tb&&(u=void 0),r.D&&mm(u,!0),s){var g=[],m=[];js("Patches").M(i,u,g,m),s(g,m)}return u}Cr(21,i)},this.produceWithPatches=function(i,o){if(typeof i=="function")return function(u){for(var d=arguments.length,f=Array(d>1?d-1:0),h=1;h=0;i--){var o=r[i];if(o.path.length===0&&o.op==="replace"){n=o.value;break}}i>-1&&(r=r.slice(i+1));var s=js("Patches").$;return yi(n)?s(n,r):this.produce(n,function(a){return s(a,r)})},e}(),ro=new nL,rL=ro.produce,pT=ro.produceWithPatches.bind(ro),WJ=ro.setAutoFreeze.bind(ro),qJ=ro.setUseProxies.bind(ro),x3=ro.applyPatches.bind(ro),KJ=ro.createDraft.bind(ro),XJ=ro.finishDraft.bind(ro);const fu=rL,SRe=Object.freeze(Object.defineProperty({__proto__:null,Immer:nL,applyPatches:x3,castDraft:zJ,castImmutable:VJ,createDraft:KJ,current:eb,default:fu,enableAllPlugins:UJ,enableES5:dT,enableMapSet:eL,enablePatches:fT,finishDraft:XJ,freeze:mm,immerable:sf,isDraft:yi,isDraftable:Fi,nothing:tb,original:aT,produce:rL,produceWithPatches:pT,setAutoFreeze:WJ,setUseProxies:qJ},Symbol.toStringTag,{value:"Module"}));function _g(e){"@babel/helpers - typeof";return _g=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_g(e)}function YJ(e,t){if(_g(e)!=="object"||e===null)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||"default");if(_g(r)!=="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function QJ(e){var t=YJ(e,"string");return _g(t)==="symbol"?t:String(t)}function ZJ(e,t,n){return t=QJ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o9(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),n.push.apply(n,r)}return n}function s9(e){for(var t=1;t"u"&&(n=t,t=void 0),typeof n<"u"){if(typeof n!="function")throw new Error(Br(1));return n(ym)(e,t)}if(typeof e!="function")throw new Error(Br(2));var i=e,o=t,s=[],a=s,l=!1;function u(){a===s&&(a=s.slice())}function d(){if(l)throw new Error(Br(3));return o}function f(v){if(typeof v!="function")throw new Error(Br(4));if(l)throw new Error(Br(5));var x=!0;return u(),a.push(v),function(){if(x){if(l)throw new Error(Br(6));x=!1,u();var b=a.indexOf(v);a.splice(b,1),s=null}}}function h(v){if(!JJ(v))throw new Error(Br(7));if(typeof v.type>"u")throw new Error(Br(8));if(l)throw new Error(Br(9));try{l=!0,o=i(o,v)}finally{l=!1}for(var x=s=a,_=0;_"u")throw new Error(Br(12));if(typeof n(void 0,{type:Of.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(Br(13))})}function Qf(e){for(var t=Object.keys(e),n={},r=0;r"u")throw u&&u.type,new Error(Br(14));f[g]=x,d=d||x!==v}return d=d||o.length!==Object.keys(l).length,d?f:l}}function l9(e,t){return function(){return t(e.apply(this,arguments))}}function oL(e,t){if(typeof e=="function")return l9(e,t);if(typeof e!="object"||e===null)throw new Error(Br(16));var n={};for(var r in e){var i=e[r];typeof i=="function"&&(n[r]=l9(i,t))}return n}function kf(){for(var e=arguments.length,t=new Array(e),n=0;n-1){var u=n[l];return l>0&&(n.splice(l,1),n.unshift(u)),u.value}return _1}function i(a,l){r(a)===_1&&(n.unshift({key:a,value:l}),n.length>e&&n.pop())}function o(){return n}function s(){n=[]}return{get:r,put:i,getEntries:o,clear:s}}var sL=function(t,n){return t===n};function iee(e){return function(n,r){if(n===null||r===null||n.length!==r.length)return!1;for(var i=n.length,o=0;o1?t-1:0),r=1;r0&&o[o.length-1])&&(u[0]===6||u[0]===2)){n=0;continue}if(u[0]===3&&(!o||u[1]>o[0]&&u[1]",value:e};if(typeof e!="object"||e===null||o!=null&&o.has(e))return!1;for(var a=r!=null?r(e):Object.entries(e),l=i.length>0,u=function(x,_){var b=t?t+"."+x:x;if(l){var y=i.some(function(S){return S instanceof RegExp?S.test(b):b===S});if(y)return"continue"}if(!n(_))return{value:{keyPath:b,value:_}};if(typeof _=="object"&&(s=pL(_,b,n,r,i,o),s))return{value:s}},d=0,f=a;d-1}function bee(e){return""+e}function _L(e){var t={},n=[],r,i={addCase:function(o,s){var a=typeof o=="string"?o:o.type;if(a in t)throw new Error("addCase cannot be called with two reducers for the same action type");return t[a]=s,i},addMatcher:function(o,s){return n.push({matcher:o,reducer:s}),i},addDefaultCase:function(o){return r=o,i}};return e(i),[t,n,r]}function See(e){return typeof e=="function"}function bL(e,t,n,r){n===void 0&&(n=[]);var i=typeof t=="function"?_L(t):[t,n,r],o=i[0],s=i[1],a=i[2],l;if(See(e))l=function(){return C3(e())};else{var u=C3(e);l=function(){return u}}function d(f,h){f===void 0&&(f=l());var g=Zl([o[h.type]],s.filter(function(m){var v=m.matcher;return v(h)}).map(function(m){var v=m.reducer;return v}));return g.filter(function(m){return!!m}).length===0&&(g=[a]),g.reduce(function(m,v){if(v)if(yi(m)){var x=m,_=v(x,h);return _===void 0?m:_}else{if(Fi(m))return fu(m,function(b){return v(b,h)});var _=v(m,h);if(_===void 0){if(m===null)return m;throw Error("A case reducer on a non-draftable value must not return undefined")}return _}return m},f)}return d.getInitialState=l,d}function wee(e,t){return e+"/"+t}function An(e){var t=e.name;if(!t)throw new Error("`name` is a required option for createSlice");typeof process<"u";var n=typeof e.initialState=="function"?e.initialState:C3(e.initialState),r=e.reducers||{},i=Object.keys(r),o={},s={},a={};i.forEach(function(d){var f=r[d],h=wee(t,d),g,m;"reducer"in f?(g=f.reducer,m=f.prepare):g=f,o[d]=g,s[h]=g,a[d]=m?Me(h,m):Me(h)});function l(){var d=typeof e.extraReducers=="function"?_L(e.extraReducers):[e.extraReducers],f=d[0],h=f===void 0?{}:f,g=d[1],m=g===void 0?[]:g,v=d[2],x=v===void 0?void 0:v,_=Ii(Ii({},h),s);return bL(n,function(b){for(var y in _)b.addCase(y,_[y]);for(var S=0,C=m;S0;if(b){var y=m.filter(function(S){return u(x,S,v)}).length>0;y&&(v.ids=Object.keys(v.entities))}}function h(m,v){return g([m],v)}function g(m,v){var x=SL(m,e,v),_=x[0],b=x[1];f(b,v),n(_,v)}return{removeAll:Eee(l),addOne:zn(t),addMany:zn(n),setOne:zn(r),setMany:zn(i),setAll:zn(o),updateOne:zn(d),updateMany:zn(f),upsertOne:zn(h),upsertMany:zn(g),removeOne:zn(s),removeMany:zn(a)}}function Aee(e,t){var n=wL(e),r=n.removeOne,i=n.removeMany,o=n.removeAll;function s(b,y){return a([b],y)}function a(b,y){b=rc(b);var S=b.filter(function(C){return!(Up(C,e)in y.entities)});S.length!==0&&x(S,y)}function l(b,y){return u([b],y)}function u(b,y){b=rc(b),b.length!==0&&x(b,y)}function d(b,y){b=rc(b),y.entities={},y.ids=[],a(b,y)}function f(b,y){return h([b],y)}function h(b,y){for(var S=!1,C=0,T=b;C-1;return n&&r}function bm(e){return typeof e[0]=="function"&&"pending"in e[0]&&"fulfilled"in e[0]&&"rejected"in e[0]}function ib(){for(var e=[],t=0;t0)for(var y=g.getState(),S=Array.from(n.values()),C=0,T=S;CMath.floor(e/t)*t,Ns=(e,t)=>Math.round(e/t)*t;var Hee=typeof global=="object"&&global&&global.Object===Object&&global;const UL=Hee;var Wee=typeof self=="object"&&self&&self.Object===Object&&self,qee=UL||Wee||Function("return this")();const Js=qee;var Kee=Js.Symbol;const No=Kee;var zL=Object.prototype,Xee=zL.hasOwnProperty,Yee=zL.toString,tp=No?No.toStringTag:void 0;function Qee(e){var t=Xee.call(e,tp),n=e[tp];try{e[tp]=void 0;var r=!0}catch{}var i=Yee.call(e);return r&&(t?e[tp]=n:delete e[tp]),i}var Zee=Object.prototype,Jee=Zee.toString;function ete(e){return Jee.call(e)}var tte="[object Null]",nte="[object Undefined]",m9=No?No.toStringTag:void 0;function gu(e){return e==null?e===void 0?nte:tte:m9&&m9 in Object(e)?Qee(e):ete(e)}function ps(e){return e!=null&&typeof e=="object"}var rte="[object Symbol]";function ob(e){return typeof e=="symbol"||ps(e)&&gu(e)==rte}function VL(e,t){for(var n=-1,r=e==null?0:e.length,i=Array(r);++n0){if(++t>=Lte)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function Bte(e){return function(){return e}}var Ute=function(){try{var e=Rc(Object,"defineProperty");return e({},"",{}),e}catch{}}();const x1=Ute;var zte=x1?function(e,t){return x1(e,"toString",{configurable:!0,enumerable:!1,value:Bte(t),writable:!0})}:sb;const Vte=zte;var jte=Fte(Vte);const WL=jte;function qL(e,t){for(var n=-1,r=e==null?0:e.length;++n-1}var Xte=9007199254740991,Yte=/^(?:0|[1-9]\d*)$/;function bT(e,t){var n=typeof e;return t=t??Xte,!!t&&(n=="number"||n!="symbol"&&Yte.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=Jte}function Jf(e){return e!=null&&wT(e.length)&&!_T(e)}function QL(e,t,n){if(!vi(n))return!1;var r=typeof t;return(r=="number"?Jf(n)&&bT(t,n.length):r=="string"&&t in n)?Cm(n[t],e):!1}function ZL(e){return YL(function(t,n){var r=-1,i=n.length,o=i>1?n[i-1]:void 0,s=i>2?n[2]:void 0;for(o=e.length>3&&typeof o=="function"?(i--,o):void 0,s&&QL(n[0],n[1],s)&&(o=i<3?void 0:o,i=1),t=Object(t);++r-1}function pre(e,t){var n=this.__data__,r=ab(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}function Ka(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t0&&n(a)?t>1?oD(a,t-1,n,r,i):RT(i,a):r||(i[i.length]=a)}return i}function Ire(e){var t=e==null?0:e.length;return t?oD(e,1):[]}function Mre(e){return WL(XL(e,void 0,Ire),e+"")}var Nre=rD(Object.getPrototypeOf,Object);const OT=Nre;var Lre="[object Object]",Dre=Function.prototype,$re=Object.prototype,sD=Dre.toString,Fre=$re.hasOwnProperty,Bre=sD.call(Object);function aD(e){if(!ps(e)||gu(e)!=Lre)return!1;var t=OT(e);if(t===null)return!0;var n=Fre.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&sD.call(n)==Bre}function lD(e,t,n){var r=-1,i=e.length;t<0&&(t=-t>i?0:i+t),n=n>i?i:n,n<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;for(var o=Array(i);++r=r?e:lD(e,t,n)}var zre="\\ud800-\\udfff",Vre="\\u0300-\\u036f",jre="\\ufe20-\\ufe2f",Gre="\\u20d0-\\u20ff",Hre=Vre+jre+Gre,Wre="\\ufe0e\\ufe0f",qre="\\u200d",Kre=RegExp("["+qre+zre+Hre+Wre+"]");function kT(e){return Kre.test(e)}function Xre(e){return e.split("")}var uD="\\ud800-\\udfff",Yre="\\u0300-\\u036f",Qre="\\ufe20-\\ufe2f",Zre="\\u20d0-\\u20ff",Jre=Yre+Qre+Zre,eie="\\ufe0e\\ufe0f",tie="["+uD+"]",P3="["+Jre+"]",R3="\\ud83c[\\udffb-\\udfff]",nie="(?:"+P3+"|"+R3+")",cD="[^"+uD+"]",dD="(?:\\ud83c[\\udde6-\\uddff]){2}",fD="[\\ud800-\\udbff][\\udc00-\\udfff]",rie="\\u200d",hD=nie+"?",pD="["+eie+"]?",iie="(?:"+rie+"(?:"+[cD,dD,fD].join("|")+")"+pD+hD+")*",oie=pD+hD+iie,sie="(?:"+[cD+P3+"?",P3,dD,fD,tie].join("|")+")",aie=RegExp(R3+"(?="+R3+")|"+sie+oie,"g");function lie(e){return e.match(aie)||[]}function uie(e){return kT(e)?lie(e):Xre(e)}function cie(e){return function(t){t=ub(t);var n=kT(t)?uie(t):void 0,r=n?n[0]:t.charAt(0),i=n?Ure(n,1).join(""):t.slice(1);return r[e]()+i}}var die=cie("toUpperCase");const fie=die;function gD(e,t,n,r){var i=-1,o=e==null?0:e.length;for(r&&o&&(n=e[++i]);++i=t?e:t)),e}function Ml(e,t,n){return n===void 0&&(n=t,t=void 0),n!==void 0&&(n=vx(n),n=n===n?n:0),t!==void 0&&(t=vx(t),t=t===t?t:0),noe(vx(e),t,n)}function roe(){this.__data__=new Ka,this.size=0}function ioe(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}function ooe(e){return this.__data__.get(e)}function soe(e){return this.__data__.has(e)}var aoe=200;function loe(e,t){var n=this.__data__;if(n instanceof Ka){var r=n.__data__;if(!xg||r.lengtha))return!1;var u=o.get(e),d=o.get(t);if(u&&d)return u==t&&d==e;var f=-1,h=!0,g=n&Vse?new Cg:void 0;for(o.set(e,t),o.set(t,e);++f1),o}),Zf(e,LD(e),n),r&&(n=Vp(n,Wae|qae|Kae,Hae));for(var i=t.length;i--;)YD(n,t[i]);return n});const mb=Xae;var Yae=WD("length");const Qae=Yae;var QD="\\ud800-\\udfff",Zae="\\u0300-\\u036f",Jae="\\ufe20-\\ufe2f",ele="\\u20d0-\\u20ff",tle=Zae+Jae+ele,nle="\\ufe0e\\ufe0f",rle="["+QD+"]",L3="["+tle+"]",D3="\\ud83c[\\udffb-\\udfff]",ile="(?:"+L3+"|"+D3+")",ZD="[^"+QD+"]",JD="(?:\\ud83c[\\udde6-\\uddff]){2}",e$="[\\ud800-\\udbff][\\udc00-\\udfff]",ole="\\u200d",t$=ile+"?",n$="["+nle+"]?",sle="(?:"+ole+"(?:"+[ZD,JD,e$].join("|")+")"+n$+t$+")*",ale=n$+t$+sle,lle="(?:"+[ZD+L3+"?",L3,JD,e$,rle].join("|")+")",X9=RegExp(D3+"(?="+D3+")|"+lle+ale,"g");function ule(e){for(var t=X9.lastIndex=0;X9.test(e);)++t;return t}function cle(e){return kT(e)?ule(e):Qae(e)}function dle(e,t,n,r,i){return i(e,function(o,s,a){n=r?(r=!1,o):t(n,o,s,a)}),n}function LT(e,t,n){var r=Er(e)?gD:dle,i=arguments.length<3;return r(e,fb(t),n,i,hb)}var fle="[object Map]",hle="[object Set]";function DT(e){if(e==null)return 0;if(Jf(e))return zae(e)?cle(e):e.length;var t=Nf(e);return t==fle||t==hle?e.size:iD(e).length}function ple(e,t){var n;return hb(e,function(r,i,o){return n=t(r,i,o),!n}),!!n}function Hu(e,t,n){var r=Er(e)?zD:ple;return n&&QL(e,t,n)&&(t=void 0),r(e,fb(t))}var gle=toe(function(e,t,n){return e+(n?" ":"")+fie(t)});const mle=gle;var yle=1/0,vle=df&&1/NT(new df([,-0]))[1]==yle?function(e){return new df(e)}:Nte;const _le=vle;var ble=200;function Sle(e,t,n){var r=-1,i=Kte,o=e.length,s=!0,a=[],l=a;if(n)s=!1,i=Dae;else if(o>=ble){var u=t?null:_le(e);if(u)return NT(u);s=!1,i=VD,l=new Cg}else l=t?[]:a;e:for(;++r{Gae(e,t.payload)}}}),{configChanged:Cle}=i$.actions,Tle=i$.reducer,CRe={"sd-1":"Stable Diffusion 1.x","sd-2":"Stable Diffusion 2.x",sdxl:"Stable Diffusion XL","sdxl-refiner":"Stable Diffusion XL Refiner"},TRe={"sd-1":"SD1","sd-2":"SD2",sdxl:"SDXL","sdxl-refiner":"SDXLR"},Ele={"sd-1":{maxClip:12,markers:[0,1,2,3,4,8,12]},"sd-2":{maxClip:24,markers:[0,1,2,3,5,10,15,20,24]},sdxl:{maxClip:24,markers:[0,1,2,3,5,10,15,20,24]},"sdxl-refiner":{maxClip:24,markers:[0,1,2,3,5,10,15,20,24]}},ERe={lycoris:"LyCORIS",diffusers:"Diffusers"},ARe=0,Ale=4294967295;var kt;(function(e){e.assertEqual=i=>i;function t(i){}e.assertIs=t;function n(i){throw new Error}e.assertNever=n,e.arrayToEnum=i=>{const o={};for(const s of i)o[s]=s;return o},e.getValidEnumValues=i=>{const o=e.objectKeys(i).filter(a=>typeof i[i[a]]!="number"),s={};for(const a of o)s[a]=i[a];return e.objectValues(s)},e.objectValues=i=>e.objectKeys(i).map(function(o){return i[o]}),e.objectKeys=typeof Object.keys=="function"?i=>Object.keys(i):i=>{const o=[];for(const s in i)Object.prototype.hasOwnProperty.call(i,s)&&o.push(s);return o},e.find=(i,o)=>{for(const s of i)if(o(s))return s},e.isInteger=typeof Number.isInteger=="function"?i=>Number.isInteger(i):i=>typeof i=="number"&&isFinite(i)&&Math.floor(i)===i;function r(i,o=" | "){return i.map(s=>typeof s=="string"?`'${s}'`:s).join(o)}e.joinValues=r,e.jsonStringifyReplacer=(i,o)=>typeof o=="bigint"?o.toString():o})(kt||(kt={}));var $3;(function(e){e.mergeShapes=(t,n)=>({...t,...n})})($3||($3={}));const Ce=kt.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),Rl=e=>{switch(typeof e){case"undefined":return Ce.undefined;case"string":return Ce.string;case"number":return isNaN(e)?Ce.nan:Ce.number;case"boolean":return Ce.boolean;case"function":return Ce.function;case"bigint":return Ce.bigint;case"symbol":return Ce.symbol;case"object":return Array.isArray(e)?Ce.array:e===null?Ce.null:e.then&&typeof e.then=="function"&&e.catch&&typeof e.catch=="function"?Ce.promise:typeof Map<"u"&&e instanceof Map?Ce.map:typeof Set<"u"&&e instanceof Set?Ce.set:typeof Date<"u"&&e instanceof Date?Ce.date:Ce.object;default:return Ce.unknown}},me=kt.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),Ple=e=>JSON.stringify(e,null,2).replace(/"([^"]+)":/g,"$1:");class us extends Error{constructor(t){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};const n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=t}get errors(){return this.issues}format(t){const n=t||function(o){return o.message},r={_errors:[]},i=o=>{for(const s of o.issues)if(s.code==="invalid_union")s.unionErrors.map(i);else if(s.code==="invalid_return_type")i(s.returnTypeError);else if(s.code==="invalid_arguments")i(s.argumentsError);else if(s.path.length===0)r._errors.push(n(s));else{let a=r,l=0;for(;ln.message){const n={},r=[];for(const i of this.issues)i.path.length>0?(n[i.path[0]]=n[i.path[0]]||[],n[i.path[0]].push(t(i))):r.push(t(i));return{formErrors:r,fieldErrors:n}}get formErrors(){return this.flatten()}}us.create=e=>new us(e);const Tg=(e,t)=>{let n;switch(e.code){case me.invalid_type:e.received===Ce.undefined?n="Required":n=`Expected ${e.expected}, received ${e.received}`;break;case me.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(e.expected,kt.jsonStringifyReplacer)}`;break;case me.unrecognized_keys:n=`Unrecognized key(s) in object: ${kt.joinValues(e.keys,", ")}`;break;case me.invalid_union:n="Invalid input";break;case me.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${kt.joinValues(e.options)}`;break;case me.invalid_enum_value:n=`Invalid enum value. Expected ${kt.joinValues(e.options)}, received '${e.received}'`;break;case me.invalid_arguments:n="Invalid function arguments";break;case me.invalid_return_type:n="Invalid function return type";break;case me.invalid_date:n="Invalid date";break;case me.invalid_string:typeof e.validation=="object"?"includes"in e.validation?(n=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${e.validation.position}`)):"startsWith"in e.validation?n=`Invalid input: must start with "${e.validation.startsWith}"`:"endsWith"in e.validation?n=`Invalid input: must end with "${e.validation.endsWith}"`:kt.assertNever(e.validation):e.validation!=="regex"?n=`Invalid ${e.validation}`:n="Invalid";break;case me.too_small:e.type==="array"?n=`Array must contain ${e.exact?"exactly":e.inclusive?"at least":"more than"} ${e.minimum} element(s)`:e.type==="string"?n=`String must contain ${e.exact?"exactly":e.inclusive?"at least":"over"} ${e.minimum} character(s)`:e.type==="number"?n=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="date"?n=`Date must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(e.minimum))}`:n="Invalid input";break;case me.too_big:e.type==="array"?n=`Array must contain ${e.exact?"exactly":e.inclusive?"at most":"less than"} ${e.maximum} element(s)`:e.type==="string"?n=`String must contain ${e.exact?"exactly":e.inclusive?"at most":"under"} ${e.maximum} character(s)`:e.type==="number"?n=`Number must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="bigint"?n=`BigInt must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="date"?n=`Date must be ${e.exact?"exactly":e.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(e.maximum))}`:n="Invalid input";break;case me.custom:n="Invalid input";break;case me.invalid_intersection_types:n="Intersection results could not be merged";break;case me.not_multiple_of:n=`Number must be a multiple of ${e.multipleOf}`;break;case me.not_finite:n="Number must be finite";break;default:n=t.defaultError,kt.assertNever(e)}return{message:n}};let o$=Tg;function Rle(e){o$=e}function T1(){return o$}const E1=e=>{const{data:t,path:n,errorMaps:r,issueData:i}=e,o=[...n,...i.path||[]],s={...i,path:o};let a="";const l=r.filter(u=>!!u).slice().reverse();for(const u of l)a=u(s,{data:t,defaultError:a}).message;return{...i,path:o,message:i.message||a}},Ole=[];function Ee(e,t){const n=E1({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,T1(),Tg].filter(r=>!!r)});e.common.issues.push(n)}class ri{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(t,n){const r=[];for(const i of n){if(i.status==="aborted")return Ye;i.status==="dirty"&&t.dirty(),r.push(i.value)}return{status:t.value,value:r}}static async mergeObjectAsync(t,n){const r=[];for(const i of n)r.push({key:await i.key,value:await i.value});return ri.mergeObjectSync(t,r)}static mergeObjectSync(t,n){const r={};for(const i of n){const{key:o,value:s}=i;if(o.status==="aborted"||s.status==="aborted")return Ye;o.status==="dirty"&&t.dirty(),s.status==="dirty"&&t.dirty(),(typeof s.value<"u"||i.alwaysSet)&&(r[o.value]=s.value)}return{status:t.value,value:r}}}const Ye=Object.freeze({status:"aborted"}),s$=e=>({status:"dirty",value:e}),_i=e=>({status:"valid",value:e}),F3=e=>e.status==="aborted",B3=e=>e.status==="dirty",A1=e=>e.status==="valid",P1=e=>typeof Promise<"u"&&e instanceof Promise;var ze;(function(e){e.errToObj=t=>typeof t=="string"?{message:t}:t||{},e.toString=t=>typeof t=="string"?t:t==null?void 0:t.message})(ze||(ze={}));class Ks{constructor(t,n,r,i){this._cachedPath=[],this.parent=t,this.data=n,this._path=r,this._key=i}get path(){return this._cachedPath.length||(this._key instanceof Array?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}}const Y9=(e,t)=>{if(A1(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;const n=new us(e.common.issues);return this._error=n,this._error}}};function ot(e){if(!e)return{};const{errorMap:t,invalid_type_error:n,required_error:r,description:i}=e;if(t&&(n||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return t?{errorMap:t,description:i}:{errorMap:(s,a)=>s.code!=="invalid_type"?{message:a.defaultError}:typeof a.data>"u"?{message:r??a.defaultError}:{message:n??a.defaultError},description:i}}class ct{constructor(t){this.spa=this.safeParseAsync,this._def=t,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this)}get description(){return this._def.description}_getType(t){return Rl(t.data)}_getOrReturnCtx(t,n){return n||{common:t.parent.common,data:t.data,parsedType:Rl(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}_processInputParams(t){return{status:new ri,ctx:{common:t.parent.common,data:t.data,parsedType:Rl(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}}_parseSync(t){const n=this._parse(t);if(P1(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(t){const n=this._parse(t);return Promise.resolve(n)}parse(t,n){const r=this.safeParse(t,n);if(r.success)return r.data;throw r.error}safeParse(t,n){var r;const i={common:{issues:[],async:(r=n==null?void 0:n.async)!==null&&r!==void 0?r:!1,contextualErrorMap:n==null?void 0:n.errorMap},path:(n==null?void 0:n.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:Rl(t)},o=this._parseSync({data:t,path:i.path,parent:i});return Y9(i,o)}async parseAsync(t,n){const r=await this.safeParseAsync(t,n);if(r.success)return r.data;throw r.error}async safeParseAsync(t,n){const r={common:{issues:[],contextualErrorMap:n==null?void 0:n.errorMap,async:!0},path:(n==null?void 0:n.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:Rl(t)},i=this._parse({data:t,path:r.path,parent:r}),o=await(P1(i)?i:Promise.resolve(i));return Y9(r,o)}refine(t,n){const r=i=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(i):n;return this._refinement((i,o)=>{const s=t(i),a=()=>o.addIssue({code:me.custom,...r(i)});return typeof Promise<"u"&&s instanceof Promise?s.then(l=>l?!0:(a(),!1)):s?!0:(a(),!1)})}refinement(t,n){return this._refinement((r,i)=>t(r)?!0:(i.addIssue(typeof n=="function"?n(r,i):n),!1))}_refinement(t){return new gs({schema:this,typeName:qe.ZodEffects,effect:{type:"refinement",refinement:t}})}superRefine(t){return this._refinement(t)}optional(){return Ma.create(this,this._def)}nullable(){return vc.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return cs.create(this,this._def)}promise(){return Df.create(this,this._def)}or(t){return Rg.create([this,t],this._def)}and(t){return Og.create(this,t,this._def)}transform(t){return new gs({...ot(this._def),schema:this,typeName:qe.ZodEffects,effect:{type:"transform",transform:t}})}default(t){const n=typeof t=="function"?t:()=>t;return new Lg({...ot(this._def),innerType:this,defaultValue:n,typeName:qe.ZodDefault})}brand(){return new l$({typeName:qe.ZodBranded,type:this,...ot(this._def)})}catch(t){const n=typeof t=="function"?t:()=>t;return new I1({...ot(this._def),innerType:this,catchValue:n,typeName:qe.ZodCatch})}describe(t){const n=this.constructor;return new n({...this._def,description:t})}pipe(t){return Pm.create(this,t)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}const kle=/^c[^\s-]{8,}$/i,Ile=/^[a-z][a-z0-9]*$/,Mle=/[0-9A-HJKMNP-TV-Z]{26}/,Nle=/^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i,Lle=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\])|(\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\.[A-Za-z]{2,})+))$/,Dle=/^(\p{Extended_Pictographic}|\p{Emoji_Component})+$/u,$le=/^(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))$/,Fle=/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,Ble=e=>e.precision?e.offset?new RegExp(`^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{${e.precision}}(([+-]\\d{2}(:?\\d{2})?)|Z)$`):new RegExp(`^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{${e.precision}}Z$`):e.precision===0?e.offset?new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(([+-]\\d{2}(:?\\d{2})?)|Z)$"):new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$"):e.offset?new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(([+-]\\d{2}(:?\\d{2})?)|Z)$"):new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?Z$");function Ule(e,t){return!!((t==="v4"||!t)&&$le.test(e)||(t==="v6"||!t)&&Fle.test(e))}class os extends ct{constructor(){super(...arguments),this._regex=(t,n,r)=>this.refinement(i=>t.test(i),{validation:n,code:me.invalid_string,...ze.errToObj(r)}),this.nonempty=t=>this.min(1,ze.errToObj(t)),this.trim=()=>new os({...this._def,checks:[...this._def.checks,{kind:"trim"}]}),this.toLowerCase=()=>new os({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]}),this.toUpperCase=()=>new os({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}_parse(t){if(this._def.coerce&&(t.data=String(t.data)),this._getType(t)!==Ce.string){const o=this._getOrReturnCtx(t);return Ee(o,{code:me.invalid_type,expected:Ce.string,received:o.parsedType}),Ye}const r=new ri;let i;for(const o of this._def.checks)if(o.kind==="min")t.data.lengtho.value&&(i=this._getOrReturnCtx(t,i),Ee(i,{code:me.too_big,maximum:o.value,type:"string",inclusive:!0,exact:!1,message:o.message}),r.dirty());else if(o.kind==="length"){const s=t.data.length>o.value,a=t.data.length"u"?null:t==null?void 0:t.precision,offset:(n=t==null?void 0:t.offset)!==null&&n!==void 0?n:!1,...ze.errToObj(t==null?void 0:t.message)})}regex(t,n){return this._addCheck({kind:"regex",regex:t,...ze.errToObj(n)})}includes(t,n){return this._addCheck({kind:"includes",value:t,position:n==null?void 0:n.position,...ze.errToObj(n==null?void 0:n.message)})}startsWith(t,n){return this._addCheck({kind:"startsWith",value:t,...ze.errToObj(n)})}endsWith(t,n){return this._addCheck({kind:"endsWith",value:t,...ze.errToObj(n)})}min(t,n){return this._addCheck({kind:"min",value:t,...ze.errToObj(n)})}max(t,n){return this._addCheck({kind:"max",value:t,...ze.errToObj(n)})}length(t,n){return this._addCheck({kind:"length",value:t,...ze.errToObj(n)})}get isDatetime(){return!!this._def.checks.find(t=>t.kind==="datetime")}get isEmail(){return!!this._def.checks.find(t=>t.kind==="email")}get isURL(){return!!this._def.checks.find(t=>t.kind==="url")}get isEmoji(){return!!this._def.checks.find(t=>t.kind==="emoji")}get isUUID(){return!!this._def.checks.find(t=>t.kind==="uuid")}get isCUID(){return!!this._def.checks.find(t=>t.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(t=>t.kind==="cuid2")}get isULID(){return!!this._def.checks.find(t=>t.kind==="ulid")}get isIP(){return!!this._def.checks.find(t=>t.kind==="ip")}get minLength(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxLength(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.value{var t;return new os({checks:[],typeName:qe.ZodString,coerce:(t=e==null?void 0:e.coerce)!==null&&t!==void 0?t:!1,...ot(e)})};function zle(e,t){const n=(e.toString().split(".")[1]||"").length,r=(t.toString().split(".")[1]||"").length,i=n>r?n:r,o=parseInt(e.toFixed(i).replace(".","")),s=parseInt(t.toFixed(i).replace(".",""));return o%s/Math.pow(10,i)}class eu extends ct{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(t){if(this._def.coerce&&(t.data=Number(t.data)),this._getType(t)!==Ce.number){const o=this._getOrReturnCtx(t);return Ee(o,{code:me.invalid_type,expected:Ce.number,received:o.parsedType}),Ye}let r;const i=new ri;for(const o of this._def.checks)o.kind==="int"?kt.isInteger(t.data)||(r=this._getOrReturnCtx(t,r),Ee(r,{code:me.invalid_type,expected:"integer",received:"float",message:o.message}),i.dirty()):o.kind==="min"?(o.inclusive?t.datao.value:t.data>=o.value)&&(r=this._getOrReturnCtx(t,r),Ee(r,{code:me.too_big,maximum:o.value,type:"number",inclusive:o.inclusive,exact:!1,message:o.message}),i.dirty()):o.kind==="multipleOf"?zle(t.data,o.value)!==0&&(r=this._getOrReturnCtx(t,r),Ee(r,{code:me.not_multiple_of,multipleOf:o.value,message:o.message}),i.dirty()):o.kind==="finite"?Number.isFinite(t.data)||(r=this._getOrReturnCtx(t,r),Ee(r,{code:me.not_finite,message:o.message}),i.dirty()):kt.assertNever(o);return{status:i.value,value:t.data}}gte(t,n){return this.setLimit("min",t,!0,ze.toString(n))}gt(t,n){return this.setLimit("min",t,!1,ze.toString(n))}lte(t,n){return this.setLimit("max",t,!0,ze.toString(n))}lt(t,n){return this.setLimit("max",t,!1,ze.toString(n))}setLimit(t,n,r,i){return new eu({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:ze.toString(i)}]})}_addCheck(t){return new eu({...this._def,checks:[...this._def.checks,t]})}int(t){return this._addCheck({kind:"int",message:ze.toString(t)})}positive(t){return this._addCheck({kind:"min",value:0,inclusive:!1,message:ze.toString(t)})}negative(t){return this._addCheck({kind:"max",value:0,inclusive:!1,message:ze.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:0,inclusive:!0,message:ze.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:0,inclusive:!0,message:ze.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:ze.toString(n)})}finite(t){return this._addCheck({kind:"finite",message:ze.toString(t)})}safe(t){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:ze.toString(t)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:ze.toString(t)})}get minValue(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.valuet.kind==="int"||t.kind==="multipleOf"&&kt.isInteger(t.value))}get isFinite(){let t=null,n=null;for(const r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(n===null||r.value>n)&&(n=r.value):r.kind==="max"&&(t===null||r.valuenew eu({checks:[],typeName:qe.ZodNumber,coerce:(e==null?void 0:e.coerce)||!1,...ot(e)});class tu extends ct{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(t){if(this._def.coerce&&(t.data=BigInt(t.data)),this._getType(t)!==Ce.bigint){const o=this._getOrReturnCtx(t);return Ee(o,{code:me.invalid_type,expected:Ce.bigint,received:o.parsedType}),Ye}let r;const i=new ri;for(const o of this._def.checks)o.kind==="min"?(o.inclusive?t.datao.value:t.data>=o.value)&&(r=this._getOrReturnCtx(t,r),Ee(r,{code:me.too_big,type:"bigint",maximum:o.value,inclusive:o.inclusive,message:o.message}),i.dirty()):o.kind==="multipleOf"?t.data%o.value!==BigInt(0)&&(r=this._getOrReturnCtx(t,r),Ee(r,{code:me.not_multiple_of,multipleOf:o.value,message:o.message}),i.dirty()):kt.assertNever(o);return{status:i.value,value:t.data}}gte(t,n){return this.setLimit("min",t,!0,ze.toString(n))}gt(t,n){return this.setLimit("min",t,!1,ze.toString(n))}lte(t,n){return this.setLimit("max",t,!0,ze.toString(n))}lt(t,n){return this.setLimit("max",t,!1,ze.toString(n))}setLimit(t,n,r,i){return new tu({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:ze.toString(i)}]})}_addCheck(t){return new tu({...this._def,checks:[...this._def.checks,t]})}positive(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:ze.toString(t)})}negative(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:ze.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:ze.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:ze.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:ze.toString(n)})}get minValue(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.value{var t;return new tu({checks:[],typeName:qe.ZodBigInt,coerce:(t=e==null?void 0:e.coerce)!==null&&t!==void 0?t:!1,...ot(e)})};class Eg extends ct{_parse(t){if(this._def.coerce&&(t.data=!!t.data),this._getType(t)!==Ce.boolean){const r=this._getOrReturnCtx(t);return Ee(r,{code:me.invalid_type,expected:Ce.boolean,received:r.parsedType}),Ye}return _i(t.data)}}Eg.create=e=>new Eg({typeName:qe.ZodBoolean,coerce:(e==null?void 0:e.coerce)||!1,...ot(e)});class mc extends ct{_parse(t){if(this._def.coerce&&(t.data=new Date(t.data)),this._getType(t)!==Ce.date){const o=this._getOrReturnCtx(t);return Ee(o,{code:me.invalid_type,expected:Ce.date,received:o.parsedType}),Ye}if(isNaN(t.data.getTime())){const o=this._getOrReturnCtx(t);return Ee(o,{code:me.invalid_date}),Ye}const r=new ri;let i;for(const o of this._def.checks)o.kind==="min"?t.data.getTime()o.value&&(i=this._getOrReturnCtx(t,i),Ee(i,{code:me.too_big,message:o.message,inclusive:!0,exact:!1,maximum:o.value,type:"date"}),r.dirty()):kt.assertNever(o);return{status:r.value,value:new Date(t.data.getTime())}}_addCheck(t){return new mc({...this._def,checks:[...this._def.checks,t]})}min(t,n){return this._addCheck({kind:"min",value:t.getTime(),message:ze.toString(n)})}max(t,n){return this._addCheck({kind:"max",value:t.getTime(),message:ze.toString(n)})}get minDate(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t!=null?new Date(t):null}get maxDate(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.valuenew mc({checks:[],coerce:(e==null?void 0:e.coerce)||!1,typeName:qe.ZodDate,...ot(e)});class R1 extends ct{_parse(t){if(this._getType(t)!==Ce.symbol){const r=this._getOrReturnCtx(t);return Ee(r,{code:me.invalid_type,expected:Ce.symbol,received:r.parsedType}),Ye}return _i(t.data)}}R1.create=e=>new R1({typeName:qe.ZodSymbol,...ot(e)});class Ag extends ct{_parse(t){if(this._getType(t)!==Ce.undefined){const r=this._getOrReturnCtx(t);return Ee(r,{code:me.invalid_type,expected:Ce.undefined,received:r.parsedType}),Ye}return _i(t.data)}}Ag.create=e=>new Ag({typeName:qe.ZodUndefined,...ot(e)});class Pg extends ct{_parse(t){if(this._getType(t)!==Ce.null){const r=this._getOrReturnCtx(t);return Ee(r,{code:me.invalid_type,expected:Ce.null,received:r.parsedType}),Ye}return _i(t.data)}}Pg.create=e=>new Pg({typeName:qe.ZodNull,...ot(e)});class Lf extends ct{constructor(){super(...arguments),this._any=!0}_parse(t){return _i(t.data)}}Lf.create=e=>new Lf({typeName:qe.ZodAny,...ot(e)});class ic extends ct{constructor(){super(...arguments),this._unknown=!0}_parse(t){return _i(t.data)}}ic.create=e=>new ic({typeName:qe.ZodUnknown,...ot(e)});class Ga extends ct{_parse(t){const n=this._getOrReturnCtx(t);return Ee(n,{code:me.invalid_type,expected:Ce.never,received:n.parsedType}),Ye}}Ga.create=e=>new Ga({typeName:qe.ZodNever,...ot(e)});class O1 extends ct{_parse(t){if(this._getType(t)!==Ce.undefined){const r=this._getOrReturnCtx(t);return Ee(r,{code:me.invalid_type,expected:Ce.void,received:r.parsedType}),Ye}return _i(t.data)}}O1.create=e=>new O1({typeName:qe.ZodVoid,...ot(e)});class cs extends ct{_parse(t){const{ctx:n,status:r}=this._processInputParams(t),i=this._def;if(n.parsedType!==Ce.array)return Ee(n,{code:me.invalid_type,expected:Ce.array,received:n.parsedType}),Ye;if(i.exactLength!==null){const s=n.data.length>i.exactLength.value,a=n.data.lengthi.maxLength.value&&(Ee(n,{code:me.too_big,maximum:i.maxLength.value,type:"array",inclusive:!0,exact:!1,message:i.maxLength.message}),r.dirty()),n.common.async)return Promise.all([...n.data].map((s,a)=>i.type._parseAsync(new Ks(n,s,n.path,a)))).then(s=>ri.mergeArray(r,s));const o=[...n.data].map((s,a)=>i.type._parseSync(new Ks(n,s,n.path,a)));return ri.mergeArray(r,o)}get element(){return this._def.type}min(t,n){return new cs({...this._def,minLength:{value:t,message:ze.toString(n)}})}max(t,n){return new cs({...this._def,maxLength:{value:t,message:ze.toString(n)}})}length(t,n){return new cs({...this._def,exactLength:{value:t,message:ze.toString(n)}})}nonempty(t){return this.min(1,t)}}cs.create=(e,t)=>new cs({type:e,minLength:null,maxLength:null,exactLength:null,typeName:qe.ZodArray,...ot(t)});function Rd(e){if(e instanceof Tn){const t={};for(const n in e.shape){const r=e.shape[n];t[n]=Ma.create(Rd(r))}return new Tn({...e._def,shape:()=>t})}else return e instanceof cs?new cs({...e._def,type:Rd(e.element)}):e instanceof Ma?Ma.create(Rd(e.unwrap())):e instanceof vc?vc.create(Rd(e.unwrap())):e instanceof Xs?Xs.create(e.items.map(t=>Rd(t))):e}class Tn extends ct{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;const t=this._def.shape(),n=kt.objectKeys(t);return this._cached={shape:t,keys:n}}_parse(t){if(this._getType(t)!==Ce.object){const u=this._getOrReturnCtx(t);return Ee(u,{code:me.invalid_type,expected:Ce.object,received:u.parsedType}),Ye}const{status:r,ctx:i}=this._processInputParams(t),{shape:o,keys:s}=this._getCached(),a=[];if(!(this._def.catchall instanceof Ga&&this._def.unknownKeys==="strip"))for(const u in i.data)s.includes(u)||a.push(u);const l=[];for(const u of s){const d=o[u],f=i.data[u];l.push({key:{status:"valid",value:u},value:d._parse(new Ks(i,f,i.path,u)),alwaysSet:u in i.data})}if(this._def.catchall instanceof Ga){const u=this._def.unknownKeys;if(u==="passthrough")for(const d of a)l.push({key:{status:"valid",value:d},value:{status:"valid",value:i.data[d]}});else if(u==="strict")a.length>0&&(Ee(i,{code:me.unrecognized_keys,keys:a}),r.dirty());else if(u!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{const u=this._def.catchall;for(const d of a){const f=i.data[d];l.push({key:{status:"valid",value:d},value:u._parse(new Ks(i,f,i.path,d)),alwaysSet:d in i.data})}}return i.common.async?Promise.resolve().then(async()=>{const u=[];for(const d of l){const f=await d.key;u.push({key:f,value:await d.value,alwaysSet:d.alwaysSet})}return u}).then(u=>ri.mergeObjectSync(r,u)):ri.mergeObjectSync(r,l)}get shape(){return this._def.shape()}strict(t){return ze.errToObj,new Tn({...this._def,unknownKeys:"strict",...t!==void 0?{errorMap:(n,r)=>{var i,o,s,a;const l=(s=(o=(i=this._def).errorMap)===null||o===void 0?void 0:o.call(i,n,r).message)!==null&&s!==void 0?s:r.defaultError;return n.code==="unrecognized_keys"?{message:(a=ze.errToObj(t).message)!==null&&a!==void 0?a:l}:{message:l}}}:{}})}strip(){return new Tn({...this._def,unknownKeys:"strip"})}passthrough(){return new Tn({...this._def,unknownKeys:"passthrough"})}extend(t){return new Tn({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new Tn({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:qe.ZodObject})}setKey(t,n){return this.augment({[t]:n})}catchall(t){return new Tn({...this._def,catchall:t})}pick(t){const n={};return kt.objectKeys(t).forEach(r=>{t[r]&&this.shape[r]&&(n[r]=this.shape[r])}),new Tn({...this._def,shape:()=>n})}omit(t){const n={};return kt.objectKeys(this.shape).forEach(r=>{t[r]||(n[r]=this.shape[r])}),new Tn({...this._def,shape:()=>n})}deepPartial(){return Rd(this)}partial(t){const n={};return kt.objectKeys(this.shape).forEach(r=>{const i=this.shape[r];t&&!t[r]?n[r]=i:n[r]=i.optional()}),new Tn({...this._def,shape:()=>n})}required(t){const n={};return kt.objectKeys(this.shape).forEach(r=>{if(t&&!t[r])n[r]=this.shape[r];else{let o=this.shape[r];for(;o instanceof Ma;)o=o._def.innerType;n[r]=o}}),new Tn({...this._def,shape:()=>n})}keyof(){return a$(kt.objectKeys(this.shape))}}Tn.create=(e,t)=>new Tn({shape:()=>e,unknownKeys:"strip",catchall:Ga.create(),typeName:qe.ZodObject,...ot(t)});Tn.strictCreate=(e,t)=>new Tn({shape:()=>e,unknownKeys:"strict",catchall:Ga.create(),typeName:qe.ZodObject,...ot(t)});Tn.lazycreate=(e,t)=>new Tn({shape:e,unknownKeys:"strip",catchall:Ga.create(),typeName:qe.ZodObject,...ot(t)});class Rg extends ct{_parse(t){const{ctx:n}=this._processInputParams(t),r=this._def.options;function i(o){for(const a of o)if(a.result.status==="valid")return a.result;for(const a of o)if(a.result.status==="dirty")return n.common.issues.push(...a.ctx.common.issues),a.result;const s=o.map(a=>new us(a.ctx.common.issues));return Ee(n,{code:me.invalid_union,unionErrors:s}),Ye}if(n.common.async)return Promise.all(r.map(async o=>{const s={...n,common:{...n.common,issues:[]},parent:null};return{result:await o._parseAsync({data:n.data,path:n.path,parent:s}),ctx:s}})).then(i);{let o;const s=[];for(const l of r){const u={...n,common:{...n.common,issues:[]},parent:null},d=l._parseSync({data:n.data,path:n.path,parent:u});if(d.status==="valid")return d;d.status==="dirty"&&!o&&(o={result:d,ctx:u}),u.common.issues.length&&s.push(u.common.issues)}if(o)return n.common.issues.push(...o.ctx.common.issues),o.result;const a=s.map(l=>new us(l));return Ee(n,{code:me.invalid_union,unionErrors:a}),Ye}}get options(){return this._def.options}}Rg.create=(e,t)=>new Rg({options:e,typeName:qe.ZodUnion,...ot(t)});const xv=e=>e instanceof Ig?xv(e.schema):e instanceof gs?xv(e.innerType()):e instanceof Mg?[e.value]:e instanceof nu?e.options:e instanceof Ng?Object.keys(e.enum):e instanceof Lg?xv(e._def.innerType):e instanceof Ag?[void 0]:e instanceof Pg?[null]:null;class yb extends ct{_parse(t){const{ctx:n}=this._processInputParams(t);if(n.parsedType!==Ce.object)return Ee(n,{code:me.invalid_type,expected:Ce.object,received:n.parsedType}),Ye;const r=this.discriminator,i=n.data[r],o=this.optionsMap.get(i);return o?n.common.async?o._parseAsync({data:n.data,path:n.path,parent:n}):o._parseSync({data:n.data,path:n.path,parent:n}):(Ee(n,{code:me.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),Ye)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(t,n,r){const i=new Map;for(const o of n){const s=xv(o.shape[t]);if(!s)throw new Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(const a of s){if(i.has(a))throw new Error(`Discriminator property ${String(t)} has duplicate value ${String(a)}`);i.set(a,o)}}return new yb({typeName:qe.ZodDiscriminatedUnion,discriminator:t,options:n,optionsMap:i,...ot(r)})}}function U3(e,t){const n=Rl(e),r=Rl(t);if(e===t)return{valid:!0,data:e};if(n===Ce.object&&r===Ce.object){const i=kt.objectKeys(t),o=kt.objectKeys(e).filter(a=>i.indexOf(a)!==-1),s={...e,...t};for(const a of o){const l=U3(e[a],t[a]);if(!l.valid)return{valid:!1};s[a]=l.data}return{valid:!0,data:s}}else if(n===Ce.array&&r===Ce.array){if(e.length!==t.length)return{valid:!1};const i=[];for(let o=0;o{if(F3(o)||F3(s))return Ye;const a=U3(o.value,s.value);return a.valid?((B3(o)||B3(s))&&n.dirty(),{status:n.value,value:a.data}):(Ee(r,{code:me.invalid_intersection_types}),Ye)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([o,s])=>i(o,s)):i(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}}Og.create=(e,t,n)=>new Og({left:e,right:t,typeName:qe.ZodIntersection,...ot(n)});class Xs extends ct{_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==Ce.array)return Ee(r,{code:me.invalid_type,expected:Ce.array,received:r.parsedType}),Ye;if(r.data.lengththis._def.items.length&&(Ee(r,{code:me.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),n.dirty());const o=[...r.data].map((s,a)=>{const l=this._def.items[a]||this._def.rest;return l?l._parse(new Ks(r,s,r.path,a)):null}).filter(s=>!!s);return r.common.async?Promise.all(o).then(s=>ri.mergeArray(n,s)):ri.mergeArray(n,o)}get items(){return this._def.items}rest(t){return new Xs({...this._def,rest:t})}}Xs.create=(e,t)=>{if(!Array.isArray(e))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new Xs({items:e,typeName:qe.ZodTuple,rest:null,...ot(t)})};class kg extends ct{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==Ce.object)return Ee(r,{code:me.invalid_type,expected:Ce.object,received:r.parsedType}),Ye;const i=[],o=this._def.keyType,s=this._def.valueType;for(const a in r.data)i.push({key:o._parse(new Ks(r,a,r.path,a)),value:s._parse(new Ks(r,r.data[a],r.path,a))});return r.common.async?ri.mergeObjectAsync(n,i):ri.mergeObjectSync(n,i)}get element(){return this._def.valueType}static create(t,n,r){return n instanceof ct?new kg({keyType:t,valueType:n,typeName:qe.ZodRecord,...ot(r)}):new kg({keyType:os.create(),valueType:t,typeName:qe.ZodRecord,...ot(n)})}}class k1 extends ct{_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==Ce.map)return Ee(r,{code:me.invalid_type,expected:Ce.map,received:r.parsedType}),Ye;const i=this._def.keyType,o=this._def.valueType,s=[...r.data.entries()].map(([a,l],u)=>({key:i._parse(new Ks(r,a,r.path,[u,"key"])),value:o._parse(new Ks(r,l,r.path,[u,"value"]))}));if(r.common.async){const a=new Map;return Promise.resolve().then(async()=>{for(const l of s){const u=await l.key,d=await l.value;if(u.status==="aborted"||d.status==="aborted")return Ye;(u.status==="dirty"||d.status==="dirty")&&n.dirty(),a.set(u.value,d.value)}return{status:n.value,value:a}})}else{const a=new Map;for(const l of s){const u=l.key,d=l.value;if(u.status==="aborted"||d.status==="aborted")return Ye;(u.status==="dirty"||d.status==="dirty")&&n.dirty(),a.set(u.value,d.value)}return{status:n.value,value:a}}}}k1.create=(e,t,n)=>new k1({valueType:t,keyType:e,typeName:qe.ZodMap,...ot(n)});class yc extends ct{_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==Ce.set)return Ee(r,{code:me.invalid_type,expected:Ce.set,received:r.parsedType}),Ye;const i=this._def;i.minSize!==null&&r.data.sizei.maxSize.value&&(Ee(r,{code:me.too_big,maximum:i.maxSize.value,type:"set",inclusive:!0,exact:!1,message:i.maxSize.message}),n.dirty());const o=this._def.valueType;function s(l){const u=new Set;for(const d of l){if(d.status==="aborted")return Ye;d.status==="dirty"&&n.dirty(),u.add(d.value)}return{status:n.value,value:u}}const a=[...r.data.values()].map((l,u)=>o._parse(new Ks(r,l,r.path,u)));return r.common.async?Promise.all(a).then(l=>s(l)):s(a)}min(t,n){return new yc({...this._def,minSize:{value:t,message:ze.toString(n)}})}max(t,n){return new yc({...this._def,maxSize:{value:t,message:ze.toString(n)}})}size(t,n){return this.min(t,n).max(t,n)}nonempty(t){return this.min(1,t)}}yc.create=(e,t)=>new yc({valueType:e,minSize:null,maxSize:null,typeName:qe.ZodSet,...ot(t)});class ff extends ct{constructor(){super(...arguments),this.validate=this.implement}_parse(t){const{ctx:n}=this._processInputParams(t);if(n.parsedType!==Ce.function)return Ee(n,{code:me.invalid_type,expected:Ce.function,received:n.parsedType}),Ye;function r(a,l){return E1({data:a,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,T1(),Tg].filter(u=>!!u),issueData:{code:me.invalid_arguments,argumentsError:l}})}function i(a,l){return E1({data:a,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,T1(),Tg].filter(u=>!!u),issueData:{code:me.invalid_return_type,returnTypeError:l}})}const o={errorMap:n.common.contextualErrorMap},s=n.data;return this._def.returns instanceof Df?_i(async(...a)=>{const l=new us([]),u=await this._def.args.parseAsync(a,o).catch(h=>{throw l.addIssue(r(a,h)),l}),d=await s(...u);return await this._def.returns._def.type.parseAsync(d,o).catch(h=>{throw l.addIssue(i(d,h)),l})}):_i((...a)=>{const l=this._def.args.safeParse(a,o);if(!l.success)throw new us([r(a,l.error)]);const u=s(...l.data),d=this._def.returns.safeParse(u,o);if(!d.success)throw new us([i(u,d.error)]);return d.data})}parameters(){return this._def.args}returnType(){return this._def.returns}args(...t){return new ff({...this._def,args:Xs.create(t).rest(ic.create())})}returns(t){return new ff({...this._def,returns:t})}implement(t){return this.parse(t)}strictImplement(t){return this.parse(t)}static create(t,n,r){return new ff({args:t||Xs.create([]).rest(ic.create()),returns:n||ic.create(),typeName:qe.ZodFunction,...ot(r)})}}class Ig extends ct{get schema(){return this._def.getter()}_parse(t){const{ctx:n}=this._processInputParams(t);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}}Ig.create=(e,t)=>new Ig({getter:e,typeName:qe.ZodLazy,...ot(t)});class Mg extends ct{_parse(t){if(t.data!==this._def.value){const n=this._getOrReturnCtx(t);return Ee(n,{received:n.data,code:me.invalid_literal,expected:this._def.value}),Ye}return{status:"valid",value:t.data}}get value(){return this._def.value}}Mg.create=(e,t)=>new Mg({value:e,typeName:qe.ZodLiteral,...ot(t)});function a$(e,t){return new nu({values:e,typeName:qe.ZodEnum,...ot(t)})}class nu extends ct{_parse(t){if(typeof t.data!="string"){const n=this._getOrReturnCtx(t),r=this._def.values;return Ee(n,{expected:kt.joinValues(r),received:n.parsedType,code:me.invalid_type}),Ye}if(this._def.values.indexOf(t.data)===-1){const n=this._getOrReturnCtx(t),r=this._def.values;return Ee(n,{received:n.data,code:me.invalid_enum_value,options:r}),Ye}return _i(t.data)}get options(){return this._def.values}get enum(){const t={};for(const n of this._def.values)t[n]=n;return t}get Values(){const t={};for(const n of this._def.values)t[n]=n;return t}get Enum(){const t={};for(const n of this._def.values)t[n]=n;return t}extract(t){return nu.create(t)}exclude(t){return nu.create(this.options.filter(n=>!t.includes(n)))}}nu.create=a$;class Ng extends ct{_parse(t){const n=kt.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(t);if(r.parsedType!==Ce.string&&r.parsedType!==Ce.number){const i=kt.objectValues(n);return Ee(r,{expected:kt.joinValues(i),received:r.parsedType,code:me.invalid_type}),Ye}if(n.indexOf(t.data)===-1){const i=kt.objectValues(n);return Ee(r,{received:r.data,code:me.invalid_enum_value,options:i}),Ye}return _i(t.data)}get enum(){return this._def.values}}Ng.create=(e,t)=>new Ng({values:e,typeName:qe.ZodNativeEnum,...ot(t)});class Df extends ct{unwrap(){return this._def.type}_parse(t){const{ctx:n}=this._processInputParams(t);if(n.parsedType!==Ce.promise&&n.common.async===!1)return Ee(n,{code:me.invalid_type,expected:Ce.promise,received:n.parsedType}),Ye;const r=n.parsedType===Ce.promise?n.data:Promise.resolve(n.data);return _i(r.then(i=>this._def.type.parseAsync(i,{path:n.path,errorMap:n.common.contextualErrorMap})))}}Df.create=(e,t)=>new Df({type:e,typeName:qe.ZodPromise,...ot(t)});class gs extends ct{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===qe.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(t){const{status:n,ctx:r}=this._processInputParams(t),i=this._def.effect||null;if(i.type==="preprocess"){const s=i.transform(r.data);return r.common.async?Promise.resolve(s).then(a=>this._def.schema._parseAsync({data:a,path:r.path,parent:r})):this._def.schema._parseSync({data:s,path:r.path,parent:r})}const o={addIssue:s=>{Ee(r,s),s.fatal?n.abort():n.dirty()},get path(){return r.path}};if(o.addIssue=o.addIssue.bind(o),i.type==="refinement"){const s=a=>{const l=i.refinement(a,o);if(r.common.async)return Promise.resolve(l);if(l instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return a};if(r.common.async===!1){const a=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return a.status==="aborted"?Ye:(a.status==="dirty"&&n.dirty(),s(a.value),{status:n.value,value:a.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(a=>a.status==="aborted"?Ye:(a.status==="dirty"&&n.dirty(),s(a.value).then(()=>({status:n.value,value:a.value}))))}if(i.type==="transform")if(r.common.async===!1){const s=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!A1(s))return s;const a=i.transform(s.value,o);if(a instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:n.value,value:a}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(s=>A1(s)?Promise.resolve(i.transform(s.value,o)).then(a=>({status:n.value,value:a})):s);kt.assertNever(i)}}gs.create=(e,t,n)=>new gs({schema:e,typeName:qe.ZodEffects,effect:t,...ot(n)});gs.createWithPreprocess=(e,t,n)=>new gs({schema:t,effect:{type:"preprocess",transform:e},typeName:qe.ZodEffects,...ot(n)});class Ma extends ct{_parse(t){return this._getType(t)===Ce.undefined?_i(void 0):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}}Ma.create=(e,t)=>new Ma({innerType:e,typeName:qe.ZodOptional,...ot(t)});class vc extends ct{_parse(t){return this._getType(t)===Ce.null?_i(null):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}}vc.create=(e,t)=>new vc({innerType:e,typeName:qe.ZodNullable,...ot(t)});class Lg extends ct{_parse(t){const{ctx:n}=this._processInputParams(t);let r=n.data;return n.parsedType===Ce.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:n.path,parent:n})}removeDefault(){return this._def.innerType}}Lg.create=(e,t)=>new Lg({innerType:e,typeName:qe.ZodDefault,defaultValue:typeof t.default=="function"?t.default:()=>t.default,...ot(t)});class I1 extends ct{_parse(t){const{ctx:n}=this._processInputParams(t),r={...n,common:{...n.common,issues:[]}},i=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return P1(i)?i.then(o=>({status:"valid",value:o.status==="valid"?o.value:this._def.catchValue({get error(){return new us(r.common.issues)},input:r.data})})):{status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new us(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}}I1.create=(e,t)=>new I1({innerType:e,typeName:qe.ZodCatch,catchValue:typeof t.catch=="function"?t.catch:()=>t.catch,...ot(t)});class M1 extends ct{_parse(t){if(this._getType(t)!==Ce.nan){const r=this._getOrReturnCtx(t);return Ee(r,{code:me.invalid_type,expected:Ce.nan,received:r.parsedType}),Ye}return{status:"valid",value:t.data}}}M1.create=e=>new M1({typeName:qe.ZodNaN,...ot(e)});const Vle=Symbol("zod_brand");class l$ extends ct{_parse(t){const{ctx:n}=this._processInputParams(t),r=n.data;return this._def.type._parse({data:r,path:n.path,parent:n})}unwrap(){return this._def.type}}class Pm extends ct{_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.common.async)return(async()=>{const o=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return o.status==="aborted"?Ye:o.status==="dirty"?(n.dirty(),s$(o.value)):this._def.out._parseAsync({data:o.value,path:r.path,parent:r})})();{const i=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?Ye:i.status==="dirty"?(n.dirty(),{status:"dirty",value:i.value}):this._def.out._parseSync({data:i.value,path:r.path,parent:r})}}static create(t,n){return new Pm({in:t,out:n,typeName:qe.ZodPipeline})}}const u$=(e,t={},n)=>e?Lf.create().superRefine((r,i)=>{var o,s;if(!e(r)){const a=typeof t=="function"?t(r):typeof t=="string"?{message:t}:t,l=(s=(o=a.fatal)!==null&&o!==void 0?o:n)!==null&&s!==void 0?s:!0,u=typeof a=="string"?{message:a}:a;i.addIssue({code:"custom",...u,fatal:l})}}):Lf.create(),jle={object:Tn.lazycreate};var qe;(function(e){e.ZodString="ZodString",e.ZodNumber="ZodNumber",e.ZodNaN="ZodNaN",e.ZodBigInt="ZodBigInt",e.ZodBoolean="ZodBoolean",e.ZodDate="ZodDate",e.ZodSymbol="ZodSymbol",e.ZodUndefined="ZodUndefined",e.ZodNull="ZodNull",e.ZodAny="ZodAny",e.ZodUnknown="ZodUnknown",e.ZodNever="ZodNever",e.ZodVoid="ZodVoid",e.ZodArray="ZodArray",e.ZodObject="ZodObject",e.ZodUnion="ZodUnion",e.ZodDiscriminatedUnion="ZodDiscriminatedUnion",e.ZodIntersection="ZodIntersection",e.ZodTuple="ZodTuple",e.ZodRecord="ZodRecord",e.ZodMap="ZodMap",e.ZodSet="ZodSet",e.ZodFunction="ZodFunction",e.ZodLazy="ZodLazy",e.ZodLiteral="ZodLiteral",e.ZodEnum="ZodEnum",e.ZodEffects="ZodEffects",e.ZodNativeEnum="ZodNativeEnum",e.ZodOptional="ZodOptional",e.ZodNullable="ZodNullable",e.ZodDefault="ZodDefault",e.ZodCatch="ZodCatch",e.ZodPromise="ZodPromise",e.ZodBranded="ZodBranded",e.ZodPipeline="ZodPipeline"})(qe||(qe={}));const Gle=(e,t={message:`Input not instance of ${e.name}`})=>u$(n=>n instanceof e,t),c$=os.create,d$=eu.create,Hle=M1.create,Wle=tu.create,f$=Eg.create,qle=mc.create,Kle=R1.create,Xle=Ag.create,Yle=Pg.create,Qle=Lf.create,Zle=ic.create,Jle=Ga.create,eue=O1.create,tue=cs.create,nue=Tn.create,rue=Tn.strictCreate,iue=Rg.create,oue=yb.create,sue=Og.create,aue=Xs.create,lue=kg.create,uue=k1.create,cue=yc.create,due=ff.create,fue=Ig.create,hue=Mg.create,pue=nu.create,gue=Ng.create,mue=Df.create,Q9=gs.create,yue=Ma.create,vue=vc.create,_ue=gs.createWithPreprocess,bue=Pm.create,Sue=()=>c$().optional(),wue=()=>d$().optional(),xue=()=>f$().optional(),Cue={string:e=>os.create({...e,coerce:!0}),number:e=>eu.create({...e,coerce:!0}),boolean:e=>Eg.create({...e,coerce:!0}),bigint:e=>tu.create({...e,coerce:!0}),date:e=>mc.create({...e,coerce:!0})},Tue=Ye;var Et=Object.freeze({__proto__:null,defaultErrorMap:Tg,setErrorMap:Rle,getErrorMap:T1,makeIssue:E1,EMPTY_PATH:Ole,addIssueToContext:Ee,ParseStatus:ri,INVALID:Ye,DIRTY:s$,OK:_i,isAborted:F3,isDirty:B3,isValid:A1,isAsync:P1,get util(){return kt},get objectUtil(){return $3},ZodParsedType:Ce,getParsedType:Rl,ZodType:ct,ZodString:os,ZodNumber:eu,ZodBigInt:tu,ZodBoolean:Eg,ZodDate:mc,ZodSymbol:R1,ZodUndefined:Ag,ZodNull:Pg,ZodAny:Lf,ZodUnknown:ic,ZodNever:Ga,ZodVoid:O1,ZodArray:cs,ZodObject:Tn,ZodUnion:Rg,ZodDiscriminatedUnion:yb,ZodIntersection:Og,ZodTuple:Xs,ZodRecord:kg,ZodMap:k1,ZodSet:yc,ZodFunction:ff,ZodLazy:Ig,ZodLiteral:Mg,ZodEnum:nu,ZodNativeEnum:Ng,ZodPromise:Df,ZodEffects:gs,ZodTransformer:gs,ZodOptional:Ma,ZodNullable:vc,ZodDefault:Lg,ZodCatch:I1,ZodNaN:M1,BRAND:Vle,ZodBranded:l$,ZodPipeline:Pm,custom:u$,Schema:ct,ZodSchema:ct,late:jle,get ZodFirstPartyTypeKind(){return qe},coerce:Cue,any:Qle,array:tue,bigint:Wle,boolean:f$,date:qle,discriminatedUnion:oue,effect:Q9,enum:pue,function:due,instanceof:Gle,intersection:sue,lazy:fue,literal:hue,map:uue,nan:Hle,nativeEnum:gue,never:Jle,null:Yle,nullable:vue,number:d$,object:nue,oboolean:xue,onumber:wue,optional:yue,ostring:Sue,pipeline:bue,preprocess:_ue,promise:mue,record:lue,set:cue,strictObject:rue,string:c$,symbol:Kle,transformer:Q9,tuple:aue,undefined:Xle,union:iue,unknown:Zle,void:eue,NEVER:Tue,ZodIssueCode:me,quotelessJson:Ple,ZodError:us});const Eue=Et.string(),PRe=e=>Eue.safeParse(e).success,Aue=Et.string(),RRe=e=>Aue.safeParse(e).success,Pue=Et.string(),ORe=e=>Pue.safeParse(e).success,Rue=Et.string(),kRe=e=>Rue.safeParse(e).success,Oue=Et.number().int().min(1),IRe=e=>Oue.safeParse(e).success,kue=Et.number().min(1),MRe=e=>kue.safeParse(e).success,Iue=Et.enum(["euler","deis","ddim","ddpm","dpmpp_2s","dpmpp_2m","dpmpp_2m_sde","dpmpp_sde","heun","kdpm_2","lms","pndm","unipc","euler_k","dpmpp_2s_k","dpmpp_2m_k","dpmpp_2m_sde_k","dpmpp_sde_k","heun_k","lms_k","euler_a","kdpm_2_a"]),NRe=e=>Iue.safeParse(e).success,LRe={euler:"Euler",deis:"DEIS",ddim:"DDIM",ddpm:"DDPM",dpmpp_sde:"DPM++ SDE",dpmpp_2s:"DPM++ 2S",dpmpp_2m:"DPM++ 2M",dpmpp_2m_sde:"DPM++ 2M SDE",heun:"Heun",kdpm_2:"KDPM 2",lms:"LMS",pndm:"PNDM",unipc:"UniPC",euler_k:"Euler Karras",dpmpp_sde_k:"DPM++ SDE Karras",dpmpp_2s_k:"DPM++ 2S Karras",dpmpp_2m_k:"DPM++ 2M Karras",dpmpp_2m_sde_k:"DPM++ 2M SDE Karras",heun_k:"Heun Karras",lms_k:"LMS Karras",euler_a:"Euler Ancestral",kdpm_2_a:"KDPM 2 Ancestral"},Mue=Et.number().int().min(0).max(Ale),DRe=e=>Mue.safeParse(e).success,Nue=Et.number().multipleOf(8).min(64),$Re=e=>Nue.safeParse(e).success,Lue=Et.number().multipleOf(8).min(64),FRe=e=>Lue.safeParse(e).success,Rm=Et.enum(["sd-1","sd-2","sdxl","sdxl-refiner"]),$T=Et.object({model_name:Et.string().min(1),base_model:Rm,model_type:Et.literal("main")}),BRe=e=>$T.safeParse(e).success,h$=Et.object({model_name:Et.string().min(1),base_model:Et.literal("sdxl-refiner"),model_type:Et.literal("main")}),URe=e=>h$.safeParse(e).success,Due=Et.object({model_name:Et.string().min(1),base_model:Rm,model_type:Et.literal("onnx")}),p$=Et.union([$T,Due]),$ue=Et.object({model_name:Et.string().min(1),base_model:Rm}),zRe=Et.object({model_name:Et.string().min(1),base_model:Rm}),VRe=Et.object({model_name:Et.string().min(1),base_model:Rm}),Fue=Et.number().min(0).max(1),jRe=e=>Fue.safeParse(e).success;Et.enum(["fp16","fp32"]);const Bue=Et.number().min(1).max(10),GRe=e=>Bue.safeParse(e).success,Uue=Et.number().min(1).max(10),HRe=e=>Uue.safeParse(e).success,zue=Et.number().min(0).max(1),WRe=e=>zue.safeParse(e).success;Et.enum(["box","gaussian"]);const ys={cfgScale:7.5,height:512,img2imgStrength:.75,infillMethod:"patchmatch",iterations:1,perlin:0,positivePrompt:"",negativePrompt:"",scheduler:"euler",maskBlur:16,maskBlurMethod:"box",seed:0,seedWeights:"",shouldFitToWidthHeight:!0,shouldGenerateVariations:!1,shouldRandomizeSeed:!0,shouldUseNoiseSettings:!1,steps:50,threshold:0,tileSize:32,variationAmount:.1,width:512,shouldUseSymmetry:!1,horizontalSymmetrySteps:0,verticalSymmetrySteps:0,model:null,vae:null,vaePrecision:"fp32",seamlessXAxis:!1,seamlessYAxis:!1,clipSkip:0,shouldUseCpuNoise:!0,shouldShowAdvancedOptions:!1,aspectRatio:null},Vue=ys,g$=An({name:"generation",initialState:Vue,reducers:{setPositivePrompt:(e,t)=>{e.positivePrompt=t.payload},setNegativePrompt:(e,t)=>{e.negativePrompt=t.payload},setIterations:(e,t)=>{e.iterations=t.payload},setSteps:(e,t)=>{e.steps=t.payload},clampSymmetrySteps:e=>{e.horizontalSymmetrySteps=Ml(e.horizontalSymmetrySteps,0,e.steps),e.verticalSymmetrySteps=Ml(e.verticalSymmetrySteps,0,e.steps)},setCfgScale:(e,t)=>{e.cfgScale=t.payload},setThreshold:(e,t)=>{e.threshold=t.payload},setPerlin:(e,t)=>{e.perlin=t.payload},setHeight:(e,t)=>{e.height=t.payload},setWidth:(e,t)=>{e.width=t.payload},toggleSize:e=>{const[t,n]=[e.width,e.height];e.width=n,e.height=t},setScheduler:(e,t)=>{e.scheduler=t.payload},setSeed:(e,t)=>{e.seed=t.payload,e.shouldRandomizeSeed=!1},setImg2imgStrength:(e,t)=>{e.img2imgStrength=t.payload},setSeamlessXAxis:(e,t)=>{e.seamlessXAxis=t.payload},setSeamlessYAxis:(e,t)=>{e.seamlessYAxis=t.payload},setShouldFitToWidthHeight:(e,t)=>{e.shouldFitToWidthHeight=t.payload},resetSeed:e=>{e.seed=-1},setShouldGenerateVariations:(e,t)=>{e.shouldGenerateVariations=t.payload},setVariationAmount:(e,t)=>{e.variationAmount=t.payload},setSeedWeights:(e,t)=>{e.seedWeights=t.payload,e.shouldGenerateVariations=!0,e.variationAmount=0},resetParametersState:e=>({...e,...ys}),setShouldRandomizeSeed:(e,t)=>{e.shouldRandomizeSeed=t.payload},clearInitialImage:e=>{e.initialImage=void 0},setMaskBlur:(e,t)=>{e.maskBlur=t.payload},setMaskBlurMethod:(e,t)=>{e.maskBlurMethod=t.payload},setTileSize:(e,t)=>{e.tileSize=t.payload},setInfillMethod:(e,t)=>{e.infillMethod=t.payload},setShouldUseSymmetry:(e,t)=>{e.shouldUseSymmetry=t.payload},setHorizontalSymmetrySteps:(e,t)=>{e.horizontalSymmetrySteps=t.payload},setVerticalSymmetrySteps:(e,t)=>{e.verticalSymmetrySteps=t.payload},setShouldUseNoiseSettings:(e,t)=>{e.shouldUseNoiseSettings=t.payload},initialImageChanged:(e,t)=>{const{image_name:n,width:r,height:i}=t.payload;e.initialImage={imageName:n,width:r,height:i}},modelChanged:(e,t)=>{if(e.model=t.payload,e.model===null)return;const{maxClip:n}=Ele[e.model.base_model];e.clipSkip=Ml(e.clipSkip,0,n)},vaeSelected:(e,t)=>{e.vae=t.payload},vaePrecisionChanged:(e,t)=>{e.vaePrecision=t.payload},setClipSkip:(e,t)=>{e.clipSkip=t.payload},shouldUseCpuNoiseChanged:(e,t)=>{e.shouldUseCpuNoise=t.payload},setShouldShowAdvancedOptions:(e,t)=>{e.shouldShowAdvancedOptions=t.payload,t.payload||(e.clipSkip=0)},setAspectRatio:(e,t)=>{const n=t.payload;e.aspectRatio=n,n&&(e.height=Ns(e.width/n,8))}},extraReducers:e=>{e.addCase(Cle,(t,n)=>{var i;const r=(i=n.payload.sd)==null?void 0:i.defaultModel;if(r&&!t.model){const[o,s,a]=r.split("/"),l=$T.safeParse({model_name:a,base_model:o,model_type:s});l.success&&(t.model=l.data)}}),e.addCase(Gue,(t,n)=>{n.payload||(t.clipSkip=0)})}}),{clampSymmetrySteps:qRe,clearInitialImage:FT,resetParametersState:KRe,resetSeed:XRe,setCfgScale:YRe,setWidth:QRe,setHeight:ZRe,toggleSize:JRe,setImg2imgStrength:eOe,setInfillMethod:jue,setIterations:tOe,setPerlin:nOe,setPositivePrompt:rOe,setNegativePrompt:iOe,setScheduler:oOe,setMaskBlur:sOe,setMaskBlurMethod:aOe,setSeed:lOe,setSeedWeights:uOe,setShouldFitToWidthHeight:cOe,setShouldGenerateVariations:dOe,setShouldRandomizeSeed:fOe,setSteps:hOe,setThreshold:pOe,setTileSize:gOe,setVariationAmount:mOe,setShouldUseSymmetry:yOe,setHorizontalSymmetrySteps:vOe,setVerticalSymmetrySteps:_Oe,initialImageChanged:vb,modelChanged:Nl,vaeSelected:m$,setShouldUseNoiseSettings:bOe,setSeamlessXAxis:SOe,setSeamlessYAxis:wOe,setClipSkip:xOe,shouldUseCpuNoiseChanged:COe,setShouldShowAdvancedOptions:Gue,setAspectRatio:Hue,vaePrecisionChanged:TOe}=g$.actions,Wue=g$.reducer,y$=["txt2img","img2img","unifiedCanvas","nodes","modelManager","batch"],Z9=(e,t)=>{typeof t=="number"?e.activeTab=t:e.activeTab=y$.indexOf(t)},v$={activeTab:0,shouldPinParametersPanel:!0,shouldShowParametersPanel:!0,shouldShowImageDetails:!1,shouldUseCanvasBetaLayout:!1,shouldShowExistingModelsInSearch:!1,shouldUseSliders:!1,shouldPinGallery:!0,shouldShowGallery:!0,shouldHidePreview:!1,shouldShowProgressInViewer:!0,shouldShowEmbeddingPicker:!1,favoriteSchedulers:[]},_$=An({name:"ui",initialState:v$,reducers:{setActiveTab:(e,t)=>{Z9(e,t.payload)},setShouldPinParametersPanel:(e,t)=>{e.shouldPinParametersPanel=t.payload,e.shouldShowParametersPanel=!0},setShouldShowParametersPanel:(e,t)=>{e.shouldShowParametersPanel=t.payload},setShouldShowImageDetails:(e,t)=>{e.shouldShowImageDetails=t.payload},setShouldUseCanvasBetaLayout:(e,t)=>{e.shouldUseCanvasBetaLayout=t.payload},setShouldHidePreview:(e,t)=>{e.shouldHidePreview=t.payload},setShouldShowExistingModelsInSearch:(e,t)=>{e.shouldShowExistingModelsInSearch=t.payload},setShouldUseSliders:(e,t)=>{e.shouldUseSliders=t.payload},setShouldShowGallery:(e,t)=>{e.shouldShowGallery=t.payload},togglePinGalleryPanel:e=>{e.shouldPinGallery=!e.shouldPinGallery,e.shouldPinGallery||(e.shouldShowGallery=!0)},togglePinParametersPanel:e=>{e.shouldPinParametersPanel=!e.shouldPinParametersPanel,e.shouldPinParametersPanel||(e.shouldShowParametersPanel=!0)},toggleParametersPanel:e=>{e.shouldShowParametersPanel=!e.shouldShowParametersPanel},toggleGalleryPanel:e=>{e.shouldShowGallery=!e.shouldShowGallery},togglePanels:e=>{e.shouldShowGallery||e.shouldShowParametersPanel?(e.shouldShowGallery=!1,e.shouldShowParametersPanel=!1):(e.shouldShowGallery=!0,e.shouldShowParametersPanel=!0)},setShouldShowProgressInViewer:(e,t)=>{e.shouldShowProgressInViewer=t.payload},favoriteSchedulersChanged:(e,t)=>{e.favoriteSchedulers=t.payload},toggleEmbeddingPicker:e=>{e.shouldShowEmbeddingPicker=!e.shouldShowEmbeddingPicker}},extraReducers(e){e.addCase(vb,t=>{Z9(t,"img2img")})}}),{setActiveTab:b$,setShouldPinParametersPanel:EOe,setShouldShowParametersPanel:AOe,setShouldShowImageDetails:POe,setShouldUseCanvasBetaLayout:que,setShouldShowExistingModelsInSearch:ROe,setShouldUseSliders:OOe,setShouldHidePreview:kOe,setShouldShowGallery:IOe,togglePanels:MOe,togglePinGalleryPanel:NOe,togglePinParametersPanel:LOe,toggleParametersPanel:DOe,toggleGalleryPanel:$Oe,setShouldShowProgressInViewer:FOe,favoriteSchedulersChanged:BOe,toggleEmbeddingPicker:UOe}=_$.actions,Kue=_$.reducer;let fi=[],Om=(e,t)=>{let n=[],r={get(){return r.lc||r.listen(()=>{})(),r.value},l:t||0,lc:0,listen(i,o){return r.lc=n.push(i,o||r.l)/2,()=>{let s=n.indexOf(i);~s&&(n.splice(s,2),r.lc--,r.lc||r.off())}},notify(i){let o=!fi.length;for(let s=0;s(e.events=e.events||{},e.events[n+P0]||(e.events[n+P0]=r(i=>{e.events[n].reduceRight((o,s)=>(s(o),o),{shared:{},...i})})),e.events[n]=e.events[n]||[],e.events[n].push(t),()=>{let i=e.events[n],o=i.indexOf(t);i.splice(o,1),i.length||(delete e.events[n],e.events[n+P0](),delete e.events[n+P0])}),Que=1e3,Zue=(e,t)=>Yue(e,r=>{let i=t(r);i&&e.events[A0].push(i)},Xue,r=>{let i=e.listen;e.listen=(...s)=>(!e.lc&&!e.active&&(e.active=!0,r()),i(...s));let o=e.off;return e.events[A0]=[],e.off=()=>{o(),setTimeout(()=>{if(e.active&&!e.lc){e.active=!1;for(let s of e.events[A0])s();e.events[A0]=[]}},Que)},()=>{e.listen=i,e.off=o}}),Jue=(e,t)=>{Array.isArray(e)||(e=[e]);let n,r=()=>{let o=e.map(s=>s.get());(n===void 0||o.some((s,a)=>s!==n[a]))&&(n=o,i.set(t(...o)))},i=Om(void 0,Math.max(...e.map(o=>o.l))+1);return Zue(i,()=>{let o=e.map(s=>s.listen(r,i.l));return r(),()=>{for(let s of o)s()}}),i};const ece={"Content-Type":"application/json"},tce=/\/*$/;function nce(e){const t=new URLSearchParams;if(e&&typeof e=="object")for(const[n,r]of Object.entries(e))r!=null&&t.set(n,r);return t.toString()}function rce(e){return JSON.stringify(e)}function ice(e,t){let n=`${t.baseUrl?t.baseUrl.replace(tce,""):""}${e}`;if(t.params.path)for(const[r,i]of Object.entries(t.params.path))n=n.replace(`{${r}}`,encodeURIComponent(String(i)));if(t.params.query){const r=t.querySerializer(t.params.query);r&&(n+=`?${r}`)}return n}function oce(e={}){const{fetch:t=globalThis.fetch,querySerializer:n,bodySerializer:r,...i}=e,o=new Headers({...ece,...i.headers??{}});async function s(a,l){const{headers:u,body:d,params:f={},parseAs:h="json",querySerializer:g=n??nce,bodySerializer:m=r??rce,...v}=l||{},x=ice(a,{baseUrl:i.baseUrl,params:f,querySerializer:g}),_=new Headers(o),b=new Headers(u);for(const[T,E]of b.entries())E==null?_.delete(T):_.set(T,E);const y={redirect:"follow",...i,...v,headers:_};d&&(y.body=m(d)),y.body instanceof FormData&&_.delete("Content-Type");const S=await t(x,y);if(S.status===204||S.headers.get("Content-Length")==="0")return S.ok?{data:{},response:S}:{error:{},response:S};if(S.ok){let T=S.body;if(h!=="stream"){const E=S.clone();T=typeof E[h]=="function"?await E[h]():await E.text()}return{data:T,response:S}}let C={};try{C=await S.clone().json()}catch{C=await S.clone().text()}return{error:C,response:S}}return{async get(a,l){return s(a,{...l,method:"GET"})},async put(a,l){return s(a,{...l,method:"PUT"})},async post(a,l){return s(a,{...l,method:"POST"})},async del(a,l){return s(a,{...l,method:"DELETE"})},async options(a,l){return s(a,{...l,method:"OPTIONS"})},async head(a,l){return s(a,{...l,method:"HEAD"})},async patch(a,l){return s(a,{...l,method:"PATCH"})},async trace(a,l){return s(a,{...l,method:"TRACE"})}}}const Dg=Om(),$g=Om(),N1=Om(),_b=Jue([Dg,$g,N1],(e,t,n)=>oce({headers:{...e?{Authorization:`Bearer ${e}`}:{},...n?{"project-id":n}:{}},baseUrl:`${t??""}`})),jr=Jl("api/sessionCreated",async(e,{rejectWithValue:t})=>{const{graph:n}=e,{post:r}=_b.get(),{data:i,error:o,response:s}=await r("/api/v1/sessions/",{body:n});return o?t({arg:e,status:s.status,error:o}):i}),sce=e=>vi(e)&&"status"in e,ace=e=>vi(e)&&"detail"in e,km=Jl("api/sessionInvoked",async(e,{rejectWithValue:t})=>{const{session_id:n}=e,{put:r}=_b.get(),{data:i,error:o,response:s}=await r("/api/v1/sessions/{session_id}/invoke",{params:{query:{all:!0},path:{session_id:n}}});if(o){if(sce(o)&&o.status===403)return t({arg:e,status:s.status,error:o.body.detail});if(ace(o)&&s.status===403)return t({arg:e,status:s.status,error:o.detail});if(o)return t({arg:e,status:s.status,error:o})}}),Oc=Jl("api/sessionCanceled",async(e,{rejectWithValue:t})=>{const{session_id:n}=e,{del:r}=_b.get(),{data:i,error:o,response:s}=await r("/api/v1/sessions/{session_id}/invoke",{params:{path:{session_id:n}}});return o?t({arg:e,error:o}):i});Jl("api/listSessions",async(e,{rejectWithValue:t})=>{const{params:n}=e,{get:r}=_b.get(),{data:i,error:o,response:s}=await r("/api/v1/sessions/",{params:n});return o?t({arg:e,error:o}):i});const S$=Lo(jr.rejected,km.rejected),pd=(e,t,n,r,i,o,s)=>{const a=Math.floor(e/2-(n+i/2)*s),l=Math.floor(t/2-(r+o/2)*s);return{x:a,y:l}},gd=(e,t,n,r,i=.95)=>{const o=e*i/n,s=t*i/r;return Math.min(1,Math.min(o,s))},zOe=.999,VOe=.1,jOe=20,np=.95,GOe=30,HOe=10,J9=e=>({x:Math.floor(e.x),y:Math.floor(e.y)}),Nu=e=>{const{width:t,height:n}=e,r={width:t,height:n},i=512*512,o=t/n;let s=t*n,a=448;for(;s1?(r.width=a,r.height=Ns(a/o,64)):o<1&&(r.height=a,r.width=Ns(a*o,64)),s=r.width*r.height;return r},lce=e=>({width:Ns(e.width,64),height:Ns(e.height,64)}),WOe=[{label:"Base",value:"base"},{label:"Mask",value:"mask"}],qOe=[{label:"None",value:"none"},{label:"Auto",value:"auto"},{label:"Manual",value:"manual"}],w$=e=>e.kind==="line"&&e.layer==="mask",KOe=e=>e.kind==="line"&&e.layer==="base",eR=e=>e.kind==="image"&&e.layer==="base",XOe=e=>e.kind==="fillRect"&&e.layer==="base",YOe=e=>e.kind==="eraseRect"&&e.layer==="base",uce=e=>e.kind==="line",Od={objects:[],stagingArea:{images:[],selectedImageIndex:-1}},x$={boundingBoxCoordinates:{x:0,y:0},boundingBoxDimensions:{width:512,height:512},boundingBoxPreviewFill:{r:0,g:0,b:0,a:.5},boundingBoxScaleMethod:"none",brushColor:{r:90,g:90,b:255,a:1},brushSize:50,canvasContainerDimensions:{width:0,height:0},colorPickerColor:{r:90,g:90,b:255,a:1},cursorPosition:null,doesCanvasNeedScaling:!1,futureLayerStates:[],isCanvasInitialized:!1,isDrawing:!1,isMaskEnabled:!0,isMouseOverBoundingBox:!1,isMoveBoundingBoxKeyHeld:!1,isMoveStageKeyHeld:!1,isMovingBoundingBox:!1,isMovingStage:!1,isTransformingBoundingBox:!1,layer:"base",layerState:Od,maskColor:{r:255,g:90,b:90,a:1},maxHistory:128,minimumStageScale:1,pastLayerStates:[],scaledBoundingBoxDimensions:{width:512,height:512},shouldAntialias:!0,shouldAutoSave:!1,shouldCropToBoundingBoxOnSave:!1,shouldDarkenOutsideBoundingBox:!1,shouldLockBoundingBox:!1,shouldPreserveMaskedArea:!1,shouldRestrictStrokesToBox:!0,shouldShowBoundingBox:!0,shouldShowBrush:!0,shouldShowBrushPreview:!1,shouldShowCanvasDebugInfo:!1,shouldShowCheckboardTransparency:!1,shouldShowGrid:!0,shouldShowIntermediates:!0,shouldShowStagingImage:!0,shouldShowStagingOutline:!0,shouldSnapToGrid:!0,stageCoordinates:{x:0,y:0},stageDimensions:{width:0,height:0},stageScale:1,tool:"brush"},C$=An({name:"canvas",initialState:x$,reducers:{setTool:(e,t)=>{const n=t.payload;e.tool=t.payload,n!=="move"&&(e.isTransformingBoundingBox=!1,e.isMouseOverBoundingBox=!1,e.isMovingBoundingBox=!1,e.isMovingStage=!1)},setLayer:(e,t)=>{e.layer=t.payload},toggleTool:e=>{const t=e.tool;t!=="move"&&(e.tool=t==="brush"?"eraser":"brush")},setMaskColor:(e,t)=>{e.maskColor=t.payload},setBrushColor:(e,t)=>{e.brushColor=t.payload},setBrushSize:(e,t)=>{e.brushSize=t.payload},clearMask:e=>{e.pastLayerStates.push(Qr(e.layerState)),e.layerState.objects=e.layerState.objects.filter(t=>!w$(t)),e.futureLayerStates=[],e.shouldPreserveMaskedArea=!1},toggleShouldInvertMask:e=>{e.shouldPreserveMaskedArea=!e.shouldPreserveMaskedArea},toggleShouldShowMask:e=>{e.isMaskEnabled=!e.isMaskEnabled},setShouldPreserveMaskedArea:(e,t)=>{e.shouldPreserveMaskedArea=t.payload},setIsMaskEnabled:(e,t)=>{e.isMaskEnabled=t.payload,e.layer=t.payload?"mask":"base"},setShouldShowCheckboardTransparency:(e,t)=>{e.shouldShowCheckboardTransparency=t.payload},setShouldShowBrushPreview:(e,t)=>{e.shouldShowBrushPreview=t.payload},setShouldShowBrush:(e,t)=>{e.shouldShowBrush=t.payload},setCursorPosition:(e,t)=>{e.cursorPosition=t.payload},setInitialCanvasImage:(e,t)=>{const n=t.payload,{width:r,height:i}=n,{stageDimensions:o}=e,s={width:T0(Ml(r,64,512),64),height:T0(Ml(i,64,512),64)},a={x:Ns(r/2-s.width/2,64),y:Ns(i/2-s.height/2,64)};if(e.boundingBoxScaleMethod==="auto"){const d=Nu(s);e.scaledBoundingBoxDimensions=d}e.boundingBoxDimensions=s,e.boundingBoxCoordinates=a,e.pastLayerStates.push(Qr(e.layerState)),e.layerState={...Od,objects:[{kind:"image",layer:"base",x:0,y:0,width:r,height:i,imageName:n.image_name}]},e.futureLayerStates=[],e.isCanvasInitialized=!1;const l=gd(o.width,o.height,r,i,np),u=pd(o.width,o.height,0,0,r,i,l);e.stageScale=l,e.stageCoordinates=u,e.doesCanvasNeedScaling=!0},setBoundingBoxDimensions:(e,t)=>{const n=lce(t.payload);if(e.boundingBoxDimensions=n,e.boundingBoxScaleMethod==="auto"){const r=Nu(n);e.scaledBoundingBoxDimensions=r}},flipBoundingBoxAxes:e=>{const[t,n]=[e.boundingBoxDimensions.width,e.boundingBoxDimensions.height];e.boundingBoxDimensions={width:n,height:t}},setBoundingBoxCoordinates:(e,t)=>{e.boundingBoxCoordinates=J9(t.payload)},setStageCoordinates:(e,t)=>{e.stageCoordinates=t.payload},setBoundingBoxPreviewFill:(e,t)=>{e.boundingBoxPreviewFill=t.payload},setDoesCanvasNeedScaling:(e,t)=>{e.doesCanvasNeedScaling=t.payload},setStageScale:(e,t)=>{e.stageScale=t.payload},setShouldDarkenOutsideBoundingBox:(e,t)=>{e.shouldDarkenOutsideBoundingBox=t.payload},setIsDrawing:(e,t)=>{e.isDrawing=t.payload},clearCanvasHistory:e=>{e.pastLayerStates=[],e.futureLayerStates=[]},setShouldLockBoundingBox:(e,t)=>{e.shouldLockBoundingBox=t.payload},toggleShouldLockBoundingBox:e=>{e.shouldLockBoundingBox=!e.shouldLockBoundingBox},setShouldShowBoundingBox:(e,t)=>{e.shouldShowBoundingBox=t.payload},setIsTransformingBoundingBox:(e,t)=>{e.isTransformingBoundingBox=t.payload},setIsMovingBoundingBox:(e,t)=>{e.isMovingBoundingBox=t.payload},setIsMouseOverBoundingBox:(e,t)=>{e.isMouseOverBoundingBox=t.payload},setIsMoveBoundingBoxKeyHeld:(e,t)=>{e.isMoveBoundingBoxKeyHeld=t.payload},setIsMoveStageKeyHeld:(e,t)=>{e.isMoveStageKeyHeld=t.payload},canvasSessionIdChanged:(e,t)=>{e.layerState.stagingArea.sessionId=t.payload},stagingAreaInitialized:(e,t)=>{const{sessionId:n,boundingBox:r}=t.payload;e.layerState.stagingArea={boundingBox:r,sessionId:n,images:[],selectedImageIndex:-1}},addImageToStagingArea:(e,t)=>{const n=t.payload;!n||!e.layerState.stagingArea.boundingBox||(e.pastLayerStates.push(Qr(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift(),e.layerState.stagingArea.images.push({kind:"image",layer:"base",...e.layerState.stagingArea.boundingBox,imageName:n.image_name}),e.layerState.stagingArea.selectedImageIndex=e.layerState.stagingArea.images.length-1,e.futureLayerStates=[])},discardStagedImages:e=>{e.pastLayerStates.push(Qr(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift(),e.layerState.stagingArea={...Od.stagingArea},e.futureLayerStates=[],e.shouldShowStagingOutline=!0,e.shouldShowStagingOutline=!0},addFillRect:e=>{const{boundingBoxCoordinates:t,boundingBoxDimensions:n,brushColor:r}=e;e.pastLayerStates.push(Qr(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift(),e.layerState.objects.push({kind:"fillRect",layer:"base",...t,...n,color:r}),e.futureLayerStates=[]},addEraseRect:e=>{const{boundingBoxCoordinates:t,boundingBoxDimensions:n}=e;e.pastLayerStates.push(Qr(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift(),e.layerState.objects.push({kind:"eraseRect",layer:"base",...t,...n}),e.futureLayerStates=[]},addLine:(e,t)=>{const{tool:n,layer:r,brushColor:i,brushSize:o,shouldRestrictStrokesToBox:s}=e;if(n==="move"||n==="colorPicker")return;const a=o/2,l=r==="base"&&n==="brush"?{color:i}:{};e.pastLayerStates.push(Qr(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift();const u={kind:"line",layer:r,tool:n,strokeWidth:a,points:t.payload,...l};s&&(u.clip={...e.boundingBoxCoordinates,...e.boundingBoxDimensions}),e.layerState.objects.push(u),e.futureLayerStates=[]},addPointToCurrentLine:(e,t)=>{const n=e.layerState.objects.findLast(uce);n&&n.points.push(...t.payload)},undo:e=>{const t=e.pastLayerStates.pop();t&&(e.futureLayerStates.unshift(Qr(e.layerState)),e.futureLayerStates.length>e.maxHistory&&e.futureLayerStates.pop(),e.layerState=t)},redo:e=>{const t=e.futureLayerStates.shift();t&&(e.pastLayerStates.push(Qr(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift(),e.layerState=t)},setShouldShowGrid:(e,t)=>{e.shouldShowGrid=t.payload},setIsMovingStage:(e,t)=>{e.isMovingStage=t.payload},setShouldSnapToGrid:(e,t)=>{e.shouldSnapToGrid=t.payload},setShouldAutoSave:(e,t)=>{e.shouldAutoSave=t.payload},setShouldShowIntermediates:(e,t)=>{e.shouldShowIntermediates=t.payload},resetCanvas:e=>{e.pastLayerStates.push(Qr(e.layerState)),e.layerState=Od,e.futureLayerStates=[]},setCanvasContainerDimensions:(e,t)=>{e.canvasContainerDimensions=t.payload},resizeAndScaleCanvas:e=>{const{width:t,height:n}=e.canvasContainerDimensions,r=e.layerState.objects.find(eR),i={width:Math.floor(t),height:Math.floor(n)};if(!r){const d=gd(i.width,i.height,512,512,np),f=pd(i.width,i.height,0,0,512,512,d),h={width:512,height:512};if(e.stageScale=d,e.stageCoordinates=f,e.stageDimensions=i,e.boundingBoxCoordinates={x:0,y:0},e.boundingBoxDimensions=h,e.boundingBoxScaleMethod==="auto"){const g=Nu(h);e.scaledBoundingBoxDimensions=g}return}const{width:o,height:s}=r,l=gd(t,n,o,s,.95),u=pd(i.width,i.height,0,0,o,s,l);e.minimumStageScale=l,e.stageScale=l,e.stageCoordinates=J9(u),e.stageDimensions=i,e.isCanvasInitialized=!0},resizeCanvas:e=>{const{width:t,height:n}=e.canvasContainerDimensions,r={width:Math.floor(t),height:Math.floor(n)};if(e.stageDimensions=r,!e.layerState.objects.find(eR)){const i=gd(r.width,r.height,512,512,np),o=pd(r.width,r.height,0,0,512,512,i),s={width:512,height:512};if(e.stageScale=i,e.stageCoordinates=o,e.boundingBoxCoordinates={x:0,y:0},e.boundingBoxDimensions=s,e.boundingBoxScaleMethod==="auto"){const a=Nu(s);e.scaledBoundingBoxDimensions=a}}},resetCanvasView:(e,t)=>{const{contentRect:n,shouldScaleTo1:r}=t.payload,{stageDimensions:{width:i,height:o}}=e,{x:s,y:a,width:l,height:u}=n;if(l!==0&&u!==0){const d=r?1:gd(i,o,l,u,np),f=pd(i,o,s,a,l,u,d);e.stageScale=d,e.stageCoordinates=f}else{const d=gd(i,o,512,512,np),f=pd(i,o,0,0,512,512,d),h={width:512,height:512};if(e.stageScale=d,e.stageCoordinates=f,e.boundingBoxCoordinates={x:0,y:0},e.boundingBoxDimensions=h,e.boundingBoxScaleMethod==="auto"){const g=Nu(h);e.scaledBoundingBoxDimensions=g}}},nextStagingAreaImage:e=>{if(!e.layerState.stagingArea.images.length)return;const t=e.layerState.stagingArea.selectedImageIndex,n=e.layerState.stagingArea.images.length;e.layerState.stagingArea.selectedImageIndex=Math.min(t+1,n-1)},prevStagingAreaImage:e=>{if(!e.layerState.stagingArea.images.length)return;const t=e.layerState.stagingArea.selectedImageIndex;e.layerState.stagingArea.selectedImageIndex=Math.max(t-1,0)},commitStagingAreaImage:(e,t)=>{if(!e.layerState.stagingArea.images.length)return;const{images:n,selectedImageIndex:r}=e.layerState.stagingArea;e.pastLayerStates.push(Qr(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift();const i=n[r];i&&e.layerState.objects.push({...i}),e.layerState.stagingArea={...Od.stagingArea},e.futureLayerStates=[],e.shouldShowStagingOutline=!0,e.shouldShowStagingImage=!0},fitBoundingBoxToStage:e=>{const{boundingBoxDimensions:t,boundingBoxCoordinates:n,stageDimensions:r,stageScale:i}=e,o=r.width/i,s=r.height/i;if(n.x<0||n.x+t.width>o||n.y<0||n.y+t.height>s){const a={width:T0(Ml(o,64,512),64),height:T0(Ml(s,64,512),64)},l={x:Ns(o/2-a.width/2,64),y:Ns(s/2-a.height/2,64)};if(e.boundingBoxDimensions=a,e.boundingBoxCoordinates=l,e.boundingBoxScaleMethod==="auto"){const u=Nu(a);e.scaledBoundingBoxDimensions=u}}},setBoundingBoxScaleMethod:(e,t)=>{if(e.boundingBoxScaleMethod=t.payload,t.payload==="auto"){const n=Nu(e.boundingBoxDimensions);e.scaledBoundingBoxDimensions=n}},setScaledBoundingBoxDimensions:(e,t)=>{e.scaledBoundingBoxDimensions=t.payload},setShouldShowStagingImage:(e,t)=>{e.shouldShowStagingImage=t.payload},setShouldShowStagingOutline:(e,t)=>{e.shouldShowStagingOutline=t.payload},setShouldShowCanvasDebugInfo:(e,t)=>{e.shouldShowCanvasDebugInfo=t.payload},setShouldRestrictStrokesToBox:(e,t)=>{e.shouldRestrictStrokesToBox=t.payload},setShouldAntialias:(e,t)=>{e.shouldAntialias=t.payload},setShouldCropToBoundingBoxOnSave:(e,t)=>{e.shouldCropToBoundingBoxOnSave=t.payload},setColorPickerColor:(e,t)=>{e.colorPickerColor=t.payload},commitColorPickerColor:e=>{e.brushColor={...e.colorPickerColor,a:e.brushColor.a},e.tool="brush"},setMergedCanvas:(e,t)=>{e.pastLayerStates.push(Qr(e.layerState)),e.futureLayerStates=[],e.layerState.objects=[t.payload]},resetCanvasInteractionState:e=>{e.cursorPosition=null,e.isDrawing=!1,e.isMouseOverBoundingBox=!1,e.isMoveBoundingBoxKeyHeld=!1,e.isMoveStageKeyHeld=!1,e.isMovingBoundingBox=!1,e.isMovingStage=!1,e.isTransformingBoundingBox=!1},mouseLeftCanvas:e=>{e.cursorPosition=null,e.isDrawing=!1,e.isMouseOverBoundingBox=!1,e.isMovingBoundingBox=!1,e.isTransformingBoundingBox=!1}},extraReducers:e=>{e.addCase(Oc.pending,t=>{t.layerState.stagingArea.images.length||(t.layerState.stagingArea=Od.stagingArea)}),e.addCase(que,t=>{t.doesCanvasNeedScaling=!0}),e.addCase(b$,t=>{t.doesCanvasNeedScaling=!0}),e.addCase(Hue,(t,n)=>{const r=n.payload;r&&(t.boundingBoxDimensions.height=Ns(t.boundingBoxDimensions.width/r,64))})}}),{addEraseRect:QOe,addFillRect:ZOe,addImageToStagingArea:cce,addLine:JOe,addPointToCurrentLine:eke,clearCanvasHistory:tke,clearMask:nke,commitColorPickerColor:rke,commitStagingAreaImage:dce,discardStagedImages:ike,fitBoundingBoxToStage:oke,mouseLeftCanvas:ske,nextStagingAreaImage:ake,prevStagingAreaImage:lke,redo:uke,resetCanvas:BT,resetCanvasInteractionState:cke,resetCanvasView:dke,resizeAndScaleCanvas:fke,resizeCanvas:hke,setBoundingBoxCoordinates:pke,setBoundingBoxDimensions:gke,setBoundingBoxPreviewFill:mke,setBoundingBoxScaleMethod:yke,flipBoundingBoxAxes:vke,setBrushColor:_ke,setBrushSize:bke,setCanvasContainerDimensions:Ske,setColorPickerColor:wke,setCursorPosition:xke,setDoesCanvasNeedScaling:Cke,setInitialCanvasImage:T$,setIsDrawing:Tke,setIsMaskEnabled:Eke,setIsMouseOverBoundingBox:Ake,setIsMoveBoundingBoxKeyHeld:Pke,setIsMoveStageKeyHeld:Rke,setIsMovingBoundingBox:Oke,setIsMovingStage:kke,setIsTransformingBoundingBox:Ike,setLayer:Mke,setMaskColor:Nke,setMergedCanvas:fce,setShouldAutoSave:Lke,setShouldCropToBoundingBoxOnSave:Dke,setShouldDarkenOutsideBoundingBox:$ke,setShouldLockBoundingBox:Fke,setShouldPreserveMaskedArea:Bke,setShouldShowBoundingBox:Uke,setShouldShowBrush:zke,setShouldShowBrushPreview:Vke,setShouldShowCanvasDebugInfo:jke,setShouldShowCheckboardTransparency:Gke,setShouldShowGrid:Hke,setShouldShowIntermediates:Wke,setShouldShowStagingImage:qke,setShouldShowStagingOutline:Kke,setShouldSnapToGrid:Xke,setStageCoordinates:Yke,setStageScale:Qke,setTool:Zke,toggleShouldLockBoundingBox:Jke,toggleTool:eIe,undo:tIe,setScaledBoundingBoxDimensions:nIe,setShouldRestrictStrokesToBox:rIe,stagingAreaInitialized:hce,canvasSessionIdChanged:pce,setShouldAntialias:iIe}=C$.actions,gce=C$.reducer,Jr=["general"],Ll=["control","mask","user","other"],mce=100,tR=20;var L1={exports:{}};/** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */L1.exports;(function(e,t){(function(){var n,r="4.17.21",i=200,o="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",s="Expected a function",a="Invalid `variable` option passed into `_.template`",l="__lodash_hash_undefined__",u=500,d="__lodash_placeholder__",f=1,h=2,g=4,m=1,v=2,x=1,_=2,b=4,y=8,S=16,C=32,T=64,E=128,P=256,k=512,O=30,M="...",V=800,B=16,A=1,N=2,D=3,U=1/0,$=9007199254740991,j=17976931348623157e292,G=0/0,q=4294967295,Z=q-1,ee=q>>>1,ie=[["ary",E],["bind",x],["bindKey",_],["curry",y],["curryRight",S],["flip",k],["partial",C],["partialRight",T],["rearg",P]],se="[object Arguments]",le="[object Array]",W="[object AsyncFunction]",ne="[object Boolean]",fe="[object Date]",pe="[object DOMException]",ve="[object Error]",ye="[object Function]",Je="[object GeneratorFunction]",Fe="[object Map]",Ae="[object Number]",vt="[object Null]",_e="[object Object]",Qt="[object Promise]",rr="[object Proxy]",qt="[object RegExp]",ht="[object Set]",At="[object String]",un="[object Symbol]",Gr="[object Undefined]",Pr="[object WeakMap]",Ci="[object WeakSet]",In="[object ArrayBuffer]",gn="[object DataView]",ir="[object Float32Array]",mn="[object Float64Array]",Zt="[object Int8Array]",Rr="[object Int16Array]",Hr="[object Int32Array]",si="[object Uint8Array]",Vi="[object Uint8ClampedArray]",$n="[object Uint16Array]",ai="[object Uint32Array]",ra=/\b__p \+= '';/g,uo=/\b(__p \+=) '' \+/g,ia=/(__e\(.*?\)|\b__t\)) \+\n'';/g,nn=/&(?:amp|lt|gt|quot|#39);/g,Ft=/[&<>"']/g,or=RegExp(nn.source),qn=RegExp(Ft.source),yr=/<%-([\s\S]+?)%>/g,Or=/<%([\s\S]+?)%>/g,kr=/<%=([\s\S]+?)%>/g,co=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Ir=/^\w*$/,sr=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ji=/[\\^$.*+?()[\]{}|]/g,bs=RegExp(ji.source),fo=/^\s+/,tl=/\s/,Vo=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Mr=/\{\n\/\* \[wrapped with (.+)\] \*/,oa=/,? & /,hh=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,ph=/[()=,{}\[\]\/\s]/,gh=/\\(\\)?/g,mh=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,jo=/\w*$/,yh=/^[-+]0x[0-9a-f]+$/i,vh=/^0b[01]+$/i,Gc=/^\[object .+?Constructor\]$/,_h=/^0o[0-7]+$/i,bh=/^(?:0|[1-9]\d*)$/,Sh=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Ss=/($^)/,wh=/['\n\r\u2028\u2029\\]/g,Go="\\ud800-\\udfff",nl="\\u0300-\\u036f",xh="\\ufe20-\\ufe2f",rl="\\u20d0-\\u20ff",Cu=nl+xh+rl,Hc="\\u2700-\\u27bf",il="a-z\\xdf-\\xf6\\xf8-\\xff",A2="\\xac\\xb1\\xd7\\xf7",ry="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",P2="\\u2000-\\u206f",R2=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",iy="A-Z\\xc0-\\xd6\\xd8-\\xde",oy="\\ufe0e\\ufe0f",sy=A2+ry+P2+R2,Ch="['’]",O2="["+Go+"]",ay="["+sy+"]",Wc="["+Cu+"]",ly="\\d+",qc="["+Hc+"]",Kc="["+il+"]",uy="[^"+Go+sy+ly+Hc+il+iy+"]",Th="\\ud83c[\\udffb-\\udfff]",cy="(?:"+Wc+"|"+Th+")",dy="[^"+Go+"]",Eh="(?:\\ud83c[\\udde6-\\uddff]){2}",Ah="[\\ud800-\\udbff][\\udc00-\\udfff]",sa="["+iy+"]",fy="\\u200d",hy="(?:"+Kc+"|"+uy+")",k2="(?:"+sa+"|"+uy+")",Xc="(?:"+Ch+"(?:d|ll|m|re|s|t|ve))?",py="(?:"+Ch+"(?:D|LL|M|RE|S|T|VE))?",gy=cy+"?",my="["+oy+"]?",Yc="(?:"+fy+"(?:"+[dy,Eh,Ah].join("|")+")"+my+gy+")*",Ph="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Rh="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",Qc=my+gy+Yc,I2="(?:"+[qc,Eh,Ah].join("|")+")"+Qc,yy="(?:"+[dy+Wc+"?",Wc,Eh,Ah,O2].join("|")+")",Oh=RegExp(Ch,"g"),vy=RegExp(Wc,"g"),Ho=RegExp(Th+"(?="+Th+")|"+yy+Qc,"g"),Tu=RegExp([sa+"?"+Kc+"+"+Xc+"(?="+[ay,sa,"$"].join("|")+")",k2+"+"+py+"(?="+[ay,sa+hy,"$"].join("|")+")",sa+"?"+hy+"+"+Xc,sa+"+"+py,Rh,Ph,ly,I2].join("|"),"g"),M2=RegExp("["+fy+Go+Cu+oy+"]"),_y=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,N2=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],by=-1,Jt={};Jt[ir]=Jt[mn]=Jt[Zt]=Jt[Rr]=Jt[Hr]=Jt[si]=Jt[Vi]=Jt[$n]=Jt[ai]=!0,Jt[se]=Jt[le]=Jt[In]=Jt[ne]=Jt[gn]=Jt[fe]=Jt[ve]=Jt[ye]=Jt[Fe]=Jt[Ae]=Jt[_e]=Jt[qt]=Jt[ht]=Jt[At]=Jt[Pr]=!1;var Kt={};Kt[se]=Kt[le]=Kt[In]=Kt[gn]=Kt[ne]=Kt[fe]=Kt[ir]=Kt[mn]=Kt[Zt]=Kt[Rr]=Kt[Hr]=Kt[Fe]=Kt[Ae]=Kt[_e]=Kt[qt]=Kt[ht]=Kt[At]=Kt[un]=Kt[si]=Kt[Vi]=Kt[$n]=Kt[ai]=!0,Kt[ve]=Kt[ye]=Kt[Pr]=!1;var Sy={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"},L2={"&":"&","<":"<",">":">",'"':""","'":"'"},H={"&":"&","<":"<",">":">",""":'"',"'":"'"},Y={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},re=parseFloat,xe=parseInt,pt=typeof Ze=="object"&&Ze&&Ze.Object===Object&&Ze,Ut=typeof self=="object"&&self&&self.Object===Object&&self,et=pt||Ut||Function("return this")(),at=t&&!t.nodeType&&t,Rt=at&&!0&&e&&!e.nodeType&&e,li=Rt&&Rt.exports===at,Nr=li&&pt.process,vr=function(){try{var J=Rt&&Rt.require&&Rt.require("util").types;return J||Nr&&Nr.binding&&Nr.binding("util")}catch{}}(),Zc=vr&&vr.isArrayBuffer,Jc=vr&&vr.isDate,kh=vr&&vr.isMap,UA=vr&&vr.isRegExp,zA=vr&&vr.isSet,VA=vr&&vr.isTypedArray;function Gi(J,ae,oe){switch(oe.length){case 0:return J.call(ae);case 1:return J.call(ae,oe[0]);case 2:return J.call(ae,oe[0],oe[1]);case 3:return J.call(ae,oe[0],oe[1],oe[2])}return J.apply(ae,oe)}function NG(J,ae,oe,Te){for(var Xe=-1,Nt=J==null?0:J.length;++Xe-1}function D2(J,ae,oe){for(var Te=-1,Xe=J==null?0:J.length;++Te-1;);return oe}function YA(J,ae){for(var oe=J.length;oe--&&ed(ae,J[oe],0)>-1;);return oe}function jG(J,ae){for(var oe=J.length,Te=0;oe--;)J[oe]===ae&&++Te;return Te}var GG=U2(Sy),HG=U2(L2);function WG(J){return"\\"+Y[J]}function qG(J,ae){return J==null?n:J[ae]}function td(J){return M2.test(J)}function KG(J){return _y.test(J)}function XG(J){for(var ae,oe=[];!(ae=J.next()).done;)oe.push(ae.value);return oe}function G2(J){var ae=-1,oe=Array(J.size);return J.forEach(function(Te,Xe){oe[++ae]=[Xe,Te]}),oe}function QA(J,ae){return function(oe){return J(ae(oe))}}function al(J,ae){for(var oe=-1,Te=J.length,Xe=0,Nt=[];++oe-1}function DH(c,p){var w=this.__data__,R=By(w,c);return R<0?(++this.size,w.push([c,p])):w[R][1]=p,this}aa.prototype.clear=IH,aa.prototype.delete=MH,aa.prototype.get=NH,aa.prototype.has=LH,aa.prototype.set=DH;function la(c){var p=-1,w=c==null?0:c.length;for(this.clear();++p=p?c:p)),c}function mo(c,p,w,R,I,z){var K,X=p&f,te=p&h,ce=p&g;if(w&&(K=I?w(c,R,I,z):w(c)),K!==n)return K;if(!xn(c))return c;var de=Qe(c);if(de){if(K=UW(c),!X)return Ti(c,K)}else{var he=qr(c),be=he==ye||he==Je;if(hl(c))return M6(c,X);if(he==_e||he==se||be&&!I){if(K=te||be?{}:Z6(c),!X)return te?RW(c,ZH(K,c)):PW(c,u6(K,c))}else{if(!Kt[he])return I?c:{};K=zW(c,he,X)}}z||(z=new qo);var Ne=z.get(c);if(Ne)return Ne;z.set(c,K),AP(c)?c.forEach(function(Ge){K.add(mo(Ge,p,w,Ge,c,z))}):TP(c)&&c.forEach(function(Ge,gt){K.set(gt,mo(Ge,p,w,gt,c,z))});var je=ce?te?mw:gw:te?Ai:_r,st=de?n:je(c);return ho(st||c,function(Ge,gt){st&&(gt=Ge,Ge=c[gt]),Fh(K,gt,mo(Ge,p,w,gt,c,z))}),K}function JH(c){var p=_r(c);return function(w){return c6(w,c,p)}}function c6(c,p,w){var R=w.length;if(c==null)return!R;for(c=en(c);R--;){var I=w[R],z=p[I],K=c[I];if(K===n&&!(I in c)||!z(K))return!1}return!0}function d6(c,p,w){if(typeof c!="function")throw new po(s);return Hh(function(){c.apply(n,w)},p)}function Bh(c,p,w,R){var I=-1,z=wy,K=!0,X=c.length,te=[],ce=p.length;if(!X)return te;w&&(p=yn(p,Hi(w))),R?(z=D2,K=!1):p.length>=i&&(z=Ih,K=!1,p=new Pu(p));e:for(;++II?0:I+w),R=R===n||R>I?I:rt(R),R<0&&(R+=I),R=w>R?0:RP(R);w0&&w(X)?p>1?Lr(X,p-1,w,R,I):sl(I,X):R||(I[I.length]=X)}return I}var Q2=B6(),p6=B6(!0);function ws(c,p){return c&&Q2(c,p,_r)}function Z2(c,p){return c&&p6(c,p,_r)}function zy(c,p){return ol(p,function(w){return ha(c[w])})}function Ou(c,p){p=dl(p,c);for(var w=0,R=p.length;c!=null&&wp}function nW(c,p){return c!=null&&zt.call(c,p)}function rW(c,p){return c!=null&&p in en(c)}function iW(c,p,w){return c>=Wr(p,w)&&c=120&&de.length>=120)?new Pu(K&&de):n}de=c[0];var he=-1,be=X[0];e:for(;++he-1;)X!==c&&Iy.call(X,te,1),Iy.call(c,te,1);return c}function T6(c,p){for(var w=c?p.length:0,R=w-1;w--;){var I=p[w];if(w==R||I!==z){var z=I;fa(I)?Iy.call(c,I,1):lw(c,I)}}return c}function ow(c,p){return c+Ly(o6()*(p-c+1))}function yW(c,p,w,R){for(var I=-1,z=lr(Ny((p-c)/(w||1)),0),K=oe(z);z--;)K[R?z:++I]=c,c+=w;return K}function sw(c,p){var w="";if(!c||p<1||p>$)return w;do p%2&&(w+=c),p=Ly(p/2),p&&(c+=c);while(p);return w}function lt(c,p){return xw(tP(c,p,Pi),c+"")}function vW(c){return l6(fd(c))}function _W(c,p){var w=fd(c);return Zy(w,Ru(p,0,w.length))}function Vh(c,p,w,R){if(!xn(c))return c;p=dl(p,c);for(var I=-1,z=p.length,K=z-1,X=c;X!=null&&++II?0:I+p),w=w>I?I:w,w<0&&(w+=I),I=p>w?0:w-p>>>0,p>>>=0;for(var z=oe(I);++R>>1,K=c[z];K!==null&&!qi(K)&&(w?K<=p:K=i){var ce=p?null:MW(c);if(ce)return Cy(ce);K=!1,I=Ih,te=new Pu}else te=p?[]:X;e:for(;++R=R?c:yo(c,p,w)}var I6=cH||function(c){return et.clearTimeout(c)};function M6(c,p){if(p)return c.slice();var w=c.length,R=e6?e6(w):new c.constructor(w);return c.copy(R),R}function fw(c){var p=new c.constructor(c.byteLength);return new Oy(p).set(new Oy(c)),p}function CW(c,p){var w=p?fw(c.buffer):c.buffer;return new c.constructor(w,c.byteOffset,c.byteLength)}function TW(c){var p=new c.constructor(c.source,jo.exec(c));return p.lastIndex=c.lastIndex,p}function EW(c){return $h?en($h.call(c)):{}}function N6(c,p){var w=p?fw(c.buffer):c.buffer;return new c.constructor(w,c.byteOffset,c.length)}function L6(c,p){if(c!==p){var w=c!==n,R=c===null,I=c===c,z=qi(c),K=p!==n,X=p===null,te=p===p,ce=qi(p);if(!X&&!ce&&!z&&c>p||z&&K&&te&&!X&&!ce||R&&K&&te||!w&&te||!I)return 1;if(!R&&!z&&!ce&&c=X)return te;var ce=w[R];return te*(ce=="desc"?-1:1)}}return c.index-p.index}function D6(c,p,w,R){for(var I=-1,z=c.length,K=w.length,X=-1,te=p.length,ce=lr(z-K,0),de=oe(te+ce),he=!R;++X1?w[I-1]:n,K=I>2?w[2]:n;for(z=c.length>3&&typeof z=="function"?(I--,z):n,K&&ci(w[0],w[1],K)&&(z=I<3?n:z,I=1),p=en(p);++R-1?I[z?p[K]:K]:n}}function V6(c){return da(function(p){var w=p.length,R=w,I=go.prototype.thru;for(c&&p.reverse();R--;){var z=p[R];if(typeof z!="function")throw new po(s);if(I&&!K&&Yy(z)=="wrapper")var K=new go([],!0)}for(R=K?R:w;++R1&&Ct.reverse(),de&&teX))return!1;var ce=z.get(c),de=z.get(p);if(ce&&de)return ce==p&&de==c;var he=-1,be=!0,Ne=w&v?new Pu:n;for(z.set(c,p),z.set(p,c);++he1?"& ":"")+p[R],p=p.join(w>2?", ":" "),c.replace(Vo,`{ +/* [wrapped with `+p+`] */ +`)}function jW(c){return Qe(c)||Mu(c)||!!(r6&&c&&c[r6])}function fa(c,p){var w=typeof c;return p=p??$,!!p&&(w=="number"||w!="symbol"&&bh.test(c))&&c>-1&&c%1==0&&c0){if(++p>=V)return arguments[0]}else p=0;return c.apply(n,arguments)}}function Zy(c,p){var w=-1,R=c.length,I=R-1;for(p=p===n?R:p;++w1?c[p-1]:n;return w=typeof w=="function"?(c.pop(),w):n,hP(c,w)});function pP(c){var p=F(c);return p.__chain__=!0,p}function eK(c,p){return p(c),c}function Jy(c,p){return p(c)}var tK=da(function(c){var p=c.length,w=p?c[0]:0,R=this.__wrapped__,I=function(z){return Y2(z,c)};return p>1||this.__actions__.length||!(R instanceof _t)||!fa(w)?this.thru(I):(R=R.slice(w,+w+(p?1:0)),R.__actions__.push({func:Jy,args:[I],thisArg:n}),new go(R,this.__chain__).thru(function(z){return p&&!z.length&&z.push(n),z}))});function nK(){return pP(this)}function rK(){return new go(this.value(),this.__chain__)}function iK(){this.__values__===n&&(this.__values__=PP(this.value()));var c=this.__index__>=this.__values__.length,p=c?n:this.__values__[this.__index__++];return{done:c,value:p}}function oK(){return this}function sK(c){for(var p,w=this;w instanceof Fy;){var R=aP(w);R.__index__=0,R.__values__=n,p?I.__wrapped__=R:p=R;var I=R;w=w.__wrapped__}return I.__wrapped__=c,p}function aK(){var c=this.__wrapped__;if(c instanceof _t){var p=c;return this.__actions__.length&&(p=new _t(this)),p=p.reverse(),p.__actions__.push({func:Jy,args:[Cw],thisArg:n}),new go(p,this.__chain__)}return this.thru(Cw)}function lK(){return O6(this.__wrapped__,this.__actions__)}var uK=Hy(function(c,p,w){zt.call(c,w)?++c[w]:ua(c,w,1)});function cK(c,p,w){var R=Qe(c)?jA:eW;return w&&ci(c,p,w)&&(p=n),R(c,Ve(p,3))}function dK(c,p){var w=Qe(c)?ol:h6;return w(c,Ve(p,3))}var fK=z6(lP),hK=z6(uP);function pK(c,p){return Lr(e0(c,p),1)}function gK(c,p){return Lr(e0(c,p),U)}function mK(c,p,w){return w=w===n?1:rt(w),Lr(e0(c,p),w)}function gP(c,p){var w=Qe(c)?ho:ul;return w(c,Ve(p,3))}function mP(c,p){var w=Qe(c)?LG:f6;return w(c,Ve(p,3))}var yK=Hy(function(c,p,w){zt.call(c,w)?c[w].push(p):ua(c,w,[p])});function vK(c,p,w,R){c=Ei(c)?c:fd(c),w=w&&!R?rt(w):0;var I=c.length;return w<0&&(w=lr(I+w,0)),o0(c)?w<=I&&c.indexOf(p,w)>-1:!!I&&ed(c,p,w)>-1}var _K=lt(function(c,p,w){var R=-1,I=typeof p=="function",z=Ei(c)?oe(c.length):[];return ul(c,function(K){z[++R]=I?Gi(p,K,w):Uh(K,p,w)}),z}),bK=Hy(function(c,p,w){ua(c,w,p)});function e0(c,p){var w=Qe(c)?yn:_6;return w(c,Ve(p,3))}function SK(c,p,w,R){return c==null?[]:(Qe(p)||(p=p==null?[]:[p]),w=R?n:w,Qe(w)||(w=w==null?[]:[w]),x6(c,p,w))}var wK=Hy(function(c,p,w){c[w?0:1].push(p)},function(){return[[],[]]});function xK(c,p,w){var R=Qe(c)?$2:qA,I=arguments.length<3;return R(c,Ve(p,4),w,I,ul)}function CK(c,p,w){var R=Qe(c)?DG:qA,I=arguments.length<3;return R(c,Ve(p,4),w,I,f6)}function TK(c,p){var w=Qe(c)?ol:h6;return w(c,r0(Ve(p,3)))}function EK(c){var p=Qe(c)?l6:vW;return p(c)}function AK(c,p,w){(w?ci(c,p,w):p===n)?p=1:p=rt(p);var R=Qe(c)?XH:_W;return R(c,p)}function PK(c){var p=Qe(c)?YH:SW;return p(c)}function RK(c){if(c==null)return 0;if(Ei(c))return o0(c)?nd(c):c.length;var p=qr(c);return p==Fe||p==ht?c.size:nw(c).length}function OK(c,p,w){var R=Qe(c)?F2:wW;return w&&ci(c,p,w)&&(p=n),R(c,Ve(p,3))}var kK=lt(function(c,p){if(c==null)return[];var w=p.length;return w>1&&ci(c,p[0],p[1])?p=[]:w>2&&ci(p[0],p[1],p[2])&&(p=[p[0]]),x6(c,Lr(p,1),[])}),t0=dH||function(){return et.Date.now()};function IK(c,p){if(typeof p!="function")throw new po(s);return c=rt(c),function(){if(--c<1)return p.apply(this,arguments)}}function yP(c,p,w){return p=w?n:p,p=c&&p==null?c.length:p,ca(c,E,n,n,n,n,p)}function vP(c,p){var w;if(typeof p!="function")throw new po(s);return c=rt(c),function(){return--c>0&&(w=p.apply(this,arguments)),c<=1&&(p=n),w}}var Ew=lt(function(c,p,w){var R=x;if(w.length){var I=al(w,cd(Ew));R|=C}return ca(c,R,p,w,I)}),_P=lt(function(c,p,w){var R=x|_;if(w.length){var I=al(w,cd(_P));R|=C}return ca(p,R,c,w,I)});function bP(c,p,w){p=w?n:p;var R=ca(c,y,n,n,n,n,n,p);return R.placeholder=bP.placeholder,R}function SP(c,p,w){p=w?n:p;var R=ca(c,S,n,n,n,n,n,p);return R.placeholder=SP.placeholder,R}function wP(c,p,w){var R,I,z,K,X,te,ce=0,de=!1,he=!1,be=!0;if(typeof c!="function")throw new po(s);p=_o(p)||0,xn(w)&&(de=!!w.leading,he="maxWait"in w,z=he?lr(_o(w.maxWait)||0,p):z,be="trailing"in w?!!w.trailing:be);function Ne(Bn){var Xo=R,ga=I;return R=I=n,ce=Bn,K=c.apply(ga,Xo),K}function je(Bn){return ce=Bn,X=Hh(gt,p),de?Ne(Bn):K}function st(Bn){var Xo=Bn-te,ga=Bn-ce,zP=p-Xo;return he?Wr(zP,z-ga):zP}function Ge(Bn){var Xo=Bn-te,ga=Bn-ce;return te===n||Xo>=p||Xo<0||he&&ga>=z}function gt(){var Bn=t0();if(Ge(Bn))return Ct(Bn);X=Hh(gt,st(Bn))}function Ct(Bn){return X=n,be&&R?Ne(Bn):(R=I=n,K)}function Ki(){X!==n&&I6(X),ce=0,R=te=I=X=n}function di(){return X===n?K:Ct(t0())}function Xi(){var Bn=t0(),Xo=Ge(Bn);if(R=arguments,I=this,te=Bn,Xo){if(X===n)return je(te);if(he)return I6(X),X=Hh(gt,p),Ne(te)}return X===n&&(X=Hh(gt,p)),K}return Xi.cancel=Ki,Xi.flush=di,Xi}var MK=lt(function(c,p){return d6(c,1,p)}),NK=lt(function(c,p,w){return d6(c,_o(p)||0,w)});function LK(c){return ca(c,k)}function n0(c,p){if(typeof c!="function"||p!=null&&typeof p!="function")throw new po(s);var w=function(){var R=arguments,I=p?p.apply(this,R):R[0],z=w.cache;if(z.has(I))return z.get(I);var K=c.apply(this,R);return w.cache=z.set(I,K)||z,K};return w.cache=new(n0.Cache||la),w}n0.Cache=la;function r0(c){if(typeof c!="function")throw new po(s);return function(){var p=arguments;switch(p.length){case 0:return!c.call(this);case 1:return!c.call(this,p[0]);case 2:return!c.call(this,p[0],p[1]);case 3:return!c.call(this,p[0],p[1],p[2])}return!c.apply(this,p)}}function DK(c){return vP(2,c)}var $K=xW(function(c,p){p=p.length==1&&Qe(p[0])?yn(p[0],Hi(Ve())):yn(Lr(p,1),Hi(Ve()));var w=p.length;return lt(function(R){for(var I=-1,z=Wr(R.length,w);++I=p}),Mu=m6(function(){return arguments}())?m6:function(c){return Mn(c)&&zt.call(c,"callee")&&!n6.call(c,"callee")},Qe=oe.isArray,ZK=Zc?Hi(Zc):sW;function Ei(c){return c!=null&&i0(c.length)&&!ha(c)}function Fn(c){return Mn(c)&&Ei(c)}function JK(c){return c===!0||c===!1||Mn(c)&&ui(c)==ne}var hl=hH||Fw,eX=Jc?Hi(Jc):aW;function tX(c){return Mn(c)&&c.nodeType===1&&!Wh(c)}function nX(c){if(c==null)return!0;if(Ei(c)&&(Qe(c)||typeof c=="string"||typeof c.splice=="function"||hl(c)||dd(c)||Mu(c)))return!c.length;var p=qr(c);if(p==Fe||p==ht)return!c.size;if(Gh(c))return!nw(c).length;for(var w in c)if(zt.call(c,w))return!1;return!0}function rX(c,p){return zh(c,p)}function iX(c,p,w){w=typeof w=="function"?w:n;var R=w?w(c,p):n;return R===n?zh(c,p,n,w):!!R}function Pw(c){if(!Mn(c))return!1;var p=ui(c);return p==ve||p==pe||typeof c.message=="string"&&typeof c.name=="string"&&!Wh(c)}function oX(c){return typeof c=="number"&&i6(c)}function ha(c){if(!xn(c))return!1;var p=ui(c);return p==ye||p==Je||p==W||p==rr}function CP(c){return typeof c=="number"&&c==rt(c)}function i0(c){return typeof c=="number"&&c>-1&&c%1==0&&c<=$}function xn(c){var p=typeof c;return c!=null&&(p=="object"||p=="function")}function Mn(c){return c!=null&&typeof c=="object"}var TP=kh?Hi(kh):uW;function sX(c,p){return c===p||tw(c,p,vw(p))}function aX(c,p,w){return w=typeof w=="function"?w:n,tw(c,p,vw(p),w)}function lX(c){return EP(c)&&c!=+c}function uX(c){if(WW(c))throw new Xe(o);return y6(c)}function cX(c){return c===null}function dX(c){return c==null}function EP(c){return typeof c=="number"||Mn(c)&&ui(c)==Ae}function Wh(c){if(!Mn(c)||ui(c)!=_e)return!1;var p=ky(c);if(p===null)return!0;var w=zt.call(p,"constructor")&&p.constructor;return typeof w=="function"&&w instanceof w&&Ay.call(w)==aH}var Rw=UA?Hi(UA):cW;function fX(c){return CP(c)&&c>=-$&&c<=$}var AP=zA?Hi(zA):dW;function o0(c){return typeof c=="string"||!Qe(c)&&Mn(c)&&ui(c)==At}function qi(c){return typeof c=="symbol"||Mn(c)&&ui(c)==un}var dd=VA?Hi(VA):fW;function hX(c){return c===n}function pX(c){return Mn(c)&&qr(c)==Pr}function gX(c){return Mn(c)&&ui(c)==Ci}var mX=Xy(rw),yX=Xy(function(c,p){return c<=p});function PP(c){if(!c)return[];if(Ei(c))return o0(c)?Wo(c):Ti(c);if(Mh&&c[Mh])return XG(c[Mh]());var p=qr(c),w=p==Fe?G2:p==ht?Cy:fd;return w(c)}function pa(c){if(!c)return c===0?c:0;if(c=_o(c),c===U||c===-U){var p=c<0?-1:1;return p*j}return c===c?c:0}function rt(c){var p=pa(c),w=p%1;return p===p?w?p-w:p:0}function RP(c){return c?Ru(rt(c),0,q):0}function _o(c){if(typeof c=="number")return c;if(qi(c))return G;if(xn(c)){var p=typeof c.valueOf=="function"?c.valueOf():c;c=xn(p)?p+"":p}if(typeof c!="string")return c===0?c:+c;c=KA(c);var w=vh.test(c);return w||_h.test(c)?xe(c.slice(2),w?2:8):yh.test(c)?G:+c}function OP(c){return xs(c,Ai(c))}function vX(c){return c?Ru(rt(c),-$,$):c===0?c:0}function Bt(c){return c==null?"":Wi(c)}var _X=ld(function(c,p){if(Gh(p)||Ei(p)){xs(p,_r(p),c);return}for(var w in p)zt.call(p,w)&&Fh(c,w,p[w])}),kP=ld(function(c,p){xs(p,Ai(p),c)}),s0=ld(function(c,p,w,R){xs(p,Ai(p),c,R)}),bX=ld(function(c,p,w,R){xs(p,_r(p),c,R)}),SX=da(Y2);function wX(c,p){var w=ad(c);return p==null?w:u6(w,p)}var xX=lt(function(c,p){c=en(c);var w=-1,R=p.length,I=R>2?p[2]:n;for(I&&ci(p[0],p[1],I)&&(R=1);++w1),z}),xs(c,mw(c),w),R&&(w=mo(w,f|h|g,NW));for(var I=p.length;I--;)lw(w,p[I]);return w});function zX(c,p){return MP(c,r0(Ve(p)))}var VX=da(function(c,p){return c==null?{}:gW(c,p)});function MP(c,p){if(c==null)return{};var w=yn(mw(c),function(R){return[R]});return p=Ve(p),C6(c,w,function(R,I){return p(R,I[0])})}function jX(c,p,w){p=dl(p,c);var R=-1,I=p.length;for(I||(I=1,c=n);++Rp){var R=c;c=p,p=R}if(w||c%1||p%1){var I=o6();return Wr(c+I*(p-c+re("1e-"+((I+"").length-1))),p)}return ow(c,p)}var eY=ud(function(c,p,w){return p=p.toLowerCase(),c+(w?DP(p):p)});function DP(c){return Iw(Bt(c).toLowerCase())}function $P(c){return c=Bt(c),c&&c.replace(Sh,GG).replace(vy,"")}function tY(c,p,w){c=Bt(c),p=Wi(p);var R=c.length;w=w===n?R:Ru(rt(w),0,R);var I=w;return w-=p.length,w>=0&&c.slice(w,I)==p}function nY(c){return c=Bt(c),c&&qn.test(c)?c.replace(Ft,HG):c}function rY(c){return c=Bt(c),c&&bs.test(c)?c.replace(ji,"\\$&"):c}var iY=ud(function(c,p,w){return c+(w?"-":"")+p.toLowerCase()}),oY=ud(function(c,p,w){return c+(w?" ":"")+p.toLowerCase()}),sY=U6("toLowerCase");function aY(c,p,w){c=Bt(c),p=rt(p);var R=p?nd(c):0;if(!p||R>=p)return c;var I=(p-R)/2;return Ky(Ly(I),w)+c+Ky(Ny(I),w)}function lY(c,p,w){c=Bt(c),p=rt(p);var R=p?nd(c):0;return p&&R>>0,w?(c=Bt(c),c&&(typeof p=="string"||p!=null&&!Rw(p))&&(p=Wi(p),!p&&td(c))?fl(Wo(c),0,w):c.split(p,w)):[]}var gY=ud(function(c,p,w){return c+(w?" ":"")+Iw(p)});function mY(c,p,w){return c=Bt(c),w=w==null?0:Ru(rt(w),0,c.length),p=Wi(p),c.slice(w,w+p.length)==p}function yY(c,p,w){var R=F.templateSettings;w&&ci(c,p,w)&&(p=n),c=Bt(c),p=s0({},p,R,q6);var I=s0({},p.imports,R.imports,q6),z=_r(I),K=j2(I,z),X,te,ce=0,de=p.interpolate||Ss,he="__p += '",be=H2((p.escape||Ss).source+"|"+de.source+"|"+(de===kr?mh:Ss).source+"|"+(p.evaluate||Ss).source+"|$","g"),Ne="//# sourceURL="+(zt.call(p,"sourceURL")?(p.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++by+"]")+` +`;c.replace(be,function(Ge,gt,Ct,Ki,di,Xi){return Ct||(Ct=Ki),he+=c.slice(ce,Xi).replace(wh,WG),gt&&(X=!0,he+=`' + +__e(`+gt+`) + +'`),di&&(te=!0,he+=`'; +`+di+`; +__p += '`),Ct&&(he+=`' + +((__t = (`+Ct+`)) == null ? '' : __t) + +'`),ce=Xi+Ge.length,Ge}),he+=`'; +`;var je=zt.call(p,"variable")&&p.variable;if(!je)he=`with (obj) { +`+he+` +} +`;else if(ph.test(je))throw new Xe(a);he=(te?he.replace(ra,""):he).replace(uo,"$1").replace(ia,"$1;"),he="function("+(je||"obj")+`) { +`+(je?"":`obj || (obj = {}); +`)+"var __t, __p = ''"+(X?", __e = _.escape":"")+(te?`, __j = Array.prototype.join; +function print() { __p += __j.call(arguments, '') } +`:`; +`)+he+`return __p +}`;var st=BP(function(){return Nt(z,Ne+"return "+he).apply(n,K)});if(st.source=he,Pw(st))throw st;return st}function vY(c){return Bt(c).toLowerCase()}function _Y(c){return Bt(c).toUpperCase()}function bY(c,p,w){if(c=Bt(c),c&&(w||p===n))return KA(c);if(!c||!(p=Wi(p)))return c;var R=Wo(c),I=Wo(p),z=XA(R,I),K=YA(R,I)+1;return fl(R,z,K).join("")}function SY(c,p,w){if(c=Bt(c),c&&(w||p===n))return c.slice(0,ZA(c)+1);if(!c||!(p=Wi(p)))return c;var R=Wo(c),I=YA(R,Wo(p))+1;return fl(R,0,I).join("")}function wY(c,p,w){if(c=Bt(c),c&&(w||p===n))return c.replace(fo,"");if(!c||!(p=Wi(p)))return c;var R=Wo(c),I=XA(R,Wo(p));return fl(R,I).join("")}function xY(c,p){var w=O,R=M;if(xn(p)){var I="separator"in p?p.separator:I;w="length"in p?rt(p.length):w,R="omission"in p?Wi(p.omission):R}c=Bt(c);var z=c.length;if(td(c)){var K=Wo(c);z=K.length}if(w>=z)return c;var X=w-nd(R);if(X<1)return R;var te=K?fl(K,0,X).join(""):c.slice(0,X);if(I===n)return te+R;if(K&&(X+=te.length-X),Rw(I)){if(c.slice(X).search(I)){var ce,de=te;for(I.global||(I=H2(I.source,Bt(jo.exec(I))+"g")),I.lastIndex=0;ce=I.exec(de);)var he=ce.index;te=te.slice(0,he===n?X:he)}}else if(c.indexOf(Wi(I),X)!=X){var be=te.lastIndexOf(I);be>-1&&(te=te.slice(0,be))}return te+R}function CY(c){return c=Bt(c),c&&or.test(c)?c.replace(nn,JG):c}var TY=ud(function(c,p,w){return c+(w?" ":"")+p.toUpperCase()}),Iw=U6("toUpperCase");function FP(c,p,w){return c=Bt(c),p=w?n:p,p===n?KG(c)?nH(c):BG(c):c.match(p)||[]}var BP=lt(function(c,p){try{return Gi(c,n,p)}catch(w){return Pw(w)?w:new Xe(w)}}),EY=da(function(c,p){return ho(p,function(w){w=Cs(w),ua(c,w,Ew(c[w],c))}),c});function AY(c){var p=c==null?0:c.length,w=Ve();return c=p?yn(c,function(R){if(typeof R[1]!="function")throw new po(s);return[w(R[0]),R[1]]}):[],lt(function(R){for(var I=-1;++I$)return[];var w=q,R=Wr(c,q);p=Ve(p),c-=q;for(var I=V2(R,p);++w0||p<0)?new _t(w):(c<0?w=w.takeRight(-c):c&&(w=w.drop(c)),p!==n&&(p=rt(p),w=p<0?w.dropRight(-p):w.take(p-c)),w)},_t.prototype.takeRightWhile=function(c){return this.reverse().takeWhile(c).reverse()},_t.prototype.toArray=function(){return this.take(q)},ws(_t.prototype,function(c,p){var w=/^(?:filter|find|map|reject)|While$/.test(p),R=/^(?:head|last)$/.test(p),I=F[R?"take"+(p=="last"?"Right":""):p],z=R||/^find/.test(p);I&&(F.prototype[p]=function(){var K=this.__wrapped__,X=R?[1]:arguments,te=K instanceof _t,ce=X[0],de=te||Qe(K),he=function(gt){var Ct=I.apply(F,sl([gt],X));return R&&be?Ct[0]:Ct};de&&w&&typeof ce=="function"&&ce.length!=1&&(te=de=!1);var be=this.__chain__,Ne=!!this.__actions__.length,je=z&&!be,st=te&&!Ne;if(!z&&de){K=st?K:new _t(this);var Ge=c.apply(K,X);return Ge.__actions__.push({func:Jy,args:[he],thisArg:n}),new go(Ge,be)}return je&&st?c.apply(this,X):(Ge=this.thru(he),je?R?Ge.value()[0]:Ge.value():Ge)})}),ho(["pop","push","shift","sort","splice","unshift"],function(c){var p=Ty[c],w=/^(?:push|sort|unshift)$/.test(c)?"tap":"thru",R=/^(?:pop|shift)$/.test(c);F.prototype[c]=function(){var I=arguments;if(R&&!this.__chain__){var z=this.value();return p.apply(Qe(z)?z:[],I)}return this[w](function(K){return p.apply(Qe(K)?K:[],I)})}}),ws(_t.prototype,function(c,p){var w=F[p];if(w){var R=w.name+"";zt.call(sd,R)||(sd[R]=[]),sd[R].push({name:p,func:w})}}),sd[Wy(n,_).name]=[{name:"wrapper",func:n}],_t.prototype.clone=CH,_t.prototype.reverse=TH,_t.prototype.value=EH,F.prototype.at=tK,F.prototype.chain=nK,F.prototype.commit=rK,F.prototype.next=iK,F.prototype.plant=sK,F.prototype.reverse=aK,F.prototype.toJSON=F.prototype.valueOf=F.prototype.value=lK,F.prototype.first=F.prototype.head,Mh&&(F.prototype[Mh]=oK),F},rd=rH();Rt?((Rt.exports=rd)._=rd,at._=rd):et._=rd}).call(Ze)})(L1,L1.exports);var yce=L1.exports,D1=globalThis&&globalThis.__generator||function(e,t){var n={label:0,sent:function(){if(o[0]&1)throw o[1];return o[1]},trys:[],ops:[]},r,i,o,s;return s={next:a(0),throw:a(1),return:a(2)},typeof Symbol=="function"&&(s[Symbol.iterator]=function(){return this}),s;function a(u){return function(d){return l([u,d])}}function l(u){if(r)throw new TypeError("Generator is already executing.");for(;n;)try{if(r=1,i&&(o=u[0]&2?i.return:u[0]?i.throw||((o=i.return)&&o.call(i),0):i.next)&&!(o=o.call(i,u[1])).done)return o;switch(i=0,o&&(u=[u[0]&2,o.value]),u[0]){case 0:case 1:o=u;break;case 4:return n.label++,{value:u[1],done:!1};case 5:n.label++,i=u[1],u=[0];continue;case 7:u=n.ops.pop(),n.trys.pop();continue;default:if(o=n.trys,!(o=o.length>0&&o[o.length-1])&&(u[0]===6||u[0]===2)){n=0;continue}if(u[0]===3&&(!o||u[1]>o[0]&&u[1]"u"||navigator.onLine===void 0?!0:navigator.onLine}function Ace(){return typeof document>"u"?!0:document.visibilityState!=="hidden"}var oR=hs;function P$(e,t){if(e===t||!(oR(e)&&oR(t)||Array.isArray(e)&&Array.isArray(t)))return t;for(var n=Object.keys(t),r=Object.keys(e),i=n.length===r.length,o=Array.isArray(t)?[]:{},s=0,a=n;s=200&&e.status<=299},Rce=function(e){return/ion\/(vnd\.api\+)?json/.test(e.get("content-type")||"")};function aR(e){if(!hs(e))return e;for(var t=Vn({},e),n=0,r=Object.entries(t);n"u"&&a===sR&&console.warn("Warning: `fetch` is not available. Please supply a custom `fetchFn` property to use `fetchBaseQuery` on SSR environments."),function(y,S){return B1(t,null,function(){var C,T,E,P,k,O,M,V,B,A,N,D,U,$,j,G,q,Z,ee,ie,se,le,W,ne,fe,pe,ve,ye,Je,Fe,Ae,vt,_e,Qt,rr,qt;return D1(this,function(ht){switch(ht.label){case 0:return C=S.signal,T=S.getState,E=S.extra,P=S.endpoint,k=S.forced,O=S.type,V=typeof y=="string"?{url:y}:y,B=V.url,A=V.headers,N=A===void 0?new Headers(_.headers):A,D=V.params,U=D===void 0?void 0:D,$=V.responseHandler,j=$===void 0?v??"json":$,G=V.validateStatus,q=G===void 0?x??Pce:G,Z=V.timeout,ee=Z===void 0?m:Z,ie=rR(V,["url","headers","params","responseHandler","validateStatus","timeout"]),se=Vn(Fs(Vn({},_),{signal:C}),ie),N=new Headers(aR(N)),le=se,[4,o(N,{getState:T,extra:E,endpoint:P,forced:k,type:O})];case 1:le.headers=ht.sent()||N,W=function(At){return typeof At=="object"&&(hs(At)||Array.isArray(At)||typeof At.toJSON=="function")},!se.headers.has("content-type")&&W(se.body)&&se.headers.set("content-type",h),W(se.body)&&d(se.headers)&&(se.body=JSON.stringify(se.body,g)),U&&(ne=~B.indexOf("?")?"&":"?",fe=l?l(U):new URLSearchParams(aR(U)),B+=ne+fe),B=Tce(r,B),pe=new Request(B,se),ve=pe.clone(),M={request:ve},Je=!1,Fe=ee&&setTimeout(function(){Je=!0,S.abort()},ee),ht.label=2;case 2:return ht.trys.push([2,4,5,6]),[4,a(pe)];case 3:return ye=ht.sent(),[3,6];case 4:return Ae=ht.sent(),[2,{error:{status:Je?"TIMEOUT_ERROR":"FETCH_ERROR",error:String(Ae)},meta:M}];case 5:return Fe&&clearTimeout(Fe),[7];case 6:vt=ye.clone(),M.response=vt,Qt="",ht.label=7;case 7:return ht.trys.push([7,9,,10]),[4,Promise.all([b(ye,j).then(function(At){return _e=At},function(At){return rr=At}),vt.text().then(function(At){return Qt=At},function(){})])];case 8:if(ht.sent(),rr)throw rr;return[3,10];case 9:return qt=ht.sent(),[2,{error:{status:"PARSING_ERROR",originalStatus:ye.status,data:Qt,error:String(qt)},meta:M}];case 10:return[2,q(ye,_e)?{data:_e,meta:M}:{error:{status:ye.status,data:_e},meta:M}]}})})};function b(y,S){return B1(this,null,function(){var C;return D1(this,function(T){switch(T.label){case 0:return typeof S=="function"?[2,S(y)]:(S==="content-type"&&(S=d(y.headers)?"json":"text"),S!=="json"?[3,2]:[4,y.text()]);case 1:return C=T.sent(),[2,C.length?JSON.parse(C):null];case 2:return[2,y.text()]}})})}}var lR=function(){function e(t,n){n===void 0&&(n=void 0),this.value=t,this.meta=n}return e}(),UT=Me("__rtkq/focused"),R$=Me("__rtkq/unfocused"),zT=Me("__rtkq/online"),O$=Me("__rtkq/offline"),Ys;(function(e){e.query="query",e.mutation="mutation"})(Ys||(Ys={}));function k$(e){return e.type===Ys.query}function kce(e){return e.type===Ys.mutation}function I$(e,t,n,r,i,o){return Ice(e)?e(t,n,r,i).map(z3).map(o):Array.isArray(e)?e.map(z3).map(o):[]}function Ice(e){return typeof e=="function"}function z3(e){return typeof e=="string"?{type:e}:e}function wx(e){return e!=null}var Fg=Symbol("forceQueryFn"),V3=function(e){return typeof e[Fg]=="function"};function Mce(e){var t=e.serializeQueryArgs,n=e.queryThunk,r=e.mutationThunk,i=e.api,o=e.context,s=new Map,a=new Map,l=i.internalActions,u=l.unsubscribeQueryResult,d=l.removeMutationResult,f=l.updateSubscriptionOptions;return{buildInitiateQuery:b,buildInitiateMutation:y,getRunningQueryThunk:m,getRunningMutationThunk:v,getRunningQueriesThunk:x,getRunningMutationsThunk:_,getRunningOperationPromises:g,removalWarning:h};function h(){throw new Error(`This method had to be removed due to a conceptual bug in RTK. + Please see https://github.com/reduxjs/redux-toolkit/pull/2481 for details. + See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for new guidance on SSR.`)}function g(){typeof process<"u";var S=function(C){return Array.from(C.values()).flatMap(function(T){return T?Object.values(T):[]})};return $1($1([],S(s)),S(a)).filter(wx)}function m(S,C){return function(T){var E,P=o.endpointDefinitions[S],k=t({queryArgs:C,endpointDefinition:P,endpointName:S});return(E=s.get(T))==null?void 0:E[k]}}function v(S,C){return function(T){var E;return(E=a.get(T))==null?void 0:E[C]}}function x(){return function(S){return Object.values(s.get(S)||{}).filter(wx)}}function _(){return function(S){return Object.values(a.get(S)||{}).filter(wx)}}function b(S,C){var T=function(E,P){var k=P===void 0?{}:P,O=k.subscribe,M=O===void 0?!0:O,V=k.forceRefetch,B=k.subscriptionOptions,A=Fg,N=k[A];return function(D,U){var $,j,G=t({queryArgs:E,endpointDefinition:C,endpointName:S}),q=n(($={type:"query",subscribe:M,forceRefetch:V,subscriptionOptions:B,endpointName:S,originalArgs:E,queryCacheKey:G},$[Fg]=N,$)),Z=i.endpoints[S].select(E),ee=D(q),ie=Z(U()),se=ee.requestId,le=ee.abort,W=ie.requestId!==se,ne=(j=s.get(D))==null?void 0:j[G],fe=function(){return Z(U())},pe=Object.assign(N?ee.then(fe):W&&!ne?Promise.resolve(ie):Promise.all([ne,ee]).then(fe),{arg:E,requestId:se,subscriptionOptions:B,queryCacheKey:G,abort:le,unwrap:function(){return B1(this,null,function(){var ye;return D1(this,function(Je){switch(Je.label){case 0:return[4,pe];case 1:if(ye=Je.sent(),ye.isError)throw ye.error;return[2,ye.data]}})})},refetch:function(){return D(T(E,{subscribe:!1,forceRefetch:!0}))},unsubscribe:function(){M&&D(u({queryCacheKey:G,requestId:se}))},updateSubscriptionOptions:function(ye){pe.subscriptionOptions=ye,D(f({endpointName:S,requestId:se,queryCacheKey:G,options:ye}))}});if(!ne&&!W&&!N){var ve=s.get(D)||{};ve[G]=pe,s.set(D,ve),pe.then(function(){delete ve[G],Object.keys(ve).length||s.delete(D)})}return pe}};return T}function y(S){return function(C,T){var E=T===void 0?{}:T,P=E.track,k=P===void 0?!0:P,O=E.fixedCacheKey;return function(M,V){var B=r({type:"mutation",endpointName:S,originalArgs:C,track:k,fixedCacheKey:O}),A=M(B),N=A.requestId,D=A.abort,U=A.unwrap,$=A.unwrap().then(function(Z){return{data:Z}}).catch(function(Z){return{error:Z}}),j=function(){M(d({requestId:N,fixedCacheKey:O}))},G=Object.assign($,{arg:A.arg,requestId:N,abort:D,unwrap:U,unsubscribe:j,reset:j}),q=a.get(M)||{};return a.set(M,q),q[N]=G,G.then(function(){delete q[N],Object.keys(q).length||a.delete(M)}),O&&(q[O]=G,G.then(function(){q[O]===G&&(delete q[O],Object.keys(q).length||a.delete(M))})),G}}}}function uR(e){return e}function Nce(e){var t=this,n=e.reducerPath,r=e.baseQuery,i=e.context.endpointDefinitions,o=e.serializeQueryArgs,s=e.api,a=function(y,S,C){return function(T){var E=i[y];T(s.internalActions.queryResultPatched({queryCacheKey:o({queryArgs:S,endpointDefinition:E,endpointName:y}),patches:C}))}},l=function(y,S,C){return function(T,E){var P,k,O=s.endpoints[y].select(S)(E()),M={patches:[],inversePatches:[],undo:function(){return T(s.util.patchQueryData(y,S,M.inversePatches))}};if(O.status===vn.uninitialized)return M;if("data"in O)if(Fi(O.data)){var V=pT(O.data,C),B=V[1],A=V[2];(P=M.patches).push.apply(P,B),(k=M.inversePatches).push.apply(k,A)}else{var N=C(O.data);M.patches.push({op:"replace",path:[],value:N}),M.inversePatches.push({op:"replace",path:[],value:O.data})}return T(s.util.patchQueryData(y,S,M.patches)),M}},u=function(y,S,C){return function(T){var E;return T(s.endpoints[y].initiate(S,(E={subscribe:!1,forceRefetch:!0},E[Fg]=function(){return{data:C}},E)))}},d=function(y,S){return B1(t,[y,S],function(C,T){var E,P,k,O,M,V,B,A,N,D,U,$,j,G,q,Z,ee,ie,se=T.signal,le=T.abort,W=T.rejectWithValue,ne=T.fulfillWithValue,fe=T.dispatch,pe=T.getState,ve=T.extra;return D1(this,function(ye){switch(ye.label){case 0:E=i[C.endpointName],ye.label=1;case 1:return ye.trys.push([1,8,,13]),P=uR,k=void 0,O={signal:se,abort:le,dispatch:fe,getState:pe,extra:ve,endpoint:C.endpointName,type:C.type,forced:C.type==="query"?f(C,pe()):void 0},M=C.type==="query"?C[Fg]:void 0,M?(k=M(),[3,6]):[3,2];case 2:return E.query?[4,r(E.query(C.originalArgs),O,E.extraOptions)]:[3,4];case 3:return k=ye.sent(),E.transformResponse&&(P=E.transformResponse),[3,6];case 4:return[4,E.queryFn(C.originalArgs,O,E.extraOptions,function(Je){return r(Je,O,E.extraOptions)})];case 5:k=ye.sent(),ye.label=6;case 6:if(typeof process<"u",k.error)throw new lR(k.error,k.meta);return U=ne,[4,P(k.data,k.meta,C.originalArgs)];case 7:return[2,U.apply(void 0,[ye.sent(),(ee={fulfilledTimeStamp:Date.now(),baseQueryMeta:k.meta},ee[Yu]=!0,ee)])];case 8:if($=ye.sent(),j=$,!(j instanceof lR))return[3,12];G=uR,E.query&&E.transformErrorResponse&&(G=E.transformErrorResponse),ye.label=9;case 9:return ye.trys.push([9,11,,12]),q=W,[4,G(j.value,j.meta,C.originalArgs)];case 10:return[2,q.apply(void 0,[ye.sent(),(ie={baseQueryMeta:j.meta},ie[Yu]=!0,ie)])];case 11:return Z=ye.sent(),j=Z,[3,12];case 12:throw typeof process<"u",console.error(j),j;case 13:return[2]}})})};function f(y,S){var C,T,E,P,k=(T=(C=S[n])==null?void 0:C.queries)==null?void 0:T[y.queryCacheKey],O=(E=S[n])==null?void 0:E.config.refetchOnMountOrArgChange,M=k==null?void 0:k.fulfilledTimeStamp,V=(P=y.forceRefetch)!=null?P:y.subscribe&&O;return V?V===!0||(Number(new Date)-Number(M))/1e3>=V:!1}var h=Jl(n+"/executeQuery",d,{getPendingMeta:function(){var y;return y={startedTimeStamp:Date.now()},y[Yu]=!0,y},condition:function(y,S){var C=S.getState,T,E,P,k=C(),O=(E=(T=k[n])==null?void 0:T.queries)==null?void 0:E[y.queryCacheKey],M=O==null?void 0:O.fulfilledTimeStamp,V=y.originalArgs,B=O==null?void 0:O.originalArgs,A=i[y.endpointName];return V3(y)?!0:(O==null?void 0:O.status)==="pending"?!1:f(y,k)||k$(A)&&((P=A==null?void 0:A.forceRefetch)!=null&&P.call(A,{currentArg:V,previousArg:B,endpointState:O,state:k}))?!0:!M},dispatchConditionRejection:!0}),g=Jl(n+"/executeMutation",d,{getPendingMeta:function(){var y;return y={startedTimeStamp:Date.now()},y[Yu]=!0,y}}),m=function(y){return"force"in y},v=function(y){return"ifOlderThan"in y},x=function(y,S,C){return function(T,E){var P=m(C)&&C.force,k=v(C)&&C.ifOlderThan,O=function(A){return A===void 0&&(A=!0),s.endpoints[y].initiate(S,{forceRefetch:A})},M=s.endpoints[y].select(S)(E());if(P)T(O());else if(k){var V=M==null?void 0:M.fulfilledTimeStamp;if(!V){T(O());return}var B=(Number(new Date)-Number(new Date(V)))/1e3>=k;B&&T(O())}else T(O(!1))}};function _(y){return function(S){var C,T;return((T=(C=S==null?void 0:S.meta)==null?void 0:C.arg)==null?void 0:T.endpointName)===y}}function b(y,S){return{matchPending:lf(ib(y),_(S)),matchFulfilled:lf(pu(y),_(S)),matchRejected:lf(If(y),_(S))}}return{queryThunk:h,mutationThunk:g,prefetch:x,updateQueryData:l,upsertQueryData:u,patchQueryData:a,buildMatchThunkActions:b}}function M$(e,t,n,r){return I$(n[e.meta.arg.endpointName][t],pu(e)?e.payload:void 0,Sm(e)?e.payload:void 0,e.meta.arg.originalArgs,"baseQueryMeta"in e.meta?e.meta.baseQueryMeta:void 0,r)}function R0(e,t,n){var r=e[t];r&&n(r)}function Bg(e){var t;return(t="arg"in e?e.arg.fixedCacheKey:e.fixedCacheKey)!=null?t:e.requestId}function cR(e,t,n){var r=e[Bg(t)];r&&n(r)}var rp={};function Lce(e){var t=e.reducerPath,n=e.queryThunk,r=e.mutationThunk,i=e.context,o=i.endpointDefinitions,s=i.apiUid,a=i.extractRehydrationInfo,l=i.hasRehydrationInfo,u=e.assertTagType,d=e.config,f=Me(t+"/resetApiState"),h=An({name:t+"/queries",initialState:rp,reducers:{removeQueryResult:{reducer:function(C,T){var E=T.payload.queryCacheKey;delete C[E]},prepare:wv()},queryResultPatched:function(C,T){var E=T.payload,P=E.queryCacheKey,k=E.patches;R0(C,P,function(O){O.data=x3(O.data,k.concat())})}},extraReducers:function(C){C.addCase(n.pending,function(T,E){var P=E.meta,k=E.meta.arg,O,M,V=V3(k);(k.subscribe||V)&&((M=T[O=k.queryCacheKey])!=null||(T[O]={status:vn.uninitialized,endpointName:k.endpointName})),R0(T,k.queryCacheKey,function(B){B.status=vn.pending,B.requestId=V&&B.requestId?B.requestId:P.requestId,k.originalArgs!==void 0&&(B.originalArgs=k.originalArgs),B.startedTimeStamp=P.startedTimeStamp})}).addCase(n.fulfilled,function(T,E){var P=E.meta,k=E.payload;R0(T,P.arg.queryCacheKey,function(O){var M;if(!(O.requestId!==P.requestId&&!V3(P.arg))){var V=o[P.arg.endpointName].merge;if(O.status=vn.fulfilled,V)if(O.data!==void 0){var B=P.fulfilledTimeStamp,A=P.arg,N=P.baseQueryMeta,D=P.requestId,U=fu(O.data,function($){return V($,k,{arg:A.originalArgs,baseQueryMeta:N,fulfilledTimeStamp:B,requestId:D})});O.data=U}else O.data=k;else O.data=(M=o[P.arg.endpointName].structuralSharing)==null||M?P$(yi(O.data)?aT(O.data):O.data,k):k;delete O.error,O.fulfilledTimeStamp=P.fulfilledTimeStamp}})}).addCase(n.rejected,function(T,E){var P=E.meta,k=P.condition,O=P.arg,M=P.requestId,V=E.error,B=E.payload;R0(T,O.queryCacheKey,function(A){if(!k){if(A.requestId!==M)return;A.status=vn.rejected,A.error=B??V}})}).addMatcher(l,function(T,E){for(var P=a(E).queries,k=0,O=Object.entries(P);k"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?ide:rde;D$.useSyncExternalStore=$f.useSyncExternalStore!==void 0?$f.useSyncExternalStore:ode;L$.exports=D$;var sde=L$.exports,$$={exports:{}},F$={};/** + * @license React + * use-sync-external-store-shim/with-selector.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var bb=L,ade=sde;function lde(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var ude=typeof Object.is=="function"?Object.is:lde,cde=ade.useSyncExternalStore,dde=bb.useRef,fde=bb.useEffect,hde=bb.useMemo,pde=bb.useDebugValue;F$.useSyncExternalStoreWithSelector=function(e,t,n,r,i){var o=dde(null);if(o.current===null){var s={hasValue:!1,value:null};o.current=s}else s=o.current;o=hde(function(){function l(g){if(!u){if(u=!0,d=g,g=r(g),i!==void 0&&s.hasValue){var m=s.value;if(i(m,g))return f=m}return f=g}if(m=f,ude(d,g))return m;var v=r(g);return i!==void 0&&i(m,v)?m:(d=g,f=v)}var u=!1,d,f,h=n===void 0?null:n;return[function(){return l(t())},h===null?void 0:function(){return l(h())}]},[t,n,r,i]);var a=cde(e,o[0],o[1]);return fde(function(){s.hasValue=!0,s.value=a},[a]),pde(a),a};$$.exports=F$;var B$=$$.exports;const gde=Tc(B$);function mde(e){e()}let U$=mde;const yde=e=>U$=e,vde=()=>U$,yR=Symbol.for(`react-redux-context-${L.version}`),vR=globalThis;function _de(){let e=vR[yR];return e||(e=L.createContext(null),vR[yR]=e),e}const ru=new Proxy({},new Proxy({},{get(e,t){const n=_de();return(r,...i)=>Reflect[t](n,...i)}}));function VT(e=ru){return function(){return L.useContext(e)}}const z$=VT(),bde=()=>{throw new Error("uSES not initialized!")};let V$=bde;const Sde=e=>{V$=e},wde=(e,t)=>e===t;function xde(e=ru){const t=e===ru?z$:VT(e);return function(r,i={}){const{equalityFn:o=wde,stabilityCheck:s=void 0,noopCheck:a=void 0}=typeof i=="function"?{equalityFn:i}:i,{store:l,subscription:u,getServerState:d,stabilityCheck:f,noopCheck:h}=t();L.useRef(!0);const g=L.useCallback({[r.name](v){return r(v)}}[r.name],[r,f,s]),m=V$(u.addNestedSub,l.getState,d||l.getState,g,o);return L.useDebugValue(m),m}}const j$=xde();function U1(){return U1=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let r=t;for(;r;)r.callback(),r=r.next})},get(){let r=[],i=t;for(;i;)r.push(i),i=i.next;return r},subscribe(r){let i=!0,o=n={callback:r,next:null,prev:n};return o.prev?o.prev.next=o:t=o,function(){!i||t===null||(i=!1,o.next?o.next.prev=o.prev:n=o.prev,o.prev?o.prev.next=o.next:t=o.next)}}}}const _R={notify(){},get:()=>[]};function Lde(e,t){let n,r=_R;function i(f){return l(),r.subscribe(f)}function o(){r.notify()}function s(){d.onStateChange&&d.onStateChange()}function a(){return!!n}function l(){n||(n=t?t.addNestedSub(s):e.subscribe(s),r=Nde())}function u(){n&&(n(),n=void 0,r.clear(),r=_R)}const d={addNestedSub:i,notifyNestedSubs:o,handleChangeWrapper:s,isSubscribed:a,trySubscribe:l,tryUnsubscribe:u,getListeners:()=>r};return d}const Dde=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",$de=Dde?L.useLayoutEffect:L.useEffect;function bR(e,t){return e===t?e!==0||t!==0||1/e===1/t:e!==e&&t!==t}function z1(e,t){if(bR(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;const n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let i=0;i{const u=Lde(e);return{store:e,subscription:u,getServerState:r?()=>r:void 0,stabilityCheck:i,noopCheck:o}},[e,r,i,o]),a=L.useMemo(()=>e.getState(),[e]);$de(()=>{const{subscription:u}=s;return u.onStateChange=u.notifyNestedSubs,u.trySubscribe(),a!==e.getState()&&u.notifyNestedSubs(),()=>{u.tryUnsubscribe(),u.onStateChange=void 0}},[s,a]);const l=t||ru;return jt.createElement(l.Provider,{value:s},n)}function X$(e=ru){const t=e===ru?z$:VT(e);return function(){const{store:r}=t();return r}}const Y$=X$();function Bde(e=ru){const t=e===ru?Y$:X$(e);return function(){return t().dispatch}}const Q$=Bde();Sde(B$.useSyncExternalStoreWithSelector);yde(Ms.unstable_batchedUpdates);var Ude=globalThis&&globalThis.__spreadArray||function(e,t){for(var n=0,r=t.length,i=e.length;n{const r=$g.get(),i=Dg.get(),o=N1.get();return Oce({baseUrl:`${r??""}/api/v1`,prepareHeaders:a=>(i&&a.set("Authorization",`Bearer ${i}`),o&&a.set("project-id",o),a)})(e,t,n)},iu=tfe({baseQuery:rfe,reducerPath:"api",tagTypes:nfe,endpoints:()=>({})}),ife=(e,t)=>{const n=new Date(e),r=new Date(t);return n>r?1:ne==null,cfe=e=>encodeURIComponent(e).replace(/[!'()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`),G3=Symbol("encodeFragmentIdentifier");function dfe(e){switch(e.arrayFormat){case"index":return t=>(n,r)=>{const i=n.length;return r===void 0||e.skipNull&&r===null||e.skipEmptyString&&r===""?n:r===null?[...n,[Kn(t,e),"[",i,"]"].join("")]:[...n,[Kn(t,e),"[",Kn(i,e),"]=",Kn(r,e)].join("")]};case"bracket":return t=>(n,r)=>r===void 0||e.skipNull&&r===null||e.skipEmptyString&&r===""?n:r===null?[...n,[Kn(t,e),"[]"].join("")]:[...n,[Kn(t,e),"[]=",Kn(r,e)].join("")];case"colon-list-separator":return t=>(n,r)=>r===void 0||e.skipNull&&r===null||e.skipEmptyString&&r===""?n:r===null?[...n,[Kn(t,e),":list="].join("")]:[...n,[Kn(t,e),":list=",Kn(r,e)].join("")];case"comma":case"separator":case"bracket-separator":{const t=e.arrayFormat==="bracket-separator"?"[]=":"=";return n=>(r,i)=>i===void 0||e.skipNull&&i===null||e.skipEmptyString&&i===""?r:(i=i===null?"":i,r.length===0?[[Kn(n,e),t,Kn(i,e)].join("")]:[[r,Kn(i,e)].join(e.arrayFormatSeparator)])}default:return t=>(n,r)=>r===void 0||e.skipNull&&r===null||e.skipEmptyString&&r===""?n:r===null?[...n,Kn(t,e)]:[...n,[Kn(t,e),"=",Kn(r,e)].join("")]}}function ffe(e){let t;switch(e.arrayFormat){case"index":return(n,r,i)=>{if(t=/\[(\d*)]$/.exec(n),n=n.replace(/\[\d*]$/,""),!t){i[n]=r;return}i[n]===void 0&&(i[n]={}),i[n][t[1]]=r};case"bracket":return(n,r,i)=>{if(t=/(\[])$/.exec(n),n=n.replace(/\[]$/,""),!t){i[n]=r;return}if(i[n]===void 0){i[n]=[r];return}i[n]=[...i[n],r]};case"colon-list-separator":return(n,r,i)=>{if(t=/(:list)$/.exec(n),n=n.replace(/:list$/,""),!t){i[n]=r;return}if(i[n]===void 0){i[n]=[r];return}i[n]=[...i[n],r]};case"comma":case"separator":return(n,r,i)=>{const o=typeof r=="string"&&r.includes(e.arrayFormatSeparator),s=typeof r=="string"&&!o&&Ea(r,e).includes(e.arrayFormatSeparator);r=s?Ea(r,e):r;const a=o||s?r.split(e.arrayFormatSeparator).map(l=>Ea(l,e)):r===null?r:Ea(r,e);i[n]=a};case"bracket-separator":return(n,r,i)=>{const o=/(\[])$/.test(n);if(n=n.replace(/\[]$/,""),!o){i[n]=r&&Ea(r,e);return}const s=r===null?[]:r.split(e.arrayFormatSeparator).map(a=>Ea(a,e));if(i[n]===void 0){i[n]=s;return}i[n]=[...i[n],...s]};default:return(n,r,i)=>{if(i[n]===void 0){i[n]=r;return}i[n]=[...[i[n]].flat(),r]}}}function eF(e){if(typeof e!="string"||e.length!==1)throw new TypeError("arrayFormatSeparator must be single character string")}function Kn(e,t){return t.encode?t.strict?cfe(e):encodeURIComponent(e):e}function Ea(e,t){return t.decode?afe(e):e}function tF(e){return Array.isArray(e)?e.sort():typeof e=="object"?tF(Object.keys(e)).sort((t,n)=>Number(t)-Number(n)).map(t=>e[t]):e}function nF(e){const t=e.indexOf("#");return t!==-1&&(e=e.slice(0,t)),e}function hfe(e){let t="";const n=e.indexOf("#");return n!==-1&&(t=e.slice(n)),t}function ER(e,t){return t.parseNumbers&&!Number.isNaN(Number(e))&&typeof e=="string"&&e.trim()!==""?e=Number(e):t.parseBooleans&&e!==null&&(e.toLowerCase()==="true"||e.toLowerCase()==="false")&&(e=e.toLowerCase()==="true"),e}function KT(e){e=nF(e);const t=e.indexOf("?");return t===-1?"":e.slice(t+1)}function XT(e,t){t={decode:!0,sort:!0,arrayFormat:"none",arrayFormatSeparator:",",parseNumbers:!1,parseBooleans:!1,...t},eF(t.arrayFormatSeparator);const n=ffe(t),r=Object.create(null);if(typeof e!="string"||(e=e.trim().replace(/^[?#&]/,""),!e))return r;for(const i of e.split("&")){if(i==="")continue;const o=t.decode?i.replace(/\+/g," "):i;let[s,a]=J$(o,"=");s===void 0&&(s=o),a=a===void 0?null:["comma","separator","bracket-separator"].includes(t.arrayFormat)?a:Ea(a,t),n(Ea(s,t),a,r)}for(const[i,o]of Object.entries(r))if(typeof o=="object"&&o!==null)for(const[s,a]of Object.entries(o))o[s]=ER(a,t);else r[i]=ER(o,t);return t.sort===!1?r:(t.sort===!0?Object.keys(r).sort():Object.keys(r).sort(t.sort)).reduce((i,o)=>{const s=r[o];return s&&typeof s=="object"&&!Array.isArray(s)?i[o]=tF(s):i[o]=s,i},Object.create(null))}function rF(e,t){if(!e)return"";t={encode:!0,strict:!0,arrayFormat:"none",arrayFormatSeparator:",",...t},eF(t.arrayFormatSeparator);const n=s=>t.skipNull&&ufe(e[s])||t.skipEmptyString&&e[s]==="",r=dfe(t),i={};for(const[s,a]of Object.entries(e))n(s)||(i[s]=a);const o=Object.keys(i);return t.sort!==!1&&o.sort(t.sort),o.map(s=>{const a=e[s];return a===void 0?"":a===null?Kn(s,t):Array.isArray(a)?a.length===0&&t.arrayFormat==="bracket-separator"?Kn(s,t)+"[]":a.reduce(r(s),[]).join("&"):Kn(s,t)+"="+Kn(a,t)}).filter(s=>s.length>0).join("&")}function iF(e,t){var i;t={decode:!0,...t};let[n,r]=J$(e,"#");return n===void 0&&(n=e),{url:((i=n==null?void 0:n.split("?"))==null?void 0:i[0])??"",query:XT(KT(e),t),...t&&t.parseFragmentIdentifier&&r?{fragmentIdentifier:Ea(r,t)}:{}}}function oF(e,t){t={encode:!0,strict:!0,[G3]:!0,...t};const n=nF(e.url).split("?")[0]||"",r=KT(e.url),i={...XT(r,{sort:!1}),...e.query};let o=rF(i,t);o&&(o=`?${o}`);let s=hfe(e.url);if(e.fragmentIdentifier){const a=new URL(n);a.hash=e.fragmentIdentifier,s=t[G3]?a.hash:`#${e.fragmentIdentifier}`}return`${n}${o}${s}`}function sF(e,t,n){n={parseFragmentIdentifier:!0,[G3]:!1,...n};const{url:r,query:i,fragmentIdentifier:o}=iF(e,n);return oF({url:r,query:lfe(i,t),fragmentIdentifier:o},n)}function pfe(e,t,n){const r=Array.isArray(t)?i=>!t.includes(i):(i,o)=>!t(i,o);return sF(e,r,n)}const Tv=Object.freeze(Object.defineProperty({__proto__:null,exclude:pfe,extract:KT,parse:XT,parseUrl:iF,pick:sF,stringify:rF,stringifyUrl:oF},Symbol.toStringTag,{value:"Module"})),ip=(e,t)=>{if(!e)return!1;const n=j1.selectAll(e);if(n.length>1){const r=new Date(t.created_at),i=n[n.length-1];if(!i)return!1;const o=new Date(i.created_at);return r>=o}else if([0,1].includes(n.length))return!0;return!1},ml=e=>Jr.includes(e.image_category)?Jr:Ll,Cn=hu({selectId:e=>e.image_name,sortComparer:(e,t)=>ife(t.updated_at,e.updated_at)}),j1=Cn.getSelectors(),Jo=e=>`images/?${Tv.stringify(e,{arrayFormat:"none"})}`,Yi=iu.injectEndpoints({endpoints:e=>({listBoards:e.query({query:t=>({url:"boards/",params:t}),providesTags:(t,n,r)=>{const i=[{type:"Board",id:tt}];return t&&i.push(...t.items.map(({board_id:o})=>({type:"Board",id:o}))),i}}),listAllBoards:e.query({query:()=>({url:"boards/",params:{all:!0}}),providesTags:(t,n,r)=>{const i=[{type:"Board",id:tt}];return t&&i.push(...t.map(({board_id:o})=>({type:"Board",id:o}))),i}}),listAllImageNamesForBoard:e.query({query:t=>({url:`boards/${t}/image_names`}),providesTags:(t,n,r)=>[{type:"ImageNameList",id:r}],keepUnusedDataFor:0}),getBoardImagesTotal:e.query({query:t=>({url:Jo({board_id:t??"none",categories:Jr,is_intermediate:!1,limit:0,offset:0}),method:"GET"}),providesTags:(t,n,r)=>[{type:"BoardImagesTotal",id:r??"none"}],transformResponse:t=>t.total}),getBoardAssetsTotal:e.query({query:t=>({url:Jo({board_id:t??"none",categories:Ll,is_intermediate:!1,limit:0,offset:0}),method:"GET"}),providesTags:(t,n,r)=>[{type:"BoardAssetsTotal",id:r??"none"}],transformResponse:t=>t.total}),createBoard:e.mutation({query:t=>({url:"boards/",method:"POST",params:{board_name:t}}),invalidatesTags:[{type:"Board",id:tt}]}),updateBoard:e.mutation({query:({board_id:t,changes:n})=>({url:`boards/${t}`,method:"PATCH",body:n}),invalidatesTags:(t,n,r)=>[{type:"Board",id:r.board_id}]})})}),{useListBoardsQuery:oIe,useListAllBoardsQuery:sIe,useGetBoardImagesTotalQuery:aIe,useGetBoardAssetsTotalQuery:lIe,useCreateBoardMutation:uIe,useUpdateBoardMutation:cIe,useListAllImageNamesForBoardQuery:dIe}=Yi,we=iu.injectEndpoints({endpoints:e=>({listImages:e.query({query:t=>({url:Jo(t),method:"GET"}),providesTags:(t,n,{board_id:r,categories:i})=>[{type:"ImageList",id:Jo({board_id:r,categories:i})}],serializeQueryArgs:({queryArgs:t})=>{const{board_id:n,categories:r}=t;return Jo({board_id:n,categories:r})},transformResponse(t){const{items:n}=t;return Cn.addMany(Cn.getInitialState(),n)},merge:(t,n)=>{Cn.addMany(t,j1.selectAll(n))},forceRefetch({currentArg:t,previousArg:n}){return(t==null?void 0:t.offset)!==(n==null?void 0:n.offset)},async onQueryStarted(t,{dispatch:n,queryFulfilled:r}){try{const{data:i}=await r;j1.selectAll(i).forEach(o=>{n(we.util.upsertQueryData("getImageDTO",o.image_name,o))})}catch{}},keepUnusedDataFor:86400}),getIntermediatesCount:e.query({query:()=>({url:Jo({is_intermediate:!0})}),providesTags:["IntermediatesCount"],transformResponse:t=>t.total}),getImageDTO:e.query({query:t=>({url:`images/i/${t}`}),providesTags:(t,n,r)=>[{type:"Image",id:r}],keepUnusedDataFor:86400}),getImageMetadata:e.query({query:t=>({url:`images/i/${t}/metadata`}),providesTags:(t,n,r)=>[{type:"ImageMetadata",id:r}],keepUnusedDataFor:86400}),clearIntermediates:e.mutation({query:()=>({url:"images/clear-intermediates",method:"POST"}),invalidatesTags:["IntermediatesCount"]}),deleteImage:e.mutation({query:({image_name:t})=>({url:`images/i/${t}`,method:"DELETE"}),invalidatesTags:(t,n,{board_id:r})=>[{type:"BoardImagesTotal",id:r??"none"},{type:"BoardAssetsTotal",id:r??"none"}],async onQueryStarted(t,{dispatch:n,queryFulfilled:r}){const{image_name:i,board_id:o}=t,s={board_id:o??"none",categories:ml(t)},a=n(we.util.updateQueryData("listImages",s,l=>{Cn.removeOne(l,i)}));try{await r}catch{a.undo()}}}),deleteImages:e.mutation({query:({imageDTOs:t})=>({url:"images/delete",method:"POST",body:{image_names:t.map(r=>r.image_name)}}),invalidatesTags:(t,n,{imageDTOs:r})=>{var o;const i=(o=r[0])==null?void 0:o.board_id;return[{type:"BoardImagesTotal",id:i??"none"},{type:"BoardAssetsTotal",id:i??"none"}]},async onQueryStarted({imageDTOs:t},{dispatch:n,queryFulfilled:r}){try{const{data:i}=await r,o=yce.keyBy(t,"image_name");i.deleted_images.forEach(s=>{const a=o[s];if(a){const l={board_id:a.board_id??"none",categories:ml(a)};n(we.util.updateQueryData("listImages",l,u=>{Cn.removeOne(u,s)}))}})}catch{}}}),changeImageIsIntermediate:e.mutation({query:({imageDTO:t,is_intermediate:n})=>({url:`images/i/${t.image_name}`,method:"PATCH",body:{is_intermediate:n}}),invalidatesTags:(t,n,{imageDTO:r})=>[{type:"BoardImagesTotal",id:r.board_id??"none"},{type:"BoardAssetsTotal",id:r.board_id??"none"}],async onQueryStarted({imageDTO:t,is_intermediate:n},{dispatch:r,queryFulfilled:i,getState:o}){const s=[];s.push(r(we.util.updateQueryData("getImageDTO",t.image_name,l=>{Object.assign(l,{is_intermediate:n})})));const a=ml(t);if(n)s.push(r(we.util.updateQueryData("listImages",{board_id:t.board_id??"none",categories:a},l=>{Cn.removeOne(l,t.image_name)})));else{const l={board_id:t.board_id??"none",categories:a},u=we.endpoints.listImages.select(l)(o()),{data:d}=Jr.includes(t.image_category)?Yi.endpoints.getBoardImagesTotal.select(t.board_id??"none")(o()):Yi.endpoints.getBoardAssetsTotal.select(t.board_id??"none")(o()),f=u.data&&u.data.ids.length>=(d??0),h=ip(u.data,t);(f||h)&&s.push(r(we.util.updateQueryData("listImages",l,g=>{Cn.upsertOne(g,t)})))}try{await i}catch{s.forEach(l=>l.undo())}}}),changeImageSessionId:e.mutation({query:({imageDTO:t,session_id:n})=>({url:`images/i/${t.image_name}`,method:"PATCH",body:{session_id:n}}),invalidatesTags:(t,n,{imageDTO:r})=>[{type:"BoardImagesTotal",id:r.board_id??"none"},{type:"BoardAssetsTotal",id:r.board_id??"none"}],async onQueryStarted({imageDTO:t,session_id:n},{dispatch:r,queryFulfilled:i,getState:o}){const s=[];s.push(r(we.util.updateQueryData("getImageDTO",t.image_name,a=>{Object.assign(a,{session_id:n})})));try{await i}catch{s.forEach(a=>a.undo())}}}),uploadImage:e.mutation({query:({file:t,image_category:n,is_intermediate:r,session_id:i,board_id:o,crop_visible:s})=>{const a=new FormData;return a.append("file",t),{url:"images/upload",method:"POST",body:a,params:{image_category:n,is_intermediate:r,session_id:i,board_id:o==="none"?void 0:o,crop_visible:s}}},async onQueryStarted({file:t,image_category:n,is_intermediate:r,postUploadAction:i,session_id:o,board_id:s},{dispatch:a,queryFulfilled:l}){try{const{data:u}=await l;if(u.is_intermediate)return;a(we.util.upsertQueryData("getImageDTO",u.image_name,u));const d=ml(u);a(we.util.updateQueryData("listImages",{board_id:u.board_id??"none",categories:d},f=>{Cn.addOne(f,u)})),a(we.util.invalidateTags([{type:"BoardImagesTotal",id:u.board_id??"none"},{type:"BoardAssetsTotal",id:u.board_id??"none"}]))}catch{}}}),deleteBoard:e.mutation({query:t=>({url:`boards/${t}`,method:"DELETE"}),invalidatesTags:(t,n,r)=>[{type:"Board",id:tt},{type:"ImageList",id:Jo({board_id:"none",categories:Jr})},{type:"ImageList",id:Jo({board_id:"none",categories:Ll})},{type:"BoardImagesTotal",id:"none"},{type:"BoardAssetsTotal",id:"none"}],async onQueryStarted(t,{dispatch:n,queryFulfilled:r,getState:i}){try{const{data:o}=await r,{deleted_board_images:s}=o;s.forEach(u=>{n(we.util.updateQueryData("getImageDTO",u,d=>{d.board_id=void 0}))});const a=[{categories:Jr},{categories:Ll}],l=s.map(u=>({id:u,changes:{board_id:void 0}}));a.forEach(u=>{n(we.util.updateQueryData("listImages",u,d=>{Cn.updateMany(d,l)}))})}catch{}}}),deleteBoardAndImages:e.mutation({query:t=>({url:`boards/${t}`,method:"DELETE",params:{include_images:!0}}),invalidatesTags:(t,n,r)=>[{type:"Board",id:tt},{type:"ImageList",id:Jo({board_id:"none",categories:Jr})},{type:"ImageList",id:Jo({board_id:"none",categories:Ll})},{type:"BoardImagesTotal",id:"none"},{type:"BoardAssetsTotal",id:"none"}],async onQueryStarted(t,{dispatch:n,queryFulfilled:r,getState:i}){try{const{data:o}=await r,{deleted_images:s}=o;[{categories:Jr},{categories:Ll}].forEach(l=>{n(we.util.updateQueryData("listImages",l,u=>{Cn.removeMany(u,s)}))})}catch{}}}),addImageToBoard:e.mutation({query:({board_id:t,imageDTO:n})=>{const{image_name:r}=n;return{url:"board_images/",method:"POST",body:{board_id:t,image_name:r}}},invalidatesTags:(t,n,{board_id:r,imageDTO:i})=>[{type:"Board",id:r},{type:"BoardImagesTotal",id:r},{type:"BoardAssetsTotal",id:r},{type:"BoardImagesTotal",id:i.board_id??"none"},{type:"BoardAssetsTotal",id:i.board_id??"none"}],async onQueryStarted({board_id:t,imageDTO:n},{dispatch:r,queryFulfilled:i,getState:o}){const s=[],a=ml(n);if(s.push(r(we.util.updateQueryData("getImageDTO",n.image_name,l=>{l.board_id=t}))),!n.is_intermediate){s.push(r(we.util.updateQueryData("listImages",{board_id:n.board_id??"none",categories:a},g=>{Cn.removeOne(g,n.image_name)})));const l={board_id:t??"none",categories:a},u=we.endpoints.listImages.select(l)(o()),{data:d}=Jr.includes(n.image_category)?Yi.endpoints.getBoardImagesTotal.select(n.board_id??"none")(o()):Yi.endpoints.getBoardAssetsTotal.select(n.board_id??"none")(o()),f=u.data&&u.data.ids.length>=(d??0),h=ip(u.data,n);(f||h)&&s.push(r(we.util.updateQueryData("listImages",l,g=>{Cn.addOne(g,n)})))}try{await i}catch{s.forEach(l=>l.undo())}}}),removeImageFromBoard:e.mutation({query:({imageDTO:t})=>{const{image_name:n}=t;return{url:"board_images/",method:"DELETE",body:{image_name:n}}},invalidatesTags:(t,n,{imageDTO:r})=>{const{board_id:i}=r;return[{type:"Board",id:i??"none"},{type:"BoardImagesTotal",id:i??"none"},{type:"BoardAssetsTotal",id:i??"none"},{type:"BoardImagesTotal",id:"none"},{type:"BoardAssetsTotal",id:"none"}]},async onQueryStarted({imageDTO:t},{dispatch:n,queryFulfilled:r,getState:i}){const o=ml(t),s=[];s.push(n(we.util.updateQueryData("getImageDTO",t.image_name,h=>{h.board_id=void 0}))),s.push(n(we.util.updateQueryData("listImages",{board_id:t.board_id??"none",categories:o},h=>{Cn.removeOne(h,t.image_name)})));const a={board_id:"none",categories:o},l=we.endpoints.listImages.select(a)(i()),{data:u}=Jr.includes(t.image_category)?Yi.endpoints.getBoardImagesTotal.select(t.board_id??"none")(i()):Yi.endpoints.getBoardAssetsTotal.select(t.board_id??"none")(i()),d=l.data&&l.data.ids.length>=(u??0),f=ip(l.data,t);(d||f)&&s.push(n(we.util.updateQueryData("listImages",a,h=>{Cn.upsertOne(h,t)})));try{await r}catch{s.forEach(h=>h.undo())}}}),addImagesToBoard:e.mutation({query:({board_id:t,imageDTOs:n})=>({url:"board_images/batch",method:"POST",body:{image_names:n.map(r=>r.image_name),board_id:t}}),invalidatesTags:(t,n,{imageDTOs:r,board_id:i})=>{var s;const o=(s=r[0])==null?void 0:s.board_id;return[{type:"Board",id:i??"none"},{type:"BoardImagesTotal",id:i??"none"},{type:"BoardAssetsTotal",id:i??"none"},{type:"BoardImagesTotal",id:o??"none"},{type:"BoardAssetsTotal",id:o??"none"},{type:"BoardImagesTotal",id:"none"},{type:"BoardAssetsTotal",id:"none"}]},async onQueryStarted({board_id:t,imageDTOs:n},{dispatch:r,queryFulfilled:i,getState:o}){try{const{data:s}=await i,{added_image_names:a}=s;a.forEach(l=>{r(we.util.updateQueryData("getImageDTO",l,_=>{_.board_id=t}));const u=n.find(_=>_.image_name===l);if(!u)return;const d=ml(u),f=u.board_id;r(we.util.updateQueryData("listImages",{board_id:f??"none",categories:d},_=>{Cn.removeOne(_,u.image_name)}));const h={board_id:t,categories:d},g=we.endpoints.listImages.select(h)(o()),{data:m}=Jr.includes(u.image_category)?Yi.endpoints.getBoardImagesTotal.select(t??"none")(o()):Yi.endpoints.getBoardAssetsTotal.select(t??"none")(o()),v=g.data&&g.data.ids.length>=(m??0),x=(m||0)>=tR?ip(g.data,u):!0;(v||x)&&r(we.util.updateQueryData("listImages",h,_=>{Cn.upsertOne(_,{...u,board_id:t})}))})}catch{}}}),removeImagesFromBoard:e.mutation({query:({imageDTOs:t})=>({url:"board_images/batch/delete",method:"POST",body:{image_names:t.map(n=>n.image_name)}}),invalidatesTags:(t,n,{imageDTOs:r})=>{const i=[],o=[{type:"BoardImagesTotal",id:"none"},{type:"BoardAssetsTotal",id:"none"}];return t==null||t.removed_image_names.forEach(s=>{var l;const a=(l=r.find(u=>u.image_name===s))==null?void 0:l.board_id;!a||i.includes(a)||(o.push({type:"Board",id:a}),o.push({type:"BoardImagesTotal",id:a}),o.push({type:"BoardAssetsTotal",id:a}))}),o},async onQueryStarted({imageDTOs:t},{dispatch:n,queryFulfilled:r,getState:i}){try{const{data:o}=await r,{removed_image_names:s}=o;s.forEach(a=>{n(we.util.updateQueryData("getImageDTO",a,v=>{v.board_id=void 0}));const l=t.find(v=>v.image_name===a);if(!l)return;const u=ml(l);n(we.util.updateQueryData("listImages",{board_id:l.board_id??"none",categories:u},v=>{Cn.removeOne(v,l.image_name)}));const d={board_id:"none",categories:u},f=we.endpoints.listImages.select(d)(i()),{data:h}=Jr.includes(l.image_category)?Yi.endpoints.getBoardImagesTotal.select(l.board_id??"none")(i()):Yi.endpoints.getBoardAssetsTotal.select(l.board_id??"none")(i()),g=f.data&&f.data.ids.length>=(h??0),m=(h||0)>=tR?ip(f.data,l):!0;(g||m)&&n(we.util.updateQueryData("listImages",d,v=>{Cn.upsertOne(v,{...l,board_id:"none"})}))})}catch{}}})})}),{useGetIntermediatesCountQuery:fIe,useListImagesQuery:hIe,useLazyListImagesQuery:pIe,useGetImageDTOQuery:gIe,useGetImageMetadataQuery:mIe,useDeleteImageMutation:yIe,useDeleteImagesMutation:vIe,useUploadImageMutation:_Ie,useClearIntermediatesMutation:bIe,useAddImagesToBoardMutation:SIe,useRemoveImagesFromBoardMutation:wIe,useAddImageToBoardMutation:xIe,useRemoveImageFromBoardMutation:CIe,useChangeImageIsIntermediateMutation:TIe,useChangeImageSessionIdMutation:EIe,useDeleteBoardAndImagesMutation:AIe,useDeleteBoardMutation:PIe}=we,aF=Me("socket/socketConnected"),lF=Me("socket/appSocketConnected"),uF=Me("socket/socketDisconnected"),cF=Me("socket/appSocketDisconnected"),YT=Me("socket/socketSubscribed"),dF=Me("socket/appSocketSubscribed"),fF=Me("socket/socketUnsubscribed"),hF=Me("socket/appSocketUnsubscribed"),pF=Me("socket/socketInvocationStarted"),gF=Me("socket/appSocketInvocationStarted"),QT=Me("socket/socketInvocationComplete"),mF=Me("socket/appSocketInvocationComplete"),yF=Me("socket/socketInvocationError"),ZT=Me("socket/appSocketInvocationError"),vF=Me("socket/socketGraphExecutionStateComplete"),_F=Me("socket/appSocketGraphExecutionStateComplete"),bF=Me("socket/socketGeneratorProgress"),SF=Me("socket/appSocketGeneratorProgress"),wF=Me("socket/socketModelLoadStarted"),gfe=Me("socket/appSocketModelLoadStarted"),xF=Me("socket/socketModelLoadCompleted"),mfe=Me("socket/appSocketModelLoadCompleted"),CF=Me("socket/socketSessionRetrievalError"),TF=Me("socket/appSocketSessionRetrievalError"),EF=Me("socket/socketInvocationRetrievalError"),AF=Me("socket/appSocketInvocationRetrievalError"),JT=Me("controlNet/imageProcessed"),kd={none:{type:"none",label:"none",description:"",default:{type:"none"}},canny_image_processor:{type:"canny_image_processor",label:"Canny",description:"",default:{id:"canny_image_processor",type:"canny_image_processor",low_threshold:100,high_threshold:200}},content_shuffle_image_processor:{type:"content_shuffle_image_processor",label:"Content Shuffle",description:"",default:{id:"content_shuffle_image_processor",type:"content_shuffle_image_processor",detect_resolution:512,image_resolution:512,h:512,w:512,f:256}},hed_image_processor:{type:"hed_image_processor",label:"HED",description:"",default:{id:"hed_image_processor",type:"hed_image_processor",detect_resolution:512,image_resolution:512,scribble:!1}},lineart_anime_image_processor:{type:"lineart_anime_image_processor",label:"Lineart Anime",description:"",default:{id:"lineart_anime_image_processor",type:"lineart_anime_image_processor",detect_resolution:512,image_resolution:512}},lineart_image_processor:{type:"lineart_image_processor",label:"Lineart",description:"",default:{id:"lineart_image_processor",type:"lineart_image_processor",detect_resolution:512,image_resolution:512,coarse:!1}},mediapipe_face_processor:{type:"mediapipe_face_processor",label:"Mediapipe Face",description:"",default:{id:"mediapipe_face_processor",type:"mediapipe_face_processor",max_faces:1,min_confidence:.5}},midas_depth_image_processor:{type:"midas_depth_image_processor",label:"Depth (Midas)",description:"",default:{id:"midas_depth_image_processor",type:"midas_depth_image_processor",a_mult:2,bg_th:.1}},mlsd_image_processor:{type:"mlsd_image_processor",label:"M-LSD",description:"",default:{id:"mlsd_image_processor",type:"mlsd_image_processor",detect_resolution:512,image_resolution:512,thr_d:.1,thr_v:.1}},normalbae_image_processor:{type:"normalbae_image_processor",label:"Normal BAE",description:"",default:{id:"normalbae_image_processor",type:"normalbae_image_processor",detect_resolution:512,image_resolution:512}},openpose_image_processor:{type:"openpose_image_processor",label:"Openpose",description:"",default:{id:"openpose_image_processor",type:"openpose_image_processor",detect_resolution:512,image_resolution:512,hand_and_face:!1}},pidi_image_processor:{type:"pidi_image_processor",label:"PIDI",description:"",default:{id:"pidi_image_processor",type:"pidi_image_processor",detect_resolution:512,image_resolution:512,scribble:!1,safe:!1}},zoe_depth_image_processor:{type:"zoe_depth_image_processor",label:"Depth (Zoe)",description:"",default:{id:"zoe_depth_image_processor",type:"zoe_depth_image_processor"}}},M0={canny:"canny_image_processor",mlsd:"mlsd_image_processor",depth:"midas_depth_image_processor",bae:"normalbae_image_processor",lineart:"lineart_image_processor",lineart_anime:"lineart_anime_image_processor",softedge:"hed_image_processor",shuffle:"content_shuffle_image_processor",openpose:"openpose_image_processor",mediapipe:"mediapipe_face_processor"},AR={isEnabled:!0,model:null,weight:1,beginStepPct:0,endStepPct:1,controlMode:"balanced",resizeMode:"just_resize",controlImage:null,processedControlImage:null,processorType:"canny_image_processor",processorNode:kd.canny_image_processor.default,shouldAutoConfig:!0},H3={controlNets:{},isEnabled:!1,pendingControlImages:[]},PF=An({name:"controlNet",initialState:H3,reducers:{isControlNetEnabledToggled:e=>{e.isEnabled=!e.isEnabled},controlNetAdded:(e,t)=>{const{controlNetId:n,controlNet:r}=t.payload;e.controlNets[n]={...r??AR,controlNetId:n}},controlNetDuplicated:(e,t)=>{const{sourceControlNetId:n,newControlNetId:r}=t.payload,i=e.controlNets[n];if(!i)return;const o=Qr(i);o.controlNetId=r,e.controlNets[r]=o},controlNetAddedFromImage:(e,t)=>{const{controlNetId:n,controlImage:r}=t.payload;e.controlNets[n]={...AR,controlNetId:n,controlImage:r}},controlNetRemoved:(e,t)=>{const{controlNetId:n}=t.payload;delete e.controlNets[n]},controlNetToggled:(e,t)=>{const{controlNetId:n}=t.payload,r=e.controlNets[n];r&&(r.isEnabled=!r.isEnabled)},controlNetImageChanged:(e,t)=>{const{controlNetId:n,controlImage:r}=t.payload,i=e.controlNets[n];i&&(i.controlImage=r,i.processedControlImage=null,r!==null&&i.processorType!=="none"&&e.pendingControlImages.push(n))},controlNetProcessedImageChanged:(e,t)=>{const{controlNetId:n,processedControlImage:r}=t.payload,i=e.controlNets[n];i&&(i.processedControlImage=r,e.pendingControlImages=e.pendingControlImages.filter(o=>o!==n))},controlNetModelChanged:(e,t)=>{const{controlNetId:n,model:r}=t.payload,i=e.controlNets[n];if(i&&(i.model=r,i.processedControlImage=null,i.shouldAutoConfig)){let o;for(const s in M0)if(r.model_name.includes(s)){o=M0[s];break}o?(i.processorType=o,i.processorNode=kd[o].default):(i.processorType="none",i.processorNode=kd.none.default)}},controlNetWeightChanged:(e,t)=>{const{controlNetId:n,weight:r}=t.payload,i=e.controlNets[n];i&&(i.weight=r)},controlNetBeginStepPctChanged:(e,t)=>{const{controlNetId:n,beginStepPct:r}=t.payload,i=e.controlNets[n];i&&(i.beginStepPct=r)},controlNetEndStepPctChanged:(e,t)=>{const{controlNetId:n,endStepPct:r}=t.payload,i=e.controlNets[n];i&&(i.endStepPct=r)},controlNetControlModeChanged:(e,t)=>{const{controlNetId:n,controlMode:r}=t.payload,i=e.controlNets[n];i&&(i.controlMode=r)},controlNetResizeModeChanged:(e,t)=>{const{controlNetId:n,resizeMode:r}=t.payload,i=e.controlNets[n];i&&(i.resizeMode=r)},controlNetProcessorParamsChanged:(e,t)=>{const{controlNetId:n,changes:r}=t.payload,i=e.controlNets[n];if(!i)return;const o=i.processorNode;i.processorNode={...o,...r},i.shouldAutoConfig=!1},controlNetProcessorTypeChanged:(e,t)=>{const{controlNetId:n,processorType:r}=t.payload,i=e.controlNets[n];i&&(i.processedControlImage=null,i.processorType=r,i.processorNode=kd[r].default,i.shouldAutoConfig=!1)},controlNetAutoConfigToggled:(e,t)=>{var o;const{controlNetId:n}=t.payload,r=e.controlNets[n];if(!r)return;const i=!r.shouldAutoConfig;if(i){let s;for(const a in M0)if((o=r.model)!=null&&o.model_name.includes(a)){s=M0[a];break}s?(r.processorType=s,r.processorNode=kd[s].default):(r.processorType="none",r.processorNode=kd.none.default)}r.shouldAutoConfig=i},controlNetReset:()=>({...H3})},extraReducers:e=>{e.addCase(JT,(t,n)=>{const r=t.controlNets[n.payload.controlNetId];r&&r.controlImage!==null&&t.pendingControlImages.push(n.payload.controlNetId)}),e.addCase(ZT,t=>{t.pendingControlImages=[]}),e.addMatcher(S$,t=>{t.pendingControlImages=[]}),e.addMatcher(we.endpoints.deleteImage.matchFulfilled,(t,n)=>{const{image_name:r}=n.meta.arg.originalArgs;gc(t.controlNets,i=>{i.controlImage===r&&(i.controlImage=null,i.processedControlImage=null),i.processedControlImage===r&&(i.processedControlImage=null)})})}}),{isControlNetEnabledToggled:RIe,controlNetAdded:OIe,controlNetDuplicated:kIe,controlNetAddedFromImage:IIe,controlNetRemoved:RF,controlNetImageChanged:eE,controlNetProcessedImageChanged:yfe,controlNetToggled:MIe,controlNetModelChanged:PR,controlNetWeightChanged:NIe,controlNetBeginStepPctChanged:LIe,controlNetEndStepPctChanged:DIe,controlNetControlModeChanged:$Ie,controlNetResizeModeChanged:FIe,controlNetProcessorParamsChanged:vfe,controlNetProcessorTypeChanged:_fe,controlNetReset:tE,controlNetAutoConfigToggled:RR}=PF.actions,bfe=PF.reducer,OF={isEnabled:!1,maxPrompts:100,combinatorial:!0},Sfe=OF,kF=An({name:"dynamicPrompts",initialState:Sfe,reducers:{maxPromptsChanged:(e,t)=>{e.maxPrompts=t.payload},maxPromptsReset:e=>{e.maxPrompts=OF.maxPrompts},combinatorialToggled:e=>{e.combinatorial=!e.combinatorial},isEnabledToggled:e=>{e.isEnabled=!e.isEnabled}}}),{isEnabledToggled:BIe,maxPromptsChanged:UIe,maxPromptsReset:zIe,combinatorialToggled:VIe}=kF.actions,wfe=kF.reducer,IF={selection:[],shouldAutoSwitch:!0,autoAssignBoardOnClick:!0,autoAddBoardId:"none",galleryImageMinimumWidth:96,selectedBoardId:"none",galleryView:"images",shouldShowDeleteButton:!1,boardSearchText:""},MF=An({name:"gallery",initialState:IF,reducers:{imageSelected:(e,t)=>{e.selection=t.payload?[t.payload]:[]},selectionChanged:(e,t)=>{e.selection=t.payload},shouldAutoSwitchChanged:(e,t)=>{e.shouldAutoSwitch=t.payload},setGalleryImageMinimumWidth:(e,t)=>{e.galleryImageMinimumWidth=t.payload},autoAssignBoardOnClickChanged:(e,t)=>{e.autoAssignBoardOnClick=t.payload},boardIdSelected:(e,t)=>{e.selectedBoardId=t.payload,e.galleryView="images"},autoAddBoardIdChanged:(e,t)=>{if(!t.payload){e.autoAddBoardId="none";return}e.autoAddBoardId=t.payload},galleryViewChanged:(e,t)=>{e.galleryView=t.payload},shouldShowDeleteButtonChanged:(e,t)=>{e.shouldShowDeleteButton=t.payload},boardSearchTextChanged:(e,t)=>{e.boardSearchText=t.payload}},extraReducers:e=>{e.addMatcher(Cfe,(t,n)=>{const r=n.meta.arg.originalArgs;r===t.selectedBoardId&&(t.selectedBoardId="none",t.galleryView="images"),r===t.autoAddBoardId&&(t.autoAddBoardId="none")}),e.addMatcher(Yi.endpoints.listAllBoards.matchFulfilled,(t,n)=>{const r=n.payload;t.autoAddBoardId&&(r.map(i=>i.board_id).includes(t.autoAddBoardId)||(t.autoAddBoardId="none"))})}}),{imageSelected:Gs,shouldAutoSwitchChanged:jIe,autoAssignBoardOnClickChanged:GIe,setGalleryImageMinimumWidth:HIe,boardIdSelected:W3,autoAddBoardIdChanged:WIe,galleryViewChanged:G1,selectionChanged:qIe,shouldShowDeleteButtonChanged:KIe,boardSearchTextChanged:XIe}=MF.actions,xfe=MF.reducer,Cfe=Lo(we.endpoints.deleteBoard.matchFulfilled,we.endpoints.deleteBoardAndImages.matchFulfilled),Tfe={imagesToDelete:[],isModalOpen:!1},NF=An({name:"deleteImageModal",initialState:Tfe,reducers:{isModalOpenChanged:(e,t)=>{e.isModalOpen=t.payload},imagesToDeleteSelected:(e,t)=>{e.imagesToDelete=t.payload},imageDeletionCanceled:e=>{e.imagesToDelete=[],e.isModalOpen=!1}}}),{isModalOpenChanged:nE,imagesToDeleteSelected:Efe,imageDeletionCanceled:YIe}=NF.actions,Afe=NF.reducer,Pfe={isModalOpen:!1,imagesToChange:[]},LF=An({name:"changeBoardModal",initialState:Pfe,reducers:{isModalOpenChanged:(e,t)=>{e.isModalOpen=t.payload},imagesToChangeSelected:(e,t)=>{e.imagesToChange=t.payload},changeBoardReset:e=>{e.imagesToChange=[],e.isModalOpen=!1}}}),{isModalOpenChanged:QIe,imagesToChangeSelected:ZIe,changeBoardReset:JIe}=LF.actions,Rfe=LF.reducer,OR={weight:.75},Ofe={loras:{}},DF=An({name:"lora",initialState:Ofe,reducers:{loraAdded:(e,t)=>{const{model_name:n,id:r,base_model:i}=t.payload;e.loras[r]={id:r,model_name:n,base_model:i,...OR}},loraRemoved:(e,t)=>{const n=t.payload;delete e.loras[n]},lorasCleared:e=>{e.loras={}},loraWeightChanged:(e,t)=>{const{id:n,weight:r}=t.payload,i=e.loras[n];i&&(i.weight=r)},loraWeightReset:(e,t)=>{const n=t.payload,r=e.loras[n];r&&(r.weight=OR.weight)}}}),{loraAdded:e7e,loraRemoved:$F,loraWeightChanged:t7e,loraWeightReset:n7e,lorasCleared:r7e}=DF.actions,kfe=DF.reducer;function $o(e){if(typeof e=="string"||typeof e=="number")return""+e;let t="";if(Array.isArray(e))for(let n=0,r;n{let t;const n=new Set,r=(l,u)=>{const d=typeof l=="function"?l(t):l;if(!Object.is(d,t)){const f=t;t=u??typeof d!="object"?d:Object.assign({},t,d),n.forEach(h=>h(t,f))}},i=()=>t,a={setState:r,getState:i,subscribe:l=>(n.add(l),()=>n.delete(l)),destroy:()=>{n.clear()}};return t=e(r,i,a),a},Ife=e=>e?kR(e):kR,{useSyncExternalStoreWithSelector:Mfe}=gde;function Nfe(e,t=e.getState,n){const r=Mfe(e.subscribe,e.getState,e.getServerState||e.getState,t,n);return L.useDebugValue(r),r}function Bi(e,t){if(Object.is(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;if(e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(const[r,i]of e)if(!Object.is(i,t.get(r)))return!1;return!0}if(e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(const r of e)if(!t.has(r))return!1;return!0}const n=Object.keys(e);if(n.length!==Object.keys(t).length)return!1;for(let r=0;r{}};function zb(){for(var e=0,t=arguments.length,n={},r;e=0&&(r=n.slice(i+1),n=n.slice(0,i)),n&&!t.hasOwnProperty(n))throw new Error("unknown type: "+n);return{type:n,name:r}})}Ev.prototype=zb.prototype={constructor:Ev,on:function(e,t){var n=this._,r=Dfe(e+"",n),i,o=-1,s=r.length;if(arguments.length<2){for(;++o0)for(var n=new Array(i),r=0,i,o;r=0&&(t=e.slice(0,n))!=="xmlns"&&(e=e.slice(n+1)),MR.hasOwnProperty(t)?{space:MR[t],local:e}:e}function Ffe(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===q3&&t.documentElement.namespaceURI===q3?t.createElement(e):t.createElementNS(n,e)}}function Bfe(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function FF(e){var t=Vb(e);return(t.local?Bfe:Ffe)(t)}function Ufe(){}function rE(e){return e==null?Ufe:function(){return this.querySelector(e)}}function zfe(e){typeof e!="function"&&(e=rE(e));for(var t=this._groups,n=t.length,r=new Array(n),i=0;i=y&&(y=b+1);!(C=x[y])&&++y=0;)(s=r[i])&&(o&&s.compareDocumentPosition(o)^4&&o.parentNode.insertBefore(s,o),o=s);return this}function fhe(e){e||(e=hhe);function t(f,h){return f&&h?e(f.__data__,h.__data__):!f-!h}for(var n=this._groups,r=n.length,i=new Array(r),o=0;ot?1:e>=t?0:NaN}function phe(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function ghe(){return Array.from(this)}function mhe(){for(var e=this._groups,t=0,n=e.length;t1?this.each((t==null?Ahe:typeof t=="function"?Rhe:Phe)(e,t,n??"")):Ff(this.node(),e)}function Ff(e,t){return e.style.getPropertyValue(t)||jF(e).getComputedStyle(e,null).getPropertyValue(t)}function khe(e){return function(){delete this[e]}}function Ihe(e,t){return function(){this[e]=t}}function Mhe(e,t){return function(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function Nhe(e,t){return arguments.length>1?this.each((t==null?khe:typeof t=="function"?Mhe:Ihe)(e,t)):this.node()[e]}function GF(e){return e.trim().split(/^|\s+/)}function iE(e){return e.classList||new HF(e)}function HF(e){this._node=e,this._names=GF(e.getAttribute("class")||"")}HF.prototype={add:function(e){var t=this._names.indexOf(e);t<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function WF(e,t){for(var n=iE(e),r=-1,i=t.length;++r=0&&(n=t.slice(r+1),t=t.slice(0,r)),{type:t,name:n}})}function lpe(e){return function(){var t=this.__on;if(t){for(var n=0,r=-1,i=t.length,o;n()=>e;function K3(e,{sourceEvent:t,subject:n,target:r,identifier:i,active:o,x:s,y:a,dx:l,dy:u,dispatch:d}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},subject:{value:n,enumerable:!0,configurable:!0},target:{value:r,enumerable:!0,configurable:!0},identifier:{value:i,enumerable:!0,configurable:!0},active:{value:o,enumerable:!0,configurable:!0},x:{value:s,enumerable:!0,configurable:!0},y:{value:a,enumerable:!0,configurable:!0},dx:{value:l,enumerable:!0,configurable:!0},dy:{value:u,enumerable:!0,configurable:!0},_:{value:d}})}K3.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function vpe(e){return!e.ctrlKey&&!e.button}function _pe(){return this.parentNode}function bpe(e,t){return t??{x:e.x,y:e.y}}function Spe(){return navigator.maxTouchPoints||"ontouchstart"in this}function wpe(){var e=vpe,t=_pe,n=bpe,r=Spe,i={},o=zb("start","drag","end"),s=0,a,l,u,d,f=0;function h(S){S.on("mousedown.drag",g).filter(r).on("touchstart.drag",x).on("touchmove.drag",_,ype).on("touchend.drag touchcancel.drag",b).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function g(S,C){if(!(d||!e.call(this,S,C))){var T=y(this,t.call(this,S,C),S,C,"mouse");T&&(rs(S.view).on("mousemove.drag",m,Ug).on("mouseup.drag",v,Ug),YF(S.view),Ax(S),u=!1,a=S.clientX,l=S.clientY,T("start",S))}}function m(S){if(hf(S),!u){var C=S.clientX-a,T=S.clientY-l;u=C*C+T*T>f}i.mouse("drag",S)}function v(S){rs(S.view).on("mousemove.drag mouseup.drag",null),QF(S.view,u),hf(S),i.mouse("end",S)}function x(S,C){if(e.call(this,S,C)){var T=S.changedTouches,E=t.call(this,S,C),P=T.length,k,O;for(k=0;k>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?L0(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?L0(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=Cpe.exec(e))?new Mi(t[1],t[2],t[3],1):(t=Tpe.exec(e))?new Mi(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=Epe.exec(e))?L0(t[1],t[2],t[3],t[4]):(t=Ape.exec(e))?L0(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=Ppe.exec(e))?UR(t[1],t[2]/100,t[3]/100,1):(t=Rpe.exec(e))?UR(t[1],t[2]/100,t[3]/100,t[4]):NR.hasOwnProperty(e)?$R(NR[e]):e==="transparent"?new Mi(NaN,NaN,NaN,0):null}function $R(e){return new Mi(e>>16&255,e>>8&255,e&255,1)}function L0(e,t,n,r){return r<=0&&(e=t=n=NaN),new Mi(e,t,n,r)}function Ipe(e){return e instanceof Mm||(e=jg(e)),e?(e=e.rgb(),new Mi(e.r,e.g,e.b,e.opacity)):new Mi}function X3(e,t,n,r){return arguments.length===1?Ipe(e):new Mi(e,t,n,r??1)}function Mi(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}oE(Mi,X3,ZF(Mm,{brighter(e){return e=e==null?W1:Math.pow(W1,e),new Mi(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?zg:Math.pow(zg,e),new Mi(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new Mi(oc(this.r),oc(this.g),oc(this.b),q1(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:FR,formatHex:FR,formatHex8:Mpe,formatRgb:BR,toString:BR}));function FR(){return`#${Zu(this.r)}${Zu(this.g)}${Zu(this.b)}`}function Mpe(){return`#${Zu(this.r)}${Zu(this.g)}${Zu(this.b)}${Zu((isNaN(this.opacity)?1:this.opacity)*255)}`}function BR(){const e=q1(this.opacity);return`${e===1?"rgb(":"rgba("}${oc(this.r)}, ${oc(this.g)}, ${oc(this.b)}${e===1?")":`, ${e})`}`}function q1(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function oc(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Zu(e){return e=oc(e),(e<16?"0":"")+e.toString(16)}function UR(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new is(e,t,n,r)}function JF(e){if(e instanceof is)return new is(e.h,e.s,e.l,e.opacity);if(e instanceof Mm||(e=jg(e)),!e)return new is;if(e instanceof is)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),o=Math.max(t,n,r),s=NaN,a=o-i,l=(o+i)/2;return a?(t===o?s=(n-r)/a+(n0&&l<1?0:s,new is(s,a,l,e.opacity)}function Npe(e,t,n,r){return arguments.length===1?JF(e):new is(e,t,n,r??1)}function is(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}oE(is,Npe,ZF(Mm,{brighter(e){return e=e==null?W1:Math.pow(W1,e),new is(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?zg:Math.pow(zg,e),new is(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new Mi(Px(e>=240?e-240:e+120,i,r),Px(e,i,r),Px(e<120?e+240:e-120,i,r),this.opacity)},clamp(){return new is(zR(this.h),D0(this.s),D0(this.l),q1(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=q1(this.opacity);return`${e===1?"hsl(":"hsla("}${zR(this.h)}, ${D0(this.s)*100}%, ${D0(this.l)*100}%${e===1?")":`, ${e})`}`}}));function zR(e){return e=(e||0)%360,e<0?e+360:e}function D0(e){return Math.max(0,Math.min(1,e||0))}function Px(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}const eB=e=>()=>e;function Lpe(e,t){return function(n){return e+n*t}}function Dpe(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}function $pe(e){return(e=+e)==1?tB:function(t,n){return n-t?Dpe(t,n,e):eB(isNaN(t)?n:t)}}function tB(e,t){var n=t-e;return n?Lpe(e,n):eB(isNaN(e)?t:e)}const VR=function e(t){var n=$pe(t);function r(i,o){var s=n((i=X3(i)).r,(o=X3(o)).r),a=n(i.g,o.g),l=n(i.b,o.b),u=tB(i.opacity,o.opacity);return function(d){return i.r=s(d),i.g=a(d),i.b=l(d),i.opacity=u(d),i+""}}return r.gamma=e,r}(1);function xl(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}var Y3=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Rx=new RegExp(Y3.source,"g");function Fpe(e){return function(){return e}}function Bpe(e){return function(t){return e(t)+""}}function Upe(e,t){var n=Y3.lastIndex=Rx.lastIndex=0,r,i,o,s=-1,a=[],l=[];for(e=e+"",t=t+"";(r=Y3.exec(e))&&(i=Rx.exec(t));)(o=i.index)>n&&(o=t.slice(n,o),a[s]?a[s]+=o:a[++s]=o),(r=r[0])===(i=i[0])?a[s]?a[s]+=i:a[++s]=i:(a[++s]=null,l.push({i:s,x:xl(r,i)})),n=Rx.lastIndex;return n180?d+=360:d-u>180&&(u+=360),h.push({i:f.push(i(f)+"rotate(",null,r)-2,x:xl(u,d)})):d&&f.push(i(f)+"rotate("+d+r)}function a(u,d,f,h){u!==d?h.push({i:f.push(i(f)+"skewX(",null,r)-2,x:xl(u,d)}):d&&f.push(i(f)+"skewX("+d+r)}function l(u,d,f,h,g,m){if(u!==f||d!==h){var v=g.push(i(g)+"scale(",null,",",null,")");m.push({i:v-4,x:xl(u,f)},{i:v-2,x:xl(d,h)})}else(f!==1||h!==1)&&g.push(i(g)+"scale("+f+","+h+")")}return function(u,d){var f=[],h=[];return u=e(u),d=e(d),o(u.translateX,u.translateY,d.translateX,d.translateY,f,h),s(u.rotate,d.rotate,f,h),a(u.skewX,d.skewX,f,h),l(u.scaleX,u.scaleY,d.scaleX,d.scaleY,f,h),u=d=null,function(g){for(var m=-1,v=h.length,x;++m=0&&e._call.call(void 0,t),e=e._next;--Bf}function HR(){_c=(X1=Gg.now())+jb,Bf=Ep=0;try{Ype()}finally{Bf=0,Zpe(),_c=0}}function Qpe(){var e=Gg.now(),t=e-X1;t>iB&&(jb-=t,X1=e)}function Zpe(){for(var e,t=K1,n,r=1/0;t;)t._call?(r>t._time&&(r=t._time),e=t,t=t._next):(n=t._next,t._next=null,t=e?e._next=n:K1=n);Ap=e,Z3(r)}function Z3(e){if(!Bf){Ep&&(Ep=clearTimeout(Ep));var t=e-_c;t>24?(e<1/0&&(Ep=setTimeout(HR,e-Gg.now()-jb)),op&&(op=clearInterval(op))):(op||(X1=Gg.now(),op=setInterval(Qpe,iB)),Bf=1,oB(HR))}}function WR(e,t,n){var r=new Y1;return t=t==null?0:+t,r.restart(i=>{r.stop(),e(i+t)},t,n),r}var Jpe=zb("start","end","cancel","interrupt"),ege=[],aB=0,qR=1,J3=2,Av=3,KR=4,e5=5,Pv=6;function Gb(e,t,n,r,i,o){var s=e.__transition;if(!s)e.__transition={};else if(n in s)return;tge(e,n,{name:t,index:r,group:i,on:Jpe,tween:ege,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:aB})}function aE(e,t){var n=vs(e,t);if(n.state>aB)throw new Error("too late; already scheduled");return n}function ea(e,t){var n=vs(e,t);if(n.state>Av)throw new Error("too late; already running");return n}function vs(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function tge(e,t,n){var r=e.__transition,i;r[t]=n,n.timer=sB(o,0,n.time);function o(u){n.state=qR,n.timer.restart(s,n.delay,n.time),n.delay<=u&&s(u-n.delay)}function s(u){var d,f,h,g;if(n.state!==qR)return l();for(d in r)if(g=r[d],g.name===n.name){if(g.state===Av)return WR(s);g.state===KR?(g.state=Pv,g.timer.stop(),g.on.call("interrupt",e,e.__data__,g.index,g.group),delete r[d]):+dJ3&&r.state=0&&(t=t.slice(0,n)),!t||t==="start"})}function kge(e,t,n){var r,i,o=Oge(t)?aE:ea;return function(){var s=o(this,e),a=s.on;a!==r&&(i=(r=a).copy()).on(t,n),s.on=i}}function Ige(e,t){var n=this._id;return arguments.length<2?vs(this.node(),n).on.on(e):this.each(kge(n,e,t))}function Mge(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}function Nge(){return this.on("end.remove",Mge(this._id))}function Lge(e){var t=this._name,n=this._id;typeof e!="function"&&(e=rE(e));for(var r=this._groups,i=r.length,o=new Array(i),s=0;s()=>e;function sme(e,{sourceEvent:t,target:n,transform:r,dispatch:i}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},transform:{value:r,enumerable:!0,configurable:!0},_:{value:i}})}function Oa(e,t,n){this.k=e,this.x=t,this.y=n}Oa.prototype={constructor:Oa,scale:function(e){return e===1?this:new Oa(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new Oa(this.k,this.x+this.k*e,this.y+this.k*t)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var Hl=new Oa(1,0,0);Oa.prototype;function Ox(e){e.stopImmediatePropagation()}function sp(e){e.preventDefault(),e.stopImmediatePropagation()}function ame(e){return(!e.ctrlKey||e.type==="wheel")&&!e.button}function lme(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,e.hasAttribute("viewBox")?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]):[[0,0],[e.clientWidth,e.clientHeight]]}function XR(){return this.__zoom||Hl}function ume(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function cme(){return navigator.maxTouchPoints||"ontouchstart"in this}function dme(e,t,n){var r=e.invertX(t[0][0])-n[0][0],i=e.invertX(t[1][0])-n[1][0],o=e.invertY(t[0][1])-n[0][1],s=e.invertY(t[1][1])-n[1][1];return e.translate(i>r?(r+i)/2:Math.min(0,r)||Math.max(0,i),s>o?(o+s)/2:Math.min(0,o)||Math.max(0,s))}function fme(){var e=ame,t=lme,n=dme,r=ume,i=cme,o=[0,1/0],s=[[-1/0,-1/0],[1/0,1/0]],a=250,l=Kpe,u=zb("start","zoom","end"),d,f,h,g=500,m=150,v=0,x=10;function _(A){A.property("__zoom",XR).on("wheel.zoom",P,{passive:!1}).on("mousedown.zoom",k).on("dblclick.zoom",O).filter(i).on("touchstart.zoom",M).on("touchmove.zoom",V).on("touchend.zoom touchcancel.zoom",B).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}_.transform=function(A,N,D,U){var $=A.selection?A.selection():A;$.property("__zoom",XR),A!==$?C(A,N,D,U):$.interrupt().each(function(){T(this,arguments).event(U).start().zoom(null,typeof N=="function"?N.apply(this,arguments):N).end()})},_.scaleBy=function(A,N,D,U){_.scaleTo(A,function(){var $=this.__zoom.k,j=typeof N=="function"?N.apply(this,arguments):N;return $*j},D,U)},_.scaleTo=function(A,N,D,U){_.transform(A,function(){var $=t.apply(this,arguments),j=this.__zoom,G=D==null?S($):typeof D=="function"?D.apply(this,arguments):D,q=j.invert(G),Z=typeof N=="function"?N.apply(this,arguments):N;return n(y(b(j,Z),G,q),$,s)},D,U)},_.translateBy=function(A,N,D,U){_.transform(A,function(){return n(this.__zoom.translate(typeof N=="function"?N.apply(this,arguments):N,typeof D=="function"?D.apply(this,arguments):D),t.apply(this,arguments),s)},null,U)},_.translateTo=function(A,N,D,U,$){_.transform(A,function(){var j=t.apply(this,arguments),G=this.__zoom,q=U==null?S(j):typeof U=="function"?U.apply(this,arguments):U;return n(Hl.translate(q[0],q[1]).scale(G.k).translate(typeof N=="function"?-N.apply(this,arguments):-N,typeof D=="function"?-D.apply(this,arguments):-D),j,s)},U,$)};function b(A,N){return N=Math.max(o[0],Math.min(o[1],N)),N===A.k?A:new Oa(N,A.x,A.y)}function y(A,N,D){var U=N[0]-D[0]*A.k,$=N[1]-D[1]*A.k;return U===A.x&&$===A.y?A:new Oa(A.k,U,$)}function S(A){return[(+A[0][0]+ +A[1][0])/2,(+A[0][1]+ +A[1][1])/2]}function C(A,N,D,U){A.on("start.zoom",function(){T(this,arguments).event(U).start()}).on("interrupt.zoom end.zoom",function(){T(this,arguments).event(U).end()}).tween("zoom",function(){var $=this,j=arguments,G=T($,j).event(U),q=t.apply($,j),Z=D==null?S(q):typeof D=="function"?D.apply($,j):D,ee=Math.max(q[1][0]-q[0][0],q[1][1]-q[0][1]),ie=$.__zoom,se=typeof N=="function"?N.apply($,j):N,le=l(ie.invert(Z).concat(ee/ie.k),se.invert(Z).concat(ee/se.k));return function(W){if(W===1)W=se;else{var ne=le(W),fe=ee/ne[2];W=new Oa(fe,Z[0]-ne[0]*fe,Z[1]-ne[1]*fe)}G.zoom(null,W)}})}function T(A,N,D){return!D&&A.__zooming||new E(A,N)}function E(A,N){this.that=A,this.args=N,this.active=0,this.sourceEvent=null,this.extent=t.apply(A,N),this.taps=0}E.prototype={event:function(A){return A&&(this.sourceEvent=A),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(A,N){return this.mouse&&A!=="mouse"&&(this.mouse[1]=N.invert(this.mouse[0])),this.touch0&&A!=="touch"&&(this.touch0[1]=N.invert(this.touch0[0])),this.touch1&&A!=="touch"&&(this.touch1[1]=N.invert(this.touch1[0])),this.that.__zoom=N,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(A){var N=rs(this.that).datum();u.call(A,this.that,new sme(A,{sourceEvent:this.sourceEvent,target:_,type:A,transform:this.that.__zoom,dispatch:u}),N)}};function P(A,...N){if(!e.apply(this,arguments))return;var D=T(this,N).event(A),U=this.__zoom,$=Math.max(o[0],Math.min(o[1],U.k*Math.pow(2,r.apply(this,arguments)))),j=Rs(A);if(D.wheel)(D.mouse[0][0]!==j[0]||D.mouse[0][1]!==j[1])&&(D.mouse[1]=U.invert(D.mouse[0]=j)),clearTimeout(D.wheel);else{if(U.k===$)return;D.mouse=[j,U.invert(j)],Rv(this),D.start()}sp(A),D.wheel=setTimeout(G,m),D.zoom("mouse",n(y(b(U,$),D.mouse[0],D.mouse[1]),D.extent,s));function G(){D.wheel=null,D.end()}}function k(A,...N){if(h||!e.apply(this,arguments))return;var D=A.currentTarget,U=T(this,N,!0).event(A),$=rs(A.view).on("mousemove.zoom",Z,!0).on("mouseup.zoom",ee,!0),j=Rs(A,D),G=A.clientX,q=A.clientY;YF(A.view),Ox(A),U.mouse=[j,this.__zoom.invert(j)],Rv(this),U.start();function Z(ie){if(sp(ie),!U.moved){var se=ie.clientX-G,le=ie.clientY-q;U.moved=se*se+le*le>v}U.event(ie).zoom("mouse",n(y(U.that.__zoom,U.mouse[0]=Rs(ie,D),U.mouse[1]),U.extent,s))}function ee(ie){$.on("mousemove.zoom mouseup.zoom",null),QF(ie.view,U.moved),sp(ie),U.event(ie).end()}}function O(A,...N){if(e.apply(this,arguments)){var D=this.__zoom,U=Rs(A.changedTouches?A.changedTouches[0]:A,this),$=D.invert(U),j=D.k*(A.shiftKey?.5:2),G=n(y(b(D,j),U,$),t.apply(this,N),s);sp(A),a>0?rs(this).transition().duration(a).call(C,G,U,A):rs(this).call(_.transform,G,U,A)}}function M(A,...N){if(e.apply(this,arguments)){var D=A.touches,U=D.length,$=T(this,N,A.changedTouches.length===U).event(A),j,G,q,Z;for(Ox(A),G=0;G"[React Flow]: Seems like you have not used zustand provider as an ancestor. Help: https://reactflow.dev/error#001",error002:()=>"It looks like you've created a new nodeTypes or edgeTypes object. If this wasn't on purpose please define the nodeTypes/edgeTypes outside of the component or memoize them.",error003:e=>`Node type "${e}" not found. Using fallback type "default".`,error004:()=>"The React Flow parent container needs a width and a height to render the graph.",error005:()=>"Only child nodes can use a parent extent.",error006:()=>"Can't create edge. An edge needs a source and a target.",error007:e=>`The old edge with id=${e} does not exist.`,error009:e=>`Marker type "${e}" doesn't exist.`,error008:(e,t)=>`Couldn't create edge for ${e?"target":"source"} handle id: "${e?t.targetHandle:t.sourceHandle}", edge id: ${t.id}.`,error010:()=>"Handle: No node id found. Make sure to only use a Handle inside a custom Node.",error011:e=>`Edge type "${e}" not found. Using fallback type "default".`},dB=ou.error001();function Gn(e,t){const n=L.useContext(Hb);if(n===null)throw new Error(dB);return Nfe(n,e,t)}const ii=()=>{const e=L.useContext(Hb);if(e===null)throw new Error(dB);return L.useMemo(()=>({getState:e.getState,setState:e.setState,subscribe:e.subscribe,destroy:e.destroy}),[e])},pme=e=>e.userSelectionActive?"none":"all";function gme({position:e,children:t,className:n,style:r,...i}){const o=Gn(pme),s=`${e}`.split("-");return ue.jsx("div",{className:$o(["react-flow__panel",n,...s]),style:{...r,pointerEvents:o},...i,children:t})}function mme({proOptions:e,position:t="bottom-right"}){return e!=null&&e.hideAttribution?null:ue.jsx(gme,{position:t,className:"react-flow__attribution","data-message":"Please only hide this attribution when you are subscribed to React Flow Pro: https://pro.reactflow.dev",children:ue.jsx("a",{href:"https://reactflow.dev",target:"_blank",rel:"noopener noreferrer","aria-label":"React Flow attribution",children:"React Flow"})})}const yme=({x:e,y:t,label:n,labelStyle:r={},labelShowBg:i=!0,labelBgStyle:o={},labelBgPadding:s=[2,4],labelBgBorderRadius:a=2,children:l,className:u,...d})=>{const f=L.useRef(null),[h,g]=L.useState({x:0,y:0,width:0,height:0}),m=$o(["react-flow__edge-textwrapper",u]);return L.useEffect(()=>{if(f.current){const v=f.current.getBBox();g({x:v.x,y:v.y,width:v.width,height:v.height})}},[n]),typeof n>"u"||!n?null:ue.jsxs("g",{transform:`translate(${e-h.width/2} ${t-h.height/2})`,className:m,visibility:h.width?"visible":"hidden",...d,children:[i&&ue.jsx("rect",{width:h.width+2*s[0],x:-s[0],y:-s[1],height:h.height+2*s[1],className:"react-flow__edge-textbg",style:o,rx:a,ry:a}),ue.jsx("text",{className:"react-flow__edge-text",y:h.height/2,dy:"0.3em",ref:f,style:r,children:n}),l]})};var vme=L.memo(yme);const uE=e=>({width:e.offsetWidth,height:e.offsetHeight}),Uf=(e,t=0,n=1)=>Math.min(Math.max(e,t),n),cE=(e={x:0,y:0},t)=>({x:Uf(e.x,t[0][0],t[1][0]),y:Uf(e.y,t[0][1],t[1][1])}),YR=(e,t,n)=>en?-Uf(Math.abs(e-n),1,50)/50:0,fB=(e,t)=>{const n=YR(e.x,35,t.width-35)*20,r=YR(e.y,35,t.height-35)*20;return[n,r]},hB=e=>{var t;return((t=e.getRootNode)==null?void 0:t.call(e))||(window==null?void 0:window.document)},pB=(e,t)=>({x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x2,t.x2),y2:Math.max(e.y2,t.y2)}),Q1=({x:e,y:t,width:n,height:r})=>({x:e,y:t,x2:e+n,y2:t+r}),gB=({x:e,y:t,x2:n,y2:r})=>({x:e,y:t,width:n-e,height:r-t}),QR=e=>({...e.positionAbsolute||{x:0,y:0},width:e.width||0,height:e.height||0}),i7e=(e,t)=>gB(pB(Q1(e),Q1(t))),t5=(e,t)=>{const n=Math.max(0,Math.min(e.x+e.width,t.x+t.width)-Math.max(e.x,t.x)),r=Math.max(0,Math.min(e.y+e.height,t.y+t.height)-Math.max(e.y,t.y));return Math.ceil(n*r)},_me=e=>Ro(e.width)&&Ro(e.height)&&Ro(e.x)&&Ro(e.y),Ro=e=>!isNaN(e)&&isFinite(e),pr=Symbol.for("internals"),mB=["Enter"," ","Escape"],bme=(e,t)=>{},Sme=e=>"nativeEvent"in e;function n5(e){var i,o;const t=Sme(e)?e.nativeEvent:e,n=((o=(i=t.composedPath)==null?void 0:i.call(t))==null?void 0:o[0])||e.target;return["INPUT","SELECT","TEXTAREA"].includes(n==null?void 0:n.nodeName)||(n==null?void 0:n.hasAttribute("contenteditable"))||!!(n!=null&&n.closest(".nokey"))}const yB=e=>"clientX"in e,Wl=(e,t)=>{var o,s;const n=yB(e),r=n?e.clientX:(o=e.touches)==null?void 0:o[0].clientX,i=n?e.clientY:(s=e.touches)==null?void 0:s[0].clientY;return{x:r-((t==null?void 0:t.left)??0),y:i-((t==null?void 0:t.top)??0)}},Nm=({id:e,path:t,labelX:n,labelY:r,label:i,labelStyle:o,labelShowBg:s,labelBgStyle:a,labelBgPadding:l,labelBgBorderRadius:u,style:d,markerEnd:f,markerStart:h,interactionWidth:g=20})=>ue.jsxs(ue.Fragment,{children:[ue.jsx("path",{id:e,style:d,d:t,fill:"none",className:"react-flow__edge-path",markerEnd:f,markerStart:h}),g&&ue.jsx("path",{d:t,fill:"none",strokeOpacity:0,strokeWidth:g,className:"react-flow__edge-interaction"}),i&&Ro(n)&&Ro(r)?ue.jsx(vme,{x:n,y:r,label:i,labelStyle:o,labelShowBg:s,labelBgStyle:a,labelBgPadding:l,labelBgBorderRadius:u}):null]});Nm.displayName="BaseEdge";function ap(e,t,n){return n===void 0?n:r=>{const i=t().edges.find(o=>o.id===e);i&&n(r,{...i})}}function vB({sourceX:e,sourceY:t,targetX:n,targetY:r}){const i=Math.abs(n-e)/2,o=n{const[x,_,b]=bB({sourceX:e,sourceY:t,sourcePosition:i,targetX:n,targetY:r,targetPosition:o});return ue.jsx(Nm,{path:x,labelX:_,labelY:b,label:s,labelStyle:a,labelShowBg:l,labelBgStyle:u,labelBgPadding:d,labelBgBorderRadius:f,style:h,markerEnd:g,markerStart:m,interactionWidth:v})});dE.displayName="SimpleBezierEdge";const JR={[Ue.Left]:{x:-1,y:0},[Ue.Right]:{x:1,y:0},[Ue.Top]:{x:0,y:-1},[Ue.Bottom]:{x:0,y:1}},wme=({source:e,sourcePosition:t=Ue.Bottom,target:n})=>t===Ue.Left||t===Ue.Right?e.xMath.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2));function xme({source:e,sourcePosition:t=Ue.Bottom,target:n,targetPosition:r=Ue.Top,center:i,offset:o}){const s=JR[t],a=JR[r],l={x:e.x+s.x*o,y:e.y+s.y*o},u={x:n.x+a.x*o,y:n.y+a.y*o},d=wme({source:l,sourcePosition:t,target:u}),f=d.x!==0?"x":"y",h=d[f];let g=[],m,v;const[x,_,b,y]=vB({sourceX:e.x,sourceY:e.y,targetX:n.x,targetY:n.y});if(s[f]*a[f]===-1){m=i.x||x,v=i.y||_;const C=[{x:m,y:l.y},{x:m,y:u.y}],T=[{x:l.x,y:v},{x:u.x,y:v}];s[f]===h?g=f==="x"?C:T:g=f==="x"?T:C}else{const C=[{x:l.x,y:u.y}],T=[{x:u.x,y:l.y}];if(f==="x"?g=s.x===h?T:C:g=s.y===h?C:T,t!==r){const E=f==="x"?"y":"x",P=s[f]===a[E],k=l[E]>u[E],O=l[E]{let y="";return b>0&&b{const[_,b,y]=r5({sourceX:e,sourceY:t,sourcePosition:f,targetX:n,targetY:r,targetPosition:h,borderRadius:v==null?void 0:v.borderRadius,offset:v==null?void 0:v.offset});return ue.jsx(Nm,{path:_,labelX:b,labelY:y,label:i,labelStyle:o,labelShowBg:s,labelBgStyle:a,labelBgPadding:l,labelBgBorderRadius:u,style:d,markerEnd:g,markerStart:m,interactionWidth:x})});Wb.displayName="SmoothStepEdge";const fE=L.memo(e=>{var t;return ue.jsx(Wb,{...e,pathOptions:L.useMemo(()=>{var n;return{borderRadius:0,offset:(n=e.pathOptions)==null?void 0:n.offset}},[(t=e.pathOptions)==null?void 0:t.offset])})});fE.displayName="StepEdge";function Tme({sourceX:e,sourceY:t,targetX:n,targetY:r}){const[i,o,s,a]=vB({sourceX:e,sourceY:t,targetX:n,targetY:r});return[`M ${e},${t}L ${n},${r}`,i,o,s,a]}const hE=L.memo(({sourceX:e,sourceY:t,targetX:n,targetY:r,label:i,labelStyle:o,labelShowBg:s,labelBgStyle:a,labelBgPadding:l,labelBgBorderRadius:u,style:d,markerEnd:f,markerStart:h,interactionWidth:g})=>{const[m,v,x]=Tme({sourceX:e,sourceY:t,targetX:n,targetY:r});return ue.jsx(Nm,{path:m,labelX:v,labelY:x,label:i,labelStyle:o,labelShowBg:s,labelBgStyle:a,labelBgPadding:l,labelBgBorderRadius:u,style:d,markerEnd:f,markerStart:h,interactionWidth:g})});hE.displayName="StraightEdge";function B0(e,t){return e>=0?.5*e:t*25*Math.sqrt(-e)}function tO({pos:e,x1:t,y1:n,x2:r,y2:i,c:o}){switch(e){case Ue.Left:return[t-B0(t-r,o),n];case Ue.Right:return[t+B0(r-t,o),n];case Ue.Top:return[t,n-B0(n-i,o)];case Ue.Bottom:return[t,n+B0(i-n,o)]}}function SB({sourceX:e,sourceY:t,sourcePosition:n=Ue.Bottom,targetX:r,targetY:i,targetPosition:o=Ue.Top,curvature:s=.25}){const[a,l]=tO({pos:n,x1:e,y1:t,x2:r,y2:i,c:s}),[u,d]=tO({pos:o,x1:r,y1:i,x2:e,y2:t,c:s}),[f,h,g,m]=_B({sourceX:e,sourceY:t,targetX:r,targetY:i,sourceControlX:a,sourceControlY:l,targetControlX:u,targetControlY:d});return[`M${e},${t} C${a},${l} ${u},${d} ${r},${i}`,f,h,g,m]}const J1=L.memo(({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:i=Ue.Bottom,targetPosition:o=Ue.Top,label:s,labelStyle:a,labelShowBg:l,labelBgStyle:u,labelBgPadding:d,labelBgBorderRadius:f,style:h,markerEnd:g,markerStart:m,pathOptions:v,interactionWidth:x})=>{const[_,b,y]=SB({sourceX:e,sourceY:t,sourcePosition:i,targetX:n,targetY:r,targetPosition:o,curvature:v==null?void 0:v.curvature});return ue.jsx(Nm,{path:_,labelX:b,labelY:y,label:s,labelStyle:a,labelShowBg:l,labelBgStyle:u,labelBgPadding:d,labelBgBorderRadius:f,style:h,markerEnd:g,markerStart:m,interactionWidth:x})});J1.displayName="BezierEdge";const pE=L.createContext(null),Eme=pE.Provider;pE.Consumer;const Ame=()=>L.useContext(pE),Pme=e=>"id"in e&&"source"in e&&"target"in e,Rme=({source:e,sourceHandle:t,target:n,targetHandle:r})=>`reactflow__edge-${e}${t||""}-${n}${r||""}`,i5=(e,t)=>typeof e>"u"?"":typeof e=="string"?e:`${t?`${t}__`:""}${Object.keys(e).sort().map(r=>`${r}=${e[r]}`).join("&")}`,Ome=(e,t)=>t.some(n=>n.source===e.source&&n.target===e.target&&(n.sourceHandle===e.sourceHandle||!n.sourceHandle&&!e.sourceHandle)&&(n.targetHandle===e.targetHandle||!n.targetHandle&&!e.targetHandle)),wB=(e,t)=>{if(!e.source||!e.target)return t;let n;return Pme(e)?n={...e}:n={...e,id:Rme(e)},Ome(n,t)?t:t.concat(n)},xB=({x:e,y:t},[n,r,i],o,[s,a])=>{const l={x:(e-n)/i,y:(t-r)/i};return o?{x:s*Math.round(l.x/s),y:a*Math.round(l.y/a)}:l},kme=({x:e,y:t},[n,r,i])=>({x:e*i+n,y:t*i+r}),mf=(e,t=[0,0])=>{if(!e)return{x:0,y:0,positionAbsolute:{x:0,y:0}};const n=(e.width??0)*t[0],r=(e.height??0)*t[1],i={x:e.position.x-n,y:e.position.y-r};return{...i,positionAbsolute:e.positionAbsolute?{x:e.positionAbsolute.x-n,y:e.positionAbsolute.y-r}:i}},CB=(e,t=[0,0])=>{if(e.length===0)return{x:0,y:0,width:0,height:0};const n=e.reduce((r,i)=>{const{x:o,y:s}=mf(i,t).positionAbsolute;return pB(r,Q1({x:o,y:s,width:i.width||0,height:i.height||0}))},{x:1/0,y:1/0,x2:-1/0,y2:-1/0});return gB(n)},TB=(e,t,[n,r,i]=[0,0,1],o=!1,s=!1,a=[0,0])=>{const l={x:(t.x-n)/i,y:(t.y-r)/i,width:t.width/i,height:t.height/i},u=[];return e.forEach(d=>{const{width:f,height:h,selectable:g=!0,hidden:m=!1}=d;if(s&&!g||m)return!1;const{positionAbsolute:v}=mf(d,a),x={x:v.x,y:v.y,width:f||0,height:h||0},_=t5(l,x),b=typeof f>"u"||typeof h>"u"||f===null||h===null,y=o&&_>0,S=(f||0)*(h||0);(b||y||_>=S||d.dragging)&&u.push(d)}),u},EB=(e,t)=>{const n=e.map(r=>r.id);return t.filter(r=>n.includes(r.source)||n.includes(r.target))},AB=(e,t,n,r,i,o=.1)=>{const s=t/(e.width*(1+o)),a=n/(e.height*(1+o)),l=Math.min(s,a),u=Uf(l,r,i),d=e.x+e.width/2,f=e.y+e.height/2,h=t/2-d*u,g=n/2-f*u;return[h,g,u]},Vu=(e,t=0)=>e.transition().duration(t);function nO(e,t,n,r){return(t[n]||[]).reduce((i,o)=>{var s,a;return`${e.id}-${o.id}-${n}`!==r&&i.push({id:o.id||null,type:n,nodeId:e.id,x:(((s=e.positionAbsolute)==null?void 0:s.x)??0)+o.x+o.width/2,y:(((a=e.positionAbsolute)==null?void 0:a.y)??0)+o.y+o.height/2}),i},[])}function Ime(e,t,n,r,i,o){const{x:s,y:a}=Wl(e),u=t.elementsFromPoint(s,a).find(m=>m.classList.contains("react-flow__handle"));if(u){const m=u.getAttribute("data-nodeid");if(m){const v=gE(void 0,u),x=u.getAttribute("data-handleid"),_=o({nodeId:m,id:x,type:v});if(_)return{handle:{id:x,type:v,nodeId:m,x:n.x,y:n.y},validHandleResult:_}}}let d=[],f=1/0;if(i.forEach(m=>{const v=Math.sqrt((m.x-n.x)**2+(m.y-n.y)**2);if(v<=r){const x=o(m);v<=f&&(vm.isValid),g=d.some(({handle:m})=>m.type==="target");return d.find(({handle:m,validHandleResult:v})=>g?m.type==="target":h?v.isValid:!0)||d[0]}const Mme={source:null,target:null,sourceHandle:null,targetHandle:null},PB=()=>({handleDomNode:null,isValid:!1,connection:Mme,endHandle:null});function RB(e,t,n,r,i,o,s){const a=i==="target",l=s.querySelector(`.react-flow__handle[data-id="${e==null?void 0:e.nodeId}-${e==null?void 0:e.id}-${e==null?void 0:e.type}"]`),u={...PB(),handleDomNode:l};if(l){const d=gE(void 0,l),f=l.getAttribute("data-nodeid"),h=l.getAttribute("data-handleid"),g=l.classList.contains("connectable"),m=l.classList.contains("connectableend"),v={source:a?f:n,sourceHandle:a?h:r,target:a?n:f,targetHandle:a?r:h};u.connection=v,g&&m&&(t===bc.Strict?a&&d==="source"||!a&&d==="target":f!==n||h!==r)&&(u.endHandle={nodeId:f,handleId:h,type:d},u.isValid=o(v))}return u}function Nme({nodes:e,nodeId:t,handleId:n,handleType:r}){return e.reduce((i,o)=>{if(o[pr]){const{handleBounds:s}=o[pr];let a=[],l=[];s&&(a=nO(o,s,"source",`${t}-${n}-${r}`),l=nO(o,s,"target",`${t}-${n}-${r}`)),i.push(...a,...l)}return i},[])}function gE(e,t){return e||(t!=null&&t.classList.contains("target")?"target":t!=null&&t.classList.contains("source")?"source":null)}function kx(e){e==null||e.classList.remove("valid","connecting","react-flow__handle-valid","react-flow__handle-connecting")}function Lme(e,t){let n=null;return t?n="valid":e&&!t&&(n="invalid"),n}function OB({event:e,handleId:t,nodeId:n,onConnect:r,isTarget:i,getState:o,setState:s,isValidConnection:a,edgeUpdaterType:l,onEdgeUpdateEnd:u}){const d=hB(e.target),{connectionMode:f,domNode:h,autoPanOnConnect:g,connectionRadius:m,onConnectStart:v,panBy:x,getNodes:_,cancelConnection:b}=o();let y=0,S;const{x:C,y:T}=Wl(e),E=d==null?void 0:d.elementFromPoint(C,T),P=gE(l,E),k=h==null?void 0:h.getBoundingClientRect();if(!k||!P)return;let O,M=Wl(e,k),V=!1,B=null,A=!1,N=null;const D=Nme({nodes:_(),nodeId:n,handleId:t,handleType:P}),U=()=>{if(!g)return;const[G,q]=fB(M,k);x({x:G,y:q}),y=requestAnimationFrame(U)};s({connectionPosition:M,connectionStatus:null,connectionNodeId:n,connectionHandleId:t,connectionHandleType:P,connectionStartHandle:{nodeId:n,handleId:t,type:P},connectionEndHandle:null}),v==null||v(e,{nodeId:n,handleId:t,handleType:P});function $(G){const{transform:q}=o();M=Wl(G,k);const{handle:Z,validHandleResult:ee}=Ime(G,d,xB(M,q,!1,[1,1]),m,D,ie=>RB(ie,f,n,t,i?"target":"source",a,d));if(S=Z,V||(U(),V=!0),N=ee.handleDomNode,B=ee.connection,A=ee.isValid,s({connectionPosition:S&&A?kme({x:S.x,y:S.y},q):M,connectionStatus:Lme(!!S,A),connectionEndHandle:ee.endHandle}),!S&&!A&&!N)return kx(O);B.source!==B.target&&N&&(kx(O),O=N,N.classList.add("connecting","react-flow__handle-connecting"),N.classList.toggle("valid",A),N.classList.toggle("react-flow__handle-valid",A))}function j(G){var q,Z;(S||N)&&B&&A&&(r==null||r(B)),(Z=(q=o()).onConnectEnd)==null||Z.call(q,G),l&&(u==null||u(G)),kx(O),b(),cancelAnimationFrame(y),V=!1,A=!1,B=null,N=null,d.removeEventListener("mousemove",$),d.removeEventListener("mouseup",j),d.removeEventListener("touchmove",$),d.removeEventListener("touchend",j)}d.addEventListener("mousemove",$),d.addEventListener("mouseup",j),d.addEventListener("touchmove",$),d.addEventListener("touchend",j)}const rO=()=>!0,Dme=e=>({connectionStartHandle:e.connectionStartHandle,connectOnClick:e.connectOnClick,noPanClassName:e.noPanClassName}),$me=(e,t,n)=>r=>{const{connectionStartHandle:i,connectionEndHandle:o,connectionClickStartHandle:s}=r;return{connecting:(i==null?void 0:i.nodeId)===e&&(i==null?void 0:i.handleId)===t&&(i==null?void 0:i.type)===n||(o==null?void 0:o.nodeId)===e&&(o==null?void 0:o.handleId)===t&&(o==null?void 0:o.type)===n,clickConnecting:(s==null?void 0:s.nodeId)===e&&(s==null?void 0:s.handleId)===t&&(s==null?void 0:s.type)===n}},kB=L.forwardRef(({type:e="source",position:t=Ue.Top,isValidConnection:n,isConnectable:r=!0,isConnectableStart:i=!0,isConnectableEnd:o=!0,id:s,onConnect:a,children:l,className:u,onMouseDown:d,onTouchStart:f,...h},g)=>{var k,O;const m=s||null,v=e==="target",x=ii(),_=Ame(),{connectOnClick:b,noPanClassName:y}=Gn(Dme,Bi),{connecting:S,clickConnecting:C}=Gn($me(_,m,e),Bi);_||(O=(k=x.getState()).onError)==null||O.call(k,"010",ou.error010());const T=M=>{const{defaultEdgeOptions:V,onConnect:B,hasDefaultEdges:A}=x.getState(),N={...V,...M};if(A){const{edges:D,setEdges:U}=x.getState();U(wB(N,D))}B==null||B(N),a==null||a(N)},E=M=>{if(!_)return;const V=yB(M);i&&(V&&M.button===0||!V)&&OB({event:M,handleId:m,nodeId:_,onConnect:T,isTarget:v,getState:x.getState,setState:x.setState,isValidConnection:n||x.getState().isValidConnection||rO}),V?d==null||d(M):f==null||f(M)},P=M=>{const{onClickConnectStart:V,onClickConnectEnd:B,connectionClickStartHandle:A,connectionMode:N,isValidConnection:D}=x.getState();if(!_||!A&&!i)return;if(!A){V==null||V(M,{nodeId:_,handleId:m,handleType:e}),x.setState({connectionClickStartHandle:{nodeId:_,type:e,handleId:m}});return}const U=hB(M.target),$=n||D||rO,{connection:j,isValid:G}=RB({nodeId:_,id:m,type:e},N,A.nodeId,A.handleId||null,A.type,$,U);G&&T(j),B==null||B(M),x.setState({connectionClickStartHandle:null})};return ue.jsx("div",{"data-handleid":m,"data-nodeid":_,"data-handlepos":t,"data-id":`${_}-${m}-${e}`,className:$o(["react-flow__handle",`react-flow__handle-${t}`,"nodrag",y,u,{source:!v,target:v,connectable:r,connectablestart:i,connectableend:o,connecting:C,connectionindicator:r&&(i&&!S||o&&S)}]),onMouseDown:E,onTouchStart:E,onClick:b?P:void 0,ref:g,...h,children:l})});kB.displayName="Handle";var e_=L.memo(kB);const IB=({data:e,isConnectable:t,targetPosition:n=Ue.Top,sourcePosition:r=Ue.Bottom})=>ue.jsxs(ue.Fragment,{children:[ue.jsx(e_,{type:"target",position:n,isConnectable:t}),e==null?void 0:e.label,ue.jsx(e_,{type:"source",position:r,isConnectable:t})]});IB.displayName="DefaultNode";var o5=L.memo(IB);const MB=({data:e,isConnectable:t,sourcePosition:n=Ue.Bottom})=>ue.jsxs(ue.Fragment,{children:[e==null?void 0:e.label,ue.jsx(e_,{type:"source",position:n,isConnectable:t})]});MB.displayName="InputNode";var NB=L.memo(MB);const LB=({data:e,isConnectable:t,targetPosition:n=Ue.Top})=>ue.jsxs(ue.Fragment,{children:[ue.jsx(e_,{type:"target",position:n,isConnectable:t}),e==null?void 0:e.label]});LB.displayName="OutputNode";var DB=L.memo(LB);const mE=()=>null;mE.displayName="GroupNode";const Fme=e=>({selectedNodes:e.getNodes().filter(t=>t.selected),selectedEdges:e.edges.filter(t=>t.selected)}),U0=e=>e.id;function Bme(e,t){return Bi(e.selectedNodes.map(U0),t.selectedNodes.map(U0))&&Bi(e.selectedEdges.map(U0),t.selectedEdges.map(U0))}const $B=L.memo(({onSelectionChange:e})=>{const t=ii(),{selectedNodes:n,selectedEdges:r}=Gn(Fme,Bme);return L.useEffect(()=>{var o,s;const i={nodes:n,edges:r};e==null||e(i),(s=(o=t.getState()).onSelectionChange)==null||s.call(o,i)},[n,r,e]),null});$B.displayName="SelectionListener";const Ume=e=>!!e.onSelectionChange;function zme({onSelectionChange:e}){const t=Gn(Ume);return e||t?ue.jsx($B,{onSelectionChange:e}):null}const Vme=e=>({setNodes:e.setNodes,setEdges:e.setEdges,setDefaultNodesAndEdges:e.setDefaultNodesAndEdges,setMinZoom:e.setMinZoom,setMaxZoom:e.setMaxZoom,setTranslateExtent:e.setTranslateExtent,setNodeExtent:e.setNodeExtent,reset:e.reset});function md(e,t){L.useEffect(()=>{typeof e<"u"&&t(e)},[e])}function mt(e,t,n){L.useEffect(()=>{typeof t<"u"&&n({[e]:t})},[t])}const jme=({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,onConnect:i,onConnectStart:o,onConnectEnd:s,onClickConnectStart:a,onClickConnectEnd:l,nodesDraggable:u,nodesConnectable:d,nodesFocusable:f,edgesFocusable:h,edgesUpdatable:g,elevateNodesOnSelect:m,minZoom:v,maxZoom:x,nodeExtent:_,onNodesChange:b,onEdgesChange:y,elementsSelectable:S,connectionMode:C,snapGrid:T,snapToGrid:E,translateExtent:P,connectOnClick:k,defaultEdgeOptions:O,fitView:M,fitViewOptions:V,onNodesDelete:B,onEdgesDelete:A,onNodeDrag:N,onNodeDragStart:D,onNodeDragStop:U,onSelectionDrag:$,onSelectionDragStart:j,onSelectionDragStop:G,noPanClassName:q,nodeOrigin:Z,rfId:ee,autoPanOnConnect:ie,autoPanOnNodeDrag:se,onError:le,connectionRadius:W,isValidConnection:ne})=>{const{setNodes:fe,setEdges:pe,setDefaultNodesAndEdges:ve,setMinZoom:ye,setMaxZoom:Je,setTranslateExtent:Fe,setNodeExtent:Ae,reset:vt}=Gn(Vme,Bi),_e=ii();return L.useEffect(()=>{const Qt=r==null?void 0:r.map(rr=>({...rr,...O}));return ve(n,Qt),()=>{vt()}},[]),mt("defaultEdgeOptions",O,_e.setState),mt("connectionMode",C,_e.setState),mt("onConnect",i,_e.setState),mt("onConnectStart",o,_e.setState),mt("onConnectEnd",s,_e.setState),mt("onClickConnectStart",a,_e.setState),mt("onClickConnectEnd",l,_e.setState),mt("nodesDraggable",u,_e.setState),mt("nodesConnectable",d,_e.setState),mt("nodesFocusable",f,_e.setState),mt("edgesFocusable",h,_e.setState),mt("edgesUpdatable",g,_e.setState),mt("elementsSelectable",S,_e.setState),mt("elevateNodesOnSelect",m,_e.setState),mt("snapToGrid",E,_e.setState),mt("snapGrid",T,_e.setState),mt("onNodesChange",b,_e.setState),mt("onEdgesChange",y,_e.setState),mt("connectOnClick",k,_e.setState),mt("fitViewOnInit",M,_e.setState),mt("fitViewOnInitOptions",V,_e.setState),mt("onNodesDelete",B,_e.setState),mt("onEdgesDelete",A,_e.setState),mt("onNodeDrag",N,_e.setState),mt("onNodeDragStart",D,_e.setState),mt("onNodeDragStop",U,_e.setState),mt("onSelectionDrag",$,_e.setState),mt("onSelectionDragStart",j,_e.setState),mt("onSelectionDragStop",G,_e.setState),mt("noPanClassName",q,_e.setState),mt("nodeOrigin",Z,_e.setState),mt("rfId",ee,_e.setState),mt("autoPanOnConnect",ie,_e.setState),mt("autoPanOnNodeDrag",se,_e.setState),mt("onError",le,_e.setState),mt("connectionRadius",W,_e.setState),mt("isValidConnection",ne,_e.setState),md(e,fe),md(t,pe),md(v,ye),md(x,Je),md(P,Fe),md(_,Ae),null},iO={display:"none"},Gme={position:"absolute",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)",clipPath:"inset(100%)"},FB="react-flow__node-desc",BB="react-flow__edge-desc",Hme="react-flow__aria-live",Wme=e=>e.ariaLiveMessage;function qme({rfId:e}){const t=Gn(Wme);return ue.jsx("div",{id:`${Hme}-${e}`,"aria-live":"assertive","aria-atomic":"true",style:Gme,children:t})}function Kme({rfId:e,disableKeyboardA11y:t}){return ue.jsxs(ue.Fragment,{children:[ue.jsxs("div",{id:`${FB}-${e}`,style:iO,children:["Press enter or space to select a node.",!t&&"You can then use the arrow keys to move the node around."," Press delete to remove it and escape to cancel."," "]}),ue.jsx("div",{id:`${BB}-${e}`,style:iO,children:"Press enter or space to select an edge. You can then press delete to remove it or escape to cancel."}),!t&&ue.jsx(qme,{rfId:e})]})}const Xme=(e,t,n)=>n===Ue.Left?e-t:n===Ue.Right?e+t:e,Yme=(e,t,n)=>n===Ue.Top?e-t:n===Ue.Bottom?e+t:e,oO="react-flow__edgeupdater",sO=({position:e,centerX:t,centerY:n,radius:r=10,onMouseDown:i,onMouseEnter:o,onMouseOut:s,type:a})=>ue.jsx("circle",{onMouseDown:i,onMouseEnter:o,onMouseOut:s,className:$o([oO,`${oO}-${a}`]),cx:Xme(t,r,e),cy:Yme(n,r,e),r,stroke:"transparent",fill:"transparent"}),Qme=()=>!0;var yd=e=>{const t=({id:n,className:r,type:i,data:o,onClick:s,onEdgeDoubleClick:a,selected:l,animated:u,label:d,labelStyle:f,labelShowBg:h,labelBgStyle:g,labelBgPadding:m,labelBgBorderRadius:v,style:x,source:_,target:b,sourceX:y,sourceY:S,targetX:C,targetY:T,sourcePosition:E,targetPosition:P,elementsSelectable:k,hidden:O,sourceHandleId:M,targetHandleId:V,onContextMenu:B,onMouseEnter:A,onMouseMove:N,onMouseLeave:D,edgeUpdaterRadius:U,onEdgeUpdate:$,onEdgeUpdateStart:j,onEdgeUpdateEnd:G,markerEnd:q,markerStart:Z,rfId:ee,ariaLabel:ie,isFocusable:se,isUpdatable:le,pathOptions:W,interactionWidth:ne})=>{const fe=L.useRef(null),[pe,ve]=L.useState(!1),[ye,Je]=L.useState(!1),Fe=ii(),Ae=L.useMemo(()=>`url(#${i5(Z,ee)})`,[Z,ee]),vt=L.useMemo(()=>`url(#${i5(q,ee)})`,[q,ee]);if(O)return null;const _e=mn=>{const{edges:Zt,addSelectedEdges:Rr}=Fe.getState();if(k&&(Fe.setState({nodesSelectionActive:!1}),Rr([n])),s){const Hr=Zt.find(si=>si.id===n);s(mn,Hr)}},Qt=ap(n,Fe.getState,a),rr=ap(n,Fe.getState,B),qt=ap(n,Fe.getState,A),ht=ap(n,Fe.getState,N),At=ap(n,Fe.getState,D),un=(mn,Zt)=>{if(mn.button!==0)return;const{edges:Rr,isValidConnection:Hr}=Fe.getState(),si=Zt?b:_,Vi=(Zt?V:M)||null,$n=Zt?"target":"source",ai=Hr||Qme,ra=Zt,uo=Rr.find(Ft=>Ft.id===n);Je(!0),j==null||j(mn,uo,$n);const ia=Ft=>{Je(!1),G==null||G(Ft,uo,$n)};OB({event:mn,handleId:Vi,nodeId:si,onConnect:Ft=>$==null?void 0:$(uo,Ft),isTarget:ra,getState:Fe.getState,setState:Fe.setState,isValidConnection:ai,edgeUpdaterType:$n,onEdgeUpdateEnd:ia})},Gr=mn=>un(mn,!0),Pr=mn=>un(mn,!1),Ci=()=>ve(!0),In=()=>ve(!1),gn=!k&&!s,ir=mn=>{var Zt;if(mB.includes(mn.key)&&k){const{unselectNodesAndEdges:Rr,addSelectedEdges:Hr,edges:si}=Fe.getState();mn.key==="Escape"?((Zt=fe.current)==null||Zt.blur(),Rr({edges:[si.find($n=>$n.id===n)]})):Hr([n])}};return ue.jsxs("g",{className:$o(["react-flow__edge",`react-flow__edge-${i}`,r,{selected:l,animated:u,inactive:gn,updating:pe}]),onClick:_e,onDoubleClick:Qt,onContextMenu:rr,onMouseEnter:qt,onMouseMove:ht,onMouseLeave:At,onKeyDown:se?ir:void 0,tabIndex:se?0:void 0,role:se?"button":void 0,"data-testid":`rf__edge-${n}`,"aria-label":ie===null?void 0:ie||`Edge from ${_} to ${b}`,"aria-describedby":se?`${BB}-${ee}`:void 0,ref:fe,children:[!ye&&ue.jsx(e,{id:n,source:_,target:b,selected:l,animated:u,label:d,labelStyle:f,labelShowBg:h,labelBgStyle:g,labelBgPadding:m,labelBgBorderRadius:v,data:o,style:x,sourceX:y,sourceY:S,targetX:C,targetY:T,sourcePosition:E,targetPosition:P,sourceHandleId:M,targetHandleId:V,markerStart:Ae,markerEnd:vt,pathOptions:W,interactionWidth:ne}),le&&ue.jsxs(ue.Fragment,{children:[(le==="source"||le===!0)&&ue.jsx(sO,{position:E,centerX:y,centerY:S,radius:U,onMouseDown:Gr,onMouseEnter:Ci,onMouseOut:In,type:"source"}),(le==="target"||le===!0)&&ue.jsx(sO,{position:P,centerX:C,centerY:T,radius:U,onMouseDown:Pr,onMouseEnter:Ci,onMouseOut:In,type:"target"})]})]})};return t.displayName="EdgeWrapper",L.memo(t)};function Zme(e){const t={default:yd(e.default||J1),straight:yd(e.bezier||hE),step:yd(e.step||fE),smoothstep:yd(e.step||Wb),simplebezier:yd(e.simplebezier||dE)},n={},r=Object.keys(e).filter(i=>!["default","bezier"].includes(i)).reduce((i,o)=>(i[o]=yd(e[o]||J1),i),n);return{...t,...r}}function aO(e,t,n=null){const r=((n==null?void 0:n.x)||0)+t.x,i=((n==null?void 0:n.y)||0)+t.y,o=(n==null?void 0:n.width)||t.width,s=(n==null?void 0:n.height)||t.height;switch(e){case Ue.Top:return{x:r+o/2,y:i};case Ue.Right:return{x:r+o,y:i+s/2};case Ue.Bottom:return{x:r+o/2,y:i+s};case Ue.Left:return{x:r,y:i+s/2}}}function lO(e,t){return e?e.length===1||!t?e[0]:t&&e.find(n=>n.id===t)||null:null}const Jme=(e,t,n,r,i,o)=>{const s=aO(n,e,t),a=aO(o,r,i);return{sourceX:s.x,sourceY:s.y,targetX:a.x,targetY:a.y}};function eye({sourcePos:e,targetPos:t,sourceWidth:n,sourceHeight:r,targetWidth:i,targetHeight:o,width:s,height:a,transform:l}){const u={x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x+n,t.x+i),y2:Math.max(e.y+r,t.y+o)};u.x===u.x2&&(u.x2+=1),u.y===u.y2&&(u.y2+=1);const d=Q1({x:(0-l[0])/l[2],y:(0-l[1])/l[2],width:s/l[2],height:a/l[2]}),f=Math.max(0,Math.min(d.x2,u.x2)-Math.max(d.x,u.x)),h=Math.max(0,Math.min(d.y2,u.y2)-Math.max(d.y,u.y));return Math.ceil(f*h)>0}function uO(e){var r,i,o,s,a;const t=((r=e==null?void 0:e[pr])==null?void 0:r.handleBounds)||null,n=t&&(e==null?void 0:e.width)&&(e==null?void 0:e.height)&&typeof((i=e==null?void 0:e.positionAbsolute)==null?void 0:i.x)<"u"&&typeof((o=e==null?void 0:e.positionAbsolute)==null?void 0:o.y)<"u";return[{x:((s=e==null?void 0:e.positionAbsolute)==null?void 0:s.x)||0,y:((a=e==null?void 0:e.positionAbsolute)==null?void 0:a.y)||0,width:(e==null?void 0:e.width)||0,height:(e==null?void 0:e.height)||0},t,!!n]}function UB(e,t){if(!e.parentNode)return!1;const n=t.get(e.parentNode);return n?n.selected?!0:UB(n,t):!1}function cO(e,t,n){let r=e;do{if(r!=null&&r.matches(t))return!0;if(r===n.current)return!1;r=r.parentElement}while(r);return!1}function tye(e,t,n,r){return Array.from(e.values()).filter(i=>(i.selected||i.id===r)&&(!i.parentNode||!UB(i,e))&&(i.draggable||t&&typeof i.draggable>"u")).map(i=>{var o,s;return{id:i.id,position:i.position||{x:0,y:0},positionAbsolute:i.positionAbsolute||{x:0,y:0},distance:{x:n.x-(((o=i.positionAbsolute)==null?void 0:o.x)??0),y:n.y-(((s=i.positionAbsolute)==null?void 0:s.y)??0)},delta:{x:0,y:0},extent:i.extent,parentNode:i.parentNode,width:i.width,height:i.height}})}function nye(e,t){return!t||t==="parent"?t:[t[0],[t[1][0]-(e.width||0),t[1][1]-(e.height||0)]]}function zB(e,t,n,r,i=[0,0],o){const s=nye(e,e.extent||r);let a=s;if(e.extent==="parent")if(e.parentNode&&e.width&&e.height){const d=n.get(e.parentNode),{x:f,y:h}=mf(d,i).positionAbsolute;a=d&&Ro(f)&&Ro(h)&&Ro(d.width)&&Ro(d.height)?[[f+e.width*i[0],h+e.height*i[1]],[f+d.width-e.width+e.width*i[0],h+d.height-e.height+e.height*i[1]]]:a}else o==null||o("005",ou.error005()),a=s;else if(e.extent&&e.parentNode){const d=n.get(e.parentNode),{x:f,y:h}=mf(d,i).positionAbsolute;a=[[e.extent[0][0]+f,e.extent[0][1]+h],[e.extent[1][0]+f,e.extent[1][1]+h]]}let l={x:0,y:0};if(e.parentNode){const d=n.get(e.parentNode);l=mf(d,i).positionAbsolute}const u=a?cE(t,a):t;return{position:{x:u.x-l.x,y:u.y-l.y},positionAbsolute:u}}function Ix({nodeId:e,dragItems:t,nodeInternals:n}){const r=t.map(i=>({...n.get(i.id),position:i.position,positionAbsolute:i.positionAbsolute}));return[e?r.find(i=>i.id===e):r[0],r]}const dO=(e,t,n,r)=>{const i=t.querySelectorAll(e);if(!i||!i.length)return null;const o=Array.from(i),s=t.getBoundingClientRect(),a={x:s.width*r[0],y:s.height*r[1]};return o.map(l=>{const u=l.getBoundingClientRect();return{id:l.getAttribute("data-handleid"),position:l.getAttribute("data-handlepos"),x:(u.left-s.left-a.x)/n,y:(u.top-s.top-a.y)/n,...uE(l)}})};function lp(e,t,n){return n===void 0?n:r=>{const i=t().nodeInternals.get(e);n(r,{...i})}}function s5({id:e,store:t,unselect:n=!1,nodeRef:r}){const{addSelectedNodes:i,unselectNodesAndEdges:o,multiSelectionActive:s,nodeInternals:a}=t.getState(),l=a.get(e);t.setState({nodesSelectionActive:!1}),l.selected?(n||l.selected&&s)&&(o({nodes:[l]}),requestAnimationFrame(()=>{var u;return(u=r==null?void 0:r.current)==null?void 0:u.blur()})):i([e])}function rye(){const e=ii();return L.useCallback(({sourceEvent:n})=>{const{transform:r,snapGrid:i,snapToGrid:o}=e.getState(),s=n.touches?n.touches[0].clientX:n.clientX,a=n.touches?n.touches[0].clientY:n.clientY,l={x:(s-r[0])/r[2],y:(a-r[1])/r[2]};return{xSnapped:o?i[0]*Math.round(l.x/i[0]):l.x,ySnapped:o?i[1]*Math.round(l.y/i[1]):l.y,...l}},[])}function Mx(e){return(t,n,r)=>e==null?void 0:e(t,r)}function VB({nodeRef:e,disabled:t=!1,noDragClassName:n,handleSelector:r,nodeId:i,isSelectable:o,selectNodesOnDrag:s}){const a=ii(),[l,u]=L.useState(!1),d=L.useRef([]),f=L.useRef({x:null,y:null}),h=L.useRef(0),g=L.useRef(null),m=L.useRef({x:0,y:0}),v=L.useRef(null),x=L.useRef(!1),_=rye();return L.useEffect(()=>{if(e!=null&&e.current){const b=rs(e.current),y=({x:C,y:T})=>{const{nodeInternals:E,onNodeDrag:P,onSelectionDrag:k,updateNodePositions:O,nodeExtent:M,snapGrid:V,snapToGrid:B,nodeOrigin:A,onError:N}=a.getState();f.current={x:C,y:T};let D=!1;if(d.current=d.current.map($=>{const j={x:C-$.distance.x,y:T-$.distance.y};B&&(j.x=V[0]*Math.round(j.x/V[0]),j.y=V[1]*Math.round(j.y/V[1]));const G=zB($,j,E,M,A,N);return D=D||$.position.x!==G.position.x||$.position.y!==G.position.y,$.position=G.position,$.positionAbsolute=G.positionAbsolute,$}),!D)return;O(d.current,!0,!0),u(!0);const U=i?P:Mx(k);if(U&&v.current){const[$,j]=Ix({nodeId:i,dragItems:d.current,nodeInternals:E});U(v.current,$,j)}},S=()=>{if(!g.current)return;const[C,T]=fB(m.current,g.current);if(C!==0||T!==0){const{transform:E,panBy:P}=a.getState();f.current.x=(f.current.x??0)-C/E[2],f.current.y=(f.current.y??0)-T/E[2],P({x:C,y:T})&&y(f.current)}h.current=requestAnimationFrame(S)};if(t)b.on(".drag",null);else{const C=wpe().on("start",T=>{var D;const{nodeInternals:E,multiSelectionActive:P,domNode:k,nodesDraggable:O,unselectNodesAndEdges:M,onNodeDragStart:V,onSelectionDragStart:B}=a.getState(),A=i?V:Mx(B);!s&&!P&&i&&((D=E.get(i))!=null&&D.selected||M()),i&&o&&s&&s5({id:i,store:a,nodeRef:e});const N=_(T);if(f.current=N,d.current=tye(E,O,N,i),A&&d.current){const[U,$]=Ix({nodeId:i,dragItems:d.current,nodeInternals:E});A(T.sourceEvent,U,$)}g.current=(k==null?void 0:k.getBoundingClientRect())||null,m.current=Wl(T.sourceEvent,g.current)}).on("drag",T=>{const E=_(T),{autoPanOnNodeDrag:P}=a.getState();!x.current&&P&&(x.current=!0,S()),(f.current.x!==E.xSnapped||f.current.y!==E.ySnapped)&&d.current&&(v.current=T.sourceEvent,m.current=Wl(T.sourceEvent,g.current),y(E))}).on("end",T=>{if(u(!1),x.current=!1,cancelAnimationFrame(h.current),d.current){const{updateNodePositions:E,nodeInternals:P,onNodeDragStop:k,onSelectionDragStop:O}=a.getState(),M=i?k:Mx(O);if(E(d.current,!1,!1),M){const[V,B]=Ix({nodeId:i,dragItems:d.current,nodeInternals:P});M(T.sourceEvent,V,B)}}}).filter(T=>{const E=T.target;return!T.button&&(!n||!cO(E,`.${n}`,e))&&(!r||cO(E,r,e))});return b.call(C),()=>{b.on(".drag",null)}}}},[e,t,n,r,o,a,i,s,_]),l}function jB(){const e=ii();return L.useCallback(n=>{const{nodeInternals:r,nodeExtent:i,updateNodePositions:o,getNodes:s,snapToGrid:a,snapGrid:l,onError:u,nodesDraggable:d}=e.getState(),f=s().filter(b=>b.selected&&(b.draggable||d&&typeof b.draggable>"u")),h=a?l[0]:5,g=a?l[1]:5,m=n.isShiftPressed?4:1,v=n.x*h*m,x=n.y*g*m,_=f.map(b=>{if(b.positionAbsolute){const y={x:b.positionAbsolute.x+v,y:b.positionAbsolute.y+x};a&&(y.x=l[0]*Math.round(y.x/l[0]),y.y=l[1]*Math.round(y.y/l[1]));const{positionAbsolute:S,position:C}=zB(b,y,r,i,void 0,u);b.position=C,b.positionAbsolute=S}return b});o(_,!0,!1)},[])}const yf={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}};var up=e=>{const t=({id:n,type:r,data:i,xPos:o,yPos:s,xPosOrigin:a,yPosOrigin:l,selected:u,onClick:d,onMouseEnter:f,onMouseMove:h,onMouseLeave:g,onContextMenu:m,onDoubleClick:v,style:x,className:_,isDraggable:b,isSelectable:y,isConnectable:S,isFocusable:C,selectNodesOnDrag:T,sourcePosition:E,targetPosition:P,hidden:k,resizeObserver:O,dragHandle:M,zIndex:V,isParent:B,noDragClassName:A,noPanClassName:N,initialized:D,disableKeyboardA11y:U,ariaLabel:$,rfId:j})=>{const G=ii(),q=L.useRef(null),Z=L.useRef(E),ee=L.useRef(P),ie=L.useRef(r),se=y||b||d||f||h||g,le=jB(),W=lp(n,G.getState,f),ne=lp(n,G.getState,h),fe=lp(n,G.getState,g),pe=lp(n,G.getState,m),ve=lp(n,G.getState,v),ye=Ae=>{if(y&&(!T||!b)&&s5({id:n,store:G,nodeRef:q}),d){const vt=G.getState().nodeInternals.get(n);d(Ae,{...vt})}},Je=Ae=>{if(!n5(Ae))if(mB.includes(Ae.key)&&y){const vt=Ae.key==="Escape";s5({id:n,store:G,unselect:vt,nodeRef:q})}else!U&&b&&u&&Object.prototype.hasOwnProperty.call(yf,Ae.key)&&(G.setState({ariaLiveMessage:`Moved selected node ${Ae.key.replace("Arrow","").toLowerCase()}. New position, x: ${~~o}, y: ${~~s}`}),le({x:yf[Ae.key].x,y:yf[Ae.key].y,isShiftPressed:Ae.shiftKey}))};L.useEffect(()=>{if(q.current&&!k){const Ae=q.current;return O==null||O.observe(Ae),()=>O==null?void 0:O.unobserve(Ae)}},[k]),L.useEffect(()=>{const Ae=ie.current!==r,vt=Z.current!==E,_e=ee.current!==P;q.current&&(Ae||vt||_e)&&(Ae&&(ie.current=r),vt&&(Z.current=E),_e&&(ee.current=P),G.getState().updateNodeDimensions([{id:n,nodeElement:q.current,forceUpdate:!0}]))},[n,r,E,P]);const Fe=VB({nodeRef:q,disabled:k||!b,noDragClassName:A,handleSelector:M,nodeId:n,isSelectable:y,selectNodesOnDrag:T});return k?null:ue.jsx("div",{className:$o(["react-flow__node",`react-flow__node-${r}`,{[N]:b},_,{selected:u,selectable:y,parent:B,dragging:Fe}]),ref:q,style:{zIndex:V,transform:`translate(${a}px,${l}px)`,pointerEvents:se?"all":"none",visibility:D?"visible":"hidden",...x},"data-id":n,"data-testid":`rf__node-${n}`,onMouseEnter:W,onMouseMove:ne,onMouseLeave:fe,onContextMenu:pe,onClick:ye,onDoubleClick:ve,onKeyDown:C?Je:void 0,tabIndex:C?0:void 0,role:C?"button":void 0,"aria-describedby":U?void 0:`${FB}-${j}`,"aria-label":$,children:ue.jsx(Eme,{value:n,children:ue.jsx(e,{id:n,data:i,type:r,xPos:o,yPos:s,selected:u,isConnectable:S,sourcePosition:E,targetPosition:P,dragging:Fe,dragHandle:M,zIndex:V})})})};return t.displayName="NodeWrapper",L.memo(t)};function iye(e){const t={input:up(e.input||NB),default:up(e.default||o5),output:up(e.output||DB),group:up(e.group||mE)},n={},r=Object.keys(e).filter(i=>!["input","default","output","group"].includes(i)).reduce((i,o)=>(i[o]=up(e[o]||o5),i),n);return{...t,...r}}const oye=({x:e,y:t,width:n,height:r,origin:i})=>!n||!r?{x:e,y:t}:i[0]<0||i[1]<0||i[0]>1||i[1]>1?{x:e,y:t}:{x:e-n*i[0],y:t-r*i[1]},sye=typeof document<"u"?document:null;var Wg=(e=null,t={target:sye})=>{const[n,r]=L.useState(!1),i=L.useRef(!1),o=L.useRef(new Set([])),[s,a]=L.useMemo(()=>{if(e!==null){const u=(Array.isArray(e)?e:[e]).filter(f=>typeof f=="string").map(f=>f.split("+")),d=u.reduce((f,h)=>f.concat(...h),[]);return[u,d]}return[[],[]]},[e]);return L.useEffect(()=>{var l,u;if(e!==null){const d=g=>{if(i.current=g.ctrlKey||g.metaKey||g.shiftKey,!i.current&&n5(g))return!1;const m=hO(g.code,a);o.current.add(g[m]),fO(s,o.current,!1)&&(g.preventDefault(),r(!0))},f=g=>{if(!i.current&&n5(g))return!1;const m=hO(g.code,a);fO(s,o.current,!0)?(r(!1),o.current.clear()):o.current.delete(g[m]),i.current=!1},h=()=>{o.current.clear(),r(!1)};return(l=t==null?void 0:t.target)==null||l.addEventListener("keydown",d),(u=t==null?void 0:t.target)==null||u.addEventListener("keyup",f),window.addEventListener("blur",h),()=>{var g,m;(g=t==null?void 0:t.target)==null||g.removeEventListener("keydown",d),(m=t==null?void 0:t.target)==null||m.removeEventListener("keyup",f),window.removeEventListener("blur",h)}}},[e,r]),n};function fO(e,t,n){return e.filter(r=>n||r.length===t.size).some(r=>r.every(i=>t.has(i)))}function hO(e,t){return t.includes(e)?"code":"key"}function GB(e,t,n,r){var s,a;if(!e.parentNode)return n;const i=t.get(e.parentNode),o=mf(i,r);return GB(i,t,{x:(n.x??0)+o.x,y:(n.y??0)+o.y,z:(((s=i[pr])==null?void 0:s.z)??0)>(n.z??0)?((a=i[pr])==null?void 0:a.z)??0:n.z??0},r)}function HB(e,t,n){e.forEach(r=>{var i;if(r.parentNode&&!e.has(r.parentNode))throw new Error(`Parent node ${r.parentNode} not found`);if(r.parentNode||n!=null&&n[r.id]){const{x:o,y:s,z:a}=GB(r,e,{...r.position,z:((i=r[pr])==null?void 0:i.z)??0},t);r.positionAbsolute={x:o,y:s},r[pr].z=a,n!=null&&n[r.id]&&(r[pr].isParent=!0)}})}function Nx(e,t,n,r){const i=new Map,o={},s=r?1e3:0;return e.forEach(a=>{var f;const l=(Ro(a.zIndex)?a.zIndex:0)+(a.selected?s:0),u=t.get(a.id),d={width:u==null?void 0:u.width,height:u==null?void 0:u.height,...a,positionAbsolute:{x:a.position.x,y:a.position.y}};a.parentNode&&(d.parentNode=a.parentNode,o[a.parentNode]=!0),Object.defineProperty(d,pr,{enumerable:!1,value:{handleBounds:(f=u==null?void 0:u[pr])==null?void 0:f.handleBounds,z:l}}),i.set(a.id,d)}),HB(i,n,o),i}function WB(e,t={}){const{getNodes:n,width:r,height:i,minZoom:o,maxZoom:s,d3Zoom:a,d3Selection:l,fitViewOnInitDone:u,fitViewOnInit:d,nodeOrigin:f}=e(),h=t.initial&&!u&&d;if(a&&l&&(h||!t.initial)){const m=n().filter(x=>{var b;const _=t.includeHiddenNodes?x.width&&x.height:!x.hidden;return(b=t.nodes)!=null&&b.length?_&&t.nodes.some(y=>y.id===x.id):_}),v=m.every(x=>x.width&&x.height);if(m.length>0&&v){const x=CB(m,f),[_,b,y]=AB(x,r,i,t.minZoom??o,t.maxZoom??s,t.padding??.1),S=Hl.translate(_,b).scale(y);return typeof t.duration=="number"&&t.duration>0?a.transform(Vu(l,t.duration),S):a.transform(l,S),!0}}return!1}function aye(e,t){return e.forEach(n=>{const r=t.get(n.id);r&&t.set(r.id,{...r,[pr]:r[pr],selected:n.selected})}),new Map(t)}function lye(e,t){return t.map(n=>{const r=e.find(i=>i.id===n.id);return r&&(n.selected=r.selected),n})}function z0({changedNodes:e,changedEdges:t,get:n,set:r}){const{nodeInternals:i,edges:o,onNodesChange:s,onEdgesChange:a,hasDefaultNodes:l,hasDefaultEdges:u}=n();e!=null&&e.length&&(l&&r({nodeInternals:aye(e,i)}),s==null||s(e)),t!=null&&t.length&&(u&&r({edges:lye(t,o)}),a==null||a(t))}const vd=()=>{},uye={zoomIn:vd,zoomOut:vd,zoomTo:vd,getZoom:()=>1,setViewport:vd,getViewport:()=>({x:0,y:0,zoom:1}),fitView:()=>!1,setCenter:vd,fitBounds:vd,project:e=>e,viewportInitialized:!1},cye=e=>({d3Zoom:e.d3Zoom,d3Selection:e.d3Selection}),dye=()=>{const e=ii(),{d3Zoom:t,d3Selection:n}=Gn(cye,Bi);return L.useMemo(()=>n&&t?{zoomIn:i=>t.scaleBy(Vu(n,i==null?void 0:i.duration),1.2),zoomOut:i=>t.scaleBy(Vu(n,i==null?void 0:i.duration),1/1.2),zoomTo:(i,o)=>t.scaleTo(Vu(n,o==null?void 0:o.duration),i),getZoom:()=>e.getState().transform[2],setViewport:(i,o)=>{const[s,a,l]=e.getState().transform,u=Hl.translate(i.x??s,i.y??a).scale(i.zoom??l);t.transform(Vu(n,o==null?void 0:o.duration),u)},getViewport:()=>{const[i,o,s]=e.getState().transform;return{x:i,y:o,zoom:s}},fitView:i=>WB(e.getState,i),setCenter:(i,o,s)=>{const{width:a,height:l,maxZoom:u}=e.getState(),d=typeof(s==null?void 0:s.zoom)<"u"?s.zoom:u,f=a/2-i*d,h=l/2-o*d,g=Hl.translate(f,h).scale(d);t.transform(Vu(n,s==null?void 0:s.duration),g)},fitBounds:(i,o)=>{const{width:s,height:a,minZoom:l,maxZoom:u}=e.getState(),[d,f,h]=AB(i,s,a,l,u,(o==null?void 0:o.padding)??.1),g=Hl.translate(d,f).scale(h);t.transform(Vu(n,o==null?void 0:o.duration),g)},project:i=>{const{transform:o,snapToGrid:s,snapGrid:a}=e.getState();return xB(i,o,s,a)},viewportInitialized:!0}:uye,[t,n])};function qB(){const e=dye(),t=ii(),n=L.useCallback(()=>t.getState().getNodes().map(v=>({...v})),[]),r=L.useCallback(v=>t.getState().nodeInternals.get(v),[]),i=L.useCallback(()=>{const{edges:v=[]}=t.getState();return v.map(x=>({...x}))},[]),o=L.useCallback(v=>{const{edges:x=[]}=t.getState();return x.find(_=>_.id===v)},[]),s=L.useCallback(v=>{const{getNodes:x,setNodes:_,hasDefaultNodes:b,onNodesChange:y}=t.getState(),S=x(),C=typeof v=="function"?v(S):v;if(b)_(C);else if(y){const T=C.length===0?S.map(E=>({type:"remove",id:E.id})):C.map(E=>({item:E,type:"reset"}));y(T)}},[]),a=L.useCallback(v=>{const{edges:x=[],setEdges:_,hasDefaultEdges:b,onEdgesChange:y}=t.getState(),S=typeof v=="function"?v(x):v;if(b)_(S);else if(y){const C=S.length===0?x.map(T=>({type:"remove",id:T.id})):S.map(T=>({item:T,type:"reset"}));y(C)}},[]),l=L.useCallback(v=>{const x=Array.isArray(v)?v:[v],{getNodes:_,setNodes:b,hasDefaultNodes:y,onNodesChange:S}=t.getState();if(y){const T=[..._(),...x];b(T)}else if(S){const C=x.map(T=>({item:T,type:"add"}));S(C)}},[]),u=L.useCallback(v=>{const x=Array.isArray(v)?v:[v],{edges:_=[],setEdges:b,hasDefaultEdges:y,onEdgesChange:S}=t.getState();if(y)b([..._,...x]);else if(S){const C=x.map(T=>({item:T,type:"add"}));S(C)}},[]),d=L.useCallback(()=>{const{getNodes:v,edges:x=[],transform:_}=t.getState(),[b,y,S]=_;return{nodes:v().map(C=>({...C})),edges:x.map(C=>({...C})),viewport:{x:b,y,zoom:S}}},[]),f=L.useCallback(({nodes:v,edges:x})=>{const{nodeInternals:_,getNodes:b,edges:y,hasDefaultNodes:S,hasDefaultEdges:C,onNodesDelete:T,onEdgesDelete:E,onNodesChange:P,onEdgesChange:k}=t.getState(),O=(v||[]).map(N=>N.id),M=(x||[]).map(N=>N.id),V=b().reduce((N,D)=>{const U=!O.includes(D.id)&&D.parentNode&&N.find(j=>j.id===D.parentNode);return(typeof D.deletable=="boolean"?D.deletable:!0)&&(O.includes(D.id)||U)&&N.push(D),N},[]),B=y.filter(N=>typeof N.deletable=="boolean"?N.deletable:!0),A=B.filter(N=>M.includes(N.id));if(V||A){const N=EB(V,B),D=[...A,...N],U=D.reduce(($,j)=>($.includes(j.id)||$.push(j.id),$),[]);if((C||S)&&(C&&t.setState({edges:y.filter($=>!U.includes($.id))}),S&&(V.forEach($=>{_.delete($.id)}),t.setState({nodeInternals:new Map(_)}))),U.length>0&&(E==null||E(D),k&&k(U.map($=>({id:$,type:"remove"})))),V.length>0&&(T==null||T(V),P)){const $=V.map(j=>({id:j.id,type:"remove"}));P($)}}},[]),h=L.useCallback(v=>{const x=_me(v),_=x?null:t.getState().nodeInternals.get(v.id);return[x?v:QR(_),_,x]},[]),g=L.useCallback((v,x=!0,_)=>{const[b,y,S]=h(v);return b?(_||t.getState().getNodes()).filter(C=>{if(!S&&(C.id===y.id||!C.positionAbsolute))return!1;const T=QR(C),E=t5(T,b);return x&&E>0||E>=v.width*v.height}):[]},[]),m=L.useCallback((v,x,_=!0)=>{const[b]=h(v);if(!b)return!1;const y=t5(b,x);return _&&y>0||y>=v.width*v.height},[]);return L.useMemo(()=>({...e,getNodes:n,getNode:r,getEdges:i,getEdge:o,setNodes:s,setEdges:a,addNodes:l,addEdges:u,toObject:d,deleteElements:f,getIntersectingNodes:g,isNodeIntersecting:m}),[e,n,r,i,o,s,a,l,u,d,f,g,m])}var fye=({deleteKeyCode:e,multiSelectionKeyCode:t})=>{const n=ii(),{deleteElements:r}=qB(),i=Wg(e),o=Wg(t);L.useEffect(()=>{if(i){const{edges:s,getNodes:a}=n.getState(),l=a().filter(d=>d.selected),u=s.filter(d=>d.selected);r({nodes:l,edges:u}),n.setState({nodesSelectionActive:!1})}},[i]),L.useEffect(()=>{n.setState({multiSelectionActive:o})},[o])};function hye(e){const t=ii();L.useEffect(()=>{let n;const r=()=>{var o,s;if(!e.current)return;const i=uE(e.current);(i.height===0||i.width===0)&&((s=(o=t.getState()).onError)==null||s.call(o,"004",ou.error004())),t.setState({width:i.width||500,height:i.height||500})};return r(),window.addEventListener("resize",r),e.current&&(n=new ResizeObserver(()=>r()),n.observe(e.current)),()=>{window.removeEventListener("resize",r),n&&e.current&&n.unobserve(e.current)}},[])}const yE={position:"absolute",width:"100%",height:"100%",top:0,left:0},pye=(e,t)=>e.x!==t.x||e.y!==t.y||e.zoom!==t.k,Lx=e=>({x:e.x,y:e.y,zoom:e.k}),_d=(e,t)=>e.target.closest(`.${t}`),pO=(e,t)=>t===2&&Array.isArray(e)&&e.includes(2),gye=e=>({d3Zoom:e.d3Zoom,d3Selection:e.d3Selection,d3ZoomHandler:e.d3ZoomHandler,userSelectionActive:e.userSelectionActive}),mye=({onMove:e,onMoveStart:t,onMoveEnd:n,onPaneContextMenu:r,zoomOnScroll:i=!0,zoomOnPinch:o=!0,panOnScroll:s=!1,panOnScrollSpeed:a=.5,panOnScrollMode:l=gf.Free,zoomOnDoubleClick:u=!0,elementsSelectable:d,panOnDrag:f=!0,defaultViewport:h,translateExtent:g,minZoom:m,maxZoom:v,zoomActivationKeyCode:x,preventScrolling:_=!0,children:b,noWheelClassName:y,noPanClassName:S})=>{const C=L.useRef(),T=ii(),E=L.useRef(!1),P=L.useRef(!1),k=L.useRef(null),O=L.useRef({x:0,y:0,zoom:0}),{d3Zoom:M,d3Selection:V,d3ZoomHandler:B,userSelectionActive:A}=Gn(gye,Bi),N=Wg(x),D=L.useRef(0);return hye(k),L.useEffect(()=>{if(k.current){const U=k.current.getBoundingClientRect(),$=fme().scaleExtent([m,v]).translateExtent(g),j=rs(k.current).call($),G=Hl.translate(h.x,h.y).scale(Uf(h.zoom,m,v)),q=[[0,0],[U.width,U.height]],Z=$.constrain()(G,q,g);$.transform(j,Z),T.setState({d3Zoom:$,d3Selection:j,d3ZoomHandler:j.on("wheel.zoom"),transform:[Z.x,Z.y,Z.k],domNode:k.current.closest(".react-flow")})}},[]),L.useEffect(()=>{V&&M&&(s&&!N&&!A?V.on("wheel.zoom",U=>{if(_d(U,y))return!1;U.preventDefault(),U.stopImmediatePropagation();const $=V.property("__zoom").k||1;if(U.ctrlKey&&o){const Z=Rs(U),ee=-U.deltaY*(U.deltaMode===1?.05:U.deltaMode?1:.002)*10,ie=$*Math.pow(2,ee);M.scaleTo(V,ie,Z);return}const j=U.deltaMode===1?20:1,G=l===gf.Vertical?0:U.deltaX*j,q=l===gf.Horizontal?0:U.deltaY*j;M.translateBy(V,-(G/$)*a,-(q/$)*a)},{passive:!1}):typeof B<"u"&&V.on("wheel.zoom",function(U,$){if(!_||_d(U,y))return null;U.preventDefault(),B.call(this,U,$)},{passive:!1}))},[A,s,l,V,M,B,N,o,_,y]),L.useEffect(()=>{M&&M.on("start",U=>{var j;if(!U.sourceEvent)return null;D.current=U.sourceEvent.button;const{onViewportChangeStart:$}=T.getState();if(E.current=!0,((j=U.sourceEvent)==null?void 0:j.type)==="mousedown"&&T.setState({paneDragging:!0}),t||$){const G=Lx(U.transform);O.current=G,$==null||$(G),t==null||t(U.sourceEvent,G)}})},[M,t]),L.useEffect(()=>{M&&(A&&!E.current?M.on("zoom",null):A||M.on("zoom",U=>{const{onViewportChange:$}=T.getState();if(T.setState({transform:[U.transform.x,U.transform.y,U.transform.k]}),P.current=!!(r&&pO(f,D.current??0)),e||$){const j=Lx(U.transform);$==null||$(j),e==null||e(U.sourceEvent,j)}}))},[A,M,e,f,r]),L.useEffect(()=>{M&&M.on("end",U=>{if(!U.sourceEvent)return null;const{onViewportChangeEnd:$}=T.getState();if(E.current=!1,T.setState({paneDragging:!1}),r&&pO(f,D.current??0)&&!P.current&&r(U.sourceEvent),P.current=!1,(n||$)&&pye(O.current,U.transform)){const j=Lx(U.transform);O.current=j,clearTimeout(C.current),C.current=setTimeout(()=>{$==null||$(j),n==null||n(U.sourceEvent,j)},s?150:0)}})},[M,s,f,n,r]),L.useEffect(()=>{M&&M.filter(U=>{const $=N||i,j=o&&U.ctrlKey;if(U.button===1&&U.type==="mousedown"&&(_d(U,"react-flow__node")||_d(U,"react-flow__edge")))return!0;if(!f&&!$&&!s&&!u&&!o||A||!u&&U.type==="dblclick"||_d(U,y)&&U.type==="wheel"||_d(U,S)&&U.type!=="wheel"||!o&&U.ctrlKey&&U.type==="wheel"||!$&&!s&&!j&&U.type==="wheel"||!f&&(U.type==="mousedown"||U.type==="touchstart")||Array.isArray(f)&&!f.includes(U.button)&&(U.type==="mousedown"||U.type==="touchstart"))return!1;const G=Array.isArray(f)&&f.includes(U.button)||!U.button||U.button<=1;return(!U.ctrlKey||U.type==="wheel")&&G})},[A,M,i,o,s,u,f,d,N]),ue.jsx("div",{className:"react-flow__renderer",ref:k,style:yE,children:b})},yye=e=>({userSelectionActive:e.userSelectionActive,userSelectionRect:e.userSelectionRect});function vye(){const{userSelectionActive:e,userSelectionRect:t}=Gn(yye,Bi);return e&&t?ue.jsx("div",{className:"react-flow__selection react-flow__container",style:{width:t.width,height:t.height,transform:`translate(${t.x}px, ${t.y}px)`}}):null}function gO(e,t){const n=e.find(r=>r.id===t.parentNode);if(n){const r=t.position.x+t.width-n.width,i=t.position.y+t.height-n.height;if(r>0||i>0||t.position.x<0||t.position.y<0){if(n.style={...n.style},n.style.width=n.style.width??n.width,n.style.height=n.style.height??n.height,r>0&&(n.style.width+=r),i>0&&(n.style.height+=i),t.position.x<0){const o=Math.abs(t.position.x);n.position.x=n.position.x-o,n.style.width+=o,t.position.x=0}if(t.position.y<0){const o=Math.abs(t.position.y);n.position.y=n.position.y-o,n.style.height+=o,t.position.y=0}n.width=n.style.width,n.height=n.style.height}}}function KB(e,t){if(e.some(r=>r.type==="reset"))return e.filter(r=>r.type==="reset").map(r=>r.item);const n=e.filter(r=>r.type==="add").map(r=>r.item);return t.reduce((r,i)=>{const o=e.filter(a=>a.id===i.id);if(o.length===0)return r.push(i),r;const s={...i};for(const a of o)if(a)switch(a.type){case"select":{s.selected=a.selected;break}case"position":{typeof a.position<"u"&&(s.position=a.position),typeof a.positionAbsolute<"u"&&(s.positionAbsolute=a.positionAbsolute),typeof a.dragging<"u"&&(s.dragging=a.dragging),s.expandParent&&gO(r,s);break}case"dimensions":{typeof a.dimensions<"u"&&(s.width=a.dimensions.width,s.height=a.dimensions.height),typeof a.updateStyle<"u"&&(s.style={...s.style||{},...a.dimensions}),typeof a.resizing=="boolean"&&(s.resizing=a.resizing),s.expandParent&&gO(r,s);break}case"remove":return r}return r.push(s),r},n)}function XB(e,t){return KB(e,t)}function _ye(e,t){return KB(e,t)}const Cl=(e,t)=>({id:e,type:"select",selected:t});function qd(e,t){return e.reduce((n,r)=>{const i=t.includes(r.id);return!r.selected&&i?(r.selected=!0,n.push(Cl(r.id,!0))):r.selected&&!i&&(r.selected=!1,n.push(Cl(r.id,!1))),n},[])}const Dx=(e,t)=>n=>{n.target===t.current&&(e==null||e(n))},bye=e=>({userSelectionActive:e.userSelectionActive,elementsSelectable:e.elementsSelectable,dragging:e.paneDragging}),YB=L.memo(({isSelecting:e,selectionMode:t=Hg.Full,panOnDrag:n,onSelectionStart:r,onSelectionEnd:i,onPaneClick:o,onPaneContextMenu:s,onPaneScroll:a,onPaneMouseEnter:l,onPaneMouseMove:u,onPaneMouseLeave:d,children:f})=>{const h=L.useRef(null),g=ii(),m=L.useRef(0),v=L.useRef(0),x=L.useRef(),{userSelectionActive:_,elementsSelectable:b,dragging:y}=Gn(bye,Bi),S=()=>{g.setState({userSelectionActive:!1,userSelectionRect:null}),m.current=0,v.current=0},C=B=>{o==null||o(B),g.getState().resetSelectedElements(),g.setState({nodesSelectionActive:!1})},T=B=>{if(Array.isArray(n)&&(n!=null&&n.includes(2))){B.preventDefault();return}s==null||s(B)},E=a?B=>a(B):void 0,P=B=>{const{resetSelectedElements:A,domNode:N}=g.getState();if(x.current=N==null?void 0:N.getBoundingClientRect(),!b||!e||B.button!==0||B.target!==h.current||!x.current)return;const{x:D,y:U}=Wl(B,x.current);A(),g.setState({userSelectionRect:{width:0,height:0,startX:D,startY:U,x:D,y:U}}),r==null||r(B)},k=B=>{const{userSelectionRect:A,nodeInternals:N,edges:D,transform:U,onNodesChange:$,onEdgesChange:j,nodeOrigin:G,getNodes:q}=g.getState();if(!e||!x.current||!A)return;g.setState({userSelectionActive:!0,nodesSelectionActive:!1});const Z=Wl(B,x.current),ee=A.startX??0,ie=A.startY??0,se={...A,x:Z.xpe.id),fe=W.map(pe=>pe.id);if(m.current!==fe.length){m.current=fe.length;const pe=qd(le,fe);pe.length&&($==null||$(pe))}if(v.current!==ne.length){v.current=ne.length;const pe=qd(D,ne);pe.length&&(j==null||j(pe))}g.setState({userSelectionRect:se})},O=B=>{if(B.button!==0)return;const{userSelectionRect:A}=g.getState();!_&&A&&B.target===h.current&&(C==null||C(B)),g.setState({nodesSelectionActive:m.current>0}),S(),i==null||i(B)},M=B=>{_&&(g.setState({nodesSelectionActive:m.current>0}),i==null||i(B)),S()},V=b&&(e||_);return ue.jsxs("div",{className:$o(["react-flow__pane",{dragging:y,selection:e}]),onClick:V?void 0:Dx(C,h),onContextMenu:Dx(T,h),onWheel:Dx(E,h),onMouseEnter:V?void 0:l,onMouseDown:V?P:void 0,onMouseMove:V?k:u,onMouseUp:V?O:void 0,onMouseLeave:V?M:d,ref:h,style:yE,children:[f,ue.jsx(vye,{})]})});YB.displayName="Pane";const Sye=e=>{const t=e.getNodes().filter(n=>n.selected);return{...CB(t,e.nodeOrigin),transformString:`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]})`,userSelectionActive:e.userSelectionActive}};function wye({onSelectionContextMenu:e,noPanClassName:t,disableKeyboardA11y:n}){const r=ii(),{width:i,height:o,x:s,y:a,transformString:l,userSelectionActive:u}=Gn(Sye,Bi),d=jB(),f=L.useRef(null);if(L.useEffect(()=>{var m;n||(m=f.current)==null||m.focus({preventScroll:!0})},[n]),VB({nodeRef:f}),u||!i||!o)return null;const h=e?m=>{const v=r.getState().getNodes().filter(x=>x.selected);e(m,v)}:void 0,g=m=>{Object.prototype.hasOwnProperty.call(yf,m.key)&&d({x:yf[m.key].x,y:yf[m.key].y,isShiftPressed:m.shiftKey})};return ue.jsx("div",{className:$o(["react-flow__nodesselection","react-flow__container",t]),style:{transform:l},children:ue.jsx("div",{ref:f,className:"react-flow__nodesselection-rect",onContextMenu:h,tabIndex:n?void 0:-1,onKeyDown:n?void 0:g,style:{width:i,height:o,top:a,left:s}})})}var xye=L.memo(wye);const Cye=e=>e.nodesSelectionActive,QB=({children:e,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:i,onPaneContextMenu:o,onPaneScroll:s,deleteKeyCode:a,onMove:l,onMoveStart:u,onMoveEnd:d,selectionKeyCode:f,selectionOnDrag:h,selectionMode:g,onSelectionStart:m,onSelectionEnd:v,multiSelectionKeyCode:x,panActivationKeyCode:_,zoomActivationKeyCode:b,elementsSelectable:y,zoomOnScroll:S,zoomOnPinch:C,panOnScroll:T,panOnScrollSpeed:E,panOnScrollMode:P,zoomOnDoubleClick:k,panOnDrag:O,defaultViewport:M,translateExtent:V,minZoom:B,maxZoom:A,preventScrolling:N,onSelectionContextMenu:D,noWheelClassName:U,noPanClassName:$,disableKeyboardA11y:j})=>{const G=Gn(Cye),q=Wg(f),ee=Wg(_)||O,ie=q||h&&ee!==!0;return fye({deleteKeyCode:a,multiSelectionKeyCode:x}),ue.jsx(mye,{onMove:l,onMoveStart:u,onMoveEnd:d,onPaneContextMenu:o,elementsSelectable:y,zoomOnScroll:S,zoomOnPinch:C,panOnScroll:T,panOnScrollSpeed:E,panOnScrollMode:P,zoomOnDoubleClick:k,panOnDrag:!q&&ee,defaultViewport:M,translateExtent:V,minZoom:B,maxZoom:A,zoomActivationKeyCode:b,preventScrolling:N,noWheelClassName:U,noPanClassName:$,children:ue.jsxs(YB,{onSelectionStart:m,onSelectionEnd:v,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:i,onPaneContextMenu:o,onPaneScroll:s,panOnDrag:ee,isSelecting:!!ie,selectionMode:g,children:[e,G&&ue.jsx(xye,{onSelectionContextMenu:D,noPanClassName:$,disableKeyboardA11y:j})]})})};QB.displayName="FlowRenderer";var Tye=L.memo(QB);function Eye(e){return Gn(L.useCallback(n=>e?TB(n.nodeInternals,{x:0,y:0,width:n.width,height:n.height},n.transform,!0):n.getNodes(),[e]))}const Aye=e=>({nodesDraggable:e.nodesDraggable,nodesConnectable:e.nodesConnectable,nodesFocusable:e.nodesFocusable,elementsSelectable:e.elementsSelectable,updateNodeDimensions:e.updateNodeDimensions,onError:e.onError}),ZB=e=>{const{nodesDraggable:t,nodesConnectable:n,nodesFocusable:r,elementsSelectable:i,updateNodeDimensions:o,onError:s}=Gn(Aye,Bi),a=Eye(e.onlyRenderVisibleElements),l=L.useRef(),u=L.useMemo(()=>{if(typeof ResizeObserver>"u")return null;const d=new ResizeObserver(f=>{const h=f.map(g=>({id:g.target.getAttribute("data-id"),nodeElement:g.target,forceUpdate:!0}));o(h)});return l.current=d,d},[]);return L.useEffect(()=>()=>{var d;(d=l==null?void 0:l.current)==null||d.disconnect()},[]),ue.jsx("div",{className:"react-flow__nodes",style:yE,children:a.map(d=>{var C,T;let f=d.type||"default";e.nodeTypes[f]||(s==null||s("003",ou.error003(f)),f="default");const h=e.nodeTypes[f]||e.nodeTypes.default,g=!!(d.draggable||t&&typeof d.draggable>"u"),m=!!(d.selectable||i&&typeof d.selectable>"u"),v=!!(d.connectable||n&&typeof d.connectable>"u"),x=!!(d.focusable||r&&typeof d.focusable>"u"),_=e.nodeExtent?cE(d.positionAbsolute,e.nodeExtent):d.positionAbsolute,b=(_==null?void 0:_.x)??0,y=(_==null?void 0:_.y)??0,S=oye({x:b,y,width:d.width??0,height:d.height??0,origin:e.nodeOrigin});return ue.jsx(h,{id:d.id,className:d.className,style:d.style,type:f,data:d.data,sourcePosition:d.sourcePosition||Ue.Bottom,targetPosition:d.targetPosition||Ue.Top,hidden:d.hidden,xPos:b,yPos:y,xPosOrigin:S.x,yPosOrigin:S.y,selectNodesOnDrag:e.selectNodesOnDrag,onClick:e.onNodeClick,onMouseEnter:e.onNodeMouseEnter,onMouseMove:e.onNodeMouseMove,onMouseLeave:e.onNodeMouseLeave,onContextMenu:e.onNodeContextMenu,onDoubleClick:e.onNodeDoubleClick,selected:!!d.selected,isDraggable:g,isSelectable:m,isConnectable:v,isFocusable:x,resizeObserver:u,dragHandle:d.dragHandle,zIndex:((C=d[pr])==null?void 0:C.z)??0,isParent:!!((T=d[pr])!=null&&T.isParent),noDragClassName:e.noDragClassName,noPanClassName:e.noPanClassName,initialized:!!d.width&&!!d.height,rfId:e.rfId,disableKeyboardA11y:e.disableKeyboardA11y,ariaLabel:d.ariaLabel},d.id)})})};ZB.displayName="NodeRenderer";var Pye=L.memo(ZB);const Rye=[{level:0,isMaxLevel:!0,edges:[]}];function Oye(e,t,n=!1){let r=-1;const i=e.reduce((s,a)=>{var d,f;const l=Ro(a.zIndex);let u=l?a.zIndex:0;if(n){const h=t.get(a.target),g=t.get(a.source),m=a.selected||(h==null?void 0:h.selected)||(g==null?void 0:g.selected),v=Math.max(((d=g==null?void 0:g[pr])==null?void 0:d.z)||0,((f=h==null?void 0:h[pr])==null?void 0:f.z)||0,1e3);u=(l?a.zIndex:0)+(m?v:0)}return s[u]?s[u].push(a):s[u]=[a],r=u>r?u:r,s},{}),o=Object.entries(i).map(([s,a])=>{const l=+s;return{edges:a,level:l,isMaxLevel:l===r}});return o.length===0?Rye:o}function kye(e,t,n){const r=Gn(L.useCallback(i=>e?i.edges.filter(o=>{const s=t.get(o.source),a=t.get(o.target);return(s==null?void 0:s.width)&&(s==null?void 0:s.height)&&(a==null?void 0:a.width)&&(a==null?void 0:a.height)&&eye({sourcePos:s.positionAbsolute||{x:0,y:0},targetPos:a.positionAbsolute||{x:0,y:0},sourceWidth:s.width,sourceHeight:s.height,targetWidth:a.width,targetHeight:a.height,width:i.width,height:i.height,transform:i.transform})}):i.edges,[e,t]));return Oye(r,t,n)}const Iye=({color:e="none",strokeWidth:t=1})=>ue.jsx("polyline",{stroke:e,strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:t,fill:"none",points:"-5,-4 0,0 -5,4"}),Mye=({color:e="none",strokeWidth:t=1})=>ue.jsx("polyline",{stroke:e,strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:t,fill:e,points:"-5,-4 0,0 -5,4 -5,-4"}),mO={[Z1.Arrow]:Iye,[Z1.ArrowClosed]:Mye};function Nye(e){const t=ii();return L.useMemo(()=>{var i,o;return Object.prototype.hasOwnProperty.call(mO,e)?mO[e]:((o=(i=t.getState()).onError)==null||o.call(i,"009",ou.error009(e)),null)},[e])}const Lye=({id:e,type:t,color:n,width:r=12.5,height:i=12.5,markerUnits:o="strokeWidth",strokeWidth:s,orient:a="auto-start-reverse"})=>{const l=Nye(t);return l?ue.jsx("marker",{className:"react-flow__arrowhead",id:e,markerWidth:`${r}`,markerHeight:`${i}`,viewBox:"-10 -10 20 20",markerUnits:o,orient:a,refX:"0",refY:"0",children:ue.jsx(l,{color:n,strokeWidth:s})}):null},Dye=({defaultColor:e,rfId:t})=>n=>{const r=[];return n.edges.reduce((i,o)=>([o.markerStart,o.markerEnd].forEach(s=>{if(s&&typeof s=="object"){const a=i5(s,t);r.includes(a)||(i.push({id:a,color:s.color||e,...s}),r.push(a))}}),i),[]).sort((i,o)=>i.id.localeCompare(o.id))},JB=({defaultColor:e,rfId:t})=>{const n=Gn(L.useCallback(Dye({defaultColor:e,rfId:t}),[e,t]),(r,i)=>!(r.length!==i.length||r.some((o,s)=>o.id!==i[s].id)));return ue.jsx("defs",{children:n.map(r=>ue.jsx(Lye,{id:r.id,type:r.type,color:r.color,width:r.width,height:r.height,markerUnits:r.markerUnits,strokeWidth:r.strokeWidth,orient:r.orient},r.id))})};JB.displayName="MarkerDefinitions";var $ye=L.memo(JB);const Fye=e=>({nodesConnectable:e.nodesConnectable,edgesFocusable:e.edgesFocusable,edgesUpdatable:e.edgesUpdatable,elementsSelectable:e.elementsSelectable,width:e.width,height:e.height,connectionMode:e.connectionMode,nodeInternals:e.nodeInternals,onError:e.onError}),eU=({defaultMarkerColor:e,onlyRenderVisibleElements:t,elevateEdgesOnSelect:n,rfId:r,edgeTypes:i,noPanClassName:o,onEdgeUpdate:s,onEdgeContextMenu:a,onEdgeMouseEnter:l,onEdgeMouseMove:u,onEdgeMouseLeave:d,onEdgeClick:f,edgeUpdaterRadius:h,onEdgeDoubleClick:g,onEdgeUpdateStart:m,onEdgeUpdateEnd:v,children:x})=>{const{edgesFocusable:_,edgesUpdatable:b,elementsSelectable:y,width:S,height:C,connectionMode:T,nodeInternals:E,onError:P}=Gn(Fye,Bi),k=kye(t,E,n);return S?ue.jsxs(ue.Fragment,{children:[k.map(({level:O,edges:M,isMaxLevel:V})=>ue.jsxs("svg",{style:{zIndex:O},width:S,height:C,className:"react-flow__edges react-flow__container",children:[V&&ue.jsx($ye,{defaultColor:e,rfId:r}),ue.jsx("g",{children:M.map(B=>{const[A,N,D]=uO(E.get(B.source)),[U,$,j]=uO(E.get(B.target));if(!D||!j)return null;let G=B.type||"default";i[G]||(P==null||P("011",ou.error011(G)),G="default");const q=i[G]||i.default,Z=T===bc.Strict?$.target:($.target??[]).concat($.source??[]),ee=lO(N.source,B.sourceHandle),ie=lO(Z,B.targetHandle),se=(ee==null?void 0:ee.position)||Ue.Bottom,le=(ie==null?void 0:ie.position)||Ue.Top,W=!!(B.focusable||_&&typeof B.focusable>"u"),ne=typeof s<"u"&&(B.updatable||b&&typeof B.updatable>"u");if(!ee||!ie)return P==null||P("008",ou.error008(ee,B)),null;const{sourceX:fe,sourceY:pe,targetX:ve,targetY:ye}=Jme(A,ee,se,U,ie,le);return ue.jsx(q,{id:B.id,className:$o([B.className,o]),type:G,data:B.data,selected:!!B.selected,animated:!!B.animated,hidden:!!B.hidden,label:B.label,labelStyle:B.labelStyle,labelShowBg:B.labelShowBg,labelBgStyle:B.labelBgStyle,labelBgPadding:B.labelBgPadding,labelBgBorderRadius:B.labelBgBorderRadius,style:B.style,source:B.source,target:B.target,sourceHandleId:B.sourceHandle,targetHandleId:B.targetHandle,markerEnd:B.markerEnd,markerStart:B.markerStart,sourceX:fe,sourceY:pe,targetX:ve,targetY:ye,sourcePosition:se,targetPosition:le,elementsSelectable:y,onEdgeUpdate:s,onContextMenu:a,onMouseEnter:l,onMouseMove:u,onMouseLeave:d,onClick:f,edgeUpdaterRadius:h,onEdgeDoubleClick:g,onEdgeUpdateStart:m,onEdgeUpdateEnd:v,rfId:r,ariaLabel:B.ariaLabel,isFocusable:W,isUpdatable:ne,pathOptions:"pathOptions"in B?B.pathOptions:void 0,interactionWidth:B.interactionWidth},B.id)})})]},O)),x]}):null};eU.displayName="EdgeRenderer";var Bye=L.memo(eU);const Uye=e=>`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]})`;function zye({children:e}){const t=Gn(Uye);return ue.jsx("div",{className:"react-flow__viewport react-flow__container",style:{transform:t},children:e})}function Vye(e){const t=qB(),n=L.useRef(!1);L.useEffect(()=>{!n.current&&t.viewportInitialized&&e&&(setTimeout(()=>e(t),1),n.current=!0)},[e,t.viewportInitialized])}const jye={[Ue.Left]:Ue.Right,[Ue.Right]:Ue.Left,[Ue.Top]:Ue.Bottom,[Ue.Bottom]:Ue.Top},tU=({nodeId:e,handleType:t,style:n,type:r=Ol.Bezier,CustomComponent:i,connectionStatus:o})=>{var T,E,P;const{fromNode:s,handleId:a,toX:l,toY:u,connectionMode:d}=Gn(L.useCallback(k=>({fromNode:k.nodeInternals.get(e),handleId:k.connectionHandleId,toX:(k.connectionPosition.x-k.transform[0])/k.transform[2],toY:(k.connectionPosition.y-k.transform[1])/k.transform[2],connectionMode:k.connectionMode}),[e]),Bi),f=(T=s==null?void 0:s[pr])==null?void 0:T.handleBounds;let h=f==null?void 0:f[t];if(d===bc.Loose&&(h=h||(f==null?void 0:f[t==="source"?"target":"source"])),!s||!h)return null;const g=a?h.find(k=>k.id===a):h[0],m=g?g.x+g.width/2:(s.width??0)/2,v=g?g.y+g.height/2:s.height??0,x=(((E=s.positionAbsolute)==null?void 0:E.x)??0)+m,_=(((P=s.positionAbsolute)==null?void 0:P.y)??0)+v,b=g==null?void 0:g.position,y=b?jye[b]:null;if(!b||!y)return null;if(i)return ue.jsx(i,{connectionLineType:r,connectionLineStyle:n,fromNode:s,fromHandle:g,fromX:x,fromY:_,toX:l,toY:u,fromPosition:b,toPosition:y,connectionStatus:o});let S="";const C={sourceX:x,sourceY:_,sourcePosition:b,targetX:l,targetY:u,targetPosition:y};return r===Ol.Bezier?[S]=SB(C):r===Ol.Step?[S]=r5({...C,borderRadius:0}):r===Ol.SmoothStep?[S]=r5(C):r===Ol.SimpleBezier?[S]=bB(C):S=`M${x},${_} ${l},${u}`,ue.jsx("path",{d:S,fill:"none",className:"react-flow__connection-path",style:n})};tU.displayName="ConnectionLine";const Gye=e=>({nodeId:e.connectionNodeId,handleType:e.connectionHandleType,nodesConnectable:e.nodesConnectable,connectionStatus:e.connectionStatus,width:e.width,height:e.height});function Hye({containerStyle:e,style:t,type:n,component:r}){const{nodeId:i,handleType:o,nodesConnectable:s,width:a,height:l,connectionStatus:u}=Gn(Gye,Bi);return!(i&&o&&a&&s)?null:ue.jsx("svg",{style:e,width:a,height:l,className:"react-flow__edges react-flow__connectionline react-flow__container",children:ue.jsx("g",{className:$o(["react-flow__connection",u]),children:ue.jsx(tU,{nodeId:i,handleType:o,style:t,type:n,CustomComponent:r,connectionStatus:u})})})}const nU=({nodeTypes:e,edgeTypes:t,onMove:n,onMoveStart:r,onMoveEnd:i,onInit:o,onNodeClick:s,onEdgeClick:a,onNodeDoubleClick:l,onEdgeDoubleClick:u,onNodeMouseEnter:d,onNodeMouseMove:f,onNodeMouseLeave:h,onNodeContextMenu:g,onSelectionContextMenu:m,onSelectionStart:v,onSelectionEnd:x,connectionLineType:_,connectionLineStyle:b,connectionLineComponent:y,connectionLineContainerStyle:S,selectionKeyCode:C,selectionOnDrag:T,selectionMode:E,multiSelectionKeyCode:P,panActivationKeyCode:k,zoomActivationKeyCode:O,deleteKeyCode:M,onlyRenderVisibleElements:V,elementsSelectable:B,selectNodesOnDrag:A,defaultViewport:N,translateExtent:D,minZoom:U,maxZoom:$,preventScrolling:j,defaultMarkerColor:G,zoomOnScroll:q,zoomOnPinch:Z,panOnScroll:ee,panOnScrollSpeed:ie,panOnScrollMode:se,zoomOnDoubleClick:le,panOnDrag:W,onPaneClick:ne,onPaneMouseEnter:fe,onPaneMouseMove:pe,onPaneMouseLeave:ve,onPaneScroll:ye,onPaneContextMenu:Je,onEdgeUpdate:Fe,onEdgeContextMenu:Ae,onEdgeMouseEnter:vt,onEdgeMouseMove:_e,onEdgeMouseLeave:Qt,edgeUpdaterRadius:rr,onEdgeUpdateStart:qt,onEdgeUpdateEnd:ht,noDragClassName:At,noWheelClassName:un,noPanClassName:Gr,elevateEdgesOnSelect:Pr,disableKeyboardA11y:Ci,nodeOrigin:In,nodeExtent:gn,rfId:ir})=>(Vye(o),ue.jsx(Tye,{onPaneClick:ne,onPaneMouseEnter:fe,onPaneMouseMove:pe,onPaneMouseLeave:ve,onPaneContextMenu:Je,onPaneScroll:ye,deleteKeyCode:M,selectionKeyCode:C,selectionOnDrag:T,selectionMode:E,onSelectionStart:v,onSelectionEnd:x,multiSelectionKeyCode:P,panActivationKeyCode:k,zoomActivationKeyCode:O,elementsSelectable:B,onMove:n,onMoveStart:r,onMoveEnd:i,zoomOnScroll:q,zoomOnPinch:Z,zoomOnDoubleClick:le,panOnScroll:ee,panOnScrollSpeed:ie,panOnScrollMode:se,panOnDrag:W,defaultViewport:N,translateExtent:D,minZoom:U,maxZoom:$,onSelectionContextMenu:m,preventScrolling:j,noDragClassName:At,noWheelClassName:un,noPanClassName:Gr,disableKeyboardA11y:Ci,children:ue.jsxs(zye,{children:[ue.jsx(Bye,{edgeTypes:t,onEdgeClick:a,onEdgeDoubleClick:u,onEdgeUpdate:Fe,onlyRenderVisibleElements:V,onEdgeContextMenu:Ae,onEdgeMouseEnter:vt,onEdgeMouseMove:_e,onEdgeMouseLeave:Qt,onEdgeUpdateStart:qt,onEdgeUpdateEnd:ht,edgeUpdaterRadius:rr,defaultMarkerColor:G,noPanClassName:Gr,elevateEdgesOnSelect:!!Pr,disableKeyboardA11y:Ci,rfId:ir,children:ue.jsx(Hye,{style:b,type:_,component:y,containerStyle:S})}),ue.jsx("div",{className:"react-flow__edgelabel-renderer"}),ue.jsx(Pye,{nodeTypes:e,onNodeClick:s,onNodeDoubleClick:l,onNodeMouseEnter:d,onNodeMouseMove:f,onNodeMouseLeave:h,onNodeContextMenu:g,selectNodesOnDrag:A,onlyRenderVisibleElements:V,noPanClassName:Gr,noDragClassName:At,disableKeyboardA11y:Ci,nodeOrigin:In,nodeExtent:gn,rfId:ir})]})}));nU.displayName="GraphView";var Wye=L.memo(nU);const a5=[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],yl={rfId:"1",width:0,height:0,transform:[0,0,1],nodeInternals:new Map,edges:[],onNodesChange:null,onEdgesChange:null,hasDefaultNodes:!1,hasDefaultEdges:!1,d3Zoom:null,d3Selection:null,d3ZoomHandler:void 0,minZoom:.5,maxZoom:2,translateExtent:a5,nodeExtent:a5,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionNodeId:null,connectionHandleId:null,connectionHandleType:"source",connectionPosition:{x:0,y:0},connectionStatus:null,connectionMode:bc.Strict,domNode:null,paneDragging:!1,noPanClassName:"nopan",nodeOrigin:[0,0],snapGrid:[15,15],snapToGrid:!1,nodesDraggable:!0,nodesConnectable:!0,nodesFocusable:!0,edgesFocusable:!0,edgesUpdatable:!0,elementsSelectable:!0,elevateNodesOnSelect:!0,fitViewOnInit:!1,fitViewOnInitDone:!1,fitViewOnInitOptions:void 0,multiSelectionActive:!1,connectionStartHandle:null,connectionEndHandle:null,connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:"",autoPanOnConnect:!0,autoPanOnNodeDrag:!0,connectionRadius:20,onError:bme,isValidConnection:void 0},qye=()=>Ife((e,t)=>({...yl,setNodes:n=>{const{nodeInternals:r,nodeOrigin:i,elevateNodesOnSelect:o}=t();e({nodeInternals:Nx(n,r,i,o)})},getNodes:()=>Array.from(t().nodeInternals.values()),setEdges:n=>{const{defaultEdgeOptions:r={}}=t();e({edges:n.map(i=>({...r,...i}))})},setDefaultNodesAndEdges:(n,r)=>{const i=typeof n<"u",o=typeof r<"u",s=i?Nx(n,new Map,t().nodeOrigin,t().elevateNodesOnSelect):new Map;e({nodeInternals:s,edges:o?r:[],hasDefaultNodes:i,hasDefaultEdges:o})},updateNodeDimensions:n=>{const{onNodesChange:r,nodeInternals:i,fitViewOnInit:o,fitViewOnInitDone:s,fitViewOnInitOptions:a,domNode:l,nodeOrigin:u}=t(),d=l==null?void 0:l.querySelector(".react-flow__viewport");if(!d)return;const f=window.getComputedStyle(d),{m22:h}=new window.DOMMatrixReadOnly(f.transform),g=n.reduce((v,x)=>{const _=i.get(x.id);if(_){const b=uE(x.nodeElement);!!(b.width&&b.height&&(_.width!==b.width||_.height!==b.height||x.forceUpdate))&&(i.set(_.id,{..._,[pr]:{..._[pr],handleBounds:{source:dO(".source",x.nodeElement,h,u),target:dO(".target",x.nodeElement,h,u)}},...b}),v.push({id:_.id,type:"dimensions",dimensions:b}))}return v},[]);HB(i,u);const m=s||o&&!s&&WB(t,{initial:!0,...a});e({nodeInternals:new Map(i),fitViewOnInitDone:m}),(g==null?void 0:g.length)>0&&(r==null||r(g))},updateNodePositions:(n,r=!0,i=!1)=>{const{triggerNodeChanges:o}=t(),s=n.map(a=>{const l={id:a.id,type:"position",dragging:i};return r&&(l.positionAbsolute=a.positionAbsolute,l.position=a.position),l});o(s)},triggerNodeChanges:n=>{const{onNodesChange:r,nodeInternals:i,hasDefaultNodes:o,nodeOrigin:s,getNodes:a,elevateNodesOnSelect:l}=t();if(n!=null&&n.length){if(o){const u=XB(n,a()),d=Nx(u,i,s,l);e({nodeInternals:d})}r==null||r(n)}},addSelectedNodes:n=>{const{multiSelectionActive:r,edges:i,getNodes:o}=t();let s,a=null;r?s=n.map(l=>Cl(l,!0)):(s=qd(o(),n),a=qd(i,[])),z0({changedNodes:s,changedEdges:a,get:t,set:e})},addSelectedEdges:n=>{const{multiSelectionActive:r,edges:i,getNodes:o}=t();let s,a=null;r?s=n.map(l=>Cl(l,!0)):(s=qd(i,n),a=qd(o(),[])),z0({changedNodes:a,changedEdges:s,get:t,set:e})},unselectNodesAndEdges:({nodes:n,edges:r}={})=>{const{edges:i,getNodes:o}=t(),s=n||o(),a=r||i,l=s.map(d=>(d.selected=!1,Cl(d.id,!1))),u=a.map(d=>Cl(d.id,!1));z0({changedNodes:l,changedEdges:u,get:t,set:e})},setMinZoom:n=>{const{d3Zoom:r,maxZoom:i}=t();r==null||r.scaleExtent([n,i]),e({minZoom:n})},setMaxZoom:n=>{const{d3Zoom:r,minZoom:i}=t();r==null||r.scaleExtent([i,n]),e({maxZoom:n})},setTranslateExtent:n=>{var r;(r=t().d3Zoom)==null||r.translateExtent(n),e({translateExtent:n})},resetSelectedElements:()=>{const{edges:n,getNodes:r}=t(),o=r().filter(a=>a.selected).map(a=>Cl(a.id,!1)),s=n.filter(a=>a.selected).map(a=>Cl(a.id,!1));z0({changedNodes:o,changedEdges:s,get:t,set:e})},setNodeExtent:n=>{const{nodeInternals:r}=t();r.forEach(i=>{i.positionAbsolute=cE(i.position,n)}),e({nodeExtent:n,nodeInternals:new Map(r)})},panBy:n=>{const{transform:r,width:i,height:o,d3Zoom:s,d3Selection:a,translateExtent:l}=t();if(!s||!a||!n.x&&!n.y)return!1;const u=Hl.translate(r[0]+n.x,r[1]+n.y).scale(r[2]),d=[[0,0],[i,o]],f=s==null?void 0:s.constrain()(u,d,l);return s.transform(a,f),r[0]!==f.x||r[1]!==f.y||r[2]!==f.k},cancelConnection:()=>e({connectionNodeId:yl.connectionNodeId,connectionHandleId:yl.connectionHandleId,connectionHandleType:yl.connectionHandleType,connectionStatus:yl.connectionStatus,connectionStartHandle:yl.connectionStartHandle,connectionEndHandle:yl.connectionEndHandle}),reset:()=>e({...yl})})),rU=({children:e})=>{const t=L.useRef(null);return t.current||(t.current=qye()),ue.jsx(hme,{value:t.current,children:e})};rU.displayName="ReactFlowProvider";const iU=({children:e})=>L.useContext(Hb)?ue.jsx(ue.Fragment,{children:e}):ue.jsx(rU,{children:e});iU.displayName="ReactFlowWrapper";function yO(e,t){return L.useRef(null),L.useMemo(()=>t(e),[e])}const Kye={input:NB,default:o5,output:DB,group:mE},Xye={default:J1,straight:hE,step:fE,smoothstep:Wb,simplebezier:dE},Yye=[0,0],Qye=[15,15],Zye={x:0,y:0,zoom:1},Jye={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0},e0e=L.forwardRef(({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,className:i,nodeTypes:o=Kye,edgeTypes:s=Xye,onNodeClick:a,onEdgeClick:l,onInit:u,onMove:d,onMoveStart:f,onMoveEnd:h,onConnect:g,onConnectStart:m,onConnectEnd:v,onClickConnectStart:x,onClickConnectEnd:_,onNodeMouseEnter:b,onNodeMouseMove:y,onNodeMouseLeave:S,onNodeContextMenu:C,onNodeDoubleClick:T,onNodeDragStart:E,onNodeDrag:P,onNodeDragStop:k,onNodesDelete:O,onEdgesDelete:M,onSelectionChange:V,onSelectionDragStart:B,onSelectionDrag:A,onSelectionDragStop:N,onSelectionContextMenu:D,onSelectionStart:U,onSelectionEnd:$,connectionMode:j=bc.Strict,connectionLineType:G=Ol.Bezier,connectionLineStyle:q,connectionLineComponent:Z,connectionLineContainerStyle:ee,deleteKeyCode:ie="Backspace",selectionKeyCode:se="Shift",selectionOnDrag:le=!1,selectionMode:W=Hg.Full,panActivationKeyCode:ne="Space",multiSelectionKeyCode:fe="Meta",zoomActivationKeyCode:pe="Meta",snapToGrid:ve=!1,snapGrid:ye=Qye,onlyRenderVisibleElements:Je=!1,selectNodesOnDrag:Fe=!0,nodesDraggable:Ae,nodesConnectable:vt,nodesFocusable:_e,nodeOrigin:Qt=Yye,edgesFocusable:rr,edgesUpdatable:qt,elementsSelectable:ht,defaultViewport:At=Zye,minZoom:un=.5,maxZoom:Gr=2,translateExtent:Pr=a5,preventScrolling:Ci=!0,nodeExtent:In,defaultMarkerColor:gn="#b1b1b7",zoomOnScroll:ir=!0,zoomOnPinch:mn=!0,panOnScroll:Zt=!1,panOnScrollSpeed:Rr=.5,panOnScrollMode:Hr=gf.Free,zoomOnDoubleClick:si=!0,panOnDrag:Vi=!0,onPaneClick:$n,onPaneMouseEnter:ai,onPaneMouseMove:ra,onPaneMouseLeave:uo,onPaneScroll:ia,onPaneContextMenu:nn,children:Ft,onEdgeUpdate:or,onEdgeContextMenu:qn,onEdgeDoubleClick:yr,onEdgeMouseEnter:Or,onEdgeMouseMove:kr,onEdgeMouseLeave:co,onEdgeUpdateStart:Ir,onEdgeUpdateEnd:sr,edgeUpdaterRadius:ji=10,onNodesChange:bs,onEdgesChange:fo,noDragClassName:tl="nodrag",noWheelClassName:Vo="nowheel",noPanClassName:Mr="nopan",fitView:oa=!1,fitViewOptions:hh,connectOnClick:ph=!0,attributionPosition:gh,proOptions:mh,defaultEdgeOptions:jo,elevateNodesOnSelect:yh=!0,elevateEdgesOnSelect:vh=!1,disableKeyboardA11y:Gc=!1,autoPanOnConnect:_h=!0,autoPanOnNodeDrag:bh=!0,connectionRadius:Sh=20,isValidConnection:Ss,onError:wh,style:Go,id:nl,...xh},rl)=>{const Cu=yO(o,iye),Hc=yO(s,Zme),il=nl||"1";return ue.jsx("div",{...xh,style:{...Go,...Jye},ref:rl,className:$o(["react-flow",i]),"data-testid":"rf__wrapper",id:nl,children:ue.jsxs(iU,{children:[ue.jsx(Wye,{onInit:u,onMove:d,onMoveStart:f,onMoveEnd:h,onNodeClick:a,onEdgeClick:l,onNodeMouseEnter:b,onNodeMouseMove:y,onNodeMouseLeave:S,onNodeContextMenu:C,onNodeDoubleClick:T,nodeTypes:Cu,edgeTypes:Hc,connectionLineType:G,connectionLineStyle:q,connectionLineComponent:Z,connectionLineContainerStyle:ee,selectionKeyCode:se,selectionOnDrag:le,selectionMode:W,deleteKeyCode:ie,multiSelectionKeyCode:fe,panActivationKeyCode:ne,zoomActivationKeyCode:pe,onlyRenderVisibleElements:Je,selectNodesOnDrag:Fe,defaultViewport:At,translateExtent:Pr,minZoom:un,maxZoom:Gr,preventScrolling:Ci,zoomOnScroll:ir,zoomOnPinch:mn,zoomOnDoubleClick:si,panOnScroll:Zt,panOnScrollSpeed:Rr,panOnScrollMode:Hr,panOnDrag:Vi,onPaneClick:$n,onPaneMouseEnter:ai,onPaneMouseMove:ra,onPaneMouseLeave:uo,onPaneScroll:ia,onPaneContextMenu:nn,onSelectionContextMenu:D,onSelectionStart:U,onSelectionEnd:$,onEdgeUpdate:or,onEdgeContextMenu:qn,onEdgeDoubleClick:yr,onEdgeMouseEnter:Or,onEdgeMouseMove:kr,onEdgeMouseLeave:co,onEdgeUpdateStart:Ir,onEdgeUpdateEnd:sr,edgeUpdaterRadius:ji,defaultMarkerColor:gn,noDragClassName:tl,noWheelClassName:Vo,noPanClassName:Mr,elevateEdgesOnSelect:vh,rfId:il,disableKeyboardA11y:Gc,nodeOrigin:Qt,nodeExtent:In}),ue.jsx(jme,{nodes:e,edges:t,defaultNodes:n,defaultEdges:r,onConnect:g,onConnectStart:m,onConnectEnd:v,onClickConnectStart:x,onClickConnectEnd:_,nodesDraggable:Ae,nodesConnectable:vt,nodesFocusable:_e,edgesFocusable:rr,edgesUpdatable:qt,elementsSelectable:ht,elevateNodesOnSelect:yh,minZoom:un,maxZoom:Gr,nodeExtent:In,onNodesChange:bs,onEdgesChange:fo,snapToGrid:ve,snapGrid:ye,connectionMode:j,translateExtent:Pr,connectOnClick:ph,defaultEdgeOptions:jo,fitView:oa,fitViewOptions:hh,onNodesDelete:O,onEdgesDelete:M,onNodeDragStart:E,onNodeDrag:P,onNodeDragStop:k,onSelectionDrag:A,onSelectionDragStart:B,onSelectionDragStop:N,noPanClassName:Mr,nodeOrigin:Qt,rfId:il,autoPanOnConnect:_h,autoPanOnNodeDrag:bh,onError:wh,connectionRadius:Sh,isValidConnection:Ss}),ue.jsx(zme,{onSelectionChange:V}),Ft,ue.jsx(mme,{proOptions:mh,position:gh}),ue.jsx(Kme,{rfId:il,disableKeyboardA11y:Gc})]})})});e0e.displayName="ReactFlow";var oU={},qb={},Kb={};Object.defineProperty(Kb,"__esModule",{value:!0});Kb.createLogMethods=void 0;var t0e=function(){return{debug:console.debug.bind(console),error:console.error.bind(console),fatal:console.error.bind(console),info:console.info.bind(console),trace:console.debug.bind(console),warn:console.warn.bind(console)}};Kb.createLogMethods=t0e;var vE={},Xb={};Object.defineProperty(Xb,"__esModule",{value:!0});Xb.boolean=void 0;const n0e=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1"].includes(e.trim().toLowerCase());case"[object Number]":return e.valueOf()===1;case"[object Boolean]":return e.valueOf();default:return!1}};Xb.boolean=n0e;var Yb={};Object.defineProperty(Yb,"__esModule",{value:!0});Yb.isBooleanable=void 0;const r0e=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1","false","f","no","n","off","0"].includes(e.trim().toLowerCase());case"[object Number]":return[0,1].includes(e.valueOf());case"[object Boolean]":return!0;default:return!1}};Yb.isBooleanable=r0e;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.isBooleanable=e.boolean=void 0;const t=Xb;Object.defineProperty(e,"boolean",{enumerable:!0,get:function(){return t.boolean}});const n=Yb;Object.defineProperty(e,"isBooleanable",{enumerable:!0,get:function(){return n.isBooleanable}})})(vE);var vO=Object.prototype.toString,sU=function(t){var n=vO.call(t),r=n==="[object Arguments]";return r||(r=n!=="[object Array]"&&t!==null&&typeof t=="object"&&typeof t.length=="number"&&t.length>=0&&vO.call(t.callee)==="[object Function]"),r},$x,_O;function i0e(){if(_O)return $x;_O=1;var e;if(!Object.keys){var t=Object.prototype.hasOwnProperty,n=Object.prototype.toString,r=sU,i=Object.prototype.propertyIsEnumerable,o=!i.call({toString:null},"toString"),s=i.call(function(){},"prototype"),a=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],l=function(h){var g=h.constructor;return g&&g.prototype===h},u={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},d=function(){if(typeof window>"u")return!1;for(var h in window)try{if(!u["$"+h]&&t.call(window,h)&&window[h]!==null&&typeof window[h]=="object")try{l(window[h])}catch{return!0}}catch{return!0}return!1}(),f=function(h){if(typeof window>"u"||!d)return l(h);try{return l(h)}catch{return!1}};e=function(g){var m=g!==null&&typeof g=="object",v=n.call(g)==="[object Function]",x=r(g),_=m&&n.call(g)==="[object String]",b=[];if(!m&&!v&&!x)throw new TypeError("Object.keys called on a non-object");var y=s&&v;if(_&&g.length>0&&!t.call(g,0))for(var S=0;S0)for(var C=0;C"u"||!Sr?St:Sr(Uint8Array),ac={"%AggregateError%":typeof AggregateError>"u"?St:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer>"u"?St:ArrayBuffer,"%ArrayIteratorPrototype%":bd&&Sr?Sr([][Symbol.iterator]()):St,"%AsyncFromSyncIteratorPrototype%":St,"%AsyncFunction%":Id,"%AsyncGenerator%":Id,"%AsyncGeneratorFunction%":Id,"%AsyncIteratorPrototype%":Id,"%Atomics%":typeof Atomics>"u"?St:Atomics,"%BigInt%":typeof BigInt>"u"?St:BigInt,"%BigInt64Array%":typeof BigInt64Array>"u"?St:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array>"u"?St:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView>"u"?St:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":typeof Float32Array>"u"?St:Float32Array,"%Float64Array%":typeof Float64Array>"u"?St:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry>"u"?St:FinalizationRegistry,"%Function%":lU,"%GeneratorFunction%":Id,"%Int8Array%":typeof Int8Array>"u"?St:Int8Array,"%Int16Array%":typeof Int16Array>"u"?St:Int16Array,"%Int32Array%":typeof Int32Array>"u"?St:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":bd&&Sr?Sr(Sr([][Symbol.iterator]())):St,"%JSON%":typeof JSON=="object"?JSON:St,"%Map%":typeof Map>"u"?St:Map,"%MapIteratorPrototype%":typeof Map>"u"||!bd||!Sr?St:Sr(new Map()[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise>"u"?St:Promise,"%Proxy%":typeof Proxy>"u"?St:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":typeof Reflect>"u"?St:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set>"u"?St:Set,"%SetIteratorPrototype%":typeof Set>"u"||!bd||!Sr?St:Sr(new Set()[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer>"u"?St:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":bd&&Sr?Sr(""[Symbol.iterator]()):St,"%Symbol%":bd?Symbol:St,"%SyntaxError%":zf,"%ThrowTypeError%":b0e,"%TypedArray%":w0e,"%TypeError%":vf,"%Uint8Array%":typeof Uint8Array>"u"?St:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray>"u"?St:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array>"u"?St:Uint16Array,"%Uint32Array%":typeof Uint32Array>"u"?St:Uint32Array,"%URIError%":URIError,"%WeakMap%":typeof WeakMap>"u"?St:WeakMap,"%WeakRef%":typeof WeakRef>"u"?St:WeakRef,"%WeakSet%":typeof WeakSet>"u"?St:WeakSet};if(Sr)try{null.error}catch(e){var x0e=Sr(Sr(e));ac["%Error.prototype%"]=x0e}var C0e=function e(t){var n;if(t==="%AsyncFunction%")n=Bx("async function () {}");else if(t==="%GeneratorFunction%")n=Bx("function* () {}");else if(t==="%AsyncGeneratorFunction%")n=Bx("async function* () {}");else if(t==="%AsyncGenerator%"){var r=e("%AsyncGeneratorFunction%");r&&(n=r.prototype)}else if(t==="%AsyncIteratorPrototype%"){var i=e("%AsyncGenerator%");i&&Sr&&(n=Sr(i.prototype))}return ac[t]=n,n},CO={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},Lm=aU,t_=_0e,T0e=Lm.call(Function.call,Array.prototype.concat),E0e=Lm.call(Function.apply,Array.prototype.splice),TO=Lm.call(Function.call,String.prototype.replace),n_=Lm.call(Function.call,String.prototype.slice),A0e=Lm.call(Function.call,RegExp.prototype.exec),P0e=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,R0e=/\\(\\)?/g,O0e=function(t){var n=n_(t,0,1),r=n_(t,-1);if(n==="%"&&r!=="%")throw new zf("invalid intrinsic syntax, expected closing `%`");if(r==="%"&&n!=="%")throw new zf("invalid intrinsic syntax, expected opening `%`");var i=[];return TO(t,P0e,function(o,s,a,l){i[i.length]=a?TO(l,R0e,"$1"):s||o}),i},k0e=function(t,n){var r=t,i;if(t_(CO,r)&&(i=CO[r],r="%"+i[0]+"%"),t_(ac,r)){var o=ac[r];if(o===Id&&(o=C0e(r)),typeof o>"u"&&!n)throw new vf("intrinsic "+t+" exists, but is not available. Please file an issue!");return{alias:i,name:r,value:o}}throw new zf("intrinsic "+t+" does not exist!")},I0e=function(t,n){if(typeof t!="string"||t.length===0)throw new vf("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof n!="boolean")throw new vf('"allowMissing" argument must be a boolean');if(A0e(/^%?[^%]*%?$/,t)===null)throw new zf("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var r=O0e(t),i=r.length>0?r[0]:"",o=k0e("%"+i+"%",n),s=o.name,a=o.value,l=!1,u=o.alias;u&&(i=u[0],E0e(r,T0e([0,1],u)));for(var d=1,f=!0;d=r.length){var v=sc(a,h);f=!!v,f&&"get"in v&&!("originalValue"in v.get)?a=v.get:a=a[h]}else f=t_(a,h),a=a[h];f&&!l&&(ac[s]=a)}}return a},M0e=I0e,l5=M0e("%Object.defineProperty%",!0),u5=function(){if(l5)try{return l5({},"a",{value:1}),!0}catch{return!1}return!1};u5.hasArrayLengthDefineBug=function(){if(!u5())return null;try{return l5([],"length",{value:1}).length!==1}catch{return!0}};var N0e=u5,L0e=a0e,D0e=typeof Symbol=="function"&&typeof Symbol("foo")=="symbol",$0e=Object.prototype.toString,F0e=Array.prototype.concat,uU=Object.defineProperty,B0e=function(e){return typeof e=="function"&&$0e.call(e)==="[object Function]"},U0e=N0e(),cU=uU&&U0e,z0e=function(e,t,n,r){if(t in e){if(r===!0){if(e[t]===n)return}else if(!B0e(r)||!r())return}cU?uU(e,t,{configurable:!0,enumerable:!1,value:n,writable:!0}):e[t]=n},dU=function(e,t){var n=arguments.length>2?arguments[2]:{},r=L0e(t);D0e&&(r=F0e.call(r,Object.getOwnPropertySymbols(t)));for(var i=0;i":return t>e;case":<":return t=":return t>=e;case":<=":return t<=e;default:throw new Error("Unimplemented comparison operator: ".concat(n))}};eS.testComparisonRange=lve;var tS={};Object.defineProperty(tS,"__esModule",{value:!0});tS.testRange=void 0;var uve=function(e,t){return typeof e=="number"?!(et.max||e===t.max&&!t.maxInclusive):!1};tS.testRange=uve;(function(e){var t=Ze&&Ze.__assign||function(){return t=Object.assign||function(d){for(var f,h=1,g=arguments.length;h0?{path:l.path,query:new RegExp("("+l.keywords.map(function(u){return(0,fve.escapeRegexString)(u.trim())}).join("|")+")")}:{path:l.path}})};nS.highlight=pve;var rS={},vU={exports:{}};(function(e){(function(t,n){e.exports?e.exports=n():t.nearley=n()})(Ze,function(){function t(u,d,f){return this.id=++t.highestId,this.name=u,this.symbols=d,this.postprocess=f,this}t.highestId=0,t.prototype.toString=function(u){var d=typeof u>"u"?this.symbols.map(l).join(" "):this.symbols.slice(0,u).map(l).join(" ")+" ● "+this.symbols.slice(u).map(l).join(" ");return this.name+" → "+d};function n(u,d,f,h){this.rule=u,this.dot=d,this.reference=f,this.data=[],this.wantedBy=h,this.isComplete=this.dot===u.symbols.length}n.prototype.toString=function(){return"{"+this.rule.toString(this.dot)+"}, from: "+(this.reference||0)},n.prototype.nextState=function(u){var d=new n(this.rule,this.dot+1,this.reference,this.wantedBy);return d.left=this,d.right=u,d.isComplete&&(d.data=d.build(),d.right=void 0),d},n.prototype.build=function(){var u=[],d=this;do u.push(d.right.data),d=d.left;while(d.left);return u.reverse(),u},n.prototype.finish=function(){this.rule.postprocess&&(this.data=this.rule.postprocess(this.data,this.reference,s.fail))};function r(u,d){this.grammar=u,this.index=d,this.states=[],this.wants={},this.scannable=[],this.completed={}}r.prototype.process=function(u){for(var d=this.states,f=this.wants,h=this.completed,g=0;g0&&d.push(" ^ "+h+" more lines identical to this"),h=0,d.push(" "+v)),f=v}},s.prototype.getSymbolDisplay=function(u){return a(u)},s.prototype.buildFirstStateStack=function(u,d){if(d.indexOf(u)!==-1)return null;if(u.wantedBy.length===0)return[u];var f=u.wantedBy[0],h=[u].concat(d),g=this.buildFirstStateStack(f,h);return g===null?null:[u].concat(g)},s.prototype.save=function(){var u=this.table[this.current];return u.lexerState=this.lexerState,u},s.prototype.restore=function(u){var d=u.index;this.current=d,this.table[d]=u,this.table.splice(d+1),this.lexerState=u.lexerState,this.results=this.finish()},s.prototype.rewind=function(u){if(!this.options.keepHistory)throw new Error("set option `keepHistory` to enable rewinding");this.restore(this.table[u])},s.prototype.finish=function(){var u=[],d=this.grammar.start,f=this.table[this.table.length-1];return f.states.forEach(function(h){h.rule.name===d&&h.dot===h.rule.symbols.length&&h.reference===0&&h.data!==s.fail&&u.push(h)}),u.map(function(h){return h.data})};function a(u){var d=typeof u;if(d==="string")return u;if(d==="object"){if(u.literal)return JSON.stringify(u.literal);if(u instanceof RegExp)return"character matching "+u;if(u.type)return u.type+" token";if(u.test)return"token matching "+String(u.test);throw new Error("Unknown symbol type: "+u)}}function l(u){var d=typeof u;if(d==="string")return u;if(d==="object"){if(u.literal)return JSON.stringify(u.literal);if(u instanceof RegExp)return u.toString();if(u.type)return"%"+u.type;if(u.test)return"<"+String(u.test)+">";throw new Error("Unknown symbol type: "+u)}}return{Parser:s,Grammar:i,Rule:t}})})(vU);var gve=vU.exports,Sc={},_U={},mu={};mu.__esModule=void 0;mu.__esModule=!0;var mve=typeof Object.setPrototypeOf=="function",yve=typeof Object.getPrototypeOf=="function",vve=typeof Object.defineProperty=="function",_ve=typeof Object.create=="function",bve=typeof Object.prototype.hasOwnProperty=="function",Sve=function(t,n){mve?Object.setPrototypeOf(t,n):t.__proto__=n};mu.setPrototypeOf=Sve;var wve=function(t){return yve?Object.getPrototypeOf(t):t.__proto__||t.prototype};mu.getPrototypeOf=wve;var EO=!1,xve=function e(t,n,r){if(vve&&!EO)try{Object.defineProperty(t,n,r)}catch{EO=!0,e(t,n,r)}else t[n]=r.value};mu.defineProperty=xve;var bU=function(t,n){return bve?t.hasOwnProperty(t,n):t[n]===void 0};mu.hasOwnProperty=bU;var Cve=function(t,n){if(_ve)return Object.create(t,n);var r=function(){};r.prototype=t;var i=new r;if(typeof n>"u")return i;if(typeof n=="null")throw new Error("PropertyDescriptors must not be null.");if(typeof n=="object")for(var o in n)bU(n,o)&&(i[o]=n[o].value);return i};mu.objectCreate=Cve;(function(e){e.__esModule=void 0,e.__esModule=!0;var t=mu,n=t.setPrototypeOf,r=t.getPrototypeOf,i=t.defineProperty,o=t.objectCreate,s=new Error().toString()==="[object Error]",a="";function l(u){var d=this.constructor,f=d.name||function(){var x=d.toString().match(/^function\s*([^\s(]+)/);return x===null?a||"Error":x[1]}(),h=f==="Error",g=h?a:f,m=Error.apply(this,arguments);if(n(m,r(this)),!(m instanceof d)||!(m instanceof l)){var m=this;Error.apply(this,arguments),i(m,"message",{configurable:!0,enumerable:!1,value:u,writable:!0})}if(i(m,"name",{configurable:!0,enumerable:!1,value:g,writable:!0}),Error.captureStackTrace&&Error.captureStackTrace(m,h?l:d),m.stack===void 0){var v=new Error(u);v.name=m.name,m.stack=v.stack}return s&&i(m,"toString",{configurable:!0,enumerable:!1,value:function(){return(this.name||"Error")+(typeof this.message>"u"?"":": "+this.message)},writable:!0}),m}a=l.name||"ExtendableError",l.prototype=o(Error.prototype,{constructor:{value:Error,enumerable:!1,writable:!0,configurable:!0}}),e.ExtendableError=l,e.default=e.ExtendableError})(_U);var SU=Ze&&Ze.__extends||function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},e(t,n)};return function(t,n){if(typeof n!="function"&&n!==null)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(Sc,"__esModule",{value:!0});Sc.SyntaxError=Sc.LiqeError=void 0;var Tve=_U,wU=function(e){SU(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t}(Tve.ExtendableError);Sc.LiqeError=wU;var Eve=function(e){SU(t,e);function t(n,r,i,o){var s=e.call(this,n)||this;return s.message=n,s.offset=r,s.line=i,s.column=o,s}return t}(wU);Sc.SyntaxError=Eve;var SE={},r_=Ze&&Ze.__assign||function(){return r_=Object.assign||function(e){for(var t,n=1,r=arguments.length;n"}],postprocess:function(e){return e.join("")}},{name:"comparison_operator$subexpression$1",symbols:["comparison_operator$subexpression$1$string$2"]},{name:"comparison_operator$subexpression$1$string$3",symbols:[{literal:":"},{literal:"<"}],postprocess:function(e){return e.join("")}},{name:"comparison_operator$subexpression$1",symbols:["comparison_operator$subexpression$1$string$3"]},{name:"comparison_operator$subexpression$1$string$4",symbols:[{literal:":"},{literal:">"},{literal:"="}],postprocess:function(e){return e.join("")}},{name:"comparison_operator$subexpression$1",symbols:["comparison_operator$subexpression$1$string$4"]},{name:"comparison_operator$subexpression$1$string$5",symbols:[{literal:":"},{literal:"<"},{literal:"="}],postprocess:function(e){return e.join("")}},{name:"comparison_operator$subexpression$1",symbols:["comparison_operator$subexpression$1$string$5"]},{name:"comparison_operator",symbols:["comparison_operator$subexpression$1"],postprocess:function(e,t){return{location:{start:t,end:t+e[0][0].length},type:"ComparisonOperator",operator:e[0][0]}}},{name:"regex",symbols:["regex_body","regex_flags"],postprocess:function(e){return e.join("")}},{name:"regex_body$ebnf$1",symbols:[]},{name:"regex_body$ebnf$1",symbols:["regex_body$ebnf$1","regex_body_char"],postprocess:function(e){return e[0].concat([e[1]])}},{name:"regex_body",symbols:[{literal:"/"},"regex_body$ebnf$1",{literal:"/"}],postprocess:function(e){return"/"+e[1].join("")+"/"}},{name:"regex_body_char",symbols:[/[^\\]/],postprocess:ya},{name:"regex_body_char",symbols:[{literal:"\\"},/[^\\]/],postprocess:function(e){return"\\"+e[1]}},{name:"regex_flags",symbols:[]},{name:"regex_flags$ebnf$1",symbols:[/[gmiyusd]/]},{name:"regex_flags$ebnf$1",symbols:["regex_flags$ebnf$1",/[gmiyusd]/],postprocess:function(e){return e[0].concat([e[1]])}},{name:"regex_flags",symbols:["regex_flags$ebnf$1"],postprocess:function(e){return e[0].join("")}},{name:"unquoted_value$ebnf$1",symbols:[]},{name:"unquoted_value$ebnf$1",symbols:["unquoted_value$ebnf$1",/[a-zA-Z\.\-_*@#$]/],postprocess:function(e){return e[0].concat([e[1]])}},{name:"unquoted_value",symbols:[/[a-zA-Z_*@#$]/,"unquoted_value$ebnf$1"],postprocess:function(e){return e[0]+e[1].join("")}}],ParserStart:"main"};SE.default=Ave;var xU={},iS={},Fm={};Object.defineProperty(Fm,"__esModule",{value:!0});Fm.isSafePath=void 0;var Pve=/^(\.(?:[_a-zA-Z][a-zA-Z\d_]*|\0|[1-9]\d*))+$/u,Rve=function(e){return Pve.test(e)};Fm.isSafePath=Rve;Object.defineProperty(iS,"__esModule",{value:!0});iS.createGetValueFunctionBody=void 0;var Ove=Fm,kve=function(e){if(!(0,Ove.isSafePath)(e))throw new Error("Unsafe path.");var t="return subject"+e;return t.replace(/(\.(\d+))/g,".[$2]").replace(/\./g,"?.")};iS.createGetValueFunctionBody=kve;(function(e){var t=Ze&&Ze.__assign||function(){return t=Object.assign||function(o){for(var s,a=1,l=arguments.length;a\d+) col (?\d+)/,$ve=function(e){if(e.trim()==="")return{location:{end:0,start:0},type:"EmptyExpression"};var t=new TU.default.Parser(Lve),n;try{n=t.feed(e).results}catch(o){if(typeof(o==null?void 0:o.message)=="string"&&typeof(o==null?void 0:o.offset)=="number"){var r=o.message.match(Dve);throw r?new Ive.SyntaxError("Syntax error at line ".concat(r.groups.line," column ").concat(r.groups.column),o.offset,Number(r.groups.line),Number(r.groups.column)):o}throw o}if(n.length===0)throw new Error("Found no parsings.");if(n.length>1)throw new Error("Ambiguous results.");var i=(0,Nve.hydrateAst)(n[0]);return i};rS.parse=$ve;var oS={};Object.defineProperty(oS,"__esModule",{value:!0});oS.test=void 0;var Fve=Dm,Bve=function(e,t){return(0,Fve.filter)(e,[t]).length===1};oS.test=Bve;var EU={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.serialize=void 0;var t=function(o,s){return s==="double"?'"'.concat(o,'"'):s==="single"?"'".concat(o,"'"):o},n=function(o){if(o.type==="LiteralExpression")return o.quoted&&typeof o.value=="string"?t(o.value,o.quotes):String(o.value);if(o.type==="RegexExpression")return String(o.value);if(o.type==="RangeExpression"){var s=o.range,a=s.min,l=s.max,u=s.minInclusive,d=s.maxInclusive;return"".concat(u?"[":"{").concat(a," TO ").concat(l).concat(d?"]":"}")}if(o.type==="EmptyExpression")return"";throw new Error("Unexpected AST type.")},r=function(o){if(o.type!=="Tag")throw new Error("Expected a tag expression.");var s=o.field,a=o.expression,l=o.operator;if(s.type==="ImplicitField")return n(a);var u=s.quoted?t(s.name,s.quotes):s.name,d=" ".repeat(a.location.start-l.location.end);return u+l.operator+d+n(a)},i=function(o){if(o.type==="ParenthesizedExpression"){if(!("location"in o.expression))throw new Error("Expected location in expression.");if(!o.location.end)throw new Error("Expected location end.");var s=" ".repeat(o.expression.location.start-(o.location.start+1)),a=" ".repeat(o.location.end-o.expression.location.end-1);return"(".concat(s).concat((0,e.serialize)(o.expression)).concat(a,")")}if(o.type==="Tag")return r(o);if(o.type==="LogicalExpression"){var l="";return o.operator.type==="BooleanOperator"?(l+=" ".repeat(o.operator.location.start-o.left.location.end),l+=o.operator.operator,l+=" ".repeat(o.right.location.start-o.operator.location.end)):l=" ".repeat(o.right.location.start-o.left.location.end),"".concat((0,e.serialize)(o.left)).concat(l).concat((0,e.serialize)(o.right))}if(o.type==="UnaryOperator")return(o.operator==="NOT"?"NOT ":o.operator)+(0,e.serialize)(o.operand);if(o.type==="EmptyExpression")return"";throw new Error("Unexpected AST type.")};e.serialize=i})(EU);var sS={};Object.defineProperty(sS,"__esModule",{value:!0});sS.isSafeUnquotedExpression=void 0;var Uve=function(e){return/^[#$*@A-Z_a-z][#$*.@A-Z_a-z-]*$/.test(e)};sS.isSafeUnquotedExpression=Uve;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.isSafeUnquotedExpression=e.serialize=e.SyntaxError=e.LiqeError=e.test=e.parse=e.highlight=e.filter=void 0;var t=Dm;Object.defineProperty(e,"filter",{enumerable:!0,get:function(){return t.filter}});var n=nS;Object.defineProperty(e,"highlight",{enumerable:!0,get:function(){return n.highlight}});var r=rS;Object.defineProperty(e,"parse",{enumerable:!0,get:function(){return r.parse}});var i=oS;Object.defineProperty(e,"test",{enumerable:!0,get:function(){return i.test}});var o=Sc;Object.defineProperty(e,"LiqeError",{enumerable:!0,get:function(){return o.LiqeError}}),Object.defineProperty(e,"SyntaxError",{enumerable:!0,get:function(){return o.SyntaxError}});var s=EU;Object.defineProperty(e,"serialize",{enumerable:!0,get:function(){return s.serialize}});var a=sS;Object.defineProperty(e,"isSafeUnquotedExpression",{enumerable:!0,get:function(){return a.isSafeUnquotedExpression}})})(yU);var Bm={},AU={},wc={};Object.defineProperty(wc,"__esModule",{value:!0});wc.ROARR_LOG_FORMAT_VERSION=wc.ROARR_VERSION=void 0;wc.ROARR_VERSION="5.0.0";wc.ROARR_LOG_FORMAT_VERSION="2.0.0";var Um={};Object.defineProperty(Um,"__esModule",{value:!0});Um.logLevels=void 0;Um.logLevels={debug:20,error:50,fatal:60,info:30,trace:10,warn:40};var PU={},aS={};Object.defineProperty(aS,"__esModule",{value:!0});aS.hasOwnProperty=void 0;const zve=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);aS.hasOwnProperty=zve;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.hasOwnProperty=void 0;var t=aS;Object.defineProperty(e,"hasOwnProperty",{enumerable:!0,get:function(){return t.hasOwnProperty}})})(PU);var RU={},lS={},uS={};Object.defineProperty(uS,"__esModule",{value:!0});uS.tokenize=void 0;const Vve=/(?:%(?([+0-]|-\+))?(?\d+)?(?\d+\$)?(?\.\d+)?(?[%BCESb-iosux]))|(\\%)/g,jve=e=>{let t;const n=[];let r=0,i=0,o=null;for(;(t=Vve.exec(e))!==null;){t.index>i&&(o={literal:e.slice(i,t.index),type:"literal"},n.push(o));const s=t[0];i=t.index+s.length,s==="\\%"||s==="%%"?o&&o.type==="literal"?o.literal+="%":(o={literal:"%",type:"literal"},n.push(o)):t.groups&&(o={conversion:t.groups.conversion,flag:t.groups.flag||null,placeholder:s,position:t.groups.position?Number.parseInt(t.groups.position,10)-1:r++,precision:t.groups.precision?Number.parseInt(t.groups.precision.slice(1),10):null,type:"placeholder",width:t.groups.width?Number.parseInt(t.groups.width,10):null},n.push(o))}return i<=e.length-1&&(o&&o.type==="literal"?o.literal+=e.slice(i):n.push({literal:e.slice(i),type:"literal"})),n};uS.tokenize=jve;Object.defineProperty(lS,"__esModule",{value:!0});lS.createPrintf=void 0;const AO=vE,Gve=uS,Hve=(e,t)=>t.placeholder,Wve=e=>{var t;const n=(o,s,a)=>a==="-"?o.padEnd(s," "):a==="-+"?((Number(o)>=0?"+":"")+o).padEnd(s," "):a==="+"?((Number(o)>=0?"+":"")+o).padStart(s," "):a==="0"?o.padStart(s,"0"):o.padStart(s," "),r=(t=e==null?void 0:e.formatUnboundExpression)!==null&&t!==void 0?t:Hve,i={};return(o,...s)=>{let a=i[o];a||(a=i[o]=Gve.tokenize(o));let l="";for(const u of a)if(u.type==="literal")l+=u.literal;else{let d=s[u.position];if(d===void 0)l+=r(o,u,s);else if(u.conversion==="b")l+=AO.boolean(d)?"true":"false";else if(u.conversion==="B")l+=AO.boolean(d)?"TRUE":"FALSE";else if(u.conversion==="c")l+=d;else if(u.conversion==="C")l+=String(d).toUpperCase();else if(u.conversion==="i"||u.conversion==="d")d=String(Math.trunc(d)),u.width!==null&&(d=n(d,u.width,u.flag)),l+=d;else if(u.conversion==="e")l+=Number(d).toExponential();else if(u.conversion==="E")l+=Number(d).toExponential().toUpperCase();else if(u.conversion==="f")u.precision!==null&&(d=Number(d).toFixed(u.precision)),u.width!==null&&(d=n(String(d),u.width,u.flag)),l+=d;else if(u.conversion==="o")l+=(Number.parseInt(String(d),10)>>>0).toString(8);else if(u.conversion==="s")u.width!==null&&(d=n(String(d),u.width,u.flag)),l+=d;else if(u.conversion==="S")u.width!==null&&(d=n(String(d),u.width,u.flag)),l+=String(d).toUpperCase();else if(u.conversion==="u")l+=Number.parseInt(String(d),10)>>>0;else if(u.conversion==="x")d=(Number.parseInt(String(d),10)>>>0).toString(16),u.width!==null&&(d=n(String(d),u.width,u.flag)),l+=d;else throw new Error("Unknown format specifier.")}return l}};lS.createPrintf=Wve;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.printf=e.createPrintf=void 0;const t=lS;Object.defineProperty(e,"createPrintf",{enumerable:!0,get:function(){return t.createPrintf}}),e.printf=t.createPrintf()})(RU);var c5={exports:{}};(function(e,t){const{hasOwnProperty:n}=Object.prototype,r=x();r.configure=x,r.stringify=r,r.default=r,t.stringify=r,t.configure=x,e.exports=r;const i=/[\u0000-\u001f\u0022\u005c\ud800-\udfff]|[\ud800-\udbff](?![\udc00-\udfff])|(?:[^\ud800-\udbff]|^)[\udc00-\udfff]/;function o(_){return _.length<5e3&&!i.test(_)?`"${_}"`:JSON.stringify(_)}function s(_){if(_.length>200)return _.sort();for(let b=1;b<_.length;b++){const y=_[b];let S=b;for(;S!==0&&_[S-1]>y;)_[S]=_[S-1],S--;_[S]=y}return _}const a=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(Object.getPrototypeOf(new Int8Array)),Symbol.toStringTag).get;function l(_){return a.call(_)!==void 0&&_.length!==0}function u(_,b,y){_.length= 1`)}return y===void 0?1/0:y}function g(_){return _===1?"1 item":`${_} items`}function m(_){const b=new Set;for(const y of _)(typeof y=="string"||typeof y=="number")&&b.add(String(y));return b}function v(_){if(n.call(_,"strict")){const b=_.strict;if(typeof b!="boolean")throw new TypeError('The "strict" argument must be of type boolean');if(b)return y=>{let S=`Object can not safely be stringified. Received type ${typeof y}`;throw typeof y!="function"&&(S+=` (${y.toString()})`),new Error(S)}}}function x(_){_={..._};const b=v(_);b&&(_.bigint===void 0&&(_.bigint=!1),"circularValue"in _||(_.circularValue=Error));const y=d(_),S=f(_,"bigint"),C=f(_,"deterministic"),T=h(_,"maximumDepth"),E=h(_,"maximumBreadth");function P(B,A,N,D,U,$){let j=A[B];switch(typeof j=="object"&&j!==null&&typeof j.toJSON=="function"&&(j=j.toJSON(B)),j=D.call(A,B,j),typeof j){case"string":return o(j);case"object":{if(j===null)return"null";if(N.indexOf(j)!==-1)return y;let G="",q=",";const Z=$;if(Array.isArray(j)){if(j.length===0)return"[]";if(TE){const ve=j.length-E-1;G+=`${q}"... ${g(ve)} not stringified"`}return U!==""&&(G+=` +${Z}`),N.pop(),`[${G}]`}let ee=Object.keys(j);const ie=ee.length;if(ie===0)return"{}";if(TE){const ne=ie-E;G+=`${le}"...":${se}"${g(ne)} not stringified"`,le=q}return U!==""&&le.length>1&&(G=` +${$}${G} +${Z}`),N.pop(),`{${G}}`}case"number":return isFinite(j)?String(j):b?b(j):"null";case"boolean":return j===!0?"true":"false";case"undefined":return;case"bigint":if(S)return String(j);default:return b?b(j):void 0}}function k(B,A,N,D,U,$){switch(typeof A=="object"&&A!==null&&typeof A.toJSON=="function"&&(A=A.toJSON(B)),typeof A){case"string":return o(A);case"object":{if(A===null)return"null";if(N.indexOf(A)!==-1)return y;const j=$;let G="",q=",";if(Array.isArray(A)){if(A.length===0)return"[]";if(TE){const W=A.length-E-1;G+=`${q}"... ${g(W)} not stringified"`}return U!==""&&(G+=` +${j}`),N.pop(),`[${G}]`}N.push(A);let Z="";U!==""&&($+=U,q=`, +${$}`,Z=" ");let ee="";for(const ie of D){const se=k(ie,A[ie],N,D,U,$);se!==void 0&&(G+=`${ee}${o(ie)}:${Z}${se}`,ee=q)}return U!==""&&ee.length>1&&(G=` +${$}${G} +${j}`),N.pop(),`{${G}}`}case"number":return isFinite(A)?String(A):b?b(A):"null";case"boolean":return A===!0?"true":"false";case"undefined":return;case"bigint":if(S)return String(A);default:return b?b(A):void 0}}function O(B,A,N,D,U){switch(typeof A){case"string":return o(A);case"object":{if(A===null)return"null";if(typeof A.toJSON=="function"){if(A=A.toJSON(B),typeof A!="object")return O(B,A,N,D,U);if(A===null)return"null"}if(N.indexOf(A)!==-1)return y;const $=U;if(Array.isArray(A)){if(A.length===0)return"[]";if(TE){const pe=A.length-E-1;se+=`${le}"... ${g(pe)} not stringified"`}return se+=` +${$}`,N.pop(),`[${se}]`}let j=Object.keys(A);const G=j.length;if(G===0)return"{}";if(TE){const se=G-E;Z+=`${ee}"...": "${g(se)} not stringified"`,ee=q}return ee!==""&&(Z=` +${U}${Z} +${$}`),N.pop(),`{${Z}}`}case"number":return isFinite(A)?String(A):b?b(A):"null";case"boolean":return A===!0?"true":"false";case"undefined":return;case"bigint":if(S)return String(A);default:return b?b(A):void 0}}function M(B,A,N){switch(typeof A){case"string":return o(A);case"object":{if(A===null)return"null";if(typeof A.toJSON=="function"){if(A=A.toJSON(B),typeof A!="object")return M(B,A,N);if(A===null)return"null"}if(N.indexOf(A)!==-1)return y;let D="";if(Array.isArray(A)){if(A.length===0)return"[]";if(TE){const ie=A.length-E-1;D+=`,"... ${g(ie)} not stringified"`}return N.pop(),`[${D}]`}let U=Object.keys(A);const $=U.length;if($===0)return"{}";if(TE){const q=$-E;D+=`${j}"...":"${g(q)} not stringified"`}return N.pop(),`{${D}}`}case"number":return isFinite(A)?String(A):b?b(A):"null";case"boolean":return A===!0?"true":"false";case"undefined":return;case"bigint":if(S)return String(A);default:return b?b(A):void 0}}function V(B,A,N){if(arguments.length>1){let D="";if(typeof N=="number"?D=" ".repeat(Math.min(N,10)):typeof N=="string"&&(D=N.slice(0,10)),A!=null){if(typeof A=="function")return P("",{"":B},[],A,D,"");if(Array.isArray(A))return k("",B,[],m(A),D,"")}if(D.length!==0)return O("",B,[],D,"")}return M("",B,[])}return V}})(c5,c5.exports);var qve=c5.exports;(function(e){var t=Ze&&Ze.__importDefault||function(y){return y&&y.__esModule?y:{default:y}};Object.defineProperty(e,"__esModule",{value:!0}),e.createLogger=void 0;const n=wc,r=Um,i=PU,o=RU,s=t(_E),a=t(qve);let l=!1;const u=(0,s.default)(),d=()=>u.ROARR,f=()=>({messageContext:{},transforms:[]}),h=()=>{const y=d().asyncLocalStorage;if(!y)throw new Error("AsyncLocalContext is unavailable.");const S=y.getStore();return S||f()},g=()=>!!d().asyncLocalStorage,m=()=>{if(g()){const y=h();return(0,i.hasOwnProperty)(y,"sequenceRoot")&&(0,i.hasOwnProperty)(y,"sequence")&&typeof y.sequence=="number"?String(y.sequenceRoot)+"."+String(y.sequence++):String(d().sequence++)}return String(d().sequence++)},v=(y,S)=>(C,T,E,P,k,O,M,V,B,A)=>{y.child({logLevel:S})(C,T,E,P,k,O,M,V,B,A)},x=1e3,_=(y,S)=>(C,T,E,P,k,O,M,V,B,A)=>{const N=(0,a.default)({a:C,b:T,c:E,d:P,e:k,f:O,g:M,h:V,i:B,j:A,logLevel:S});if(!N)throw new Error("Expected key to be a string");const D=d().onceLog;D.has(N)||(D.add(N),D.size>x&&D.clear(),y.child({logLevel:S})(C,T,E,P,k,O,M,V,B,A))},b=(y,S={},C=[])=>{const T=(E,P,k,O,M,V,B,A,N,D)=>{const U=Date.now(),$=m();let j;g()?j=h():j=f();let G,q;if(typeof E=="string"?G={...j.messageContext,...S}:G={...j.messageContext,...S,...E},typeof E=="string"&&P===void 0)q=E;else if(typeof E=="string"){if(!E.includes("%"))throw new Error("When a string parameter is followed by other arguments, then it is assumed that you are attempting to format a message using printf syntax. You either forgot to add printf bindings or if you meant to add context to the log message, pass them in an object as the first parameter.");q=(0,o.printf)(E,P,k,O,M,V,B,A,N,D)}else{let ee=P;if(typeof P!="string")if(P===void 0)ee="";else throw new TypeError("Message must be a string. Received "+typeof P+".");q=(0,o.printf)(ee,k,O,M,V,B,A,N,D)}let Z={context:G,message:q,sequence:$,time:U,version:n.ROARR_LOG_FORMAT_VERSION};for(const ee of[...j.transforms,...C])if(Z=ee(Z),typeof Z!="object"||Z===null)throw new Error("Message transform function must return a message object.");y(Z)};return T.child=E=>{let P;return g()?P=h():P=f(),typeof E=="function"?(0,e.createLogger)(y,{...P.messageContext,...S,...E},[E,...C]):(0,e.createLogger)(y,{...P.messageContext,...S,...E},C)},T.getContext=()=>{let E;return g()?E=h():E=f(),{...E.messageContext,...S}},T.adopt=async(E,P)=>{if(!g())return l===!1&&(l=!0,y({context:{logLevel:r.logLevels.warn,package:"roarr"},message:"async_hooks are unavailable; Roarr.adopt will not function as expected",sequence:m(),time:Date.now(),version:n.ROARR_LOG_FORMAT_VERSION})),E();const k=h();let O;(0,i.hasOwnProperty)(k,"sequenceRoot")&&(0,i.hasOwnProperty)(k,"sequence")&&typeof k.sequence=="number"?O=k.sequenceRoot+"."+String(k.sequence++):O=String(d().sequence++);let M={...k.messageContext};const V=[...k.transforms];typeof P=="function"?V.push(P):M={...M,...P};const B=d().asyncLocalStorage;if(!B)throw new Error("Async local context unavailable.");return B.run({messageContext:M,sequence:0,sequenceRoot:O,transforms:V},()=>E())},T.debug=v(T,r.logLevels.debug),T.debugOnce=_(T,r.logLevels.debug),T.error=v(T,r.logLevels.error),T.errorOnce=_(T,r.logLevels.error),T.fatal=v(T,r.logLevels.fatal),T.fatalOnce=_(T,r.logLevels.fatal),T.info=v(T,r.logLevels.info),T.infoOnce=_(T,r.logLevels.info),T.trace=v(T,r.logLevels.trace),T.traceOnce=_(T,r.logLevels.trace),T.warn=v(T,r.logLevels.warn),T.warnOnce=_(T,r.logLevels.warn),T};e.createLogger=b})(AU);var cS={},Kve=function(t,n){for(var r=t.split("."),i=n.split("."),o=0;o<3;o++){var s=Number(r[o]),a=Number(i[o]);if(s>a)return 1;if(a>s)return-1;if(!isNaN(s)&&isNaN(a))return 1;if(isNaN(s)&&!isNaN(a))return-1}return 0},Xve=Ze&&Ze.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(cS,"__esModule",{value:!0});cS.createRoarrInitialGlobalStateBrowser=void 0;const PO=wc,RO=Xve(Kve),Yve=e=>{const t=(e.versions||[]).concat();return t.length>1&&t.sort(RO.default),t.includes(PO.ROARR_VERSION)||t.push(PO.ROARR_VERSION),t.sort(RO.default),{sequence:0,...e,versions:t}};cS.createRoarrInitialGlobalStateBrowser=Yve;var dS={};Object.defineProperty(dS,"__esModule",{value:!0});dS.getLogLevelName=void 0;const Qve=e=>e<=10?"trace":e<=20?"debug":e<=30?"info":e<=40?"warn":e<=50?"error":"fatal";dS.getLogLevelName=Qve;(function(e){var t=Ze&&Ze.__importDefault||function(f){return f&&f.__esModule?f:{default:f}};Object.defineProperty(e,"__esModule",{value:!0}),e.getLogLevelName=e.logLevels=e.Roarr=e.ROARR=void 0;const n=AU,r=cS,o=(0,t(_E).default)(),s=(0,r.createRoarrInitialGlobalStateBrowser)(o.ROARR||{});e.ROARR=s,o.ROARR=s;const a=f=>JSON.stringify(f),l=(0,n.createLogger)(f=>{var h;s.write&&s.write(((h=s.serializeMessage)!==null&&h!==void 0?h:a)(f))});e.Roarr=l;var u=Um;Object.defineProperty(e,"logLevels",{enumerable:!0,get:function(){return u.logLevels}});var d=dS;Object.defineProperty(e,"getLogLevelName",{enumerable:!0,get:function(){return d.getLogLevelName}})})(Bm);var Zve=Ze&&Ze.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(e);i0?g("%c ".concat(h," %c").concat(d?" [".concat(String(d),"]:"):"","%c ").concat(a.message," %O"),v,x,_,f):g("%c ".concat(h," %c").concat(d?" [".concat(String(d),"]:"):"","%c ").concat(a.message),v,x,_)}}};qb.createLogWriter=a1e;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.createLogWriter=void 0;var t=qb;Object.defineProperty(e,"createLogWriter",{enumerable:!0,get:function(){return t.createLogWriter}})})(oU);Bm.ROARR.write=oU.createLogWriter();const kU={};Bm.Roarr.child(kU);const fS=Om(Bm.Roarr.child(kU)),ke=e=>fS.get().child({namespace:e}),o7e=["trace","debug","info","warn","error","fatal"],s7e={trace:10,debug:20,info:30,warn:40,error:50,fatal:60};function l1e(){const e=[];return function(t,n){if(typeof n!="object"||n===null)return n;for(;e.length>0&&e.at(-1)!==this;)e.pop();return e.includes(n)?"[Circular]":(e.push(n),n)}}const qg=Jl("nodes/receivedOpenAPISchema",async(e,{dispatch:t,rejectWithValue:n})=>{const r=ke("system");try{const o=await(await fetch("openapi.json")).json();return r.info({openAPISchema:o},"Received OpenAPI schema"),JSON.parse(JSON.stringify(o,l1e()))}catch(i){return n({error:i})}}),IU={nodes:[],edges:[],schema:null,invocationTemplates:{},connectionStartParams:null,shouldShowGraphOverlay:!1,shouldShowFieldTypeLegend:!1,shouldShowMinimapPanel:!0,editorInstance:void 0,progressNodeSize:{width:512,height:512}},MU=An({name:"nodes",initialState:IU,reducers:{nodesChanged:(e,t)=>{e.nodes=XB(t.payload,e.nodes)},nodeAdded:(e,t)=>{e.nodes.push(t.payload)},edgesChanged:(e,t)=>{e.edges=_ye(t.payload,e.edges)},connectionStarted:(e,t)=>{e.connectionStartParams=t.payload},connectionMade:(e,t)=>{e.edges=wB(t.payload,e.edges)},connectionEnded:e=>{e.connectionStartParams=null},fieldValueChanged:(e,t)=>{var a,l,u;const{nodeId:n,fieldName:r,value:i}=t.payload,o=e.nodes.findIndex(d=>d.id===n),s=(u=(l=(a=e.nodes)==null?void 0:a[o])==null?void 0:l.data)==null?void 0:u.inputs[r];s&&o>-1&&(s.value=i)},imageCollectionFieldValueChanged:(e,t)=>{var l,u,d;const{nodeId:n,fieldName:r,value:i}=t.payload,o=e.nodes.findIndex(f=>f.id===n);if(o===-1)return;const s=(d=(u=(l=e.nodes)==null?void 0:l[o])==null?void 0:u.data)==null?void 0:d.inputs[r];if(!s)return;const a=Qr(s.value);if(!a){s.value=i;return}s.value=wle(a.concat(i),"image_name")},shouldShowGraphOverlayChanged:(e,t)=>{e.shouldShowGraphOverlay=t.payload},shouldShowFieldTypeLegendChanged:(e,t)=>{e.shouldShowFieldTypeLegend=t.payload},shouldShowMinimapPanelChanged:(e,t)=>{e.shouldShowMinimapPanel=t.payload},nodeTemplatesBuilt:(e,t)=>{e.invocationTemplates=t.payload},nodeEditorReset:e=>{e.nodes=[],e.edges=[]},setEditorInstance:(e,t)=>{e.editorInstance=t.payload},loadFileNodes:(e,t)=>{e.nodes=t.payload},loadFileEdges:(e,t)=>{e.edges=t.payload},setProgressNodeSize:(e,t)=>{e.progressNodeSize=t.payload}},extraReducers:e=>{e.addCase(qg.fulfilled,(t,n)=>{t.schema=n.payload})}}),{nodesChanged:a7e,edgesChanged:l7e,nodeAdded:u7e,fieldValueChanged:NU,connectionMade:c7e,connectionStarted:d7e,connectionEnded:f7e,shouldShowGraphOverlayChanged:h7e,shouldShowFieldTypeLegendChanged:p7e,shouldShowMinimapPanelChanged:g7e,nodeTemplatesBuilt:wE,nodeEditorReset:xE,imageCollectionFieldValueChanged:m7e,setEditorInstance:y7e,loadFileNodes:v7e,loadFileEdges:_7e,setProgressNodeSize:b7e}=MU.actions,u1e=MU.reducer,LU={esrganModelName:"RealESRGAN_x4plus.pth"},DU=An({name:"postprocessing",initialState:LU,reducers:{esrganModelNameChanged:(e,t)=>{e.esrganModelName=t.payload}}}),{esrganModelNameChanged:S7e}=DU.actions,c1e=DU.reducer,d1e={positiveStylePrompt:"",negativeStylePrompt:"",shouldConcatSDXLStylePrompt:!0,shouldUseSDXLRefiner:!1,sdxlImg2ImgDenoisingStrength:.7,refinerModel:null,refinerSteps:20,refinerCFGScale:7.5,refinerScheduler:"euler",refinerPositiveAestheticScore:6,refinerNegativeAestheticScore:2.5,refinerStart:.7},$U=An({name:"sdxl",initialState:d1e,reducers:{setPositiveStylePromptSDXL:(e,t)=>{e.positiveStylePrompt=t.payload},setNegativeStylePromptSDXL:(e,t)=>{e.negativeStylePrompt=t.payload},setShouldConcatSDXLStylePrompt:(e,t)=>{e.shouldConcatSDXLStylePrompt=t.payload},setShouldUseSDXLRefiner:(e,t)=>{e.shouldUseSDXLRefiner=t.payload},setSDXLImg2ImgDenoisingStrength:(e,t)=>{e.sdxlImg2ImgDenoisingStrength=t.payload},refinerModelChanged:(e,t)=>{e.refinerModel=t.payload},setRefinerSteps:(e,t)=>{e.refinerSteps=t.payload},setRefinerCFGScale:(e,t)=>{e.refinerCFGScale=t.payload},setRefinerScheduler:(e,t)=>{e.refinerScheduler=t.payload},setRefinerPositiveAestheticScore:(e,t)=>{e.refinerPositiveAestheticScore=t.payload},setRefinerNegativeAestheticScore:(e,t)=>{e.refinerNegativeAestheticScore=t.payload},setRefinerStart:(e,t)=>{e.refinerStart=t.payload}}}),{setPositiveStylePromptSDXL:w7e,setNegativeStylePromptSDXL:x7e,setShouldConcatSDXLStylePrompt:C7e,setShouldUseSDXLRefiner:f1e,setSDXLImg2ImgDenoisingStrength:T7e,refinerModelChanged:kO,setRefinerSteps:E7e,setRefinerCFGScale:A7e,setRefinerScheduler:P7e,setRefinerPositiveAestheticScore:R7e,setRefinerNegativeAestheticScore:O7e,setRefinerStart:k7e}=$U.actions,h1e=$U.reducer,zm=Me("app/userInvoked"),p1e={type:"logger",log(e){this.output("log",e)},warn(e){this.output("warn",e)},error(e){this.output("error",e)},output(e,t){console&&console[e]&&console[e].apply(console,t)}};class i_{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.init(t,n)}init(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.prefix=n.prefix||"i18next:",this.logger=t||p1e,this.options=n,this.debug=n.debug}log(){for(var t=arguments.length,n=new Array(t),r=0;r{this.observers[r]=this.observers[r]||[],this.observers[r].push(n)}),this}off(t,n){if(this.observers[t]){if(!n){delete this.observers[t];return}this.observers[t]=this.observers[t].filter(r=>r!==n)}}emit(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;i{s(...r)}),this.observers["*"]&&[].concat(this.observers["*"]).forEach(s=>{s.apply(s,[t,...r])})}}function cp(){let e,t;const n=new Promise((r,i)=>{e=r,t=i});return n.resolve=e,n.reject=t,n}function IO(e){return e==null?"":""+e}function g1e(e,t,n){e.forEach(r=>{t[r]&&(n[r]=t[r])})}function CE(e,t,n){function r(s){return s&&s.indexOf("###")>-1?s.replace(/###/g,"."):s}function i(){return!e||typeof e=="string"}const o=typeof t!="string"?[].concat(t):t.split(".");for(;o.length>1;){if(i())return{};const s=r(o.shift());!e[s]&&n&&(e[s]=new n),Object.prototype.hasOwnProperty.call(e,s)?e=e[s]:e={}}return i()?{}:{obj:e,k:r(o.shift())}}function MO(e,t,n){const{obj:r,k:i}=CE(e,t,Object);r[i]=n}function m1e(e,t,n,r){const{obj:i,k:o}=CE(e,t,Object);i[o]=i[o]||[],r&&(i[o]=i[o].concat(n)),r||i[o].push(n)}function o_(e,t){const{obj:n,k:r}=CE(e,t);if(n)return n[r]}function y1e(e,t,n){const r=o_(e,n);return r!==void 0?r:o_(t,n)}function FU(e,t,n){for(const r in t)r!=="__proto__"&&r!=="constructor"&&(r in e?typeof e[r]=="string"||e[r]instanceof String||typeof t[r]=="string"||t[r]instanceof String?n&&(e[r]=t[r]):FU(e[r],t[r],n):e[r]=t[r]);return e}function Sd(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}var v1e={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};function _1e(e){return typeof e=="string"?e.replace(/[&<>"'\/]/g,t=>v1e[t]):e}const b1e=[" ",",","?","!",";"];function S1e(e,t,n){t=t||"",n=n||"";const r=b1e.filter(s=>t.indexOf(s)<0&&n.indexOf(s)<0);if(r.length===0)return!0;const i=new RegExp(`(${r.map(s=>s==="?"?"\\?":s).join("|")})`);let o=!i.test(e);if(!o){const s=e.indexOf(n);s>0&&!i.test(e.substring(0,s))&&(o=!0)}return o}function s_(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:".";if(!e)return;if(e[t])return e[t];const r=t.split(n);let i=e;for(let o=0;oo+s;)s++,a=r.slice(o,o+s).join(n),l=i[a];if(l===void 0)return;if(l===null)return null;if(t.endsWith(a)){if(typeof l=="string")return l;if(a&&typeof l[a]=="string")return l[a]}const u=r.slice(o+s).join(n);return u?s_(l,u,n):void 0}i=i[r[o]]}return i}function a_(e){return e&&e.indexOf("_")>0?e.replace("_","-"):e}class NO extends hS{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{ns:["translation"],defaultNS:"translation"};super(),this.data=t||{},this.options=n,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.options.ignoreJSONStructure===void 0&&(this.options.ignoreJSONStructure=!0)}addNamespaces(t){this.options.ns.indexOf(t)<0&&this.options.ns.push(t)}removeNamespaces(t){const n=this.options.ns.indexOf(t);n>-1&&this.options.ns.splice(n,1)}getResource(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};const o=i.keySeparator!==void 0?i.keySeparator:this.options.keySeparator,s=i.ignoreJSONStructure!==void 0?i.ignoreJSONStructure:this.options.ignoreJSONStructure;let a=[t,n];r&&typeof r!="string"&&(a=a.concat(r)),r&&typeof r=="string"&&(a=a.concat(o?r.split(o):r)),t.indexOf(".")>-1&&(a=t.split("."));const l=o_(this.data,a);return l||!s||typeof r!="string"?l:s_(this.data&&this.data[t]&&this.data[t][n],r,o)}addResource(t,n,r,i){let o=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{silent:!1};const s=o.keySeparator!==void 0?o.keySeparator:this.options.keySeparator;let a=[t,n];r&&(a=a.concat(s?r.split(s):r)),t.indexOf(".")>-1&&(a=t.split("."),i=n,n=a[1]),this.addNamespaces(n),MO(this.data,a,i),o.silent||this.emit("added",t,n,r,i)}addResources(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{silent:!1};for(const o in r)(typeof r[o]=="string"||Object.prototype.toString.apply(r[o])==="[object Array]")&&this.addResource(t,n,o,r[o],{silent:!0});i.silent||this.emit("added",t,n,r)}addResourceBundle(t,n,r,i,o){let s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{silent:!1},a=[t,n];t.indexOf(".")>-1&&(a=t.split("."),i=r,r=n,n=a[1]),this.addNamespaces(n);let l=o_(this.data,a)||{};i?FU(l,r,o):l={...l,...r},MO(this.data,a,l),s.silent||this.emit("added",t,n,r)}removeResourceBundle(t,n){this.hasResourceBundle(t,n)&&delete this.data[t][n],this.removeNamespaces(n),this.emit("removed",t,n)}hasResourceBundle(t,n){return this.getResource(t,n)!==void 0}getResourceBundle(t,n){return n||(n=this.options.defaultNS),this.options.compatibilityAPI==="v1"?{...this.getResource(t,n)}:this.getResource(t,n)}getDataByLanguage(t){return this.data[t]}hasLanguageSomeTranslations(t){const n=this.getDataByLanguage(t);return!!(n&&Object.keys(n)||[]).find(i=>n[i]&&Object.keys(n[i]).length>0)}toJSON(){return this.data}}var BU={processors:{},addPostProcessor(e){this.processors[e.name]=e},handle(e,t,n,r,i){return e.forEach(o=>{this.processors[o]&&(t=this.processors[o].process(t,n,r,i))}),t}};const LO={};class l_ extends hS{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(),g1e(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],t,this),this.options=n,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.logger=Bs.create("translator")}changeLanguage(t){t&&(this.language=t)}exists(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}};if(t==null)return!1;const r=this.resolve(t,n);return r&&r.res!==void 0}extractFromKey(t,n){let r=n.nsSeparator!==void 0?n.nsSeparator:this.options.nsSeparator;r===void 0&&(r=":");const i=n.keySeparator!==void 0?n.keySeparator:this.options.keySeparator;let o=n.ns||this.options.defaultNS||[];const s=r&&t.indexOf(r)>-1,a=!this.options.userDefinedKeySeparator&&!n.keySeparator&&!this.options.userDefinedNsSeparator&&!n.nsSeparator&&!S1e(t,r,i);if(s&&!a){const l=t.match(this.interpolator.nestingRegexp);if(l&&l.length>0)return{key:t,namespaces:o};const u=t.split(r);(r!==i||r===i&&this.options.ns.indexOf(u[0])>-1)&&(o=u.shift()),t=u.join(i)}return typeof o=="string"&&(o=[o]),{key:t,namespaces:o}}translate(t,n,r){if(typeof n!="object"&&this.options.overloadTranslationOptionHandler&&(n=this.options.overloadTranslationOptionHandler(arguments)),typeof n=="object"&&(n={...n}),n||(n={}),t==null)return"";Array.isArray(t)||(t=[String(t)]);const i=n.returnDetails!==void 0?n.returnDetails:this.options.returnDetails,o=n.keySeparator!==void 0?n.keySeparator:this.options.keySeparator,{key:s,namespaces:a}=this.extractFromKey(t[t.length-1],n),l=a[a.length-1],u=n.lng||this.language,d=n.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(u&&u.toLowerCase()==="cimode"){if(d){const S=n.nsSeparator||this.options.nsSeparator;return i?{res:`${l}${S}${s}`,usedKey:s,exactUsedKey:s,usedLng:u,usedNS:l}:`${l}${S}${s}`}return i?{res:s,usedKey:s,exactUsedKey:s,usedLng:u,usedNS:l}:s}const f=this.resolve(t,n);let h=f&&f.res;const g=f&&f.usedKey||s,m=f&&f.exactUsedKey||s,v=Object.prototype.toString.apply(h),x=["[object Number]","[object Function]","[object RegExp]"],_=n.joinArrays!==void 0?n.joinArrays:this.options.joinArrays,b=!this.i18nFormat||this.i18nFormat.handleAsObject;if(b&&h&&(typeof h!="string"&&typeof h!="boolean"&&typeof h!="number")&&x.indexOf(v)<0&&!(typeof _=="string"&&v==="[object Array]")){if(!n.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");const S=this.options.returnedObjectHandler?this.options.returnedObjectHandler(g,h,{...n,ns:a}):`key '${s} (${this.language})' returned an object instead of string.`;return i?(f.res=S,f):S}if(o){const S=v==="[object Array]",C=S?[]:{},T=S?m:g;for(const E in h)if(Object.prototype.hasOwnProperty.call(h,E)){const P=`${T}${o}${E}`;C[E]=this.translate(P,{...n,joinArrays:!1,ns:a}),C[E]===P&&(C[E]=h[E])}h=C}}else if(b&&typeof _=="string"&&v==="[object Array]")h=h.join(_),h&&(h=this.extendTranslation(h,t,n,r));else{let S=!1,C=!1;const T=n.count!==void 0&&typeof n.count!="string",E=l_.hasDefaultValue(n),P=T?this.pluralResolver.getSuffix(u,n.count,n):"",k=n.ordinal&&T?this.pluralResolver.getSuffix(u,n.count,{ordinal:!1}):"",O=n[`defaultValue${P}`]||n[`defaultValue${k}`]||n.defaultValue;!this.isValidLookup(h)&&E&&(S=!0,h=O),this.isValidLookup(h)||(C=!0,h=s);const V=(n.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&C?void 0:h,B=E&&O!==h&&this.options.updateMissing;if(C||S||B){if(this.logger.log(B?"updateKey":"missingKey",u,l,s,B?O:h),o){const U=this.resolve(s,{...n,keySeparator:!1});U&&U.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}let A=[];const N=this.languageUtils.getFallbackCodes(this.options.fallbackLng,n.lng||this.language);if(this.options.saveMissingTo==="fallback"&&N&&N[0])for(let U=0;U{const G=E&&j!==h?j:V;this.options.missingKeyHandler?this.options.missingKeyHandler(U,l,$,G,B,n):this.backendConnector&&this.backendConnector.saveMissing&&this.backendConnector.saveMissing(U,l,$,G,B,n),this.emit("missingKey",U,l,$,h)};this.options.saveMissing&&(this.options.saveMissingPlurals&&T?A.forEach(U=>{this.pluralResolver.getSuffixes(U,n).forEach($=>{D([U],s+$,n[`defaultValue${$}`]||O)})}):D(A,s,O))}h=this.extendTranslation(h,t,n,f,r),C&&h===s&&this.options.appendNamespaceToMissingKey&&(h=`${l}:${s}`),(C||S)&&this.options.parseMissingKeyHandler&&(this.options.compatibilityAPI!=="v1"?h=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${l}:${s}`:s,S?h:void 0):h=this.options.parseMissingKeyHandler(h))}return i?(f.res=h,f):h}extendTranslation(t,n,r,i,o){var s=this;if(this.i18nFormat&&this.i18nFormat.parse)t=this.i18nFormat.parse(t,{...this.options.interpolation.defaultVariables,...r},i.usedLng,i.usedNS,i.usedKey,{resolved:i});else if(!r.skipInterpolation){r.interpolation&&this.interpolator.init({...r,interpolation:{...this.options.interpolation,...r.interpolation}});const u=typeof t=="string"&&(r&&r.interpolation&&r.interpolation.skipOnVariables!==void 0?r.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables);let d;if(u){const h=t.match(this.interpolator.nestingRegexp);d=h&&h.length}let f=r.replace&&typeof r.replace!="string"?r.replace:r;if(this.options.interpolation.defaultVariables&&(f={...this.options.interpolation.defaultVariables,...f}),t=this.interpolator.interpolate(t,f,r.lng||this.language,r),u){const h=t.match(this.interpolator.nestingRegexp),g=h&&h.length;d1&&arguments[1]!==void 0?arguments[1]:{},r,i,o,s,a;return typeof t=="string"&&(t=[t]),t.forEach(l=>{if(this.isValidLookup(r))return;const u=this.extractFromKey(l,n),d=u.key;i=d;let f=u.namespaces;this.options.fallbackNS&&(f=f.concat(this.options.fallbackNS));const h=n.count!==void 0&&typeof n.count!="string",g=h&&!n.ordinal&&n.count===0&&this.pluralResolver.shouldUseIntlApi(),m=n.context!==void 0&&(typeof n.context=="string"||typeof n.context=="number")&&n.context!=="",v=n.lngs?n.lngs:this.languageUtils.toResolveHierarchy(n.lng||this.language,n.fallbackLng);f.forEach(x=>{this.isValidLookup(r)||(a=x,!LO[`${v[0]}-${x}`]&&this.utils&&this.utils.hasLoadedNamespace&&!this.utils.hasLoadedNamespace(a)&&(LO[`${v[0]}-${x}`]=!0,this.logger.warn(`key "${i}" for languages "${v.join(", ")}" won't get resolved as namespace "${a}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),v.forEach(_=>{if(this.isValidLookup(r))return;s=_;const b=[d];if(this.i18nFormat&&this.i18nFormat.addLookupKeys)this.i18nFormat.addLookupKeys(b,d,_,x,n);else{let S;h&&(S=this.pluralResolver.getSuffix(_,n.count,n));const C=`${this.options.pluralSeparator}zero`,T=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(h&&(b.push(d+S),n.ordinal&&S.indexOf(T)===0&&b.push(d+S.replace(T,this.options.pluralSeparator)),g&&b.push(d+C)),m){const E=`${d}${this.options.contextSeparator}${n.context}`;b.push(E),h&&(b.push(E+S),n.ordinal&&S.indexOf(T)===0&&b.push(E+S.replace(T,this.options.pluralSeparator)),g&&b.push(E+C))}}let y;for(;y=b.pop();)this.isValidLookup(r)||(o=y,r=this.getResource(_,x,y,n))}))})}),{res:r,usedKey:i,exactUsedKey:o,usedLng:s,usedNS:a}}isValidLookup(t){return t!==void 0&&!(!this.options.returnNull&&t===null)&&!(!this.options.returnEmptyString&&t==="")}getResource(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return this.i18nFormat&&this.i18nFormat.getResource?this.i18nFormat.getResource(t,n,r,i):this.resourceStore.getResource(t,n,r,i)}static hasDefaultValue(t){const n="defaultValue";for(const r in t)if(Object.prototype.hasOwnProperty.call(t,r)&&n===r.substring(0,n.length)&&t[r]!==void 0)return!0;return!1}}function Vx(e){return e.charAt(0).toUpperCase()+e.slice(1)}class DO{constructor(t){this.options=t,this.supportedLngs=this.options.supportedLngs||!1,this.logger=Bs.create("languageUtils")}getScriptPartFromCode(t){if(t=a_(t),!t||t.indexOf("-")<0)return null;const n=t.split("-");return n.length===2||(n.pop(),n[n.length-1].toLowerCase()==="x")?null:this.formatLanguageCode(n.join("-"))}getLanguagePartFromCode(t){if(t=a_(t),!t||t.indexOf("-")<0)return t;const n=t.split("-");return this.formatLanguageCode(n[0])}formatLanguageCode(t){if(typeof t=="string"&&t.indexOf("-")>-1){const n=["hans","hant","latn","cyrl","cans","mong","arab"];let r=t.split("-");return this.options.lowerCaseLng?r=r.map(i=>i.toLowerCase()):r.length===2?(r[0]=r[0].toLowerCase(),r[1]=r[1].toUpperCase(),n.indexOf(r[1].toLowerCase())>-1&&(r[1]=Vx(r[1].toLowerCase()))):r.length===3&&(r[0]=r[0].toLowerCase(),r[1].length===2&&(r[1]=r[1].toUpperCase()),r[0]!=="sgn"&&r[2].length===2&&(r[2]=r[2].toUpperCase()),n.indexOf(r[1].toLowerCase())>-1&&(r[1]=Vx(r[1].toLowerCase())),n.indexOf(r[2].toLowerCase())>-1&&(r[2]=Vx(r[2].toLowerCase()))),r.join("-")}return this.options.cleanCode||this.options.lowerCaseLng?t.toLowerCase():t}isSupportedCode(t){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(t=this.getLanguagePartFromCode(t)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(t)>-1}getBestMatchFromCodes(t){if(!t)return null;let n;return t.forEach(r=>{if(n)return;const i=this.formatLanguageCode(r);(!this.options.supportedLngs||this.isSupportedCode(i))&&(n=i)}),!n&&this.options.supportedLngs&&t.forEach(r=>{if(n)return;const i=this.getLanguagePartFromCode(r);if(this.isSupportedCode(i))return n=i;n=this.options.supportedLngs.find(o=>{if(o===i)return o;if(!(o.indexOf("-")<0&&i.indexOf("-")<0)&&o.indexOf(i)===0)return o})}),n||(n=this.getFallbackCodes(this.options.fallbackLng)[0]),n}getFallbackCodes(t,n){if(!t)return[];if(typeof t=="function"&&(t=t(n)),typeof t=="string"&&(t=[t]),Object.prototype.toString.apply(t)==="[object Array]")return t;if(!n)return t.default||[];let r=t[n];return r||(r=t[this.getScriptPartFromCode(n)]),r||(r=t[this.formatLanguageCode(n)]),r||(r=t[this.getLanguagePartFromCode(n)]),r||(r=t.default),r||[]}toResolveHierarchy(t,n){const r=this.getFallbackCodes(n||this.options.fallbackLng||[],t),i=[],o=s=>{s&&(this.isSupportedCode(s)?i.push(s):this.logger.warn(`rejecting language code not found in supportedLngs: ${s}`))};return typeof t=="string"&&(t.indexOf("-")>-1||t.indexOf("_")>-1)?(this.options.load!=="languageOnly"&&o(this.formatLanguageCode(t)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&o(this.getScriptPartFromCode(t)),this.options.load!=="currentOnly"&&o(this.getLanguagePartFromCode(t))):typeof t=="string"&&o(this.formatLanguageCode(t)),r.forEach(s=>{i.indexOf(s)<0&&o(this.formatLanguageCode(s))}),i}}let w1e=[{lngs:["ach","ak","am","arn","br","fil","gun","ln","mfe","mg","mi","oc","pt","pt-BR","tg","tl","ti","tr","uz","wa"],nr:[1,2],fc:1},{lngs:["af","an","ast","az","bg","bn","ca","da","de","dev","el","en","eo","es","et","eu","fi","fo","fur","fy","gl","gu","ha","hi","hu","hy","ia","it","kk","kn","ku","lb","mai","ml","mn","mr","nah","nap","nb","ne","nl","nn","no","nso","pa","pap","pms","ps","pt-PT","rm","sco","se","si","so","son","sq","sv","sw","ta","te","tk","ur","yo"],nr:[1,2],fc:2},{lngs:["ay","bo","cgg","fa","ht","id","ja","jbo","ka","km","ko","ky","lo","ms","sah","su","th","tt","ug","vi","wo","zh"],nr:[1],fc:3},{lngs:["be","bs","cnr","dz","hr","ru","sr","uk"],nr:[1,2,5],fc:4},{lngs:["ar"],nr:[0,1,2,3,11,100],fc:5},{lngs:["cs","sk"],nr:[1,2,5],fc:6},{lngs:["csb","pl"],nr:[1,2,5],fc:7},{lngs:["cy"],nr:[1,2,3,8],fc:8},{lngs:["fr"],nr:[1,2],fc:9},{lngs:["ga"],nr:[1,2,3,7,11],fc:10},{lngs:["gd"],nr:[1,2,3,20],fc:11},{lngs:["is"],nr:[1,2],fc:12},{lngs:["jv"],nr:[0,1],fc:13},{lngs:["kw"],nr:[1,2,3,4],fc:14},{lngs:["lt"],nr:[1,2,10],fc:15},{lngs:["lv"],nr:[1,2,0],fc:16},{lngs:["mk"],nr:[1,2],fc:17},{lngs:["mnk"],nr:[0,1,2],fc:18},{lngs:["mt"],nr:[1,2,11,20],fc:19},{lngs:["or"],nr:[2,1],fc:2},{lngs:["ro"],nr:[1,2,20],fc:20},{lngs:["sl"],nr:[5,1,2,3],fc:21},{lngs:["he","iw"],nr:[1,2,20,21],fc:22}],x1e={1:function(e){return+(e>1)},2:function(e){return+(e!=1)},3:function(e){return 0},4:function(e){return e%10==1&&e%100!=11?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2},5:function(e){return e==0?0:e==1?1:e==2?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},6:function(e){return e==1?0:e>=2&&e<=4?1:2},7:function(e){return e==1?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2},8:function(e){return e==1?0:e==2?1:e!=8&&e!=11?2:3},9:function(e){return+(e>=2)},10:function(e){return e==1?0:e==2?1:e<7?2:e<11?3:4},11:function(e){return e==1||e==11?0:e==2||e==12?1:e>2&&e<20?2:3},12:function(e){return+(e%10!=1||e%100==11)},13:function(e){return+(e!==0)},14:function(e){return e==1?0:e==2?1:e==3?2:3},15:function(e){return e%10==1&&e%100!=11?0:e%10>=2&&(e%100<10||e%100>=20)?1:2},16:function(e){return e%10==1&&e%100!=11?0:e!==0?1:2},17:function(e){return e==1||e%10==1&&e%100!=11?0:1},18:function(e){return e==0?0:e==1?1:2},19:function(e){return e==1?0:e==0||e%100>1&&e%100<11?1:e%100>10&&e%100<20?2:3},20:function(e){return e==1?0:e==0||e%100>0&&e%100<20?1:2},21:function(e){return e%100==1?1:e%100==2?2:e%100==3||e%100==4?3:0},22:function(e){return e==1?0:e==2?1:(e<0||e>10)&&e%10==0?2:3}};const C1e=["v1","v2","v3"],T1e=["v4"],$O={zero:0,one:1,two:2,few:3,many:4,other:5};function E1e(){const e={};return w1e.forEach(t=>{t.lngs.forEach(n=>{e[n]={numbers:t.nr,plurals:x1e[t.fc]}})}),e}class A1e{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.languageUtils=t,this.options=n,this.logger=Bs.create("pluralResolver"),(!this.options.compatibilityJSON||T1e.includes(this.options.compatibilityJSON))&&(typeof Intl>"u"||!Intl.PluralRules)&&(this.options.compatibilityJSON="v3",this.logger.error("Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.")),this.rules=E1e()}addRule(t,n){this.rules[t]=n}getRule(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(this.shouldUseIntlApi())try{return new Intl.PluralRules(a_(t),{type:n.ordinal?"ordinal":"cardinal"})}catch{return}return this.rules[t]||this.rules[this.languageUtils.getLanguagePartFromCode(t)]}needsPlural(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const r=this.getRule(t,n);return this.shouldUseIntlApi()?r&&r.resolvedOptions().pluralCategories.length>1:r&&r.numbers.length>1}getPluralFormsOfKey(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return this.getSuffixes(t,r).map(i=>`${n}${i}`)}getSuffixes(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const r=this.getRule(t,n);return r?this.shouldUseIntlApi()?r.resolvedOptions().pluralCategories.sort((i,o)=>$O[i]-$O[o]).map(i=>`${this.options.prepend}${n.ordinal?`ordinal${this.options.prepend}`:""}${i}`):r.numbers.map(i=>this.getSuffix(t,i,n)):[]}getSuffix(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const i=this.getRule(t,r);return i?this.shouldUseIntlApi()?`${this.options.prepend}${r.ordinal?`ordinal${this.options.prepend}`:""}${i.select(n)}`:this.getSuffixRetroCompatible(i,n):(this.logger.warn(`no plural rule found for: ${t}`),"")}getSuffixRetroCompatible(t,n){const r=t.noAbs?t.plurals(n):t.plurals(Math.abs(n));let i=t.numbers[r];this.options.simplifyPluralSuffix&&t.numbers.length===2&&t.numbers[0]===1&&(i===2?i="plural":i===1&&(i=""));const o=()=>this.options.prepend&&i.toString()?this.options.prepend+i.toString():i.toString();return this.options.compatibilityJSON==="v1"?i===1?"":typeof i=="number"?`_plural_${i.toString()}`:o():this.options.compatibilityJSON==="v2"||this.options.simplifyPluralSuffix&&t.numbers.length===2&&t.numbers[0]===1?o():this.options.prepend&&r.toString()?this.options.prepend+r.toString():r.toString()}shouldUseIntlApi(){return!C1e.includes(this.options.compatibilityJSON)}}function FO(e,t,n){let r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:".",i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,o=y1e(e,t,n);return!o&&i&&typeof n=="string"&&(o=s_(e,n,r),o===void 0&&(o=s_(t,n,r))),o}class P1e{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger=Bs.create("interpolator"),this.options=t,this.format=t.interpolation&&t.interpolation.format||(n=>n),this.init(t)}init(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};t.interpolation||(t.interpolation={escapeValue:!0});const n=t.interpolation;this.escape=n.escape!==void 0?n.escape:_1e,this.escapeValue=n.escapeValue!==void 0?n.escapeValue:!0,this.useRawValueToEscape=n.useRawValueToEscape!==void 0?n.useRawValueToEscape:!1,this.prefix=n.prefix?Sd(n.prefix):n.prefixEscaped||"{{",this.suffix=n.suffix?Sd(n.suffix):n.suffixEscaped||"}}",this.formatSeparator=n.formatSeparator?n.formatSeparator:n.formatSeparator||",",this.unescapePrefix=n.unescapeSuffix?"":n.unescapePrefix||"-",this.unescapeSuffix=this.unescapePrefix?"":n.unescapeSuffix||"",this.nestingPrefix=n.nestingPrefix?Sd(n.nestingPrefix):n.nestingPrefixEscaped||Sd("$t("),this.nestingSuffix=n.nestingSuffix?Sd(n.nestingSuffix):n.nestingSuffixEscaped||Sd(")"),this.nestingOptionsSeparator=n.nestingOptionsSeparator?n.nestingOptionsSeparator:n.nestingOptionsSeparator||",",this.maxReplaces=n.maxReplaces?n.maxReplaces:1e3,this.alwaysFormat=n.alwaysFormat!==void 0?n.alwaysFormat:!1,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){const t=`${this.prefix}(.+?)${this.suffix}`;this.regexp=new RegExp(t,"g");const n=`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`;this.regexpUnescape=new RegExp(n,"g");const r=`${this.nestingPrefix}(.+?)${this.nestingSuffix}`;this.nestingRegexp=new RegExp(r,"g")}interpolate(t,n,r,i){let o,s,a;const l=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{};function u(m){return m.replace(/\$/g,"$$$$")}const d=m=>{if(m.indexOf(this.formatSeparator)<0){const b=FO(n,l,m,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(b,void 0,r,{...i,...n,interpolationkey:m}):b}const v=m.split(this.formatSeparator),x=v.shift().trim(),_=v.join(this.formatSeparator).trim();return this.format(FO(n,l,x,this.options.keySeparator,this.options.ignoreJSONStructure),_,r,{...i,...n,interpolationkey:x})};this.resetRegExp();const f=i&&i.missingInterpolationHandler||this.options.missingInterpolationHandler,h=i&&i.interpolation&&i.interpolation.skipOnVariables!==void 0?i.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:m=>u(m)},{regex:this.regexp,safeValue:m=>this.escapeValue?u(this.escape(m)):u(m)}].forEach(m=>{for(a=0;o=m.regex.exec(t);){const v=o[1].trim();if(s=d(v),s===void 0)if(typeof f=="function"){const _=f(t,o,i);s=typeof _=="string"?_:""}else if(i&&Object.prototype.hasOwnProperty.call(i,v))s="";else if(h){s=o[0];continue}else this.logger.warn(`missed to pass in variable ${v} for interpolating ${t}`),s="";else typeof s!="string"&&!this.useRawValueToEscape&&(s=IO(s));const x=m.safeValue(s);if(t=t.replace(o[0],x),h?(m.regex.lastIndex+=s.length,m.regex.lastIndex-=o[0].length):m.regex.lastIndex=0,a++,a>=this.maxReplaces)break}}),t}nest(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i,o,s;function a(l,u){const d=this.nestingOptionsSeparator;if(l.indexOf(d)<0)return l;const f=l.split(new RegExp(`${d}[ ]*{`));let h=`{${f[1]}`;l=f[0],h=this.interpolate(h,s);const g=h.match(/'/g),m=h.match(/"/g);(g&&g.length%2===0&&!m||m.length%2!==0)&&(h=h.replace(/'/g,'"'));try{s=JSON.parse(h),u&&(s={...u,...s})}catch(v){return this.logger.warn(`failed parsing options string in nesting for key ${l}`,v),`${l}${d}${h}`}return delete s.defaultValue,l}for(;i=this.nestingRegexp.exec(t);){let l=[];s={...r},s=s.replace&&typeof s.replace!="string"?s.replace:s,s.applyPostProcessor=!1,delete s.defaultValue;let u=!1;if(i[0].indexOf(this.formatSeparator)!==-1&&!/{.*}/.test(i[1])){const d=i[1].split(this.formatSeparator).map(f=>f.trim());i[1]=d.shift(),l=d,u=!0}if(o=n(a.call(this,i[1].trim(),s),s),o&&i[0]===t&&typeof o!="string")return o;typeof o!="string"&&(o=IO(o)),o||(this.logger.warn(`missed to resolve ${i[1]} for nesting ${t}`),o=""),u&&(o=l.reduce((d,f)=>this.format(d,f,r.lng,{...r,interpolationkey:i[1].trim()}),o.trim())),t=t.replace(i[0],o),this.regexp.lastIndex=0}return t}}function R1e(e){let t=e.toLowerCase().trim();const n={};if(e.indexOf("(")>-1){const r=e.split("(");t=r[0].toLowerCase().trim();const i=r[1].substring(0,r[1].length-1);t==="currency"&&i.indexOf(":")<0?n.currency||(n.currency=i.trim()):t==="relativetime"&&i.indexOf(":")<0?n.range||(n.range=i.trim()):i.split(";").forEach(s=>{if(!s)return;const[a,...l]=s.split(":"),u=l.join(":").trim().replace(/^'+|'+$/g,"");n[a.trim()]||(n[a.trim()]=u),u==="false"&&(n[a.trim()]=!1),u==="true"&&(n[a.trim()]=!0),isNaN(u)||(n[a.trim()]=parseInt(u,10))})}return{formatName:t,formatOptions:n}}function wd(e){const t={};return function(r,i,o){const s=i+JSON.stringify(o);let a=t[s];return a||(a=e(a_(i),o),t[s]=a),a(r)}}class O1e{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger=Bs.create("formatter"),this.options=t,this.formats={number:wd((n,r)=>{const i=new Intl.NumberFormat(n,{...r});return o=>i.format(o)}),currency:wd((n,r)=>{const i=new Intl.NumberFormat(n,{...r,style:"currency"});return o=>i.format(o)}),datetime:wd((n,r)=>{const i=new Intl.DateTimeFormat(n,{...r});return o=>i.format(o)}),relativetime:wd((n,r)=>{const i=new Intl.RelativeTimeFormat(n,{...r});return o=>i.format(o,r.range||"day")}),list:wd((n,r)=>{const i=new Intl.ListFormat(n,{...r});return o=>i.format(o)})},this.init(t)}init(t){const r=(arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}}).interpolation;this.formatSeparator=r.formatSeparator?r.formatSeparator:r.formatSeparator||","}add(t,n){this.formats[t.toLowerCase().trim()]=n}addCached(t,n){this.formats[t.toLowerCase().trim()]=wd(n)}format(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return n.split(this.formatSeparator).reduce((a,l)=>{const{formatName:u,formatOptions:d}=R1e(l);if(this.formats[u]){let f=a;try{const h=i&&i.formatParams&&i.formatParams[i.interpolationkey]||{},g=h.locale||h.lng||i.locale||i.lng||r;f=this.formats[u](a,g,{...d,...i,...h})}catch(h){this.logger.warn(h)}return f}else this.logger.warn(`there was no format function for ${u}`);return a},t)}}function k1e(e,t){e.pending[t]!==void 0&&(delete e.pending[t],e.pendingCount--)}class I1e extends hS{constructor(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};super(),this.backend=t,this.store=n,this.services=r,this.languageUtils=r.languageUtils,this.options=i,this.logger=Bs.create("backendConnector"),this.waitingReads=[],this.maxParallelReads=i.maxParallelReads||10,this.readingCalls=0,this.maxRetries=i.maxRetries>=0?i.maxRetries:5,this.retryTimeout=i.retryTimeout>=1?i.retryTimeout:350,this.state={},this.queue=[],this.backend&&this.backend.init&&this.backend.init(r,i.backend,i)}queueLoad(t,n,r,i){const o={},s={},a={},l={};return t.forEach(u=>{let d=!0;n.forEach(f=>{const h=`${u}|${f}`;!r.reload&&this.store.hasResourceBundle(u,f)?this.state[h]=2:this.state[h]<0||(this.state[h]===1?s[h]===void 0&&(s[h]=!0):(this.state[h]=1,d=!1,s[h]===void 0&&(s[h]=!0),o[h]===void 0&&(o[h]=!0),l[f]===void 0&&(l[f]=!0)))}),d||(a[u]=!0)}),(Object.keys(o).length||Object.keys(s).length)&&this.queue.push({pending:s,pendingCount:Object.keys(s).length,loaded:{},errors:[],callback:i}),{toLoad:Object.keys(o),pending:Object.keys(s),toLoadLanguages:Object.keys(a),toLoadNamespaces:Object.keys(l)}}loaded(t,n,r){const i=t.split("|"),o=i[0],s=i[1];n&&this.emit("failedLoading",o,s,n),r&&this.store.addResourceBundle(o,s,r),this.state[t]=n?-1:2;const a={};this.queue.forEach(l=>{m1e(l.loaded,[o],s),k1e(l,t),n&&l.errors.push(n),l.pendingCount===0&&!l.done&&(Object.keys(l.loaded).forEach(u=>{a[u]||(a[u]={});const d=l.loaded[u];d.length&&d.forEach(f=>{a[u][f]===void 0&&(a[u][f]=!0)})}),l.done=!0,l.errors.length?l.callback(l.errors):l.callback())}),this.emit("loaded",a),this.queue=this.queue.filter(l=>!l.done)}read(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,o=arguments.length>4&&arguments[4]!==void 0?arguments[4]:this.retryTimeout,s=arguments.length>5?arguments[5]:void 0;if(!t.length)return s(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:t,ns:n,fcName:r,tried:i,wait:o,callback:s});return}this.readingCalls++;const a=(u,d)=>{if(this.readingCalls--,this.waitingReads.length>0){const f=this.waitingReads.shift();this.read(f.lng,f.ns,f.fcName,f.tried,f.wait,f.callback)}if(u&&d&&i{this.read.call(this,t,n,r,i+1,o*2,s)},o);return}s(u,d)},l=this.backend[r].bind(this.backend);if(l.length===2){try{const u=l(t,n);u&&typeof u.then=="function"?u.then(d=>a(null,d)).catch(a):a(null,u)}catch(u){a(u)}return}return l(t,n,a)}prepareLoading(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=arguments.length>3?arguments[3]:void 0;if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),i&&i();typeof t=="string"&&(t=this.languageUtils.toResolveHierarchy(t)),typeof n=="string"&&(n=[n]);const o=this.queueLoad(t,n,r,i);if(!o.toLoad.length)return o.pending.length||i(),null;o.toLoad.forEach(s=>{this.loadOne(s)})}load(t,n,r){this.prepareLoading(t,n,{},r)}reload(t,n,r){this.prepareLoading(t,n,{reload:!0},r)}loadOne(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";const r=t.split("|"),i=r[0],o=r[1];this.read(i,o,"read",void 0,void 0,(s,a)=>{s&&this.logger.warn(`${n}loading namespace ${o} for language ${i} failed`,s),!s&&a&&this.logger.log(`${n}loaded namespace ${o} for language ${i}`,a),this.loaded(t,s,a)})}saveMissing(t,n,r,i,o){let s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{},a=arguments.length>6&&arguments[6]!==void 0?arguments[6]:()=>{};if(this.services.utils&&this.services.utils.hasLoadedNamespace&&!this.services.utils.hasLoadedNamespace(n)){this.logger.warn(`did not save key "${r}" as the namespace "${n}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");return}if(!(r==null||r==="")){if(this.backend&&this.backend.create){const l={...s,isUpdate:o},u=this.backend.create.bind(this.backend);if(u.length<6)try{let d;u.length===5?d=u(t,n,r,i,l):d=u(t,n,r,i),d&&typeof d.then=="function"?d.then(f=>a(null,f)).catch(a):a(null,d)}catch(d){a(d)}else u(t,n,r,i,a,l)}!t||!t[0]||this.store.addResource(t[0],n,r,i)}}}function BO(){return{debug:!1,initImmediate:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:function(t){let n={};if(typeof t[1]=="object"&&(n=t[1]),typeof t[1]=="string"&&(n.defaultValue=t[1]),typeof t[2]=="string"&&(n.tDescription=t[2]),typeof t[2]=="object"||typeof t[3]=="object"){const r=t[3]||t[2];Object.keys(r).forEach(i=>{n[i]=r[i]})}return n},interpolation:{escapeValue:!0,format:(e,t,n,r)=>e,prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0}}}function UO(e){return typeof e.ns=="string"&&(e.ns=[e.ns]),typeof e.fallbackLng=="string"&&(e.fallbackLng=[e.fallbackLng]),typeof e.fallbackNS=="string"&&(e.fallbackNS=[e.fallbackNS]),e.supportedLngs&&e.supportedLngs.indexOf("cimode")<0&&(e.supportedLngs=e.supportedLngs.concat(["cimode"])),e}function V0(){}function M1e(e){Object.getOwnPropertyNames(Object.getPrototypeOf(e)).forEach(n=>{typeof e[n]=="function"&&(e[n]=e[n].bind(e))})}class Kg extends hS{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;if(super(),this.options=UO(t),this.services={},this.logger=Bs,this.modules={external:[]},M1e(this),n&&!this.isInitialized&&!t.isClone){if(!this.options.initImmediate)return this.init(t,n),this;setTimeout(()=>{this.init(t,n)},0)}}init(){var t=this;let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=arguments.length>1?arguments[1]:void 0;typeof n=="function"&&(r=n,n={}),!n.defaultNS&&n.defaultNS!==!1&&n.ns&&(typeof n.ns=="string"?n.defaultNS=n.ns:n.ns.indexOf("translation")<0&&(n.defaultNS=n.ns[0]));const i=BO();this.options={...i,...this.options,...UO(n)},this.options.compatibilityAPI!=="v1"&&(this.options.interpolation={...i.interpolation,...this.options.interpolation}),n.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=n.keySeparator),n.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=n.nsSeparator);function o(d){return d?typeof d=="function"?new d:d:null}if(!this.options.isClone){this.modules.logger?Bs.init(o(this.modules.logger),this.options):Bs.init(null,this.options);let d;this.modules.formatter?d=this.modules.formatter:typeof Intl<"u"&&(d=O1e);const f=new DO(this.options);this.store=new NO(this.options.resources,this.options);const h=this.services;h.logger=Bs,h.resourceStore=this.store,h.languageUtils=f,h.pluralResolver=new A1e(f,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),d&&(!this.options.interpolation.format||this.options.interpolation.format===i.interpolation.format)&&(h.formatter=o(d),h.formatter.init(h,this.options),this.options.interpolation.format=h.formatter.format.bind(h.formatter)),h.interpolator=new P1e(this.options),h.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},h.backendConnector=new I1e(o(this.modules.backend),h.resourceStore,h,this.options),h.backendConnector.on("*",function(g){for(var m=arguments.length,v=new Array(m>1?m-1:0),x=1;x1?m-1:0),x=1;x{g.init&&g.init(this)})}if(this.format=this.options.interpolation.format,r||(r=V0),this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){const d=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);d.length>0&&d[0]!=="dev"&&(this.options.lng=d[0])}!this.services.languageDetector&&!this.options.lng&&this.logger.warn("init: no languageDetector is used and no lng is defined"),["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"].forEach(d=>{this[d]=function(){return t.store[d](...arguments)}}),["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach(d=>{this[d]=function(){return t.store[d](...arguments),t}});const l=cp(),u=()=>{const d=(f,h)=>{this.isInitialized&&!this.initializedStoreOnce&&this.logger.warn("init: i18next is already initialized. You should call init just once!"),this.isInitialized=!0,this.options.isClone||this.logger.log("initialized",this.options),this.emit("initialized",this.options),l.resolve(h),r(f,h)};if(this.languages&&this.options.compatibilityAPI!=="v1"&&!this.isInitialized)return d(null,this.t.bind(this));this.changeLanguage(this.options.lng,d)};return this.options.resources||!this.options.initImmediate?u():setTimeout(u,0),l}loadResources(t){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:V0;const i=typeof t=="string"?t:this.language;if(typeof t=="function"&&(r=t),!this.options.resources||this.options.partialBundledLanguages){if(i&&i.toLowerCase()==="cimode")return r();const o=[],s=a=>{if(!a)return;this.services.languageUtils.toResolveHierarchy(a).forEach(u=>{o.indexOf(u)<0&&o.push(u)})};i?s(i):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(l=>s(l)),this.options.preload&&this.options.preload.forEach(a=>s(a)),this.services.backendConnector.load(o,this.options.ns,a=>{!a&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),r(a)})}else r(null)}reloadResources(t,n,r){const i=cp();return t||(t=this.languages),n||(n=this.options.ns),r||(r=V0),this.services.backendConnector.reload(t,n,o=>{i.resolve(),r(o)}),i}use(t){if(!t)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!t.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return t.type==="backend"&&(this.modules.backend=t),(t.type==="logger"||t.log&&t.warn&&t.error)&&(this.modules.logger=t),t.type==="languageDetector"&&(this.modules.languageDetector=t),t.type==="i18nFormat"&&(this.modules.i18nFormat=t),t.type==="postProcessor"&&BU.addPostProcessor(t),t.type==="formatter"&&(this.modules.formatter=t),t.type==="3rdParty"&&this.modules.external.push(t),this}setResolvedLanguage(t){if(!(!t||!this.languages)&&!(["cimode","dev"].indexOf(t)>-1))for(let n=0;n-1)&&this.store.hasLanguageSomeTranslations(r)){this.resolvedLanguage=r;break}}}changeLanguage(t,n){var r=this;this.isLanguageChangingTo=t;const i=cp();this.emit("languageChanging",t);const o=l=>{this.language=l,this.languages=this.services.languageUtils.toResolveHierarchy(l),this.resolvedLanguage=void 0,this.setResolvedLanguage(l)},s=(l,u)=>{u?(o(u),this.translator.changeLanguage(u),this.isLanguageChangingTo=void 0,this.emit("languageChanged",u),this.logger.log("languageChanged",u)):this.isLanguageChangingTo=void 0,i.resolve(function(){return r.t(...arguments)}),n&&n(l,function(){return r.t(...arguments)})},a=l=>{!t&&!l&&this.services.languageDetector&&(l=[]);const u=typeof l=="string"?l:this.services.languageUtils.getBestMatchFromCodes(l);u&&(this.language||o(u),this.translator.language||this.translator.changeLanguage(u),this.services.languageDetector&&this.services.languageDetector.cacheUserLanguage&&this.services.languageDetector.cacheUserLanguage(u)),this.loadResources(u,d=>{s(d,u)})};return!t&&this.services.languageDetector&&!this.services.languageDetector.async?a(this.services.languageDetector.detect()):!t&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(a):this.services.languageDetector.detect(a):a(t),i}getFixedT(t,n,r){var i=this;const o=function(s,a){let l;if(typeof a!="object"){for(var u=arguments.length,d=new Array(u>2?u-2:0),f=2;f`${l.keyPrefix}${h}${m}`):g=l.keyPrefix?`${l.keyPrefix}${h}${s}`:s,i.t(g,l)};return typeof t=="string"?o.lng=t:o.lngs=t,o.ns=n,o.keyPrefix=r,o}t(){return this.translator&&this.translator.translate(...arguments)}exists(){return this.translator&&this.translator.exists(...arguments)}setDefaultNamespace(t){this.options.defaultNS=t}hasLoadedNamespace(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;const r=n.lng||this.resolvedLanguage||this.languages[0],i=this.options?this.options.fallbackLng:!1,o=this.languages[this.languages.length-1];if(r.toLowerCase()==="cimode")return!0;const s=(a,l)=>{const u=this.services.backendConnector.state[`${a}|${l}`];return u===-1||u===2};if(n.precheck){const a=n.precheck(this,s);if(a!==void 0)return a}return!!(this.hasResourceBundle(r,t)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||s(r,t)&&(!i||s(o,t)))}loadNamespaces(t,n){const r=cp();return this.options.ns?(typeof t=="string"&&(t=[t]),t.forEach(i=>{this.options.ns.indexOf(i)<0&&this.options.ns.push(i)}),this.loadResources(i=>{r.resolve(),n&&n(i)}),r):(n&&n(),Promise.resolve())}loadLanguages(t,n){const r=cp();typeof t=="string"&&(t=[t]);const i=this.options.preload||[],o=t.filter(s=>i.indexOf(s)<0);return o.length?(this.options.preload=i.concat(o),this.loadResources(s=>{r.resolve(),n&&n(s)}),r):(n&&n(),Promise.resolve())}dir(t){if(t||(t=this.resolvedLanguage||(this.languages&&this.languages.length>0?this.languages[0]:this.language)),!t)return"rtl";const n=["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"],r=this.services&&this.services.languageUtils||new DO(BO());return n.indexOf(r.getLanguagePartFromCode(t))>-1||t.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}static createInstance(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;return new Kg(t,n)}cloneInstance(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:V0;const r=t.forkResourceStore;r&&delete t.forkResourceStore;const i={...this.options,...t,isClone:!0},o=new Kg(i);return(t.debug!==void 0||t.prefix!==void 0)&&(o.logger=o.logger.clone(t)),["store","services","language"].forEach(a=>{o[a]=this[a]}),o.services={...this.services},o.services.utils={hasLoadedNamespace:o.hasLoadedNamespace.bind(o)},r&&(o.store=new NO(this.store.data,i),o.services.resourceStore=o.store),o.translator=new l_(o.services,i),o.translator.on("*",function(a){for(var l=arguments.length,u=new Array(l>1?l-1:0),d=1;dtypeof e=="string"?{title:e,status:"info",isClosable:!0,duration:2500}:{status:"info",isClosable:!0,duration:2500,...e},UU={isConnected:!1,isProcessing:!1,isGFPGANAvailable:!0,isESRGANAvailable:!0,shouldConfirmOnDelete:!0,currentStep:0,totalSteps:0,currentIteration:0,totalIterations:0,currentStatusHasSteps:!1,isCancelable:!0,enableImageDebugging:!1,toastQueue:[],progressImage:null,shouldAntialiasProgressImage:!1,sessionId:null,cancelType:"immediate",isCancelScheduled:!1,subscribedNodeIds:[],wereModelsReceived:!1,wasSchemaParsed:!1,consoleLogLevel:"debug",shouldLogToConsole:!0,statusTranslationKey:"common.statusDisconnected",canceledSession:"",isPersisted:!1,language:"en",isUploading:!1,isNodesEnabled:!1,shouldUseNSFWChecker:!1,shouldUseWatermarker:!1},zU=An({name:"system",initialState:UU,reducers:{setIsProcessing:(e,t)=>{e.isProcessing=t.payload},setCurrentStatus:(e,t)=>{e.statusTranslationKey=t.payload},setShouldConfirmOnDelete:(e,t)=>{e.shouldConfirmOnDelete=t.payload},setIsCancelable:(e,t)=>{e.isCancelable=t.payload},setEnableImageDebugging:(e,t)=>{e.enableImageDebugging=t.payload},addToast:(e,t)=>{e.toastQueue.push(t.payload)},clearToastQueue:e=>{e.toastQueue=[]},cancelScheduled:e=>{e.isCancelScheduled=!0},scheduledCancelAborted:e=>{e.isCancelScheduled=!1},cancelTypeChanged:(e,t)=>{e.cancelType=t.payload},subscribedNodeIdsSet:(e,t)=>{e.subscribedNodeIds=t.payload},consoleLogLevelChanged:(e,t)=>{e.consoleLogLevel=t.payload},shouldLogToConsoleChanged:(e,t)=>{e.shouldLogToConsole=t.payload},shouldAntialiasProgressImageChanged:(e,t)=>{e.shouldAntialiasProgressImage=t.payload},isPersistedChanged:(e,t)=>{e.isPersisted=t.payload},languageChanged:(e,t)=>{e.language=t.payload},progressImageSet(e,t){e.progressImage=t.payload},setIsNodesEnabled(e,t){e.isNodesEnabled=t.payload},shouldUseNSFWCheckerChanged(e,t){e.shouldUseNSFWChecker=t.payload},shouldUseWatermarkerChanged(e,t){e.shouldUseWatermarker=t.payload}},extraReducers(e){e.addCase(dF,(t,n)=>{t.sessionId=n.payload.sessionId,t.canceledSession=""}),e.addCase(hF,t=>{t.sessionId=null}),e.addCase(lF,t=>{t.isConnected=!0,t.isCancelable=!0,t.isProcessing=!1,t.currentStatusHasSteps=!1,t.currentStep=0,t.totalSteps=0,t.currentIteration=0,t.totalIterations=0,t.statusTranslationKey="common.statusConnected"}),e.addCase(cF,t=>{t.isConnected=!1,t.isProcessing=!1,t.isCancelable=!0,t.currentStatusHasSteps=!1,t.currentStep=0,t.totalSteps=0,t.statusTranslationKey="common.statusDisconnected"}),e.addCase(gF,t=>{t.isCancelable=!0,t.isProcessing=!0,t.currentStatusHasSteps=!1,t.currentStep=0,t.totalSteps=0,t.statusTranslationKey="common.statusGenerating"}),e.addCase(SF,(t,n)=>{const{step:r,total_steps:i,progress_image:o}=n.payload.data;t.isProcessing=!0,t.isCancelable=!0,t.currentStatusHasSteps=!0,t.currentStep=r+1,t.totalSteps=i,t.progressImage=o??null,t.statusTranslationKey="common.statusGenerating"}),e.addCase(mF,(t,n)=>{const{data:r}=n.payload;t.currentStatusHasSteps=!1,t.currentStep=0,t.totalSteps=0,t.statusTranslationKey="common.statusProcessingComplete",t.canceledSession===r.graph_execution_state_id&&(t.isProcessing=!1,t.isCancelable=!0)}),e.addCase(_F,t=>{t.isProcessing=!1,t.isCancelable=!1,t.isCancelScheduled=!1,t.currentStep=0,t.totalSteps=0,t.statusTranslationKey="common.statusConnected",t.progressImage=null}),e.addCase(zm,t=>{t.isProcessing=!0,t.isCancelable=!0,t.currentStatusHasSteps=!1,t.statusTranslationKey="common.statusPreparing"}),e.addCase(Oc.fulfilled,(t,n)=>{t.canceledSession=n.meta.arg.session_id,t.isProcessing=!1,t.isCancelable=!1,t.isCancelScheduled=!1,t.currentStep=0,t.totalSteps=0,t.statusTranslationKey="common.statusConnected",t.progressImage=null,t.toastQueue.push(lc({title:jp("toast.canceled"),status:"warning"}))}),e.addCase(wE,t=>{t.wasSchemaParsed=!0}),e.addMatcher(S$,(t,n)=>{var i,o,s;t.isProcessing=!1,t.isCancelable=!1,t.isCancelScheduled=!1,t.currentStep=0,t.totalSteps=0,t.statusTranslationKey="common.statusConnected",t.progressImage=null;let r;((i=n.payload)==null?void 0:i.status)===422?r="Validation Error":(o=n.payload)!=null&&o.error&&(r=(s=n.payload)==null?void 0:s.error),t.toastQueue.push(lc({title:jp("toast.serverError"),status:"error",description:r}))}),e.addMatcher(F1e,(t,n)=>{t.isProcessing=!1,t.isCancelable=!0,t.currentStatusHasSteps=!1,t.currentStep=0,t.totalSteps=0,t.statusTranslationKey="common.statusError",t.progressImage=null,t.toastQueue.push(lc({title:jp("toast.serverError"),status:"error",description:mle(n.payload.data.error_type)}))})}}),{setIsProcessing:I7e,setShouldConfirmOnDelete:M7e,setCurrentStatus:N7e,setIsCancelable:L7e,setEnableImageDebugging:D7e,addToast:Yn,clearToastQueue:$7e,cancelScheduled:F7e,scheduledCancelAborted:B7e,cancelTypeChanged:U7e,subscribedNodeIdsSet:z7e,consoleLogLevelChanged:V7e,shouldLogToConsoleChanged:j7e,isPersistedChanged:G7e,shouldAntialiasProgressImageChanged:H7e,languageChanged:W7e,progressImageSet:N1e,setIsNodesEnabled:q7e,shouldUseNSFWCheckerChanged:L1e,shouldUseWatermarkerChanged:D1e}=zU.actions,$1e=zU.reducer,F1e=Lo(ZT,TF,AF),B1e={searchFolder:null,advancedAddScanModel:null},VU=An({name:"modelmanager",initialState:B1e,reducers:{setSearchFolder:(e,t)=>{e.searchFolder=t.payload},setAdvancedAddScanModel:(e,t)=>{e.advancedAddScanModel=t.payload}}}),{setSearchFolder:K7e,setAdvancedAddScanModel:X7e}=VU.actions,U1e=VU.reducer,jU={shift:!1},GU=An({name:"hotkeys",initialState:jU,reducers:{shiftKeyPressed:(e,t)=>{e.shift=t.payload}}}),{shiftKeyPressed:Y7e}=GU.actions,z1e=GU.reducer,V1e=dQ(tee);HU=d5=void 0;var j1e=V1e,G1e=function(){var t=[],n=[],r=void 0,i=function(u){return r=u,function(d){return function(f){return j1e.compose.apply(void 0,n)(d)(f)}}},o=function(){for(var u,d,f=arguments.length,h=Array(f),g=0;g=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(u){throw u},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o=!0,s=!1,a;return{s:function(){n=n.call(e)},n:function(){var u=n.next();return o=u.done,u},e:function(u){s=!0,a=u},f:function(){try{!o&&n.return!=null&&n.return()}finally{if(s)throw a}}}}function qU(e,t){if(e){if(typeof e=="string")return VO(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return VO(e,t)}}function VO(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=arguments.length>2?arguments[2]:void 0,i=r.prefix,o=r.driver,s=r.persistWholeStore,a=r.serialize;try{var l=s?i_e:o_e;yield l(t,n,{prefix:i,driver:o,serialize:a})}catch(u){console.warn("redux-remember: persist error",u)}});return function(){return e.apply(this,arguments)}}();function WO(e,t,n,r,i,o,s){try{var a=e[o](s),l=a.value}catch(u){n(u);return}a.done?t(l):Promise.resolve(l).then(r,i)}function qO(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var o=e.apply(t,n);function s(l){WO(o,r,i,s,a,"next",l)}function a(l){WO(o,r,i,s,a,"throw",l)}s(void 0)})}}var a_e=function(){var e=qO(function*(t,n,r){var i=r.prefix,o=r.driver,s=r.serialize,a=r.unserialize,l=r.persistThrottle,u=r.persistDebounce,d=r.persistWholeStore;yield J1e(t,n,{prefix:i,driver:o,unserialize:a,persistWholeStore:d});var f={},h=function(){var g=qO(function*(){var m=WU(t.getState(),n);yield s_e(m,f,{prefix:i,driver:o,serialize:s,persistWholeStore:d}),EE(m,f)||t.dispatch({type:K1e,payload:m}),f=m});return function(){return g.apply(this,arguments)}}();u&&u>0?t.subscribe(Y1e(h,u)):t.subscribe(X1e(h,l))});return function(n,r,i){return e.apply(this,arguments)}}();const l_e=a_e;function Xg(e){"@babel/helpers - typeof";return Xg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Xg(e)}function KO(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),n.push.apply(n,r)}return n}function Hx(e){for(var t=1;t0&&arguments[0]!==void 0?arguments[0]:n.state,i=arguments.length>1?arguments[1]:void 0;i.type&&(i.type==="@@INIT"||i.type.startsWith("@@redux/INIT"))&&(n.state=Hx({},r));var o=typeof t=="function"?t:Qf(t);switch(i.type){case f5:return n.state=o(Hx(Hx({},n.state),i.payload||{}),{type:f5}),n.state;default:return o(r,i)}}},h_e=function(t,n){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=r.prefix,o=i===void 0?"@@remember-":i,s=r.serialize,a=s===void 0?function(x,_){return JSON.stringify(x)}:s,l=r.unserialize,u=l===void 0?function(x,_){return JSON.parse(x)}:l,d=r.persistThrottle,f=d===void 0?100:d,h=r.persistDebounce,g=r.persistWholeStore,m=g===void 0?!1:g;if(!t)throw Error("redux-remember error: driver required");if(!Array.isArray(n))throw Error("redux-remember error: rememberedKeys needs to be an array");var v=function(_){return function(b,y,S){var C=_(b,y,S);return l_e(C,n,{driver:t,prefix:o,serialize:a,unserialize:u,persistThrottle:f,persistDebounce:h,persistWholeStore:m}),C}};return v};const Q7e=["chakra-ui-color-mode","i18nextLng","ROARR_FILTER","ROARR_LOG"],p_e="@@invokeai-",g_e=["cursorPosition","isCanvasInitialized","doesCanvasNeedScaling"],m_e=["pendingControlImages"],y_e=["selection","selectedBoardId","galleryView"],v_e=["schema","invocationTemplates"],__e=[],b_e=[],S_e=["currentIteration","currentStep","isCancelable","isConnected","isESRGANAvailable","isGFPGANAvailable","isProcessing","totalIterations","totalSteps","isCancelScheduled","progressImage","wereModelsReceived","wasSchemaParsed","isPersisted","isUploading"],w_e=["shouldShowImageDetails"],x_e={canvas:g_e,gallery:y_e,generation:__e,nodes:v_e,postprocessing:b_e,system:S_e,ui:w_e,controlNet:m_e},C_e=(e,t)=>{const n=mb(e,x_e[t]??[]);return JSON.stringify(n)},T_e={canvas:x$,gallery:IF,generation:ys,nodes:IU,postprocessing:LU,system:UU,config:r$,ui:v$,hotkeys:jU,controlNet:H3},E_e=(e,t)=>Lae(JSON.parse(e),T_e[t]),XU=Me("nodes/textToImageGraphBuilt"),YU=Me("nodes/imageToImageGraphBuilt"),QU=Me("nodes/canvasGraphBuilt"),ZU=Me("nodes/nodesGraphBuilt"),A_e=Lo(XU,YU,QU,ZU),P_e=e=>{if(A_e(e)&&e.payload.nodes){const t={};return{...e,payload:{...e.payload,nodes:t}}}return qg.fulfilled.match(e)?{...e,payload:""}:wE.match(e)?{...e,payload:""}:e},R_e=["canvas/setCursorPosition","canvas/setStageCoordinates","canvas/setStageScale","canvas/setIsDrawing","canvas/setBoundingBoxCoordinates","canvas/setBoundingBoxDimensions","canvas/setIsDrawing","canvas/addPointToCurrentLine","socket/socketGeneratorProgress","socket/appSocketGeneratorProgress","hotkeys/shiftKeyPressed","@@REMEMBER_PERSISTED"],O_e=e=>e,k_e=()=>{Oe({actionCreator:dce,effect:async(e,{dispatch:t,getState:n})=>{const r=ke("canvas"),i=n(),{sessionId:o,isProcessing:s}=i.system,a=e.payload;if(s){if(!a){r.debug("No canvas session, skipping cancel");return}if(a!==o){r.debug({canvasSessionId:a,session_id:o},"Canvas session does not match global session, skipping cancel");return}t(Oc({session_id:o}))}}})};Me("app/appStarted");const I_e=()=>{Oe({matcher:we.endpoints.listImages.matchFulfilled,effect:async(e,{dispatch:t,unsubscribe:n,cancelActiveListeners:r})=>{if(e.meta.arg.queryCacheKey!==Jo({board_id:"none",categories:Jr}))return;r(),n();const i=e.payload;if(i.ids.length>0){const o=Cn.getSelectors().selectAll(i)[0];t(Gs(o??null))}}})},AE=iu.injectEndpoints({endpoints:e=>({getAppVersion:e.query({query:()=>({url:"app/version",method:"GET"}),providesTags:["AppVersion"],keepUnusedDataFor:864e5}),getAppConfig:e.query({query:()=>({url:"app/config",method:"GET"}),providesTags:["AppConfig"],keepUnusedDataFor:864e5})})}),{useGetAppVersionQuery:Z7e,useGetAppConfigQuery:J7e}=AE,M_e=()=>{Oe({matcher:AE.endpoints.getAppConfig.matchFulfilled,effect:async(e,{getState:t,dispatch:n})=>{const{infill_methods:r=[],nsfw_methods:i=[],watermarking_methods:o=[]}=e.payload,s=t().generation.infillMethod;r.includes(s)||n(jue(r[0])),i.includes("nsfw_checker")||n(L1e(!1)),o.includes("invisible_watermark")||n(D1e(!1))}})},N_e=Me("app/appStarted"),L_e=()=>{Oe({actionCreator:N_e,effect:async(e,{unsubscribe:t,cancelActiveListeners:n})=>{n(),t()}})},PE={memoizeOptions:{resultEqualityCheck:gb}},JU=(e,t)=>{var f;const{generation:n,canvas:r,nodes:i,controlNet:o}=e,s=((f=n.initialImage)==null?void 0:f.imageName)===t,a=r.layerState.objects.some(h=>h.kind==="image"&&h.imageName===t),l=i.nodes.some(h=>Hu(h.data.inputs,g=>{var m;return g.type==="image"&&((m=g.value)==null?void 0:m.image_name)===t})),u=Hu(o.controlNets,h=>h.controlImage===t||h.processedControlImage===t);return{isInitialImage:s,isCanvasImage:a,isNodesImage:l,isControlNetImage:u}},D_e=mi([e=>e],e=>{const{imagesToDelete:t}=e.deleteImageModal;return t.length?t.map(r=>JU(e,r.image_name)):[]},PE),$_e=()=>{Oe({matcher:we.endpoints.deleteBoardAndImages.matchFulfilled,effect:async(e,{dispatch:t,getState:n})=>{const{deleted_images:r}=e.payload;let i=!1,o=!1,s=!1,a=!1;const l=n();r.forEach(u=>{const d=JU(l,u);d.isInitialImage&&!i&&(t(FT()),i=!0),d.isCanvasImage&&!o&&(t(BT()),o=!0),d.isNodesImage&&!s&&(t(xE()),s=!0),d.isControlNetImage&&!a&&(t(tE()),a=!0)})}})},F_e=()=>{Oe({matcher:Lo(W3,G1),effect:async(e,{getState:t,dispatch:n,condition:r,cancelActiveListeners:i})=>{i();const o=t(),s=W3.match(e)?e.payload:o.gallery.selectedBoardId,l=(G1.match(e)?e.payload:o.gallery.galleryView)==="images"?Jr:Ll,u={board_id:s??"none",categories:l};if(await r(()=>we.endpoints.listImages.select(u)(t()).isSuccess,5e3)){const{data:f}=we.endpoints.listImages.select(u)(t());if(f){const h=j1.selectAll(f)[0];n(Gs(h??null))}else n(Gs(null))}else n(Gs(null))}})},B_e=Me("canvas/canvasSavedToGallery"),U_e=Me("canvas/canvasCopiedToClipboard"),z_e=Me("canvas/canvasDownloadedAsImage"),V_e=Me("canvas/canvasMerged"),j_e=Me("canvas/stagingAreaImageSaved");let ez=null,tz=null;const eMe=e=>{ez=e},gS=()=>ez,tMe=e=>{tz=e},G_e=()=>tz,H_e=async e=>new Promise((t,n)=>{e.toBlob(r=>{if(r){t(r);return}n("Unable to create Blob")})}),c_=async(e,t)=>await H_e(e.toCanvas(t)),RE=async e=>{const t=gS();if(!t)return;const{shouldCropToBoundingBoxOnSave:n,boundingBoxCoordinates:r,boundingBoxDimensions:i}=e.canvas,o=t.clone();o.scale({x:1,y:1});const s=o.getAbsolutePosition(),a=n?{x:r.x+s.x,y:r.y+s.y,width:i.width,height:i.height}:o.getClientRect();return c_(o,a)},W_e=e=>{navigator.clipboard.write([new ClipboardItem({[e.type]:e})])},q_e=()=>{Oe({actionCreator:U_e,effect:async(e,{dispatch:t,getState:n})=>{const r=fS.get().child({namespace:"canvasCopiedToClipboardListener"}),i=n(),o=await RE(i);if(!o){r.error("Problem getting base layer blob"),t(Yn({title:"Problem Copying Canvas",description:"Unable to export base layer",status:"error"}));return}W_e(o),t(Yn({title:"Canvas Copied to Clipboard",status:"success"}))}})},K_e=(e,t)=>{const n=URL.createObjectURL(e),r=document.createElement("a");r.href=n,r.download=t,document.body.appendChild(r),r.click(),document.body.removeChild(r),r.remove()},X_e=()=>{Oe({actionCreator:z_e,effect:async(e,{dispatch:t,getState:n})=>{const r=fS.get().child({namespace:"canvasSavedToGalleryListener"}),i=n(),o=await RE(i);if(!o){r.error("Problem getting base layer blob"),t(Yn({title:"Problem Downloading Canvas",description:"Unable to export base layer",status:"error"}));return}K_e(o,"canvas.png"),t(Yn({title:"Canvas Downloaded",status:"success"}))}})},Y_e=async()=>{const e=gS();if(!e)return;const t=e.clone();return t.scale({x:1,y:1}),c_(t,t.getClientRect())},Q_e=()=>{Oe({actionCreator:V_e,effect:async(e,{dispatch:t})=>{const n=fS.get().child({namespace:"canvasCopiedToClipboardListener"}),r=await Y_e();if(!r){n.error("Problem getting base layer blob"),t(Yn({title:"Problem Merging Canvas",description:"Unable to export base layer",status:"error"}));return}const i=gS();if(!i){n.error("Problem getting canvas base layer"),t(Yn({title:"Problem Merging Canvas",description:"Unable to export base layer",status:"error"}));return}const o=i.getClientRect({relativeTo:i.getParent()}),s=await t(we.endpoints.uploadImage.initiate({file:new File([r],"mergedCanvas.png",{type:"image/png"}),image_category:"general",is_intermediate:!0,postUploadAction:{type:"TOAST",toastOptions:{title:"Canvas Merged"}}})).unwrap(),{image_name:a}=s;t(fce({kind:"image",layer:"base",imageName:a,...o}))}})},Z_e=()=>{Oe({actionCreator:B_e,effect:async(e,{dispatch:t,getState:n})=>{const r=ke("canvas"),i=n(),o=await RE(i);if(!o){r.error("Problem getting base layer blob"),t(Yn({title:"Problem Saving Canvas",description:"Unable to export base layer",status:"error"}));return}const{autoAddBoardId:s}=i.gallery;t(we.endpoints.uploadImage.initiate({file:new File([o],"savedCanvas.png",{type:"image/png"}),image_category:"general",is_intermediate:!1,board_id:s==="none"?void 0:s,crop_visible:!0,postUploadAction:{type:"TOAST",toastOptions:{title:"Canvas Saved to Gallery"}}}))}})},J_e=(e,t,n)=>{var f;if(!(vfe.match(e)||PR.match(e)||eE.match(e)||_fe.match(e)||RR.match(e))||RR.match(e)&&((f=n.controlNet.controlNets[e.payload.controlNetId])==null?void 0:f.shouldAutoConfig)===!0)return!1;const i=t.controlNet.controlNets[e.payload.controlNetId];if(!i)return!1;const{controlImage:o,processorType:s,shouldAutoConfig:a}=i;if(PR.match(e)&&!a)return!1;const l=s!=="none",u=t.system.isProcessing;return l&&!u&&!!o},ebe=()=>{Oe({predicate:J_e,effect:async(e,{dispatch:t,cancelActiveListeners:n,delay:r})=>{const i=ke("session"),{controlNetId:o}=e.payload;n(),i.trace("ControlNet auto-process triggered"),await r(300),t(JT({controlNetId:o}))}})},kc=Me("system/sessionReadyToInvoke"),nz=e=>(e==null?void 0:e.type)==="image_output",tbe=()=>{Oe({actionCreator:JT,effect:async(e,{dispatch:t,getState:n,take:r})=>{const i=ke("session"),{controlNetId:o}=e.payload,s=n().controlNet.controlNets[o];if(!(s!=null&&s.controlImage)){i.error("Unable to process ControlNet image");return}const a={nodes:{[s.processorNode.id]:{...s.processorNode,is_intermediate:!0,image:{image_name:s.controlImage}}}},l=t(jr({graph:a})),[u]=await r(h=>jr.fulfilled.match(h)&&h.meta.requestId===l.requestId),d=u.payload.id;t(kc());const[f]=await r(h=>QT.match(h)&&h.payload.data.graph_execution_state_id===d);if(nz(f.payload.data.result)){const{image_name:h}=f.payload.data.result.image,[{payload:g}]=await r(v=>we.endpoints.getImageDTO.matchFulfilled(v)&&v.payload.image_name===h),m=g;i.debug({controlNetId:e.payload,processedControlImage:m},"ControlNet image processed"),t(yfe({controlNetId:o,processedControlImage:m.image_name}))}}})},nbe=()=>{Oe({matcher:we.endpoints.addImageToBoard.matchFulfilled,effect:e=>{const t=ke("images"),{board_id:n,imageDTO:r}=e.meta.arg.originalArgs;t.debug({board_id:n,imageDTO:r},"Image added to board")}})},rbe=()=>{Oe({matcher:we.endpoints.addImageToBoard.matchRejected,effect:e=>{const t=ke("images"),{board_id:n,imageDTO:r}=e.meta.arg.originalArgs;t.debug({board_id:n,imageDTO:r},"Problem adding image to board")}})},OE=Me("deleteImageModal/imageDeletionConfirmed"),nMe=e=>e.gallery,rMe=mi(e=>e,e=>e.gallery.selection[e.gallery.selection.length-1],PE),rz=mi([e=>e],e=>{const{selectedBoardId:t,galleryView:n}=e.gallery;return{board_id:t,categories:n==="images"?Jr:Ll,offset:0,limit:mce,is_intermediate:!1}},PE),ibe=()=>{Oe({actionCreator:OE,effect:async(e,{dispatch:t,getState:n,condition:r})=>{var h;const{imageDTOs:i,imagesUsage:o}=e.payload;if(i.length!==1||o.length!==1)return;const s=i[0],a=o[0];if(!s||!a)return;t(nE(!1));const l=n(),u=(h=l.gallery.selection[l.gallery.selection.length-1])==null?void 0:h.image_name;if(s&&(s==null?void 0:s.image_name)===u){const{image_name:g}=s,m=rz(l),{data:v}=we.endpoints.listImages.select(m)(l),x=v?Cn.getSelectors().selectAll(v):[],_=x.findIndex(C=>C.image_name===g),b=x.filter(C=>C.image_name!==g),y=Ml(_,0,b.length-1),S=b[y];t(Gs(S||null))}a.isCanvasImage&&t(BT()),a.isControlNetImage&&t(tE()),a.isInitialImage&&t(FT()),a.isNodesImage&&t(xE());const{requestId:d}=t(we.endpoints.deleteImage.initiate(s));await r(g=>we.endpoints.deleteImage.matchFulfilled(g)&&g.meta.requestId===d,3e4)&&t(iu.util.invalidateTags([{type:"Board",id:s.board_id}]))}})},obe=()=>{Oe({actionCreator:OE,effect:async(e,{dispatch:t,getState:n})=>{const{imageDTOs:r,imagesUsage:i}=e.payload;if(!(r.length<1||i.length<1))try{await t(we.endpoints.deleteImages.initiate({imageDTOs:r})).unwrap();const o=n(),s=rz(o),{data:a}=we.endpoints.listImages.select(s)(o),l=a?Cn.getSelectors().selectAll(a)[0]:void 0;t(Gs(l||null)),t(nE(!1)),i.some(u=>u.isCanvasImage)&&t(BT()),i.some(u=>u.isControlNetImage)&&t(tE()),i.some(u=>u.isInitialImage)&&t(FT()),i.some(u=>u.isNodesImage)&&t(xE())}catch{}}})},sbe=()=>{Oe({matcher:we.endpoints.deleteImage.matchPending,effect:()=>{}})},abe=()=>{Oe({matcher:we.endpoints.deleteImage.matchFulfilled,effect:e=>{ke("images").debug({imageDTO:e.meta.arg.originalArgs},"Image deleted")}})},lbe=()=>{Oe({matcher:we.endpoints.deleteImage.matchRejected,effect:e=>{ke("images").debug({imageDTO:e.meta.arg.originalArgs},"Unable to delete image")}})},iz=Me("dnd/dndDropped"),ube=()=>{Oe({actionCreator:iz,effect:async(e,{dispatch:t})=>{const n=ke("images"),{activeData:r,overData:i}=e.payload;if(r.payloadType==="IMAGE_DTO"?n.debug({activeData:r,overData:i},"Image dropped"):r.payloadType==="IMAGE_DTOS"?n.debug({activeData:r,overData:i},`Images (${r.payload.imageDTOs.length}) dropped`):n.debug({activeData:r,overData:i},"Unknown payload dropped"),i.actionType==="SET_CURRENT_IMAGE"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){t(Gs(r.payload.imageDTO));return}if(i.actionType==="SET_INITIAL_IMAGE"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){t(vb(r.payload.imageDTO));return}if(i.actionType==="SET_CONTROLNET_IMAGE"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){const{controlNetId:o}=i.context;t(eE({controlImage:r.payload.imageDTO.image_name,controlNetId:o}));return}if(i.actionType==="SET_CANVAS_INITIAL_IMAGE"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){t(T$(r.payload.imageDTO));return}if(i.actionType==="SET_NODES_IMAGE"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){const{fieldName:o,nodeId:s}=i.context;t(NU({nodeId:s,fieldName:o,value:r.payload.imageDTO}));return}if(i.actionType==="ADD_TO_BOARD"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){const{imageDTO:o}=r.payload,{boardId:s}=i.context;t(we.endpoints.addImageToBoard.initiate({imageDTO:o,board_id:s}));return}if(i.actionType==="REMOVE_FROM_BOARD"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){const{imageDTO:o}=r.payload;t(we.endpoints.removeImageFromBoard.initiate({imageDTO:o}));return}if(i.actionType==="ADD_TO_BOARD"&&r.payloadType==="IMAGE_DTOS"&&r.payload.imageDTOs){const{imageDTOs:o}=r.payload,{boardId:s}=i.context;t(we.endpoints.addImagesToBoard.initiate({imageDTOs:o,board_id:s}));return}if(i.actionType==="REMOVE_FROM_BOARD"&&r.payloadType==="IMAGE_DTOS"&&r.payload.imageDTOs){const{imageDTOs:o}=r.payload;t(we.endpoints.removeImagesFromBoard.initiate({imageDTOs:o}));return}}})},cbe=()=>{Oe({matcher:we.endpoints.removeImageFromBoard.matchFulfilled,effect:e=>{const t=ke("images"),n=e.meta.arg.originalArgs;t.debug({imageDTO:n},"Image removed from board")}})},dbe=()=>{Oe({matcher:we.endpoints.removeImageFromBoard.matchRejected,effect:e=>{const t=ke("images"),n=e.meta.arg.originalArgs;t.debug({imageDTO:n},"Problem removing image from board")}})},fbe=()=>{Oe({actionCreator:Efe,effect:async(e,{dispatch:t,getState:n})=>{const r=e.payload,i=n(),{shouldConfirmOnDelete:o}=i.system,s=D_e(n()),a=s.some(l=>l.isCanvasImage)||s.some(l=>l.isInitialImage)||s.some(l=>l.isControlNetImage)||s.some(l=>l.isNodesImage);if(o||a){t(nE(!0));return}t(OE({imageDTOs:r,imagesUsage:s}))}})},xd={title:"Image Uploaded",status:"success"},hbe=()=>{Oe({matcher:we.endpoints.uploadImage.matchFulfilled,effect:(e,{dispatch:t,getState:n})=>{const r=ke("images"),i=e.payload,o=n(),{autoAddBoardId:s}=o.gallery;r.debug({imageDTO:i},"Image uploaded");const{postUploadAction:a}=e.meta.arg.originalArgs;if(!(e.payload.is_intermediate&&!a)){if((a==null?void 0:a.type)==="TOAST"){const{toastOptions:l}=a;if(!s||s==="none")t(Yn({...xd,...l}));else{t(we.endpoints.addImageToBoard.initiate({board_id:s,imageDTO:i}));const{data:u}=Yi.endpoints.listAllBoards.select()(o),d=u==null?void 0:u.find(h=>h.board_id===s),f=d?`Added to board ${d.board_name}`:`Added to board ${s}`;t(Yn({...xd,description:f}))}return}if((a==null?void 0:a.type)==="SET_CANVAS_INITIAL_IMAGE"){t(T$(i)),t(Yn({...xd,description:"Set as canvas initial image"}));return}if((a==null?void 0:a.type)==="SET_CONTROLNET_IMAGE"){const{controlNetId:l}=a;t(eE({controlNetId:l,controlImage:i.image_name})),t(Yn({...xd,description:"Set as control image"}));return}if((a==null?void 0:a.type)==="SET_INITIAL_IMAGE"){t(vb(i)),t(Yn({...xd,description:"Set as initial image"}));return}if((a==null?void 0:a.type)==="SET_NODES_IMAGE"){const{nodeId:l,fieldName:u}=a;t(NU({nodeId:l,fieldName:u,value:i})),t(Yn({...xd,description:`Set as node field ${u}`}));return}}}})},pbe=()=>{Oe({matcher:we.endpoints.uploadImage.matchRejected,effect:(e,{dispatch:t})=>{const n=ke("images"),r={arg:{...mb(e.meta.arg.originalArgs,["file","postUploadAction"]),file:""}};n.error({...r},"Image upload failed"),t(Yn({title:"Image Upload Failed",description:e.error.message,status:"error"}))}})},gbe=Me("generation/initialImageSelected"),mbe=Me("generation/modelSelected"),ybe=()=>{Oe({actionCreator:gbe,effect:(e,{dispatch:t})=>{if(!e.payload){t(Yn(lc({title:jp("toast.imageNotLoadedDesc"),status:"error"})));return}t(vb(e.payload)),t(Yn(lc(jp("toast.sentToImageToImage"))))}})},vbe=()=>{Oe({actionCreator:mbe,effect:(e,{getState:t,dispatch:n})=>{var l;const r=ke("models"),i=t(),o=p$.safeParse(e.payload);if(!o.success){r.error({error:o.error.format()},"Failed to parse main model");return}const s=o.data,{base_model:a}=s;if(((l=i.generation.model)==null?void 0:l.base_model)!==a){let u=0;gc(i.lora.loras,(h,g)=>{h.base_model!==a&&(n($F(g)),u+=1)});const{vae:d}=i.generation;d&&d.base_model!==a&&(n(m$(null)),u+=1);const{controlNets:f}=i.controlNet;gc(f,(h,g)=>{var m;((m=h.model)==null?void 0:m.base_model)!==a&&(n(RF({controlNetId:g})),u+=1)}),u>0&&n(Yn(lc({title:`Base model changed, cleared ${u} incompatible submodel${u===1?"":"s"}`,status:"warning"})))}n(Nl(s))}})},p5=hu({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),XO=hu({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),YO=hu({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),QO=hu({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),ZO=hu({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),g5=hu({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),_be=({base_model:e,model_type:t,model_name:n})=>`${e}/${t}/${n}`,Cd=e=>{const t=[];return e.forEach(n=>{const r={...Qr(n),id:_be(n)};t.push(r)}),t},Aa=iu.injectEndpoints({endpoints:e=>({getOnnxModels:e.query({query:t=>{const n={model_type:"onnx",base_models:t};return`models/?${Tv.stringify(n,{arrayFormat:"none"})}`},providesTags:(t,n,r)=>{const i=[{type:"OnnxModel",id:tt}];return t&&i.push(...t.ids.map(o=>({type:"OnnxModel",id:o}))),i},transformResponse:(t,n,r)=>{const i=Cd(t.models);return XO.setAll(XO.getInitialState(),i)}}),getMainModels:e.query({query:t=>{const n={model_type:"main",base_models:t};return`models/?${Tv.stringify(n,{arrayFormat:"none"})}`},providesTags:(t,n,r)=>{const i=[{type:"MainModel",id:tt}];return t&&i.push(...t.ids.map(o=>({type:"MainModel",id:o}))),i},transformResponse:(t,n,r)=>{const i=Cd(t.models);return p5.setAll(p5.getInitialState(),i)}}),updateMainModels:e.mutation({query:({base_model:t,model_name:n,body:r})=>({url:`models/${t}/main/${n}`,method:"PATCH",body:r}),invalidatesTags:[{type:"MainModel",id:tt},{type:"SDXLRefinerModel",id:tt},{type:"OnnxModel",id:tt}]}),importMainModels:e.mutation({query:({body:t})=>({url:"models/import",method:"POST",body:t}),invalidatesTags:[{type:"MainModel",id:tt},{type:"SDXLRefinerModel",id:tt},{type:"OnnxModel",id:tt}]}),addMainModels:e.mutation({query:({body:t})=>({url:"models/add",method:"POST",body:t}),invalidatesTags:[{type:"MainModel",id:tt},{type:"SDXLRefinerModel",id:tt},{type:"OnnxModel",id:tt}]}),deleteMainModels:e.mutation({query:({base_model:t,model_name:n,model_type:r})=>({url:`models/${t}/${r}/${n}`,method:"DELETE"}),invalidatesTags:[{type:"MainModel",id:tt},{type:"SDXLRefinerModel",id:tt},{type:"OnnxModel",id:tt}]}),convertMainModels:e.mutation({query:({base_model:t,model_name:n,convert_dest_directory:r})=>({url:`models/convert/${t}/main/${n}`,method:"PUT",params:{convert_dest_directory:r}}),invalidatesTags:[{type:"MainModel",id:tt},{type:"SDXLRefinerModel",id:tt},{type:"OnnxModel",id:tt}]}),mergeMainModels:e.mutation({query:({base_model:t,body:n})=>({url:`models/merge/${t}`,method:"PUT",body:n}),invalidatesTags:[{type:"MainModel",id:tt},{type:"SDXLRefinerModel",id:tt},{type:"OnnxModel",id:tt}]}),syncModels:e.mutation({query:()=>({url:"models/sync",method:"POST"}),invalidatesTags:[{type:"MainModel",id:tt},{type:"SDXLRefinerModel",id:tt},{type:"OnnxModel",id:tt}]}),getLoRAModels:e.query({query:()=>({url:"models/",params:{model_type:"lora"}}),providesTags:(t,n,r)=>{const i=[{type:"LoRAModel",id:tt}];return t&&i.push(...t.ids.map(o=>({type:"LoRAModel",id:o}))),i},transformResponse:(t,n,r)=>{const i=Cd(t.models);return YO.setAll(YO.getInitialState(),i)}}),updateLoRAModels:e.mutation({query:({base_model:t,model_name:n,body:r})=>({url:`models/${t}/lora/${n}`,method:"PATCH",body:r}),invalidatesTags:[{type:"LoRAModel",id:tt}]}),deleteLoRAModels:e.mutation({query:({base_model:t,model_name:n})=>({url:`models/${t}/lora/${n}`,method:"DELETE"}),invalidatesTags:[{type:"LoRAModel",id:tt}]}),getControlNetModels:e.query({query:()=>({url:"models/",params:{model_type:"controlnet"}}),providesTags:(t,n,r)=>{const i=[{type:"ControlNetModel",id:tt}];return t&&i.push(...t.ids.map(o=>({type:"ControlNetModel",id:o}))),i},transformResponse:(t,n,r)=>{const i=Cd(t.models);return QO.setAll(QO.getInitialState(),i)}}),getVaeModels:e.query({query:()=>({url:"models/",params:{model_type:"vae"}}),providesTags:(t,n,r)=>{const i=[{type:"VaeModel",id:tt}];return t&&i.push(...t.ids.map(o=>({type:"VaeModel",id:o}))),i},transformResponse:(t,n,r)=>{const i=Cd(t.models);return g5.setAll(g5.getInitialState(),i)}}),getTextualInversionModels:e.query({query:()=>({url:"models/",params:{model_type:"embedding"}}),providesTags:(t,n,r)=>{const i=[{type:"TextualInversionModel",id:tt}];return t&&i.push(...t.ids.map(o=>({type:"TextualInversionModel",id:o}))),i},transformResponse:(t,n,r)=>{const i=Cd(t.models);return ZO.setAll(ZO.getInitialState(),i)}}),getModelsInFolder:e.query({query:t=>({url:`/models/search?${Tv.stringify(t,{})}`}),providesTags:(t,n,r)=>{const i=[{type:"ScannedModels",id:tt}];return t&&i.push(...t.map(o=>({type:"ScannedModels",id:o}))),i}}),getCheckpointConfigs:e.query({query:()=>({url:"/models/ckpt_confs"})})})}),{useGetMainModelsQuery:iMe,useGetOnnxModelsQuery:oMe,useGetControlNetModelsQuery:sMe,useGetLoRAModelsQuery:aMe,useGetTextualInversionModelsQuery:lMe,useGetVaeModelsQuery:uMe,useUpdateMainModelsMutation:cMe,useDeleteMainModelsMutation:dMe,useImportMainModelsMutation:fMe,useAddMainModelsMutation:hMe,useConvertMainModelsMutation:pMe,useMergeMainModelsMutation:gMe,useDeleteLoRAModelsMutation:mMe,useUpdateLoRAModelsMutation:yMe,useSyncModelsMutation:vMe,useGetModelsInFolderQuery:_Me,useGetCheckpointConfigsQuery:bMe}=Aa,bbe=()=>{Oe({predicate:(e,t)=>Aa.endpoints.getMainModels.matchFulfilled(t)&&!t.meta.arg.originalArgs.includes("sdxl-refiner"),effect:async(e,{getState:t,dispatch:n})=>{const r=ke("models");r.info({models:e.payload.entities},`Main models loaded (${e.payload.ids.length})`);const i=t().generation.model;if(Hu(e.payload.entities,u=>(u==null?void 0:u.model_name)===(i==null?void 0:i.model_name)&&(u==null?void 0:u.base_model)===(i==null?void 0:i.base_model)&&(u==null?void 0:u.model_type)===(i==null?void 0:i.model_type)))return;const s=e.payload.ids[0],a=e.payload.entities[s];if(!a){n(Nl(null));return}const l=p$.safeParse(a);if(!l.success){r.error({error:l.error.format()},"Failed to parse main model");return}n(Nl(l.data))}}),Oe({predicate:(e,t)=>Aa.endpoints.getMainModels.matchFulfilled(t)&&t.meta.arg.originalArgs.includes("sdxl-refiner"),effect:async(e,{getState:t,dispatch:n})=>{const r=ke("models");r.info({models:e.payload.entities},`SDXL Refiner models loaded (${e.payload.ids.length})`);const i=t().sdxl.refinerModel;if(Hu(e.payload.entities,u=>(u==null?void 0:u.model_name)===(i==null?void 0:i.model_name)&&(u==null?void 0:u.base_model)===(i==null?void 0:i.base_model)&&(u==null?void 0:u.model_type)===(i==null?void 0:i.model_type)))return;const s=e.payload.ids[0],a=e.payload.entities[s];if(!a){n(kO(null)),n(f1e(!1));return}const l=h$.safeParse(a);if(!l.success){r.error({error:l.error.format()},"Failed to parse SDXL Refiner Model");return}n(kO(l.data))}}),Oe({matcher:Aa.endpoints.getVaeModels.matchFulfilled,effect:async(e,{getState:t,dispatch:n})=>{const r=ke("models");r.info({models:e.payload.entities},`VAEs loaded (${e.payload.ids.length})`);const i=t().generation.vae;if(i===null||Hu(e.payload.entities,l=>(l==null?void 0:l.model_name)===(i==null?void 0:i.model_name)&&(l==null?void 0:l.base_model)===(i==null?void 0:i.base_model)))return;const s=g5.getSelectors().selectAll(e.payload)[0];if(!s){n(Nl(null));return}const a=$ue.safeParse(s);if(!a.success){r.error({error:a.error.format()},"Failed to parse VAE model");return}n(m$(a.data))}}),Oe({matcher:Aa.endpoints.getLoRAModels.matchFulfilled,effect:async(e,{getState:t,dispatch:n})=>{ke("models").info({models:e.payload.entities},`LoRAs loaded (${e.payload.ids.length})`);const i=t().lora.loras;gc(i,(o,s)=>{Hu(e.payload.entities,l=>(l==null?void 0:l.model_name)===(o==null?void 0:o.model_name)&&(l==null?void 0:l.base_model)===(o==null?void 0:o.base_model))||n($F(s))})}}),Oe({matcher:Aa.endpoints.getControlNetModels.matchFulfilled,effect:async(e,{getState:t,dispatch:n})=>{ke("models").info({models:e.payload.entities},`ControlNet models loaded (${e.payload.ids.length})`);const i=t().controlNet.controlNets;gc(i,(o,s)=>{Hu(e.payload.entities,l=>{var u,d;return(l==null?void 0:l.model_name)===((u=o==null?void 0:o.model)==null?void 0:u.model_name)&&(l==null?void 0:l.base_model)===((d=o==null?void 0:o.model)==null?void 0:d.base_model)})||n(RF({controlNetId:s}))})}}),Oe({matcher:Aa.endpoints.getTextualInversionModels.matchFulfilled,effect:async e=>{ke("models").info({models:e.payload.entities},`Embeddings loaded (${e.payload.ids.length})`)}})},Ya=e=>JSON.parse(JSON.stringify(e)),m5=e=>!("$ref"in e),Sbe=e=>!("$ref"in e),SMe=500,wbe={integer:"integer",float:"float",number:"float",string:"string",boolean:"boolean",enum:"enum",ImageField:"image",image_collection:"image_collection",LatentsField:"latents",ConditioningField:"conditioning",UNetField:"unet",ClipField:"clip",VaeField:"vae",model:"model",refiner_model:"refiner_model",vae_model:"vae_model",lora_model:"lora_model",controlnet_model:"controlnet_model",ControlNetModelField:"controlnet_model",array:"array",item:"item",ColorField:"color",ControlField:"control",control:"control",cfg_scale:"float",control_weight:"float"},xbe=500,Un=e=>`var(--invokeai-colors-${e}-${xbe})`,wMe={integer:{color:"red",colorCssVar:Un("red"),title:"Integer",description:"Integers are whole numbers, without a decimal point."},float:{color:"orange",colorCssVar:Un("orange"),title:"Float",description:"Floats are numbers with a decimal point."},string:{color:"yellow",colorCssVar:Un("yellow"),title:"String",description:"Strings are text."},boolean:{color:"green",colorCssVar:Un("green"),title:"Boolean",description:"Booleans are true or false."},enum:{color:"blue",colorCssVar:Un("blue"),title:"Enum",description:"Enums are values that may be one of a number of options."},image:{color:"purple",colorCssVar:Un("purple"),title:"Image",description:"Images may be passed between nodes."},image_collection:{color:"purple",colorCssVar:Un("purple"),title:"Image Collection",description:"A collection of images."},latents:{color:"pink",colorCssVar:Un("pink"),title:"Latents",description:"Latents may be passed between nodes."},conditioning:{color:"cyan",colorCssVar:Un("cyan"),title:"Conditioning",description:"Conditioning may be passed between nodes."},unet:{color:"red",colorCssVar:Un("red"),title:"UNet",description:"UNet submodel."},clip:{color:"green",colorCssVar:Un("green"),title:"Clip",description:"Tokenizer and text_encoder submodels."},vae:{color:"blue",colorCssVar:Un("blue"),title:"Vae",description:"Vae submodel."},control:{color:"cyan",colorCssVar:Un("cyan"),title:"Control",description:"Control info passed between nodes."},model:{color:"teal",colorCssVar:Un("teal"),title:"Model",description:"Models are models."},refiner_model:{color:"teal",colorCssVar:Un("teal"),title:"Refiner Model",description:"Models are models."},vae_model:{color:"teal",colorCssVar:Un("teal"),title:"VAE",description:"Models are models."},lora_model:{color:"teal",colorCssVar:Un("teal"),title:"LoRA",description:"Models are models."},controlnet_model:{color:"teal",colorCssVar:Un("teal"),title:"ControlNet",description:"Models are models."},array:{color:"gray",colorCssVar:Un("gray"),title:"Array",description:"TODO: Array type description."},item:{color:"gray",colorCssVar:Un("gray"),title:"Collection Item",description:"TODO: Collection Item type description."},color:{color:"gray",colorCssVar:Un("gray"),title:"Color",description:"A RGBA color."}},xMe=250,Wx=e=>{const t=e.$ref.split("/").slice(-1)[0];return t||"UNKNOWN FIELD TYPE"},Cbe=({schemaObject:e,baseField:t})=>{const n={...t,type:"integer",inputRequirement:"always",inputKind:"any",default:e.default??0};return e.multipleOf!==void 0&&(n.multipleOf=e.multipleOf),e.maximum!==void 0&&(n.maximum=e.maximum),e.exclusiveMaximum!==void 0&&(n.exclusiveMaximum=e.exclusiveMaximum),e.minimum!==void 0&&(n.minimum=e.minimum),e.exclusiveMinimum!==void 0&&(n.exclusiveMinimum=e.exclusiveMinimum),n},Tbe=({schemaObject:e,baseField:t})=>{const n={...t,type:"float",inputRequirement:"always",inputKind:"any",default:e.default??0};return e.multipleOf!==void 0&&(n.multipleOf=e.multipleOf),e.maximum!==void 0&&(n.maximum=e.maximum),e.exclusiveMaximum!==void 0&&(n.exclusiveMaximum=e.exclusiveMaximum),e.minimum!==void 0&&(n.minimum=e.minimum),e.exclusiveMinimum!==void 0&&(n.exclusiveMinimum=e.exclusiveMinimum),n},Ebe=({schemaObject:e,baseField:t})=>{const n={...t,type:"string",inputRequirement:"always",inputKind:"any",default:e.default??""};return e.minLength!==void 0&&(n.minLength=e.minLength),e.maxLength!==void 0&&(n.maxLength=e.maxLength),e.pattern!==void 0&&(n.pattern=e.pattern),n},Abe=({schemaObject:e,baseField:t})=>({...t,type:"boolean",inputRequirement:"always",inputKind:"any",default:e.default??!1}),Pbe=({schemaObject:e,baseField:t})=>({...t,type:"model",inputRequirement:"always",inputKind:"direct",default:e.default??void 0}),Rbe=({schemaObject:e,baseField:t})=>({...t,type:"refiner_model",inputRequirement:"always",inputKind:"direct",default:e.default??void 0}),Obe=({schemaObject:e,baseField:t})=>({...t,type:"vae_model",inputRequirement:"always",inputKind:"direct",default:e.default??void 0}),kbe=({schemaObject:e,baseField:t})=>({...t,type:"lora_model",inputRequirement:"always",inputKind:"direct",default:e.default??void 0}),Ibe=({schemaObject:e,baseField:t})=>({...t,type:"controlnet_model",inputRequirement:"always",inputKind:"direct",default:e.default??void 0}),Mbe=({schemaObject:e,baseField:t})=>({...t,type:"image",inputRequirement:"always",inputKind:"any",default:e.default??void 0}),Nbe=({schemaObject:e,baseField:t})=>({...t,type:"image_collection",inputRequirement:"always",inputKind:"any",default:e.default??void 0}),Lbe=({schemaObject:e,baseField:t})=>({...t,type:"latents",inputRequirement:"always",inputKind:"connection",default:e.default??void 0}),Dbe=({schemaObject:e,baseField:t})=>({...t,type:"conditioning",inputRequirement:"always",inputKind:"connection",default:e.default??void 0}),$be=({schemaObject:e,baseField:t})=>({...t,type:"unet",inputRequirement:"always",inputKind:"connection",default:e.default??void 0}),Fbe=({schemaObject:e,baseField:t})=>({...t,type:"clip",inputRequirement:"always",inputKind:"connection",default:e.default??void 0}),Bbe=({schemaObject:e,baseField:t})=>({...t,type:"vae",inputRequirement:"always",inputKind:"connection",default:e.default??void 0}),Ube=({schemaObject:e,baseField:t})=>({...t,type:"control",inputRequirement:"always",inputKind:"connection",default:e.default??void 0}),zbe=({schemaObject:e,baseField:t})=>{const n=e.enum??[];return{...t,type:"enum",enumType:e.type??"string",options:n,inputRequirement:"always",inputKind:"direct",default:e.default??n[0]}},JO=({baseField:e})=>({...e,type:"array",inputRequirement:"always",inputKind:"direct",default:[]}),ek=({baseField:e})=>({...e,type:"item",inputRequirement:"always",inputKind:"direct",default:void 0}),Vbe=({schemaObject:e,baseField:t})=>({...t,type:"color",inputRequirement:"always",inputKind:"direct",default:e.default??{r:127,g:127,b:127,a:255}}),oz=(e,t,n)=>{let r="";n&&t in n?r=n[t]??"UNKNOWN FIELD TYPE":e.type?e.enum?r="enum":e.type&&(r=e.type):e.allOf?r=Wx(e.allOf[0]):e.anyOf?r=Wx(e.anyOf[0]):e.oneOf&&(r=Wx(e.oneOf[0]));const i=wbe[r];if(!i)throw`Field type "${r}" is unknown!`;return i},jbe=(e,t,n)=>{const r=oz(e,t,n),i={name:t,title:e.title??"",description:e.description??""};if(["image"].includes(r))return Mbe({schemaObject:e,baseField:i});if(["image_collection"].includes(r))return Nbe({schemaObject:e,baseField:i});if(["latents"].includes(r))return Lbe({schemaObject:e,baseField:i});if(["conditioning"].includes(r))return Dbe({schemaObject:e,baseField:i});if(["unet"].includes(r))return $be({schemaObject:e,baseField:i});if(["clip"].includes(r))return Fbe({schemaObject:e,baseField:i});if(["vae"].includes(r))return Bbe({schemaObject:e,baseField:i});if(["control"].includes(r))return Ube({schemaObject:e,baseField:i});if(["model"].includes(r))return Pbe({schemaObject:e,baseField:i});if(["refiner_model"].includes(r))return Rbe({schemaObject:e,baseField:i});if(["vae_model"].includes(r))return Obe({schemaObject:e,baseField:i});if(["lora_model"].includes(r))return kbe({schemaObject:e,baseField:i});if(["controlnet_model"].includes(r))return Ibe({schemaObject:e,baseField:i});if(["enum"].includes(r))return zbe({schemaObject:e,baseField:i});if(["integer"].includes(r))return Cbe({schemaObject:e,baseField:i});if(["number","float"].includes(r))return Tbe({schemaObject:e,baseField:i});if(["string"].includes(r))return Ebe({schemaObject:e,baseField:i});if(["boolean"].includes(r))return Abe({schemaObject:e,baseField:i});if(["array"].includes(r))return JO({schemaObject:e,baseField:i});if(["item"].includes(r))return ek({schemaObject:e,baseField:i});if(["color"].includes(r))return Vbe({schemaObject:e,baseField:i});if(["array"].includes(r))return JO({schemaObject:e,baseField:i});if(["item"].includes(r))return ek({schemaObject:e,baseField:i})},Gbe=(e,t,n)=>{const r=e.$ref.split("/").slice(-1)[0];if(!r)throw ke("nodes").error({refObject:Ya(e)},"No output schema name found in ref object"),"No output schema name found in ref object";const i=t.components.schemas[r];if(!i)throw ke("nodes").error({outputSchemaName:r},"Output schema not found"),"Output schema not found";return m5(i)?LT(i.properties,(s,a,l)=>{if(!["type","id"].includes(l)&&!["object"].includes(a.type)&&m5(a)){const u=oz(a,l,n);s[l]={name:l,title:a.title??"",description:a.description??"",type:u}}return s},{}):{}},Hbe=e=>e==="l2i"?["id","type","metadata"]:["id","type","is_intermediate","metadata"],Wbe=["Graph","InvocationMeta","MetadataAccumulatorInvocation"],qbe=e=>{var r;return XD((r=e.components)==null?void 0:r.schemas,(i,o)=>o.includes("Invocation")&&!o.includes("InvocationOutput")&&!Wbe.some(s=>o.includes(s))).reduce((i,o)=>{var s,a,l,u,d;if(Sbe(o)){const f=o.properties.type.default,h=Hbe(f),g=((s=o.ui)==null?void 0:s.title)??o.title.replace("Invocation",""),m=(a=o.ui)==null?void 0:a.type_hints,v={};if(f==="collect"){const y=o.properties.item;v.item={type:"item",name:"item",description:y.description??"",title:"Collection Item",inputKind:"connection",inputRequirement:"always",default:void 0}}else if(f==="iterate"){const y=o.properties.collection;v.collection={type:"array",name:"collection",title:y.title??"",default:[],description:y.description??"",inputRequirement:"always",inputKind:"connection"}}else LT(o.properties,(y,S,C)=>{if(!h.includes(C)&&m5(S)){const T=jbe(S,C,m);T&&(y[C]=T)}return y},v);const x=o.output;let _;if(f==="iterate"){const y=(u=(l=e.components)==null?void 0:l.schemas)==null?void 0:u.IterateInvocationOutput;_={item:{name:"item",title:(y==null?void 0:y.title)??"",description:(y==null?void 0:y.description)??"",type:"array"}}}else _=Gbe(x,e,m);const b={title:g,type:f,tags:((d=o.ui)==null?void 0:d.tags)??[],description:o.description??"",inputs:v,outputs:_};Object.assign(i,{[f]:b})}return i},{})},Kbe=()=>{Oe({actionCreator:qg.fulfilled,effect:(e,{dispatch:t})=>{const n=ke("system"),r=e.payload;n.debug({schemaJSON:r},"Dereferenced OpenAPI schema");const i=qbe(r);n.debug({nodeTemplates:Ya(i)},`Built ${DT(i)} node templates`),t(wE(i))}}),Oe({actionCreator:qg.rejected,effect:()=>{ke("system").error("Problem dereferencing OpenAPI Schema")}})},Xbe=[EvalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError,globalThis.DOMException,globalThis.AssertionError,globalThis.SystemError].filter(Boolean).map(e=>[e.name,e]),Ybe=new Map(Xbe),Qbe=[{property:"name",enumerable:!1},{property:"message",enumerable:!1},{property:"stack",enumerable:!1},{property:"code",enumerable:!0},{property:"cause",enumerable:!1}],y5=Symbol(".toJSON was called"),Zbe=e=>{e[y5]=!0;const t=e.toJSON();return delete e[y5],t},Jbe=e=>Ybe.get(e)??Error,sz=({from:e,seen:t,to:n,forceEnumerable:r,maxDepth:i,depth:o,useToJSON:s,serialize:a})=>{if(!n)if(Array.isArray(e))n=[];else if(!a&&tk(e)){const u=Jbe(e.name);n=new u}else n={};if(t.push(e),o>=i)return n;if(s&&typeof e.toJSON=="function"&&e[y5]!==!0)return Zbe(e);const l=u=>sz({from:u,seen:[...t],forceEnumerable:r,maxDepth:i,depth:o,useToJSON:s,serialize:a});for(const[u,d]of Object.entries(e)){if(typeof Buffer=="function"&&Buffer.isBuffer(d)){n[u]="[object Buffer]";continue}if(d!==null&&typeof d=="object"&&typeof d.pipe=="function"){n[u]="[object Stream]";continue}if(typeof d!="function"){if(!d||typeof d!="object"){n[u]=d;continue}if(!t.includes(e[u])){o++,n[u]=l(e[u]);continue}n[u]="[Circular]"}}for(const{property:u,enumerable:d}of Qbe)typeof e[u]<"u"&&e[u]!==null&&Object.defineProperty(n,u,{value:tk(e[u])?l(e[u]):e[u],enumerable:r?!0:d,configurable:!0,writable:!0});return n};function kE(e,t={}){const{maxDepth:n=Number.POSITIVE_INFINITY,useToJSON:r=!0}=t;return typeof e=="object"&&e!==null?sz({from:e,seen:[],forceEnumerable:!0,maxDepth:n,depth:0,useToJSON:r,serialize:!0}):typeof e=="function"?`[Function: ${e.name??"anonymous"}]`:e}function tk(e){return!!e&&typeof e=="object"&&"name"in e&&"message"in e&&"stack"in e}const eSe=()=>{Oe({actionCreator:Oc.pending,effect:()=>{}})},tSe=()=>{Oe({actionCreator:Oc.fulfilled,effect:e=>{const t=ke("session"),{session_id:n}=e.meta.arg;t.debug({session_id:n},`Session canceled (${n})`)}})},nSe=()=>{Oe({actionCreator:Oc.rejected,effect:e=>{const t=ke("session"),{session_id:n}=e.meta.arg;if(e.payload){const{error:r}=e.payload;t.error({session_id:n,error:kE(r)},"Problem canceling session")}}})},rSe=()=>{Oe({actionCreator:jr.pending,effect:()=>{}})},iSe=()=>{Oe({actionCreator:jr.fulfilled,effect:e=>{const t=ke("session"),n=e.payload;t.debug({session:Ya(n)},`Session created (${n.id})`)}})},oSe=()=>{Oe({actionCreator:jr.rejected,effect:e=>{const t=ke("session");if(e.payload){const{error:n,status:r}=e.payload,i=Ya(e.meta.arg);t.error({graph:i,status:r,error:kE(n)},"Problem creating session")}}})},sSe=()=>{Oe({actionCreator:km.pending,effect:()=>{}})},aSe=()=>{Oe({actionCreator:km.fulfilled,effect:e=>{const t=ke("session"),{session_id:n}=e.meta.arg;t.debug({session_id:n},`Session invoked (${n})`)}})},lSe=()=>{Oe({actionCreator:km.rejected,effect:e=>{const t=ke("session"),{session_id:n}=e.meta.arg;if(e.payload){const{error:r}=e.payload;t.error({session_id:n,error:kE(r)},"Problem invoking session")}}})},uSe=()=>{Oe({actionCreator:kc,effect:(e,{getState:t,dispatch:n})=>{const r=ke("session"),{sessionId:i}=t().system;i&&(r.debug({session_id:i},`Session ready to invoke (${i})})`),n(km({session_id:i})))}})},cSe=()=>{Oe({actionCreator:aF,effect:(e,{dispatch:t,getState:n})=>{ke("socketio").debug("Connected");const{nodes:i,config:o}=n(),{disabledTabs:s}=o;!i.schema&&!s.includes("nodes")&&t(qg()),t(lF(e.payload)),t(Aa.util.invalidateTags([{type:"MainModel",id:tt},{type:"SDXLRefinerModel",id:tt},{type:"LoRAModel",id:tt},{type:"ControlNetModel",id:tt},{type:"VaeModel",id:tt},{type:"TextualInversionModel",id:tt},{type:"ScannedModels",id:tt}])),t(AE.util.invalidateTags(["AppConfig","AppVersion"]))}})},dSe=()=>{Oe({actionCreator:uF,effect:(e,{dispatch:t})=>{ke("socketio").debug("Disconnected"),t(cF(e.payload))}})},fSe=()=>{Oe({actionCreator:bF,effect:(e,{dispatch:t,getState:n})=>{const r=ke("socketio");if(n().system.canceledSession===e.payload.data.graph_execution_state_id){r.trace(e.payload,"Ignored generator progress for canceled session");return}r.trace(e.payload,`Generator progress (${e.payload.data.node.type})`),t(SF(e.payload))}})},hSe=()=>{Oe({actionCreator:vF,effect:(e,{dispatch:t})=>{ke("socketio").debug(e.payload,"Session complete"),t(_F(e.payload))}})},$e="positive_conditioning",Be="negative_conditioning",Le="denoise_latents",it="latents_to_image",Kd="nsfw_checker",dp="invisible_watermark",Se="noise",dr="rand_int",bn="range_of_size",sn="iterate",an="main_model_loader",mS="onnx_model_loader",Lu="vae_loader",az="lora_loader",It="clip_skip",Vt="image_to_latents",Jn="resize_image",Ie="canvas_output",hn="inpaint_image",ko="inpaint_image_resize_up",ti="inpaint_image_resize_down",Nn="inpaint_infill",Ls="inpaint_infill_resize_down",_f="tomask",ut="mask_blur",Ds="mask_combine",Ni="mask_resize_up",er="mask_resize_down",wt="color_correct",j0="control_net_collect",qx="dynamic_prompt",yt="metadata_accumulator",nk="esrgan",We="sdxl_model_loader",Re="sdxl_denoise_latents",fp="sdxl_refiner_model_loader",G0="sdxl_refiner_positive_conditioning",H0="sdxl_refiner_negative_conditioning",va="sdxl_refiner_denoise_latents",lz="text_to_image_graph",v5="image_to_image_graph",uz="canvas_text_to_image_graph",_5="canvas_image_to_image_graph",cz="canvas_inpaint_graph",dz="canvas_outpaint_graph",fz="sdxl_text_to_image_graph",b5="sxdl_image_to_image_graph",IE="sdxl_canvas_text_to_image_graph",d_="sdxl_canvas_image_to_image_graph",ME="sdxl_canvas_inpaint_graph",NE="sdxl_canvas_outpaint_graph",pSe=["dataURL_image"],gSe=()=>{Oe({actionCreator:QT,effect:async(e,{dispatch:t,getState:n})=>{const r=ke("socketio"),{data:i}=e.payload;r.debug({data:Ya(i)},`Invocation complete (${e.payload.data.node.type})`);const o=e.payload.data.graph_execution_state_id,{cancelType:s,isCancelScheduled:a}=n().system;s==="scheduled"&&a&&t(Oc({session_id:o}));const{result:l,node:u,graph_execution_state_id:d}=i;if(nz(l)&&!pSe.includes(u.type)){const{image_name:f}=l.image,{canvas:h,gallery:g}=n(),m=await t(we.endpoints.getImageDTO.initiate(f)).unwrap();if(d===h.layerState.stagingArea.sessionId&&[Ie].includes(i.source_node_id)&&t(cce(m)),!m.is_intermediate){const{autoAddBoardId:v}=g;t(v&&v!=="none"?we.endpoints.addImageToBoard.initiate({board_id:v,imageDTO:m}):we.util.updateQueryData("listImages",{board_id:"none",categories:Jr},b=>{Cn.addOne(b,m)})),t(we.util.invalidateTags([{type:"BoardImagesTotal",id:v},{type:"BoardAssetsTotal",id:v}]));const{selectedBoardId:x,shouldAutoSwitch:_}=g;_&&(v&&v!==x?(t(W3(v)),t(G1("images"))):v||t(G1("images")),t(Gs(m)))}t(N1e(null))}t(mF(e.payload))}})},mSe=()=>{Oe({actionCreator:yF,effect:(e,{dispatch:t})=>{ke("socketio").error(e.payload,`Invocation error (${e.payload.data.node.type})`),t(ZT(e.payload))}})},ySe=()=>{Oe({actionCreator:EF,effect:(e,{dispatch:t})=>{ke("socketio").error(e.payload,`Invocation retrieval error (${e.payload.data.graph_execution_state_id})`),t(AF(e.payload))}})},vSe=()=>{Oe({actionCreator:pF,effect:(e,{dispatch:t,getState:n})=>{const r=ke("socketio");if(n().system.canceledSession===e.payload.data.graph_execution_state_id){r.trace(e.payload,"Ignored invocation started for canceled session");return}r.debug(e.payload,`Invocation started (${e.payload.data.node.type})`),t(gF(e.payload))}})},_Se=()=>{Oe({actionCreator:wF,effect:(e,{dispatch:t})=>{const n=ke("socketio"),{base_model:r,model_name:i,model_type:o,submodel:s}=e.payload.data;let a=`Model load started: ${r}/${o}/${i}`;s&&(a=a.concat(`/${s}`)),n.debug(e.payload,a),t(gfe(e.payload))}}),Oe({actionCreator:xF,effect:(e,{dispatch:t})=>{const n=ke("socketio"),{base_model:r,model_name:i,model_type:o,submodel:s}=e.payload.data;let a=`Model load complete: ${r}/${o}/${i}`;s&&(a=a.concat(`/${s}`)),n.debug(e.payload,a),t(mfe(e.payload))}})},bSe=()=>{Oe({actionCreator:CF,effect:(e,{dispatch:t})=>{ke("socketio").error(e.payload,`Session retrieval error (${e.payload.data.graph_execution_state_id})`),t(TF(e.payload))}})},SSe=()=>{Oe({actionCreator:YT,effect:(e,{dispatch:t})=>{ke("socketio").debug(e.payload,"Subscribed"),t(dF(e.payload))}})},wSe=()=>{Oe({actionCreator:fF,effect:(e,{dispatch:t})=>{ke("socketio").debug(e.payload,"Unsubscribed"),t(hF(e.payload))}})},xSe=()=>{Oe({actionCreator:j_e,effect:async(e,{dispatch:t,getState:n})=>{const{imageDTO:r}=e.payload;try{const i=await t(we.endpoints.changeImageIsIntermediate.initiate({imageDTO:r,is_intermediate:!1})).unwrap(),{autoAddBoardId:o}=n().gallery;o&&o!=="none"&&await t(we.endpoints.addImageToBoard.initiate({imageDTO:i,board_id:o})),t(Yn({title:"Image Saved",status:"success"}))}catch(i){t(Yn({title:"Image Saving Failed",description:i==null?void 0:i.message,status:"error"}))}}})},CMe=["sd-1","sd-2","sdxl","sdxl-refiner"],CSe=["sd-1","sd-2","sdxl"],TMe=["sdxl-refiner"],TSe=()=>{Oe({actionCreator:b$,effect:async(e,{getState:t,dispatch:n})=>{var i;if(e.payload==="unifiedCanvas"){const o=(i=t().generation.model)==null?void 0:i.base_model;if(o&&["sd-1","sd-2","sdxl"].includes(o))return;try{const s=n(Aa.endpoints.getMainModels.initiate(CSe)),a=await s.unwrap();if(s.unsubscribe(),!a.ids.length){n(Nl(null));return}const u=p5.getSelectors().selectAll(a).filter(g=>["sd-1","sd-2","sxdl"].includes(g.base_model))[0];if(!u){n(Nl(null));return}const{base_model:d,model_name:f,model_type:h}=u;n(Nl({base_model:d,model_name:f,model_type:h}))}catch{n(Nl(null))}}}})},ESe=({image_name:e,esrganModelName:t})=>{const n={id:nk,type:"esrgan",image:{image_name:e},model_name:t,is_intermediate:!1};return{id:"adhoc-esrgan-graph",nodes:{[nk]:n},edges:[]}},ASe=Me("upscale/upscaleRequested"),PSe=()=>{Oe({actionCreator:ASe,effect:async(e,{dispatch:t,getState:n,take:r})=>{const{image_name:i}=e.payload,{esrganModelName:o}=n().postprocessing,s=ESe({image_name:i,esrganModelName:o});t(jr({graph:s})),await r(jr.fulfilled.match),t(kc())}})},RSe=e=>{const t=window.open("");t&&e.forEach(n=>{const r=new Image;r.src=n.base64,t.document.write(n.caption),t.document.write("
"),t.document.write(r.outerHTML),t.document.write("

")})},rk=e=>new Promise((t,n)=>{const r=new FileReader;r.onload=i=>t(r.result),r.onerror=i=>n(r.error),r.onabort=i=>n(new Error("Read aborted")),r.readAsDataURL(e)});var LE={exports:{}},yS={},hz={},ft={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e._registerNode=e.Konva=e.glob=void 0;var t=Math.PI/180;function n(){return typeof window<"u"&&({}.toString.call(window)==="[object Window]"||{}.toString.call(window)==="[object global]")}e.glob=typeof Ze<"u"?Ze:typeof window<"u"?window:typeof WorkerGlobalScope<"u"?self:{},e.Konva={_global:e.glob,version:"9.2.0",isBrowser:n(),isUnminified:/param/.test((function(i){}).toString()),dblClickWindow:400,getAngle(i){return e.Konva.angleDeg?i*t:i},enableTrace:!1,pointerEventsEnabled:!0,autoDrawEnabled:!0,hitOnDragEnabled:!1,capturePointerEventsEnabled:!1,_mouseListenClick:!1,_touchListenClick:!1,_pointerListenClick:!1,_mouseInDblClickWindow:!1,_touchInDblClickWindow:!1,_pointerInDblClickWindow:!1,_mouseDblClickPointerId:null,_touchDblClickPointerId:null,_pointerDblClickPointerId:null,pixelRatio:typeof window<"u"&&window.devicePixelRatio||1,dragDistance:3,angleDeg:!0,showWarnings:!0,dragButtons:[0,1],isDragging(){return e.Konva.DD.isDragging},isDragReady(){return!!e.Konva.DD.node},releaseCanvasOnDestroy:!0,document:e.glob.document,_injectGlobal(i){e.glob.Konva=i}};const r=i=>{e.Konva[i.prototype.getClassName()]=i};e._registerNode=r,e.Konva._injectGlobal(e.Konva)})(ft);var kn={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Util=e.Transform=void 0;const t=ft;class n{constructor(S=[1,0,0,1,0,0]){this.dirty=!1,this.m=S&&S.slice()||[1,0,0,1,0,0]}reset(){this.m[0]=1,this.m[1]=0,this.m[2]=0,this.m[3]=1,this.m[4]=0,this.m[5]=0}copy(){return new n(this.m)}copyInto(S){S.m[0]=this.m[0],S.m[1]=this.m[1],S.m[2]=this.m[2],S.m[3]=this.m[3],S.m[4]=this.m[4],S.m[5]=this.m[5]}point(S){var C=this.m;return{x:C[0]*S.x+C[2]*S.y+C[4],y:C[1]*S.x+C[3]*S.y+C[5]}}translate(S,C){return this.m[4]+=this.m[0]*S+this.m[2]*C,this.m[5]+=this.m[1]*S+this.m[3]*C,this}scale(S,C){return this.m[0]*=S,this.m[1]*=S,this.m[2]*=C,this.m[3]*=C,this}rotate(S){var C=Math.cos(S),T=Math.sin(S),E=this.m[0]*C+this.m[2]*T,P=this.m[1]*C+this.m[3]*T,k=this.m[0]*-T+this.m[2]*C,O=this.m[1]*-T+this.m[3]*C;return this.m[0]=E,this.m[1]=P,this.m[2]=k,this.m[3]=O,this}getTranslation(){return{x:this.m[4],y:this.m[5]}}skew(S,C){var T=this.m[0]+this.m[2]*C,E=this.m[1]+this.m[3]*C,P=this.m[2]+this.m[0]*S,k=this.m[3]+this.m[1]*S;return this.m[0]=T,this.m[1]=E,this.m[2]=P,this.m[3]=k,this}multiply(S){var C=this.m[0]*S.m[0]+this.m[2]*S.m[1],T=this.m[1]*S.m[0]+this.m[3]*S.m[1],E=this.m[0]*S.m[2]+this.m[2]*S.m[3],P=this.m[1]*S.m[2]+this.m[3]*S.m[3],k=this.m[0]*S.m[4]+this.m[2]*S.m[5]+this.m[4],O=this.m[1]*S.m[4]+this.m[3]*S.m[5]+this.m[5];return this.m[0]=C,this.m[1]=T,this.m[2]=E,this.m[3]=P,this.m[4]=k,this.m[5]=O,this}invert(){var S=1/(this.m[0]*this.m[3]-this.m[1]*this.m[2]),C=this.m[3]*S,T=-this.m[1]*S,E=-this.m[2]*S,P=this.m[0]*S,k=S*(this.m[2]*this.m[5]-this.m[3]*this.m[4]),O=S*(this.m[1]*this.m[4]-this.m[0]*this.m[5]);return this.m[0]=C,this.m[1]=T,this.m[2]=E,this.m[3]=P,this.m[4]=k,this.m[5]=O,this}getMatrix(){return this.m}decompose(){var S=this.m[0],C=this.m[1],T=this.m[2],E=this.m[3],P=this.m[4],k=this.m[5],O=S*E-C*T;let M={x:P,y:k,rotation:0,scaleX:0,scaleY:0,skewX:0,skewY:0};if(S!=0||C!=0){var V=Math.sqrt(S*S+C*C);M.rotation=C>0?Math.acos(S/V):-Math.acos(S/V),M.scaleX=V,M.scaleY=O/V,M.skewX=(S*T+C*E)/O,M.skewY=0}else if(T!=0||E!=0){var B=Math.sqrt(T*T+E*E);M.rotation=Math.PI/2-(E>0?Math.acos(-T/B):-Math.acos(T/B)),M.scaleX=O/B,M.scaleY=B,M.skewX=0,M.skewY=(S*T+C*E)/O}return M.rotation=e.Util._getRotation(M.rotation),M}}e.Transform=n;var r="[object Array]",i="[object Number]",o="[object String]",s="[object Boolean]",a=Math.PI/180,l=180/Math.PI,u="#",d="",f="0",h="Konva warning: ",g="Konva error: ",m="rgb(",v={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,132,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,255,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,203],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[119,128,144],slategrey:[119,128,144],snow:[255,255,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],transparent:[255,255,255,0],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,5]},x=/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/,_=[];const b=typeof requestAnimationFrame<"u"&&requestAnimationFrame||function(y){setTimeout(y,60)};e.Util={_isElement(y){return!!(y&&y.nodeType==1)},_isFunction(y){return!!(y&&y.constructor&&y.call&&y.apply)},_isPlainObject(y){return!!y&&y.constructor===Object},_isArray(y){return Object.prototype.toString.call(y)===r},_isNumber(y){return Object.prototype.toString.call(y)===i&&!isNaN(y)&&isFinite(y)},_isString(y){return Object.prototype.toString.call(y)===o},_isBoolean(y){return Object.prototype.toString.call(y)===s},isObject(y){return y instanceof Object},isValidSelector(y){if(typeof y!="string")return!1;var S=y[0];return S==="#"||S==="."||S===S.toUpperCase()},_sign(y){return y===0||y>0?1:-1},requestAnimFrame(y){_.push(y),_.length===1&&b(function(){const S=_;_=[],S.forEach(function(C){C()})})},createCanvasElement(){var y=document.createElement("canvas");try{y.style=y.style||{}}catch{}return y},createImageElement(){return document.createElement("img")},_isInDocument(y){for(;y=y.parentNode;)if(y==document)return!0;return!1},_urlToImage(y,S){var C=e.Util.createImageElement();C.onload=function(){S(C)},C.src=y},_rgbToHex(y,S,C){return((1<<24)+(y<<16)+(S<<8)+C).toString(16).slice(1)},_hexToRgb(y){y=y.replace(u,d);var S=parseInt(y,16);return{r:S>>16&255,g:S>>8&255,b:S&255}},getRandomColor(){for(var y=(Math.random()*16777215<<0).toString(16);y.length<6;)y=f+y;return u+y},getRGB(y){var S;return y in v?(S=v[y],{r:S[0],g:S[1],b:S[2]}):y[0]===u?this._hexToRgb(y.substring(1)):y.substr(0,4)===m?(S=x.exec(y.replace(/ /g,"")),{r:parseInt(S[1],10),g:parseInt(S[2],10),b:parseInt(S[3],10)}):{r:0,g:0,b:0}},colorToRGBA(y){return y=y||"black",e.Util._namedColorToRBA(y)||e.Util._hex3ColorToRGBA(y)||e.Util._hex4ColorToRGBA(y)||e.Util._hex6ColorToRGBA(y)||e.Util._hex8ColorToRGBA(y)||e.Util._rgbColorToRGBA(y)||e.Util._rgbaColorToRGBA(y)||e.Util._hslColorToRGBA(y)},_namedColorToRBA(y){var S=v[y.toLowerCase()];return S?{r:S[0],g:S[1],b:S[2],a:1}:null},_rgbColorToRGBA(y){if(y.indexOf("rgb(")===0){y=y.match(/rgb\(([^)]+)\)/)[1];var S=y.split(/ *, */).map(Number);return{r:S[0],g:S[1],b:S[2],a:1}}},_rgbaColorToRGBA(y){if(y.indexOf("rgba(")===0){y=y.match(/rgba\(([^)]+)\)/)[1];var S=y.split(/ *, */).map((C,T)=>C.slice(-1)==="%"?T===3?parseInt(C)/100:parseInt(C)/100*255:Number(C));return{r:S[0],g:S[1],b:S[2],a:S[3]}}},_hex8ColorToRGBA(y){if(y[0]==="#"&&y.length===9)return{r:parseInt(y.slice(1,3),16),g:parseInt(y.slice(3,5),16),b:parseInt(y.slice(5,7),16),a:parseInt(y.slice(7,9),16)/255}},_hex6ColorToRGBA(y){if(y[0]==="#"&&y.length===7)return{r:parseInt(y.slice(1,3),16),g:parseInt(y.slice(3,5),16),b:parseInt(y.slice(5,7),16),a:1}},_hex4ColorToRGBA(y){if(y[0]==="#"&&y.length===5)return{r:parseInt(y[1]+y[1],16),g:parseInt(y[2]+y[2],16),b:parseInt(y[3]+y[3],16),a:parseInt(y[4]+y[4],16)/255}},_hex3ColorToRGBA(y){if(y[0]==="#"&&y.length===4)return{r:parseInt(y[1]+y[1],16),g:parseInt(y[2]+y[2],16),b:parseInt(y[3]+y[3],16),a:1}},_hslColorToRGBA(y){if(/hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.test(y)){const[S,...C]=/hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.exec(y),T=Number(C[0])/360,E=Number(C[1])/100,P=Number(C[2])/100;let k,O,M;if(E===0)return M=P*255,{r:Math.round(M),g:Math.round(M),b:Math.round(M),a:1};P<.5?k=P*(1+E):k=P+E-P*E;const V=2*P-k,B=[0,0,0];for(let A=0;A<3;A++)O=T+1/3*-(A-1),O<0&&O++,O>1&&O--,6*O<1?M=V+(k-V)*6*O:2*O<1?M=k:3*O<2?M=V+(k-V)*(2/3-O)*6:M=V,B[A]=M*255;return{r:Math.round(B[0]),g:Math.round(B[1]),b:Math.round(B[2]),a:1}}},haveIntersection(y,S){return!(S.x>y.x+y.width||S.x+S.widthy.y+y.height||S.y+S.height1?(k=C,O=T,M=(C-E)*(C-E)+(T-P)*(T-P)):(k=y+B*(C-y),O=S+B*(T-S),M=(k-E)*(k-E)+(O-P)*(O-P))}return[k,O,M]},_getProjectionToLine(y,S,C){var T=e.Util.cloneObject(y),E=Number.MAX_VALUE;return S.forEach(function(P,k){if(!(!C&&k===S.length-1)){var O=S[(k+1)%S.length],M=e.Util._getProjectionToSegment(P.x,P.y,O.x,O.y,y.x,y.y),V=M[0],B=M[1],A=M[2];AS.length){var k=S;S=y,y=k}for(T=0;T{S.width=0,S.height=0})},drawRoundedRectPath(y,S,C,T){let E=0,P=0,k=0,O=0;typeof T=="number"?E=P=k=O=Math.min(T,S/2,C/2):(E=Math.min(T[0]||0,S/2,C/2),P=Math.min(T[1]||0,S/2,C/2),O=Math.min(T[2]||0,S/2,C/2),k=Math.min(T[3]||0,S/2,C/2)),y.moveTo(E,0),y.lineTo(S-P,0),y.arc(S-P,P,P,Math.PI*3/2,0,!1),y.lineTo(S,C-O),y.arc(S-O,C-O,O,0,Math.PI/2,!1),y.lineTo(k,C),y.arc(k,C-k,k,Math.PI/2,Math.PI,!1),y.lineTo(0,E),y.arc(E,E,E,Math.PI,Math.PI*3/2,!1)}}})(kn);var wn={},dt={},De={};Object.defineProperty(De,"__esModule",{value:!0});De.getComponentValidator=De.getBooleanValidator=De.getNumberArrayValidator=De.getFunctionValidator=De.getStringOrGradientValidator=De.getStringValidator=De.getNumberOrAutoValidator=De.getNumberOrArrayOfNumbersValidator=De.getNumberValidator=De.alphaComponent=De.RGBComponent=void 0;const Qa=ft,Dn=kn;function Za(e){return Dn.Util._isString(e)?'"'+e+'"':Object.prototype.toString.call(e)==="[object Number]"||Dn.Util._isBoolean(e)?e:Object.prototype.toString.call(e)}function OSe(e){return e>255?255:e<0?0:Math.round(e)}De.RGBComponent=OSe;function kSe(e){return e>1?1:e<1e-4?1e-4:e}De.alphaComponent=kSe;function ISe(){if(Qa.Konva.isUnminified)return function(e,t){return Dn.Util._isNumber(e)||Dn.Util.warn(Za(e)+' is a not valid value for "'+t+'" attribute. The value should be a number.'),e}}De.getNumberValidator=ISe;function MSe(e){if(Qa.Konva.isUnminified)return function(t,n){let r=Dn.Util._isNumber(t),i=Dn.Util._isArray(t)&&t.length==e;return!r&&!i&&Dn.Util.warn(Za(t)+' is a not valid value for "'+n+'" attribute. The value should be a number or Array('+e+")"),t}}De.getNumberOrArrayOfNumbersValidator=MSe;function NSe(){if(Qa.Konva.isUnminified)return function(e,t){var n=Dn.Util._isNumber(e),r=e==="auto";return n||r||Dn.Util.warn(Za(e)+' is a not valid value for "'+t+'" attribute. The value should be a number or "auto".'),e}}De.getNumberOrAutoValidator=NSe;function LSe(){if(Qa.Konva.isUnminified)return function(e,t){return Dn.Util._isString(e)||Dn.Util.warn(Za(e)+' is a not valid value for "'+t+'" attribute. The value should be a string.'),e}}De.getStringValidator=LSe;function DSe(){if(Qa.Konva.isUnminified)return function(e,t){const n=Dn.Util._isString(e),r=Object.prototype.toString.call(e)==="[object CanvasGradient]"||e&&e.addColorStop;return n||r||Dn.Util.warn(Za(e)+' is a not valid value for "'+t+'" attribute. The value should be a string or a native gradient.'),e}}De.getStringOrGradientValidator=DSe;function $Se(){if(Qa.Konva.isUnminified)return function(e,t){return Dn.Util._isFunction(e)||Dn.Util.warn(Za(e)+' is a not valid value for "'+t+'" attribute. The value should be a function.'),e}}De.getFunctionValidator=$Se;function FSe(){if(Qa.Konva.isUnminified)return function(e,t){const n=Int8Array?Object.getPrototypeOf(Int8Array):null;return n&&e instanceof n||(Dn.Util._isArray(e)?e.forEach(function(r){Dn.Util._isNumber(r)||Dn.Util.warn('"'+t+'" attribute has non numeric element '+r+". Make sure that all elements are numbers.")}):Dn.Util.warn(Za(e)+' is a not valid value for "'+t+'" attribute. The value should be a array of numbers.')),e}}De.getNumberArrayValidator=FSe;function BSe(){if(Qa.Konva.isUnminified)return function(e,t){var n=e===!0||e===!1;return n||Dn.Util.warn(Za(e)+' is a not valid value for "'+t+'" attribute. The value should be a boolean.'),e}}De.getBooleanValidator=BSe;function USe(e){if(Qa.Konva.isUnminified)return function(t,n){return t==null||Dn.Util.isObject(t)||Dn.Util.warn(Za(t)+' is a not valid value for "'+n+'" attribute. The value should be an object with properties '+e),t}}De.getComponentValidator=USe;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Factory=void 0;const t=kn,n=De;var r="get",i="set";e.Factory={addGetterSetter(o,s,a,l,u){e.Factory.addGetter(o,s,a),e.Factory.addSetter(o,s,l,u),e.Factory.addOverloadedGetterSetter(o,s)},addGetter(o,s,a){var l=r+t.Util._capitalize(s);o.prototype[l]=o.prototype[l]||function(){var u=this.attrs[s];return u===void 0?a:u}},addSetter(o,s,a,l){var u=i+t.Util._capitalize(s);o.prototype[u]||e.Factory.overWriteSetter(o,s,a,l)},overWriteSetter(o,s,a,l){var u=i+t.Util._capitalize(s);o.prototype[u]=function(d){return a&&d!==void 0&&d!==null&&(d=a.call(this,d,s)),this._setAttr(s,d),l&&l.call(this),this}},addComponentsGetterSetter(o,s,a,l,u){var d=a.length,f=t.Util._capitalize,h=r+f(s),g=i+f(s),m,v;o.prototype[h]=function(){var _={};for(m=0;m{this._setAttr(s+f(S),void 0)}),this._fireChangeEvent(s,b,_),u&&u.call(this),this},e.Factory.addOverloadedGetterSetter(o,s)},addOverloadedGetterSetter(o,s){var a=t.Util._capitalize(s),l=i+a,u=r+a;o.prototype[s]=function(){return arguments.length?(this[l](arguments[0]),this):this[u]()}},addDeprecatedGetterSetter(o,s,a,l){t.Util.error("Adding deprecated "+s);var u=r+t.Util._capitalize(s),d=s+" property is deprecated and will be removed soon. Look at Konva change log for more information.";o.prototype[u]=function(){t.Util.error(d);var f=this.attrs[s];return f===void 0?a:f},e.Factory.addSetter(o,s,l,function(){t.Util.error(d)}),e.Factory.addOverloadedGetterSetter(o,s)},backCompat(o,s){t.Util.each(s,function(a,l){var u=o.prototype[l],d=r+t.Util._capitalize(a),f=i+t.Util._capitalize(a);function h(){u.apply(this,arguments),t.Util.error('"'+a+'" method is deprecated and will be removed soon. Use ""'+l+'" instead.')}o.prototype[a]=h,o.prototype[d]=h,o.prototype[f]=h})},afterSetFilter(){this._filterUpToDate=!1}}})(dt);var ds={},Na={};Object.defineProperty(Na,"__esModule",{value:!0});Na.HitContext=Na.SceneContext=Na.Context=void 0;const pz=kn,zSe=ft;function VSe(e){var t=[],n=e.length,r=pz.Util,i,o;for(i=0;itypeof d=="number"?Math.floor(d):d)),o+=jSe+u.join(ik)+GSe)):(o+=a.property,t||(o+=XSe+a.val)),o+=qSe;return o}clearTrace(){this.traceArr=[]}_trace(t){var n=this.traceArr,r;n.push(t),r=n.length,r>=QSe&&n.shift()}reset(){var t=this.getCanvas().getPixelRatio();this.setTransform(1*t,0,0,1*t,0,0)}getCanvas(){return this.canvas}clear(t){var n=this.getCanvas();t?this.clearRect(t.x||0,t.y||0,t.width||0,t.height||0):this.clearRect(0,0,n.getWidth()/n.pixelRatio,n.getHeight()/n.pixelRatio)}_applyLineCap(t){const n=t.attrs.lineCap;n&&this.setAttr("lineCap",n)}_applyOpacity(t){var n=t.getAbsoluteOpacity();n!==1&&this.setAttr("globalAlpha",n)}_applyLineJoin(t){const n=t.attrs.lineJoin;n&&this.setAttr("lineJoin",n)}setAttr(t,n){this._context[t]=n}arc(t,n,r,i,o,s){this._context.arc(t,n,r,i,o,s)}arcTo(t,n,r,i,o){this._context.arcTo(t,n,r,i,o)}beginPath(){this._context.beginPath()}bezierCurveTo(t,n,r,i,o,s){this._context.bezierCurveTo(t,n,r,i,o,s)}clearRect(t,n,r,i){this._context.clearRect(t,n,r,i)}clip(...t){this._context.clip.apply(this._context,t)}closePath(){this._context.closePath()}createImageData(t,n){var r=arguments;if(r.length===2)return this._context.createImageData(t,n);if(r.length===1)return this._context.createImageData(t)}createLinearGradient(t,n,r,i){return this._context.createLinearGradient(t,n,r,i)}createPattern(t,n){return this._context.createPattern(t,n)}createRadialGradient(t,n,r,i,o,s){return this._context.createRadialGradient(t,n,r,i,o,s)}drawImage(t,n,r,i,o,s,a,l,u){var d=arguments,f=this._context;d.length===3?f.drawImage(t,n,r):d.length===5?f.drawImage(t,n,r,i,o):d.length===9&&f.drawImage(t,n,r,i,o,s,a,l,u)}ellipse(t,n,r,i,o,s,a,l){this._context.ellipse(t,n,r,i,o,s,a,l)}isPointInPath(t,n,r,i){return r?this._context.isPointInPath(r,t,n,i):this._context.isPointInPath(t,n,i)}fill(...t){this._context.fill.apply(this._context,t)}fillRect(t,n,r,i){this._context.fillRect(t,n,r,i)}strokeRect(t,n,r,i){this._context.strokeRect(t,n,r,i)}fillText(t,n,r,i){i?this._context.fillText(t,n,r,i):this._context.fillText(t,n,r)}measureText(t){return this._context.measureText(t)}getImageData(t,n,r,i){return this._context.getImageData(t,n,r,i)}lineTo(t,n){this._context.lineTo(t,n)}moveTo(t,n){this._context.moveTo(t,n)}rect(t,n,r,i){this._context.rect(t,n,r,i)}putImageData(t,n,r){this._context.putImageData(t,n,r)}quadraticCurveTo(t,n,r,i){this._context.quadraticCurveTo(t,n,r,i)}restore(){this._context.restore()}rotate(t){this._context.rotate(t)}save(){this._context.save()}scale(t,n){this._context.scale(t,n)}setLineDash(t){this._context.setLineDash?this._context.setLineDash(t):"mozDash"in this._context?this._context.mozDash=t:"webkitLineDash"in this._context&&(this._context.webkitLineDash=t)}getLineDash(){return this._context.getLineDash()}setTransform(t,n,r,i,o,s){this._context.setTransform(t,n,r,i,o,s)}stroke(t){t?this._context.stroke(t):this._context.stroke()}strokeText(t,n,r,i){this._context.strokeText(t,n,r,i)}transform(t,n,r,i,o,s){this._context.transform(t,n,r,i,o,s)}translate(t,n){this._context.translate(t,n)}_enableTrace(){var t=this,n=ok.length,r=this.setAttr,i,o,s=function(a){var l=t[a],u;t[a]=function(){return o=VSe(Array.prototype.slice.call(arguments,0)),u=l.apply(t,arguments),t._trace({method:a,args:o}),u}};for(i=0;i{i.dragStatus==="dragging"&&(r=!0)}),r},justDragged:!1,get node(){var r;return e.DD._dragElements.forEach(i=>{r=i.node}),r},_dragElements:new Map,_drag(r){const i=[];e.DD._dragElements.forEach((o,s)=>{const{node:a}=o,l=a.getStage();l.setPointersPositions(r),o.pointerId===void 0&&(o.pointerId=n.Util._getFirstPointerId(r));const u=l._changedPointerPositions.find(h=>h.id===o.pointerId);if(u){if(o.dragStatus!=="dragging"){var d=a.dragDistance(),f=Math.max(Math.abs(u.x-o.startPointerPos.x),Math.abs(u.y-o.startPointerPos.y));if(f{o.fire("dragmove",{type:"dragmove",target:o,evt:r},!0)})},_endDragBefore(r){const i=[];e.DD._dragElements.forEach(o=>{const{node:s}=o,a=s.getStage();if(r&&a.setPointersPositions(r),!a._changedPointerPositions.find(d=>d.id===o.pointerId))return;(o.dragStatus==="dragging"||o.dragStatus==="stopped")&&(e.DD.justDragged=!0,t.Konva._mouseListenClick=!1,t.Konva._touchListenClick=!1,t.Konva._pointerListenClick=!1,o.dragStatus="stopped");const u=o.node.getLayer()||o.node instanceof t.Konva.Stage&&o.node;u&&i.indexOf(u)===-1&&i.push(u)}),i.forEach(o=>{o.draw()})},_endDragAfter(r){e.DD._dragElements.forEach((i,o)=>{i.dragStatus==="stopped"&&i.node.fire("dragend",{type:"dragend",target:i.node,evt:r},!0),i.dragStatus!=="dragging"&&e.DD._dragElements.delete(o)})}},t.Konva.isBrowser&&(window.addEventListener("mouseup",e.DD._endDragBefore,!0),window.addEventListener("touchend",e.DD._endDragBefore,!0),window.addEventListener("mousemove",e.DD._drag),window.addEventListener("touchmove",e.DD._drag),window.addEventListener("mouseup",e.DD._endDragAfter,!1),window.addEventListener("touchend",e.DD._endDragAfter,!1))})(bS);Object.defineProperty(wn,"__esModule",{value:!0});wn.Node=void 0;const bt=kn,Vm=dt,q0=ds,Du=ft,bo=bS,Hn=De;var Iv="absoluteOpacity",K0="allEventListeners",xa="absoluteTransform",sk="absoluteScale",$u="canvas",o2e="Change",s2e="children",a2e="konva",S5="listening",ak="mouseenter",lk="mouseleave",uk="set",ck="Shape",Mv=" ",dk="stage",_l="transform",l2e="Stage",w5="visible",u2e=["xChange.konva","yChange.konva","scaleXChange.konva","scaleYChange.konva","skewXChange.konva","skewYChange.konva","rotationChange.konva","offsetXChange.konva","offsetYChange.konva","transformsEnabledChange.konva"].join(Mv);let c2e=1;class Ke{constructor(t){this._id=c2e++,this.eventListeners={},this.attrs={},this.index=0,this._allEventListeners=null,this.parent=null,this._cache=new Map,this._attachedDepsListeners=new Map,this._lastPos=null,this._batchingTransformChange=!1,this._needClearTransformCache=!1,this._filterUpToDate=!1,this._isUnderCache=!1,this._dragEventId=null,this._shouldFireChangeEvents=!1,this.setAttrs(t),this._shouldFireChangeEvents=!0}hasChildren(){return!1}_clearCache(t){(t===_l||t===xa)&&this._cache.get(t)?this._cache.get(t).dirty=!0:t?this._cache.delete(t):this._cache.clear()}_getCache(t,n){var r=this._cache.get(t),i=t===_l||t===xa,o=r===void 0||i&&r.dirty===!0;return o&&(r=n.call(this),this._cache.set(t,r)),r}_calculate(t,n,r){if(!this._attachedDepsListeners.get(t)){const i=n.map(o=>o+"Change.konva").join(Mv);this.on(i,()=>{this._clearCache(t)}),this._attachedDepsListeners.set(t,!0)}return this._getCache(t,r)}_getCanvasCache(){return this._cache.get($u)}_clearSelfAndDescendantCache(t){this._clearCache(t),t===xa&&this.fire("absoluteTransformChange")}clearCache(){if(this._cache.has($u)){const{scene:t,filter:n,hit:r}=this._cache.get($u);bt.Util.releaseCanvas(t,n,r),this._cache.delete($u)}return this._clearSelfAndDescendantCache(),this._requestDraw(),this}cache(t){var n=t||{},r={};(n.x===void 0||n.y===void 0||n.width===void 0||n.height===void 0)&&(r=this.getClientRect({skipTransform:!0,relativeTo:this.getParent()}));var i=Math.ceil(n.width||r.width),o=Math.ceil(n.height||r.height),s=n.pixelRatio,a=n.x===void 0?Math.floor(r.x):n.x,l=n.y===void 0?Math.floor(r.y):n.y,u=n.offset||0,d=n.drawBorder||!1,f=n.hitCanvasPixelRatio||1;if(!i||!o){bt.Util.error("Can not cache the node. Width or height of the node equals 0. Caching is skipped.");return}i+=u*2+1,o+=u*2+1,a-=u,l-=u;var h=new q0.SceneCanvas({pixelRatio:s,width:i,height:o}),g=new q0.SceneCanvas({pixelRatio:s,width:0,height:0,willReadFrequently:!0}),m=new q0.HitCanvas({pixelRatio:f,width:i,height:o}),v=h.getContext(),x=m.getContext();return m.isCache=!0,h.isCache=!0,this._cache.delete($u),this._filterUpToDate=!1,n.imageSmoothingEnabled===!1&&(h.getContext()._context.imageSmoothingEnabled=!1,g.getContext()._context.imageSmoothingEnabled=!1),v.save(),x.save(),v.translate(-a,-l),x.translate(-a,-l),this._isUnderCache=!0,this._clearSelfAndDescendantCache(Iv),this._clearSelfAndDescendantCache(sk),this.drawScene(h,this),this.drawHit(m,this),this._isUnderCache=!1,v.restore(),x.restore(),d&&(v.save(),v.beginPath(),v.rect(0,0,i,o),v.closePath(),v.setAttr("strokeStyle","red"),v.setAttr("lineWidth",5),v.stroke(),v.restore()),this._cache.set($u,{scene:h,filter:g,hit:m,x:a,y:l}),this._requestDraw(),this}isCached(){return this._cache.has($u)}getClientRect(t){throw new Error('abstract "getClientRect" method call')}_transformedRect(t,n){var r=[{x:t.x,y:t.y},{x:t.x+t.width,y:t.y},{x:t.x+t.width,y:t.y+t.height},{x:t.x,y:t.y+t.height}],i,o,s,a,l=this.getAbsoluteTransform(n);return r.forEach(function(u){var d=l.point(u);i===void 0&&(i=s=d.x,o=a=d.y),i=Math.min(i,d.x),o=Math.min(o,d.y),s=Math.max(s,d.x),a=Math.max(a,d.y)}),{x:i,y:o,width:s-i,height:a-o}}_drawCachedSceneCanvas(t){t.save(),t._applyOpacity(this),t._applyGlobalCompositeOperation(this);const n=this._getCanvasCache();t.translate(n.x,n.y);var r=this._getCachedSceneCanvas(),i=r.pixelRatio;t.drawImage(r._canvas,0,0,r.width/i,r.height/i),t.restore()}_drawCachedHitCanvas(t){var n=this._getCanvasCache(),r=n.hit;t.save(),t.translate(n.x,n.y),t.drawImage(r._canvas,0,0,r.width/r.pixelRatio,r.height/r.pixelRatio),t.restore()}_getCachedSceneCanvas(){var t=this.filters(),n=this._getCanvasCache(),r=n.scene,i=n.filter,o=i.getContext(),s,a,l,u;if(t){if(!this._filterUpToDate){var d=r.pixelRatio;i.setSize(r.width/r.pixelRatio,r.height/r.pixelRatio);try{for(s=t.length,o.clear(),o.drawImage(r._canvas,0,0,r.getWidth()/d,r.getHeight()/d),a=o.getImageData(0,0,i.getWidth(),i.getHeight()),l=0;l{var n,r;if(!t)return this;for(n in t)n!==s2e&&(r=uk+bt.Util._capitalize(n),bt.Util._isFunction(this[r])?this[r](t[n]):this._setAttr(n,t[n]))}),this}isListening(){return this._getCache(S5,this._isListening)}_isListening(t){if(!this.listening())return!1;const r=this.getParent();return r&&r!==t&&this!==t?r._isListening(t):!0}isVisible(){return this._getCache(w5,this._isVisible)}_isVisible(t){if(!this.visible())return!1;const r=this.getParent();return r&&r!==t&&this!==t?r._isVisible(t):!0}shouldDrawHit(t,n=!1){if(t)return this._isVisible(t)&&this._isListening(t);var r=this.getLayer(),i=!1;bo.DD._dragElements.forEach(s=>{s.dragStatus==="dragging"&&(s.node.nodeType==="Stage"||s.node.getLayer()===r)&&(i=!0)});var o=!n&&!Du.Konva.hitOnDragEnabled&&i;return this.isListening()&&this.isVisible()&&!o}show(){return this.visible(!0),this}hide(){return this.visible(!1),this}getZIndex(){return this.index||0}getAbsoluteZIndex(){var t=this.getDepth(),n=this,r=0,i,o,s,a;function l(u){for(i=[],o=u.length,s=0;s0&&i[0].getDepth()<=t&&l(i)}return n.nodeType!==l2e&&l(n.getStage().getChildren()),r}getDepth(){for(var t=0,n=this.parent;n;)t++,n=n.parent;return t}_batchTransformChanges(t){this._batchingTransformChange=!0,t(),this._batchingTransformChange=!1,this._needClearTransformCache&&(this._clearCache(_l),this._clearSelfAndDescendantCache(xa)),this._needClearTransformCache=!1}setPosition(t){return this._batchTransformChanges(()=>{this.x(t.x),this.y(t.y)}),this}getPosition(){return{x:this.x(),y:this.y()}}getRelativePointerPosition(){if(!this.getStage())return null;var t=this.getStage().getPointerPosition();if(!t)return null;var n=this.getAbsoluteTransform().copy();return n.invert(),n.point(t)}getAbsolutePosition(t){let n=!1,r=this.parent;for(;r;){if(r.isCached()){n=!0;break}r=r.parent}n&&!t&&(t=!0);var i=this.getAbsoluteTransform(t).getMatrix(),o=new bt.Transform,s=this.offset();return o.m=i.slice(),o.translate(s.x,s.y),o.getTranslation()}setAbsolutePosition(t){var n=this._clearTransform();this.attrs.x=n.x,this.attrs.y=n.y,delete n.x,delete n.y,this._clearCache(_l);var r=this._getAbsoluteTransform().copy();return r.invert(),r.translate(t.x,t.y),t={x:this.attrs.x+r.getTranslation().x,y:this.attrs.y+r.getTranslation().y},this._setTransform(n),this.setPosition({x:t.x,y:t.y}),this._clearCache(_l),this._clearSelfAndDescendantCache(xa),this}_setTransform(t){var n;for(n in t)this.attrs[n]=t[n]}_clearTransform(){var t={x:this.x(),y:this.y(),rotation:this.rotation(),scaleX:this.scaleX(),scaleY:this.scaleY(),offsetX:this.offsetX(),offsetY:this.offsetY(),skewX:this.skewX(),skewY:this.skewY()};return this.attrs.x=0,this.attrs.y=0,this.attrs.rotation=0,this.attrs.scaleX=1,this.attrs.scaleY=1,this.attrs.offsetX=0,this.attrs.offsetY=0,this.attrs.skewX=0,this.attrs.skewY=0,t}move(t){var n=t.x,r=t.y,i=this.x(),o=this.y();return n!==void 0&&(i+=n),r!==void 0&&(o+=r),this.setPosition({x:i,y:o}),this}_eachAncestorReverse(t,n){var r=[],i=this.getParent(),o,s;if(!(n&&n._id===this._id)){for(r.unshift(this);i&&(!n||i._id!==n._id);)r.unshift(i),i=i.parent;for(o=r.length,s=0;s0?(this.parent.children.splice(t,1),this.parent.children.splice(t-1,0,this),this.parent._setChildrenIndices(),!0):!1}moveToBottom(){if(!this.parent)return bt.Util.warn("Node has no parent. moveToBottom function is ignored."),!1;var t=this.index;return t>0?(this.parent.children.splice(t,1),this.parent.children.unshift(this),this.parent._setChildrenIndices(),!0):!1}setZIndex(t){if(!this.parent)return bt.Util.warn("Node has no parent. zIndex parameter is ignored."),this;(t<0||t>=this.parent.children.length)&&bt.Util.warn("Unexpected value "+t+" for zIndex property. zIndex is just index of a node in children of its parent. Expected value is from 0 to "+(this.parent.children.length-1)+".");var n=this.index;return this.parent.children.splice(n,1),this.parent.children.splice(t,0,this),this.parent._setChildrenIndices(),this}getAbsoluteOpacity(){return this._getCache(Iv,this._getAbsoluteOpacity)}_getAbsoluteOpacity(){var t=this.opacity(),n=this.getParent();return n&&!n._isUnderCache&&(t*=n.getAbsoluteOpacity()),t}moveTo(t){return this.getParent()!==t&&(this._remove(),t.add(this)),this}toObject(){var t={},n=this.getAttrs(),r,i,o,s,a;t.attrs={};for(r in n)i=n[r],a=bt.Util.isObject(i)&&!bt.Util._isPlainObject(i)&&!bt.Util._isArray(i),!a&&(o=typeof this[r]=="function"&&this[r],delete n[r],s=o?o.call(this):null,n[r]=i,s!==i&&(t.attrs[r]=i));return t.className=this.getClassName(),bt.Util._prepareToStringify(t)}toJSON(){return JSON.stringify(this.toObject())}getParent(){return this.parent}findAncestors(t,n,r){var i=[];n&&this._isMatch(t)&&i.push(this);for(var o=this.parent;o;){if(o===r)return i;o._isMatch(t)&&i.push(o),o=o.parent}return i}isAncestorOf(t){return!1}findAncestor(t,n,r){return this.findAncestors(t,n,r)[0]}_isMatch(t){if(!t)return!1;if(typeof t=="function")return t(this);var n=t.replace(/ /g,"").split(","),r=n.length,i,o;for(i=0;i{try{const i=t==null?void 0:t.callback;i&&delete t.callback,bt.Util._urlToImage(this.toDataURL(t),function(o){n(o),i==null||i(o)})}catch(i){r(i)}})}toBlob(t){return new Promise((n,r)=>{try{const i=t==null?void 0:t.callback;i&&delete t.callback,this.toCanvas(t).toBlob(o=>{n(o),i==null||i(o)})}catch(i){r(i)}})}setSize(t){return this.width(t.width),this.height(t.height),this}getSize(){return{width:this.width(),height:this.height()}}getClassName(){return this.className||this.nodeType}getType(){return this.nodeType}getDragDistance(){return this.attrs.dragDistance!==void 0?this.attrs.dragDistance:this.parent?this.parent.getDragDistance():Du.Konva.dragDistance}_off(t,n,r){var i=this.eventListeners[t],o,s,a;for(o=0;o=0;if(r&&!this.isDragging()){var i=!1;bo.DD._dragElements.forEach(o=>{this.isAncestorOf(o.node)&&(i=!0)}),i||this._createDragElement(t)}})}_dragChange(){if(this.attrs.draggable)this._listenDrag();else{this._dragCleanup();var t=this.getStage();if(!t)return;const n=bo.DD._dragElements.get(this._id),r=n&&n.dragStatus==="dragging",i=n&&n.dragStatus==="ready";r?this.stopDrag():i&&bo.DD._dragElements.delete(this._id)}}_dragCleanup(){this.off("mousedown.konva"),this.off("touchstart.konva")}isClientRectOnScreen(t={x:0,y:0}){const n=this.getStage();if(!n)return!1;const r={x:-t.x,y:-t.y,width:n.width()+2*t.x,height:n.height()+2*t.y};return bt.Util.haveIntersection(r,this.getClientRect())}static create(t,n){return bt.Util._isString(t)&&(t=JSON.parse(t)),this._createNode(t,n)}static _createNode(t,n){var r=Ke.prototype.getClassName.call(t),i=t.children,o,s,a;n&&(t.attrs.container=n),Du.Konva[r]||(bt.Util.warn('Can not find a node with class name "'+r+'". Fallback to "Shape".'),r="Shape");const l=Du.Konva[r];if(o=new l(t.attrs),i)for(s=i.length,a=0;a0}removeChildren(){return this.getChildren().forEach(t=>{t.parent=null,t.index=0,t.remove()}),this.children=[],this._requestDraw(),this}destroyChildren(){return this.getChildren().forEach(t=>{t.parent=null,t.index=0,t.destroy()}),this.children=[],this._requestDraw(),this}add(...t){if(t.length===0)return this;if(t.length>1){for(var n=0;n0?n[0]:void 0}_generalFind(t,n){var r=[];return this._descendants(i=>{const o=i._isMatch(t);return o&&r.push(i),!!(o&&n)}),r}_descendants(t){let n=!1;const r=this.getChildren();for(const i of r){if(n=t(i),n)return!0;if(i.hasChildren()&&(n=i._descendants(t),n))return!0}return!1}toObject(){var t=Kx.Node.prototype.toObject.call(this);return t.children=[],this.getChildren().forEach(n=>{t.children.push(n.toObject())}),t}isAncestorOf(t){for(var n=t.getParent();n;){if(n._id===this._id)return!0;n=n.getParent()}return!1}clone(t){var n=Kx.Node.prototype.clone.call(this,t);return this.getChildren().forEach(function(r){n.add(r.clone())}),n}getAllIntersections(t){var n=[];return this.find("Shape").forEach(function(r){r.isVisible()&&r.intersects(t)&&n.push(r)}),n}_clearSelfAndDescendantCache(t){var n;super._clearSelfAndDescendantCache(t),!this.isCached()&&((n=this.children)===null||n===void 0||n.forEach(function(r){r._clearSelfAndDescendantCache(t)}))}_setChildrenIndices(){var t;(t=this.children)===null||t===void 0||t.forEach(function(n,r){n.index=r}),this._requestDraw()}drawScene(t,n){var r=this.getLayer(),i=t||r&&r.getCanvas(),o=i&&i.getContext(),s=this._getCanvasCache(),a=s&&s.scene,l=i&&i.isCache;if(!this.isVisible()&&!l)return this;if(a){o.save();var u=this.getAbsoluteTransform(n).getMatrix();o.transform(u[0],u[1],u[2],u[3],u[4],u[5]),this._drawCachedSceneCanvas(o),o.restore()}else this._drawChildren("drawScene",i,n);return this}drawHit(t,n){if(!this.shouldDrawHit(n))return this;var r=this.getLayer(),i=t||r&&r.hitCanvas,o=i&&i.getContext(),s=this._getCanvasCache(),a=s&&s.hit;if(a){o.save();var l=this.getAbsoluteTransform(n).getMatrix();o.transform(l[0],l[1],l[2],l[3],l[4],l[5]),this._drawCachedHitCanvas(o),o.restore()}else this._drawChildren("drawHit",i,n);return this}_drawChildren(t,n,r){var i,o=n&&n.getContext(),s=this.clipWidth(),a=this.clipHeight(),l=this.clipFunc(),u=s&&a||l;const d=r===this;if(u){o.save();var f=this.getAbsoluteTransform(r),h=f.getMatrix();o.transform(h[0],h[1],h[2],h[3],h[4],h[5]),o.beginPath();let x;if(l)x=l.call(this,o,this);else{var g=this.clipX(),m=this.clipY();o.rect(g,m,s,a)}o.clip.apply(o,x),h=f.copy().invert().getMatrix(),o.transform(h[0],h[1],h[2],h[3],h[4],h[5])}var v=!d&&this.globalCompositeOperation()!=="source-over"&&t==="drawScene";v&&(o.save(),o._applyGlobalCompositeOperation(this)),(i=this.children)===null||i===void 0||i.forEach(function(x){x[t](n,r)}),v&&o.restore(),u&&o.restore()}getClientRect(t){var n;t=t||{};var r=t.skipTransform,i=t.relativeTo,o,s,a,l,u={x:1/0,y:1/0,width:0,height:0},d=this;(n=this.children)===null||n===void 0||n.forEach(function(v){if(v.visible()){var x=v.getClientRect({relativeTo:d,skipShadow:t.skipShadow,skipStroke:t.skipStroke});x.width===0&&x.height===0||(o===void 0?(o=x.x,s=x.y,a=x.x+x.width,l=x.y+x.height):(o=Math.min(o,x.x),s=Math.min(s,x.y),a=Math.max(a,x.x+x.width),l=Math.max(l,x.y+x.height)))}});for(var f=this.find("Shape"),h=!1,g=0;gle.indexOf("pointer")>=0?"pointer":le.indexOf("touch")>=0?"touch":"mouse",Z=le=>{const W=q(le);if(W==="pointer")return i.Konva.pointerEventsEnabled&&G.pointer;if(W==="touch")return G.touch;if(W==="mouse")return G.mouse};function ee(le={}){return(le.clipFunc||le.clipWidth||le.clipHeight)&&t.Util.warn("Stage does not support clipping. Please use clip for Layers or Groups."),le}const ie="Pointer position is missing and not registered by the stage. Looks like it is outside of the stage container. You can set it manually from event: stage.setPointersPositions(event);";e.stages=[];class se extends r.Container{constructor(W){super(ee(W)),this._pointerPositions=[],this._changedPointerPositions=[],this._buildDOM(),this._bindContentEvents(),e.stages.push(this),this.on("widthChange.konva heightChange.konva",this._resizeDOM),this.on("visibleChange.konva",this._checkVisibility),this.on("clipWidthChange.konva clipHeightChange.konva clipFuncChange.konva",()=>{ee(this.attrs)}),this._checkVisibility()}_validateAdd(W){const ne=W.getType()==="Layer",fe=W.getType()==="FastLayer";ne||fe||t.Util.throw("You may only add layers to the stage.")}_checkVisibility(){if(!this.content)return;const W=this.visible()?"":"none";this.content.style.display=W}setContainer(W){if(typeof W===d){if(W.charAt(0)==="."){var ne=W.slice(1);W=document.getElementsByClassName(ne)[0]}else{var fe;W.charAt(0)!=="#"?fe=W:fe=W.slice(1),W=document.getElementById(fe)}if(!W)throw"Can not find container in document with id "+fe}return this._setAttr("container",W),this.content&&(this.content.parentElement&&this.content.parentElement.removeChild(this.content),W.appendChild(this.content)),this}shouldDrawHit(){return!0}clear(){var W=this.children,ne=W.length,fe;for(fe=0;fe-1&&e.stages.splice(ne,1),t.Util.releaseCanvas(this.bufferCanvas._canvas,this.bufferHitCanvas._canvas),this}getPointerPosition(){const W=this._pointerPositions[0]||this._changedPointerPositions[0];return W?{x:W.x,y:W.y}:(t.Util.warn(ie),null)}_getPointerById(W){return this._pointerPositions.find(ne=>ne.id===W)}getPointersPositions(){return this._pointerPositions}getStage(){return this}getContent(){return this.content}_toKonvaCanvas(W){W=W||{},W.x=W.x||0,W.y=W.y||0,W.width=W.width||this.width(),W.height=W.height||this.height();var ne=new o.SceneCanvas({width:W.width,height:W.height,pixelRatio:W.pixelRatio||1}),fe=ne.getContext()._context,pe=this.children;return(W.x||W.y)&&fe.translate(-1*W.x,-1*W.y),pe.forEach(function(ve){if(ve.isVisible()){var ye=ve._toKonvaCanvas(W);fe.drawImage(ye._canvas,W.x,W.y,ye.getWidth()/ye.getPixelRatio(),ye.getHeight()/ye.getPixelRatio())}}),ne}getIntersection(W){if(!W)return null;var ne=this.children,fe=ne.length,pe=fe-1,ve;for(ve=pe;ve>=0;ve--){const ye=ne[ve].getIntersection(W);if(ye)return ye}return null}_resizeDOM(){var W=this.width(),ne=this.height();this.content&&(this.content.style.width=W+f,this.content.style.height=ne+f),this.bufferCanvas.setSize(W,ne),this.bufferHitCanvas.setSize(W,ne),this.children.forEach(fe=>{fe.setSize({width:W,height:ne}),fe.draw()})}add(W,...ne){if(arguments.length>1){for(var fe=0;fe$&&t.Util.warn("The stage has "+pe+" layers. Recommended maximum number of layers is 3-5. Adding more layers into the stage may drop the performance. Rethink your tree structure, you can use Konva.Group."),W.setSize({width:this.width(),height:this.height()}),W.draw(),i.Konva.isBrowser&&this.content.appendChild(W.canvas._canvas),this}getParent(){return null}getLayer(){return null}hasPointerCapture(W){return l.hasPointerCapture(W,this)}setPointerCapture(W){l.setPointerCapture(W,this)}releaseCapture(W){l.releaseCapture(W,this)}getLayers(){return this.children}_bindContentEvents(){i.Konva.isBrowser&&j.forEach(([W,ne])=>{this.content.addEventListener(W,fe=>{this[ne](fe)},{passive:!1})})}_pointerenter(W){this.setPointersPositions(W);const ne=Z(W.type);this._fire(ne.pointerenter,{evt:W,target:this,currentTarget:this})}_pointerover(W){this.setPointersPositions(W);const ne=Z(W.type);this._fire(ne.pointerover,{evt:W,target:this,currentTarget:this})}_getTargetShape(W){let ne=this[W+"targetShape"];return ne&&!ne.getStage()&&(ne=null),ne}_pointerleave(W){const ne=Z(W.type),fe=q(W.type);if(ne){this.setPointersPositions(W);var pe=this._getTargetShape(fe),ve=!s.DD.isDragging||i.Konva.hitOnDragEnabled;pe&&ve?(pe._fireAndBubble(ne.pointerout,{evt:W}),pe._fireAndBubble(ne.pointerleave,{evt:W}),this._fire(ne.pointerleave,{evt:W,target:this,currentTarget:this}),this[fe+"targetShape"]=null):ve&&(this._fire(ne.pointerleave,{evt:W,target:this,currentTarget:this}),this._fire(ne.pointerout,{evt:W,target:this,currentTarget:this})),this.pointerPos=void 0,this._pointerPositions=[]}}_pointerdown(W){const ne=Z(W.type),fe=q(W.type);if(ne){this.setPointersPositions(W);var pe=!1;this._changedPointerPositions.forEach(ve=>{var ye=this.getIntersection(ve);if(s.DD.justDragged=!1,i.Konva["_"+fe+"ListenClick"]=!0,!(ye&&ye.isListening()))return;i.Konva.capturePointerEventsEnabled&&ye.setPointerCapture(ve.id),this[fe+"ClickStartShape"]=ye,ye._fireAndBubble(ne.pointerdown,{evt:W,pointerId:ve.id}),pe=!0;const Fe=W.type.indexOf("touch")>=0;ye.preventDefault()&&W.cancelable&&Fe&&W.preventDefault()}),pe||this._fire(ne.pointerdown,{evt:W,target:this,currentTarget:this,pointerId:this._pointerPositions[0].id})}}_pointermove(W){const ne=Z(W.type),fe=q(W.type);if(!ne)return;s.DD.isDragging&&s.DD.node.preventDefault()&&W.cancelable&&W.preventDefault(),this.setPointersPositions(W);var pe=!s.DD.isDragging||i.Konva.hitOnDragEnabled;if(!pe)return;var ve={};let ye=!1;var Je=this._getTargetShape(fe);this._changedPointerPositions.forEach(Fe=>{const Ae=l.getCapturedShape(Fe.id)||this.getIntersection(Fe),vt=Fe.id,_e={evt:W,pointerId:vt};var Qt=Je!==Ae;if(Qt&&Je&&(Je._fireAndBubble(ne.pointerout,Object.assign({},_e),Ae),Je._fireAndBubble(ne.pointerleave,Object.assign({},_e),Ae)),Ae){if(ve[Ae._id])return;ve[Ae._id]=!0}Ae&&Ae.isListening()?(ye=!0,Qt&&(Ae._fireAndBubble(ne.pointerover,Object.assign({},_e),Je),Ae._fireAndBubble(ne.pointerenter,Object.assign({},_e),Je),this[fe+"targetShape"]=Ae),Ae._fireAndBubble(ne.pointermove,Object.assign({},_e))):Je&&(this._fire(ne.pointerover,{evt:W,target:this,currentTarget:this,pointerId:vt}),this[fe+"targetShape"]=null)}),ye||this._fire(ne.pointermove,{evt:W,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id})}_pointerup(W){const ne=Z(W.type),fe=q(W.type);if(!ne)return;this.setPointersPositions(W);const pe=this[fe+"ClickStartShape"],ve=this[fe+"ClickEndShape"];var ye={};let Je=!1;this._changedPointerPositions.forEach(Fe=>{const Ae=l.getCapturedShape(Fe.id)||this.getIntersection(Fe);if(Ae){if(Ae.releaseCapture(Fe.id),ye[Ae._id])return;ye[Ae._id]=!0}const vt=Fe.id,_e={evt:W,pointerId:vt};let Qt=!1;i.Konva["_"+fe+"InDblClickWindow"]?(Qt=!0,clearTimeout(this[fe+"DblTimeout"])):s.DD.justDragged||(i.Konva["_"+fe+"InDblClickWindow"]=!0,clearTimeout(this[fe+"DblTimeout"])),this[fe+"DblTimeout"]=setTimeout(function(){i.Konva["_"+fe+"InDblClickWindow"]=!1},i.Konva.dblClickWindow),Ae&&Ae.isListening()?(Je=!0,this[fe+"ClickEndShape"]=Ae,Ae._fireAndBubble(ne.pointerup,Object.assign({},_e)),i.Konva["_"+fe+"ListenClick"]&&pe&&pe===Ae&&(Ae._fireAndBubble(ne.pointerclick,Object.assign({},_e)),Qt&&ve&&ve===Ae&&Ae._fireAndBubble(ne.pointerdblclick,Object.assign({},_e)))):(this[fe+"ClickEndShape"]=null,i.Konva["_"+fe+"ListenClick"]&&this._fire(ne.pointerclick,{evt:W,target:this,currentTarget:this,pointerId:vt}),Qt&&this._fire(ne.pointerdblclick,{evt:W,target:this,currentTarget:this,pointerId:vt}))}),Je||this._fire(ne.pointerup,{evt:W,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id}),i.Konva["_"+fe+"ListenClick"]=!1,W.cancelable&&fe!=="touch"&&W.preventDefault()}_contextmenu(W){this.setPointersPositions(W);var ne=this.getIntersection(this.getPointerPosition());ne&&ne.isListening()?ne._fireAndBubble(V,{evt:W}):this._fire(V,{evt:W,target:this,currentTarget:this})}_wheel(W){this.setPointersPositions(W);var ne=this.getIntersection(this.getPointerPosition());ne&&ne.isListening()?ne._fireAndBubble(U,{evt:W}):this._fire(U,{evt:W,target:this,currentTarget:this})}_pointercancel(W){this.setPointersPositions(W);const ne=l.getCapturedShape(W.pointerId)||this.getIntersection(this.getPointerPosition());ne&&ne._fireAndBubble(C,l.createEvent(W)),l.releaseCapture(W.pointerId)}_lostpointercapture(W){l.releaseCapture(W.pointerId)}setPointersPositions(W){var ne=this._getContentPosition(),fe=null,pe=null;W=W||window.event,W.touches!==void 0?(this._pointerPositions=[],this._changedPointerPositions=[],Array.prototype.forEach.call(W.touches,ve=>{this._pointerPositions.push({id:ve.identifier,x:(ve.clientX-ne.left)/ne.scaleX,y:(ve.clientY-ne.top)/ne.scaleY})}),Array.prototype.forEach.call(W.changedTouches||W.touches,ve=>{this._changedPointerPositions.push({id:ve.identifier,x:(ve.clientX-ne.left)/ne.scaleX,y:(ve.clientY-ne.top)/ne.scaleY})})):(fe=(W.clientX-ne.left)/ne.scaleX,pe=(W.clientY-ne.top)/ne.scaleY,this.pointerPos={x:fe,y:pe},this._pointerPositions=[{x:fe,y:pe,id:t.Util._getFirstPointerId(W)}],this._changedPointerPositions=[{x:fe,y:pe,id:t.Util._getFirstPointerId(W)}])}_setPointerPosition(W){t.Util.warn('Method _setPointerPosition is deprecated. Use "stage.setPointersPositions(event)" instead.'),this.setPointersPositions(W)}_getContentPosition(){if(!this.content||!this.content.getBoundingClientRect)return{top:0,left:0,scaleX:1,scaleY:1};var W=this.content.getBoundingClientRect();return{top:W.top,left:W.left,scaleX:W.width/this.content.clientWidth||1,scaleY:W.height/this.content.clientHeight||1}}_buildDOM(){if(this.bufferCanvas=new o.SceneCanvas({width:this.width(),height:this.height()}),this.bufferHitCanvas=new o.HitCanvas({pixelRatio:1,width:this.width(),height:this.height()}),!!i.Konva.isBrowser){var W=this.container();if(!W)throw"Stage has no container. A container is required.";W.innerHTML="",this.content=document.createElement("div"),this.content.style.position="relative",this.content.style.userSelect="none",this.content.className="konvajs-content",this.content.setAttribute("role","presentation"),W.appendChild(this.content),this._resizeDOM()}}cache(){return t.Util.warn("Cache function is not allowed for stage. You may use cache only for layers, groups and shapes."),this}clearCache(){return this}batchDraw(){return this.getChildren().forEach(function(W){W.batchDraw()}),this}}e.Stage=se,se.prototype.nodeType=u,(0,a._registerNode)(se),n.Factory.addGetterSetter(se,"container")})(yz);var jm={},gr={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Shape=e.shapes=void 0;const t=ft,n=kn,r=dt,i=wn,o=De,s=ft,a=Zi;var l="hasShadow",u="shadowRGBA",d="patternImage",f="linearGradient",h="radialGradient";let g;function m(){return g||(g=n.Util.createCanvasElement().getContext("2d"),g)}e.shapes={};function v(k){const O=this.attrs.fillRule;O?k.fill(O):k.fill()}function x(k){k.stroke()}function _(k){k.fill()}function b(k){k.stroke()}function y(){this._clearCache(l)}function S(){this._clearCache(u)}function C(){this._clearCache(d)}function T(){this._clearCache(f)}function E(){this._clearCache(h)}class P extends i.Node{constructor(O){super(O);let M;for(;M=n.Util.getRandomColor(),!(M&&!(M in e.shapes)););this.colorKey=M,e.shapes[M]=this}getContext(){return n.Util.warn("shape.getContext() method is deprecated. Please do not use it."),this.getLayer().getContext()}getCanvas(){return n.Util.warn("shape.getCanvas() method is deprecated. Please do not use it."),this.getLayer().getCanvas()}getSceneFunc(){return this.attrs.sceneFunc||this._sceneFunc}getHitFunc(){return this.attrs.hitFunc||this._hitFunc}hasShadow(){return this._getCache(l,this._hasShadow)}_hasShadow(){return this.shadowEnabled()&&this.shadowOpacity()!==0&&!!(this.shadowColor()||this.shadowBlur()||this.shadowOffsetX()||this.shadowOffsetY())}_getFillPattern(){return this._getCache(d,this.__getFillPattern)}__getFillPattern(){if(this.fillPatternImage()){var O=m();const M=O.createPattern(this.fillPatternImage(),this.fillPatternRepeat()||"repeat");if(M&&M.setTransform){const V=new n.Transform;V.translate(this.fillPatternX(),this.fillPatternY()),V.rotate(t.Konva.getAngle(this.fillPatternRotation())),V.scale(this.fillPatternScaleX(),this.fillPatternScaleY()),V.translate(-1*this.fillPatternOffsetX(),-1*this.fillPatternOffsetY());const B=V.getMatrix(),A=typeof DOMMatrix>"u"?{a:B[0],b:B[1],c:B[2],d:B[3],e:B[4],f:B[5]}:new DOMMatrix(B);M.setTransform(A)}return M}}_getLinearGradient(){return this._getCache(f,this.__getLinearGradient)}__getLinearGradient(){var O=this.fillLinearGradientColorStops();if(O){for(var M=m(),V=this.fillLinearGradientStartPoint(),B=this.fillLinearGradientEndPoint(),A=M.createLinearGradient(V.x,V.y,B.x,B.y),N=0;Nthis.fillEnabled()&&!!(this.fill()||this.fillPatternImage()||this.fillLinearGradientColorStops()||this.fillRadialGradientColorStops()))}hasStroke(){return this._calculate("hasStroke",["strokeEnabled","strokeWidth","stroke","strokeLinearGradientColorStops"],()=>this.strokeEnabled()&&this.strokeWidth()&&!!(this.stroke()||this.strokeLinearGradientColorStops()))}hasHitStroke(){const O=this.hitStrokeWidth();return O==="auto"?this.hasStroke():this.strokeEnabled()&&!!O}intersects(O){var M=this.getStage(),V=M.bufferHitCanvas,B;return V.getContext().clear(),this.drawHit(V,null,!0),B=V.context.getImageData(Math.round(O.x),Math.round(O.y),1,1).data,B[3]>0}destroy(){return i.Node.prototype.destroy.call(this),delete e.shapes[this.colorKey],delete this.colorKey,this}_useBufferCanvas(O){var M;if(!this.getStage()||!((M=this.attrs.perfectDrawEnabled)!==null&&M!==void 0?M:!0))return!1;const B=O||this.hasFill(),A=this.hasStroke(),N=this.getAbsoluteOpacity()!==1;if(B&&A&&N)return!0;const D=this.hasShadow(),U=this.shadowForStrokeEnabled();return!!(B&&A&&D&&U)}setStrokeHitEnabled(O){n.Util.warn("strokeHitEnabled property is deprecated. Please use hitStrokeWidth instead."),O?this.hitStrokeWidth("auto"):this.hitStrokeWidth(0)}getStrokeHitEnabled(){return this.hitStrokeWidth()!==0}getSelfRect(){var O=this.size();return{x:this._centroid?-O.width/2:0,y:this._centroid?-O.height/2:0,width:O.width,height:O.height}}getClientRect(O={}){const M=O.skipTransform,V=O.relativeTo,B=this.getSelfRect(),N=!O.skipStroke&&this.hasStroke()&&this.strokeWidth()||0,D=B.width+N,U=B.height+N,$=!O.skipShadow&&this.hasShadow(),j=$?this.shadowOffsetX():0,G=$?this.shadowOffsetY():0,q=D+Math.abs(j),Z=U+Math.abs(G),ee=$&&this.shadowBlur()||0,ie=q+ee*2,se=Z+ee*2,le={width:ie,height:se,x:-(N/2+ee)+Math.min(j,0)+B.x,y:-(N/2+ee)+Math.min(G,0)+B.y};return M?le:this._transformedRect(le,V)}drawScene(O,M){var V=this.getLayer(),B=O||V.getCanvas(),A=B.getContext(),N=this._getCanvasCache(),D=this.getSceneFunc(),U=this.hasShadow(),$,j,G,q=B.isCache,Z=M===this;if(!this.isVisible()&&!Z)return this;if(N){A.save();var ee=this.getAbsoluteTransform(M).getMatrix();return A.transform(ee[0],ee[1],ee[2],ee[3],ee[4],ee[5]),this._drawCachedSceneCanvas(A),A.restore(),this}if(!D)return this;if(A.save(),this._useBufferCanvas()&&!q){$=this.getStage(),j=$.bufferCanvas,G=j.getContext(),G.clear(),G.save(),G._applyLineJoin(this);var ie=this.getAbsoluteTransform(M).getMatrix();G.transform(ie[0],ie[1],ie[2],ie[3],ie[4],ie[5]),D.call(this,G,this),G.restore();var se=j.pixelRatio;U&&A._applyShadow(this),A._applyOpacity(this),A._applyGlobalCompositeOperation(this),A.drawImage(j._canvas,0,0,j.width/se,j.height/se)}else{if(A._applyLineJoin(this),!Z){var ie=this.getAbsoluteTransform(M).getMatrix();A.transform(ie[0],ie[1],ie[2],ie[3],ie[4],ie[5]),A._applyOpacity(this),A._applyGlobalCompositeOperation(this)}U&&A._applyShadow(this),D.call(this,A,this)}return A.restore(),this}drawHit(O,M,V=!1){if(!this.shouldDrawHit(M,V))return this;var B=this.getLayer(),A=O||B.hitCanvas,N=A&&A.getContext(),D=this.hitFunc()||this.sceneFunc(),U=this._getCanvasCache(),$=U&&U.hit;if(this.colorKey||n.Util.warn("Looks like your canvas has a destroyed shape in it. Do not reuse shape after you destroyed it. If you want to reuse shape you should call remove() instead of destroy()"),$){N.save();var j=this.getAbsoluteTransform(M).getMatrix();return N.transform(j[0],j[1],j[2],j[3],j[4],j[5]),this._drawCachedHitCanvas(N),N.restore(),this}if(!D)return this;if(N.save(),N._applyLineJoin(this),!(this===M)){var q=this.getAbsoluteTransform(M).getMatrix();N.transform(q[0],q[1],q[2],q[3],q[4],q[5])}return D.call(this,N,this),N.restore(),this}drawHitFromCache(O=0){var M=this._getCanvasCache(),V=this._getCachedSceneCanvas(),B=M.hit,A=B.getContext(),N=B.getWidth(),D=B.getHeight(),U,$,j,G,q,Z;A.clear(),A.drawImage(V._canvas,0,0,N,D);try{for(U=A.getImageData(0,0,N,D),$=U.data,j=$.length,G=n.Util._hexToRgb(this.colorKey),q=0;qO?($[q]=G.r,$[q+1]=G.g,$[q+2]=G.b,$[q+3]=255):$[q+3]=0;A.putImageData(U,0,0)}catch(ee){n.Util.error("Unable to draw hit graph from cached scene canvas. "+ee.message)}return this}hasPointerCapture(O){return a.hasPointerCapture(O,this)}setPointerCapture(O){a.setPointerCapture(O,this)}releaseCapture(O){a.releaseCapture(O,this)}}e.Shape=P,P.prototype._fillFunc=v,P.prototype._strokeFunc=x,P.prototype._fillFuncHit=_,P.prototype._strokeFuncHit=b,P.prototype._centroid=!1,P.prototype.nodeType="Shape",(0,s._registerNode)(P),P.prototype.eventListeners={},P.prototype.on.call(P.prototype,"shadowColorChange.konva shadowBlurChange.konva shadowOffsetChange.konva shadowOpacityChange.konva shadowEnabledChange.konva",y),P.prototype.on.call(P.prototype,"shadowColorChange.konva shadowOpacityChange.konva shadowEnabledChange.konva",S),P.prototype.on.call(P.prototype,"fillPriorityChange.konva fillPatternImageChange.konva fillPatternRepeatChange.konva fillPatternScaleXChange.konva fillPatternScaleYChange.konva fillPatternOffsetXChange.konva fillPatternOffsetYChange.konva fillPatternXChange.konva fillPatternYChange.konva fillPatternRotationChange.konva",C),P.prototype.on.call(P.prototype,"fillPriorityChange.konva fillLinearGradientColorStopsChange.konva fillLinearGradientStartPointXChange.konva fillLinearGradientStartPointYChange.konva fillLinearGradientEndPointXChange.konva fillLinearGradientEndPointYChange.konva",T),P.prototype.on.call(P.prototype,"fillPriorityChange.konva fillRadialGradientColorStopsChange.konva fillRadialGradientStartPointXChange.konva fillRadialGradientStartPointYChange.konva fillRadialGradientEndPointXChange.konva fillRadialGradientEndPointYChange.konva fillRadialGradientStartRadiusChange.konva fillRadialGradientEndRadiusChange.konva",E),r.Factory.addGetterSetter(P,"stroke",void 0,(0,o.getStringOrGradientValidator)()),r.Factory.addGetterSetter(P,"strokeWidth",2,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(P,"fillAfterStrokeEnabled",!1),r.Factory.addGetterSetter(P,"hitStrokeWidth","auto",(0,o.getNumberOrAutoValidator)()),r.Factory.addGetterSetter(P,"strokeHitEnabled",!0,(0,o.getBooleanValidator)()),r.Factory.addGetterSetter(P,"perfectDrawEnabled",!0,(0,o.getBooleanValidator)()),r.Factory.addGetterSetter(P,"shadowForStrokeEnabled",!0,(0,o.getBooleanValidator)()),r.Factory.addGetterSetter(P,"lineJoin"),r.Factory.addGetterSetter(P,"lineCap"),r.Factory.addGetterSetter(P,"sceneFunc"),r.Factory.addGetterSetter(P,"hitFunc"),r.Factory.addGetterSetter(P,"dash"),r.Factory.addGetterSetter(P,"dashOffset",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(P,"shadowColor",void 0,(0,o.getStringValidator)()),r.Factory.addGetterSetter(P,"shadowBlur",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(P,"shadowOpacity",1,(0,o.getNumberValidator)()),r.Factory.addComponentsGetterSetter(P,"shadowOffset",["x","y"]),r.Factory.addGetterSetter(P,"shadowOffsetX",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(P,"shadowOffsetY",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(P,"fillPatternImage"),r.Factory.addGetterSetter(P,"fill",void 0,(0,o.getStringOrGradientValidator)()),r.Factory.addGetterSetter(P,"fillPatternX",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(P,"fillPatternY",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(P,"fillLinearGradientColorStops"),r.Factory.addGetterSetter(P,"strokeLinearGradientColorStops"),r.Factory.addGetterSetter(P,"fillRadialGradientStartRadius",0),r.Factory.addGetterSetter(P,"fillRadialGradientEndRadius",0),r.Factory.addGetterSetter(P,"fillRadialGradientColorStops"),r.Factory.addGetterSetter(P,"fillPatternRepeat","repeat"),r.Factory.addGetterSetter(P,"fillEnabled",!0),r.Factory.addGetterSetter(P,"strokeEnabled",!0),r.Factory.addGetterSetter(P,"shadowEnabled",!0),r.Factory.addGetterSetter(P,"dashEnabled",!0),r.Factory.addGetterSetter(P,"strokeScaleEnabled",!0),r.Factory.addGetterSetter(P,"fillPriority","color"),r.Factory.addComponentsGetterSetter(P,"fillPatternOffset",["x","y"]),r.Factory.addGetterSetter(P,"fillPatternOffsetX",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(P,"fillPatternOffsetY",0,(0,o.getNumberValidator)()),r.Factory.addComponentsGetterSetter(P,"fillPatternScale",["x","y"]),r.Factory.addGetterSetter(P,"fillPatternScaleX",1,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(P,"fillPatternScaleY",1,(0,o.getNumberValidator)()),r.Factory.addComponentsGetterSetter(P,"fillLinearGradientStartPoint",["x","y"]),r.Factory.addComponentsGetterSetter(P,"strokeLinearGradientStartPoint",["x","y"]),r.Factory.addGetterSetter(P,"fillLinearGradientStartPointX",0),r.Factory.addGetterSetter(P,"strokeLinearGradientStartPointX",0),r.Factory.addGetterSetter(P,"fillLinearGradientStartPointY",0),r.Factory.addGetterSetter(P,"strokeLinearGradientStartPointY",0),r.Factory.addComponentsGetterSetter(P,"fillLinearGradientEndPoint",["x","y"]),r.Factory.addComponentsGetterSetter(P,"strokeLinearGradientEndPoint",["x","y"]),r.Factory.addGetterSetter(P,"fillLinearGradientEndPointX",0),r.Factory.addGetterSetter(P,"strokeLinearGradientEndPointX",0),r.Factory.addGetterSetter(P,"fillLinearGradientEndPointY",0),r.Factory.addGetterSetter(P,"strokeLinearGradientEndPointY",0),r.Factory.addComponentsGetterSetter(P,"fillRadialGradientStartPoint",["x","y"]),r.Factory.addGetterSetter(P,"fillRadialGradientStartPointX",0),r.Factory.addGetterSetter(P,"fillRadialGradientStartPointY",0),r.Factory.addComponentsGetterSetter(P,"fillRadialGradientEndPoint",["x","y"]),r.Factory.addGetterSetter(P,"fillRadialGradientEndPointX",0),r.Factory.addGetterSetter(P,"fillRadialGradientEndPointY",0),r.Factory.addGetterSetter(P,"fillPatternRotation",0),r.Factory.addGetterSetter(P,"fillRule",void 0,(0,o.getStringValidator)()),r.Factory.backCompat(P,{dashArray:"dash",getDashArray:"getDash",setDashArray:"getDash",drawFunc:"sceneFunc",getDrawFunc:"getSceneFunc",setDrawFunc:"setSceneFunc",drawHitFunc:"hitFunc",getDrawHitFunc:"getHitFunc",setDrawHitFunc:"setHitFunc"})})(gr);Object.defineProperty(jm,"__esModule",{value:!0});jm.Layer=void 0;const _a=kn,Xx=Ic,Td=wn,$E=dt,fk=ds,g2e=De,m2e=gr,y2e=ft;var v2e="#",_2e="beforeDraw",b2e="draw",bz=[{x:0,y:0},{x:-1,y:-1},{x:1,y:-1},{x:1,y:1},{x:-1,y:1}],S2e=bz.length;class th extends Xx.Container{constructor(t){super(t),this.canvas=new fk.SceneCanvas,this.hitCanvas=new fk.HitCanvas({pixelRatio:1}),this._waitingForDraw=!1,this.on("visibleChange.konva",this._checkVisibility),this._checkVisibility(),this.on("imageSmoothingEnabledChange.konva",this._setSmoothEnabled),this._setSmoothEnabled()}createPNGStream(){return this.canvas._canvas.createPNGStream()}getCanvas(){return this.canvas}getNativeCanvasElement(){return this.canvas._canvas}getHitCanvas(){return this.hitCanvas}getContext(){return this.getCanvas().getContext()}clear(t){return this.getContext().clear(t),this.getHitCanvas().getContext().clear(t),this}setZIndex(t){super.setZIndex(t);var n=this.getStage();return n&&n.content&&(n.content.removeChild(this.getNativeCanvasElement()),t{this.draw(),this._waitingForDraw=!1})),this}getIntersection(t){if(!this.isListening()||!this.isVisible())return null;for(var n=1,r=!1;;){for(let i=0;i0)return{antialiased:!0};return{}}drawScene(t,n){var r=this.getLayer(),i=t||r&&r.getCanvas();return this._fire(_2e,{node:this}),this.clearBeforeDraw()&&i.getContext().clear(),Xx.Container.prototype.drawScene.call(this,i,n),this._fire(b2e,{node:this}),this}drawHit(t,n){var r=this.getLayer(),i=t||r&&r.hitCanvas;return r&&r.clearBeforeDraw()&&r.getHitCanvas().getContext().clear(),Xx.Container.prototype.drawHit.call(this,i,n),this}enableHitGraph(){return this.hitGraphEnabled(!0),this}disableHitGraph(){return this.hitGraphEnabled(!1),this}setHitGraphEnabled(t){_a.Util.warn("hitGraphEnabled method is deprecated. Please use layer.listening() instead."),this.listening(t)}getHitGraphEnabled(t){return _a.Util.warn("hitGraphEnabled method is deprecated. Please use layer.listening() instead."),this.listening()}toggleHitCanvas(){if(!(!this.parent||!this.parent.content)){var t=this.parent,n=!!this.hitCanvas._canvas.parentNode;n?t.content.removeChild(this.hitCanvas._canvas):t.content.appendChild(this.hitCanvas._canvas)}}destroy(){return _a.Util.releaseCanvas(this.getNativeCanvasElement(),this.getHitCanvas()._canvas),super.destroy()}}jm.Layer=th;th.prototype.nodeType="Layer";(0,y2e._registerNode)(th);$E.Factory.addGetterSetter(th,"imageSmoothingEnabled",!0);$E.Factory.addGetterSetter(th,"clearBeforeDraw",!0);$E.Factory.addGetterSetter(th,"hitGraphEnabled",!0,(0,g2e.getBooleanValidator)());var wS={};Object.defineProperty(wS,"__esModule",{value:!0});wS.FastLayer=void 0;const w2e=kn,x2e=jm,C2e=ft;class FE extends x2e.Layer{constructor(t){super(t),this.listening(!1),w2e.Util.warn('Konva.Fast layer is deprecated. Please use "new Konva.Layer({ listening: false })" instead.')}}wS.FastLayer=FE;FE.prototype.nodeType="FastLayer";(0,C2e._registerNode)(FE);var nh={};Object.defineProperty(nh,"__esModule",{value:!0});nh.Group=void 0;const T2e=kn,E2e=Ic,A2e=ft;class BE extends E2e.Container{_validateAdd(t){var n=t.getType();n!=="Group"&&n!=="Shape"&&T2e.Util.throw("You may only add groups and shapes to groups.")}}nh.Group=BE;BE.prototype.nodeType="Group";(0,A2e._registerNode)(BE);var rh={};Object.defineProperty(rh,"__esModule",{value:!0});rh.Animation=void 0;const Yx=ft,hk=kn;var Qx=function(){return Yx.glob.performance&&Yx.glob.performance.now?function(){return Yx.glob.performance.now()}:function(){return new Date().getTime()}}();class $s{constructor(t,n){this.id=$s.animIdCounter++,this.frame={time:0,timeDiff:0,lastTime:Qx(),frameRate:0},this.func=t,this.setLayers(n)}setLayers(t){var n=[];return t?t.length>0?n=t:n=[t]:n=[],this.layers=n,this}getLayers(){return this.layers}addLayer(t){var n=this.layers,r=n.length,i;for(i=0;ithis.duration?this.yoyo?(this._time=this.duration,this.reverse()):this.finish():m<0?this.yoyo?(this._time=0,this.play()):this.reset():(this._time=m,this.update())}getTime(){return this._time}setPosition(m){this.prevPos=this._pos,this.propFunc(m),this._pos=m}getPosition(m){return m===void 0&&(m=this._time),this.func(m,this.begin,this._change,this.duration)}play(){this.state=a,this._startTime=this.getTimer()-this._time,this.onEnterFrame(),this.fire("onPlay")}reverse(){this.state=l,this._time=this.duration-this._time,this._startTime=this.getTimer()-this._time,this.onEnterFrame(),this.fire("onReverse")}seek(m){this.pause(),this._time=m,this.update(),this.fire("onSeek")}reset(){this.pause(),this._time=0,this.update(),this.fire("onReset")}finish(){this.pause(),this._time=this.duration,this.update(),this.fire("onFinish")}update(){this.setPosition(this.getPosition(this._time)),this.fire("onUpdate")}onEnterFrame(){var m=this.getTimer()-this._startTime;this.state===a?this.setTime(m):this.state===l&&this.setTime(this.duration-m)}pause(){this.state=s,this.fire("onPause")}getTimer(){return new Date().getTime()}}class h{constructor(m){var v=this,x=m.node,_=x._id,b,y=m.easing||e.Easings.Linear,S=!!m.yoyo,C;typeof m.duration>"u"?b=.3:m.duration===0?b=.001:b=m.duration,this.node=x,this._id=u++;var T=x.getLayer()||(x instanceof i.Konva.Stage?x.getLayers():null);T||t.Util.error("Tween constructor have `node` that is not in a layer. Please add node into layer first."),this.anim=new n.Animation(function(){v.tween.onEnterFrame()},T),this.tween=new f(C,function(E){v._tweenFunc(E)},y,0,1,b*1e3,S),this._addListeners(),h.attrs[_]||(h.attrs[_]={}),h.attrs[_][this._id]||(h.attrs[_][this._id]={}),h.tweens[_]||(h.tweens[_]={});for(C in m)o[C]===void 0&&this._addAttr(C,m[C]);this.reset(),this.onFinish=m.onFinish,this.onReset=m.onReset,this.onUpdate=m.onUpdate}_addAttr(m,v){var x=this.node,_=x._id,b,y,S,C,T,E,P,k;if(S=h.tweens[_][m],S&&delete h.attrs[_][S][m],b=x.getAttr(m),t.Util._isArray(v))if(y=[],T=Math.max(v.length,b.length),m==="points"&&v.length!==b.length&&(v.length>b.length?(P=b,b=t.Util._prepareArrayForTween(b,v,x.closed())):(E=v,v=t.Util._prepareArrayForTween(v,b,x.closed()))),m.indexOf("fill")===0)for(C=0;C{this.anim.start()},this.tween.onReverse=()=>{this.anim.start()},this.tween.onPause=()=>{this.anim.stop()},this.tween.onFinish=()=>{var m=this.node,v=h.attrs[m._id][this._id];v.points&&v.points.trueEnd&&m.setAttr("points",v.points.trueEnd),this.onFinish&&this.onFinish.call(this)},this.tween.onReset=()=>{var m=this.node,v=h.attrs[m._id][this._id];v.points&&v.points.trueStart&&m.points(v.points.trueStart),this.onReset&&this.onReset()},this.tween.onUpdate=()=>{this.onUpdate&&this.onUpdate.call(this)}}play(){return this.tween.play(),this}reverse(){return this.tween.reverse(),this}reset(){return this.tween.reset(),this}seek(m){return this.tween.seek(m*1e3),this}pause(){return this.tween.pause(),this}finish(){return this.tween.finish(),this}destroy(){var m=this.node._id,v=this._id,x=h.tweens[m],_;this.pause();for(_ in x)delete h.tweens[m][_];delete h.attrs[m][v]}}e.Tween=h,h.attrs={},h.tweens={},r.Node.prototype.to=function(g){var m=g.onFinish;g.node=this,g.onFinish=function(){this.destroy(),m&&m()};var v=new h(g);v.play()},e.Easings={BackEaseIn(g,m,v,x){var _=1.70158;return v*(g/=x)*g*((_+1)*g-_)+m},BackEaseOut(g,m,v,x){var _=1.70158;return v*((g=g/x-1)*g*((_+1)*g+_)+1)+m},BackEaseInOut(g,m,v,x){var _=1.70158;return(g/=x/2)<1?v/2*(g*g*(((_*=1.525)+1)*g-_))+m:v/2*((g-=2)*g*(((_*=1.525)+1)*g+_)+2)+m},ElasticEaseIn(g,m,v,x,_,b){var y=0;return g===0?m:(g/=x)===1?m+v:(b||(b=x*.3),!_||_0?t:n),d=s*n,f=a*(a>0?t:n),h=l*(l>0?n:t);return{x:u,y:r?-1*h:f,width:d-u,height:h-f}}}xS.Arc=Ja;Ja.prototype._centroid=!0;Ja.prototype.className="Arc";Ja.prototype._attrsAffectingSize=["innerRadius","outerRadius"];(0,R2e._registerNode)(Ja);CS.Factory.addGetterSetter(Ja,"innerRadius",0,(0,TS.getNumberValidator)());CS.Factory.addGetterSetter(Ja,"outerRadius",0,(0,TS.getNumberValidator)());CS.Factory.addGetterSetter(Ja,"angle",0,(0,TS.getNumberValidator)());CS.Factory.addGetterSetter(Ja,"clockwise",!1,(0,TS.getBooleanValidator)());var ES={},Gm={};Object.defineProperty(Gm,"__esModule",{value:!0});Gm.Line=void 0;const AS=dt,O2e=gr,wz=De,k2e=ft;function x5(e,t,n,r,i,o,s){var a=Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2)),l=Math.sqrt(Math.pow(i-n,2)+Math.pow(o-r,2)),u=s*a/(a+l),d=s*l/(a+l),f=n-u*(i-e),h=r-u*(o-t),g=n+d*(i-e),m=r+d*(o-t);return[f,h,g,m]}function gk(e,t){var n=e.length,r=[],i,o;for(i=2;i4){for(a=this.getTensionPoints(),l=a.length,u=o?0:4,o||t.quadraticCurveTo(a[0],a[1],a[2],a[3]);u{let u,d,f;u=l/2,d=0;for(let g=0;g<20;g++)f=u*e.tValues[20][g]+u,d+=e.cValues[20][g]*r(s,a,f);return u*d};e.getCubicArcLength=t;const n=(s,a,l)=>{l===void 0&&(l=1);const u=s[0]-2*s[1]+s[2],d=a[0]-2*a[1]+a[2],f=2*s[1]-2*s[0],h=2*a[1]-2*a[0],g=4*(u*u+d*d),m=4*(u*f+d*h),v=f*f+h*h;if(g===0)return l*Math.sqrt(Math.pow(s[2]-s[0],2)+Math.pow(a[2]-a[0],2));const x=m/(2*g),_=v/g,b=l+x,y=_-x*x,S=b*b+y>0?Math.sqrt(b*b+y):0,C=x*x+y>0?Math.sqrt(x*x+y):0,T=x+Math.sqrt(x*x+y)!==0?y*Math.log(Math.abs((b+S)/(x+C))):0;return Math.sqrt(g)/2*(b*S-x*C+T)};e.getQuadraticArcLength=n;function r(s,a,l){const u=i(1,l,s),d=i(1,l,a),f=u*u+d*d;return Math.sqrt(f)}const i=(s,a,l)=>{const u=l.length-1;let d,f;if(u===0)return 0;if(s===0){f=0;for(let h=0;h<=u;h++)f+=e.binomialCoefficients[u][h]*Math.pow(1-a,u-h)*Math.pow(a,h)*l[h];return f}else{d=new Array(u);for(let h=0;h{let u=1,d=s/a,f=(s-l(d))/a,h=0;for(;u>.001;){const g=l(d+f),m=Math.abs(s-g)/a;if(m500)break}return d};e.t2length=o})(xz);Object.defineProperty(ih,"__esModule",{value:!0});ih.Path=void 0;const I2e=dt,M2e=gr,N2e=ft,Ed=xz;class ur extends M2e.Shape{constructor(t){super(t),this.dataArray=[],this.pathLength=0,this._readDataAttribute(),this.on("dataChange.konva",function(){this._readDataAttribute()})}_readDataAttribute(){this.dataArray=ur.parsePathData(this.data()),this.pathLength=ur.getPathLength(this.dataArray)}_sceneFunc(t){var n=this.dataArray;t.beginPath();for(var r=!1,i=0;id?u:d,x=u>d?1:u/d,_=u>d?d/u:1;t.translate(a,l),t.rotate(g),t.scale(x,_),t.arc(0,0,v,f,f+h,1-m),t.scale(1/x,1/_),t.rotate(-g),t.translate(-a,-l);break;case"z":r=!0,t.closePath();break}}!r&&!this.hasFill()?t.strokeShape(this):t.fillStrokeShape(this)}getSelfRect(){var t=[];this.dataArray.forEach(function(u){if(u.command==="A"){var d=u.points[4],f=u.points[5],h=u.points[4]+f,g=Math.PI/180;if(Math.abs(d-h)h;m-=g){const v=ur.getPointOnEllipticalArc(u.points[0],u.points[1],u.points[2],u.points[3],m,0);t.push(v.x,v.y)}else for(let m=d+g;mn[i].pathLength;)t-=n[i].pathLength,++i;if(i===o)return r=n[i-1].points.slice(-2),{x:r[0],y:r[1]};if(t<.01)return r=n[i].points.slice(0,2),{x:r[0],y:r[1]};var s=n[i],a=s.points;switch(s.command){case"L":return ur.getPointOnLine(t,s.start.x,s.start.y,a[0],a[1]);case"C":return ur.getPointOnCubicBezier((0,Ed.t2length)(t,ur.getPathLength(n),v=>(0,Ed.getCubicArcLength)([s.start.x,a[0],a[2],a[4]],[s.start.y,a[1],a[3],a[5]],v)),s.start.x,s.start.y,a[0],a[1],a[2],a[3],a[4],a[5]);case"Q":return ur.getPointOnQuadraticBezier((0,Ed.t2length)(t,ur.getPathLength(n),v=>(0,Ed.getQuadraticArcLength)([s.start.x,a[0],a[2]],[s.start.y,a[1],a[3]],v)),s.start.x,s.start.y,a[0],a[1],a[2],a[3]);case"A":var l=a[0],u=a[1],d=a[2],f=a[3],h=a[4],g=a[5],m=a[6];return h+=g*t/s.pathLength,ur.getPointOnEllipticalArc(l,u,d,f,h,m)}return null}static getPointOnLine(t,n,r,i,o,s,a){s===void 0&&(s=n),a===void 0&&(a=r);var l=(o-r)/(i-n+1e-8),u=Math.sqrt(t*t/(1+l*l));i0&&!isNaN(m[0]);){var b=null,y=[],S=l,C=u,T,E,P,k,O,M,V,B,A,N;switch(g){case"l":l+=m.shift(),u+=m.shift(),b="L",y.push(l,u);break;case"L":l=m.shift(),u=m.shift(),y.push(l,u);break;case"m":var D=m.shift(),U=m.shift();if(l+=D,u+=U,b="M",s.length>2&&s[s.length-1].command==="z"){for(var $=s.length-2;$>=0;$--)if(s[$].command==="M"){l=s[$].points[0]+D,u=s[$].points[1]+U;break}}y.push(l,u),g="l";break;case"M":l=m.shift(),u=m.shift(),b="M",y.push(l,u),g="L";break;case"h":l+=m.shift(),b="L",y.push(l,u);break;case"H":l=m.shift(),b="L",y.push(l,u);break;case"v":u+=m.shift(),b="L",y.push(l,u);break;case"V":u=m.shift(),b="L",y.push(l,u);break;case"C":y.push(m.shift(),m.shift(),m.shift(),m.shift()),l=m.shift(),u=m.shift(),y.push(l,u);break;case"c":y.push(l+m.shift(),u+m.shift(),l+m.shift(),u+m.shift()),l+=m.shift(),u+=m.shift(),b="C",y.push(l,u);break;case"S":E=l,P=u,T=s[s.length-1],T.command==="C"&&(E=l+(l-T.points[2]),P=u+(u-T.points[3])),y.push(E,P,m.shift(),m.shift()),l=m.shift(),u=m.shift(),b="C",y.push(l,u);break;case"s":E=l,P=u,T=s[s.length-1],T.command==="C"&&(E=l+(l-T.points[2]),P=u+(u-T.points[3])),y.push(E,P,l+m.shift(),u+m.shift()),l+=m.shift(),u+=m.shift(),b="C",y.push(l,u);break;case"Q":y.push(m.shift(),m.shift()),l=m.shift(),u=m.shift(),y.push(l,u);break;case"q":y.push(l+m.shift(),u+m.shift()),l+=m.shift(),u+=m.shift(),b="Q",y.push(l,u);break;case"T":E=l,P=u,T=s[s.length-1],T.command==="Q"&&(E=l+(l-T.points[0]),P=u+(u-T.points[1])),l=m.shift(),u=m.shift(),b="Q",y.push(E,P,l,u);break;case"t":E=l,P=u,T=s[s.length-1],T.command==="Q"&&(E=l+(l-T.points[0]),P=u+(u-T.points[1])),l+=m.shift(),u+=m.shift(),b="Q",y.push(E,P,l,u);break;case"A":k=m.shift(),O=m.shift(),M=m.shift(),V=m.shift(),B=m.shift(),A=l,N=u,l=m.shift(),u=m.shift(),b="A",y=this.convertEndpointToCenterParameterization(A,N,l,u,V,B,k,O,M);break;case"a":k=m.shift(),O=m.shift(),M=m.shift(),V=m.shift(),B=m.shift(),A=l,N=u,l+=m.shift(),u+=m.shift(),b="A",y=this.convertEndpointToCenterParameterization(A,N,l,u,V,B,k,O,M);break}s.push({command:b||g,points:y,start:{x:S,y:C},pathLength:this.calcLength(S,C,b||g,y)})}(g==="z"||g==="Z")&&s.push({command:"z",points:[],start:void 0,pathLength:0})}return s}static calcLength(t,n,r,i){var o,s,a,l,u=ur;switch(r){case"L":return u.getLineLength(t,n,i[0],i[1]);case"C":return(0,Ed.getCubicArcLength)([t,i[0],i[2],i[4]],[n,i[1],i[3],i[5]],1);case"Q":return(0,Ed.getQuadraticArcLength)([t,i[0],i[2]],[n,i[1],i[3]],1);case"A":o=0;var d=i[4],f=i[5],h=i[4]+f,g=Math.PI/180;if(Math.abs(d-h)h;l-=g)a=u.getPointOnEllipticalArc(i[0],i[1],i[2],i[3],l,0),o+=u.getLineLength(s.x,s.y,a.x,a.y),s=a;else for(l=d+g;l1&&(a*=Math.sqrt(g),l*=Math.sqrt(g));var m=Math.sqrt((a*a*(l*l)-a*a*(h*h)-l*l*(f*f))/(a*a*(h*h)+l*l*(f*f)));o===s&&(m*=-1),isNaN(m)&&(m=0);var v=m*a*h/l,x=m*-l*f/a,_=(t+r)/2+Math.cos(d)*v-Math.sin(d)*x,b=(n+i)/2+Math.sin(d)*v+Math.cos(d)*x,y=function(O){return Math.sqrt(O[0]*O[0]+O[1]*O[1])},S=function(O,M){return(O[0]*M[0]+O[1]*M[1])/(y(O)*y(M))},C=function(O,M){return(O[0]*M[1]=1&&(k=0),s===0&&k>0&&(k=k-2*Math.PI),s===1&&k<0&&(k=k+2*Math.PI),[_,b,a,l,T,k,d,s]}}ih.Path=ur;ur.prototype.className="Path";ur.prototype._attrsAffectingSize=["data"];(0,N2e._registerNode)(ur);I2e.Factory.addGetterSetter(ur,"data");Object.defineProperty(ES,"__esModule",{value:!0});ES.Arrow=void 0;const PS=dt,L2e=Gm,Cz=De,D2e=ft,mk=ih;class Nc extends L2e.Line{_sceneFunc(t){super._sceneFunc(t);var n=Math.PI*2,r=this.points(),i=r,o=this.tension()!==0&&r.length>4;o&&(i=this.getTensionPoints());var s=this.pointerLength(),a=r.length,l,u;if(o){const h=[i[i.length-4],i[i.length-3],i[i.length-2],i[i.length-1],r[a-2],r[a-1]],g=mk.Path.calcLength(i[i.length-4],i[i.length-3],"C",h),m=mk.Path.getPointOnQuadraticBezier(Math.min(1,1-s/g),h[0],h[1],h[2],h[3],h[4],h[5]);l=r[a-2]-m.x,u=r[a-1]-m.y}else l=r[a-2]-r[a-4],u=r[a-1]-r[a-3];var d=(Math.atan2(u,l)+n)%n,f=this.pointerWidth();this.pointerAtEnding()&&(t.save(),t.beginPath(),t.translate(r[a-2],r[a-1]),t.rotate(d),t.moveTo(0,0),t.lineTo(-s,f/2),t.lineTo(-s,-f/2),t.closePath(),t.restore(),this.__fillStroke(t)),this.pointerAtBeginning()&&(t.save(),t.beginPath(),t.translate(r[0],r[1]),o?(l=(i[0]+i[2])/2-r[0],u=(i[1]+i[3])/2-r[1]):(l=r[2]-r[0],u=r[3]-r[1]),t.rotate((Math.atan2(-u,-l)+n)%n),t.moveTo(0,0),t.lineTo(-s,f/2),t.lineTo(-s,-f/2),t.closePath(),t.restore(),this.__fillStroke(t))}__fillStroke(t){var n=this.dashEnabled();n&&(this.attrs.dashEnabled=!1,t.setLineDash([])),t.fillStrokeShape(this),n&&(this.attrs.dashEnabled=!0)}getSelfRect(){const t=super.getSelfRect(),n=this.pointerWidth()/2;return{x:t.x-n,y:t.y-n,width:t.width+n*2,height:t.height+n*2}}}ES.Arrow=Nc;Nc.prototype.className="Arrow";(0,D2e._registerNode)(Nc);PS.Factory.addGetterSetter(Nc,"pointerLength",10,(0,Cz.getNumberValidator)());PS.Factory.addGetterSetter(Nc,"pointerWidth",10,(0,Cz.getNumberValidator)());PS.Factory.addGetterSetter(Nc,"pointerAtBeginning",!1);PS.Factory.addGetterSetter(Nc,"pointerAtEnding",!0);var RS={};Object.defineProperty(RS,"__esModule",{value:!0});RS.Circle=void 0;const $2e=dt,F2e=gr,B2e=De,U2e=ft;let oh=class extends F2e.Shape{_sceneFunc(t){t.beginPath(),t.arc(0,0,this.attrs.radius||0,0,Math.PI*2,!1),t.closePath(),t.fillStrokeShape(this)}getWidth(){return this.radius()*2}getHeight(){return this.radius()*2}setWidth(t){this.radius()!==t/2&&this.radius(t/2)}setHeight(t){this.radius()!==t/2&&this.radius(t/2)}};RS.Circle=oh;oh.prototype._centroid=!0;oh.prototype.className="Circle";oh.prototype._attrsAffectingSize=["radius"];(0,U2e._registerNode)(oh);$2e.Factory.addGetterSetter(oh,"radius",0,(0,B2e.getNumberValidator)());var OS={};Object.defineProperty(OS,"__esModule",{value:!0});OS.Ellipse=void 0;const UE=dt,z2e=gr,Tz=De,V2e=ft;class vu extends z2e.Shape{_sceneFunc(t){var n=this.radiusX(),r=this.radiusY();t.beginPath(),t.save(),n!==r&&t.scale(1,r/n),t.arc(0,0,n,0,Math.PI*2,!1),t.restore(),t.closePath(),t.fillStrokeShape(this)}getWidth(){return this.radiusX()*2}getHeight(){return this.radiusY()*2}setWidth(t){this.radiusX(t/2)}setHeight(t){this.radiusY(t/2)}}OS.Ellipse=vu;vu.prototype.className="Ellipse";vu.prototype._centroid=!0;vu.prototype._attrsAffectingSize=["radiusX","radiusY"];(0,V2e._registerNode)(vu);UE.Factory.addComponentsGetterSetter(vu,"radius",["x","y"]);UE.Factory.addGetterSetter(vu,"radiusX",0,(0,Tz.getNumberValidator)());UE.Factory.addGetterSetter(vu,"radiusY",0,(0,Tz.getNumberValidator)());var kS={};Object.defineProperty(kS,"__esModule",{value:!0});kS.Image=void 0;const Zx=kn,Lc=dt,j2e=gr,G2e=ft,Hm=De;let ta=class Ez extends j2e.Shape{constructor(t){super(t),this.on("imageChange.konva",()=>{this._setImageLoad()}),this._setImageLoad()}_setImageLoad(){const t=this.image();t&&t.complete||t&&t.readyState===4||t&&t.addEventListener&&t.addEventListener("load",()=>{this._requestDraw()})}_useBufferCanvas(){return super._useBufferCanvas(!0)}_sceneFunc(t){const n=this.getWidth(),r=this.getHeight(),i=this.cornerRadius(),o=this.attrs.image;let s;if(o){const a=this.attrs.cropWidth,l=this.attrs.cropHeight;a&&l?s=[o,this.cropX(),this.cropY(),a,l,0,0,n,r]:s=[o,0,0,n,r]}(this.hasFill()||this.hasStroke()||i)&&(t.beginPath(),i?Zx.Util.drawRoundedRectPath(t,n,r,i):t.rect(0,0,n,r),t.closePath(),t.fillStrokeShape(this)),o&&(i&&t.clip(),t.drawImage.apply(t,s))}_hitFunc(t){var n=this.width(),r=this.height(),i=this.cornerRadius();t.beginPath(),i?Zx.Util.drawRoundedRectPath(t,n,r,i):t.rect(0,0,n,r),t.closePath(),t.fillStrokeShape(this)}getWidth(){var t,n;return(t=this.attrs.width)!==null&&t!==void 0?t:(n=this.image())===null||n===void 0?void 0:n.width}getHeight(){var t,n;return(t=this.attrs.height)!==null&&t!==void 0?t:(n=this.image())===null||n===void 0?void 0:n.height}static fromURL(t,n,r=null){var i=Zx.Util.createImageElement();i.onload=function(){var o=new Ez({image:i});n(o)},i.onerror=r,i.crossOrigin="Anonymous",i.src=t}};kS.Image=ta;ta.prototype.className="Image";(0,G2e._registerNode)(ta);Lc.Factory.addGetterSetter(ta,"cornerRadius",0,(0,Hm.getNumberOrArrayOfNumbersValidator)(4));Lc.Factory.addGetterSetter(ta,"image");Lc.Factory.addComponentsGetterSetter(ta,"crop",["x","y","width","height"]);Lc.Factory.addGetterSetter(ta,"cropX",0,(0,Hm.getNumberValidator)());Lc.Factory.addGetterSetter(ta,"cropY",0,(0,Hm.getNumberValidator)());Lc.Factory.addGetterSetter(ta,"cropWidth",0,(0,Hm.getNumberValidator)());Lc.Factory.addGetterSetter(ta,"cropHeight",0,(0,Hm.getNumberValidator)());var Vf={};Object.defineProperty(Vf,"__esModule",{value:!0});Vf.Tag=Vf.Label=void 0;const IS=dt,H2e=gr,W2e=nh,zE=De,Az=ft;var Pz=["fontFamily","fontSize","fontStyle","padding","lineHeight","text","width","height","pointerDirection","pointerWidth","pointerHeight"],q2e="Change.konva",K2e="none",C5="up",T5="right",E5="down",A5="left",X2e=Pz.length;class VE extends W2e.Group{constructor(t){super(t),this.on("add.konva",function(n){this._addListeners(n.child),this._sync()})}getText(){return this.find("Text")[0]}getTag(){return this.find("Tag")[0]}_addListeners(t){var n=this,r,i=function(){n._sync()};for(r=0;r{n=Math.min(n,s.x),r=Math.max(r,s.x),i=Math.min(i,s.y),o=Math.max(o,s.y)}),{x:n,y:i,width:r-n,height:o-i}}getWidth(){return this.radius()*2}getHeight(){return this.radius()*2}setWidth(t){this.radius(t/2)}setHeight(t){this.radius(t/2)}}NS.RegularPolygon=$c;$c.prototype.className="RegularPolygon";$c.prototype._centroid=!0;$c.prototype._attrsAffectingSize=["radius"];(0,nwe._registerNode)($c);Rz.Factory.addGetterSetter($c,"radius",0,(0,Oz.getNumberValidator)());Rz.Factory.addGetterSetter($c,"sides",0,(0,Oz.getNumberValidator)());var LS={};Object.defineProperty(LS,"__esModule",{value:!0});LS.Ring=void 0;const kz=dt,rwe=gr,Iz=De,iwe=ft;var yk=Math.PI*2;class Fc extends rwe.Shape{_sceneFunc(t){t.beginPath(),t.arc(0,0,this.innerRadius(),0,yk,!1),t.moveTo(this.outerRadius(),0),t.arc(0,0,this.outerRadius(),yk,0,!0),t.closePath(),t.fillStrokeShape(this)}getWidth(){return this.outerRadius()*2}getHeight(){return this.outerRadius()*2}setWidth(t){this.outerRadius(t/2)}setHeight(t){this.outerRadius(t/2)}}LS.Ring=Fc;Fc.prototype.className="Ring";Fc.prototype._centroid=!0;Fc.prototype._attrsAffectingSize=["innerRadius","outerRadius"];(0,iwe._registerNode)(Fc);kz.Factory.addGetterSetter(Fc,"innerRadius",0,(0,Iz.getNumberValidator)());kz.Factory.addGetterSetter(Fc,"outerRadius",0,(0,Iz.getNumberValidator)());var DS={};Object.defineProperty(DS,"__esModule",{value:!0});DS.Sprite=void 0;const Bc=dt,owe=gr,swe=rh,Mz=De,awe=ft;class na extends owe.Shape{constructor(t){super(t),this._updated=!0,this.anim=new swe.Animation(()=>{var n=this._updated;return this._updated=!1,n}),this.on("animationChange.konva",function(){this.frameIndex(0)}),this.on("frameIndexChange.konva",function(){this._updated=!0}),this.on("frameRateChange.konva",function(){this.anim.isRunning()&&(clearInterval(this.interval),this._setInterval())})}_sceneFunc(t){var n=this.animation(),r=this.frameIndex(),i=r*4,o=this.animations()[n],s=this.frameOffsets(),a=o[i+0],l=o[i+1],u=o[i+2],d=o[i+3],f=this.image();if((this.hasFill()||this.hasStroke())&&(t.beginPath(),t.rect(0,0,u,d),t.closePath(),t.fillStrokeShape(this)),f)if(s){var h=s[n],g=r*2;t.drawImage(f,a,l,u,d,h[g+0],h[g+1],u,d)}else t.drawImage(f,a,l,u,d,0,0,u,d)}_hitFunc(t){var n=this.animation(),r=this.frameIndex(),i=r*4,o=this.animations()[n],s=this.frameOffsets(),a=o[i+2],l=o[i+3];if(t.beginPath(),s){var u=s[n],d=r*2;t.rect(u[d+0],u[d+1],a,l)}else t.rect(0,0,a,l);t.closePath(),t.fillShape(this)}_useBufferCanvas(){return super._useBufferCanvas(!0)}_setInterval(){var t=this;this.interval=setInterval(function(){t._updateIndex()},1e3/this.frameRate())}start(){if(!this.isRunning()){var t=this.getLayer();this.anim.setLayers(t),this._setInterval(),this.anim.start()}}stop(){this.anim.stop(),clearInterval(this.interval)}isRunning(){return this.anim.isRunning()}_updateIndex(){var t=this.frameIndex(),n=this.animation(),r=this.animations(),i=r[n],o=i.length/4;t{t=t.trim();const n=t.indexOf(" ")>=0,r=t.indexOf('"')>=0||t.indexOf("'")>=0;return n&&!r&&(t=`"${t}"`),t}).join(", ")}var Y0;function eC(){return Y0||(Y0=P5.Util.createCanvasElement().getContext(pwe),Y0)}function Twe(e){e.fillText(this._partialText,this._partialTextX,this._partialTextY)}function Ewe(e){e.setAttr("miterLimit",2),e.strokeText(this._partialText,this._partialTextX,this._partialTextY)}function Awe(e){return e=e||{},!e.fillLinearGradientColorStops&&!e.fillRadialGradientColorStops&&!e.fillPatternImage&&(e.fill=e.fill||"black"),e}class Wn extends cwe.Shape{constructor(t){super(Awe(t)),this._partialTextX=0,this._partialTextY=0;for(var n=0;n1&&(_+=s)}}}_hitFunc(t){var n=this.getWidth(),r=this.getHeight();t.beginPath(),t.rect(0,0,n,r),t.closePath(),t.fillStrokeShape(this)}setText(t){var n=P5.Util._isString(t)?t:t==null?"":t+"";return this._setAttr(gwe,n),this}getWidth(){var t=this.attrs.width===Ad||this.attrs.width===void 0;return t?this.getTextWidth()+this.padding()*2:this.attrs.width}getHeight(){var t=this.attrs.height===Ad||this.attrs.height===void 0;return t?this.fontSize()*this.textArr.length*this.lineHeight()+this.padding()*2:this.attrs.height}getTextWidth(){return this.textWidth}getTextHeight(){return P5.Util.warn("text.getTextHeight() method is deprecated. Use text.height() - for full height and text.fontSize() - for one line height."),this.textHeight}measureSize(t){var n=eC(),r=this.fontSize(),i;return n.save(),n.font=this._getContextFont(),i=n.measureText(t),n.restore(),{width:i.width,height:r}}_getContextFont(){return this.fontStyle()+X0+this.fontVariant()+X0+(this.fontSize()+_we)+Cwe(this.fontFamily())}_addTextLine(t){this.align()===hp&&(t=t.trim());var r=this._getTextWidth(t);return this.textArr.push({text:t,width:r,lastInParagraph:!1})}_getTextWidth(t){var n=this.letterSpacing(),r=t.length;return eC().measureText(t).width+(r?n*(r-1):0)}_setTextData(){var t=this.text().split(` +`),n=+this.fontSize(),r=0,i=this.lineHeight()*n,o=this.attrs.width,s=this.attrs.height,a=o!==Ad&&o!==void 0,l=s!==Ad&&s!==void 0,u=this.padding(),d=o-u*2,f=s-u*2,h=0,g=this.wrap(),m=g!==bk,v=g!==wwe&&m,x=this.ellipsis();this.textArr=[],eC().font=this._getContextFont();for(var _=x?this._getTextWidth(Jx):0,b=0,y=t.length;bd)for(;S.length>0;){for(var T=0,E=S.length,P="",k=0;T>>1,M=S.slice(0,O+1),V=this._getTextWidth(M)+_;V<=d?(T=O+1,P=M,k=V):E=O}if(P){if(v){var B,A=S[P.length],N=A===X0||A===vk;N&&k<=d?B=P.length:B=Math.max(P.lastIndexOf(X0),P.lastIndexOf(vk))+1,B>0&&(T=B,P=P.slice(0,T),k=this._getTextWidth(P))}P=P.trimRight(),this._addTextLine(P),r=Math.max(r,k),h+=i;var D=this._shouldHandleEllipsis(h);if(D){this._tryToAddEllipsisToLastLine();break}if(S=S.slice(T),S=S.trimLeft(),S.length>0&&(C=this._getTextWidth(S),C<=d)){this._addTextLine(S),h+=i,r=Math.max(r,C);break}}else break}else this._addTextLine(S),h+=i,r=Math.max(r,C),this._shouldHandleEllipsis(h)&&bf)break}this.textHeight=n,this.textWidth=r}_shouldHandleEllipsis(t){var n=+this.fontSize(),r=this.lineHeight()*n,i=this.attrs.height,o=i!==Ad&&i!==void 0,s=this.padding(),a=i-s*2,l=this.wrap(),u=l!==bk;return!u||o&&t+r>a}_tryToAddEllipsisToLastLine(){var t=this.attrs.width,n=t!==Ad&&t!==void 0,r=this.padding(),i=t-r*2,o=this.ellipsis(),s=this.textArr[this.textArr.length-1];if(!(!s||!o)){if(n){var a=this._getTextWidth(s.text+Jx)n?null:pp.Path.getPointAtLengthOfDataArray(t,this.dataArray)}_readDataAttribute(){this.dataArray=pp.Path.parsePathData(this.attrs.data),this.pathLength=this._getTextPathLength()}_sceneFunc(t){t.setAttr("font",this._getContextFont()),t.setAttr("textBaseline",this.textBaseline()),t.setAttr("textAlign","left"),t.save();var n=this.textDecoration(),r=this.fill(),i=this.fontSize(),o=this.glyphInfo;n==="underline"&&t.beginPath();for(var s=0;s=1){var r=n[0].p0;t.moveTo(r.x,r.y)}for(var i=0;ie+`.${Vz}`).join(" "),xk="nodesRect",Lwe=["widthChange","heightChange","scaleXChange","scaleYChange","skewXChange","skewYChange","rotationChange","offsetXChange","offsetYChange","transformsEnabledChange","strokeWidthChange"],Dwe={"top-left":-45,"top-center":0,"top-right":45,"middle-right":-90,"middle-left":90,"bottom-left":-135,"bottom-center":180,"bottom-right":135};const $we="ontouchstart"in Qo.Konva._global;function Fwe(e,t){if(e==="rotater")return"crosshair";t+=Xt.Util.degToRad(Dwe[e]||0);var n=(Xt.Util.radToDeg(t)%360+360)%360;return Xt.Util._inRange(n,315+22.5,360)||Xt.Util._inRange(n,0,22.5)?"ns-resize":Xt.Util._inRange(n,45-22.5,45+22.5)?"nesw-resize":Xt.Util._inRange(n,90-22.5,90+22.5)?"ew-resize":Xt.Util._inRange(n,135-22.5,135+22.5)?"nwse-resize":Xt.Util._inRange(n,180-22.5,180+22.5)?"ns-resize":Xt.Util._inRange(n,225-22.5,225+22.5)?"nesw-resize":Xt.Util._inRange(n,270-22.5,270+22.5)?"ew-resize":Xt.Util._inRange(n,315-22.5,315+22.5)?"nwse-resize":(Xt.Util.error("Transformer has unknown angle for cursor detection: "+n),"pointer")}var h_=["top-left","top-center","top-right","middle-right","middle-left","bottom-left","bottom-center","bottom-right"],Ck=1e8;function Bwe(e){return{x:e.x+e.width/2*Math.cos(e.rotation)+e.height/2*Math.sin(-e.rotation),y:e.y+e.height/2*Math.cos(e.rotation)+e.width/2*Math.sin(e.rotation)}}function jz(e,t,n){const r=n.x+(e.x-n.x)*Math.cos(t)-(e.y-n.y)*Math.sin(t),i=n.y+(e.x-n.x)*Math.sin(t)+(e.y-n.y)*Math.cos(t);return Object.assign(Object.assign({},e),{rotation:e.rotation+t,x:r,y:i})}function Uwe(e,t){const n=Bwe(e);return jz(e,t,n)}function zwe(e,t,n){let r=t;for(let i=0;ii.isAncestorOf(this)?(Xt.Util.error("Konva.Transformer cannot be an a child of the node you are trying to attach"),!1):!0);this._nodes=t=n,t.length===1&&this.useSingleNodeRotation()?this.rotation(t[0].getAbsoluteRotation()):this.rotation(0),this._nodes.forEach(i=>{const o=()=>{this.nodes().length===1&&this.useSingleNodeRotation()&&this.rotation(this.nodes()[0].getAbsoluteRotation()),this._resetTransformCache(),!this._transforming&&!this.isDragging()&&this.update()},s=i._attrsAffectingSize.map(a=>a+"Change."+this._getEventNamespace()).join(" ");i.on(s,o),i.on(Lwe.map(a=>a+`.${this._getEventNamespace()}`).join(" "),o),i.on(`absoluteTransformChange.${this._getEventNamespace()}`,o),this._proxyDrag(i)}),this._resetTransformCache();var r=!!this.findOne(".top-left");return r&&this.update(),this}_proxyDrag(t){let n;t.on(`dragstart.${this._getEventNamespace()}`,r=>{n=t.getAbsolutePosition(),!this.isDragging()&&t!==this.findOne(".back")&&this.startDrag(r,!1)}),t.on(`dragmove.${this._getEventNamespace()}`,r=>{if(!n)return;const i=t.getAbsolutePosition(),o=i.x-n.x,s=i.y-n.y;this.nodes().forEach(a=>{if(a===t||a.isDragging())return;const l=a.getAbsolutePosition();a.setAbsolutePosition({x:l.x+o,y:l.y+s}),a.startDrag(r)}),n=null})}getNodes(){return this._nodes||[]}getActiveAnchor(){return this._movingAnchorName}detach(){this._nodes&&this._nodes.forEach(t=>{t.off("."+this._getEventNamespace())}),this._nodes=[],this._resetTransformCache()}_resetTransformCache(){this._clearCache(xk),this._clearCache("transform"),this._clearSelfAndDescendantCache("absoluteTransform")}_getNodeRect(){return this._getCache(xk,this.__getNodeRect)}__getNodeShape(t,n=this.rotation(),r){var i=t.getClientRect({skipTransform:!0,skipShadow:!0,skipStroke:this.ignoreStroke()}),o=t.getAbsoluteScale(r),s=t.getAbsolutePosition(r),a=i.x*o.x-t.offsetX()*o.x,l=i.y*o.y-t.offsetY()*o.y;const u=(Qo.Konva.getAngle(t.getAbsoluteRotation())+Math.PI*2)%(Math.PI*2),d={x:s.x+a*Math.cos(u)+l*Math.sin(-u),y:s.y+l*Math.cos(u)+a*Math.sin(u),width:i.width*o.x,height:i.height*o.y,rotation:u};return jz(d,-Qo.Konva.getAngle(n),{x:0,y:0})}__getNodeRect(){var t=this.getNode();if(!t)return{x:-Ck,y:-Ck,width:0,height:0,rotation:0};const n=[];this.nodes().map(u=>{const d=u.getClientRect({skipTransform:!0,skipShadow:!0,skipStroke:this.ignoreStroke()});var f=[{x:d.x,y:d.y},{x:d.x+d.width,y:d.y},{x:d.x+d.width,y:d.y+d.height},{x:d.x,y:d.y+d.height}],h=u.getAbsoluteTransform();f.forEach(function(g){var m=h.point(g);n.push(m)})});const r=new Xt.Transform;r.rotate(-Qo.Konva.getAngle(this.rotation()));var i,o,s,a;n.forEach(function(u){var d=r.point(u);i===void 0&&(i=s=d.x,o=a=d.y),i=Math.min(i,d.x),o=Math.min(o,d.y),s=Math.max(s,d.x),a=Math.max(a,d.y)}),r.invert();const l=r.point({x:i,y:o});return{x:l.x,y:l.y,width:s-i,height:a-o,rotation:Qo.Konva.getAngle(this.rotation())}}getX(){return this._getNodeRect().x}getY(){return this._getNodeRect().y}getWidth(){return this._getNodeRect().width}getHeight(){return this._getNodeRect().height}_createElements(){this._createBack(),h_.forEach((function(t){this._createAnchor(t)}).bind(this)),this._createAnchor("rotater")}_createAnchor(t){var n=new Iwe.Rect({stroke:"rgb(0, 161, 255)",fill:"white",strokeWidth:1,name:t+" _anchor",dragDistance:0,draggable:!0,hitStrokeWidth:$we?10:"auto"}),r=this;n.on("mousedown touchstart",function(i){r._handleMouseDown(i)}),n.on("dragstart",i=>{n.stopDrag(),i.cancelBubble=!0}),n.on("dragend",i=>{i.cancelBubble=!0}),n.on("mouseenter",()=>{var i=Qo.Konva.getAngle(this.rotation()),o=Fwe(t,i);n.getStage().content&&(n.getStage().content.style.cursor=o),this._cursorChange=!0}),n.on("mouseout",()=>{n.getStage().content&&(n.getStage().content.style.cursor=""),this._cursorChange=!1}),this.add(n)}_createBack(){var t=new kwe.Shape({name:"back",width:0,height:0,draggable:!0,sceneFunc(n){var r=this.getParent(),i=r.padding();n.beginPath(),n.rect(-i,-i,this.width()+i*2,this.height()+i*2),n.moveTo(this.width()/2,-i),r.rotateEnabled()&&n.lineTo(this.width()/2,-r.rotateAnchorOffset()*Xt.Util._sign(this.height())-i),n.fillStrokeShape(this)},hitFunc:(n,r)=>{if(this.shouldOverdrawWholeArea()){var i=this.padding();n.beginPath(),n.rect(-i,-i,r.width()+i*2,r.height()+i*2),n.fillStrokeShape(r)}}});this.add(t),this._proxyDrag(t),t.on("dragstart",n=>{n.cancelBubble=!0}),t.on("dragmove",n=>{n.cancelBubble=!0}),t.on("dragend",n=>{n.cancelBubble=!0}),this.on("dragmove",n=>{this.update()})}_handleMouseDown(t){this._movingAnchorName=t.target.name().split(" ")[0];var n=this._getNodeRect(),r=n.width,i=n.height,o=Math.sqrt(Math.pow(r,2)+Math.pow(i,2));this.sin=Math.abs(i/o),this.cos=Math.abs(r/o),typeof window<"u"&&(window.addEventListener("mousemove",this._handleMouseMove),window.addEventListener("touchmove",this._handleMouseMove),window.addEventListener("mouseup",this._handleMouseUp,!0),window.addEventListener("touchend",this._handleMouseUp,!0)),this._transforming=!0;var s=t.target.getAbsolutePosition(),a=t.target.getStage().getPointerPosition();this._anchorDragOffset={x:a.x-s.x,y:a.y-s.y},this._fire("transformstart",{evt:t.evt,target:this.getNode()}),this._nodes.forEach(l=>{l._fire("transformstart",{evt:t.evt,target:l})})}_handleMouseMove(t){var n,r,i,o=this.findOne("."+this._movingAnchorName),s=o.getStage();s.setPointersPositions(t);const a=s.getPointerPosition();let l={x:a.x-this._anchorDragOffset.x,y:a.y-this._anchorDragOffset.y};const u=o.getAbsolutePosition();this.anchorDragBoundFunc()&&(l=this.anchorDragBoundFunc()(u,l,t)),o.setAbsolutePosition(l);const d=o.getAbsolutePosition();if(!(u.x===d.x&&u.y===d.y)){if(this._movingAnchorName==="rotater"){var f=this._getNodeRect();n=o.x()-f.width/2,r=-o.y()+f.height/2;let B=Math.atan2(-r,n)+Math.PI/2;f.height<0&&(B-=Math.PI);var h=Qo.Konva.getAngle(this.rotation());const A=h+B,N=Qo.Konva.getAngle(this.rotationSnapTolerance()),U=zwe(this.rotationSnaps(),A,N)-f.rotation,$=Uwe(f,U);this._fitNodesInto($,t);return}var g=this.shiftBehavior(),m;g==="inverted"?m=this.keepRatio()&&!t.shiftKey:g==="none"?m=this.keepRatio():m=this.keepRatio()||t.shiftKey;var y=this.centeredScaling()||t.altKey;if(this._movingAnchorName==="top-left"){if(m){var v=y?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(".bottom-right").x(),y:this.findOne(".bottom-right").y()};i=Math.sqrt(Math.pow(v.x-o.x(),2)+Math.pow(v.y-o.y(),2));var x=this.findOne(".top-left").x()>v.x?-1:1,_=this.findOne(".top-left").y()>v.y?-1:1;n=i*this.cos*x,r=i*this.sin*_,this.findOne(".top-left").x(v.x-n),this.findOne(".top-left").y(v.y-r)}}else if(this._movingAnchorName==="top-center")this.findOne(".top-left").y(o.y());else if(this._movingAnchorName==="top-right"){if(m){var v=y?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(".bottom-left").x(),y:this.findOne(".bottom-left").y()};i=Math.sqrt(Math.pow(o.x()-v.x,2)+Math.pow(v.y-o.y(),2));var x=this.findOne(".top-right").x()v.y?-1:1;n=i*this.cos*x,r=i*this.sin*_,this.findOne(".top-right").x(v.x+n),this.findOne(".top-right").y(v.y-r)}var b=o.position();this.findOne(".top-left").y(b.y),this.findOne(".bottom-right").x(b.x)}else if(this._movingAnchorName==="middle-left")this.findOne(".top-left").x(o.x());else if(this._movingAnchorName==="middle-right")this.findOne(".bottom-right").x(o.x());else if(this._movingAnchorName==="bottom-left"){if(m){var v=y?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(".top-right").x(),y:this.findOne(".top-right").y()};i=Math.sqrt(Math.pow(v.x-o.x(),2)+Math.pow(o.y()-v.y,2));var x=v.x{r._fire("transformend",{evt:t,target:r})}),this._movingAnchorName=null}}_fitNodesInto(t,n){var r=this._getNodeRect();const i=1;if(Xt.Util._inRange(t.width,-this.padding()*2-i,i)){this.update();return}if(Xt.Util._inRange(t.height,-this.padding()*2-i,i)){this.update();return}const o=this.flipEnabled();var s=new Xt.Transform;if(s.rotate(Qo.Konva.getAngle(this.rotation())),this._movingAnchorName&&t.width<0&&this._movingAnchorName.indexOf("left")>=0){const f=s.point({x:-this.padding()*2,y:0});if(t.x+=f.x,t.y+=f.y,t.width+=this.padding()*2,this._movingAnchorName=this._movingAnchorName.replace("left","right"),this._anchorDragOffset.x-=f.x,this._anchorDragOffset.y-=f.y,!o){this.update();return}}else if(this._movingAnchorName&&t.width<0&&this._movingAnchorName.indexOf("right")>=0){const f=s.point({x:this.padding()*2,y:0});if(this._movingAnchorName=this._movingAnchorName.replace("right","left"),this._anchorDragOffset.x-=f.x,this._anchorDragOffset.y-=f.y,t.width+=this.padding()*2,!o){this.update();return}}if(this._movingAnchorName&&t.height<0&&this._movingAnchorName.indexOf("top")>=0){const f=s.point({x:0,y:-this.padding()*2});if(t.x+=f.x,t.y+=f.y,this._movingAnchorName=this._movingAnchorName.replace("top","bottom"),this._anchorDragOffset.x-=f.x,this._anchorDragOffset.y-=f.y,t.height+=this.padding()*2,!o){this.update();return}}else if(this._movingAnchorName&&t.height<0&&this._movingAnchorName.indexOf("bottom")>=0){const f=s.point({x:0,y:this.padding()*2});if(this._movingAnchorName=this._movingAnchorName.replace("bottom","top"),this._anchorDragOffset.x-=f.x,this._anchorDragOffset.y-=f.y,t.height+=this.padding()*2,!o){this.update();return}}if(this.boundBoxFunc()){const f=this.boundBoxFunc()(r,t);f?t=f:Xt.Util.warn("boundBoxFunc returned falsy. You should return new bound rect from it!")}const a=1e7,l=new Xt.Transform;l.translate(r.x,r.y),l.rotate(r.rotation),l.scale(r.width/a,r.height/a);const u=new Xt.Transform;u.translate(t.x,t.y),u.rotate(t.rotation),u.scale(t.width/a,t.height/a);const d=u.multiply(l.invert());this._nodes.forEach(f=>{var h;const g=f.getParent().getAbsoluteTransform(),m=f.getTransform().copy();m.translate(f.offsetX(),f.offsetY());const v=new Xt.Transform;v.multiply(g.copy().invert()).multiply(d).multiply(g).multiply(m);const x=v.decompose();f.setAttrs(x),this._fire("transform",{evt:n,target:f}),f._fire("transform",{evt:n,target:f}),(h=f.getLayer())===null||h===void 0||h.batchDraw()}),this.rotation(Xt.Util._getRotation(t.rotation)),this._resetTransformCache(),this.update(),this.getLayer().batchDraw()}forceUpdate(){this._resetTransformCache(),this.update()}_batchChangeChild(t,n){this.findOne(t).setAttrs(n)}update(){var t,n=this._getNodeRect();this.rotation(Xt.Util._getRotation(n.rotation));var r=n.width,i=n.height,o=this.enabledAnchors(),s=this.resizeEnabled(),a=this.padding(),l=this.anchorSize();const u=this.find("._anchor");u.forEach(f=>{f.setAttrs({width:l,height:l,offsetX:l/2,offsetY:l/2,stroke:this.anchorStroke(),strokeWidth:this.anchorStrokeWidth(),fill:this.anchorFill(),cornerRadius:this.anchorCornerRadius()})}),this._batchChangeChild(".top-left",{x:0,y:0,offsetX:l/2+a,offsetY:l/2+a,visible:s&&o.indexOf("top-left")>=0}),this._batchChangeChild(".top-center",{x:r/2,y:0,offsetY:l/2+a,visible:s&&o.indexOf("top-center")>=0}),this._batchChangeChild(".top-right",{x:r,y:0,offsetX:l/2-a,offsetY:l/2+a,visible:s&&o.indexOf("top-right")>=0}),this._batchChangeChild(".middle-left",{x:0,y:i/2,offsetX:l/2+a,visible:s&&o.indexOf("middle-left")>=0}),this._batchChangeChild(".middle-right",{x:r,y:i/2,offsetX:l/2-a,visible:s&&o.indexOf("middle-right")>=0}),this._batchChangeChild(".bottom-left",{x:0,y:i,offsetX:l/2+a,offsetY:l/2-a,visible:s&&o.indexOf("bottom-left")>=0}),this._batchChangeChild(".bottom-center",{x:r/2,y:i,offsetY:l/2-a,visible:s&&o.indexOf("bottom-center")>=0}),this._batchChangeChild(".bottom-right",{x:r,y:i,offsetX:l/2-a,offsetY:l/2-a,visible:s&&o.indexOf("bottom-right")>=0}),this._batchChangeChild(".rotater",{x:r/2,y:-this.rotateAnchorOffset()*Xt.Util._sign(i)-a,visible:this.rotateEnabled()}),this._batchChangeChild(".back",{width:r,height:i,visible:this.borderEnabled(),stroke:this.borderStroke(),strokeWidth:this.borderStrokeWidth(),dash:this.borderDash(),x:0,y:0});const d=this.anchorStyleFunc();d&&u.forEach(f=>{d(f)}),(t=this.getLayer())===null||t===void 0||t.batchDraw()}isTransforming(){return this._transforming}stopTransform(){if(this._transforming){this._removeEvents();var t=this.findOne("."+this._movingAnchorName);t&&t.stopDrag()}}destroy(){return this.getStage()&&this._cursorChange&&this.getStage().content&&(this.getStage().content.style.cursor=""),wk.Group.prototype.destroy.call(this),this.detach(),this._removeEvents(),this}toObject(){return Sk.Node.prototype.toObject.call(this)}clone(t){var n=Sk.Node.prototype.clone.call(this,t);return n}getClientRect(){return this.nodes().length>0?super.getClientRect():{x:0,y:0,width:0,height:0}}}BS.Transformer=Mt;function Vwe(e){return e instanceof Array||Xt.Util.warn("enabledAnchors value should be an array"),e instanceof Array&&e.forEach(function(t){h_.indexOf(t)===-1&&Xt.Util.warn("Unknown anchor name: "+t+". Available names are: "+h_.join(", "))}),e||[]}Mt.prototype.className="Transformer";(0,Mwe._registerNode)(Mt);Wt.Factory.addGetterSetter(Mt,"enabledAnchors",h_,Vwe);Wt.Factory.addGetterSetter(Mt,"flipEnabled",!0,(0,Su.getBooleanValidator)());Wt.Factory.addGetterSetter(Mt,"resizeEnabled",!0);Wt.Factory.addGetterSetter(Mt,"anchorSize",10,(0,Su.getNumberValidator)());Wt.Factory.addGetterSetter(Mt,"rotateEnabled",!0);Wt.Factory.addGetterSetter(Mt,"rotationSnaps",[]);Wt.Factory.addGetterSetter(Mt,"rotateAnchorOffset",50,(0,Su.getNumberValidator)());Wt.Factory.addGetterSetter(Mt,"rotationSnapTolerance",5,(0,Su.getNumberValidator)());Wt.Factory.addGetterSetter(Mt,"borderEnabled",!0);Wt.Factory.addGetterSetter(Mt,"anchorStroke","rgb(0, 161, 255)");Wt.Factory.addGetterSetter(Mt,"anchorStrokeWidth",1,(0,Su.getNumberValidator)());Wt.Factory.addGetterSetter(Mt,"anchorFill","white");Wt.Factory.addGetterSetter(Mt,"anchorCornerRadius",0,(0,Su.getNumberValidator)());Wt.Factory.addGetterSetter(Mt,"borderStroke","rgb(0, 161, 255)");Wt.Factory.addGetterSetter(Mt,"borderStrokeWidth",1,(0,Su.getNumberValidator)());Wt.Factory.addGetterSetter(Mt,"borderDash");Wt.Factory.addGetterSetter(Mt,"keepRatio",!0);Wt.Factory.addGetterSetter(Mt,"shiftBehavior","default");Wt.Factory.addGetterSetter(Mt,"centeredScaling",!1);Wt.Factory.addGetterSetter(Mt,"ignoreStroke",!1);Wt.Factory.addGetterSetter(Mt,"padding",0,(0,Su.getNumberValidator)());Wt.Factory.addGetterSetter(Mt,"node");Wt.Factory.addGetterSetter(Mt,"nodes");Wt.Factory.addGetterSetter(Mt,"boundBoxFunc");Wt.Factory.addGetterSetter(Mt,"anchorDragBoundFunc");Wt.Factory.addGetterSetter(Mt,"anchorStyleFunc");Wt.Factory.addGetterSetter(Mt,"shouldOverdrawWholeArea",!1);Wt.Factory.addGetterSetter(Mt,"useSingleNodeRotation",!0);Wt.Factory.backCompat(Mt,{lineEnabled:"borderEnabled",rotateHandlerOffset:"rotateAnchorOffset",enabledHandlers:"enabledAnchors"});var US={};Object.defineProperty(US,"__esModule",{value:!0});US.Wedge=void 0;const zS=dt,jwe=gr,Gwe=ft,Gz=De,Hwe=ft;class el extends jwe.Shape{_sceneFunc(t){t.beginPath(),t.arc(0,0,this.radius(),0,Gwe.Konva.getAngle(this.angle()),this.clockwise()),t.lineTo(0,0),t.closePath(),t.fillStrokeShape(this)}getWidth(){return this.radius()*2}getHeight(){return this.radius()*2}setWidth(t){this.radius(t/2)}setHeight(t){this.radius(t/2)}}US.Wedge=el;el.prototype.className="Wedge";el.prototype._centroid=!0;el.prototype._attrsAffectingSize=["radius"];(0,Hwe._registerNode)(el);zS.Factory.addGetterSetter(el,"radius",0,(0,Gz.getNumberValidator)());zS.Factory.addGetterSetter(el,"angle",0,(0,Gz.getNumberValidator)());zS.Factory.addGetterSetter(el,"clockwise",!1);zS.Factory.backCompat(el,{angleDeg:"angle",getAngleDeg:"getAngle",setAngleDeg:"setAngle"});var VS={};Object.defineProperty(VS,"__esModule",{value:!0});VS.Blur=void 0;const Tk=dt,Wwe=wn,qwe=De;function Ek(){this.r=0,this.g=0,this.b=0,this.a=0,this.next=null}var Kwe=[512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512,454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512,482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456,437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512,497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328,320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456,446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335,329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512,505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405,399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328,324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271,268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456,451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388,385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335,332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292,289,287,285,282,280,278,275,273,271,269,267,265,263,261,259],Xwe=[9,11,12,13,13,14,14,15,15,15,15,16,16,16,16,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24];function Ywe(e,t){var n=e.data,r=e.width,i=e.height,o,s,a,l,u,d,f,h,g,m,v,x,_,b,y,S,C,T,E,P,k,O,M,V,B=t+t+1,A=r-1,N=i-1,D=t+1,U=D*(D+1)/2,$=new Ek,j=null,G=$,q=null,Z=null,ee=Kwe[t],ie=Xwe[t];for(a=1;a>ie,M!==0?(M=255/M,n[d]=(h*ee>>ie)*M,n[d+1]=(g*ee>>ie)*M,n[d+2]=(m*ee>>ie)*M):n[d]=n[d+1]=n[d+2]=0,h-=x,g-=_,m-=b,v-=y,x-=q.r,_-=q.g,b-=q.b,y-=q.a,l=f+((l=o+t+1)>ie,M>0?(M=255/M,n[l]=(h*ee>>ie)*M,n[l+1]=(g*ee>>ie)*M,n[l+2]=(m*ee>>ie)*M):n[l]=n[l+1]=n[l+2]=0,h-=x,g-=_,m-=b,v-=y,x-=q.r,_-=q.g,b-=q.b,y-=q.a,l=o+((l=s+D)0&&Ywe(t,n)};VS.Blur=Qwe;Tk.Factory.addGetterSetter(Wwe.Node,"blurRadius",0,(0,qwe.getNumberValidator)(),Tk.Factory.afterSetFilter);var jS={};Object.defineProperty(jS,"__esModule",{value:!0});jS.Brighten=void 0;const Ak=dt,Zwe=wn,Jwe=De,exe=function(e){var t=this.brightness()*255,n=e.data,r=n.length,i;for(i=0;i255?255:i,o=o<0?0:o>255?255:o,s=s<0?0:s>255?255:s,n[a]=i,n[a+1]=o,n[a+2]=s};GS.Contrast=rxe;Pk.Factory.addGetterSetter(txe.Node,"contrast",0,(0,nxe.getNumberValidator)(),Pk.Factory.afterSetFilter);var HS={};Object.defineProperty(HS,"__esModule",{value:!0});HS.Emboss=void 0;const su=dt,WS=wn,ixe=kn,Hz=De,oxe=function(e){var t=this.embossStrength()*10,n=this.embossWhiteLevel()*255,r=this.embossDirection(),i=this.embossBlend(),o=0,s=0,a=e.data,l=e.width,u=e.height,d=l*4,f=u;switch(r){case"top-left":o=-1,s=-1;break;case"top":o=-1,s=0;break;case"top-right":o=-1,s=1;break;case"right":o=0,s=1;break;case"bottom-right":o=1,s=1;break;case"bottom":o=1,s=0;break;case"bottom-left":o=1,s=-1;break;case"left":o=0,s=-1;break;default:ixe.Util.error("Unknown emboss direction: "+r)}do{var h=(f-1)*d,g=o;f+g<1&&(g=0),f+g>u&&(g=0);var m=(f-1+g)*l*4,v=l;do{var x=h+(v-1)*4,_=s;v+_<1&&(_=0),v+_>l&&(_=0);var b=m+(v-1+_)*4,y=a[x]-a[b],S=a[x+1]-a[b+1],C=a[x+2]-a[b+2],T=y,E=T>0?T:-T,P=S>0?S:-S,k=C>0?C:-C;if(P>E&&(T=S),k>E&&(T=C),T*=t,i){var O=a[x]+T,M=a[x+1]+T,V=a[x+2]+T;a[x]=O>255?255:O<0?0:O,a[x+1]=M>255?255:M<0?0:M,a[x+2]=V>255?255:V<0?0:V}else{var B=n-T;B<0?B=0:B>255&&(B=255),a[x]=a[x+1]=a[x+2]=B}}while(--v)}while(--f)};HS.Emboss=oxe;su.Factory.addGetterSetter(WS.Node,"embossStrength",.5,(0,Hz.getNumberValidator)(),su.Factory.afterSetFilter);su.Factory.addGetterSetter(WS.Node,"embossWhiteLevel",.5,(0,Hz.getNumberValidator)(),su.Factory.afterSetFilter);su.Factory.addGetterSetter(WS.Node,"embossDirection","top-left",null,su.Factory.afterSetFilter);su.Factory.addGetterSetter(WS.Node,"embossBlend",!1,null,su.Factory.afterSetFilter);var qS={};Object.defineProperty(qS,"__esModule",{value:!0});qS.Enhance=void 0;const Rk=dt,sxe=wn,axe=De;function rC(e,t,n,r,i){var o=n-t,s=i-r,a;return o===0?r+s/2:s===0?r:(a=(e-t)/o,a=s*a+r,a)}const lxe=function(e){var t=e.data,n=t.length,r=t[0],i=r,o,s=t[1],a=s,l,u=t[2],d=u,f,h,g=this.enhance();if(g!==0){for(h=0;hi&&(i=o),l=t[h+1],la&&(a=l),f=t[h+2],fd&&(d=f);i===r&&(i=255,r=0),a===s&&(a=255,s=0),d===u&&(d=255,u=0);var m,v,x,_,b,y,S,C,T;for(g>0?(v=i+g*(255-i),x=r-g*(r-0),b=a+g*(255-a),y=s-g*(s-0),C=d+g*(255-d),T=u-g*(u-0)):(m=(i+r)*.5,v=i+g*(i-m),x=r+g*(r-m),_=(a+s)*.5,b=a+g*(a-_),y=s+g*(s-_),S=(d+u)*.5,C=d+g*(d-S),T=u+g*(u-S)),h=0;h_?x:_;var b=s,y=o,S,C,T=360/y*Math.PI/180,E,P;for(C=0;Cy?b:y;var S=s,C=o,T,E,P=n.polarRotation||0,k,O;for(d=0;dt&&(S=y,C=0,T=-1),i=0;i=0&&g=0&&m=0&&g=0&&m=255*4?255:0}return s}function xxe(e,t,n){for(var r=[.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111],i=Math.round(Math.sqrt(r.length)),o=Math.floor(i/2),s=[],a=0;a=0&&g=0&&m=n))for(o=v;o=r||(s=(n*o+i)*4,a+=S[s+0],l+=S[s+1],u+=S[s+2],d+=S[s+3],y+=1);for(a=a/y,l=l/y,u=u/y,d=d/y,i=g;i=n))for(o=v;o=r||(s=(n*o+i)*4,S[s+0]=a,S[s+1]=l,S[s+2]=u,S[s+3]=d)}};t2.Pixelate=kxe;Mk.Factory.addGetterSetter(Rxe.Node,"pixelSize",8,(0,Oxe.getNumberValidator)(),Mk.Factory.afterSetFilter);var n2={};Object.defineProperty(n2,"__esModule",{value:!0});n2.Posterize=void 0;const Nk=dt,Ixe=wn,Mxe=De,Nxe=function(e){var t=Math.round(this.levels()*254)+1,n=e.data,r=n.length,i=255/t,o;for(o=0;o255?255:e<0?0:Math.round(e)});g_.Factory.addGetterSetter(XE.Node,"green",0,function(e){return this._filterUpToDate=!1,e>255?255:e<0?0:Math.round(e)});g_.Factory.addGetterSetter(XE.Node,"blue",0,Lxe.RGBComponent,g_.Factory.afterSetFilter);var i2={};Object.defineProperty(i2,"__esModule",{value:!0});i2.RGBA=void 0;const Qg=dt,o2=wn,$xe=De,Fxe=function(e){var t=e.data,n=t.length,r=this.red(),i=this.green(),o=this.blue(),s=this.alpha(),a,l;for(a=0;a255?255:e<0?0:Math.round(e)});Qg.Factory.addGetterSetter(o2.Node,"green",0,function(e){return this._filterUpToDate=!1,e>255?255:e<0?0:Math.round(e)});Qg.Factory.addGetterSetter(o2.Node,"blue",0,$xe.RGBComponent,Qg.Factory.afterSetFilter);Qg.Factory.addGetterSetter(o2.Node,"alpha",1,function(e){return this._filterUpToDate=!1,e>1?1:e<0?0:e});var s2={};Object.defineProperty(s2,"__esModule",{value:!0});s2.Sepia=void 0;const Bxe=function(e){var t=e.data,n=t.length,r,i,o,s;for(r=0;r127&&(u=255-u),d>127&&(d=255-d),f>127&&(f=255-f),t[l]=u,t[l+1]=d,t[l+2]=f}while(--a)}while(--o)};a2.Solarize=Uxe;var l2={};Object.defineProperty(l2,"__esModule",{value:!0});l2.Threshold=void 0;const Lk=dt,zxe=wn,Vxe=De,jxe=function(e){var t=this.threshold()*255,n=e.data,r=n.length,i;for(i=0;i{const{width:r,height:i}=t,o=document.createElement("div"),s=new mp.Stage({container:o,width:r,height:i}),a=new mp.Layer,l=new mp.Layer;return a.add(new mp.Rect({...t,fill:n?"black":"white"})),e.forEach(u=>l.add(new mp.Line({points:u.points,stroke:n?"white":"black",strokeWidth:u.strokeWidth*2,tension:0,lineCap:"round",lineJoin:"round",shadowForStrokeEnabled:!1,globalCompositeOperation:u.tool==="brush"?"source-over":"destination-out"}))),s.add(a),s.add(l),o.remove(),s},RCe=async(e,t,n)=>new Promise((r,i)=>{const o=document.createElement("canvas");o.width=t,o.height=n;const s=o.getContext("2d"),a=new Image;if(!s){o.remove(),i("Unable to get context");return}a.onload=function(){s.drawImage(a,0,0),o.remove(),r(s.getImageData(0,0,t,n))},a.src=e}),Fk=async(e,t)=>{const n=e.toDataURL(t);return await RCe(n,t.width,t.height)},OCe=async(e,t,n,r,i)=>{const o=ke("canvas"),s=gS(),a=G_e();if(!s||!a){o.error("Unable to find canvas / stage");return}const l={...t,...n},u=s.clone();u.scale({x:1,y:1});const d=u.getAbsolutePosition(),f={x:l.x+d.x,y:l.y+d.y,width:l.width,height:l.height},h=await c_(u,f),g=await Fk(u,f),m=await PCe(r?e.objects.filter(w$):[],l,i),v=await c_(m,l),x=await Fk(m,l);return{baseBlob:h,baseImageData:g,maskBlob:v,maskImageData:x}},kCe=e=>{let t=!0,n=!1;const r=e.length;let i=3;for(i;i{const t=e.length;let n=0;for(n;n{const{isPartiallyTransparent:n,isFullyTransparent:r}=kCe(e.data),i=ICe(t.data);return n?r?"txt2img":"outpaint":i?"inpaint":"img2img"},NCe=e=>XD(e,n=>n.isEnabled&&(!!n.processedControlImage||n.processorType==="none"&&!!n.controlImage)),Fo=(e,t,n)=>{const{isEnabled:r,controlNets:i}=e.controlNet,o=NCe(i),s=t.nodes[yt];if(r&&o.length&&o.length){const a={id:j0,type:"collect",is_intermediate:!0};t.nodes[j0]=a,t.edges.push({source:{node_id:j0,field:"collection"},destination:{node_id:n,field:"control"}}),o.forEach(l=>{const{controlNetId:u,controlImage:d,processedControlImage:f,beginStepPct:h,endStepPct:g,controlMode:m,resizeMode:v,model:x,processorType:_,weight:b}=l,y={id:`control_net_${u}`,type:"controlnet",is_intermediate:!0,begin_step_percent:h,end_step_percent:g,control_mode:m,resize_mode:v,control_model:x,control_weight:b};if(f&&_!=="none")y.image={image_name:f};else if(d)y.image={image_name:d};else return;if(t.nodes[y.id]=y,s){const S=mb(y,["id","type"]);s.controlnets.push(S)}t.edges.push({source:{node_id:y.id,field:"control"},destination:{node_id:j0,field:"item"}})})}},wu=(e,t)=>{const{positivePrompt:n,iterations:r,seed:i,shouldRandomizeSeed:o}=e.generation,{combinatorial:s,isEnabled:a,maxPrompts:l}=e.dynamicPrompts,u=t.nodes[yt];if(a){xle(t.nodes[$e],"prompt");const d={id:qx,type:"dynamic_prompt",is_intermediate:!0,max_prompts:s?l:r,combinatorial:s,prompt:n},f={id:sn,type:"iterate",is_intermediate:!0};if(t.nodes[qx]=d,t.nodes[sn]=f,t.edges.push({source:{node_id:qx,field:"prompt_collection"},destination:{node_id:sn,field:"collection"}},{source:{node_id:sn,field:"item"},destination:{node_id:$e,field:"prompt"}}),u&&t.edges.push({source:{node_id:sn,field:"item"},destination:{node_id:yt,field:"positive_prompt"}}),o){const h={id:dr,type:"rand_int",is_intermediate:!0};t.nodes[dr]=h,t.edges.push({source:{node_id:dr,field:"a"},destination:{node_id:Se,field:"seed"}}),u&&t.edges.push({source:{node_id:dr,field:"a"},destination:{node_id:yt,field:"seed"}})}else t.nodes[Se].seed=i,u&&(u.seed=i)}else{u&&(u.positive_prompt=n);const d={id:bn,type:"range_of_size",is_intermediate:!0,size:r,step:1},f={id:sn,type:"iterate",is_intermediate:!0};if(t.nodes[sn]=f,t.nodes[bn]=d,t.edges.push({source:{node_id:bn,field:"collection"},destination:{node_id:sn,field:"collection"}}),t.edges.push({source:{node_id:sn,field:"item"},destination:{node_id:Se,field:"seed"}}),u&&t.edges.push({source:{node_id:sn,field:"item"},destination:{node_id:yt,field:"seed"}}),o){const h={id:dr,type:"rand_int",is_intermediate:!0};t.nodes[dr]=h,t.edges.push({source:{node_id:dr,field:"a"},destination:{node_id:bn,field:"start"}})}else d.start=i}},sh=(e,t,n,r=an)=>{const{loras:i}=e.lora,o=DT(i),s=t.nodes[yt];o>0&&(t.edges=t.edges.filter(u=>!(u.source.node_id===r&&["unet"].includes(u.source.field))),t.edges=t.edges.filter(u=>!(u.source.node_id===It&&["clip"].includes(u.source.field))));let a="",l=0;gc(i,u=>{const{model_name:d,base_model:f,weight:h}=u,g=`${az}_${d.replace(".","_")}`,m={type:"lora_loader",id:g,is_intermediate:!0,lora:{model_name:d,base_model:f},weight:h};s&&s.loras.push({lora:{model_name:d,base_model:f},weight:h}),t.nodes[g]=m,l===0?(t.edges.push({source:{node_id:r,field:"unet"},destination:{node_id:g,field:"unet"}}),t.edges.push({source:{node_id:It,field:"clip"},destination:{node_id:g,field:"clip"}})):(t.edges.push({source:{node_id:a,field:"unet"},destination:{node_id:g,field:"unet"}}),t.edges.push({source:{node_id:a,field:"clip"},destination:{node_id:g,field:"clip"}})),l===o-1&&(t.edges.push({source:{node_id:g,field:"unet"},destination:{node_id:n,field:"unet"}}),t.edges.push({source:{node_id:g,field:"clip"},destination:{node_id:$e,field:"clip"}}),t.edges.push({source:{node_id:g,field:"clip"},destination:{node_id:Be,field:"clip"}})),a=g,l+=1})},Kz=mi(e=>e.ui,e=>y$[e.activeTab],{memoizeOptions:{equalityCheck:gb}}),PMe=mi(e=>e.ui,e=>e.activeTab,{memoizeOptions:{equalityCheck:gb}}),RMe=mi(e=>e.ui,e=>e,{memoizeOptions:{equalityCheck:gb}}),Bo=(e,t,n=it)=>{const i=Kz(e)==="unifiedCanvas"?!e.canvas.shouldAutoSave:!1,o=t.nodes[n],s=t.nodes[yt];if(!o)return;o.is_intermediate=!0;const a={id:Kd,type:"img_nsfw",is_intermediate:i};t.nodes[Kd]=a,t.edges.push({source:{node_id:n,field:"image"},destination:{node_id:Kd,field:"image"}}),s&&t.edges.push({source:{node_id:yt,field:"metadata"},destination:{node_id:Kd,field:"metadata"}})},Uo=(e,t,n=an)=>{const{vae:r}=e.generation,i=!r,o=t.nodes[yt];i||(t.nodes[Lu]={type:"vae_loader",id:Lu,is_intermediate:!0,vae_model:r});const s=n==mS;(t.id===lz||t.id===v5||t.id===fz||t.id===b5)&&t.edges.push({source:{node_id:i?n:Lu,field:i&&s?"vae_decoder":"vae"},destination:{node_id:it,field:"vae"}}),(t.id===uz||t.id===_5||t.id===IE||t.id==d_)&&t.edges.push({source:{node_id:i?n:Lu,field:i&&s?"vae_decoder":"vae"},destination:{node_id:Ie,field:"vae"}}),(t.id===v5||t.id===b5||t.id===_5||t.id===d_)&&t.edges.push({source:{node_id:i?n:Lu,field:i&&s?"vae_decoder":"vae"},destination:{node_id:Vt,field:"vae"}}),(t.id===cz||t.id===dz||t.id===ME||t.id===NE)&&t.edges.push({source:{node_id:i?n:Lu,field:i&&s?"vae_decoder":"vae"},destination:{node_id:hn,field:"vae"}},{source:{node_id:i?n:Lu,field:i&&s?"vae_decoder":"vae"},destination:{node_id:it,field:"vae"}}),r&&o&&(o.vae=r)},zo=(e,t,n=it)=>{const i=Kz(e)==="unifiedCanvas"?!e.canvas.shouldAutoSave:!1,o=t.nodes[n],s=t.nodes[Kd],a=t.nodes[yt];if(!o)return;const l={id:dp,type:"img_watermark",is_intermediate:i};t.nodes[dp]=l,o.is_intermediate=!0,s?(s.is_intermediate=!0,t.edges.push({source:{node_id:Kd,field:"image"},destination:{node_id:dp,field:"image"}})):t.edges.push({source:{node_id:n,field:"image"},destination:{node_id:dp,field:"image"}}),a&&t.edges.push({source:{node_id:yt,field:"metadata"},destination:{node_id:dp,field:"metadata"}})},LCe=(e,t)=>{const n=ke("nodes"),{positivePrompt:r,negativePrompt:i,model:o,cfgScale:s,scheduler:a,steps:l,img2imgStrength:u,clipSkip:d,shouldUseCpuNoise:f,shouldUseNoiseSettings:h}=e.generation,{width:g,height:m}=e.canvas.boundingBoxDimensions,{shouldAutoSave:v}=e.canvas;if(!o)throw n.error("No model found in state"),new Error("No model found in state");const x=h?f:ys.shouldUseCpuNoise,_={id:_5,nodes:{[an]:{type:"main_model_loader",id:an,is_intermediate:!0,model:o},[It]:{type:"clip_skip",id:It,is_intermediate:!0,skipped_layers:d},[$e]:{type:"compel",id:$e,is_intermediate:!0,prompt:r},[Be]:{type:"compel",id:Be,is_intermediate:!0,prompt:i},[Se]:{type:"noise",id:Se,is_intermediate:!0,use_cpu:x},[Vt]:{type:"i2l",id:Vt,is_intermediate:!0},[Le]:{type:"denoise_latents",id:Le,is_intermediate:!0,cfg_scale:s,scheduler:a,steps:l,denoising_start:1-u,denoising_end:1},[Ie]:{type:"l2i",id:Ie,is_intermediate:!v}},edges:[{source:{node_id:an,field:"unet"},destination:{node_id:Le,field:"unet"}},{source:{node_id:an,field:"clip"},destination:{node_id:It,field:"clip"}},{source:{node_id:It,field:"clip"},destination:{node_id:$e,field:"clip"}},{source:{node_id:It,field:"clip"},destination:{node_id:Be,field:"clip"}},{source:{node_id:$e,field:"conditioning"},destination:{node_id:Le,field:"positive_conditioning"}},{source:{node_id:Be,field:"conditioning"},destination:{node_id:Le,field:"negative_conditioning"}},{source:{node_id:Se,field:"noise"},destination:{node_id:Le,field:"noise"}},{source:{node_id:Vt,field:"latents"},destination:{node_id:Le,field:"latents"}},{source:{node_id:Le,field:"latents"},destination:{node_id:Ie,field:"latents"}}]};if(t.width!==g||t.height!==m){const b={id:Jn,type:"img_resize",image:{image_name:t.image_name},is_intermediate:!0,width:g,height:m};_.nodes[Jn]=b,_.edges.push({source:{node_id:Jn,field:"image"},destination:{node_id:Vt,field:"image"}}),_.edges.push({source:{node_id:Jn,field:"width"},destination:{node_id:Se,field:"width"}}),_.edges.push({source:{node_id:Jn,field:"height"},destination:{node_id:Se,field:"height"}})}else _.nodes[Vt].image={image_name:t.image_name},_.edges.push({source:{node_id:Vt,field:"width"},destination:{node_id:Se,field:"width"}}),_.edges.push({source:{node_id:Vt,field:"height"},destination:{node_id:Se,field:"height"}});return _.nodes[yt]={id:yt,type:"metadata_accumulator",generation_mode:"img2img",cfg_scale:s,height:m,width:g,positive_prompt:"",negative_prompt:i,model:o,seed:0,steps:l,rand_device:x?"cpu":"cuda",scheduler:a,vae:void 0,controlnets:[],loras:[],clip_skip:d,strength:u,init_image:t.image_name},_.edges.push({source:{node_id:yt,field:"metadata"},destination:{node_id:Ie,field:"metadata"}}),sh(e,_,Le),Uo(e,_,an),wu(e,_),Fo(e,_,Le),e.system.shouldUseNSFWChecker&&Bo(e,_,Ie),e.system.shouldUseWatermarker&&zo(e,_,Ie),_},DCe=(e,t,n)=>{const r=ke("nodes"),{positivePrompt:i,negativePrompt:o,model:s,cfgScale:a,scheduler:l,steps:u,img2imgStrength:d,iterations:f,seed:h,shouldRandomizeSeed:g,vaePrecision:m,shouldUseNoiseSettings:v,shouldUseCpuNoise:x,maskBlur:_,maskBlurMethod:b,clipSkip:y}=e.generation;if(!s)throw r.error("No model found in state"),new Error("No model found in state");const{width:S,height:C}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:T,boundingBoxScaleMethod:E,shouldAutoSave:P}=e.canvas,k=x,O={id:cz,nodes:{[an]:{type:"main_model_loader",id:an,is_intermediate:!0,model:s},[It]:{type:"clip_skip",id:It,is_intermediate:!0,skipped_layers:y},[$e]:{type:"compel",id:$e,is_intermediate:!0,prompt:i},[Be]:{type:"compel",id:Be,is_intermediate:!0,prompt:o},[ut]:{type:"img_blur",id:ut,is_intermediate:!0,radius:_,blur_type:b},[hn]:{type:"i2l",id:hn,is_intermediate:!0,fp32:m==="fp32"},[Se]:{type:"noise",id:Se,use_cpu:k,is_intermediate:!0},[Le]:{type:"denoise_latents",id:Le,is_intermediate:!0,steps:u,cfg_scale:a,scheduler:l,denoising_start:1-d,denoising_end:1},[it]:{type:"l2i",id:it,is_intermediate:!0,fp32:m==="fp32"},[wt]:{type:"color_correct",id:wt,is_intermediate:!0,reference:t},[Ie]:{type:"img_paste",id:Ie,is_intermediate:!P,base_image:t},[bn]:{type:"range_of_size",id:bn,is_intermediate:!0,size:f,step:1},[sn]:{type:"iterate",id:sn,is_intermediate:!0}},edges:[{source:{node_id:an,field:"unet"},destination:{node_id:Le,field:"unet"}},{source:{node_id:an,field:"clip"},destination:{node_id:It,field:"clip"}},{source:{node_id:It,field:"clip"},destination:{node_id:$e,field:"clip"}},{source:{node_id:It,field:"clip"},destination:{node_id:Be,field:"clip"}},{source:{node_id:$e,field:"conditioning"},destination:{node_id:Le,field:"positive_conditioning"}},{source:{node_id:Be,field:"conditioning"},destination:{node_id:Le,field:"negative_conditioning"}},{source:{node_id:Se,field:"noise"},destination:{node_id:Le,field:"noise"}},{source:{node_id:hn,field:"latents"},destination:{node_id:Le,field:"latents"}},{source:{node_id:ut,field:"image"},destination:{node_id:Le,field:"mask"}},{source:{node_id:bn,field:"collection"},destination:{node_id:sn,field:"collection"}},{source:{node_id:sn,field:"item"},destination:{node_id:Se,field:"seed"}},{source:{node_id:Le,field:"latents"},destination:{node_id:it,field:"latents"}}]};if(["auto","manual"].includes(E)){const M=T.width,V=T.height;O.nodes[ko]={type:"img_resize",id:ko,is_intermediate:!0,width:M,height:V,image:t},O.nodes[Ni]={type:"img_resize",id:Ni,is_intermediate:!0,width:M,height:V,image:n},O.nodes[ti]={type:"img_resize",id:ti,is_intermediate:!0,width:S,height:C},O.nodes[er]={type:"img_resize",id:er,is_intermediate:!0,width:S,height:C},O.nodes[Se]={...O.nodes[Se],width:M,height:V},O.edges.push({source:{node_id:ko,field:"image"},destination:{node_id:hn,field:"image"}},{source:{node_id:Ni,field:"image"},destination:{node_id:ut,field:"image"}},{source:{node_id:it,field:"image"},destination:{node_id:ti,field:"image"}},{source:{node_id:ti,field:"image"},destination:{node_id:wt,field:"image"}},{source:{node_id:ut,field:"image"},destination:{node_id:er,field:"image"}},{source:{node_id:er,field:"image"},destination:{node_id:wt,field:"mask"}},{source:{node_id:wt,field:"image"},destination:{node_id:Ie,field:"image"}},{source:{node_id:er,field:"image"},destination:{node_id:Ie,field:"mask"}})}else O.nodes[Se]={...O.nodes[Se],width:S,height:C},O.nodes[hn]={...O.nodes[hn],image:t},O.nodes[ut]={...O.nodes[ut],image:n},O.edges.push({source:{node_id:it,field:"image"},destination:{node_id:wt,field:"image"}},{source:{node_id:ut,field:"image"},destination:{node_id:wt,field:"mask"}},{source:{node_id:wt,field:"image"},destination:{node_id:Ie,field:"image"}},{source:{node_id:ut,field:"image"},destination:{node_id:Ie,field:"mask"}});if(g){const M={id:dr,type:"rand_int"};O.nodes[dr]=M,O.edges.push({source:{node_id:dr,field:"a"},destination:{node_id:bn,field:"start"}})}else O.nodes[bn].start=h;return Uo(e,O,an),sh(e,O,Le,an),Fo(e,O,Le),e.system.shouldUseNSFWChecker&&Bo(e,O,Ie),e.system.shouldUseWatermarker&&zo(e,O,Ie),O},$Ce=(e,t,n)=>{const r=ke("nodes"),{positivePrompt:i,negativePrompt:o,model:s,cfgScale:a,scheduler:l,steps:u,img2imgStrength:d,iterations:f,seed:h,shouldRandomizeSeed:g,vaePrecision:m,shouldUseNoiseSettings:v,shouldUseCpuNoise:x,maskBlur:_,maskBlurMethod:b,tileSize:y,infillMethod:S,clipSkip:C}=e.generation;if(!s)throw r.error("No model found in state"),new Error("No model found in state");const{width:T,height:E}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:P,boundingBoxScaleMethod:k,shouldAutoSave:O}=e.canvas,M=x,V={id:dz,nodes:{[an]:{type:"main_model_loader",id:an,is_intermediate:!0,model:s},[It]:{type:"clip_skip",id:It,is_intermediate:!0,skipped_layers:C},[$e]:{type:"compel",id:$e,is_intermediate:!0,prompt:i},[Be]:{type:"compel",id:Be,is_intermediate:!0,prompt:o},[_f]:{type:"tomask",id:_f,is_intermediate:!0,image:t},[Ds]:{type:"mask_combine",id:Ds,is_intermediate:!0,mask2:n},[ut]:{type:"img_blur",id:ut,is_intermediate:!0,radius:_,blur_type:b},[Nn]:{type:"infill_tile",id:Nn,is_intermediate:!0,tile_size:y},[hn]:{type:"i2l",id:hn,is_intermediate:!0,fp32:m==="fp32"},[Se]:{type:"noise",id:Se,use_cpu:M,is_intermediate:!0},[Le]:{type:"denoise_latents",id:Le,is_intermediate:!0,steps:u,cfg_scale:a,scheduler:l,denoising_start:1-d,denoising_end:1},[it]:{type:"l2i",id:it,is_intermediate:!0,fp32:m==="fp32"},[wt]:{type:"color_correct",id:wt,is_intermediate:!0},[Ie]:{type:"img_paste",id:Ie,is_intermediate:!O},[bn]:{type:"range_of_size",id:bn,is_intermediate:!0,size:f,step:1},[sn]:{type:"iterate",id:sn,is_intermediate:!0}},edges:[{source:{node_id:an,field:"unet"},destination:{node_id:Le,field:"unet"}},{source:{node_id:an,field:"clip"},destination:{node_id:It,field:"clip"}},{source:{node_id:It,field:"clip"},destination:{node_id:$e,field:"clip"}},{source:{node_id:It,field:"clip"},destination:{node_id:Be,field:"clip"}},{source:{node_id:Nn,field:"image"},destination:{node_id:hn,field:"image"}},{source:{node_id:_f,field:"mask"},destination:{node_id:Ds,field:"mask1"}},{source:{node_id:$e,field:"conditioning"},destination:{node_id:Le,field:"positive_conditioning"}},{source:{node_id:Be,field:"conditioning"},destination:{node_id:Le,field:"negative_conditioning"}},{source:{node_id:Se,field:"noise"},destination:{node_id:Le,field:"noise"}},{source:{node_id:hn,field:"latents"},destination:{node_id:Le,field:"latents"}},{source:{node_id:ut,field:"image"},destination:{node_id:Le,field:"mask"}},{source:{node_id:bn,field:"collection"},destination:{node_id:sn,field:"collection"}},{source:{node_id:sn,field:"item"},destination:{node_id:Se,field:"seed"}},{source:{node_id:Le,field:"latents"},destination:{node_id:it,field:"latents"}}]};if(S==="patchmatch"&&(V.nodes[Nn]={type:"infill_patchmatch",id:Nn,is_intermediate:!0}),["auto","manual"].includes(k)){const B=P.width,A=P.height;V.nodes[ko]={type:"img_resize",id:ko,is_intermediate:!0,width:B,height:A,image:t},V.nodes[Ni]={type:"img_resize",id:Ni,is_intermediate:!0,width:B,height:A},V.nodes[ti]={type:"img_resize",id:ti,is_intermediate:!0,width:T,height:E},V.nodes[Ls]={type:"img_resize",id:Ls,is_intermediate:!0,width:T,height:E},V.nodes[er]={type:"img_resize",id:er,is_intermediate:!0,width:T,height:E},V.nodes[Se]={...V.nodes[Se],width:B,height:A},V.edges.push({source:{node_id:ko,field:"image"},destination:{node_id:Nn,field:"image"}},{source:{node_id:Ds,field:"image"},destination:{node_id:Ni,field:"image"}},{source:{node_id:Ni,field:"image"},destination:{node_id:ut,field:"image"}},{source:{node_id:it,field:"image"},destination:{node_id:ti,field:"image"}},{source:{node_id:ut,field:"image"},destination:{node_id:er,field:"image"}},{source:{node_id:Nn,field:"image"},destination:{node_id:Ls,field:"image"}},{source:{node_id:Ls,field:"image"},destination:{node_id:wt,field:"reference"}},{source:{node_id:ti,field:"image"},destination:{node_id:wt,field:"image"}},{source:{node_id:er,field:"image"},destination:{node_id:wt,field:"mask"}},{source:{node_id:Ls,field:"image"},destination:{node_id:Ie,field:"base_image"}},{source:{node_id:wt,field:"image"},destination:{node_id:Ie,field:"image"}},{source:{node_id:er,field:"image"},destination:{node_id:Ie,field:"mask"}})}else V.nodes[Nn]={...V.nodes[Nn],image:t},V.nodes[Se]={...V.nodes[Se],width:T,height:E},V.nodes[hn]={...V.nodes[hn],image:t},V.nodes[ut]={...V.nodes[ut],image:n},V.edges.push({source:{node_id:Ds,field:"image"},destination:{node_id:ut,field:"image"}},{source:{node_id:Nn,field:"image"},destination:{node_id:wt,field:"reference"}},{source:{node_id:it,field:"image"},destination:{node_id:wt,field:"image"}},{source:{node_id:ut,field:"image"},destination:{node_id:wt,field:"mask"}},{source:{node_id:Nn,field:"image"},destination:{node_id:Ie,field:"base_image"}},{source:{node_id:wt,field:"image"},destination:{node_id:Ie,field:"image"}},{source:{node_id:ut,field:"image"},destination:{node_id:Ie,field:"mask"}});if(g){const B={id:dr,type:"rand_int"};V.nodes[dr]=B,V.edges.push({source:{node_id:dr,field:"a"},destination:{node_id:bn,field:"start"}})}else V.nodes[bn].start=h;return Uo(e,V,an),sh(e,V,Le,an),Fo(e,V,Le),e.system.shouldUseNSFWChecker&&Bo(e,V,Ie),e.system.shouldUseWatermarker&&zo(e,V,Ie),V},ah=(e,t,n,r=We)=>{const{loras:i}=e.lora,o=DT(i),s=t.nodes[yt];o>0&&(t.edges=t.edges.filter(u=>!(u.source.node_id===r&&["unet"].includes(u.source.field))&&!(u.source.node_id===r&&["clip"].includes(u.source.field))&&!(u.source.node_id===r&&["clip2"].includes(u.source.field))));let a="",l=0;gc(i,u=>{const{model_name:d,base_model:f,weight:h}=u,g=`${az}_${d.replace(".","_")}`,m={type:"sdxl_lora_loader",id:g,is_intermediate:!0,lora:{model_name:d,base_model:f},weight:h};s&&s.loras.push({lora:{model_name:d,base_model:f},weight:h}),t.nodes[g]=m,l===0?(t.edges.push({source:{node_id:r,field:"unet"},destination:{node_id:g,field:"unet"}}),t.edges.push({source:{node_id:r,field:"clip"},destination:{node_id:g,field:"clip"}}),t.edges.push({source:{node_id:r,field:"clip2"},destination:{node_id:g,field:"clip2"}})):(t.edges.push({source:{node_id:a,field:"unet"},destination:{node_id:g,field:"unet"}}),t.edges.push({source:{node_id:a,field:"clip"},destination:{node_id:g,field:"clip"}}),t.edges.push({source:{node_id:a,field:"clip2"},destination:{node_id:g,field:"clip2"}})),l===o-1&&(t.edges.push({source:{node_id:g,field:"unet"},destination:{node_id:n,field:"unet"}}),t.edges.push({source:{node_id:g,field:"clip"},destination:{node_id:$e,field:"clip"}}),t.edges.push({source:{node_id:g,field:"clip"},destination:{node_id:Be,field:"clip"}}),t.edges.push({source:{node_id:g,field:"clip2"},destination:{node_id:$e,field:"clip2"}}),t.edges.push({source:{node_id:g,field:"clip2"},destination:{node_id:Be,field:"clip2"}})),a=g,l+=1})},Uc=(e,t)=>{const{positivePrompt:n,negativePrompt:r}=e.generation,{positiveStylePrompt:i,negativeStylePrompt:o}=e.sdxl;let s=i,a=o;return t&&(i.length>0?s=`${n} ${i}`:s=n,o.length>0?a=`${r} ${o}`:a=r),{craftedPositiveStylePrompt:s,craftedNegativeStylePrompt:a}},lh=(e,t,n)=>{const{refinerModel:r,refinerPositiveAestheticScore:i,refinerNegativeAestheticScore:o,refinerSteps:s,refinerScheduler:a,refinerCFGScale:l,refinerStart:u}=e.sdxl;if(!r)return;const d=t.nodes[yt];d&&(d.refiner_model=r,d.refiner_positive_aesthetic_score=i,d.refiner_negative_aesthetic_score=o,d.refiner_cfg_scale=l,d.refiner_scheduler=a,d.refiner_start=u,d.refiner_steps=s);const{craftedPositiveStylePrompt:f,craftedNegativeStylePrompt:h}=Uc(e,!0);t.edges=t.edges.filter(g=>!(g.source.node_id===n&&["latents"].includes(g.source.field))),t.edges=t.edges.filter(g=>!(g.source.node_id===We&&["vae"].includes(g.source.field))),t.nodes[fp]={type:"sdxl_refiner_model_loader",id:fp,model:r},t.nodes[G0]={type:"sdxl_refiner_compel_prompt",id:G0,style:f,aesthetic_score:i},t.nodes[H0]={type:"sdxl_refiner_compel_prompt",id:H0,style:h,aesthetic_score:o},t.nodes[va]={type:"denoise_latents",id:va,cfg_scale:l,steps:s,scheduler:a,denoising_start:u,denoising_end:1},t.edges.push({source:{node_id:fp,field:"unet"},destination:{node_id:va,field:"unet"}},{source:{node_id:fp,field:"clip2"},destination:{node_id:G0,field:"clip2"}},{source:{node_id:fp,field:"clip2"},destination:{node_id:H0,field:"clip2"}},{source:{node_id:G0,field:"conditioning"},destination:{node_id:va,field:"positive_conditioning"}},{source:{node_id:H0,field:"conditioning"},destination:{node_id:va,field:"negative_conditioning"}},{source:{node_id:n,field:"latents"},destination:{node_id:va,field:"latents"}}),t.id===IE||t.id===d_?t.edges.push({source:{node_id:va,field:"latents"},destination:{node_id:Ie,field:"latents"}}):t.edges.push({source:{node_id:va,field:"latents"},destination:{node_id:it,field:"latents"}}),(t.id===ME||t.id===NE)&&t.edges.push({source:{node_id:ut,field:"image"},destination:{node_id:va,field:"mask"}})},FCe=(e,t)=>{const n=ke("nodes"),{positivePrompt:r,negativePrompt:i,model:o,cfgScale:s,scheduler:a,steps:l,vaePrecision:u,clipSkip:d,shouldUseCpuNoise:f,shouldUseNoiseSettings:h}=e.generation,{shouldUseSDXLRefiner:g,refinerStart:m,sdxlImg2ImgDenoisingStrength:v,shouldConcatSDXLStylePrompt:x}=e.sdxl,{width:_,height:b}=e.canvas.boundingBoxDimensions,{shouldAutoSave:y}=e.canvas;if(!o)throw n.error("No model found in state"),new Error("No model found in state");const S=h?f:ys.shouldUseCpuNoise,{craftedPositiveStylePrompt:C,craftedNegativeStylePrompt:T}=Uc(e,x),E={id:d_,nodes:{[We]:{type:"sdxl_model_loader",id:We,model:o},[$e]:{type:"sdxl_compel_prompt",id:$e,prompt:r,style:C},[Be]:{type:"sdxl_compel_prompt",id:Be,prompt:i,style:T},[Se]:{type:"noise",id:Se,is_intermediate:!0,use_cpu:S},[Vt]:{type:"i2l",id:Vt,is_intermediate:!0,fp32:u==="fp32"},[Re]:{type:"denoise_latents",id:Re,is_intermediate:!0,cfg_scale:s,scheduler:a,steps:l,denoising_start:g?Math.min(m,1-v):1-v,denoising_end:g?m:1},[Ie]:{type:"l2i",id:Ie,is_intermediate:!y,fp32:u==="fp32"}},edges:[{source:{node_id:We,field:"unet"},destination:{node_id:Re,field:"unet"}},{source:{node_id:We,field:"clip"},destination:{node_id:$e,field:"clip"}},{source:{node_id:We,field:"clip2"},destination:{node_id:$e,field:"clip2"}},{source:{node_id:We,field:"clip"},destination:{node_id:Be,field:"clip"}},{source:{node_id:We,field:"clip2"},destination:{node_id:Be,field:"clip2"}},{source:{node_id:$e,field:"conditioning"},destination:{node_id:Re,field:"positive_conditioning"}},{source:{node_id:Be,field:"conditioning"},destination:{node_id:Re,field:"negative_conditioning"}},{source:{node_id:Se,field:"noise"},destination:{node_id:Re,field:"noise"}},{source:{node_id:Vt,field:"latents"},destination:{node_id:Re,field:"latents"}},{source:{node_id:Re,field:"latents"},destination:{node_id:Ie,field:"latents"}}]};if(t.width!==_||t.height!==b){const P={id:Jn,type:"img_resize",image:{image_name:t.image_name},is_intermediate:!0,width:_,height:b};E.nodes[Jn]=P,E.edges.push({source:{node_id:Jn,field:"image"},destination:{node_id:Vt,field:"image"}}),E.edges.push({source:{node_id:Jn,field:"width"},destination:{node_id:Se,field:"width"}}),E.edges.push({source:{node_id:Jn,field:"height"},destination:{node_id:Se,field:"height"}})}else E.nodes[Vt].image={image_name:t.image_name},E.edges.push({source:{node_id:Vt,field:"width"},destination:{node_id:Se,field:"width"}}),E.edges.push({source:{node_id:Vt,field:"height"},destination:{node_id:Se,field:"height"}});return E.nodes[yt]={id:yt,type:"metadata_accumulator",generation_mode:"img2img",cfg_scale:s,height:b,width:_,positive_prompt:"",negative_prompt:i,model:o,seed:0,steps:l,rand_device:S?"cpu":"cuda",scheduler:a,vae:void 0,controlnets:[],loras:[],clip_skip:d,strength:v,init_image:t.image_name},E.edges.push({source:{node_id:yt,field:"metadata"},destination:{node_id:Ie,field:"metadata"}}),ah(e,E,Re,We),g&&lh(e,E,Re),Uo(e,E,We),wu(e,E),Fo(e,E,Re),e.system.shouldUseNSFWChecker&&Bo(e,E,Ie),e.system.shouldUseWatermarker&&zo(e,E,Ie),E},BCe=(e,t,n)=>{const r=ke("nodes"),{positivePrompt:i,negativePrompt:o,model:s,cfgScale:a,scheduler:l,steps:u,iterations:d,seed:f,shouldRandomizeSeed:h,vaePrecision:g,shouldUseNoiseSettings:m,shouldUseCpuNoise:v,maskBlur:x,maskBlurMethod:_}=e.generation,{sdxlImg2ImgDenoisingStrength:b,shouldUseSDXLRefiner:y,refinerStart:S,shouldConcatSDXLStylePrompt:C}=e.sdxl;if(!s)throw r.error("No model found in state"),new Error("No model found in state");const{width:T,height:E}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:P,boundingBoxScaleMethod:k,shouldAutoSave:O}=e.canvas,M=v,{craftedPositiveStylePrompt:V,craftedNegativeStylePrompt:B}=Uc(e,C),A={id:ME,nodes:{[We]:{type:"sdxl_model_loader",id:We,model:s},[$e]:{type:"sdxl_compel_prompt",id:$e,prompt:i,style:V},[Be]:{type:"sdxl_compel_prompt",id:Be,prompt:o,style:B},[ut]:{type:"img_blur",id:ut,is_intermediate:!0,radius:x,blur_type:_},[hn]:{type:"i2l",id:hn,is_intermediate:!0,fp32:g==="fp32"},[Se]:{type:"noise",id:Se,use_cpu:M,is_intermediate:!0},[Re]:{type:"denoise_latents",id:Re,is_intermediate:!0,steps:u,cfg_scale:a,scheduler:l,denoising_start:y?Math.min(S,1-b):1-b,denoising_end:y?S:1},[it]:{type:"l2i",id:it,is_intermediate:!0,fp32:g==="fp32"},[wt]:{type:"color_correct",id:wt,is_intermediate:!0,reference:t},[Ie]:{type:"img_paste",id:Ie,is_intermediate:!O,base_image:t},[bn]:{type:"range_of_size",id:bn,is_intermediate:!0,size:d,step:1},[sn]:{type:"iterate",id:sn,is_intermediate:!0}},edges:[{source:{node_id:We,field:"unet"},destination:{node_id:Re,field:"unet"}},{source:{node_id:We,field:"clip"},destination:{node_id:$e,field:"clip"}},{source:{node_id:We,field:"clip2"},destination:{node_id:$e,field:"clip2"}},{source:{node_id:We,field:"clip"},destination:{node_id:Be,field:"clip"}},{source:{node_id:We,field:"clip2"},destination:{node_id:Be,field:"clip2"}},{source:{node_id:$e,field:"conditioning"},destination:{node_id:Re,field:"positive_conditioning"}},{source:{node_id:Be,field:"conditioning"},destination:{node_id:Re,field:"negative_conditioning"}},{source:{node_id:Se,field:"noise"},destination:{node_id:Re,field:"noise"}},{source:{node_id:hn,field:"latents"},destination:{node_id:Re,field:"latents"}},{source:{node_id:ut,field:"image"},destination:{node_id:Re,field:"mask"}},{source:{node_id:bn,field:"collection"},destination:{node_id:sn,field:"collection"}},{source:{node_id:sn,field:"item"},destination:{node_id:Se,field:"seed"}},{source:{node_id:Re,field:"latents"},destination:{node_id:it,field:"latents"}}]};if(["auto","manual"].includes(k)){const N=P.width,D=P.height;A.nodes[ko]={type:"img_resize",id:ko,is_intermediate:!0,width:N,height:D,image:t},A.nodes[Ni]={type:"img_resize",id:Ni,is_intermediate:!0,width:N,height:D,image:n},A.nodes[ti]={type:"img_resize",id:ti,is_intermediate:!0,width:T,height:E},A.nodes[er]={type:"img_resize",id:er,is_intermediate:!0,width:T,height:E},A.nodes[Se]={...A.nodes[Se],width:N,height:D},A.edges.push({source:{node_id:ko,field:"image"},destination:{node_id:hn,field:"image"}},{source:{node_id:Ni,field:"image"},destination:{node_id:ut,field:"image"}},{source:{node_id:it,field:"image"},destination:{node_id:ti,field:"image"}},{source:{node_id:ti,field:"image"},destination:{node_id:wt,field:"image"}},{source:{node_id:ut,field:"image"},destination:{node_id:er,field:"image"}},{source:{node_id:er,field:"image"},destination:{node_id:wt,field:"mask"}},{source:{node_id:wt,field:"image"},destination:{node_id:Ie,field:"image"}},{source:{node_id:er,field:"image"},destination:{node_id:Ie,field:"mask"}})}else A.nodes[Se]={...A.nodes[Se],width:T,height:E},A.nodes[hn]={...A.nodes[hn],image:t},A.nodes[ut]={...A.nodes[ut],image:n},A.edges.push({source:{node_id:it,field:"image"},destination:{node_id:wt,field:"image"}},{source:{node_id:ut,field:"image"},destination:{node_id:wt,field:"mask"}},{source:{node_id:wt,field:"image"},destination:{node_id:Ie,field:"image"}},{source:{node_id:ut,field:"image"},destination:{node_id:Ie,field:"mask"}});if(h){const N={id:dr,type:"rand_int"};A.nodes[dr]=N,A.edges.push({source:{node_id:dr,field:"a"},destination:{node_id:bn,field:"start"}})}else A.nodes[bn].start=f;return y&&lh(e,A,Re),Uo(e,A,We),ah(e,A,Re,We),Fo(e,A,Re),e.system.shouldUseNSFWChecker&&Bo(e,A,Ie),e.system.shouldUseWatermarker&&zo(e,A,Ie),A},UCe=(e,t,n)=>{const r=ke("nodes"),{positivePrompt:i,negativePrompt:o,model:s,cfgScale:a,scheduler:l,steps:u,iterations:d,seed:f,shouldRandomizeSeed:h,vaePrecision:g,shouldUseNoiseSettings:m,shouldUseCpuNoise:v,maskBlur:x,maskBlurMethod:_,tileSize:b,infillMethod:y}=e.generation,{sdxlImg2ImgDenoisingStrength:S,shouldUseSDXLRefiner:C,refinerStart:T,shouldConcatSDXLStylePrompt:E}=e.sdxl;if(!s)throw r.error("No model found in state"),new Error("No model found in state");const{width:P,height:k}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:O,boundingBoxScaleMethod:M,shouldAutoSave:V}=e.canvas,B=v,{craftedPositiveStylePrompt:A,craftedNegativeStylePrompt:N}=Uc(e,E),D={id:NE,nodes:{[We]:{type:"sdxl_model_loader",id:We,model:s},[$e]:{type:"sdxl_compel_prompt",id:$e,prompt:i,style:A},[Be]:{type:"sdxl_compel_prompt",id:Be,prompt:o,style:N},[_f]:{type:"tomask",id:_f,is_intermediate:!0,image:t},[Ds]:{type:"mask_combine",id:Ds,is_intermediate:!0,mask2:n},[ut]:{type:"img_blur",id:ut,is_intermediate:!0,radius:x,blur_type:_},[Nn]:{type:"infill_tile",id:Nn,is_intermediate:!0,tile_size:b},[hn]:{type:"i2l",id:hn,is_intermediate:!0,fp32:g==="fp32"},[Se]:{type:"noise",id:Se,use_cpu:B,is_intermediate:!0},[Re]:{type:"denoise_latents",id:Re,is_intermediate:!0,steps:u,cfg_scale:a,scheduler:l,denoising_start:C?Math.min(T,1-S):1-S,denoising_end:C?T:1},[it]:{type:"l2i",id:it,is_intermediate:!0,fp32:g==="fp32"},[wt]:{type:"color_correct",id:wt,is_intermediate:!0},[Ie]:{type:"img_paste",id:Ie,is_intermediate:!V},[bn]:{type:"range_of_size",id:bn,is_intermediate:!0,size:d,step:1},[sn]:{type:"iterate",id:sn,is_intermediate:!0}},edges:[{source:{node_id:We,field:"unet"},destination:{node_id:Re,field:"unet"}},{source:{node_id:We,field:"clip"},destination:{node_id:$e,field:"clip"}},{source:{node_id:We,field:"clip2"},destination:{node_id:$e,field:"clip2"}},{source:{node_id:We,field:"clip"},destination:{node_id:Be,field:"clip"}},{source:{node_id:We,field:"clip2"},destination:{node_id:Be,field:"clip2"}},{source:{node_id:Nn,field:"image"},destination:{node_id:hn,field:"image"}},{source:{node_id:_f,field:"mask"},destination:{node_id:Ds,field:"mask1"}},{source:{node_id:$e,field:"conditioning"},destination:{node_id:Re,field:"positive_conditioning"}},{source:{node_id:Be,field:"conditioning"},destination:{node_id:Re,field:"negative_conditioning"}},{source:{node_id:Se,field:"noise"},destination:{node_id:Re,field:"noise"}},{source:{node_id:hn,field:"latents"},destination:{node_id:Re,field:"latents"}},{source:{node_id:ut,field:"image"},destination:{node_id:Re,field:"mask"}},{source:{node_id:bn,field:"collection"},destination:{node_id:sn,field:"collection"}},{source:{node_id:sn,field:"item"},destination:{node_id:Se,field:"seed"}},{source:{node_id:Re,field:"latents"},destination:{node_id:it,field:"latents"}}]};if(y==="patchmatch"&&(D.nodes[Nn]={type:"infill_patchmatch",id:Nn,is_intermediate:!0}),["auto","manual"].includes(M)){const U=O.width,$=O.height;D.nodes[ko]={type:"img_resize",id:ko,is_intermediate:!0,width:U,height:$,image:t},D.nodes[Ni]={type:"img_resize",id:Ni,is_intermediate:!0,width:U,height:$},D.nodes[ti]={type:"img_resize",id:ti,is_intermediate:!0,width:P,height:k},D.nodes[Ls]={type:"img_resize",id:Ls,is_intermediate:!0,width:P,height:k},D.nodes[er]={type:"img_resize",id:er,is_intermediate:!0,width:P,height:k},D.nodes[Se]={...D.nodes[Se],width:U,height:$},D.edges.push({source:{node_id:ko,field:"image"},destination:{node_id:Nn,field:"image"}},{source:{node_id:Ds,field:"image"},destination:{node_id:Ni,field:"image"}},{source:{node_id:Ni,field:"image"},destination:{node_id:ut,field:"image"}},{source:{node_id:it,field:"image"},destination:{node_id:ti,field:"image"}},{source:{node_id:ut,field:"image"},destination:{node_id:er,field:"image"}},{source:{node_id:Nn,field:"image"},destination:{node_id:Ls,field:"image"}},{source:{node_id:Ls,field:"image"},destination:{node_id:wt,field:"reference"}},{source:{node_id:ti,field:"image"},destination:{node_id:wt,field:"image"}},{source:{node_id:er,field:"image"},destination:{node_id:wt,field:"mask"}},{source:{node_id:Ls,field:"image"},destination:{node_id:Ie,field:"base_image"}},{source:{node_id:wt,field:"image"},destination:{node_id:Ie,field:"image"}},{source:{node_id:er,field:"image"},destination:{node_id:Ie,field:"mask"}})}else D.nodes[Nn]={...D.nodes[Nn],image:t},D.nodes[Se]={...D.nodes[Se],width:P,height:k},D.nodes[hn]={...D.nodes[hn],image:t},D.nodes[ut]={...D.nodes[ut],image:n},D.edges.push({source:{node_id:Ds,field:"image"},destination:{node_id:ut,field:"image"}},{source:{node_id:Nn,field:"image"},destination:{node_id:wt,field:"reference"}},{source:{node_id:it,field:"image"},destination:{node_id:wt,field:"image"}},{source:{node_id:ut,field:"image"},destination:{node_id:wt,field:"mask"}},{source:{node_id:Nn,field:"image"},destination:{node_id:Ie,field:"base_image"}},{source:{node_id:wt,field:"image"},destination:{node_id:Ie,field:"image"}},{source:{node_id:ut,field:"image"},destination:{node_id:Ie,field:"mask"}});if(h){const U={id:dr,type:"rand_int"};D.nodes[dr]=U,D.edges.push({source:{node_id:dr,field:"a"},destination:{node_id:bn,field:"start"}})}else D.nodes[bn].start=f;return C&&lh(e,D,Re),Uo(e,D,We),ah(e,D,Re,We),Fo(e,D,Re),e.system.shouldUseNSFWChecker&&Bo(e,D,Ie),e.system.shouldUseWatermarker&&zo(e,D,Ie),D},zCe=e=>{const t=ke("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,scheduler:s,steps:a,vaePrecision:l,clipSkip:u,shouldUseCpuNoise:d,shouldUseNoiseSettings:f}=e.generation,{width:h,height:g}=e.canvas.boundingBoxDimensions,{shouldAutoSave:m}=e.canvas,{shouldUseSDXLRefiner:v,refinerStart:x,shouldConcatSDXLStylePrompt:_}=e.sdxl;if(!i)throw t.error("No model found in state"),new Error("No model found in state");const b=f?d:ys.shouldUseCpuNoise,y=i.model_type==="onnx",S=y?mS:We,C=y?"onnx_model_loader":"sdxl_model_loader",T=y?{type:"t2l_onnx",id:Re,is_intermediate:!0,cfg_scale:o,scheduler:s,steps:a}:{type:"denoise_latents",id:Re,is_intermediate:!0,cfg_scale:o,scheduler:s,steps:a,denoising_start:0,denoising_end:v?x:1},{craftedPositiveStylePrompt:E,craftedNegativeStylePrompt:P}=Uc(e,_),k={id:IE,nodes:{[S]:{type:C,id:S,is_intermediate:!0,model:i},[$e]:{type:y?"prompt_onnx":"sdxl_compel_prompt",id:$e,is_intermediate:!0,prompt:n,style:E},[Be]:{type:y?"prompt_onnx":"sdxl_compel_prompt",id:Be,is_intermediate:!0,prompt:r,style:P},[Se]:{type:"noise",id:Se,is_intermediate:!0,width:h,height:g,use_cpu:b},[T.id]:T,[Ie]:{type:y?"l2i_onnx":"l2i",id:Ie,is_intermediate:!m,fp32:l==="fp32"}},edges:[{source:{node_id:S,field:"unet"},destination:{node_id:Re,field:"unet"}},{source:{node_id:S,field:"clip"},destination:{node_id:$e,field:"clip"}},{source:{node_id:S,field:"clip2"},destination:{node_id:$e,field:"clip2"}},{source:{node_id:S,field:"clip"},destination:{node_id:Be,field:"clip"}},{source:{node_id:S,field:"clip2"},destination:{node_id:Be,field:"clip2"}},{source:{node_id:$e,field:"conditioning"},destination:{node_id:Re,field:"positive_conditioning"}},{source:{node_id:Be,field:"conditioning"},destination:{node_id:Re,field:"negative_conditioning"}},{source:{node_id:Se,field:"noise"},destination:{node_id:Re,field:"noise"}},{source:{node_id:Re,field:"latents"},destination:{node_id:Ie,field:"latents"}}]};return k.nodes[yt]={id:yt,type:"metadata_accumulator",generation_mode:"txt2img",cfg_scale:o,height:g,width:h,positive_prompt:"",negative_prompt:r,model:i,seed:0,steps:a,rand_device:b?"cpu":"cuda",scheduler:s,vae:void 0,controlnets:[],loras:[],clip_skip:u},k.edges.push({source:{node_id:yt,field:"metadata"},destination:{node_id:Ie,field:"metadata"}}),v&&lh(e,k,Re),ah(e,k,Re,S),Uo(e,k,S),wu(e,k),Fo(e,k,Re),e.system.shouldUseNSFWChecker&&Bo(e,k,Ie),e.system.shouldUseWatermarker&&zo(e,k,Ie),k},VCe=e=>{const t=ke("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,scheduler:s,steps:a,clipSkip:l,shouldUseCpuNoise:u,shouldUseNoiseSettings:d}=e.generation,{width:f,height:h}=e.canvas.boundingBoxDimensions,{shouldAutoSave:g}=e.canvas;if(!i)throw t.error("No model found in state"),new Error("No model found in state");const m=d?u:ys.shouldUseCpuNoise,v=i.model_type==="onnx",x=v?mS:an,_=v?"onnx_model_loader":"main_model_loader",b=v?{type:"t2l_onnx",id:Le,is_intermediate:!0,cfg_scale:o,scheduler:s,steps:a}:{type:"denoise_latents",id:Le,is_intermediate:!0,cfg_scale:o,scheduler:s,steps:a,denoising_start:0,denoising_end:1},y={id:uz,nodes:{[x]:{type:_,id:x,is_intermediate:!0,model:i},[It]:{type:"clip_skip",id:It,is_intermediate:!0,skipped_layers:l},[$e]:{type:v?"prompt_onnx":"compel",id:$e,is_intermediate:!0,prompt:n},[Be]:{type:v?"prompt_onnx":"compel",id:Be,is_intermediate:!0,prompt:r},[Se]:{type:"noise",id:Se,is_intermediate:!0,width:f,height:h,use_cpu:m},[b.id]:b,[Ie]:{type:v?"l2i_onnx":"l2i",id:Ie,is_intermediate:!g}},edges:[{source:{node_id:x,field:"unet"},destination:{node_id:Le,field:"unet"}},{source:{node_id:x,field:"clip"},destination:{node_id:It,field:"clip"}},{source:{node_id:It,field:"clip"},destination:{node_id:$e,field:"clip"}},{source:{node_id:It,field:"clip"},destination:{node_id:Be,field:"clip"}},{source:{node_id:$e,field:"conditioning"},destination:{node_id:Le,field:"positive_conditioning"}},{source:{node_id:Be,field:"conditioning"},destination:{node_id:Le,field:"negative_conditioning"}},{source:{node_id:Se,field:"noise"},destination:{node_id:Le,field:"noise"}},{source:{node_id:Le,field:"latents"},destination:{node_id:Ie,field:"latents"}}]};return y.nodes[yt]={id:yt,type:"metadata_accumulator",generation_mode:"txt2img",cfg_scale:o,height:h,width:f,positive_prompt:"",negative_prompt:r,model:i,seed:0,steps:a,rand_device:m?"cpu":"cuda",scheduler:s,vae:void 0,controlnets:[],loras:[],clip_skip:l},y.edges.push({source:{node_id:yt,field:"metadata"},destination:{node_id:Ie,field:"metadata"}}),Uo(e,y,x),sh(e,y,Le,x),wu(e,y),Fo(e,y,Le),e.system.shouldUseNSFWChecker&&Bo(e,y,Ie),e.system.shouldUseWatermarker&&zo(e,y,Ie),y},jCe=(e,t,n,r)=>{let i;if(t==="txt2img")e.generation.model&&e.generation.model.base_model==="sdxl"?i=zCe(e):i=VCe(e);else if(t==="img2img"){if(!n)throw new Error("Missing canvas init image");e.generation.model&&e.generation.model.base_model==="sdxl"?i=FCe(e,n):i=LCe(e,n)}else if(t==="inpaint"){if(!n||!r)throw new Error("Missing canvas init and mask images");e.generation.model&&e.generation.model.base_model==="sdxl"?i=BCe(e,n,r):i=DCe(e,n,r)}else{if(!n)throw new Error("Missing canvas init image");e.generation.model&&e.generation.model.base_model==="sdxl"?i=UCe(e,n,r):i=$Ce(e,n,r)}return i},GCe=()=>{Oe({predicate:e=>zm.match(e)&&e.payload==="unifiedCanvas",effect:async(e,{getState:t,dispatch:n,take:r})=>{const i=ke("session"),o=t(),{layerState:s,boundingBoxCoordinates:a,boundingBoxDimensions:l,isMaskEnabled:u,shouldPreserveMaskedArea:d}=o.canvas,f=await OCe(s,a,l,u,d);if(!f){i.error("Unable to create canvas data");return}const{baseBlob:h,baseImageData:g,maskBlob:m,maskImageData:v}=f,x=MCe(g,v);if(o.system.enableImageDebugging){const E=await rk(h),P=await rk(m);RSe([{base64:P,caption:"mask b64"},{base64:E,caption:"image b64"}])}i.debug(`Generation mode: ${x}`);let _,b;["img2img","inpaint","outpaint"].includes(x)&&(_=await n(we.endpoints.uploadImage.initiate({file:new File([h],"canvasInitImage.png",{type:"image/png"}),image_category:"general",is_intermediate:!0})).unwrap()),["inpaint","outpaint"].includes(x)&&(b=await n(we.endpoints.uploadImage.initiate({file:new File([m],"canvasMaskImage.png",{type:"image/png"}),image_category:"mask",is_intermediate:!0})).unwrap());const y=jCe(o,x,_,b);i.debug({graph:Ya(y)},"Canvas graph built"),n(QU(y));const{requestId:S}=n(jr({graph:y})),[C]=await r(E=>jr.fulfilled.match(E)&&E.meta.requestId===S),T=C.payload.id;["img2img","inpaint"].includes(x)&&_&&n(we.endpoints.changeImageSessionId.initiate({imageDTO:_,session_id:T})),["inpaint"].includes(x)&&b&&n(we.endpoints.changeImageSessionId.initiate({imageDTO:b,session_id:T})),o.canvas.layerState.stagingArea.boundingBox||n(hce({sessionId:T,boundingBox:{...o.canvas.boundingBoxCoordinates,...o.canvas.boundingBoxDimensions}})),n(pce(T)),n(kc())}})},HCe=e=>{const t=ke("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,scheduler:s,steps:a,initialImage:l,img2imgStrength:u,shouldFitToWidthHeight:d,width:f,height:h,clipSkip:g,shouldUseCpuNoise:m,shouldUseNoiseSettings:v,vaePrecision:x}=e.generation;if(!l)throw t.error("No initial image found in state"),new Error("No initial image found in state");if(!i)throw t.error("No model found in state"),new Error("No model found in state");const _=v?m:ys.shouldUseCpuNoise,b={id:v5,nodes:{[an]:{type:"main_model_loader",id:an,model:i},[It]:{type:"clip_skip",id:It,skipped_layers:g},[$e]:{type:"compel",id:$e,prompt:n},[Be]:{type:"compel",id:Be,prompt:r},[Se]:{type:"noise",id:Se,use_cpu:_},[it]:{type:"l2i",id:it,fp32:x==="fp32"},[Le]:{type:"denoise_latents",id:Le,cfg_scale:o,scheduler:s,steps:a,denoising_start:1-u,denoising_end:1},[Vt]:{type:"i2l",id:Vt,fp32:x==="fp32"}},edges:[{source:{node_id:an,field:"unet"},destination:{node_id:Le,field:"unet"}},{source:{node_id:an,field:"clip"},destination:{node_id:It,field:"clip"}},{source:{node_id:It,field:"clip"},destination:{node_id:$e,field:"clip"}},{source:{node_id:It,field:"clip"},destination:{node_id:Be,field:"clip"}},{source:{node_id:$e,field:"conditioning"},destination:{node_id:Le,field:"positive_conditioning"}},{source:{node_id:Be,field:"conditioning"},destination:{node_id:Le,field:"negative_conditioning"}},{source:{node_id:Se,field:"noise"},destination:{node_id:Le,field:"noise"}},{source:{node_id:Vt,field:"latents"},destination:{node_id:Le,field:"latents"}},{source:{node_id:Le,field:"latents"},destination:{node_id:it,field:"latents"}}]};if(d&&(l.width!==f||l.height!==h)){const y={id:Jn,type:"img_resize",image:{image_name:l.imageName},is_intermediate:!0,width:f,height:h};b.nodes[Jn]=y,b.edges.push({source:{node_id:Jn,field:"image"},destination:{node_id:Vt,field:"image"}}),b.edges.push({source:{node_id:Jn,field:"width"},destination:{node_id:Se,field:"width"}}),b.edges.push({source:{node_id:Jn,field:"height"},destination:{node_id:Se,field:"height"}})}else b.nodes[Vt].image={image_name:l.imageName},b.edges.push({source:{node_id:Vt,field:"width"},destination:{node_id:Se,field:"width"}}),b.edges.push({source:{node_id:Vt,field:"height"},destination:{node_id:Se,field:"height"}});return b.nodes[yt]={id:yt,type:"metadata_accumulator",generation_mode:"img2img",cfg_scale:o,height:h,width:f,positive_prompt:"",negative_prompt:r,model:i,seed:0,steps:a,rand_device:_?"cpu":"cuda",scheduler:s,vae:void 0,controlnets:[],loras:[],clip_skip:g,strength:u,init_image:l.imageName},b.edges.push({source:{node_id:yt,field:"metadata"},destination:{node_id:it,field:"metadata"}}),Uo(e,b,an),sh(e,b,Le),wu(e,b),Fo(e,b,Le),e.system.shouldUseNSFWChecker&&Bo(e,b),e.system.shouldUseWatermarker&&zo(e,b),b},WCe=e=>{const t=ke("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,scheduler:s,steps:a,initialImage:l,shouldFitToWidthHeight:u,width:d,height:f,clipSkip:h,shouldUseCpuNoise:g,shouldUseNoiseSettings:m,vaePrecision:v}=e.generation,{positiveStylePrompt:x,negativeStylePrompt:_,shouldConcatSDXLStylePrompt:b,shouldUseSDXLRefiner:y,refinerStart:S,sdxlImg2ImgDenoisingStrength:C}=e.sdxl;if(!l)throw t.error("No initial image found in state"),new Error("No initial image found in state");if(!i)throw t.error("No model found in state"),new Error("No model found in state");const T=m?g:ys.shouldUseCpuNoise,{craftedPositiveStylePrompt:E,craftedNegativeStylePrompt:P}=Uc(e,b),k={id:b5,nodes:{[We]:{type:"sdxl_model_loader",id:We,model:i},[$e]:{type:"sdxl_compel_prompt",id:$e,prompt:n,style:E},[Be]:{type:"sdxl_compel_prompt",id:Be,prompt:r,style:P},[Se]:{type:"noise",id:Se,use_cpu:T},[it]:{type:"l2i",id:it,fp32:v==="fp32"},[Re]:{type:"denoise_latents",id:Re,cfg_scale:o,scheduler:s,steps:a,denoising_start:y?Math.min(S,1-C):1-C,denoising_end:y?S:1},[Vt]:{type:"i2l",id:Vt,fp32:v==="fp32"}},edges:[{source:{node_id:We,field:"unet"},destination:{node_id:Re,field:"unet"}},{source:{node_id:We,field:"clip"},destination:{node_id:$e,field:"clip"}},{source:{node_id:We,field:"clip2"},destination:{node_id:$e,field:"clip2"}},{source:{node_id:We,field:"clip"},destination:{node_id:Be,field:"clip"}},{source:{node_id:We,field:"clip2"},destination:{node_id:Be,field:"clip2"}},{source:{node_id:$e,field:"conditioning"},destination:{node_id:Re,field:"positive_conditioning"}},{source:{node_id:Be,field:"conditioning"},destination:{node_id:Re,field:"negative_conditioning"}},{source:{node_id:Se,field:"noise"},destination:{node_id:Re,field:"noise"}},{source:{node_id:Vt,field:"latents"},destination:{node_id:Re,field:"latents"}},{source:{node_id:Re,field:"latents"},destination:{node_id:it,field:"latents"}}]};if(u&&(l.width!==d||l.height!==f)){const O={id:Jn,type:"img_resize",image:{image_name:l.imageName},is_intermediate:!0,width:d,height:f};k.nodes[Jn]=O,k.edges.push({source:{node_id:Jn,field:"image"},destination:{node_id:Vt,field:"image"}}),k.edges.push({source:{node_id:Jn,field:"width"},destination:{node_id:Se,field:"width"}}),k.edges.push({source:{node_id:Jn,field:"height"},destination:{node_id:Se,field:"height"}})}else k.nodes[Vt].image={image_name:l.imageName},k.edges.push({source:{node_id:Vt,field:"width"},destination:{node_id:Se,field:"width"}}),k.edges.push({source:{node_id:Vt,field:"height"},destination:{node_id:Se,field:"height"}});return k.nodes[yt]={id:yt,type:"metadata_accumulator",generation_mode:"sdxl_img2img",cfg_scale:o,height:f,width:d,positive_prompt:"",negative_prompt:r,model:i,seed:0,steps:a,rand_device:T?"cpu":"cuda",scheduler:s,vae:void 0,controlnets:[],loras:[],clip_skip:h,strength:C,init_image:l.imageName,positive_style_prompt:x,negative_style_prompt:_},k.edges.push({source:{node_id:yt,field:"metadata"},destination:{node_id:it,field:"metadata"}}),ah(e,k,Re,We),y&&lh(e,k,Re),Uo(e,k,We),Fo(e,k,Re),wu(e,k),e.system.shouldUseNSFWChecker&&Bo(e,k),e.system.shouldUseWatermarker&&zo(e,k),k},qCe=()=>{Oe({predicate:e=>zm.match(e)&&e.payload==="img2img",effect:async(e,{getState:t,dispatch:n,take:r})=>{const i=ke("session"),o=t(),s=o.generation.model;let a;s&&s.base_model==="sdxl"?a=WCe(o):a=HCe(o),n(YU(a)),i.debug({graph:Ya(a)},"Image to Image graph built"),n(jr({graph:a})),await r(jr.fulfilled.match),n(kc())}})};let Z0;const KCe=new Uint8Array(16);function XCe(){if(!Z0&&(Z0=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!Z0))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Z0(KCe)}const $r=[];for(let e=0;e<256;++e)$r.push((e+256).toString(16).slice(1));function YCe(e,t=0){return($r[e[t+0]]+$r[e[t+1]]+$r[e[t+2]]+$r[e[t+3]]+"-"+$r[e[t+4]]+$r[e[t+5]]+"-"+$r[e[t+6]]+$r[e[t+7]]+"-"+$r[e[t+8]]+$r[e[t+9]]+"-"+$r[e[t+10]]+$r[e[t+11]]+$r[e[t+12]]+$r[e[t+13]]+$r[e[t+14]]+$r[e[t+15]]).toLowerCase()}const QCe=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),Bk={randomUUID:QCe};function ZCe(e,t,n){if(Bk.randomUUID&&!t&&!e)return Bk.randomUUID();e=e||{};const r=e.random||(e.rng||XCe)();if(r[6]=r[6]&15|64,r[8]=r[8]&63|128,t){n=n||0;for(let i=0;i<16;++i)t[n+i]=r[i];return t}return YCe(r)}const JCe=e=>{if(e.type==="color"&&e.value){const t=Qr(e.value),{r:n,g:r,b:i,a:o}=e.value,s=Math.max(0,Math.min(o*255,255));return Object.assign(t,{r:n,g:r,b:i,a:s}),t}return e.value},e3e=e=>{const{nodes:t,edges:n}=e.nodes,i=t.filter(a=>a.type!=="progress_image").reduce((a,l)=>{const{id:u,data:d}=l,{type:f,inputs:h}=d,g=LT(h,(v,x,_)=>{const b=JCe(x);return v[_]=b,v},{}),m={type:f,id:u,...g};return Object.assign(a,{[u]:m}),a},{}),o=n.reduce((a,l)=>{const{source:u,target:d,sourceHandle:f,targetHandle:h}=l;return a.push({source:{node_id:u,field:f},destination:{node_id:d,field:h}}),a},[]);return o.forEach(a=>{const l=i[a.destination.node_id],u=a.destination.field;i[a.destination.node_id]=mb(l,u)}),{id:ZCe(),nodes:i,edges:o}},t3e=()=>{Oe({predicate:e=>zm.match(e)&&e.payload==="nodes",effect:async(e,{getState:t,dispatch:n,take:r})=>{const i=ke("session"),o=t(),s=e3e(o);n(ZU(s)),i.debug({graph:Ya(s)},"Nodes graph built"),n(jr({graph:s})),await r(jr.fulfilled.match),n(kc())}})},n3e=e=>{const t=ke("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,scheduler:s,steps:a,width:l,height:u,clipSkip:d,shouldUseCpuNoise:f,shouldUseNoiseSettings:h,vaePrecision:g}=e.generation,{positiveStylePrompt:m,negativeStylePrompt:v,shouldUseSDXLRefiner:x,shouldConcatSDXLStylePrompt:_,refinerStart:b}=e.sdxl,y=h?f:ys.shouldUseCpuNoise;if(!i)throw t.error("No model found in state"),new Error("No model found in state");const{craftedPositiveStylePrompt:S,craftedNegativeStylePrompt:C}=Uc(e,_),T={id:fz,nodes:{[We]:{type:"sdxl_model_loader",id:We,model:i},[$e]:{type:"sdxl_compel_prompt",id:$e,prompt:n,style:S},[Be]:{type:"sdxl_compel_prompt",id:Be,prompt:r,style:C},[Se]:{type:"noise",id:Se,width:l,height:u,use_cpu:y},[Re]:{type:"denoise_latents",id:Re,cfg_scale:o,scheduler:s,steps:a,denoising_start:0,denoising_end:x?b:1},[it]:{type:"l2i",id:it,fp32:g==="fp32"}},edges:[{source:{node_id:We,field:"unet"},destination:{node_id:Re,field:"unet"}},{source:{node_id:We,field:"clip"},destination:{node_id:$e,field:"clip"}},{source:{node_id:We,field:"clip2"},destination:{node_id:$e,field:"clip2"}},{source:{node_id:We,field:"clip"},destination:{node_id:Be,field:"clip"}},{source:{node_id:We,field:"clip2"},destination:{node_id:Be,field:"clip2"}},{source:{node_id:$e,field:"conditioning"},destination:{node_id:Re,field:"positive_conditioning"}},{source:{node_id:Be,field:"conditioning"},destination:{node_id:Re,field:"negative_conditioning"}},{source:{node_id:Se,field:"noise"},destination:{node_id:Re,field:"noise"}},{source:{node_id:Re,field:"latents"},destination:{node_id:it,field:"latents"}}]};return T.nodes[yt]={id:yt,type:"metadata_accumulator",generation_mode:"sdxl_txt2img",cfg_scale:o,height:u,width:l,positive_prompt:"",negative_prompt:r,model:i,seed:0,steps:a,rand_device:y?"cpu":"cuda",scheduler:s,vae:void 0,controlnets:[],loras:[],clip_skip:d,positive_style_prompt:m,negative_style_prompt:v},T.edges.push({source:{node_id:yt,field:"metadata"},destination:{node_id:it,field:"metadata"}}),x&&lh(e,T,Re),Uo(e,T,We),ah(e,T,Re,We),Fo(e,T,Re),wu(e,T),e.system.shouldUseNSFWChecker&&Bo(e,T),e.system.shouldUseWatermarker&&zo(e,T),T},r3e=e=>{const t=ke("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,scheduler:s,steps:a,width:l,height:u,clipSkip:d,shouldUseCpuNoise:f,shouldUseNoiseSettings:h,vaePrecision:g}=e.generation,m=h?f:ys.shouldUseCpuNoise;if(!i)throw t.error("No model found in state"),new Error("No model found in state");const v=i.model_type==="onnx",x=v?mS:an,_=v?"onnx_model_loader":"main_model_loader",b=v?{type:"t2l_onnx",id:Le,is_intermediate:!0,cfg_scale:o,scheduler:s,steps:a}:{type:"denoise_latents",id:Le,is_intermediate:!0,cfg_scale:o,scheduler:s,steps:a,denoising_start:0,denoising_end:1},y={id:lz,nodes:{[x]:{type:_,id:x,is_intermediate:!0,model:i},[It]:{type:"clip_skip",id:It,skipped_layers:d,is_intermediate:!0},[$e]:{type:v?"prompt_onnx":"compel",id:$e,prompt:n,is_intermediate:!0},[Be]:{type:v?"prompt_onnx":"compel",id:Be,prompt:r,is_intermediate:!0},[Se]:{type:"noise",id:Se,width:l,height:u,use_cpu:m,is_intermediate:!0},[b.id]:b,[it]:{type:v?"l2i_onnx":"l2i",id:it,fp32:g==="fp32"}},edges:[{source:{node_id:x,field:"unet"},destination:{node_id:Le,field:"unet"}},{source:{node_id:x,field:"clip"},destination:{node_id:It,field:"clip"}},{source:{node_id:It,field:"clip"},destination:{node_id:$e,field:"clip"}},{source:{node_id:It,field:"clip"},destination:{node_id:Be,field:"clip"}},{source:{node_id:$e,field:"conditioning"},destination:{node_id:Le,field:"positive_conditioning"}},{source:{node_id:Be,field:"conditioning"},destination:{node_id:Le,field:"negative_conditioning"}},{source:{node_id:Se,field:"noise"},destination:{node_id:Le,field:"noise"}},{source:{node_id:Le,field:"latents"},destination:{node_id:it,field:"latents"}}]};return y.nodes[yt]={id:yt,type:"metadata_accumulator",generation_mode:"txt2img",cfg_scale:o,height:u,width:l,positive_prompt:"",negative_prompt:r,model:i,seed:0,steps:a,rand_device:m?"cpu":"cuda",scheduler:s,vae:void 0,controlnets:[],loras:[],clip_skip:d},y.edges.push({source:{node_id:yt,field:"metadata"},destination:{node_id:it,field:"metadata"}}),Uo(e,y,x),sh(e,y,Le,x),wu(e,y),Fo(e,y,Le),e.system.shouldUseNSFWChecker&&Bo(e,y),e.system.shouldUseWatermarker&&zo(e,y),y},i3e=()=>{Oe({predicate:e=>zm.match(e)&&e.payload==="txt2img",effect:async(e,{getState:t,dispatch:n,take:r})=>{const i=ke("session"),o=t(),s=o.generation.model;let a;s&&s.base_model==="sdxl"?a=n3e(o):a=r3e(o),n(XU(a)),i.debug({graph:Ya(a)},"Text to Image graph built"),n(jr({graph:a})),await r(jr.fulfilled.match),n(kc())}})},Xz=$L(),Oe=Xz.startListening;hbe();pbe();ybe();ibe();obe();sbe();abe();lbe();$_e();fbe();GCe();t3e();i3e();qCe();uSe();Z_e();X_e();q_e();Q_e();xSe();k_e();fSe();hSe();gSe();mSe();vSe();cSe();dSe();SSe();wSe();_Se();bSe();ySe();rSe();iSe();oSe();sSe();aSe();lSe();eSe();tSe();nSe();tbe();ebe();nbe();rbe();cbe();dbe();F_e();Kbe();ube();vbe();L_e();bbe();M_e();I_e();PSe();TSe();const o3e={canvas:gce,gallery:xfe,generation:Wue,nodes:u1e,postprocessing:c1e,system:$1e,config:Tle,ui:Kue,hotkeys:z1e,controlNet:bfe,dynamicPrompts:wfe,deleteImageModal:Afe,changeBoardModal:Rfe,lora:kfe,modelmanager:U1e,sdxl:h1e,[iu.reducerPath]:iu.reducer},s3e=Qf(o3e),a3e=f_e(s3e),l3e=["canvas","gallery","generation","sdxl","nodes","postprocessing","system","ui","controlNet","dynamicPrompts","lora","modelmanager"],u3e=yL({reducer:a3e,enhancers:e=>e.concat(h_e(window.localStorage,l3e,{persistDebounce:300,serialize:C_e,unserialize:E_e,prefix:p_e})).concat(BL()),middleware:e=>e({immutableCheck:!1,serializableCheck:!1}).concat(iu.middleware).concat(H1e).prepend(Xz.middleware),devTools:{actionSanitizer:P_e,stateSanitizer:O_e,trace:!0,predicate:(e,t)=>!R_e.includes(t.type)}}),OMe=e=>e,c3e=e=>{const{socket:t,storeApi:n}=e,{dispatch:r,getState:i}=n;t.on("connect",()=>{ke("socketio").debug("Connected"),r(aF());const{sessionId:s}=i().system;s&&(t.emit("subscribe",{session:s}),r(YT({sessionId:s})))}),t.on("connect_error",o=>{o&&o.message&&o.data==="ERR_UNAUTHENTICATED"&&r(Yn(lc({title:o.message,status:"error",duration:1e4})))}),t.on("disconnect",()=>{r(uF())}),t.on("invocation_started",o=>{r(pF({data:o}))}),t.on("generator_progress",o=>{r(bF({data:o}))}),t.on("invocation_error",o=>{r(yF({data:o}))}),t.on("invocation_complete",o=>{r(QT({data:o}))}),t.on("graph_execution_state_complete",o=>{r(vF({data:o}))}),t.on("model_load_started",o=>{r(wF({data:o}))}),t.on("model_load_completed",o=>{r(xF({data:o}))}),t.on("session_retrieval_error",o=>{r(CF({data:o}))}),t.on("invocation_retrieval_error",o=>{r(EF({data:o}))})},Qs=Object.create(null);Qs.open="0";Qs.close="1";Qs.ping="2";Qs.pong="3";Qs.message="4";Qs.upgrade="5";Qs.noop="6";const Nv=Object.create(null);Object.keys(Qs).forEach(e=>{Nv[Qs[e]]=e});const d3e={type:"error",data:"parser error"},Yz=typeof Blob=="function"||typeof Blob<"u"&&Object.prototype.toString.call(Blob)==="[object BlobConstructor]",Qz=typeof ArrayBuffer=="function",Zz=e=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(e):e&&e.buffer instanceof ArrayBuffer,YE=({type:e,data:t},n,r)=>Yz&&t instanceof Blob?n?r(t):Uk(t,r):Qz&&(t instanceof ArrayBuffer||Zz(t))?n?r(t):Uk(new Blob([t]),r):r(Qs[e]+(t||"")),Uk=(e,t)=>{const n=new FileReader;return n.onload=function(){const r=n.result.split(",")[1];t("b"+(r||""))},n.readAsDataURL(e)};function zk(e){return e instanceof Uint8Array?e:e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}let iC;function f3e(e,t){if(Yz&&e.data instanceof Blob)return e.data.arrayBuffer().then(zk).then(t);if(Qz&&(e.data instanceof ArrayBuffer||Zz(e.data)))return t(zk(e.data));YE(e,!1,n=>{iC||(iC=new TextEncoder),t(iC.encode(n))})}const Vk="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Pp=typeof Uint8Array>"u"?[]:new Uint8Array(256);for(let e=0;e{let t=e.length*.75,n=e.length,r,i=0,o,s,a,l;e[e.length-1]==="="&&(t--,e[e.length-2]==="="&&t--);const u=new ArrayBuffer(t),d=new Uint8Array(u);for(r=0;r>4,d[i++]=(s&15)<<4|a>>2,d[i++]=(a&3)<<6|l&63;return u},p3e=typeof ArrayBuffer=="function",QE=(e,t)=>{if(typeof e!="string")return{type:"message",data:Jz(e,t)};const n=e.charAt(0);return n==="b"?{type:"message",data:g3e(e.substring(1),t)}:Nv[n]?e.length>1?{type:Nv[n],data:e.substring(1)}:{type:Nv[n]}:d3e},g3e=(e,t)=>{if(p3e){const n=h3e(e);return Jz(n,t)}else return{base64:!0,data:e}},Jz=(e,t)=>{switch(t){case"blob":return e instanceof Blob?e:new Blob([e]);case"arraybuffer":default:return e instanceof ArrayBuffer?e:e.buffer}},eV=String.fromCharCode(30),m3e=(e,t)=>{const n=e.length,r=new Array(n);let i=0;e.forEach((o,s)=>{YE(o,!1,a=>{r[s]=a,++i===n&&t(r.join(eV))})})},y3e=(e,t)=>{const n=e.split(eV),r=[];for(let i=0;i54;return QE(r?e:oC.decode(e),n)}const tV=4;function nr(e){if(e)return _3e(e)}function _3e(e){for(var t in nr.prototype)e[t]=nr.prototype[t];return e}nr.prototype.on=nr.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this};nr.prototype.once=function(e,t){function n(){this.off(e,n),t.apply(this,arguments)}return n.fn=t,this.on(e,n),this};nr.prototype.off=nr.prototype.removeListener=nr.prototype.removeAllListeners=nr.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},arguments.length==0)return this._callbacks={},this;var n=this._callbacks["$"+e];if(!n)return this;if(arguments.length==1)return delete this._callbacks["$"+e],this;for(var r,i=0;itypeof self<"u"?self:typeof window<"u"?window:Function("return this")())();function nV(e,...t){return t.reduce((n,r)=>(e.hasOwnProperty(r)&&(n[r]=e[r]),n),{})}const b3e=Ao.setTimeout,S3e=Ao.clearTimeout;function u2(e,t){t.useNativeTimers?(e.setTimeoutFn=b3e.bind(Ao),e.clearTimeoutFn=S3e.bind(Ao)):(e.setTimeoutFn=Ao.setTimeout.bind(Ao),e.clearTimeoutFn=Ao.clearTimeout.bind(Ao))}const w3e=1.33;function x3e(e){return typeof e=="string"?C3e(e):Math.ceil((e.byteLength||e.size)*w3e)}function C3e(e){let t=0,n=0;for(let r=0,i=e.length;r=57344?n+=3:(r++,n+=4);return n}function T3e(e){let t="";for(let n in e)e.hasOwnProperty(n)&&(t.length&&(t+="&"),t+=encodeURIComponent(n)+"="+encodeURIComponent(e[n]));return t}function E3e(e){let t={},n=e.split("&");for(let r=0,i=n.length;r0);return t}function iV(){const e=Hk(+new Date);return e!==Gk?(jk=0,Gk=e):e+"."+Hk(jk++)}for(;J0{this.readyState="paused",t()};if(this.polling||!this.writable){let r=0;this.polling&&(r++,this.once("pollComplete",function(){--r||n()})),this.writable||(r++,this.once("drain",function(){--r||n()}))}else n()}poll(){this.polling=!0,this.doPoll(),this.emitReserved("poll")}onData(t){const n=r=>{if(this.readyState==="opening"&&r.type==="open"&&this.onOpen(),r.type==="close")return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(r)};y3e(t,this.socket.binaryType).forEach(n),this.readyState!=="closed"&&(this.polling=!1,this.emitReserved("pollComplete"),this.readyState==="open"&&this.poll())}doClose(){const t=()=>{this.write([{type:"close"}])};this.readyState==="open"?t():this.once("open",t)}write(t){this.writable=!1,m3e(t,n=>{this.doWrite(n,()=>{this.writable=!0,this.emitReserved("drain")})})}uri(){const t=this.opts.secure?"https":"http",n=this.query||{};return this.opts.timestampRequests!==!1&&(n[this.opts.timestampParam]=iV()),!this.supportsBinary&&!n.sid&&(n.b64=1),this.createUri(t,n)}request(t={}){return Object.assign(t,{xd:this.xd,cookieJar:this.cookieJar},this.opts),new bf(this.uri(),t)}doWrite(t,n){const r=this.request({method:"POST",data:t});r.on("success",n),r.on("error",(i,o)=>{this.onError("xhr post error",i,o)})}doPoll(){const t=this.request();t.on("data",this.onData.bind(this)),t.on("error",(n,r)=>{this.onError("xhr poll error",n,r)}),this.pollXhr=t}}let bf=class Lv extends nr{constructor(t,n){super(),u2(this,n),this.opts=n,this.method=n.method||"GET",this.uri=t,this.data=n.data!==void 0?n.data:null,this.create()}create(){var t;const n=nV(this.opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");n.xdomain=!!this.opts.xd;const r=this.xhr=new sV(n);try{r.open(this.method,this.uri,!0);try{if(this.opts.extraHeaders){r.setDisableHeaderCheck&&r.setDisableHeaderCheck(!0);for(let i in this.opts.extraHeaders)this.opts.extraHeaders.hasOwnProperty(i)&&r.setRequestHeader(i,this.opts.extraHeaders[i])}}catch{}if(this.method==="POST")try{r.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch{}try{r.setRequestHeader("Accept","*/*")}catch{}(t=this.opts.cookieJar)===null||t===void 0||t.addCookies(r),"withCredentials"in r&&(r.withCredentials=this.opts.withCredentials),this.opts.requestTimeout&&(r.timeout=this.opts.requestTimeout),r.onreadystatechange=()=>{var i;r.readyState===3&&((i=this.opts.cookieJar)===null||i===void 0||i.parseCookies(r)),r.readyState===4&&(r.status===200||r.status===1223?this.onLoad():this.setTimeoutFn(()=>{this.onError(typeof r.status=="number"?r.status:0)},0))},r.send(this.data)}catch(i){this.setTimeoutFn(()=>{this.onError(i)},0);return}typeof document<"u"&&(this.index=Lv.requestsCount++,Lv.requests[this.index]=this)}onError(t){this.emitReserved("error",t,this.xhr),this.cleanup(!0)}cleanup(t){if(!(typeof this.xhr>"u"||this.xhr===null)){if(this.xhr.onreadystatechange=O3e,t)try{this.xhr.abort()}catch{}typeof document<"u"&&delete Lv.requests[this.index],this.xhr=null}}onLoad(){const t=this.xhr.responseText;t!==null&&(this.emitReserved("data",t),this.emitReserved("success"),this.cleanup())}abort(){this.cleanup()}};bf.requestsCount=0;bf.requests={};if(typeof document<"u"){if(typeof attachEvent=="function")attachEvent("onunload",Wk);else if(typeof addEventListener=="function"){const e="onpagehide"in Ao?"pagehide":"unload";addEventListener(e,Wk,!1)}}function Wk(){for(let e in bf.requests)bf.requests.hasOwnProperty(e)&&bf.requests[e].abort()}const JE=(()=>typeof Promise=="function"&&typeof Promise.resolve=="function"?t=>Promise.resolve().then(t):(t,n)=>n(t,0))(),ev=Ao.WebSocket||Ao.MozWebSocket,qk=!0,M3e="arraybuffer",Kk=typeof navigator<"u"&&typeof navigator.product=="string"&&navigator.product.toLowerCase()==="reactnative";class N3e extends ZE{constructor(t){super(t),this.supportsBinary=!t.forceBase64}get name(){return"websocket"}doOpen(){if(!this.check())return;const t=this.uri(),n=this.opts.protocols,r=Kk?{}:nV(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(r.headers=this.opts.extraHeaders);try{this.ws=qk&&!Kk?n?new ev(t,n):new ev(t):new ev(t,n,r)}catch(i){return this.emitReserved("error",i)}this.ws.binaryType=this.socket.binaryType||M3e,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=t=>this.onClose({description:"websocket connection closed",context:t}),this.ws.onmessage=t=>this.onData(t.data),this.ws.onerror=t=>this.onError("websocket error",t)}write(t){this.writable=!1;for(let n=0;n{const s={};try{qk&&this.ws.send(o)}catch{}i&&JE(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){typeof this.ws<"u"&&(this.ws.close(),this.ws=null)}uri(){const t=this.opts.secure?"wss":"ws",n=this.query||{};return this.opts.timestampRequests&&(n[this.opts.timestampParam]=iV()),this.supportsBinary||(n.b64=1),this.createUri(t,n)}check(){return!!ev}}function L3e(e,t){return e.type==="message"&&typeof e.data!="string"&&t[0]>=48&&t[0]<=54}class D3e extends ZE{get name(){return"webtransport"}doOpen(){typeof WebTransport=="function"&&(this.transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name]),this.transport.closed.then(()=>{this.onClose()}).catch(t=>{this.onError("webtransport error",t)}),this.transport.ready.then(()=>{this.transport.createBidirectionalStream().then(t=>{const n=t.readable.getReader();this.writer=t.writable.getWriter();let r;const i=()=>{n.read().then(({done:s,value:a})=>{s||(!r&&a.byteLength===1&&a[0]===54?r=!0:(this.onPacket(v3e(a,r,"arraybuffer")),r=!1),i())}).catch(s=>{})};i();const o=this.query.sid?`0{"sid":"${this.query.sid}"}`:"0";this.writer.write(new TextEncoder().encode(o)).then(()=>this.onOpen())})}))}write(t){this.writable=!1;for(let n=0;n{L3e(r,o)&&this.writer.write(Uint8Array.of(54)),this.writer.write(o).then(()=>{i&&JE(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})})}}doClose(){var t;(t=this.transport)===null||t===void 0||t.close()}}const $3e={websocket:N3e,webtransport:D3e,polling:I3e},F3e=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,B3e=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function O5(e){const t=e,n=e.indexOf("["),r=e.indexOf("]");n!=-1&&r!=-1&&(e=e.substring(0,n)+e.substring(n,r).replace(/:/g,";")+e.substring(r,e.length));let i=F3e.exec(e||""),o={},s=14;for(;s--;)o[B3e[s]]=i[s]||"";return n!=-1&&r!=-1&&(o.source=t,o.host=o.host.substring(1,o.host.length-1).replace(/;/g,":"),o.authority=o.authority.replace("[","").replace("]","").replace(/;/g,":"),o.ipv6uri=!0),o.pathNames=U3e(o,o.path),o.queryKey=z3e(o,o.query),o}function U3e(e,t){const n=/\/{2,9}/g,r=t.replace(n,"/").split("/");return(t.slice(0,1)=="/"||t.length===0)&&r.splice(0,1),t.slice(-1)=="/"&&r.splice(r.length-1,1),r}function z3e(e,t){const n={};return t.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(r,i,o){i&&(n[i]=o)}),n}let aV=class Md extends nr{constructor(t,n={}){super(),this.writeBuffer=[],t&&typeof t=="object"&&(n=t,t=null),t?(t=O5(t),n.hostname=t.host,n.secure=t.protocol==="https"||t.protocol==="wss",n.port=t.port,t.query&&(n.query=t.query)):n.host&&(n.hostname=O5(n.host).host),u2(this,n),this.secure=n.secure!=null?n.secure:typeof location<"u"&&location.protocol==="https:",n.hostname&&!n.port&&(n.port=this.secure?"443":"80"),this.hostname=n.hostname||(typeof location<"u"?location.hostname:"localhost"),this.port=n.port||(typeof location<"u"&&location.port?location.port:this.secure?"443":"80"),this.transports=n.transports||["polling","websocket","webtransport"],this.writeBuffer=[],this.prevBufferLen=0,this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},n),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),typeof this.opts.query=="string"&&(this.opts.query=E3e(this.opts.query)),this.id=null,this.upgrades=null,this.pingInterval=null,this.pingTimeout=null,this.pingTimeoutTimer=null,typeof addEventListener=="function"&&(this.opts.closeOnBeforeunload&&(this.beforeunloadEventListener=()=>{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this.beforeunloadEventListener,!1)),this.hostname!=="localhost"&&(this.offlineEventListener=()=>{this.onClose("transport close",{description:"network connection lost"})},addEventListener("offline",this.offlineEventListener,!1))),this.open()}createTransport(t){const n=Object.assign({},this.opts.query);n.EIO=tV,n.transport=t,this.id&&(n.sid=this.id);const r=Object.assign({},this.opts,{query:n,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[t]);return new $3e[t](r)}open(){let t;if(this.opts.rememberUpgrade&&Md.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1)t="websocket";else if(this.transports.length===0){this.setTimeoutFn(()=>{this.emitReserved("error","No transports available")},0);return}else t=this.transports[0];this.readyState="opening";try{t=this.createTransport(t)}catch{this.transports.shift(),this.open();return}t.open(),this.setTransport(t)}setTransport(t){this.transport&&this.transport.removeAllListeners(),this.transport=t,t.on("drain",this.onDrain.bind(this)).on("packet",this.onPacket.bind(this)).on("error",this.onError.bind(this)).on("close",n=>this.onClose("transport close",n))}probe(t){let n=this.createTransport(t),r=!1;Md.priorWebsocketSuccess=!1;const i=()=>{r||(n.send([{type:"ping",data:"probe"}]),n.once("packet",f=>{if(!r)if(f.type==="pong"&&f.data==="probe"){if(this.upgrading=!0,this.emitReserved("upgrading",n),!n)return;Md.priorWebsocketSuccess=n.name==="websocket",this.transport.pause(()=>{r||this.readyState!=="closed"&&(d(),this.setTransport(n),n.send([{type:"upgrade"}]),this.emitReserved("upgrade",n),n=null,this.upgrading=!1,this.flush())})}else{const h=new Error("probe error");h.transport=n.name,this.emitReserved("upgradeError",h)}}))};function o(){r||(r=!0,d(),n.close(),n=null)}const s=f=>{const h=new Error("probe error: "+f);h.transport=n.name,o(),this.emitReserved("upgradeError",h)};function a(){s("transport closed")}function l(){s("socket closed")}function u(f){n&&f.name!==n.name&&o()}const d=()=>{n.removeListener("open",i),n.removeListener("error",s),n.removeListener("close",a),this.off("close",l),this.off("upgrading",u)};n.once("open",i),n.once("error",s),n.once("close",a),this.once("close",l),this.once("upgrading",u),this.upgrades.indexOf("webtransport")!==-1&&t!=="webtransport"?this.setTimeoutFn(()=>{r||n.open()},200):n.open()}onOpen(){if(this.readyState="open",Md.priorWebsocketSuccess=this.transport.name==="websocket",this.emitReserved("open"),this.flush(),this.readyState==="open"&&this.opts.upgrade){let t=0;const n=this.upgrades.length;for(;t{this.onClose("ping timeout")},this.pingInterval+this.pingTimeout),this.opts.autoUnref&&this.pingTimeoutTimer.unref()}onDrain(){this.writeBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,this.writeBuffer.length===0?this.emitReserved("drain"):this.flush()}flush(){if(this.readyState!=="closed"&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const t=this.getWritablePackets();this.transport.send(t),this.prevBufferLen=t.length,this.emitReserved("flush")}}getWritablePackets(){if(!(this.maxPayload&&this.transport.name==="polling"&&this.writeBuffer.length>1))return this.writeBuffer;let n=1;for(let r=0;r0&&n>this.maxPayload)return this.writeBuffer.slice(0,r);n+=2}return this.writeBuffer}write(t,n,r){return this.sendPacket("message",t,n,r),this}send(t,n,r){return this.sendPacket("message",t,n,r),this}sendPacket(t,n,r,i){if(typeof n=="function"&&(i=n,n=void 0),typeof r=="function"&&(i=r,r=null),this.readyState==="closing"||this.readyState==="closed")return;r=r||{},r.compress=r.compress!==!1;const o={type:t,data:n,options:r};this.emitReserved("packetCreate",o),this.writeBuffer.push(o),i&&this.once("flush",i),this.flush()}close(){const t=()=>{this.onClose("forced close"),this.transport.close()},n=()=>{this.off("upgrade",n),this.off("upgradeError",n),t()},r=()=>{this.once("upgrade",n),this.once("upgradeError",n)};return(this.readyState==="opening"||this.readyState==="open")&&(this.readyState="closing",this.writeBuffer.length?this.once("drain",()=>{this.upgrading?r():t()}):this.upgrading?r():t()),this}onError(t){Md.priorWebsocketSuccess=!1,this.emitReserved("error",t),this.onClose("transport error",t)}onClose(t,n){(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing")&&(this.clearTimeoutFn(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),typeof removeEventListener=="function"&&(removeEventListener("beforeunload",this.beforeunloadEventListener,!1),removeEventListener("offline",this.offlineEventListener,!1)),this.readyState="closed",this.id=null,this.emitReserved("close",t,n),this.writeBuffer=[],this.prevBufferLen=0)}filterUpgrades(t){const n=[];let r=0;const i=t.length;for(;rtypeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(e):e.buffer instanceof ArrayBuffer,lV=Object.prototype.toString,H3e=typeof Blob=="function"||typeof Blob<"u"&&lV.call(Blob)==="[object BlobConstructor]",W3e=typeof File=="function"||typeof File<"u"&&lV.call(File)==="[object FileConstructor]";function eA(e){return j3e&&(e instanceof ArrayBuffer||G3e(e))||H3e&&e instanceof Blob||W3e&&e instanceof File}function Dv(e,t){if(!e||typeof e!="object")return!1;if(Array.isArray(e)){for(let n=0,r=e.length;n=0&&e.num{delete this.acks[t];for(let s=0;s{this.io.clearTimeoutFn(o),n.apply(this,[null,...s])}}emitWithAck(t,...n){const r=this.flags.timeout!==void 0||this._opts.ackTimeout!==void 0;return new Promise((i,o)=>{n.push((s,a)=>r?s?o(s):i(a):i(s)),this.emit(t,...n)})}_addToQueue(t){let n;typeof t[t.length-1]=="function"&&(n=t.pop());const r={id:this._queueSeq++,tryCount:0,pending:!1,args:t,flags:Object.assign({fromQueue:!0},this.flags)};t.push((i,...o)=>r!==this._queue[0]?void 0:(i!==null?r.tryCount>this._opts.retries&&(this._queue.shift(),n&&n(i)):(this._queue.shift(),n&&n(null,...o)),r.pending=!1,this._drainQueue())),this._queue.push(r),this._drainQueue()}_drainQueue(t=!1){if(!this.connected||this._queue.length===0)return;const n=this._queue[0];n.pending&&!t||(n.pending=!0,n.tryCount++,this.flags=n.flags,this.emit.apply(this,n.args))}packet(t){t.nsp=this.nsp,this.io._packet(t)}onopen(){typeof this.auth=="function"?this.auth(t=>{this._sendConnectPacket(t)}):this._sendConnectPacket(this.auth)}_sendConnectPacket(t){this.packet({type:Tt.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},t):t})}onerror(t){this.connected||this.emitReserved("connect_error",t)}onclose(t,n){this.connected=!1,delete this.id,this.emitReserved("disconnect",t,n)}onpacket(t){if(t.nsp===this.nsp)switch(t.type){case Tt.CONNECT:t.data&&t.data.sid?this.onconnect(t.data.sid,t.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case Tt.EVENT:case Tt.BINARY_EVENT:this.onevent(t);break;case Tt.ACK:case Tt.BINARY_ACK:this.onack(t);break;case Tt.DISCONNECT:this.ondisconnect();break;case Tt.CONNECT_ERROR:this.destroy();const r=new Error(t.data.message);r.data=t.data.data,this.emitReserved("connect_error",r);break}}onevent(t){const n=t.data||[];t.id!=null&&n.push(this.ack(t.id)),this.connected?this.emitEvent(n):this.receiveBuffer.push(Object.freeze(n))}emitEvent(t){if(this._anyListeners&&this._anyListeners.length){const n=this._anyListeners.slice();for(const r of n)r.apply(this,t)}super.emit.apply(this,t),this._pid&&t.length&&typeof t[t.length-1]=="string"&&(this._lastOffset=t[t.length-1])}ack(t){const n=this;let r=!1;return function(...i){r||(r=!0,n.packet({type:Tt.ACK,id:t,data:i}))}}onack(t){const n=this.acks[t.id];typeof n=="function"&&(n.apply(this,t.data),delete this.acks[t.id])}onconnect(t,n){this.id=t,this.recovered=n&&this._pid===n,this._pid=n,this.connected=!0,this.emitBuffered(),this.emitReserved("connect"),this._drainQueue(!0)}emitBuffered(){this.receiveBuffer.forEach(t=>this.emitEvent(t)),this.receiveBuffer=[],this.sendBuffer.forEach(t=>{this.notifyOutgoingListeners(t),this.packet(t)}),this.sendBuffer=[]}ondisconnect(){this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach(t=>t()),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&this.packet({type:Tt.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(t){return this.flags.compress=t,this}get volatile(){return this.flags.volatile=!0,this}timeout(t){return this.flags.timeout=t,this}onAny(t){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(t),this}prependAny(t){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(t),this}offAny(t){if(!this._anyListeners)return this;if(t){const n=this._anyListeners;for(let r=0;r0&&e.jitter<=1?e.jitter:0,this.attempts=0}uh.prototype.duration=function(){var e=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var t=Math.random(),n=Math.floor(t*this.jitter*e);e=Math.floor(t*10)&1?e+n:e-n}return Math.min(e,this.max)|0};uh.prototype.reset=function(){this.attempts=0};uh.prototype.setMin=function(e){this.ms=e};uh.prototype.setMax=function(e){this.max=e};uh.prototype.setJitter=function(e){this.jitter=e};class M5 extends nr{constructor(t,n){var r;super(),this.nsps={},this.subs=[],t&&typeof t=="object"&&(n=t,t=void 0),n=n||{},n.path=n.path||"/socket.io",this.opts=n,u2(this,n),this.reconnection(n.reconnection!==!1),this.reconnectionAttempts(n.reconnectionAttempts||1/0),this.reconnectionDelay(n.reconnectionDelay||1e3),this.reconnectionDelayMax(n.reconnectionDelayMax||5e3),this.randomizationFactor((r=n.randomizationFactor)!==null&&r!==void 0?r:.5),this.backoff=new uh({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(n.timeout==null?2e4:n.timeout),this._readyState="closed",this.uri=t;const i=n.parser||J3e;this.encoder=new i.Encoder,this.decoder=new i.Decoder,this._autoConnect=n.autoConnect!==!1,this._autoConnect&&this.open()}reconnection(t){return arguments.length?(this._reconnection=!!t,this):this._reconnection}reconnectionAttempts(t){return t===void 0?this._reconnectionAttempts:(this._reconnectionAttempts=t,this)}reconnectionDelay(t){var n;return t===void 0?this._reconnectionDelay:(this._reconnectionDelay=t,(n=this.backoff)===null||n===void 0||n.setMin(t),this)}randomizationFactor(t){var n;return t===void 0?this._randomizationFactor:(this._randomizationFactor=t,(n=this.backoff)===null||n===void 0||n.setJitter(t),this)}reconnectionDelayMax(t){var n;return t===void 0?this._reconnectionDelayMax:(this._reconnectionDelayMax=t,(n=this.backoff)===null||n===void 0||n.setMax(t),this)}timeout(t){return arguments.length?(this._timeout=t,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&this.backoff.attempts===0&&this.reconnect()}open(t){if(~this._readyState.indexOf("open"))return this;this.engine=new aV(this.uri,this.opts);const n=this.engine,r=this;this._readyState="opening",this.skipReconnect=!1;const i=ts(n,"open",function(){r.onopen(),t&&t()}),o=a=>{this.cleanup(),this._readyState="closed",this.emitReserved("error",a),t?t(a):this.maybeReconnectOnOpen()},s=ts(n,"error",o);if(this._timeout!==!1){const a=this._timeout,l=this.setTimeoutFn(()=>{i(),o(new Error("timeout")),n.close()},a);this.opts.autoUnref&&l.unref(),this.subs.push(()=>{this.clearTimeoutFn(l)})}return this.subs.push(i),this.subs.push(s),this}connect(t){return this.open(t)}onopen(){this.cleanup(),this._readyState="open",this.emitReserved("open");const t=this.engine;this.subs.push(ts(t,"ping",this.onping.bind(this)),ts(t,"data",this.ondata.bind(this)),ts(t,"error",this.onerror.bind(this)),ts(t,"close",this.onclose.bind(this)),ts(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(t){try{this.decoder.add(t)}catch(n){this.onclose("parse error",n)}}ondecoded(t){JE(()=>{this.emitReserved("packet",t)},this.setTimeoutFn)}onerror(t){this.emitReserved("error",t)}socket(t,n){let r=this.nsps[t];return r?this._autoConnect&&!r.active&&r.connect():(r=new uV(this,t,n),this.nsps[t]=r),r}_destroy(t){const n=Object.keys(this.nsps);for(const r of n)if(this.nsps[r].active)return;this._close()}_packet(t){const n=this.encoder.encode(t);for(let r=0;rt()),this.subs.length=0,this.decoder.destroy()}_close(){this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close"),this.engine&&this.engine.close()}disconnect(){return this._close()}onclose(t,n){this.cleanup(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",t,n),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const t=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{const n=this.backoff.duration();this._reconnecting=!0;const r=this.setTimeoutFn(()=>{t.skipReconnect||(this.emitReserved("reconnect_attempt",t.backoff.attempts),!t.skipReconnect&&t.open(i=>{i?(t._reconnecting=!1,t.reconnect(),this.emitReserved("reconnect_error",i)):t.onreconnect()}))},n);this.opts.autoUnref&&r.unref(),this.subs.push(()=>{this.clearTimeoutFn(r)})}}onreconnect(){const t=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",t)}}const yp={};function $v(e,t){typeof e=="object"&&(t=e,e=void 0),t=t||{};const n=V3e(e,t.path||"/socket.io"),r=n.source,i=n.id,o=n.path,s=yp[i]&&o in yp[i].nsps,a=t.forceNew||t["force new connection"]||t.multiplex===!1||s;let l;return a?l=new M5(r,t):(yp[i]||(yp[i]=new M5(r,t)),l=yp[i]),n.query&&!t.query&&(t.query=n.queryKey),l.socket(n.path,t)}Object.assign($v,{Manager:M5,Socket:uV,io:$v,connect:$v});const Yk=()=>{let e=!1,n=`${window.location.protocol==="https:"?"wss":"ws"}://${window.location.host}`;const r={timeout:6e4,path:"/ws/socket.io",autoConnect:!1};if(["nodes","package"].includes("production")){const s=$g.get();s&&(n=s.replace(/^https?\:\/\//i,""));const a=Dg.get();a&&(r.auth={token:a}),r.transports=["websocket","polling"]}const i=$v(n,r);return s=>a=>l=>{const{dispatch:u,getState:d}=s;if(e||(c3e({storeApi:s,socket:i}),e=!0,i.connect()),jr.fulfilled.match(l)){const f=l.payload.id,h=d().system.sessionId;h&&(i.emit("unsubscribe",{session:h}),u(fF({sessionId:h}))),i.emit("subscribe",{session:f}),u(YT({sessionId:f}))}a(l)}};function t5e(e){if(e.sheet)return e.sheet;for(var t=0;t0?Ur(ch,--Ui):0,Hf--,Qn===10&&(Hf=1,d2--),Qn}function to(){return Qn=Ui2||Jg(Qn)>3?"":" "}function p5e(e,t){for(;--t&&to()&&!(Qn<48||Qn>102||Qn>57&&Qn<65||Qn>70&&Qn<97););return qm(e,Fv()+(t<6&&Ws()==32&&to()==32))}function L5(e){for(;to();)switch(Qn){case e:return Ui;case 34:case 39:e!==34&&e!==39&&L5(Qn);break;case 40:e===41&&L5(e);break;case 92:to();break}return Ui}function g5e(e,t){for(;to()&&e+Qn!==47+10;)if(e+Qn===42+42&&Ws()===47)break;return"/*"+qm(t,Ui-1)+"*"+c2(e===47?e:to())}function m5e(e){for(;!Jg(Ws());)to();return qm(e,Ui)}function y5e(e){return gV(Uv("",null,null,null,[""],e=pV(e),0,[0],e))}function Uv(e,t,n,r,i,o,s,a,l){for(var u=0,d=0,f=s,h=0,g=0,m=0,v=1,x=1,_=1,b=0,y="",S=i,C=o,T=r,E=y;x;)switch(m=b,b=to()){case 40:if(m!=108&&Ur(E,f-1)==58){N5(E+=$t(Bv(b),"&","&\f"),"&\f")!=-1&&(_=-1);break}case 34:case 39:case 91:E+=Bv(b);break;case 9:case 10:case 13:case 32:E+=h5e(m);break;case 92:E+=p5e(Fv()-1,7);continue;case 47:switch(Ws()){case 42:case 47:tv(v5e(g5e(to(),Fv()),t,n),l);break;default:E+="/"}break;case 123*v:a[u++]=Os(E)*_;case 125*v:case 59:case 0:switch(b){case 0:case 125:x=0;case 59+d:_==-1&&(E=$t(E,/\f/g,"")),g>0&&Os(E)-f&&tv(g>32?Zk(E+";",r,n,f-1):Zk($t(E," ","")+";",r,n,f-2),l);break;case 59:E+=";";default:if(tv(T=Qk(E,t,n,u,d,i,a,y,S=[],C=[],f),o),b===123)if(d===0)Uv(E,t,T,T,S,o,f,a,C);else switch(h===99&&Ur(E,3)===110?100:h){case 100:case 108:case 109:case 115:Uv(e,T,T,r&&tv(Qk(e,T,T,0,0,i,a,y,i,S=[],f),C),i,C,f,a,r?S:C);break;default:Uv(E,T,T,T,[""],C,0,a,C)}}u=d=g=0,v=_=1,y=E="",f=s;break;case 58:f=1+Os(E),g=m;default:if(v<1){if(b==123)--v;else if(b==125&&v++==0&&f5e()==125)continue}switch(E+=c2(b),b*v){case 38:_=d>0?1:(E+="\f",-1);break;case 44:a[u++]=(Os(E)-1)*_,_=1;break;case 64:Ws()===45&&(E+=Bv(to())),h=Ws(),d=f=Os(y=E+=m5e(Fv())),b++;break;case 45:m===45&&Os(E)==2&&(v=0)}}return o}function Qk(e,t,n,r,i,o,s,a,l,u,d){for(var f=i-1,h=i===0?o:[""],g=iA(h),m=0,v=0,x=0;m0?h[_]+" "+b:$t(b,/&\f/g,h[_])))&&(l[x++]=y);return f2(e,t,n,i===0?nA:a,l,u,d)}function v5e(e,t,n){return f2(e,t,n,cV,c2(d5e()),Zg(e,2,-2),0)}function Zk(e,t,n,r){return f2(e,t,n,rA,Zg(e,0,r),Zg(e,r+1,-1),r)}function Sf(e,t){for(var n="",r=iA(e),i=0;i6)switch(Ur(e,t+1)){case 109:if(Ur(e,t+4)!==45)break;case 102:return $t(e,/(.+:)(.+)-([^]+)/,"$1"+Dt+"$2-$3$1"+m_+(Ur(e,t+3)==108?"$3":"$2-$3"))+e;case 115:return~N5(e,"stretch")?yV($t(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(Ur(e,t+1)!==115)break;case 6444:switch(Ur(e,Os(e)-3-(~N5(e,"!important")&&10))){case 107:return $t(e,":",":"+Dt)+e;case 101:return $t(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+Dt+(Ur(e,14)===45?"inline-":"")+"box$3$1"+Dt+"$2$3$1"+Yr+"$2box$3")+e}break;case 5936:switch(Ur(e,t+11)){case 114:return Dt+e+Yr+$t(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return Dt+e+Yr+$t(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return Dt+e+Yr+$t(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return Dt+e+Yr+e+e}return e}var A5e=function(t,n,r,i){if(t.length>-1&&!t.return)switch(t.type){case rA:t.return=yV(t.value,t.length);break;case dV:return Sf([vp(t,{value:$t(t.value,"@","@"+Dt)})],i);case nA:if(t.length)return c5e(t.props,function(o){switch(u5e(o,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return Sf([vp(t,{props:[$t(o,/:(read-\w+)/,":"+m_+"$1")]})],i);case"::placeholder":return Sf([vp(t,{props:[$t(o,/:(plac\w+)/,":"+Dt+"input-$1")]}),vp(t,{props:[$t(o,/:(plac\w+)/,":"+m_+"$1")]}),vp(t,{props:[$t(o,/:(plac\w+)/,Yr+"input-$1")]})],i)}return""})}},P5e=[A5e],R5e=function(t){var n=t.key;if(n==="css"){var r=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(r,function(v){var x=v.getAttribute("data-emotion");x.indexOf(" ")!==-1&&(document.head.appendChild(v),v.setAttribute("data-s",""))})}var i=t.stylisPlugins||P5e,o={},s,a=[];s=t.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+n+' "]'),function(v){for(var x=v.getAttribute("data-emotion").split(" "),_=1;_=4;++r,i-=4)n=e.charCodeAt(r)&255|(e.charCodeAt(++r)&255)<<8|(e.charCodeAt(++r)&255)<<16|(e.charCodeAt(++r)&255)<<24,n=(n&65535)*1540483477+((n>>>16)*59797<<16),n^=n>>>24,t=(n&65535)*1540483477+((n>>>16)*59797<<16)^(t&65535)*1540483477+((t>>>16)*59797<<16);switch(i){case 3:t^=(e.charCodeAt(r+2)&255)<<16;case 2:t^=(e.charCodeAt(r+1)&255)<<8;case 1:t^=e.charCodeAt(r)&255,t=(t&65535)*1540483477+((t>>>16)*59797<<16)}return t^=t>>>13,t=(t&65535)*1540483477+((t>>>16)*59797<<16),((t^t>>>15)>>>0).toString(36)}var M5e={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},N5e=/[A-Z]|^ms/g,L5e=/_EMO_([^_]+?)_([^]*?)_EMO_/g,bV=function(t){return t.charCodeAt(1)===45},tI=function(t){return t!=null&&typeof t!="boolean"},sC=mV(function(e){return bV(e)?e:e.replace(N5e,"-$&").toLowerCase()}),nI=function(t,n){switch(t){case"animation":case"animationName":if(typeof n=="string")return n.replace(L5e,function(r,i,o){return ks={name:i,styles:o,next:ks},i})}return M5e[t]!==1&&!bV(t)&&typeof n=="number"&&n!==0?n+"px":n};function em(e,t,n){if(n==null)return"";if(n.__emotion_styles!==void 0)return n;switch(typeof n){case"boolean":return"";case"object":{if(n.anim===1)return ks={name:n.name,styles:n.styles,next:ks},n.name;if(n.styles!==void 0){var r=n.next;if(r!==void 0)for(;r!==void 0;)ks={name:r.name,styles:r.styles,next:ks},r=r.next;var i=n.styles+";";return i}return D5e(e,t,n)}case"function":{if(e!==void 0){var o=ks,s=n(e);return ks=o,em(e,t,s)}break}}if(t==null)return n;var a=t[n];return a!==void 0?a:n}function D5e(e,t,n){var r="";if(Array.isArray(n))for(var i=0;i` or ``");return e}var TV=L.createContext({});TV.displayName="ColorModeContext";function sA(){const e=L.useContext(TV);if(e===void 0)throw new Error("useColorMode must be used within a ColorModeProvider");return e}function MMe(e,t){const{colorMode:n}=sA();return n==="dark"?t:e}function G5e(){const e=sA(),t=CV();return{...e,theme:t}}function H5e(e,t,n){var r,i;if(t==null)return t;const o=s=>{var a,l;return(l=(a=e.__breakpoints)==null?void 0:a.asArray)==null?void 0:l[s]};return(i=(r=o(t))!=null?r:o(n))!=null?i:n}function W5e(e,t,n){var r,i;if(t==null)return t;const o=s=>{var a,l;return(l=(a=e.__cssMap)==null?void 0:a[s])==null?void 0:l.value};return(i=(r=o(t))!=null?r:o(n))!=null?i:n}function NMe(e,t,n){const r=CV();return q5e(e,t,n)(r)}function q5e(e,t,n){const r=Array.isArray(t)?t:[t],i=Array.isArray(n)?n:[n];return o=>{const s=i.filter(Boolean),a=r.map((l,u)=>{var d,f;if(e==="breakpoints")return H5e(o,l,(d=s[u])!=null?d:l);const h=`${e}.${l}`;return W5e(o,h,(f=s[u])!=null?f:l)});return Array.isArray(t)?a:a[0]}}var EV=(...e)=>e.filter(Boolean).join(" ");function K5e(){return!1}function La(e){const t=typeof e;return e!=null&&(t==="object"||t==="function")&&!Array.isArray(e)}var LMe=e=>{const{condition:t,message:n}=e;t&&K5e()&&console.warn(n)};function Ju(e,...t){return X5e(e)?e(...t):e}var X5e=e=>typeof e=="function",DMe=e=>e?"":void 0,$Me=e=>e?!0:void 0;function FMe(...e){return function(n){e.some(r=>(r==null||r(n),n==null?void 0:n.defaultPrevented))}}function BMe(...e){return function(n){e.forEach(r=>{r==null||r(n)})}}var y_={exports:{}};y_.exports;(function(e,t){var n=200,r="__lodash_hash_undefined__",i=800,o=16,s=9007199254740991,a="[object Arguments]",l="[object Array]",u="[object AsyncFunction]",d="[object Boolean]",f="[object Date]",h="[object Error]",g="[object Function]",m="[object GeneratorFunction]",v="[object Map]",x="[object Number]",_="[object Null]",b="[object Object]",y="[object Proxy]",S="[object RegExp]",C="[object Set]",T="[object String]",E="[object Undefined]",P="[object WeakMap]",k="[object ArrayBuffer]",O="[object DataView]",M="[object Float32Array]",V="[object Float64Array]",B="[object Int8Array]",A="[object Int16Array]",N="[object Int32Array]",D="[object Uint8Array]",U="[object Uint8ClampedArray]",$="[object Uint16Array]",j="[object Uint32Array]",G=/[\\^$.*+?()[\]{}|]/g,q=/^\[object .+?Constructor\]$/,Z=/^(?:0|[1-9]\d*)$/,ee={};ee[M]=ee[V]=ee[B]=ee[A]=ee[N]=ee[D]=ee[U]=ee[$]=ee[j]=!0,ee[a]=ee[l]=ee[k]=ee[d]=ee[O]=ee[f]=ee[h]=ee[g]=ee[v]=ee[x]=ee[b]=ee[S]=ee[C]=ee[T]=ee[P]=!1;var ie=typeof Ze=="object"&&Ze&&Ze.Object===Object&&Ze,se=typeof self=="object"&&self&&self.Object===Object&&self,le=ie||se||Function("return this")(),W=t&&!t.nodeType&&t,ne=W&&!0&&e&&!e.nodeType&&e,fe=ne&&ne.exports===W,pe=fe&&ie.process,ve=function(){try{var H=ne&&ne.require&&ne.require("util").types;return H||pe&&pe.binding&&pe.binding("util")}catch{}}(),ye=ve&&ve.isTypedArray;function Je(H,Y,re){switch(re.length){case 0:return H.call(Y);case 1:return H.call(Y,re[0]);case 2:return H.call(Y,re[0],re[1]);case 3:return H.call(Y,re[0],re[1],re[2])}return H.apply(Y,re)}function Fe(H,Y){for(var re=-1,xe=Array(H);++re-1}function Vo(H,Y){var re=this.__data__,xe=Go(re,H);return xe<0?(++this.size,re.push([H,Y])):re[xe][1]=Y,this}sr.prototype.clear=ji,sr.prototype.delete=bs,sr.prototype.get=fo,sr.prototype.has=tl,sr.prototype.set=Vo;function Mr(H){var Y=-1,re=H==null?0:H.length;for(this.clear();++Y1?re[pt-1]:void 0,et=pt>2?re[2]:void 0;for(Ut=H.length>3&&typeof Ut=="function"?(pt--,Ut):void 0,et&&dy(re[0],re[1],et)&&(Ut=pt<3?void 0:Ut,pt=1),Y=Object(Y);++xe-1&&H%1==0&&H0){if(++Y>=i)return arguments[0]}else Y=0;return H.apply(void 0,arguments)}}function my(H){if(H!=null){try{return At.call(H)}catch{}try{return H+""}catch{}}return""}function Yc(H,Y){return H===Y||H!==H&&Y!==Y}var Ph=Cu(function(){return arguments}())?Cu:function(H){return Tu(H)&&un.call(H,"callee")&&!si.call(H,"callee")},Rh=Array.isArray;function Qc(H){return H!=null&&vy(H.length)&&!Oh(H)}function I2(H){return Tu(H)&&Qc(H)}var yy=ra||L2;function Oh(H){if(!Ho(H))return!1;var Y=rl(H);return Y==g||Y==m||Y==u||Y==y}function vy(H){return typeof H=="number"&&H>-1&&H%1==0&&H<=s}function Ho(H){var Y=typeof H;return H!=null&&(Y=="object"||Y=="function")}function Tu(H){return H!=null&&typeof H=="object"}function M2(H){if(!Tu(H)||rl(H)!=b)return!1;var Y=Rr(H);if(Y===null)return!0;var re=un.call(Y,"constructor")&&Y.constructor;return typeof re=="function"&&re instanceof re&&At.call(re)==Ci}var _y=ye?Ae(ye):il;function N2(H){return ay(H,by(H))}function by(H){return Qc(H)?Sh(H,!0):A2(H)}var Jt=Wc(function(H,Y,re,xe){ry(H,Y,re,xe)});function Kt(H){return function(){return H}}function Sy(H){return H}function L2(){return!1}e.exports=Jt})(y_,y_.exports);var Y5e=y_.exports;const Us=Tc(Y5e);var Q5e=e=>/!(important)?$/.test(e),oI=e=>typeof e=="string"?e.replace(/!(important)?$/,"").trim():e,Z5e=(e,t)=>n=>{const r=String(t),i=Q5e(r),o=oI(r),s=e?`${e}.${o}`:o;let a=La(n.__cssMap)&&s in n.__cssMap?n.__cssMap[s].varRef:t;return a=oI(a),i?`${a} !important`:a};function aA(e){const{scale:t,transform:n,compose:r}=e;return(o,s)=>{var a;const l=Z5e(t,o)(s);let u=(a=n==null?void 0:n(l,s))!=null?a:l;return r&&(u=r(u,s)),u}}var nv=(...e)=>t=>e.reduce((n,r)=>r(n),t);function So(e,t){return n=>{const r={property:n,scale:e};return r.transform=aA({scale:e,transform:t}),r}}var J5e=({rtl:e,ltr:t})=>n=>n.direction==="rtl"?e:t;function e4e(e){const{property:t,scale:n,transform:r}=e;return{scale:n,property:J5e(t),transform:n?aA({scale:n,compose:r}):r}}var AV=["rotate(var(--chakra-rotate, 0))","scaleX(var(--chakra-scale-x, 1))","scaleY(var(--chakra-scale-y, 1))","skewX(var(--chakra-skew-x, 0))","skewY(var(--chakra-skew-y, 0))"];function t4e(){return["translateX(var(--chakra-translate-x, 0))","translateY(var(--chakra-translate-y, 0))",...AV].join(" ")}function n4e(){return["translate3d(var(--chakra-translate-x, 0), var(--chakra-translate-y, 0), 0)",...AV].join(" ")}var r4e={"--chakra-blur":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-brightness":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-contrast":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-grayscale":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-hue-rotate":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-invert":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-saturate":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-sepia":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-drop-shadow":"var(--chakra-empty,/*!*/ /*!*/)",filter:["var(--chakra-blur)","var(--chakra-brightness)","var(--chakra-contrast)","var(--chakra-grayscale)","var(--chakra-hue-rotate)","var(--chakra-invert)","var(--chakra-saturate)","var(--chakra-sepia)","var(--chakra-drop-shadow)"].join(" ")},i4e={backdropFilter:["var(--chakra-backdrop-blur)","var(--chakra-backdrop-brightness)","var(--chakra-backdrop-contrast)","var(--chakra-backdrop-grayscale)","var(--chakra-backdrop-hue-rotate)","var(--chakra-backdrop-invert)","var(--chakra-backdrop-opacity)","var(--chakra-backdrop-saturate)","var(--chakra-backdrop-sepia)"].join(" "),"--chakra-backdrop-blur":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-brightness":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-contrast":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-grayscale":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-hue-rotate":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-invert":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-opacity":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-saturate":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-sepia":"var(--chakra-empty,/*!*/ /*!*/)"};function o4e(e){return{"--chakra-ring-offset-shadow":"var(--chakra-ring-inset) 0 0 0 var(--chakra-ring-offset-width) var(--chakra-ring-offset-color)","--chakra-ring-shadow":"var(--chakra-ring-inset) 0 0 0 calc(var(--chakra-ring-width) + var(--chakra-ring-offset-width)) var(--chakra-ring-color)","--chakra-ring-width":e,boxShadow:["var(--chakra-ring-offset-shadow)","var(--chakra-ring-shadow)","var(--chakra-shadow, 0 0 #0000)"].join(", ")}}var s4e={"row-reverse":{space:"--chakra-space-x-reverse",divide:"--chakra-divide-x-reverse"},"column-reverse":{space:"--chakra-space-y-reverse",divide:"--chakra-divide-y-reverse"}},D5={"to-t":"to top","to-tr":"to top right","to-r":"to right","to-br":"to bottom right","to-b":"to bottom","to-bl":"to bottom left","to-l":"to left","to-tl":"to top left"},a4e=new Set(Object.values(D5)),$5=new Set(["none","-moz-initial","inherit","initial","revert","unset"]),l4e=e=>e.trim();function u4e(e,t){if(e==null||$5.has(e))return e;if(!(F5(e)||$5.has(e)))return`url('${e}')`;const i=/(^[a-z-A-Z]+)\((.*)\)/g.exec(e),o=i==null?void 0:i[1],s=i==null?void 0:i[2];if(!o||!s)return e;const a=o.includes("-gradient")?o:`${o}-gradient`,[l,...u]=s.split(",").map(l4e).filter(Boolean);if((u==null?void 0:u.length)===0)return e;const d=l in D5?D5[l]:l;u.unshift(d);const f=u.map(h=>{if(a4e.has(h))return h;const g=h.indexOf(" "),[m,v]=g!==-1?[h.substr(0,g),h.substr(g+1)]:[h],x=F5(v)?v:v&&v.split(" "),_=`colors.${m}`,b=_ in t.__cssMap?t.__cssMap[_].varRef:m;return x?[b,...Array.isArray(x)?x:[x]].join(" "):b});return`${a}(${f.join(", ")})`}var F5=e=>typeof e=="string"&&e.includes("(")&&e.includes(")"),c4e=(e,t)=>u4e(e,t??{});function d4e(e){return/^var\(--.+\)$/.test(e)}var f4e=e=>{const t=parseFloat(e.toString()),n=e.toString().replace(String(t),"");return{unitless:!n,value:t,unit:n}},Es=e=>t=>`${e}(${t})`,Ot={filter(e){return e!=="auto"?e:r4e},backdropFilter(e){return e!=="auto"?e:i4e},ring(e){return o4e(Ot.px(e))},bgClip(e){return e==="text"?{color:"transparent",backgroundClip:"text"}:{backgroundClip:e}},transform(e){return e==="auto"?t4e():e==="auto-gpu"?n4e():e},vh(e){return e==="$100vh"?"var(--chakra-vh)":e},px(e){if(e==null)return e;const{unitless:t}=f4e(e);return t||typeof e=="number"?`${e}px`:e},fraction(e){return typeof e!="number"||e>1?e:`${e*100}%`},float(e,t){const n={left:"right",right:"left"};return t.direction==="rtl"?n[e]:e},degree(e){if(d4e(e)||e==null)return e;const t=typeof e=="string"&&!e.endsWith("deg");return typeof e=="number"||t?`${e}deg`:e},gradient:c4e,blur:Es("blur"),opacity:Es("opacity"),brightness:Es("brightness"),contrast:Es("contrast"),dropShadow:Es("drop-shadow"),grayscale:Es("grayscale"),hueRotate:Es("hue-rotate"),invert:Es("invert"),saturate:Es("saturate"),sepia:Es("sepia"),bgImage(e){return e==null||F5(e)||$5.has(e)?e:`url(${e})`},outline(e){const t=String(e)==="0"||String(e)==="none";return e!==null&&t?{outline:"2px solid transparent",outlineOffset:"2px"}:{outline:e}},flexDirection(e){var t;const{space:n,divide:r}=(t=s4e[e])!=null?t:{},i={flexDirection:e};return n&&(i[n]=1),r&&(i[r]=1),i}},Q={borderWidths:So("borderWidths"),borderStyles:So("borderStyles"),colors:So("colors"),borders:So("borders"),gradients:So("gradients",Ot.gradient),radii:So("radii",Ot.px),space:So("space",nv(Ot.vh,Ot.px)),spaceT:So("space",nv(Ot.vh,Ot.px)),degreeT(e){return{property:e,transform:Ot.degree}},prop(e,t,n){return{property:e,scale:t,...t&&{transform:aA({scale:t,transform:n})}}},propT(e,t){return{property:e,transform:t}},sizes:So("sizes",nv(Ot.vh,Ot.px)),sizesT:So("sizes",nv(Ot.vh,Ot.fraction)),shadows:So("shadows"),logical:e4e,blur:So("blur",Ot.blur)},zv={background:Q.colors("background"),backgroundColor:Q.colors("backgroundColor"),backgroundImage:Q.gradients("backgroundImage"),backgroundSize:!0,backgroundPosition:!0,backgroundRepeat:!0,backgroundAttachment:!0,backgroundClip:{transform:Ot.bgClip},bgSize:Q.prop("backgroundSize"),bgPosition:Q.prop("backgroundPosition"),bg:Q.colors("background"),bgColor:Q.colors("backgroundColor"),bgPos:Q.prop("backgroundPosition"),bgRepeat:Q.prop("backgroundRepeat"),bgAttachment:Q.prop("backgroundAttachment"),bgGradient:Q.gradients("backgroundImage"),bgClip:{transform:Ot.bgClip}};Object.assign(zv,{bgImage:zv.backgroundImage,bgImg:zv.backgroundImage});var Lt={border:Q.borders("border"),borderWidth:Q.borderWidths("borderWidth"),borderStyle:Q.borderStyles("borderStyle"),borderColor:Q.colors("borderColor"),borderRadius:Q.radii("borderRadius"),borderTop:Q.borders("borderTop"),borderBlockStart:Q.borders("borderBlockStart"),borderTopLeftRadius:Q.radii("borderTopLeftRadius"),borderStartStartRadius:Q.logical({scale:"radii",property:{ltr:"borderTopLeftRadius",rtl:"borderTopRightRadius"}}),borderEndStartRadius:Q.logical({scale:"radii",property:{ltr:"borderBottomLeftRadius",rtl:"borderBottomRightRadius"}}),borderTopRightRadius:Q.radii("borderTopRightRadius"),borderStartEndRadius:Q.logical({scale:"radii",property:{ltr:"borderTopRightRadius",rtl:"borderTopLeftRadius"}}),borderEndEndRadius:Q.logical({scale:"radii",property:{ltr:"borderBottomRightRadius",rtl:"borderBottomLeftRadius"}}),borderRight:Q.borders("borderRight"),borderInlineEnd:Q.borders("borderInlineEnd"),borderBottom:Q.borders("borderBottom"),borderBlockEnd:Q.borders("borderBlockEnd"),borderBottomLeftRadius:Q.radii("borderBottomLeftRadius"),borderBottomRightRadius:Q.radii("borderBottomRightRadius"),borderLeft:Q.borders("borderLeft"),borderInlineStart:{property:"borderInlineStart",scale:"borders"},borderInlineStartRadius:Q.logical({scale:"radii",property:{ltr:["borderTopLeftRadius","borderBottomLeftRadius"],rtl:["borderTopRightRadius","borderBottomRightRadius"]}}),borderInlineEndRadius:Q.logical({scale:"radii",property:{ltr:["borderTopRightRadius","borderBottomRightRadius"],rtl:["borderTopLeftRadius","borderBottomLeftRadius"]}}),borderX:Q.borders(["borderLeft","borderRight"]),borderInline:Q.borders("borderInline"),borderY:Q.borders(["borderTop","borderBottom"]),borderBlock:Q.borders("borderBlock"),borderTopWidth:Q.borderWidths("borderTopWidth"),borderBlockStartWidth:Q.borderWidths("borderBlockStartWidth"),borderTopColor:Q.colors("borderTopColor"),borderBlockStartColor:Q.colors("borderBlockStartColor"),borderTopStyle:Q.borderStyles("borderTopStyle"),borderBlockStartStyle:Q.borderStyles("borderBlockStartStyle"),borderBottomWidth:Q.borderWidths("borderBottomWidth"),borderBlockEndWidth:Q.borderWidths("borderBlockEndWidth"),borderBottomColor:Q.colors("borderBottomColor"),borderBlockEndColor:Q.colors("borderBlockEndColor"),borderBottomStyle:Q.borderStyles("borderBottomStyle"),borderBlockEndStyle:Q.borderStyles("borderBlockEndStyle"),borderLeftWidth:Q.borderWidths("borderLeftWidth"),borderInlineStartWidth:Q.borderWidths("borderInlineStartWidth"),borderLeftColor:Q.colors("borderLeftColor"),borderInlineStartColor:Q.colors("borderInlineStartColor"),borderLeftStyle:Q.borderStyles("borderLeftStyle"),borderInlineStartStyle:Q.borderStyles("borderInlineStartStyle"),borderRightWidth:Q.borderWidths("borderRightWidth"),borderInlineEndWidth:Q.borderWidths("borderInlineEndWidth"),borderRightColor:Q.colors("borderRightColor"),borderInlineEndColor:Q.colors("borderInlineEndColor"),borderRightStyle:Q.borderStyles("borderRightStyle"),borderInlineEndStyle:Q.borderStyles("borderInlineEndStyle"),borderTopRadius:Q.radii(["borderTopLeftRadius","borderTopRightRadius"]),borderBottomRadius:Q.radii(["borderBottomLeftRadius","borderBottomRightRadius"]),borderLeftRadius:Q.radii(["borderTopLeftRadius","borderBottomLeftRadius"]),borderRightRadius:Q.radii(["borderTopRightRadius","borderBottomRightRadius"])};Object.assign(Lt,{rounded:Lt.borderRadius,roundedTop:Lt.borderTopRadius,roundedTopLeft:Lt.borderTopLeftRadius,roundedTopRight:Lt.borderTopRightRadius,roundedTopStart:Lt.borderStartStartRadius,roundedTopEnd:Lt.borderStartEndRadius,roundedBottom:Lt.borderBottomRadius,roundedBottomLeft:Lt.borderBottomLeftRadius,roundedBottomRight:Lt.borderBottomRightRadius,roundedBottomStart:Lt.borderEndStartRadius,roundedBottomEnd:Lt.borderEndEndRadius,roundedLeft:Lt.borderLeftRadius,roundedRight:Lt.borderRightRadius,roundedStart:Lt.borderInlineStartRadius,roundedEnd:Lt.borderInlineEndRadius,borderStart:Lt.borderInlineStart,borderEnd:Lt.borderInlineEnd,borderTopStartRadius:Lt.borderStartStartRadius,borderTopEndRadius:Lt.borderStartEndRadius,borderBottomStartRadius:Lt.borderEndStartRadius,borderBottomEndRadius:Lt.borderEndEndRadius,borderStartRadius:Lt.borderInlineStartRadius,borderEndRadius:Lt.borderInlineEndRadius,borderStartWidth:Lt.borderInlineStartWidth,borderEndWidth:Lt.borderInlineEndWidth,borderStartColor:Lt.borderInlineStartColor,borderEndColor:Lt.borderInlineEndColor,borderStartStyle:Lt.borderInlineStartStyle,borderEndStyle:Lt.borderInlineEndStyle});var h4e={color:Q.colors("color"),textColor:Q.colors("color"),fill:Q.colors("fill"),stroke:Q.colors("stroke")},B5={boxShadow:Q.shadows("boxShadow"),mixBlendMode:!0,blendMode:Q.prop("mixBlendMode"),backgroundBlendMode:!0,bgBlendMode:Q.prop("backgroundBlendMode"),opacity:!0};Object.assign(B5,{shadow:B5.boxShadow});var p4e={filter:{transform:Ot.filter},blur:Q.blur("--chakra-blur"),brightness:Q.propT("--chakra-brightness",Ot.brightness),contrast:Q.propT("--chakra-contrast",Ot.contrast),hueRotate:Q.degreeT("--chakra-hue-rotate"),invert:Q.propT("--chakra-invert",Ot.invert),saturate:Q.propT("--chakra-saturate",Ot.saturate),dropShadow:Q.propT("--chakra-drop-shadow",Ot.dropShadow),backdropFilter:{transform:Ot.backdropFilter},backdropBlur:Q.blur("--chakra-backdrop-blur"),backdropBrightness:Q.propT("--chakra-backdrop-brightness",Ot.brightness),backdropContrast:Q.propT("--chakra-backdrop-contrast",Ot.contrast),backdropHueRotate:Q.degreeT("--chakra-backdrop-hue-rotate"),backdropInvert:Q.propT("--chakra-backdrop-invert",Ot.invert),backdropSaturate:Q.propT("--chakra-backdrop-saturate",Ot.saturate)},v_={alignItems:!0,alignContent:!0,justifyItems:!0,justifyContent:!0,flexWrap:!0,flexDirection:{transform:Ot.flexDirection},flex:!0,flexFlow:!0,flexGrow:!0,flexShrink:!0,flexBasis:Q.sizes("flexBasis"),justifySelf:!0,alignSelf:!0,order:!0,placeItems:!0,placeContent:!0,placeSelf:!0,gap:Q.space("gap"),rowGap:Q.space("rowGap"),columnGap:Q.space("columnGap")};Object.assign(v_,{flexDir:v_.flexDirection});var PV={gridGap:Q.space("gridGap"),gridColumnGap:Q.space("gridColumnGap"),gridRowGap:Q.space("gridRowGap"),gridColumn:!0,gridRow:!0,gridAutoFlow:!0,gridAutoColumns:!0,gridColumnStart:!0,gridColumnEnd:!0,gridRowStart:!0,gridRowEnd:!0,gridAutoRows:!0,gridTemplate:!0,gridTemplateColumns:!0,gridTemplateRows:!0,gridTemplateAreas:!0,gridArea:!0},g4e={appearance:!0,cursor:!0,resize:!0,userSelect:!0,pointerEvents:!0,outline:{transform:Ot.outline},outlineOffset:!0,outlineColor:Q.colors("outlineColor")},xo={width:Q.sizesT("width"),inlineSize:Q.sizesT("inlineSize"),height:Q.sizes("height"),blockSize:Q.sizes("blockSize"),boxSize:Q.sizes(["width","height"]),minWidth:Q.sizes("minWidth"),minInlineSize:Q.sizes("minInlineSize"),minHeight:Q.sizes("minHeight"),minBlockSize:Q.sizes("minBlockSize"),maxWidth:Q.sizes("maxWidth"),maxInlineSize:Q.sizes("maxInlineSize"),maxHeight:Q.sizes("maxHeight"),maxBlockSize:Q.sizes("maxBlockSize"),overflow:!0,overflowX:!0,overflowY:!0,overscrollBehavior:!0,overscrollBehaviorX:!0,overscrollBehaviorY:!0,display:!0,aspectRatio:!0,hideFrom:{scale:"breakpoints",transform:(e,t)=>{var n,r,i;return{[`@media screen and (min-width: ${(i=(r=(n=t.__breakpoints)==null?void 0:n.get(e))==null?void 0:r.minW)!=null?i:e})`]:{display:"none"}}}},hideBelow:{scale:"breakpoints",transform:(e,t)=>{var n,r,i;return{[`@media screen and (max-width: ${(i=(r=(n=t.__breakpoints)==null?void 0:n.get(e))==null?void 0:r._minW)!=null?i:e})`]:{display:"none"}}}},verticalAlign:!0,boxSizing:!0,boxDecorationBreak:!0,float:Q.propT("float",Ot.float),objectFit:!0,objectPosition:!0,visibility:!0,isolation:!0};Object.assign(xo,{w:xo.width,h:xo.height,minW:xo.minWidth,maxW:xo.maxWidth,minH:xo.minHeight,maxH:xo.maxHeight,overscroll:xo.overscrollBehavior,overscrollX:xo.overscrollBehaviorX,overscrollY:xo.overscrollBehaviorY});var m4e={listStyleType:!0,listStylePosition:!0,listStylePos:Q.prop("listStylePosition"),listStyleImage:!0,listStyleImg:Q.prop("listStyleImage")};function y4e(e,t,n,r){const i=typeof t=="string"?t.split("."):[t];for(r=0;r{const t=new WeakMap;return(r,i,o,s)=>{if(typeof r>"u")return e(r,i,o);t.has(r)||t.set(r,new Map);const a=t.get(r);if(a.has(i))return a.get(i);const l=e(r,i,o,s);return a.set(i,l),l}},_4e=v4e(y4e),b4e={border:"0px",clip:"rect(0, 0, 0, 0)",width:"1px",height:"1px",margin:"-1px",padding:"0px",overflow:"hidden",whiteSpace:"nowrap",position:"absolute"},S4e={position:"static",width:"auto",height:"auto",clip:"auto",padding:"0",margin:"0",overflow:"visible",whiteSpace:"normal"},aC=(e,t,n)=>{const r={},i=_4e(e,t,{});for(const o in i)o in n&&n[o]!=null||(r[o]=i[o]);return r},w4e={srOnly:{transform(e){return e===!0?b4e:e==="focusable"?S4e:{}}},layerStyle:{processResult:!0,transform:(e,t,n)=>aC(t,`layerStyles.${e}`,n)},textStyle:{processResult:!0,transform:(e,t,n)=>aC(t,`textStyles.${e}`,n)},apply:{processResult:!0,transform:(e,t,n)=>aC(t,e,n)}},Gp={position:!0,pos:Q.prop("position"),zIndex:Q.prop("zIndex","zIndices"),inset:Q.spaceT("inset"),insetX:Q.spaceT(["left","right"]),insetInline:Q.spaceT("insetInline"),insetY:Q.spaceT(["top","bottom"]),insetBlock:Q.spaceT("insetBlock"),top:Q.spaceT("top"),insetBlockStart:Q.spaceT("insetBlockStart"),bottom:Q.spaceT("bottom"),insetBlockEnd:Q.spaceT("insetBlockEnd"),left:Q.spaceT("left"),insetInlineStart:Q.logical({scale:"space",property:{ltr:"left",rtl:"right"}}),right:Q.spaceT("right"),insetInlineEnd:Q.logical({scale:"space",property:{ltr:"right",rtl:"left"}})};Object.assign(Gp,{insetStart:Gp.insetInlineStart,insetEnd:Gp.insetInlineEnd});var x4e={ring:{transform:Ot.ring},ringColor:Q.colors("--chakra-ring-color"),ringOffset:Q.prop("--chakra-ring-offset-width"),ringOffsetColor:Q.colors("--chakra-ring-offset-color"),ringInset:Q.prop("--chakra-ring-inset")},dn={margin:Q.spaceT("margin"),marginTop:Q.spaceT("marginTop"),marginBlockStart:Q.spaceT("marginBlockStart"),marginRight:Q.spaceT("marginRight"),marginInlineEnd:Q.spaceT("marginInlineEnd"),marginBottom:Q.spaceT("marginBottom"),marginBlockEnd:Q.spaceT("marginBlockEnd"),marginLeft:Q.spaceT("marginLeft"),marginInlineStart:Q.spaceT("marginInlineStart"),marginX:Q.spaceT(["marginInlineStart","marginInlineEnd"]),marginInline:Q.spaceT("marginInline"),marginY:Q.spaceT(["marginTop","marginBottom"]),marginBlock:Q.spaceT("marginBlock"),padding:Q.space("padding"),paddingTop:Q.space("paddingTop"),paddingBlockStart:Q.space("paddingBlockStart"),paddingRight:Q.space("paddingRight"),paddingBottom:Q.space("paddingBottom"),paddingBlockEnd:Q.space("paddingBlockEnd"),paddingLeft:Q.space("paddingLeft"),paddingInlineStart:Q.space("paddingInlineStart"),paddingInlineEnd:Q.space("paddingInlineEnd"),paddingX:Q.space(["paddingInlineStart","paddingInlineEnd"]),paddingInline:Q.space("paddingInline"),paddingY:Q.space(["paddingTop","paddingBottom"]),paddingBlock:Q.space("paddingBlock")};Object.assign(dn,{m:dn.margin,mt:dn.marginTop,mr:dn.marginRight,me:dn.marginInlineEnd,marginEnd:dn.marginInlineEnd,mb:dn.marginBottom,ml:dn.marginLeft,ms:dn.marginInlineStart,marginStart:dn.marginInlineStart,mx:dn.marginX,my:dn.marginY,p:dn.padding,pt:dn.paddingTop,py:dn.paddingY,px:dn.paddingX,pb:dn.paddingBottom,pl:dn.paddingLeft,ps:dn.paddingInlineStart,paddingStart:dn.paddingInlineStart,pr:dn.paddingRight,pe:dn.paddingInlineEnd,paddingEnd:dn.paddingInlineEnd});var C4e={textDecorationColor:Q.colors("textDecorationColor"),textDecoration:!0,textDecor:{property:"textDecoration"},textDecorationLine:!0,textDecorationStyle:!0,textDecorationThickness:!0,textUnderlineOffset:!0,textShadow:Q.shadows("textShadow")},T4e={clipPath:!0,transform:Q.propT("transform",Ot.transform),transformOrigin:!0,translateX:Q.spaceT("--chakra-translate-x"),translateY:Q.spaceT("--chakra-translate-y"),skewX:Q.degreeT("--chakra-skew-x"),skewY:Q.degreeT("--chakra-skew-y"),scaleX:Q.prop("--chakra-scale-x"),scaleY:Q.prop("--chakra-scale-y"),scale:Q.prop(["--chakra-scale-x","--chakra-scale-y"]),rotate:Q.degreeT("--chakra-rotate")},E4e={transition:!0,transitionDelay:!0,animation:!0,willChange:!0,transitionDuration:Q.prop("transitionDuration","transition.duration"),transitionProperty:Q.prop("transitionProperty","transition.property"),transitionTimingFunction:Q.prop("transitionTimingFunction","transition.easing")},A4e={fontFamily:Q.prop("fontFamily","fonts"),fontSize:Q.prop("fontSize","fontSizes",Ot.px),fontWeight:Q.prop("fontWeight","fontWeights"),lineHeight:Q.prop("lineHeight","lineHeights"),letterSpacing:Q.prop("letterSpacing","letterSpacings"),textAlign:!0,fontStyle:!0,textIndent:!0,wordBreak:!0,overflowWrap:!0,textOverflow:!0,textTransform:!0,whiteSpace:!0,isTruncated:{transform(e){if(e===!0)return{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}}},noOfLines:{static:{overflow:"hidden",textOverflow:"ellipsis",display:"-webkit-box",WebkitBoxOrient:"vertical",WebkitLineClamp:"var(--chakra-line-clamp)"},property:"--chakra-line-clamp"}},P4e={scrollBehavior:!0,scrollSnapAlign:!0,scrollSnapStop:!0,scrollSnapType:!0,scrollMargin:Q.spaceT("scrollMargin"),scrollMarginTop:Q.spaceT("scrollMarginTop"),scrollMarginBottom:Q.spaceT("scrollMarginBottom"),scrollMarginLeft:Q.spaceT("scrollMarginLeft"),scrollMarginRight:Q.spaceT("scrollMarginRight"),scrollMarginX:Q.spaceT(["scrollMarginLeft","scrollMarginRight"]),scrollMarginY:Q.spaceT(["scrollMarginTop","scrollMarginBottom"]),scrollPadding:Q.spaceT("scrollPadding"),scrollPaddingTop:Q.spaceT("scrollPaddingTop"),scrollPaddingBottom:Q.spaceT("scrollPaddingBottom"),scrollPaddingLeft:Q.spaceT("scrollPaddingLeft"),scrollPaddingRight:Q.spaceT("scrollPaddingRight"),scrollPaddingX:Q.spaceT(["scrollPaddingLeft","scrollPaddingRight"]),scrollPaddingY:Q.spaceT(["scrollPaddingTop","scrollPaddingBottom"])};function RV(e){return La(e)&&e.reference?e.reference:String(e)}var h2=(e,...t)=>t.map(RV).join(` ${e} `).replace(/calc/g,""),sI=(...e)=>`calc(${h2("+",...e)})`,aI=(...e)=>`calc(${h2("-",...e)})`,U5=(...e)=>`calc(${h2("*",...e)})`,lI=(...e)=>`calc(${h2("/",...e)})`,uI=e=>{const t=RV(e);return t!=null&&!Number.isNaN(parseFloat(t))?String(t).startsWith("-")?String(t).slice(1):`-${t}`:U5(t,-1)},Wu=Object.assign(e=>({add:(...t)=>Wu(sI(e,...t)),subtract:(...t)=>Wu(aI(e,...t)),multiply:(...t)=>Wu(U5(e,...t)),divide:(...t)=>Wu(lI(e,...t)),negate:()=>Wu(uI(e)),toString:()=>e.toString()}),{add:sI,subtract:aI,multiply:U5,divide:lI,negate:uI});function R4e(e,t="-"){return e.replace(/\s+/g,t)}function O4e(e){const t=R4e(e.toString());return I4e(k4e(t))}function k4e(e){return e.includes("\\.")?e:!Number.isInteger(parseFloat(e.toString()))?e.replace(".","\\."):e}function I4e(e){return e.replace(/[!-,/:-@[-^`{-~]/g,"\\$&")}function M4e(e,t=""){return[t,e].filter(Boolean).join("-")}function N4e(e,t){return`var(${e}${t?`, ${t}`:""})`}function L4e(e,t=""){return O4e(`--${M4e(e,t)}`)}function z5(e,t,n){const r=L4e(e,n);return{variable:r,reference:N4e(r,t)}}function UMe(e,t){const n={};for(const r of t){if(Array.isArray(r)){const[i,o]=r;n[i]=z5(`${e}-${i}`,o);continue}n[r]=z5(`${e}-${r}`)}return n}function D4e(e){const t=e==null?0:e.length;return t?e[t-1]:void 0}function $4e(e){const t=parseFloat(e.toString()),n=e.toString().replace(String(t),"");return{unitless:!n,value:t,unit:n}}function V5(e){if(e==null)return e;const{unitless:t}=$4e(e);return t||typeof e=="number"?`${e}px`:e}var OV=(e,t)=>parseInt(e[1],10)>parseInt(t[1],10)?1:-1,lA=e=>Object.fromEntries(Object.entries(e).sort(OV));function cI(e){const t=lA(e);return Object.assign(Object.values(t),t)}function F4e(e){const t=Object.keys(lA(e));return new Set(t)}function dI(e){var t;if(!e)return e;e=(t=V5(e))!=null?t:e;const n=-.02;return typeof e=="number"?`${e+n}`:e.replace(/(\d+\.?\d*)/u,r=>`${parseFloat(r)+n}`)}function Rp(e,t){const n=["@media screen"];return e&&n.push("and",`(min-width: ${V5(e)})`),t&&n.push("and",`(max-width: ${V5(t)})`),n.join(" ")}function B4e(e){var t;if(!e)return null;e.base=(t=e.base)!=null?t:"0px";const n=cI(e),r=Object.entries(e).sort(OV).map(([s,a],l,u)=>{var d;let[,f]=(d=u[l+1])!=null?d:[];return f=parseFloat(f)>0?dI(f):void 0,{_minW:dI(a),breakpoint:s,minW:a,maxW:f,maxWQuery:Rp(null,f),minWQuery:Rp(a),minMaxQuery:Rp(a,f)}}),i=F4e(e),o=Array.from(i.values());return{keys:i,normalized:n,isResponsive(s){const a=Object.keys(s);return a.length>0&&a.every(l=>i.has(l))},asObject:lA(e),asArray:cI(e),details:r,get(s){return r.find(a=>a.breakpoint===s)},media:[null,...n.map(s=>Rp(s)).slice(1)],toArrayValue(s){if(!La(s))throw new Error("toArrayValue: value must be an object");const a=o.map(l=>{var u;return(u=s[l])!=null?u:null});for(;D4e(a)===null;)a.pop();return a},toObjectValue(s){if(!Array.isArray(s))throw new Error("toObjectValue: value must be an array");return s.reduce((a,l,u)=>{const d=o[u];return d!=null&&l!=null&&(a[d]=l),a},{})}}}var Dr={hover:(e,t)=>`${e}:hover ${t}, ${e}[data-hover] ${t}`,focus:(e,t)=>`${e}:focus ${t}, ${e}[data-focus] ${t}`,focusVisible:(e,t)=>`${e}:focus-visible ${t}`,focusWithin:(e,t)=>`${e}:focus-within ${t}`,active:(e,t)=>`${e}:active ${t}, ${e}[data-active] ${t}`,disabled:(e,t)=>`${e}:disabled ${t}, ${e}[data-disabled] ${t}`,invalid:(e,t)=>`${e}:invalid ${t}, ${e}[data-invalid] ${t}`,checked:(e,t)=>`${e}:checked ${t}, ${e}[data-checked] ${t}`,indeterminate:(e,t)=>`${e}:indeterminate ${t}, ${e}[aria-checked=mixed] ${t}, ${e}[data-indeterminate] ${t}`,readOnly:(e,t)=>`${e}:read-only ${t}, ${e}[readonly] ${t}, ${e}[data-read-only] ${t}`,expanded:(e,t)=>`${e}:read-only ${t}, ${e}[aria-expanded=true] ${t}, ${e}[data-expanded] ${t}`,placeholderShown:(e,t)=>`${e}:placeholder-shown ${t}`},vl=e=>kV(t=>e(t,"&"),"[role=group]","[data-group]",".group"),ba=e=>kV(t=>e(t,"~ &"),"[data-peer]",".peer"),kV=(e,...t)=>t.map(e).join(", "),p2={_hover:"&:hover, &[data-hover]",_active:"&:active, &[data-active]",_focus:"&:focus, &[data-focus]",_highlighted:"&[data-highlighted]",_focusWithin:"&:focus-within",_focusVisible:"&:focus-visible, &[data-focus-visible]",_disabled:"&:disabled, &[disabled], &[aria-disabled=true], &[data-disabled]",_readOnly:"&[aria-readonly=true], &[readonly], &[data-readonly]",_before:"&::before",_after:"&::after",_empty:"&:empty",_expanded:"&[aria-expanded=true], &[data-expanded]",_checked:"&[aria-checked=true], &[data-checked]",_grabbed:"&[aria-grabbed=true], &[data-grabbed]",_pressed:"&[aria-pressed=true], &[data-pressed]",_invalid:"&[aria-invalid=true], &[data-invalid]",_valid:"&[data-valid], &[data-state=valid]",_loading:"&[data-loading], &[aria-busy=true]",_selected:"&[aria-selected=true], &[data-selected]",_hidden:"&[hidden], &[data-hidden]",_autofill:"&:-webkit-autofill",_even:"&:nth-of-type(even)",_odd:"&:nth-of-type(odd)",_first:"&:first-of-type",_firstLetter:"&::first-letter",_last:"&:last-of-type",_notFirst:"&:not(:first-of-type)",_notLast:"&:not(:last-of-type)",_visited:"&:visited",_activeLink:"&[aria-current=page]",_activeStep:"&[aria-current=step]",_indeterminate:"&:indeterminate, &[aria-checked=mixed], &[data-indeterminate]",_groupHover:vl(Dr.hover),_peerHover:ba(Dr.hover),_groupFocus:vl(Dr.focus),_peerFocus:ba(Dr.focus),_groupFocusVisible:vl(Dr.focusVisible),_peerFocusVisible:ba(Dr.focusVisible),_groupActive:vl(Dr.active),_peerActive:ba(Dr.active),_groupDisabled:vl(Dr.disabled),_peerDisabled:ba(Dr.disabled),_groupInvalid:vl(Dr.invalid),_peerInvalid:ba(Dr.invalid),_groupChecked:vl(Dr.checked),_peerChecked:ba(Dr.checked),_groupFocusWithin:vl(Dr.focusWithin),_peerFocusWithin:ba(Dr.focusWithin),_peerPlaceholderShown:ba(Dr.placeholderShown),_placeholder:"&::placeholder",_placeholderShown:"&:placeholder-shown",_fullScreen:"&:fullscreen",_selection:"&::selection",_rtl:"[dir=rtl] &, &[dir=rtl]",_ltr:"[dir=ltr] &, &[dir=ltr]",_mediaDark:"@media (prefers-color-scheme: dark)",_mediaReduceMotion:"@media (prefers-reduced-motion: reduce)",_dark:".chakra-ui-dark &:not([data-theme]),[data-theme=dark] &:not([data-theme]),&[data-theme=dark]",_light:".chakra-ui-light &:not([data-theme]),[data-theme=light] &:not([data-theme]),&[data-theme=light]",_horizontal:"&[data-orientation=horizontal]",_vertical:"&[data-orientation=vertical]"},IV=Object.keys(p2);function fI(e,t){return z5(String(e).replace(/\./g,"-"),void 0,t)}function U4e(e,t){let n={};const r={};for(const[i,o]of Object.entries(e)){const{isSemantic:s,value:a}=o,{variable:l,reference:u}=fI(i,t==null?void 0:t.cssVarPrefix);if(!s){if(i.startsWith("space")){const h=i.split("."),[g,...m]=h,v=`${g}.-${m.join(".")}`,x=Wu.negate(a),_=Wu.negate(u);r[v]={value:x,var:l,varRef:_}}n[l]=a,r[i]={value:a,var:l,varRef:u};continue}const d=h=>{const m=[String(i).split(".")[0],h].join(".");if(!e[m])return h;const{reference:x}=fI(m,t==null?void 0:t.cssVarPrefix);return x},f=La(a)?a:{default:a};n=Us(n,Object.entries(f).reduce((h,[g,m])=>{var v,x;if(!m)return h;const _=d(`${m}`);if(g==="default")return h[l]=_,h;const b=(x=(v=p2)==null?void 0:v[g])!=null?x:g;return h[b]={[l]:_},h},{})),r[i]={value:u,var:l,varRef:u}}return{cssVars:n,cssMap:r}}function z4e(e,t=[]){const n=Object.assign({},e);for(const r of t)r in n&&delete n[r];return n}function V4e(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function j4e(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function hI(e,t,n={}){const{stop:r,getKey:i}=n;function o(s,a=[]){var l;if(j4e(s)||Array.isArray(s)){const u={};for(const[d,f]of Object.entries(s)){const h=(l=i==null?void 0:i(d))!=null?l:d,g=[...a,h];if(r!=null&&r(s,g))return t(s,a);u[h]=o(f,g)}return u}return t(s,a)}return o(e)}var G4e=["colors","borders","borderWidths","borderStyles","fonts","fontSizes","fontWeights","gradients","letterSpacings","lineHeights","radii","space","shadows","sizes","zIndices","transition","blur","breakpoints"];function H4e(e){return V4e(e,G4e)}function W4e(e){return e.semanticTokens}function q4e(e){const{__cssMap:t,__cssVars:n,__breakpoints:r,...i}=e;return i}var K4e=e=>IV.includes(e)||e==="default";function X4e({tokens:e,semanticTokens:t}){const n={};return hI(e,(r,i)=>{r!=null&&(n[i.join(".")]={isSemantic:!1,value:r})}),hI(t,(r,i)=>{r!=null&&(n[i.join(".")]={isSemantic:!0,value:r})},{stop:r=>Object.keys(r).every(K4e)}),n}function zMe(e){var t;const n=q4e(e),r=H4e(n),i=W4e(n),o=X4e({tokens:r,semanticTokens:i}),s=(t=n.config)==null?void 0:t.cssVarPrefix,{cssMap:a,cssVars:l}=U4e(o,{cssVarPrefix:s});return Object.assign(n,{__cssVars:{...{"--chakra-ring-inset":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-ring-offset-width":"0px","--chakra-ring-offset-color":"#fff","--chakra-ring-color":"rgba(66, 153, 225, 0.6)","--chakra-ring-offset-shadow":"0 0 #0000","--chakra-ring-shadow":"0 0 #0000","--chakra-space-x-reverse":"0","--chakra-space-y-reverse":"0"},...l},__cssMap:a,__breakpoints:B4e(n.breakpoints)}),n}var uA=Us({},zv,Lt,h4e,v_,xo,p4e,x4e,g4e,PV,w4e,Gp,B5,dn,P4e,A4e,C4e,T4e,m4e,E4e),Y4e=Object.assign({},dn,xo,v_,PV,Gp),VMe=Object.keys(Y4e),Q4e=[...Object.keys(uA),...IV],Z4e={...uA,...p2},J4e=e=>e in Z4e,eTe=e=>t=>{if(!t.__breakpoints)return e;const{isResponsive:n,toArrayValue:r,media:i}=t.__breakpoints,o={};for(const s in e){let a=Ju(e[s],t);if(a==null)continue;if(a=La(a)&&n(a)?r(a):a,!Array.isArray(a)){o[s]=a;continue}const l=a.slice(0,i.length).length;for(let u=0;ue.startsWith("--")&&typeof t=="string"&&!nTe(t),iTe=(e,t)=>{var n,r;if(t==null)return t;const i=l=>{var u,d;return(d=(u=e.__cssMap)==null?void 0:u[l])==null?void 0:d.varRef},o=l=>{var u;return(u=i(l))!=null?u:l},[s,a]=tTe(t);return t=(r=(n=i(s))!=null?n:o(a))!=null?r:o(t),t};function oTe(e){const{configs:t={},pseudos:n={},theme:r}=e,i=(o,s=!1)=>{var a,l,u;const d=Ju(o,r),f=eTe(d)(r);let h={};for(let g in f){const m=f[g];let v=Ju(m,r);g in n&&(g=n[g]),rTe(g,v)&&(v=iTe(r,v));let x=t[g];if(x===!0&&(x={property:g}),La(v)){h[g]=(a=h[g])!=null?a:{},h[g]=Us({},h[g],i(v,!0));continue}let _=(u=(l=x==null?void 0:x.transform)==null?void 0:l.call(x,v,r,d))!=null?u:v;_=x!=null&&x.processResult?i(_,!0):_;const b=Ju(x==null?void 0:x.property,r);if(!s&&(x!=null&&x.static)){const y=Ju(x.static,r);h=Us({},h,y)}if(b&&Array.isArray(b)){for(const y of b)h[y]=_;continue}if(b){b==="&"&&La(_)?h=Us({},h,_):h[b]=_;continue}if(La(_)){h=Us({},h,_);continue}h[g]=_}return h};return i}var sTe=e=>t=>oTe({theme:t,pseudos:p2,configs:uA})(e);function jMe(e){return e}function GMe(e){return e}function HMe(e){return{definePartsStyle(t){return t},defineMultiStyleConfig(t){return{parts:e,...t}}}}function aTe(e,t){if(Array.isArray(e))return e;if(La(e))return t(e);if(e!=null)return[e]}function lTe(e,t){for(let n=t+1;n{Us(u,{[y]:h?b[y]:{[_]:b[y]}})});continue}if(!g){h?Us(u,b):u[_]=b;continue}u[_]=b}}return u}}function cTe(e){return t=>{var n;const{variant:r,size:i,theme:o}=t,s=uTe(o);return Us({},Ju((n=e.baseStyle)!=null?n:{},t),s(e,"sizes",i,t),s(e,"variants",r,t))}}function WMe(e,t,n){var r,i,o;return(o=(i=(r=e.__cssMap)==null?void 0:r[`${t}.${n}`])==null?void 0:i.varRef)!=null?o:n}function MV(e){return z4e(e,["styleConfig","size","variant","colorScheme"])}function dTe(e,t){const n={};return Object.keys(e).forEach(r=>{t.includes(r)||(n[r]=e[r])}),n}function fTe(e,t,n,r){const i=typeof t=="string"?t.split("."):[t];for(r=0;r{const t=new WeakMap;return(r,i,o,s)=>{if(typeof r>"u")return e(r,i,o);t.has(r)||t.set(r,new Map);const a=t.get(r);if(a.has(i))return a.get(i);const l=e(r,i,o,s);return a.set(i,l),l}},pTe=hTe(fTe);function NV(e,t){const n={};return Object.keys(e).forEach(r=>{const i=e[r];t(i,r,e)&&(n[r]=i)}),n}var LV=e=>NV(e,t=>t!=null);function gTe(e){return typeof e=="function"}function mTe(e,...t){return gTe(e)?e(...t):e}function qMe(...e){return function(n){e.some(r=>(r==null||r(n),n==null?void 0:n.defaultPrevented))}}var yTe=typeof Element<"u",vTe=typeof Map=="function",_Te=typeof Set=="function",bTe=typeof ArrayBuffer=="function"&&!!ArrayBuffer.isView;function Vv(e,t){if(e===t)return!0;if(e&&t&&typeof e=="object"&&typeof t=="object"){if(e.constructor!==t.constructor)return!1;var n,r,i;if(Array.isArray(e)){if(n=e.length,n!=t.length)return!1;for(r=n;r--!==0;)if(!Vv(e[r],t[r]))return!1;return!0}var o;if(vTe&&e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(o=e.entries();!(r=o.next()).done;)if(!t.has(r.value[0]))return!1;for(o=e.entries();!(r=o.next()).done;)if(!Vv(r.value[1],t.get(r.value[0])))return!1;return!0}if(_Te&&e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(o=e.entries();!(r=o.next()).done;)if(!t.has(r.value[0]))return!1;return!0}if(bTe&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(t)){if(n=e.length,n!=t.length)return!1;for(r=n;r--!==0;)if(e[r]!==t[r])return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(e.valueOf!==Object.prototype.valueOf&&typeof e.valueOf=="function"&&typeof t.valueOf=="function")return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString&&typeof e.toString=="function"&&typeof t.toString=="function")return e.toString()===t.toString();if(i=Object.keys(e),n=i.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!Object.prototype.hasOwnProperty.call(t,i[r]))return!1;if(yTe&&e instanceof Element)return!1;for(r=n;r--!==0;)if(!((i[r]==="_owner"||i[r]==="__v"||i[r]==="__o")&&e.$$typeof)&&!Vv(e[i[r]],t[i[r]]))return!1;return!0}return e!==e&&t!==t}var STe=function(t,n){try{return Vv(t,n)}catch(r){if((r.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw r}};const wTe=Tc(STe);function DV(e,t={}){var n;const{styleConfig:r,...i}=t,{theme:o,colorMode:s}=G5e(),a=e?pTe(o,`components.${e}`):void 0,l=r||a,u=Us({theme:o,colorMode:s},(n=l==null?void 0:l.defaultProps)!=null?n:{},LV(dTe(i,["children"]))),d=L.useRef({});if(l){const h=cTe(l)(u);wTe(d.current,h)||(d.current=h)}return d.current}function $V(e,t={}){return DV(e,t)}function KMe(e,t={}){return DV(e,t)}var xTe=new Set([...Q4e,"textStyle","layerStyle","apply","noOfLines","focusBorderColor","errorBorderColor","as","__css","css","sx"]),CTe=new Set(["htmlWidth","htmlHeight","htmlSize","htmlTranslate"]);function TTe(e){return CTe.has(e)||!xTe.has(e)}function ETe(e,...t){if(e==null)throw new TypeError("Cannot convert undefined or null to object");const n={...e};for(const r of t)if(r!=null)for(const i in r)Object.prototype.hasOwnProperty.call(r,i)&&(i in n&&delete n[i],n[i]=r[i]);return n}var ATe=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,PTe=mV(function(e){return ATe.test(e)||e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)<91}),RTe=PTe,OTe=function(t){return t!=="theme"},pI=function(t){return typeof t=="string"&&t.charCodeAt(0)>96?RTe:OTe},gI=function(t,n,r){var i;if(n){var o=n.shouldForwardProp;i=t.__emotion_forwardProp&&o?function(s){return t.__emotion_forwardProp(s)&&o(s)}:o}return typeof i!="function"&&r&&(i=t.__emotion_forwardProp),i},kTe=function(t){var n=t.cache,r=t.serialized,i=t.isStringTag;return vV(n,r,i),F5e(function(){return _V(n,r,i)}),null},ITe=function e(t,n){var r=t.__emotion_real===t,i=r&&t.__emotion_base||t,o,s;n!==void 0&&(o=n.label,s=n.target);var a=gI(t,n,r),l=a||pI(i),u=!l("as");return function(){var d=arguments,f=r&&t.__emotion_styles!==void 0?t.__emotion_styles.slice(0):[];if(o!==void 0&&f.push("label:"+o+";"),d[0]==null||d[0].raw===void 0)f.push.apply(f,d);else{f.push(d[0][0]);for(var h=d.length,g=1;gt=>{const{theme:n,css:r,__css:i,sx:o,...s}=t,a=NV(s,(f,h)=>J4e(h)),l=mTe(e,t),u=ETe({},i,l,LV(a),o),d=sTe(u)(t.theme);return r?[d,r]:d};function lC(e,t){const{baseStyle:n,...r}=t??{};r.shouldForwardProp||(r.shouldForwardProp=TTe);const i=LTe({baseStyle:n}),o=NTe(e,r)(i);return jt.forwardRef(function(l,u){const{colorMode:d,forced:f}=sA();return jt.createElement(o,{ref:u,"data-theme":f?d:void 0,...l})})}function DTe(){const e=new Map;return new Proxy(lC,{apply(t,n,r){return lC(...r)},get(t,n){return e.has(n)||e.set(n,lC(n)),e.get(n)}})}var Cc=DTe();function zc(e){return L.forwardRef(e)}const FV=L.createContext({transformPagePoint:e=>e,isStatic:!1,reducedMotion:"never"}),g2=L.createContext({}),Km=L.createContext(null),m2=typeof document<"u",b_=m2?L.useLayoutEffect:L.useEffect,BV=L.createContext({strict:!1});function $Te(e,t,n,r){const{visualElement:i}=L.useContext(g2),o=L.useContext(BV),s=L.useContext(Km),a=L.useContext(FV).reducedMotion,l=L.useRef();r=r||o.renderer,!l.current&&r&&(l.current=r(e,{visualState:t,parent:i,props:n,presenceContext:s,blockInitialAnimation:s?s.initial===!1:!1,reducedMotionConfig:a}));const u=l.current;return L.useInsertionEffect(()=>{u&&u.update(n,s)}),b_(()=>{u&&u.render()}),L.useEffect(()=>{u&&u.updateFeatures()}),(window.HandoffAppearAnimations?b_:L.useEffect)(()=>{u&&u.animationState&&u.animationState.animateChanges()}),u}function Xd(e){return typeof e=="object"&&Object.prototype.hasOwnProperty.call(e,"current")}function FTe(e,t,n){return L.useCallback(r=>{r&&e.mount&&e.mount(r),t&&(r?t.mount(r):t.unmount()),n&&(typeof n=="function"?n(r):Xd(n)&&(n.current=r))},[t])}function nm(e){return typeof e=="string"||Array.isArray(e)}function y2(e){return typeof e=="object"&&typeof e.start=="function"}const cA=["animate","whileInView","whileFocus","whileHover","whileTap","whileDrag","exit"],dA=["initial",...cA];function v2(e){return y2(e.animate)||dA.some(t=>nm(e[t]))}function UV(e){return!!(v2(e)||e.variants)}function BTe(e,t){if(v2(e)){const{initial:n,animate:r}=e;return{initial:n===!1||nm(n)?n:void 0,animate:nm(r)?r:void 0}}return e.inherit!==!1?t:{}}function UTe(e){const{initial:t,animate:n}=BTe(e,L.useContext(g2));return L.useMemo(()=>({initial:t,animate:n}),[yI(t),yI(n)])}function yI(e){return Array.isArray(e)?e.join(" "):e}const vI={animation:["animate","variants","whileHover","whileTap","exit","whileInView","whileFocus","whileDrag"],exit:["exit"],drag:["drag","dragControls"],focus:["whileFocus"],hover:["whileHover","onHoverStart","onHoverEnd"],tap:["whileTap","onTap","onTapStart","onTapCancel"],pan:["onPan","onPanStart","onPanSessionStart","onPanEnd"],inView:["whileInView","onViewportEnter","onViewportLeave"],layout:["layout","layoutId"]},rm={};for(const e in vI)rm[e]={isEnabled:t=>vI[e].some(n=>!!t[n])};function zTe(e){for(const t in e)rm[t]={...rm[t],...e[t]}}const fA=L.createContext({}),zV=L.createContext({}),VTe=Symbol.for("motionComponentSymbol");function jTe({preloadedFeatures:e,createVisualElement:t,useRender:n,useVisualState:r,Component:i}){e&&zTe(e);function o(a,l){let u;const d={...L.useContext(FV),...a,layoutId:GTe(a)},{isStatic:f}=d,h=UTe(a),g=r(a,f);if(!f&&m2){h.visualElement=$Te(i,g,d,t);const m=L.useContext(zV),v=L.useContext(BV).strict;h.visualElement&&(u=h.visualElement.loadFeatures(d,v,e,m))}return L.createElement(g2.Provider,{value:h},u&&h.visualElement?L.createElement(u,{visualElement:h.visualElement,...d}):null,n(i,a,FTe(g,h.visualElement,l),g,f,h.visualElement))}const s=L.forwardRef(o);return s[VTe]=i,s}function GTe({layoutId:e}){const t=L.useContext(fA).id;return t&&e!==void 0?t+"-"+e:e}function HTe(e){function t(r,i={}){return jTe(e(r,i))}if(typeof Proxy>"u")return t;const n=new Map;return new Proxy(t,{get:(r,i)=>(n.has(i)||n.set(i,t(i)),n.get(i))})}const WTe=["animate","circle","defs","desc","ellipse","g","image","line","filter","marker","mask","metadata","path","pattern","polygon","polyline","rect","stop","switch","symbol","svg","text","tspan","use","view"];function hA(e){return typeof e!="string"||e.includes("-")?!1:!!(WTe.indexOf(e)>-1||/[A-Z]/.test(e))}const S_={};function qTe(e){Object.assign(S_,e)}const Xm=["transformPerspective","x","y","z","translateX","translateY","translateZ","scale","scaleX","scaleY","rotate","rotateX","rotateY","rotateZ","skew","skewX","skewY"],Vc=new Set(Xm);function VV(e,{layout:t,layoutId:n}){return Vc.has(e)||e.startsWith("origin")||(t||n!==void 0)&&(!!S_[e]||e==="opacity")}const zi=e=>!!(e&&e.getVelocity),KTe={x:"translateX",y:"translateY",z:"translateZ",transformPerspective:"perspective"},XTe=Xm.length;function YTe(e,{enableHardwareAcceleration:t=!0,allowTransformNone:n=!0},r,i){let o="";for(let s=0;st=>typeof t=="string"&&t.startsWith(e),GV=jV("--"),j5=jV("var(--"),QTe=/var\s*\(\s*--[\w-]+(\s*,\s*(?:(?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)+)?\s*\)/g,ZTe=(e,t)=>t&&typeof e=="number"?t.transform(e):e,au=(e,t,n)=>Math.min(Math.max(n,e),t),jc={test:e=>typeof e=="number",parse:parseFloat,transform:e=>e},Hp={...jc,transform:e=>au(0,1,e)},rv={...jc,default:1},Wp=e=>Math.round(e*1e5)/1e5,_2=/(-)?([\d]*\.?[\d])+/g,HV=/(#[0-9a-f]{3,8}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2}(-?[\d\.]+%?)\s*[\,\/]?\s*[\d\.]*%?\))/gi,JTe=/^(#[0-9a-f]{3,8}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2}(-?[\d\.]+%?)\s*[\,\/]?\s*[\d\.]*%?\))$/i;function Ym(e){return typeof e=="string"}const Qm=e=>({test:t=>Ym(t)&&t.endsWith(e)&&t.split(" ").length===1,parse:parseFloat,transform:t=>`${t}${e}`}),bl=Qm("deg"),qs=Qm("%"),He=Qm("px"),eEe=Qm("vh"),tEe=Qm("vw"),_I={...qs,parse:e=>qs.parse(e)/100,transform:e=>qs.transform(e*100)},bI={...jc,transform:Math.round},WV={borderWidth:He,borderTopWidth:He,borderRightWidth:He,borderBottomWidth:He,borderLeftWidth:He,borderRadius:He,radius:He,borderTopLeftRadius:He,borderTopRightRadius:He,borderBottomRightRadius:He,borderBottomLeftRadius:He,width:He,maxWidth:He,height:He,maxHeight:He,size:He,top:He,right:He,bottom:He,left:He,padding:He,paddingTop:He,paddingRight:He,paddingBottom:He,paddingLeft:He,margin:He,marginTop:He,marginRight:He,marginBottom:He,marginLeft:He,rotate:bl,rotateX:bl,rotateY:bl,rotateZ:bl,scale:rv,scaleX:rv,scaleY:rv,scaleZ:rv,skew:bl,skewX:bl,skewY:bl,distance:He,translateX:He,translateY:He,translateZ:He,x:He,y:He,z:He,perspective:He,transformPerspective:He,opacity:Hp,originX:_I,originY:_I,originZ:He,zIndex:bI,fillOpacity:Hp,strokeOpacity:Hp,numOctaves:bI};function pA(e,t,n,r){const{style:i,vars:o,transform:s,transformOrigin:a}=e;let l=!1,u=!1,d=!0;for(const f in t){const h=t[f];if(GV(f)){o[f]=h;continue}const g=WV[f],m=ZTe(h,g);if(Vc.has(f)){if(l=!0,s[f]=m,!d)continue;h!==(g.default||0)&&(d=!1)}else f.startsWith("origin")?(u=!0,a[f]=m):i[f]=m}if(t.transform||(l||r?i.transform=YTe(e.transform,n,d,r):i.transform&&(i.transform="none")),u){const{originX:f="50%",originY:h="50%",originZ:g=0}=a;i.transformOrigin=`${f} ${h} ${g}`}}const gA=()=>({style:{},transform:{},transformOrigin:{},vars:{}});function qV(e,t,n){for(const r in t)!zi(t[r])&&!VV(r,n)&&(e[r]=t[r])}function nEe({transformTemplate:e},t,n){return L.useMemo(()=>{const r=gA();return pA(r,t,{enableHardwareAcceleration:!n},e),Object.assign({},r.vars,r.style)},[t])}function rEe(e,t,n){const r=e.style||{},i={};return qV(i,r,e),Object.assign(i,nEe(e,t,n)),e.transformValues?e.transformValues(i):i}function iEe(e,t,n){const r={},i=rEe(e,t,n);return e.drag&&e.dragListener!==!1&&(r.draggable=!1,i.userSelect=i.WebkitUserSelect=i.WebkitTouchCallout="none",i.touchAction=e.drag===!0?"none":`pan-${e.drag==="x"?"y":"x"}`),e.tabIndex===void 0&&(e.onTap||e.onTapStart||e.whileTap)&&(r.tabIndex=0),r.style=i,r}const oEe=new Set(["animate","exit","variants","initial","style","values","variants","transition","transformTemplate","transformValues","custom","inherit","onLayoutAnimationStart","onLayoutAnimationComplete","onLayoutMeasure","onBeforeLayoutMeasure","onAnimationStart","onAnimationComplete","onUpdate","onDragStart","onDrag","onDragEnd","onMeasureDragConstraints","onDirectionLock","onDragTransitionEnd","_dragX","_dragY","onHoverStart","onHoverEnd","onViewportEnter","onViewportLeave","ignoreStrict","viewport"]);function w_(e){return e.startsWith("while")||e.startsWith("drag")&&e!=="draggable"||e.startsWith("layout")||e.startsWith("onTap")||e.startsWith("onPan")||oEe.has(e)}let KV=e=>!w_(e);function sEe(e){e&&(KV=t=>t.startsWith("on")?!w_(t):e(t))}try{sEe(require("@emotion/is-prop-valid").default)}catch{}function aEe(e,t,n){const r={};for(const i in e)i==="values"&&typeof e.values=="object"||(KV(i)||n===!0&&w_(i)||!t&&!w_(i)||e.draggable&&i.startsWith("onDrag"))&&(r[i]=e[i]);return r}function SI(e,t,n){return typeof e=="string"?e:He.transform(t+n*e)}function lEe(e,t,n){const r=SI(t,e.x,e.width),i=SI(n,e.y,e.height);return`${r} ${i}`}const uEe={offset:"stroke-dashoffset",array:"stroke-dasharray"},cEe={offset:"strokeDashoffset",array:"strokeDasharray"};function dEe(e,t,n=1,r=0,i=!0){e.pathLength=1;const o=i?uEe:cEe;e[o.offset]=He.transform(-r);const s=He.transform(t),a=He.transform(n);e[o.array]=`${s} ${a}`}function mA(e,{attrX:t,attrY:n,attrScale:r,originX:i,originY:o,pathLength:s,pathSpacing:a=1,pathOffset:l=0,...u},d,f,h){if(pA(e,u,d,h),f){e.style.viewBox&&(e.attrs.viewBox=e.style.viewBox);return}e.attrs=e.style,e.style={};const{attrs:g,style:m,dimensions:v}=e;g.transform&&(v&&(m.transform=g.transform),delete g.transform),v&&(i!==void 0||o!==void 0||m.transform)&&(m.transformOrigin=lEe(v,i!==void 0?i:.5,o!==void 0?o:.5)),t!==void 0&&(g.x=t),n!==void 0&&(g.y=n),r!==void 0&&(g.scale=r),s!==void 0&&dEe(g,s,a,l,!1)}const XV=()=>({...gA(),attrs:{}}),yA=e=>typeof e=="string"&&e.toLowerCase()==="svg";function fEe(e,t,n,r){const i=L.useMemo(()=>{const o=XV();return mA(o,t,{enableHardwareAcceleration:!1},yA(r),e.transformTemplate),{...o.attrs,style:{...o.style}}},[t]);if(e.style){const o={};qV(o,e.style,e),i.style={...o,...i.style}}return i}function hEe(e=!1){return(n,r,i,{latestValues:o},s)=>{const l=(hA(n)?fEe:iEe)(r,o,s,n),d={...aEe(r,typeof n=="string",e),...l,ref:i},{children:f}=r,h=L.useMemo(()=>zi(f)?f.get():f,[f]);return L.createElement(n,{...d,children:h})}}const vA=e=>e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase();function YV(e,{style:t,vars:n},r,i){Object.assign(e.style,t,i&&i.getProjectionStyles(r));for(const o in n)e.style.setProperty(o,n[o])}const QV=new Set(["baseFrequency","diffuseConstant","kernelMatrix","kernelUnitLength","keySplines","keyTimes","limitingConeAngle","markerHeight","markerWidth","numOctaves","targetX","targetY","surfaceScale","specularConstant","specularExponent","stdDeviation","tableValues","viewBox","gradientTransform","pathLength","startOffset","textLength","lengthAdjust"]);function ZV(e,t,n,r){YV(e,t,void 0,r);for(const i in t.attrs)e.setAttribute(QV.has(i)?i:vA(i),t.attrs[i])}function _A(e,t){const{style:n}=e,r={};for(const i in n)(zi(n[i])||t.style&&zi(t.style[i])||VV(i,e))&&(r[i]=n[i]);return r}function JV(e,t){const n=_A(e,t);for(const r in e)if(zi(e[r])||zi(t[r])){const i=Xm.indexOf(r)!==-1?"attr"+r.charAt(0).toUpperCase()+r.substring(1):r;n[i]=e[r]}return n}function bA(e,t,n,r={},i={}){return typeof t=="function"&&(t=t(n!==void 0?n:e.custom,r,i)),typeof t=="string"&&(t=e.variants&&e.variants[t]),typeof t=="function"&&(t=t(n!==void 0?n:e.custom,r,i)),t}function ej(e){const t=L.useRef(null);return t.current===null&&(t.current=e()),t.current}const x_=e=>Array.isArray(e),pEe=e=>!!(e&&typeof e=="object"&&e.mix&&e.toValue),gEe=e=>x_(e)?e[e.length-1]||0:e;function jv(e){const t=zi(e)?e.get():e;return pEe(t)?t.toValue():t}function mEe({scrapeMotionValuesFromProps:e,createRenderState:t,onMount:n},r,i,o){const s={latestValues:yEe(r,i,o,e),renderState:t()};return n&&(s.mount=a=>n(r,a,s)),s}const tj=e=>(t,n)=>{const r=L.useContext(g2),i=L.useContext(Km),o=()=>mEe(e,t,r,i);return n?o():ej(o)};function yEe(e,t,n,r){const i={},o=r(e,{});for(const h in o)i[h]=jv(o[h]);let{initial:s,animate:a}=e;const l=v2(e),u=UV(e);t&&u&&!l&&e.inherit!==!1&&(s===void 0&&(s=t.initial),a===void 0&&(a=t.animate));let d=n?n.initial===!1:!1;d=d||s===!1;const f=d?a:s;return f&&typeof f!="boolean"&&!y2(f)&&(Array.isArray(f)?f:[f]).forEach(g=>{const m=bA(e,g);if(!m)return;const{transitionEnd:v,transition:x,..._}=m;for(const b in _){let y=_[b];if(Array.isArray(y)){const S=d?y.length-1:0;y=y[S]}y!==null&&(i[b]=y)}for(const b in v)i[b]=v[b]}),i}const vEe={useVisualState:tj({scrapeMotionValuesFromProps:JV,createRenderState:XV,onMount:(e,t,{renderState:n,latestValues:r})=>{try{n.dimensions=typeof t.getBBox=="function"?t.getBBox():t.getBoundingClientRect()}catch{n.dimensions={x:0,y:0,width:0,height:0}}mA(n,r,{enableHardwareAcceleration:!1},yA(t.tagName),e.transformTemplate),ZV(t,n)}})},_Ee={useVisualState:tj({scrapeMotionValuesFromProps:_A,createRenderState:gA})};function bEe(e,{forwardMotionProps:t=!1},n,r){return{...hA(e)?vEe:_Ee,preloadedFeatures:n,useRender:hEe(t),createVisualElement:r,Component:e}}function ka(e,t,n,r={passive:!0}){return e.addEventListener(t,n,r),()=>e.removeEventListener(t,n)}const nj=e=>e.pointerType==="mouse"?typeof e.button!="number"||e.button<=0:e.isPrimary!==!1;function b2(e,t="page"){return{point:{x:e[t+"X"],y:e[t+"Y"]}}}const SEe=e=>t=>nj(t)&&e(t,b2(t));function Da(e,t,n,r){return ka(e,t,SEe(n),r)}const wEe=(e,t)=>n=>t(e(n)),ql=(...e)=>e.reduce(wEe);function rj(e){let t=null;return()=>{const n=()=>{t=null};return t===null?(t=e,n):!1}}const wI=rj("dragHorizontal"),xI=rj("dragVertical");function ij(e){let t=!1;if(e==="y")t=xI();else if(e==="x")t=wI();else{const n=wI(),r=xI();n&&r?t=()=>{n(),r()}:(n&&n(),r&&r())}return t}function oj(){const e=ij(!0);return e?(e(),!1):!0}class xu{constructor(t){this.isMounted=!1,this.node=t}update(){}}const tr=e=>e;function xEe(e){let t=[],n=[],r=0,i=!1,o=!1;const s=new WeakSet,a={schedule:(l,u=!1,d=!1)=>{const f=d&&i,h=f?t:n;return u&&s.add(l),h.indexOf(l)===-1&&(h.push(l),f&&i&&(r=t.length)),l},cancel:l=>{const u=n.indexOf(l);u!==-1&&n.splice(u,1),s.delete(l)},process:l=>{if(i){o=!0;return}if(i=!0,[t,n]=[n,t],n.length=0,r=t.length,r)for(let u=0;u(f[h]=xEe(()=>n=!0),f),{}),s=f=>o[f].process(i),a=f=>{n=!1,i.delta=r?1e3/60:Math.max(Math.min(f-i.timestamp,CEe),1),i.timestamp=f,i.isProcessing=!0,iv.forEach(s),i.isProcessing=!1,n&&t&&(r=!1,e(a))},l=()=>{n=!0,r=!0,i.isProcessing||e(a)};return{schedule:iv.reduce((f,h)=>{const g=o[h];return f[h]=(m,v=!1,x=!1)=>(n||l(),g.schedule(m,v,x)),f},{}),cancel:f=>iv.forEach(h=>o[h].cancel(f)),state:i,steps:o}}const{schedule:Sn,cancel:Wa,state:Zr,steps:uC}=TEe(typeof requestAnimationFrame<"u"?requestAnimationFrame:tr,!0);function CI(e,t){const n="pointer"+(t?"enter":"leave"),r="onHover"+(t?"Start":"End"),i=(o,s)=>{if(o.type==="touch"||oj())return;const a=e.getProps();e.animationState&&a.whileHover&&e.animationState.setActive("whileHover",t),a[r]&&Sn.update(()=>a[r](o,s))};return Da(e.current,n,i,{passive:!e.getProps()[r]})}class EEe extends xu{mount(){this.unmount=ql(CI(this.node,!0),CI(this.node,!1))}unmount(){}}class AEe extends xu{constructor(){super(...arguments),this.isActive=!1}onFocus(){let t=!1;try{t=this.node.current.matches(":focus-visible")}catch{t=!0}!t||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!0),this.isActive=!0)}onBlur(){!this.isActive||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!1),this.isActive=!1)}mount(){this.unmount=ql(ka(this.node.current,"focus",()=>this.onFocus()),ka(this.node.current,"blur",()=>this.onBlur()))}unmount(){}}const sj=(e,t)=>t?e===t?!0:sj(e,t.parentElement):!1;function cC(e,t){if(!t)return;const n=new PointerEvent("pointer"+e);t(n,b2(n))}class PEe extends xu{constructor(){super(...arguments),this.removeStartListeners=tr,this.removeEndListeners=tr,this.removeAccessibleListeners=tr,this.startPointerPress=(t,n)=>{if(this.removeEndListeners(),this.isPressing)return;const r=this.node.getProps(),o=Da(window,"pointerup",(a,l)=>{if(!this.checkPressEnd())return;const{onTap:u,onTapCancel:d}=this.node.getProps();Sn.update(()=>{sj(this.node.current,a.target)?u&&u(a,l):d&&d(a,l)})},{passive:!(r.onTap||r.onPointerUp)}),s=Da(window,"pointercancel",(a,l)=>this.cancelPress(a,l),{passive:!(r.onTapCancel||r.onPointerCancel)});this.removeEndListeners=ql(o,s),this.startPress(t,n)},this.startAccessiblePress=()=>{const t=o=>{if(o.key!=="Enter"||this.isPressing)return;const s=a=>{a.key!=="Enter"||!this.checkPressEnd()||cC("up",(l,u)=>{const{onTap:d}=this.node.getProps();d&&Sn.update(()=>d(l,u))})};this.removeEndListeners(),this.removeEndListeners=ka(this.node.current,"keyup",s),cC("down",(a,l)=>{this.startPress(a,l)})},n=ka(this.node.current,"keydown",t),r=()=>{this.isPressing&&cC("cancel",(o,s)=>this.cancelPress(o,s))},i=ka(this.node.current,"blur",r);this.removeAccessibleListeners=ql(n,i)}}startPress(t,n){this.isPressing=!0;const{onTapStart:r,whileTap:i}=this.node.getProps();i&&this.node.animationState&&this.node.animationState.setActive("whileTap",!0),r&&Sn.update(()=>r(t,n))}checkPressEnd(){return this.removeEndListeners(),this.isPressing=!1,this.node.getProps().whileTap&&this.node.animationState&&this.node.animationState.setActive("whileTap",!1),!oj()}cancelPress(t,n){if(!this.checkPressEnd())return;const{onTapCancel:r}=this.node.getProps();r&&Sn.update(()=>r(t,n))}mount(){const t=this.node.getProps(),n=Da(this.node.current,"pointerdown",this.startPointerPress,{passive:!(t.onTapStart||t.onPointerStart)}),r=ka(this.node.current,"focus",this.startAccessiblePress);this.removeStartListeners=ql(n,r)}unmount(){this.removeStartListeners(),this.removeEndListeners(),this.removeAccessibleListeners()}}const G5=new WeakMap,dC=new WeakMap,REe=e=>{const t=G5.get(e.target);t&&t(e)},OEe=e=>{e.forEach(REe)};function kEe({root:e,...t}){const n=e||document;dC.has(n)||dC.set(n,{});const r=dC.get(n),i=JSON.stringify(t);return r[i]||(r[i]=new IntersectionObserver(OEe,{root:e,...t})),r[i]}function IEe(e,t,n){const r=kEe(t);return G5.set(e,n),r.observe(e),()=>{G5.delete(e),r.unobserve(e)}}const MEe={some:0,all:1};class NEe extends xu{constructor(){super(...arguments),this.hasEnteredView=!1,this.isInView=!1}startObserver(){this.unmount();const{viewport:t={}}=this.node.getProps(),{root:n,margin:r,amount:i="some",once:o}=t,s={root:n?n.current:void 0,rootMargin:r,threshold:typeof i=="number"?i:MEe[i]},a=l=>{const{isIntersecting:u}=l;if(this.isInView===u||(this.isInView=u,o&&!u&&this.hasEnteredView))return;u&&(this.hasEnteredView=!0),this.node.animationState&&this.node.animationState.setActive("whileInView",u);const{onViewportEnter:d,onViewportLeave:f}=this.node.getProps(),h=u?d:f;h&&h(l)};return IEe(this.node.current,s,a)}mount(){this.startObserver()}update(){if(typeof IntersectionObserver>"u")return;const{props:t,prevProps:n}=this.node;["amount","margin","root"].some(LEe(t,n))&&this.startObserver()}unmount(){}}function LEe({viewport:e={}},{viewport:t={}}={}){return n=>e[n]!==t[n]}const DEe={inView:{Feature:NEe},tap:{Feature:PEe},focus:{Feature:AEe},hover:{Feature:EEe}};function aj(e,t){if(!Array.isArray(t))return!1;const n=t.length;if(n!==e.length)return!1;for(let r=0;rt[r]=n.get()),t}function FEe(e){const t={};return e.values.forEach((n,r)=>t[r]=n.getVelocity()),t}function S2(e,t,n){const r=e.getProps();return bA(r,t,n!==void 0?n:r.custom,$Ee(e),FEe(e))}const BEe="framerAppearId",UEe="data-"+vA(BEe);let zEe=tr,SA=tr;const Kl=e=>e*1e3,$a=e=>e/1e3,VEe={current:!1},lj=e=>Array.isArray(e)&&typeof e[0]=="number";function uj(e){return!!(!e||typeof e=="string"&&cj[e]||lj(e)||Array.isArray(e)&&e.every(uj))}const Op=([e,t,n,r])=>`cubic-bezier(${e}, ${t}, ${n}, ${r})`,cj={linear:"linear",ease:"ease",easeIn:"ease-in",easeOut:"ease-out",easeInOut:"ease-in-out",circIn:Op([0,.65,.55,1]),circOut:Op([.55,0,1,.45]),backIn:Op([.31,.01,.66,-.59]),backOut:Op([.33,1.53,.69,.99])};function dj(e){if(e)return lj(e)?Op(e):Array.isArray(e)?e.map(dj):cj[e]}function jEe(e,t,n,{delay:r=0,duration:i,repeat:o=0,repeatType:s="loop",ease:a,times:l}={}){const u={[t]:n};l&&(u.offset=l);const d=dj(a);return Array.isArray(d)&&(u.easing=d),e.animate(u,{delay:r,duration:i,easing:Array.isArray(d)?"linear":d,fill:"both",iterations:o+1,direction:s==="reverse"?"alternate":"normal"})}const TI={waapi:()=>Object.hasOwnProperty.call(Element.prototype,"animate")},fC={},fj={};for(const e in TI)fj[e]=()=>(fC[e]===void 0&&(fC[e]=TI[e]()),fC[e]);function GEe(e,{repeat:t,repeatType:n="loop"}){const r=t&&n!=="loop"&&t%2===1?0:e.length-1;return e[r]}const hj=(e,t,n)=>(((1-3*n+3*t)*e+(3*n-6*t))*e+3*t)*e,HEe=1e-7,WEe=12;function qEe(e,t,n,r,i){let o,s,a=0;do s=t+(n-t)/2,o=hj(s,r,i)-e,o>0?n=s:t=s;while(Math.abs(o)>HEe&&++aqEe(o,0,1,e,n);return o=>o===0||o===1?o:hj(i(o),t,r)}const KEe=Zm(.42,0,1,1),XEe=Zm(0,0,.58,1),pj=Zm(.42,0,.58,1),YEe=e=>Array.isArray(e)&&typeof e[0]!="number",gj=e=>t=>t<=.5?e(2*t)/2:(2-e(2*(1-t)))/2,mj=e=>t=>1-e(1-t),yj=e=>1-Math.sin(Math.acos(e)),wA=mj(yj),QEe=gj(wA),vj=Zm(.33,1.53,.69,.99),xA=mj(vj),ZEe=gj(xA),JEe=e=>(e*=2)<1?.5*xA(e):.5*(2-Math.pow(2,-10*(e-1))),eAe={linear:tr,easeIn:KEe,easeInOut:pj,easeOut:XEe,circIn:yj,circInOut:QEe,circOut:wA,backIn:xA,backInOut:ZEe,backOut:vj,anticipate:JEe},EI=e=>{if(Array.isArray(e)){SA(e.length===4);const[t,n,r,i]=e;return Zm(t,n,r,i)}else if(typeof e=="string")return eAe[e];return e},CA=(e,t)=>n=>!!(Ym(n)&&JTe.test(n)&&n.startsWith(e)||t&&Object.prototype.hasOwnProperty.call(n,t)),_j=(e,t,n)=>r=>{if(!Ym(r))return r;const[i,o,s,a]=r.match(_2);return{[e]:parseFloat(i),[t]:parseFloat(o),[n]:parseFloat(s),alpha:a!==void 0?parseFloat(a):1}},tAe=e=>au(0,255,e),hC={...jc,transform:e=>Math.round(tAe(e))},ec={test:CA("rgb","red"),parse:_j("red","green","blue"),transform:({red:e,green:t,blue:n,alpha:r=1})=>"rgba("+hC.transform(e)+", "+hC.transform(t)+", "+hC.transform(n)+", "+Wp(Hp.transform(r))+")"};function nAe(e){let t="",n="",r="",i="";return e.length>5?(t=e.substring(1,3),n=e.substring(3,5),r=e.substring(5,7),i=e.substring(7,9)):(t=e.substring(1,2),n=e.substring(2,3),r=e.substring(3,4),i=e.substring(4,5),t+=t,n+=n,r+=r,i+=i),{red:parseInt(t,16),green:parseInt(n,16),blue:parseInt(r,16),alpha:i?parseInt(i,16)/255:1}}const H5={test:CA("#"),parse:nAe,transform:ec.transform},Yd={test:CA("hsl","hue"),parse:_j("hue","saturation","lightness"),transform:({hue:e,saturation:t,lightness:n,alpha:r=1})=>"hsla("+Math.round(e)+", "+qs.transform(Wp(t))+", "+qs.transform(Wp(n))+", "+Wp(Hp.transform(r))+")"},hi={test:e=>ec.test(e)||H5.test(e)||Yd.test(e),parse:e=>ec.test(e)?ec.parse(e):Yd.test(e)?Yd.parse(e):H5.parse(e),transform:e=>Ym(e)?e:e.hasOwnProperty("red")?ec.transform(e):Yd.transform(e)},Pn=(e,t,n)=>-n*e+n*t+e;function pC(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function rAe({hue:e,saturation:t,lightness:n,alpha:r}){e/=360,t/=100,n/=100;let i=0,o=0,s=0;if(!t)i=o=s=n;else{const a=n<.5?n*(1+t):n+t-n*t,l=2*n-a;i=pC(l,a,e+1/3),o=pC(l,a,e),s=pC(l,a,e-1/3)}return{red:Math.round(i*255),green:Math.round(o*255),blue:Math.round(s*255),alpha:r}}const gC=(e,t,n)=>{const r=e*e;return Math.sqrt(Math.max(0,n*(t*t-r)+r))},iAe=[H5,ec,Yd],oAe=e=>iAe.find(t=>t.test(e));function AI(e){const t=oAe(e);let n=t.parse(e);return t===Yd&&(n=rAe(n)),n}const bj=(e,t)=>{const n=AI(e),r=AI(t),i={...n};return o=>(i.red=gC(n.red,r.red,o),i.green=gC(n.green,r.green,o),i.blue=gC(n.blue,r.blue,o),i.alpha=Pn(n.alpha,r.alpha,o),ec.transform(i))};function sAe(e){var t,n;return isNaN(e)&&Ym(e)&&(((t=e.match(_2))===null||t===void 0?void 0:t.length)||0)+(((n=e.match(HV))===null||n===void 0?void 0:n.length)||0)>0}const Sj={regex:QTe,countKey:"Vars",token:"${v}",parse:tr},wj={regex:HV,countKey:"Colors",token:"${c}",parse:hi.parse},xj={regex:_2,countKey:"Numbers",token:"${n}",parse:jc.parse};function mC(e,{regex:t,countKey:n,token:r,parse:i}){const o=e.tokenised.match(t);o&&(e["num"+n]=o.length,e.tokenised=e.tokenised.replace(t,r),e.values.push(...o.map(i)))}function C_(e){const t=e.toString(),n={value:t,tokenised:t,values:[],numVars:0,numColors:0,numNumbers:0};return n.value.includes("var(--")&&mC(n,Sj),mC(n,wj),mC(n,xj),n}function Cj(e){return C_(e).values}function Tj(e){const{values:t,numColors:n,numVars:r,tokenised:i}=C_(e),o=t.length;return s=>{let a=i;for(let l=0;ltypeof e=="number"?0:e;function lAe(e){const t=Cj(e);return Tj(e)(t.map(aAe))}const lu={test:sAe,parse:Cj,createTransformer:Tj,getAnimatableNone:lAe},Ej=(e,t)=>n=>`${n>0?t:e}`;function Aj(e,t){return typeof e=="number"?n=>Pn(e,t,n):hi.test(e)?bj(e,t):e.startsWith("var(")?Ej(e,t):Rj(e,t)}const Pj=(e,t)=>{const n=[...e],r=n.length,i=e.map((o,s)=>Aj(o,t[s]));return o=>{for(let s=0;s{const n={...e,...t},r={};for(const i in n)e[i]!==void 0&&t[i]!==void 0&&(r[i]=Aj(e[i],t[i]));return i=>{for(const o in r)n[o]=r[o](i);return n}},Rj=(e,t)=>{const n=lu.createTransformer(t),r=C_(e),i=C_(t);return r.numVars===i.numVars&&r.numColors===i.numColors&&r.numNumbers>=i.numNumbers?ql(Pj(r.values,i.values),n):Ej(e,t)},im=(e,t,n)=>{const r=t-e;return r===0?1:(n-e)/r},PI=(e,t)=>n=>Pn(e,t,n);function cAe(e){return typeof e=="number"?PI:typeof e=="string"?hi.test(e)?bj:Rj:Array.isArray(e)?Pj:typeof e=="object"?uAe:PI}function dAe(e,t,n){const r=[],i=n||cAe(e[0]),o=e.length-1;for(let s=0;st[0];e[0]>e[o-1]&&(e=[...e].reverse(),t=[...t].reverse());const s=dAe(t,r,i),a=s.length,l=u=>{let d=0;if(a>1)for(;dl(au(e[0],e[o-1],u)):l}function fAe(e,t){const n=e[e.length-1];for(let r=1;r<=t;r++){const i=im(0,t,r);e.push(Pn(n,1,i))}}function hAe(e){const t=[0];return fAe(t,e.length-1),t}function pAe(e,t){return e.map(n=>n*t)}function gAe(e,t){return e.map(()=>t||pj).splice(0,e.length-1)}function T_({duration:e=300,keyframes:t,times:n,ease:r="easeInOut"}){const i=YEe(r)?r.map(EI):EI(r),o={done:!1,value:t[0]},s=pAe(n&&n.length===t.length?n:hAe(t),e),a=Oj(s,t,{ease:Array.isArray(i)?i:gAe(t,i)});return{calculatedDuration:e,next:l=>(o.value=a(l),o.done=l>=e,o)}}function kj(e,t){return t?e*(1e3/t):0}const mAe=5;function Ij(e,t,n){const r=Math.max(t-mAe,0);return kj(n-e(r),t-r)}const yC=.001,yAe=.01,RI=10,vAe=.05,_Ae=1;function bAe({duration:e=800,bounce:t=.25,velocity:n=0,mass:r=1}){let i,o;zEe(e<=Kl(RI));let s=1-t;s=au(vAe,_Ae,s),e=au(yAe,RI,$a(e)),s<1?(i=u=>{const d=u*s,f=d*e,h=d-n,g=W5(u,s),m=Math.exp(-f);return yC-h/g*m},o=u=>{const f=u*s*e,h=f*n+n,g=Math.pow(s,2)*Math.pow(u,2)*e,m=Math.exp(-f),v=W5(Math.pow(u,2),s);return(-i(u)+yC>0?-1:1)*((h-g)*m)/v}):(i=u=>{const d=Math.exp(-u*e),f=(u-n)*e+1;return-yC+d*f},o=u=>{const d=Math.exp(-u*e),f=(n-u)*(e*e);return d*f});const a=5/e,l=wAe(i,o,a);if(e=Kl(e),isNaN(l))return{stiffness:100,damping:10,duration:e};{const u=Math.pow(l,2)*r;return{stiffness:u,damping:s*2*Math.sqrt(r*u),duration:e}}}const SAe=12;function wAe(e,t,n){let r=n;for(let i=1;ie[n]!==void 0)}function TAe(e){let t={velocity:0,stiffness:100,damping:10,mass:1,isResolvedFromDuration:!1,...e};if(!OI(e,CAe)&&OI(e,xAe)){const n=bAe(e);t={...t,...n,velocity:0,mass:1},t.isResolvedFromDuration=!0}return t}function Mj({keyframes:e,restDelta:t,restSpeed:n,...r}){const i=e[0],o=e[e.length-1],s={done:!1,value:i},{stiffness:a,damping:l,mass:u,velocity:d,duration:f,isResolvedFromDuration:h}=TAe(r),g=d?-$a(d):0,m=l/(2*Math.sqrt(a*u)),v=o-i,x=$a(Math.sqrt(a/u)),_=Math.abs(v)<5;n||(n=_?.01:2),t||(t=_?.005:.5);let b;if(m<1){const y=W5(x,m);b=S=>{const C=Math.exp(-m*x*S);return o-C*((g+m*x*v)/y*Math.sin(y*S)+v*Math.cos(y*S))}}else if(m===1)b=y=>o-Math.exp(-x*y)*(v+(g+x*v)*y);else{const y=x*Math.sqrt(m*m-1);b=S=>{const C=Math.exp(-m*x*S),T=Math.min(y*S,300);return o-C*((g+m*x*v)*Math.sinh(T)+y*v*Math.cosh(T))/y}}return{calculatedDuration:h&&f||null,next:y=>{const S=b(y);if(h)s.done=y>=f;else{let C=g;y!==0&&(m<1?C=Ij(b,y,S):C=0);const T=Math.abs(C)<=n,E=Math.abs(o-S)<=t;s.done=T&&E}return s.value=s.done?o:S,s}}}function kI({keyframes:e,velocity:t=0,power:n=.8,timeConstant:r=325,bounceDamping:i=10,bounceStiffness:o=500,modifyTarget:s,min:a,max:l,restDelta:u=.5,restSpeed:d}){const f=e[0],h={done:!1,value:f},g=P=>a!==void 0&&Pl,m=P=>a===void 0?l:l===void 0||Math.abs(a-P)-v*Math.exp(-P/r),y=P=>_+b(P),S=P=>{const k=b(P),O=y(P);h.done=Math.abs(k)<=u,h.value=h.done?_:O};let C,T;const E=P=>{g(h.value)&&(C=P,T=Mj({keyframes:[h.value,m(h.value)],velocity:Ij(y,P,h.value),damping:i,stiffness:o,restDelta:u,restSpeed:d}))};return E(0),{calculatedDuration:null,next:P=>{let k=!1;return!T&&C===void 0&&(k=!0,S(P),E(P)),C!==void 0&&P>C?T.next(P-C):(!k&&S(P),h)}}}const EAe=e=>{const t=({timestamp:n})=>e(n);return{start:()=>Sn.update(t,!0),stop:()=>Wa(t),now:()=>Zr.isProcessing?Zr.timestamp:performance.now()}},II=2e4;function MI(e){let t=0;const n=50;let r=e.next(t);for(;!r.done&&t=II?1/0:t}const AAe={decay:kI,inertia:kI,tween:T_,keyframes:T_,spring:Mj};function E_({autoplay:e=!0,delay:t=0,driver:n=EAe,keyframes:r,type:i="keyframes",repeat:o=0,repeatDelay:s=0,repeatType:a="loop",onPlay:l,onStop:u,onComplete:d,onUpdate:f,...h}){let g=1,m=!1,v,x;const _=()=>{x=new Promise(q=>{v=q})};_();let b;const y=AAe[i]||T_;let S;y!==T_&&typeof r[0]!="number"&&(S=Oj([0,100],r,{clamp:!1}),r=[0,100]);const C=y({...h,keyframes:r});let T;a==="mirror"&&(T=y({...h,keyframes:[...r].reverse(),velocity:-(h.velocity||0)}));let E="idle",P=null,k=null,O=null;C.calculatedDuration===null&&o&&(C.calculatedDuration=MI(C));const{calculatedDuration:M}=C;let V=1/0,B=1/0;M!==null&&(V=M+s,B=V*(o+1)-s);let A=0;const N=q=>{if(k===null)return;g>0&&(k=Math.min(k,q)),g<0&&(k=Math.min(q-B/g,k)),P!==null?A=P:A=Math.round(q-k)*g;const Z=A-t*(g>=0?1:-1),ee=g>=0?Z<0:Z>B;A=Math.max(Z,0),E==="finished"&&P===null&&(A=B);let ie=A,se=C;if(o){const fe=A/V;let pe=Math.floor(fe),ve=fe%1;!ve&&fe>=1&&(ve=1),ve===1&&pe--,pe=Math.min(pe,o+1);const ye=!!(pe%2);ye&&(a==="reverse"?(ve=1-ve,s&&(ve-=s/V)):a==="mirror"&&(se=T));let Je=au(0,1,ve);A>B&&(Je=a==="reverse"&&ye?1:0),ie=Je*V}const le=ee?{done:!1,value:r[0]}:se.next(ie);S&&(le.value=S(le.value));let{done:W}=le;!ee&&M!==null&&(W=g>=0?A>=B:A<=0);const ne=P===null&&(E==="finished"||E==="running"&&W);return f&&f(le.value),ne&&$(),le},D=()=>{b&&b.stop(),b=void 0},U=()=>{E="idle",D(),v(),_(),k=O=null},$=()=>{E="finished",d&&d(),D(),v()},j=()=>{if(m)return;b||(b=n(N));const q=b.now();l&&l(),P!==null?k=q-P:(!k||E==="finished")&&(k=q),E==="finished"&&_(),O=k,P=null,E="running",b.start()};e&&j();const G={then(q,Z){return x.then(q,Z)},get time(){return $a(A)},set time(q){q=Kl(q),A=q,P!==null||!b||g===0?P=q:k=b.now()-q/g},get duration(){const q=C.calculatedDuration===null?MI(C):C.calculatedDuration;return $a(q)},get speed(){return g},set speed(q){q===g||!b||(g=q,G.time=$a(A))},get state(){return E},play:j,pause:()=>{E="paused",P=A},stop:()=>{m=!0,E!=="idle"&&(E="idle",u&&u(),U())},cancel:()=>{O!==null&&N(O),U()},complete:()=>{E="finished"},sample:q=>(k=0,N(q))};return G}const PAe=new Set(["opacity","clipPath","filter","transform","backgroundColor"]),ov=10,RAe=2e4,OAe=(e,t)=>t.type==="spring"||e==="backgroundColor"||!uj(t.ease);function kAe(e,t,{onUpdate:n,onComplete:r,...i}){if(!(fj.waapi()&&PAe.has(t)&&!i.repeatDelay&&i.repeatType!=="mirror"&&i.damping!==0&&i.type!=="inertia"))return!1;let s=!1,a,l;const u=()=>{l=new Promise(_=>{a=_})};u();let{keyframes:d,duration:f=300,ease:h,times:g}=i;if(OAe(t,i)){const _=E_({...i,repeat:0,delay:0});let b={done:!1,value:d[0]};const y=[];let S=0;for(;!b.done&&Sm.cancel(),x=()=>{Sn.update(v),a(),u()};return m.onfinish=()=>{e.set(GEe(d,i)),r&&r(),x()},{then(_,b){return l.then(_,b)},get time(){return $a(m.currentTime||0)},set time(_){m.currentTime=Kl(_)},get speed(){return m.playbackRate},set speed(_){m.playbackRate=_},get duration(){return $a(f)},play:()=>{s||(m.play(),Wa(v))},pause:()=>m.pause(),stop:()=>{if(s=!0,m.playState==="idle")return;const{currentTime:_}=m;if(_){const b=E_({...i,autoplay:!1});e.setWithVelocity(b.sample(_-ov).value,b.sample(_).value,ov)}x()},complete:()=>m.finish(),cancel:x}}function IAe({keyframes:e,delay:t,onUpdate:n,onComplete:r}){const i=()=>(n&&n(e[e.length-1]),r&&r(),{time:0,speed:1,duration:0,play:tr,pause:tr,stop:tr,then:o=>(o(),Promise.resolve()),cancel:tr,complete:tr});return t?E_({keyframes:[0,1],duration:0,delay:t,onComplete:i}):i()}const MAe={type:"spring",stiffness:500,damping:25,restSpeed:10},NAe=e=>({type:"spring",stiffness:550,damping:e===0?2*Math.sqrt(550):30,restSpeed:10}),LAe={type:"keyframes",duration:.8},DAe={type:"keyframes",ease:[.25,.1,.35,1],duration:.3},$Ae=(e,{keyframes:t})=>t.length>2?LAe:Vc.has(e)?e.startsWith("scale")?NAe(t[1]):MAe:DAe,q5=(e,t)=>e==="zIndex"?!1:!!(typeof t=="number"||Array.isArray(t)||typeof t=="string"&&(lu.test(t)||t==="0")&&!t.startsWith("url(")),FAe=new Set(["brightness","contrast","saturate","opacity"]);function BAe(e){const[t,n]=e.slice(0,-1).split("(");if(t==="drop-shadow")return e;const[r]=n.match(_2)||[];if(!r)return e;const i=n.replace(r,"");let o=FAe.has(t)?1:0;return r!==n&&(o*=100),t+"("+o+i+")"}const UAe=/([a-z-]*)\(.*?\)/g,K5={...lu,getAnimatableNone:e=>{const t=e.match(UAe);return t?t.map(BAe).join(" "):e}},zAe={...WV,color:hi,backgroundColor:hi,outlineColor:hi,fill:hi,stroke:hi,borderColor:hi,borderTopColor:hi,borderRightColor:hi,borderBottomColor:hi,borderLeftColor:hi,filter:K5,WebkitFilter:K5},TA=e=>zAe[e];function Nj(e,t){let n=TA(e);return n!==K5&&(n=lu),n.getAnimatableNone?n.getAnimatableNone(t):void 0}const Lj=e=>/^0[^.\s]+$/.test(e);function VAe(e){if(typeof e=="number")return e===0;if(e!==null)return e==="none"||e==="0"||Lj(e)}function jAe(e,t,n,r){const i=q5(t,n);let o;Array.isArray(n)?o=[...n]:o=[null,n];const s=r.from!==void 0?r.from:e.get();let a;const l=[];for(let u=0;ui=>{const o=Dj(r,e)||{},s=o.delay||r.delay||0;let{elapsed:a=0}=r;a=a-Kl(s);const l=jAe(t,e,n,o),u=l[0],d=l[l.length-1],f=q5(e,u),h=q5(e,d);let g={keyframes:l,velocity:t.getVelocity(),ease:"easeOut",...o,delay:-a,onUpdate:m=>{t.set(m),o.onUpdate&&o.onUpdate(m)},onComplete:()=>{i(),o.onComplete&&o.onComplete()}};if(GAe(o)||(g={...g,...$Ae(e,g)}),g.duration&&(g.duration=Kl(g.duration)),g.repeatDelay&&(g.repeatDelay=Kl(g.repeatDelay)),!f||!h||VEe.current||o.type===!1)return IAe(g);if(t.owner&&t.owner.current instanceof HTMLElement&&!t.owner.getProps().onUpdate){const m=kAe(t,e,g);if(m)return m}return E_(g)};function A_(e){return!!(zi(e)&&e.add)}const HAe=e=>/^\-?\d*\.?\d+$/.test(e);function AA(e,t){e.indexOf(t)===-1&&e.push(t)}function PA(e,t){const n=e.indexOf(t);n>-1&&e.splice(n,1)}class RA{constructor(){this.subscriptions=[]}add(t){return AA(this.subscriptions,t),()=>PA(this.subscriptions,t)}notify(t,n,r){const i=this.subscriptions.length;if(i)if(i===1)this.subscriptions[0](t,n,r);else for(let o=0;o!isNaN(parseFloat(e));class qAe{constructor(t,n={}){this.version="10.12.22",this.timeDelta=0,this.lastUpdated=0,this.canTrackVelocity=!1,this.events={},this.updateAndNotify=(r,i=!0)=>{this.prev=this.current,this.current=r;const{delta:o,timestamp:s}=Zr;this.lastUpdated!==s&&(this.timeDelta=o,this.lastUpdated=s,Sn.postRender(this.scheduleVelocityCheck)),this.prev!==this.current&&this.events.change&&this.events.change.notify(this.current),this.events.velocityChange&&this.events.velocityChange.notify(this.getVelocity()),i&&this.events.renderRequest&&this.events.renderRequest.notify(this.current)},this.scheduleVelocityCheck=()=>Sn.postRender(this.velocityCheck),this.velocityCheck=({timestamp:r})=>{r!==this.lastUpdated&&(this.prev=this.current,this.events.velocityChange&&this.events.velocityChange.notify(this.getVelocity()))},this.hasAnimated=!1,this.prev=this.current=t,this.canTrackVelocity=WAe(this.current),this.owner=n.owner}onChange(t){return this.on("change",t)}on(t,n){this.events[t]||(this.events[t]=new RA);const r=this.events[t].add(n);return t==="change"?()=>{r(),Sn.read(()=>{this.events.change.getSize()||this.stop()})}:r}clearListeners(){for(const t in this.events)this.events[t].clear()}attach(t,n){this.passiveEffect=t,this.stopPassiveEffect=n}set(t,n=!0){!n||!this.passiveEffect?this.updateAndNotify(t,n):this.passiveEffect(t,this.updateAndNotify)}setWithVelocity(t,n,r){this.set(n),this.prev=t,this.timeDelta=r}jump(t){this.updateAndNotify(t),this.prev=t,this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}get(){return this.current}getPrevious(){return this.prev}getVelocity(){return this.canTrackVelocity?kj(parseFloat(this.current)-parseFloat(this.prev),this.timeDelta):0}start(t){return this.stop(),new Promise(n=>{this.hasAnimated=!0,this.animation=t(n),this.events.animationStart&&this.events.animationStart.notify()}).then(()=>{this.events.animationComplete&&this.events.animationComplete.notify(),this.clearAnimation()})}stop(){this.animation&&(this.animation.stop(),this.events.animationCancel&&this.events.animationCancel.notify()),this.clearAnimation()}isAnimating(){return!!this.animation}clearAnimation(){delete this.animation}destroy(){this.clearListeners(),this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}}function Wf(e,t){return new qAe(e,t)}const $j=e=>t=>t.test(e),KAe={test:e=>e==="auto",parse:e=>e},Fj=[jc,He,qs,bl,tEe,eEe,KAe],_p=e=>Fj.find($j(e)),XAe=[...Fj,hi,lu],YAe=e=>XAe.find($j(e));function QAe(e,t,n){e.hasValue(t)?e.getValue(t).set(n):e.addValue(t,Wf(n))}function ZAe(e,t){const n=S2(e,t);let{transitionEnd:r={},transition:i={},...o}=n?e.makeTargetAnimatable(n,!1):{};o={...o,...r};for(const s in o){const a=gEe(o[s]);QAe(e,s,a)}}function JAe(e,t,n){var r,i;const o=Object.keys(t).filter(a=>!e.hasValue(a)),s=o.length;if(s)for(let a=0;al.remove(f))),u.push(v)}return s&&Promise.all(u).then(()=>{s&&ZAe(e,s)}),u}function X5(e,t,n={}){const r=S2(e,t,n.custom);let{transition:i=e.getDefaultTransition()||{}}=r||{};n.transitionOverride&&(i=n.transitionOverride);const o=r?()=>Promise.all(Bj(e,r,n)):()=>Promise.resolve(),s=e.variantChildren&&e.variantChildren.size?(l=0)=>{const{delayChildren:u=0,staggerChildren:d,staggerDirection:f}=i;return r6e(e,t,u+l,d,f,n)}:()=>Promise.resolve(),{when:a}=i;if(a){const[l,u]=a==="beforeChildren"?[o,s]:[s,o];return l().then(()=>u())}else return Promise.all([o(),s(n.delay)])}function r6e(e,t,n=0,r=0,i=1,o){const s=[],a=(e.variantChildren.size-1)*r,l=i===1?(u=0)=>u*r:(u=0)=>a-u*r;return Array.from(e.variantChildren).sort(i6e).forEach((u,d)=>{u.notify("AnimationStart",t),s.push(X5(u,t,{...o,delay:n+l(d)}).then(()=>u.notify("AnimationComplete",t)))}),Promise.all(s)}function i6e(e,t){return e.sortNodePosition(t)}function o6e(e,t,n={}){e.notify("AnimationStart",t);let r;if(Array.isArray(t)){const i=t.map(o=>X5(e,o,n));r=Promise.all(i)}else if(typeof t=="string")r=X5(e,t,n);else{const i=typeof t=="function"?S2(e,t,n.custom):t;r=Promise.all(Bj(e,i,n))}return r.then(()=>e.notify("AnimationComplete",t))}const s6e=[...cA].reverse(),a6e=cA.length;function l6e(e){return t=>Promise.all(t.map(({animation:n,options:r})=>o6e(e,n,r)))}function u6e(e){let t=l6e(e);const n=d6e();let r=!0;const i=(l,u)=>{const d=S2(e,u);if(d){const{transition:f,transitionEnd:h,...g}=d;l={...l,...g,...h}}return l};function o(l){t=l(e)}function s(l,u){const d=e.getProps(),f=e.getVariantContext(!0)||{},h=[],g=new Set;let m={},v=1/0;for(let _=0;_v&&C;const O=Array.isArray(S)?S:[S];let M=O.reduce(i,{});T===!1&&(M={});const{prevResolvedValues:V={}}=y,B={...V,...M},A=N=>{k=!0,g.delete(N),y.needsAnimating[N]=!0};for(const N in B){const D=M[N],U=V[N];m.hasOwnProperty(N)||(D!==U?x_(D)&&x_(U)?!aj(D,U)||P?A(N):y.protectedKeys[N]=!0:D!==void 0?A(N):g.add(N):D!==void 0&&g.has(N)?A(N):y.protectedKeys[N]=!0)}y.prevProp=S,y.prevResolvedValues=M,y.isActive&&(m={...m,...M}),r&&e.blockInitialAnimation&&(k=!1),k&&!E&&h.push(...O.map(N=>({animation:N,options:{type:b,...l}})))}if(g.size){const _={};g.forEach(b=>{const y=e.getBaseTarget(b);y!==void 0&&(_[b]=y)}),h.push({animation:_})}let x=!!h.length;return r&&d.initial===!1&&!e.manuallyAnimateOnMount&&(x=!1),r=!1,x?t(h):Promise.resolve()}function a(l,u,d){var f;if(n[l].isActive===u)return Promise.resolve();(f=e.variantChildren)===null||f===void 0||f.forEach(g=>{var m;return(m=g.animationState)===null||m===void 0?void 0:m.setActive(l,u)}),n[l].isActive=u;const h=s(d,l);for(const g in n)n[g].protectedKeys={};return h}return{animateChanges:s,setActive:a,setAnimateFunction:o,getState:()=>n}}function c6e(e,t){return typeof t=="string"?t!==e:Array.isArray(t)?!aj(t,e):!1}function Fu(e=!1){return{isActive:e,protectedKeys:{},needsAnimating:{},prevResolvedValues:{}}}function d6e(){return{animate:Fu(!0),whileInView:Fu(),whileHover:Fu(),whileTap:Fu(),whileDrag:Fu(),whileFocus:Fu(),exit:Fu()}}class f6e extends xu{constructor(t){super(t),t.animationState||(t.animationState=u6e(t))}updateAnimationControlsSubscription(){const{animate:t}=this.node.getProps();this.unmount(),y2(t)&&(this.unmount=t.subscribe(this.node))}mount(){this.updateAnimationControlsSubscription()}update(){const{animate:t}=this.node.getProps(),{animate:n}=this.node.prevProps||{};t!==n&&this.updateAnimationControlsSubscription()}unmount(){}}let h6e=0;class p6e extends xu{constructor(){super(...arguments),this.id=h6e++}update(){if(!this.node.presenceContext)return;const{isPresent:t,onExitComplete:n,custom:r}=this.node.presenceContext,{isPresent:i}=this.node.prevPresenceContext||{};if(!this.node.animationState||t===i)return;const o=this.node.animationState.setActive("exit",!t,{custom:r??this.node.getProps().custom});n&&!t&&o.then(()=>n(this.id))}mount(){const{register:t}=this.node.presenceContext||{};t&&(this.unmount=t(this.id))}unmount(){}}const g6e={animation:{Feature:f6e},exit:{Feature:p6e}},NI=(e,t)=>Math.abs(e-t);function m6e(e,t){const n=NI(e.x,t.x),r=NI(e.y,t.y);return Math.sqrt(n**2+r**2)}class Uj{constructor(t,n,{transformPagePoint:r}={}){if(this.startEvent=null,this.lastMoveEvent=null,this.lastMoveEventInfo=null,this.handlers={},this.updatePoint=()=>{if(!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const u=_C(this.lastMoveEventInfo,this.history),d=this.startEvent!==null,f=m6e(u.offset,{x:0,y:0})>=3;if(!d&&!f)return;const{point:h}=u,{timestamp:g}=Zr;this.history.push({...h,timestamp:g});const{onStart:m,onMove:v}=this.handlers;d||(m&&m(this.lastMoveEvent,u),this.startEvent=this.lastMoveEvent),v&&v(this.lastMoveEvent,u)},this.handlePointerMove=(u,d)=>{this.lastMoveEvent=u,this.lastMoveEventInfo=vC(d,this.transformPagePoint),Sn.update(this.updatePoint,!0)},this.handlePointerUp=(u,d)=>{if(this.end(),!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const{onEnd:f,onSessionEnd:h}=this.handlers,g=_C(u.type==="pointercancel"?this.lastMoveEventInfo:vC(d,this.transformPagePoint),this.history);this.startEvent&&f&&f(u,g),h&&h(u,g)},!nj(t))return;this.handlers=n,this.transformPagePoint=r;const i=b2(t),o=vC(i,this.transformPagePoint),{point:s}=o,{timestamp:a}=Zr;this.history=[{...s,timestamp:a}];const{onSessionStart:l}=n;l&&l(t,_C(o,this.history)),this.removeListeners=ql(Da(window,"pointermove",this.handlePointerMove),Da(window,"pointerup",this.handlePointerUp),Da(window,"pointercancel",this.handlePointerUp))}updateHandlers(t){this.handlers=t}end(){this.removeListeners&&this.removeListeners(),Wa(this.updatePoint)}}function vC(e,t){return t?{point:t(e.point)}:e}function LI(e,t){return{x:e.x-t.x,y:e.y-t.y}}function _C({point:e},t){return{point:e,delta:LI(e,zj(t)),offset:LI(e,y6e(t)),velocity:v6e(t,.1)}}function y6e(e){return e[0]}function zj(e){return e[e.length-1]}function v6e(e,t){if(e.length<2)return{x:0,y:0};let n=e.length-1,r=null;const i=zj(e);for(;n>=0&&(r=e[n],!(i.timestamp-r.timestamp>Kl(t)));)n--;if(!r)return{x:0,y:0};const o=$a(i.timestamp-r.timestamp);if(o===0)return{x:0,y:0};const s={x:(i.x-r.x)/o,y:(i.y-r.y)/o};return s.x===1/0&&(s.x=0),s.y===1/0&&(s.y=0),s}function oo(e){return e.max-e.min}function Y5(e,t=0,n=.01){return Math.abs(e-t)<=n}function DI(e,t,n,r=.5){e.origin=r,e.originPoint=Pn(t.min,t.max,e.origin),e.scale=oo(n)/oo(t),(Y5(e.scale,1,1e-4)||isNaN(e.scale))&&(e.scale=1),e.translate=Pn(n.min,n.max,e.origin)-e.originPoint,(Y5(e.translate)||isNaN(e.translate))&&(e.translate=0)}function qp(e,t,n,r){DI(e.x,t.x,n.x,r?r.originX:void 0),DI(e.y,t.y,n.y,r?r.originY:void 0)}function $I(e,t,n){e.min=n.min+t.min,e.max=e.min+oo(t)}function _6e(e,t,n){$I(e.x,t.x,n.x),$I(e.y,t.y,n.y)}function FI(e,t,n){e.min=t.min-n.min,e.max=e.min+oo(t)}function Kp(e,t,n){FI(e.x,t.x,n.x),FI(e.y,t.y,n.y)}function b6e(e,{min:t,max:n},r){return t!==void 0&&en&&(e=r?Pn(n,e,r.max):Math.min(e,n)),e}function BI(e,t,n){return{min:t!==void 0?e.min+t:void 0,max:n!==void 0?e.max+n-(e.max-e.min):void 0}}function S6e(e,{top:t,left:n,bottom:r,right:i}){return{x:BI(e.x,n,i),y:BI(e.y,t,r)}}function UI(e,t){let n=t.min-e.min,r=t.max-e.max;return t.max-t.minr?n=im(t.min,t.max-r,e.min):r>i&&(n=im(e.min,e.max-i,t.min)),au(0,1,n)}function C6e(e,t){const n={};return t.min!==void 0&&(n.min=t.min-e.min),t.max!==void 0&&(n.max=t.max-e.min),n}const Q5=.35;function T6e(e=Q5){return e===!1?e=0:e===!0&&(e=Q5),{x:zI(e,"left","right"),y:zI(e,"top","bottom")}}function zI(e,t,n){return{min:VI(e,t),max:VI(e,n)}}function VI(e,t){return typeof e=="number"?e:e[t]||0}const jI=()=>({translate:0,scale:1,origin:0,originPoint:0}),Qd=()=>({x:jI(),y:jI()}),GI=()=>({min:0,max:0}),Xn=()=>({x:GI(),y:GI()});function Ps(e){return[e("x"),e("y")]}function Vj({top:e,left:t,right:n,bottom:r}){return{x:{min:t,max:n},y:{min:e,max:r}}}function E6e({x:e,y:t}){return{top:t.min,right:e.max,bottom:t.max,left:e.min}}function A6e(e,t){if(!t)return e;const n=t({x:e.left,y:e.top}),r=t({x:e.right,y:e.bottom});return{top:n.y,left:n.x,bottom:r.y,right:r.x}}function bC(e){return e===void 0||e===1}function Z5({scale:e,scaleX:t,scaleY:n}){return!bC(e)||!bC(t)||!bC(n)}function ju(e){return Z5(e)||jj(e)||e.z||e.rotate||e.rotateX||e.rotateY}function jj(e){return HI(e.x)||HI(e.y)}function HI(e){return e&&e!=="0%"}function P_(e,t,n){const r=e-n,i=t*r;return n+i}function WI(e,t,n,r,i){return i!==void 0&&(e=P_(e,i,r)),P_(e,n,r)+t}function J5(e,t=0,n=1,r,i){e.min=WI(e.min,t,n,r,i),e.max=WI(e.max,t,n,r,i)}function Gj(e,{x:t,y:n}){J5(e.x,t.translate,t.scale,t.originPoint),J5(e.y,n.translate,n.scale,n.originPoint)}function P6e(e,t,n,r=!1){const i=n.length;if(!i)return;t.x=t.y=1;let o,s;for(let a=0;a1.0000000000001||e<.999999999999?e:1}function Tl(e,t){e.min=e.min+t,e.max=e.max+t}function KI(e,t,[n,r,i]){const o=t[i]!==void 0?t[i]:.5,s=Pn(e.min,e.max,o);J5(e,t[n],t[r],s,t.scale)}const R6e=["x","scaleX","originX"],O6e=["y","scaleY","originY"];function Zd(e,t){KI(e.x,t,R6e),KI(e.y,t,O6e)}function Hj(e,t){return Vj(A6e(e.getBoundingClientRect(),t))}function k6e(e,t,n){const r=Hj(e,n),{scroll:i}=t;return i&&(Tl(r.x,i.offset.x),Tl(r.y,i.offset.y)),r}const I6e=new WeakMap;class M6e{constructor(t){this.openGlobalLock=null,this.isDragging=!1,this.currentDirection=null,this.originPoint={x:0,y:0},this.constraints=!1,this.hasMutatedConstraints=!1,this.elastic=Xn(),this.visualElement=t}start(t,{snapToCursor:n=!1}={}){const{presenceContext:r}=this.visualElement;if(r&&r.isPresent===!1)return;const i=l=>{this.stopAnimation(),n&&this.snapToCursor(b2(l,"page").point)},o=(l,u)=>{const{drag:d,dragPropagation:f,onDragStart:h}=this.getProps();if(d&&!f&&(this.openGlobalLock&&this.openGlobalLock(),this.openGlobalLock=ij(d),!this.openGlobalLock))return;this.isDragging=!0,this.currentDirection=null,this.resolveConstraints(),this.visualElement.projection&&(this.visualElement.projection.isAnimationBlocked=!0,this.visualElement.projection.target=void 0),Ps(m=>{let v=this.getAxisMotionValue(m).get()||0;if(qs.test(v)){const{projection:x}=this.visualElement;if(x&&x.layout){const _=x.layout.layoutBox[m];_&&(v=oo(_)*(parseFloat(v)/100))}}this.originPoint[m]=v}),h&&Sn.update(()=>h(l,u),!1,!0);const{animationState:g}=this.visualElement;g&&g.setActive("whileDrag",!0)},s=(l,u)=>{const{dragPropagation:d,dragDirectionLock:f,onDirectionLock:h,onDrag:g}=this.getProps();if(!d&&!this.openGlobalLock)return;const{offset:m}=u;if(f&&this.currentDirection===null){this.currentDirection=N6e(m),this.currentDirection!==null&&h&&h(this.currentDirection);return}this.updateAxis("x",u.point,m),this.updateAxis("y",u.point,m),this.visualElement.render(),g&&g(l,u)},a=(l,u)=>this.stop(l,u);this.panSession=new Uj(t,{onSessionStart:i,onStart:o,onMove:s,onSessionEnd:a},{transformPagePoint:this.visualElement.getTransformPagePoint()})}stop(t,n){const r=this.isDragging;if(this.cancel(),!r)return;const{velocity:i}=n;this.startAnimation(i);const{onDragEnd:o}=this.getProps();o&&Sn.update(()=>o(t,n))}cancel(){this.isDragging=!1;const{projection:t,animationState:n}=this.visualElement;t&&(t.isAnimationBlocked=!1),this.panSession&&this.panSession.end(),this.panSession=void 0;const{dragPropagation:r}=this.getProps();!r&&this.openGlobalLock&&(this.openGlobalLock(),this.openGlobalLock=null),n&&n.setActive("whileDrag",!1)}updateAxis(t,n,r){const{drag:i}=this.getProps();if(!r||!sv(t,i,this.currentDirection))return;const o=this.getAxisMotionValue(t);let s=this.originPoint[t]+r[t];this.constraints&&this.constraints[t]&&(s=b6e(s,this.constraints[t],this.elastic[t])),o.set(s)}resolveConstraints(){const{dragConstraints:t,dragElastic:n}=this.getProps(),{layout:r}=this.visualElement.projection||{},i=this.constraints;t&&Xd(t)?this.constraints||(this.constraints=this.resolveRefConstraints()):t&&r?this.constraints=S6e(r.layoutBox,t):this.constraints=!1,this.elastic=T6e(n),i!==this.constraints&&r&&this.constraints&&!this.hasMutatedConstraints&&Ps(o=>{this.getAxisMotionValue(o)&&(this.constraints[o]=C6e(r.layoutBox[o],this.constraints[o]))})}resolveRefConstraints(){const{dragConstraints:t,onMeasureDragConstraints:n}=this.getProps();if(!t||!Xd(t))return!1;const r=t.current,{projection:i}=this.visualElement;if(!i||!i.layout)return!1;const o=k6e(r,i.root,this.visualElement.getTransformPagePoint());let s=w6e(i.layout.layoutBox,o);if(n){const a=n(E6e(s));this.hasMutatedConstraints=!!a,a&&(s=Vj(a))}return s}startAnimation(t){const{drag:n,dragMomentum:r,dragElastic:i,dragTransition:o,dragSnapToOrigin:s,onDragTransitionEnd:a}=this.getProps(),l=this.constraints||{},u=Ps(d=>{if(!sv(d,n,this.currentDirection))return;let f=l&&l[d]||{};s&&(f={min:0,max:0});const h=i?200:1e6,g=i?40:1e7,m={type:"inertia",velocity:r?t[d]:0,bounceStiffness:h,bounceDamping:g,timeConstant:750,restDelta:1,restSpeed:10,...o,...f};return this.startAxisValueAnimation(d,m)});return Promise.all(u).then(a)}startAxisValueAnimation(t,n){const r=this.getAxisMotionValue(t);return r.start(EA(t,r,0,n))}stopAnimation(){Ps(t=>this.getAxisMotionValue(t).stop())}getAxisMotionValue(t){const n="_drag"+t.toUpperCase(),r=this.visualElement.getProps(),i=r[n];return i||this.visualElement.getValue(t,(r.initial?r.initial[t]:void 0)||0)}snapToCursor(t){Ps(n=>{const{drag:r}=this.getProps();if(!sv(n,r,this.currentDirection))return;const{projection:i}=this.visualElement,o=this.getAxisMotionValue(n);if(i&&i.layout){const{min:s,max:a}=i.layout.layoutBox[n];o.set(t[n]-Pn(s,a,.5))}})}scalePositionWithinConstraints(){if(!this.visualElement.current)return;const{drag:t,dragConstraints:n}=this.getProps(),{projection:r}=this.visualElement;if(!Xd(n)||!r||!this.constraints)return;this.stopAnimation();const i={x:0,y:0};Ps(s=>{const a=this.getAxisMotionValue(s);if(a){const l=a.get();i[s]=x6e({min:l,max:l},this.constraints[s])}});const{transformTemplate:o}=this.visualElement.getProps();this.visualElement.current.style.transform=o?o({},""):"none",r.root&&r.root.updateScroll(),r.updateLayout(),this.resolveConstraints(),Ps(s=>{if(!sv(s,t,null))return;const a=this.getAxisMotionValue(s),{min:l,max:u}=this.constraints[s];a.set(Pn(l,u,i[s]))})}addListeners(){if(!this.visualElement.current)return;I6e.set(this.visualElement,this);const t=this.visualElement.current,n=Da(t,"pointerdown",l=>{const{drag:u,dragListener:d=!0}=this.getProps();u&&d&&this.start(l)}),r=()=>{const{dragConstraints:l}=this.getProps();Xd(l)&&(this.constraints=this.resolveRefConstraints())},{projection:i}=this.visualElement,o=i.addEventListener("measure",r);i&&!i.layout&&(i.root&&i.root.updateScroll(),i.updateLayout()),r();const s=ka(window,"resize",()=>this.scalePositionWithinConstraints()),a=i.addEventListener("didUpdate",({delta:l,hasLayoutChanged:u})=>{this.isDragging&&u&&(Ps(d=>{const f=this.getAxisMotionValue(d);f&&(this.originPoint[d]+=l[d].translate,f.set(f.get()+l[d].translate))}),this.visualElement.render())});return()=>{s(),n(),o(),a&&a()}}getProps(){const t=this.visualElement.getProps(),{drag:n=!1,dragDirectionLock:r=!1,dragPropagation:i=!1,dragConstraints:o=!1,dragElastic:s=Q5,dragMomentum:a=!0}=t;return{...t,drag:n,dragDirectionLock:r,dragPropagation:i,dragConstraints:o,dragElastic:s,dragMomentum:a}}}function sv(e,t,n){return(t===!0||t===e)&&(n===null||n===e)}function N6e(e,t=10){let n=null;return Math.abs(e.y)>t?n="y":Math.abs(e.x)>t&&(n="x"),n}class L6e extends xu{constructor(t){super(t),this.removeGroupControls=tr,this.removeListeners=tr,this.controls=new M6e(t)}mount(){const{dragControls:t}=this.node.getProps();t&&(this.removeGroupControls=t.subscribe(this.controls)),this.removeListeners=this.controls.addListeners()||tr}unmount(){this.removeGroupControls(),this.removeListeners()}}const XI=e=>(t,n)=>{e&&Sn.update(()=>e(t,n))};class D6e extends xu{constructor(){super(...arguments),this.removePointerDownListener=tr}onPointerDown(t){this.session=new Uj(t,this.createPanHandlers(),{transformPagePoint:this.node.getTransformPagePoint()})}createPanHandlers(){const{onPanSessionStart:t,onPanStart:n,onPan:r,onPanEnd:i}=this.node.getProps();return{onSessionStart:XI(t),onStart:XI(n),onMove:r,onEnd:(o,s)=>{delete this.session,i&&Sn.update(()=>i(o,s))}}}mount(){this.removePointerDownListener=Da(this.node.current,"pointerdown",t=>this.onPointerDown(t))}update(){this.session&&this.session.updateHandlers(this.createPanHandlers())}unmount(){this.removePointerDownListener(),this.session&&this.session.end()}}function $6e(){const e=L.useContext(Km);if(e===null)return[!0,null];const{isPresent:t,onExitComplete:n,register:r}=e,i=L.useId();return L.useEffect(()=>r(i),[]),!t&&n?[!1,()=>n&&n(i)]:[!0]}function XMe(){return F6e(L.useContext(Km))}function F6e(e){return e===null?!0:e.isPresent}const Gv={hasAnimatedSinceResize:!0,hasEverUpdated:!1};function YI(e,t){return t.max===t.min?0:e/(t.max-t.min)*100}const bp={correct:(e,t)=>{if(!t.target)return e;if(typeof e=="string")if(He.test(e))e=parseFloat(e);else return e;const n=YI(e,t.target.x),r=YI(e,t.target.y);return`${n}% ${r}%`}},B6e={correct:(e,{treeScale:t,projectionDelta:n})=>{const r=e,i=lu.parse(e);if(i.length>5)return r;const o=lu.createTransformer(e),s=typeof i[0]!="number"?1:0,a=n.x.scale*t.x,l=n.y.scale*t.y;i[0+s]/=a,i[1+s]/=l;const u=Pn(a,l,.5);return typeof i[2+s]=="number"&&(i[2+s]/=u),typeof i[3+s]=="number"&&(i[3+s]/=u),o(i)}};class U6e extends jt.Component{componentDidMount(){const{visualElement:t,layoutGroup:n,switchLayoutGroup:r,layoutId:i}=this.props,{projection:o}=t;qTe(z6e),o&&(n.group&&n.group.add(o),r&&r.register&&i&&r.register(o),o.root.didUpdate(),o.addEventListener("animationComplete",()=>{this.safeToRemove()}),o.setOptions({...o.options,onExitComplete:()=>this.safeToRemove()})),Gv.hasEverUpdated=!0}getSnapshotBeforeUpdate(t){const{layoutDependency:n,visualElement:r,drag:i,isPresent:o}=this.props,s=r.projection;return s&&(s.isPresent=o,i||t.layoutDependency!==n||n===void 0?s.willUpdate():this.safeToRemove(),t.isPresent!==o&&(o?s.promote():s.relegate()||Sn.postRender(()=>{const a=s.getStack();(!a||!a.members.length)&&this.safeToRemove()}))),null}componentDidUpdate(){const{projection:t}=this.props.visualElement;t&&(t.root.didUpdate(),queueMicrotask(()=>{!t.currentAnimation&&t.isLead()&&this.safeToRemove()}))}componentWillUnmount(){const{visualElement:t,layoutGroup:n,switchLayoutGroup:r}=this.props,{projection:i}=t;i&&(i.scheduleCheckAfterUnmount(),n&&n.group&&n.group.remove(i),r&&r.deregister&&r.deregister(i))}safeToRemove(){const{safeToRemove:t}=this.props;t&&t()}render(){return null}}function Wj(e){const[t,n]=$6e(),r=L.useContext(fA);return jt.createElement(U6e,{...e,layoutGroup:r,switchLayoutGroup:L.useContext(zV),isPresent:t,safeToRemove:n})}const z6e={borderRadius:{...bp,applyTo:["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"]},borderTopLeftRadius:bp,borderTopRightRadius:bp,borderBottomLeftRadius:bp,borderBottomRightRadius:bp,boxShadow:B6e},qj=["TopLeft","TopRight","BottomLeft","BottomRight"],V6e=qj.length,QI=e=>typeof e=="string"?parseFloat(e):e,ZI=e=>typeof e=="number"||He.test(e);function j6e(e,t,n,r,i,o){i?(e.opacity=Pn(0,n.opacity!==void 0?n.opacity:1,G6e(r)),e.opacityExit=Pn(t.opacity!==void 0?t.opacity:1,0,H6e(r))):o&&(e.opacity=Pn(t.opacity!==void 0?t.opacity:1,n.opacity!==void 0?n.opacity:1,r));for(let s=0;srt?1:n(im(e,t,r))}function e7(e,t){e.min=t.min,e.max=t.max}function wo(e,t){e7(e.x,t.x),e7(e.y,t.y)}function t7(e,t,n,r,i){return e-=t,e=P_(e,1/n,r),i!==void 0&&(e=P_(e,1/i,r)),e}function W6e(e,t=0,n=1,r=.5,i,o=e,s=e){if(qs.test(t)&&(t=parseFloat(t),t=Pn(s.min,s.max,t/100)-s.min),typeof t!="number")return;let a=Pn(o.min,o.max,r);e===o&&(a-=t),e.min=t7(e.min,t,n,a,i),e.max=t7(e.max,t,n,a,i)}function n7(e,t,[n,r,i],o,s){W6e(e,t[n],t[r],t[i],t.scale,o,s)}const q6e=["x","scaleX","originX"],K6e=["y","scaleY","originY"];function r7(e,t,n,r){n7(e.x,t,q6e,n?n.x:void 0,r?r.x:void 0),n7(e.y,t,K6e,n?n.y:void 0,r?r.y:void 0)}function i7(e){return e.translate===0&&e.scale===1}function Xj(e){return i7(e.x)&&i7(e.y)}function e4(e,t){return e.x.min===t.x.min&&e.x.max===t.x.max&&e.y.min===t.y.min&&e.y.max===t.y.max}function o7(e){return oo(e.x)/oo(e.y)}class X6e{constructor(){this.members=[]}add(t){AA(this.members,t),t.scheduleRender()}remove(t){if(PA(this.members,t),t===this.prevLead&&(this.prevLead=void 0),t===this.lead){const n=this.members[this.members.length-1];n&&this.promote(n)}}relegate(t){const n=this.members.findIndex(i=>t===i);if(n===0)return!1;let r;for(let i=n;i>=0;i--){const o=this.members[i];if(o.isPresent!==!1){r=o;break}}return r?(this.promote(r),!0):!1}promote(t,n){const r=this.lead;if(t!==r&&(this.prevLead=r,this.lead=t,t.show(),r)){r.instance&&r.scheduleRender(),t.scheduleRender(),t.resumeFrom=r,n&&(t.resumeFrom.preserveOpacity=!0),r.snapshot&&(t.snapshot=r.snapshot,t.snapshot.latestValues=r.animationValues||r.latestValues),t.root&&t.root.isUpdating&&(t.isLayoutDirty=!0);const{crossfade:i}=t.options;i===!1&&r.hide()}}exitAnimationComplete(){this.members.forEach(t=>{const{options:n,resumingFrom:r}=t;n.onExitComplete&&n.onExitComplete(),r&&r.options.onExitComplete&&r.options.onExitComplete()})}scheduleRender(){this.members.forEach(t=>{t.instance&&t.scheduleRender(!1)})}removeLeadSnapshot(){this.lead&&this.lead.snapshot&&(this.lead.snapshot=void 0)}}function s7(e,t,n){let r="";const i=e.x.translate/t.x,o=e.y.translate/t.y;if((i||o)&&(r=`translate3d(${i}px, ${o}px, 0) `),(t.x!==1||t.y!==1)&&(r+=`scale(${1/t.x}, ${1/t.y}) `),n){const{rotate:l,rotateX:u,rotateY:d}=n;l&&(r+=`rotate(${l}deg) `),u&&(r+=`rotateX(${u}deg) `),d&&(r+=`rotateY(${d}deg) `)}const s=e.x.scale*t.x,a=e.y.scale*t.y;return(s!==1||a!==1)&&(r+=`scale(${s}, ${a})`),r||"none"}const Y6e=(e,t)=>e.depth-t.depth;class Q6e{constructor(){this.children=[],this.isDirty=!1}add(t){AA(this.children,t),this.isDirty=!0}remove(t){PA(this.children,t),this.isDirty=!0}forEach(t){this.isDirty&&this.children.sort(Y6e),this.isDirty=!1,this.children.forEach(t)}}function Z6e(e,t){const n=performance.now(),r=({timestamp:i})=>{const o=i-n;o>=t&&(Wa(r),e(o-t))};return Sn.read(r,!0),()=>Wa(r)}function J6e(e){window.MotionDebug&&window.MotionDebug.record(e)}function ePe(e){return e instanceof SVGElement&&e.tagName!=="svg"}function tPe(e,t,n){const r=zi(e)?e:Wf(e);return r.start(EA("",r,t,n)),r.animation}const a7=["","X","Y","Z"],l7=1e3;let nPe=0;const Gu={type:"projectionFrame",totalNodes:0,resolvedTargetDeltas:0,recalculatedProjection:0};function Yj({attachResizeListener:e,defaultParent:t,measureScroll:n,checkIsScrollRoot:r,resetTransform:i}){return class{constructor(s={},a=t==null?void 0:t()){this.id=nPe++,this.animationId=0,this.children=new Set,this.options={},this.isTreeAnimating=!1,this.isAnimationBlocked=!1,this.isLayoutDirty=!1,this.isProjectionDirty=!1,this.isSharedProjectionDirty=!1,this.isTransformDirty=!1,this.updateManuallyBlocked=!1,this.updateBlockedByResize=!1,this.isUpdating=!1,this.isSVG=!1,this.needsReset=!1,this.shouldResetTransform=!1,this.treeScale={x:1,y:1},this.eventHandlers=new Map,this.hasTreeAnimated=!1,this.updateScheduled=!1,this.checkUpdateFailed=()=>{this.isUpdating&&(this.isUpdating=!1,this.clearAllSnapshots())},this.updateProjection=()=>{Gu.totalNodes=Gu.resolvedTargetDeltas=Gu.recalculatedProjection=0,this.nodes.forEach(oPe),this.nodes.forEach(cPe),this.nodes.forEach(dPe),this.nodes.forEach(sPe),J6e(Gu)},this.hasProjected=!1,this.isVisible=!0,this.animationProgress=0,this.sharedNodes=new Map,this.latestValues=s,this.root=a?a.root||a:this,this.path=a?[...a.path,a]:[],this.parent=a,this.depth=a?a.depth+1:0;for(let l=0;lthis.root.updateBlockedByResize=!1;e(s,()=>{this.root.updateBlockedByResize=!0,f&&f(),f=Z6e(h,250),Gv.hasAnimatedSinceResize&&(Gv.hasAnimatedSinceResize=!1,this.nodes.forEach(c7))})}l&&this.root.registerSharedNode(l,this),this.options.animate!==!1&&d&&(l||u)&&this.addEventListener("didUpdate",({delta:f,hasLayoutChanged:h,hasRelativeTargetChanged:g,layout:m})=>{if(this.isTreeAnimationBlocked()){this.target=void 0,this.relativeTarget=void 0;return}const v=this.options.transition||d.getDefaultTransition()||mPe,{onLayoutAnimationStart:x,onLayoutAnimationComplete:_}=d.getProps(),b=!this.targetLayout||!e4(this.targetLayout,m)||g,y=!h&&g;if(this.options.layoutRoot||this.resumeFrom&&this.resumeFrom.instance||y||h&&(b||!this.currentAnimation)){this.resumeFrom&&(this.resumingFrom=this.resumeFrom,this.resumingFrom.resumingFrom=void 0),this.setAnimationOrigin(f,y);const S={...Dj(v,"layout"),onPlay:x,onComplete:_};(d.shouldReduceMotion||this.options.layoutRoot)&&(S.delay=0,S.type=!1),this.startAnimation(S)}else h||c7(this),this.isLead()&&this.options.onExitComplete&&this.options.onExitComplete();this.targetLayout=m})}unmount(){this.options.layoutId&&this.willUpdate(),this.root.nodes.remove(this);const s=this.getStack();s&&s.remove(this),this.parent&&this.parent.children.delete(this),this.instance=void 0,Wa(this.updateProjection)}blockUpdate(){this.updateManuallyBlocked=!0}unblockUpdate(){this.updateManuallyBlocked=!1}isUpdateBlocked(){return this.updateManuallyBlocked||this.updateBlockedByResize}isTreeAnimationBlocked(){return this.isAnimationBlocked||this.parent&&this.parent.isTreeAnimationBlocked()||!1}startUpdate(){this.isUpdateBlocked()||(this.isUpdating=!0,this.nodes&&this.nodes.forEach(fPe),this.animationId++)}getTransformTemplate(){const{visualElement:s}=this.options;return s&&s.getProps().transformTemplate}willUpdate(s=!0){if(this.root.hasTreeAnimated=!0,this.root.isUpdateBlocked()){this.options.onExitComplete&&this.options.onExitComplete();return}if(!this.root.isUpdating&&this.root.startUpdate(),this.isLayoutDirty)return;this.isLayoutDirty=!0;for(let d=0;dthis.update()))}clearAllSnapshots(){this.nodes.forEach(aPe),this.sharedNodes.forEach(hPe)}scheduleUpdateProjection(){Sn.preRender(this.updateProjection,!1,!0)}scheduleCheckAfterUnmount(){Sn.postRender(()=>{this.isLayoutDirty?this.root.didUpdate():this.root.checkUpdateFailed()})}updateSnapshot(){this.snapshot||!this.instance||(this.snapshot=this.measure())}updateLayout(){if(!this.instance||(this.updateScroll(),!(this.options.alwaysMeasureLayout&&this.isLead())&&!this.isLayoutDirty))return;if(this.resumeFrom&&!this.resumeFrom.instance)for(let l=0;l{const C=S/1e3;d7(f.x,s.x,C),d7(f.y,s.y,C),this.setTargetDelta(f),this.relativeTarget&&this.relativeTargetOrigin&&this.layout&&this.relativeParent&&this.relativeParent.layout&&(Kp(h,this.layout.layoutBox,this.relativeParent.layout.layoutBox),pPe(this.relativeTarget,this.relativeTargetOrigin,h,C),y&&e4(this.relativeTarget,y)&&(this.isProjectionDirty=!1),y||(y=Xn()),wo(y,this.relativeTarget)),v&&(this.animationValues=d,j6e(d,u,this.latestValues,C,b,_)),this.root.scheduleUpdateProjection(),this.scheduleRender(),this.animationProgress=C},this.mixTargetDelta(this.options.layoutRoot?1e3:0)}startAnimation(s){this.notifyListeners("animationStart"),this.currentAnimation&&this.currentAnimation.stop(),this.resumingFrom&&this.resumingFrom.currentAnimation&&this.resumingFrom.currentAnimation.stop(),this.pendingAnimation&&(Wa(this.pendingAnimation),this.pendingAnimation=void 0),this.pendingAnimation=Sn.update(()=>{Gv.hasAnimatedSinceResize=!0,this.currentAnimation=tPe(0,l7,{...s,onUpdate:a=>{this.mixTargetDelta(a),s.onUpdate&&s.onUpdate(a)},onComplete:()=>{s.onComplete&&s.onComplete(),this.completeAnimation()}}),this.resumingFrom&&(this.resumingFrom.currentAnimation=this.currentAnimation),this.pendingAnimation=void 0})}completeAnimation(){this.resumingFrom&&(this.resumingFrom.currentAnimation=void 0,this.resumingFrom.preserveOpacity=void 0);const s=this.getStack();s&&s.exitAnimationComplete(),this.resumingFrom=this.currentAnimation=this.animationValues=void 0,this.notifyListeners("animationComplete")}finishAnimation(){this.currentAnimation&&(this.mixTargetDelta&&this.mixTargetDelta(l7),this.currentAnimation.stop()),this.completeAnimation()}applyTransformsToTarget(){const s=this.getLead();let{targetWithTransforms:a,target:l,layout:u,latestValues:d}=s;if(!(!a||!l||!u)){if(this!==s&&this.layout&&u&&Qj(this.options.animationType,this.layout.layoutBox,u.layoutBox)){l=this.target||Xn();const f=oo(this.layout.layoutBox.x);l.x.min=s.target.x.min,l.x.max=l.x.min+f;const h=oo(this.layout.layoutBox.y);l.y.min=s.target.y.min,l.y.max=l.y.min+h}wo(a,l),Zd(a,d),qp(this.projectionDeltaWithTransform,this.layoutCorrected,a,d)}}registerSharedNode(s,a){this.sharedNodes.has(s)||this.sharedNodes.set(s,new X6e),this.sharedNodes.get(s).add(a);const u=a.options.initialPromotionConfig;a.promote({transition:u?u.transition:void 0,preserveFollowOpacity:u&&u.shouldPreserveFollowOpacity?u.shouldPreserveFollowOpacity(a):void 0})}isLead(){const s=this.getStack();return s?s.lead===this:!0}getLead(){var s;const{layoutId:a}=this.options;return a?((s=this.getStack())===null||s===void 0?void 0:s.lead)||this:this}getPrevLead(){var s;const{layoutId:a}=this.options;return a?(s=this.getStack())===null||s===void 0?void 0:s.prevLead:void 0}getStack(){const{layoutId:s}=this.options;if(s)return this.root.sharedNodes.get(s)}promote({needsReset:s,transition:a,preserveFollowOpacity:l}={}){const u=this.getStack();u&&u.promote(this,l),s&&(this.projectionDelta=void 0,this.needsReset=!0),a&&this.setOptions({transition:a})}relegate(){const s=this.getStack();return s?s.relegate(this):!1}resetRotation(){const{visualElement:s}=this.options;if(!s)return;let a=!1;const{latestValues:l}=s;if((l.rotate||l.rotateX||l.rotateY||l.rotateZ)&&(a=!0),!a)return;const u={};for(let d=0;d{var a;return(a=s.currentAnimation)===null||a===void 0?void 0:a.stop()}),this.root.nodes.forEach(u7),this.root.sharedNodes.clear()}}}function rPe(e){e.updateLayout()}function iPe(e){var t;const n=((t=e.resumeFrom)===null||t===void 0?void 0:t.snapshot)||e.snapshot;if(e.isLead()&&e.layout&&n&&e.hasListeners("didUpdate")){const{layoutBox:r,measuredBox:i}=e.layout,{animationType:o}=e.options,s=n.source!==e.layout.source;o==="size"?Ps(f=>{const h=s?n.measuredBox[f]:n.layoutBox[f],g=oo(h);h.min=r[f].min,h.max=h.min+g}):Qj(o,n.layoutBox,r)&&Ps(f=>{const h=s?n.measuredBox[f]:n.layoutBox[f],g=oo(r[f]);h.max=h.min+g,e.relativeTarget&&!e.currentAnimation&&(e.isProjectionDirty=!0,e.relativeTarget[f].max=e.relativeTarget[f].min+g)});const a=Qd();qp(a,r,n.layoutBox);const l=Qd();s?qp(l,e.applyTransform(i,!0),n.measuredBox):qp(l,r,n.layoutBox);const u=!Xj(a);let d=!1;if(!e.resumeFrom){const f=e.getClosestProjectingParent();if(f&&!f.resumeFrom){const{snapshot:h,layout:g}=f;if(h&&g){const m=Xn();Kp(m,n.layoutBox,h.layoutBox);const v=Xn();Kp(v,r,g.layoutBox),e4(m,v)||(d=!0),f.options.layoutRoot&&(e.relativeTarget=v,e.relativeTargetOrigin=m,e.relativeParent=f)}}}e.notifyListeners("didUpdate",{layout:r,snapshot:n,delta:l,layoutDelta:a,hasLayoutChanged:u,hasRelativeTargetChanged:d})}else if(e.isLead()){const{onExitComplete:r}=e.options;r&&r()}e.options.transition=void 0}function oPe(e){Gu.totalNodes++,e.parent&&(e.isProjecting()||(e.isProjectionDirty=e.parent.isProjectionDirty),e.isSharedProjectionDirty||(e.isSharedProjectionDirty=!!(e.isProjectionDirty||e.parent.isProjectionDirty||e.parent.isSharedProjectionDirty)),e.isTransformDirty||(e.isTransformDirty=e.parent.isTransformDirty))}function sPe(e){e.isProjectionDirty=e.isSharedProjectionDirty=e.isTransformDirty=!1}function aPe(e){e.clearSnapshot()}function u7(e){e.clearMeasurements()}function lPe(e){e.isLayoutDirty=!1}function uPe(e){const{visualElement:t}=e.options;t&&t.getProps().onBeforeLayoutMeasure&&t.notify("BeforeLayoutMeasure"),e.resetTransform()}function c7(e){e.finishAnimation(),e.targetDelta=e.relativeTarget=e.target=void 0,e.isProjectionDirty=!0}function cPe(e){e.resolveTargetDelta()}function dPe(e){e.calcProjection()}function fPe(e){e.resetRotation()}function hPe(e){e.removeLeadSnapshot()}function d7(e,t,n){e.translate=Pn(t.translate,0,n),e.scale=Pn(t.scale,1,n),e.origin=t.origin,e.originPoint=t.originPoint}function f7(e,t,n,r){e.min=Pn(t.min,n.min,r),e.max=Pn(t.max,n.max,r)}function pPe(e,t,n,r){f7(e.x,t.x,n.x,r),f7(e.y,t.y,n.y,r)}function gPe(e){return e.animationValues&&e.animationValues.opacityExit!==void 0}const mPe={duration:.45,ease:[.4,0,.1,1]};function h7(e){e.min=Math.round(e.min*2)/2,e.max=Math.round(e.max*2)/2}function yPe(e){h7(e.x),h7(e.y)}function Qj(e,t,n){return e==="position"||e==="preserve-aspect"&&!Y5(o7(t),o7(n),.2)}const vPe=Yj({attachResizeListener:(e,t)=>ka(e,"resize",t),measureScroll:()=>({x:document.documentElement.scrollLeft||document.body.scrollLeft,y:document.documentElement.scrollTop||document.body.scrollTop}),checkIsScrollRoot:()=>!0}),SC={current:void 0},Zj=Yj({measureScroll:e=>({x:e.scrollLeft,y:e.scrollTop}),defaultParent:()=>{if(!SC.current){const e=new vPe({});e.mount(window),e.setOptions({layoutScroll:!0}),SC.current=e}return SC.current},resetTransform:(e,t)=>{e.style.transform=t!==void 0?t:"none"},checkIsScrollRoot:e=>window.getComputedStyle(e).position==="fixed"}),_Pe={pan:{Feature:D6e},drag:{Feature:L6e,ProjectionNode:Zj,MeasureLayout:Wj}},bPe=/var\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\)/;function SPe(e){const t=bPe.exec(e);if(!t)return[,];const[,n,r]=t;return[n,r]}function t4(e,t,n=1){const[r,i]=SPe(e);if(!r)return;const o=window.getComputedStyle(t).getPropertyValue(r);return o?o.trim():j5(i)?t4(i,t,n+1):i}function wPe(e,{...t},n){const r=e.current;if(!(r instanceof Element))return{target:t,transitionEnd:n};n&&(n={...n}),e.values.forEach(i=>{const o=i.get();if(!j5(o))return;const s=t4(o,r);s&&i.set(s)});for(const i in t){const o=t[i];if(!j5(o))continue;const s=t4(o,r);s&&(t[i]=s,n||(n={}),n[i]===void 0&&(n[i]=o))}return{target:t,transitionEnd:n}}const xPe=new Set(["width","height","top","left","right","bottom","x","y","translateX","translateY"]),Jj=e=>xPe.has(e),CPe=e=>Object.keys(e).some(Jj),p7=e=>e===jc||e===He,g7=(e,t)=>parseFloat(e.split(", ")[t]),m7=(e,t)=>(n,{transform:r})=>{if(r==="none"||!r)return 0;const i=r.match(/^matrix3d\((.+)\)$/);if(i)return g7(i[1],t);{const o=r.match(/^matrix\((.+)\)$/);return o?g7(o[1],e):0}},TPe=new Set(["x","y","z"]),EPe=Xm.filter(e=>!TPe.has(e));function APe(e){const t=[];return EPe.forEach(n=>{const r=e.getValue(n);r!==void 0&&(t.push([n,r.get()]),r.set(n.startsWith("scale")?1:0))}),t.length&&e.render(),t}const qf={width:({x:e},{paddingLeft:t="0",paddingRight:n="0"})=>e.max-e.min-parseFloat(t)-parseFloat(n),height:({y:e},{paddingTop:t="0",paddingBottom:n="0"})=>e.max-e.min-parseFloat(t)-parseFloat(n),top:(e,{top:t})=>parseFloat(t),left:(e,{left:t})=>parseFloat(t),bottom:({y:e},{top:t})=>parseFloat(t)+(e.max-e.min),right:({x:e},{left:t})=>parseFloat(t)+(e.max-e.min),x:m7(4,13),y:m7(5,14)};qf.translateX=qf.x;qf.translateY=qf.y;const PPe=(e,t,n)=>{const r=t.measureViewportBox(),i=t.current,o=getComputedStyle(i),{display:s}=o,a={};s==="none"&&t.setStaticValue("display",e.display||"block"),n.forEach(u=>{a[u]=qf[u](r,o)}),t.render();const l=t.measureViewportBox();return n.forEach(u=>{const d=t.getValue(u);d&&d.jump(a[u]),e[u]=qf[u](l,o)}),e},RPe=(e,t,n={},r={})=>{t={...t},r={...r};const i=Object.keys(t).filter(Jj);let o=[],s=!1;const a=[];if(i.forEach(l=>{const u=e.getValue(l);if(!e.hasValue(l))return;let d=n[l],f=_p(d);const h=t[l];let g;if(x_(h)){const m=h.length,v=h[0]===null?1:0;d=h[v],f=_p(d);for(let x=v;x=0?window.pageYOffset:null,u=PPe(t,e,a);return o.length&&o.forEach(([d,f])=>{e.getValue(d).set(f)}),e.render(),m2&&l!==null&&window.scrollTo({top:l}),{target:u,transitionEnd:r}}else return{target:t,transitionEnd:r}};function OPe(e,t,n,r){return CPe(t)?RPe(e,t,n,r):{target:t,transitionEnd:r}}const kPe=(e,t,n,r)=>{const i=wPe(e,t,r);return t=i.target,r=i.transitionEnd,OPe(e,t,n,r)},n4={current:null},eG={current:!1};function IPe(){if(eG.current=!0,!!m2)if(window.matchMedia){const e=window.matchMedia("(prefers-reduced-motion)"),t=()=>n4.current=e.matches;e.addListener(t),t()}else n4.current=!1}function MPe(e,t,n){const{willChange:r}=t;for(const i in t){const o=t[i],s=n[i];if(zi(o))e.addValue(i,o),A_(r)&&r.add(i);else if(zi(s))e.addValue(i,Wf(o,{owner:e})),A_(r)&&r.remove(i);else if(s!==o)if(e.hasValue(i)){const a=e.getValue(i);!a.hasAnimated&&a.set(o)}else{const a=e.getStaticValue(i);e.addValue(i,Wf(a!==void 0?a:o,{owner:e}))}}for(const i in n)t[i]===void 0&&e.removeValue(i);return t}const y7=new WeakMap,tG=Object.keys(rm),NPe=tG.length,v7=["AnimationStart","AnimationComplete","Update","BeforeLayoutMeasure","LayoutMeasure","LayoutAnimationStart","LayoutAnimationComplete"],LPe=dA.length;class DPe{constructor({parent:t,props:n,presenceContext:r,reducedMotionConfig:i,visualState:o},s={}){this.current=null,this.children=new Set,this.isVariantNode=!1,this.isControllingVariants=!1,this.shouldReduceMotion=null,this.values=new Map,this.features={},this.valueSubscriptions=new Map,this.prevMotionValues={},this.events={},this.propEventSubscriptions={},this.notifyUpdate=()=>this.notify("Update",this.latestValues),this.render=()=>{this.current&&(this.triggerBuild(),this.renderInstance(this.current,this.renderState,this.props.style,this.projection))},this.scheduleRender=()=>Sn.render(this.render,!1,!0);const{latestValues:a,renderState:l}=o;this.latestValues=a,this.baseTarget={...a},this.initialValues=n.initial?{...a}:{},this.renderState=l,this.parent=t,this.props=n,this.presenceContext=r,this.depth=t?t.depth+1:0,this.reducedMotionConfig=i,this.options=s,this.isControllingVariants=v2(n),this.isVariantNode=UV(n),this.isVariantNode&&(this.variantChildren=new Set),this.manuallyAnimateOnMount=!!(t&&t.current);const{willChange:u,...d}=this.scrapeMotionValuesFromProps(n,{});for(const f in d){const h=d[f];a[f]!==void 0&&zi(h)&&(h.set(a[f],!1),A_(u)&&u.add(f))}}scrapeMotionValuesFromProps(t,n){return{}}mount(t){this.current=t,y7.set(t,this),this.projection&&!this.projection.instance&&this.projection.mount(t),this.parent&&this.isVariantNode&&!this.isControllingVariants&&(this.removeFromVariantTree=this.parent.addVariantChild(this)),this.values.forEach((n,r)=>this.bindToMotionValue(r,n)),eG.current||IPe(),this.shouldReduceMotion=this.reducedMotionConfig==="never"?!1:this.reducedMotionConfig==="always"?!0:n4.current,this.parent&&this.parent.children.add(this),this.update(this.props,this.presenceContext)}unmount(){y7.delete(this.current),this.projection&&this.projection.unmount(),Wa(this.notifyUpdate),Wa(this.render),this.valueSubscriptions.forEach(t=>t()),this.removeFromVariantTree&&this.removeFromVariantTree(),this.parent&&this.parent.children.delete(this);for(const t in this.events)this.events[t].clear();for(const t in this.features)this.features[t].unmount();this.current=null}bindToMotionValue(t,n){const r=Vc.has(t),i=n.on("change",s=>{this.latestValues[t]=s,this.props.onUpdate&&Sn.update(this.notifyUpdate,!1,!0),r&&this.projection&&(this.projection.isTransformDirty=!0)}),o=n.on("renderRequest",this.scheduleRender);this.valueSubscriptions.set(t,()=>{i(),o()})}sortNodePosition(t){return!this.current||!this.sortInstanceNodePosition||this.type!==t.type?0:this.sortInstanceNodePosition(this.current,t.current)}loadFeatures({children:t,...n},r,i,o){let s,a;for(let l=0;lthis.scheduleRender(),animationType:typeof u=="string"?u:"both",initialPromotionConfig:o,layoutScroll:h,layoutRoot:g})}return a}updateFeatures(){for(const t in this.features){const n=this.features[t];n.isMounted?n.update():(n.mount(),n.isMounted=!0)}}triggerBuild(){this.build(this.renderState,this.latestValues,this.options,this.props)}measureViewportBox(){return this.current?this.measureInstanceViewportBox(this.current,this.props):Xn()}getStaticValue(t){return this.latestValues[t]}setStaticValue(t,n){this.latestValues[t]=n}makeTargetAnimatable(t,n=!0){return this.makeTargetAnimatableFromInstance(t,this.props,n)}update(t,n){(t.transformTemplate||this.props.transformTemplate)&&this.scheduleRender(),this.prevProps=this.props,this.props=t,this.prevPresenceContext=this.presenceContext,this.presenceContext=n;for(let r=0;rn.variantChildren.delete(t)}addValue(t,n){n!==this.values.get(t)&&(this.removeValue(t),this.bindToMotionValue(t,n)),this.values.set(t,n),this.latestValues[t]=n.get()}removeValue(t){this.values.delete(t);const n=this.valueSubscriptions.get(t);n&&(n(),this.valueSubscriptions.delete(t)),delete this.latestValues[t],this.removeValueFromRenderState(t,this.renderState)}hasValue(t){return this.values.has(t)}getValue(t,n){if(this.props.values&&this.props.values[t])return this.props.values[t];let r=this.values.get(t);return r===void 0&&n!==void 0&&(r=Wf(n,{owner:this}),this.addValue(t,r)),r}readValue(t){var n;return this.latestValues[t]!==void 0||!this.current?this.latestValues[t]:(n=this.getBaseTargetFromProps(this.props,t))!==null&&n!==void 0?n:this.readValueFromInstance(this.current,t,this.options)}setBaseTarget(t,n){this.baseTarget[t]=n}getBaseTarget(t){var n;const{initial:r}=this.props,i=typeof r=="string"||typeof r=="object"?(n=bA(this.props,r))===null||n===void 0?void 0:n[t]:void 0;if(r&&i!==void 0)return i;const o=this.getBaseTargetFromProps(this.props,t);return o!==void 0&&!zi(o)?o:this.initialValues[t]!==void 0&&i===void 0?void 0:this.baseTarget[t]}on(t,n){return this.events[t]||(this.events[t]=new RA),this.events[t].add(n)}notify(t,...n){this.events[t]&&this.events[t].notify(...n)}}class nG extends DPe{sortInstanceNodePosition(t,n){return t.compareDocumentPosition(n)&2?1:-1}getBaseTargetFromProps(t,n){return t.style?t.style[n]:void 0}removeValueFromRenderState(t,{vars:n,style:r}){delete n[t],delete r[t]}makeTargetAnimatableFromInstance({transition:t,transitionEnd:n,...r},{transformValues:i},o){let s=t6e(r,t||{},this);if(i&&(n&&(n=i(n)),r&&(r=i(r)),s&&(s=i(s))),o){JAe(this,r,s);const a=kPe(this,r,s,n);n=a.transitionEnd,r=a.target}return{transition:t,transitionEnd:n,...r}}}function $Pe(e){return window.getComputedStyle(e)}class FPe extends nG{readValueFromInstance(t,n){if(Vc.has(n)){const r=TA(n);return r&&r.default||0}else{const r=$Pe(t),i=(GV(n)?r.getPropertyValue(n):r[n])||0;return typeof i=="string"?i.trim():i}}measureInstanceViewportBox(t,{transformPagePoint:n}){return Hj(t,n)}build(t,n,r,i){pA(t,n,r,i.transformTemplate)}scrapeMotionValuesFromProps(t,n){return _A(t,n)}handleChildMotionValue(){this.childSubscription&&(this.childSubscription(),delete this.childSubscription);const{children:t}=this.props;zi(t)&&(this.childSubscription=t.on("change",n=>{this.current&&(this.current.textContent=`${n}`)}))}renderInstance(t,n,r,i){YV(t,n,r,i)}}class BPe extends nG{constructor(){super(...arguments),this.isSVGTag=!1}getBaseTargetFromProps(t,n){return t[n]}readValueFromInstance(t,n){if(Vc.has(n)){const r=TA(n);return r&&r.default||0}return n=QV.has(n)?n:vA(n),t.getAttribute(n)}measureInstanceViewportBox(){return Xn()}scrapeMotionValuesFromProps(t,n){return JV(t,n)}build(t,n,r,i){mA(t,n,r,this.isSVGTag,i.transformTemplate)}renderInstance(t,n,r,i){ZV(t,n,r,i)}mount(t){this.isSVGTag=yA(t.tagName),super.mount(t)}}const UPe=(e,t)=>hA(e)?new BPe(t,{enableHardwareAcceleration:!1}):new FPe(t,{enableHardwareAcceleration:!0}),zPe={layout:{ProjectionNode:Zj,MeasureLayout:Wj}},VPe={...g6e,...DEe,..._Pe,...zPe},jPe=HTe((e,t)=>bEe(e,t,VPe,UPe));function rG(){const e=L.useRef(!1);return b_(()=>(e.current=!0,()=>{e.current=!1}),[]),e}function GPe(){const e=rG(),[t,n]=L.useState(0),r=L.useCallback(()=>{e.current&&n(t+1)},[t]);return[L.useCallback(()=>Sn.postRender(r),[r]),t]}class HPe extends L.Component{getSnapshotBeforeUpdate(t){const n=this.props.childRef.current;if(n&&t.isPresent&&!this.props.isPresent){const r=this.props.sizeRef.current;r.height=n.offsetHeight||0,r.width=n.offsetWidth||0,r.top=n.offsetTop,r.left=n.offsetLeft}return null}componentDidUpdate(){}render(){return this.props.children}}function WPe({children:e,isPresent:t}){const n=L.useId(),r=L.useRef(null),i=L.useRef({width:0,height:0,top:0,left:0});return L.useInsertionEffect(()=>{const{width:o,height:s,top:a,left:l}=i.current;if(t||!r.current||!o||!s)return;r.current.dataset.motionPopId=n;const u=document.createElement("style");return document.head.appendChild(u),u.sheet&&u.sheet.insertRule(` + [data-motion-pop-id="${n}"] { + position: absolute !important; + width: ${o}px !important; + height: ${s}px !important; + top: ${a}px !important; + left: ${l}px !important; + } + `),()=>{document.head.removeChild(u)}},[t]),L.createElement(HPe,{isPresent:t,childRef:r,sizeRef:i},L.cloneElement(e,{ref:r}))}const wC=({children:e,initial:t,isPresent:n,onExitComplete:r,custom:i,presenceAffectsLayout:o,mode:s})=>{const a=ej(qPe),l=L.useId(),u=L.useMemo(()=>({id:l,initial:t,isPresent:n,custom:i,onExitComplete:d=>{a.set(d,!0);for(const f of a.values())if(!f)return;r&&r()},register:d=>(a.set(d,!1),()=>a.delete(d))}),o?void 0:[n]);return L.useMemo(()=>{a.forEach((d,f)=>a.set(f,!1))},[n]),L.useEffect(()=>{!n&&!a.size&&r&&r()},[n]),s==="popLayout"&&(e=L.createElement(WPe,{isPresent:n},e)),L.createElement(Km.Provider,{value:u},e)};function qPe(){return new Map}function KPe(e){return L.useEffect(()=>()=>e(),[])}const Nd=e=>e.key||"";function XPe(e,t){e.forEach(n=>{const r=Nd(n);t.set(r,n)})}function YPe(e){const t=[];return L.Children.forEach(e,n=>{L.isValidElement(n)&&t.push(n)}),t}const QPe=({children:e,custom:t,initial:n=!0,onExitComplete:r,exitBeforeEnter:i,presenceAffectsLayout:o=!0,mode:s="sync"})=>{const a=L.useContext(fA).forceRender||GPe()[0],l=rG(),u=YPe(e);let d=u;const f=L.useRef(new Map).current,h=L.useRef(d),g=L.useRef(new Map).current,m=L.useRef(!0);if(b_(()=>{m.current=!1,XPe(u,g),h.current=d}),KPe(()=>{m.current=!0,g.clear(),f.clear()}),m.current)return L.createElement(L.Fragment,null,d.map(b=>L.createElement(wC,{key:Nd(b),isPresent:!0,initial:n?void 0:!1,presenceAffectsLayout:o,mode:s},b)));d=[...d];const v=h.current.map(Nd),x=u.map(Nd),_=v.length;for(let b=0;b<_;b++){const y=v[b];x.indexOf(y)===-1&&!f.has(y)&&f.set(y,void 0)}return s==="wait"&&f.size&&(d=[]),f.forEach((b,y)=>{if(x.indexOf(y)!==-1)return;const S=g.get(y);if(!S)return;const C=v.indexOf(y);let T=b;if(!T){const E=()=>{g.delete(y),f.delete(y);const P=h.current.findIndex(k=>k.key===y);if(h.current.splice(P,1),!f.size){if(h.current=u,l.current===!1)return;a(),r&&r()}};T=L.createElement(wC,{key:Nd(S),isPresent:!1,onExitComplete:E,custom:t,presenceAffectsLayout:o,mode:s},S),f.set(y,T)}d.splice(C,0,T)}),d=d.map(b=>{const y=b.key;return f.has(y)?b:L.createElement(wC,{key:Nd(b),isPresent:!0,presenceAffectsLayout:o,mode:s},b)}),L.createElement(L.Fragment,null,f.size?d:d.map(b=>L.cloneElement(b)))};var ZPe=V5e({"0%":{transform:"rotate(0deg)"},"100%":{transform:"rotate(360deg)"}}),iG=zc((e,t)=>{const n=$V("Spinner",e),{label:r="Loading...",thickness:i="2px",speed:o="0.45s",emptyColor:s="transparent",className:a,...l}=MV(e),u=EV("chakra-spinner",a),d={display:"inline-block",borderColor:"currentColor",borderStyle:"solid",borderRadius:"99999px",borderWidth:i,borderBottomColor:s,borderLeftColor:s,animation:`${ZPe} ${o} linear infinite`,...n};return ue.jsx(Cc.div,{ref:t,__css:d,className:u,...l,children:r&&ue.jsx(Cc.span,{srOnly:!0,children:r})})});iG.displayName="Spinner";var r4=zc(function(t,n){const{htmlWidth:r,htmlHeight:i,alt:o,...s}=t;return ue.jsx("img",{width:r,height:i,ref:n,alt:o,...s})});r4.displayName="NativeImage";function JPe(e){const{loading:t,src:n,srcSet:r,onLoad:i,onError:o,crossOrigin:s,sizes:a,ignoreFallback:l}=e,[u,d]=L.useState("pending");L.useEffect(()=>{d(n?"loading":"pending")},[n]);const f=L.useRef(),h=L.useCallback(()=>{if(!n)return;g();const m=new Image;m.src=n,s&&(m.crossOrigin=s),r&&(m.srcset=r),a&&(m.sizes=a),t&&(m.loading=t),m.onload=v=>{g(),d("loaded"),i==null||i(v)},m.onerror=v=>{g(),d("failed"),o==null||o(v)},f.current=m},[n,s,r,a,i,o,t]),g=()=>{f.current&&(f.current.onload=null,f.current.onerror=null,f.current=null)};return j5e(()=>{if(!l)return u==="loading"&&h(),()=>{g()}},[u,h,l]),l?"loaded":u}var e8e=(e,t)=>e!=="loaded"&&t==="beforeLoadOrError"||e==="failed"&&t==="onError";function t8e(e,t=[]){const n=Object.assign({},e);for(const r of t)r in n&&delete n[r];return n}var OA=zc(function(t,n){const{fallbackSrc:r,fallback:i,src:o,srcSet:s,align:a,fit:l,loading:u,ignoreFallback:d,crossOrigin:f,fallbackStrategy:h="beforeLoadOrError",referrerPolicy:g,...m}=t,v=r!==void 0||i!==void 0,x=u!=null||d||!v,_=JPe({...t,crossOrigin:f,ignoreFallback:x}),b=e8e(_,h),y={ref:n,objectFit:l,objectPosition:a,...x?m:t8e(m,["onError","onLoad"])};return b?i||ue.jsx(Cc.img,{as:r4,className:"chakra-image__placeholder",src:r,...y}):ue.jsx(Cc.img,{as:r4,src:o,srcSet:s,crossOrigin:f,loading:u,referrerPolicy:g,className:"chakra-image",...y})});OA.displayName="Image";var i4=zc(function(t,n){const r=$V("Heading",t),{className:i,...o}=MV(t);return ue.jsx(Cc.h2,{ref:n,className:EV("chakra-heading",t.className),...o,__css:r})});i4.displayName="Heading";var kA=Cc("div");kA.displayName="Box";var oG=zc(function(t,n){const{size:r,centerContent:i=!0,...o}=t,s=i?{display:"flex",alignItems:"center",justifyContent:"center"}:{};return ue.jsx(kA,{ref:n,boxSize:r,__css:{...s,flexShrink:0,flexGrow:0},...o})});oG.displayName="Square";var n8e=zc(function(t,n){const{size:r,...i}=t;return ue.jsx(oG,{size:r,ref:n,borderRadius:"9999px",...i})});n8e.displayName="Circle";var IA=zc(function(t,n){const{direction:r,align:i,justify:o,wrap:s,basis:a,grow:l,shrink:u,...d}=t,f={display:"flex",flexDirection:r,alignItems:i,justifyContent:o,flexWrap:s,flexBasis:a,flexGrow:l,flexShrink:u};return ue.jsx(Cc.div,{ref:n,__css:f,...d})});IA.displayName="Flex";const r8e=""+new URL("logo-13003d72.png",import.meta.url).href,i8e=()=>ue.jsxs(IA,{position:"relative",width:"100vw",height:"100vh",alignItems:"center",justifyContent:"center",bg:"#151519",children:[ue.jsx(OA,{src:r8e,w:"8rem",h:"8rem"}),ue.jsx(iG,{label:"Loading",color:"grey",position:"absolute",size:"sm",width:"24px !important",height:"24px !important",right:"1.5rem",bottom:"1.5rem"})]}),o8e=L.memo(i8e);function o4(e){"@babel/helpers - typeof";return o4=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o4(e)}var sG=[],s8e=sG.forEach,a8e=sG.slice;function s4(e){return s8e.call(a8e.call(arguments,1),function(t){if(t)for(var n in t)e[n]===void 0&&(e[n]=t[n])}),e}function aG(){return typeof XMLHttpRequest=="function"||(typeof XMLHttpRequest>"u"?"undefined":o4(XMLHttpRequest))==="object"}function l8e(e){return!!e&&typeof e.then=="function"}function u8e(e){return l8e(e)?e:Promise.resolve(e)}function c8e(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var a4={exports:{}},av={exports:{}},_7;function d8e(){return _7||(_7=1,function(e,t){var n=typeof self<"u"?self:Ze,r=function(){function o(){this.fetch=!1,this.DOMException=n.DOMException}return o.prototype=n,new o}();(function(o){(function(s){var a={searchParams:"URLSearchParams"in o,iterable:"Symbol"in o&&"iterator"in Symbol,blob:"FileReader"in o&&"Blob"in o&&function(){try{return new Blob,!0}catch{return!1}}(),formData:"FormData"in o,arrayBuffer:"ArrayBuffer"in o};function l(A){return A&&DataView.prototype.isPrototypeOf(A)}if(a.arrayBuffer)var u=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],d=ArrayBuffer.isView||function(A){return A&&u.indexOf(Object.prototype.toString.call(A))>-1};function f(A){if(typeof A!="string"&&(A=String(A)),/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(A))throw new TypeError("Invalid character in header field name");return A.toLowerCase()}function h(A){return typeof A!="string"&&(A=String(A)),A}function g(A){var N={next:function(){var D=A.shift();return{done:D===void 0,value:D}}};return a.iterable&&(N[Symbol.iterator]=function(){return N}),N}function m(A){this.map={},A instanceof m?A.forEach(function(N,D){this.append(D,N)},this):Array.isArray(A)?A.forEach(function(N){this.append(N[0],N[1])},this):A&&Object.getOwnPropertyNames(A).forEach(function(N){this.append(N,A[N])},this)}m.prototype.append=function(A,N){A=f(A),N=h(N);var D=this.map[A];this.map[A]=D?D+", "+N:N},m.prototype.delete=function(A){delete this.map[f(A)]},m.prototype.get=function(A){return A=f(A),this.has(A)?this.map[A]:null},m.prototype.has=function(A){return this.map.hasOwnProperty(f(A))},m.prototype.set=function(A,N){this.map[f(A)]=h(N)},m.prototype.forEach=function(A,N){for(var D in this.map)this.map.hasOwnProperty(D)&&A.call(N,this.map[D],D,this)},m.prototype.keys=function(){var A=[];return this.forEach(function(N,D){A.push(D)}),g(A)},m.prototype.values=function(){var A=[];return this.forEach(function(N){A.push(N)}),g(A)},m.prototype.entries=function(){var A=[];return this.forEach(function(N,D){A.push([D,N])}),g(A)},a.iterable&&(m.prototype[Symbol.iterator]=m.prototype.entries);function v(A){if(A.bodyUsed)return Promise.reject(new TypeError("Already read"));A.bodyUsed=!0}function x(A){return new Promise(function(N,D){A.onload=function(){N(A.result)},A.onerror=function(){D(A.error)}})}function _(A){var N=new FileReader,D=x(N);return N.readAsArrayBuffer(A),D}function b(A){var N=new FileReader,D=x(N);return N.readAsText(A),D}function y(A){for(var N=new Uint8Array(A),D=new Array(N.length),U=0;U-1?N:A}function P(A,N){N=N||{};var D=N.body;if(A instanceof P){if(A.bodyUsed)throw new TypeError("Already read");this.url=A.url,this.credentials=A.credentials,N.headers||(this.headers=new m(A.headers)),this.method=A.method,this.mode=A.mode,this.signal=A.signal,!D&&A._bodyInit!=null&&(D=A._bodyInit,A.bodyUsed=!0)}else this.url=String(A);if(this.credentials=N.credentials||this.credentials||"same-origin",(N.headers||!this.headers)&&(this.headers=new m(N.headers)),this.method=E(N.method||this.method||"GET"),this.mode=N.mode||this.mode||null,this.signal=N.signal||this.signal,this.referrer=null,(this.method==="GET"||this.method==="HEAD")&&D)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(D)}P.prototype.clone=function(){return new P(this,{body:this._bodyInit})};function k(A){var N=new FormData;return A.trim().split("&").forEach(function(D){if(D){var U=D.split("="),$=U.shift().replace(/\+/g," "),j=U.join("=").replace(/\+/g," ");N.append(decodeURIComponent($),decodeURIComponent(j))}}),N}function O(A){var N=new m,D=A.replace(/\r?\n[\t ]+/g," ");return D.split(/\r?\n/).forEach(function(U){var $=U.split(":"),j=$.shift().trim();if(j){var G=$.join(":").trim();N.append(j,G)}}),N}C.call(P.prototype);function M(A,N){N||(N={}),this.type="default",this.status=N.status===void 0?200:N.status,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in N?N.statusText:"OK",this.headers=new m(N.headers),this.url=N.url||"",this._initBody(A)}C.call(M.prototype),M.prototype.clone=function(){return new M(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new m(this.headers),url:this.url})},M.error=function(){var A=new M(null,{status:0,statusText:""});return A.type="error",A};var V=[301,302,303,307,308];M.redirect=function(A,N){if(V.indexOf(N)===-1)throw new RangeError("Invalid status code");return new M(null,{status:N,headers:{location:A}})},s.DOMException=o.DOMException;try{new s.DOMException}catch{s.DOMException=function(N,D){this.message=N,this.name=D;var U=Error(N);this.stack=U.stack},s.DOMException.prototype=Object.create(Error.prototype),s.DOMException.prototype.constructor=s.DOMException}function B(A,N){return new Promise(function(D,U){var $=new P(A,N);if($.signal&&$.signal.aborted)return U(new s.DOMException("Aborted","AbortError"));var j=new XMLHttpRequest;function G(){j.abort()}j.onload=function(){var q={status:j.status,statusText:j.statusText,headers:O(j.getAllResponseHeaders()||"")};q.url="responseURL"in j?j.responseURL:q.headers.get("X-Request-URL");var Z="response"in j?j.response:j.responseText;D(new M(Z,q))},j.onerror=function(){U(new TypeError("Network request failed"))},j.ontimeout=function(){U(new TypeError("Network request failed"))},j.onabort=function(){U(new s.DOMException("Aborted","AbortError"))},j.open($.method,$.url,!0),$.credentials==="include"?j.withCredentials=!0:$.credentials==="omit"&&(j.withCredentials=!1),"responseType"in j&&a.blob&&(j.responseType="blob"),$.headers.forEach(function(q,Z){j.setRequestHeader(Z,q)}),$.signal&&($.signal.addEventListener("abort",G),j.onreadystatechange=function(){j.readyState===4&&$.signal.removeEventListener("abort",G)}),j.send(typeof $._bodyInit>"u"?null:$._bodyInit)})}return B.polyfill=!0,o.fetch||(o.fetch=B,o.Headers=m,o.Request=P,o.Response=M),s.Headers=m,s.Request=P,s.Response=M,s.fetch=B,Object.defineProperty(s,"__esModule",{value:!0}),s})({})})(r),r.fetch.ponyfill=!0,delete r.fetch.polyfill;var i=r;t=i.fetch,t.default=i.fetch,t.fetch=i.fetch,t.Headers=i.Headers,t.Request=i.Request,t.Response=i.Response,e.exports=t}(av,av.exports)),av.exports}(function(e,t){var n;if(typeof fetch=="function"&&(typeof Ze<"u"&&Ze.fetch?n=Ze.fetch:typeof window<"u"&&window.fetch?n=window.fetch:n=fetch),typeof c8e<"u"&&(typeof window>"u"||typeof window.document>"u")){var r=n||d8e();r.default&&(r=r.default),t.default=r,e.exports=t.default}})(a4,a4.exports);var lG=a4.exports;const uG=Tc(lG),b7=$7({__proto__:null,default:uG},[lG]);function R_(e){"@babel/helpers - typeof";return R_=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},R_(e)}var Fa;typeof fetch=="function"&&(typeof global<"u"&&global.fetch?Fa=global.fetch:typeof window<"u"&&window.fetch?Fa=window.fetch:Fa=fetch);var om;aG()&&(typeof global<"u"&&global.XMLHttpRequest?om=global.XMLHttpRequest:typeof window<"u"&&window.XMLHttpRequest&&(om=window.XMLHttpRequest));var O_;typeof ActiveXObject=="function"&&(typeof global<"u"&&global.ActiveXObject?O_=global.ActiveXObject:typeof window<"u"&&window.ActiveXObject&&(O_=window.ActiveXObject));!Fa&&b7&&!om&&!O_&&(Fa=uG||b7);typeof Fa!="function"&&(Fa=void 0);var l4=function(t,n){if(n&&R_(n)==="object"){var r="";for(var i in n)r+="&"+encodeURIComponent(i)+"="+encodeURIComponent(n[i]);if(!r)return t;t=t+(t.indexOf("?")!==-1?"&":"?")+r.slice(1)}return t},S7=function(t,n,r){Fa(t,n).then(function(i){if(!i.ok)return r(i.statusText||"Error",{status:i.status});i.text().then(function(o){r(null,{status:i.status,data:o})}).catch(r)}).catch(r)},w7=!1,f8e=function(t,n,r,i){t.queryStringParams&&(n=l4(n,t.queryStringParams));var o=s4({},typeof t.customHeaders=="function"?t.customHeaders():t.customHeaders);r&&(o["Content-Type"]="application/json");var s=typeof t.requestOptions=="function"?t.requestOptions(r):t.requestOptions,a=s4({method:r?"POST":"GET",body:r?t.stringify(r):void 0,headers:o},w7?{}:s);try{S7(n,a,i)}catch(l){if(!s||Object.keys(s).length===0||!l.message||l.message.indexOf("not implemented")<0)return i(l);try{Object.keys(s).forEach(function(u){delete a[u]}),S7(n,a,i),w7=!0}catch(u){i(u)}}},h8e=function(t,n,r,i){r&&R_(r)==="object"&&(r=l4("",r).slice(1)),t.queryStringParams&&(n=l4(n,t.queryStringParams));try{var o;om?o=new om:o=new O_("MSXML2.XMLHTTP.3.0"),o.open(r?"POST":"GET",n,1),t.crossDomain||o.setRequestHeader("X-Requested-With","XMLHttpRequest"),o.withCredentials=!!t.withCredentials,r&&o.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),o.overrideMimeType&&o.overrideMimeType("application/json");var s=t.customHeaders;if(s=typeof s=="function"?s():s,s)for(var a in s)o.setRequestHeader(a,s[a]);o.onreadystatechange=function(){o.readyState>3&&i(o.status>=400?o.statusText:null,{status:o.status,data:o.responseText})},o.send(r)}catch(l){console&&console.log(l)}},p8e=function(t,n,r,i){if(typeof r=="function"&&(i=r,r=void 0),i=i||function(){},Fa&&n.indexOf("file:")!==0)return f8e(t,n,r,i);if(aG()||typeof ActiveXObject=="function")return h8e(t,n,r,i);i(new Error("No fetch and no xhr implementation found!"))};function sm(e){"@babel/helpers - typeof";return sm=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},sm(e)}function g8e(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function x7(e,t){for(var n=0;n1&&arguments[1]!==void 0?arguments[1]:{},r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};g8e(this,e),this.services=t,this.options=n,this.allOptions=r,this.type="backend",this.init(t,n,r)}return m8e(e,[{key:"init",value:function(n){var r=this,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.services=n,this.options=s4(i,this.options||{},_8e()),this.allOptions=o,this.services&&this.options.reloadInterval&&setInterval(function(){return r.reload()},this.options.reloadInterval)}},{key:"readMulti",value:function(n,r,i){this._readAny(n,n,r,r,i)}},{key:"read",value:function(n,r,i){this._readAny([n],n,[r],r,i)}},{key:"_readAny",value:function(n,r,i,o,s){var a=this,l=this.options.loadPath;typeof this.options.loadPath=="function"&&(l=this.options.loadPath(n,i)),l=u8e(l),l.then(function(u){if(!u)return s(null,{});var d=a.services.interpolator.interpolate(u,{lng:n.join("+"),ns:i.join("+")});a.loadUrl(d,s,r,o)})}},{key:"loadUrl",value:function(n,r,i,o){var s=this,a=typeof i=="string"?[i]:i,l=typeof o=="string"?[o]:o,u=this.options.parseLoadPayload(a,l);this.options.request(this.options,n,u,function(d,f){if(f&&(f.status>=500&&f.status<600||!f.status))return r("failed loading "+n+"; status code: "+f.status,!0);if(f&&f.status>=400&&f.status<500)return r("failed loading "+n+"; status code: "+f.status,!1);if(!f&&d&&d.message&&d.message.indexOf("Failed to fetch")>-1)return r("failed loading "+n+": "+d.message,!0);if(d)return r(d,!1);var h,g;try{typeof f.data=="string"?h=s.options.parse(f.data,i,o):h=f.data}catch{g="failed parsing "+n+" to json"}if(g)return r(g,!1);r(null,h)})}},{key:"create",value:function(n,r,i,o,s){var a=this;if(this.options.addPath){typeof n=="string"&&(n=[n]);var l=this.options.parsePayload(r,i,o),u=0,d=[],f=[];n.forEach(function(h){var g=a.options.addPath;typeof a.options.addPath=="function"&&(g=a.options.addPath(h,r));var m=a.services.interpolator.interpolate(g,{lng:h,ns:r});a.options.request(a.options,m,l,function(v,x){u+=1,d.push(v),f.push(x),u===n.length&&typeof s=="function"&&s(d,f)})})}}},{key:"reload",value:function(){var n=this,r=this.services,i=r.backendConnector,o=r.languageUtils,s=r.logger,a=i.language;if(!(a&&a.toLowerCase()==="cimode")){var l=[],u=function(f){var h=o.toResolveHierarchy(f);h.forEach(function(g){l.indexOf(g)<0&&l.push(g)})};u(a),this.allOptions.preload&&this.allOptions.preload.forEach(function(d){return u(d)}),l.forEach(function(d){n.allOptions.ns.forEach(function(f){i.read(d,f,"read",null,null,function(h,g){h&&s.warn("loading namespace ".concat(f," for language ").concat(d," failed"),h),!h&&g&&s.log("loaded namespace ".concat(f," for language ").concat(d),g),i.loaded("".concat(d,"|").concat(f),h,g)})})})}}}]),e}();dG.type="backend";const b8e=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,S8e={"&":"&","&":"&","<":"<","<":"<",">":">",">":">","'":"'","'":"'",""":'"',""":'"'," ":" "," ":" ","©":"©","©":"©","®":"®","®":"®","…":"…","…":"…","/":"/","/":"/"},w8e=e=>S8e[e],x8e=e=>e.replace(b8e,w8e);let u4={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:x8e};function C8e(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};u4={...u4,...e}}function QMe(){return u4}let fG;function T8e(e){fG=e}function ZMe(){return fG}const E8e={type:"3rdParty",init(e){C8e(e.options.react),T8e(e)}};oi.use(dG).use(E8e).init({fallbackLng:"en",debug:!1,backend:{loadPath:"/locales/{{lng}}.json"},interpolation:{escapeValue:!1},returnNull:!1});const w2=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function dh(e){const t=Object.prototype.toString.call(e);return t==="[object Window]"||t==="[object global]"}function MA(e){return"nodeType"in e}function xi(e){var t,n;return e?dh(e)?e:MA(e)&&(t=(n=e.ownerDocument)==null?void 0:n.defaultView)!=null?t:window:window}function NA(e){const{Document:t}=xi(e);return e instanceof t}function Jm(e){return dh(e)?!1:e instanceof xi(e).HTMLElement}function A8e(e){return e instanceof xi(e).SVGElement}function fh(e){return e?dh(e)?e.document:MA(e)?NA(e)?e:Jm(e)?e.ownerDocument:document:document:document}const Zs=w2?L.useLayoutEffect:L.useEffect;function x2(e){const t=L.useRef(e);return Zs(()=>{t.current=e}),L.useCallback(function(){for(var n=arguments.length,r=new Array(n),i=0;i{e.current=setInterval(r,i)},[]),n=L.useCallback(()=>{e.current!==null&&(clearInterval(e.current),e.current=null)},[]);return[t,n]}function am(e,t){t===void 0&&(t=[e]);const n=L.useRef(e);return Zs(()=>{n.current!==e&&(n.current=e)},t),n}function ey(e,t){const n=L.useRef();return L.useMemo(()=>{const r=e(n.current);return n.current=r,r},[...t])}function k_(e){const t=x2(e),n=L.useRef(null),r=L.useCallback(i=>{i!==n.current&&(t==null||t(i,n.current)),n.current=i},[]);return[n,r]}function I_(e){const t=L.useRef();return L.useEffect(()=>{t.current=e},[e]),t.current}let xC={};function C2(e,t){return L.useMemo(()=>{if(t)return t;const n=xC[e]==null?0:xC[e]+1;return xC[e]=n,e+"-"+n},[e,t])}function hG(e){return function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;i{const a=Object.entries(s);for(const[l,u]of a){const d=o[l];d!=null&&(o[l]=d+e*u)}return o},{...t})}}const wf=hG(1),M_=hG(-1);function R8e(e){return"clientX"in e&&"clientY"in e}function LA(e){if(!e)return!1;const{KeyboardEvent:t}=xi(e.target);return t&&e instanceof t}function O8e(e){if(!e)return!1;const{TouchEvent:t}=xi(e.target);return t&&e instanceof t}function lm(e){if(O8e(e)){if(e.touches&&e.touches.length){const{clientX:t,clientY:n}=e.touches[0];return{x:t,y:n}}else if(e.changedTouches&&e.changedTouches.length){const{clientX:t,clientY:n}=e.changedTouches[0];return{x:t,y:n}}}return R8e(e)?{x:e.clientX,y:e.clientY}:null}const um=Object.freeze({Translate:{toString(e){if(!e)return;const{x:t,y:n}=e;return"translate3d("+(t?Math.round(t):0)+"px, "+(n?Math.round(n):0)+"px, 0)"}},Scale:{toString(e){if(!e)return;const{scaleX:t,scaleY:n}=e;return"scaleX("+t+") scaleY("+n+")"}},Transform:{toString(e){if(e)return[um.Translate.toString(e),um.Scale.toString(e)].join(" ")}},Transition:{toString(e){let{property:t,duration:n,easing:r}=e;return t+" "+n+"ms "+r}}}),C7="a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]";function k8e(e){return e.matches(C7)?e:e.querySelector(C7)}const I8e={display:"none"};function M8e(e){let{id:t,value:n}=e;return jt.createElement("div",{id:t,style:I8e},n)}const N8e={position:"fixed",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0 0 0 0)",clipPath:"inset(100%)",whiteSpace:"nowrap"};function L8e(e){let{id:t,announcement:n}=e;return jt.createElement("div",{id:t,style:N8e,role:"status","aria-live":"assertive","aria-atomic":!0},n)}function D8e(){const[e,t]=L.useState("");return{announce:L.useCallback(r=>{r!=null&&t(r)},[]),announcement:e}}const pG=L.createContext(null);function $8e(e){const t=L.useContext(pG);L.useEffect(()=>{if(!t)throw new Error("useDndMonitor must be used within a children of ");return t(e)},[e,t])}function F8e(){const[e]=L.useState(()=>new Set),t=L.useCallback(r=>(e.add(r),()=>e.delete(r)),[e]);return[L.useCallback(r=>{let{type:i,event:o}=r;e.forEach(s=>{var a;return(a=s[i])==null?void 0:a.call(s,o)})},[e]),t]}const B8e={draggable:` + To pick up a draggable item, press the space bar. + While dragging, use the arrow keys to move the item. + Press space again to drop the item in its new position, or press escape to cancel. + `},U8e={onDragStart(e){let{active:t}=e;return"Picked up draggable item "+t.id+"."},onDragOver(e){let{active:t,over:n}=e;return n?"Draggable item "+t.id+" was moved over droppable area "+n.id+".":"Draggable item "+t.id+" is no longer over a droppable area."},onDragEnd(e){let{active:t,over:n}=e;return n?"Draggable item "+t.id+" was dropped over droppable area "+n.id:"Draggable item "+t.id+" was dropped."},onDragCancel(e){let{active:t}=e;return"Dragging was cancelled. Draggable item "+t.id+" was dropped."}};function z8e(e){let{announcements:t=U8e,container:n,hiddenTextDescribedById:r,screenReaderInstructions:i=B8e}=e;const{announce:o,announcement:s}=D8e(),a=C2("DndLiveRegion"),[l,u]=L.useState(!1);if(L.useEffect(()=>{u(!0)},[]),$8e(L.useMemo(()=>({onDragStart(f){let{active:h}=f;o(t.onDragStart({active:h}))},onDragMove(f){let{active:h,over:g}=f;t.onDragMove&&o(t.onDragMove({active:h,over:g}))},onDragOver(f){let{active:h,over:g}=f;o(t.onDragOver({active:h,over:g}))},onDragEnd(f){let{active:h,over:g}=f;o(t.onDragEnd({active:h,over:g}))},onDragCancel(f){let{active:h,over:g}=f;o(t.onDragCancel({active:h,over:g}))}}),[o,t])),!l)return null;const d=jt.createElement(jt.Fragment,null,jt.createElement(M8e,{id:r,value:i.draggable}),jt.createElement(L8e,{id:a,announcement:s}));return n?Ms.createPortal(d,n):d}var fr;(function(e){e.DragStart="dragStart",e.DragMove="dragMove",e.DragEnd="dragEnd",e.DragCancel="dragCancel",e.DragOver="dragOver",e.RegisterDroppable="registerDroppable",e.SetDroppableDisabled="setDroppableDisabled",e.UnregisterDroppable="unregisterDroppable"})(fr||(fr={}));function N_(){}function T7(e,t){return L.useMemo(()=>({sensor:e,options:t??{}}),[e,t])}function V8e(){for(var e=arguments.length,t=new Array(e),n=0;n[...t].filter(r=>r!=null),[...t])}const ms=Object.freeze({x:0,y:0});function j8e(e,t){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function G8e(e,t){const n=lm(e);if(!n)return"0 0";const r={x:(n.x-t.left)/t.width*100,y:(n.y-t.top)/t.height*100};return r.x+"% "+r.y+"%"}function H8e(e,t){let{data:{value:n}}=e,{data:{value:r}}=t;return n-r}function W8e(e,t){let{data:{value:n}}=e,{data:{value:r}}=t;return r-n}function q8e(e){let{left:t,top:n,height:r,width:i}=e;return[{x:t,y:n},{x:t+i,y:n},{x:t,y:n+r},{x:t+i,y:n+r}]}function K8e(e,t){if(!e||e.length===0)return null;const[n]=e;return t?n[t]:n}function X8e(e,t){const n=Math.max(t.top,e.top),r=Math.max(t.left,e.left),i=Math.min(t.left+t.width,e.left+e.width),o=Math.min(t.top+t.height,e.top+e.height),s=i-r,a=o-n;if(r{let{collisionRect:t,droppableRects:n,droppableContainers:r}=e;const i=[];for(const o of r){const{id:s}=o,a=n.get(s);if(a){const l=X8e(a,t);l>0&&i.push({id:s,data:{droppableContainer:o,value:l}})}}return i.sort(W8e)};function Q8e(e,t){const{top:n,left:r,bottom:i,right:o}=t;return n<=e.y&&e.y<=i&&r<=e.x&&e.x<=o}const Z8e=e=>{let{droppableContainers:t,droppableRects:n,pointerCoordinates:r}=e;if(!r)return[];const i=[];for(const o of t){const{id:s}=o,a=n.get(s);if(a&&Q8e(r,a)){const u=q8e(a).reduce((f,h)=>f+j8e(r,h),0),d=Number((u/4).toFixed(4));i.push({id:s,data:{droppableContainer:o,value:d}})}}return i.sort(H8e)};function J8e(e,t,n){return{...e,scaleX:t&&n?t.width/n.width:1,scaleY:t&&n?t.height/n.height:1}}function gG(e,t){return e&&t?{x:e.left-t.left,y:e.top-t.top}:ms}function e9e(e){return function(n){for(var r=arguments.length,i=new Array(r>1?r-1:0),o=1;o({...s,top:s.top+e*a.y,bottom:s.bottom+e*a.y,left:s.left+e*a.x,right:s.right+e*a.x}),{...n})}}const t9e=e9e(1);function mG(e){if(e.startsWith("matrix3d(")){const t=e.slice(9,-1).split(/, /);return{x:+t[12],y:+t[13],scaleX:+t[0],scaleY:+t[5]}}else if(e.startsWith("matrix(")){const t=e.slice(7,-1).split(/, /);return{x:+t[4],y:+t[5],scaleX:+t[0],scaleY:+t[3]}}return null}function n9e(e,t,n){const r=mG(t);if(!r)return e;const{scaleX:i,scaleY:o,x:s,y:a}=r,l=e.left-s-(1-i)*parseFloat(n),u=e.top-a-(1-o)*parseFloat(n.slice(n.indexOf(" ")+1)),d=i?e.width/i:e.width,f=o?e.height/o:e.height;return{width:d,height:f,top:u,right:l+d,bottom:u+f,left:l}}const r9e={ignoreTransform:!1};function ty(e,t){t===void 0&&(t=r9e);let n=e.getBoundingClientRect();if(t.ignoreTransform){const{transform:u,transformOrigin:d}=xi(e).getComputedStyle(e);u&&(n=n9e(n,u,d))}const{top:r,left:i,width:o,height:s,bottom:a,right:l}=n;return{top:r,left:i,width:o,height:s,bottom:a,right:l}}function E7(e){return ty(e,{ignoreTransform:!0})}function i9e(e){const t=e.innerWidth,n=e.innerHeight;return{top:0,left:0,right:t,bottom:n,width:t,height:n}}function o9e(e,t){return t===void 0&&(t=xi(e).getComputedStyle(e)),t.position==="fixed"}function s9e(e,t){t===void 0&&(t=xi(e).getComputedStyle(e));const n=/(auto|scroll|overlay)/;return["overflow","overflowX","overflowY"].some(i=>{const o=t[i];return typeof o=="string"?n.test(o):!1})}function DA(e,t){const n=[];function r(i){if(t!=null&&n.length>=t||!i)return n;if(NA(i)&&i.scrollingElement!=null&&!n.includes(i.scrollingElement))return n.push(i.scrollingElement),n;if(!Jm(i)||A8e(i)||n.includes(i))return n;const o=xi(e).getComputedStyle(i);return i!==e&&s9e(i,o)&&n.push(i),o9e(i,o)?n:r(i.parentNode)}return e?r(e):n}function yG(e){const[t]=DA(e,1);return t??null}function CC(e){return!w2||!e?null:dh(e)?e:MA(e)?NA(e)||e===fh(e).scrollingElement?window:Jm(e)?e:null:null}function vG(e){return dh(e)?e.scrollX:e.scrollLeft}function _G(e){return dh(e)?e.scrollY:e.scrollTop}function c4(e){return{x:vG(e),y:_G(e)}}var xr;(function(e){e[e.Forward=1]="Forward",e[e.Backward=-1]="Backward"})(xr||(xr={}));function bG(e){return!w2||!e?!1:e===document.scrollingElement}function SG(e){const t={x:0,y:0},n=bG(e)?{height:window.innerHeight,width:window.innerWidth}:{height:e.clientHeight,width:e.clientWidth},r={x:e.scrollWidth-n.width,y:e.scrollHeight-n.height},i=e.scrollTop<=t.y,o=e.scrollLeft<=t.x,s=e.scrollTop>=r.y,a=e.scrollLeft>=r.x;return{isTop:i,isLeft:o,isBottom:s,isRight:a,maxScroll:r,minScroll:t}}const a9e={x:.2,y:.2};function l9e(e,t,n,r,i){let{top:o,left:s,right:a,bottom:l}=n;r===void 0&&(r=10),i===void 0&&(i=a9e);const{isTop:u,isBottom:d,isLeft:f,isRight:h}=SG(e),g={x:0,y:0},m={x:0,y:0},v={height:t.height*i.y,width:t.width*i.x};return!u&&o<=t.top+v.height?(g.y=xr.Backward,m.y=r*Math.abs((t.top+v.height-o)/v.height)):!d&&l>=t.bottom-v.height&&(g.y=xr.Forward,m.y=r*Math.abs((t.bottom-v.height-l)/v.height)),!h&&a>=t.right-v.width?(g.x=xr.Forward,m.x=r*Math.abs((t.right-v.width-a)/v.width)):!f&&s<=t.left+v.width&&(g.x=xr.Backward,m.x=r*Math.abs((t.left+v.width-s)/v.width)),{direction:g,speed:m}}function u9e(e){if(e===document.scrollingElement){const{innerWidth:o,innerHeight:s}=window;return{top:0,left:0,right:o,bottom:s,width:o,height:s}}const{top:t,left:n,right:r,bottom:i}=e.getBoundingClientRect();return{top:t,left:n,right:r,bottom:i,width:e.clientWidth,height:e.clientHeight}}function wG(e){return e.reduce((t,n)=>wf(t,c4(n)),ms)}function c9e(e){return e.reduce((t,n)=>t+vG(n),0)}function d9e(e){return e.reduce((t,n)=>t+_G(n),0)}function xG(e,t){if(t===void 0&&(t=ty),!e)return;const{top:n,left:r,bottom:i,right:o}=t(e);yG(e)&&(i<=0||o<=0||n>=window.innerHeight||r>=window.innerWidth)&&e.scrollIntoView({block:"center",inline:"center"})}const f9e=[["x",["left","right"],c9e],["y",["top","bottom"],d9e]];class $A{constructor(t,n){this.rect=void 0,this.width=void 0,this.height=void 0,this.top=void 0,this.bottom=void 0,this.right=void 0,this.left=void 0;const r=DA(n),i=wG(r);this.rect={...t},this.width=t.width,this.height=t.height;for(const[o,s,a]of f9e)for(const l of s)Object.defineProperty(this,l,{get:()=>{const u=a(r),d=i[o]-u;return this.rect[l]+d},enumerable:!0});Object.defineProperty(this,"rect",{enumerable:!1})}}class Xp{constructor(t){this.target=void 0,this.listeners=[],this.removeAll=()=>{this.listeners.forEach(n=>{var r;return(r=this.target)==null?void 0:r.removeEventListener(...n)})},this.target=t}add(t,n,r){var i;(i=this.target)==null||i.addEventListener(t,n,r),this.listeners.push([t,n,r])}}function h9e(e){const{EventTarget:t}=xi(e);return e instanceof t?e:fh(e)}function TC(e,t){const n=Math.abs(e.x),r=Math.abs(e.y);return typeof t=="number"?Math.sqrt(n**2+r**2)>t:"x"in t&&"y"in t?n>t.x&&r>t.y:"x"in t?n>t.x:"y"in t?r>t.y:!1}var Co;(function(e){e.Click="click",e.DragStart="dragstart",e.Keydown="keydown",e.ContextMenu="contextmenu",e.Resize="resize",e.SelectionChange="selectionchange",e.VisibilityChange="visibilitychange"})(Co||(Co={}));function A7(e){e.preventDefault()}function p9e(e){e.stopPropagation()}var on;(function(e){e.Space="Space",e.Down="ArrowDown",e.Right="ArrowRight",e.Left="ArrowLeft",e.Up="ArrowUp",e.Esc="Escape",e.Enter="Enter"})(on||(on={}));const CG={start:[on.Space,on.Enter],cancel:[on.Esc],end:[on.Space,on.Enter]},g9e=(e,t)=>{let{currentCoordinates:n}=t;switch(e.code){case on.Right:return{...n,x:n.x+25};case on.Left:return{...n,x:n.x-25};case on.Down:return{...n,y:n.y+25};case on.Up:return{...n,y:n.y-25}}};class TG{constructor(t){this.props=void 0,this.autoScrollEnabled=!1,this.referenceCoordinates=void 0,this.listeners=void 0,this.windowListeners=void 0,this.props=t;const{event:{target:n}}=t;this.props=t,this.listeners=new Xp(fh(n)),this.windowListeners=new Xp(xi(n)),this.handleKeyDown=this.handleKeyDown.bind(this),this.handleCancel=this.handleCancel.bind(this),this.attach()}attach(){this.handleStart(),this.windowListeners.add(Co.Resize,this.handleCancel),this.windowListeners.add(Co.VisibilityChange,this.handleCancel),setTimeout(()=>this.listeners.add(Co.Keydown,this.handleKeyDown))}handleStart(){const{activeNode:t,onStart:n}=this.props,r=t.node.current;r&&xG(r),n(ms)}handleKeyDown(t){if(LA(t)){const{active:n,context:r,options:i}=this.props,{keyboardCodes:o=CG,coordinateGetter:s=g9e,scrollBehavior:a="smooth"}=i,{code:l}=t;if(o.end.includes(l)){this.handleEnd(t);return}if(o.cancel.includes(l)){this.handleCancel(t);return}const{collisionRect:u}=r.current,d=u?{x:u.left,y:u.top}:ms;this.referenceCoordinates||(this.referenceCoordinates=d);const f=s(t,{active:n,context:r.current,currentCoordinates:d});if(f){const h=M_(f,d),g={x:0,y:0},{scrollableAncestors:m}=r.current;for(const v of m){const x=t.code,{isTop:_,isRight:b,isLeft:y,isBottom:S,maxScroll:C,minScroll:T}=SG(v),E=u9e(v),P={x:Math.min(x===on.Right?E.right-E.width/2:E.right,Math.max(x===on.Right?E.left:E.left+E.width/2,f.x)),y:Math.min(x===on.Down?E.bottom-E.height/2:E.bottom,Math.max(x===on.Down?E.top:E.top+E.height/2,f.y))},k=x===on.Right&&!b||x===on.Left&&!y,O=x===on.Down&&!S||x===on.Up&&!_;if(k&&P.x!==f.x){const M=v.scrollLeft+h.x,V=x===on.Right&&M<=C.x||x===on.Left&&M>=T.x;if(V&&!h.y){v.scrollTo({left:M,behavior:a});return}V?g.x=v.scrollLeft-M:g.x=x===on.Right?v.scrollLeft-C.x:v.scrollLeft-T.x,g.x&&v.scrollBy({left:-g.x,behavior:a});break}else if(O&&P.y!==f.y){const M=v.scrollTop+h.y,V=x===on.Down&&M<=C.y||x===on.Up&&M>=T.y;if(V&&!h.x){v.scrollTo({top:M,behavior:a});return}V?g.y=v.scrollTop-M:g.y=x===on.Down?v.scrollTop-C.y:v.scrollTop-T.y,g.y&&v.scrollBy({top:-g.y,behavior:a});break}}this.handleMove(t,wf(M_(f,this.referenceCoordinates),g))}}}handleMove(t,n){const{onMove:r}=this.props;t.preventDefault(),r(n)}handleEnd(t){const{onEnd:n}=this.props;t.preventDefault(),this.detach(),n()}handleCancel(t){const{onCancel:n}=this.props;t.preventDefault(),this.detach(),n()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll()}}TG.activators=[{eventName:"onKeyDown",handler:(e,t,n)=>{let{keyboardCodes:r=CG,onActivation:i}=t,{active:o}=n;const{code:s}=e.nativeEvent;if(r.start.includes(s)){const a=o.activatorNode.current;return a&&e.target!==a?!1:(e.preventDefault(),i==null||i({event:e.nativeEvent}),!0)}return!1}}];function P7(e){return!!(e&&"distance"in e)}function R7(e){return!!(e&&"delay"in e)}class FA{constructor(t,n,r){var i;r===void 0&&(r=h9e(t.event.target)),this.props=void 0,this.events=void 0,this.autoScrollEnabled=!0,this.document=void 0,this.activated=!1,this.initialCoordinates=void 0,this.timeoutId=null,this.listeners=void 0,this.documentListeners=void 0,this.windowListeners=void 0,this.props=t,this.events=n;const{event:o}=t,{target:s}=o;this.props=t,this.events=n,this.document=fh(s),this.documentListeners=new Xp(this.document),this.listeners=new Xp(r),this.windowListeners=new Xp(xi(s)),this.initialCoordinates=(i=lm(o))!=null?i:ms,this.handleStart=this.handleStart.bind(this),this.handleMove=this.handleMove.bind(this),this.handleEnd=this.handleEnd.bind(this),this.handleCancel=this.handleCancel.bind(this),this.handleKeydown=this.handleKeydown.bind(this),this.removeTextSelection=this.removeTextSelection.bind(this),this.attach()}attach(){const{events:t,props:{options:{activationConstraint:n}}}=this;if(this.listeners.add(t.move.name,this.handleMove,{passive:!1}),this.listeners.add(t.end.name,this.handleEnd),this.windowListeners.add(Co.Resize,this.handleCancel),this.windowListeners.add(Co.DragStart,A7),this.windowListeners.add(Co.VisibilityChange,this.handleCancel),this.windowListeners.add(Co.ContextMenu,A7),this.documentListeners.add(Co.Keydown,this.handleKeydown),n){if(P7(n))return;if(R7(n)){this.timeoutId=setTimeout(this.handleStart,n.delay);return}}this.handleStart()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll(),setTimeout(this.documentListeners.removeAll,50),this.timeoutId!==null&&(clearTimeout(this.timeoutId),this.timeoutId=null)}handleStart(){const{initialCoordinates:t}=this,{onStart:n}=this.props;t&&(this.activated=!0,this.documentListeners.add(Co.Click,p9e,{capture:!0}),this.removeTextSelection(),this.documentListeners.add(Co.SelectionChange,this.removeTextSelection),n(t))}handleMove(t){var n;const{activated:r,initialCoordinates:i,props:o}=this,{onMove:s,options:{activationConstraint:a}}=o;if(!i)return;const l=(n=lm(t))!=null?n:ms,u=M_(i,l);if(!r&&a){if(R7(a))return TC(u,a.tolerance)?this.handleCancel():void 0;if(P7(a))return a.tolerance!=null&&TC(u,a.tolerance)?this.handleCancel():TC(u,a.distance)?this.handleStart():void 0}t.cancelable&&t.preventDefault(),s(l)}handleEnd(){const{onEnd:t}=this.props;this.detach(),t()}handleCancel(){const{onCancel:t}=this.props;this.detach(),t()}handleKeydown(t){t.code===on.Esc&&this.handleCancel()}removeTextSelection(){var t;(t=this.document.getSelection())==null||t.removeAllRanges()}}const m9e={move:{name:"pointermove"},end:{name:"pointerup"}};class EG extends FA{constructor(t){const{event:n}=t,r=fh(n.target);super(t,m9e,r)}}EG.activators=[{eventName:"onPointerDown",handler:(e,t)=>{let{nativeEvent:n}=e,{onActivation:r}=t;return!n.isPrimary||n.button!==0?!1:(r==null||r({event:n}),!0)}}];const y9e={move:{name:"mousemove"},end:{name:"mouseup"}};var d4;(function(e){e[e.RightClick=2]="RightClick"})(d4||(d4={}));class AG extends FA{constructor(t){super(t,y9e,fh(t.event.target))}}AG.activators=[{eventName:"onMouseDown",handler:(e,t)=>{let{nativeEvent:n}=e,{onActivation:r}=t;return n.button===d4.RightClick?!1:(r==null||r({event:n}),!0)}}];const EC={move:{name:"touchmove"},end:{name:"touchend"}};class PG extends FA{constructor(t){super(t,EC)}static setup(){return window.addEventListener(EC.move.name,t,{capture:!1,passive:!1}),function(){window.removeEventListener(EC.move.name,t)};function t(){}}}PG.activators=[{eventName:"onTouchStart",handler:(e,t)=>{let{nativeEvent:n}=e,{onActivation:r}=t;const{touches:i}=n;return i.length>1?!1:(r==null||r({event:n}),!0)}}];var Yp;(function(e){e[e.Pointer=0]="Pointer",e[e.DraggableRect=1]="DraggableRect"})(Yp||(Yp={}));var L_;(function(e){e[e.TreeOrder=0]="TreeOrder",e[e.ReversedTreeOrder=1]="ReversedTreeOrder"})(L_||(L_={}));function v9e(e){let{acceleration:t,activator:n=Yp.Pointer,canScroll:r,draggingRect:i,enabled:o,interval:s=5,order:a=L_.TreeOrder,pointerCoordinates:l,scrollableAncestors:u,scrollableAncestorRects:d,delta:f,threshold:h}=e;const g=b9e({delta:f,disabled:!o}),[m,v]=P8e(),x=L.useRef({x:0,y:0}),_=L.useRef({x:0,y:0}),b=L.useMemo(()=>{switch(n){case Yp.Pointer:return l?{top:l.y,bottom:l.y,left:l.x,right:l.x}:null;case Yp.DraggableRect:return i}},[n,i,l]),y=L.useRef(null),S=L.useCallback(()=>{const T=y.current;if(!T)return;const E=x.current.x*_.current.x,P=x.current.y*_.current.y;T.scrollBy(E,P)},[]),C=L.useMemo(()=>a===L_.TreeOrder?[...u].reverse():u,[a,u]);L.useEffect(()=>{if(!o||!u.length||!b){v();return}for(const T of C){if((r==null?void 0:r(T))===!1)continue;const E=u.indexOf(T),P=d[E];if(!P)continue;const{direction:k,speed:O}=l9e(T,P,b,t,h);for(const M of["x","y"])g[M][k[M]]||(O[M]=0,k[M]=0);if(O.x>0||O.y>0){v(),y.current=T,m(S,s),x.current=O,_.current=k;return}}x.current={x:0,y:0},_.current={x:0,y:0},v()},[t,S,r,v,o,s,JSON.stringify(b),JSON.stringify(g),m,u,C,d,JSON.stringify(h)])}const _9e={x:{[xr.Backward]:!1,[xr.Forward]:!1},y:{[xr.Backward]:!1,[xr.Forward]:!1}};function b9e(e){let{delta:t,disabled:n}=e;const r=I_(t);return ey(i=>{if(n||!r||!i)return _9e;const o={x:Math.sign(t.x-r.x),y:Math.sign(t.y-r.y)};return{x:{[xr.Backward]:i.x[xr.Backward]||o.x===-1,[xr.Forward]:i.x[xr.Forward]||o.x===1},y:{[xr.Backward]:i.y[xr.Backward]||o.y===-1,[xr.Forward]:i.y[xr.Forward]||o.y===1}}},[n,t,r])}function S9e(e,t){const n=t!==null?e.get(t):void 0,r=n?n.node.current:null;return ey(i=>{var o;return t===null?null:(o=r??i)!=null?o:null},[r,t])}function w9e(e,t){return L.useMemo(()=>e.reduce((n,r)=>{const{sensor:i}=r,o=i.activators.map(s=>({eventName:s.eventName,handler:t(s.handler,r)}));return[...n,...o]},[]),[e,t])}var cm;(function(e){e[e.Always=0]="Always",e[e.BeforeDragging=1]="BeforeDragging",e[e.WhileDragging=2]="WhileDragging"})(cm||(cm={}));var f4;(function(e){e.Optimized="optimized"})(f4||(f4={}));const O7=new Map;function x9e(e,t){let{dragging:n,dependencies:r,config:i}=t;const[o,s]=L.useState(null),{frequency:a,measure:l,strategy:u}=i,d=L.useRef(e),f=x(),h=am(f),g=L.useCallback(function(_){_===void 0&&(_=[]),!h.current&&s(b=>b===null?_:b.concat(_.filter(y=>!b.includes(y))))},[h]),m=L.useRef(null),v=ey(_=>{if(f&&!n)return O7;if(!_||_===O7||d.current!==e||o!=null){const b=new Map;for(let y of e){if(!y)continue;if(o&&o.length>0&&!o.includes(y.id)&&y.rect.current){b.set(y.id,y.rect.current);continue}const S=y.node.current,C=S?new $A(l(S),S):null;y.rect.current=C,C&&b.set(y.id,C)}return b}return _},[e,o,n,f,l]);return L.useEffect(()=>{d.current=e},[e]),L.useEffect(()=>{f||g()},[n,f]),L.useEffect(()=>{o&&o.length>0&&s(null)},[JSON.stringify(o)]),L.useEffect(()=>{f||typeof a!="number"||m.current!==null||(m.current=setTimeout(()=>{g(),m.current=null},a))},[a,f,g,...r]),{droppableRects:v,measureDroppableContainers:g,measuringScheduled:o!=null};function x(){switch(u){case cm.Always:return!1;case cm.BeforeDragging:return n;default:return!n}}}function BA(e,t){return ey(n=>e?n||(typeof t=="function"?t(e):e):null,[t,e])}function C9e(e,t){return BA(e,t)}function T9e(e){let{callback:t,disabled:n}=e;const r=x2(t),i=L.useMemo(()=>{if(n||typeof window>"u"||typeof window.MutationObserver>"u")return;const{MutationObserver:o}=window;return new o(r)},[r,n]);return L.useEffect(()=>()=>i==null?void 0:i.disconnect(),[i]),i}function T2(e){let{callback:t,disabled:n}=e;const r=x2(t),i=L.useMemo(()=>{if(n||typeof window>"u"||typeof window.ResizeObserver>"u")return;const{ResizeObserver:o}=window;return new o(r)},[n]);return L.useEffect(()=>()=>i==null?void 0:i.disconnect(),[i]),i}function E9e(e){return new $A(ty(e),e)}function k7(e,t,n){t===void 0&&(t=E9e);const[r,i]=L.useReducer(a,null),o=T9e({callback(l){if(e)for(const u of l){const{type:d,target:f}=u;if(d==="childList"&&f instanceof HTMLElement&&f.contains(e)){i();break}}}}),s=T2({callback:i});return Zs(()=>{i(),e?(s==null||s.observe(e),o==null||o.observe(document.body,{childList:!0,subtree:!0})):(s==null||s.disconnect(),o==null||o.disconnect())},[e]),r;function a(l){if(!e)return null;if(e.isConnected===!1){var u;return(u=l??n)!=null?u:null}const d=t(e);return JSON.stringify(l)===JSON.stringify(d)?l:d}}function A9e(e){const t=BA(e);return gG(e,t)}const I7=[];function P9e(e){const t=L.useRef(e),n=ey(r=>e?r&&r!==I7&&e&&t.current&&e.parentNode===t.current.parentNode?r:DA(e):I7,[e]);return L.useEffect(()=>{t.current=e},[e]),n}function R9e(e){const[t,n]=L.useState(null),r=L.useRef(e),i=L.useCallback(o=>{const s=CC(o.target);s&&n(a=>a?(a.set(s,c4(s)),new Map(a)):null)},[]);return L.useEffect(()=>{const o=r.current;if(e!==o){s(o);const a=e.map(l=>{const u=CC(l);return u?(u.addEventListener("scroll",i,{passive:!0}),[u,c4(u)]):null}).filter(l=>l!=null);n(a.length?new Map(a):null),r.current=e}return()=>{s(e),s(o)};function s(a){a.forEach(l=>{const u=CC(l);u==null||u.removeEventListener("scroll",i)})}},[i,e]),L.useMemo(()=>e.length?t?Array.from(t.values()).reduce((o,s)=>wf(o,s),ms):wG(e):ms,[e,t])}function M7(e,t){t===void 0&&(t=[]);const n=L.useRef(null);return L.useEffect(()=>{n.current=null},t),L.useEffect(()=>{const r=e!==ms;r&&!n.current&&(n.current=e),!r&&n.current&&(n.current=null)},[e]),n.current?M_(e,n.current):ms}function O9e(e){L.useEffect(()=>{if(!w2)return;const t=e.map(n=>{let{sensor:r}=n;return r.setup==null?void 0:r.setup()});return()=>{for(const n of t)n==null||n()}},e.map(t=>{let{sensor:n}=t;return n}))}function k9e(e,t){return L.useMemo(()=>e.reduce((n,r)=>{let{eventName:i,handler:o}=r;return n[i]=s=>{o(s,t)},n},{}),[e,t])}function RG(e){return L.useMemo(()=>e?i9e(e):null,[e])}const AC=[];function I9e(e,t){t===void 0&&(t=ty);const[n]=e,r=RG(n?xi(n):null),[i,o]=L.useReducer(a,AC),s=T2({callback:o});return e.length>0&&i===AC&&o(),Zs(()=>{e.length?e.forEach(l=>s==null?void 0:s.observe(l)):(s==null||s.disconnect(),o())},[e]),i;function a(){return e.length?e.map(l=>bG(l)?r:new $A(t(l),l)):AC}}function OG(e){if(!e)return null;if(e.children.length>1)return e;const t=e.children[0];return Jm(t)?t:e}function M9e(e){let{measure:t}=e;const[n,r]=L.useState(null),i=L.useCallback(u=>{for(const{target:d}of u)if(Jm(d)){r(f=>{const h=t(d);return f?{...f,width:h.width,height:h.height}:h});break}},[t]),o=T2({callback:i}),s=L.useCallback(u=>{const d=OG(u);o==null||o.disconnect(),d&&(o==null||o.observe(d)),r(d?t(d):null)},[t,o]),[a,l]=k_(s);return L.useMemo(()=>({nodeRef:a,rect:n,setRef:l}),[n,a,l])}const N9e=[{sensor:EG,options:{}},{sensor:TG,options:{}}],L9e={current:{}},Hv={draggable:{measure:E7},droppable:{measure:E7,strategy:cm.WhileDragging,frequency:f4.Optimized},dragOverlay:{measure:ty}};class Qp extends Map{get(t){var n;return t!=null&&(n=super.get(t))!=null?n:void 0}toArray(){return Array.from(this.values())}getEnabled(){return this.toArray().filter(t=>{let{disabled:n}=t;return!n})}getNodeFor(t){var n,r;return(n=(r=this.get(t))==null?void 0:r.node.current)!=null?n:void 0}}const D9e={activatorEvent:null,active:null,activeNode:null,activeNodeRect:null,collisions:null,containerNodeRect:null,draggableNodes:new Map,droppableRects:new Map,droppableContainers:new Qp,over:null,dragOverlay:{nodeRef:{current:null},rect:null,setRef:N_},scrollableAncestors:[],scrollableAncestorRects:[],measuringConfiguration:Hv,measureDroppableContainers:N_,windowRect:null,measuringScheduled:!1},kG={activatorEvent:null,activators:[],active:null,activeNodeRect:null,ariaDescribedById:{draggable:""},dispatch:N_,draggableNodes:new Map,over:null,measureDroppableContainers:N_},ny=L.createContext(kG),IG=L.createContext(D9e);function $9e(){return{draggable:{active:null,initialCoordinates:{x:0,y:0},nodes:new Map,translate:{x:0,y:0}},droppable:{containers:new Qp}}}function F9e(e,t){switch(t.type){case fr.DragStart:return{...e,draggable:{...e.draggable,initialCoordinates:t.initialCoordinates,active:t.active}};case fr.DragMove:return e.draggable.active?{...e,draggable:{...e.draggable,translate:{x:t.coordinates.x-e.draggable.initialCoordinates.x,y:t.coordinates.y-e.draggable.initialCoordinates.y}}}:e;case fr.DragEnd:case fr.DragCancel:return{...e,draggable:{...e.draggable,active:null,initialCoordinates:{x:0,y:0},translate:{x:0,y:0}}};case fr.RegisterDroppable:{const{element:n}=t,{id:r}=n,i=new Qp(e.droppable.containers);return i.set(r,n),{...e,droppable:{...e.droppable,containers:i}}}case fr.SetDroppableDisabled:{const{id:n,key:r,disabled:i}=t,o=e.droppable.containers.get(n);if(!o||r!==o.key)return e;const s=new Qp(e.droppable.containers);return s.set(n,{...o,disabled:i}),{...e,droppable:{...e.droppable,containers:s}}}case fr.UnregisterDroppable:{const{id:n,key:r}=t,i=e.droppable.containers.get(n);if(!i||r!==i.key)return e;const o=new Qp(e.droppable.containers);return o.delete(n),{...e,droppable:{...e.droppable,containers:o}}}default:return e}}function B9e(e){let{disabled:t}=e;const{active:n,activatorEvent:r,draggableNodes:i}=L.useContext(ny),o=I_(r),s=I_(n==null?void 0:n.id);return L.useEffect(()=>{if(!t&&!r&&o&&s!=null){if(!LA(o)||document.activeElement===o.target)return;const a=i.get(s);if(!a)return;const{activatorNode:l,node:u}=a;if(!l.current&&!u.current)return;requestAnimationFrame(()=>{for(const d of[l.current,u.current]){if(!d)continue;const f=k8e(d);if(f){f.focus();break}}})}},[r,t,i,s,o]),null}function MG(e,t){let{transform:n,...r}=t;return e!=null&&e.length?e.reduce((i,o)=>o({transform:i,...r}),n):n}function U9e(e){return L.useMemo(()=>({draggable:{...Hv.draggable,...e==null?void 0:e.draggable},droppable:{...Hv.droppable,...e==null?void 0:e.droppable},dragOverlay:{...Hv.dragOverlay,...e==null?void 0:e.dragOverlay}}),[e==null?void 0:e.draggable,e==null?void 0:e.droppable,e==null?void 0:e.dragOverlay])}function z9e(e){let{activeNode:t,measure:n,initialRect:r,config:i=!0}=e;const o=L.useRef(!1),{x:s,y:a}=typeof i=="boolean"?{x:i,y:i}:i;Zs(()=>{if(!s&&!a||!t){o.current=!1;return}if(o.current||!r)return;const u=t==null?void 0:t.node.current;if(!u||u.isConnected===!1)return;const d=n(u),f=gG(d,r);if(s||(f.x=0),a||(f.y=0),o.current=!0,Math.abs(f.x)>0||Math.abs(f.y)>0){const h=yG(u);h&&h.scrollBy({top:f.y,left:f.x})}},[t,s,a,r,n])}const E2=L.createContext({...ms,scaleX:1,scaleY:1});var El;(function(e){e[e.Uninitialized=0]="Uninitialized",e[e.Initializing=1]="Initializing",e[e.Initialized=2]="Initialized"})(El||(El={}));const V9e=L.memo(function(t){var n,r,i,o;let{id:s,accessibility:a,autoScroll:l=!0,children:u,sensors:d=N9e,collisionDetection:f=Y8e,measuring:h,modifiers:g,...m}=t;const v=L.useReducer(F9e,void 0,$9e),[x,_]=v,[b,y]=F8e(),[S,C]=L.useState(El.Uninitialized),T=S===El.Initialized,{draggable:{active:E,nodes:P,translate:k},droppable:{containers:O}}=x,M=E?P.get(E):null,V=L.useRef({initial:null,translated:null}),B=L.useMemo(()=>{var nn;return E!=null?{id:E,data:(nn=M==null?void 0:M.data)!=null?nn:L9e,rect:V}:null},[E,M]),A=L.useRef(null),[N,D]=L.useState(null),[U,$]=L.useState(null),j=am(m,Object.values(m)),G=C2("DndDescribedBy",s),q=L.useMemo(()=>O.getEnabled(),[O]),Z=U9e(h),{droppableRects:ee,measureDroppableContainers:ie,measuringScheduled:se}=x9e(q,{dragging:T,dependencies:[k.x,k.y],config:Z.droppable}),le=S9e(P,E),W=L.useMemo(()=>U?lm(U):null,[U]),ne=ia(),fe=C9e(le,Z.draggable.measure);z9e({activeNode:E?P.get(E):null,config:ne.layoutShiftCompensation,initialRect:fe,measure:Z.draggable.measure});const pe=k7(le,Z.draggable.measure,fe),ve=k7(le?le.parentElement:null),ye=L.useRef({activatorEvent:null,active:null,activeNode:le,collisionRect:null,collisions:null,droppableRects:ee,draggableNodes:P,draggingNode:null,draggingNodeRect:null,droppableContainers:O,over:null,scrollableAncestors:[],scrollAdjustedTranslate:null}),Je=O.getNodeFor((n=ye.current.over)==null?void 0:n.id),Fe=M9e({measure:Z.dragOverlay.measure}),Ae=(r=Fe.nodeRef.current)!=null?r:le,vt=T?(i=Fe.rect)!=null?i:pe:null,_e=!!(Fe.nodeRef.current&&Fe.rect),Qt=A9e(_e?null:pe),rr=RG(Ae?xi(Ae):null),qt=P9e(T?Je??le:null),ht=I9e(qt),At=MG(g,{transform:{x:k.x-Qt.x,y:k.y-Qt.y,scaleX:1,scaleY:1},activatorEvent:U,active:B,activeNodeRect:pe,containerNodeRect:ve,draggingNodeRect:vt,over:ye.current.over,overlayNodeRect:Fe.rect,scrollableAncestors:qt,scrollableAncestorRects:ht,windowRect:rr}),un=W?wf(W,k):null,Gr=R9e(qt),Pr=M7(Gr),Ci=M7(Gr,[pe]),In=wf(At,Pr),gn=vt?t9e(vt,At):null,ir=B&&gn?f({active:B,collisionRect:gn,droppableRects:ee,droppableContainers:q,pointerCoordinates:un}):null,mn=K8e(ir,"id"),[Zt,Rr]=L.useState(null),Hr=_e?At:wf(At,Ci),si=J8e(Hr,(o=Zt==null?void 0:Zt.rect)!=null?o:null,pe),Vi=L.useCallback((nn,Ft)=>{let{sensor:or,options:qn}=Ft;if(A.current==null)return;const yr=P.get(A.current);if(!yr)return;const Or=nn.nativeEvent,kr=new or({active:A.current,activeNode:yr,event:Or,options:qn,context:ye,onStart(Ir){const sr=A.current;if(sr==null)return;const ji=P.get(sr);if(!ji)return;const{onDragStart:bs}=j.current,fo={active:{id:sr,data:ji.data,rect:V}};Ms.unstable_batchedUpdates(()=>{bs==null||bs(fo),C(El.Initializing),_({type:fr.DragStart,initialCoordinates:Ir,active:sr}),b({type:"onDragStart",event:fo})})},onMove(Ir){_({type:fr.DragMove,coordinates:Ir})},onEnd:co(fr.DragEnd),onCancel:co(fr.DragCancel)});Ms.unstable_batchedUpdates(()=>{D(kr),$(nn.nativeEvent)});function co(Ir){return async function(){const{active:ji,collisions:bs,over:fo,scrollAdjustedTranslate:tl}=ye.current;let Vo=null;if(ji&&tl){const{cancelDrop:Mr}=j.current;Vo={activatorEvent:Or,active:ji,collisions:bs,delta:tl,over:fo},Ir===fr.DragEnd&&typeof Mr=="function"&&await Promise.resolve(Mr(Vo))&&(Ir=fr.DragCancel)}A.current=null,Ms.unstable_batchedUpdates(()=>{_({type:Ir}),C(El.Uninitialized),Rr(null),D(null),$(null);const Mr=Ir===fr.DragEnd?"onDragEnd":"onDragCancel";if(Vo){const oa=j.current[Mr];oa==null||oa(Vo),b({type:Mr,event:Vo})}})}}},[P]),$n=L.useCallback((nn,Ft)=>(or,qn)=>{const yr=or.nativeEvent,Or=P.get(qn);if(A.current!==null||!Or||yr.dndKit||yr.defaultPrevented)return;const kr={active:Or};nn(or,Ft.options,kr)===!0&&(yr.dndKit={capturedBy:Ft.sensor},A.current=qn,Vi(or,Ft))},[P,Vi]),ai=w9e(d,$n);O9e(d),Zs(()=>{pe&&S===El.Initializing&&C(El.Initialized)},[pe,S]),L.useEffect(()=>{const{onDragMove:nn}=j.current,{active:Ft,activatorEvent:or,collisions:qn,over:yr}=ye.current;if(!Ft||!or)return;const Or={active:Ft,activatorEvent:or,collisions:qn,delta:{x:In.x,y:In.y},over:yr};Ms.unstable_batchedUpdates(()=>{nn==null||nn(Or),b({type:"onDragMove",event:Or})})},[In.x,In.y]),L.useEffect(()=>{const{active:nn,activatorEvent:Ft,collisions:or,droppableContainers:qn,scrollAdjustedTranslate:yr}=ye.current;if(!nn||A.current==null||!Ft||!yr)return;const{onDragOver:Or}=j.current,kr=qn.get(mn),co=kr&&kr.rect.current?{id:kr.id,rect:kr.rect.current,data:kr.data,disabled:kr.disabled}:null,Ir={active:nn,activatorEvent:Ft,collisions:or,delta:{x:yr.x,y:yr.y},over:co};Ms.unstable_batchedUpdates(()=>{Rr(co),Or==null||Or(Ir),b({type:"onDragOver",event:Ir})})},[mn]),Zs(()=>{ye.current={activatorEvent:U,active:B,activeNode:le,collisionRect:gn,collisions:ir,droppableRects:ee,draggableNodes:P,draggingNode:Ae,draggingNodeRect:vt,droppableContainers:O,over:Zt,scrollableAncestors:qt,scrollAdjustedTranslate:In},V.current={initial:vt,translated:gn}},[B,le,ir,gn,P,Ae,vt,ee,O,Zt,qt,In]),v9e({...ne,delta:k,draggingRect:gn,pointerCoordinates:un,scrollableAncestors:qt,scrollableAncestorRects:ht});const ra=L.useMemo(()=>({active:B,activeNode:le,activeNodeRect:pe,activatorEvent:U,collisions:ir,containerNodeRect:ve,dragOverlay:Fe,draggableNodes:P,droppableContainers:O,droppableRects:ee,over:Zt,measureDroppableContainers:ie,scrollableAncestors:qt,scrollableAncestorRects:ht,measuringConfiguration:Z,measuringScheduled:se,windowRect:rr}),[B,le,pe,U,ir,ve,Fe,P,O,ee,Zt,ie,qt,ht,Z,se,rr]),uo=L.useMemo(()=>({activatorEvent:U,activators:ai,active:B,activeNodeRect:pe,ariaDescribedById:{draggable:G},dispatch:_,draggableNodes:P,over:Zt,measureDroppableContainers:ie}),[U,ai,B,pe,_,G,P,Zt,ie]);return jt.createElement(pG.Provider,{value:y},jt.createElement(ny.Provider,{value:uo},jt.createElement(IG.Provider,{value:ra},jt.createElement(E2.Provider,{value:si},u)),jt.createElement(B9e,{disabled:(a==null?void 0:a.restoreFocus)===!1})),jt.createElement(z8e,{...a,hiddenTextDescribedById:G}));function ia(){const nn=(N==null?void 0:N.autoScrollEnabled)===!1,Ft=typeof l=="object"?l.enabled===!1:l===!1,or=T&&!nn&&!Ft;return typeof l=="object"?{...l,enabled:or}:{enabled:or}}}),j9e=L.createContext(null),N7="button",G9e="Droppable";function H9e(e){let{id:t,data:n,disabled:r=!1,attributes:i}=e;const o=C2(G9e),{activators:s,activatorEvent:a,active:l,activeNodeRect:u,ariaDescribedById:d,draggableNodes:f,over:h}=L.useContext(ny),{role:g=N7,roleDescription:m="draggable",tabIndex:v=0}=i??{},x=(l==null?void 0:l.id)===t,_=L.useContext(x?E2:j9e),[b,y]=k_(),[S,C]=k_(),T=k9e(s,t),E=am(n);Zs(()=>(f.set(t,{id:t,key:o,node:b,activatorNode:S,data:E}),()=>{const k=f.get(t);k&&k.key===o&&f.delete(t)}),[f,t]);const P=L.useMemo(()=>({role:g,tabIndex:v,"aria-disabled":r,"aria-pressed":x&&g===N7?!0:void 0,"aria-roledescription":m,"aria-describedby":d.draggable}),[r,g,v,x,m,d.draggable]);return{active:l,activatorEvent:a,activeNodeRect:u,attributes:P,isDragging:x,listeners:r?void 0:T,node:b,over:h,setNodeRef:y,setActivatorNodeRef:C,transform:_}}function W9e(){return L.useContext(IG)}const q9e="Droppable",K9e={timeout:25};function X9e(e){let{data:t,disabled:n=!1,id:r,resizeObserverConfig:i}=e;const o=C2(q9e),{active:s,dispatch:a,over:l,measureDroppableContainers:u}=L.useContext(ny),d=L.useRef({disabled:n}),f=L.useRef(!1),h=L.useRef(null),g=L.useRef(null),{disabled:m,updateMeasurementsFor:v,timeout:x}={...K9e,...i},_=am(v??r),b=L.useCallback(()=>{if(!f.current){f.current=!0;return}g.current!=null&&clearTimeout(g.current),g.current=setTimeout(()=>{u(Array.isArray(_.current)?_.current:[_.current]),g.current=null},x)},[x]),y=T2({callback:b,disabled:m||!s}),S=L.useCallback((P,k)=>{y&&(k&&(y.unobserve(k),f.current=!1),P&&y.observe(P))},[y]),[C,T]=k_(S),E=am(t);return L.useEffect(()=>{!y||!C.current||(y.disconnect(),f.current=!1,y.observe(C.current))},[C,y]),Zs(()=>(a({type:fr.RegisterDroppable,element:{id:r,key:o,disabled:n,node:C,rect:h,data:E}}),()=>a({type:fr.UnregisterDroppable,key:o,id:r})),[r]),L.useEffect(()=>{n!==d.current.disabled&&(a({type:fr.SetDroppableDisabled,id:r,key:o,disabled:n}),d.current.disabled=n)},[r,o,n,a]),{active:s,rect:h,isOver:(l==null?void 0:l.id)===r,node:C,over:l,setNodeRef:T}}function Y9e(e){let{animation:t,children:n}=e;const[r,i]=L.useState(null),[o,s]=L.useState(null),a=I_(n);return!n&&!r&&a&&i(a),Zs(()=>{if(!o)return;const l=r==null?void 0:r.key,u=r==null?void 0:r.props.id;if(l==null||u==null){i(null);return}Promise.resolve(t(u,o)).then(()=>{i(null)})},[t,r,o]),jt.createElement(jt.Fragment,null,n,r?L.cloneElement(r,{ref:s}):null)}const Q9e={x:0,y:0,scaleX:1,scaleY:1};function Z9e(e){let{children:t}=e;return jt.createElement(ny.Provider,{value:kG},jt.createElement(E2.Provider,{value:Q9e},t))}const J9e={position:"fixed",touchAction:"none"},eRe=e=>LA(e)?"transform 250ms ease":void 0,tRe=L.forwardRef((e,t)=>{let{as:n,activatorEvent:r,adjustScale:i,children:o,className:s,rect:a,style:l,transform:u,transition:d=eRe}=e;if(!a)return null;const f=i?u:{...u,scaleX:1,scaleY:1},h={...J9e,width:a.width,height:a.height,top:a.top,left:a.left,transform:um.Transform.toString(f),transformOrigin:i&&r?G8e(r,a):void 0,transition:typeof d=="function"?d(r):d,...l};return jt.createElement(n,{className:s,style:h,ref:t},o)}),nRe=e=>t=>{let{active:n,dragOverlay:r}=t;const i={},{styles:o,className:s}=e;if(o!=null&&o.active)for(const[a,l]of Object.entries(o.active))l!==void 0&&(i[a]=n.node.style.getPropertyValue(a),n.node.style.setProperty(a,l));if(o!=null&&o.dragOverlay)for(const[a,l]of Object.entries(o.dragOverlay))l!==void 0&&r.node.style.setProperty(a,l);return s!=null&&s.active&&n.node.classList.add(s.active),s!=null&&s.dragOverlay&&r.node.classList.add(s.dragOverlay),function(){for(const[l,u]of Object.entries(i))n.node.style.setProperty(l,u);s!=null&&s.active&&n.node.classList.remove(s.active)}},rRe=e=>{let{transform:{initial:t,final:n}}=e;return[{transform:um.Transform.toString(t)},{transform:um.Transform.toString(n)}]},iRe={duration:250,easing:"ease",keyframes:rRe,sideEffects:nRe({styles:{active:{opacity:"0"}}})};function oRe(e){let{config:t,draggableNodes:n,droppableContainers:r,measuringConfiguration:i}=e;return x2((o,s)=>{if(t===null)return;const a=n.get(o);if(!a)return;const l=a.node.current;if(!l)return;const u=OG(s);if(!u)return;const{transform:d}=xi(s).getComputedStyle(s),f=mG(d);if(!f)return;const h=typeof t=="function"?t:sRe(t);return xG(l,i.draggable.measure),h({active:{id:o,data:a.data,node:l,rect:i.draggable.measure(l)},draggableNodes:n,dragOverlay:{node:s,rect:i.dragOverlay.measure(u)},droppableContainers:r,measuringConfiguration:i,transform:f})})}function sRe(e){const{duration:t,easing:n,sideEffects:r,keyframes:i}={...iRe,...e};return o=>{let{active:s,dragOverlay:a,transform:l,...u}=o;if(!t)return;const d={x:a.rect.left-s.rect.left,y:a.rect.top-s.rect.top},f={scaleX:l.scaleX!==1?s.rect.width*l.scaleX/a.rect.width:1,scaleY:l.scaleY!==1?s.rect.height*l.scaleY/a.rect.height:1},h={x:l.x-d.x,y:l.y-d.y,...f},g=i({...u,active:s,dragOverlay:a,transform:{initial:l,final:h}}),[m]=g,v=g[g.length-1];if(JSON.stringify(m)===JSON.stringify(v))return;const x=r==null?void 0:r({active:s,dragOverlay:a,...u}),_=a.node.animate(g,{duration:t,easing:n,fill:"forwards"});return new Promise(b=>{_.onfinish=()=>{x==null||x(),b()}})}}let L7=0;function aRe(e){return L.useMemo(()=>{if(e!=null)return L7++,L7},[e])}const lRe=jt.memo(e=>{let{adjustScale:t=!1,children:n,dropAnimation:r,style:i,transition:o,modifiers:s,wrapperElement:a="div",className:l,zIndex:u=999}=e;const{activatorEvent:d,active:f,activeNodeRect:h,containerNodeRect:g,draggableNodes:m,droppableContainers:v,dragOverlay:x,over:_,measuringConfiguration:b,scrollableAncestors:y,scrollableAncestorRects:S,windowRect:C}=W9e(),T=L.useContext(E2),E=aRe(f==null?void 0:f.id),P=MG(s,{activatorEvent:d,active:f,activeNodeRect:h,containerNodeRect:g,draggingNodeRect:x.rect,over:_,overlayNodeRect:x.rect,scrollableAncestors:y,scrollableAncestorRects:S,transform:T,windowRect:C}),k=BA(h),O=oRe({config:r,draggableNodes:m,droppableContainers:v,measuringConfiguration:b}),M=k?x.setRef:void 0;return jt.createElement(Z9e,null,jt.createElement(Y9e,{animation:O},f&&E?jt.createElement(tRe,{key:E,id:f.id,ref:M,as:a,activatorEvent:d,adjustScale:t,className:l,transition:o,rect:k,style:{zIndex:u,...i},transform:P},n):null))}),uRe=e=>{let{activatorEvent:t,draggingNodeRect:n,transform:r}=e;if(n&&t){const i=lm(t);if(!i)return r;const o=i.x-n.left,s=i.y-n.top;return{...r,x:r.x+o-n.width/2,y:r.y+s-n.height/2}}return r},cRe=()=>Q$(),JMe=j$,lv=28,D7={w:lv,h:lv,maxW:lv,maxH:lv,shadow:"dark-lg",borderRadius:"lg",opacity:.3,bg:"base.800",color:"base.50",_dark:{borderColor:"base.200",bg:"base.900",color:"base.100"}},dRe=e=>{if(!e.dragData)return null;if(e.dragData.payloadType==="IMAGE_DTO"){const{thumbnail_url:t,width:n,height:r}=e.dragData.payload.imageDTO;return ue.jsx(kA,{sx:{position:"relative",width:"100%",height:"100%",display:"flex",alignItems:"center",justifyContent:"center",userSelect:"none",cursor:"none"},children:ue.jsx(OA,{sx:{...D7},objectFit:"contain",src:t,width:n,height:r})})}return e.dragData.payloadType==="IMAGE_DTOS"?ue.jsxs(IA,{sx:{cursor:"none",userSelect:"none",position:"relative",alignItems:"center",justifyContent:"center",flexDir:"column",...D7},children:[ue.jsx(i4,{children:e.dragData.payload.imageDTOs.length}),ue.jsx(i4,{size:"sm",children:"Images"})]}):null},fRe=L.memo(dRe);function eNe(e){return X9e(e)}function tNe(e){return H9e(e)}const nNe=(e,t)=>{if(!e||!(t!=null&&t.data.current))return!1;const{actionType:n}=e,{payloadType:r}=t.data.current;if(e.id===t.data.current.id)return!1;switch(n){case"SET_CURRENT_IMAGE":return r==="IMAGE_DTO";case"SET_INITIAL_IMAGE":return r==="IMAGE_DTO";case"SET_CONTROLNET_IMAGE":return r==="IMAGE_DTO";case"SET_CANVAS_INITIAL_IMAGE":return r==="IMAGE_DTO";case"SET_NODES_IMAGE":return r==="IMAGE_DTO";case"SET_MULTI_NODES_IMAGE":return r==="IMAGE_DTO"||"IMAGE_DTOS";case"ADD_TO_BATCH":return r==="IMAGE_DTO"||"IMAGE_DTOS";case"ADD_TO_BOARD":{if(!(r==="IMAGE_DTO"||"IMAGE_DTOS"))return!1;if(r==="IMAGE_DTO"){const{imageDTO:o}=t.data.current.payload,s=o.board_id??"none",a=e.context.boardId;return s!==a}return r==="IMAGE_DTOS"}case"REMOVE_FROM_BOARD":{if(!(r==="IMAGE_DTO"||"IMAGE_DTOS"))return!1;if(r==="IMAGE_DTO"){const{imageDTO:o}=t.data.current.payload;return o.board_id!=="none"}return r==="IMAGE_DTOS"}default:return!1}};function hRe(e){return ue.jsx(V9e,{...e})}const pRe=e=>{const[t,n]=L.useState(null),r=ke("images"),i=cRe(),o=L.useCallback(d=>{r.trace({dragData:d.active.data.current},"Drag started");const f=d.active.data.current;f&&n(f)},[r]),s=L.useCallback(d=>{var h;r.trace({dragData:d.active.data.current},"Drag ended");const f=(h=d.over)==null?void 0:h.data.current;!t||!f||(i(iz({overData:f,activeData:t})),n(null))},[t,i,r]),a=T7(AG,{activationConstraint:{distance:10}}),l=T7(PG,{activationConstraint:{distance:10}}),u=V8e(a,l);return ue.jsxs(hRe,{onDragStart:o,onDragEnd:s,sensors:u,collisionDetection:Z8e,children:[e.children,ue.jsx(lRe,{dropAnimation:null,modifiers:[uRe],children:ue.jsx(QPe,{children:t&&ue.jsx(jPe.div,{layout:!0,initial:{opacity:0,scale:.7},animate:{opacity:1,scale:1,transition:{duration:.1}},children:ue.jsx(fRe,{dragData:t})},"overlay-drag-image")})})]})},gRe=L.memo(pRe),mRe=L.lazy(()=>QN(()=>import("./App-7d912410.js"),["./App-7d912410.js","./menu-971c0572.js","./App-6125620a.css"],import.meta.url)),yRe=L.lazy(()=>QN(()=>import("./ThemeLocaleProvider-bc3e6f20.js"),["./ThemeLocaleProvider-bc3e6f20.js","./menu-971c0572.js","./ThemeLocaleProvider-5b992bc7.css"],import.meta.url)),vRe=({apiUrl:e,token:t,config:n,headerComponent:r,middleware:i,projectId:o})=>(L.useEffect(()=>(t&&Dg.set(t),e&&$g.set(e),o&&N1.set(o),HU(),i&&i.length>0?d5(Yk(),...i):d5(Yk()),()=>{$g.set(void 0),Dg.set(void 0),N1.set(void 0)}),[e,t,i,o]),ue.jsx(jt.StrictMode,{children:ue.jsx(Fde,{store:u3e,children:ue.jsx(jt.Suspense,{fallback:ue.jsx(o8e,{}),children:ue.jsx(yRe,{children:ue.jsx(gRe,{children:ue.jsx(mRe,{config:n,headerComponent:r})})})})})})),_Re=L.memo(vRe);PC.createRoot(document.getElementById("root")).render(ue.jsx(_Re,{}));export{KMe as $,L as A,ue as B,$o as C,Gn as D,mf as E,ii as F,rs as G,fme as H,Bi as I,Hl as J,Rs as K,i7e as L,CB as M,Ame as N,rye as O,gme as P,wpe as Q,Uf as R,Cg as S,G5e as T,zc as U,Cc as V,EV as W,FMe as X,LMe as Y,QPe as Z,jPe as _,VL as a,dQ as a$,MV as a0,iG as a1,$V as a2,DMe as a3,$Me as a4,j5e as a5,V5e as a6,BMe as a7,Ju as a8,Tc as a9,IA as aA,i4 as aB,OMe as aC,Kz as aD,_Ie as aE,R5e as aF,oA as aG,_V as aH,k5e as aI,Ms as aJ,HP as aK,sA as aL,Y7e as aM,sIe as aN,SIe as aO,wIe as aP,JIe as aQ,QIe as aR,Hu as aS,D_e as aT,JU as aU,M7e as aV,YIe as aW,nE as aX,OE as aY,eR as aZ,Cke as a_,U1 as aa,ZJ as ab,jt as ac,mTe as ad,qMe as ae,La as af,CV as ag,$6e as ah,VMe as ai,z5 as aj,NMe as ak,WMe as al,mi as am,PE as an,gb as ao,JMe as ap,s7e as aq,Bm as ar,oU as as,kU as at,fS as au,cRe as av,$7e as aw,Yn as ax,lc as ay,kA as az,CT as b,k7e as b$,xRe as b0,SRe as b1,wRe as b2,Ze as b3,dIe as b4,PIe as b5,AIe as b6,uIe as b7,XIe as b8,ZCe as b9,DRe as bA,lOe as bB,MRe as bC,YRe as bD,BRe as bE,mbe as bF,NRe as bG,oOe as bH,IRe as bI,hOe as bJ,$Re as bK,QRe as bL,FRe as bM,ZRe as bN,jRe as bO,eOe as bP,gbe as bQ,URe as bR,kO as bS,E7e as bT,A7e as bU,P7e as bV,GRe as bW,R7e as bX,HRe as bY,O7e as bZ,WRe as b_,eNe as ba,nNe as bb,WIe as bc,aIe as bd,lIe as be,gIe as bf,W3 as bg,cIe as bh,OA as bi,r8e as bj,NOe as bk,Ml as bl,T0 as bm,HIe as bn,jIe as bo,KIe as bp,GIe as bq,bRe as br,PRe as bs,RRe as bt,ORe as bu,kRe as bv,rOe as bw,iOe as bx,w7e as by,x7e as bz,Kte as c,kd as c$,Me as c0,mIe as c1,Efe as c2,T$ as c3,fke as c4,b$ as c5,ZIe as c6,tNe as c7,MMe as c8,rz as c9,D1e as cA,OOe as cB,FOe as cC,H7e as cD,que as cE,o7e as cF,D7e as cG,FT as cH,VIe as cI,BIe as cJ,UIe as cK,zIe as cL,t7e as cM,n7e as cN,$F as cO,aMe as cP,gc as cQ,CRe as cR,e7e as cS,DT as cT,ke as cU,VRe as cV,sMe as cW,PR as cX,NIe as cY,eE as cZ,vfe as c_,hIe as ca,j1 as cb,qIe as cc,pIe as cd,tR as ce,G1 as cf,RMe as cg,nMe as ch,IOe as ci,Z7e as cj,fIe as ck,bIe as cl,tE as cm,BT as cn,LRe as co,BOe as cp,oi as cq,j7e as cr,J7e as cs,Q7e as ct,p_e as cu,V7e as cv,W7e as cw,q7e as cx,Gue as cy,L1e as cz,Dae as d,bMe as d$,RR as d0,LIe as d1,DIe as d2,$Ie as d3,_fe as d4,FIe as d5,RF as d6,kIe as d7,MIe as d8,RIe as d9,uMe as dA,m$ as dB,TOe as dC,Hue as dD,Ns as dE,JRe as dF,cOe as dG,ARe as dH,Ale as dI,fOe as dJ,T7e as dK,EOe as dL,S7e as dM,ASe as dN,POe as dO,we as dP,Yi as dQ,Cn as dR,Gs as dS,rMe as dT,xOe as dU,Ele as dV,SOe as dW,wOe as dX,vOe as dY,_Oe as dZ,yOe as d_,NCe as da,QO as db,OIe as dc,COe as dd,pOe as de,bOe as df,nOe as dg,F7e as dh,Oc as di,U7e as dj,Aa as dk,CSe as dl,qRe as dm,zm as dn,lMe as dp,C7e as dq,iMe as dr,TMe as ds,h$ as dt,vMe as du,f1e as dv,tOe as dw,p$ as dx,oMe as dy,$ue as dz,VD as e,nke as e$,hMe as e0,X7e as e1,fMe as e2,CMe as e3,_Me as e4,K7e as e5,gMe as e6,pMe as e7,cMe as e8,yMe as e9,a7e as eA,l7e as eB,d7e as eC,c7e as eD,f7e as eE,y7e as eF,e0e as eG,rU as eH,jue as eI,gOe as eJ,qOe as eK,yke as eL,nIe as eM,sOe as eN,aOe as eO,gke as eP,vke as eQ,hz as eR,MQ as eS,ft as eT,kke as eU,Yke as eV,Xke as eW,cke as eX,Uke as eY,Zke as eZ,G_e as e_,ERe as ea,dMe as eb,mMe as ec,TRe as ed,qB as ee,LT as ef,SMe as eg,e_ as eh,Ue as ei,wMe as ej,NU as ek,zRe as el,xMe as em,j$ as en,Q$ as eo,b7e as ep,h7e as eq,p7e as er,g7e as es,xE as et,v7e as eu,_7e as ev,qg as ew,mb as ex,u7e as ey,e3e as ez,YL as f,PMe as f$,Eke as f0,mp as f1,wke as f2,rke as f3,gS as f4,Tke as f5,JOe as f6,xke as f7,eke as f8,ske as f9,Ske as fA,hke as fB,Mke as fC,Bke as fD,Nke as fE,uke as fF,tke as fG,Wke as fH,Hke as fI,$ke as fJ,Lke as fK,Dke as fL,rIe as fM,jke as fN,iIe as fO,bke as fP,_ke as fQ,ZOe as fR,QOe as fS,tIe as fT,dke as fU,V_e as fV,B_e as fW,U_e as fX,z_e as fY,WOe as fZ,AOe as f_,jOe as fa,VOe as fb,zOe as fc,Qke as fd,w$ as fe,Dg as ff,KOe as fg,XOe as fh,YOe as fi,Kke as fj,lke as fk,ake as fl,dce as fm,qke as fn,j_e as fo,ike as fp,OCe as fq,MCe as fr,pke as fs,Ike as ft,Oke as fu,Ake as fv,GOe as fw,HOe as fx,eMe as fy,tMe as fz,Rae as g,MOe as g0,y$ as g1,DOe as g2,LOe as g3,$Oe as g4,Cle as g5,N_e as g6,IMe as g7,TV as g8,HMe as g9,jMe as ga,UMe as gb,GMe as gc,Us as gd,zMe as ge,kMe as gf,pTe as gg,sTe as gh,XMe as gi,QMe as gj,ZMe as gk,oD as h,vi as i,Jf as j,hb as k,Er as l,fb as m,Tm as n,ps as o,gu as p,cb as q,Js as r,Am as s,vx as t,bT as u,KL as v,PT as w,LD as x,QL as y,Sle as z}; diff --git a/invokeai/frontend/web/dist/assets/menu-971c0572.js b/invokeai/frontend/web/dist/assets/menu-971c0572.js new file mode 100644 index 0000000000..d337c4a5f7 --- /dev/null +++ b/invokeai/frontend/web/dist/assets/menu-971c0572.js @@ -0,0 +1 @@ +import{A as p,B as d,a5 as Z,aJ as xe,gi as We,_ as Be,V as j,a8 as q,U as z,W as R,a2 as _e,a1 as De,a0 as Ce,$ as Ge,Z as Ue,gj as Ve,gk as Ze,ac as A,g7 as D,gf as qe,g9 as Xe}from"./index-2c171c8f.js";function Je(e,t){return`${e} returned \`undefined\`. Seems you forgot to wrap component within ${t}`}function M(e={}){const{name:t,strict:r=!0,hookName:o="useContext",providerName:a="Provider",errorMessage:n,defaultValue:s}=e,i=p.createContext(s);i.displayName=t;function l(){var c;const u=p.useContext(i);if(!u&&r){const f=new Error(n??Je(o,a));throw f.name="ContextError",(c=Error.captureStackTrace)==null||c.call(Error,f,l),f}return u}return[i.Provider,l,i]}var[Ke,Ye]=M({strict:!1,name:"PortalManagerContext"});function Qe(e){const{children:t,zIndex:r}=e;return d.jsx(Ke,{value:{zIndex:r},children:t})}Qe.displayName="PortalManager";var[ke,et]=M({strict:!1,name:"PortalContext"}),J="chakra-portal",tt=".chakra-portal",rt=e=>d.jsx("div",{className:"chakra-portal-zIndex",style:{position:"absolute",zIndex:e.zIndex,top:0,left:0,right:0},children:e.children}),nt=e=>{const{appendToParentPortal:t,children:r}=e,[o,a]=p.useState(null),n=p.useRef(null),[,s]=p.useState({});p.useEffect(()=>s({}),[]);const i=et(),l=Ye();Z(()=>{if(!o)return;const u=o.ownerDocument,f=t?i??u.body:u.body;if(!f)return;n.current=u.createElement("div"),n.current.className=J,f.appendChild(n.current),s({});const y=n.current;return()=>{f.contains(y)&&f.removeChild(y)}},[o]);const c=l!=null&&l.zIndex?d.jsx(rt,{zIndex:l==null?void 0:l.zIndex,children:r}):r;return n.current?xe.createPortal(d.jsx(ke,{value:n.current,children:c}),n.current):d.jsx("span",{ref:u=>{u&&a(u)}})},ot=e=>{const{children:t,containerRef:r,appendToParentPortal:o}=e,a=r.current,n=a??(typeof window<"u"?document.body:void 0),s=p.useMemo(()=>{const l=a==null?void 0:a.ownerDocument.createElement("div");return l&&(l.className=J),l},[a]),[,i]=p.useState({});return Z(()=>i({}),[]),Z(()=>{if(!(!s||!n))return n.appendChild(s),()=>{n.removeChild(s)}},[s,n]),n&&s?xe.createPortal(d.jsx(ke,{value:o?s:null,children:t}),s):null};function G(e){const t={appendToParentPortal:!0,...e},{containerRef:r,...o}=t;return r?d.jsx(ot,{containerRef:r,...o}):d.jsx(nt,{...o})}G.className=J;G.selector=tt;G.displayName="Portal";function m(e,t={}){let r=!1;function o(){if(!r){r=!0;return}throw new Error("[anatomy] .part(...) should only be called once. Did you mean to use .extend(...) ?")}function a(...u){o();for(const f of u)t[f]=l(f);return m(e,t)}function n(...u){for(const f of u)f in t||(t[f]=l(f));return m(e,t)}function s(){return Object.fromEntries(Object.entries(t).map(([f,y])=>[f,y.selector]))}function i(){return Object.fromEntries(Object.entries(t).map(([f,y])=>[f,y.className]))}function l(u){const g=`chakra-${(["container","root"].includes(u??"")?[e]:[e,u]).filter(Boolean).join("__")}`;return{className:g,selector:`.${g}`,toString:()=>u}}return{parts:a,toPart:l,extend:n,selectors:s,classnames:i,get keys(){return Object.keys(t)},__type:{}}}var Or=m("accordion").parts("root","container","button","panel").extend("icon"),zr=m("alert").parts("title","description","container").extend("icon","spinner"),Rr=m("avatar").parts("label","badge","container").extend("excessLabel","group"),Mr=m("breadcrumb").parts("link","item","container").extend("separator");m("button").parts();var Lr=m("checkbox").parts("control","icon","container").extend("label");m("progress").parts("track","filledTrack").extend("label");var Fr=m("drawer").parts("overlay","dialogContainer","dialog").extend("header","closeButton","body","footer"),Hr=m("editable").parts("preview","input","textarea"),Wr=m("form").parts("container","requiredIndicator","helperText"),Br=m("formError").parts("text","icon"),Dr=m("input").parts("addon","field","element","group"),Gr=m("list").parts("container","item","icon"),at=m("menu").parts("button","list","item").extend("groupTitle","icon","command","divider"),Ur=m("modal").parts("overlay","dialogContainer","dialog").extend("header","closeButton","body","footer"),Vr=m("numberinput").parts("root","field","stepperGroup","stepper");m("pininput").parts("field");var Zr=m("popover").parts("content","header","body","footer").extend("popper","arrow","closeButton"),qr=m("progress").parts("label","filledTrack","track"),Xr=m("radio").parts("container","control","label"),Jr=m("select").parts("field","icon"),Kr=m("slider").parts("container","track","thumb","filledTrack","mark"),Yr=m("stat").parts("container","label","helpText","number","icon"),Qr=m("switch").parts("container","track","thumb"),en=m("table").parts("table","thead","tbody","tr","th","td","tfoot","caption"),tn=m("tabs").parts("root","tab","tablist","tabpanel","tabpanels","indicator"),rn=m("tag").parts("container","label","closeButton"),nn=m("card").parts("container","header","body","footer");function P(e,t){return r=>r.colorMode==="dark"?t:e}function on(e){const{orientation:t,vertical:r,horizontal:o}=e;return t?t==="vertical"?r:o:{}}var st=(e,t)=>e.find(r=>r.id===t);function re(e,t){const r=we(e,t),o=r?e[r].findIndex(a=>a.id===t):-1;return{position:r,index:o}}function we(e,t){for(const[r,o]of Object.entries(e))if(st(o,t))return r}function it(e){const t=e.includes("right"),r=e.includes("left");let o="center";return t&&(o="flex-end"),r&&(o="flex-start"),{display:"flex",flexDirection:"column",alignItems:o}}function lt(e){const r=e==="top"||e==="bottom"?"0 auto":void 0,o=e.includes("top")?"env(safe-area-inset-top, 0px)":void 0,a=e.includes("bottom")?"env(safe-area-inset-bottom, 0px)":void 0,n=e.includes("left")?void 0:"env(safe-area-inset-right, 0px)",s=e.includes("right")?void 0:"env(safe-area-inset-left, 0px)";return{position:"fixed",zIndex:"var(--toast-z-index, 5500)",pointerEvents:"none",display:"flex",flexDirection:"column",margin:r,top:o,bottom:a,right:n,left:s}}function ct(e,t=[]){const r=p.useRef(e);return p.useEffect(()=>{r.current=e}),p.useCallback((...o)=>{var a;return(a=r.current)==null?void 0:a.call(r,...o)},t)}function ut(e,t){const r=ct(e);p.useEffect(()=>{if(t==null)return;let o=null;return o=window.setTimeout(()=>{r()},t),()=>{o&&window.clearTimeout(o)}},[t,r])}function ne(e,t){const r=p.useRef(!1),o=p.useRef(!1);p.useEffect(()=>{if(r.current&&o.current)return e();o.current=!0},t),p.useEffect(()=>(r.current=!0,()=>{r.current=!1}),[])}var dt={initial:e=>{const{position:t}=e,r=["top","bottom"].includes(t)?"y":"x";let o=["top-right","bottom-right"].includes(t)?1:-1;return t==="bottom"&&(o=1),{opacity:0,[r]:o*24}},animate:{opacity:1,y:0,x:0,scale:1,transition:{duration:.4,ease:[.4,0,.2,1]}},exit:{opacity:0,scale:.85,transition:{duration:.2,ease:[.4,0,1,1]}}},Pe=p.memo(e=>{const{id:t,message:r,onCloseComplete:o,onRequestRemove:a,requestClose:n=!1,position:s="bottom",duration:i=5e3,containerStyle:l,motionVariants:c=dt,toastSpacing:u="0.5rem"}=e,[f,y]=p.useState(i),g=We();ne(()=>{g||o==null||o()},[g]),ne(()=>{y(i)},[i]);const h=()=>y(null),$=()=>y(i),S=()=>{g&&a()};p.useEffect(()=>{g&&n&&a()},[g,n,a]),ut(S,f);const H=p.useMemo(()=>({pointerEvents:"auto",maxWidth:560,minWidth:300,margin:u,...l}),[l,u]),N=p.useMemo(()=>it(s),[s]);return d.jsx(Be.div,{layout:!0,className:"chakra-toast",variants:c,initial:"initial",animate:"animate",exit:"exit",onHoverStart:h,onHoverEnd:$,custom:{position:s},style:N,children:d.jsx(j.div,{role:"status","aria-atomic":"true",className:"chakra-toast__inner",__css:H,children:q(r,{id:t,onClose:S})})})});Pe.displayName="ToastComponent";function ft(e,t){var r;const o=e??"bottom",n={"top-start":{ltr:"top-left",rtl:"top-right"},"top-end":{ltr:"top-right",rtl:"top-left"},"bottom-start":{ltr:"bottom-left",rtl:"bottom-right"},"bottom-end":{ltr:"bottom-right",rtl:"bottom-left"}}[o];return(r=n==null?void 0:n[t])!=null?r:o}var oe={path:d.jsxs("g",{stroke:"currentColor",strokeWidth:"1.5",children:[d.jsx("path",{strokeLinecap:"round",fill:"none",d:"M9,9a3,3,0,1,1,4,2.829,1.5,1.5,0,0,0-1,1.415V14.25"}),d.jsx("path",{fill:"currentColor",strokeLinecap:"round",d:"M12,17.25a.375.375,0,1,0,.375.375A.375.375,0,0,0,12,17.25h0"}),d.jsx("circle",{fill:"none",strokeMiterlimit:"10",cx:"12",cy:"12",r:"11.25"})]}),viewBox:"0 0 24 24"},L=z((e,t)=>{const{as:r,viewBox:o,color:a="currentColor",focusable:n=!1,children:s,className:i,__css:l,...c}=e,u=R("chakra-icon",i),f=_e("Icon",e),y={w:"1em",h:"1em",display:"inline-block",lineHeight:"1em",flexShrink:0,color:a,...l,...f},g={ref:t,focusable:n,className:u,__css:y},h=o??oe.viewBox;if(r&&typeof r!="string")return d.jsx(j.svg,{as:r,...g,...c});const $=s??oe.path;return d.jsx(j.svg,{verticalAlign:"middle",viewBox:h,...g,...c,children:$})});L.displayName="Icon";function pt(e){return d.jsx(L,{viewBox:"0 0 24 24",...e,children:d.jsx("path",{fill:"currentColor",d:"M12,0A12,12,0,1,0,24,12,12.014,12.014,0,0,0,12,0Zm6.927,8.2-6.845,9.289a1.011,1.011,0,0,1-1.43.188L5.764,13.769a1,1,0,1,1,1.25-1.562l4.076,3.261,6.227-8.451A1,1,0,1,1,18.927,8.2Z"})})}function mt(e){return d.jsx(L,{viewBox:"0 0 24 24",...e,children:d.jsx("path",{fill:"currentColor",d:"M12,0A12,12,0,1,0,24,12,12.013,12.013,0,0,0,12,0Zm.25,5a1.5,1.5,0,1,1-1.5,1.5A1.5,1.5,0,0,1,12.25,5ZM14.5,18.5h-4a1,1,0,0,1,0-2h.75a.25.25,0,0,0,.25-.25v-4.5a.25.25,0,0,0-.25-.25H10.5a1,1,0,0,1,0-2h1a2,2,0,0,1,2,2v4.75a.25.25,0,0,0,.25.25h.75a1,1,0,1,1,0,2Z"})})}function ae(e){return d.jsx(L,{viewBox:"0 0 24 24",...e,children:d.jsx("path",{fill:"currentColor",d:"M11.983,0a12.206,12.206,0,0,0-8.51,3.653A11.8,11.8,0,0,0,0,12.207,11.779,11.779,0,0,0,11.8,24h.214A12.111,12.111,0,0,0,24,11.791h0A11.766,11.766,0,0,0,11.983,0ZM10.5,16.542a1.476,1.476,0,0,1,1.449-1.53h.027a1.527,1.527,0,0,1,1.523,1.47,1.475,1.475,0,0,1-1.449,1.53h-.027A1.529,1.529,0,0,1,10.5,16.542ZM11,12.5v-6a1,1,0,0,1,2,0v6a1,1,0,1,1-2,0Z"})})}var[gt,K]=M({name:"AlertContext",hookName:"useAlertContext",providerName:""}),[bt,Y]=M({name:"AlertStylesContext",hookName:"useAlertStyles",providerName:""}),Ae={info:{icon:mt,colorScheme:"blue"},warning:{icon:ae,colorScheme:"orange"},success:{icon:pt,colorScheme:"green"},error:{icon:ae,colorScheme:"red"},loading:{icon:De,colorScheme:"blue"}};function yt(e){return Ae[e].colorScheme}function vt(e){return Ae[e].icon}var je=z(function(t,r){const o=Y(),{status:a}=K(),n={display:"inline",...o.description};return d.jsx(j.div,{ref:r,"data-status":a,...t,className:R("chakra-alert__desc",t.className),__css:n})});je.displayName="AlertDescription";function Ee(e){const{status:t}=K(),r=vt(t),o=Y(),a=t==="loading"?o.spinner:o.icon;return d.jsx(j.span,{display:"inherit","data-status":t,...e,className:R("chakra-alert__icon",e.className),__css:a,children:e.children||d.jsx(r,{h:"100%",w:"100%"})})}Ee.displayName="AlertIcon";var Ne=z(function(t,r){const o=Y(),{status:a}=K();return d.jsx(j.div,{ref:r,"data-status":a,...t,className:R("chakra-alert__title",t.className),__css:o.title})});Ne.displayName="AlertTitle";var $e=z(function(t,r){var o;const{status:a="info",addRole:n=!0,...s}=Ce(t),i=(o=t.colorScheme)!=null?o:yt(a),l=Ge("Alert",{...t,colorScheme:i}),c={width:"100%",display:"flex",alignItems:"center",position:"relative",overflow:"hidden",...l.container};return d.jsx(gt,{value:{status:a},children:d.jsx(bt,{value:l,children:d.jsx(j.div,{"data-status":a,role:n?"alert":void 0,ref:r,...s,className:R("chakra-alert",t.className),__css:c})})})});$e.displayName="Alert";function ht(e){return d.jsx(L,{focusable:"false","aria-hidden":!0,...e,children:d.jsx("path",{fill:"currentColor",d:"M.439,21.44a1.5,1.5,0,0,0,2.122,2.121L11.823,14.3a.25.25,0,0,1,.354,0l9.262,9.263a1.5,1.5,0,1,0,2.122-2.121L14.3,12.177a.25.25,0,0,1,0-.354l9.263-9.262A1.5,1.5,0,0,0,21.439.44L12.177,9.7a.25.25,0,0,1-.354,0L2.561.44A1.5,1.5,0,0,0,.439,2.561L9.7,11.823a.25.25,0,0,1,0,.354Z"})})}var Te=z(function(t,r){const o=_e("CloseButton",t),{children:a,isDisabled:n,__css:s,...i}=Ce(t),l={outline:0,display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0};return d.jsx(j.button,{type:"button","aria-label":"Close",ref:r,disabled:n,__css:{...l,...o,...s},...i,children:a||d.jsx(ht,{width:"1em",height:"1em"})})});Te.displayName="CloseButton";var St={top:[],"top-left":[],"top-right":[],"bottom-left":[],bottom:[],"bottom-right":[]},C=xt(St);function xt(e){let t=e;const r=new Set,o=a=>{t=a(t),r.forEach(n=>n())};return{getState:()=>t,subscribe:a=>(r.add(a),()=>{o(()=>e),r.delete(a)}),removeToast:(a,n)=>{o(s=>({...s,[n]:s[n].filter(i=>i.id!=a)}))},notify:(a,n)=>{const s=_t(a,n),{position:i,id:l}=s;return o(c=>{var u,f;const g=i.includes("top")?[s,...(u=c[i])!=null?u:[]]:[...(f=c[i])!=null?f:[],s];return{...c,[i]:g}}),l},update:(a,n)=>{a&&o(s=>{const i={...s},{position:l,index:c}=re(i,a);return l&&c!==-1&&(i[l][c]={...i[l][c],...n,message:Ie(n)}),i})},closeAll:({positions:a}={})=>{o(n=>(a??["bottom","bottom-right","bottom-left","top","top-left","top-right"]).reduce((l,c)=>(l[c]=n[c].map(u=>({...u,requestClose:!0})),l),{...n}))},close:a=>{o(n=>{const s=we(n,a);return s?{...n,[s]:n[s].map(i=>i.id==a?{...i,requestClose:!0}:i)}:n})},isActive:a=>!!re(C.getState(),a).position}}var se=0;function _t(e,t={}){var r,o;se+=1;const a=(r=t.id)!=null?r:se,n=(o=t.position)!=null?o:"bottom";return{id:a,message:e,position:n,duration:t.duration,onCloseComplete:t.onCloseComplete,onRequestRemove:()=>C.removeToast(String(a),n),status:t.status,requestClose:!1,containerStyle:t.containerStyle}}var Ct=e=>{const{status:t,variant:r="solid",id:o,title:a,isClosable:n,onClose:s,description:i,colorScheme:l,icon:c}=e,u=o?{root:`toast-${o}`,title:`toast-${o}-title`,description:`toast-${o}-description`}:void 0;return d.jsxs($e,{addRole:!1,status:t,variant:r,id:u==null?void 0:u.root,alignItems:"start",borderRadius:"md",boxShadow:"lg",paddingEnd:8,textAlign:"start",width:"auto",colorScheme:l,children:[d.jsx(Ee,{children:c}),d.jsxs(j.div,{flex:"1",maxWidth:"100%",children:[a&&d.jsx(Ne,{id:u==null?void 0:u.title,children:a}),i&&d.jsx(je,{id:u==null?void 0:u.description,display:"block",children:i})]}),n&&d.jsx(Te,{size:"sm",onClick:s,position:"absolute",insetEnd:1,top:1})]})};function Ie(e={}){const{render:t,toastComponent:r=Ct}=e;return a=>typeof t=="function"?t({...a,...e}):d.jsx(r,{...a,...e})}function an(e,t){const r=a=>{var n;return{...t,...a,position:ft((n=a==null?void 0:a.position)!=null?n:t==null?void 0:t.position,e)}},o=a=>{const n=r(a),s=Ie(n);return C.notify(s,n)};return o.update=(a,n)=>{C.update(a,r(n))},o.promise=(a,n)=>{const s=o({...n.loading,status:"loading",duration:null});a.then(i=>o.update(s,{status:"success",duration:5e3,...q(n.success,i)})).catch(i=>o.update(s,{status:"error",duration:5e3,...q(n.error,i)}))},o.closeAll=C.closeAll,o.close=C.close,o.isActive=C.isActive,o}var[sn,ln]=M({name:"ToastOptionsContext",strict:!1}),cn=e=>{const t=p.useSyncExternalStore(C.subscribe,C.getState,C.getState),{motionVariants:r,component:o=Pe,portalProps:a}=e,s=Object.keys(t).map(i=>{const l=t[i];return d.jsx("div",{role:"region","aria-live":"polite","aria-label":"Notifications",id:`chakra-toast-manager-${i}`,style:lt(i),children:d.jsx(Ue,{initial:!1,children:l.map(c=>d.jsx(o,{motionVariants:r,...c},c.id))})},i)});return d.jsx(G,{...a,children:s})};function kt(){if(console&&console.warn){for(var e=arguments.length,t=new Array(e),r=0;r()=>{if(e.isInitialized)t();else{const r=()=>{setTimeout(()=>{e.off("initialized",r)},0),t()};e.on("initialized",r)}};function le(e,t,r){e.loadNamespaces(t,Oe(e,r))}function ce(e,t,r,o){typeof r=="string"&&(r=[r]),r.forEach(a=>{e.options.ns.indexOf(a)<0&&e.options.ns.push(a)}),e.loadLanguages(t,Oe(e,o))}function wt(e,t){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const o=t.languages[0],a=t.options?t.options.fallbackLng:!1,n=t.languages[t.languages.length-1];if(o.toLowerCase()==="cimode")return!0;const s=(i,l)=>{const c=t.services.backendConnector.state[`${i}|${l}`];return c===-1||c===2};return r.bindI18n&&r.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!s(t.isLanguageChangingTo,e)?!1:!!(t.hasResourceBundle(o,e)||!t.services.backendConnector.backend||t.options.resources&&!t.options.partialBundledLanguages||s(o,e)&&(!a||s(n,e)))}function Pt(e,t){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return!t.languages||!t.languages.length?(X("i18n.languages were undefined or empty",t.languages),!0):t.options.ignoreJSONStructure!==void 0?t.hasLoadedNamespace(e,{lng:r.lng,precheck:(a,n)=>{if(r.bindI18n&&r.bindI18n.indexOf("languageChanging")>-1&&a.services.backendConnector.backend&&a.isLanguageChangingTo&&!n(a.isLanguageChangingTo,e))return!1}}):wt(e,t,r)}const At=p.createContext();class jt{constructor(){this.usedNamespaces={}}addUsedNamespaces(t){t.forEach(r=>{this.usedNamespaces[r]||(this.usedNamespaces[r]=!0)})}getUsedNamespaces(){return Object.keys(this.usedNamespaces)}}const Et=(e,t)=>{const r=p.useRef();return p.useEffect(()=>{r.current=t?r.current:e},[e,t]),r.current};function un(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const{i18n:r}=t,{i18n:o,defaultNS:a}=p.useContext(At)||{},n=r||o||Ze();if(n&&!n.reportNamespaces&&(n.reportNamespaces=new jt),!n){X("You will need to pass in an i18next instance by using initReactI18next");const v=(w,x)=>typeof x=="string"?x:x&&typeof x=="object"&&typeof x.defaultValue=="string"?x.defaultValue:Array.isArray(w)?w[w.length-1]:w,k=[v,{},!1];return k.t=v,k.i18n={},k.ready=!1,k}n.options.react&&n.options.react.wait!==void 0&&X("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");const s={...Ve(),...n.options.react,...t},{useSuspense:i,keyPrefix:l}=s;let c=e||a||n.options&&n.options.defaultNS;c=typeof c=="string"?[c]:c||["translation"],n.reportNamespaces.addUsedNamespaces&&n.reportNamespaces.addUsedNamespaces(c);const u=(n.isInitialized||n.initializedStoreOnce)&&c.every(v=>Pt(v,n,s));function f(){return n.getFixedT(t.lng||null,s.nsMode==="fallback"?c:c[0],l)}const[y,g]=p.useState(f);let h=c.join();t.lng&&(h=`${t.lng}${h}`);const $=Et(h),S=p.useRef(!0);p.useEffect(()=>{const{bindI18n:v,bindI18nStore:k}=s;S.current=!0,!u&&!i&&(t.lng?ce(n,t.lng,c,()=>{S.current&&g(f)}):le(n,c,()=>{S.current&&g(f)})),u&&$&&$!==h&&S.current&&g(f);function w(){S.current&&g(f)}return v&&n&&n.on(v,w),k&&n&&n.store.on(k,w),()=>{S.current=!1,v&&n&&v.split(" ").forEach(x=>n.off(x,w)),k&&n&&k.split(" ").forEach(x=>n.store.off(x,w))}},[n,h]);const H=p.useRef(!0);p.useEffect(()=>{S.current&&!H.current&&g(f),H.current=!1},[n,l]);const N=[y,n,u];if(N.t=y,N.i18n=n,N.ready=u,u||!u&&!i)return N;throw new Promise(v=>{t.lng?ce(n,t.lng,c,()=>v()):le(n,c,()=>v())})}const Nt={dark:["#C1C2C5","#A6A7AB","#909296","#5c5f66","#373A40","#2C2E33","#25262b","#1A1B1E","#141517","#101113"],gray:["#f8f9fa","#f1f3f5","#e9ecef","#dee2e6","#ced4da","#adb5bd","#868e96","#495057","#343a40","#212529"],red:["#fff5f5","#ffe3e3","#ffc9c9","#ffa8a8","#ff8787","#ff6b6b","#fa5252","#f03e3e","#e03131","#c92a2a"],pink:["#fff0f6","#ffdeeb","#fcc2d7","#faa2c1","#f783ac","#f06595","#e64980","#d6336c","#c2255c","#a61e4d"],grape:["#f8f0fc","#f3d9fa","#eebefa","#e599f7","#da77f2","#cc5de8","#be4bdb","#ae3ec9","#9c36b5","#862e9c"],violet:["#f3f0ff","#e5dbff","#d0bfff","#b197fc","#9775fa","#845ef7","#7950f2","#7048e8","#6741d9","#5f3dc4"],indigo:["#edf2ff","#dbe4ff","#bac8ff","#91a7ff","#748ffc","#5c7cfa","#4c6ef5","#4263eb","#3b5bdb","#364fc7"],blue:["#e7f5ff","#d0ebff","#a5d8ff","#74c0fc","#4dabf7","#339af0","#228be6","#1c7ed6","#1971c2","#1864ab"],cyan:["#e3fafc","#c5f6fa","#99e9f2","#66d9e8","#3bc9db","#22b8cf","#15aabf","#1098ad","#0c8599","#0b7285"],teal:["#e6fcf5","#c3fae8","#96f2d7","#63e6be","#38d9a9","#20c997","#12b886","#0ca678","#099268","#087f5b"],green:["#ebfbee","#d3f9d8","#b2f2bb","#8ce99a","#69db7c","#51cf66","#40c057","#37b24d","#2f9e44","#2b8a3e"],lime:["#f4fce3","#e9fac8","#d8f5a2","#c0eb75","#a9e34b","#94d82d","#82c91e","#74b816","#66a80f","#5c940d"],yellow:["#fff9db","#fff3bf","#ffec99","#ffe066","#ffd43b","#fcc419","#fab005","#f59f00","#f08c00","#e67700"],orange:["#fff4e6","#ffe8cc","#ffd8a8","#ffc078","#ffa94d","#ff922b","#fd7e14","#f76707","#e8590c","#d9480f"]};function $t(e){return()=>({fontFamily:e.fontFamily||"sans-serif"})}var Tt=Object.defineProperty,ue=Object.getOwnPropertySymbols,It=Object.prototype.hasOwnProperty,Ot=Object.prototype.propertyIsEnumerable,de=(e,t,r)=>t in e?Tt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,fe=(e,t)=>{for(var r in t||(t={}))It.call(t,r)&&de(e,r,t[r]);if(ue)for(var r of ue(t))Ot.call(t,r)&&de(e,r,t[r]);return e};function zt(e){return t=>({WebkitTapHighlightColor:"transparent",[t||"&:focus"]:fe({},e.focusRing==="always"||e.focusRing==="auto"?e.focusRingStyles.styles(e):e.focusRingStyles.resetStyles(e)),[t?t.replace(":focus",":focus:not(:focus-visible)"):"&:focus:not(:focus-visible)"]:fe({},e.focusRing==="auto"||e.focusRing==="never"?e.focusRingStyles.resetStyles(e):null)})}function F(e){return t=>typeof e.primaryShade=="number"?e.primaryShade:e.primaryShade[t||e.colorScheme]}function Q(e){const t=F(e);return(r,o,a=!0,n=!0)=>{if(typeof r=="string"&&r.includes(".")){const[i,l]=r.split("."),c=parseInt(l,10);if(i in e.colors&&c>=0&&c<10)return e.colors[i][typeof o=="number"&&!n?o:c]}const s=typeof o=="number"?o:t();return r in e.colors?e.colors[r][s]:a?e.colors[e.primaryColor][s]:r}}function ze(e){let t="";for(let r=1;r{const a={from:(o==null?void 0:o.from)||e.defaultGradient.from,to:(o==null?void 0:o.to)||e.defaultGradient.to,deg:(o==null?void 0:o.deg)||e.defaultGradient.deg};return`linear-gradient(${a.deg}deg, ${t(a.from,r(),!1)} 0%, ${t(a.to,r(),!1)} 100%)`}}function Me(e){return t=>{if(typeof t=="number")return`${t/16}${e}`;if(typeof t=="string"){const r=t.replace("px","");if(!Number.isNaN(Number(r)))return`${Number(r)/16}${e}`}return t}}const E=Me("rem"),U=Me("em");function Le({size:e,sizes:t,units:r}){return e in t?t[e]:typeof e=="number"?r==="em"?U(e):E(e):e||t.md}function W(e){return typeof e=="number"?e:typeof e=="string"&&e.includes("rem")?Number(e.replace("rem",""))*16:typeof e=="string"&&e.includes("em")?Number(e.replace("em",""))*16:Number(e)}function Lt(e){return t=>`@media (min-width: ${U(W(Le({size:t,sizes:e.breakpoints})))})`}function Ft(e){return t=>`@media (max-width: ${U(W(Le({size:t,sizes:e.breakpoints}))-1)})`}function Ht(e){return/^#?([0-9A-F]{3}){1,2}$/i.test(e)}function Wt(e){let t=e.replace("#","");if(t.length===3){const s=t.split("");t=[s[0],s[0],s[1],s[1],s[2],s[2]].join("")}const r=parseInt(t,16),o=r>>16&255,a=r>>8&255,n=r&255;return{r:o,g:a,b:n,a:1}}function Bt(e){const[t,r,o,a]=e.replace(/[^0-9,.]/g,"").split(",").map(Number);return{r:t,g:r,b:o,a:a||1}}function ee(e){return Ht(e)?Wt(e):e.startsWith("rgb")?Bt(e):{r:0,g:0,b:0,a:1}}function T(e,t){if(typeof e!="string"||t>1||t<0)return"rgba(0, 0, 0, 1)";if(e.startsWith("var(--"))return e;const{r,g:o,b:a}=ee(e);return`rgba(${r}, ${o}, ${a}, ${t})`}function Dt(e=0){return{position:"absolute",top:E(e),right:E(e),left:E(e),bottom:E(e)}}function Gt(e,t){if(typeof e=="string"&&e.startsWith("var(--"))return e;const{r,g:o,b:a,a:n}=ee(e),s=1-t,i=l=>Math.round(l*s);return`rgba(${i(r)}, ${i(o)}, ${i(a)}, ${n})`}function Ut(e,t){if(typeof e=="string"&&e.startsWith("var(--"))return e;const{r,g:o,b:a,a:n}=ee(e),s=i=>Math.round(i+(255-i)*t);return`rgba(${s(r)}, ${s(o)}, ${s(a)}, ${n})`}function Vt(e){return t=>{if(typeof t=="number")return E(t);const r=typeof e.defaultRadius=="number"?e.defaultRadius:e.radius[e.defaultRadius]||e.defaultRadius;return e.radius[t]||t||r}}function Zt(e,t){if(typeof e=="string"&&e.includes(".")){const[r,o]=e.split("."),a=parseInt(o,10);if(r in t.colors&&a>=0&&a<10)return{isSplittedColor:!0,key:r,shade:a}}return{isSplittedColor:!1}}function qt(e){const t=Q(e),r=F(e),o=Re(e);return({variant:a,color:n,gradient:s,primaryFallback:i})=>{const l=Zt(n,e);switch(a){case"light":return{border:"transparent",background:T(t(n,e.colorScheme==="dark"?8:0,i,!1),e.colorScheme==="dark"?.2:1),color:n==="dark"?e.colorScheme==="dark"?e.colors.dark[0]:e.colors.dark[9]:t(n,e.colorScheme==="dark"?2:r("light")),hover:T(t(n,e.colorScheme==="dark"?7:1,i,!1),e.colorScheme==="dark"?.25:.65)};case"subtle":return{border:"transparent",background:"transparent",color:n==="dark"?e.colorScheme==="dark"?e.colors.dark[0]:e.colors.dark[9]:t(n,e.colorScheme==="dark"?2:r("light")),hover:T(t(n,e.colorScheme==="dark"?8:0,i,!1),e.colorScheme==="dark"?.2:1)};case"outline":return{border:t(n,e.colorScheme==="dark"?5:r("light")),background:"transparent",color:t(n,e.colorScheme==="dark"?5:r("light")),hover:e.colorScheme==="dark"?T(t(n,5,i,!1),.05):T(t(n,0,i,!1),.35)};case"default":return{border:e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[4],background:e.colorScheme==="dark"?e.colors.dark[6]:e.white,color:e.colorScheme==="dark"?e.white:e.black,hover:e.colorScheme==="dark"?e.colors.dark[5]:e.colors.gray[0]};case"white":return{border:"transparent",background:e.white,color:t(n,r()),hover:null};case"transparent":return{border:"transparent",color:n==="dark"?e.colorScheme==="dark"?e.colors.dark[0]:e.colors.dark[9]:t(n,e.colorScheme==="dark"?2:r("light")),background:"transparent",hover:null};case"gradient":return{background:o(s),color:e.white,border:"transparent",hover:null};default:{const c=r(),u=l.isSplittedColor?l.shade:c,f=l.isSplittedColor?l.key:n;return{border:"transparent",background:t(f,u,i),color:e.white,hover:t(f,u===9?8:u+1)}}}}}function Xt(e){return t=>{const r=F(e)(t);return e.colors[e.primaryColor][r]}}function Jt(e){return{"@media (hover: hover)":{"&:hover":e},"@media (hover: none)":{"&:active":e}}}function Kt(e){return()=>({userSelect:"none",color:e.colorScheme==="dark"?e.colors.dark[3]:e.colors.gray[5]})}function Yt(e){return()=>e.colorScheme==="dark"?e.colors.dark[2]:e.colors.gray[6]}const b={fontStyles:$t,themeColor:Q,focusStyles:zt,linearGradient:Rt,radialGradient:Mt,smallerThan:Ft,largerThan:Lt,rgba:T,cover:Dt,darken:Gt,lighten:Ut,radius:Vt,variant:qt,primaryShade:F,hover:Jt,gradient:Re,primaryColor:Xt,placeholderStyles:Kt,dimmed:Yt};var Qt=Object.defineProperty,er=Object.defineProperties,tr=Object.getOwnPropertyDescriptors,pe=Object.getOwnPropertySymbols,rr=Object.prototype.hasOwnProperty,nr=Object.prototype.propertyIsEnumerable,me=(e,t,r)=>t in e?Qt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,or=(e,t)=>{for(var r in t||(t={}))rr.call(t,r)&&me(e,r,t[r]);if(pe)for(var r of pe(t))nr.call(t,r)&&me(e,r,t[r]);return e},ar=(e,t)=>er(e,tr(t));function Fe(e){return ar(or({},e),{fn:{fontStyles:b.fontStyles(e),themeColor:b.themeColor(e),focusStyles:b.focusStyles(e),largerThan:b.largerThan(e),smallerThan:b.smallerThan(e),radialGradient:b.radialGradient,linearGradient:b.linearGradient,gradient:b.gradient(e),rgba:b.rgba,cover:b.cover,lighten:b.lighten,darken:b.darken,primaryShade:b.primaryShade(e),radius:b.radius(e),variant:b.variant(e),hover:b.hover,primaryColor:b.primaryColor(e),placeholderStyles:b.placeholderStyles(e),dimmed:b.dimmed(e)}})}const sr={dir:"ltr",primaryShade:{light:6,dark:8},focusRing:"auto",loader:"oval",colorScheme:"light",white:"#fff",black:"#000",defaultRadius:"sm",transitionTimingFunction:"ease",colors:Nt,lineHeight:1.55,fontFamily:"-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji",fontFamilyMonospace:"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace",primaryColor:"blue",respectReducedMotion:!0,cursorType:"default",defaultGradient:{from:"indigo",to:"cyan",deg:45},shadows:{xs:"0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.05), 0 0.0625rem 0.125rem rgba(0, 0, 0, 0.1)",sm:"0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 0.625rem 0.9375rem -0.3125rem, rgba(0, 0, 0, 0.04) 0 0.4375rem 0.4375rem -0.3125rem",md:"0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 1.25rem 1.5625rem -0.3125rem, rgba(0, 0, 0, 0.04) 0 0.625rem 0.625rem -0.3125rem",lg:"0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 1.75rem 1.4375rem -0.4375rem, rgba(0, 0, 0, 0.04) 0 0.75rem 0.75rem -0.4375rem",xl:"0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 2.25rem 1.75rem -0.4375rem, rgba(0, 0, 0, 0.04) 0 1.0625rem 1.0625rem -0.4375rem"},fontSizes:{xs:"0.75rem",sm:"0.875rem",md:"1rem",lg:"1.125rem",xl:"1.25rem"},radius:{xs:"0.125rem",sm:"0.25rem",md:"0.5rem",lg:"1rem",xl:"2rem"},spacing:{xs:"0.625rem",sm:"0.75rem",md:"1rem",lg:"1.25rem",xl:"1.5rem"},breakpoints:{xs:"36em",sm:"48em",md:"62em",lg:"75em",xl:"88em"},headings:{fontFamily:"-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji",fontWeight:700,sizes:{h1:{fontSize:"2.125rem",lineHeight:1.3,fontWeight:void 0},h2:{fontSize:"1.625rem",lineHeight:1.35,fontWeight:void 0},h3:{fontSize:"1.375rem",lineHeight:1.4,fontWeight:void 0},h4:{fontSize:"1.125rem",lineHeight:1.45,fontWeight:void 0},h5:{fontSize:"1rem",lineHeight:1.5,fontWeight:void 0},h6:{fontSize:"0.875rem",lineHeight:1.5,fontWeight:void 0}}},other:{},components:{},activeStyles:{transform:"translateY(0.0625rem)"},datesLocale:"en",globalStyles:void 0,focusRingStyles:{styles:e=>({outlineOffset:"0.125rem",outline:`0.125rem solid ${e.colors[e.primaryColor][e.colorScheme==="dark"?7:5]}`}),resetStyles:()=>({outline:"none"}),inputStyles:e=>({outline:"none",borderColor:e.colors[e.primaryColor][typeof e.primaryShade=="object"?e.primaryShade[e.colorScheme]:e.primaryShade]})}},te=Fe(sr);var ir=Object.defineProperty,lr=Object.defineProperties,cr=Object.getOwnPropertyDescriptors,ge=Object.getOwnPropertySymbols,ur=Object.prototype.hasOwnProperty,dr=Object.prototype.propertyIsEnumerable,be=(e,t,r)=>t in e?ir(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,fr=(e,t)=>{for(var r in t||(t={}))ur.call(t,r)&&be(e,r,t[r]);if(ge)for(var r of ge(t))dr.call(t,r)&&be(e,r,t[r]);return e},pr=(e,t)=>lr(e,cr(t));function mr({theme:e}){return A.createElement(D,{styles:{"*, *::before, *::after":{boxSizing:"border-box"},html:{colorScheme:e.colorScheme==="dark"?"dark":"light"},body:pr(fr({},e.fn.fontStyles()),{backgroundColor:e.colorScheme==="dark"?e.colors.dark[7]:e.white,color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,lineHeight:e.lineHeight,fontSize:e.fontSizes.md,WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"})}})}function I(e,t,r,o=E){Object.keys(t).forEach(a=>{e[`--mantine-${r}-${a}`]=o(t[a])})}function gr({theme:e}){const t={"--mantine-color-white":e.white,"--mantine-color-black":e.black,"--mantine-transition-timing-function":e.transitionTimingFunction,"--mantine-line-height":`${e.lineHeight}`,"--mantine-font-family":e.fontFamily,"--mantine-font-family-monospace":e.fontFamilyMonospace,"--mantine-font-family-headings":e.headings.fontFamily,"--mantine-heading-font-weight":`${e.headings.fontWeight}`};I(t,e.shadows,"shadow"),I(t,e.fontSizes,"font-size"),I(t,e.radius,"radius"),I(t,e.spacing,"spacing"),I(t,e.breakpoints,"breakpoints",U),Object.keys(e.colors).forEach(o=>{e.colors[o].forEach((a,n)=>{t[`--mantine-color-${o}-${n}`]=a})});const r=e.headings.sizes;return Object.keys(r).forEach(o=>{t[`--mantine-${o}-font-size`]=r[o].fontSize,t[`--mantine-${o}-line-height`]=`${r[o].lineHeight}`}),A.createElement(D,{styles:{":root":t}})}var br=Object.defineProperty,yr=Object.defineProperties,vr=Object.getOwnPropertyDescriptors,ye=Object.getOwnPropertySymbols,hr=Object.prototype.hasOwnProperty,Sr=Object.prototype.propertyIsEnumerable,ve=(e,t,r)=>t in e?br(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,_=(e,t)=>{for(var r in t||(t={}))hr.call(t,r)&&ve(e,r,t[r]);if(ye)for(var r of ye(t))Sr.call(t,r)&&ve(e,r,t[r]);return e},V=(e,t)=>yr(e,vr(t));function xr(e,t){var r;if(!t)return e;const o=Object.keys(e).reduce((a,n)=>{if(n==="headings"&&t.headings){const s=t.headings.sizes?Object.keys(e.headings.sizes).reduce((i,l)=>(i[l]=_(_({},e.headings.sizes[l]),t.headings.sizes[l]),i),{}):e.headings.sizes;return V(_({},a),{headings:V(_(_({},e.headings),t.headings),{sizes:s})})}if(n==="breakpoints"&&t.breakpoints){const s=_(_({},e.breakpoints),t.breakpoints);return V(_({},a),{breakpoints:Object.fromEntries(Object.entries(s).sort((i,l)=>W(i[1])-W(l[1])))})}return a[n]=typeof t[n]=="object"?_(_({},e[n]),t[n]):typeof t[n]=="number"||typeof t[n]=="boolean"||typeof t[n]=="function"?t[n]:t[n]||e[n],a},{});if(t!=null&&t.fontFamily&&!((r=t==null?void 0:t.headings)!=null&&r.fontFamily)&&(o.headings.fontFamily=t.fontFamily),!(o.primaryColor in o.colors))throw new Error("MantineProvider: Invalid theme.primaryColor, it accepts only key of theme.colors, learn more – https://mantine.dev/theming/colors/#primary-color");return o}function _r(e,t){return Fe(xr(e,t))}function Cr(e){return Object.keys(e).reduce((t,r)=>(e[r]!==void 0&&(t[r]=e[r]),t),{})}const kr={html:{fontFamily:"sans-serif",lineHeight:"1.15",textSizeAdjust:"100%"},body:{margin:0},"article, aside, footer, header, nav, section, figcaption, figure, main":{display:"block"},h1:{fontSize:"2em"},hr:{boxSizing:"content-box",height:0,overflow:"visible"},pre:{fontFamily:"monospace, monospace",fontSize:"1em"},a:{background:"transparent",textDecorationSkip:"objects"},"a:active, a:hover":{outlineWidth:0},"abbr[title]":{borderBottom:"none",textDecoration:"underline"},"b, strong":{fontWeight:"bolder"},"code, kbp, samp":{fontFamily:"monospace, monospace",fontSize:"1em"},dfn:{fontStyle:"italic"},mark:{backgroundColor:"#ff0",color:"#000"},small:{fontSize:"80%"},"sub, sup":{fontSize:"75%",lineHeight:0,position:"relative",verticalAlign:"baseline"},sup:{top:"-0.5em"},sub:{bottom:"-0.25em"},"audio, video":{display:"inline-block"},"audio:not([controls])":{display:"none",height:0},img:{borderStyle:"none",verticalAlign:"middle"},"svg:not(:root)":{overflow:"hidden"},"button, input, optgroup, select, textarea":{fontFamily:"sans-serif",fontSize:"100%",lineHeight:"1.15",margin:0},"button, input":{overflow:"visible"},"button, select":{textTransform:"none"},"button, [type=reset], [type=submit]":{WebkitAppearance:"button"},"button::-moz-focus-inner, [type=button]::-moz-focus-inner, [type=reset]::-moz-focus-inner, [type=submit]::-moz-focus-inner":{borderStyle:"none",padding:0},"button:-moz-focusring, [type=button]:-moz-focusring, [type=reset]:-moz-focusring, [type=submit]:-moz-focusring":{outline:`${E(1)} dotted ButtonText`},legend:{boxSizing:"border-box",color:"inherit",display:"table",maxWidth:"100%",padding:0,whiteSpace:"normal"},progress:{display:"inline-block",verticalAlign:"baseline"},textarea:{overflow:"auto"},"[type=checkbox], [type=radio]":{boxSizing:"border-box",padding:0},"[type=number]::-webkit-inner-spin-button, [type=number]::-webkit-outer-spin-button":{height:"auto"},"[type=search]":{appearance:"none"},"[type=search]::-webkit-search-cancel-button, [type=search]::-webkit-search-decoration":{appearance:"none"},"::-webkit-file-upload-button":{appearance:"button",font:"inherit"},"details, menu":{display:"block"},summary:{display:"list-item"},canvas:{display:"inline-block"},template:{display:"none"}};function wr(){return A.createElement(D,{styles:kr})}var Pr=Object.defineProperty,he=Object.getOwnPropertySymbols,Ar=Object.prototype.hasOwnProperty,jr=Object.prototype.propertyIsEnumerable,Se=(e,t,r)=>t in e?Pr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,O=(e,t)=>{for(var r in t||(t={}))Ar.call(t,r)&&Se(e,r,t[r]);if(he)for(var r of he(t))jr.call(t,r)&&Se(e,r,t[r]);return e};const B=p.createContext({theme:te});function He(){var e;return((e=p.useContext(B))==null?void 0:e.theme)||te}function dn(e){const t=He(),r=o=>{var a,n,s,i;return{styles:((a=t.components[o])==null?void 0:a.styles)||{},classNames:((n=t.components[o])==null?void 0:n.classNames)||{},variants:(s=t.components[o])==null?void 0:s.variants,sizes:(i=t.components[o])==null?void 0:i.sizes}};return Array.isArray(e)?e.map(r):[r(e)]}function fn(){var e;return(e=p.useContext(B))==null?void 0:e.emotionCache}function pn(e,t,r){var o;const a=He(),n=(o=a.components[e])==null?void 0:o.defaultProps,s=typeof n=="function"?n(a):n;return O(O(O({},t),s),Cr(r))}function Er({theme:e,emotionCache:t,withNormalizeCSS:r=!1,withGlobalStyles:o=!1,withCSSVariables:a=!1,inherit:n=!1,children:s}){const i=p.useContext(B),l=_r(te,n?O(O({},i.theme),e):e);return A.createElement(qe,{theme:l},A.createElement(B.Provider,{value:{theme:l,emotionCache:t}},r&&A.createElement(wr,null),o&&A.createElement(mr,{theme:l}),a&&A.createElement(gr,{theme:l}),typeof l.globalStyles=="function"&&A.createElement(D,{styles:l.globalStyles(l)}),s))}Er.displayName="@mantine/core/MantineProvider";const{definePartsStyle:Nr,defineMultiStyleConfig:$r}=Xe(at.keys),Tr=Nr(e=>({button:{fontWeight:500,bg:P("base.300","base.500")(e),color:P("base.900","base.100")(e),_hover:{bg:P("base.400","base.600")(e),color:P("base.900","base.50")(e),fontWeight:600}},list:{zIndex:9999,color:P("base.900","base.150")(e),bg:P("base.200","base.800")(e),shadow:"dark-lg",border:"none"},item:{fontSize:"sm",bg:P("base.200","base.800")(e),_hover:{bg:P("base.300","base.700")(e),svg:{opacity:1}},_focus:{bg:P("base.400","base.600")(e)},svg:{opacity:.7,fontSize:14}}})),mn=$r({variants:{invokeAI:Tr},defaultProps:{variant:"invokeAI"}}),gn={variants:{enter:{visibility:"visible",opacity:1,scale:1,transition:{duration:.07,ease:[.4,0,.2,1]}},exit:{transitionEnd:{visibility:"hidden"},opacity:0,scale:.8,transition:{duration:.07,easings:"easeOut"}}}};export{on as A,Yr as B,Te as C,Gr as D,at as E,Ur as F,Vr as G,Zr as H,L as I,Fr as J,Hr as K,Wr as L,Br as M,Mr as N,nn as O,G as P,Or as Q,zr as R,Rr as S,Qe as T,sn as U,cn as V,mn as W,Er as X,M as a,ct as b,an as c,ne as d,un as e,fn as f,He as g,dn as h,Cr as i,W as j,Le as k,pn as l,gn as m,P as n,tn as o,rn as p,Dr as q,E as r,Qr as s,en as t,ln as u,qr as v,Lr as w,Xr as x,Jr as y,Kr as z}; diff --git a/invokeai/frontend/web/dist/index.html b/invokeai/frontend/web/dist/index.html index d4024bc0c8..f365c2b718 100644 --- a/invokeai/frontend/web/dist/index.html +++ b/invokeai/frontend/web/dist/index.html @@ -12,7 +12,7 @@ margin: 0; } - + diff --git a/invokeai/frontend/web/dist/locales/en.json b/invokeai/frontend/web/dist/locales/en.json index cf84e4d773..fbae5b4a30 100644 --- a/invokeai/frontend/web/dist/locales/en.json +++ b/invokeai/frontend/web/dist/locales/en.json @@ -124,7 +124,8 @@ "deleteImageBin": "Deleted images will be sent to your operating system's Bin.", "deleteImagePermanent": "Deleted images cannot be restored.", "images": "Images", - "assets": "Assets" + "assets": "Assets", + "autoAssignBoardOnClick": "Auto-Assign Board on Click" }, "hotkeys": { "keyboardShortcuts": "Keyboard Shortcuts", @@ -502,6 +503,9 @@ "hiresStrength": "High Res Strength", "imageFit": "Fit Initial Image To Output Size", "codeformerFidelity": "Fidelity", + "maskAdjustmentsHeader": "Mask Adjustments", + "maskBlur": "Mask Blur", + "maskBlurMethod": "Mask Blur Method", "seamSize": "Seam Size", "seamBlur": "Seam Blur", "seamStrength": "Seam Strength", diff --git a/invokeai/frontend/web/package.json b/invokeai/frontend/web/package.json index a76c2ecc02..6c9db74bbc 100644 --- a/invokeai/frontend/web/package.json +++ b/invokeai/frontend/web/package.json @@ -23,7 +23,7 @@ "dev": "concurrently \"vite dev\" \"yarn run theme:watch\"", "dev:host": "concurrently \"vite dev --host\" \"yarn run theme:watch\"", "build": "yarn run lint && vite build", - "typegen": "npx ts-node scripts/typegen.ts", + "typegen": "node scripts/typegen.js", "preview": "vite preview", "lint:madge": "madge --circular src/main.tsx", "lint:eslint": "eslint --max-warnings=0 .", @@ -61,6 +61,7 @@ "@dagrejs/graphlib": "^2.1.13", "@dnd-kit/core": "^6.0.8", "@dnd-kit/modifiers": "^6.0.1", + "@dnd-kit/utilities": "^3.2.1", "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", "@floating-ui/react-dom": "^2.0.1", diff --git a/invokeai/frontend/web/public/locales/en.json b/invokeai/frontend/web/public/locales/en.json index cf84e4d773..f41da82e07 100644 --- a/invokeai/frontend/web/public/locales/en.json +++ b/invokeai/frontend/web/public/locales/en.json @@ -124,7 +124,8 @@ "deleteImageBin": "Deleted images will be sent to your operating system's Bin.", "deleteImagePermanent": "Deleted images cannot be restored.", "images": "Images", - "assets": "Assets" + "assets": "Assets", + "autoAssignBoardOnClick": "Auto-Assign Board on Click" }, "hotkeys": { "keyboardShortcuts": "Keyboard Shortcuts", @@ -502,10 +503,17 @@ "hiresStrength": "High Res Strength", "imageFit": "Fit Initial Image To Output Size", "codeformerFidelity": "Fidelity", + "maskAdjustmentsHeader": "Mask Adjustments", + "maskBlur": "Mask Blur", + "maskBlurMethod": "Mask Blur Method", + "seamPaintingHeader": "Seam Painting", "seamSize": "Seam Size", "seamBlur": "Seam Blur", - "seamStrength": "Seam Strength", "seamSteps": "Seam Steps", + "seamStrength": "Seam Strength", + "seamThreshold": "Seam Threshold", + "seamLowThreshold": "Low", + "seamHighThreshold": "High", "scaleBeforeProcessing": "Scale Before Processing", "scaledWidth": "Scaled W", "scaledHeight": "Scaled H", diff --git a/invokeai/frontend/web/scripts/colors.js b/invokeai/frontend/web/scripts/colors.js new file mode 100644 index 0000000000..3fc8f8d751 --- /dev/null +++ b/invokeai/frontend/web/scripts/colors.js @@ -0,0 +1,34 @@ +export const COLORS = { + reset: '\x1b[0m', + bright: '\x1b[1m', + dim: '\x1b[2m', + underscore: '\x1b[4m', + blink: '\x1b[5m', + reverse: '\x1b[7m', + hidden: '\x1b[8m', + + fg: { + black: '\x1b[30m', + red: '\x1b[31m', + green: '\x1b[32m', + yellow: '\x1b[33m', + blue: '\x1b[34m', + magenta: '\x1b[35m', + cyan: '\x1b[36m', + white: '\x1b[37m', + gray: '\x1b[90m', + crimson: '\x1b[38m', + }, + bg: { + black: '\x1b[40m', + red: '\x1b[41m', + green: '\x1b[42m', + yellow: '\x1b[43m', + blue: '\x1b[44m', + magenta: '\x1b[45m', + cyan: '\x1b[46m', + white: '\x1b[47m', + gray: '\x1b[100m', + crimson: '\x1b[48m', + }, +}; diff --git a/invokeai/frontend/web/scripts/typegen.js b/invokeai/frontend/web/scripts/typegen.js new file mode 100644 index 0000000000..d105917e66 --- /dev/null +++ b/invokeai/frontend/web/scripts/typegen.js @@ -0,0 +1,83 @@ +import fs from 'node:fs'; +import openapiTS from 'openapi-typescript'; +import { COLORS } from './colors.js'; + +const OPENAPI_URL = 'http://127.0.0.1:9090/openapi.json'; +const OUTPUT_FILE = 'src/services/api/schema.d.ts'; + +async function main() { + process.stdout.write( + `Generating types "${OPENAPI_URL}" --> "${OUTPUT_FILE}"...\n\n` + ); + const types = await openapiTS(OPENAPI_URL, { + exportType: true, + transform: (schemaObject, metadata) => { + if ('format' in schemaObject && schemaObject.format === 'binary') { + return schemaObject.nullable ? 'Blob | null' : 'Blob'; + } + + /** + * Because invocations may have required fields that accept connection input, the generated + * types may be incorrect. + * + * For example, the ImageResizeInvocation has a required `image` field, but because it accepts + * connection input, it should be optional on instantiation of the field. + * + * To handle this, the schema exposes an `input` property that can be used to determine if the + * field accepts connection input. If it does, we can make the field optional. + */ + + // Check if we are generating types for an invocation + const isInvocationPath = metadata.path.match( + /^#\/components\/schemas\/\w*Invocation$/ + ); + + const hasInvocationProperties = + schemaObject.properties && + ['id', 'is_intermediate', 'type'].every( + (prop) => prop in schemaObject.properties + ); + + if (isInvocationPath && hasInvocationProperties) { + // We only want to make fields optional if they are required + if (!Array.isArray(schemaObject?.required)) { + schemaObject.required = ['id', 'type']; + return; + } + + schemaObject.required.forEach((prop) => { + const acceptsConnection = ['any', 'connection'].includes( + schemaObject.properties?.[prop]?.['input'] + ); + + if (acceptsConnection) { + // remove this prop from the required array + const invocationName = metadata.path.split('/').pop(); + console.log( + `Making connectable field optional: ${COLORS.fg.green}${invocationName}.${COLORS.fg.cyan}${prop}${COLORS.reset}` + ); + schemaObject.required = schemaObject.required.filter( + (r) => r !== prop + ); + } + }); + + schemaObject.required = [ + ...new Set(schemaObject.required.concat(['id', 'type'])), + ]; + + return; + } + // if ( + // 'input' in schemaObject && + // (schemaObject.input === 'any' || schemaObject.input === 'connection') + // ) { + // schemaObject.required = false; + // } + }, + }); + fs.writeFileSync(OUTPUT_FILE, types); + process.stdout.write(`\nOK!\r\n`); +} + +main(); diff --git a/invokeai/frontend/web/scripts/typegen.ts b/invokeai/frontend/web/scripts/typegen.ts deleted file mode 100644 index 015ae918ab..0000000000 --- a/invokeai/frontend/web/scripts/typegen.ts +++ /dev/null @@ -1,23 +0,0 @@ -import fs from 'node:fs'; -import openapiTS from 'openapi-typescript'; - -const OPENAPI_URL = 'http://localhost:9090/openapi.json'; -const OUTPUT_FILE = 'src/services/api/schema.d.ts'; - -async function main() { - process.stdout.write( - `Generating types "${OPENAPI_URL}" --> "${OUTPUT_FILE}"...` - ); - const types = await openapiTS(OPENAPI_URL, { - exportType: true, - transform: (schemaObject) => { - if ('format' in schemaObject && schemaObject.format === 'binary') { - return schemaObject.nullable ? 'Blob | null' : 'Blob'; - } - }, - }); - fs.writeFileSync(OUTPUT_FILE, types); - process.stdout.write(` OK!\r\n`); -} - -main(); diff --git a/invokeai/frontend/web/src/app/components/App.tsx b/invokeai/frontend/web/src/app/components/App.tsx index 963d285f72..fa45ae93cd 100644 --- a/invokeai/frontend/web/src/app/components/App.tsx +++ b/invokeai/frontend/web/src/app/components/App.tsx @@ -4,8 +4,9 @@ import { appStarted } from 'app/store/middleware/listenerMiddleware/listeners/ap import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; import { PartialAppConfig } from 'app/types/invokeai'; import ImageUploader from 'common/components/ImageUploader'; +import ChangeBoardModal from 'features/changeBoardModal/components/ChangeBoardModal'; +import DeleteImageModal from 'features/deleteImageModal/components/DeleteImageModal'; import GalleryDrawer from 'features/gallery/components/GalleryPanel'; -import DeleteImageModal from 'features/imageDeletion/components/DeleteImageModal'; import SiteHeader from 'features/system/components/SiteHeader'; import { configChanged } from 'features/system/store/configSlice'; import { languageSelector } from 'features/system/store/systemSelectors'; @@ -16,7 +17,6 @@ import ParametersDrawer from 'features/ui/components/ParametersDrawer'; import i18n from 'i18n'; import { size } from 'lodash-es'; import { ReactNode, memo, useEffect } from 'react'; -import UpdateImageBoardModal from '../../features/gallery/components/Boards/UpdateImageBoardModal'; import GlobalHotkeys from './GlobalHotkeys'; import Toaster from './Toaster'; @@ -84,7 +84,7 @@ const App = ({ config = DEFAULT_CONFIG, headerComponent }: Props) => { - + diff --git a/invokeai/frontend/web/src/app/components/GlobalHotkeys.ts b/invokeai/frontend/web/src/app/components/GlobalHotkeys.ts index 9827e7f2b3..bbe77dc698 100644 --- a/invokeai/frontend/web/src/app/components/GlobalHotkeys.ts +++ b/invokeai/frontend/web/src/app/components/GlobalHotkeys.ts @@ -1,8 +1,12 @@ import { createSelector } from '@reduxjs/toolkit'; -import { RootState } from 'app/store/store'; +import { stateSelector } from 'app/store/store'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; import { requestCanvasRescale } from 'features/canvas/store/thunks/requestCanvasScale'; -import { shiftKeyPressed } from 'features/ui/store/hotkeysSlice'; +import { + ctrlKeyPressed, + metaKeyPressed, + shiftKeyPressed, +} from 'features/ui/store/hotkeysSlice'; import { activeTabNameSelector } from 'features/ui/store/uiSelectors'; import { setActiveTab, @@ -16,11 +20,11 @@ import React, { memo } from 'react'; import { isHotkeyPressed, useHotkeys } from 'react-hotkeys-hook'; const globalHotkeysSelector = createSelector( - [(state: RootState) => state.hotkeys, (state: RootState) => state.ui], - (hotkeys, ui) => { - const { shift } = hotkeys; + [stateSelector], + ({ hotkeys, ui }) => { + const { shift, ctrl, meta } = hotkeys; const { shouldPinParametersPanel, shouldPinGallery } = ui; - return { shift, shouldPinGallery, shouldPinParametersPanel }; + return { shift, ctrl, meta, shouldPinGallery, shouldPinParametersPanel }; }, { memoizeOptions: { @@ -37,9 +41,8 @@ const globalHotkeysSelector = createSelector( */ const GlobalHotkeys: React.FC = () => { const dispatch = useAppDispatch(); - const { shift, shouldPinParametersPanel, shouldPinGallery } = useAppSelector( - globalHotkeysSelector - ); + const { shift, ctrl, meta, shouldPinParametersPanel, shouldPinGallery } = + useAppSelector(globalHotkeysSelector); const activeTabName = useAppSelector(activeTabNameSelector); useHotkeys( @@ -50,9 +53,19 @@ const GlobalHotkeys: React.FC = () => { } else { shift && dispatch(shiftKeyPressed(false)); } + if (isHotkeyPressed('ctrl')) { + !ctrl && dispatch(ctrlKeyPressed(true)); + } else { + ctrl && dispatch(ctrlKeyPressed(false)); + } + if (isHotkeyPressed('meta')) { + !meta && dispatch(metaKeyPressed(true)); + } else { + meta && dispatch(metaKeyPressed(false)); + } }, { keyup: true, keydown: true }, - [shift] + [shift, ctrl, meta] ); useHotkeys('o', () => { diff --git a/invokeai/frontend/web/src/app/components/InvokeAIUI.tsx b/invokeai/frontend/web/src/app/components/InvokeAIUI.tsx index 7df390bce6..7e2ed7f571 100644 --- a/invokeai/frontend/web/src/app/components/InvokeAIUI.tsx +++ b/invokeai/frontend/web/src/app/components/InvokeAIUI.tsx @@ -1,4 +1,6 @@ +import { Middleware } from '@reduxjs/toolkit'; import { store } from 'app/store/store'; +import { PartialAppConfig } from 'app/types/invokeai'; import React, { lazy, memo, @@ -7,17 +9,12 @@ import React, { useEffect, } from 'react'; import { Provider } from 'react-redux'; - -import { PartialAppConfig } from 'app/types/invokeai'; import { addMiddleware, resetMiddlewares } from 'redux-dynamic-middlewares'; -import Loading from '../../common/components/Loading/Loading'; - -import { Middleware } from '@reduxjs/toolkit'; -import { $authToken, $baseUrl } from 'services/api/client'; +import { $authToken, $baseUrl, $projectId } from 'services/api/client'; import { socketMiddleware } from 'services/events/middleware'; +import Loading from '../../common/components/Loading/Loading'; import '../../i18n'; -import { AddImageToBoardContextProvider } from '../contexts/AddImageToBoardContext'; -import ImageDndContext from './ImageDnd/ImageDndContext'; +import AppDndContext from '../../features/dnd/components/AppDndContext'; const App = lazy(() => import('./App')); const ThemeLocaleProvider = lazy(() => import('./ThemeLocaleProvider')); @@ -37,6 +34,7 @@ const InvokeAIUI = ({ config, headerComponent, middleware, + projectId, }: Props) => { useEffect(() => { // configure API client token @@ -49,6 +47,11 @@ const InvokeAIUI = ({ $baseUrl.set(apiUrl); } + // configure API client project header + if (projectId) { + $projectId.set(projectId); + } + // reset dynamically added middlewares resetMiddlewares(); @@ -68,19 +71,18 @@ const InvokeAIUI = ({ // Reset the API client token and base url on unmount $baseUrl.set(undefined); $authToken.set(undefined); + $projectId.set(undefined); }; - }, [apiUrl, token, middleware]); + }, [apiUrl, token, middleware, projectId]); return ( }> - - - - - + + + diff --git a/invokeai/frontend/web/src/app/contexts/AddImageToBoardContext.tsx b/invokeai/frontend/web/src/app/contexts/AddImageToBoardContext.tsx deleted file mode 100644 index d5b3b746f1..0000000000 --- a/invokeai/frontend/web/src/app/contexts/AddImageToBoardContext.tsx +++ /dev/null @@ -1,91 +0,0 @@ -import { useDisclosure } from '@chakra-ui/react'; -import { PropsWithChildren, createContext, useCallback, useState } from 'react'; -import { ImageDTO } from 'services/api/types'; -import { imagesApi } from 'services/api/endpoints/images'; -import { useAppDispatch } from '../store/storeHooks'; - -export type ImageUsage = { - isInitialImage: boolean; - isCanvasImage: boolean; - isNodesImage: boolean; - isControlNetImage: boolean; -}; - -type AddImageToBoardContextValue = { - /** - * Whether the move image dialog is open. - */ - isOpen: boolean; - /** - * Closes the move image dialog. - */ - onClose: () => void; - /** - * The image pending movement - */ - image?: ImageDTO; - onClickAddToBoard: (image: ImageDTO) => void; - handleAddToBoard: (boardId: string) => void; -}; - -export const AddImageToBoardContext = - createContext({ - isOpen: false, - onClose: () => undefined, - onClickAddToBoard: () => undefined, - handleAddToBoard: () => undefined, - }); - -type Props = PropsWithChildren; - -export const AddImageToBoardContextProvider = (props: Props) => { - const [imageToMove, setImageToMove] = useState(); - const { isOpen, onOpen, onClose } = useDisclosure(); - const dispatch = useAppDispatch(); - - // Clean up after deleting or dismissing the modal - const closeAndClearImageToDelete = useCallback(() => { - setImageToMove(undefined); - onClose(); - }, [onClose]); - - const onClickAddToBoard = useCallback( - (image?: ImageDTO) => { - if (!image) { - return; - } - setImageToMove(image); - onOpen(); - }, - [setImageToMove, onOpen] - ); - - const handleAddToBoard = useCallback( - (boardId: string) => { - if (imageToMove) { - dispatch( - imagesApi.endpoints.addImageToBoard.initiate({ - imageDTO: imageToMove, - board_id: boardId, - }) - ); - closeAndClearImageToDelete(); - } - }, - [dispatch, closeAndClearImageToDelete, imageToMove] - ); - - return ( - - {props.children} - - ); -}; diff --git a/invokeai/frontend/web/src/app/contexts/ImageUploaderTriggerContext.ts b/invokeai/frontend/web/src/app/contexts/ImageUploaderTriggerContext.ts deleted file mode 100644 index 804e124625..0000000000 --- a/invokeai/frontend/web/src/app/contexts/ImageUploaderTriggerContext.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { createContext } from 'react'; - -type VoidFunc = () => void; - -type ImageUploaderTriggerContextType = VoidFunc | null; - -export const ImageUploaderTriggerContext = - createContext(null); diff --git a/invokeai/frontend/web/src/app/logging/logger.ts b/invokeai/frontend/web/src/app/logging/logger.ts index ef27c98d1f..7797b8dc92 100644 --- a/invokeai/frontend/web/src/app/logging/logger.ts +++ b/invokeai/frontend/web/src/app/logging/logger.ts @@ -19,7 +19,8 @@ type LoggerNamespace = | 'nodes' | 'system' | 'socketio' - | 'session'; + | 'session' + | 'dnd'; export const logger = (namespace: LoggerNamespace) => $logger.get().child({ namespace }); diff --git a/invokeai/frontend/web/src/app/store/enhancers/reduxRemember/serialize.ts b/invokeai/frontend/web/src/app/store/enhancers/reduxRemember/serialize.ts index 3407b3f7de..1b21770aa0 100644 --- a/invokeai/frontend/web/src/app/store/enhancers/reduxRemember/serialize.ts +++ b/invokeai/frontend/web/src/app/store/enhancers/reduxRemember/serialize.ts @@ -23,6 +23,6 @@ const serializationDenylist: { }; export const serialize: SerializeFunction = (data, key) => { - const result = omit(data, serializationDenylist[key]); + const result = omit(data, serializationDenylist[key] ?? []); return JSON.stringify(result); }; diff --git a/invokeai/frontend/web/src/app/store/middleware/devtools/actionsDenylist.ts b/invokeai/frontend/web/src/app/store/middleware/devtools/actionsDenylist.ts index 6d41d488c8..a596fce931 100644 --- a/invokeai/frontend/web/src/app/store/middleware/devtools/actionsDenylist.ts +++ b/invokeai/frontend/web/src/app/store/middleware/devtools/actionsDenylist.ts @@ -15,7 +15,7 @@ export const actionsDenylist = [ 'socket/socketGeneratorProgress', 'socket/appSocketGeneratorProgress', // every time user presses shift - 'hotkeys/shiftKeyPressed', + // 'hotkeys/shiftKeyPressed', // this happens after every state change '@@REMEMBER_PERSISTED', ]; diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/index.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/index.ts index f06c324bc6..abb17d1eec 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/index.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/index.ts @@ -15,6 +15,7 @@ import { addDeleteBoardAndImagesFulfilledListener } from './listeners/boardAndIm import { addBoardIdSelectedListener } from './listeners/boardIdSelected'; import { addCanvasCopiedToClipboardListener } from './listeners/canvasCopiedToClipboard'; import { addCanvasDownloadedAsImageListener } from './listeners/canvasDownloadedAsImage'; +import { addCanvasMaskSavedToGalleryListener } from './listeners/canvasMaskSavedToGallery'; import { addCanvasMergedListener } from './listeners/canvasMerged'; import { addCanvasSavedToGalleryListener } from './listeners/canvasSavedToGallery'; import { addControlNetAutoProcessListener } from './listeners/controlNetAutoProcess'; @@ -27,7 +28,8 @@ import { addImageDeletedFulfilledListener, addImageDeletedPendingListener, addImageDeletedRejectedListener, - addRequestedImageDeletionListener, + addRequestedMultipleImageDeletionListener, + addRequestedSingleImageDeletionListener, } from './listeners/imageDeleted'; import { addImageDroppedListener } from './listeners/imageDropped'; import { @@ -78,6 +80,8 @@ import { addUserInvokedCanvasListener } from './listeners/userInvokedCanvas'; import { addUserInvokedImageToImageListener } from './listeners/userInvokedImageToImage'; import { addUserInvokedNodesListener } from './listeners/userInvokedNodes'; import { addUserInvokedTextToImageListener } from './listeners/userInvokedTextToImage'; +import { addImagesStarredListener } from './listeners/imagesStarred'; +import { addImagesUnstarredListener } from './listeners/imagesUnstarred'; export const listenerMiddleware = createListenerMiddleware(); @@ -111,13 +115,18 @@ addImageUploadedRejectedListener(); addInitialImageSelectedListener(); // Image deleted -addRequestedImageDeletionListener(); +addRequestedSingleImageDeletionListener(); +addRequestedMultipleImageDeletionListener(); addImageDeletedPendingListener(); addImageDeletedFulfilledListener(); addImageDeletedRejectedListener(); addDeleteBoardAndImagesFulfilledListener(); addImageToDeleteSelectedListener(); +// Image starred +addImagesStarredListener(); +addImagesUnstarredListener(); + // User Invoked addUserInvokedCanvasListener(); addUserInvokedNodesListener(); @@ -127,6 +136,7 @@ addSessionReadyToInvokeListener(); // Canvas actions addCanvasSavedToGalleryListener(); +addCanvasMaskSavedToGalleryListener(); addCanvasDownloadedAsImageListener(); addCanvasCopiedToClipboardListener(); addCanvasMergedListener(); diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/addFirstListImagesListener.ts.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/addFirstListImagesListener.ts.ts index ee12f39a12..15e7d48708 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/addFirstListImagesListener.ts.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/addFirstListImagesListener.ts.ts @@ -1,12 +1,10 @@ import { createAction } from '@reduxjs/toolkit'; import { imageSelected } from 'features/gallery/store/gallerySlice'; import { IMAGE_CATEGORIES } from 'features/gallery/store/types'; -import { - ImageCache, - getListImagesUrl, - imagesApi, -} from 'services/api/endpoints/images'; +import { imagesApi } from 'services/api/endpoints/images'; import { startAppListening } from '..'; +import { getListImagesUrl, imagesAdapter } from 'services/api/util'; +import { ImageCache } from 'services/api/types'; export const appStarted = createAction('app/appStarted'); @@ -34,7 +32,8 @@ export const addFirstListImagesListener = () => { if (data.ids.length > 0) { // Select the first image - dispatch(imageSelected(data.ids[0] as string)); + const firstImage = imagesAdapter.getSelectors().selectAll(data)[0]; + dispatch(imageSelected(firstImage ?? null)); } }, }); diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/appConfigReceived.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/appConfigReceived.ts index 2d0ece3595..700b4e7626 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/appConfigReceived.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/appConfigReceived.ts @@ -18,7 +18,9 @@ export const addAppConfigReceivedListener = () => { const infillMethod = getState().generation.infillMethod; if (!infill_methods.includes(infillMethod)) { - dispatch(setInfillMethod(infill_methods[0])); + // if there is no infill method, set it to the first one + // if there is no first one... god help us + dispatch(setInfillMethod(infill_methods[0] as string)); } if (!nsfw_methods.includes('nsfw_checker')) { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/boardAndImagesDeleted.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/boardAndImagesDeleted.ts index f0af52ced6..d4a36d64dc 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/boardAndImagesDeleted.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/boardAndImagesDeleted.ts @@ -1,14 +1,14 @@ import { resetCanvas } from 'features/canvas/store/canvasSlice'; import { controlNetReset } from 'features/controlNet/store/controlNetSlice'; -import { getImageUsage } from 'features/imageDeletion/store/imageDeletionSelectors'; +import { getImageUsage } from 'features/deleteImageModal/store/selectors'; import { nodeEditorReset } from 'features/nodes/store/nodesSlice'; import { clearInitialImage } from 'features/parameters/store/generationSlice'; +import { imagesApi } from 'services/api/endpoints/images'; import { startAppListening } from '..'; -import { boardsApi } from '../../../../../services/api/endpoints/boards'; export const addDeleteBoardAndImagesFulfilledListener = () => { startAppListening({ - matcher: boardsApi.endpoints.deleteBoardAndImages.matchFulfilled, + matcher: imagesApi.endpoints.deleteBoardAndImages.matchFulfilled, effect: async (action, { dispatch, getState }) => { const { deleted_images } = action.payload; diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/boardIdSelected.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/boardIdSelected.ts index f9c856d6cb..1b13181911 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/boardIdSelected.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/boardIdSelected.ts @@ -10,6 +10,7 @@ import { } from 'features/gallery/store/types'; import { imagesApi } from 'services/api/endpoints/images'; import { startAppListening } from '..'; +import { imagesSelectors } from 'services/api/util'; export const addBoardIdSelectedListener = () => { startAppListening({ @@ -52,8 +53,9 @@ export const addBoardIdSelectedListener = () => { queryArgs )(getState()); - if (boardImagesData?.ids.length) { - dispatch(imageSelected((boardImagesData.ids[0] as string) ?? null)); + if (boardImagesData) { + const firstImage = imagesSelectors.selectAll(boardImagesData)[0]; + dispatch(imageSelected(firstImage ?? null)); } else { // board has no images - deselect dispatch(imageSelected(null)); diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasMaskSavedToGallery.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasMaskSavedToGallery.ts new file mode 100644 index 0000000000..e701b93352 --- /dev/null +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasMaskSavedToGallery.ts @@ -0,0 +1,60 @@ +import { logger } from 'app/logging/logger'; +import { canvasMaskSavedToGallery } from 'features/canvas/store/actions'; +import { getCanvasData } from 'features/canvas/util/getCanvasData'; +import { addToast } from 'features/system/store/systemSlice'; +import { imagesApi } from 'services/api/endpoints/images'; +import { startAppListening } from '..'; + +export const addCanvasMaskSavedToGalleryListener = () => { + startAppListening({ + actionCreator: canvasMaskSavedToGallery, + effect: async (action, { dispatch, getState }) => { + const log = logger('canvas'); + const state = getState(); + + const canvasBlobsAndImageData = await getCanvasData( + state.canvas.layerState, + state.canvas.boundingBoxCoordinates, + state.canvas.boundingBoxDimensions, + state.canvas.isMaskEnabled, + state.canvas.shouldPreserveMaskedArea + ); + + if (!canvasBlobsAndImageData) { + return; + } + + const { maskBlob } = canvasBlobsAndImageData; + + if (!maskBlob) { + log.error('Problem getting mask layer blob'); + dispatch( + addToast({ + title: 'Problem Saving Mask', + description: 'Unable to export mask', + status: 'error', + }) + ); + return; + } + + const { autoAddBoardId } = state.gallery; + + dispatch( + imagesApi.endpoints.uploadImage.initiate({ + file: new File([maskBlob], 'canvasMaskImage.png', { + type: 'image/png', + }), + image_category: 'mask', + is_intermediate: false, + board_id: autoAddBoardId === 'none' ? undefined : autoAddBoardId, + crop_visible: true, + postUploadAction: { + type: 'TOAST', + toastOptions: { title: 'Mask Saved to Assets' }, + }, + }) + ); + }, + }); +}; diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasSavedToGallery.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasSavedToGallery.ts index 47f7aded27..dbadb72a52 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasSavedToGallery.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasSavedToGallery.ts @@ -26,6 +26,8 @@ export const addCanvasSavedToGalleryListener = () => { return; } + const { autoAddBoardId } = state.gallery; + dispatch( imagesApi.endpoints.uploadImage.initiate({ file: new File([blob], 'savedCanvas.png', { @@ -33,7 +35,7 @@ export const addCanvasSavedToGalleryListener = () => { }), image_category: 'general', is_intermediate: false, - board_id: state.gallery.autoAddBoardId, + board_id: autoAddBoardId === 'none' ? undefined : autoAddBoardId, crop_visible: true, postUploadAction: { type: 'TOAST', diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/controlNetAutoProcess.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/controlNetAutoProcess.ts index 4a47e8d64e..61bcf28833 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/controlNetAutoProcess.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/controlNetAutoProcess.ts @@ -31,15 +31,20 @@ const predicate: AnyListenerPredicate = ( // do not process if the user just disabled auto-config if ( prevState.controlNet.controlNets[action.payload.controlNetId] - .shouldAutoConfig === true + ?.shouldAutoConfig === true ) { return false; } } - const { controlImage, processorType, shouldAutoConfig } = - state.controlNet.controlNets[action.payload.controlNetId]; + const cn = state.controlNet.controlNets[action.payload.controlNetId]; + if (!cn) { + // something is wrong, the controlNet should exist + return false; + } + + const { controlImage, processorType, shouldAutoConfig } = cn; if (controlNetModelChanged.match(action) && !shouldAutoConfig) { // do not process if the action is a model change but the processor settings are dirty return false; diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/controlNetImageProcessed.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/controlNetImageProcessed.ts index 313b2a02d8..fa915ef21b 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/controlNetImageProcessed.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/controlNetImageProcessed.ts @@ -17,7 +17,7 @@ export const addControlNetImageProcessedListener = () => { const { controlNetId } = action.payload; const controlNet = getState().controlNet.controlNets[controlNetId]; - if (!controlNet.controlImage) { + if (!controlNet?.controlImage) { log.error('Unable to process ControlNet image'); return; } diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageDeleted.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageDeleted.ts index 428ce53219..b419e98782 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageDeleted.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageDeleted.ts @@ -1,57 +1,72 @@ import { logger } from 'app/logging/logger'; import { resetCanvas } from 'features/canvas/store/canvasSlice'; import { controlNetReset } from 'features/controlNet/store/controlNetSlice'; +import { imageDeletionConfirmed } from 'features/deleteImageModal/store/actions'; +import { isModalOpenChanged } from 'features/deleteImageModal/store/slice'; import { selectListImagesBaseQueryArgs } from 'features/gallery/store/gallerySelectors'; import { imageSelected } from 'features/gallery/store/gallerySlice'; -import { imageDeletionConfirmed } from 'features/imageDeletion/store/actions'; -import { isModalOpenChanged } from 'features/imageDeletion/store/imageDeletionSlice'; import { nodeEditorReset } from 'features/nodes/store/nodesSlice'; import { clearInitialImage } from 'features/parameters/store/generationSlice'; import { clamp } from 'lodash-es'; import { api } from 'services/api'; import { imagesApi } from 'services/api/endpoints/images'; +import { imagesAdapter } from 'services/api/util'; import { startAppListening } from '..'; -/** - * Called when the user requests an image deletion - */ -export const addRequestedImageDeletionListener = () => { +export const addRequestedSingleImageDeletionListener = () => { startAppListening({ actionCreator: imageDeletionConfirmed, effect: async (action, { dispatch, getState, condition }) => { - const { imageDTO, imageUsage } = action.payload; + const { imageDTOs, imagesUsage } = action.payload; + + if (imageDTOs.length !== 1 || imagesUsage.length !== 1) { + // handle multiples in separate listener + return; + } + + const imageDTO = imageDTOs[0]; + const imageUsage = imagesUsage[0]; + + if (!imageDTO || !imageUsage) { + // satisfy noUncheckedIndexedAccess + return; + } dispatch(isModalOpenChanged(false)); - const { image_name } = imageDTO; - const state = getState(); const lastSelectedImage = - state.gallery.selection[state.gallery.selection.length - 1]; + state.gallery.selection[state.gallery.selection.length - 1]?.image_name; + + if (imageDTO && imageDTO?.image_name === lastSelectedImage) { + const { image_name } = imageDTO; - if (lastSelectedImage === image_name) { const baseQueryArgs = selectListImagesBaseQueryArgs(state); const { data } = imagesApi.endpoints.listImages.select(baseQueryArgs)(state); - const ids = data?.ids ?? []; + const cachedImageDTOs = data + ? imagesAdapter.getSelectors().selectAll(data) + : []; - const deletedImageIndex = ids.findIndex( - (result) => result.toString() === image_name + const deletedImageIndex = cachedImageDTOs.findIndex( + (i) => i.image_name === image_name ); - const filteredIds = ids.filter((id) => id.toString() !== image_name); + const filteredImageDTOs = cachedImageDTOs.filter( + (i) => i.image_name !== image_name + ); const newSelectedImageIndex = clamp( deletedImageIndex, 0, - filteredIds.length - 1 + filteredImageDTOs.length - 1 ); - const newSelectedImageId = filteredIds[newSelectedImageIndex]; + const newSelectedImageDTO = filteredImageDTOs[newSelectedImageIndex]; - if (newSelectedImageId) { - dispatch(imageSelected(newSelectedImageId as string)); + if (newSelectedImageDTO) { + dispatch(imageSelected(newSelectedImageDTO)); } else { dispatch(imageSelected(null)); } @@ -97,6 +112,66 @@ export const addRequestedImageDeletionListener = () => { }); }; +/** + * Called when the user requests an image deletion + */ +export const addRequestedMultipleImageDeletionListener = () => { + startAppListening({ + actionCreator: imageDeletionConfirmed, + effect: async (action, { dispatch, getState }) => { + const { imageDTOs, imagesUsage } = action.payload; + + if (imageDTOs.length <= 1 || imagesUsage.length <= 1) { + // handle singles in separate listener + return; + } + + try { + // Delete from server + await dispatch( + imagesApi.endpoints.deleteImages.initiate({ imageDTOs }) + ).unwrap(); + const state = getState(); + const baseQueryArgs = selectListImagesBaseQueryArgs(state); + const { data } = + imagesApi.endpoints.listImages.select(baseQueryArgs)(state); + + const newSelectedImageDTO = data + ? imagesAdapter.getSelectors().selectAll(data)[0] + : undefined; + + if (newSelectedImageDTO) { + dispatch(imageSelected(newSelectedImageDTO)); + } else { + dispatch(imageSelected(null)); + } + + dispatch(isModalOpenChanged(false)); + + // We need to reset the features where the image is in use - none of these work if their image(s) don't exist + + if (imagesUsage.some((i) => i.isCanvasImage)) { + dispatch(resetCanvas()); + } + + if (imagesUsage.some((i) => i.isControlNetImage)) { + dispatch(controlNetReset()); + } + + if (imagesUsage.some((i) => i.isInitialImage)) { + dispatch(clearInitialImage()); + } + + if (imagesUsage.some((i) => i.isNodesImage)) { + dispatch(nodeEditorReset()); + } + } catch { + // no-op + } + }, + }); +}; + /** * Called when the actual delete request is sent to the server */ diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageDropped.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageDropped.ts index fdf0849a12..fc0b44653d 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageDropped.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageDropped.ts @@ -1,19 +1,20 @@ import { createAction } from '@reduxjs/toolkit'; -import { - TypesafeDraggableData, - TypesafeDroppableData, -} from 'app/components/ImageDnd/typesafeDnd'; import { logger } from 'app/logging/logger'; import { setInitialCanvasImage } from 'features/canvas/store/canvasSlice'; import { controlNetImageChanged } from 'features/controlNet/store/controlNetSlice'; import { - imageSelected, - imagesAddedToBatch, -} from 'features/gallery/store/gallerySlice'; -import { fieldValueChanged } from 'features/nodes/store/nodesSlice'; + TypesafeDraggableData, + TypesafeDroppableData, +} from 'features/dnd/types'; +import { imageSelected } from 'features/gallery/store/gallerySlice'; +import { + fieldImageValueChanged, + workflowExposedFieldAdded, +} from 'features/nodes/store/nodesSlice'; import { initialImageChanged } from 'features/parameters/store/generationSlice'; import { imagesApi } from 'services/api/endpoints/images'; import { startAppListening } from '../'; +import { parseify } from 'common/util/serialize'; export const dndDropped = createAction<{ overData: TypesafeDroppableData; @@ -24,22 +25,53 @@ export const addImageDroppedListener = () => { startAppListening({ actionCreator: dndDropped, effect: async (action, { dispatch }) => { - const log = logger('images'); + const log = logger('dnd'); const { activeData, overData } = action.payload; - log.debug({ activeData, overData }, 'Image or selection dropped'); + if (activeData.payloadType === 'IMAGE_DTO') { + log.debug({ activeData, overData }, 'Image dropped'); + } else if (activeData.payloadType === 'IMAGE_DTOS') { + log.debug( + { activeData, overData }, + `Images (${activeData.payload.imageDTOs.length}) dropped` + ); + } else if (activeData.payloadType === 'NODE_FIELD') { + log.debug( + { activeData: parseify(activeData), overData: parseify(overData) }, + 'Node field dropped' + ); + } else { + log.debug({ activeData, overData }, `Unknown payload dropped`); + } - // set current image + if ( + overData.actionType === 'ADD_FIELD_TO_LINEAR' && + activeData.payloadType === 'NODE_FIELD' + ) { + const { nodeId, field } = activeData.payload; + dispatch( + workflowExposedFieldAdded({ + nodeId, + fieldName: field.name, + }) + ); + } + + /** + * Image dropped on current image + */ if ( overData.actionType === 'SET_CURRENT_IMAGE' && activeData.payloadType === 'IMAGE_DTO' && activeData.payload.imageDTO ) { - dispatch(imageSelected(activeData.payload.imageDTO.image_name)); + dispatch(imageSelected(activeData.payload.imageDTO)); return; } - // set initial image + /** + * Image dropped on initial image + */ if ( overData.actionType === 'SET_INITIAL_IMAGE' && activeData.payloadType === 'IMAGE_DTO' && @@ -49,27 +81,9 @@ export const addImageDroppedListener = () => { return; } - // add image to batch - if ( - overData.actionType === 'ADD_TO_BATCH' && - activeData.payloadType === 'IMAGE_DTO' && - activeData.payload.imageDTO - ) { - dispatch(imagesAddedToBatch([activeData.payload.imageDTO.image_name])); - return; - } - - // add multiple images to batch - if ( - overData.actionType === 'ADD_TO_BATCH' && - activeData.payloadType === 'IMAGE_NAMES' - ) { - dispatch(imagesAddedToBatch(activeData.payload.image_names)); - - return; - } - - // set control image + /** + * Image dropped on ControlNet + */ if ( overData.actionType === 'SET_CONTROLNET_IMAGE' && activeData.payloadType === 'IMAGE_DTO' && @@ -85,7 +99,9 @@ export const addImageDroppedListener = () => { return; } - // set canvas image + /** + * Image dropped on Canvas + */ if ( overData.actionType === 'SET_CANVAS_INITIAL_IMAGE' && activeData.payloadType === 'IMAGE_DTO' && @@ -95,7 +111,9 @@ export const addImageDroppedListener = () => { return; } - // set nodes image + /** + * Image dropped on node image field + */ if ( overData.actionType === 'SET_NODES_IMAGE' && activeData.payloadType === 'IMAGE_DTO' && @@ -103,7 +121,7 @@ export const addImageDroppedListener = () => { ) { const { fieldName, nodeId } = overData.context; dispatch( - fieldValueChanged({ + fieldImageValueChanged({ nodeId, fieldName, value: activeData.payload.imageDTO, @@ -112,61 +130,36 @@ export const addImageDroppedListener = () => { return; } - // set multiple nodes images (single image handler) - if ( - overData.actionType === 'SET_MULTI_NODES_IMAGE' && - activeData.payloadType === 'IMAGE_DTO' && - activeData.payload.imageDTO - ) { - const { fieldName, nodeId } = overData.context; - dispatch( - fieldValueChanged({ - nodeId, - fieldName, - value: [activeData.payload.imageDTO], - }) - ); - return; - } - - // // set multiple nodes images (multiple images handler) + /** + * TODO + * Image selection dropped on node image collection field + */ // if ( // overData.actionType === 'SET_MULTI_NODES_IMAGE' && - // activeData.payloadType === 'IMAGE_NAMES' + // activeData.payloadType === 'IMAGE_DTO' && + // activeData.payload.imageDTO // ) { // const { fieldName, nodeId } = overData.context; // dispatch( - // imageCollectionFieldValueChanged({ + // fieldValueChanged({ // nodeId, // fieldName, - // value: activeData.payload.image_names.map((image_name) => ({ - // image_name, - // })), + // value: [activeData.payload.imageDTO], // }) // ); // return; // } - // add image to board + /** + * Image dropped on user board + */ if ( - overData.actionType === 'MOVE_BOARD' && + overData.actionType === 'ADD_TO_BOARD' && activeData.payloadType === 'IMAGE_DTO' && activeData.payload.imageDTO ) { const { imageDTO } = activeData.payload; const { boardId } = overData.context; - - // image was droppe on the "NoBoardBoard" - if (!boardId) { - dispatch( - imagesApi.endpoints.removeImageFromBoard.initiate({ - imageDTO, - }) - ); - return; - } - - // image was dropped on a user board dispatch( imagesApi.endpoints.addImageToBoard.initiate({ imageDTO, @@ -176,67 +169,58 @@ export const addImageDroppedListener = () => { return; } - // // add gallery selection to board - // if ( - // overData.actionType === 'MOVE_BOARD' && - // activeData.payloadType === 'IMAGE_NAMES' && - // overData.context.boardId - // ) { - // console.log('adding gallery selection to board'); - // const board_id = overData.context.boardId; - // dispatch( - // boardImagesApi.endpoints.addManyBoardImages.initiate({ - // board_id, - // image_names: activeData.payload.image_names, - // }) - // ); - // return; - // } + /** + * Image dropped on 'none' board + */ + if ( + overData.actionType === 'REMOVE_FROM_BOARD' && + activeData.payloadType === 'IMAGE_DTO' && + activeData.payload.imageDTO + ) { + const { imageDTO } = activeData.payload; + dispatch( + imagesApi.endpoints.removeImageFromBoard.initiate({ + imageDTO, + }) + ); + return; + } - // // remove gallery selection from board - // if ( - // overData.actionType === 'MOVE_BOARD' && - // activeData.payloadType === 'IMAGE_NAMES' && - // overData.context.boardId === null - // ) { - // console.log('removing gallery selection to board'); - // dispatch( - // boardImagesApi.endpoints.deleteManyBoardImages.initiate({ - // image_names: activeData.payload.image_names, - // }) - // ); - // return; - // } + /** + * Multiple images dropped on user board + */ + if ( + overData.actionType === 'ADD_TO_BOARD' && + activeData.payloadType === 'IMAGE_DTOS' && + activeData.payload.imageDTOs + ) { + const { imageDTOs } = activeData.payload; + const { boardId } = overData.context; + dispatch( + imagesApi.endpoints.addImagesToBoard.initiate({ + imageDTOs, + board_id: boardId, + }) + ); + return; + } - // // add batch selection to board - // if ( - // overData.actionType === 'MOVE_BOARD' && - // activeData.payloadType === 'IMAGE_NAMES' && - // overData.context.boardId - // ) { - // const board_id = overData.context.boardId; - // dispatch( - // boardImagesApi.endpoints.addManyBoardImages.initiate({ - // board_id, - // image_names: activeData.payload.image_names, - // }) - // ); - // return; - // } - - // // remove batch selection from board - // if ( - // overData.actionType === 'MOVE_BOARD' && - // activeData.payloadType === 'IMAGE_NAMES' && - // overData.context.boardId === null - // ) { - // dispatch( - // boardImagesApi.endpoints.deleteManyBoardImages.initiate({ - // image_names: activeData.payload.image_names, - // }) - // ); - // return; - // } + /** + * Multiple images dropped on 'none' board + */ + if ( + overData.actionType === 'REMOVE_FROM_BOARD' && + activeData.payloadType === 'IMAGE_DTOS' && + activeData.payload.imageDTOs + ) { + const { imageDTOs } = activeData.payload; + dispatch( + imagesApi.endpoints.removeImagesFromBoard.initiate({ + imageDTOs, + }) + ); + return; + } }, }); }; diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageToDeleteSelected.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageToDeleteSelected.ts index 3a5eed95db..88a4e773d5 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageToDeleteSelected.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageToDeleteSelected.ts @@ -1,37 +1,32 @@ -import { imageDeletionConfirmed } from 'features/imageDeletion/store/actions'; -import { selectImageUsage } from 'features/imageDeletion/store/imageDeletionSelectors'; +import { imageDeletionConfirmed } from 'features/deleteImageModal/store/actions'; +import { selectImageUsage } from 'features/deleteImageModal/store/selectors'; import { - imageToDeleteSelected, + imagesToDeleteSelected, isModalOpenChanged, -} from 'features/imageDeletion/store/imageDeletionSlice'; +} from 'features/deleteImageModal/store/slice'; import { startAppListening } from '..'; export const addImageToDeleteSelectedListener = () => { startAppListening({ - actionCreator: imageToDeleteSelected, + actionCreator: imagesToDeleteSelected, effect: async (action, { dispatch, getState }) => { - const imageDTO = action.payload; + const imageDTOs = action.payload; const state = getState(); const { shouldConfirmOnDelete } = state.system; - const imageUsage = selectImageUsage(getState()); - - if (!imageUsage) { - // should never happen - return; - } + const imagesUsage = selectImageUsage(getState()); const isImageInUse = - imageUsage.isCanvasImage || - imageUsage.isInitialImage || - imageUsage.isControlNetImage || - imageUsage.isNodesImage; + imagesUsage.some((i) => i.isCanvasImage) || + imagesUsage.some((i) => i.isInitialImage) || + imagesUsage.some((i) => i.isControlNetImage) || + imagesUsage.some((i) => i.isNodesImage); if (shouldConfirmOnDelete || isImageInUse) { dispatch(isModalOpenChanged(true)); return; } - dispatch(imageDeletionConfirmed({ imageDTO, imageUsage })); + dispatch(imageDeletionConfirmed({ imageDTOs, imagesUsage })); }, }); }; diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageUploaded.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageUploaded.ts index dd581d893c..0c55908748 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageUploaded.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageUploaded.ts @@ -2,14 +2,13 @@ import { UseToastOptions } from '@chakra-ui/react'; import { logger } from 'app/logging/logger'; import { setInitialCanvasImage } from 'features/canvas/store/canvasSlice'; import { controlNetImageChanged } from 'features/controlNet/store/controlNetSlice'; -import { imagesAddedToBatch } from 'features/gallery/store/gallerySlice'; -import { fieldValueChanged } from 'features/nodes/store/nodesSlice'; +import { fieldImageValueChanged } from 'features/nodes/store/nodesSlice'; import { initialImageChanged } from 'features/parameters/store/generationSlice'; import { addToast } from 'features/system/store/systemSlice'; +import { omit } from 'lodash-es'; import { boardsApi } from 'services/api/endpoints/boards'; import { startAppListening } from '..'; import { imagesApi } from '../../../../../services/api/endpoints/images'; -import { omit } from 'lodash-es'; const DEFAULT_UPLOADED_TOAST: UseToastOptions = { title: 'Image Uploaded', @@ -41,7 +40,7 @@ export const addImageUploadedFulfilledListener = () => { // default action - just upload and alert user if (postUploadAction?.type === 'TOAST') { const { toastOptions } = postUploadAction; - if (!autoAddBoardId) { + if (!autoAddBoardId || autoAddBoardId === 'none') { dispatch(addToast({ ...DEFAULT_UPLOADED_TOAST, ...toastOptions })); } else { // Add this image to the board @@ -112,7 +111,9 @@ export const addImageUploadedFulfilledListener = () => { if (postUploadAction?.type === 'SET_NODES_IMAGE') { const { nodeId, fieldName } = postUploadAction; - dispatch(fieldValueChanged({ nodeId, fieldName, value: imageDTO })); + dispatch( + fieldImageValueChanged({ nodeId, fieldName, value: imageDTO }) + ); dispatch( addToast({ ...DEFAULT_UPLOADED_TOAST, @@ -121,17 +122,6 @@ export const addImageUploadedFulfilledListener = () => { ); return; } - - if (postUploadAction?.type === 'ADD_TO_BATCH') { - dispatch(imagesAddedToBatch([imageDTO.image_name])); - dispatch( - addToast({ - ...DEFAULT_UPLOADED_TOAST, - description: 'Added to batch', - }) - ); - return; - } }, }); }; diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imagesStarred.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imagesStarred.ts new file mode 100644 index 0000000000..5988eee207 --- /dev/null +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imagesStarred.ts @@ -0,0 +1,30 @@ +import { imagesApi } from 'services/api/endpoints/images'; +import { startAppListening } from '..'; +import { selectionChanged } from '../../../../../features/gallery/store/gallerySlice'; +import { ImageDTO } from '../../../../../services/api/types'; + +export const addImagesStarredListener = () => { + startAppListening({ + matcher: imagesApi.endpoints.starImages.matchFulfilled, + effect: async (action, { dispatch, getState }) => { + const { updated_image_names: starredImages } = action.payload; + + const state = getState(); + + const { selection } = state.gallery; + const updatedSelection: ImageDTO[] = []; + + selection.forEach((selectedImageDTO) => { + if (starredImages.includes(selectedImageDTO.image_name)) { + updatedSelection.push({ + ...selectedImageDTO, + starred: true, + }); + } else { + updatedSelection.push(selectedImageDTO); + } + }); + dispatch(selectionChanged(updatedSelection)); + }, + }); +}; diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imagesUnstarred.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imagesUnstarred.ts new file mode 100644 index 0000000000..3df76861d4 --- /dev/null +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imagesUnstarred.ts @@ -0,0 +1,30 @@ +import { imagesApi } from 'services/api/endpoints/images'; +import { startAppListening } from '..'; +import { selectionChanged } from '../../../../../features/gallery/store/gallerySlice'; +import { ImageDTO } from '../../../../../services/api/types'; + +export const addImagesUnstarredListener = () => { + startAppListening({ + matcher: imagesApi.endpoints.unstarImages.matchFulfilled, + effect: async (action, { dispatch, getState }) => { + const { updated_image_names: unstarredImages } = action.payload; + + const state = getState(); + + const { selection } = state.gallery; + const updatedSelection: ImageDTO[] = []; + + selection.forEach((selectedImageDTO) => { + if (unstarredImages.includes(selectedImageDTO.image_name)) { + updatedSelection.push({ + ...selectedImageDTO, + starred: false, + }); + } else { + updatedSelection.push(selectedImageDTO); + } + }); + dispatch(selectionChanged(updatedSelection)); + }, + }); +}; diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/modelSelected.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/modelSelected.ts index 7880386057..e44cbe504a 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/modelSelected.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/modelSelected.ts @@ -6,7 +6,7 @@ import { modelChanged, vaeSelected, } from 'features/parameters/store/generationSlice'; -import { zMainModel } from 'features/parameters/types/parameterSchemas'; +import { zMainOrOnnxModel } from 'features/parameters/types/parameterSchemas'; import { addToast } from 'features/system/store/systemSlice'; import { makeToast } from 'features/system/util/makeToast'; import { forEach } from 'lodash-es'; @@ -19,7 +19,7 @@ export const addModelSelectedListener = () => { const log = logger('models'); const state = getState(); - const result = zMainModel.safeParse(action.payload); + const result = zMainOrOnnxModel.safeParse(action.payload); if (!result.success) { log.error( diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/modelsLoaded.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/modelsLoaded.ts index 32d512f504..4d30ee3b8b 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/modelsLoaded.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/modelsLoaded.ts @@ -6,7 +6,8 @@ import { vaeSelected, } from 'features/parameters/store/generationSlice'; import { - zMainModel, + zMainOrOnnxModel, + zSDXLRefinerModel, zVaeModel, } from 'features/parameters/types/parameterSchemas'; import { @@ -14,12 +15,21 @@ import { setShouldUseSDXLRefiner, } from 'features/sdxl/store/sdxlSlice'; import { forEach, some } from 'lodash-es'; -import { modelsApi } from 'services/api/endpoints/models'; +import { + mainModelsAdapter, + modelsApi, + vaeModelsAdapter, +} from 'services/api/endpoints/models'; +import { TypeGuardFor } from 'services/api/types'; import { startAppListening } from '..'; export const addModelsLoadedListener = () => { startAppListening({ - predicate: (state, action) => + predicate: ( + action + ): action is TypeGuardFor< + typeof modelsApi.endpoints.getMainModels.matchFulfilled + > => modelsApi.endpoints.getMainModels.matchFulfilled(action) && !action.meta.arg.originalArgs.includes('sdxl-refiner'), effect: async (action, { getState, dispatch }) => { @@ -31,29 +41,28 @@ export const addModelsLoadedListener = () => { ); const currentModel = getState().generation.model; + const models = mainModelsAdapter.getSelectors().selectAll(action.payload); - const isCurrentModelAvailable = some( - action.payload.entities, - (m) => - m?.model_name === currentModel?.model_name && - m?.base_model === currentModel?.base_model && - m?.model_type === currentModel?.model_type - ); - - if (isCurrentModelAvailable) { - return; - } - - const firstModelId = action.payload.ids[0]; - const firstModel = action.payload.entities[firstModelId]; - - if (!firstModel) { + if (models.length === 0) { // No models loaded at all dispatch(modelChanged(null)); return; } - const result = zMainModel.safeParse(firstModel); + const isCurrentModelAvailable = currentModel + ? models.some( + (m) => + m.model_name === currentModel.model_name && + m.base_model === currentModel.base_model && + m.model_type === currentModel.model_type + ) + : false; + + if (isCurrentModelAvailable) { + return; + } + + const result = zMainOrOnnxModel.safeParse(models[0]); if (!result.success) { log.error( @@ -67,7 +76,11 @@ export const addModelsLoadedListener = () => { }, }); startAppListening({ - predicate: (state, action) => + predicate: ( + action + ): action is TypeGuardFor< + typeof modelsApi.endpoints.getMainModels.matchFulfilled + > => modelsApi.endpoints.getMainModels.matchFulfilled(action) && action.meta.arg.originalArgs.includes('sdxl-refiner'), effect: async (action, { getState, dispatch }) => { @@ -79,30 +92,29 @@ export const addModelsLoadedListener = () => { ); const currentModel = getState().sdxl.refinerModel; + const models = mainModelsAdapter.getSelectors().selectAll(action.payload); - const isCurrentModelAvailable = some( - action.payload.entities, - (m) => - m?.model_name === currentModel?.model_name && - m?.base_model === currentModel?.base_model && - m?.model_type === currentModel?.model_type - ); - - if (isCurrentModelAvailable) { - return; - } - - const firstModelId = action.payload.ids[0]; - const firstModel = action.payload.entities[firstModelId]; - - if (!firstModel) { + if (models.length === 0) { // No models loaded at all dispatch(refinerModelChanged(null)); dispatch(setShouldUseSDXLRefiner(false)); return; } - const result = zMainModel.safeParse(firstModel); + const isCurrentModelAvailable = currentModel + ? models.some( + (m) => + m.model_name === currentModel.model_name && + m.base_model === currentModel.base_model && + m.model_type === currentModel.model_type + ) + : false; + + if (isCurrentModelAvailable) { + return; + } + + const result = zSDXLRefinerModel.safeParse(models[0]); if (!result.success) { log.error( @@ -143,8 +155,9 @@ export const addModelsLoadedListener = () => { return; } - const firstModelId = action.payload.ids[0]; - const firstModel = action.payload.entities[firstModelId]; + const firstModel = vaeModelsAdapter + .getSelectors() + .selectAll(action.payload)[0]; if (!firstModel) { // No custom VAEs loaded at all; use the default diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/receivedOpenAPISchema.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/receivedOpenAPISchema.ts index 44729f215a..dd86c77735 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/receivedOpenAPISchema.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/receivedOpenAPISchema.ts @@ -13,7 +13,7 @@ export const addReceivedOpenAPISchemaListener = () => { const log = logger('system'); const schemaJSON = action.payload; - log.debug({ schemaJSON }, 'Dereferenced OpenAPI schema'); + log.debug({ schemaJSON }, 'Received OpenAPI schema'); const nodeTemplates = parseSchema(schemaJSON); @@ -28,9 +28,12 @@ export const addReceivedOpenAPISchemaListener = () => { startAppListening({ actionCreator: receivedOpenAPISchema.rejected, - effect: () => { + effect: (action) => { const log = logger('system'); - log.error('Problem dereferencing OpenAPI Schema'); + log.error( + { error: parseify(action.error) }, + 'Problem retrieving OpenAPI Schema' + ); }, }); }; diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketInvocationComplete.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketInvocationComplete.ts index e36c49be63..5501f208fd 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketInvocationComplete.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketInvocationComplete.ts @@ -7,17 +7,19 @@ import { imageSelected, } from 'features/gallery/store/gallerySlice'; import { IMAGE_CATEGORIES } from 'features/gallery/store/types'; +import { CANVAS_OUTPUT } from 'features/nodes/util/graphBuilders/constants'; import { progressImageSet } from 'features/system/store/systemSlice'; -import { imagesAdapter, imagesApi } from 'services/api/endpoints/images'; +import { imagesApi } from 'services/api/endpoints/images'; import { isImageOutput } from 'services/api/guards'; import { sessionCanceled } from 'services/api/thunks/session'; +import { imagesAdapter } from 'services/api/util'; import { appSocketInvocationComplete, socketInvocationComplete, } from 'services/events/actions'; import { startAppListening } from '../..'; -const nodeDenylist = ['dataURL_image']; +const nodeDenylist = ['load_image']; export const addInvocationCompleteEventListener = () => { startAppListening({ @@ -51,7 +53,9 @@ export const addInvocationCompleteEventListener = () => { // Add canvas images to the staging area if ( - graph_execution_state_id === canvas.layerState.stagingArea.sessionId + graph_execution_state_id === + canvas.layerState.stagingArea.sessionId && + [CANVAS_OUTPUT].includes(data.source_node_id) ) { dispatch(addImageToStagingArea(imageDTO)); } @@ -67,7 +71,7 @@ export const addInvocationCompleteEventListener = () => { */ const { autoAddBoardId } = gallery; - if (autoAddBoardId) { + if (autoAddBoardId && autoAddBoardId !== 'none') { dispatch( imagesApi.endpoints.addImageToBoard.initiate({ board_id: autoAddBoardId, @@ -83,10 +87,7 @@ export const addInvocationCompleteEventListener = () => { categories: IMAGE_CATEGORIES, }, (draft) => { - const oldTotal = draft.total; - const newState = imagesAdapter.addOne(draft, imageDTO); - const delta = newState.total - oldTotal; - draft.total = draft.total + delta; + imagesAdapter.addOne(draft, imageDTO); } ) ); @@ -94,8 +95,8 @@ export const addInvocationCompleteEventListener = () => { dispatch( imagesApi.util.invalidateTags([ - { type: 'BoardImagesTotal', id: autoAddBoardId ?? 'none' }, - { type: 'BoardAssetsTotal', id: autoAddBoardId ?? 'none' }, + { type: 'BoardImagesTotal', id: autoAddBoardId }, + { type: 'BoardAssetsTotal', id: autoAddBoardId }, ]) ); @@ -110,7 +111,7 @@ export const addInvocationCompleteEventListener = () => { } else if (!autoAddBoardId) { dispatch(galleryViewChanged('images')); } - dispatch(imageSelected(imageDTO.image_name)); + dispatch(imageSelected(imageDTO)); } } diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/stagingAreaImageSaved.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/stagingAreaImageSaved.ts index a6818acbe0..b14e18ea63 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/stagingAreaImageSaved.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/stagingAreaImageSaved.ts @@ -20,7 +20,7 @@ export const addStagingAreaImageSavedListener = () => { // we may need to add it to the autoadd board const { autoAddBoardId } = getState().gallery; - if (autoAddBoardId) { + if (autoAddBoardId && autoAddBoardId !== 'none') { await dispatch( imagesApi.endpoints.addImageToBoard.initiate({ imageDTO: newImageDTO, diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/tabChanged.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/tabChanged.ts index 0569827859..6791324fdd 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/tabChanged.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/tabChanged.ts @@ -1,55 +1,63 @@ import { modelChanged } from 'features/parameters/store/generationSlice'; import { setActiveTab } from 'features/ui/store/uiSlice'; -import { forEach } from 'lodash-es'; import { NON_REFINER_BASE_MODELS } from 'services/api/constants'; -import { - MainModelConfigEntity, - modelsApi, -} from 'services/api/endpoints/models'; +import { mainModelsAdapter, modelsApi } from 'services/api/endpoints/models'; import { startAppListening } from '..'; export const addTabChangedListener = () => { startAppListening({ actionCreator: setActiveTab, - effect: (action, { getState, dispatch }) => { + effect: async (action, { getState, dispatch }) => { const activeTabName = action.payload; if (activeTabName === 'unifiedCanvas') { - // grab the models from RTK Query cache - const { data } = modelsApi.endpoints.getMainModels.select( - NON_REFINER_BASE_MODELS - )(getState()); + const currentBaseModel = getState().generation.model?.base_model; - if (!data) { - // no models yet, so we can't do anything - dispatch(modelChanged(null)); + if ( + currentBaseModel && + ['sd-1', 'sd-2', 'sdxl'].includes(currentBaseModel) + ) { + // if we're already on a valid model, no change needed return; } - // need to filter out all the invalid canvas models (currently, this is just sdxl) - const validCanvasModels: MainModelConfigEntity[] = []; + try { + // just grab fresh models + const modelsRequest = dispatch( + modelsApi.endpoints.getMainModels.initiate(NON_REFINER_BASE_MODELS) + ); + const models = await modelsRequest.unwrap(); + // cancel this cache subscription + modelsRequest.unsubscribe(); - forEach(data.entities, (entity) => { - if (!entity) { + if (!models.ids.length) { + // no valid canvas models + dispatch(modelChanged(null)); return; } - if (['sd-1', 'sd-2'].includes(entity.base_model)) { - validCanvasModels.push(entity); + + // need to filter out all the invalid canvas models (currently sdxl & refiner) + const validCanvasModels = mainModelsAdapter + .getSelectors() + .selectAll(models) + .filter((model) => + ['sd-1', 'sd-2', 'sxdl'].includes(model.base_model) + ); + + const firstValidCanvasModel = validCanvasModels[0]; + + if (!firstValidCanvasModel) { + // no valid canvas models + dispatch(modelChanged(null)); + return; } - }); - // this could still be undefined even tho TS doesn't say so - const firstValidCanvasModel = validCanvasModels[0]; + const { base_model, model_name, model_type } = firstValidCanvasModel; - if (!firstValidCanvasModel) { - // uh oh, we have no models that are valid for canvas + dispatch(modelChanged({ base_model, model_name, model_type })); + } catch { + // network request failed, bail dispatch(modelChanged(null)); - return; } - - // only store the model name and base model in redux - const { base_model, model_name, model_type } = firstValidCanvasModel; - - dispatch(modelChanged({ base_model, model_name, model_type })); } }, }); diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/userInvokedCanvas.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/userInvokedCanvas.ts index 39bd742d7d..cd6791cc0b 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/userInvokedCanvas.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/userInvokedCanvas.ts @@ -1,6 +1,7 @@ import { logger } from 'app/logging/logger'; import { userInvoked } from 'app/store/actions'; import openBase64ImageInTab from 'common/util/openBase64ImageInTab'; +import { parseify } from 'common/util/serialize'; import { canvasSessionIdChanged, stagingAreaInitialized, @@ -15,7 +16,6 @@ import { imagesApi } from 'services/api/endpoints/images'; import { sessionCreated } from 'services/api/thunks/session'; import { ImageDTO } from 'services/api/types'; import { startAppListening } from '..'; -import { parseify } from 'common/util/serialize'; /** * This listener is responsible invoking the canvas. This involves a number of steps: diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/userInvokedNodes.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/userInvokedNodes.ts index 0c298cbb24..5894bba5df 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/userInvokedNodes.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/userInvokedNodes.ts @@ -15,7 +15,7 @@ export const addUserInvokedNodesListener = () => { const log = logger('session'); const state = getState(); - const graph = buildNodesGraph(state); + const graph = buildNodesGraph(state.nodes); dispatch(nodesGraphBuilt(graph)); log.debug({ graph: parseify(graph) }, 'Nodes graph built'); diff --git a/invokeai/frontend/web/src/app/store/store.ts b/invokeai/frontend/web/src/app/store/store.ts index d71a147913..6b544252db 100644 --- a/invokeai/frontend/web/src/app/store/store.ts +++ b/invokeai/frontend/web/src/app/store/store.ts @@ -8,9 +8,9 @@ import { import canvasReducer from 'features/canvas/store/canvasSlice'; import controlNetReducer from 'features/controlNet/store/controlNetSlice'; import dynamicPromptsReducer from 'features/dynamicPrompts/store/dynamicPromptsSlice'; -import boardsReducer from 'features/gallery/store/boardSlice'; import galleryReducer from 'features/gallery/store/gallerySlice'; -import imageDeletionReducer from 'features/imageDeletion/store/imageDeletionSlice'; +import deleteImageModalReducer from 'features/deleteImageModal/store/slice'; +import changeBoardModalReducer from 'features/changeBoardModal/store/slice'; import loraReducer from 'features/lora/store/loraSlice'; import nodesReducer from 'features/nodes/store/nodesSlice'; import generationReducer from 'features/parameters/store/generationSlice'; @@ -43,9 +43,9 @@ const allReducers = { ui: uiReducer, hotkeys: hotkeysReducer, controlNet: controlNetReducer, - boards: boardsReducer, dynamicPrompts: dynamicPromptsReducer, - imageDeletion: imageDeletionReducer, + deleteImageModal: deleteImageModalReducer, + changeBoardModal: changeBoardModalReducer, lora: loraReducer, modelmanager: modelmanagerReducer, sdxl: sdxlReducer, diff --git a/invokeai/frontend/web/src/app/types/invokeai.ts b/invokeai/frontend/web/src/app/types/invokeai.ts index b38790e0c9..a39ed2ca7b 100644 --- a/invokeai/frontend/web/src/app/types/invokeai.ts +++ b/invokeai/frontend/web/src/app/types/invokeai.ts @@ -1,86 +1,7 @@ -import { - // CONTROLNET_MODELS, - CONTROLNET_PROCESSORS, -} from 'features/controlNet/store/constants'; +import { CONTROLNET_PROCESSORS } from 'features/controlNet/store/constants'; import { InvokeTabName } from 'features/ui/store/tabMap'; import { O } from 'ts-toolbelt'; -// These are old types from the model management UI - -// export type ModelStatus = 'active' | 'cached' | 'not loaded'; - -// export type Model = { -// status: ModelStatus; -// description: string; -// weights: string; -// config?: string; -// vae?: string; -// width?: number; -// height?: number; -// default?: boolean; -// format?: string; -// }; - -// export type DiffusersModel = { -// status: ModelStatus; -// description: string; -// repo_id?: string; -// path?: string; -// vae?: { -// repo_id?: string; -// path?: string; -// }; -// format?: string; -// default?: boolean; -// }; - -// export type ModelList = Record; - -// export type FoundModel = { -// name: string; -// location: string; -// }; - -// export type InvokeModelConfigProps = { -// name: string | undefined; -// description: string | undefined; -// config: string | undefined; -// weights: string | undefined; -// vae: string | undefined; -// width: number | undefined; -// height: number | undefined; -// default: boolean | undefined; -// format: string | undefined; -// }; - -// export type InvokeDiffusersModelConfigProps = { -// name: string | undefined; -// description: string | undefined; -// repo_id: string | undefined; -// path: string | undefined; -// default: boolean | undefined; -// format: string | undefined; -// vae: { -// repo_id: string | undefined; -// path: string | undefined; -// }; -// }; - -// export type InvokeModelConversionProps = { -// model_name: string; -// save_location: string; -// custom_location: string | null; -// }; - -// export type InvokeModelMergingProps = { -// models_to_merge: string[]; -// alpha: number; -// interp: 'weighted_sum' | 'sigmoid' | 'inv_sigmoid' | 'add_difference'; -// force: boolean; -// merged_model_name: string; -// model_merge_save_path: string | null; -// }; - /** * A disable-able application feature */ @@ -96,7 +17,8 @@ export type AppFeature = | 'consoleLogging' | 'dynamicPrompting' | 'batches' - | 'syncModels'; + | 'syncModels' + | 'multiselect'; /** * A disable-able Stable Diffusion feature diff --git a/invokeai/frontend/web/src/common/components/IAIContextMenu.tsx b/invokeai/frontend/web/src/common/components/IAIContextMenu.tsx new file mode 100644 index 0000000000..757faca866 --- /dev/null +++ b/invokeai/frontend/web/src/common/components/IAIContextMenu.tsx @@ -0,0 +1,126 @@ +/** + * This is a copy-paste of https://github.com/lukasbach/chakra-ui-contextmenu with a small change. + * + * The reactflow background element somehow prevents the chakra `useOutsideClick()` hook from working. + * With a menu open, clicking on the reactflow background element doesn't close the menu. + * + * Reactflow does provide an `onPaneClick` to handle clicks on the background element, but it is not + * straightforward to programatically close the menu. + * + * As a (hopefully temporary) workaround, we will use a dirty hack: + * - create `globalContextMenuCloseTrigger: number` in `ui` slice + * - increment it in `onPaneClick` + * - `useEffect()` to close the menu when `globalContextMenuCloseTrigger` changes + */ + +import { + Menu, + MenuButton, + MenuButtonProps, + MenuProps, + Portal, + PortalProps, + useEventListener, +} from '@chakra-ui/react'; +import { useAppSelector } from 'app/store/storeHooks'; +import * as React from 'react'; +import { + MutableRefObject, + useCallback, + useEffect, + useRef, + useState, +} from 'react'; + +export interface IAIContextMenuProps { + renderMenu: () => JSX.Element | null; + children: (ref: MutableRefObject) => JSX.Element | null; + menuProps?: Omit & { children?: React.ReactNode }; + portalProps?: Omit & { children?: React.ReactNode }; + menuButtonProps?: MenuButtonProps; +} + +export function IAIContextMenu( + props: IAIContextMenuProps +) { + const [isOpen, setIsOpen] = useState(false); + const [isRendered, setIsRendered] = useState(false); + const [isDeferredOpen, setIsDeferredOpen] = useState(false); + const [position, setPosition] = useState<[number, number]>([0, 0]); + const targetRef = useRef(null); + + const globalContextMenuCloseTrigger = useAppSelector( + (state) => state.ui.globalContextMenuCloseTrigger + ); + + useEffect(() => { + if (isOpen) { + setTimeout(() => { + setIsRendered(true); + setTimeout(() => { + setIsDeferredOpen(true); + }); + }); + } else { + setIsDeferredOpen(false); + const timeout = setTimeout(() => { + setIsRendered(isOpen); + }, 1000); + return () => clearTimeout(timeout); + } + }, [isOpen]); + + useEffect(() => { + setIsOpen(false); + setIsDeferredOpen(false); + setIsRendered(false); + }, [globalContextMenuCloseTrigger]); + + useEventListener('contextmenu', (e) => { + if ( + targetRef.current?.contains(e.target as HTMLElement) || + e.target === targetRef.current + ) { + e.preventDefault(); + setIsOpen(true); + setPosition([e.pageX, e.pageY]); + } else { + setIsOpen(false); + } + }); + + const onCloseHandler = useCallback(() => { + props.menuProps?.onClose?.(); + setIsOpen(false); + }, [props.menuProps]); + + return ( + <> + {props.children(targetRef)} + {isRendered && ( + + + + {props.renderMenu()} + + + )} + + ); +} diff --git a/invokeai/frontend/web/src/common/components/IAIDndImage.tsx b/invokeai/frontend/web/src/common/components/IAIDndImage.tsx index 780447aba6..aeeb3677cc 100644 --- a/invokeai/frontend/web/src/common/components/IAIDndImage.tsx +++ b/invokeai/frontend/web/src/common/components/IAIDndImage.tsx @@ -1,16 +1,11 @@ import { ChakraProps, Flex, + FlexProps, Icon, Image, useColorMode, - useColorModeValue, } from '@chakra-ui/react'; -import { - TypesafeDraggableData, - TypesafeDroppableData, -} from 'app/components/ImageDnd/typesafeDnd'; -import IAIIconButton from 'common/components/IAIIconButton'; import { IAILoadingImageFallback, IAINoContentFallback, @@ -21,27 +16,39 @@ import ImageContextMenu from 'features/gallery/components/ImageContextMenu/Image import { MouseEvent, ReactElement, + ReactNode, SyntheticEvent, memo, useCallback, useState, } from 'react'; -import { FaImage, FaUndo, FaUpload } from 'react-icons/fa'; +import { FaImage, FaUpload } from 'react-icons/fa'; import { ImageDTO, PostUploadAction } from 'services/api/types'; import { mode } from 'theme/util/mode'; import IAIDraggable from './IAIDraggable'; import IAIDroppable from './IAIDroppable'; import SelectionOverlay from './SelectionOverlay'; +import { + TypesafeDraggableData, + TypesafeDroppableData, +} from 'features/dnd/types'; -type IAIDndImageProps = { +const defaultUploadElement = ( + +); + +const defaultNoContentFallback = ; + +type IAIDndImageProps = FlexProps & { imageDTO: ImageDTO | undefined; onError?: (event: SyntheticEvent) => void; onLoad?: (event: SyntheticEvent) => void; onClick?: (event: MouseEvent) => void; - onClickReset?: (event: MouseEvent) => void; - withResetIcon?: boolean; - resetIcon?: ReactElement; - resetTooltip?: string; withMetadataOverlay?: boolean; isDragDisabled?: boolean; isDropDisabled?: boolean; @@ -52,21 +59,21 @@ type IAIDndImageProps = { fitContainer?: boolean; droppableData?: TypesafeDroppableData; draggableData?: TypesafeDraggableData; - dropLabel?: string; + dropLabel?: ReactNode; isSelected?: boolean; thumbnail?: boolean; noContentFallback?: ReactElement; useThumbailFallback?: boolean; withHoverOverlay?: boolean; + children?: JSX.Element; + uploadElement?: ReactNode; }; const IAIDndImage = (props: IAIDndImageProps) => { const { imageDTO, - onClickReset, onError, onClick, - withResetIcon = false, withMetadataOverlay = false, isDropDisabled = false, isDragDisabled = false, @@ -80,32 +87,37 @@ const IAIDndImage = (props: IAIDndImageProps) => { dropLabel, isSelected = false, thumbnail = false, - resetTooltip = 'Reset', - resetIcon = , - noContentFallback = , + noContentFallback = defaultNoContentFallback, + uploadElement = defaultUploadElement, useThumbailFallback, withHoverOverlay = false, + children, + onMouseOver, + onMouseOut, } = props; const { colorMode } = useColorMode(); const [isHovered, setIsHovered] = useState(false); - const handleMouseOver = useCallback(() => { - setIsHovered(true); - }, []); - const handleMouseOut = useCallback(() => { - setIsHovered(false); - }, []); + const handleMouseOver = useCallback( + (e: MouseEvent) => { + if (onMouseOver) onMouseOver(e); + setIsHovered(true); + }, + [onMouseOver] + ); + const handleMouseOut = useCallback( + (e: MouseEvent) => { + if (onMouseOut) onMouseOut(e); + setIsHovered(false); + }, + [onMouseOut] + ); const { getUploadButtonProps, getUploadInputProps } = useImageUploadButton({ postUploadAction, isDisabled: isUploadDisabled, }); - const resetIconShadow = useColorModeValue( - `drop-shadow(0px 0px 0.1rem var(--invokeai-colors-base-600))`, - `drop-shadow(0px 0px 0.1rem var(--invokeai-colors-base-800))` - ); - const uploadButtonStyles = isUploadDisabled ? {} : { @@ -157,11 +169,10 @@ const IAIDndImage = (props: IAIDndImageProps) => { ) } - width={imageDTO.width} - height={imageDTO.height} onError={onError} draggable={false} sx={{ + w: imageDTO.width, objectFit: 'contain', maxW: 'full', maxH: 'full', @@ -196,12 +207,7 @@ const IAIDndImage = (props: IAIDndImageProps) => { {...getUploadButtonProps()} > - + {uploadElement} )} @@ -213,6 +219,7 @@ const IAIDndImage = (props: IAIDndImageProps) => { onClick={onClick} /> )} + {children} {!isDropDisabled && ( { dropLabel={dropLabel} /> )} - {onClickReset && withResetIcon && imageDTO && ( - - )} )} diff --git a/invokeai/frontend/web/src/common/components/IAIDndImageIcon.tsx b/invokeai/frontend/web/src/common/components/IAIDndImageIcon.tsx new file mode 100644 index 0000000000..f3d3fc0dda --- /dev/null +++ b/invokeai/frontend/web/src/common/components/IAIDndImageIcon.tsx @@ -0,0 +1,46 @@ +import { SystemStyleObject, useColorModeValue } from '@chakra-ui/react'; +import { MouseEvent, ReactElement, memo } from 'react'; +import IAIIconButton from './IAIIconButton'; + +type Props = { + onClick: (event: MouseEvent) => void; + tooltip: string; + icon?: ReactElement; + styleOverrides?: SystemStyleObject; +}; + +const IAIDndImageIcon = (props: Props) => { + const { onClick, tooltip, icon, styleOverrides } = props; + + const resetIconShadow = useColorModeValue( + `drop-shadow(0px 0px 0.1rem var(--invokeai-colors-base-600))`, + `drop-shadow(0px 0px 0.1rem var(--invokeai-colors-base-800))` + ); + return ( + + ); +}; + +export default memo(IAIDndImageIcon); diff --git a/invokeai/frontend/web/src/common/components/IAIDraggable.tsx b/invokeai/frontend/web/src/common/components/IAIDraggable.tsx index 482a8ac604..363799a573 100644 --- a/invokeai/frontend/web/src/common/components/IAIDraggable.tsx +++ b/invokeai/frontend/web/src/common/components/IAIDraggable.tsx @@ -1,22 +1,19 @@ -import { Box } from '@chakra-ui/react'; -import { - TypesafeDraggableData, - useDraggable, -} from 'app/components/ImageDnd/typesafeDnd'; -import { MouseEvent, memo, useRef } from 'react'; +import { Box, BoxProps } from '@chakra-ui/react'; +import { useDraggableTypesafe } from 'features/dnd/hooks/typesafeHooks'; +import { TypesafeDraggableData } from 'features/dnd/types'; +import { memo, useRef } from 'react'; import { v4 as uuidv4 } from 'uuid'; -type IAIDraggableProps = { +type IAIDraggableProps = BoxProps & { disabled?: boolean; data?: TypesafeDraggableData; - onClick?: (event: MouseEvent) => void; }; const IAIDraggable = (props: IAIDraggableProps) => { - const { data, disabled, onClick } = props; + const { data, disabled, ...rest } = props; const dndId = useRef(uuidv4()); - const { attributes, listeners, setNodeRef } = useDraggable({ + const { attributes, listeners, setNodeRef } = useDraggableTypesafe({ id: dndId.current, disabled, data, @@ -24,7 +21,6 @@ const IAIDraggable = (props: IAIDraggableProps) => { return ( { insetInlineStart={0} {...attributes} {...listeners} + {...rest} /> ); }; diff --git a/invokeai/frontend/web/src/common/components/IAIDropOverlay.tsx b/invokeai/frontend/web/src/common/components/IAIDropOverlay.tsx index 7601758409..f9bb36cc50 100644 --- a/invokeai/frontend/web/src/common/components/IAIDropOverlay.tsx +++ b/invokeai/frontend/web/src/common/components/IAIDropOverlay.tsx @@ -1,4 +1,4 @@ -import { Flex, Text, useColorMode } from '@chakra-ui/react'; +import { Box, Flex, useColorMode } from '@chakra-ui/react'; import { motion } from 'framer-motion'; import { ReactNode, memo, useRef } from 'react'; import { mode } from 'theme/util/mode'; @@ -74,7 +74,7 @@ export const IAIDropOverlay = (props: Props) => { justifyContent: 'center', }} > - { }} > {label} - + diff --git a/invokeai/frontend/web/src/common/components/IAIDroppable.tsx b/invokeai/frontend/web/src/common/components/IAIDroppable.tsx index 1038f36840..e4fb121c78 100644 --- a/invokeai/frontend/web/src/common/components/IAIDroppable.tsx +++ b/invokeai/frontend/web/src/common/components/IAIDroppable.tsx @@ -1,9 +1,7 @@ import { Box } from '@chakra-ui/react'; -import { - TypesafeDroppableData, - isValidDrop, - useDroppable, -} from 'app/components/ImageDnd/typesafeDnd'; +import { useDroppableTypesafe } from 'features/dnd/hooks/typesafeHooks'; +import { TypesafeDroppableData } from 'features/dnd/types'; +import { isValidDrop } from 'features/dnd/util/isValidDrop'; import { AnimatePresence } from 'framer-motion'; import { ReactNode, memo, useRef } from 'react'; import { v4 as uuidv4 } from 'uuid'; @@ -19,7 +17,7 @@ const IAIDroppable = (props: IAIDroppableProps) => { const { dropLabel, data, disabled } = props; const dndId = useRef(uuidv4()); - const { isOver, setNodeRef, active } = useDroppable({ + const { isOver, setNodeRef, active } = useDroppableTypesafe({ id: dndId.current, disabled, data, diff --git a/invokeai/frontend/web/src/common/components/IAIImageFallback.tsx b/invokeai/frontend/web/src/common/components/IAIImageFallback.tsx index 2057525b7a..a150e4ed0c 100644 --- a/invokeai/frontend/web/src/common/components/IAIImageFallback.tsx +++ b/invokeai/frontend/web/src/common/components/IAIImageFallback.tsx @@ -49,7 +49,7 @@ export const IAILoadingImageFallback = (props: Props) => { type IAINoImageFallbackProps = { label?: string; - icon?: As; + icon?: As | null; boxSize?: StyleProps['boxSize']; sx?: ChakraProps['sx']; }; @@ -76,7 +76,7 @@ export const IAINoContentFallback = (props: IAINoImageFallbackProps) => { ...props.sx, }} > - + {icon && } {props.label && {props.label}} ); diff --git a/invokeai/frontend/web/src/common/components/IAIMantineSearchableSelect.tsx b/invokeai/frontend/web/src/common/components/IAIMantineSearchableSelect.tsx index 2c3f5434ad..079421d4e5 100644 --- a/invokeai/frontend/web/src/common/components/IAIMantineSearchableSelect.tsx +++ b/invokeai/frontend/web/src/common/components/IAIMantineSearchableSelect.tsx @@ -53,7 +53,9 @@ const IAIMantineSearchableSelect = (props: IAISelectProps) => { // wrap onChange to clear search value on select const handleChange = useCallback( (v: string | null) => { - setSearchValue(''); + // cannot figure out why we were doing this, but it was causing an issue where if you + // select the currently-selected item, it reset the search value to empty + // setSearchValue(''); if (!onChange) { return; diff --git a/invokeai/frontend/web/src/common/components/IAISwitch.tsx b/invokeai/frontend/web/src/common/components/IAISwitch.tsx index 9803626397..da0883d77e 100644 --- a/invokeai/frontend/web/src/common/components/IAISwitch.tsx +++ b/invokeai/frontend/web/src/common/components/IAISwitch.tsx @@ -1,10 +1,13 @@ import { + Flex, FormControl, FormControlProps, + FormHelperText, FormLabel, FormLabelProps, Switch, SwitchProps, + Text, Tooltip, } from '@chakra-ui/react'; import { memo } from 'react'; @@ -15,6 +18,7 @@ export interface IAISwitchProps extends SwitchProps { formControlProps?: FormControlProps; formLabelProps?: FormLabelProps; tooltip?: string; + helperText?: string; } /** @@ -28,6 +32,7 @@ const IAISwitch = (props: IAISwitchProps) => { formControlProps, formLabelProps, tooltip, + helperText, ...rest } = props; return ( @@ -35,25 +40,33 @@ const IAISwitch = (props: IAISwitchProps) => { - {label && ( - - {label} - - )} - + + + {label && ( + + {label} + + )} + + + {helperText && ( + + {helperText} + + )} + ); diff --git a/invokeai/frontend/web/src/common/components/ImageUploader.tsx b/invokeai/frontend/web/src/common/components/ImageUploader.tsx index de347b8381..c990a9a24e 100644 --- a/invokeai/frontend/web/src/common/components/ImageUploader.tsx +++ b/invokeai/frontend/web/src/common/components/ImageUploader.tsx @@ -78,7 +78,7 @@ const ImageUploader = (props: ImageUploaderProps) => { image_category: 'user', is_intermediate: false, postUploadAction, - board_id: autoAddBoardId, + board_id: autoAddBoardId === 'none' ? undefined : autoAddBoardId, }); }, [autoAddBoardId, postUploadAction, uploadImage] diff --git a/invokeai/frontend/web/src/common/hooks/useChakraThemeTokens.ts b/invokeai/frontend/web/src/common/hooks/useChakraThemeTokens.ts index 770add7253..0afb7e7e5d 100644 --- a/invokeai/frontend/web/src/common/hooks/useChakraThemeTokens.ts +++ b/invokeai/frontend/web/src/common/hooks/useChakraThemeTokens.ts @@ -40,6 +40,44 @@ export const useChakraThemeTokens = () => { accent850, accent900, accent950, + baseAlpha50, + baseAlpha100, + baseAlpha150, + baseAlpha200, + baseAlpha250, + baseAlpha300, + baseAlpha350, + baseAlpha400, + baseAlpha450, + baseAlpha500, + baseAlpha550, + baseAlpha600, + baseAlpha650, + baseAlpha700, + baseAlpha750, + baseAlpha800, + baseAlpha850, + baseAlpha900, + baseAlpha950, + accentAlpha50, + accentAlpha100, + accentAlpha150, + accentAlpha200, + accentAlpha250, + accentAlpha300, + accentAlpha350, + accentAlpha400, + accentAlpha450, + accentAlpha500, + accentAlpha550, + accentAlpha600, + accentAlpha650, + accentAlpha700, + accentAlpha750, + accentAlpha800, + accentAlpha850, + accentAlpha900, + accentAlpha950, ] = useToken('colors', [ 'base.50', 'base.100', @@ -79,6 +117,44 @@ export const useChakraThemeTokens = () => { 'accent.850', 'accent.900', 'accent.950', + 'baseAlpha.50', + 'baseAlpha.100', + 'baseAlpha.150', + 'baseAlpha.200', + 'baseAlpha.250', + 'baseAlpha.300', + 'baseAlpha.350', + 'baseAlpha.400', + 'baseAlpha.450', + 'baseAlpha.500', + 'baseAlpha.550', + 'baseAlpha.600', + 'baseAlpha.650', + 'baseAlpha.700', + 'baseAlpha.750', + 'baseAlpha.800', + 'baseAlpha.850', + 'baseAlpha.900', + 'baseAlpha.950', + 'accentAlpha.50', + 'accentAlpha.100', + 'accentAlpha.150', + 'accentAlpha.200', + 'accentAlpha.250', + 'accentAlpha.300', + 'accentAlpha.350', + 'accentAlpha.400', + 'accentAlpha.450', + 'accentAlpha.500', + 'accentAlpha.550', + 'accentAlpha.600', + 'accentAlpha.650', + 'accentAlpha.700', + 'accentAlpha.750', + 'accentAlpha.800', + 'accentAlpha.850', + 'accentAlpha.900', + 'accentAlpha.950', ]); return { @@ -120,5 +196,43 @@ export const useChakraThemeTokens = () => { accent850, accent900, accent950, + baseAlpha50, + baseAlpha100, + baseAlpha150, + baseAlpha200, + baseAlpha250, + baseAlpha300, + baseAlpha350, + baseAlpha400, + baseAlpha450, + baseAlpha500, + baseAlpha550, + baseAlpha600, + baseAlpha650, + baseAlpha700, + baseAlpha750, + baseAlpha800, + baseAlpha850, + baseAlpha900, + baseAlpha950, + accentAlpha50, + accentAlpha100, + accentAlpha150, + accentAlpha200, + accentAlpha250, + accentAlpha300, + accentAlpha350, + accentAlpha400, + accentAlpha450, + accentAlpha500, + accentAlpha550, + accentAlpha600, + accentAlpha650, + accentAlpha700, + accentAlpha750, + accentAlpha800, + accentAlpha850, + accentAlpha900, + accentAlpha950, }; }; diff --git a/invokeai/frontend/web/src/common/hooks/useImageUploadButton.tsx b/invokeai/frontend/web/src/common/hooks/useImageUploadButton.tsx index c04c0182cd..dcbd81b2dd 100644 --- a/invokeai/frontend/web/src/common/hooks/useImageUploadButton.tsx +++ b/invokeai/frontend/web/src/common/hooks/useImageUploadButton.tsx @@ -49,7 +49,7 @@ export const useImageUploadButton = ({ image_category: 'user', is_intermediate: false, postUploadAction: postUploadAction ?? { type: 'TOAST' }, - board_id: autoAddBoardId, + board_id: autoAddBoardId === 'none' ? undefined : autoAddBoardId, }); }, [autoAddBoardId, postUploadAction, uploadImage] diff --git a/invokeai/frontend/web/src/common/util/serialize.ts b/invokeai/frontend/web/src/common/util/serialize.ts index a9352a8228..a5db921f8d 100644 --- a/invokeai/frontend/web/src/common/util/serialize.ts +++ b/invokeai/frontend/web/src/common/util/serialize.ts @@ -1,4 +1,10 @@ /** * Serialize an object to JSON and back to a new object */ -export const parseify = (obj: unknown) => JSON.parse(JSON.stringify(obj)); +export const parseify = (obj: unknown) => { + try { + return JSON.parse(JSON.stringify(obj)); + } catch { + return 'Error parsing object'; + } +}; diff --git a/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasMaskOptions.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasMaskOptions.tsx index 2f74e5542a..25ef295631 100644 --- a/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasMaskOptions.tsx +++ b/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasMaskOptions.tsx @@ -2,10 +2,11 @@ import { ButtonGroup, Flex } from '@chakra-ui/react'; import { createSelector } from '@reduxjs/toolkit'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; import IAIButton from 'common/components/IAIButton'; -import IAISimpleCheckbox from 'common/components/IAISimpleCheckbox'; import IAIColorPicker from 'common/components/IAIColorPicker'; import IAIIconButton from 'common/components/IAIIconButton'; import IAIPopover from 'common/components/IAIPopover'; +import IAISimpleCheckbox from 'common/components/IAISimpleCheckbox'; +import { canvasMaskSavedToGallery } from 'features/canvas/store/actions'; import { canvasSelector, isStagingSelector, @@ -22,7 +23,7 @@ import { isEqual } from 'lodash-es'; import { useHotkeys } from 'react-hotkeys-hook'; import { useTranslation } from 'react-i18next'; -import { FaMask, FaTrash } from 'react-icons/fa'; +import { FaMask, FaSave, FaTrash } from 'react-icons/fa'; export const selector = createSelector( [canvasSelector, isStagingSelector], @@ -102,6 +103,10 @@ const IAICanvasMaskOptions = () => { const handleToggleEnableMask = () => dispatch(setIsMaskEnabled(!isMaskEnabled)); + const handleSaveMask = async () => { + dispatch(canvasMaskSavedToGallery()); + }; + return ( { pickerColor={maskColor} onChange={(newColor) => dispatch(setMaskColor(newColor))} /> + } onClick={handleSaveMask}> + Save Mask + } onClick={handleClearMask}> {t('unifiedCanvas.clearMask')} (Shift+C) diff --git a/invokeai/frontend/web/src/features/canvas/hooks/useColorUnderCursor.ts b/invokeai/frontend/web/src/features/canvas/hooks/useColorUnderCursor.ts index 1356b24416..64289a1fd3 100644 --- a/invokeai/frontend/web/src/features/canvas/hooks/useColorUnderCursor.ts +++ b/invokeai/frontend/web/src/features/canvas/hooks/useColorUnderCursor.ts @@ -33,6 +33,10 @@ const useColorPicker = () => { 1 ).data; + if (!(a && r && g && b)) { + return; + } + dispatch(setColorPickerColor({ r, g, b, a })); }, commitColorUnderCursor: () => { diff --git a/invokeai/frontend/web/src/features/canvas/store/actions.ts b/invokeai/frontend/web/src/features/canvas/store/actions.ts index 1f491874a0..b4efa76e42 100644 --- a/invokeai/frontend/web/src/features/canvas/store/actions.ts +++ b/invokeai/frontend/web/src/features/canvas/store/actions.ts @@ -3,6 +3,10 @@ import { ImageDTO } from 'services/api/types'; export const canvasSavedToGallery = createAction('canvas/canvasSavedToGallery'); +export const canvasMaskSavedToGallery = createAction( + 'canvas/canvasMaskSavedToGallery' +); + export const canvasCopiedToClipboard = createAction( 'canvas/canvasCopiedToClipboard' ); diff --git a/invokeai/frontend/web/src/features/canvas/store/canvasSlice.ts b/invokeai/frontend/web/src/features/canvas/store/canvasSlice.ts index 3163e513e9..11f829221a 100644 --- a/invokeai/frontend/web/src/features/canvas/store/canvasSlice.ts +++ b/invokeai/frontend/web/src/features/canvas/store/canvasSlice.ts @@ -47,7 +47,7 @@ export const initialCanvasState: CanvasState = { boundingBoxCoordinates: { x: 0, y: 0 }, boundingBoxDimensions: { width: 512, height: 512 }, boundingBoxPreviewFill: { r: 0, g: 0, b: 0, a: 0.5 }, - boundingBoxScaleMethod: 'auto', + boundingBoxScaleMethod: 'none', brushColor: { r: 90, g: 90, b: 255, a: 1 }, brushSize: 50, canvasContainerDimensions: { width: 0, height: 0 }, @@ -727,10 +727,13 @@ export const canvasSlice = createSlice({ state.pastLayerStates.shift(); } - state.layerState.objects.push({ - ...images[selectedImageIndex], - }); + const imageToCommit = images[selectedImageIndex]; + if (imageToCommit) { + state.layerState.objects.push({ + ...imageToCommit, + }); + } state.layerState.stagingArea = { ...initialLayerState.stagingArea, }; diff --git a/invokeai/frontend/web/src/features/canvas/store/canvasTypes.ts b/invokeai/frontend/web/src/features/canvas/store/canvasTypes.ts index ba85a7e132..f2ba90b050 100644 --- a/invokeai/frontend/web/src/features/canvas/store/canvasTypes.ts +++ b/invokeai/frontend/web/src/features/canvas/store/canvasTypes.ts @@ -11,9 +11,9 @@ export const LAYER_NAMES = ['base', 'mask'] as const; export type CanvasLayer = (typeof LAYER_NAMES)[number]; export const BOUNDING_BOX_SCALES_DICT = [ + { label: 'None', value: 'none' }, { label: 'Auto', value: 'auto' }, { label: 'Manual', value: 'manual' }, - { label: 'None', value: 'none' }, ]; export const BOUNDING_BOX_SCALES = ['none', 'auto', 'manual'] as const; diff --git a/invokeai/frontend/web/src/features/changeBoardModal/components/ChangeBoardModal.tsx b/invokeai/frontend/web/src/features/changeBoardModal/components/ChangeBoardModal.tsx new file mode 100644 index 0000000000..2443fa6081 --- /dev/null +++ b/invokeai/frontend/web/src/features/changeBoardModal/components/ChangeBoardModal.tsx @@ -0,0 +1,132 @@ +import { + AlertDialog, + AlertDialogBody, + AlertDialogContent, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogOverlay, + Flex, + Text, +} from '@chakra-ui/react'; +import { createSelector } from '@reduxjs/toolkit'; +import { stateSelector } from 'app/store/store'; +import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; +import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; +import IAIButton from 'common/components/IAIButton'; +import IAIMantineSearchableSelect from 'common/components/IAIMantineSearchableSelect'; +import { memo, useCallback, useMemo, useRef, useState } from 'react'; +import { useListAllBoardsQuery } from 'services/api/endpoints/boards'; +import { + useAddImagesToBoardMutation, + useRemoveImagesFromBoardMutation, +} from 'services/api/endpoints/images'; +import { changeBoardReset, isModalOpenChanged } from '../store/slice'; + +const selector = createSelector( + [stateSelector], + ({ changeBoardModal }) => { + const { isModalOpen, imagesToChange } = changeBoardModal; + + return { + isModalOpen, + imagesToChange, + }; + }, + defaultSelectorOptions +); + +const ChangeBoardModal = () => { + const dispatch = useAppDispatch(); + const [selectedBoard, setSelectedBoard] = useState(); + const { data: boards, isFetching } = useListAllBoardsQuery(); + const { imagesToChange, isModalOpen } = useAppSelector(selector); + const [addImagesToBoard] = useAddImagesToBoardMutation(); + const [removeImagesFromBoard] = useRemoveImagesFromBoardMutation(); + + const data = useMemo(() => { + const data: { label: string; value: string }[] = [ + { label: 'Uncategorized', value: 'none' }, + ]; + (boards ?? []).forEach((board) => + data.push({ + label: board.board_name, + value: board.board_id, + }) + ); + + return data; + }, [boards]); + + const handleClose = useCallback(() => { + dispatch(changeBoardReset()); + dispatch(isModalOpenChanged(false)); + }, [dispatch]); + + const handleChangeBoard = useCallback(() => { + if (!imagesToChange.length || !selectedBoard) { + return; + } + + if (selectedBoard === 'none') { + removeImagesFromBoard({ imageDTOs: imagesToChange }); + } else { + addImagesToBoard({ + imageDTOs: imagesToChange, + board_id: selectedBoard, + }); + } + setSelectedBoard(null); + dispatch(changeBoardReset()); + }, [ + addImagesToBoard, + dispatch, + imagesToChange, + removeImagesFromBoard, + selectedBoard, + ]); + + const cancelRef = useRef(null); + + return ( + + + + + Change Board + + + + + + Moving {`${imagesToChange.length}`} image + {`${imagesToChange.length > 1 ? 's' : ''}`} to board: + + setSelectedBoard(v)} + value={selectedBoard} + data={data} + /> + + + + + Cancel + + + Move + + + + + + ); +}; + +export default memo(ChangeBoardModal); diff --git a/invokeai/frontend/web/src/features/changeBoardModal/store/initialState.ts b/invokeai/frontend/web/src/features/changeBoardModal/store/initialState.ts new file mode 100644 index 0000000000..d737d0cdcd --- /dev/null +++ b/invokeai/frontend/web/src/features/changeBoardModal/store/initialState.ts @@ -0,0 +1,6 @@ +import { ChangeBoardModalState } from './types'; + +export const initialState: ChangeBoardModalState = { + isModalOpen: false, + imagesToChange: [], +}; diff --git a/invokeai/frontend/web/src/features/changeBoardModal/store/slice.ts b/invokeai/frontend/web/src/features/changeBoardModal/store/slice.ts new file mode 100644 index 0000000000..9855e2d7dd --- /dev/null +++ b/invokeai/frontend/web/src/features/changeBoardModal/store/slice.ts @@ -0,0 +1,25 @@ +import { PayloadAction, createSlice } from '@reduxjs/toolkit'; +import { ImageDTO } from 'services/api/types'; +import { initialState } from './initialState'; + +const changeBoardModal = createSlice({ + name: 'changeBoardModal', + initialState, + reducers: { + isModalOpenChanged: (state, action: PayloadAction) => { + state.isModalOpen = action.payload; + }, + imagesToChangeSelected: (state, action: PayloadAction) => { + state.imagesToChange = action.payload; + }, + changeBoardReset: (state) => { + state.imagesToChange = []; + state.isModalOpen = false; + }, + }, +}); + +export const { isModalOpenChanged, imagesToChangeSelected, changeBoardReset } = + changeBoardModal.actions; + +export default changeBoardModal.reducer; diff --git a/invokeai/frontend/web/src/features/changeBoardModal/store/types.ts b/invokeai/frontend/web/src/features/changeBoardModal/store/types.ts new file mode 100644 index 0000000000..6ce13331d0 --- /dev/null +++ b/invokeai/frontend/web/src/features/changeBoardModal/store/types.ts @@ -0,0 +1,6 @@ +import { ImageDTO } from 'services/api/types'; + +export type ChangeBoardModalState = { + isModalOpen: boolean; + imagesToChange: ImageDTO[]; +}; diff --git a/invokeai/frontend/web/src/features/controlNet/components/ControlNet.tsx b/invokeai/frontend/web/src/features/controlNet/components/ControlNet.tsx index d858e46fdb..3252207edc 100644 --- a/invokeai/frontend/web/src/features/controlNet/components/ControlNet.tsx +++ b/invokeai/frontend/web/src/features/controlNet/components/ControlNet.tsx @@ -3,6 +3,7 @@ import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; import { memo, useCallback } from 'react'; import { FaCopy, FaTrash } from 'react-icons/fa'; import { + ControlNetConfig, controlNetDuplicated, controlNetRemoved, controlNetToggled, @@ -27,18 +28,27 @@ import ParamControlNetProcessorSelect from './parameters/ParamControlNetProcesso import ParamControlNetResizeMode from './parameters/ParamControlNetResizeMode'; type ControlNetProps = { - controlNetId: string; + controlNet: ControlNetConfig; }; const ControlNet = (props: ControlNetProps) => { - const { controlNetId } = props; + const { controlNet } = props; + const { controlNetId } = controlNet; const dispatch = useAppDispatch(); const selector = createSelector( stateSelector, ({ controlNet }) => { - const { isEnabled, shouldAutoConfig } = - controlNet.controlNets[controlNetId]; + const cn = controlNet.controlNets[controlNetId]; + + if (!cn) { + return { + isEnabled: false, + shouldAutoConfig: false, + }; + } + + const { isEnabled, shouldAutoConfig } = cn; return { isEnabled, shouldAutoConfig }; }, @@ -96,7 +106,7 @@ const ControlNet = (props: ControlNetProps) => { transitionDuration: '0.1s', }} > - + { justifyContent: 'space-between', }} > - - + + {!isExpanded && ( { aspectRatio: '1/1', }} > - + )} - - + + - + {isExpanded && ( <> - - - + + + )} diff --git a/invokeai/frontend/web/src/features/controlNet/components/ControlNetImagePreview.tsx b/invokeai/frontend/web/src/features/controlNet/components/ControlNetImagePreview.tsx index 859495a941..0683282811 100644 --- a/invokeai/frontend/web/src/features/controlNet/components/ControlNetImagePreview.tsx +++ b/invokeai/frontend/web/src/features/controlNet/components/ControlNetImagePreview.tsx @@ -4,58 +4,51 @@ import { skipToken } from '@reduxjs/toolkit/dist/query'; import { TypesafeDraggableData, TypesafeDroppableData, -} from 'app/components/ImageDnd/typesafeDnd'; +} from 'features/dnd/types'; import { stateSelector } from 'app/store/store'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; import IAIDndImage from 'common/components/IAIDndImage'; import { memo, useCallback, useMemo, useState } from 'react'; +import { FaUndo } from 'react-icons/fa'; import { useGetImageDTOQuery } from 'services/api/endpoints/images'; import { PostUploadAction } from 'services/api/types'; -import { controlNetImageChanged } from '../store/controlNetSlice'; +import IAIDndImageIcon from '../../../common/components/IAIDndImageIcon'; +import { + ControlNetConfig, + controlNetImageChanged, +} from '../store/controlNetSlice'; type Props = { - controlNetId: string; + controlNet: ControlNetConfig; height: SystemStyleObject['h']; }; +const selector = createSelector( + stateSelector, + ({ controlNet }) => { + const { pendingControlImages } = controlNet; + + return { + pendingControlImages, + }; + }, + defaultSelectorOptions +); + const ControlNetImagePreview = (props: Props) => { - const { height, controlNetId } = props; + const { height } = props; + const { + controlImage: controlImageName, + processedControlImage: processedControlImageName, + processorType, + isEnabled, + controlNetId, + } = props.controlNet; + const dispatch = useAppDispatch(); - const selector = useMemo( - () => - createSelector( - stateSelector, - ({ controlNet }) => { - const { pendingControlImages } = controlNet; - const { - controlImage, - processedControlImage, - processorType, - isEnabled, - } = controlNet.controlNets[controlNetId]; - - return { - controlImageName: controlImage, - processedControlImageName: processedControlImage, - processorType, - isEnabled, - pendingControlImages, - }; - }, - defaultSelectorOptions - ), - [controlNetId] - ); - - const { - controlImageName, - processedControlImageName, - processorType, - pendingControlImages, - isEnabled, - } = useAppSelector(selector); + const { pendingControlImages } = useAppSelector(selector); const [isMouseOverImage, setIsMouseOverImage] = useState(false); @@ -128,11 +121,15 @@ const ControlNetImagePreview = (props: Props) => { droppableData={droppableData} imageDTO={controlImage} isDropDisabled={shouldShowProcessedImage || !isEnabled} - onClickReset={handleResetControlImage} postUploadAction={postUploadAction} - resetTooltip="Reset Control Image" - withResetIcon={Boolean(controlImage)} - /> + > + : undefined} + tooltip="Reset Control Image" + /> + + { imageDTO={processedControlImage} isUploadDisabled={true} isDropDisabled={!isEnabled} - onClickReset={handleResetControlImage} - resetTooltip="Reset Control Image" - withResetIcon={Boolean(controlImage)} - /> + > + : undefined} + tooltip="Reset Control Image" + /> + {pendingControlImages.includes(controlNetId) && ( { - const { controlNetId } = props; - - const selector = useMemo( - () => - createSelector( - stateSelector, - ({ controlNet }) => { - const { isEnabled, processorNode } = - controlNet.controlNets[controlNetId]; - - return { isEnabled, processorNode }; - }, - defaultSelectorOptions - ), - [controlNetId] - ); - - const { isEnabled, processorNode } = useAppSelector(selector); + const { controlNetId, isEnabled, processorNode } = props.controlNet; if (processorNode.type === 'canny_image_processor') { return ( diff --git a/invokeai/frontend/web/src/features/controlNet/components/ParamControlNetShouldAutoConfig.tsx b/invokeai/frontend/web/src/features/controlNet/components/ParamControlNetShouldAutoConfig.tsx index 285fcf7b80..0e044d4575 100644 --- a/invokeai/frontend/web/src/features/controlNet/components/ParamControlNetShouldAutoConfig.tsx +++ b/invokeai/frontend/web/src/features/controlNet/components/ParamControlNetShouldAutoConfig.tsx @@ -1,34 +1,19 @@ -import { createSelector } from '@reduxjs/toolkit'; -import { stateSelector } from 'app/store/store'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; -import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; import IAISwitch from 'common/components/IAISwitch'; -import { controlNetAutoConfigToggled } from 'features/controlNet/store/controlNetSlice'; +import { + ControlNetConfig, + controlNetAutoConfigToggled, +} from 'features/controlNet/store/controlNetSlice'; import { selectIsBusy } from 'features/system/store/systemSelectors'; -import { memo, useCallback, useMemo } from 'react'; +import { memo, useCallback } from 'react'; type Props = { - controlNetId: string; + controlNet: ControlNetConfig; }; const ParamControlNetShouldAutoConfig = (props: Props) => { - const { controlNetId } = props; + const { controlNetId, isEnabled, shouldAutoConfig } = props.controlNet; const dispatch = useAppDispatch(); - const selector = useMemo( - () => - createSelector( - stateSelector, - ({ controlNet }) => { - const { isEnabled, shouldAutoConfig } = - controlNet.controlNets[controlNetId]; - return { isEnabled, shouldAutoConfig }; - }, - defaultSelectorOptions - ), - [controlNetId] - ); - - const { isEnabled, shouldAutoConfig } = useAppSelector(selector); const isBusy = useAppSelector(selectIsBusy); const handleShouldAutoConfigChanged = useCallback(() => { diff --git a/invokeai/frontend/web/src/features/controlNet/components/parameters/ParamControlNetBeginEnd.tsx b/invokeai/frontend/web/src/features/controlNet/components/parameters/ParamControlNetBeginEnd.tsx index 3dd420e7c9..1219239e5d 100644 --- a/invokeai/frontend/web/src/features/controlNet/components/parameters/ParamControlNetBeginEnd.tsx +++ b/invokeai/frontend/web/src/features/controlNet/components/parameters/ParamControlNetBeginEnd.tsx @@ -9,48 +9,39 @@ import { RangeSliderTrack, Tooltip, } from '@chakra-ui/react'; -import { createSelector } from '@reduxjs/toolkit'; -import { stateSelector } from 'app/store/store'; -import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; -import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; +import { useAppDispatch } from 'app/store/storeHooks'; import { + ControlNetConfig, controlNetBeginStepPctChanged, controlNetEndStepPctChanged, } from 'features/controlNet/store/controlNetSlice'; -import { memo, useCallback, useMemo } from 'react'; +import { memo, useCallback } from 'react'; type Props = { - controlNetId: string; + controlNet: ControlNetConfig; }; const formatPct = (v: number) => `${Math.round(v * 100)}%`; const ParamControlNetBeginEnd = (props: Props) => { - const { controlNetId } = props; + const { beginStepPct, endStepPct, isEnabled, controlNetId } = + props.controlNet; const dispatch = useAppDispatch(); - const selector = useMemo( - () => - createSelector( - stateSelector, - ({ controlNet }) => { - const { beginStepPct, endStepPct, isEnabled } = - controlNet.controlNets[controlNetId]; - return { beginStepPct, endStepPct, isEnabled }; - }, - defaultSelectorOptions - ), - [controlNetId] - ); - - const { beginStepPct, endStepPct, isEnabled } = useAppSelector(selector); - const handleStepPctChanged = useCallback( (v: number[]) => { dispatch( - controlNetBeginStepPctChanged({ controlNetId, beginStepPct: v[0] }) + controlNetBeginStepPctChanged({ + controlNetId, + beginStepPct: v[0] as number, + }) + ); + dispatch( + controlNetEndStepPctChanged({ + controlNetId, + endStepPct: v[1] as number, + }) ); - dispatch(controlNetEndStepPctChanged({ controlNetId, endStepPct: v[1] })); }, [controlNetId, dispatch] ); diff --git a/invokeai/frontend/web/src/features/controlNet/components/parameters/ParamControlNetControlMode.tsx b/invokeai/frontend/web/src/features/controlNet/components/parameters/ParamControlNetControlMode.tsx index e644e24a02..761edde42b 100644 --- a/invokeai/frontend/web/src/features/controlNet/components/parameters/ParamControlNetControlMode.tsx +++ b/invokeai/frontend/web/src/features/controlNet/components/parameters/ParamControlNetControlMode.tsx @@ -1,16 +1,14 @@ -import { createSelector } from '@reduxjs/toolkit'; -import { stateSelector } from 'app/store/store'; -import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; -import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; +import { useAppDispatch } from 'app/store/storeHooks'; import IAIMantineSelect from 'common/components/IAIMantineSelect'; import { ControlModes, + ControlNetConfig, controlNetControlModeChanged, } from 'features/controlNet/store/controlNetSlice'; -import { useCallback, useMemo } from 'react'; +import { useCallback } from 'react'; type ParamControlNetControlModeProps = { - controlNetId: string; + controlNet: ControlNetConfig; }; const CONTROL_MODE_DATA = [ @@ -23,23 +21,8 @@ const CONTROL_MODE_DATA = [ export default function ParamControlNetControlMode( props: ParamControlNetControlModeProps ) { - const { controlNetId } = props; + const { controlMode, isEnabled, controlNetId } = props.controlNet; const dispatch = useAppDispatch(); - const selector = useMemo( - () => - createSelector( - stateSelector, - ({ controlNet }) => { - const { controlMode, isEnabled } = - controlNet.controlNets[controlNetId]; - return { controlMode, isEnabled }; - }, - defaultSelectorOptions - ), - [controlNetId] - ); - - const { controlMode, isEnabled } = useAppSelector(selector); const handleControlModeChange = useCallback( (controlMode: ControlModes) => { diff --git a/invokeai/frontend/web/src/features/controlNet/components/parameters/ParamControlNetModel.tsx b/invokeai/frontend/web/src/features/controlNet/components/parameters/ParamControlNetModel.tsx index 8392bdd2e3..5d7db854d8 100644 --- a/invokeai/frontend/web/src/features/controlNet/components/parameters/ParamControlNetModel.tsx +++ b/invokeai/frontend/web/src/features/controlNet/components/parameters/ParamControlNetModel.tsx @@ -5,7 +5,10 @@ import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; import IAIMantineSearchableSelect from 'common/components/IAIMantineSearchableSelect'; import IAIMantineSelectItemWithTooltip from 'common/components/IAIMantineSelectItemWithTooltip'; -import { controlNetModelChanged } from 'features/controlNet/store/controlNetSlice'; +import { + ControlNetConfig, + controlNetModelChanged, +} from 'features/controlNet/store/controlNetSlice'; import { MODEL_TYPE_MAP } from 'features/parameters/types/constants'; import { modelIdToControlNetModelParam } from 'features/parameters/util/modelIdToControlNetModelParam'; import { selectIsBusy } from 'features/system/store/systemSelectors'; @@ -14,30 +17,24 @@ import { memo, useCallback, useMemo } from 'react'; import { useGetControlNetModelsQuery } from 'services/api/endpoints/models'; type ParamControlNetModelProps = { - controlNetId: string; + controlNet: ControlNetConfig; }; +const selector = createSelector( + stateSelector, + ({ generation }) => { + const { model } = generation; + return { mainModel: model }; + }, + defaultSelectorOptions +); + const ParamControlNetModel = (props: ParamControlNetModelProps) => { - const { controlNetId } = props; + const { controlNetId, model: controlNetModel, isEnabled } = props.controlNet; const dispatch = useAppDispatch(); const isBusy = useAppSelector(selectIsBusy); - const selector = useMemo( - () => - createSelector( - stateSelector, - ({ generation, controlNet }) => { - const { model } = generation; - const controlNetModel = controlNet.controlNets[controlNetId]?.model; - const isEnabled = controlNet.controlNets[controlNetId]?.isEnabled; - return { mainModel: model, controlNetModel, isEnabled }; - }, - defaultSelectorOptions - ), - [controlNetId] - ); - - const { mainModel, controlNetModel, isEnabled } = useAppSelector(selector); + const { mainModel } = useAppSelector(selector); const { data: controlNetModels } = useGetControlNetModelsQuery(); diff --git a/invokeai/frontend/web/src/features/controlNet/components/parameters/ParamControlNetProcessorSelect.tsx b/invokeai/frontend/web/src/features/controlNet/components/parameters/ParamControlNetProcessorSelect.tsx index 83c66363ac..190b1bc012 100644 --- a/invokeai/frontend/web/src/features/controlNet/components/parameters/ParamControlNetProcessorSelect.tsx +++ b/invokeai/frontend/web/src/features/controlNet/components/parameters/ParamControlNetProcessorSelect.tsx @@ -1,7 +1,6 @@ import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; import { createSelector } from '@reduxjs/toolkit'; -import { stateSelector } from 'app/store/store'; import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; import IAIMantineSearchableSelect, { IAISelectDataType, @@ -9,13 +8,16 @@ import IAIMantineSearchableSelect, { import { configSelector } from 'features/system/store/configSelectors'; import { selectIsBusy } from 'features/system/store/systemSelectors'; import { map } from 'lodash-es'; -import { memo, useCallback, useMemo } from 'react'; +import { memo, useCallback } from 'react'; import { CONTROLNET_PROCESSORS } from '../../store/constants'; -import { controlNetProcessorTypeChanged } from '../../store/controlNetSlice'; +import { + ControlNetConfig, + controlNetProcessorTypeChanged, +} from '../../store/controlNetSlice'; import { ControlNetProcessorType } from '../../store/types'; type ParamControlNetProcessorSelectProps = { - controlNetId: string; + controlNet: ControlNetConfig; }; const selector = createSelector( @@ -52,23 +54,9 @@ const ParamControlNetProcessorSelect = ( props: ParamControlNetProcessorSelectProps ) => { const dispatch = useAppDispatch(); - const { controlNetId } = props; - const processorNodeSelector = useMemo( - () => - createSelector( - stateSelector, - ({ controlNet }) => { - const { isEnabled, processorNode } = - controlNet.controlNets[controlNetId]; - return { isEnabled, processorNode }; - }, - defaultSelectorOptions - ), - [controlNetId] - ); + const { controlNetId, isEnabled, processorNode } = props.controlNet; const isBusy = useAppSelector(selectIsBusy); const controlNetProcessors = useAppSelector(selector); - const { isEnabled, processorNode } = useAppSelector(processorNodeSelector); const handleProcessorTypeChanged = useCallback( (v: string | null) => { diff --git a/invokeai/frontend/web/src/features/controlNet/components/parameters/ParamControlNetResizeMode.tsx b/invokeai/frontend/web/src/features/controlNet/components/parameters/ParamControlNetResizeMode.tsx index ee04b8077f..72f15fb178 100644 --- a/invokeai/frontend/web/src/features/controlNet/components/parameters/ParamControlNetResizeMode.tsx +++ b/invokeai/frontend/web/src/features/controlNet/components/parameters/ParamControlNetResizeMode.tsx @@ -1,16 +1,14 @@ -import { createSelector } from '@reduxjs/toolkit'; -import { stateSelector } from 'app/store/store'; -import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; -import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; +import { useAppDispatch } from 'app/store/storeHooks'; import IAIMantineSelect from 'common/components/IAIMantineSelect'; import { + ControlNetConfig, ResizeModes, controlNetResizeModeChanged, } from 'features/controlNet/store/controlNetSlice'; -import { useCallback, useMemo } from 'react'; +import { useCallback } from 'react'; type ParamControlNetResizeModeProps = { - controlNetId: string; + controlNet: ControlNetConfig; }; const RESIZE_MODE_DATA = [ @@ -22,23 +20,8 @@ const RESIZE_MODE_DATA = [ export default function ParamControlNetResizeMode( props: ParamControlNetResizeModeProps ) { - const { controlNetId } = props; + const { resizeMode, isEnabled, controlNetId } = props.controlNet; const dispatch = useAppDispatch(); - const selector = useMemo( - () => - createSelector( - stateSelector, - ({ controlNet }) => { - const { resizeMode, isEnabled } = - controlNet.controlNets[controlNetId]; - return { resizeMode, isEnabled }; - }, - defaultSelectorOptions - ), - [controlNetId] - ); - - const { resizeMode, isEnabled } = useAppSelector(selector); const handleResizeModeChange = useCallback( (resizeMode: ResizeModes) => { diff --git a/invokeai/frontend/web/src/features/controlNet/components/parameters/ParamControlNetWeight.tsx b/invokeai/frontend/web/src/features/controlNet/components/parameters/ParamControlNetWeight.tsx index 8643fd7dad..c08283e1f9 100644 --- a/invokeai/frontend/web/src/features/controlNet/components/parameters/ParamControlNetWeight.tsx +++ b/invokeai/frontend/web/src/features/controlNet/components/parameters/ParamControlNetWeight.tsx @@ -1,32 +1,18 @@ -import { createSelector } from '@reduxjs/toolkit'; -import { stateSelector } from 'app/store/store'; -import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; -import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; +import { useAppDispatch } from 'app/store/storeHooks'; import IAISlider from 'common/components/IAISlider'; -import { controlNetWeightChanged } from 'features/controlNet/store/controlNetSlice'; -import { memo, useCallback, useMemo } from 'react'; +import { + ControlNetConfig, + controlNetWeightChanged, +} from 'features/controlNet/store/controlNetSlice'; +import { memo, useCallback } from 'react'; type ParamControlNetWeightProps = { - controlNetId: string; + controlNet: ControlNetConfig; }; const ParamControlNetWeight = (props: ParamControlNetWeightProps) => { - const { controlNetId } = props; + const { weight, isEnabled, controlNetId } = props.controlNet; const dispatch = useAppDispatch(); - const selector = useMemo( - () => - createSelector( - stateSelector, - ({ controlNet }) => { - const { weight, isEnabled } = controlNet.controlNets[controlNetId]; - return { weight, isEnabled }; - }, - defaultSelectorOptions - ), - [controlNetId] - ); - - const { weight, isEnabled } = useAppSelector(selector); const handleWeightChanged = useCallback( (weight: number) => { dispatch(controlNetWeightChanged({ controlNetId, weight })); diff --git a/invokeai/frontend/web/src/features/controlNet/store/constants.ts b/invokeai/frontend/web/src/features/controlNet/store/constants.ts index 00f5377e00..f8f9c38619 100644 --- a/invokeai/frontend/web/src/features/controlNet/store/constants.ts +++ b/invokeai/frontend/web/src/features/controlNet/store/constants.ts @@ -4,7 +4,7 @@ import { } from './types'; type ControlNetProcessorsDict = Record< - string, + ControlNetProcessorType, { type: ControlNetProcessorType | 'none'; label: string; diff --git a/invokeai/frontend/web/src/features/controlNet/store/controlNetSlice.ts b/invokeai/frontend/web/src/features/controlNet/store/controlNetSlice.ts index 0df907d463..8f391521d6 100644 --- a/invokeai/frontend/web/src/features/controlNet/store/controlNetSlice.ts +++ b/invokeai/frontend/web/src/features/controlNet/store/controlNetSlice.ts @@ -96,8 +96,11 @@ export const controlNetSlice = createSlice({ }> ) => { const { sourceControlNetId, newControlNetId } = action.payload; - - const newControlnet = cloneDeep(state.controlNets[sourceControlNetId]); + const oldControlNet = state.controlNets[sourceControlNetId]; + if (!oldControlNet) { + return; + } + const newControlnet = cloneDeep(oldControlNet); newControlnet.controlNetId = newControlNetId; state.controlNets[newControlNetId] = newControlnet; }, @@ -124,8 +127,11 @@ export const controlNetSlice = createSlice({ action: PayloadAction<{ controlNetId: string }> ) => { const { controlNetId } = action.payload; - state.controlNets[controlNetId].isEnabled = - !state.controlNets[controlNetId].isEnabled; + const cn = state.controlNets[controlNetId]; + if (!cn) { + return; + } + cn.isEnabled = !cn.isEnabled; }, controlNetImageChanged: ( state, @@ -135,12 +141,14 @@ export const controlNetSlice = createSlice({ }> ) => { const { controlNetId, controlImage } = action.payload; - state.controlNets[controlNetId].controlImage = controlImage; - state.controlNets[controlNetId].processedControlImage = null; - if ( - controlImage !== null && - state.controlNets[controlNetId].processorType !== 'none' - ) { + const cn = state.controlNets[controlNetId]; + if (!cn) { + return; + } + + cn.controlImage = controlImage; + cn.processedControlImage = null; + if (controlImage !== null && cn.processorType !== 'none') { state.pendingControlImages.push(controlNetId); } }, @@ -152,8 +160,12 @@ export const controlNetSlice = createSlice({ }> ) => { const { controlNetId, processedControlImage } = action.payload; - state.controlNets[controlNetId].processedControlImage = - processedControlImage; + const cn = state.controlNets[controlNetId]; + if (!cn) { + return; + } + + cn.processedControlImage = processedControlImage; state.pendingControlImages = state.pendingControlImages.filter( (id) => id !== controlNetId ); @@ -166,10 +178,15 @@ export const controlNetSlice = createSlice({ }> ) => { const { controlNetId, model } = action.payload; - state.controlNets[controlNetId].model = model; - state.controlNets[controlNetId].processedControlImage = null; + const cn = state.controlNets[controlNetId]; + if (!cn) { + return; + } - if (state.controlNets[controlNetId].shouldAutoConfig) { + cn.model = model; + cn.processedControlImage = null; + + if (cn.shouldAutoConfig) { let processorType: ControlNetProcessorType | undefined = undefined; for (const modelSubstring in CONTROLNET_MODEL_DEFAULT_PROCESSORS) { @@ -180,14 +197,13 @@ export const controlNetSlice = createSlice({ } if (processorType) { - state.controlNets[controlNetId].processorType = processorType; - state.controlNets[controlNetId].processorNode = CONTROLNET_PROCESSORS[ - processorType - ].default as RequiredControlNetProcessorNode; + cn.processorType = processorType; + cn.processorNode = CONTROLNET_PROCESSORS[processorType] + .default as RequiredControlNetProcessorNode; } else { - state.controlNets[controlNetId].processorType = 'none'; - state.controlNets[controlNetId].processorNode = CONTROLNET_PROCESSORS - .none.default as RequiredControlNetProcessorNode; + cn.processorType = 'none'; + cn.processorNode = CONTROLNET_PROCESSORS.none + .default as RequiredControlNetProcessorNode; } } }, @@ -196,28 +212,48 @@ export const controlNetSlice = createSlice({ action: PayloadAction<{ controlNetId: string; weight: number }> ) => { const { controlNetId, weight } = action.payload; - state.controlNets[controlNetId].weight = weight; + const cn = state.controlNets[controlNetId]; + if (!cn) { + return; + } + + cn.weight = weight; }, controlNetBeginStepPctChanged: ( state, action: PayloadAction<{ controlNetId: string; beginStepPct: number }> ) => { const { controlNetId, beginStepPct } = action.payload; - state.controlNets[controlNetId].beginStepPct = beginStepPct; + const cn = state.controlNets[controlNetId]; + if (!cn) { + return; + } + + cn.beginStepPct = beginStepPct; }, controlNetEndStepPctChanged: ( state, action: PayloadAction<{ controlNetId: string; endStepPct: number }> ) => { const { controlNetId, endStepPct } = action.payload; - state.controlNets[controlNetId].endStepPct = endStepPct; + const cn = state.controlNets[controlNetId]; + if (!cn) { + return; + } + + cn.endStepPct = endStepPct; }, controlNetControlModeChanged: ( state, action: PayloadAction<{ controlNetId: string; controlMode: ControlModes }> ) => { const { controlNetId, controlMode } = action.payload; - state.controlNets[controlNetId].controlMode = controlMode; + const cn = state.controlNets[controlNetId]; + if (!cn) { + return; + } + + cn.controlMode = controlMode; }, controlNetResizeModeChanged: ( state, @@ -227,7 +263,12 @@ export const controlNetSlice = createSlice({ }> ) => { const { controlNetId, resizeMode } = action.payload; - state.controlNets[controlNetId].resizeMode = resizeMode; + const cn = state.controlNets[controlNetId]; + if (!cn) { + return; + } + + cn.resizeMode = resizeMode; }, controlNetProcessorParamsChanged: ( state, @@ -240,12 +281,17 @@ export const controlNetSlice = createSlice({ }> ) => { const { controlNetId, changes } = action.payload; - const processorNode = state.controlNets[controlNetId].processorNode; - state.controlNets[controlNetId].processorNode = { + const cn = state.controlNets[controlNetId]; + if (!cn) { + return; + } + + const processorNode = cn.processorNode; + cn.processorNode = { ...processorNode, ...changes, }; - state.controlNets[controlNetId].shouldAutoConfig = false; + cn.shouldAutoConfig = false; }, controlNetProcessorTypeChanged: ( state, @@ -255,12 +301,16 @@ export const controlNetSlice = createSlice({ }> ) => { const { controlNetId, processorType } = action.payload; - state.controlNets[controlNetId].processedControlImage = null; - state.controlNets[controlNetId].processorType = processorType; - state.controlNets[controlNetId].processorNode = CONTROLNET_PROCESSORS[ - processorType - ].default as RequiredControlNetProcessorNode; - state.controlNets[controlNetId].shouldAutoConfig = false; + const cn = state.controlNets[controlNetId]; + if (!cn) { + return; + } + + cn.processedControlImage = null; + cn.processorType = processorType; + cn.processorNode = CONTROLNET_PROCESSORS[processorType] + .default as RequiredControlNetProcessorNode; + cn.shouldAutoConfig = false; }, controlNetAutoConfigToggled: ( state, @@ -269,37 +319,36 @@ export const controlNetSlice = createSlice({ }> ) => { const { controlNetId } = action.payload; - const newShouldAutoConfig = - !state.controlNets[controlNetId].shouldAutoConfig; + const cn = state.controlNets[controlNetId]; + if (!cn) { + return; + } + + const newShouldAutoConfig = !cn.shouldAutoConfig; if (newShouldAutoConfig) { // manage the processor for the user let processorType: ControlNetProcessorType | undefined = undefined; for (const modelSubstring in CONTROLNET_MODEL_DEFAULT_PROCESSORS) { - if ( - state.controlNets[controlNetId].model?.model_name.includes( - modelSubstring - ) - ) { + if (cn.model?.model_name.includes(modelSubstring)) { processorType = CONTROLNET_MODEL_DEFAULT_PROCESSORS[modelSubstring]; break; } } if (processorType) { - state.controlNets[controlNetId].processorType = processorType; - state.controlNets[controlNetId].processorNode = CONTROLNET_PROCESSORS[ - processorType - ].default as RequiredControlNetProcessorNode; + cn.processorType = processorType; + cn.processorNode = CONTROLNET_PROCESSORS[processorType] + .default as RequiredControlNetProcessorNode; } else { - state.controlNets[controlNetId].processorType = 'none'; - state.controlNets[controlNetId].processorNode = CONTROLNET_PROCESSORS - .none.default as RequiredControlNetProcessorNode; + cn.processorType = 'none'; + cn.processorNode = CONTROLNET_PROCESSORS.none + .default as RequiredControlNetProcessorNode; } } - state.controlNets[controlNetId].shouldAutoConfig = newShouldAutoConfig; + cn.shouldAutoConfig = newShouldAutoConfig; }, controlNetReset: () => { return { ...initialControlNetState }; @@ -307,9 +356,11 @@ export const controlNetSlice = createSlice({ }, extraReducers: (builder) => { builder.addCase(controlNetImageProcessed, (state, action) => { - if ( - state.controlNets[action.payload.controlNetId].controlImage !== null - ) { + const cn = state.controlNets[action.payload.controlNetId]; + if (!cn) { + return; + } + if (cn.controlImage !== null) { state.pendingControlImages.push(action.payload.controlNetId); } }); diff --git a/invokeai/frontend/web/src/features/controlNet/store/types.ts b/invokeai/frontend/web/src/features/controlNet/store/types.ts index 2d028fd0bb..80edb41699 100644 --- a/invokeai/frontend/web/src/features/controlNet/store/types.ts +++ b/invokeai/frontend/web/src/features/controlNet/store/types.ts @@ -138,7 +138,7 @@ export type RequiredZoeDepthImageProcessorInvocation = O.Required< /** * Any ControlNet Processor node, with its parameters flagged as required */ -export type RequiredControlNetProcessorNode = +export type RequiredControlNetProcessorNode = O.Required< | RequiredCannyImageProcessorInvocation | RequiredContentShuffleImageProcessorInvocation | RequiredHedImageProcessorInvocation @@ -150,7 +150,9 @@ export type RequiredControlNetProcessorNode = | RequiredNormalbaeImageProcessorInvocation | RequiredOpenposeImageProcessorInvocation | RequiredPidiImageProcessorInvocation - | RequiredZoeDepthImageProcessorInvocation; + | RequiredZoeDepthImageProcessorInvocation, + 'id' +>; /** * Type guard for CannyImageProcessorInvocation diff --git a/invokeai/frontend/web/src/features/imageDeletion/components/DeleteImageButton.tsx b/invokeai/frontend/web/src/features/deleteImageModal/components/DeleteImageButton.tsx similarity index 100% rename from invokeai/frontend/web/src/features/imageDeletion/components/DeleteImageButton.tsx rename to invokeai/frontend/web/src/features/deleteImageModal/components/DeleteImageButton.tsx diff --git a/invokeai/frontend/web/src/features/imageDeletion/components/DeleteImageModal.tsx b/invokeai/frontend/web/src/features/deleteImageModal/components/DeleteImageModal.tsx similarity index 70% rename from invokeai/frontend/web/src/features/imageDeletion/components/DeleteImageModal.tsx rename to invokeai/frontend/web/src/features/deleteImageModal/components/DeleteImageModal.tsx index 0e72ea96ad..0d8ecfbae6 100644 --- a/invokeai/frontend/web/src/features/imageDeletion/components/DeleteImageModal.tsx +++ b/invokeai/frontend/web/src/features/deleteImageModal/components/DeleteImageModal.tsx @@ -15,30 +15,42 @@ import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; import IAIButton from 'common/components/IAIButton'; import IAISwitch from 'common/components/IAISwitch'; import { setShouldConfirmOnDelete } from 'features/system/store/systemSlice'; - import { stateSelector } from 'app/store/store'; +import { some } from 'lodash-es'; import { ChangeEvent, memo, useCallback, useRef } from 'react'; import { useTranslation } from 'react-i18next'; import { imageDeletionConfirmed } from '../store/actions'; -import { selectImageUsage } from '../store/imageDeletionSelectors'; -import { - imageToDeleteCleared, - isModalOpenChanged, -} from '../store/imageDeletionSlice'; +import { getImageUsage, selectImageUsage } from '../store/selectors'; +import { imageDeletionCanceled, isModalOpenChanged } from '../store/slice'; import ImageUsageMessage from './ImageUsageMessage'; +import { ImageUsage } from '../store/types'; const selector = createSelector( [stateSelector, selectImageUsage], - ({ system, config, imageDeletion }, imageUsage) => { + (state, imagesUsage) => { + const { system, config, deleteImageModal } = state; const { shouldConfirmOnDelete } = system; const { canRestoreDeletedImagesFromBin } = config; - const { imageToDelete, isModalOpen } = imageDeletion; + const { imagesToDelete, isModalOpen } = deleteImageModal; + + const allImageUsage = (imagesToDelete ?? []).map(({ image_name }) => + getImageUsage(state, image_name) + ); + + const imageUsageSummary: ImageUsage = { + isInitialImage: some(allImageUsage, (i) => i.isInitialImage), + isCanvasImage: some(allImageUsage, (i) => i.isCanvasImage), + isNodesImage: some(allImageUsage, (i) => i.isNodesImage), + isControlNetImage: some(allImageUsage, (i) => i.isControlNetImage), + }; + return { shouldConfirmOnDelete, canRestoreDeletedImagesFromBin, - imageToDelete, - imageUsage, + imagesToDelete, + imagesUsage, isModalOpen, + imageUsageSummary, }; }, defaultSelectorOptions @@ -51,9 +63,10 @@ const DeleteImageModal = () => { const { shouldConfirmOnDelete, canRestoreDeletedImagesFromBin, - imageToDelete, - imageUsage, + imagesToDelete, + imagesUsage, isModalOpen, + imageUsageSummary, } = useAppSelector(selector); const handleChangeShouldConfirmOnDelete = useCallback( @@ -63,17 +76,19 @@ const DeleteImageModal = () => { ); const handleClose = useCallback(() => { - dispatch(imageToDeleteCleared()); + dispatch(imageDeletionCanceled()); dispatch(isModalOpenChanged(false)); }, [dispatch]); const handleDelete = useCallback(() => { - if (!imageToDelete || !imageUsage) { + if (!imagesToDelete.length || !imagesUsage.length) { return; } - dispatch(imageToDeleteCleared()); - dispatch(imageDeletionConfirmed({ imageDTO: imageToDelete, imageUsage })); - }, [dispatch, imageToDelete, imageUsage]); + dispatch(imageDeletionCanceled()); + dispatch( + imageDeletionConfirmed({ imageDTOs: imagesToDelete, imagesUsage }) + ); + }, [dispatch, imagesToDelete, imagesUsage]); const cancelRef = useRef(null); @@ -92,7 +107,7 @@ const DeleteImageModal = () => { - + {canRestoreDeletedImagesFromBin diff --git a/invokeai/frontend/web/src/features/imageDeletion/components/ImageUsageMessage.tsx b/invokeai/frontend/web/src/features/deleteImageModal/components/ImageUsageMessage.tsx similarity index 100% rename from invokeai/frontend/web/src/features/imageDeletion/components/ImageUsageMessage.tsx rename to invokeai/frontend/web/src/features/deleteImageModal/components/ImageUsageMessage.tsx diff --git a/invokeai/frontend/web/src/features/imageDeletion/store/actions.ts b/invokeai/frontend/web/src/features/deleteImageModal/store/actions.ts similarity index 65% rename from invokeai/frontend/web/src/features/imageDeletion/store/actions.ts rename to invokeai/frontend/web/src/features/deleteImageModal/store/actions.ts index c67d7d944d..def27c9954 100644 --- a/invokeai/frontend/web/src/features/imageDeletion/store/actions.ts +++ b/invokeai/frontend/web/src/features/deleteImageModal/store/actions.ts @@ -3,6 +3,6 @@ import { ImageDTO } from 'services/api/types'; import { ImageUsage } from './types'; export const imageDeletionConfirmed = createAction<{ - imageDTO: ImageDTO; - imageUsage: ImageUsage; -}>('imageDeletion/imageDeletionConfirmed'); + imageDTOs: ImageDTO[]; + imagesUsage: ImageUsage[]; +}>('deleteImageModal/imageDeletionConfirmed'); diff --git a/invokeai/frontend/web/src/features/deleteImageModal/store/initialState.ts b/invokeai/frontend/web/src/features/deleteImageModal/store/initialState.ts new file mode 100644 index 0000000000..198d4ca51f --- /dev/null +++ b/invokeai/frontend/web/src/features/deleteImageModal/store/initialState.ts @@ -0,0 +1,6 @@ +import { DeleteImageState } from './types'; + +export const initialDeleteImageState: DeleteImageState = { + imagesToDelete: [], + isModalOpen: false, +}; diff --git a/invokeai/frontend/web/src/features/imageDeletion/store/imageDeletionSelectors.ts b/invokeai/frontend/web/src/features/deleteImageModal/store/selectors.ts similarity index 71% rename from invokeai/frontend/web/src/features/imageDeletion/store/imageDeletionSelectors.ts rename to invokeai/frontend/web/src/features/deleteImageModal/store/selectors.ts index bd8e117496..37be06bad6 100644 --- a/invokeai/frontend/web/src/features/imageDeletion/store/imageDeletionSelectors.ts +++ b/invokeai/frontend/web/src/features/deleteImageModal/store/selectors.ts @@ -3,6 +3,7 @@ import { RootState } from 'app/store/store'; import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; import { some } from 'lodash-es'; import { ImageUsage } from './types'; +import { isInvocationNode } from 'features/nodes/types/types'; export const getImageUsage = (state: RootState, image_name: string) => { const { generation, canvas, nodes, controlNet } = state; @@ -12,11 +13,11 @@ export const getImageUsage = (state: RootState, image_name: string) => { (obj) => obj.kind === 'image' && obj.imageName === image_name ); - const isNodesImage = nodes.nodes.some((node) => { + const isNodesImage = nodes.nodes.filter(isInvocationNode).some((node) => { return some( node.data.inputs, (input) => - input.type === 'image' && input.value?.image_name === image_name + input.type === 'ImageField' && input.value?.image_name === image_name ); }); @@ -39,17 +40,17 @@ export const getImageUsage = (state: RootState, image_name: string) => { export const selectImageUsage = createSelector( [(state: RootState) => state], (state) => { - const { imageToDelete } = state.imageDeletion; + const { imagesToDelete } = state.deleteImageModal; - if (!imageToDelete) { - return; + if (!imagesToDelete.length) { + return []; } - const { image_name } = imageToDelete; + const imagesUsage = imagesToDelete.map((i) => + getImageUsage(state, i.image_name) + ); - const imageUsage = getImageUsage(state, image_name); - - return imageUsage; + return imagesUsage; }, defaultSelectorOptions ); diff --git a/invokeai/frontend/web/src/features/deleteImageModal/store/slice.ts b/invokeai/frontend/web/src/features/deleteImageModal/store/slice.ts new file mode 100644 index 0000000000..6569009666 --- /dev/null +++ b/invokeai/frontend/web/src/features/deleteImageModal/store/slice.ts @@ -0,0 +1,28 @@ +import { PayloadAction, createSlice } from '@reduxjs/toolkit'; +import { ImageDTO } from 'services/api/types'; +import { initialDeleteImageState } from './initialState'; + +const deleteImageModal = createSlice({ + name: 'deleteImageModal', + initialState: initialDeleteImageState, + reducers: { + isModalOpenChanged: (state, action: PayloadAction) => { + state.isModalOpen = action.payload; + }, + imagesToDeleteSelected: (state, action: PayloadAction) => { + state.imagesToDelete = action.payload; + }, + imageDeletionCanceled: (state) => { + state.imagesToDelete = []; + state.isModalOpen = false; + }, + }, +}); + +export const { + isModalOpenChanged, + imagesToDeleteSelected, + imageDeletionCanceled, +} = deleteImageModal.actions; + +export default deleteImageModal.reducer; diff --git a/invokeai/frontend/web/src/features/deleteImageModal/store/types.ts b/invokeai/frontend/web/src/features/deleteImageModal/store/types.ts new file mode 100644 index 0000000000..2beaa8ca2e --- /dev/null +++ b/invokeai/frontend/web/src/features/deleteImageModal/store/types.ts @@ -0,0 +1,13 @@ +import { ImageDTO } from 'services/api/types'; + +export type DeleteImageState = { + imagesToDelete: ImageDTO[]; + isModalOpen: boolean; +}; + +export type ImageUsage = { + isInitialImage: boolean; + isCanvasImage: boolean; + isNodesImage: boolean; + isControlNetImage: boolean; +}; diff --git a/invokeai/frontend/web/src/app/components/ImageDnd/ImageDndContext.tsx b/invokeai/frontend/web/src/features/dnd/components/AppDndContext.tsx similarity index 61% rename from invokeai/frontend/web/src/app/components/ImageDnd/ImageDndContext.tsx rename to invokeai/frontend/web/src/features/dnd/components/AppDndContext.tsx index 24bdceac3a..bffe738aa9 100644 --- a/invokeai/frontend/web/src/app/components/ImageDnd/ImageDndContext.tsx +++ b/invokeai/frontend/web/src/features/dnd/components/AppDndContext.tsx @@ -6,39 +6,45 @@ import { useSensor, useSensors, } from '@dnd-kit/core'; -import { snapCenterToCursor } from '@dnd-kit/modifiers'; +import { logger } from 'app/logging/logger'; import { dndDropped } from 'app/store/middleware/listenerMiddleware/listeners/imageDropped'; import { useAppDispatch } from 'app/store/storeHooks'; +import { parseify } from 'common/util/serialize'; import { AnimatePresence, motion } from 'framer-motion'; import { PropsWithChildren, memo, useCallback, useState } from 'react'; +import { useScaledModifer } from '../hooks/useScaledCenteredModifer'; +import { DragEndEvent, DragStartEvent, TypesafeDraggableData } from '../types'; +import { DndContextTypesafe } from './DndContextTypesafe'; import DragPreview from './DragPreview'; -import { - DndContext, - DragEndEvent, - DragStartEvent, - TypesafeDraggableData, -} from './typesafeDnd'; -type ImageDndContextProps = PropsWithChildren; - -const ImageDndContext = (props: ImageDndContextProps) => { +const AppDndContext = (props: PropsWithChildren) => { const [activeDragData, setActiveDragData] = useState(null); + const log = logger('images'); const dispatch = useAppDispatch(); - const handleDragStart = useCallback((event: DragStartEvent) => { - console.log('dragStart', event.active.data.current); - const activeData = event.active.data.current; - if (!activeData) { - return; - } - setActiveDragData(activeData); - }, []); + const handleDragStart = useCallback( + (event: DragStartEvent) => { + log.trace( + { dragData: parseify(event.active.data.current) }, + 'Drag started' + ); + const activeData = event.active.data.current; + if (!activeData) { + return; + } + setActiveDragData(activeData); + }, + [log] + ); const handleDragEnd = useCallback( (event: DragEndEvent) => { - console.log('dragEnd', event.active.data.current); + log.trace( + { dragData: parseify(event.active.data.current) }, + 'Drag ended' + ); const overData = event.over?.data.current; if (!activeDragData || !overData) { return; @@ -46,7 +52,7 @@ const ImageDndContext = (props: ImageDndContextProps) => { dispatch(dndDropped({ overData, activeData: activeDragData })); setActiveDragData(null); }, - [activeDragData, dispatch] + [activeDragData, dispatch, log] ); const mouseSensor = useSensor(MouseSensor, { @@ -64,15 +70,29 @@ const ImageDndContext = (props: ImageDndContextProps) => { const sensors = useSensors(mouseSensor, touchSensor); + const scaledModifier = useScaledModifer(); + return ( - {props.children} - + {activeDragData && ( { )} - + ); }; -export default memo(ImageDndContext); +export default memo(AppDndContext); diff --git a/invokeai/frontend/web/src/features/dnd/components/DndContextTypesafe.tsx b/invokeai/frontend/web/src/features/dnd/components/DndContextTypesafe.tsx new file mode 100644 index 0000000000..06fede4dc8 --- /dev/null +++ b/invokeai/frontend/web/src/features/dnd/components/DndContextTypesafe.tsx @@ -0,0 +1,6 @@ +import { DndContext } from '@dnd-kit/core'; +import { DndContextTypesafeProps } from '../types'; + +export function DndContextTypesafe(props: DndContextTypesafeProps) { + return ; +} diff --git a/invokeai/frontend/web/src/app/components/ImageDnd/DragPreview.tsx b/invokeai/frontend/web/src/features/dnd/components/DragPreview.tsx similarity index 63% rename from invokeai/frontend/web/src/app/components/ImageDnd/DragPreview.tsx rename to invokeai/frontend/web/src/features/dnd/components/DragPreview.tsx index 82526900ad..0ee5d34b1a 100644 --- a/invokeai/frontend/web/src/app/components/ImageDnd/DragPreview.tsx +++ b/invokeai/frontend/web/src/features/dnd/components/DragPreview.tsx @@ -1,6 +1,6 @@ -import { Box, ChakraProps, Flex, Heading, Image } from '@chakra-ui/react'; +import { Box, ChakraProps, Flex, Heading, Image, Text } from '@chakra-ui/react'; import { memo } from 'react'; -import { TypesafeDraggableData } from './typesafeDnd'; +import { TypesafeDraggableData } from '../types'; type OverlayDragImageProps = { dragData: TypesafeDraggableData | null; @@ -30,19 +30,38 @@ const DragPreview = (props: OverlayDragImageProps) => { return null; } + if (props.dragData.payloadType === 'NODE_FIELD') { + const { field, fieldTemplate } = props.dragData.payload; + return ( + + {field.label || fieldTemplate.title} + + ); + } + if (props.dragData.payloadType === 'IMAGE_DTO') { const { thumbnail_url, width, height } = props.dragData.payload.imageDTO; return ( { ); } - if (props.dragData.payloadType === 'IMAGE_NAMES') { + if (props.dragData.payloadType === 'IMAGE_DTOS') { return ( { ...STYLES, }} > - {props.dragData.payload.image_names.length} + {props.dragData.payload.imageDTOs.length} Images ); diff --git a/invokeai/frontend/web/src/features/dnd/hooks/typesafeHooks.ts b/invokeai/frontend/web/src/features/dnd/hooks/typesafeHooks.ts new file mode 100644 index 0000000000..71f97a0a6e --- /dev/null +++ b/invokeai/frontend/web/src/features/dnd/hooks/typesafeHooks.ts @@ -0,0 +1,15 @@ +import { useDraggable, useDroppable } from '@dnd-kit/core'; +import { + UseDraggableTypesafeArguments, + UseDraggableTypesafeReturnValue, + UseDroppableTypesafeArguments, + UseDroppableTypesafeReturnValue, +} from '../types'; + +export function useDroppableTypesafe(props: UseDroppableTypesafeArguments) { + return useDroppable(props) as UseDroppableTypesafeReturnValue; +} + +export function useDraggableTypesafe(props: UseDraggableTypesafeArguments) { + return useDraggable(props) as UseDraggableTypesafeReturnValue; +} diff --git a/invokeai/frontend/web/src/features/dnd/hooks/useScaledCenteredModifer.ts b/invokeai/frontend/web/src/features/dnd/hooks/useScaledCenteredModifer.ts new file mode 100644 index 0000000000..f9ba273bdd --- /dev/null +++ b/invokeai/frontend/web/src/features/dnd/hooks/useScaledCenteredModifer.ts @@ -0,0 +1,51 @@ +import type { Modifier } from '@dnd-kit/core'; +import { getEventCoordinates } from '@dnd-kit/utilities'; +import { createSelector } from '@reduxjs/toolkit'; +import { stateSelector } from 'app/store/store'; +import { useAppSelector } from 'app/store/storeHooks'; +import { activeTabNameSelector } from 'features/ui/store/uiSelectors'; +import { useCallback } from 'react'; + +const selectZoom = createSelector( + [stateSelector, activeTabNameSelector], + ({ nodes }, activeTabName) => + activeTabName === 'nodes' ? nodes.viewport.zoom : 1 +); + +/** + * Applies scaling to the drag transform (if on node editor tab) and centers it on cursor. + */ +export const useScaledModifer = () => { + const zoom = useAppSelector(selectZoom); + const modifier: Modifier = useCallback( + ({ activatorEvent, draggingNodeRect, transform }) => { + if (draggingNodeRect && activatorEvent) { + const activatorCoordinates = getEventCoordinates(activatorEvent); + + if (!activatorCoordinates) { + return transform; + } + + const offsetX = activatorCoordinates.x - draggingNodeRect.left; + const offsetY = activatorCoordinates.y - draggingNodeRect.top; + + const x = transform.x + offsetX - draggingNodeRect.width / 2; + const y = transform.y + offsetY - draggingNodeRect.height / 2; + const scaleX = transform.scaleX * zoom; + const scaleY = transform.scaleY * zoom; + + return { + x, + y, + scaleX, + scaleY, + }; + } + + return transform; + }, + [zoom] + ); + + return modifier; +}; diff --git a/invokeai/frontend/web/src/app/components/ImageDnd/typesafeDnd.tsx b/invokeai/frontend/web/src/features/dnd/types/index.ts similarity index 51% rename from invokeai/frontend/web/src/app/components/ImageDnd/typesafeDnd.tsx rename to invokeai/frontend/web/src/features/dnd/types/index.ts index 5f08466710..294132d0a3 100644 --- a/invokeai/frontend/web/src/app/components/ImageDnd/typesafeDnd.tsx +++ b/invokeai/frontend/web/src/features/dnd/types/index.ts @@ -3,7 +3,6 @@ import { Active, Collision, DndContextProps, - DndContext as OriginalDndContext, Over, Translate, UseDraggableArguments, @@ -11,7 +10,10 @@ import { useDraggable as useOriginalDraggable, useDroppable as useOriginalDroppable, } from '@dnd-kit/core'; -import { BoardId } from 'features/gallery/store/types'; +import { + InputFieldTemplate, + InputFieldValue, +} from 'features/nodes/types/types'; import { ImageDTO } from 'services/api/types'; type BaseDropData = { @@ -54,9 +56,17 @@ export type AddToBatchDropData = BaseDropData & { actionType: 'ADD_TO_BATCH'; }; -export type MoveBoardDropData = BaseDropData & { - actionType: 'MOVE_BOARD'; - context: { boardId: BoardId }; +export type AddToBoardDropData = BaseDropData & { + actionType: 'ADD_TO_BOARD'; + context: { boardId: string }; +}; + +export type RemoveFromBoardDropData = BaseDropData & { + actionType: 'REMOVE_FROM_BOARD'; +}; + +export type AddFieldToLinearViewDropData = BaseDropData & { + actionType: 'ADD_FIELD_TO_LINEAR'; }; export type TypesafeDroppableData = @@ -67,32 +77,44 @@ export type TypesafeDroppableData = | NodesImageDropData | AddToBatchDropData | NodesMultiImageDropData - | MoveBoardDropData; + | AddToBoardDropData + | RemoveFromBoardDropData + | AddFieldToLinearViewDropData; type BaseDragData = { id: string; }; +export type NodeFieldDraggableData = BaseDragData & { + payloadType: 'NODE_FIELD'; + payload: { + nodeId: string; + field: InputFieldValue; + fieldTemplate: InputFieldTemplate; + }; +}; + export type ImageDraggableData = BaseDragData & { payloadType: 'IMAGE_DTO'; payload: { imageDTO: ImageDTO }; }; -export type ImageNamesDraggableData = BaseDragData & { - payloadType: 'IMAGE_NAMES'; - payload: { image_names: string[] }; +export type ImageDTOsDraggableData = BaseDragData & { + payloadType: 'IMAGE_DTOS'; + payload: { imageDTOs: ImageDTO[] }; }; export type TypesafeDraggableData = + | NodeFieldDraggableData | ImageDraggableData - | ImageNamesDraggableData; + | ImageDTOsDraggableData; -interface UseDroppableTypesafeArguments +export interface UseDroppableTypesafeArguments extends Omit { data?: TypesafeDroppableData; } -type UseDroppableTypesafeReturnValue = Omit< +export type UseDroppableTypesafeReturnValue = Omit< ReturnType, 'active' | 'over' > & { @@ -100,16 +122,12 @@ type UseDroppableTypesafeReturnValue = Omit< over: TypesafeOver | null; }; -export function useDroppable(props: UseDroppableTypesafeArguments) { - return useOriginalDroppable(props) as UseDroppableTypesafeReturnValue; -} - -interface UseDraggableTypesafeArguments +export interface UseDraggableTypesafeArguments extends Omit { data?: TypesafeDraggableData; } -type UseDraggableTypesafeReturnValue = Omit< +export type UseDraggableTypesafeReturnValue = Omit< ReturnType, 'active' | 'over' > & { @@ -117,81 +135,14 @@ type UseDraggableTypesafeReturnValue = Omit< over: TypesafeOver | null; }; -export function useDraggable(props: UseDraggableTypesafeArguments) { - return useOriginalDraggable(props) as UseDraggableTypesafeReturnValue; -} - -interface TypesafeActive extends Omit { +export interface TypesafeActive extends Omit { data: React.MutableRefObject; } -interface TypesafeOver extends Omit { +export interface TypesafeOver extends Omit { data: React.MutableRefObject; } -export const isValidDrop = ( - overData: TypesafeDroppableData | undefined, - active: TypesafeActive | null -) => { - if (!overData || !active?.data.current) { - return false; - } - - const { actionType } = overData; - const { payloadType } = active.data.current; - - if (overData.id === active.data.current.id) { - return false; - } - - switch (actionType) { - case 'SET_CURRENT_IMAGE': - return payloadType === 'IMAGE_DTO'; - case 'SET_INITIAL_IMAGE': - return payloadType === 'IMAGE_DTO'; - case 'SET_CONTROLNET_IMAGE': - return payloadType === 'IMAGE_DTO'; - case 'SET_CANVAS_INITIAL_IMAGE': - return payloadType === 'IMAGE_DTO'; - case 'SET_NODES_IMAGE': - return payloadType === 'IMAGE_DTO'; - case 'SET_MULTI_NODES_IMAGE': - return payloadType === 'IMAGE_DTO' || 'IMAGE_NAMES'; - case 'ADD_TO_BATCH': - return payloadType === 'IMAGE_DTO' || 'IMAGE_NAMES'; - case 'MOVE_BOARD': { - // If the board is the same, don't allow the drop - - // Check the payload types - const isPayloadValid = payloadType === 'IMAGE_DTO' || 'IMAGE_NAMES'; - if (!isPayloadValid) { - return false; - } - - // Check if the image's board is the board we are dragging onto - if (payloadType === 'IMAGE_DTO') { - const { imageDTO } = active.data.current.payload; - const currentBoard = imageDTO.board_id; - const destinationBoard = overData.context.boardId; - - const isSameBoard = currentBoard === destinationBoard; - const isDestinationValid = !currentBoard ? destinationBoard : true; - - return !isSameBoard && isDestinationValid; - } - - if (payloadType === 'IMAGE_NAMES') { - // TODO (multi-select) - return false; - } - - return true; - } - default: - return false; - } -}; - interface DragEvent { activatorEvent: Event; active: TypesafeActive; @@ -217,6 +168,3 @@ export interface DndContextTypesafeProps onDragEnd?(event: DragEndEvent): void; onDragCancel?(event: DragCancelEvent): void; } -export function DndContext(props: DndContextTypesafeProps) { - return ; -} diff --git a/invokeai/frontend/web/src/features/dnd/util/isValidDrop.ts b/invokeai/frontend/web/src/features/dnd/util/isValidDrop.ts new file mode 100644 index 0000000000..f704d22dff --- /dev/null +++ b/invokeai/frontend/web/src/features/dnd/util/isValidDrop.ts @@ -0,0 +1,87 @@ +import { TypesafeActive, TypesafeDroppableData } from '../types'; + +export const isValidDrop = ( + overData: TypesafeDroppableData | undefined, + active: TypesafeActive | null +) => { + if (!overData || !active?.data.current) { + return false; + } + + const { actionType } = overData; + const { payloadType } = active.data.current; + + if (overData.id === active.data.current.id) { + return false; + } + + switch (actionType) { + case 'ADD_FIELD_TO_LINEAR': + return payloadType === 'NODE_FIELD'; + case 'SET_CURRENT_IMAGE': + return payloadType === 'IMAGE_DTO'; + case 'SET_INITIAL_IMAGE': + return payloadType === 'IMAGE_DTO'; + case 'SET_CONTROLNET_IMAGE': + return payloadType === 'IMAGE_DTO'; + case 'SET_CANVAS_INITIAL_IMAGE': + return payloadType === 'IMAGE_DTO'; + case 'SET_NODES_IMAGE': + return payloadType === 'IMAGE_DTO'; + case 'SET_MULTI_NODES_IMAGE': + return payloadType === 'IMAGE_DTO' || 'IMAGE_DTOS'; + case 'ADD_TO_BATCH': + return payloadType === 'IMAGE_DTO' || 'IMAGE_DTOS'; + case 'ADD_TO_BOARD': { + // If the board is the same, don't allow the drop + + // Check the payload types + const isPayloadValid = payloadType === 'IMAGE_DTO' || 'IMAGE_DTOS'; + if (!isPayloadValid) { + return false; + } + + // Check if the image's board is the board we are dragging onto + if (payloadType === 'IMAGE_DTO') { + const { imageDTO } = active.data.current.payload; + const currentBoard = imageDTO.board_id ?? 'none'; + const destinationBoard = overData.context.boardId; + + return currentBoard !== destinationBoard; + } + + if (payloadType === 'IMAGE_DTOS') { + // TODO (multi-select) + return true; + } + + return false; + } + case 'REMOVE_FROM_BOARD': { + // If the board is the same, don't allow the drop + + // Check the payload types + const isPayloadValid = payloadType === 'IMAGE_DTO' || 'IMAGE_DTOS'; + if (!isPayloadValid) { + return false; + } + + // Check if the image's board is the board we are dragging onto + if (payloadType === 'IMAGE_DTO') { + const { imageDTO } = active.data.current.payload; + const currentBoard = imageDTO.board_id; + + return currentBoard !== 'none'; + } + + if (payloadType === 'IMAGE_DTOS') { + // TODO (multi-select) + return true; + } + + return false; + } + default: + return false; + } +}; diff --git a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardAutoAddSelect.tsx b/invokeai/frontend/web/src/features/gallery/components/Boards/BoardAutoAddSelect.tsx index ad0e5ab80d..96d17b548e 100644 --- a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardAutoAddSelect.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/Boards/BoardAutoAddSelect.tsx @@ -11,11 +11,14 @@ import { useListAllBoardsQuery } from 'services/api/endpoints/boards'; const selector = createSelector( [stateSelector], - ({ gallery }) => { - const { autoAddBoardId } = gallery; + ({ gallery, system }) => { + const { autoAddBoardId, autoAssignBoardOnClick } = gallery; + const { isProcessing } = system; return { autoAddBoardId, + autoAssignBoardOnClick, + isProcessing, }; }, defaultSelectorOptions @@ -23,7 +26,8 @@ const selector = createSelector( const BoardAutoAddSelect = () => { const dispatch = useAppDispatch(); - const { autoAddBoardId } = useAppSelector(selector); + const { autoAddBoardId, autoAssignBoardOnClick, isProcessing } = + useAppSelector(selector); const inputRef = useRef(null); const { boards, hasBoards } = useListAllBoardsQuery(undefined, { selectFromResult: ({ data }) => { @@ -52,7 +56,7 @@ const BoardAutoAddSelect = () => { return; } - dispatch(autoAddBoardIdChanged(v === 'none' ? undefined : v)); + dispatch(autoAddBoardIdChanged(v)); }, [dispatch] ); @@ -67,7 +71,7 @@ const BoardAutoAddSelect = () => { data={boards} nothingFound="No matching Boards" itemComponent={IAIMantineSelectItemWithTooltip} - disabled={!hasBoards} + disabled={!hasBoards || autoAssignBoardOnClick || isProcessing} filter={(value, item: SelectItem) => item.label?.toLowerCase().includes(value.toLowerCase().trim()) || item.value.toLowerCase().includes(value.toLowerCase().trim()) diff --git a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardContextMenu.tsx b/invokeai/frontend/web/src/features/gallery/components/Boards/BoardContextMenu.tsx index 35fcbd87f7..0667c05435 100644 --- a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardContextMenu.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/Boards/BoardContextMenu.tsx @@ -11,10 +11,11 @@ import { BoardDTO } from 'services/api/types'; import { menuListMotionProps } from 'theme/components/menu'; import GalleryBoardContextMenuItems from './GalleryBoardContextMenuItems'; import NoBoardContextMenuItems from './NoBoardContextMenuItems'; +import { BoardId } from 'features/gallery/store/types'; type Props = { board?: BoardDTO; - board_id?: string; + board_id: BoardId; children: ContextMenuProps['children']; setBoardToDelete?: (board?: BoardDTO) => void; }; @@ -25,14 +26,17 @@ const BoardContextMenu = memo( const selector = useMemo( () => - createSelector(stateSelector, ({ gallery }) => { + createSelector(stateSelector, ({ gallery, system }) => { const isAutoAdd = gallery.autoAddBoardId === board_id; - return { isAutoAdd }; + const isProcessing = system.isProcessing; + const autoAssignBoardOnClick = gallery.autoAssignBoardOnClick; + return { isAutoAdd, isProcessing, autoAssignBoardOnClick }; }), [board_id] ); - const { isAutoAdd } = useAppSelector(selector); + const { isAutoAdd, isProcessing, autoAssignBoardOnClick } = + useAppSelector(selector); const boardName = useBoardName(board_id); const handleSetAutoAdd = useCallback(() => { @@ -59,7 +63,7 @@ const BoardContextMenu = memo( } - isDisabled={isAutoAdd} + isDisabled={isAutoAdd || isProcessing || autoAssignBoardOnClick} onClick={handleSetAutoAdd} > Auto-add to this Board diff --git a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/BatchBoard.tsx b/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/BatchBoard.tsx deleted file mode 100644 index a7a3040cce..0000000000 --- a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/BatchBoard.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { createSelector } from '@reduxjs/toolkit'; -import { AddToBatchDropData } from 'app/components/ImageDnd/typesafeDnd'; -import { stateSelector } from 'app/store/store'; -import { useAppSelector } from 'app/store/storeHooks'; -import { boardIdSelected } from 'features/gallery/store/gallerySlice'; -import { useCallback } from 'react'; -import { FaLayerGroup } from 'react-icons/fa'; -import { useDispatch } from 'react-redux'; -import GenericBoard from './GenericBoard'; - -const selector = createSelector(stateSelector, (state) => { - return { - count: state.gallery.batchImageNames.length, - }; -}); - -const BatchBoard = ({ isSelected }: { isSelected: boolean }) => { - const dispatch = useDispatch(); - const { count } = useAppSelector(selector); - - const handleBatchBoardClick = useCallback(() => { - dispatch(boardIdSelected('batch')); - }, [dispatch]); - - const droppableData: AddToBatchDropData = { - id: 'batch-board', - actionType: 'ADD_TO_BATCH', - }; - - return ( - - ); -}; - -export default BatchBoard; diff --git a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/BoardsList.tsx b/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/BoardsList.tsx index 512fced67c..cb3474f6bd 100644 --- a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/BoardsList.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/BoardsList.tsx @@ -15,10 +15,9 @@ import NoBoardBoard from './NoBoardBoard'; const selector = createSelector( [stateSelector], - ({ boards, gallery }) => { - const { searchText } = boards; - const { selectedBoardId } = gallery; - return { selectedBoardId, searchText }; + ({ gallery }) => { + const { selectedBoardId, boardSearchText } = gallery; + return { selectedBoardId, boardSearchText }; }, defaultSelectorOptions ); @@ -29,11 +28,11 @@ type Props = { const BoardsList = (props: Props) => { const { isOpen } = props; - const { selectedBoardId, searchText } = useAppSelector(selector); + const { selectedBoardId, boardSearchText } = useAppSelector(selector); const { data: boards } = useListAllBoardsQuery(); - const filteredBoards = searchText + const filteredBoards = boardSearchText ? boards?.filter((board) => - board.board_name.toLowerCase().includes(searchText.toLowerCase()) + board.board_name.toLowerCase().includes(boardSearchText.toLowerCase()) ) : boards; const [boardToDelete, setBoardToDelete] = useState(); @@ -75,7 +74,7 @@ const BoardsList = (props: Props) => { }} > - + {filteredBoards && filteredBoards.map((board) => ( diff --git a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/BoardsSearch.tsx b/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/BoardsSearch.tsx index 800ffc651f..d7db96a938 100644 --- a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/BoardsSearch.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/BoardsSearch.tsx @@ -9,7 +9,7 @@ import { createSelector } from '@reduxjs/toolkit'; import { stateSelector } from 'app/store/store'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; -import { setBoardSearchText } from 'features/gallery/store/boardSlice'; +import { boardSearchTextChanged } from 'features/gallery/store/gallerySlice'; import { ChangeEvent, KeyboardEvent, @@ -21,27 +21,27 @@ import { const selector = createSelector( [stateSelector], - ({ boards }) => { - const { searchText } = boards; - return { searchText }; + ({ gallery }) => { + const { boardSearchText } = gallery; + return { boardSearchText }; }, defaultSelectorOptions ); const BoardsSearch = () => { const dispatch = useAppDispatch(); - const { searchText } = useAppSelector(selector); + const { boardSearchText } = useAppSelector(selector); const inputRef = useRef(null); const handleBoardSearch = useCallback( (searchTerm: string) => { - dispatch(setBoardSearchText(searchTerm)); + dispatch(boardSearchTextChanged(searchTerm)); }, [dispatch] ); const clearBoardSearch = useCallback(() => { - dispatch(setBoardSearchText('')); + dispatch(boardSearchTextChanged('')); }, [dispatch]); const handleKeydown = useCallback( @@ -74,11 +74,11 @@ const BoardsSearch = () => { - {searchText && searchText.length && ( + {boardSearchText && boardSearchText.length && ( createSelector( stateSelector, - ({ gallery }) => { + ({ gallery, system }) => { const isSelectedForAutoAdd = board.board_id === gallery.autoAddBoardId; + const autoAssignBoardOnClick = gallery.autoAssignBoardOnClick; + const isProcessing = system.isProcessing; - return { isSelectedForAutoAdd }; + return { + isSelectedForAutoAdd, + autoAssignBoardOnClick, + isProcessing, + }; }, defaultSelectorOptions ), [board.board_id] ); - const { isSelectedForAutoAdd } = useAppSelector(selector); + const { isSelectedForAutoAdd, autoAssignBoardOnClick, isProcessing } = + useAppSelector(selector); const [isHovered, setIsHovered] = useState(false); const handleMouseOver = useCallback(() => { setIsHovered(true); @@ -57,6 +72,18 @@ const GalleryBoard = memo( const handleMouseOut = useCallback(() => { setIsHovered(false); }, []); + + const { data: imagesTotal } = useGetBoardImagesTotalQuery(board.board_id); + const { data: assetsTotal } = useGetBoardAssetsTotalQuery(board.board_id); + const tooltip = useMemo(() => { + if (!imagesTotal || !assetsTotal) { + return undefined; + } + return `${imagesTotal} image${ + imagesTotal > 1 ? 's' : '' + }, ${assetsTotal} asset${assetsTotal > 1 ? 's' : ''}`; + }, [assetsTotal, imagesTotal]); + const { currentData: coverImage } = useGetImageDTOQuery( board.cover_image_name ?? skipToken ); @@ -66,15 +93,18 @@ const GalleryBoard = memo( const handleSelectBoard = useCallback(() => { dispatch(boardIdSelected(board_id)); - }, [board_id, dispatch]); + if (autoAssignBoardOnClick && !isProcessing) { + dispatch(autoAddBoardIdChanged(board_id)); + } + }, [board_id, autoAssignBoardOnClick, isProcessing, dispatch]); const [updateBoard, { isLoading: isUpdateBoardLoading }] = useUpdateBoardMutation(); - const droppableData: MoveBoardDropData = useMemo( + const droppableData: AddToBoardDropData = useMemo( () => ({ id: board_id, - actionType: 'MOVE_BOARD', + actionType: 'ADD_TO_BOARD', context: { boardId: board_id }, }), [board_id] @@ -135,60 +165,61 @@ const GalleryBoard = memo( setBoardToDelete={setBoardToDelete} > {(ref) => ( - - {coverImage?.thumbnail_url ? ( - - ) : ( - - + + {coverImage?.thumbnail_url ? ( + - - )} - {/* + + + )} + {/* */} - {isSelectedForAutoAdd && } - - - } + + - - + - - + overflow: 'hidden', + textOverflow: 'ellipsis', + }} + noOfLines={1} + /> + + + - Move} - /> - + Move} + /> + + )} diff --git a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/GenericBoard.tsx b/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/GenericBoard.tsx index 0d630c524d..1698a81ac0 100644 --- a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/GenericBoard.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/GenericBoard.tsx @@ -1,7 +1,7 @@ import { As, Badge, Flex } from '@chakra-ui/react'; -import { TypesafeDroppableData } from 'app/components/ImageDnd/typesafeDnd'; import IAIDroppable from 'common/components/IAIDroppable'; import { IAINoContentFallback } from 'common/components/IAIImageFallback'; +import { TypesafeDroppableData } from 'features/dnd/types'; import { BoardId } from 'features/gallery/store/types'; import { ReactNode } from 'react'; import BoardContextMenu from '../BoardContextMenu'; diff --git a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/NoBoardBoard.tsx b/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/NoBoardBoard.tsx index ee1d8f6bea..fec280db0f 100644 --- a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/NoBoardBoard.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/NoBoardBoard.tsx @@ -1,50 +1,60 @@ import { Box, Flex, Image, Text } from '@chakra-ui/react'; import { createSelector } from '@reduxjs/toolkit'; -import { MoveBoardDropData } from 'app/components/ImageDnd/typesafeDnd'; import { stateSelector } from 'app/store/store'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; import InvokeAILogoImage from 'assets/images/logo.png'; import IAIDroppable from 'common/components/IAIDroppable'; import SelectionOverlay from 'common/components/SelectionOverlay'; -import { boardIdSelected } from 'features/gallery/store/gallerySlice'; +import { RemoveFromBoardDropData } from 'features/dnd/types'; +import { + autoAddBoardIdChanged, + boardIdSelected, +} from 'features/gallery/store/gallerySlice'; import { memo, useCallback, useMemo, useState } from 'react'; import { useBoardName } from 'services/api/hooks/useBoardName'; import AutoAddIcon from '../AutoAddIcon'; import BoardContextMenu from '../BoardContextMenu'; + interface Props { isSelected: boolean; } const selector = createSelector( stateSelector, - ({ gallery }) => { - const { autoAddBoardId } = gallery; - return { autoAddBoardId }; + ({ gallery, system }) => { + const { autoAddBoardId, autoAssignBoardOnClick } = gallery; + const { isProcessing } = system; + return { autoAddBoardId, autoAssignBoardOnClick, isProcessing }; }, defaultSelectorOptions ); const NoBoardBoard = memo(({ isSelected }: Props) => { const dispatch = useAppDispatch(); - const { autoAddBoardId } = useAppSelector(selector); - const boardName = useBoardName(undefined); + const { autoAddBoardId, autoAssignBoardOnClick, isProcessing } = + useAppSelector(selector); + const boardName = useBoardName('none'); const handleSelectBoard = useCallback(() => { - dispatch(boardIdSelected(undefined)); - }, [dispatch]); + dispatch(boardIdSelected('none')); + if (autoAssignBoardOnClick && !isProcessing) { + dispatch(autoAddBoardIdChanged('none')); + } + }, [dispatch, autoAssignBoardOnClick, isProcessing]); const [isHovered, setIsHovered] = useState(false); + const handleMouseOver = useCallback(() => { setIsHovered(true); }, []); + const handleMouseOut = useCallback(() => { setIsHovered(false); }, []); - const droppableData: MoveBoardDropData = useMemo( + const droppableData: RemoveFromBoardDropData = useMemo( () => ({ id: 'no_board', - actionType: 'MOVE_BOARD', - context: { boardId: undefined }, + actionType: 'REMOVE_FROM_BOARD', }), [] ); @@ -64,7 +74,7 @@ const NoBoardBoard = memo(({ isSelected }: Props) => { h: 'full', }} > - + {(ref) => ( { alignItems: 'center', }} > - {/* */} invoke-ai-logo { }} /> - {/* - - {totalImages}/{totalAssets} - - */} - {!autoAddBoardId && } + {autoAddBoardId === 'none' && } void; }; -const DeleteImageModal = (props: Props) => { +const DeleteBoardModal = (props: Props) => { const { boardToDelete, setBoardToDelete } = props; const { t } = useTranslation(); const canRestoreDeletedImagesFromBin = useAppSelector( @@ -49,13 +49,10 @@ const DeleteImageModal = (props: Props) => { ); const imageUsageSummary: ImageUsage = { - isInitialImage: some(allImageUsage, (usage) => usage.isInitialImage), - isCanvasImage: some(allImageUsage, (usage) => usage.isCanvasImage), - isNodesImage: some(allImageUsage, (usage) => usage.isNodesImage), - isControlNetImage: some( - allImageUsage, - (usage) => usage.isControlNetImage - ), + isInitialImage: some(allImageUsage, (i) => i.isInitialImage), + isCanvasImage: some(allImageUsage, (i) => i.isCanvasImage), + isNodesImage: some(allImageUsage, (i) => i.isNodesImage), + isControlNetImage: some(allImageUsage, (i) => i.isControlNetImage), }; return { imageUsageSummary }; }), @@ -176,4 +173,4 @@ const DeleteImageModal = (props: Props) => { ); }; -export default memo(DeleteImageModal); +export default memo(DeleteBoardModal); diff --git a/invokeai/frontend/web/src/features/gallery/components/Boards/UpdateImageBoardModal.tsx b/invokeai/frontend/web/src/features/gallery/components/Boards/UpdateImageBoardModal.tsx deleted file mode 100644 index 49eb1502f3..0000000000 --- a/invokeai/frontend/web/src/features/gallery/components/Boards/UpdateImageBoardModal.tsx +++ /dev/null @@ -1,93 +0,0 @@ -import { - AlertDialog, - AlertDialogBody, - AlertDialogContent, - AlertDialogFooter, - AlertDialogHeader, - AlertDialogOverlay, - Box, - Flex, - Spinner, - Text, -} from '@chakra-ui/react'; -import IAIButton from 'common/components/IAIButton'; - -import IAIMantineSearchableSelect from 'common/components/IAIMantineSearchableSelect'; -import { memo, useContext, useRef, useState } from 'react'; -import { useListAllBoardsQuery } from 'services/api/endpoints/boards'; -import { AddImageToBoardContext } from '../../../../app/contexts/AddImageToBoardContext'; - -const UpdateImageBoardModal = () => { - // const boards = useSelector(selectBoardsAll); - const { data: boards, isFetching } = useListAllBoardsQuery(); - const { isOpen, onClose, handleAddToBoard, image } = useContext( - AddImageToBoardContext - ); - const [selectedBoard, setSelectedBoard] = useState(); - - const cancelRef = useRef(null); - - const currentBoard = boards?.find( - (board) => board.board_id === image?.board_id - ); - - return ( - - - - - {currentBoard ? 'Move Image to Board' : 'Add Image to Board'} - - - - - - {currentBoard && ( - - Moving this image from{' '} - {currentBoard.board_name} to - - )} - {isFetching ? ( - - ) : ( - setSelectedBoard(v)} - value={selectedBoard} - data={(boards ?? []).map((board) => ({ - label: board.board_name, - value: board.board_id, - }))} - /> - )} - - - - - Cancel - { - if (selectedBoard) { - handleAddToBoard(selectedBoard); - } - }} - ml={3} - > - {currentBoard ? 'Move' : 'Add'} - - - - - - ); -}; - -export default memo(UpdateImageBoardModal); diff --git a/invokeai/frontend/web/src/features/gallery/components/CurrentImage/CurrentImageButtons.tsx b/invokeai/frontend/web/src/features/gallery/components/CurrentImage/CurrentImageButtons.tsx index 7d25d6bc05..d62027769b 100644 --- a/invokeai/frontend/web/src/features/gallery/components/CurrentImage/CurrentImageButtons.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/CurrentImage/CurrentImageButtons.tsx @@ -9,16 +9,14 @@ import { MenuButton, MenuList, } from '@chakra-ui/react'; -// import { runESRGAN, runFacetool } from 'app/socketio/actions'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; import IAIIconButton from 'common/components/IAIIconButton'; - import { skipToken } from '@reduxjs/toolkit/dist/query'; import { useAppToaster } from 'app/components/Toaster'; import { upscaleRequested } from 'app/store/middleware/listenerMiddleware/listeners/upscaleRequested'; import { stateSelector } from 'app/store/store'; -import { DeleteImageButton } from 'features/imageDeletion/components/DeleteImageButton'; -import { imageToDeleteSelected } from 'features/imageDeletion/store/imageDeletionSlice'; +import { DeleteImageButton } from 'features/deleteImageModal/components/DeleteImageButton'; +import { imagesToDeleteSelected } from 'features/deleteImageModal/store/slice'; import ParamUpscalePopover from 'features/parameters/components/Parameters/Upscale/ParamUpscaleSettings'; import { useRecallParameters } from 'features/parameters/hooks/useRecallParameters'; import { initialImageSelected } from 'features/parameters/store/actions'; @@ -109,13 +107,13 @@ const CurrentImageButtons = (props: CurrentImageButtonsProps) => { ); const { currentData: imageDTO } = useGetImageDTOQuery( - lastSelectedImage ?? skipToken + lastSelectedImage?.image_name ?? skipToken ); const { currentData: metadataData } = useGetImageMetadataQuery( debounceState.isPending() ? skipToken - : debouncedMetadataQueryArg ?? skipToken + : debouncedMetadataQueryArg?.image_name ?? skipToken ); const metadata = metadataData?.metadata; @@ -173,7 +171,7 @@ const CurrentImageButtons = (props: CurrentImageButtonsProps) => { if (!imageDTO) { return; } - dispatch(imageToDeleteSelected(imageDTO)); + dispatch(imagesToDeleteSelected([imageDTO])); }, [dispatch, imageDTO]); useHotkeys( diff --git a/invokeai/frontend/web/src/features/gallery/components/CurrentImage/CurrentImagePreview.tsx b/invokeai/frontend/web/src/features/gallery/components/CurrentImage/CurrentImagePreview.tsx index fd7eaef46a..2576c8e9e3 100644 --- a/invokeai/frontend/web/src/features/gallery/components/CurrentImage/CurrentImagePreview.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/CurrentImage/CurrentImagePreview.tsx @@ -1,14 +1,14 @@ import { Box, Flex, Image } from '@chakra-ui/react'; import { createSelector } from '@reduxjs/toolkit'; import { skipToken } from '@reduxjs/toolkit/dist/query'; -import { - TypesafeDraggableData, - TypesafeDroppableData, -} from 'app/components/ImageDnd/typesafeDnd'; import { stateSelector } from 'app/store/store'; import { useAppSelector } from 'app/store/storeHooks'; import IAIDndImage from 'common/components/IAIDndImage'; import { IAINoContentFallback } from 'common/components/IAIImageFallback'; +import { + TypesafeDraggableData, + TypesafeDroppableData, +} from 'features/dnd/types'; import { useNextPrevImage } from 'features/gallery/hooks/useNextPrevImage'; import { selectLastSelectedImage } from 'features/gallery/store/gallerySelectors'; import { AnimatePresence, motion } from 'framer-motion'; @@ -32,7 +32,7 @@ export const imagesSelector = createSelector( return { shouldShowImageDetails, shouldHidePreview, - imageName: lastSelectedImage, + imageName: lastSelectedImage?.image_name, progressImage, shouldShowProgressInViewer, shouldAntialiasProgressImage, @@ -57,8 +57,6 @@ const CurrentImagePreview = () => { const { handlePrevImage, handleNextImage, - prevImageId, - nextImageId, isOnLastImage, handleLoadMoreImages, areMoreImagesAvailable, @@ -70,7 +68,7 @@ const CurrentImagePreview = () => { () => { handlePrevImage(); }, - [prevImageId] + [handlePrevImage] ); useHotkeys( @@ -85,11 +83,11 @@ const CurrentImagePreview = () => { } }, [ - nextImageId, isOnLastImage, areMoreImagesAvailable, handleLoadMoreImages, isFetching, + handleNextImage, ] ); diff --git a/invokeai/frontend/web/src/features/gallery/components/GallerySettingsPopover.tsx b/invokeai/frontend/web/src/features/gallery/components/GallerySettingsPopover.tsx index 21a580d9a9..23cfdcc5fd 100644 --- a/invokeai/frontend/web/src/features/gallery/components/GallerySettingsPopover.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/GallerySettingsPopover.tsx @@ -5,25 +5,32 @@ import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; import IAIIconButton from 'common/components/IAIIconButton'; import IAIPopover from 'common/components/IAIPopover'; -import IAISimpleCheckbox from 'common/components/IAISimpleCheckbox'; import IAISlider from 'common/components/IAISlider'; +import IAISwitch from 'common/components/IAISwitch'; import { + autoAssignBoardOnClickChanged, setGalleryImageMinimumWidth, shouldAutoSwitchChanged, } from 'features/gallery/store/gallerySlice'; -import { ChangeEvent } from 'react'; +import { ChangeEvent, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { FaWrench } from 'react-icons/fa'; import BoardAutoAddSelect from './Boards/BoardAutoAddSelect'; +import IAISimpleCheckbox from 'common/components/IAISimpleCheckbox'; const selector = createSelector( [stateSelector], (state) => { - const { galleryImageMinimumWidth, shouldAutoSwitch } = state.gallery; + const { + galleryImageMinimumWidth, + shouldAutoSwitch, + autoAssignBoardOnClick, + } = state.gallery; return { galleryImageMinimumWidth, shouldAutoSwitch, + autoAssignBoardOnClick, }; }, defaultSelectorOptions @@ -33,12 +40,26 @@ const GallerySettingsPopover = () => { const dispatch = useAppDispatch(); const { t } = useTranslation(); - const { galleryImageMinimumWidth, shouldAutoSwitch } = + const { galleryImageMinimumWidth, shouldAutoSwitch, autoAssignBoardOnClick } = useAppSelector(selector); - const handleChangeGalleryImageMinimumWidth = (v: number) => { - dispatch(setGalleryImageMinimumWidth(v)); - }; + const handleChangeGalleryImageMinimumWidth = useCallback( + (v: number) => { + dispatch(setGalleryImageMinimumWidth(v)); + }, + [dispatch] + ); + + const handleResetGalleryImageMinimumWidth = useCallback(() => { + dispatch(setGalleryImageMinimumWidth(64)); + }, [dispatch]); + + const handleChangeAutoSwitch = useCallback( + (e: ChangeEvent) => { + dispatch(shouldAutoSwitchChanged(e.target.checked)); + }, + [dispatch] + ); return ( { /> } > - + dispatch(setGalleryImageMinimumWidth(64))} + handleReset={handleResetGalleryImageMinimumWidth} /> - + ) => - dispatch(shouldAutoSwitchChanged(e.target.checked)) + dispatch(autoAssignBoardOnClickChanged(e.target.checked)) } /> diff --git a/invokeai/frontend/web/src/features/gallery/components/ImageContextMenu/ImageContextMenu.tsx b/invokeai/frontend/web/src/features/gallery/components/ImageContextMenu/ImageContextMenu.tsx index 565012a36f..0c13b37f0c 100644 --- a/invokeai/frontend/web/src/features/gallery/components/ImageContextMenu/ImageContextMenu.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/ImageContextMenu/ImageContextMenu.tsx @@ -1,45 +1,65 @@ import { MenuList } from '@chakra-ui/react'; -import { ContextMenu, ContextMenuProps } from 'chakra-ui-contextmenu'; +import { + IAIContextMenu, + IAIContextMenuProps, +} from 'common/components/IAIContextMenu'; import { MouseEvent, memo, useCallback } from 'react'; import { ImageDTO } from 'services/api/types'; import { menuListMotionProps } from 'theme/components/menu'; import SingleSelectionMenuItems from './SingleSelectionMenuItems'; +import { createSelector } from '@reduxjs/toolkit'; +import { stateSelector } from 'app/store/store'; +import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; +import { useAppSelector } from 'app/store/storeHooks'; +import MultipleSelectionMenuItems from './MultipleSelectionMenuItems'; type Props = { imageDTO: ImageDTO | undefined; - children: ContextMenuProps['children']; + children: IAIContextMenuProps['children']; }; +const selector = createSelector( + [stateSelector], + ({ gallery }) => { + const selectionCount = gallery.selection.length; + + return { selectionCount }; + }, + defaultSelectorOptions +); + const ImageContextMenu = ({ imageDTO, children }: Props) => { - // const selector = useMemo( - // () => - // createSelector( - // [stateSelector], - // ({ gallery }) => { - // const selectionCount = gallery.selection.length; - - // return { selectionCount }; - // }, - // defaultSelectorOptions - // ), - // [] - // ); - - // const { selectionCount } = useAppSelector(selector); + const { selectionCount } = useAppSelector(selector); const skipEvent = useCallback((e: MouseEvent) => { e.preventDefault(); }, []); return ( - + menuProps={{ size: 'sm', isLazy: true }} menuButtonProps={{ bg: 'transparent', _hover: { bg: 'transparent' }, }} - renderMenu={() => - imageDTO ? ( + renderMenu={() => { + if (!imageDTO) { + return null; + } + + if (selectionCount > 1) { + return ( + + + + ); + } + + return ( { > - ) : null - } + ); + }} > {children} - + ); }; diff --git a/invokeai/frontend/web/src/features/gallery/components/ImageContextMenu/MultipleSelectionMenuItems.tsx b/invokeai/frontend/web/src/features/gallery/components/ImageContextMenu/MultipleSelectionMenuItems.tsx index 62d2cb06f4..0f36273122 100644 --- a/invokeai/frontend/web/src/features/gallery/components/ImageContextMenu/MultipleSelectionMenuItems.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/ImageContextMenu/MultipleSelectionMenuItems.tsx @@ -1,30 +1,67 @@ import { MenuItem } from '@chakra-ui/react'; -import { useCallback } from 'react'; -import { FaFolder, FaFolderPlus, FaTrash } from 'react-icons/fa'; +import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; +import { + imagesToChangeSelected, + isModalOpenChanged, +} from 'features/changeBoardModal/store/slice'; +import { imagesToDeleteSelected } from 'features/deleteImageModal/store/slice'; +import { useCallback, useMemo } from 'react'; +import { FaFolder, FaTrash } from 'react-icons/fa'; +import { MdStar, MdStarBorder } from 'react-icons/md'; +import { + useStarImagesMutation, + useUnstarImagesMutation, +} from '../../../../services/api/endpoints/images'; const MultipleSelectionMenuItems = () => { - const handleAddSelectionToBoard = useCallback(() => { - // TODO: add selection to board - }, []); + const dispatch = useAppDispatch(); + const selection = useAppSelector((state) => state.gallery.selection); + + const [starImages] = useStarImagesMutation(); + const [unstarImages] = useUnstarImagesMutation(); + + const handleChangeBoard = useCallback(() => { + dispatch(imagesToChangeSelected(selection)); + dispatch(isModalOpenChanged(true)); + }, [dispatch, selection]); const handleDeleteSelection = useCallback(() => { - // TODO: delete all selected images - }, []); + dispatch(imagesToDeleteSelected(selection)); + }, [dispatch, selection]); - const handleAddSelectionToBatch = useCallback(() => { - // TODO: add selection to batch - }, []); + const handleStarSelection = useCallback(() => { + starImages({ imageDTOs: selection }); + }, [starImages, selection]); + + const handleUnstarSelection = useCallback(() => { + unstarImages({ imageDTOs: selection }); + }, [unstarImages, selection]); + + const areAllStarred = useMemo(() => { + return selection.every((img) => img.starred); + }, [selection]); + + const areAllUnstarred = useMemo(() => { + return selection.every((img) => !img.starred); + }, [selection]); return ( <> - } onClickCapture={handleAddSelectionToBoard}> - Move Selection to Board - - } - onClickCapture={handleAddSelectionToBatch} - > - Add Selection to Batch + {areAllStarred && ( + } + onClickCapture={handleUnstarSelection} + > + Unstar All + + )} + {(areAllUnstarred || (!areAllStarred && !areAllUnstarred)) && ( + } onClickCapture={handleStarSelection}> + Star All + + )} + } onClickCapture={handleChangeBoard}> + Change Board { const { imageDTO } = props; - const selector = useMemo( - () => - createSelector( - [stateSelector], - ({ gallery }) => { - const isInBatch = gallery.batchImageNames.includes( - imageDTO.image_name - ); - - return { isInBatch }; - }, - defaultSelectorOptions - ), - [imageDTO.image_name] - ); - - const { isInBatch } = useAppSelector(selector); const dispatch = useAppDispatch(); const { t } = useTranslation(); const toaster = useAppToaster(); const isCanvasEnabled = useFeatureStatus('unifiedCanvas').isFeatureEnabled; - const isBatchEnabled = useFeatureStatus('batches').isFeatureEnabled; - - const { onClickAddToBoard } = useContext(AddImageToBoardContext); const [debouncedMetadataQueryArg, debounceState] = useDebounce( imageDTO.image_name, @@ -83,6 +64,9 @@ const SingleSelectionMenuItems = (props: SingleSelectionMenuItemsProps) => { : debouncedMetadataQueryArg ?? skipToken ); + const [starImages] = useStarImagesMutation(); + const [unstarImages] = useUnstarImagesMutation(); + const { isClipboardAPIAvailable, copyImageToClipboard } = useCopyImageToClipboard(); @@ -92,14 +76,12 @@ const SingleSelectionMenuItems = (props: SingleSelectionMenuItemsProps) => { if (!imageDTO) { return; } - dispatch(imageToDeleteSelected(imageDTO)); + dispatch(imagesToDeleteSelected([imageDTO])); }, [dispatch, imageDTO]); const { recallBothPrompts, recallSeed, recallAllParameters } = useRecallParameters(); - const [removeFromBoard] = useRemoveImageFromBoardMutation(); - // Recall parameters handlers const handleRecallPrompt = useCallback(() => { recallBothPrompts( @@ -144,25 +126,23 @@ const SingleSelectionMenuItems = (props: SingleSelectionMenuItemsProps) => { recallAllParameters(metadata); }, [metadata, recallAllParameters]); - const handleAddToBoard = useCallback(() => { - onClickAddToBoard(imageDTO); - }, [imageDTO, onClickAddToBoard]); - - const handleRemoveFromBoard = useCallback(() => { - if (!imageDTO.board_id) { - return; - } - removeFromBoard({ imageDTO }); - }, [imageDTO, removeFromBoard]); - - const handleAddToBatch = useCallback(() => { - dispatch(imagesAddedToBatch([imageDTO.image_name])); - }, [dispatch, imageDTO.image_name]); + const handleChangeBoard = useCallback(() => { + dispatch(imagesToChangeSelected([imageDTO])); + dispatch(isModalOpenChanged(true)); + }, [dispatch, imageDTO]); const handleCopyImage = useCallback(() => { copyImageToClipboard(imageDTO.image_url); }, [copyImageToClipboard, imageDTO.image_url]); + const handleStarImage = useCallback(() => { + if (imageDTO) starImages({ imageDTOs: [imageDTO] }); + }, [starImages, imageDTO]); + + const handleUnstarImage = useCallback(() => { + if (imageDTO) unstarImages({ imageDTOs: [imageDTO] }); + }, [unstarImages, imageDTO]); + return ( <> { {t('parameters.sendToUnifiedCanvas')} )} - {isBatchEnabled && ( - } - isDisabled={isInBatch} - onClickCapture={handleAddToBatch} - > - Add to Batch - - )} - } onClickCapture={handleAddToBoard}> - {imageDTO.board_id ? 'Change Board' : 'Add to Board'} + } onClickCapture={handleChangeBoard}> + Change Board - {imageDTO.board_id && ( - } onClickCapture={handleRemoveFromBoard}> - Remove from Board + {imageDTO.starred ? ( + } onClickCapture={handleUnstarImage}> + Unstar Image + + ) : ( + } onClickCapture={handleStarImage}> + Star Image )} { - const { selectedBoardId, galleryView } = state.gallery; + const { galleryView } = state.gallery; return { - selectedBoardId, galleryView, }; }, @@ -39,7 +37,7 @@ const selector = createSelector( const ImageGalleryContent = () => { const resizeObserverRef = useRef(null); const galleryGridRef = useRef(null); - const { selectedBoardId, galleryView } = useAppSelector(selector); + const { galleryView } = useAppSelector(selector); const dispatch = useAppDispatch(); const { isOpen: isBoardListOpen, onToggle: onToggleBoardList } = useDisclosure(); @@ -54,11 +52,13 @@ const ImageGalleryContent = () => { return ( @@ -130,12 +130,7 @@ const ImageGalleryContent = () => {
- - {selectedBoardId === 'batch' ? ( - - ) : ( - - )} + ); diff --git a/invokeai/frontend/web/src/features/gallery/components/ImageGrid/BatchImage.tsx b/invokeai/frontend/web/src/features/gallery/components/ImageGrid/BatchImage.tsx deleted file mode 100644 index 528e8cc06f..0000000000 --- a/invokeai/frontend/web/src/features/gallery/components/ImageGrid/BatchImage.tsx +++ /dev/null @@ -1,122 +0,0 @@ -import { Box } from '@chakra-ui/react'; -import { createSelector } from '@reduxjs/toolkit'; -import { TypesafeDraggableData } from 'app/components/ImageDnd/typesafeDnd'; -import { stateSelector } from 'app/store/store'; -import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; -import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; -import IAIDndImage from 'common/components/IAIDndImage'; -import IAIErrorLoadingImageFallback from 'common/components/IAIErrorLoadingImageFallback'; -import IAIFillSkeleton from 'common/components/IAIFillSkeleton'; -import ImageContextMenu from 'features/gallery/components/ImageContextMenu/ImageContextMenu'; -import { imagesRemovedFromBatch } from 'features/gallery/store/gallerySlice'; -import { memo, useCallback, useMemo } from 'react'; -import { useGetImageDTOQuery } from 'services/api/endpoints/images'; - -const makeSelector = (image_name: string) => - createSelector( - [stateSelector], - (state) => ({ - selectionCount: state.gallery.selection.length, - selection: state.gallery.selection, - isSelected: state.gallery.selection.includes(image_name), - }), - defaultSelectorOptions - ); - -type BatchImageProps = { - imageName: string; -}; - -const BatchImage = (props: BatchImageProps) => { - const dispatch = useAppDispatch(); - const { imageName } = props; - const { - currentData: imageDTO, - isLoading, - isError, - } = useGetImageDTOQuery(imageName); - const selector = useMemo(() => makeSelector(imageName), [imageName]); - - const { isSelected, selectionCount, selection } = useAppSelector(selector); - - const handleClickRemove = useCallback(() => { - dispatch(imagesRemovedFromBatch([imageName])); - }, [dispatch, imageName]); - - // const handleClick = useCallback( - // (e: MouseEvent) => { - // if (e.shiftKey) { - // dispatch(imageRangeEndSelected(imageName)); - // } else if (e.ctrlKey || e.metaKey) { - // dispatch(imageSelectionToggled(imageName)); - // } else { - // dispatch(imageSelected(imageName)); - // } - // }, - // [dispatch, imageName] - // ); - - const draggableData = useMemo(() => { - if (selectionCount > 1) { - return { - id: 'batch', - payloadType: 'IMAGE_NAMES', - payload: { image_names: selection }, - }; - } - - if (imageDTO) { - return { - id: 'batch', - payloadType: 'IMAGE_DTO', - payload: { imageDTO }, - }; - } - }, [imageDTO, selection, selectionCount]); - - if (isLoading) { - return ; - } - - if (isError || !imageDTO) { - return ; - } - - return ( - - - {(ref) => ( - - - - )} - - - ); -}; - -export default memo(BatchImage); diff --git a/invokeai/frontend/web/src/features/gallery/components/ImageGrid/BatchImageGrid.tsx b/invokeai/frontend/web/src/features/gallery/components/ImageGrid/BatchImageGrid.tsx deleted file mode 100644 index feaa47403d..0000000000 --- a/invokeai/frontend/web/src/features/gallery/components/ImageGrid/BatchImageGrid.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import { Box } from '@chakra-ui/react'; -import { useAppSelector } from 'app/store/storeHooks'; -import { useOverlayScrollbars } from 'overlayscrollbars-react'; - -import { memo, useEffect, useRef, useState } from 'react'; -import { useTranslation } from 'react-i18next'; -import { FaImage } from 'react-icons/fa'; - -import { createSelector } from '@reduxjs/toolkit'; -import { stateSelector } from 'app/store/store'; -import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; -import { IAINoContentFallback } from 'common/components/IAIImageFallback'; -import { VirtuosoGrid } from 'react-virtuoso'; -import BatchImage from './BatchImage'; -import ItemContainer from './ImageGridItemContainer'; -import ListContainer from './ImageGridListContainer'; - -const selector = createSelector( - [stateSelector], - (state) => { - return { - imageNames: state.gallery.batchImageNames, - }; - }, - defaultSelectorOptions -); - -const BatchImageGrid = () => { - const { t } = useTranslation(); - const rootRef = useRef(null); - const [scroller, setScroller] = useState(null); - const [initialize, osInstance] = useOverlayScrollbars({ - defer: true, - options: { - scrollbars: { - visibility: 'auto', - autoHide: 'leave', - autoHideDelay: 1300, - theme: 'os-theme-dark', - }, - overflow: { x: 'hidden' }, - }, - }); - - const { imageNames } = useAppSelector(selector); - - useEffect(() => { - const { current: root } = rootRef; - if (scroller && root) { - initialize({ - target: root, - elements: { - viewport: scroller, - }, - }); - } - return () => osInstance()?.destroy(); - }, [scroller, initialize, osInstance]); - - if (imageNames.length) { - return ( - - ( - - )} - /> - - ); - } - - return ( - - ); -}; - -export default memo(BatchImageGrid); diff --git a/invokeai/frontend/web/src/features/gallery/components/ImageGrid/GalleryImage.tsx b/invokeai/frontend/web/src/features/gallery/components/ImageGrid/GalleryImage.tsx index 6a5d28a9ba..5dbbf011e8 100644 --- a/invokeai/frontend/web/src/features/gallery/components/ImageGrid/GalleryImage.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/ImageGrid/GalleryImage.tsx @@ -1,26 +1,23 @@ import { Box, Flex } from '@chakra-ui/react'; -import { createSelector } from '@reduxjs/toolkit'; -import { TypesafeDraggableData } from 'app/components/ImageDnd/typesafeDnd'; -import { stateSelector } from 'app/store/store'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; -import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; import IAIDndImage from 'common/components/IAIDndImage'; import IAIFillSkeleton from 'common/components/IAIFillSkeleton'; -import { imageSelected } from 'features/gallery/store/gallerySlice'; -import { imageToDeleteSelected } from 'features/imageDeletion/store/imageDeletionSlice'; -import { MouseEvent, memo, useCallback, useMemo } from 'react'; -import { useGetImageDTOQuery } from 'services/api/endpoints/images'; - -export const makeSelector = (image_name: string) => - createSelector( - [stateSelector], - ({ gallery }) => ({ - isSelected: gallery.selection.includes(image_name), - selectionCount: gallery.selection.length, - selection: gallery.selection, - }), - defaultSelectorOptions - ); +import { imagesToDeleteSelected } from 'features/deleteImageModal/store/slice'; +import { + ImageDTOsDraggableData, + ImageDraggableData, + TypesafeDraggableData, +} from 'features/dnd/types'; +import { useMultiselect } from 'features/gallery/hooks/useMultiselect.ts'; +import { MouseEvent, memo, useCallback, useMemo, useState } from 'react'; +import { FaTrash } from 'react-icons/fa'; +import { MdStar, MdStarBorder } from 'react-icons/md'; +import { + useGetImageDTOQuery, + useStarImagesMutation, + useUnstarImagesMutation, +} from 'services/api/endpoints/images'; +import IAIDndImageIcon from '../../../../common/components/IAIDndImageIcon'; interface HoverableImageProps { imageName: string; @@ -30,22 +27,10 @@ const GalleryImage = (props: HoverableImageProps) => { const dispatch = useAppDispatch(); const { imageName } = props; const { currentData: imageDTO } = useGetImageDTOQuery(imageName); - const localSelector = useMemo(() => makeSelector(imageName), [imageName]); + const shift = useAppSelector((state) => state.hotkeys.shift); - const { isSelected, selectionCount, selection } = - useAppSelector(localSelector); - - const handleClick = useCallback(() => { - // disable multiselect for now - // if (e.shiftKey) { - // dispatch(imageRangeEndSelected(imageName)); - // } else if (e.ctrlKey || e.metaKey) { - // dispatch(imageSelectionToggled(imageName)); - // } else { - // dispatch(imageSelected(imageName)); - // } - dispatch(imageSelected(imageName)); - }, [dispatch, imageName]); + const { handleClick, isSelected, selection, selectionCount } = + useMultiselect(imageDTO); const handleDelete = useCallback( (e: MouseEvent) => { @@ -53,29 +38,60 @@ const GalleryImage = (props: HoverableImageProps) => { if (!imageDTO) { return; } - dispatch(imageToDeleteSelected(imageDTO)); + dispatch(imagesToDeleteSelected([imageDTO])); }, [dispatch, imageDTO] ); const draggableData = useMemo(() => { if (selectionCount > 1) { - return { + const data: ImageDTOsDraggableData = { id: 'gallery-image', - payloadType: 'IMAGE_NAMES', - payload: { image_names: selection }, + payloadType: 'IMAGE_DTOS', + payload: { imageDTOs: selection }, }; + return data; } if (imageDTO) { - return { + const data: ImageDraggableData = { id: 'gallery-image', payloadType: 'IMAGE_DTO', payload: { imageDTO }, }; + return data; } }, [imageDTO, selection, selectionCount]); + const [starImages] = useStarImagesMutation(); + const [unstarImages] = useUnstarImagesMutation(); + + const toggleStarredState = useCallback(() => { + if (imageDTO) { + if (imageDTO.starred) { + unstarImages({ imageDTOs: [imageDTO] }); + } + if (!imageDTO.starred) { + starImages({ imageDTOs: [imageDTO] }); + } + } + }, [starImages, unstarImages, imageDTO]); + + const [isHovered, setIsHovered] = useState(false); + + const handleMouseOver = useCallback(() => { + setIsHovered(true); + }, []); + + const handleMouseOut = useCallback(() => { + setIsHovered(false); + }, []); + + const starIcon = useMemo(() => { + if (imageDTO?.starred) return ; + if (!imageDTO?.starred && isHovered) return ; + }, [imageDTO?.starred, isHovered]); + if (!imageDTO) { return ; } @@ -97,16 +113,34 @@ const GalleryImage = (props: HoverableImageProps) => { draggableData={draggableData} isSelected={isSelected} minSize={0} - onClickReset={handleDelete} imageSx={{ w: 'full', h: 'full' }} isDropDisabled={true} isUploadDisabled={true} thumbnail={true} withHoverOverlay - // resetIcon={} - // resetTooltip="Delete image" - // withResetIcon // removed bc it's too easy to accidentally delete images - /> + onMouseOver={handleMouseOver} + onMouseOut={handleMouseOut} + > + <> + + + {isHovered && shift && ( + } + tooltip="Delete" + styleOverrides={{ + bottom: 2, + top: 'auto', + }} + /> + )} + + ); diff --git a/invokeai/frontend/web/src/features/gallery/components/ImageGrid/GalleryImageGrid.tsx b/invokeai/frontend/web/src/features/gallery/components/ImageGrid/GalleryImageGrid.tsx index 4a56fe0e9a..bacd5c38ad 100644 --- a/invokeai/frontend/web/src/features/gallery/components/ImageGrid/GalleryImageGrid.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/ImageGrid/GalleryImageGrid.tsx @@ -26,7 +26,7 @@ const overlayScrollbarsConfig: UseOverlayScrollbarsParams = { options: { scrollbars: { visibility: 'auto', - autoHide: 'leave', + autoHide: 'scroll', autoHideDelay: 1300, theme: 'os-theme-dark', }, diff --git a/invokeai/frontend/web/src/features/gallery/components/ImageMetadataViewer/ImageMetadataActions.tsx b/invokeai/frontend/web/src/features/gallery/components/ImageMetadataViewer/ImageMetadataActions.tsx index df574c860b..c0821c2226 100644 --- a/invokeai/frontend/web/src/features/gallery/components/ImageMetadataViewer/ImageMetadataActions.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/ImageMetadataViewer/ImageMetadataActions.tsx @@ -1,6 +1,6 @@ import { useRecallParameters } from 'features/parameters/hooks/useRecallParameters'; import { useCallback } from 'react'; -import { UnsafeImageMetadata } from 'services/api/endpoints/images'; +import { UnsafeImageMetadata } from 'services/api/types'; import ImageMetadataItem from './ImageMetadataItem'; type Props = { diff --git a/invokeai/frontend/web/src/features/gallery/components/ImageMetadataViewer/ImageMetadataJSON.tsx b/invokeai/frontend/web/src/features/gallery/components/ImageMetadataViewer/ImageMetadataJSON.tsx index 590d40438b..69385607de 100644 --- a/invokeai/frontend/web/src/features/gallery/components/ImageMetadataViewer/ImageMetadataJSON.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/ImageMetadataViewer/ImageMetadataJSON.tsx @@ -1,26 +1,40 @@ import { Box, Flex, IconButton, Tooltip } from '@chakra-ui/react'; import { OverlayScrollbarsComponent } from 'overlayscrollbars-react'; -import { useMemo } from 'react'; -import { FaCopy } from 'react-icons/fa'; +import { useCallback, useMemo } from 'react'; +import { FaCopy, FaSave } from 'react-icons/fa'; type Props = { - copyTooltip: string; + label: string; jsonObject: object; + fileName?: string; }; const ImageMetadataJSON = (props: Props) => { - const { copyTooltip, jsonObject } = props; + const { label, jsonObject, fileName } = props; const jsonString = useMemo( () => JSON.stringify(jsonObject, null, 2), [jsonObject] ); + const handleCopy = useCallback(() => { + navigator.clipboard.writeText(jsonString); + }, [jsonString]); + + const handleSave = useCallback(() => { + const blob = new Blob([jsonString]); + const a = document.createElement('a'); + a.href = URL.createObjectURL(blob); + a.download = `${fileName || label}.json`; + document.body.appendChild(a); + a.click(); + a.remove(); + }, [jsonString, label, fileName]); + return ( { bottom: 0, overflow: 'auto', p: 4, + fontSize: 'sm', }} > { options={{ scrollbars: { visibility: 'auto', - autoHide: 'move', + autoHide: 'scroll', autoHideDelay: 1300, theme: 'os-theme-dark', }, @@ -54,12 +69,22 @@ const ImageMetadataJSON = (props: Props) => { - + } + variant="ghost" + opacity={0.7} + onClick={handleSave} + /> + + + } variant="ghost" - onClick={() => navigator.clipboard.writeText(jsonString)} + opacity={0.7} + onClick={handleCopy} /> diff --git a/invokeai/frontend/web/src/features/gallery/components/ImageMetadataViewer/ImageMetadataViewer.tsx b/invokeai/frontend/web/src/features/gallery/components/ImageMetadataViewer/ImageMetadataViewer.tsx index e1f2a9e46a..d70aea8a8d 100644 --- a/invokeai/frontend/web/src/features/gallery/components/ImageMetadataViewer/ImageMetadataViewer.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/ImageMetadataViewer/ImageMetadataViewer.tsx @@ -10,7 +10,8 @@ import { Text, } from '@chakra-ui/react'; import { skipToken } from '@reduxjs/toolkit/dist/query'; -import { memo, useMemo } from 'react'; +import { IAINoContentFallback } from 'common/components/IAIImageFallback'; +import { memo } from 'react'; import { useGetImageMetadataQuery } from 'services/api/endpoints/images'; import { ImageDTO } from 'services/api/types'; import { useDebounce } from 'use-debounce'; @@ -41,48 +42,15 @@ const ImageMetadataViewer = ({ image }: ImageMetadataViewerProps) => { const metadata = currentData?.metadata; const graph = currentData?.graph; - const tabData = useMemo(() => { - const _tabData: { label: string; data: object; copyTooltip: string }[] = []; - - if (metadata) { - _tabData.push({ - label: 'Core Metadata', - data: metadata, - copyTooltip: 'Copy Core Metadata JSON', - }); - } - - if (image) { - _tabData.push({ - label: 'Image Details', - data: image, - copyTooltip: 'Copy Image Details JSON', - }); - } - - if (graph) { - _tabData.push({ - label: 'Graph', - data: graph, - copyTooltip: 'Copy Graph JSON', - }); - } - return _tabData; - }, [metadata, graph, image]); - return ( { sx={{ display: 'flex', flexDir: 'column', w: 'full', h: 'full' }} > - {tabData.map((tab) => ( - - - {tab.label} - - - ))} + Core Metadata + Image Details + Graph - - {tabData.map((tab) => ( - - - - ))} + + + {metadata ? ( + + ) : ( + + )} + + + {image ? ( + + ) : ( + + )} + + + {graph ? ( + + ) : ( + + )} +
diff --git a/invokeai/frontend/web/src/features/gallery/hooks/useMultiselect.ts.ts b/invokeai/frontend/web/src/features/gallery/hooks/useMultiselect.ts.ts new file mode 100644 index 0000000000..a162c6788d --- /dev/null +++ b/invokeai/frontend/web/src/features/gallery/hooks/useMultiselect.ts.ts @@ -0,0 +1,101 @@ +import { createSelector } from '@reduxjs/toolkit'; +import { stateSelector } from 'app/store/store'; +import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; +import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; +import { selectListImagesBaseQueryArgs } from 'features/gallery/store/gallerySelectors'; +import { uniq } from 'lodash-es'; +import { MouseEvent, useCallback, useMemo } from 'react'; +import { useListImagesQuery } from 'services/api/endpoints/images'; +import { ImageDTO } from 'services/api/types'; +import { selectionChanged } from '../store/gallerySlice'; +import { imagesSelectors } from 'services/api/util'; +import { useFeatureStatus } from '../../system/hooks/useFeatureStatus'; + +const selector = createSelector( + [stateSelector, selectListImagesBaseQueryArgs], + ({ gallery }, queryArgs) => { + const selection = gallery.selection; + + return { + queryArgs, + selection, + }; + }, + defaultSelectorOptions +); + +export const useMultiselect = (imageDTO?: ImageDTO) => { + const dispatch = useAppDispatch(); + const { queryArgs, selection } = useAppSelector(selector); + + const { imageDTOs } = useListImagesQuery(queryArgs, { + selectFromResult: (result) => ({ + imageDTOs: result.data ? imagesSelectors.selectAll(result.data) : [], + }), + }); + + const isMultiSelectEnabled = useFeatureStatus('multiselect').isFeatureEnabled; + + const handleClick = useCallback( + (e: MouseEvent) => { + if (!imageDTO) { + return; + } + if (!isMultiSelectEnabled) { + dispatch(selectionChanged([imageDTO])); + return; + } + + if (e.shiftKey) { + const rangeEndImageName = imageDTO.image_name; + const lastSelectedImage = selection[selection.length - 1]?.image_name; + const lastClickedIndex = imageDTOs.findIndex( + (n) => n.image_name === lastSelectedImage + ); + const currentClickedIndex = imageDTOs.findIndex( + (n) => n.image_name === rangeEndImageName + ); + if (lastClickedIndex > -1 && currentClickedIndex > -1) { + // We have a valid range! + const start = Math.min(lastClickedIndex, currentClickedIndex); + const end = Math.max(lastClickedIndex, currentClickedIndex); + const imagesToSelect = imageDTOs.slice(start, end + 1); + dispatch(selectionChanged(uniq(selection.concat(imagesToSelect)))); + } + } else if (e.ctrlKey || e.metaKey) { + if ( + selection.some((i) => i.image_name === imageDTO.image_name) && + selection.length > 1 + ) { + dispatch( + selectionChanged( + selection.filter((n) => n.image_name !== imageDTO.image_name) + ) + ); + } else { + dispatch(selectionChanged(uniq(selection.concat(imageDTO)))); + } + } else { + dispatch(selectionChanged([imageDTO])); + } + }, + [dispatch, imageDTO, imageDTOs, selection, isMultiSelectEnabled] + ); + + const isSelected = useMemo( + () => + imageDTO + ? selection.some((i) => i.image_name === imageDTO.image_name) + : false, + [imageDTO, selection] + ); + + const selectionCount = useMemo(() => selection.length, [selection.length]); + + return { + selection, + selectionCount, + isSelected, + handleClick, + }; +}; diff --git a/invokeai/frontend/web/src/features/gallery/hooks/useNextPrevImage.ts b/invokeai/frontend/web/src/features/gallery/hooks/useNextPrevImage.ts index f2572a23b5..670dd7ee9f 100644 --- a/invokeai/frontend/web/src/features/gallery/hooks/useNextPrevImage.ts +++ b/invokeai/frontend/web/src/features/gallery/hooks/useNextPrevImage.ts @@ -4,14 +4,15 @@ import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; import { imageSelected } from 'features/gallery/store/gallerySlice'; import { clamp, isEqual } from 'lodash-es'; import { useCallback } from 'react'; +import { boardsApi } from 'services/api/endpoints/boards'; import { - ListImagesArgs, - imagesAdapter, imagesApi, useLazyListImagesQuery, } from 'services/api/endpoints/images'; import { selectListImagesBaseQueryArgs } from '../store/gallerySelectors'; import { IMAGE_LIMIT } from '../store/types'; +import { ListImagesArgs } from 'services/api/types'; +import { imagesAdapter } from 'services/api/util'; export const nextPrevImageButtonsSelector = createSelector( [stateSelector, selectListImagesBaseQueryArgs], @@ -19,12 +20,21 @@ export const nextPrevImageButtonsSelector = createSelector( const { data, status } = imagesApi.endpoints.listImages.select(baseQueryArgs)(state); + const { data: total } = + state.gallery.galleryView === 'images' + ? boardsApi.endpoints.getBoardImagesTotal.select( + baseQueryArgs.board_id ?? 'none' + )(state) + : boardsApi.endpoints.getBoardAssetsTotal.select( + baseQueryArgs.board_id ?? 'none' + )(state); + const lastSelectedImage = state.gallery.selection[state.gallery.selection.length - 1]; const isFetching = status === 'pending'; - if (!data || !lastSelectedImage || data.total === 0) { + if (!data || !lastSelectedImage || total === 0) { return { isFetching, queryArgs: baseQueryArgs, @@ -44,30 +54,30 @@ export const nextPrevImageButtonsSelector = createSelector( const images = selectors.selectAll(data); const currentImageIndex = images.findIndex( - (i) => i.image_name === lastSelectedImage + (i) => i.image_name === lastSelectedImage.image_name ); const nextImageIndex = clamp(currentImageIndex + 1, 0, images.length - 1); - const prevImageIndex = clamp(currentImageIndex - 1, 0, images.length - 1); const nextImageId = images[nextImageIndex]?.image_name; const prevImageId = images[prevImageIndex]?.image_name; - const nextImage = selectors.selectById(data, nextImageId); - const prevImage = selectors.selectById(data, prevImageId); + const nextImage = nextImageId + ? selectors.selectById(data, nextImageId) + : undefined; + const prevImage = prevImageId + ? selectors.selectById(data, prevImageId) + : undefined; const imagesLength = images.length; return { - isOnFirstImage: currentImageIndex === 0, - isOnLastImage: - !isNaN(currentImageIndex) && currentImageIndex === imagesLength - 1, - areMoreImagesAvailable: (data?.total ?? 0) > imagesLength, + loadedImagesCount: images.length, + currentImageIndex, + areMoreImagesAvailable: (total ?? 0) > imagesLength, isFetching: status === 'pending', nextImage, prevImage, - nextImageId, - prevImageId, queryArgs, }; }, @@ -82,22 +92,22 @@ export const useNextPrevImage = () => { const dispatch = useAppDispatch(); const { - isOnFirstImage, - isOnLastImage, - nextImageId, - prevImageId, + nextImage, + prevImage, areMoreImagesAvailable, isFetching, queryArgs, + loadedImagesCount, + currentImageIndex, } = useAppSelector(nextPrevImageButtonsSelector); const handlePrevImage = useCallback(() => { - prevImageId && dispatch(imageSelected(prevImageId)); - }, [dispatch, prevImageId]); + prevImage && dispatch(imageSelected(prevImage)); + }, [dispatch, prevImage]); const handleNextImage = useCallback(() => { - nextImageId && dispatch(imageSelected(nextImageId)); - }, [dispatch, nextImageId]); + nextImage && dispatch(imageSelected(nextImage)); + }, [dispatch, nextImage]); const [listImages] = useLazyListImagesQuery(); @@ -108,10 +118,12 @@ export const useNextPrevImage = () => { return { handlePrevImage, handleNextImage, - isOnFirstImage, - isOnLastImage, - nextImageId, - prevImageId, + isOnFirstImage: currentImageIndex === 0, + isOnLastImage: + currentImageIndex !== undefined && + currentImageIndex === loadedImagesCount - 1, + nextImage, + prevImage, areMoreImagesAvailable, handleLoadMoreImages, isFetching, diff --git a/invokeai/frontend/web/src/features/gallery/store/actions.ts b/invokeai/frontend/web/src/features/gallery/store/actions.ts index 0e1b1ef2a0..9368fe6cf6 100644 --- a/invokeai/frontend/web/src/features/gallery/store/actions.ts +++ b/invokeai/frontend/web/src/features/gallery/store/actions.ts @@ -1,5 +1,5 @@ import { createAction } from '@reduxjs/toolkit'; -import { ImageUsage } from 'app/contexts/AddImageToBoardContext'; +import { ImageUsage } from 'features/deleteImageModal/store/types'; import { BoardDTO } from 'services/api/types'; export type RequestedBoardImagesDeletionArg = { diff --git a/invokeai/frontend/web/src/features/gallery/store/boardSlice.ts b/invokeai/frontend/web/src/features/gallery/store/boardSlice.ts deleted file mode 100644 index ad43498e51..0000000000 --- a/invokeai/frontend/web/src/features/gallery/store/boardSlice.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { PayloadAction, createSlice } from '@reduxjs/toolkit'; - -type BoardsState = { - searchText: string; - updateBoardModalOpen: boolean; -}; - -export const initialBoardsState: BoardsState = { - updateBoardModalOpen: false, - searchText: '', -}; - -const boardsSlice = createSlice({ - name: 'boards', - initialState: initialBoardsState, - reducers: { - setBoardSearchText: (state, action: PayloadAction) => { - state.searchText = action.payload; - }, - setUpdateBoardModalOpen: (state, action: PayloadAction) => { - state.updateBoardModalOpen = action.payload; - }, - }, -}); - -export const { setBoardSearchText, setUpdateBoardModalOpen } = - boardsSlice.actions; - -export default boardsSlice.reducer; diff --git a/invokeai/frontend/web/src/features/gallery/store/gallerySelectors.ts b/invokeai/frontend/web/src/features/gallery/store/gallerySelectors.ts index b589550157..47e29456a0 100644 --- a/invokeai/frontend/web/src/features/gallery/store/gallerySelectors.ts +++ b/invokeai/frontend/web/src/features/gallery/store/gallerySelectors.ts @@ -1,7 +1,7 @@ import { createSelector } from '@reduxjs/toolkit'; import { RootState } from 'app/store/store'; import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; -import { ListImagesArgs } from 'services/api/endpoints/images'; +import { ListImagesArgs } from 'services/api/types'; import { ASSETS_CATEGORIES, IMAGE_CATEGORIES, @@ -24,7 +24,7 @@ export const selectListImagesBaseQueryArgs = createSelector( galleryView === 'images' ? IMAGE_CATEGORIES : ASSETS_CATEGORIES; const listImagesBaseQueryArgs: ListImagesArgs = { - board_id: selectedBoardId ?? 'none', + board_id: selectedBoardId, categories, offset: 0, limit: INITIAL_IMAGE_LIMIT, diff --git a/invokeai/frontend/web/src/features/gallery/store/gallerySlice.ts b/invokeai/frontend/web/src/features/gallery/store/gallerySlice.ts index 5eabe5de26..a4e4b02937 100644 --- a/invokeai/frontend/web/src/features/gallery/store/gallerySlice.ts +++ b/invokeai/frontend/web/src/features/gallery/store/gallerySlice.ts @@ -1,122 +1,67 @@ import type { PayloadAction } from '@reduxjs/toolkit'; import { createSlice, isAnyOf } from '@reduxjs/toolkit'; -import { uniq } from 'lodash-es'; import { boardsApi } from 'services/api/endpoints/boards'; +import { imagesApi } from 'services/api/endpoints/images'; +import { ImageDTO } from 'services/api/types'; import { BoardId, GalleryState, GalleryView } from './types'; export const initialGalleryState: GalleryState = { selection: [], shouldAutoSwitch: true, - autoAddBoardId: undefined, + autoAssignBoardOnClick: true, + autoAddBoardId: 'none', galleryImageMinimumWidth: 96, - selectedBoardId: undefined, + selectedBoardId: 'none', galleryView: 'images', - batchImageNames: [], - isBatchEnabled: false, + boardSearchText: '', }; export const gallerySlice = createSlice({ name: 'gallery', initialState: initialGalleryState, reducers: { - imageRangeEndSelected: () => { - // TODO - }, - // imageRangeEndSelected: (state, action: PayloadAction) => { - // const rangeEndImageName = action.payload; - // const lastSelectedImage = state.selection[state.selection.length - 1]; - // const filteredImages = selectFilteredImagesLocal(state); - // const lastClickedIndex = filteredImages.findIndex( - // (n) => n.image_name === lastSelectedImage - // ); - // const currentClickedIndex = filteredImages.findIndex( - // (n) => n.image_name === rangeEndImageName - // ); - // if (lastClickedIndex > -1 && currentClickedIndex > -1) { - // // We have a valid range! - // const start = Math.min(lastClickedIndex, currentClickedIndex); - // const end = Math.max(lastClickedIndex, currentClickedIndex); - // const imagesToSelect = filteredImages - // .slice(start, end + 1) - // .map((i) => i.image_name); - // state.selection = uniq(state.selection.concat(imagesToSelect)); - // } - // }, - imageSelectionToggled: () => { - // TODO - }, - // imageSelectionToggled: (state, action: PayloadAction) => { - // TODO: multiselect - // if ( - // state.selection.includes(action.payload) && - // state.selection.length > 1 - // ) { - // state.selection = state.selection.filter( - // (imageName) => imageName !== action.payload - // ); - // } else { - // state.selection = uniq(state.selection.concat(action.payload)); - // } - imageSelected: (state, action: PayloadAction) => { + imageSelected: (state, action: PayloadAction) => { state.selection = action.payload ? [action.payload] : []; }, + selectionChanged: (state, action: PayloadAction) => { + state.selection = action.payload; + }, shouldAutoSwitchChanged: (state, action: PayloadAction) => { state.shouldAutoSwitch = action.payload; }, setGalleryImageMinimumWidth: (state, action: PayloadAction) => { state.galleryImageMinimumWidth = action.payload; }, + autoAssignBoardOnClickChanged: (state, action: PayloadAction) => { + state.autoAssignBoardOnClick = action.payload; + }, boardIdSelected: (state, action: PayloadAction) => { state.selectedBoardId = action.payload; state.galleryView = 'images'; }, - isBatchEnabledChanged: (state, action: PayloadAction) => { - state.isBatchEnabled = action.payload; - }, - imagesAddedToBatch: (state, action: PayloadAction) => { - state.batchImageNames = uniq( - state.batchImageNames.concat(action.payload) - ); - }, - imagesRemovedFromBatch: (state, action: PayloadAction) => { - state.batchImageNames = state.batchImageNames.filter( - (imageName) => !action.payload.includes(imageName) - ); - - const newSelection = state.selection.filter( - (imageName) => !action.payload.includes(imageName) - ); - - if (newSelection.length) { - state.selection = newSelection; + autoAddBoardIdChanged: (state, action: PayloadAction) => { + if (!action.payload) { + state.autoAddBoardId = 'none'; return; } - - state.selection = [state.batchImageNames[0]] ?? []; - }, - batchReset: (state) => { - state.batchImageNames = []; - state.selection = []; - }, - autoAddBoardIdChanged: ( - state, - action: PayloadAction - ) => { state.autoAddBoardId = action.payload; }, galleryViewChanged: (state, action: PayloadAction) => { state.galleryView = action.payload; }, + boardSearchTextChanged: (state, action: PayloadAction) => { + state.boardSearchText = action.payload; + }, }, extraReducers: (builder) => { builder.addMatcher(isAnyBoardDeleted, (state, action) => { const deletedBoardId = action.meta.arg.originalArgs; if (deletedBoardId === state.selectedBoardId) { - state.selectedBoardId = undefined; + state.selectedBoardId = 'none'; state.galleryView = 'images'; } if (deletedBoardId === state.autoAddBoardId) { - state.autoAddBoardId = undefined; + state.autoAddBoardId = 'none'; } }); builder.addMatcher( @@ -128,7 +73,7 @@ export const gallerySlice = createSlice({ } if (!boards.map((b) => b.board_id).includes(state.autoAddBoardId)) { - state.autoAddBoardId = undefined; + state.autoAddBoardId = 'none'; } } ); @@ -136,22 +81,20 @@ export const gallerySlice = createSlice({ }); export const { - imageRangeEndSelected, - imageSelectionToggled, imageSelected, shouldAutoSwitchChanged, + autoAssignBoardOnClickChanged, setGalleryImageMinimumWidth, boardIdSelected, - isBatchEnabledChanged, - imagesAddedToBatch, - imagesRemovedFromBatch, autoAddBoardIdChanged, galleryViewChanged, + selectionChanged, + boardSearchTextChanged, } = gallerySlice.actions; export default gallerySlice.reducer; const isAnyBoardDeleted = isAnyOf( - boardsApi.endpoints.deleteBoard.matchFulfilled, - boardsApi.endpoints.deleteBoardAndImages.matchFulfilled + imagesApi.endpoints.deleteBoard.matchFulfilled, + imagesApi.endpoints.deleteBoardAndImages.matchFulfilled ); diff --git a/invokeai/frontend/web/src/features/gallery/store/types.ts b/invokeai/frontend/web/src/features/gallery/store/types.ts index d19a6fded3..7b707dd303 100644 --- a/invokeai/frontend/web/src/features/gallery/store/types.ts +++ b/invokeai/frontend/web/src/features/gallery/store/types.ts @@ -1,4 +1,4 @@ -import { ImageCategory } from 'services/api/types'; +import { ImageCategory, ImageDTO } from 'services/api/types'; export const IMAGE_CATEGORIES: ImageCategory[] = ['general']; export const ASSETS_CATEGORIES: ImageCategory[] = [ @@ -11,16 +11,15 @@ export const INITIAL_IMAGE_LIMIT = 100; export const IMAGE_LIMIT = 20; export type GalleryView = 'images' | 'assets'; -// export type BoardId = 'no_board' | (string & Record); -export type BoardId = string | undefined; +export type BoardId = 'none' | (string & Record); export type GalleryState = { - selection: string[]; + selection: ImageDTO[]; shouldAutoSwitch: boolean; - autoAddBoardId: string | undefined; + autoAssignBoardOnClick: boolean; + autoAddBoardId: BoardId; galleryImageMinimumWidth: number; selectedBoardId: BoardId; galleryView: GalleryView; - batchImageNames: string[]; - isBatchEnabled: boolean; + boardSearchText: string; }; diff --git a/invokeai/frontend/web/src/features/imageDeletion/store/imageDeletionSlice.ts b/invokeai/frontend/web/src/features/imageDeletion/store/imageDeletionSlice.ts deleted file mode 100644 index 0bfd9a537d..0000000000 --- a/invokeai/frontend/web/src/features/imageDeletion/store/imageDeletionSlice.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { PayloadAction, createSlice } from '@reduxjs/toolkit'; -import { ImageDTO } from 'services/api/types'; - -type DeleteImageState = { - imageToDelete: ImageDTO | null; - isModalOpen: boolean; -}; - -export const initialDeleteImageState: DeleteImageState = { - imageToDelete: null, - isModalOpen: false, -}; - -const imageDeletion = createSlice({ - name: 'imageDeletion', - initialState: initialDeleteImageState, - reducers: { - isModalOpenChanged: (state, action: PayloadAction) => { - state.isModalOpen = action.payload; - }, - imageToDeleteSelected: (state, action: PayloadAction) => { - state.imageToDelete = action.payload; - }, - imageToDeleteCleared: (state) => { - state.imageToDelete = null; - state.isModalOpen = false; - }, - }, -}); - -export const { - isModalOpenChanged, - imageToDeleteSelected, - imageToDeleteCleared, -} = imageDeletion.actions; - -export default imageDeletion.reducer; diff --git a/invokeai/frontend/web/src/features/imageDeletion/store/types.ts b/invokeai/frontend/web/src/features/imageDeletion/store/types.ts deleted file mode 100644 index b3f4dc9c8d..0000000000 --- a/invokeai/frontend/web/src/features/imageDeletion/store/types.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type ImageUsage = { - isInitialImage: boolean; - isCanvasImage: boolean; - isNodesImage: boolean; - isControlNetImage: boolean; -}; diff --git a/invokeai/frontend/web/src/features/lora/components/ParamLoraCollapse.tsx b/invokeai/frontend/web/src/features/lora/components/ParamLoraCollapse.tsx index e212efbfa2..c2edd94106 100644 --- a/invokeai/frontend/web/src/features/lora/components/ParamLoraCollapse.tsx +++ b/invokeai/frontend/web/src/features/lora/components/ParamLoraCollapse.tsx @@ -31,7 +31,7 @@ const ParamLoraCollapse = () => { } return ( - + diff --git a/invokeai/frontend/web/src/features/lora/components/ParamLoraList.tsx b/invokeai/frontend/web/src/features/lora/components/ParamLoraList.tsx index 835c315e5c..5ba4e711ef 100644 --- a/invokeai/frontend/web/src/features/lora/components/ParamLoraList.tsx +++ b/invokeai/frontend/web/src/features/lora/components/ParamLoraList.tsx @@ -1,3 +1,4 @@ +import { Divider, Flex } from '@chakra-ui/react'; import { createSelector } from '@reduxjs/toolkit'; import { stateSelector } from 'app/store/store'; import { useAppSelector } from 'app/store/storeHooks'; @@ -8,20 +9,21 @@ import ParamLora from './ParamLora'; const selector = createSelector( stateSelector, ({ lora }) => { - const { loras } = lora; - - return { loras }; + return { lorasArray: map(lora.loras) }; }, defaultSelectorOptions ); const ParamLoraList = () => { - const { loras } = useAppSelector(selector); + const { lorasArray } = useAppSelector(selector); return ( <> - {map(loras, (lora) => ( - + {lorasArray.map((lora, i) => ( + + {i > 0 && } + + ))} ); diff --git a/invokeai/frontend/web/src/features/lora/components/ParamLoraSelect.tsx b/invokeai/frontend/web/src/features/lora/components/ParamLoraSelect.tsx index 631047aaab..2046d36ab2 100644 --- a/invokeai/frontend/web/src/features/lora/components/ParamLoraSelect.tsx +++ b/invokeai/frontend/web/src/features/lora/components/ParamLoraSelect.tsx @@ -54,12 +54,9 @@ const ParamLoRASelect = () => { }); }); - // Sort Alphabetically - data.sort((a, b) => - a.label && b.label ? (a.label?.localeCompare(b.label) ? 1 : -1) : -1 - ); + data.sort((a, b) => (a.label && !b.label ? 1 : -1)); - return data.sort((a, b) => (a.disabled && !b.disabled ? -1 : 1)); + return data.sort((a, b) => (a.disabled && !b.disabled ? 1 : -1)); }, [loras, loraModels, currentMainModel?.base_model]); const handleChange = useCallback( diff --git a/invokeai/frontend/web/src/features/lora/store/loraSlice.ts b/invokeai/frontend/web/src/features/lora/store/loraSlice.ts index f0067a85a2..10a1671933 100644 --- a/invokeai/frontend/web/src/features/lora/store/loraSlice.ts +++ b/invokeai/frontend/web/src/features/lora/store/loraSlice.ts @@ -39,11 +39,19 @@ export const loraSlice = createSlice({ action: PayloadAction<{ id: string; weight: number }> ) => { const { id, weight } = action.payload; - state.loras[id].weight = weight; + const lora = state.loras[id]; + if (!lora) { + return; + } + lora.weight = weight; }, loraWeightReset: (state, action: PayloadAction) => { const id = action.payload; - state.loras[id].weight = defaultLoRAConfig.weight; + const lora = state.loras[id]; + if (!lora) { + return; + } + lora.weight = defaultLoRAConfig.weight; }, }, }); diff --git a/invokeai/frontend/web/src/features/nodes/components/AddNodeMenu.tsx b/invokeai/frontend/web/src/features/nodes/components/AddNodeMenu.tsx index a1a1acf1f8..a816762d0f 100644 --- a/invokeai/frontend/web/src/features/nodes/components/AddNodeMenu.tsx +++ b/invokeai/frontend/web/src/features/nodes/components/AddNodeMenu.tsx @@ -9,30 +9,40 @@ import { map } from 'lodash-es'; import { forwardRef, useCallback } from 'react'; import 'reactflow/dist/style.css'; import { AnyInvocationType } from 'services/events/types'; -import { useBuildInvocation } from '../hooks/useBuildInvocation'; +import { useBuildNodeData } from '../hooks/useBuildNodeData'; import { nodeAdded } from '../store/nodesSlice'; type NodeTemplate = { label: string; value: string; description: string; + tags: string[]; }; const selector = createSelector( [stateSelector], ({ nodes }) => { - const data: NodeTemplate[] = map(nodes.invocationTemplates, (template) => { + const data: NodeTemplate[] = map(nodes.nodeTemplates, (template) => { return { label: template.title, value: template.type, description: template.description, + tags: template.tags, }; }); data.push({ label: 'Progress Image', - value: 'progress_image', - description: 'Displays the progress image in the Node Editor', + value: 'current_image', + description: 'Displays the current image in the Node Editor', + tags: ['progress'], + }); + + data.push({ + label: 'Notes', + value: 'notes', + description: 'Add notes about your workflow', + tags: ['notes'], }); return { data }; @@ -44,7 +54,7 @@ const AddNodeMenu = () => { const dispatch = useAppDispatch(); const { data } = useAppSelector(selector); - const buildInvocation = useBuildInvocation(); + const buildInvocation = useBuildNodeData(); const toaster = useAppToaster(); @@ -89,11 +99,12 @@ const AddNodeMenu = () => { filter={(value, item: NodeTemplate) => item.label.toLowerCase().includes(value.toLowerCase().trim()) || item.value.toLowerCase().includes(value.toLowerCase().trim()) || - item.description.toLowerCase().includes(value.toLowerCase().trim()) + item.description.toLowerCase().includes(value.toLowerCase().trim()) || + item.tags.includes(value.toLowerCase().trim()) } onChange={handleChange} sx={{ - width: '18rem', + width: '24rem', }} /> diff --git a/invokeai/frontend/web/src/features/nodes/components/CustomConnectionLine.tsx b/invokeai/frontend/web/src/features/nodes/components/CustomConnectionLine.tsx new file mode 100644 index 0000000000..678d8e3d1d --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/CustomConnectionLine.tsx @@ -0,0 +1,61 @@ +import { createSelector } from '@reduxjs/toolkit'; +import { stateSelector } from 'app/store/store'; +import { useAppSelector } from 'app/store/storeHooks'; +import { ConnectionLineComponentProps, getBezierPath } from 'reactflow'; +import { FIELDS, colorTokenToCssVar } from '../types/constants'; + +const selector = createSelector(stateSelector, ({ nodes }) => { + const { shouldAnimateEdges, currentConnectionFieldType, shouldColorEdges } = + nodes; + + const stroke = + currentConnectionFieldType && shouldColorEdges + ? colorTokenToCssVar(FIELDS[currentConnectionFieldType].color) + : colorTokenToCssVar('base.500'); + + let className = 'react-flow__custom_connection-path'; + + if (shouldAnimateEdges) { + className = className.concat(' animated'); + } + + return { + stroke, + className, + }; +}); + +export const CustomConnectionLine = ({ + fromX, + fromY, + fromPosition, + toX, + toY, + toPosition, +}: ConnectionLineComponentProps) => { + const { stroke, className } = useAppSelector(selector); + + const pathParams = { + sourceX: fromX, + sourceY: fromY, + sourcePosition: fromPosition, + targetX: toX, + targetY: toY, + targetPosition: toPosition, + }; + + const [dAttr] = getBezierPath(pathParams); + + return ( + + + + ); +}; diff --git a/invokeai/frontend/web/src/features/nodes/components/CustomEdges.tsx b/invokeai/frontend/web/src/features/nodes/components/CustomEdges.tsx new file mode 100644 index 0000000000..f80f0451e4 --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/CustomEdges.tsx @@ -0,0 +1,199 @@ +import { Badge, Flex } from '@chakra-ui/react'; +import { createSelector } from '@reduxjs/toolkit'; +import { stateSelector } from 'app/store/store'; +import { useAppSelector } from 'app/store/storeHooks'; +import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; +import { useChakraThemeTokens } from 'common/hooks/useChakraThemeTokens'; +import { memo, useMemo } from 'react'; +import { + BaseEdge, + EdgeLabelRenderer, + EdgeProps, + getBezierPath, +} from 'reactflow'; +import { FIELDS, colorTokenToCssVar } from '../types/constants'; +import { isInvocationNode } from '../types/types'; + +const makeEdgeSelector = ( + source: string, + sourceHandleId: string | null | undefined, + target: string, + targetHandleId: string | null | undefined, + selected?: boolean +) => + createSelector( + stateSelector, + ({ nodes }) => { + const sourceNode = nodes.nodes.find((node) => node.id === source); + const targetNode = nodes.nodes.find((node) => node.id === target); + + const isInvocationToInvocationEdge = + isInvocationNode(sourceNode) && isInvocationNode(targetNode); + + const isSelected = + sourceNode?.selected || targetNode?.selected || selected; + const sourceType = isInvocationToInvocationEdge + ? sourceNode?.data?.outputs[sourceHandleId || '']?.type + : undefined; + + const stroke = + sourceType && nodes.shouldColorEdges + ? colorTokenToCssVar(FIELDS[sourceType].color) + : colorTokenToCssVar('base.500'); + + return { + isSelected, + shouldAnimate: nodes.shouldAnimateEdges && isSelected, + stroke, + }; + }, + defaultSelectorOptions + ); + +const CollapsedEdge = memo( + ({ + sourceX, + sourceY, + targetX, + targetY, + sourcePosition, + targetPosition, + markerEnd, + data, + selected, + source, + target, + sourceHandleId, + targetHandleId, + }: EdgeProps<{ count: number }>) => { + const selector = useMemo( + () => + makeEdgeSelector( + source, + sourceHandleId, + target, + targetHandleId, + selected + ), + [selected, source, sourceHandleId, target, targetHandleId] + ); + + const { isSelected, shouldAnimate } = useAppSelector(selector); + + const [edgePath, labelX, labelY] = getBezierPath({ + sourceX, + sourceY, + sourcePosition, + targetX, + targetY, + targetPosition, + }); + + const { base500 } = useChakraThemeTokens(); + + return ( + <> + + {data?.count && data.count > 1 && ( + + + + {data.count} + + + + )} + + ); + } +); + +CollapsedEdge.displayName = 'CollapsedEdge'; + +const DefaultEdge = memo( + ({ + sourceX, + sourceY, + targetX, + targetY, + sourcePosition, + targetPosition, + markerEnd, + selected, + source, + target, + sourceHandleId, + targetHandleId, + }: EdgeProps) => { + const selector = useMemo( + () => + makeEdgeSelector( + source, + sourceHandleId, + target, + targetHandleId, + selected + ), + [source, sourceHandleId, target, targetHandleId, selected] + ); + + const { isSelected, shouldAnimate, stroke } = useAppSelector(selector); + + const [edgePath] = getBezierPath({ + sourceX, + sourceY, + sourcePosition, + targetX, + targetY, + targetPosition, + }); + + return ( + + ); + } +); + +DefaultEdge.displayName = 'DefaultEdge'; + +export const edgeTypes = { + collapsed: CollapsedEdge, + default: DefaultEdge, +}; diff --git a/invokeai/frontend/web/src/features/nodes/components/CustomNodes.tsx b/invokeai/frontend/web/src/features/nodes/components/CustomNodes.tsx new file mode 100644 index 0000000000..be845df435 --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/CustomNodes.tsx @@ -0,0 +1,9 @@ +import CurrentImageNode from './nodes/CurrentImageNode'; +import InvocationNodeWrapper from './nodes/InvocationNodeWrapper'; +import NotesNode from './nodes/NotesNode'; + +export const nodeTypes = { + invocation: InvocationNodeWrapper, + current_image: CurrentImageNode, + notes: NotesNode, +}; diff --git a/invokeai/frontend/web/src/features/nodes/components/FieldHandle.tsx b/invokeai/frontend/web/src/features/nodes/components/FieldHandle.tsx deleted file mode 100644 index 86099a7315..0000000000 --- a/invokeai/frontend/web/src/features/nodes/components/FieldHandle.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import { Tooltip } from '@chakra-ui/react'; -import { CSSProperties, memo } from 'react'; -import { Handle, Position, Connection, HandleType } from 'reactflow'; -import { FIELDS, HANDLE_TOOLTIP_OPEN_DELAY } from '../types/constants'; -// import { useConnectionEventStyles } from '../hooks/useConnectionEventStyles'; -import { InputFieldTemplate, OutputFieldTemplate } from '../types/types'; - -const handleBaseStyles: CSSProperties = { - position: 'absolute', - width: '1rem', - height: '1rem', - borderWidth: 0, -}; - -const inputHandleStyles: CSSProperties = { - left: '-1rem', -}; - -const outputHandleStyles: CSSProperties = { - right: '-0.5rem', -}; - -// const requiredConnectionStyles: CSSProperties = { -// boxShadow: '0 0 0.5rem 0.5rem var(--invokeai-colors-error-400)', -// }; - -type FieldHandleProps = { - nodeId: string; - field: InputFieldTemplate | OutputFieldTemplate; - isValidConnection: (connection: Connection) => boolean; - handleType: HandleType; - styles?: CSSProperties; -}; - -const FieldHandle = (props: FieldHandleProps) => { - const { field, isValidConnection, handleType, styles } = props; - const { name, type } = field; - - return ( - - - - ); -}; - -export default memo(FieldHandle); diff --git a/invokeai/frontend/web/src/features/nodes/components/FieldTypeLegend.tsx b/invokeai/frontend/web/src/features/nodes/components/FieldTypeLegend.tsx index 78316cc694..a523cc29fe 100644 --- a/invokeai/frontend/web/src/features/nodes/components/FieldTypeLegend.tsx +++ b/invokeai/frontend/web/src/features/nodes/components/FieldTypeLegend.tsx @@ -1,8 +1,8 @@ -import 'reactflow/dist/style.css'; -import { Tooltip, Badge, Flex } from '@chakra-ui/react'; +import { Badge, Flex, Tooltip } from '@chakra-ui/react'; import { map } from 'lodash-es'; -import { FIELDS } from '../types/constants'; import { memo } from 'react'; +import 'reactflow/dist/style.css'; +import { FIELDS } from '../types/constants'; const FieldTypeLegend = () => { return ( @@ -10,8 +10,14 @@ const FieldTypeLegend = () => { {map(FIELDS, ({ title, description, color }, key) => ( {title} diff --git a/invokeai/frontend/web/src/features/nodes/components/Flow.tsx b/invokeai/frontend/web/src/features/nodes/components/Flow.tsx index 7b0718182b..3290a65054 100644 --- a/invokeai/frontend/web/src/features/nodes/components/Flow.tsx +++ b/invokeai/frontend/web/src/features/nodes/components/Flow.tsx @@ -1,5 +1,6 @@ -import { RootState } from 'app/store/store'; +import { useToken } from '@chakra-ui/react'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; +import { contextMenusClosed } from 'features/ui/store/uiSlice'; import { useCallback } from 'react'; import { Background, @@ -7,35 +8,51 @@ import { OnConnectEnd, OnConnectStart, OnEdgesChange, - OnInit, + OnEdgesDelete, + OnMoveEnd, OnNodesChange, + OnNodesDelete, + OnSelectionChangeFunc, + ProOptions, ReactFlow, } from 'reactflow'; +import { useIsValidConnection } from '../hooks/useIsValidConnection'; import { connectionEnded, connectionMade, connectionStarted, edgesChanged, + edgesDeleted, nodesChanged, - setEditorInstance, + nodesDeleted, + selectedEdgesChanged, + selectedNodesChanged, + viewportChanged, } from '../store/nodesSlice'; -import { InvocationComponent } from './InvocationComponent'; -import ProgressImageNode from './ProgressImageNode'; -import BottomLeftPanel from './panels/BottomLeftPanel.tsx'; -import MinimapPanel from './panels/MinimapPanel'; -import TopCenterPanel from './panels/TopCenterPanel'; -import TopLeftPanel from './panels/TopLeftPanel'; -import TopRightPanel from './panels/TopRightPanel'; +import { CustomConnectionLine } from './CustomConnectionLine'; +import { edgeTypes } from './CustomEdges'; +import { nodeTypes } from './CustomNodes'; +import BottomLeftPanel from './editorPanels/BottomLeftPanel'; +import MinimapPanel from './editorPanels/MinimapPanel'; +import TopCenterPanel from './editorPanels/TopCenterPanel'; +import TopLeftPanel from './editorPanels/TopLeftPanel'; +import TopRightPanel from './editorPanels/TopRightPanel'; -const nodeTypes = { - invocation: InvocationComponent, - progress_image: ProgressImageNode, -}; +// TODO: can we support reactflow? if not, we could style the attribution so it matches the app +const proOptions: ProOptions = { hideAttribution: true }; export const Flow = () => { const dispatch = useAppDispatch(); - const nodes = useAppSelector((state: RootState) => state.nodes.nodes); - const edges = useAppSelector((state: RootState) => state.nodes.edges); + const nodes = useAppSelector((state) => state.nodes.nodes); + const edges = useAppSelector((state) => state.nodes.edges); + const viewport = useAppSelector((state) => state.nodes.viewport); + const shouldSnapToGrid = useAppSelector( + (state) => state.nodes.shouldSnapToGrid + ); + + const isValidConnection = useIsValidConnection(); + + const [borderRadius] = useToken('radii', ['base']); const onNodesChange: OnNodesChange = useCallback( (changes) => { @@ -69,35 +86,71 @@ export const Flow = () => { dispatch(connectionEnded()); }, [dispatch]); - const onInit: OnInit = useCallback( - (v) => { - dispatch(setEditorInstance(v)); - if (v) v.fitView(); + const onEdgesDelete: OnEdgesDelete = useCallback( + (edges) => { + dispatch(edgesDeleted(edges)); }, [dispatch] ); + const onNodesDelete: OnNodesDelete = useCallback( + (nodes) => { + dispatch(nodesDeleted(nodes)); + }, + [dispatch] + ); + + const handleSelectionChange: OnSelectionChangeFunc = useCallback( + ({ nodes, edges }) => { + dispatch(selectedNodesChanged(nodes ? nodes.map((n) => n.id) : [])); + dispatch(selectedEdgesChanged(edges ? edges.map((e) => e.id) : [])); + }, + [dispatch] + ); + + const handleMoveEnd: OnMoveEnd = useCallback( + (e, viewport) => { + dispatch(viewportChanged(viewport)); + }, + [dispatch] + ); + + const handlePaneClick = useCallback(() => { + dispatch(contextMenusClosed()); + }, [dispatch]); + return ( - + ); }; diff --git a/invokeai/frontend/web/src/features/nodes/components/IAINode/IAINodeHeader.tsx b/invokeai/frontend/web/src/features/nodes/components/IAINode/IAINodeHeader.tsx deleted file mode 100644 index 7b56bc95b4..0000000000 --- a/invokeai/frontend/web/src/features/nodes/components/IAINode/IAINodeHeader.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { Flex, Heading, Icon, Tooltip } from '@chakra-ui/react'; -import { DRAG_HANDLE_CLASSNAME } from 'features/nodes/hooks/useBuildInvocation'; -import { memo } from 'react'; -import { FaInfoCircle } from 'react-icons/fa'; - -interface IAINodeHeaderProps { - nodeId?: string; - title?: string; - description?: string; -} - -const IAINodeHeader = (props: IAINodeHeaderProps) => { - const { nodeId, title, description } = props; - return ( - - - - {title} - - - - - - - ); -}; - -export default memo(IAINodeHeader); diff --git a/invokeai/frontend/web/src/features/nodes/components/IAINode/IAINodeInputs.tsx b/invokeai/frontend/web/src/features/nodes/components/IAINode/IAINodeInputs.tsx deleted file mode 100644 index 6f779e4295..0000000000 --- a/invokeai/frontend/web/src/features/nodes/components/IAINode/IAINodeInputs.tsx +++ /dev/null @@ -1,149 +0,0 @@ -import { - Box, - Divider, - Flex, - FormControl, - FormLabel, - HStack, - Tooltip, -} from '@chakra-ui/react'; -import { RootState } from 'app/store/store'; -import { useAppSelector } from 'app/store/storeHooks'; -import { useIsValidConnection } from 'features/nodes/hooks/useIsValidConnection'; -import { HANDLE_TOOLTIP_OPEN_DELAY } from 'features/nodes/types/constants'; -import { - InputFieldTemplate, - InputFieldValue, - InvocationTemplate, -} from 'features/nodes/types/types'; -import { map } from 'lodash-es'; -import { ReactNode, memo, useCallback } from 'react'; -import FieldHandle from '../FieldHandle'; -import InputFieldComponent from '../InputFieldComponent'; - -interface IAINodeInputProps { - nodeId: string; - - input: InputFieldValue; - template?: InputFieldTemplate | undefined; - connected: boolean; -} - -function IAINodeInput(props: IAINodeInputProps) { - const { nodeId, input, template, connected } = props; - const isValidConnection = useIsValidConnection(); - - return ( - - - {!template ? ( - - Unknown input: {input.name} - - ) : ( - <> - - - - {template?.title} - - - - - - {!['never', 'directOnly'].includes( - template?.inputRequirement ?? '' - ) && ( - - )} - - )} - - - ); -} - -interface IAINodeInputsProps { - nodeId: string; - template: InvocationTemplate; - inputs: Record; -} - -const IAINodeInputs = (props: IAINodeInputsProps) => { - const { nodeId, template, inputs } = props; - - const edges = useAppSelector((state: RootState) => state.nodes.edges); - - const renderIAINodeInputs = useCallback(() => { - const IAINodeInputsToRender: ReactNode[] = []; - const inputSockets = map(inputs); - - inputSockets.forEach((inputSocket, index) => { - const inputTemplate = template.inputs[inputSocket.name]; - - const isConnected = Boolean( - edges.filter((connectedInput) => { - return ( - connectedInput.target === nodeId && - connectedInput.targetHandle === inputSocket.name - ); - }).length - ); - - if (index < inputSockets.length) { - IAINodeInputsToRender.push( - - ); - } - - IAINodeInputsToRender.push( - - ); - }); - - return ( - - {IAINodeInputsToRender} - - ); - }, [edges, inputs, nodeId, template.inputs]); - - return renderIAINodeInputs(); -}; - -export default memo(IAINodeInputs); diff --git a/invokeai/frontend/web/src/features/nodes/components/IAINode/IAINodeOutputs.tsx b/invokeai/frontend/web/src/features/nodes/components/IAINode/IAINodeOutputs.tsx deleted file mode 100644 index 2cb0bcde8d..0000000000 --- a/invokeai/frontend/web/src/features/nodes/components/IAINode/IAINodeOutputs.tsx +++ /dev/null @@ -1,97 +0,0 @@ -import { - InvocationTemplate, - OutputFieldTemplate, - OutputFieldValue, -} from 'features/nodes/types/types'; -import { memo, ReactNode, useCallback } from 'react'; -import { map } from 'lodash-es'; -import { useAppSelector } from 'app/store/storeHooks'; -import { RootState } from 'app/store/store'; -import { Box, Flex, FormControl, FormLabel, HStack } from '@chakra-ui/react'; -import FieldHandle from '../FieldHandle'; -import { useIsValidConnection } from 'features/nodes/hooks/useIsValidConnection'; - -interface IAINodeOutputProps { - nodeId: string; - output: OutputFieldValue; - template?: OutputFieldTemplate | undefined; - connected: boolean; -} - -function IAINodeOutput(props: IAINodeOutputProps) { - const { nodeId, output, template, connected } = props; - const isValidConnection = useIsValidConnection(); - - return ( - - - {!template ? ( - - - Unknown Output: {output.name} - - - ) : ( - <> - - {template?.title} - - - - )} - - - ); -} - -interface IAINodeOutputsProps { - nodeId: string; - template: InvocationTemplate; - outputs: Record; -} - -const IAINodeOutputs = (props: IAINodeOutputsProps) => { - const { nodeId, template, outputs } = props; - - const edges = useAppSelector((state: RootState) => state.nodes.edges); - - const renderIAINodeOutputs = useCallback(() => { - const IAINodeOutputsToRender: ReactNode[] = []; - const outputSockets = map(outputs); - - outputSockets.forEach((outputSocket) => { - const outputTemplate = template.outputs[outputSocket.name]; - - const isConnected = Boolean( - edges.filter((connectedInput) => { - return ( - connectedInput.source === nodeId && - connectedInput.sourceHandle === outputSocket.name - ); - }).length - ); - - IAINodeOutputsToRender.push( - - ); - }); - - return {IAINodeOutputsToRender}; - }, [edges, nodeId, outputs, template.outputs]); - - return renderIAINodeOutputs(); -}; - -export default memo(IAINodeOutputs); diff --git a/invokeai/frontend/web/src/features/nodes/components/InputFieldComponent.tsx b/invokeai/frontend/web/src/features/nodes/components/InputFieldComponent.tsx deleted file mode 100644 index 0ecc43ef9c..0000000000 --- a/invokeai/frontend/web/src/features/nodes/components/InputFieldComponent.tsx +++ /dev/null @@ -1,252 +0,0 @@ -import { Box } from '@chakra-ui/react'; -import { memo } from 'react'; -import { InputFieldTemplate, InputFieldValue } from '../types/types'; -import ArrayInputFieldComponent from './fields/ArrayInputFieldComponent'; -import BooleanInputFieldComponent from './fields/BooleanInputFieldComponent'; -import ClipInputFieldComponent from './fields/ClipInputFieldComponent'; -import ColorInputFieldComponent from './fields/ColorInputFieldComponent'; -import ConditioningInputFieldComponent from './fields/ConditioningInputFieldComponent'; -import ControlInputFieldComponent from './fields/ControlInputFieldComponent'; -import ControlNetModelInputFieldComponent from './fields/ControlNetModelInputFieldComponent'; -import EnumInputFieldComponent from './fields/EnumInputFieldComponent'; -import ImageCollectionInputFieldComponent from './fields/ImageCollectionInputFieldComponent'; -import ImageInputFieldComponent from './fields/ImageInputFieldComponent'; -import ItemInputFieldComponent from './fields/ItemInputFieldComponent'; -import LatentsInputFieldComponent from './fields/LatentsInputFieldComponent'; -import LoRAModelInputFieldComponent from './fields/LoRAModelInputFieldComponent'; -import ModelInputFieldComponent from './fields/ModelInputFieldComponent'; -import NumberInputFieldComponent from './fields/NumberInputFieldComponent'; -import StringInputFieldComponent from './fields/StringInputFieldComponent'; -import UnetInputFieldComponent from './fields/UnetInputFieldComponent'; -import VaeInputFieldComponent from './fields/VaeInputFieldComponent'; -import VaeModelInputFieldComponent from './fields/VaeModelInputFieldComponent'; -import RefinerModelInputFieldComponent from './fields/RefinerModelInputFieldComponent'; - -type InputFieldComponentProps = { - nodeId: string; - field: InputFieldValue; - template: InputFieldTemplate; -}; - -// build an individual input element based on the schema -const InputFieldComponent = (props: InputFieldComponentProps) => { - const { nodeId, field, template } = props; - const { type } = field; - - if (type === 'string' && template.type === 'string') { - return ( - - ); - } - - if (type === 'boolean' && template.type === 'boolean') { - return ( - - ); - } - - if ( - (type === 'integer' && template.type === 'integer') || - (type === 'float' && template.type === 'float') - ) { - return ( - - ); - } - - if (type === 'enum' && template.type === 'enum') { - return ( - - ); - } - - if (type === 'image' && template.type === 'image') { - return ( - - ); - } - - if (type === 'latents' && template.type === 'latents') { - return ( - - ); - } - - if (type === 'conditioning' && template.type === 'conditioning') { - return ( - - ); - } - - if (type === 'unet' && template.type === 'unet') { - return ( - - ); - } - - if (type === 'clip' && template.type === 'clip') { - return ( - - ); - } - - if (type === 'vae' && template.type === 'vae') { - return ( - - ); - } - - if (type === 'control' && template.type === 'control') { - return ( - - ); - } - - if (type === 'model' && template.type === 'model') { - return ( - - ); - } - - if (type === 'refiner_model' && template.type === 'refiner_model') { - return ( - - ); - } - - if (type === 'vae_model' && template.type === 'vae_model') { - return ( - - ); - } - - if (type === 'lora_model' && template.type === 'lora_model') { - return ( - - ); - } - - if (type === 'controlnet_model' && template.type === 'controlnet_model') { - return ( - - ); - } - - if (type === 'array' && template.type === 'array') { - return ( - - ); - } - - if (type === 'item' && template.type === 'item') { - return ( - - ); - } - - if (type === 'color' && template.type === 'color') { - return ( - - ); - } - - if (type === 'item' && template.type === 'item') { - return ( - - ); - } - - if (type === 'image_collection' && template.type === 'image_collection') { - return ( - - ); - } - - return Unknown field type: {type}; -}; - -export default memo(InputFieldComponent); diff --git a/invokeai/frontend/web/src/features/nodes/components/Invocation/InvocationNode.tsx b/invokeai/frontend/web/src/features/nodes/components/Invocation/InvocationNode.tsx new file mode 100644 index 0000000000..6c610d7f34 --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/Invocation/InvocationNode.tsx @@ -0,0 +1,74 @@ +import { Flex } from '@chakra-ui/react'; +import { useFieldNames, useWithFooter } from 'features/nodes/hooks/useNodeData'; +import { memo } from 'react'; +import InputField from '../fields/InputField'; +import OutputField from '../fields/OutputField'; +import NodeFooter from './NodeFooter'; +import NodeHeader from './NodeHeader'; +import NodeWrapper from './NodeWrapper'; + +type Props = { + nodeId: string; + isOpen: boolean; + label: string; + type: string; + selected: boolean; +}; + +const InvocationNode = ({ nodeId, isOpen, label, type, selected }: Props) => { + const inputFieldNames = useFieldNames(nodeId, 'input'); + const outputFieldNames = useFieldNames(nodeId, 'output'); + const withFooter = useWithFooter(nodeId); + + return ( + + + {isOpen && ( + <> + + + {outputFieldNames.map((fieldName) => ( + + ))} + {inputFieldNames.map((fieldName) => ( + + ))} + + + {withFooter && } + + )} + + ); +}; + +export default memo(InvocationNode); diff --git a/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeCollapseButton.tsx b/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeCollapseButton.tsx new file mode 100644 index 0000000000..2648e68607 --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeCollapseButton.tsx @@ -0,0 +1,56 @@ +import { ChevronUpIcon } from '@chakra-ui/icons'; +import { useAppDispatch } from 'app/store/storeHooks'; +import IAIIconButton from 'common/components/IAIIconButton'; +import { nodeIsOpenChanged } from 'features/nodes/store/nodesSlice'; +import { memo, useCallback } from 'react'; +import { useUpdateNodeInternals } from 'reactflow'; + +interface Props { + nodeId: string; + isOpen: boolean; +} + +const NodeCollapseButton = ({ nodeId, isOpen }: Props) => { + const dispatch = useAppDispatch(); + const updateNodeInternals = useUpdateNodeInternals(); + + const handleClick = useCallback(() => { + dispatch(nodeIsOpenChanged({ nodeId, isOpen: !isOpen })); + updateNodeInternals(nodeId); + }, [dispatch, isOpen, nodeId, updateNodeInternals]); + + return ( + + } + /> + ); +}; + +export default memo(NodeCollapseButton); diff --git a/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeCollapsedHandles.tsx b/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeCollapsedHandles.tsx new file mode 100644 index 0000000000..32dd554ef4 --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeCollapsedHandles.tsx @@ -0,0 +1,74 @@ +import { useColorModeValue } from '@chakra-ui/react'; +import { useChakraThemeTokens } from 'common/hooks/useChakraThemeTokens'; +import { useNodeData } from 'features/nodes/hooks/useNodeData'; +import { isInvocationNodeData } from 'features/nodes/types/types'; +import { map } from 'lodash-es'; +import { CSSProperties, memo, useMemo } from 'react'; +import { Handle, Position } from 'reactflow'; + +interface Props { + nodeId: string; +} + +const NodeCollapsedHandles = ({ nodeId }: Props) => { + const data = useNodeData(nodeId); + const { base400, base600 } = useChakraThemeTokens(); + const backgroundColor = useColorModeValue(base400, base600); + + const dummyHandleStyles: CSSProperties = useMemo( + () => ({ + borderWidth: 0, + borderRadius: '3px', + width: '1rem', + height: '1rem', + backgroundColor, + zIndex: -1, + }), + [backgroundColor] + ); + + if (!isInvocationNodeData(data)) { + return null; + } + + return ( + <> + + {map(data.inputs, (input) => ( + + ))} + + {map(data.outputs, (output) => ( + + ))} + + ); +}; + +export default memo(NodeCollapsedHandles); diff --git a/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeFooter.tsx b/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeFooter.tsx new file mode 100644 index 0000000000..c858872b57 --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeFooter.tsx @@ -0,0 +1,76 @@ +import { + Checkbox, + Flex, + FormControl, + FormLabel, + Spacer, +} from '@chakra-ui/react'; +import { useAppDispatch } from 'app/store/storeHooks'; +import { + useHasImageOutput, + useIsIntermediate, +} from 'features/nodes/hooks/useNodeData'; +import { fieldBooleanValueChanged } from 'features/nodes/store/nodesSlice'; +import { DRAG_HANDLE_CLASSNAME } from 'features/nodes/types/constants'; +import { ChangeEvent, memo, useCallback } from 'react'; + +type Props = { + nodeId: string; +}; + +const NodeFooter = ({ nodeId }: Props) => { + return ( + + + + + ); +}; + +export default memo(NodeFooter); + +const SaveImageCheckbox = memo(({ nodeId }: { nodeId: string }) => { + const dispatch = useAppDispatch(); + const hasImageOutput = useHasImageOutput(nodeId); + const is_intermediate = useIsIntermediate(nodeId); + const handleChangeIsIntermediate = useCallback( + (e: ChangeEvent) => { + dispatch( + fieldBooleanValueChanged({ + nodeId, + fieldName: 'is_intermediate', + value: !e.target.checked, + }) + ); + }, + [dispatch, nodeId] + ); + + if (!hasImageOutput) { + return null; + } + + return ( + + Save Output + + + ); +}); + +SaveImageCheckbox.displayName = 'SaveImageCheckbox'; diff --git a/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeHeader.tsx b/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeHeader.tsx new file mode 100644 index 0000000000..ea503a8f27 --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeHeader.tsx @@ -0,0 +1,44 @@ +import { Flex } from '@chakra-ui/react'; +import { memo } from 'react'; +import NodeCollapseButton from '../Invocation/NodeCollapseButton'; +import NodeCollapsedHandles from '../Invocation/NodeCollapsedHandles'; +import NodeNotesEdit from '../Invocation/NodeNotesEdit'; +import NodeStatusIndicator from '../Invocation/NodeStatusIndicator'; +import NodeTitle from '../Invocation/NodeTitle'; + +type Props = { + nodeId: string; + isOpen: boolean; + label: string; + type: string; + selected: boolean; +}; + +const NodeHeader = ({ nodeId, isOpen }: Props) => { + return ( + + + + + + + + {!isOpen && } + + ); +}; + +export default memo(NodeHeader); diff --git a/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeNotesEdit.tsx b/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeNotesEdit.tsx new file mode 100644 index 0000000000..fa5a9d76fb --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeNotesEdit.tsx @@ -0,0 +1,127 @@ +import { + Flex, + FormControl, + FormLabel, + Icon, + Modal, + ModalBody, + ModalCloseButton, + ModalContent, + ModalFooter, + ModalHeader, + ModalOverlay, + Text, + Tooltip, + useDisclosure, +} from '@chakra-ui/react'; +import { useAppDispatch } from 'app/store/storeHooks'; +import IAITextarea from 'common/components/IAITextarea'; +import { + useNodeData, + useNodeLabel, + useNodeTemplate, + useNodeTemplateTitle, +} from 'features/nodes/hooks/useNodeData'; +import { nodeNotesChanged } from 'features/nodes/store/nodesSlice'; +import { DRAG_HANDLE_CLASSNAME } from 'features/nodes/types/constants'; +import { isInvocationNodeData } from 'features/nodes/types/types'; +import { ChangeEvent, memo, useCallback } from 'react'; +import { FaInfoCircle } from 'react-icons/fa'; + +interface Props { + nodeId: string; +} + +const NodeNotesEdit = ({ nodeId }: Props) => { + const { isOpen, onOpen, onClose } = useDisclosure(); + const label = useNodeLabel(nodeId); + const title = useNodeTemplateTitle(nodeId); + + return ( + <> + } + placement="top" + shouldWrapChildren + > + + + + + + + + + {label || title || 'Unknown Node'} + + + + + + + + + ); +}; + +export default memo(NodeNotesEdit); + +const TooltipContent = memo(({ nodeId }: { nodeId: string }) => { + const data = useNodeData(nodeId); + const nodeTemplate = useNodeTemplate(nodeId); + + if (!isInvocationNodeData(data)) { + return Unknown Node; + } + + return ( + + {nodeTemplate?.title} + + {nodeTemplate?.description} + + {data?.notes && {data.notes}} + + ); +}); + +TooltipContent.displayName = 'TooltipContent'; + +const NotesTextarea = memo(({ nodeId }: { nodeId: string }) => { + const dispatch = useAppDispatch(); + const data = useNodeData(nodeId); + const handleNotesChanged = useCallback( + (e: ChangeEvent) => { + dispatch(nodeNotesChanged({ nodeId, notes: e.target.value })); + }, + [dispatch, nodeId] + ); + if (!isInvocationNodeData(data)) { + return null; + } + return ( + + Notes + + + ); +}); + +NotesTextarea.displayName = 'NodesTextarea'; diff --git a/invokeai/frontend/web/src/features/nodes/components/IAINode/IAINodeResizer.tsx b/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeResizer.tsx similarity index 73% rename from invokeai/frontend/web/src/features/nodes/components/IAINode/IAINodeResizer.tsx rename to invokeai/frontend/web/src/features/nodes/components/Invocation/NodeResizer.tsx index 1aca32ec70..6391e86471 100644 --- a/invokeai/frontend/web/src/features/nodes/components/IAINode/IAINodeResizer.tsx +++ b/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeResizer.tsx @@ -2,7 +2,10 @@ import { NODE_MIN_WIDTH } from 'features/nodes/types/constants'; import { memo } from 'react'; import { NodeResizeControl, NodeResizerProps } from 'reactflow'; -const IAINodeResizer = (props: NodeResizerProps) => { +// this causes https://github.com/invoke-ai/InvokeAI/issues/4140 +// not using it for now + +const NodeResizer = (props: NodeResizerProps) => { const { ...rest } = props; return ( { ); }; -export default memo(IAINodeResizer); +export default memo(NodeResizer); diff --git a/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeSettings.tsx b/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeSettings.tsx new file mode 100644 index 0000000000..bf12358871 --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeSettings.tsx @@ -0,0 +1,69 @@ +import { Flex } from '@chakra-ui/react'; +import { useAppDispatch } from 'app/store/storeHooks'; +import IAIIconButton from 'common/components/IAIIconButton'; +import IAIPopover from 'common/components/IAIPopover'; +import IAISwitch from 'common/components/IAISwitch'; +import { fieldBooleanValueChanged } from 'features/nodes/store/nodesSlice'; +import { InvocationNodeData } from 'features/nodes/types/types'; +import { ChangeEvent, memo, useCallback } from 'react'; +import { FaBars } from 'react-icons/fa'; + +interface Props { + data: InvocationNodeData; +} + +const NodeSettings = (props: Props) => { + const { data } = props; + const dispatch = useAppDispatch(); + + const handleChangeIsIntermediate = useCallback( + (e: ChangeEvent) => { + dispatch( + fieldBooleanValueChanged({ + nodeId: data.id, + fieldName: 'is_intermediate', + value: e.target.checked, + }) + ); + }, + [data.id, dispatch] + ); + + return ( + } + /> + } + > + + + + + ); +}; + +export default memo(NodeSettings); diff --git a/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeStatusIndicator.tsx b/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeStatusIndicator.tsx new file mode 100644 index 0000000000..d53fec4b42 --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeStatusIndicator.tsx @@ -0,0 +1,183 @@ +import { + Badge, + CircularProgress, + Flex, + Icon, + Image, + Text, + Tooltip, +} from '@chakra-ui/react'; +import { createSelector } from '@reduxjs/toolkit'; +import { stateSelector } from 'app/store/store'; +import { useAppSelector } from 'app/store/storeHooks'; +import { DRAG_HANDLE_CLASSNAME } from 'features/nodes/types/constants'; +import { NodeExecutionState, NodeStatus } from 'features/nodes/types/types'; +import { memo, useMemo } from 'react'; +import { FaCheck, FaEllipsisH, FaExclamation } from 'react-icons/fa'; + +type Props = { + nodeId: string; +}; + +const iconBoxSize = 3; +const circleStyles = { + circle: { + transitionProperty: 'none', + transitionDuration: '0s', + }, + '.chakra-progress__track': { stroke: 'transparent' }, +}; + +const NodeStatusIndicator = ({ nodeId }: Props) => { + const selectNodeExecutionState = useMemo( + () => + createSelector( + stateSelector, + ({ nodes }) => nodes.nodeExecutionStates[nodeId] + ), + [nodeId] + ); + + const nodeExecutionState = useAppSelector(selectNodeExecutionState); + + if (!nodeExecutionState) { + return null; + } + + return ( + } + placement="top" + > + + + + + ); +}; + +export default memo(NodeStatusIndicator); + +type TooltipLabelProps = { + nodeExecutionState: NodeExecutionState; +}; + +const TooltipLabel = memo(({ nodeExecutionState }: TooltipLabelProps) => { + const { status, progress, progressImage } = nodeExecutionState; + if (status === NodeStatus.PENDING) { + return Pending; + } + + if (status === NodeStatus.IN_PROGRESS) { + if (progressImage) { + return ( + + + {progress !== null && ( + + {Math.round(progress * 100)}% + + )} + + ); + } + + if (progress !== null) { + return In Progress ({Math.round(progress * 100)}%); + } + + return In Progress; + } + + if (status === NodeStatus.COMPLETED) { + return Completed; + } + + if (status === NodeStatus.FAILED) { + return nodeExecutionState.error; + } + + return null; +}); + +TooltipLabel.displayName = 'TooltipLabel'; + +type StatusIconProps = { + nodeExecutionState: NodeExecutionState; +}; + +const StatusIcon = memo((props: StatusIconProps) => { + const { progress, status } = props.nodeExecutionState; + if (status === NodeStatus.PENDING) { + return ( + + ); + } + if (status === NodeStatus.IN_PROGRESS) { + return progress === null ? ( + + ) : ( + + ); + } + if (status === NodeStatus.COMPLETED) { + return ( + + ); + } + if (status === NodeStatus.FAILED) { + return ( + + ); + } + return null; +}); + +StatusIcon.displayName = 'StatusIcon'; diff --git a/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeTitle.tsx b/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeTitle.tsx new file mode 100644 index 0000000000..d816f3cea1 --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeTitle.tsx @@ -0,0 +1,126 @@ +import { + Box, + Editable, + EditableInput, + EditablePreview, + Flex, + useEditableControls, +} from '@chakra-ui/react'; +import { useAppDispatch } from 'app/store/storeHooks'; +import { + useNodeLabel, + useNodeTemplateTitle, +} from 'features/nodes/hooks/useNodeData'; +import { nodeLabelChanged } from 'features/nodes/store/nodesSlice'; +import { DRAG_HANDLE_CLASSNAME } from 'features/nodes/types/constants'; +import { MouseEvent, memo, useCallback, useEffect, useState } from 'react'; + +type Props = { + nodeId: string; + title?: string; +}; + +const NodeTitle = ({ nodeId, title }: Props) => { + const dispatch = useAppDispatch(); + const label = useNodeLabel(nodeId); + const templateTitle = useNodeTemplateTitle(nodeId); + + const [localTitle, setLocalTitle] = useState(''); + const handleSubmit = useCallback( + async (newTitle: string) => { + dispatch(nodeLabelChanged({ nodeId, label: newTitle })); + setLocalTitle(newTitle || title || 'Problem Setting Title'); + }, + [nodeId, dispatch, title] + ); + + const handleChange = useCallback((newTitle: string) => { + setLocalTitle(newTitle); + }, []); + + useEffect(() => { + // Another component may change the title; sync local title with global state + setLocalTitle(label || title || templateTitle || 'Problem Setting Title'); + }, [label, templateTitle, title]); + + return ( + + + + + + + + ); +}; + +export default memo(NodeTitle); + +function EditableControls() { + const { isEditing, getEditButtonProps } = useEditableControls(); + const handleDoubleClick = useCallback( + (e: MouseEvent) => { + const { onClick } = getEditButtonProps(); + if (!onClick) { + return; + } + onClick(e); + }, + [getEditButtonProps] + ); + + if (isEditing) { + return null; + } + + return ( + + ); +} diff --git a/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeWrapper.tsx b/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeWrapper.tsx new file mode 100644 index 0000000000..68ed0684ed --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/Invocation/NodeWrapper.tsx @@ -0,0 +1,99 @@ +import { + Box, + ChakraProps, + useColorModeValue, + useToken, +} from '@chakra-ui/react'; +import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; +import { nodeClicked } from 'features/nodes/store/nodesSlice'; +import { + MouseEvent, + PropsWithChildren, + memo, + useCallback, + useMemo, +} from 'react'; +import { DRAG_HANDLE_CLASSNAME, NODE_WIDTH } from '../../types/constants'; + +const useNodeSelect = (nodeId: string) => { + const dispatch = useAppDispatch(); + + const selectNode = useCallback( + (e: MouseEvent) => { + dispatch(nodeClicked({ nodeId, ctrlOrMeta: e.ctrlKey || e.metaKey })); + }, + [dispatch, nodeId] + ); + + return selectNode; +}; + +type NodeWrapperProps = PropsWithChildren & { + nodeId: string; + selected: boolean; + width?: NonNullable['w']; +}; + +const NodeWrapper = (props: NodeWrapperProps) => { + const { width, children, nodeId, selected } = props; + + const [ + nodeSelectedOutlineLight, + nodeSelectedOutlineDark, + shadowsXl, + shadowsBase, + ] = useToken('shadows', [ + 'nodeSelectedOutline.light', + 'nodeSelectedOutline.dark', + 'shadows.xl', + 'shadows.base', + ]); + + const selectNode = useNodeSelect(nodeId); + + const shadow = useColorModeValue( + nodeSelectedOutlineLight, + nodeSelectedOutlineDark + ); + + const shift = useAppSelector((state) => state.hotkeys.shift); + const opacity = useAppSelector((state) => state.nodes.nodeOpacity); + const className = useMemo( + () => (shift ? DRAG_HANDLE_CLASSNAME : 'nopan'), + [shift] + ); + + return ( + + + {children} + + ); +}; + +export default memo(NodeWrapper); diff --git a/invokeai/frontend/web/src/features/nodes/components/Invocation/UnknownNodeFallback.tsx b/invokeai/frontend/web/src/features/nodes/components/Invocation/UnknownNodeFallback.tsx new file mode 100644 index 0000000000..664a788b5a --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/Invocation/UnknownNodeFallback.tsx @@ -0,0 +1,75 @@ +import { Box, Flex, Text } from '@chakra-ui/react'; +import { DRAG_HANDLE_CLASSNAME } from 'features/nodes/types/constants'; +import { memo } from 'react'; +import NodeCollapseButton from '../Invocation/NodeCollapseButton'; +import NodeWrapper from '../Invocation/NodeWrapper'; + +type Props = { + nodeId: string; + isOpen: boolean; + label: string; + type: string; + selected: boolean; +}; + +const UnknownNodeFallback = ({ + nodeId, + isOpen, + label, + type, + selected, +}: Props) => { + return ( + + + + + {label ? `${label} (${type})` : type} + + + {isOpen && ( + + + Unknown node type: + + {type} + + + + )} + + ); +}; + +export default memo(UnknownNodeFallback); diff --git a/invokeai/frontend/web/src/features/nodes/components/InvocationComponent.tsx b/invokeai/frontend/web/src/features/nodes/components/InvocationComponent.tsx deleted file mode 100644 index 4c031afaff..0000000000 --- a/invokeai/frontend/web/src/features/nodes/components/InvocationComponent.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import { Flex, Icon } from '@chakra-ui/react'; -import { FaExclamationCircle } from 'react-icons/fa'; -import { NodeProps } from 'reactflow'; -import { InvocationValue } from '../types/types'; - -import { useAppSelector } from 'app/store/storeHooks'; -import { memo, useMemo } from 'react'; -import { makeTemplateSelector } from '../store/util/makeTemplateSelector'; -import IAINodeHeader from './IAINode/IAINodeHeader'; -import IAINodeInputs from './IAINode/IAINodeInputs'; -import IAINodeOutputs from './IAINode/IAINodeOutputs'; -import IAINodeResizer from './IAINode/IAINodeResizer'; -import NodeWrapper from './NodeWrapper'; - -export const InvocationComponent = memo((props: NodeProps) => { - const { id: nodeId, data, selected } = props; - const { type, inputs, outputs } = data; - - const templateSelector = useMemo(() => makeTemplateSelector(type), [type]); - - const template = useAppSelector(templateSelector); - - if (!template) { - return ( - - - - - - - ); - } - - return ( - - - - - - - - - ); -}); - -InvocationComponent.displayName = 'InvocationComponent'; diff --git a/invokeai/frontend/web/src/features/nodes/components/NodeEditor.tsx b/invokeai/frontend/web/src/features/nodes/components/NodeEditor.tsx index 8c0480774c..5e610cfc39 100644 --- a/invokeai/frontend/web/src/features/nodes/components/NodeEditor.tsx +++ b/invokeai/frontend/web/src/features/nodes/components/NodeEditor.tsx @@ -1,25 +1,107 @@ -import { Box } from '@chakra-ui/react'; -import { ReactFlowProvider } from 'reactflow'; +import { Flex } from '@chakra-ui/react'; +import { useAppSelector } from 'app/store/storeHooks'; +import { IAINoContentFallback } from 'common/components/IAIImageFallback'; +import ResizeHandle from 'features/ui/components/tabs/ResizeHandle'; +import { memo, useState } from 'react'; +import { MdDeviceHub } from 'react-icons/md'; +import { Panel, PanelGroup } from 'react-resizable-panels'; import 'reactflow/dist/style.css'; - -import { memo } from 'react'; +import NodeEditorPanelGroup from './panel/NodeEditorPanelGroup'; import { Flow } from './Flow'; +import { AnimatePresence, motion } from 'framer-motion'; const NodeEditor = () => { + const [isPanelCollapsed, setIsPanelCollapsed] = useState(false); + const isReady = useAppSelector((state) => state.nodes.isReady); return ( - - - - - + + + + + + + + {isReady && ( + + + + )} + + + {!isReady && ( + + + + + + )} + + + + ); }; diff --git a/invokeai/frontend/web/src/features/nodes/components/NodeEditorSettings.tsx b/invokeai/frontend/web/src/features/nodes/components/NodeEditorSettings.tsx new file mode 100644 index 0000000000..b942b2b3c0 --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/NodeEditorSettings.tsx @@ -0,0 +1,144 @@ +import { + Divider, + Flex, + Heading, + Modal, + ModalBody, + ModalCloseButton, + ModalContent, + ModalHeader, + ModalOverlay, + useDisclosure, +} from '@chakra-ui/react'; +import { createSelector } from '@reduxjs/toolkit'; +import { stateSelector } from 'app/store/store'; +import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; +import IAIIconButton from 'common/components/IAIIconButton'; +import IAISwitch from 'common/components/IAISwitch'; +import { ChangeEvent, memo, useCallback } from 'react'; +import { FaCog } from 'react-icons/fa'; +import { + shouldAnimateEdgesChanged, + shouldColorEdgesChanged, + shouldSnapToGridChanged, + shouldValidateGraphChanged, +} from '../store/nodesSlice'; +import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; + +const selector = createSelector( + stateSelector, + ({ nodes }) => { + const { + shouldAnimateEdges, + shouldValidateGraph, + shouldSnapToGrid, + shouldColorEdges, + } = nodes; + return { + shouldAnimateEdges, + shouldValidateGraph, + shouldSnapToGrid, + shouldColorEdges, + }; + }, + defaultSelectorOptions +); + +const NodeEditorSettings = () => { + const { isOpen, onOpen, onClose } = useDisclosure(); + const dispatch = useAppDispatch(); + const { + shouldAnimateEdges, + shouldValidateGraph, + shouldSnapToGrid, + shouldColorEdges, + } = useAppSelector(selector); + + const handleChangeShouldValidate = useCallback( + (e: ChangeEvent) => { + dispatch(shouldValidateGraphChanged(e.target.checked)); + }, + [dispatch] + ); + + const handleChangeShouldAnimate = useCallback( + (e: ChangeEvent) => { + dispatch(shouldAnimateEdgesChanged(e.target.checked)); + }, + [dispatch] + ); + + const handleChangeShouldSnap = useCallback( + (e: ChangeEvent) => { + dispatch(shouldSnapToGridChanged(e.target.checked)); + }, + [dispatch] + ); + + const handleChangeShouldColor = useCallback( + (e: ChangeEvent) => { + dispatch(shouldColorEdgesChanged(e.target.checked)); + }, + [dispatch] + ); + + return ( + <> + } + onClick={onOpen} + /> + + + + + Node Editor Settings + + + + General + + + + + + + Advanced + + + + + + + + ); +}; + +export default memo(NodeEditorSettings); diff --git a/invokeai/frontend/web/src/features/nodes/components/NodeGraphOverlay.tsx b/invokeai/frontend/web/src/features/nodes/components/NodeGraphOverlay.tsx index 1d498f19f5..4525dc5f6b 100644 --- a/invokeai/frontend/web/src/features/nodes/components/NodeGraphOverlay.tsx +++ b/invokeai/frontend/web/src/features/nodes/components/NodeGraphOverlay.tsx @@ -1,34 +1,26 @@ -import { Box } from '@chakra-ui/react'; import { RootState } from 'app/store/store'; import { useAppSelector } from 'app/store/storeHooks'; -import { memo } from 'react'; +import ImageMetadataJSON from 'features/gallery/components/ImageMetadataViewer/ImageMetadataJSON'; +import { omit } from 'lodash-es'; +import { useMemo } from 'react'; +import { useDebounce } from 'use-debounce'; import { buildNodesGraph } from '../util/graphBuilders/buildNodesGraph'; -const NodeGraphOverlay = () => { - const state = useAppSelector((state: RootState) => state); - const graph = buildNodesGraph(state); - - return ( - - {JSON.stringify(graph, null, 2)} - +const useNodesGraph = () => { + const nodes = useAppSelector((state: RootState) => state.nodes); + const [debouncedNodes] = useDebounce(nodes, 300); + const graph = useMemo( + () => omit(buildNodesGraph(debouncedNodes), 'id'), + [debouncedNodes] ); + + return graph; }; -export default memo(NodeGraphOverlay); +const NodeGraph = () => { + const graph = useNodesGraph(); + + return ; +}; + +export default NodeGraph; diff --git a/invokeai/frontend/web/src/features/nodes/components/NodeOpacitySlider.tsx b/invokeai/frontend/web/src/features/nodes/components/NodeOpacitySlider.tsx new file mode 100644 index 0000000000..693940859f --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/NodeOpacitySlider.tsx @@ -0,0 +1,42 @@ +import { + Box, + Slider, + SliderFilledTrack, + SliderThumb, + SliderTrack, +} from '@chakra-ui/react'; +import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; +import { useCallback } from 'react'; +import { nodeOpacityChanged } from '../store/nodesSlice'; + +export default function NodeOpacitySlider() { + const dispatch = useAppDispatch(); + const nodeOpacity = useAppSelector((state) => state.nodes.nodeOpacity); + + const handleChange = useCallback( + (v: number) => { + dispatch(nodeOpacityChanged(v)); + }, + [dispatch] + ); + + return ( + + + + + + + + + ); +} diff --git a/invokeai/frontend/web/src/features/nodes/components/NodeWrapper.tsx b/invokeai/frontend/web/src/features/nodes/components/NodeWrapper.tsx deleted file mode 100644 index bc7944a28b..0000000000 --- a/invokeai/frontend/web/src/features/nodes/components/NodeWrapper.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { Box, useToken } from '@chakra-ui/react'; -import { useAppSelector } from 'app/store/storeHooks'; -import { PropsWithChildren } from 'react'; -import { DRAG_HANDLE_CLASSNAME } from '../hooks/useBuildInvocation'; -import { NODE_MIN_WIDTH } from '../types/constants'; - -type NodeWrapperProps = PropsWithChildren & { - selected: boolean; -}; - -const NodeWrapper = (props: NodeWrapperProps) => { - const [nodeSelectedOutline, nodeShadow] = useToken('shadows', [ - 'nodeSelectedOutline', - 'dark-lg', - ]); - - const shift = useAppSelector((state) => state.hotkeys.shift); - - return ( - - {props.children} - - ); -}; - -export default NodeWrapper; diff --git a/invokeai/frontend/web/src/features/nodes/components/ProgressImageNode.tsx b/invokeai/frontend/web/src/features/nodes/components/ProgressImageNode.tsx deleted file mode 100644 index 142e2a2990..0000000000 --- a/invokeai/frontend/web/src/features/nodes/components/ProgressImageNode.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import { Flex, Image } from '@chakra-ui/react'; -import { RootState } from 'app/store/store'; -import { IAINoContentFallback } from 'common/components/IAIImageFallback'; -import { memo } from 'react'; -import { useDispatch, useSelector } from 'react-redux'; -import { NodeProps, OnResize } from 'reactflow'; -import { setProgressNodeSize } from '../store/nodesSlice'; -import IAINodeHeader from './IAINode/IAINodeHeader'; -import IAINodeResizer from './IAINode/IAINodeResizer'; -import NodeWrapper from './NodeWrapper'; - -const ProgressImageNode = (props: NodeProps) => { - const progressImage = useSelector( - (state: RootState) => state.system.progressImage - ); - const progressNodeSize = useSelector( - (state: RootState) => state.nodes.progressNodeSize - ); - const dispatch = useDispatch(); - const { selected } = props; - - const handleResize: OnResize = (_, newSize) => { - dispatch(setProgressNodeSize(newSize)); - }; - - return ( - - - - {progressImage ? ( - - ) : ( - - - - )} - - - - ); -}; - -export default memo(ProgressImageNode); diff --git a/invokeai/frontend/web/src/features/nodes/components/ViewportControls.tsx b/invokeai/frontend/web/src/features/nodes/components/ViewportControls.tsx index 796cdb010e..7416c6c555 100644 --- a/invokeai/frontend/web/src/features/nodes/components/ViewportControls.tsx +++ b/invokeai/frontend/web/src/features/nodes/components/ViewportControls.tsx @@ -2,18 +2,16 @@ import { ButtonGroup, Tooltip } from '@chakra-ui/react'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; import IAIIconButton from 'common/components/IAIIconButton'; import { memo, useCallback } from 'react'; -import { - FaCode, - FaExpand, - FaMinus, - FaPlus, - FaInfo, - FaMapMarkerAlt, -} from 'react-icons/fa'; -import { useReactFlow } from 'reactflow'; import { useTranslation } from 'react-i18next'; import { - shouldShowGraphOverlayChanged, + FaExpand, + FaInfo, + FaMapMarkerAlt, + FaMinus, + FaPlus, +} from 'react-icons/fa'; +import { useReactFlow } from 'reactflow'; +import { shouldShowFieldTypeLegendChanged, shouldShowMinimapPanelChanged, } from '../store/nodesSlice'; @@ -22,9 +20,6 @@ const ViewportControls = () => { const { t } = useTranslation(); const { zoomIn, zoomOut, fitView } = useReactFlow(); const dispatch = useAppDispatch(); - const shouldShowGraphOverlay = useAppSelector( - (state) => state.nodes.shouldShowGraphOverlay - ); const shouldShowFieldTypeLegend = useAppSelector( (state) => state.nodes.shouldShowFieldTypeLegend ); @@ -44,10 +39,6 @@ const ViewportControls = () => { fitView(); }, [fitView]); - const handleClickedToggleGraphOverlay = useCallback(() => { - dispatch(shouldShowGraphOverlayChanged(!shouldShowGraphOverlay)); - }, [shouldShowGraphOverlay, dispatch]); - const handleClickedToggleFieldTypeLegend = useCallback(() => { dispatch(shouldShowFieldTypeLegendChanged(!shouldShowFieldTypeLegend)); }, [shouldShowFieldTypeLegend, dispatch]); @@ -79,20 +70,6 @@ const ViewportControls = () => { icon={} /> - - } - /> - ( - + + + + ); diff --git a/invokeai/frontend/web/src/features/nodes/components/panels/MinimapPanel.tsx b/invokeai/frontend/web/src/features/nodes/components/editorPanels/MinimapPanel.tsx similarity index 91% rename from invokeai/frontend/web/src/features/nodes/components/panels/MinimapPanel.tsx rename to invokeai/frontend/web/src/features/nodes/components/editorPanels/MinimapPanel.tsx index 39142ed48e..8b7fb942a6 100644 --- a/invokeai/frontend/web/src/features/nodes/components/panels/MinimapPanel.tsx +++ b/invokeai/frontend/web/src/features/nodes/components/editorPanels/MinimapPanel.tsx @@ -20,7 +20,7 @@ const MinimapPanel = () => { const nodeColor = useColorModeValue( 'var(--invokeai-colors-accent-300)', - 'var(--invokeai-colors-accent-700)' + 'var(--invokeai-colors-accent-600)' ); const maskColor = useColorModeValue( @@ -32,10 +32,9 @@ const MinimapPanel = () => { <> {shouldShowMinimapPanel && ( { return ( @@ -15,9 +14,8 @@ const TopCenterPanel = () => { - - + ); diff --git a/invokeai/frontend/web/src/features/nodes/components/panels/TopLeftPanel.tsx b/invokeai/frontend/web/src/features/nodes/components/editorPanels/TopLeftPanel.tsx similarity index 100% rename from invokeai/frontend/web/src/features/nodes/components/panels/TopLeftPanel.tsx rename to invokeai/frontend/web/src/features/nodes/components/editorPanels/TopLeftPanel.tsx diff --git a/invokeai/frontend/web/src/features/nodes/components/panels/TopRightPanel.tsx b/invokeai/frontend/web/src/features/nodes/components/editorPanels/TopRightPanel.tsx similarity index 55% rename from invokeai/frontend/web/src/features/nodes/components/panels/TopRightPanel.tsx rename to invokeai/frontend/web/src/features/nodes/components/editorPanels/TopRightPanel.tsx index e3e3a871c8..7facf3973f 100644 --- a/invokeai/frontend/web/src/features/nodes/components/panels/TopRightPanel.tsx +++ b/invokeai/frontend/web/src/features/nodes/components/editorPanels/TopRightPanel.tsx @@ -1,22 +1,16 @@ -import { RootState } from 'app/store/store'; import { useAppSelector } from 'app/store/storeHooks'; import { memo } from 'react'; import { Panel } from 'reactflow'; import FieldTypeLegend from '../FieldTypeLegend'; -import NodeGraphOverlay from '../NodeGraphOverlay'; const TopRightPanel = () => { - const shouldShowGraphOverlay = useAppSelector( - (state: RootState) => state.nodes.shouldShowGraphOverlay - ); const shouldShowFieldTypeLegend = useAppSelector( - (state: RootState) => state.nodes.shouldShowFieldTypeLegend + (state) => state.nodes.shouldShowFieldTypeLegend ); return ( {shouldShowFieldTypeLegend && } - {shouldShowGraphOverlay && } ); }; diff --git a/invokeai/frontend/web/src/features/nodes/components/fields/ArrayInputFieldComponent.tsx b/invokeai/frontend/web/src/features/nodes/components/fields/ArrayInputFieldComponent.tsx deleted file mode 100644 index 8e478c907c..0000000000 --- a/invokeai/frontend/web/src/features/nodes/components/fields/ArrayInputFieldComponent.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { - ArrayInputFieldTemplate, - ArrayInputFieldValue, -} from 'features/nodes/types/types'; -import { memo } from 'react'; -import { FaList } from 'react-icons/fa'; -import { FieldComponentProps } from './types'; - -const ArrayInputFieldComponent = ( - _props: FieldComponentProps -) => { - return ; -}; - -export default memo(ArrayInputFieldComponent); diff --git a/invokeai/frontend/web/src/features/nodes/components/fields/EnumInputFieldComponent.tsx b/invokeai/frontend/web/src/features/nodes/components/fields/EnumInputFieldComponent.tsx deleted file mode 100644 index 5f26bc4f2a..0000000000 --- a/invokeai/frontend/web/src/features/nodes/components/fields/EnumInputFieldComponent.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { Select } from '@chakra-ui/react'; -import { useAppDispatch } from 'app/store/storeHooks'; -import { fieldValueChanged } from 'features/nodes/store/nodesSlice'; -import { - EnumInputFieldTemplate, - EnumInputFieldValue, -} from 'features/nodes/types/types'; -import { ChangeEvent, memo } from 'react'; -import { FieldComponentProps } from './types'; - -const EnumInputFieldComponent = ( - props: FieldComponentProps -) => { - const { nodeId, field, template } = props; - - const dispatch = useAppDispatch(); - - const handleValueChanged = (e: ChangeEvent) => { - dispatch( - fieldValueChanged({ - nodeId, - fieldName: field.name, - value: e.target.value, - }) - ); - }; - - return ( - - ); -}; - -export default memo(EnumInputFieldComponent); diff --git a/invokeai/frontend/web/src/features/nodes/components/fields/FieldContextMenu.tsx b/invokeai/frontend/web/src/features/nodes/components/fields/FieldContextMenu.tsx new file mode 100644 index 0000000000..d9f8f951bc --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/fields/FieldContextMenu.tsx @@ -0,0 +1,47 @@ +import { MenuItem, MenuList } from '@chakra-ui/react'; +import { ContextMenu, ContextMenuProps } from 'chakra-ui-contextmenu'; +import { + InputFieldTemplate, + InputFieldValue, +} from 'features/nodes/types/types'; +import { MouseEvent, useCallback } from 'react'; +import { menuListMotionProps } from 'theme/components/menu'; + +type Props = { + nodeId: string; + field: InputFieldValue; + fieldTemplate: InputFieldTemplate; + children: ContextMenuProps['children']; +}; + +const FieldContextMenu = (props: Props) => { + const skipEvent = useCallback((e: MouseEvent) => { + e.preventDefault(); + }, []); + + return ( + + menuProps={{ + size: 'sm', + isLazy: true, + }} + menuButtonProps={{ + bg: 'transparent', + _hover: { bg: 'transparent' }, + }} + renderMenu={() => ( + + Test + + )} + > + {props.children} + + ); +}; + +export default FieldContextMenu; diff --git a/invokeai/frontend/web/src/features/nodes/components/fields/FieldHandle.tsx b/invokeai/frontend/web/src/features/nodes/components/fields/FieldHandle.tsx new file mode 100644 index 0000000000..f79a57a4eb --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/fields/FieldHandle.tsx @@ -0,0 +1,112 @@ +import { Tooltip } from '@chakra-ui/react'; +import { CSSProperties, memo, useMemo } from 'react'; +import { Handle, HandleType, Position } from 'reactflow'; +import { + FIELDS, + HANDLE_TOOLTIP_OPEN_DELAY, + colorTokenToCssVar, +} from '../../types/constants'; +import { InputFieldTemplate, OutputFieldTemplate } from '../../types/types'; + +export const handleBaseStyles: CSSProperties = { + position: 'absolute', + width: '1rem', + height: '1rem', + borderWidth: 0, + zIndex: 1, +}; + +export const inputHandleStyles: CSSProperties = { + left: '-1rem', +}; + +export const outputHandleStyles: CSSProperties = { + right: '-0.5rem', +}; + +type FieldHandleProps = { + fieldTemplate: InputFieldTemplate | OutputFieldTemplate; + handleType: HandleType; + isConnectionInProgress: boolean; + isConnectionStartField: boolean; + connectionError: string | null; +}; + +const FieldHandle = (props: FieldHandleProps) => { + const { + fieldTemplate, + handleType, + isConnectionInProgress, + isConnectionStartField, + connectionError, + } = props; + const { name, type } = fieldTemplate; + const { color, title } = FIELDS[type]; + + const styles: CSSProperties = useMemo(() => { + const s: CSSProperties = { + backgroundColor: colorTokenToCssVar(color), + position: 'absolute', + width: '1rem', + height: '1rem', + borderWidth: 0, + zIndex: 1, + }; + + if (handleType === 'target') { + s.insetInlineStart = '-1rem'; + } else { + s.insetInlineEnd = '-1rem'; + } + + if (isConnectionInProgress && !isConnectionStartField && connectionError) { + s.filter = 'opacity(0.4) grayscale(0.7)'; + } + + if (isConnectionInProgress && connectionError) { + if (isConnectionStartField) { + s.cursor = 'grab'; + } else { + s.cursor = 'not-allowed'; + } + } else { + s.cursor = 'crosshair'; + } + + return s; + }, [ + color, + connectionError, + handleType, + isConnectionInProgress, + isConnectionStartField, + ]); + + const tooltip = useMemo(() => { + if (isConnectionInProgress && isConnectionStartField) { + return title; + } + if (isConnectionInProgress && connectionError) { + return connectionError ?? title; + } + return title; + }, [connectionError, isConnectionInProgress, isConnectionStartField, title]); + + return ( + + + + ); +}; + +export default memo(FieldHandle); diff --git a/invokeai/frontend/web/src/features/nodes/components/fields/FieldTitle.tsx b/invokeai/frontend/web/src/features/nodes/components/fields/FieldTitle.tsx new file mode 100644 index 0000000000..e9a49989f6 --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/fields/FieldTitle.tsx @@ -0,0 +1,163 @@ +import { + Editable, + EditableInput, + EditablePreview, + Flex, + useEditableControls, +} from '@chakra-ui/react'; +import { useAppDispatch } from 'app/store/storeHooks'; +import IAIDraggable from 'common/components/IAIDraggable'; +import { NodeFieldDraggableData } from 'features/dnd/types'; +import { + useFieldData, + useFieldTemplate, +} from 'features/nodes/hooks/useNodeData'; +import { fieldLabelChanged } from 'features/nodes/store/nodesSlice'; +import { + MouseEvent, + memo, + useCallback, + useEffect, + useMemo, + useState, +} from 'react'; + +interface Props { + nodeId: string; + fieldName: string; + isDraggable?: boolean; + kind: 'input' | 'output'; +} + +const FieldTitle = (props: Props) => { + const { nodeId, fieldName, isDraggable = false, kind } = props; + const fieldTemplate = useFieldTemplate(nodeId, fieldName, kind); + const field = useFieldData(nodeId, fieldName); + + const dispatch = useAppDispatch(); + const [localTitle, setLocalTitle] = useState( + field?.label || fieldTemplate?.title || 'Unknown Field' + ); + + const draggableData: NodeFieldDraggableData | undefined = useMemo( + () => + field && + fieldTemplate?.fieldKind === 'input' && + fieldTemplate?.input !== 'connection' && + isDraggable + ? { + id: `${nodeId}-${fieldName}`, + payloadType: 'NODE_FIELD', + payload: { nodeId, field, fieldTemplate }, + } + : undefined, + [field, fieldName, fieldTemplate, isDraggable, nodeId] + ); + + const handleSubmit = useCallback( + async (newTitle: string) => { + dispatch(fieldLabelChanged({ nodeId, fieldName, label: newTitle })); + setLocalTitle(newTitle || fieldTemplate?.title || 'Unknown Field'); + }, + [dispatch, nodeId, fieldName, fieldTemplate?.title] + ); + + const handleChange = useCallback((newTitle: string) => { + setLocalTitle(newTitle); + }, []); + + useEffect(() => { + // Another component may change the title; sync local title with global state + setLocalTitle(field?.label || fieldTemplate?.title || 'Unknown Field'); + }, [field?.label, fieldTemplate?.title]); + + return ( + + + + + + + + ); +}; + +export default memo(FieldTitle); + +type EditableControlsProps = { + draggableData?: NodeFieldDraggableData; +}; + +const EditableControls = memo((props: EditableControlsProps) => { + const { isEditing, getEditButtonProps } = useEditableControls(); + const handleDoubleClick = useCallback( + (e: MouseEvent) => { + const { onClick } = getEditButtonProps(); + if (!onClick) { + return; + } + onClick(e); + }, + [getEditButtonProps] + ); + + if (isEditing) { + return null; + } + + if (props.draggableData) { + return ( + + ); + } + + return ( + + ); +}); + +EditableControls.displayName = 'EditableControls'; diff --git a/invokeai/frontend/web/src/features/nodes/components/fields/FieldTooltipContent.tsx b/invokeai/frontend/web/src/features/nodes/components/fields/FieldTooltipContent.tsx new file mode 100644 index 0000000000..cbe75ca580 --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/fields/FieldTooltipContent.tsx @@ -0,0 +1,56 @@ +import { Flex, Text } from '@chakra-ui/react'; +import { + useFieldData, + useFieldTemplate, +} from 'features/nodes/hooks/useNodeData'; +import { FIELDS } from 'features/nodes/types/constants'; +import { + isInputFieldTemplate, + isInputFieldValue, +} from 'features/nodes/types/types'; +import { startCase } from 'lodash-es'; +import { useMemo } from 'react'; + +interface Props { + nodeId: string; + fieldName: string; + kind: 'input' | 'output'; +} + +const FieldTooltipContent = ({ nodeId, fieldName, kind }: Props) => { + const field = useFieldData(nodeId, fieldName); + const fieldTemplate = useFieldTemplate(nodeId, fieldName, kind); + const isInputTemplate = isInputFieldTemplate(fieldTemplate); + const fieldTitle = useMemo(() => { + if (isInputFieldValue(field)) { + if (field.label && fieldTemplate) { + return `${field.label} (${fieldTemplate.title})`; + } + + if (field.label && !fieldTemplate) { + return field.label; + } + + if (!field.label && fieldTemplate) { + return fieldTemplate.title; + } + + return 'Unknown Field'; + } + }, [field, fieldTemplate]); + + return ( + + {fieldTitle} + {fieldTemplate && ( + + {fieldTemplate.description} + + )} + {fieldTemplate && Type: {FIELDS[fieldTemplate.type].title}} + {isInputTemplate && Input: {startCase(fieldTemplate.input)}} + + ); +}; + +export default FieldTooltipContent; diff --git a/invokeai/frontend/web/src/features/nodes/components/fields/InputField.tsx b/invokeai/frontend/web/src/features/nodes/components/fields/InputField.tsx new file mode 100644 index 0000000000..47033baa7b --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/fields/InputField.tsx @@ -0,0 +1,139 @@ +import { Flex, FormControl, FormLabel, Tooltip } from '@chakra-ui/react'; +import { useConnectionState } from 'features/nodes/hooks/useConnectionState'; +import { + useDoesInputHaveValue, + useFieldTemplate, +} from 'features/nodes/hooks/useNodeData'; +import { HANDLE_TOOLTIP_OPEN_DELAY } from 'features/nodes/types/constants'; +import { PropsWithChildren, memo, useMemo } from 'react'; +import FieldHandle from './FieldHandle'; +import FieldTitle from './FieldTitle'; +import FieldTooltipContent from './FieldTooltipContent'; +import InputFieldRenderer from './InputFieldRenderer'; + +interface Props { + nodeId: string; + fieldName: string; +} + +const InputField = ({ nodeId, fieldName }: Props) => { + const fieldTemplate = useFieldTemplate(nodeId, fieldName, 'input'); + const doesFieldHaveValue = useDoesInputHaveValue(nodeId, fieldName); + + const { + isConnected, + isConnectionInProgress, + isConnectionStartField, + connectionError, + shouldDim, + } = useConnectionState({ nodeId, fieldName, kind: 'input' }); + + const isMissingInput = useMemo(() => { + if (fieldTemplate?.fieldKind !== 'input') { + return false; + } + + if (!fieldTemplate.required) { + return false; + } + + if (!isConnected && fieldTemplate.input === 'connection') { + return true; + } + + if (!doesFieldHaveValue && !isConnected && fieldTemplate.input === 'any') { + return true; + } + }, [fieldTemplate, isConnected, doesFieldHaveValue]); + + if (fieldTemplate?.fieldKind !== 'input') { + return ( + + + Unknown input: {fieldName} + + + ); + } + + return ( + + + + } + openDelay={HANDLE_TOOLTIP_OPEN_DELAY} + placement="top" + shouldWrapChildren + hasArrow + > + + + + + + + + {fieldTemplate.input !== 'direct' && ( + + )} + + ); +}; + +export default InputField; + +type InputFieldWrapperProps = PropsWithChildren<{ + shouldDim: boolean; +}>; + +const InputFieldWrapper = memo( + ({ shouldDim, children }: InputFieldWrapperProps) => ( + + {children} + + ) +); + +InputFieldWrapper.displayName = 'InputFieldWrapper'; diff --git a/invokeai/frontend/web/src/features/nodes/components/fields/InputFieldRenderer.tsx b/invokeai/frontend/web/src/features/nodes/components/fields/InputFieldRenderer.tsx new file mode 100644 index 0000000000..acec921d8e --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/fields/InputFieldRenderer.tsx @@ -0,0 +1,292 @@ +import { Box } from '@chakra-ui/react'; +import { + useFieldData, + useFieldTemplate, +} from 'features/nodes/hooks/useNodeData'; +import { memo } from 'react'; +import BooleanInputField from './fieldTypes/BooleanInputField'; +import ClipInputField from './fieldTypes/ClipInputField'; +import CollectionInputField from './fieldTypes/CollectionInputField'; +import CollectionItemInputField from './fieldTypes/CollectionItemInputField'; +import ColorInputField from './fieldTypes/ColorInputField'; +import ConditioningInputField from './fieldTypes/ConditioningInputField'; +import ControlInputField from './fieldTypes/ControlInputField'; +import ControlNetModelInputField from './fieldTypes/ControlNetModelInputField'; +import EnumInputField from './fieldTypes/EnumInputField'; +import ImageCollectionInputField from './fieldTypes/ImageCollectionInputField'; +import ImageInputField from './fieldTypes/ImageInputField'; +import LatentsInputField from './fieldTypes/LatentsInputField'; +import LoRAModelInputField from './fieldTypes/LoRAModelInputField'; +import MainModelInputField from './fieldTypes/MainModelInputField'; +import NumberInputField from './fieldTypes/NumberInputField'; +import RefinerModelInputField from './fieldTypes/RefinerModelInputField'; +import SDXLMainModelInputField from './fieldTypes/SDXLMainModelInputField'; +import StringInputField from './fieldTypes/StringInputField'; +import UnetInputField from './fieldTypes/UnetInputField'; +import VaeInputField from './fieldTypes/VaeInputField'; +import VaeModelInputField from './fieldTypes/VaeModelInputField'; + +type InputFieldProps = { + nodeId: string; + fieldName: string; +}; + +// build an individual input element based on the schema +const InputFieldRenderer = ({ nodeId, fieldName }: InputFieldProps) => { + const field = useFieldData(nodeId, fieldName); + const fieldTemplate = useFieldTemplate(nodeId, fieldName, 'input'); + + if (fieldTemplate?.fieldKind === 'output') { + return Output field in input: {field?.type}; + } + + if (field?.type === 'string' && fieldTemplate?.type === 'string') { + return ( + + ); + } + + if (field?.type === 'boolean' && fieldTemplate?.type === 'boolean') { + return ( + + ); + } + + if ( + (field?.type === 'integer' && fieldTemplate?.type === 'integer') || + (field?.type === 'float' && fieldTemplate?.type === 'float') + ) { + return ( + + ); + } + + if (field?.type === 'enum' && fieldTemplate?.type === 'enum') { + return ( + + ); + } + + if (field?.type === 'ImageField' && fieldTemplate?.type === 'ImageField') { + return ( + + ); + } + + if ( + field?.type === 'LatentsField' && + fieldTemplate?.type === 'LatentsField' + ) { + return ( + + ); + } + + if ( + field?.type === 'ConditioningField' && + fieldTemplate?.type === 'ConditioningField' + ) { + return ( + + ); + } + + if (field?.type === 'UNetField' && fieldTemplate?.type === 'UNetField') { + return ( + + ); + } + + if (field?.type === 'ClipField' && fieldTemplate?.type === 'ClipField') { + return ( + + ); + } + + if (field?.type === 'VaeField' && fieldTemplate?.type === 'VaeField') { + return ( + + ); + } + + if ( + field?.type === 'ControlField' && + fieldTemplate?.type === 'ControlField' + ) { + return ( + + ); + } + + if ( + field?.type === 'MainModelField' && + fieldTemplate?.type === 'MainModelField' + ) { + return ( + + ); + } + + if ( + field?.type === 'SDXLRefinerModelField' && + fieldTemplate?.type === 'SDXLRefinerModelField' + ) { + return ( + + ); + } + + if ( + field?.type === 'VaeModelField' && + fieldTemplate?.type === 'VaeModelField' + ) { + return ( + + ); + } + + if ( + field?.type === 'LoRAModelField' && + fieldTemplate?.type === 'LoRAModelField' + ) { + return ( + + ); + } + + if ( + field?.type === 'ControlNetModelField' && + fieldTemplate?.type === 'ControlNetModelField' + ) { + return ( + + ); + } + + if (field?.type === 'Collection' && fieldTemplate?.type === 'Collection') { + return ( + + ); + } + + if ( + field?.type === 'CollectionItem' && + fieldTemplate?.type === 'CollectionItem' + ) { + return ( + + ); + } + + if (field?.type === 'ColorField' && fieldTemplate?.type === 'ColorField') { + return ( + + ); + } + + if ( + field?.type === 'ImageCollection' && + fieldTemplate?.type === 'ImageCollection' + ) { + return ( + + ); + } + + if ( + field?.type === 'SDXLMainModelField' && + fieldTemplate?.type === 'SDXLMainModelField' + ) { + return ( + + ); + } + + return Unknown field type: {field?.type}; +}; + +export default memo(InputFieldRenderer); diff --git a/invokeai/frontend/web/src/features/nodes/components/fields/ItemInputFieldComponent.tsx b/invokeai/frontend/web/src/features/nodes/components/fields/ItemInputFieldComponent.tsx deleted file mode 100644 index 6fa89345bf..0000000000 --- a/invokeai/frontend/web/src/features/nodes/components/fields/ItemInputFieldComponent.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { - ItemInputFieldTemplate, - ItemInputFieldValue, -} from 'features/nodes/types/types'; -import { memo } from 'react'; -import { FaAddressCard } from 'react-icons/fa'; -import { FieldComponentProps } from './types'; - -const ItemInputFieldComponent = ( - _props: FieldComponentProps -) => { - return ; -}; - -export default memo(ItemInputFieldComponent); diff --git a/invokeai/frontend/web/src/features/nodes/components/fields/LinearViewField.tsx b/invokeai/frontend/web/src/features/nodes/components/fields/LinearViewField.tsx new file mode 100644 index 0000000000..ea4bb76d62 --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/fields/LinearViewField.tsx @@ -0,0 +1,54 @@ +import { Flex, FormControl, FormLabel, Tooltip } from '@chakra-ui/react'; +import { HANDLE_TOOLTIP_OPEN_DELAY } from 'features/nodes/types/constants'; +import { memo } from 'react'; +import FieldTitle from './FieldTitle'; +import FieldTooltipContent from './FieldTooltipContent'; +import InputFieldRenderer from './InputFieldRenderer'; + +type Props = { + nodeId: string; + fieldName: string; +}; + +const LinearViewField = ({ nodeId, fieldName }: Props) => { + return ( + + + + } + openDelay={HANDLE_TOOLTIP_OPEN_DELAY} + placement="top" + shouldWrapChildren + hasArrow + > + + + + + + + + ); +}; + +export default memo(LinearViewField); diff --git a/invokeai/frontend/web/src/features/nodes/components/fields/OutputField.tsx b/invokeai/frontend/web/src/features/nodes/components/fields/OutputField.tsx new file mode 100644 index 0000000000..2a257d741e --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/fields/OutputField.tsx @@ -0,0 +1,100 @@ +import { + Flex, + FormControl, + FormLabel, + Spacer, + Tooltip, +} from '@chakra-ui/react'; +import { useConnectionState } from 'features/nodes/hooks/useConnectionState'; +import { useFieldTemplate } from 'features/nodes/hooks/useNodeData'; +import { HANDLE_TOOLTIP_OPEN_DELAY } from 'features/nodes/types/constants'; +import { PropsWithChildren, memo } from 'react'; +import FieldHandle from './FieldHandle'; +import FieldTooltipContent from './FieldTooltipContent'; + +interface Props { + nodeId: string; + fieldName: string; +} + +const OutputField = ({ nodeId, fieldName }: Props) => { + const fieldTemplate = useFieldTemplate(nodeId, fieldName, 'output'); + + const { + isConnected, + isConnectionInProgress, + isConnectionStartField, + connectionError, + shouldDim, + } = useConnectionState({ nodeId, fieldName, kind: 'output' }); + + if (fieldTemplate?.fieldKind !== 'output') { + return ( + + + Unknown output: {fieldName} + + + ); + } + + return ( + + + + } + openDelay={HANDLE_TOOLTIP_OPEN_DELAY} + placement="top" + shouldWrapChildren + hasArrow + > + + + {fieldTemplate?.title} + + + + + + ); +}; + +export default memo(OutputField); + +type OutputFieldWrapperProps = PropsWithChildren<{ + shouldDim: boolean; +}>; + +const OutputFieldWrapper = memo( + ({ shouldDim, children }: OutputFieldWrapperProps) => ( + + {children} + + ) +); + +OutputFieldWrapper.displayName = 'OutputFieldWrapper'; diff --git a/invokeai/frontend/web/src/features/nodes/components/fields/StringInputFieldComponent.tsx b/invokeai/frontend/web/src/features/nodes/components/fields/StringInputFieldComponent.tsx deleted file mode 100644 index 18cf7e997f..0000000000 --- a/invokeai/frontend/web/src/features/nodes/components/fields/StringInputFieldComponent.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { Input, Textarea } from '@chakra-ui/react'; -import { useAppDispatch } from 'app/store/storeHooks'; -import { fieldValueChanged } from 'features/nodes/store/nodesSlice'; -import { - StringInputFieldTemplate, - StringInputFieldValue, -} from 'features/nodes/types/types'; -import { ChangeEvent, memo } from 'react'; -import { FieldComponentProps } from './types'; - -const StringInputFieldComponent = ( - props: FieldComponentProps -) => { - const { nodeId, field } = props; - const dispatch = useAppDispatch(); - - const handleValueChanged = ( - e: ChangeEvent - ) => { - dispatch( - fieldValueChanged({ - nodeId, - fieldName: field.name, - value: e.target.value, - }) - ); - }; - - return ['prompt', 'style'].includes(field.name.toLowerCase()) ? ( -