diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 00000000..94f480de
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+* text=auto eol=lf
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index b5157e17..f74be2e3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,4 +2,10 @@ __pycache__
installer
installer.tar
dist
+
+# built code for the front end
+!/ui/frontend/dist
+ui/frontend/.idea/*
+ui/frontend/build_src/.idea/*
+
.idea/*
diff --git a/README.md b/README.md
index eb9955d4..d493be61 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
[![Discord Server](https://img.shields.io/discord/1014774730907209781?label=Discord)](https://discord.com/invite/u9yhsFmEkB) (for support, and development discussion) | [Troubleshooting guide for common problems](Troubleshooting.md)
-️🔥🎉 **New!** Use Custom Weights, Task Queue, Negative Prompt, Live Preview, More Samplers, In-Painting, Face Correction (GFPGAN) and Upscaling (RealESRGAN) have been added!
+️🔥🎉 **New!** Task Queue, Negative Prompt, Live Preview, More Samplers, In-Painting, Face Correction (GFPGAN) and Upscaling (RealESRGAN) have been added!
This distribution currently uses Stable Diffusion 1.4. Once the model for 1.5 becomes publicly available, the model in this distribution will be updated.
@@ -18,7 +18,6 @@ This distribution currently uses Stable Diffusion 1.4. Once the model for 1.5 be
- **In-Painting**
- **Live Preview**: See the image as the AI is drawing it
- **Task Queue**: Queue up all your ideas, without waiting for the current task to finish
-- **Custom Weights**: Use your own `.ckpt` file, by placing it inside the `stable-diffusion` folder (rename it to `custom-model.ckpt`)
- **Negative Prompt**: Specify aspects of the image to *remove*.
- **Lots of Samplers:** ddim, plms, heun, euler, euler_a, dpm2, dpm2_a, lms
- **Image Modifiers**: A library of *modifier tags* like *"Realistic"*, *"Pencil Sketch"*, *"ArtStation"* etc. Experiment with various styles quickly.
diff --git a/Troubleshooting.md b/Troubleshooting.md
index e607fb1a..1955a424 100644
--- a/Troubleshooting.md
+++ b/Troubleshooting.md
@@ -64,7 +64,7 @@ Users don't need to have the Anaconda Prompt installed to do this anymore, since
5. Type `conda activate .\env` and press enter
6. Type `python --version` and press enter. You should see 3.8.5.
-**Linux:**
+**Windows:**
1. Open the terminal
2. Type `cd /path/to/stable-diffusion-ui` and press enter
3. Type `installer/bin/activate` and press enter
diff --git a/scripts/Developer Console.cmd b/scripts/Developer Console.cmd
deleted file mode 100644
index e9bfb28b..00000000
--- a/scripts/Developer Console.cmd
+++ /dev/null
@@ -1,14 +0,0 @@
-@echo off
-
-echo "Opening Stable Diffusion UI - Developer Console.." & echo.
-
-@call installer\Scripts\activate.bat
-
-@call conda-unpack
-
-@call conda --version
-@call git --version
-
-@call conda activate .\stable-diffusion\env
-
-cmd /k
\ No newline at end of file
diff --git a/scripts/developer_console.sh b/scripts/developer_console.sh
deleted file mode 100644
index 9cd84f49..00000000
--- a/scripts/developer_console.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-
-if [ "$0" == "bash" ]; then
- echo "Opening Stable Diffusion UI - Developer Console.."
- echo ""
-
- source installer/bin/activate
-
- conda-unpack
-
- conda --version
- git --version
-
- conda activate ./stable-diffusion/env
-else
- bash --init-file open_dev_console.sh
-fi
\ No newline at end of file
diff --git a/scripts/on_env_start.bat b/scripts/on_env_start.bat
index a73198ce..16312a5a 100644
--- a/scripts/on_env_start.bat
+++ b/scripts/on_env_start.bat
@@ -55,7 +55,6 @@ if "%update_branch%"=="" (
@xcopy sd-ui-files\ui ui /s /i /Y
@copy sd-ui-files\scripts\on_sd_start.bat scripts\ /Y
@copy "sd-ui-files\scripts\Start Stable Diffusion UI.cmd" . /Y
-@copy "sd-ui-files\scripts\Developer Console.cmd" . /Y
@call scripts\on_sd_start.bat
diff --git a/scripts/on_env_start.sh b/scripts/on_env_start.sh
index 3a934153..79ab23a7 100755
--- a/scripts/on_env_start.sh
+++ b/scripts/on_env_start.sh
@@ -37,7 +37,6 @@ rm -rf ui
cp -Rf sd-ui-files/ui .
cp sd-ui-files/scripts/on_sd_start.sh scripts/
cp sd-ui-files/scripts/start.sh .
-cp sd-ui-files/scripts/developer_console.sh .
./scripts/on_sd_start.sh
diff --git a/scripts/on_sd_start.bat b/scripts/on_sd_start.bat
index b857451a..34ccdf83 100644
--- a/scripts/on_sd_start.bat
+++ b/scripts/on_sd_start.bat
@@ -5,9 +5,6 @@
@REM Caution, this file will make your eyes and brain bleed. It's such an unholy mess.
@REM Note to self: Please rewrite this in Python. For the sake of your own sanity.
-@copy "sd-ui-files\scripts\Developer Console.cmd" . /Y
-if exist "Open Developer Console.cmd" del "Open Developer Console.cmd"
-
@call python -c "import os; import shutil; frm = 'sd-ui-files\\ui\\hotfix\\9c24e6cd9f499d02c4f21a033736dabd365962dc80fe3aeb57a8f85ea45a20a3.26fead7ea4f0f843f6eb4055dfd25693f1a71f3c6871b184042d4b126244e142'; dst = os.path.join(os.path.expanduser('~'), '.cache', 'huggingface', 'transformers', '9c24e6cd9f499d02c4f21a033736dabd365962dc80fe3aeb57a8f85ea45a20a3.26fead7ea4f0f843f6eb4055dfd25693f1a71f3c6871b184042d4b126244e142'); shutil.copyfile(frm, dst) if os.path.exists(dst) else print(''); print('Hotfixed broken JSON file from OpenAI');"
@>nul grep -c "sd_git_cloned" scripts\install_status.txt
@@ -166,9 +163,6 @@ call WHERE uvicorn > .tmp
-if not exist "..\models\stable-diffusion" mkdir "..\models\stable-diffusion"
-echo. > "..\models\stable-diffusion\Put your custom ckpt files here.txt"
-
@if exist "sd-v1-4.ckpt" (
for %%I in ("sd-v1-4.ckpt") do if "%%~zI" EQU "4265380512" (
echo "Data files (weights) necessary for Stable Diffusion were already downloaded. Using the HuggingFace 4 GB Model."
diff --git a/scripts/on_sd_start.sh b/scripts/on_sd_start.sh
index 8f5f7551..2941764f 100755
--- a/scripts/on_sd_start.sh
+++ b/scripts/on_sd_start.sh
@@ -4,11 +4,6 @@ cp sd-ui-files/scripts/on_env_start.sh scripts/
source installer/etc/profile.d/conda.sh
-cp sd-ui-files/scripts/developer_console.sh .
-if [ -e "open_dev_console.sh" ]; then
- rm "open_dev_console.sh"
-fi
-
python -c "import os; import shutil; frm = 'sd-ui-files/ui/hotfix/9c24e6cd9f499d02c4f21a033736dabd365962dc80fe3aeb57a8f85ea45a20a3.26fead7ea4f0f843f6eb4055dfd25693f1a71f3c6871b184042d4b126244e142'; dst = os.path.join(os.path.expanduser('~'), '.cache', 'huggingface', 'transformers', '9c24e6cd9f499d02c4f21a033736dabd365962dc80fe3aeb57a8f85ea45a20a3.26fead7ea4f0f843f6eb4055dfd25693f1a71f3c6871b184042d4b126244e142'); shutil.copyfile(frm, dst) if os.path.exists(dst) else print(''); print('Hotfixed broken JSON file from OpenAI');"
# Caution, this file will make your eyes and brain bleed. It's such an unholy mess.
@@ -164,11 +159,8 @@ fi
-mkdir -p "../models/stable-diffusion"
-echo "" > "../models/stable-diffusion/Put your custom ckpt files here.txt"
-
if [ -f "sd-v1-4.ckpt" ]; then
- model_size=`find "sd-v1-4.ckpt" -printf "%s"`
+ model_size=`ls -l sd-v1-4.ckpt | awk '{print $5}'`
if [ "$model_size" -eq "4265380512" ] || [ "$model_size" -eq "7703807346" ] || [ "$model_size" -eq "7703810927" ]; then
echo "Data files (weights) necessary for Stable Diffusion were already downloaded"
@@ -184,7 +176,7 @@ if [ ! -f "sd-v1-4.ckpt" ]; then
curl -L -k https://me.cmdr2.org/stable-diffusion-ui/sd-v1-4.ckpt > sd-v1-4.ckpt
if [ -f "sd-v1-4.ckpt" ]; then
- model_size=`find "sd-v1-4.ckpt" -printf "%s"`
+ model_size=`ls -l sd-v1-4.ckpt | awk '{print $5}'`
if [ ! "$model_size" == "4265380512" ]; then
printf "\n\nError: The downloaded model file was invalid! Bytes downloaded: $model_size\n\n"
printf "\n\nError downloading the data files (weights) for Stable Diffusion. Sorry about that, please try to:\n 1. Run this installer again.\n 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/blob/main/Troubleshooting.md\n 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB\n 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues\nThanks!\n\n"
@@ -200,7 +192,7 @@ fi
if [ -f "GFPGANv1.3.pth" ]; then
- model_size=`find "GFPGANv1.3.pth" -printf "%s"`
+ model_size=`ls -l GFPGANv1.3.pth | awk '{print $5}'`
if [ "$model_size" -eq "348632874" ]; then
echo "Data files (weights) necessary for GFPGAN (Face Correction) were already downloaded"
@@ -216,7 +208,7 @@ if [ ! -f "GFPGANv1.3.pth" ]; then
curl -L -k https://github.com/TencentARC/GFPGAN/releases/download/v1.3.0/GFPGANv1.3.pth > GFPGANv1.3.pth
if [ -f "GFPGANv1.3.pth" ]; then
- model_size=`find "GFPGANv1.3.pth" -printf "%s"`
+ model_size=`ls -l GFPGANv1.3.pth | awk '{print $5}'`
if [ ! "$model_size" -eq "348632874" ]; then
printf "\n\nError: The downloaded GFPGAN model file was invalid! Bytes downloaded: $model_size\n\n"
printf "\n\nError downloading the data files (weights) for GFPGAN (Face Correction). Sorry about that, please try to:\n 1. Run this installer again.\n 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/blob/main/Troubleshooting.md\n 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB\n 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues\nThanks!\n\n"
@@ -232,7 +224,7 @@ fi
if [ -f "RealESRGAN_x4plus.pth" ]; then
- model_size=`find "RealESRGAN_x4plus.pth" -printf "%s"`
+ model_size=`ls -l RealESRGAN_x4plus.pth | awk '{print $5}'`
if [ "$model_size" -eq "67040989" ]; then
echo "Data files (weights) necessary for ESRGAN (Resolution Upscaling) x4plus were already downloaded"
@@ -248,7 +240,7 @@ if [ ! -f "RealESRGAN_x4plus.pth" ]; then
curl -L -k https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth > RealESRGAN_x4plus.pth
if [ -f "RealESRGAN_x4plus.pth" ]; then
- model_size=`find "RealESRGAN_x4plus.pth" -printf "%s"`
+ model_size=`ls -l RealESRGAN_x4plus.pth | awk '{print $5}'`
if [ ! "$model_size" -eq "67040989" ]; then
printf "\n\nError: The downloaded ESRGAN x4plus model file was invalid! Bytes downloaded: $model_size\n\n"
printf "\n\nError downloading the data files (weights) for ESRGAN (Resolution Upscaling) x4plus. Sorry about that, please try to:\n 1. Run this installer again.\n 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/blob/main/Troubleshooting.md\n 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB\n 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues\nThanks!\n\n"
@@ -264,7 +256,7 @@ fi
if [ -f "RealESRGAN_x4plus_anime_6B.pth" ]; then
- model_size=`find "RealESRGAN_x4plus_anime_6B.pth" -printf "%s"`
+ model_size=`ls -l RealESRGAN_x4plus_anime_6B.pth | awk '{print $5}'`
if [ "$model_size" -eq "17938799" ]; then
echo "Data files (weights) necessary for ESRGAN (Resolution Upscaling) x4plus_anime were already downloaded"
@@ -280,7 +272,7 @@ if [ ! -f "RealESRGAN_x4plus_anime_6B.pth" ]; then
curl -L -k https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.2.4/RealESRGAN_x4plus_anime_6B.pth > RealESRGAN_x4plus_anime_6B.pth
if [ -f "RealESRGAN_x4plus_anime_6B.pth" ]; then
- model_size=`find "RealESRGAN_x4plus_anime_6B.pth" -printf "%s"`
+ model_size=`ls -l RealESRGAN_x4plus_anime_6B.pth | awk '{print $5}'`
if [ ! "$model_size" -eq "17938799" ]; then
printf "\n\nError: The downloaded ESRGAN x4plus_anime model file was invalid! Bytes downloaded: $model_size\n\n"
printf "\n\nError downloading the data files (weights) for ESRGAN (Resolution Upscaling) x4plus_anime. Sorry about that, please try to:\n 1. Run this installer again.\n 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/blob/main/Troubleshooting.md\n 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB\n 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues\nThanks!\n\n"
diff --git a/ui/media/ding.mp3 b/ui/frontend/assets/ding.mp3
similarity index 100%
rename from ui/media/ding.mp3
rename to ui/frontend/assets/ding.mp3
diff --git a/ui/media/kofi.png b/ui/frontend/assets/kofi.png
similarity index 100%
rename from ui/media/kofi.png
rename to ui/frontend/assets/kofi.png
diff --git a/ui/media/modifier-thumbnails/artist/artstation/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/artstation/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/artstation/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/artstation/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/artstation/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/artstation/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/artstation/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/artstation/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_agnes_lawrence_pelton/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_agnes_lawrence_pelton/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_agnes_lawrence_pelton/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_agnes_lawrence_pelton/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_agnes_lawrence_pelton/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_agnes_lawrence_pelton/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_agnes_lawrence_pelton/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_agnes_lawrence_pelton/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_akihito_yoshida/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_akihito_yoshida/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_akihito_yoshida/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_akihito_yoshida/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_akihito_yoshida/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_akihito_yoshida/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_akihito_yoshida/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_akihito_yoshida/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_alex_grey/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_alex_grey/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_alex_grey/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_alex_grey/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_alex_grey/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_alex_grey/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_alex_grey/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_alex_grey/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_alexander_jansson/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_alexander_jansson/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_alexander_jansson/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_alexander_jansson/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_alexander_jansson/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_alexander_jansson/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_alexander_jansson/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_alexander_jansson/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_alphonse_mucha/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_alphonse_mucha/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_alphonse_mucha/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_alphonse_mucha/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_alphonse_mucha/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_alphonse_mucha/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_alphonse_mucha/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_alphonse_mucha/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_andy_warhol/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_andy_warhol/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_andy_warhol/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_andy_warhol/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_andy_warhol/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_andy_warhol/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_andy_warhol/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_andy_warhol/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_artgerm/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_artgerm/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_artgerm/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_artgerm/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_artgerm/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_artgerm/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_artgerm/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_artgerm/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_asaf_hanuka/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_asaf_hanuka/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_asaf_hanuka/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_asaf_hanuka/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_asaf_hanuka/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_asaf_hanuka/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_asaf_hanuka/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_asaf_hanuka/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_aubrey_beardsley/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_aubrey_beardsley/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_aubrey_beardsley/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_aubrey_beardsley/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_aubrey_beardsley/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_aubrey_beardsley/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_aubrey_beardsley/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_aubrey_beardsley/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_banksy/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_banksy/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_banksy/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_banksy/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_banksy/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_banksy/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_banksy/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_banksy/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_beeple/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_beeple/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_beeple/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_beeple/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_beeple/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_beeple/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_beeple/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_beeple/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_ben_enwonwu/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_ben_enwonwu/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_ben_enwonwu/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_ben_enwonwu/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_ben_enwonwu/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_ben_enwonwu/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_ben_enwonwu/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_ben_enwonwu/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_bob_eggleton/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_bob_eggleton/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_bob_eggleton/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_bob_eggleton/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_bob_eggleton/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_bob_eggleton/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_bob_eggleton/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_bob_eggleton/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_caravaggio_michelangelo_merisi/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_caravaggio_michelangelo_merisi/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_caravaggio_michelangelo_merisi/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_caravaggio_michelangelo_merisi/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_caravaggio_michelangelo_merisi/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_caravaggio_michelangelo_merisi/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_caravaggio_michelangelo_merisi/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_caravaggio_michelangelo_merisi/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_caspar_david_friedrich/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_caspar_david_friedrich/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_caspar_david_friedrich/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_caspar_david_friedrich/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_caspar_david_friedrich/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_caspar_david_friedrich/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_caspar_david_friedrich/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_caspar_david_friedrich/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_chris_foss/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_chris_foss/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_chris_foss/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_chris_foss/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_chris_foss/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_chris_foss/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_chris_foss/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_chris_foss/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_claude_monet/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_claude_monet/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_claude_monet/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_claude_monet/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_claude_monet/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_claude_monet/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_claude_monet/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_claude_monet/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_dan_mumford/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_dan_mumford/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_dan_mumford/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_dan_mumford/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_dan_mumford/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_dan_mumford/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_dan_mumford/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_dan_mumford/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_david_mann/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_david_mann/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_david_mann/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_david_mann/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_david_mann/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_david_mann/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_david_mann/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_david_mann/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_diego_vela_zquez/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_diego_vela_zquez/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_diego_vela_zquez/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_diego_vela_zquez/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_diego_vela_zquez/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_diego_vela_zquez/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_diego_vela_zquez/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_diego_vela_zquez/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_disney_animation_studios/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_disney_animation_studios/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_disney_animation_studios/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_disney_animation_studios/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_disney_animation_studios/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_disney_animation_studios/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_disney_animation_studios/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_disney_animation_studios/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_e_douard_manet/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_e_douard_manet/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_e_douard_manet/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_e_douard_manet/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_e_douard_manet/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_e_douard_manet/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_e_douard_manet/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_e_douard_manet/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_esao_andrews/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_esao_andrews/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_esao_andrews/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_esao_andrews/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_esao_andrews/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_esao_andrews/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_esao_andrews/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_esao_andrews/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_frida_kahlo/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_frida_kahlo/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_frida_kahlo/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_frida_kahlo/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_frida_kahlo/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_frida_kahlo/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_frida_kahlo/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_frida_kahlo/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_gediminas_pranckevicius/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_gediminas_pranckevicius/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_gediminas_pranckevicius/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_gediminas_pranckevicius/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_gediminas_pranckevicius/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_gediminas_pranckevicius/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_gediminas_pranckevicius/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_gediminas_pranckevicius/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_georgia_o_keeffe/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_georgia_o_keeffe/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_georgia_o_keeffe/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_georgia_o_keeffe/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_georgia_o_keeffe/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_georgia_o_keeffe/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_georgia_o_keeffe/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_georgia_o_keeffe/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_greg_rutkowski/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_greg_rutkowski/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_greg_rutkowski/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_greg_rutkowski/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_greg_rutkowski/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_greg_rutkowski/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_greg_rutkowski/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_greg_rutkowski/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_gustave_dore_/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_gustave_dore_/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_gustave_dore_/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_gustave_dore_/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_gustave_dore_/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_gustave_dore_/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_gustave_dore_/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_gustave_dore_/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_gustave_klimt/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_gustave_klimt/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_gustave_klimt/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_gustave_klimt/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_gustave_klimt/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_gustave_klimt/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_gustave_klimt/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_gustave_klimt/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_h_r_giger/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_h_r_giger/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_h_r_giger/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_h_r_giger/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_h_r_giger/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_h_r_giger/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_h_r_giger/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_h_r_giger/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_hayao_miyazaki/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_hayao_miyazaki/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_hayao_miyazaki/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_hayao_miyazaki/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_hayao_miyazaki/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_hayao_miyazaki/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_hayao_miyazaki/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_hayao_miyazaki/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_henri_matisse/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_henri_matisse/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_henri_matisse/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_henri_matisse/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_henri_matisse/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_henri_matisse/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_henri_matisse/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_henri_matisse/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_hp_lovecraft/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_hp_lovecraft/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_hp_lovecraft/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_hp_lovecraft/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_hp_lovecraft/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_hp_lovecraft/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_hp_lovecraft/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_hp_lovecraft/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_ivan_shishkin/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_ivan_shishkin/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_ivan_shishkin/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_ivan_shishkin/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_ivan_shishkin/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_ivan_shishkin/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_ivan_shishkin/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_ivan_shishkin/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_jack_kirby/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_jack_kirby/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_jack_kirby/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_jack_kirby/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_jack_kirby/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_jack_kirby/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_jack_kirby/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_jack_kirby/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_jackson_pollock/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_jackson_pollock/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_jackson_pollock/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_jackson_pollock/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_jackson_pollock/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_jackson_pollock/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_jackson_pollock/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_jackson_pollock/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_james_jean/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_james_jean/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_james_jean/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_james_jean/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_james_jean/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_james_jean/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_james_jean/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_james_jean/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_jim_burns/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_jim_burns/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_jim_burns/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_jim_burns/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_jim_burns/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_jim_burns/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_jim_burns/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_jim_burns/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_johannes_vermeer/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_johannes_vermeer/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_johannes_vermeer/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_johannes_vermeer/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_johannes_vermeer/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_johannes_vermeer/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_johannes_vermeer/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_johannes_vermeer/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_john_william_waterhouse/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_john_william_waterhouse/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_john_william_waterhouse/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_john_william_waterhouse/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_john_william_waterhouse/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_john_william_waterhouse/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_john_william_waterhouse/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_john_william_waterhouse/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_katsushika_hokusai/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_katsushika_hokusai/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_katsushika_hokusai/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_katsushika_hokusai/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_katsushika_hokusai/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_katsushika_hokusai/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_katsushika_hokusai/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_katsushika_hokusai/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_kim_tschang_yeul/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_kim_tschang_yeul/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_kim_tschang_yeul/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_kim_tschang_yeul/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_kim_tschang_yeul/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_kim_tschang_yeul/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_kim_tschang_yeul/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_kim_tschang_yeul/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_ko_young_hoon/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_ko_young_hoon/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_ko_young_hoon/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_ko_young_hoon/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_ko_young_hoon/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_ko_young_hoon/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_ko_young_hoon/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_ko_young_hoon/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_leonardo_da_vinci/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_leonardo_da_vinci/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_leonardo_da_vinci/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_leonardo_da_vinci/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_leonardo_da_vinci/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_leonardo_da_vinci/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_leonardo_da_vinci/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_leonardo_da_vinci/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_lisa_frank/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_lisa_frank/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_lisa_frank/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_lisa_frank/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_lisa_frank/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_lisa_frank/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_lisa_frank/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_lisa_frank/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_m_c_escher/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_m_c_escher/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_m_c_escher/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_m_c_escher/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_m_c_escher/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_m_c_escher/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_m_c_escher/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_m_c_escher/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_mahmoud_sai_d/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_mahmoud_sai_d/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_mahmoud_sai_d/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_mahmoud_sai_d/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_mahmoud_sai_d/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_mahmoud_sai_d/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_mahmoud_sai_d/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_mahmoud_sai_d/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_makoto_shinkai/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_makoto_shinkai/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_makoto_shinkai/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_makoto_shinkai/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_makoto_shinkai/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_makoto_shinkai/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_makoto_shinkai/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_makoto_shinkai/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_marc_simonetti/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_marc_simonetti/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_marc_simonetti/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_marc_simonetti/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_marc_simonetti/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_marc_simonetti/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_marc_simonetti/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_marc_simonetti/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_mark_brooks/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_mark_brooks/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_mark_brooks/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_mark_brooks/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_mark_brooks/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_mark_brooks/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_mark_brooks/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_mark_brooks/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_michelangelo/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_michelangelo/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_michelangelo/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_michelangelo/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_michelangelo/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_michelangelo/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_michelangelo/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_michelangelo/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_pablo_picasso/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_pablo_picasso/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_pablo_picasso/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_pablo_picasso/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_pablo_picasso/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_pablo_picasso/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_pablo_picasso/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_pablo_picasso/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_paul_klee/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_paul_klee/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_paul_klee/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_paul_klee/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_paul_klee/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_paul_klee/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_paul_klee/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_paul_klee/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_peter_mohrbacher/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_peter_mohrbacher/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_peter_mohrbacher/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_peter_mohrbacher/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_peter_mohrbacher/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_peter_mohrbacher/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_peter_mohrbacher/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_peter_mohrbacher/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_pierre-auguste_renoir/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_pierre-auguste_renoir/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_pierre-auguste_renoir/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_pierre-auguste_renoir/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_pierre-auguste_renoir/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_pierre-auguste_renoir/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_pierre-auguste_renoir/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_pierre-auguste_renoir/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_pixar_animation_studios/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_pixar_animation_studios/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_pixar_animation_studios/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_pixar_animation_studios/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_pixar_animation_studios/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_pixar_animation_studios/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_pixar_animation_studios/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_pixar_animation_studios/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_rembrandt/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_rembrandt/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_rembrandt/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_rembrandt/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_rembrandt/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_rembrandt/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_rembrandt/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_rembrandt/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_richard_dadd/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_richard_dadd/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_richard_dadd/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_richard_dadd/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_richard_dadd/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_richard_dadd/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_richard_dadd/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_richard_dadd/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_rossdraws/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_rossdraws/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_rossdraws/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_rossdraws/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_rossdraws/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_rossdraws/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_rossdraws/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_rossdraws/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_salvador_dali_/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_salvador_dali_/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_salvador_dali_/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_salvador_dali_/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_salvador_dali_/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_salvador_dali_/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_salvador_dali_/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_salvador_dali_/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_sam_does_arts/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_sam_does_arts/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_sam_does_arts/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_sam_does_arts/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_sam_does_arts/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_sam_does_arts/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_sam_does_arts/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_sam_does_arts/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_sandro_botticelli/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_sandro_botticelli/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_sandro_botticelli/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_sandro_botticelli/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_sandro_botticelli/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_sandro_botticelli/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_sandro_botticelli/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_sandro_botticelli/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_ted_nasmith/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_ted_nasmith/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_ted_nasmith/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_ted_nasmith/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_ted_nasmith/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_ted_nasmith/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_ted_nasmith/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_ted_nasmith/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_ten_hundred/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_ten_hundred/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_ten_hundred/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_ten_hundred/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_ten_hundred/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_ten_hundred/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_ten_hundred/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_ten_hundred/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_thomas_kinkade/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_thomas_kinkade/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_thomas_kinkade/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_thomas_kinkade/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_thomas_kinkade/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_thomas_kinkade/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_thomas_kinkade/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_thomas_kinkade/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_tivadar_csontva_ry_kosztka/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_tivadar_csontva_ry_kosztka/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_tivadar_csontva_ry_kosztka/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_tivadar_csontva_ry_kosztka/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_tivadar_csontva_ry_kosztka/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_tivadar_csontva_ry_kosztka/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_tivadar_csontva_ry_kosztka/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_tivadar_csontva_ry_kosztka/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_victo_ngai/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_victo_ngai/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_victo_ngai/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_victo_ngai/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_victo_ngai/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_victo_ngai/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_victo_ngai/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_victo_ngai/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_vincent_di_fate/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_vincent_di_fate/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_vincent_di_fate/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_vincent_di_fate/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_vincent_di_fate/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_vincent_di_fate/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_vincent_di_fate/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_vincent_di_fate/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_vincent_van_gogh/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_vincent_van_gogh/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_vincent_van_gogh/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_vincent_van_gogh/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_vincent_van_gogh/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_vincent_van_gogh/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_vincent_van_gogh/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_vincent_van_gogh/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_wes_anderson/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_wes_anderson/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_wes_anderson/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_wes_anderson/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_wes_anderson/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_wes_anderson/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_wes_anderson/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_wes_anderson/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_wlop/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_wlop/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_wlop/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_wlop/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_wlop/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_wlop/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_wlop/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_wlop/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_yoshitaka_amano/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_yoshitaka_amano/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_yoshitaka_amano/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_yoshitaka_amano/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/artist/by_yoshitaka_amano/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_yoshitaka_amano/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/artist/by_yoshitaka_amano/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_yoshitaka_amano/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/aerial_view/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/aerial_view/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/aerial_view/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/aerial_view/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/aerial_view/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/aerial_view/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/aerial_view/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/aerial_view/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/canon50/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/canon50/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/canon50/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/canon50/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/canon50/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/canon50/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/canon50/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/canon50/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/cinematic/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/cinematic/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/cinematic/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/cinematic/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/cinematic/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/cinematic/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/cinematic/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/cinematic/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/close-up/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/close-up/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/close-up/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/close-up/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/close-up/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/close-up/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/close-up/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/close-up/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/color_grading/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/color_grading/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/color_grading/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/color_grading/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/color_grading/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/color_grading/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/color_grading/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/color_grading/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/dramatic/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/dramatic/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/dramatic/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/dramatic/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/dramatic/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/dramatic/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/dramatic/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/dramatic/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/film_grain/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/film_grain/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/film_grain/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/film_grain/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/film_grain/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/film_grain/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/film_grain/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/film_grain/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/fisheye_lens/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/fisheye_lens/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/fisheye_lens/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/fisheye_lens/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/fisheye_lens/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/fisheye_lens/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/fisheye_lens/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/fisheye_lens/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/glamor_shot/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/glamor_shot/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/glamor_shot/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/glamor_shot/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/glamor_shot/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/glamor_shot/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/glamor_shot/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/glamor_shot/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/golden_hour/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/golden_hour/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/golden_hour/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/golden_hour/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/golden_hour/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/golden_hour/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/golden_hour/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/golden_hour/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/hd/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/hd/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/hd/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/hd/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/hd/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/hd/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/hd/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/hd/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/landscape/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/landscape/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/landscape/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/landscape/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/landscape/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/landscape/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/landscape/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/landscape/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/lens_flare/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/lens_flare/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/lens_flare/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/lens_flare/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/lens_flare/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/lens_flare/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/lens_flare/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/lens_flare/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/macro/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/macro/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/macro/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/macro/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/macro/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/macro/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/macro/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/macro/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/photoshoot/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/photoshoot/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/photoshoot/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/photoshoot/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/photoshoot/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/photoshoot/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/photoshoot/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/photoshoot/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/polaroid/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/polaroid/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/polaroid/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/polaroid/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/polaroid/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/polaroid/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/polaroid/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/polaroid/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/portrait/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/portrait/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/portrait/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/portrait/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/portrait/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/portrait/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/portrait/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/portrait/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/studio_lighting/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/studio_lighting/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/studio_lighting/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/studio_lighting/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/studio_lighting/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/studio_lighting/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/studio_lighting/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/studio_lighting/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/vintage/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/vintage/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/vintage/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/vintage/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/vintage/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/vintage/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/vintage/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/vintage/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/war_photography/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/war_photography/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/war_photography/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/war_photography/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/war_photography/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/war_photography/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/war_photography/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/war_photography/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/white_balance/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/white_balance/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/white_balance/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/white_balance/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/white_balance/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/white_balance/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/white_balance/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/white_balance/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/wildlife_photography/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/wildlife_photography/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/wildlife_photography/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/wildlife_photography/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/camera/wildlife_photography/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/wildlife_photography/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/camera/wildlife_photography/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/camera/wildlife_photography/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/carving_and_etching/etching/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/etching/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/carving_and_etching/etching/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/etching/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/carving_and_etching/etching/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/etching/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/carving_and_etching/etching/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/etching/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/carving_and_etching/linocut/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/linocut/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/carving_and_etching/linocut/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/linocut/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/carving_and_etching/linocut/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/linocut/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/carving_and_etching/linocut/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/linocut/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/carving_and_etching/paper-mache/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/paper-mache/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/carving_and_etching/paper-mache/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/paper-mache/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/carving_and_etching/paper-mache/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/paper-mache/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/carving_and_etching/paper-mache/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/paper-mache/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/carving_and_etching/paper_model/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/paper_model/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/carving_and_etching/paper_model/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/paper_model/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/carving_and_etching/paper_model/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/paper_model/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/carving_and_etching/paper_model/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/paper_model/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/carving_and_etching/papercutting/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/papercutting/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/carving_and_etching/papercutting/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/papercutting/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/carving_and_etching/papercutting/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/papercutting/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/carving_and_etching/papercutting/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/papercutting/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/carving_and_etching/pyrography/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/pyrography/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/carving_and_etching/pyrography/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/pyrography/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/carving_and_etching/pyrography/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/pyrography/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/carving_and_etching/pyrography/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/pyrography/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/carving_and_etching/wood-carving/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/wood-carving/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/carving_and_etching/wood-carving/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/wood-carving/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/carving_and_etching/wood-carving/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/wood-carving/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/carving_and_etching/wood-carving/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/wood-carving/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_rendering/3d_render/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/3d_render/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_rendering/3d_render/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/3d_render/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_rendering/3d_render/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/3d_render/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_rendering/3d_render/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/3d_render/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_rendering/corona_render/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/corona_render/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_rendering/corona_render/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/corona_render/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_rendering/corona_render/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/corona_render/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_rendering/corona_render/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/corona_render/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_rendering/creature_design/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/creature_design/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_rendering/creature_design/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/creature_design/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_rendering/creature_design/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/creature_design/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_rendering/creature_design/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/creature_design/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_rendering/cycles_render/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/cycles_render/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_rendering/cycles_render/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/cycles_render/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_rendering/cycles_render/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/cycles_render/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_rendering/cycles_render/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/cycles_render/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_rendering/detailed_render/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/detailed_render/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_rendering/detailed_render/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/detailed_render/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_rendering/detailed_render/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/detailed_render/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_rendering/detailed_render/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/detailed_render/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_rendering/environment_design/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/environment_design/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_rendering/environment_design/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/environment_design/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_rendering/environment_design/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/environment_design/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_rendering/environment_design/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/environment_design/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_rendering/glass_caustics/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/glass_caustics/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_rendering/glass_caustics/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/glass_caustics/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_rendering/glass_caustics/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/glass_caustics/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_rendering/glass_caustics/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/glass_caustics/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_rendering/global_illumination/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/global_illumination/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_rendering/global_illumination/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/global_illumination/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_rendering/global_illumination/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/global_illumination/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_rendering/global_illumination/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/global_illumination/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_rendering/intricate_environment/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/intricate_environment/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_rendering/intricate_environment/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/intricate_environment/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_rendering/intricate_environment/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/intricate_environment/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_rendering/intricate_environment/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/intricate_environment/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_rendering/lsd_render/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/lsd_render/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_rendering/lsd_render/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/lsd_render/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_rendering/lsd_render/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/lsd_render/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_rendering/lsd_render/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/lsd_render/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_rendering/octane_render/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/octane_render/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_rendering/octane_render/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/octane_render/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_rendering/octane_render/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/octane_render/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_rendering/octane_render/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/octane_render/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_rendering/pbr/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/pbr/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_rendering/pbr/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/pbr/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_rendering/pbr/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/pbr/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_rendering/pbr/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/pbr/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_rendering/subsurface_scattering/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/subsurface_scattering/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_rendering/subsurface_scattering/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/subsurface_scattering/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_rendering/subsurface_scattering/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/subsurface_scattering/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_rendering/subsurface_scattering/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/subsurface_scattering/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_software/3d_model/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/3d_model/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_software/3d_model/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/3d_model/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_software/3d_model/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/3d_model/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_software/3d_model/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/3d_model/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_software/3d_sculpt/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/3d_sculpt/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_software/3d_sculpt/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/3d_sculpt/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_software/3d_sculpt/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/3d_sculpt/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_software/3d_sculpt/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/3d_sculpt/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_software/3ds_max_model/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/3ds_max_model/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_software/3ds_max_model/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/3ds_max_model/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_software/3ds_max_model/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/3ds_max_model/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_software/3ds_max_model/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/3ds_max_model/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_software/blender_model/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/blender_model/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_software/blender_model/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/blender_model/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_software/blender_model/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/blender_model/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_software/blender_model/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/blender_model/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_software/cinema4d_model/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/cinema4d_model/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_software/cinema4d_model/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/cinema4d_model/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_software/cinema4d_model/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/cinema4d_model/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_software/cinema4d_model/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/cinema4d_model/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_software/maya_model/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/maya_model/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_software/maya_model/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/maya_model/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_software/maya_model/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/maya_model/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_software/maya_model/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/maya_model/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_software/unreal_engine/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/unreal_engine/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_software/unreal_engine/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/unreal_engine/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_software/unreal_engine/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/unreal_engine/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_software/unreal_engine/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/unreal_engine/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_software/zbrush_sculpt/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/zbrush_sculpt/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_software/zbrush_sculpt/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/zbrush_sculpt/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/cgi_software/zbrush_sculpt/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/zbrush_sculpt/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/cgi_software/zbrush_sculpt/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/zbrush_sculpt/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/color/beautiful_lighting/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/beautiful_lighting/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/color/beautiful_lighting/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/color/beautiful_lighting/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/color/beautiful_lighting/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/beautiful_lighting/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/color/beautiful_lighting/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/color/beautiful_lighting/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/color/cold_color_palette/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/cold_color_palette/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/color/cold_color_palette/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/color/cold_color_palette/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/color/cold_color_palette/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/cold_color_palette/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/color/cold_color_palette/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/color/cold_color_palette/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/color/colorful/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/colorful/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/color/colorful/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/color/colorful/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/color/colorful/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/colorful/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/color/colorful/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/color/colorful/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/color/dynamic_lighting/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/dynamic_lighting/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/color/dynamic_lighting/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/color/dynamic_lighting/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/color/dynamic_lighting/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/dynamic_lighting/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/color/dynamic_lighting/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/color/dynamic_lighting/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/color/electric_colors/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/electric_colors/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/color/electric_colors/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/color/electric_colors/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/color/electric_colors/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/electric_colors/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/color/electric_colors/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/color/electric_colors/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/color/infrared/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/infrared/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/color/infrared/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/color/infrared/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/color/infrared/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/infrared/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/color/infrared/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/color/infrared/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/color/neon/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/neon/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/color/neon/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/color/neon/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/color/neon/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/neon/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/color/neon/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/color/neon/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/color/pastel/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/pastel/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/color/pastel/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/color/pastel/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/color/pastel/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/pastel/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/color/pastel/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/color/pastel/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/color/synthwave/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/synthwave/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/color/synthwave/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/color/synthwave/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/color/synthwave/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/synthwave/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/color/synthwave/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/color/synthwave/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/color/warm_color_palette/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/warm_color_palette/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/color/warm_color_palette/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/color/warm_color_palette/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/color/warm_color_palette/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/warm_color_palette/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/color/warm_color_palette/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/color/warm_color_palette/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/drawing_style/cel_shading/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/cel_shading/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/drawing_style/cel_shading/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/cel_shading/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/drawing_style/cel_shading/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/cel_shading/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/drawing_style/cel_shading/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/cel_shading/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/drawing_style/children_s_drawing/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/children_s_drawing/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/drawing_style/children_s_drawing/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/children_s_drawing/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/drawing_style/children_s_drawing/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/children_s_drawing/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/drawing_style/children_s_drawing/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/children_s_drawing/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/drawing_style/crosshatch/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/crosshatch/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/drawing_style/crosshatch/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/crosshatch/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/drawing_style/crosshatch/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/crosshatch/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/drawing_style/crosshatch/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/crosshatch/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/drawing_style/detailed_and_intricate/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/detailed_and_intricate/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/drawing_style/detailed_and_intricate/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/detailed_and_intricate/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/drawing_style/detailed_and_intricate/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/detailed_and_intricate/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/drawing_style/detailed_and_intricate/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/detailed_and_intricate/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/drawing_style/doodle/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/doodle/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/drawing_style/doodle/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/doodle/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/drawing_style/doodle/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/doodle/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/drawing_style/doodle/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/doodle/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/drawing_style/dot_art/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/dot_art/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/drawing_style/dot_art/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/dot_art/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/drawing_style/dot_art/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/dot_art/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/drawing_style/dot_art/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/dot_art/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/drawing_style/line_art/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/line_art/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/drawing_style/line_art/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/line_art/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/drawing_style/line_art/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/line_art/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/drawing_style/line_art/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/line_art/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/drawing_style/sketch/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/sketch/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/drawing_style/sketch/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/sketch/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/drawing_style/sketch/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/sketch/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/drawing_style/sketch/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/sketch/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/angry/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/angry/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/angry/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/angry/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/angry/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/angry/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/angry/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/angry/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/bitter/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/bitter/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/bitter/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/bitter/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/bitter/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/bitter/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/bitter/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/bitter/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/disgusted/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/disgusted/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/disgusted/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/disgusted/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/disgusted/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/disgusted/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/disgusted/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/disgusted/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/embarrassed/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/embarrassed/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/embarrassed/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/embarrassed/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/embarrassed/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/embarrassed/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/embarrassed/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/embarrassed/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/evil/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/evil/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/evil/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/evil/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/evil/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/evil/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/evil/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/evil/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/excited/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/excited/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/excited/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/excited/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/excited/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/excited/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/excited/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/excited/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/fear/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/fear/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/fear/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/fear/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/fear/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/fear/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/fear/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/fear/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/funny/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/funny/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/funny/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/funny/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/funny/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/funny/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/funny/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/funny/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/happy/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/happy/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/happy/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/happy/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/happy/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/happy/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/happy/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/happy/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/horrifying/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/horrifying/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/horrifying/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/horrifying/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/horrifying/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/horrifying/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/horrifying/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/horrifying/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/lonely/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/lonely/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/lonely/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/lonely/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/lonely/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/lonely/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/lonely/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/lonely/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/melancholic/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/melancholic/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/melancholic/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/melancholic/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/melancholic/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/melancholic/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/melancholic/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/melancholic/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/sad/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/sad/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/sad/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/sad/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/sad/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/sad/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/sad/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/sad/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/serene/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/serene/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/serene/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/serene/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/serene/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/serene/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/serene/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/serene/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/surprised/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/surprised/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/surprised/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/surprised/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/emotions/surprised/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/surprised/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/emotions/surprised/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/emotions/surprised/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/pen/chalk/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/pen/chalk/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/pen/chalk/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/pen/chalk/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/pen/chalk/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/pen/chalk/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/pen/chalk/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/pen/chalk/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/pen/colored_pencil/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/pen/colored_pencil/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/pen/colored_pencil/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/pen/colored_pencil/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/pen/colored_pencil/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/pen/colored_pencil/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/pen/colored_pencil/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/pen/colored_pencil/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/pen/graphite/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/pen/graphite/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/pen/graphite/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/pen/graphite/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/pen/graphite/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/pen/graphite/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/pen/graphite/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/pen/graphite/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/pen/ink/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/pen/ink/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/pen/ink/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/pen/ink/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/pen/ink/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/pen/ink/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/pen/ink/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/pen/ink/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/pen/oil_paint/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/pen/oil_paint/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/pen/oil_paint/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/pen/oil_paint/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/pen/oil_paint/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/pen/oil_paint/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/pen/oil_paint/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/pen/oil_paint/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/pen/pastel_art/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/pen/pastel_art/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/pen/pastel_art/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/pen/pastel_art/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/pen/pastel_art/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/pen/pastel_art/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/pen/pastel_art/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/pen/pastel_art/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/16-bit/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/16-bit/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/16-bit/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/16-bit/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/16-bit/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/16-bit/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/16-bit/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/16-bit/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/2d/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/2d/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/2d/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/2d/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/2d/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/2d/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/2d/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/2d/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/8-bit/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/8-bit/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/8-bit/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/8-bit/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/8-bit/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/8-bit/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/8-bit/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/8-bit/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/anaglyph/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/anaglyph/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/anaglyph/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/anaglyph/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/anaglyph/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/anaglyph/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/anaglyph/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/anaglyph/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/anime/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/anime/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/anime/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/anime/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/anime/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/anime/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/anime/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/anime/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/art_nouveau/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/art_nouveau/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/art_nouveau/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/art_nouveau/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/art_nouveau/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/art_nouveau/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/art_nouveau/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/art_nouveau/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/baroque/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/baroque/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/baroque/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/baroque/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/baroque/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/baroque/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/baroque/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/baroque/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/bauhaus/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/bauhaus/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/bauhaus/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/bauhaus/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/bauhaus/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/bauhaus/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/bauhaus/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/bauhaus/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/cartoon/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/cartoon/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/cartoon/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/cartoon/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/cartoon/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/cartoon/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/cartoon/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/cartoon/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/cgi/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/cgi/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/cgi/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/cgi/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/cgi/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/cgi/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/cgi/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/cgi/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/comic_book/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/comic_book/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/comic_book/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/comic_book/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/comic_book/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/comic_book/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/comic_book/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/comic_book/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/concept_art/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/concept_art/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/concept_art/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/concept_art/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/concept_art/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/concept_art/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/concept_art/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/concept_art/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/constructivist/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/constructivist/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/constructivist/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/constructivist/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/constructivist/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/constructivist/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/constructivist/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/constructivist/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/cubist/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/cubist/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/cubist/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/cubist/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/cubist/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/cubist/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/cubist/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/cubist/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/dadaist/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/dadaist/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/dadaist/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/dadaist/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/dadaist/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/dadaist/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/dadaist/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/dadaist/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/digital_art/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/digital_art/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/digital_art/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/digital_art/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/digital_art/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/digital_art/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/digital_art/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/digital_art/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/expressionist/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/expressionist/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/expressionist/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/expressionist/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/expressionist/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/expressionist/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/expressionist/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/expressionist/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/fantasy/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/fantasy/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/fantasy/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/fantasy/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/fantasy/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/fantasy/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/fantasy/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/fantasy/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/fauvist/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/fauvist/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/fauvist/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/fauvist/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/fauvist/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/fauvist/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/fauvist/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/fauvist/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/figurative/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/figurative/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/figurative/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/figurative/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/figurative/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/figurative/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/figurative/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/figurative/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/geometric/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/geometric/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/geometric/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/geometric/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/geometric/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/geometric/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/geometric/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/geometric/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/graphic_novel/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/graphic_novel/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/graphic_novel/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/graphic_novel/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/graphic_novel/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/graphic_novel/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/graphic_novel/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/graphic_novel/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/hard_edge_painting/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/hard_edge_painting/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/hard_edge_painting/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/hard_edge_painting/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/hard_edge_painting/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/hard_edge_painting/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/hard_edge_painting/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/hard_edge_painting/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/hydrodipped/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/hydrodipped/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/hydrodipped/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/hydrodipped/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/hydrodipped/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/hydrodipped/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/hydrodipped/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/hydrodipped/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/impressionistic/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/impressionistic/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/impressionistic/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/impressionistic/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/impressionistic/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/impressionistic/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/impressionistic/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/impressionistic/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/lithography/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/lithography/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/lithography/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/lithography/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/lithography/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/lithography/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/lithography/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/lithography/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/manga/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/manga/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/manga/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/manga/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/manga/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/manga/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/manga/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/manga/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/minimalist/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/minimalist/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/minimalist/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/minimalist/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/minimalist/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/minimalist/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/minimalist/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/minimalist/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/modern_art/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/modern_art/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/modern_art/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/modern_art/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/modern_art/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/modern_art/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/modern_art/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/modern_art/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/mosaic/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/mosaic/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/mosaic/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/mosaic/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/mosaic/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/mosaic/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/mosaic/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/mosaic/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/mural/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/mural/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/mural/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/mural/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/mural/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/mural/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/mural/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/mural/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/naive/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/naive/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/naive/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/naive/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/naive/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/naive/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/naive/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/naive/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/neoclassical/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/neoclassical/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/neoclassical/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/neoclassical/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/neoclassical/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/neoclassical/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/neoclassical/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/neoclassical/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/photo/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/photo/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/photo/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/photo/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/photo/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/photo/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/photo/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/photo/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/realistic/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/realistic/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/realistic/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/realistic/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/realistic/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/realistic/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/realistic/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/realistic/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/rococo/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/rococo/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/rococo/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/rococo/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/rococo/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/rococo/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/rococo/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/rococo/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/romantic/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/romantic/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/romantic/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/romantic/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/romantic/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/romantic/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/romantic/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/romantic/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/street_art/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/street_art/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/street_art/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/street_art/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/street_art/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/street_art/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/street_art/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/street_art/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/stuckist/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/stuckist/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/stuckist/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/stuckist/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/stuckist/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/stuckist/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/stuckist/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/stuckist/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/surrealist/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/surrealist/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/surrealist/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/surrealist/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/surrealist/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/surrealist/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/surrealist/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/surrealist/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/symbolist/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/symbolist/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/symbolist/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/symbolist/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/symbolist/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/symbolist/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/symbolist/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/symbolist/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/visual_novel/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/visual_novel/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/visual_novel/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/visual_novel/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/visual_novel/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/visual_novel/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/visual_novel/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/visual_novel/portrait-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/watercolor/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/watercolor/landscape-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/watercolor/landscape-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/watercolor/landscape-0.jpg
diff --git a/ui/media/modifier-thumbnails/visual_style/watercolor/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/watercolor/portrait-0.jpg
similarity index 100%
rename from ui/media/modifier-thumbnails/visual_style/watercolor/portrait-0.jpg
rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/watercolor/portrait-0.jpg
diff --git a/ui/frontend/assets/modifiers.json b/ui/frontend/assets/modifiers.json
new file mode 100644
index 00000000..325e724e
--- /dev/null
+++ b/ui/frontend/assets/modifiers.json
@@ -0,0 +1,2717 @@
+[
+ {
+ "category": "Drawing Style",
+ "modifiers": [
+ {
+ "modifier": "Cel Shading",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "drawing_style/cel_shading/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "drawing_style/cel_shading/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Children's Drawing",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "drawing_style/children_s_drawing/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "drawing_style/children_s_drawing/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Crosshatch",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "drawing_style/crosshatch/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "drawing_style/crosshatch/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Detailed and Intricate",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "drawing_style/detailed_and_intricate/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "drawing_style/detailed_and_intricate/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Doodle",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "drawing_style/doodle/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "drawing_style/doodle/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Dot Art",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "drawing_style/dot_art/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "drawing_style/dot_art/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Line Art",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "drawing_style/line_art/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "drawing_style/line_art/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Sketch",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "drawing_style/sketch/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "drawing_style/sketch/landscape-0.jpg"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "category": "Visual Style",
+ "modifiers": [
+ {
+ "modifier": "2D",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/2d/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/2d/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "8-Bit",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/8-bit/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/8-bit/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "16-Bit",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/16-bit/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/16-bit/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Anaglyph",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/anaglyph/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/anaglyph/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Anime",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/anime/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/anime/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Art Nouveau",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/art_nouveau/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/art_nouveau/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Bauhaus",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/bauhaus/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/bauhaus/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Baroque",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/baroque/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/baroque/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "CGI",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/cgi/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/cgi/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Cartoon",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/cartoon/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/cartoon/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Comic Book",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/comic_book/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/comic_book/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Concept Art",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/concept_art/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/concept_art/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Constructivist",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/constructivist/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/constructivist/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Cubist",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/cubist/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/cubist/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Digital Art",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/digital_art/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/digital_art/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Dadaist",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/dadaist/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/dadaist/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Expressionist",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/expressionist/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/expressionist/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Fantasy",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/fantasy/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/fantasy/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Fauvist",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/fauvist/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/fauvist/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Figurative",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/figurative/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/figurative/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Graphic Novel",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/graphic_novel/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/graphic_novel/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Geometric",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/geometric/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/geometric/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Hard Edge Painting",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/hard_edge_painting/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/hard_edge_painting/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Hydrodipped",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/hydrodipped/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/hydrodipped/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Impressionistic",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/impressionistic/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/impressionistic/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Lithography",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/lithography/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/lithography/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Manga",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/manga/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/manga/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Minimalist",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/minimalist/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/minimalist/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Modern Art",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/modern_art/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/modern_art/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Mosaic",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/mosaic/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/mosaic/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Mural",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/mural/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/mural/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Naive",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/naive/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/naive/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Neoclassical",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/neoclassical/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/neoclassical/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Photo",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/photo/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/photo/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Realistic",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/realistic/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/realistic/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Rococo",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/rococo/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/rococo/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Romantic",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/romantic/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/romantic/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Street Art",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/street_art/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/street_art/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Symbolist",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/symbolist/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/symbolist/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Stuckist",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/stuckist/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/stuckist/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Surrealist",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/surrealist/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/surrealist/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Visual Novel",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/visual_novel/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/visual_novel/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Watercolor",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "visual_style/watercolor/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "visual_style/watercolor/landscape-0.jpg"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "category": "Pen",
+ "modifiers": [
+ {
+ "modifier": "Chalk",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "pen/chalk/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "pen/chalk/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Colored Pencil",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "pen/colored_pencil/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "pen/colored_pencil/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Graphite",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "pen/graphite/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "pen/graphite/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Ink",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "pen/ink/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "pen/ink/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Oil Paint",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "pen/oil_paint/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "pen/oil_paint/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Pastel Art",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "pen/pastel_art/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "pen/pastel_art/landscape-0.jpg"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "category": "Carving and Etching",
+ "modifiers": [
+ {
+ "modifier": "etching",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "carving_and_etching/etching/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "carving_and_etching/etching/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Linocut",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "carving_and_etching/linocut/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "carving_and_etching/linocut/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Paper Model",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "carving_and_etching/paper_model/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "carving_and_etching/paper_model/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Paper-Mache",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "carving_and_etching/paper-mache/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "carving_and_etching/paper-mache/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Papercutting",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "carving_and_etching/papercutting/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "carving_and_etching/papercutting/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Pyrography",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "carving_and_etching/pyrography/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "carving_and_etching/pyrography/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Wood-Carving",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "carving_and_etching/wood-carving/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "carving_and_etching/wood-carving/landscape-0.jpg"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "category": "Camera",
+ "modifiers": [
+ {
+ "modifier": "Aerial View",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "camera/aerial_view/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "camera/aerial_view/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Canon50",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "camera/canon50/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "camera/canon50/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Cinematic",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "camera/cinematic/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "camera/cinematic/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Close-up",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "camera/close-up/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "camera/close-up/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Color Grading",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "camera/color_grading/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "camera/color_grading/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Dramatic",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "camera/dramatic/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "camera/dramatic/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Film Grain",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "camera/film_grain/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "camera/film_grain/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Fisheye Lens",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "camera/fisheye_lens/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "camera/fisheye_lens/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Glamor Shot",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "camera/glamor_shot/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "camera/glamor_shot/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Golden Hour",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "camera/golden_hour/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "camera/golden_hour/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "HD",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "camera/hd/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "camera/hd/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Landscape",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "camera/landscape/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "camera/landscape/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Lens Flare",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "camera/lens_flare/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "camera/lens_flare/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Macro",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "camera/macro/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "camera/macro/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Polaroid",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "camera/polaroid/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "camera/polaroid/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Photoshoot",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "camera/photoshoot/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "camera/photoshoot/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Portrait",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "camera/portrait/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "camera/portrait/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Studio Lighting",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "camera/studio_lighting/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "camera/studio_lighting/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Vintage",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "camera/vintage/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "camera/vintage/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "War Photography",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "camera/war_photography/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "camera/war_photography/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "White Balance",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "camera/white_balance/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "camera/white_balance/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Wildlife Photography",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "camera/wildlife_photography/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "camera/wildlife_photography/landscape-0.jpg"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "category": "Color",
+ "modifiers": [
+ {
+ "modifier": "Beautiful Lighting",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "color/beautiful_lighting/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "color/beautiful_lighting/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Cold Color Palette",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "color/cold_color_palette/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "color/cold_color_palette/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Colorful",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "color/colorful/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "color/colorful/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Dynamic Lighting",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "color/dynamic_lighting/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "color/dynamic_lighting/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Electric Colors",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "color/electric_colors/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "color/electric_colors/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Infrared",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "color/infrared/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "color/infrared/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Pastel",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "color/pastel/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "color/pastel/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Neon",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "color/neon/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "color/neon/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Synthwave",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "color/synthwave/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "color/synthwave/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Warm Color Palette",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "color/warm_color_palette/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "color/warm_color_palette/landscape-0.jpg"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "category": "Emotions",
+ "modifiers": [
+ {
+ "modifier": "Angry",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "emotions/angry/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "emotions/angry/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Bitter",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "emotions/bitter/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "emotions/bitter/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Disgusted",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "emotions/disgusted/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "emotions/disgusted/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Embarrassed",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "emotions/embarrassed/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "emotions/embarrassed/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Evil",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "emotions/evil/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "emotions/evil/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Excited",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "emotions/excited/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "emotions/excited/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Fear",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "emotions/fear/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "emotions/fear/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Funny",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "emotions/funny/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "emotions/funny/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Happy",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "emotions/happy/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "emotions/happy/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Horrifying",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "emotions/horrifying/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "emotions/horrifying/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Lonely",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "emotions/lonely/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "emotions/lonely/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Sad",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "emotions/sad/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "emotions/sad/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Serene",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "emotions/serene/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "emotions/serene/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Surprised",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "emotions/surprised/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "emotions/surprised/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Melancholic",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "emotions/melancholic/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "emotions/melancholic/landscape-0.jpg"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "category": "Artist",
+ "modifiers": [
+ {
+ "modifier": "Artstation",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/artstation/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/artstation/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Agnes Lawrence Pelton",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_agnes_lawrence_pelton/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_agnes_lawrence_pelton/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Akihito Yoshida",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_akihito_yoshida/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_akihito_yoshida/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Alex Grey",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_alex_grey/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_alex_grey/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Alexander Jansson",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_alexander_jansson/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_alexander_jansson/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Alphonse Mucha",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_alphonse_mucha/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_alphonse_mucha/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Andy Warhol",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_andy_warhol/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_andy_warhol/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Artgerm",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_artgerm/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_artgerm/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Asaf Hanuka",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_asaf_hanuka/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_asaf_hanuka/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Aubrey Beardsley",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_aubrey_beardsley/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_aubrey_beardsley/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Banksy",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_banksy/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_banksy/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Beeple",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_beeple/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_beeple/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Ben Enwonwu",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_ben_enwonwu/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_ben_enwonwu/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Bob Eggleton",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_bob_eggleton/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_bob_eggleton/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Caravaggio Michelangelo Merisi",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_caravaggio_michelangelo_merisi/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_caravaggio_michelangelo_merisi/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Caspar David Friedrich",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_caspar_david_friedrich/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_caspar_david_friedrich/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Chris Foss",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_chris_foss/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_chris_foss/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Claude Monet",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_claude_monet/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_claude_monet/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Dan Mumford",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_dan_mumford/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_dan_mumford/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by David Mann",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_david_mann/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_david_mann/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Diego Velázquez",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_diego_vela_zquez/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_diego_vela_zquez/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Disney Animation Studios",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_disney_animation_studios/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_disney_animation_studios/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Édouard Manet",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_e_douard_manet/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_e_douard_manet/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Esao Andrews",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_esao_andrews/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_esao_andrews/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Frida Kahlo",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_frida_kahlo/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_frida_kahlo/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Gediminas Pranckevicius",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_gediminas_pranckevicius/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_gediminas_pranckevicius/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Georgia O'Keeffe",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_georgia_o_keeffe/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_georgia_o_keeffe/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Greg Rutkowski",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_greg_rutkowski/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_greg_rutkowski/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Gustave Doré",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_gustave_dore_/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_gustave_dore_/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Gustave Klimt",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_gustave_klimt/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_gustave_klimt/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by H.R. Giger",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_h_r_giger/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_h_r_giger/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Hayao Miyazaki",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_hayao_miyazaki/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_hayao_miyazaki/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Henri Matisse",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_henri_matisse/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_henri_matisse/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by HP Lovecraft",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_hp_lovecraft/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_hp_lovecraft/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Ivan Shishkin",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_ivan_shishkin/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_ivan_shishkin/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Jack Kirby",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_jack_kirby/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_jack_kirby/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Jackson Pollock",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_jackson_pollock/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_jackson_pollock/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by James Jean",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_james_jean/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_james_jean/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Jim Burns",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_jim_burns/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_jim_burns/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Johannes Vermeer",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_johannes_vermeer/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_johannes_vermeer/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by John William Waterhouse",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_john_william_waterhouse/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_john_william_waterhouse/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Katsushika Hokusai",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_katsushika_hokusai/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_katsushika_hokusai/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Kim Tschang Yeul",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_kim_tschang_yeul/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_kim_tschang_yeul/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Ko Young Hoon",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_ko_young_hoon/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_ko_young_hoon/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Leonardo da Vinci",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_leonardo_da_vinci/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_leonardo_da_vinci/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Lisa Frank",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_lisa_frank/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_lisa_frank/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by M.C Escher",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_m_c_escher/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_m_c_escher/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Mahmoud Saïd",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_mahmoud_sai_d/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_mahmoud_sai_d/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Makoto Shinkai",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_makoto_shinkai/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_makoto_shinkai/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Marc Simonetti",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_marc_simonetti/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_marc_simonetti/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Mark Brooks",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_mark_brooks/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_mark_brooks/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Michelangelo",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_michelangelo/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_michelangelo/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Pablo Picasso",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_pablo_picasso/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_pablo_picasso/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Paul Klee",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_paul_klee/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_paul_klee/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Peter Mohrbacher",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_peter_mohrbacher/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_peter_mohrbacher/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Pierre-Auguste Renoir",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_pierre-auguste_renoir/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_pierre-auguste_renoir/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Pixar Animation Studios",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_pixar_animation_studios/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_pixar_animation_studios/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Rembrandt",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_rembrandt/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_rembrandt/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Richard Dadd",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_richard_dadd/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_richard_dadd/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Rossdraws",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_rossdraws/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_rossdraws/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Salvador Dalí",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_salvador_dali_/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_salvador_dali_/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Sam does Arts",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_sam_does_arts/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_sam_does_arts/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Sandro Botticelli",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_sandro_botticelli/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_sandro_botticelli/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Ted Nasmith",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_ted_nasmith/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_ted_nasmith/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Ten Hundred",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_ten_hundred/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_ten_hundred/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Thomas Kinkade",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_thomas_kinkade/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_thomas_kinkade/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Tivadar Csontváry Kosztka",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_tivadar_csontva_ry_kosztka/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_tivadar_csontva_ry_kosztka/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Victo Ngai",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_victo_ngai/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_victo_ngai/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Vincent di Fate",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_vincent_di_fate/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_vincent_di_fate/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Vincent van Gogh",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_vincent_van_gogh/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_vincent_van_gogh/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Wes Anderson",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_wes_anderson/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_wes_anderson/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by wlop",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_wlop/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_wlop/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "by Yoshitaka Amano",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "artist/by_yoshitaka_amano/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "artist/by_yoshitaka_amano/landscape-0.jpg"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "category": "CGI Software",
+ "modifiers": [
+ {
+ "modifier": "3D Model",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "cgi_software/3d_model/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "cgi_software/3d_model/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "3D Sculpt",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "cgi_software/3d_sculpt/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "cgi_software/3d_sculpt/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "3Ds Max Model",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "cgi_software/3ds_max_model/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "cgi_software/3ds_max_model/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Blender Model",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "cgi_software/blender_model/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "cgi_software/blender_model/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Cinema4d Model",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "cgi_software/cinema4d_model/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "cgi_software/cinema4d_model/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Maya Model",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "cgi_software/maya_model/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "cgi_software/maya_model/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Unreal Engine",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "cgi_software/unreal_engine/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "cgi_software/unreal_engine/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Zbrush Sculpt",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "cgi_software/zbrush_sculpt/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "cgi_software/zbrush_sculpt/landscape-0.jpg"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "category": "CGI Rendering",
+ "modifiers": [
+ {
+ "modifier": "3D Render",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "cgi_rendering/3d_render/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "cgi_rendering/3d_render/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Corona Render",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "cgi_rendering/corona_render/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "cgi_rendering/corona_render/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Creature Design",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "cgi_rendering/creature_design/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "cgi_rendering/creature_design/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Cycles Render",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "cgi_rendering/cycles_render/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "cgi_rendering/cycles_render/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Detailed Render",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "cgi_rendering/detailed_render/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "cgi_rendering/detailed_render/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Environment Design",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "cgi_rendering/environment_design/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "cgi_rendering/environment_design/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Intricate Environment",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "cgi_rendering/intricate_environment/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "cgi_rendering/intricate_environment/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "LSD Render",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "cgi_rendering/lsd_render/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "cgi_rendering/lsd_render/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Octane Render",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "cgi_rendering/octane_render/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "cgi_rendering/octane_render/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "PBR",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "cgi_rendering/pbr/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "cgi_rendering/pbr/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Glass Caustics",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "cgi_rendering/glass_caustics/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "cgi_rendering/glass_caustics/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Global Illumination",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "cgi_rendering/global_illumination/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "cgi_rendering/global_illumination/landscape-0.jpg"
+ }
+ ]
+ },
+ {
+ "modifier": "Subsurface Scattering",
+ "previews": [
+ {
+ "name": "portrait",
+ "path": "cgi_rendering/subsurface_scattering/portrait-0.jpg"
+ },
+ {
+ "name": "landscape",
+ "path": "cgi_rendering/subsurface_scattering/landscape-0.jpg"
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/ui/frontend/build_src/.eslintrc.cjs b/ui/frontend/build_src/.eslintrc.cjs
new file mode 100644
index 00000000..7193167b
--- /dev/null
+++ b/ui/frontend/build_src/.eslintrc.cjs
@@ -0,0 +1,87 @@
+const path = require("path");
+
+module.exports = {
+ env: {
+ browser: true,
+ es2021: true,
+ },
+ parser: "@typescript-eslint/parser",
+ parserOptions: {
+ ecmaVersion: "latest",
+ sourceType: "module",
+ ecmaFeatures: {
+ jsx: true,
+ },
+ tsconfigRootDir: __dirname,
+ },
+
+ plugins: ["react"],
+
+ extends: [
+ "prettier",
+ "plugin:react/recommended",
+ "standard-with-typescript",
+ "plugin:i18next/recommended",
+ "plugin:i18n-json/recommended",
+ ],
+ settings: {
+ react: {
+ version: "detect",
+ },
+ },
+ rules: {
+ // general things turned off for now
+ "no-debugger": "warn",
+ "eol-last": "off",
+ "comma-dangle": ["off", "always-multiline"],
+ "no-void": ["off"],
+ "array-callback-return": ["off"],
+ "spaced-comment": ["off"],
+ "padded-blocks": ["off"],
+ "no-multiple-empty-lines": ["off", { max: 2, maxEOF: 1 }],
+ quotes: ["off", "double"],
+ semi: ["off", "always"],
+ yoda: ["off"],
+ eqeqeq: ["off"],
+ "react/display-name": "warn",
+
+ // TS THINGS WE DONT WANT
+ "@typescript-eslint/explicit-function-return-type": "off",
+ "@typescript-eslint/ban-ts-comment": "off",
+
+ // these are things that fight with prettier
+ "@typescript-eslint/comma-dangle": "off",
+ "@typescript-eslint/space-before-function-paren": "off",
+ "@typescript-eslint/quotes": "off",
+ "@typescript-eslint/semi": "off",
+ "@typescript-eslint/brace-style": "off",
+ "@typescript-eslint/indent": "off",
+ "@typescript-eslint/member-delimiter-style": "off",
+
+ // TS WARNINGS WE WANT
+ "@typescript-eslint/no-unused-vars": "warn",
+ "@typescript-eslint/no-non-null-assertion": "warn",
+
+ // i18n stuff no string literal works but turned off for now
+ "i18next/no-literal-string": "off",
+ // still need to figure out how to get this to work
+ // it should error if we dont haev all the keys in the translation file
+ "i18n-json/identical-keys": [
+ "error",
+ {
+ filePath: {
+ "home.json/": path.resolve("./Translation/locales/en/home.json"),
+ },
+ },
+ ],
+ },
+ overrides: [
+ {
+ files: ["*.ts", "*.tsx"],
+ parserOptions: {
+ project: ["./tsconfig.json"], // Specify it only for TypeScript files
+ },
+ },
+ ],
+ // eslint-disable-next-line semi
+};
diff --git a/ui/frontend/build_src/.gitignore b/ui/frontend/build_src/.gitignore
new file mode 100644
index 00000000..ad930832
--- /dev/null
+++ b/ui/frontend/build_src/.gitignore
@@ -0,0 +1,18 @@
+# local ignores - We could move these to the global ignores,
+# but I think it makes sense to keep them here
+
+# env
+*.local
+
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+# installed dependencies
+node_modules
+
diff --git a/ui/frontend/build_src/index.html b/ui/frontend/build_src/index.html
new file mode 100644
index 00000000..7223622c
--- /dev/null
+++ b/ui/frontend/build_src/index.html
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+ Stable Diffusion UI
+
+
+
+
+
+
+
diff --git a/ui/frontend/build_src/package-lock.json b/ui/frontend/build_src/package-lock.json
new file mode 100644
index 00000000..bfa45c4f
--- /dev/null
+++ b/ui/frontend/build_src/package-lock.json
@@ -0,0 +1,8225 @@
+{
+ "name": "react-ts",
+ "version": "0.0.0",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "react-ts",
+ "version": "0.0.0",
+ "dependencies": {
+ "@headlessui/react": "^1.7.2",
+ "@tanstack/react-location": "^3.7.4",
+ "@tanstack/react-query": "^4.2.3",
+ "@tanstack/react-query-devtools": "^4.2.3",
+ "@vanilla-extract/css": "^1.9.0",
+ "@vanilla-extract/css-utils": "^0.1.2",
+ "@vanilla-extract/recipes": "^0.2.5",
+ "@vanilla-extract/vite-plugin": "^3.5.0",
+ "i18next": "^21.9.2",
+ "immer": "^9.0.15",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "react-i18next": "^11.18.6",
+ "uuid": "^9.0.0",
+ "zustand": "^4.1.1"
+ },
+ "devDependencies": {
+ "@types/node": "^18.7.18",
+ "@types/react": "^18.0.17",
+ "@types/react-dom": "^18.0.6",
+ "@types/uuid": "^8.3.4",
+ "@typescript-eslint/eslint-plugin": "^5.37.0",
+ "@typescript-eslint/parser": "^5.37.0",
+ "@vitejs/plugin-react": "^2.0.1",
+ "eslint": "^8.23.1",
+ "eslint-config-prettier": "^8.5.0",
+ "eslint-config-standard-with-typescript": "^23.0.0",
+ "eslint-plugin-i18n-json": "^4.0.0",
+ "eslint-plugin-i18next": "^6.0.0-4",
+ "eslint-plugin-import": "^2.26.0",
+ "eslint-plugin-n": "^15.2.5",
+ "eslint-plugin-promise": "^6.0.1",
+ "eslint-plugin-react": "^7.31.8",
+ "prettier": "^2.7.1",
+ "typescript": "^4.8.3",
+ "vite": "^3.0.7",
+ "vite-plugin-eslint": "^1.8.1"
+ }
+ },
+ "node_modules/@ampproject/remapping": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
+ "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.1.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
+ "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/highlight": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.0.tgz",
+ "integrity": "sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.0.tgz",
+ "integrity": "sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ==",
+ "dev": true,
+ "dependencies": {
+ "@ampproject/remapping": "^2.1.0",
+ "@babel/code-frame": "^7.18.6",
+ "@babel/generator": "^7.19.0",
+ "@babel/helper-compilation-targets": "^7.19.0",
+ "@babel/helper-module-transforms": "^7.19.0",
+ "@babel/helpers": "^7.19.0",
+ "@babel/parser": "^7.19.0",
+ "@babel/template": "^7.18.10",
+ "@babel/traverse": "^7.19.0",
+ "@babel/types": "^7.19.0",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.1",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz",
+ "integrity": "sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.19.0",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "jsesc": "^2.5.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
+ "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/helper-annotate-as-pure": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz",
+ "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz",
+ "integrity": "sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.19.0",
+ "@babel/helper-validator-option": "^7.18.6",
+ "browserslist": "^4.20.2",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-environment-visitor": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz",
+ "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-function-name": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz",
+ "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.18.10",
+ "@babel/types": "^7.19.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-hoist-variables": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
+ "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
+ "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz",
+ "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-environment-visitor": "^7.18.9",
+ "@babel/helper-module-imports": "^7.18.6",
+ "@babel/helper-simple-access": "^7.18.6",
+ "@babel/helper-split-export-declaration": "^7.18.6",
+ "@babel/helper-validator-identifier": "^7.18.6",
+ "@babel/template": "^7.18.10",
+ "@babel/traverse": "^7.19.0",
+ "@babel/types": "^7.19.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz",
+ "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-simple-access": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
+ "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-split-export-declaration": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
+ "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.18.10",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz",
+ "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz",
+ "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz",
+ "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.18.10",
+ "@babel/traverse": "^7.19.0",
+ "@babel/types": "^7.19.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
+ "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.18.6",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.0.tgz",
+ "integrity": "sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw==",
+ "dev": true,
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-jsx": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz",
+ "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz",
+ "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.18.6",
+ "@babel/helper-module-imports": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.19.0",
+ "@babel/plugin-syntax-jsx": "^7.18.6",
+ "@babel/types": "^7.19.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-development": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz",
+ "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/plugin-transform-react-jsx": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-self": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz",
+ "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-source": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.18.6.tgz",
+ "integrity": "sha512-utZmlASneDfdaMh0m/WausbjUjEdGrQJz0vFK93d7wD3xf5wBtX219+q6IlCNZeguIcxS2f/CvLZrlLSvSHQXw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz",
+ "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==",
+ "dependencies": {
+ "regenerator-runtime": "^0.13.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.18.10",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz",
+ "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.18.6",
+ "@babel/parser": "^7.18.10",
+ "@babel/types": "^7.18.10"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.0.tgz",
+ "integrity": "sha512-4pKpFRDh+utd2mbRC8JLnlsMUii3PMHjpL6a0SZ4NMZy7YFP9aXORxEhdMVOc9CpWtDF09IkciQLEhK7Ml7gRA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.18.6",
+ "@babel/generator": "^7.19.0",
+ "@babel/helper-environment-visitor": "^7.18.9",
+ "@babel/helper-function-name": "^7.19.0",
+ "@babel/helper-hoist-variables": "^7.18.6",
+ "@babel/helper-split-export-declaration": "^7.18.6",
+ "@babel/parser": "^7.19.0",
+ "@babel/types": "^7.19.0",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz",
+ "integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.18.10",
+ "@babel/helper-validator-identifier": "^7.18.6",
+ "to-fast-properties": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@emotion/hash": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz",
+ "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow=="
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.7.tgz",
+ "integrity": "sha512-IKznSJOsVUuyt7cDzzSZyqBEcZe+7WlBqTVXiF1OXP/4Nm387ToaXZ0fyLwI1iBlI/bzpxVq411QE2/Bt2XWWw==",
+ "cpu": [
+ "loong64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz",
+ "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.4.0",
+ "globals": "^13.15.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/globals": {
+ "version": "13.17.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
+ "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@formatjs/ecma402-abstract": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.12.0.tgz",
+ "integrity": "sha512-0/wm9b7brUD40kx7KSE0S532T8EfH06Zc41rGlinoNyYXnuusR6ull2x63iFJgVXgwahm42hAW7dcYdZ+llZzA==",
+ "dev": true,
+ "dependencies": {
+ "@formatjs/intl-localematcher": "0.2.31",
+ "tslib": "2.4.0"
+ }
+ },
+ "node_modules/@formatjs/ecma402-abstract/node_modules/tslib": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
+ "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
+ "dev": true
+ },
+ "node_modules/@formatjs/icu-messageformat-parser": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.7.tgz",
+ "integrity": "sha512-KM4ikG5MloXMulqn39Js3ypuVzpPKq/DDplvl01PE2qD9rAzFO8YtaUCC9vr9j3sRXwdHPeTe8r3J/8IJgvYEQ==",
+ "dev": true,
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "1.12.0",
+ "@formatjs/icu-skeleton-parser": "1.3.13",
+ "tslib": "2.4.0"
+ }
+ },
+ "node_modules/@formatjs/icu-messageformat-parser/node_modules/tslib": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
+ "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
+ "dev": true
+ },
+ "node_modules/@formatjs/icu-skeleton-parser": {
+ "version": "1.3.13",
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.13.tgz",
+ "integrity": "sha512-qb1kxnA4ep76rV+d9JICvZBThBpK5X+nh1dLmmIReX72QyglicsaOmKEcdcbp7/giCWfhVs6CXPVA2JJ5/ZvAw==",
+ "dev": true,
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "1.12.0",
+ "tslib": "2.4.0"
+ }
+ },
+ "node_modules/@formatjs/icu-skeleton-parser/node_modules/tslib": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
+ "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
+ "dev": true
+ },
+ "node_modules/@formatjs/intl-localematcher": {
+ "version": "0.2.31",
+ "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.31.tgz",
+ "integrity": "sha512-9QTjdSBpQ7wHShZgsNzNig5qT3rCPvmZogS/wXZzKotns5skbXgs0I7J8cuN0PPqXyynvNVuN+iOKhNS2eb+ZA==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "2.4.0"
+ }
+ },
+ "node_modules/@formatjs/intl-localematcher/node_modules/tslib": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
+ "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
+ "dev": true
+ },
+ "node_modules/@headlessui/react": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.7.2.tgz",
+ "integrity": "sha512-snLv2lxwsf2HNTOBNgHYdvoYZ3ChJE8QszPi1d/hl9js8KrFrUulTaQBfSyPbJP5BybVreWh9DxCgz9S0Z6hKQ==",
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "react": "^16 || ^17 || ^18",
+ "react-dom": "^16 || ^17 || ^18"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz",
+ "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==",
+ "dev": true,
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/gitignore-to-minimatch": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz",
+ "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
+ "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/set-array": "^1.0.0",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.14",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
+ "dev": true
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
+ "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@rollup/pluginutils": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz",
+ "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==",
+ "dev": true,
+ "dependencies": {
+ "estree-walker": "^2.0.1",
+ "picomatch": "^2.2.2"
+ },
+ "engines": {
+ "node": ">= 8.0.0"
+ }
+ },
+ "node_modules/@tanstack/match-sorter-utils": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.1.1.tgz",
+ "integrity": "sha512-IdmEekEYxQsoLOR0XQyw3jD1GujBpRRYaGJYQUw1eOT1eUugWxdc7jomh1VQ1EKHcdwDLpLaCz/8y4KraU4T9A==",
+ "dependencies": {
+ "remove-accents": "0.4.2"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/kentcdodds"
+ }
+ },
+ "node_modules/@tanstack/query-core": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.2.3.tgz",
+ "integrity": "sha512-zdt5lYWs1dZaA3IxJbCgtAfHZJScRZONpiLL7YkeOkrme5MfjQqTpjq7LYbzpyuwPOh2Jx68le0PLl57JFv5hQ==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ }
+ },
+ "node_modules/@tanstack/react-location": {
+ "version": "3.7.4",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-location/-/react-location-3.7.4.tgz",
+ "integrity": "sha512-6rH2vNHGr0uyeUz5ZHvWMYjeYKGgIKFzvs5749QtnS9f+FU7t7fQE0hKZAzltBZk82LT7iYbcHBRyUg2lW13VA==",
+ "dependencies": {
+ "@babel/runtime": "^7.16.7",
+ "history": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ },
+ "peerDependencies": {
+ "react": ">=16",
+ "react-dom": ">=16"
+ }
+ },
+ "node_modules/@tanstack/react-query": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.2.3.tgz",
+ "integrity": "sha512-JLaMOxoJTkiAu7QpevRCt2uI/0vd3E8K/rSlCuRgWlcW5DeJDFpDS5kfzmLO5MOcD97fgsJRrDbxDORxR1FdJA==",
+ "dependencies": {
+ "@tanstack/query-core": "4.2.3",
+ "@types/use-sync-external-store": "^0.0.3",
+ "use-sync-external-store": "^1.2.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-native": "*"
+ },
+ "peerDependenciesMeta": {
+ "react-dom": {
+ "optional": true
+ },
+ "react-native": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@tanstack/react-query-devtools": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-4.2.3.tgz",
+ "integrity": "sha512-0PH8n824BnFyMrtv7q5uLS0b7jYg2tDH8vU4etkSYzV1uL4RJjiqMh7Gyi8qhYCwM+khlrkRYlNZvE0cxlp3SQ==",
+ "dependencies": {
+ "@tanstack/match-sorter-utils": "^8.0.0-alpha.82",
+ "@types/use-sync-external-store": "^0.0.3",
+ "use-sync-external-store": "^1.2.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ },
+ "peerDependencies": {
+ "@tanstack/react-query": "4.2.3",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/@types/eslint": {
+ "version": "8.4.6",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.6.tgz",
+ "integrity": "sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "*",
+ "@types/json-schema": "*"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz",
+ "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==",
+ "dev": true
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.11",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
+ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
+ "dev": true
+ },
+ "node_modules/@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "18.7.18",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.18.tgz",
+ "integrity": "sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg==",
+ "dev": true
+ },
+ "node_modules/@types/prop-types": {
+ "version": "15.7.5",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
+ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
+ "dev": true
+ },
+ "node_modules/@types/react": {
+ "version": "18.0.18",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.18.tgz",
+ "integrity": "sha512-6hI08umYs6NaiHFEEGioXnxJ+oEhY3eRz8VCUaudZmGdtvPviCJB8mgaMxaDWAdPSYd4eFavrPk2QIolwbLYrg==",
+ "dev": true,
+ "dependencies": {
+ "@types/prop-types": "*",
+ "@types/scheduler": "*",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "18.0.6",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz",
+ "integrity": "sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==",
+ "dev": true,
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@types/scheduler": {
+ "version": "0.16.2",
+ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
+ "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==",
+ "dev": true
+ },
+ "node_modules/@types/use-sync-external-store": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz",
+ "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA=="
+ },
+ "node_modules/@types/uuid": {
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz",
+ "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==",
+ "dev": true
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "5.37.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.37.0.tgz",
+ "integrity": "sha512-Fde6W0IafXktz1UlnhGkrrmnnGpAo1kyX7dnyHHVrmwJOn72Oqm3eYtddrpOwwel2W8PAK9F3pIL5S+lfoM0og==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "5.37.0",
+ "@typescript-eslint/type-utils": "5.37.0",
+ "@typescript-eslint/utils": "5.37.0",
+ "debug": "^4.3.4",
+ "functional-red-black-tree": "^1.0.1",
+ "ignore": "^5.2.0",
+ "regexpp": "^3.2.0",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^5.0.0",
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "5.37.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.37.0.tgz",
+ "integrity": "sha512-01VzI/ipYKuaG5PkE5+qyJ6m02fVALmMPY3Qq5BHflDx3y4VobbLdHQkSMg9VPRS4KdNt4oYTMaomFoHonBGAw==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "5.37.0",
+ "@typescript-eslint/types": "5.37.0",
+ "@typescript-eslint/typescript-estree": "5.37.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "5.37.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.37.0.tgz",
+ "integrity": "sha512-F67MqrmSXGd/eZnujjtkPgBQzgespu/iCZ+54Ok9X5tALb9L2v3G+QBSoWkXG0p3lcTJsL+iXz5eLUEdSiJU9Q==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.37.0",
+ "@typescript-eslint/visitor-keys": "5.37.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "5.37.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.37.0.tgz",
+ "integrity": "sha512-BSx/O0Z0SXOF5tY0bNTBcDEKz2Ec20GVYvq/H/XNKiUorUFilH7NPbFUuiiyzWaSdN3PA8JV0OvYx0gH/5aFAQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "5.37.0",
+ "@typescript-eslint/utils": "5.37.0",
+ "debug": "^4.3.4",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "5.37.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.37.0.tgz",
+ "integrity": "sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "5.37.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.37.0.tgz",
+ "integrity": "sha512-JkFoFIt/cx59iqEDSgIGnQpCTRv96MQnXCYvJi7QhBC24uyuzbD8wVbajMB1b9x4I0octYFJ3OwjAwNqk1AjDA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.37.0",
+ "@typescript-eslint/visitor-keys": "5.37.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "5.37.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.37.0.tgz",
+ "integrity": "sha512-jUEJoQrWbZhmikbcWSMDuUSxEE7ID2W/QCV/uz10WtQqfOuKZUqFGjqLJ+qhDd17rjgp+QJPqTdPIBWwoob2NQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.9",
+ "@typescript-eslint/scope-manager": "5.37.0",
+ "@typescript-eslint/types": "5.37.0",
+ "@typescript-eslint/typescript-estree": "5.37.0",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^3.0.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/utils/node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "5.37.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz",
+ "integrity": "sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.37.0",
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@vanilla-extract/css": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@vanilla-extract/css/-/css-1.9.0.tgz",
+ "integrity": "sha512-YERVutWIpttfkEAynBUgdHKMcSPjMAtu5IFfDfEdXmeygilV12S5WUYMzjrqu0F/LZBtqrHG5fa2tiCiFpay+w==",
+ "dependencies": {
+ "@emotion/hash": "^0.8.0",
+ "@vanilla-extract/private": "^1.0.3",
+ "chalk": "^4.1.1",
+ "css-what": "^5.0.1",
+ "cssesc": "^3.0.0",
+ "csstype": "^3.0.7",
+ "deep-object-diff": "^1.1.0",
+ "deepmerge": "^4.2.2",
+ "escape-string-regexp": "^4.0.0",
+ "media-query-parser": "^2.0.2",
+ "outdent": "^0.8.0"
+ }
+ },
+ "node_modules/@vanilla-extract/css-utils": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@vanilla-extract/css-utils/-/css-utils-0.1.2.tgz",
+ "integrity": "sha512-qoxIu5E/UhJtoKsPL1JaU9nhTN0Xl5zYV0pScOgsvc3JN46TvTTt0L3GV8x3PQpZP7x3elw8BsC9czYbhJy9Gg=="
+ },
+ "node_modules/@vanilla-extract/css/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@vanilla-extract/css/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@vanilla-extract/css/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/@vanilla-extract/css/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/@vanilla-extract/css/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@vanilla-extract/css/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@vanilla-extract/css/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@vanilla-extract/integration": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@vanilla-extract/integration/-/integration-5.0.1.tgz",
+ "integrity": "sha512-HRV/HvC/lihb9wT3x5s7pf5qLjqxSd9nBePJ10juOuMB5cl2ZClEcts076m9BuRKM3wRK2h7KuwkNsaUtjujxQ==",
+ "dependencies": {
+ "@vanilla-extract/css": "^1.7.2",
+ "esbuild": "^0.11.16",
+ "eval": "0.1.6",
+ "find-up": "^5.0.0",
+ "javascript-stringify": "^2.0.1",
+ "lodash": "^4.17.21",
+ "outdent": "^0.8.0"
+ }
+ },
+ "node_modules/@vanilla-extract/integration/node_modules/esbuild": {
+ "version": "0.11.23",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.11.23.tgz",
+ "integrity": "sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==",
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ }
+ },
+ "node_modules/@vanilla-extract/private": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@vanilla-extract/private/-/private-1.0.3.tgz",
+ "integrity": "sha512-17kVyLq3ePTKOkveHxXuIJZtGYs+cSoev7BlP+Lf4916qfDhk/HBjvlYDe8egrea7LNPHKwSZJK/bzZC+Q6AwQ=="
+ },
+ "node_modules/@vanilla-extract/recipes": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/@vanilla-extract/recipes/-/recipes-0.2.5.tgz",
+ "integrity": "sha512-OWXUUiFJdswD3+Xg8f8avuw/vAHZRFS4oHqFeoV1TcO8cfbDQ0zmkreBHvyspoJU+qsyWK48yPHKSptqNRPy9Q==",
+ "peerDependencies": {
+ "@vanilla-extract/css": "^1.0.0"
+ }
+ },
+ "node_modules/@vanilla-extract/vite-plugin": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/@vanilla-extract/vite-plugin/-/vite-plugin-3.5.0.tgz",
+ "integrity": "sha512-UMK2xUkfBclg8EAsR9V3mKQ44XjiyqpABZUBOJp3Vk8NDYHV8E/Ysn8xUB2WSJJnRLd4gqpHnivqRNRRfKV/gw==",
+ "dependencies": {
+ "@vanilla-extract/integration": "^5.0.0",
+ "outdent": "^0.8.0",
+ "postcss": "^8.3.6",
+ "postcss-load-config": "^3.1.0"
+ },
+ "peerDependencies": {
+ "vite": "^2.2.3"
+ }
+ },
+ "node_modules/@vitejs/plugin-react": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-2.1.0.tgz",
+ "integrity": "sha512-am6rPyyU3LzUYne3Gd9oj9c4Rzbq5hQnuGXSMT6Gujq45Il/+bunwq3lrB7wghLkiF45ygMwft37vgJ/NE8IAA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.18.13",
+ "@babel/plugin-transform-react-jsx": "^7.18.10",
+ "@babel/plugin-transform-react-jsx-development": "^7.18.6",
+ "@babel/plugin-transform-react-jsx-self": "^7.18.6",
+ "@babel/plugin-transform-react-jsx-source": "^7.18.6",
+ "magic-string": "^0.26.2",
+ "react-refresh": "^0.14.0"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "vite": "^3.0.0"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.8.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz",
+ "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/array-includes": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz",
+ "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5",
+ "get-intrinsic": "^1.1.1",
+ "is-string": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/array.prototype.flat": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz",
+ "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.2",
+ "es-shim-unscopables": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flatmap": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz",
+ "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.2",
+ "es-shim-unscopables": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.21.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz",
+ "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ }
+ ],
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001370",
+ "electron-to-chromium": "^1.4.202",
+ "node-releases": "^2.0.6",
+ "update-browserslist-db": "^1.0.5"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/builtins": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz",
+ "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^7.0.0"
+ }
+ },
+ "node_modules/builtins/node_modules/semver": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001390",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001390.tgz",
+ "integrity": "sha512-sS4CaUM+/+vqQUlCvCJ2WtDlV81aWtHhqeEVkLokVJJa3ViN4zDxAGfq9R8i1m90uGHxo99cy10Od+lvn3hf0g==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ }
+ ]
+ },
+ "node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "node_modules/convert-source-map": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
+ "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/css-what": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz",
+ "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==",
+ "engines": {
+ "node": ">= 6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz",
+ "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA=="
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "node_modules/deep-object-diff": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.7.tgz",
+ "integrity": "sha512-QkgBca0mL08P6HiOjoqvmm6xOAl2W6CT2+34Ljhg0OeFan8cwlcdq8jrLKsBBuUFAZLsN5b6y491KdKEoSo9lg=="
+ },
+ "node_modules/deepmerge": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
+ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
+ "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
+ "dev": true,
+ "dependencies": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/diff": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.242",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.242.tgz",
+ "integrity": "sha512-nPdgMWtjjWGCtreW/2adkrB2jyHjClo9PtVhR6rW+oxa4E4Wom642Tn+5LslHP3XPL5MCpkn5/UEY60EXylNeQ==",
+ "dev": true
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/es-abstract": {
+ "version": "1.20.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.2.tgz",
+ "integrity": "sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "function.prototype.name": "^1.1.5",
+ "get-intrinsic": "^1.1.2",
+ "get-symbol-description": "^1.0.0",
+ "has": "^1.0.3",
+ "has-property-descriptors": "^1.0.0",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.3",
+ "is-callable": "^1.2.4",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.2",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.4.3",
+ "string.prototype.trimend": "^1.0.5",
+ "string.prototype.trimstart": "^1.0.5",
+ "unbox-primitive": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-shim-unscopables": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
+ "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.3"
+ }
+ },
+ "node_modules/es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "dependencies": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.7.tgz",
+ "integrity": "sha512-7V8tzllIbAQV1M4QoE52ImKu8hT/NLGlGXkiDsbEU5PS6K8Mn09ZnYoS+dcmHxOS9CRsV4IRAMdT3I67IyUNXw==",
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/linux-loong64": "0.15.7",
+ "esbuild-android-64": "0.15.7",
+ "esbuild-android-arm64": "0.15.7",
+ "esbuild-darwin-64": "0.15.7",
+ "esbuild-darwin-arm64": "0.15.7",
+ "esbuild-freebsd-64": "0.15.7",
+ "esbuild-freebsd-arm64": "0.15.7",
+ "esbuild-linux-32": "0.15.7",
+ "esbuild-linux-64": "0.15.7",
+ "esbuild-linux-arm": "0.15.7",
+ "esbuild-linux-arm64": "0.15.7",
+ "esbuild-linux-mips64le": "0.15.7",
+ "esbuild-linux-ppc64le": "0.15.7",
+ "esbuild-linux-riscv64": "0.15.7",
+ "esbuild-linux-s390x": "0.15.7",
+ "esbuild-netbsd-64": "0.15.7",
+ "esbuild-openbsd-64": "0.15.7",
+ "esbuild-sunos-64": "0.15.7",
+ "esbuild-windows-32": "0.15.7",
+ "esbuild-windows-64": "0.15.7",
+ "esbuild-windows-arm64": "0.15.7"
+ }
+ },
+ "node_modules/esbuild-android-64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.7.tgz",
+ "integrity": "sha512-p7rCvdsldhxQr3YHxptf1Jcd86dlhvc3EQmQJaZzzuAxefO9PvcI0GLOa5nCWem1AJ8iMRu9w0r5TG8pHmbi9w==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-android-arm64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.7.tgz",
+ "integrity": "sha512-L775l9ynJT7rVqRM5vo+9w5g2ysbOCfsdLV4CWanTZ1k/9Jb3IYlQ06VCI1edhcosTYJRECQFJa3eAvkx72eyQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-darwin-64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.7.tgz",
+ "integrity": "sha512-KGPt3r1c9ww009t2xLB6Vk0YyNOXh7hbjZ3EecHoVDxgtbUlYstMPDaReimKe6eOEfyY4hBEEeTvKwPsiH5WZg==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-darwin-arm64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.7.tgz",
+ "integrity": "sha512-kBIHvtVqbSGajN88lYMnR3aIleH3ABZLLFLxwL2stiuIGAjGlQW741NxVTpUHQXUmPzxi6POqc9npkXa8AcSZQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-freebsd-64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.7.tgz",
+ "integrity": "sha512-hESZB91qDLV5MEwNxzMxPfbjAhOmtfsr9Wnuci7pY6TtEh4UDuevmGmkUIjX/b+e/k4tcNBMf7SRQ2mdNuK/HQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-freebsd-arm64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.7.tgz",
+ "integrity": "sha512-dLFR0ChH5t+b3J8w0fVKGvtwSLWCv7GYT2Y2jFGulF1L5HftQLzVGN+6pi1SivuiVSmTh28FwUhi9PwQicXI6Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-32": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.7.tgz",
+ "integrity": "sha512-v3gT/LsONGUZcjbt2swrMjwxo32NJzk+7sAgtxhGx1+ZmOFaTRXBAi1PPfgpeo/J//Un2jIKm/I+qqeo4caJvg==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.7.tgz",
+ "integrity": "sha512-LxXEfLAKwOVmm1yecpMmWERBshl+Kv5YJ/1KnyAr6HRHFW8cxOEsEfisD3sVl/RvHyW//lhYUVSuy9jGEfIRAQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-arm": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.7.tgz",
+ "integrity": "sha512-JKgAHtMR5f75wJTeuNQbyznZZa+pjiUHV7sRZp42UNdyXC6TiUYMW/8z8yIBAr2Fpad8hM1royZKQisqPABPvQ==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-arm64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.7.tgz",
+ "integrity": "sha512-P3cfhudpzWDkglutWgXcT2S7Ft7o2e3YDMrP1n0z2dlbUZghUkKCyaWw0zhp4KxEEzt/E7lmrtRu/pGWnwb9vw==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-mips64le": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.7.tgz",
+ "integrity": "sha512-T7XKuxl0VpeFLCJXub6U+iybiqh0kM/bWOTb4qcPyDDwNVhLUiPcGdG2/0S7F93czUZOKP57YiLV8YQewgLHKw==",
+ "cpu": [
+ "mips64el"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-ppc64le": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.7.tgz",
+ "integrity": "sha512-6mGuC19WpFN7NYbecMIJjeQgvDb5aMuvyk0PDYBJrqAEMkTwg3Z98kEKuCm6THHRnrgsdr7bp4SruSAxEM4eJw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-riscv64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.7.tgz",
+ "integrity": "sha512-uUJsezbswAYo/X7OU/P+PuL/EI9WzxsEQXDekfwpQ23uGiooxqoLFAPmXPcRAt941vjlY9jtITEEikWMBr+F/g==",
+ "cpu": [
+ "riscv64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-s390x": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.7.tgz",
+ "integrity": "sha512-+tO+xOyTNMc34rXlSxK7aCwJgvQyffqEM5MMdNDEeMU3ss0S6wKvbBOQfgd5jRPblfwJ6b+bKiz0g5nABpY0QQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-netbsd-64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.7.tgz",
+ "integrity": "sha512-yVc4Wz+Pu3cP5hzm5kIygNPrjar/v5WCSoRmIjCPWfBVJkZNb5brEGKUlf+0Y759D48BCWa0WHrWXaNy0DULTQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-openbsd-64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.7.tgz",
+ "integrity": "sha512-GsimbwC4FSR4lN3wf8XmTQ+r8/0YSQo21rWDL0XFFhLHKlzEA4SsT1Tl8bPYu00IU6UWSJ+b3fG/8SB69rcuEQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-sunos-64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.7.tgz",
+ "integrity": "sha512-8CDI1aL/ts0mDGbWzjEOGKXnU7p3rDzggHSBtVryQzkSOsjCHRVe0iFYUuhczlxU1R3LN/E7HgUO4NXzGGP/Ag==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-windows-32": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.7.tgz",
+ "integrity": "sha512-cOnKXUEPS8EGCzRSFa1x6NQjGhGsFlVgjhqGEbLTPsA7x4RRYiy2RKoArNUU4iR2vHmzqS5Gr84MEumO/wxYKA==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-windows-64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.7.tgz",
+ "integrity": "sha512-7MI08Ec2sTIDv+zH6StNBKO+2hGUYIT42GmFyW6MBBWWtJhTcQLinKS6ldIN1d52MXIbiJ6nXyCJ+LpL4jBm3Q==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-windows-arm64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.7.tgz",
+ "integrity": "sha512-R06nmqBlWjKHddhRJYlqDd3Fabx9LFdKcjoOy08YLimwmsswlFBJV4rXzZCxz/b7ZJXvrZgj8DDv1ewE9+StMw==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.23.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.1.tgz",
+ "integrity": "sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg==",
+ "dev": true,
+ "dependencies": {
+ "@eslint/eslintrc": "^1.3.2",
+ "@humanwhocodes/config-array": "^0.10.4",
+ "@humanwhocodes/gitignore-to-minimatch": "^1.0.2",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.1.1",
+ "eslint-utils": "^3.0.0",
+ "eslint-visitor-keys": "^3.3.0",
+ "espree": "^9.4.0",
+ "esquery": "^1.4.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.1",
+ "globals": "^13.15.0",
+ "globby": "^11.1.0",
+ "grapheme-splitter": "^1.0.4",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "js-sdsl": "^4.1.4",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "regexpp": "^3.2.0",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-config-prettier": {
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz",
+ "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==",
+ "dev": true,
+ "bin": {
+ "eslint-config-prettier": "bin/cli.js"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-config-standard": {
+ "version": "17.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz",
+ "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "peerDependencies": {
+ "eslint": "^8.0.1",
+ "eslint-plugin-import": "^2.25.2",
+ "eslint-plugin-n": "^15.0.0",
+ "eslint-plugin-promise": "^6.0.0"
+ }
+ },
+ "node_modules/eslint-config-standard-with-typescript": {
+ "version": "23.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-23.0.0.tgz",
+ "integrity": "sha512-iaaWifImn37Z1OXbNW1es7KI+S7D408F9ys0bpaQf2temeBWlvb0Nc5qHkOgYaRb5QxTZT32GGeN1gtswASOXA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/parser": "^5.0.0",
+ "eslint-config-standard": "17.0.0"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/eslint-plugin": "^5.0.0",
+ "eslint": "^8.0.1",
+ "eslint-plugin-import": "^2.25.2",
+ "eslint-plugin-n": "^15.0.0",
+ "eslint-plugin-promise": "^6.0.0",
+ "typescript": "*"
+ }
+ },
+ "node_modules/eslint-import-resolver-node": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
+ "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^3.2.7",
+ "resolve": "^1.20.0"
+ }
+ },
+ "node_modules/eslint-import-resolver-node/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-module-utils": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz",
+ "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^3.2.7"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-es": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz",
+ "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==",
+ "dev": true,
+ "dependencies": {
+ "eslint-utils": "^2.0.0",
+ "regexpp": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=4.19.1"
+ }
+ },
+ "node_modules/eslint-plugin-es/node_modules/eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ }
+ },
+ "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-plugin-i18n-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-i18n-json/-/eslint-plugin-i18n-json-4.0.0.tgz",
+ "integrity": "sha512-rglbr9f/UaPN/OeiSLVVFlIh4RrXPTzX5qr4tqOdTj1Ryr8xIhUzriDDuyuPWliektO86c/zy1RldmBIOfDNsQ==",
+ "dev": true,
+ "dependencies": {
+ "@formatjs/icu-messageformat-parser": "^2.0.18",
+ "chalk": "^2.3.2",
+ "indent-string": "^3.2.0",
+ "jest-diff": "^22.0.3",
+ "lodash.get": "^4.4.2",
+ "lodash.isequal": "^4.5.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.set": "^4.3.2",
+ "log-symbols": "^2.2.0",
+ "parse-json": "^5.2.0",
+ "plur": "^2.1.2",
+ "pretty-format": "^22.0.3"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ },
+ "peerDependencies": {
+ "eslint": ">=4.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-i18next": {
+ "version": "6.0.0-4",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-i18next/-/eslint-plugin-i18next-6.0.0-4.tgz",
+ "integrity": "sha512-QF0TpFuk5HkdzKBirXsWvueX50GIu/mhTUtYWSUSHjJcLPugap890XGsyDhOSUpX/tNzX32K43v96InZr7+mmg==",
+ "dev": true,
+ "dependencies": {
+ "lodash": "^4.17.21",
+ "requireindex": "~1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-import": {
+ "version": "2.26.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz",
+ "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==",
+ "dev": true,
+ "dependencies": {
+ "array-includes": "^3.1.4",
+ "array.prototype.flat": "^1.2.5",
+ "debug": "^2.6.9",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.6",
+ "eslint-module-utils": "^2.7.3",
+ "has": "^1.0.3",
+ "is-core-module": "^2.8.1",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.1.2",
+ "object.values": "^1.1.5",
+ "resolve": "^1.22.0",
+ "tsconfig-paths": "^3.14.1"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true
+ },
+ "node_modules/eslint-plugin-n": {
+ "version": "15.2.5",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.2.5.tgz",
+ "integrity": "sha512-8+BYsqiyZfpu6NXmdLOXVUfk8IocpCjpd8nMRRH0A9ulrcemhb2VI9RSJMEy5udx++A/YcVPD11zT8hpFq368g==",
+ "dev": true,
+ "dependencies": {
+ "builtins": "^5.0.1",
+ "eslint-plugin-es": "^4.1.0",
+ "eslint-utils": "^3.0.0",
+ "ignore": "^5.1.1",
+ "is-core-module": "^2.10.0",
+ "minimatch": "^3.1.2",
+ "resolve": "^1.22.1",
+ "semver": "^7.3.7"
+ },
+ "engines": {
+ "node": ">=12.22.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-n/node_modules/semver": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/eslint-plugin-promise": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.0.1.tgz",
+ "integrity": "sha512-uM4Tgo5u3UWQiroOyDEsYcVMOo7re3zmno0IZmB5auxoaQNIceAbXEkSt8RNrKtaYehARHG06pYK6K1JhtP0Zw==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-react": {
+ "version": "7.31.8",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.8.tgz",
+ "integrity": "sha512-5lBTZmgQmARLLSYiwI71tiGVTLUuqXantZM6vlSY39OaDSV0M7+32K5DnLkmFrwTe+Ksz0ffuLUC91RUviVZfw==",
+ "dev": true,
+ "dependencies": {
+ "array-includes": "^3.1.5",
+ "array.prototype.flatmap": "^1.3.0",
+ "doctrine": "^2.1.0",
+ "estraverse": "^5.3.0",
+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.5",
+ "object.fromentries": "^2.0.5",
+ "object.hasown": "^1.1.1",
+ "object.values": "^1.1.5",
+ "prop-types": "^15.8.1",
+ "resolve": "^2.0.0-next.3",
+ "semver": "^6.3.0",
+ "string.prototype.matchall": "^4.0.7"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/resolve": {
+ "version": "2.0.0-next.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz",
+ "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
+ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^2.0.0"
+ },
+ "engines": {
+ "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=5"
+ }
+ },
+ "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/eslint/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/eslint/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/eslint/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/eslint/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/globals": {
+ "version": "13.17.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
+ "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.4.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz",
+ "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.8.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
+ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "dev": true
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eval": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.6.tgz",
+ "integrity": "sha512-o0XUw+5OGkXw4pJZzQoXUk+H87DHuC+7ZE//oSrRGtatTmr12oTnLfg6QOq9DyTt0c/p4TwzgmkKrBzWTSizyQ==",
+ "dependencies": {
+ "require-like": ">= 0.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.2.12",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
+ "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "node_modules/fastq": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+ "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
+ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
+ "dev": true
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "node_modules/function.prototype.name": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
+ "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.0",
+ "functions-have-names": "^1.2.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
+ "dev": true
+ },
+ "node_modules/functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
+ "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-symbol-description": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
+ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/grapheme-splitter": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
+ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+ "dev": true
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
+ "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/history": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz",
+ "integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.7.6"
+ }
+ },
+ "node_modules/html-parse-stringify": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz",
+ "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==",
+ "dependencies": {
+ "void-elements": "3.1.0"
+ }
+ },
+ "node_modules/i18next": {
+ "version": "21.9.2",
+ "resolved": "https://registry.npmjs.org/i18next/-/i18next-21.9.2.tgz",
+ "integrity": "sha512-00fVrLQOwy45nm3OtC9l1WiLK3nJlIYSljgCt0qzTaAy65aciMdRy9GsuW+a2AtKtdg9/njUGfRH30LRupV7ZQ==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://locize.com"
+ },
+ {
+ "type": "individual",
+ "url": "https://locize.com/i18next.html"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project"
+ }
+ ],
+ "dependencies": {
+ "@babel/runtime": "^7.17.2"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
+ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/immer": {
+ "version": "9.0.15",
+ "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz",
+ "integrity": "sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/immer"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/indent-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
+ "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/internal-slot": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
+ "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/irregular-plurals": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.4.0.tgz",
+ "integrity": "sha512-kniTIJmaZYiwa17eTtWIfm0K342seyugl6vuC8DiiyiRAJWAVlLkqGCI0Im0neo0TkXw+pRcKaBPRdcKHnQJ6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true
+ },
+ "node_modules/is-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "dev": true,
+ "dependencies": {
+ "has-bigints": "^1.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.6.tgz",
+ "integrity": "sha512-krO72EO2NptOGAX2KYyqbP9vYMlNAXdB53rq6f8LXY6RY7JdSR/3BD6wLUlPHSAesmY9vstNrjvqGaCiRK/91Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz",
+ "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==",
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-negative-zero": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
+ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-number-object": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-shared-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-symbol": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "node_modules/javascript-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz",
+ "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg=="
+ },
+ "node_modules/jest-diff": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-22.4.3.tgz",
+ "integrity": "sha512-/QqGvCDP5oZOF6PebDuLwrB2BMD8ffJv6TAGAdEVuDx1+uEgrHpSFrfrOiMRx2eJ1hgNjlQrOQEHetVwij90KA==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^2.0.1",
+ "diff": "^3.2.0",
+ "jest-get-type": "^22.4.3",
+ "pretty-format": "^22.4.3"
+ }
+ },
+ "node_modules/jest-get-type": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz",
+ "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==",
+ "dev": true
+ },
+ "node_modules/js-sdsl": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.4.tgz",
+ "integrity": "sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==",
+ "dev": true
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true,
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "node_modules/json5": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
+ "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
+ "dev": true,
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/jsx-ast-utils": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz",
+ "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==",
+ "dev": true,
+ "dependencies": {
+ "array-includes": "^3.1.5",
+ "object.assign": "^4.1.3"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lilconfig": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz",
+ "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "node_modules/lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==",
+ "dev": true
+ },
+ "node_modules/lodash.isequal": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+ "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==",
+ "dev": true
+ },
+ "node_modules/lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
+ "dev": true
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "node_modules/lodash.set": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz",
+ "integrity": "sha512-4hNPN5jlm/N/HLMCO43v8BXKq9Z7QdAGc/VGrRD61w8gN9g/6jF9A4L1pbUgBLCffi0w9VsXfTOij5x8iTyFvg==",
+ "dev": true
+ },
+ "node_modules/log-symbols": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
+ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.26.3",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.3.tgz",
+ "integrity": "sha512-u1Po0NDyFcwdg2nzHT88wSK0+Rih0N1M+Ph1Sp08k8yvFFU3KR72wryS7e1qMPJypt99WB7fIFVCA92mQrMjrg==",
+ "dev": true,
+ "dependencies": {
+ "sourcemap-codec": "^1.4.8"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/media-query-parser": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/media-query-parser/-/media-query-parser-2.0.2.tgz",
+ "integrity": "sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==",
+ "dependencies": {
+ "@babel/runtime": "^7.12.5"
+ }
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
+ "dev": true
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
+ "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz",
+ "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==",
+ "dev": true
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
+ "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
+ "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.entries": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz",
+ "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.fromentries": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz",
+ "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.hasown": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz",
+ "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.values": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
+ "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dev": true,
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/outdent": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.8.0.tgz",
+ "integrity": "sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A=="
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/plur": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz",
+ "integrity": "sha512-WhcHk576xg9y/iv6RWOuroZgsqvCbJN+XGvAypCJwLAYs2iWDp5LUmvaCdV6JR2O0SMBf8l6p7A94AyLCFVMlQ==",
+ "dev": true,
+ "dependencies": {
+ "irregular-plurals": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.16",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz",
+ "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.4",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
+ "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
+ "dependencies": {
+ "lilconfig": "^2.0.5",
+ "yaml": "^1.10.2"
+ },
+ "engines": {
+ "node": ">= 10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": ">=8.0.9",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz",
+ "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==",
+ "dev": true,
+ "bin": {
+ "prettier": "bin-prettier.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/pretty-format": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-22.4.3.tgz",
+ "integrity": "sha512-S4oT9/sT6MN7/3COoOy+ZJeA92VmOnveLHgrwBE3Z1W5N9S2A1QGNYiE1z75DAENbJrXXUb+OWXhpJcg05QKQQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^3.0.0",
+ "ansi-styles": "^3.2.0"
+ }
+ },
+ "node_modules/pretty-format/node_modules/ansi-regex": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
+ "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "dev": true,
+ "dependencies": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/react": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
+ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
+ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.0"
+ },
+ "peerDependencies": {
+ "react": "^18.2.0"
+ }
+ },
+ "node_modules/react-i18next": {
+ "version": "11.18.6",
+ "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.18.6.tgz",
+ "integrity": "sha512-yHb2F9BiT0lqoQDt8loZ5gWP331GwctHz9tYQ8A2EIEUu+CcEdjBLQWli1USG3RdWQt3W+jqQLg/d4rrQR96LA==",
+ "dependencies": {
+ "@babel/runtime": "^7.14.5",
+ "html-parse-stringify": "^3.0.1"
+ },
+ "peerDependencies": {
+ "i18next": ">= 19.0.0",
+ "react": ">= 16.8.0"
+ },
+ "peerDependenciesMeta": {
+ "react-dom": {
+ "optional": true
+ },
+ "react-native": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "dev": true
+ },
+ "node_modules/react-refresh": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz",
+ "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/regenerator-runtime": {
+ "version": "0.13.9",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
+ "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
+ },
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
+ "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "functions-have-names": "^1.2.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/regexpp": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ }
+ },
+ "node_modules/remove-accents": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz",
+ "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA=="
+ },
+ "node_modules/require-like": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz",
+ "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/requireindex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz",
+ "integrity": "sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.5"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+ "dependencies": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "2.78.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz",
+ "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==",
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/scheduler": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
+ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sourcemap-codec": {
+ "version": "1.4.8",
+ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
+ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
+ "dev": true
+ },
+ "node_modules/string.prototype.matchall": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz",
+ "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1",
+ "get-intrinsic": "^1.1.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.3",
+ "regexp.prototype.flags": "^1.4.1",
+ "side-channel": "^1.0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimend": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz",
+ "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimstart": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz",
+ "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
+ "node_modules/to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/tsconfig-paths": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz",
+ "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.1",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "node_modules/tsconfig-paths/node_modules/json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ },
+ "node_modules/tsutils": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
+ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^1.8.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ },
+ "peerDependencies": {
+ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
+ }
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "4.8.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz",
+ "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==",
+ "dev": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=4.2.0"
+ }
+ },
+ "node_modules/unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.7.tgz",
+ "integrity": "sha512-iN/XYesmZ2RmmWAiI4Z5rq0YqSiv0brj9Ce9CfhNE4xIW2h+MFxcgkxIzZ+ShkFPUkjU3gQ+3oypadD3RAMtrg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "browserslist-lint": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/use-sync-external-store": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
+ "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/uuid": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz",
+ "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/vite": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-3.1.0.tgz",
+ "integrity": "sha512-YBg3dUicDpDWFCGttmvMbVyS9ydjntwEjwXRj2KBFwSB8SxmGcudo1yb8FW5+M/G86aS8x828ujnzUVdsLjs9g==",
+ "dependencies": {
+ "esbuild": "^0.15.6",
+ "postcss": "^8.4.16",
+ "resolve": "^1.22.1",
+ "rollup": "~2.78.0"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ },
+ "peerDependencies": {
+ "less": "*",
+ "sass": "*",
+ "stylus": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "less": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite-plugin-eslint": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/vite-plugin-eslint/-/vite-plugin-eslint-1.8.1.tgz",
+ "integrity": "sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==",
+ "dev": true,
+ "dependencies": {
+ "@rollup/pluginutils": "^4.2.1",
+ "@types/eslint": "^8.4.5",
+ "rollup": "^2.77.2"
+ },
+ "peerDependencies": {
+ "eslint": ">=7",
+ "vite": ">=2"
+ }
+ },
+ "node_modules/void-elements": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz",
+ "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/which-boxed-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+ "dev": true,
+ "dependencies": {
+ "is-bigint": "^1.0.1",
+ "is-boolean-object": "^1.1.0",
+ "is-number-object": "^1.0.4",
+ "is-string": "^1.0.5",
+ "is-symbol": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "node_modules/yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/zustand": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.1.1.tgz",
+ "integrity": "sha512-h4F3WMqsZgvvaE0n3lThx4MM81Ls9xebjvrABNzf5+jb3/03YjNTSgZXeyrvXDArMeV9untvWXRw1tY+ntPYbA==",
+ "dependencies": {
+ "use-sync-external-store": "1.2.0"
+ },
+ "engines": {
+ "node": ">=12.7.0"
+ },
+ "peerDependencies": {
+ "immer": ">=9.0",
+ "react": ">=16.8"
+ },
+ "peerDependenciesMeta": {
+ "immer": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ }
+ }
+ }
+ },
+ "dependencies": {
+ "@ampproject/remapping": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
+ "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/gen-mapping": "^0.1.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ },
+ "@babel/code-frame": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
+ "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.18.6"
+ }
+ },
+ "@babel/compat-data": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.0.tgz",
+ "integrity": "sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw==",
+ "dev": true
+ },
+ "@babel/core": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.0.tgz",
+ "integrity": "sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ==",
+ "dev": true,
+ "requires": {
+ "@ampproject/remapping": "^2.1.0",
+ "@babel/code-frame": "^7.18.6",
+ "@babel/generator": "^7.19.0",
+ "@babel/helper-compilation-targets": "^7.19.0",
+ "@babel/helper-module-transforms": "^7.19.0",
+ "@babel/helpers": "^7.19.0",
+ "@babel/parser": "^7.19.0",
+ "@babel/template": "^7.18.10",
+ "@babel/traverse": "^7.19.0",
+ "@babel/types": "^7.19.0",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.1",
+ "semver": "^6.3.0"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz",
+ "integrity": "sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.19.0",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "jsesc": "^2.5.1"
+ },
+ "dependencies": {
+ "@jridgewell/gen-mapping": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
+ "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ }
+ }
+ },
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz",
+ "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.18.6"
+ }
+ },
+ "@babel/helper-compilation-targets": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz",
+ "integrity": "sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.19.0",
+ "@babel/helper-validator-option": "^7.18.6",
+ "browserslist": "^4.20.2",
+ "semver": "^6.3.0"
+ }
+ },
+ "@babel/helper-environment-visitor": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz",
+ "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==",
+ "dev": true
+ },
+ "@babel/helper-function-name": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz",
+ "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.18.10",
+ "@babel/types": "^7.19.0"
+ }
+ },
+ "@babel/helper-hoist-variables": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
+ "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.18.6"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
+ "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.18.6"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz",
+ "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-environment-visitor": "^7.18.9",
+ "@babel/helper-module-imports": "^7.18.6",
+ "@babel/helper-simple-access": "^7.18.6",
+ "@babel/helper-split-export-declaration": "^7.18.6",
+ "@babel/helper-validator-identifier": "^7.18.6",
+ "@babel/template": "^7.18.10",
+ "@babel/traverse": "^7.19.0",
+ "@babel/types": "^7.19.0"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz",
+ "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==",
+ "dev": true
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
+ "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.18.6"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
+ "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.18.6"
+ }
+ },
+ "@babel/helper-string-parser": {
+ "version": "7.18.10",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz",
+ "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==",
+ "dev": true
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==",
+ "dev": true
+ },
+ "@babel/helper-validator-option": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz",
+ "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==",
+ "dev": true
+ },
+ "@babel/helpers": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz",
+ "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.18.10",
+ "@babel/traverse": "^7.19.0",
+ "@babel/types": "^7.19.0"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
+ "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.18.6",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.0.tgz",
+ "integrity": "sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw==",
+ "dev": true
+ },
+ "@babel/plugin-syntax-jsx": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz",
+ "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/plugin-transform-react-jsx": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz",
+ "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.18.6",
+ "@babel/helper-module-imports": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.19.0",
+ "@babel/plugin-syntax-jsx": "^7.18.6",
+ "@babel/types": "^7.19.0"
+ }
+ },
+ "@babel/plugin-transform-react-jsx-development": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz",
+ "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==",
+ "dev": true,
+ "requires": {
+ "@babel/plugin-transform-react-jsx": "^7.18.6"
+ }
+ },
+ "@babel/plugin-transform-react-jsx-self": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz",
+ "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/plugin-transform-react-jsx-source": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.18.6.tgz",
+ "integrity": "sha512-utZmlASneDfdaMh0m/WausbjUjEdGrQJz0vFK93d7wD3xf5wBtX219+q6IlCNZeguIcxS2f/CvLZrlLSvSHQXw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/runtime": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz",
+ "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==",
+ "requires": {
+ "regenerator-runtime": "^0.13.4"
+ }
+ },
+ "@babel/template": {
+ "version": "7.18.10",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz",
+ "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.18.6",
+ "@babel/parser": "^7.18.10",
+ "@babel/types": "^7.18.10"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.0.tgz",
+ "integrity": "sha512-4pKpFRDh+utd2mbRC8JLnlsMUii3PMHjpL6a0SZ4NMZy7YFP9aXORxEhdMVOc9CpWtDF09IkciQLEhK7Ml7gRA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.18.6",
+ "@babel/generator": "^7.19.0",
+ "@babel/helper-environment-visitor": "^7.18.9",
+ "@babel/helper-function-name": "^7.19.0",
+ "@babel/helper-hoist-variables": "^7.18.6",
+ "@babel/helper-split-export-declaration": "^7.18.6",
+ "@babel/parser": "^7.19.0",
+ "@babel/types": "^7.19.0",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
+ }
+ },
+ "@babel/types": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz",
+ "integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-string-parser": "^7.18.10",
+ "@babel/helper-validator-identifier": "^7.18.6",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@emotion/hash": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz",
+ "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow=="
+ },
+ "@esbuild/linux-loong64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.7.tgz",
+ "integrity": "sha512-IKznSJOsVUuyt7cDzzSZyqBEcZe+7WlBqTVXiF1OXP/4Nm387ToaXZ0fyLwI1iBlI/bzpxVq411QE2/Bt2XWWw==",
+ "optional": true
+ },
+ "@eslint/eslintrc": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz",
+ "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.4.0",
+ "globals": "^13.15.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "dependencies": {
+ "globals": {
+ "version": "13.17.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
+ "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ }
+ }
+ },
+ "@formatjs/ecma402-abstract": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.12.0.tgz",
+ "integrity": "sha512-0/wm9b7brUD40kx7KSE0S532T8EfH06Zc41rGlinoNyYXnuusR6ull2x63iFJgVXgwahm42hAW7dcYdZ+llZzA==",
+ "dev": true,
+ "requires": {
+ "@formatjs/intl-localematcher": "0.2.31",
+ "tslib": "2.4.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
+ "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
+ "dev": true
+ }
+ }
+ },
+ "@formatjs/icu-messageformat-parser": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.7.tgz",
+ "integrity": "sha512-KM4ikG5MloXMulqn39Js3ypuVzpPKq/DDplvl01PE2qD9rAzFO8YtaUCC9vr9j3sRXwdHPeTe8r3J/8IJgvYEQ==",
+ "dev": true,
+ "requires": {
+ "@formatjs/ecma402-abstract": "1.12.0",
+ "@formatjs/icu-skeleton-parser": "1.3.13",
+ "tslib": "2.4.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
+ "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
+ "dev": true
+ }
+ }
+ },
+ "@formatjs/icu-skeleton-parser": {
+ "version": "1.3.13",
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.13.tgz",
+ "integrity": "sha512-qb1kxnA4ep76rV+d9JICvZBThBpK5X+nh1dLmmIReX72QyglicsaOmKEcdcbp7/giCWfhVs6CXPVA2JJ5/ZvAw==",
+ "dev": true,
+ "requires": {
+ "@formatjs/ecma402-abstract": "1.12.0",
+ "tslib": "2.4.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
+ "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
+ "dev": true
+ }
+ }
+ },
+ "@formatjs/intl-localematcher": {
+ "version": "0.2.31",
+ "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.31.tgz",
+ "integrity": "sha512-9QTjdSBpQ7wHShZgsNzNig5qT3rCPvmZogS/wXZzKotns5skbXgs0I7J8cuN0PPqXyynvNVuN+iOKhNS2eb+ZA==",
+ "dev": true,
+ "requires": {
+ "tslib": "2.4.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
+ "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
+ "dev": true
+ }
+ }
+ },
+ "@headlessui/react": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.7.2.tgz",
+ "integrity": "sha512-snLv2lxwsf2HNTOBNgHYdvoYZ3ChJE8QszPi1d/hl9js8KrFrUulTaQBfSyPbJP5BybVreWh9DxCgz9S0Z6hKQ==",
+ "requires": {}
+ },
+ "@humanwhocodes/config-array": {
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz",
+ "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==",
+ "dev": true,
+ "requires": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.4"
+ }
+ },
+ "@humanwhocodes/gitignore-to-minimatch": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz",
+ "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==",
+ "dev": true
+ },
+ "@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true
+ },
+ "@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "@jridgewell/gen-mapping": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
+ "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/set-array": "^1.0.0",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "@jridgewell/resolve-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
+ "dev": true
+ },
+ "@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "dev": true
+ },
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.4.14",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
+ "dev": true
+ },
+ "@jridgewell/trace-mapping": {
+ "version": "0.3.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
+ "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@rollup/pluginutils": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz",
+ "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==",
+ "dev": true,
+ "requires": {
+ "estree-walker": "^2.0.1",
+ "picomatch": "^2.2.2"
+ }
+ },
+ "@tanstack/match-sorter-utils": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.1.1.tgz",
+ "integrity": "sha512-IdmEekEYxQsoLOR0XQyw3jD1GujBpRRYaGJYQUw1eOT1eUugWxdc7jomh1VQ1EKHcdwDLpLaCz/8y4KraU4T9A==",
+ "requires": {
+ "remove-accents": "0.4.2"
+ }
+ },
+ "@tanstack/query-core": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.2.3.tgz",
+ "integrity": "sha512-zdt5lYWs1dZaA3IxJbCgtAfHZJScRZONpiLL7YkeOkrme5MfjQqTpjq7LYbzpyuwPOh2Jx68le0PLl57JFv5hQ=="
+ },
+ "@tanstack/react-location": {
+ "version": "3.7.4",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-location/-/react-location-3.7.4.tgz",
+ "integrity": "sha512-6rH2vNHGr0uyeUz5ZHvWMYjeYKGgIKFzvs5749QtnS9f+FU7t7fQE0hKZAzltBZk82LT7iYbcHBRyUg2lW13VA==",
+ "requires": {
+ "@babel/runtime": "^7.16.7",
+ "history": "^5.2.0"
+ }
+ },
+ "@tanstack/react-query": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.2.3.tgz",
+ "integrity": "sha512-JLaMOxoJTkiAu7QpevRCt2uI/0vd3E8K/rSlCuRgWlcW5DeJDFpDS5kfzmLO5MOcD97fgsJRrDbxDORxR1FdJA==",
+ "requires": {
+ "@tanstack/query-core": "4.2.3",
+ "@types/use-sync-external-store": "^0.0.3",
+ "use-sync-external-store": "^1.2.0"
+ }
+ },
+ "@tanstack/react-query-devtools": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-4.2.3.tgz",
+ "integrity": "sha512-0PH8n824BnFyMrtv7q5uLS0b7jYg2tDH8vU4etkSYzV1uL4RJjiqMh7Gyi8qhYCwM+khlrkRYlNZvE0cxlp3SQ==",
+ "requires": {
+ "@tanstack/match-sorter-utils": "^8.0.0-alpha.82",
+ "@types/use-sync-external-store": "^0.0.3",
+ "use-sync-external-store": "^1.2.0"
+ }
+ },
+ "@types/eslint": {
+ "version": "8.4.6",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.6.tgz",
+ "integrity": "sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==",
+ "dev": true,
+ "requires": {
+ "@types/estree": "*",
+ "@types/json-schema": "*"
+ }
+ },
+ "@types/estree": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz",
+ "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==",
+ "dev": true
+ },
+ "@types/json-schema": {
+ "version": "7.0.11",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
+ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
+ "dev": true
+ },
+ "@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "18.7.18",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.18.tgz",
+ "integrity": "sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg==",
+ "dev": true
+ },
+ "@types/prop-types": {
+ "version": "15.7.5",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
+ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
+ "dev": true
+ },
+ "@types/react": {
+ "version": "18.0.18",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.18.tgz",
+ "integrity": "sha512-6hI08umYs6NaiHFEEGioXnxJ+oEhY3eRz8VCUaudZmGdtvPviCJB8mgaMxaDWAdPSYd4eFavrPk2QIolwbLYrg==",
+ "dev": true,
+ "requires": {
+ "@types/prop-types": "*",
+ "@types/scheduler": "*",
+ "csstype": "^3.0.2"
+ }
+ },
+ "@types/react-dom": {
+ "version": "18.0.6",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz",
+ "integrity": "sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==",
+ "dev": true,
+ "requires": {
+ "@types/react": "*"
+ }
+ },
+ "@types/scheduler": {
+ "version": "0.16.2",
+ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
+ "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==",
+ "dev": true
+ },
+ "@types/use-sync-external-store": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz",
+ "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA=="
+ },
+ "@types/uuid": {
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz",
+ "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==",
+ "dev": true
+ },
+ "@typescript-eslint/eslint-plugin": {
+ "version": "5.37.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.37.0.tgz",
+ "integrity": "sha512-Fde6W0IafXktz1UlnhGkrrmnnGpAo1kyX7dnyHHVrmwJOn72Oqm3eYtddrpOwwel2W8PAK9F3pIL5S+lfoM0og==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/scope-manager": "5.37.0",
+ "@typescript-eslint/type-utils": "5.37.0",
+ "@typescript-eslint/utils": "5.37.0",
+ "debug": "^4.3.4",
+ "functional-red-black-tree": "^1.0.1",
+ "ignore": "^5.2.0",
+ "regexpp": "^3.2.0",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
+ }
+ },
+ "@typescript-eslint/parser": {
+ "version": "5.37.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.37.0.tgz",
+ "integrity": "sha512-01VzI/ipYKuaG5PkE5+qyJ6m02fVALmMPY3Qq5BHflDx3y4VobbLdHQkSMg9VPRS4KdNt4oYTMaomFoHonBGAw==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/scope-manager": "5.37.0",
+ "@typescript-eslint/types": "5.37.0",
+ "@typescript-eslint/typescript-estree": "5.37.0",
+ "debug": "^4.3.4"
+ }
+ },
+ "@typescript-eslint/scope-manager": {
+ "version": "5.37.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.37.0.tgz",
+ "integrity": "sha512-F67MqrmSXGd/eZnujjtkPgBQzgespu/iCZ+54Ok9X5tALb9L2v3G+QBSoWkXG0p3lcTJsL+iXz5eLUEdSiJU9Q==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.37.0",
+ "@typescript-eslint/visitor-keys": "5.37.0"
+ }
+ },
+ "@typescript-eslint/type-utils": {
+ "version": "5.37.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.37.0.tgz",
+ "integrity": "sha512-BSx/O0Z0SXOF5tY0bNTBcDEKz2Ec20GVYvq/H/XNKiUorUFilH7NPbFUuiiyzWaSdN3PA8JV0OvYx0gH/5aFAQ==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/typescript-estree": "5.37.0",
+ "@typescript-eslint/utils": "5.37.0",
+ "debug": "^4.3.4",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "5.37.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.37.0.tgz",
+ "integrity": "sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA==",
+ "dev": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "5.37.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.37.0.tgz",
+ "integrity": "sha512-JkFoFIt/cx59iqEDSgIGnQpCTRv96MQnXCYvJi7QhBC24uyuzbD8wVbajMB1b9x4I0octYFJ3OwjAwNqk1AjDA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.37.0",
+ "@typescript-eslint/visitor-keys": "5.37.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
+ }
+ },
+ "@typescript-eslint/utils": {
+ "version": "5.37.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.37.0.tgz",
+ "integrity": "sha512-jUEJoQrWbZhmikbcWSMDuUSxEE7ID2W/QCV/uz10WtQqfOuKZUqFGjqLJ+qhDd17rjgp+QJPqTdPIBWwoob2NQ==",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.9",
+ "@typescript-eslint/scope-manager": "5.37.0",
+ "@typescript-eslint/types": "5.37.0",
+ "@typescript-eslint/typescript-estree": "5.37.0",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^3.0.0"
+ },
+ "dependencies": {
+ "eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true
+ }
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "5.37.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz",
+ "integrity": "sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.37.0",
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
+ "@vanilla-extract/css": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@vanilla-extract/css/-/css-1.9.0.tgz",
+ "integrity": "sha512-YERVutWIpttfkEAynBUgdHKMcSPjMAtu5IFfDfEdXmeygilV12S5WUYMzjrqu0F/LZBtqrHG5fa2tiCiFpay+w==",
+ "requires": {
+ "@emotion/hash": "^0.8.0",
+ "@vanilla-extract/private": "^1.0.3",
+ "chalk": "^4.1.1",
+ "css-what": "^5.0.1",
+ "cssesc": "^3.0.0",
+ "csstype": "^3.0.7",
+ "deep-object-diff": "^1.1.0",
+ "deepmerge": "^4.2.2",
+ "escape-string-regexp": "^4.0.0",
+ "media-query-parser": "^2.0.2",
+ "outdent": "^0.8.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "@vanilla-extract/css-utils": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@vanilla-extract/css-utils/-/css-utils-0.1.2.tgz",
+ "integrity": "sha512-qoxIu5E/UhJtoKsPL1JaU9nhTN0Xl5zYV0pScOgsvc3JN46TvTTt0L3GV8x3PQpZP7x3elw8BsC9czYbhJy9Gg=="
+ },
+ "@vanilla-extract/integration": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@vanilla-extract/integration/-/integration-5.0.1.tgz",
+ "integrity": "sha512-HRV/HvC/lihb9wT3x5s7pf5qLjqxSd9nBePJ10juOuMB5cl2ZClEcts076m9BuRKM3wRK2h7KuwkNsaUtjujxQ==",
+ "requires": {
+ "@vanilla-extract/css": "^1.7.2",
+ "esbuild": "^0.11.16",
+ "eval": "0.1.6",
+ "find-up": "^5.0.0",
+ "javascript-stringify": "^2.0.1",
+ "lodash": "^4.17.21",
+ "outdent": "^0.8.0"
+ },
+ "dependencies": {
+ "esbuild": {
+ "version": "0.11.23",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.11.23.tgz",
+ "integrity": "sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q=="
+ }
+ }
+ },
+ "@vanilla-extract/private": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@vanilla-extract/private/-/private-1.0.3.tgz",
+ "integrity": "sha512-17kVyLq3ePTKOkveHxXuIJZtGYs+cSoev7BlP+Lf4916qfDhk/HBjvlYDe8egrea7LNPHKwSZJK/bzZC+Q6AwQ=="
+ },
+ "@vanilla-extract/recipes": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/@vanilla-extract/recipes/-/recipes-0.2.5.tgz",
+ "integrity": "sha512-OWXUUiFJdswD3+Xg8f8avuw/vAHZRFS4oHqFeoV1TcO8cfbDQ0zmkreBHvyspoJU+qsyWK48yPHKSptqNRPy9Q==",
+ "requires": {}
+ },
+ "@vanilla-extract/vite-plugin": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/@vanilla-extract/vite-plugin/-/vite-plugin-3.5.0.tgz",
+ "integrity": "sha512-UMK2xUkfBclg8EAsR9V3mKQ44XjiyqpABZUBOJp3Vk8NDYHV8E/Ysn8xUB2WSJJnRLd4gqpHnivqRNRRfKV/gw==",
+ "requires": {
+ "@vanilla-extract/integration": "^5.0.0",
+ "outdent": "^0.8.0",
+ "postcss": "^8.3.6",
+ "postcss-load-config": "^3.1.0"
+ }
+ },
+ "@vitejs/plugin-react": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-2.1.0.tgz",
+ "integrity": "sha512-am6rPyyU3LzUYne3Gd9oj9c4Rzbq5hQnuGXSMT6Gujq45Il/+bunwq3lrB7wghLkiF45ygMwft37vgJ/NE8IAA==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.18.13",
+ "@babel/plugin-transform-react-jsx": "^7.18.10",
+ "@babel/plugin-transform-react-jsx-development": "^7.18.6",
+ "@babel/plugin-transform-react-jsx-self": "^7.18.6",
+ "@babel/plugin-transform-react-jsx-source": "^7.18.6",
+ "magic-string": "^0.26.2",
+ "react-refresh": "^0.14.0"
+ }
+ },
+ "acorn": {
+ "version": "8.8.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz",
+ "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "requires": {}
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "array-includes": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz",
+ "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5",
+ "get-intrinsic": "^1.1.1",
+ "is-string": "^1.0.7"
+ }
+ },
+ "array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true
+ },
+ "array.prototype.flat": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz",
+ "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.2",
+ "es-shim-unscopables": "^1.0.0"
+ }
+ },
+ "array.prototype.flatmap": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz",
+ "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.2",
+ "es-shim-unscopables": "^1.0.0"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "browserslist": {
+ "version": "4.21.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz",
+ "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "^1.0.30001370",
+ "electron-to-chromium": "^1.4.202",
+ "node-releases": "^2.0.6",
+ "update-browserslist-db": "^1.0.5"
+ }
+ },
+ "builtins": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz",
+ "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==",
+ "dev": true,
+ "requires": {
+ "semver": "^7.0.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
+ }
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001390",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001390.tgz",
+ "integrity": "sha512-sS4CaUM+/+vqQUlCvCJ2WtDlV81aWtHhqeEVkLokVJJa3ViN4zDxAGfq9R8i1m90uGHxo99cy10Od+lvn3hf0g==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
+ "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "css-what": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz",
+ "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw=="
+ },
+ "cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
+ },
+ "csstype": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz",
+ "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA=="
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "deep-object-diff": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.7.tgz",
+ "integrity": "sha512-QkgBca0mL08P6HiOjoqvmm6xOAl2W6CT2+34Ljhg0OeFan8cwlcdq8jrLKsBBuUFAZLsN5b6y491KdKEoSo9lg=="
+ },
+ "deepmerge": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
+ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
+ },
+ "define-properties": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
+ "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
+ "dev": true,
+ "requires": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "diff": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
+ "dev": true
+ },
+ "dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "requires": {
+ "path-type": "^4.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "electron-to-chromium": {
+ "version": "1.4.242",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.242.tgz",
+ "integrity": "sha512-nPdgMWtjjWGCtreW/2adkrB2jyHjClo9PtVhR6rW+oxa4E4Wom642Tn+5LslHP3XPL5MCpkn5/UEY60EXylNeQ==",
+ "dev": true
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.20.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.2.tgz",
+ "integrity": "sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "function.prototype.name": "^1.1.5",
+ "get-intrinsic": "^1.1.2",
+ "get-symbol-description": "^1.0.0",
+ "has": "^1.0.3",
+ "has-property-descriptors": "^1.0.0",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.3",
+ "is-callable": "^1.2.4",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.2",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.4.3",
+ "string.prototype.trimend": "^1.0.5",
+ "string.prototype.trimstart": "^1.0.5",
+ "unbox-primitive": "^1.0.2"
+ }
+ },
+ "es-shim-unscopables": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
+ "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "esbuild": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.7.tgz",
+ "integrity": "sha512-7V8tzllIbAQV1M4QoE52ImKu8hT/NLGlGXkiDsbEU5PS6K8Mn09ZnYoS+dcmHxOS9CRsV4IRAMdT3I67IyUNXw==",
+ "requires": {
+ "@esbuild/linux-loong64": "0.15.7",
+ "esbuild-android-64": "0.15.7",
+ "esbuild-android-arm64": "0.15.7",
+ "esbuild-darwin-64": "0.15.7",
+ "esbuild-darwin-arm64": "0.15.7",
+ "esbuild-freebsd-64": "0.15.7",
+ "esbuild-freebsd-arm64": "0.15.7",
+ "esbuild-linux-32": "0.15.7",
+ "esbuild-linux-64": "0.15.7",
+ "esbuild-linux-arm": "0.15.7",
+ "esbuild-linux-arm64": "0.15.7",
+ "esbuild-linux-mips64le": "0.15.7",
+ "esbuild-linux-ppc64le": "0.15.7",
+ "esbuild-linux-riscv64": "0.15.7",
+ "esbuild-linux-s390x": "0.15.7",
+ "esbuild-netbsd-64": "0.15.7",
+ "esbuild-openbsd-64": "0.15.7",
+ "esbuild-sunos-64": "0.15.7",
+ "esbuild-windows-32": "0.15.7",
+ "esbuild-windows-64": "0.15.7",
+ "esbuild-windows-arm64": "0.15.7"
+ }
+ },
+ "esbuild-android-64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.7.tgz",
+ "integrity": "sha512-p7rCvdsldhxQr3YHxptf1Jcd86dlhvc3EQmQJaZzzuAxefO9PvcI0GLOa5nCWem1AJ8iMRu9w0r5TG8pHmbi9w==",
+ "optional": true
+ },
+ "esbuild-android-arm64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.7.tgz",
+ "integrity": "sha512-L775l9ynJT7rVqRM5vo+9w5g2ysbOCfsdLV4CWanTZ1k/9Jb3IYlQ06VCI1edhcosTYJRECQFJa3eAvkx72eyQ==",
+ "optional": true
+ },
+ "esbuild-darwin-64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.7.tgz",
+ "integrity": "sha512-KGPt3r1c9ww009t2xLB6Vk0YyNOXh7hbjZ3EecHoVDxgtbUlYstMPDaReimKe6eOEfyY4hBEEeTvKwPsiH5WZg==",
+ "optional": true
+ },
+ "esbuild-darwin-arm64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.7.tgz",
+ "integrity": "sha512-kBIHvtVqbSGajN88lYMnR3aIleH3ABZLLFLxwL2stiuIGAjGlQW741NxVTpUHQXUmPzxi6POqc9npkXa8AcSZQ==",
+ "optional": true
+ },
+ "esbuild-freebsd-64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.7.tgz",
+ "integrity": "sha512-hESZB91qDLV5MEwNxzMxPfbjAhOmtfsr9Wnuci7pY6TtEh4UDuevmGmkUIjX/b+e/k4tcNBMf7SRQ2mdNuK/HQ==",
+ "optional": true
+ },
+ "esbuild-freebsd-arm64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.7.tgz",
+ "integrity": "sha512-dLFR0ChH5t+b3J8w0fVKGvtwSLWCv7GYT2Y2jFGulF1L5HftQLzVGN+6pi1SivuiVSmTh28FwUhi9PwQicXI6Q==",
+ "optional": true
+ },
+ "esbuild-linux-32": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.7.tgz",
+ "integrity": "sha512-v3gT/LsONGUZcjbt2swrMjwxo32NJzk+7sAgtxhGx1+ZmOFaTRXBAi1PPfgpeo/J//Un2jIKm/I+qqeo4caJvg==",
+ "optional": true
+ },
+ "esbuild-linux-64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.7.tgz",
+ "integrity": "sha512-LxXEfLAKwOVmm1yecpMmWERBshl+Kv5YJ/1KnyAr6HRHFW8cxOEsEfisD3sVl/RvHyW//lhYUVSuy9jGEfIRAQ==",
+ "optional": true
+ },
+ "esbuild-linux-arm": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.7.tgz",
+ "integrity": "sha512-JKgAHtMR5f75wJTeuNQbyznZZa+pjiUHV7sRZp42UNdyXC6TiUYMW/8z8yIBAr2Fpad8hM1royZKQisqPABPvQ==",
+ "optional": true
+ },
+ "esbuild-linux-arm64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.7.tgz",
+ "integrity": "sha512-P3cfhudpzWDkglutWgXcT2S7Ft7o2e3YDMrP1n0z2dlbUZghUkKCyaWw0zhp4KxEEzt/E7lmrtRu/pGWnwb9vw==",
+ "optional": true
+ },
+ "esbuild-linux-mips64le": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.7.tgz",
+ "integrity": "sha512-T7XKuxl0VpeFLCJXub6U+iybiqh0kM/bWOTb4qcPyDDwNVhLUiPcGdG2/0S7F93czUZOKP57YiLV8YQewgLHKw==",
+ "optional": true
+ },
+ "esbuild-linux-ppc64le": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.7.tgz",
+ "integrity": "sha512-6mGuC19WpFN7NYbecMIJjeQgvDb5aMuvyk0PDYBJrqAEMkTwg3Z98kEKuCm6THHRnrgsdr7bp4SruSAxEM4eJw==",
+ "optional": true
+ },
+ "esbuild-linux-riscv64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.7.tgz",
+ "integrity": "sha512-uUJsezbswAYo/X7OU/P+PuL/EI9WzxsEQXDekfwpQ23uGiooxqoLFAPmXPcRAt941vjlY9jtITEEikWMBr+F/g==",
+ "optional": true
+ },
+ "esbuild-linux-s390x": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.7.tgz",
+ "integrity": "sha512-+tO+xOyTNMc34rXlSxK7aCwJgvQyffqEM5MMdNDEeMU3ss0S6wKvbBOQfgd5jRPblfwJ6b+bKiz0g5nABpY0QQ==",
+ "optional": true
+ },
+ "esbuild-netbsd-64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.7.tgz",
+ "integrity": "sha512-yVc4Wz+Pu3cP5hzm5kIygNPrjar/v5WCSoRmIjCPWfBVJkZNb5brEGKUlf+0Y759D48BCWa0WHrWXaNy0DULTQ==",
+ "optional": true
+ },
+ "esbuild-openbsd-64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.7.tgz",
+ "integrity": "sha512-GsimbwC4FSR4lN3wf8XmTQ+r8/0YSQo21rWDL0XFFhLHKlzEA4SsT1Tl8bPYu00IU6UWSJ+b3fG/8SB69rcuEQ==",
+ "optional": true
+ },
+ "esbuild-sunos-64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.7.tgz",
+ "integrity": "sha512-8CDI1aL/ts0mDGbWzjEOGKXnU7p3rDzggHSBtVryQzkSOsjCHRVe0iFYUuhczlxU1R3LN/E7HgUO4NXzGGP/Ag==",
+ "optional": true
+ },
+ "esbuild-windows-32": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.7.tgz",
+ "integrity": "sha512-cOnKXUEPS8EGCzRSFa1x6NQjGhGsFlVgjhqGEbLTPsA7x4RRYiy2RKoArNUU4iR2vHmzqS5Gr84MEumO/wxYKA==",
+ "optional": true
+ },
+ "esbuild-windows-64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.7.tgz",
+ "integrity": "sha512-7MI08Ec2sTIDv+zH6StNBKO+2hGUYIT42GmFyW6MBBWWtJhTcQLinKS6ldIN1d52MXIbiJ6nXyCJ+LpL4jBm3Q==",
+ "optional": true
+ },
+ "esbuild-windows-arm64": {
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.7.tgz",
+ "integrity": "sha512-R06nmqBlWjKHddhRJYlqDd3Fabx9LFdKcjoOy08YLimwmsswlFBJV4rXzZCxz/b7ZJXvrZgj8DDv1ewE9+StMw==",
+ "optional": true
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true
+ },
+ "eslint": {
+ "version": "8.23.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.1.tgz",
+ "integrity": "sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg==",
+ "dev": true,
+ "requires": {
+ "@eslint/eslintrc": "^1.3.2",
+ "@humanwhocodes/config-array": "^0.10.4",
+ "@humanwhocodes/gitignore-to-minimatch": "^1.0.2",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.1.1",
+ "eslint-utils": "^3.0.0",
+ "eslint-visitor-keys": "^3.3.0",
+ "espree": "^9.4.0",
+ "esquery": "^1.4.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.1",
+ "globals": "^13.15.0",
+ "globby": "^11.1.0",
+ "grapheme-splitter": "^1.0.4",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "js-sdsl": "^4.1.4",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "regexpp": "^3.2.0",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true
+ },
+ "globals": {
+ "version": "13.17.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
+ "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "eslint-config-prettier": {
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz",
+ "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==",
+ "dev": true,
+ "requires": {}
+ },
+ "eslint-config-standard": {
+ "version": "17.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz",
+ "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==",
+ "dev": true,
+ "requires": {}
+ },
+ "eslint-config-standard-with-typescript": {
+ "version": "23.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-23.0.0.tgz",
+ "integrity": "sha512-iaaWifImn37Z1OXbNW1es7KI+S7D408F9ys0bpaQf2temeBWlvb0Nc5qHkOgYaRb5QxTZT32GGeN1gtswASOXA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/parser": "^5.0.0",
+ "eslint-config-standard": "17.0.0"
+ }
+ },
+ "eslint-import-resolver-node": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
+ "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.2.7",
+ "resolve": "^1.20.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "eslint-module-utils": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz",
+ "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.2.7"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "eslint-plugin-es": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz",
+ "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==",
+ "dev": true,
+ "requires": {
+ "eslint-utils": "^2.0.0",
+ "regexpp": "^3.0.0"
+ },
+ "dependencies": {
+ "eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-i18n-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-i18n-json/-/eslint-plugin-i18n-json-4.0.0.tgz",
+ "integrity": "sha512-rglbr9f/UaPN/OeiSLVVFlIh4RrXPTzX5qr4tqOdTj1Ryr8xIhUzriDDuyuPWliektO86c/zy1RldmBIOfDNsQ==",
+ "dev": true,
+ "requires": {
+ "@formatjs/icu-messageformat-parser": "^2.0.18",
+ "chalk": "^2.3.2",
+ "indent-string": "^3.2.0",
+ "jest-diff": "^22.0.3",
+ "lodash.get": "^4.4.2",
+ "lodash.isequal": "^4.5.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.set": "^4.3.2",
+ "log-symbols": "^2.2.0",
+ "parse-json": "^5.2.0",
+ "plur": "^2.1.2",
+ "pretty-format": "^22.0.3"
+ }
+ },
+ "eslint-plugin-i18next": {
+ "version": "6.0.0-4",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-i18next/-/eslint-plugin-i18next-6.0.0-4.tgz",
+ "integrity": "sha512-QF0TpFuk5HkdzKBirXsWvueX50GIu/mhTUtYWSUSHjJcLPugap890XGsyDhOSUpX/tNzX32K43v96InZr7+mmg==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.21",
+ "requireindex": "~1.1.0"
+ }
+ },
+ "eslint-plugin-import": {
+ "version": "2.26.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz",
+ "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.1.4",
+ "array.prototype.flat": "^1.2.5",
+ "debug": "^2.6.9",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.6",
+ "eslint-module-utils": "^2.7.3",
+ "has": "^1.0.3",
+ "is-core-module": "^2.8.1",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.1.2",
+ "object.values": "^1.1.5",
+ "resolve": "^1.22.0",
+ "tsconfig-paths": "^3.14.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-n": {
+ "version": "15.2.5",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.2.5.tgz",
+ "integrity": "sha512-8+BYsqiyZfpu6NXmdLOXVUfk8IocpCjpd8nMRRH0A9ulrcemhb2VI9RSJMEy5udx++A/YcVPD11zT8hpFq368g==",
+ "dev": true,
+ "requires": {
+ "builtins": "^5.0.1",
+ "eslint-plugin-es": "^4.1.0",
+ "eslint-utils": "^3.0.0",
+ "ignore": "^5.1.1",
+ "is-core-module": "^2.10.0",
+ "minimatch": "^3.1.2",
+ "resolve": "^1.22.1",
+ "semver": "^7.3.7"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
+ }
+ },
+ "eslint-plugin-promise": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.0.1.tgz",
+ "integrity": "sha512-uM4Tgo5u3UWQiroOyDEsYcVMOo7re3zmno0IZmB5auxoaQNIceAbXEkSt8RNrKtaYehARHG06pYK6K1JhtP0Zw==",
+ "dev": true,
+ "requires": {}
+ },
+ "eslint-plugin-react": {
+ "version": "7.31.8",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.8.tgz",
+ "integrity": "sha512-5lBTZmgQmARLLSYiwI71tiGVTLUuqXantZM6vlSY39OaDSV0M7+32K5DnLkmFrwTe+Ksz0ffuLUC91RUviVZfw==",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.1.5",
+ "array.prototype.flatmap": "^1.3.0",
+ "doctrine": "^2.1.0",
+ "estraverse": "^5.3.0",
+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.5",
+ "object.fromentries": "^2.0.5",
+ "object.hasown": "^1.1.1",
+ "object.values": "^1.1.5",
+ "prop-types": "^15.8.1",
+ "resolve": "^2.0.0-next.3",
+ "semver": "^6.3.0",
+ "string.prototype.matchall": "^4.0.7"
+ },
+ "dependencies": {
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "resolve": {
+ "version": "2.0.0-next.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz",
+ "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==",
+ "dev": true,
+ "requires": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "eslint-scope": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
+ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ }
+ },
+ "eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^2.0.0"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "dev": true
+ },
+ "espree": {
+ "version": "9.4.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz",
+ "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==",
+ "dev": true,
+ "requires": {
+ "acorn": "^8.8.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
+ "esquery": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
+ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.1.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.2.0"
+ }
+ },
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ },
+ "estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true
+ },
+ "eval": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.6.tgz",
+ "integrity": "sha512-o0XUw+5OGkXw4pJZzQoXUk+H87DHuC+7ZE//oSrRGtatTmr12oTnLfg6QOq9DyTt0c/p4TwzgmkKrBzWTSizyQ==",
+ "requires": {
+ "require-like": ">= 0.1.1"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "3.2.12",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
+ "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
+ }
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "fastq": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+ "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+ "dev": true,
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^3.0.4"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "requires": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ }
+ },
+ "flatted": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
+ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
+ "dev": true
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "optional": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "function.prototype.name": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
+ "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.0",
+ "functions-have-names": "^1.2.2"
+ }
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
+ "dev": true
+ },
+ "functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true
+ },
+ "gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true
+ },
+ "get-intrinsic": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
+ "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-symbol-description": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
+ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ }
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.3"
+ }
+ },
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true
+ },
+ "globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "requires": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ }
+ },
+ "grapheme-splitter": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
+ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+ "dev": true
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true
+ },
+ "has-property-descriptors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
+ "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.1.1"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "dev": true
+ },
+ "has-tostringtag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.2"
+ }
+ },
+ "history": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz",
+ "integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==",
+ "requires": {
+ "@babel/runtime": "^7.7.6"
+ }
+ },
+ "html-parse-stringify": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz",
+ "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==",
+ "requires": {
+ "void-elements": "3.1.0"
+ }
+ },
+ "i18next": {
+ "version": "21.9.2",
+ "resolved": "https://registry.npmjs.org/i18next/-/i18next-21.9.2.tgz",
+ "integrity": "sha512-00fVrLQOwy45nm3OtC9l1WiLK3nJlIYSljgCt0qzTaAy65aciMdRy9GsuW+a2AtKtdg9/njUGfRH30LRupV7ZQ==",
+ "requires": {
+ "@babel/runtime": "^7.17.2"
+ }
+ },
+ "ignore": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
+ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+ "dev": true
+ },
+ "immer": {
+ "version": "9.0.15",
+ "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz",
+ "integrity": "sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ=="
+ },
+ "import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
+ "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "internal-slot": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
+ "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.1.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ }
+ },
+ "irregular-plurals": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.4.0.tgz",
+ "integrity": "sha512-kniTIJmaZYiwa17eTtWIfm0K342seyugl6vuC8DiiyiRAJWAVlLkqGCI0Im0neo0TkXw+pRcKaBPRdcKHnQJ6Q==",
+ "dev": true
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true
+ },
+ "is-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "dev": true,
+ "requires": {
+ "has-bigints": "^1.0.1"
+ }
+ },
+ "is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-callable": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.6.tgz",
+ "integrity": "sha512-krO72EO2NptOGAX2KYyqbP9vYMlNAXdB53rq6f8LXY6RY7JdSR/3BD6wLUlPHSAesmY9vstNrjvqGaCiRK/91Q==",
+ "dev": true
+ },
+ "is-core-module": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz",
+ "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-negative-zero": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
+ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+ "dev": true
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
+ },
+ "is-number-object": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-shared-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2"
+ }
+ },
+ "is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-symbol": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.2"
+ }
+ },
+ "is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2"
+ }
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "javascript-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz",
+ "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg=="
+ },
+ "jest-diff": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-22.4.3.tgz",
+ "integrity": "sha512-/QqGvCDP5oZOF6PebDuLwrB2BMD8ffJv6TAGAdEVuDx1+uEgrHpSFrfrOiMRx2eJ1hgNjlQrOQEHetVwij90KA==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1",
+ "diff": "^3.2.0",
+ "jest-get-type": "^22.4.3",
+ "pretty-format": "^22.4.3"
+ }
+ },
+ "jest-get-type": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz",
+ "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==",
+ "dev": true
+ },
+ "js-sdsl": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.4.tgz",
+ "integrity": "sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true
+ },
+ "json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "json5": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
+ "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
+ "dev": true
+ },
+ "jsx-ast-utils": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz",
+ "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.1.5",
+ "object.assign": "^4.1.3"
+ }
+ },
+ "levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ }
+ },
+ "lilconfig": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz",
+ "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg=="
+ },
+ "lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true
+ },
+ "locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==",
+ "dev": true
+ },
+ "lodash.isequal": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+ "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==",
+ "dev": true
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
+ "dev": true
+ },
+ "lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "lodash.set": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz",
+ "integrity": "sha512-4hNPN5jlm/N/HLMCO43v8BXKq9Z7QdAGc/VGrRD61w8gN9g/6jF9A4L1pbUgBLCffi0w9VsXfTOij5x8iTyFvg==",
+ "dev": true
+ },
+ "log-symbols": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
+ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1"
+ }
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "magic-string": {
+ "version": "0.26.3",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.3.tgz",
+ "integrity": "sha512-u1Po0NDyFcwdg2nzHT88wSK0+Rih0N1M+Ph1Sp08k8yvFFU3KR72wryS7e1qMPJypt99WB7fIFVCA92mQrMjrg==",
+ "dev": true,
+ "requires": {
+ "sourcemap-codec": "^1.4.8"
+ }
+ },
+ "media-query-parser": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/media-query-parser/-/media-query-parser-2.0.2.tgz",
+ "integrity": "sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==",
+ "requires": {
+ "@babel/runtime": "^7.12.5"
+ }
+ },
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "nanoid": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
+ "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw=="
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "node-releases": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz",
+ "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "dev": true
+ },
+ "object-inspect": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
+ "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ },
+ "object.assign": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
+ "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "object.entries": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz",
+ "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
+ }
+ },
+ "object.fromentries": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz",
+ "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
+ }
+ },
+ "object.hasown": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz",
+ "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5"
+ }
+ },
+ "object.values": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
+ "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dev": true,
+ "requires": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ }
+ },
+ "outdent": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.8.0.tgz",
+ "integrity": "sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A=="
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "requires": {
+ "p-limit": "^3.0.2"
+ }
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ }
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true
+ },
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true
+ },
+ "plur": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz",
+ "integrity": "sha512-WhcHk576xg9y/iv6RWOuroZgsqvCbJN+XGvAypCJwLAYs2iWDp5LUmvaCdV6JR2O0SMBf8l6p7A94AyLCFVMlQ==",
+ "dev": true,
+ "requires": {
+ "irregular-plurals": "^1.0.0"
+ }
+ },
+ "postcss": {
+ "version": "8.4.16",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz",
+ "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==",
+ "requires": {
+ "nanoid": "^3.3.4",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ }
+ },
+ "postcss-load-config": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
+ "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
+ "requires": {
+ "lilconfig": "^2.0.5",
+ "yaml": "^1.10.2"
+ }
+ },
+ "prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true
+ },
+ "prettier": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz",
+ "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==",
+ "dev": true
+ },
+ "pretty-format": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-22.4.3.tgz",
+ "integrity": "sha512-S4oT9/sT6MN7/3COoOy+ZJeA92VmOnveLHgrwBE3Z1W5N9S2A1QGNYiE1z75DAENbJrXXUb+OWXhpJcg05QKQQ==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0",
+ "ansi-styles": "^3.2.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
+ "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
+ "dev": true
+ }
+ }
+ },
+ "prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ }
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true
+ },
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true
+ },
+ "react": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
+ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
+ "requires": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "react-dom": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
+ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.0"
+ }
+ },
+ "react-i18next": {
+ "version": "11.18.6",
+ "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.18.6.tgz",
+ "integrity": "sha512-yHb2F9BiT0lqoQDt8loZ5gWP331GwctHz9tYQ8A2EIEUu+CcEdjBLQWli1USG3RdWQt3W+jqQLg/d4rrQR96LA==",
+ "requires": {
+ "@babel/runtime": "^7.14.5",
+ "html-parse-stringify": "^3.0.1"
+ }
+ },
+ "react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "dev": true
+ },
+ "react-refresh": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz",
+ "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.13.9",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
+ "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
+ },
+ "regexp.prototype.flags": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
+ "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "functions-have-names": "^1.2.2"
+ }
+ },
+ "regexpp": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
+ "dev": true
+ },
+ "remove-accents": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz",
+ "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA=="
+ },
+ "require-like": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz",
+ "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A=="
+ },
+ "requireindex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz",
+ "integrity": "sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+ "requires": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true
+ },
+ "reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "rollup": {
+ "version": "2.78.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz",
+ "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==",
+ "requires": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "scheduler": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
+ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
+ "requires": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true
+ },
+ "source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
+ },
+ "sourcemap-codec": {
+ "version": "1.4.8",
+ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
+ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
+ "dev": true
+ },
+ "string.prototype.matchall": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz",
+ "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1",
+ "get-intrinsic": "^1.1.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.3",
+ "regexp.prototype.flags": "^1.4.1",
+ "side-channel": "^1.0.4"
+ }
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz",
+ "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5"
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz",
+ "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+ "dev": true
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "tsconfig-paths": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz",
+ "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==",
+ "dev": true,
+ "requires": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.1",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ },
+ "dependencies": {
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ }
+ }
+ },
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ },
+ "tsutils": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
+ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.8.1"
+ }
+ },
+ "type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1"
+ }
+ },
+ "type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true
+ },
+ "typescript": {
+ "version": "4.8.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz",
+ "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==",
+ "dev": true
+ },
+ "unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ }
+ },
+ "update-browserslist-db": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.7.tgz",
+ "integrity": "sha512-iN/XYesmZ2RmmWAiI4Z5rq0YqSiv0brj9Ce9CfhNE4xIW2h+MFxcgkxIzZ+ShkFPUkjU3gQ+3oypadD3RAMtrg==",
+ "dev": true,
+ "requires": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ }
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "use-sync-external-store": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
+ "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
+ "requires": {}
+ },
+ "uuid": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz",
+ "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg=="
+ },
+ "vite": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-3.1.0.tgz",
+ "integrity": "sha512-YBg3dUicDpDWFCGttmvMbVyS9ydjntwEjwXRj2KBFwSB8SxmGcudo1yb8FW5+M/G86aS8x828ujnzUVdsLjs9g==",
+ "requires": {
+ "esbuild": "^0.15.6",
+ "fsevents": "~2.3.2",
+ "postcss": "^8.4.16",
+ "resolve": "^1.22.1",
+ "rollup": "~2.78.0"
+ }
+ },
+ "vite-plugin-eslint": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/vite-plugin-eslint/-/vite-plugin-eslint-1.8.1.tgz",
+ "integrity": "sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==",
+ "dev": true,
+ "requires": {
+ "@rollup/pluginutils": "^4.2.1",
+ "@types/eslint": "^8.4.5",
+ "rollup": "^2.77.2"
+ }
+ },
+ "void-elements": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz",
+ "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w=="
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-boxed-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+ "dev": true,
+ "requires": {
+ "is-bigint": "^1.0.1",
+ "is-boolean-object": "^1.1.0",
+ "is-number-object": "^1.0.4",
+ "is-string": "^1.0.5",
+ "is-symbol": "^1.0.3"
+ }
+ },
+ "word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="
+ },
+ "yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="
+ },
+ "zustand": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.1.1.tgz",
+ "integrity": "sha512-h4F3WMqsZgvvaE0n3lThx4MM81Ls9xebjvrABNzf5+jb3/03YjNTSgZXeyrvXDArMeV9untvWXRw1tY+ntPYbA==",
+ "requires": {
+ "use-sync-external-store": "1.2.0"
+ }
+ }
+ }
+}
diff --git a/ui/frontend/build_src/package.json b/ui/frontend/build_src/package.json
new file mode 100644
index 00000000..e5b27a7e
--- /dev/null
+++ b/ui/frontend/build_src/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "react-ts",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "pretty": "prettier --write .",
+ "dev": "vite",
+ "build": "tsc && vite build --emptyOutDir",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "@headlessui/react": "^1.7.2",
+ "@tanstack/react-location": "^3.7.4",
+ "@tanstack/react-query": "^4.2.3",
+ "@tanstack/react-query-devtools": "^4.2.3",
+ "@vanilla-extract/css": "^1.9.0",
+ "@vanilla-extract/css-utils": "^0.1.2",
+ "@vanilla-extract/recipes": "^0.2.5",
+ "@vanilla-extract/vite-plugin": "^3.5.0",
+ "i18next": "^21.9.2",
+ "immer": "^9.0.15",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "react-i18next": "^11.18.6",
+ "uuid": "^9.0.0",
+ "zustand": "^4.1.1"
+ },
+ "devDependencies": {
+ "@types/node": "^18.7.18",
+ "@types/react": "^18.0.17",
+ "@types/react-dom": "^18.0.6",
+ "@types/uuid": "^8.3.4",
+ "@typescript-eslint/eslint-plugin": "^5.37.0",
+ "@typescript-eslint/parser": "^5.37.0",
+ "@vitejs/plugin-react": "^2.0.1",
+ "eslint": "^8.23.1",
+ "eslint-config-prettier": "^8.5.0",
+ "eslint-config-standard-with-typescript": "^23.0.0",
+ "eslint-plugin-i18n-json": "^4.0.0",
+ "eslint-plugin-i18next": "^6.0.0-4",
+ "eslint-plugin-import": "^2.26.0",
+ "eslint-plugin-n": "^15.2.5",
+ "eslint-plugin-promise": "^6.0.1",
+ "eslint-plugin-react": "^7.31.8",
+ "prettier": "^2.7.1",
+ "typescript": "^4.8.3",
+ "vite": "^3.0.7",
+ "vite-plugin-eslint": "^1.8.1"
+ },
+ "overrides": {
+ "@vanilla-extract/vite-plugin": {
+ "vite": "^3"
+ }
+ }
+}
diff --git a/ui/frontend/build_src/prettier.cjs b/ui/frontend/build_src/prettier.cjs
new file mode 100644
index 00000000..f57cec25
--- /dev/null
+++ b/ui/frontend/build_src/prettier.cjs
@@ -0,0 +1,7 @@
+module.exports = {
+ singleQuote: true,
+ tabWidth: 2,
+ semi: true,
+ trailingComma: "es5",
+ endOfLine: "lf",
+};
diff --git a/ui/frontend/build_src/src/App.tsx b/ui/frontend/build_src/src/App.tsx
new file mode 100644
index 00000000..f4e312e1
--- /dev/null
+++ b/ui/frontend/build_src/src/App.tsx
@@ -0,0 +1,21 @@
+import React from "react";
+import { ReactLocation, Router } from "@tanstack/react-location";
+import Home from "./pages/Home";
+import Settings from "./pages/Settings";
+import "./Translation/config";
+const location = new ReactLocation();
+
+function App() {
+
+ return (
+ },
+ { path: "/settings", element: },
+ ]}
+ >
+ );
+}
+
+export default App;
diff --git a/ui/frontend/build_src/src/Translation/config.ts b/ui/frontend/build_src/src/Translation/config.ts
new file mode 100644
index 00000000..31c0611b
--- /dev/null
+++ b/ui/frontend/build_src/src/Translation/config.ts
@@ -0,0 +1,32 @@
+import i18n from "i18next";
+// this should be updated to an interface
+import ENTranslation from "./locales/en/home.json";
+import ESTranslation from "./locales/es/home.json";
+import { initReactI18next } from "react-i18next";
+
+export const resources = {
+ en: {
+ translation: ENTranslation,
+ },
+ es: {
+ translation: ESTranslation,
+ },
+} as const;
+i18n
+ .use(initReactI18next)
+ .init({
+ lng: "en",
+ interpolation: {
+ escapeValue: false,
+ },
+ resources,
+ })
+ .then(() => {
+ console.log("i18n initialized");
+ })
+ .catch((err) => {
+ console.error("i18n initialization failed", err);
+ })
+ .finally(() => {
+ console.log("i18n initialization finished");
+ });
diff --git a/ui/frontend/build_src/src/Translation/locales/en/home.json b/ui/frontend/build_src/src/Translation/locales/en/home.json
new file mode 100644
index 00000000..143adf7e
--- /dev/null
+++ b/ui/frontend/build_src/src/Translation/locales/en/home.json
@@ -0,0 +1,110 @@
+{
+ "title": "Stable Diffusion UI",
+ "description": "",
+ "navbar": {
+ "home": "Home",
+ "history": "History",
+ "community": "Community",
+ "settings": "Settings"
+ },
+ "land-cre": {
+ "cp": "Create Profile",
+ "cp-place": "Profile name",
+ "pp": "Profile Picture",
+ "pp-disc": "",
+ "ast": "Automatically save to",
+ "ast-disc": "File path to auto save your creations",
+ "place": "File path",
+ "cre": "Create"
+ },
+ "land-pre": {
+ "user": "Username",
+ "add": "Add Profile"
+ },
+ "home": {
+ "status-starting": "Stable Diffusion is starting...",
+ "status-ready": "Stable Diffusion is ready to use!",
+ "status-error": "Stable Diffusion is not running!",
+ "editor-title": "Prompt",
+ "initial-img-txt": "Initial Image: (optional)",
+ "initial-img-btn": "Browse...",
+ "initial-img-text2": "No file selected.",
+ "make-img-btn": "Make Image",
+ "make-img-btn-stop": "Stop"
+ },
+ "in-paint": {
+ "txt": "In-Painting (select the area which the AI will paint into)",
+ "clear": "Clear"
+ },
+ "settings": {
+ "base-img": "Use base image:",
+ "seed": "Seed:",
+ "amount-of-img": "Amount of images to make:",
+ "how-many": "How many at once:",
+ "stream-img": "Stream images (this will slow down image generation):",
+ "width": "Width:",
+ "height": "Height:",
+ "sampler": "Sampler:",
+ "steps": "Number of inference steps:",
+ "guide-scale": "Guidance Scale:",
+ "prompt-str": "Prompt Strength:",
+ "live-preview": "Show a live preview of the image (disable this for faster image generation)",
+ "fix-face": "Fix incorrect faces and eyes (uses GFPGAN)",
+ "ups": "Upscale the image to 4x resolution using:",
+ "no-ups": "No Upscaling",
+ "corrected": "Show only the corrected/upscaled image"
+ },
+ "tags": {
+ "txt": "Image Modifiers (art styles, tags etc)"
+ },
+ "preview-prompt": {
+ "part1": "Type a prompt and press the \"Make Image\" button.",
+ "part2": "You can set an \"Initial Image\" if you want to guide the AI.\n",
+ "part3": "You can also add modifiers like \"Realistic\", \"Pencil Sketch\", \"ArtStation\" etc by browsing through the \"Image Modifiers\" section and selecting the desired modifiers.\n",
+ "part4": "Click \"Advanced Settings\" for additional settings like seed, image size, number of images to generate etc.",
+ "part5": "Enjoy! :)"
+ },
+ "current-task": "Current task",
+ "recent-create": "Recently Created",
+ "popup": {
+ "use-btn": "Use Image",
+ "use-btn2": "Use Image and Tags"
+ },
+ "history": {
+ "fave": "Favorites Only",
+ "search": "Search"
+ },
+ "advanced-settings": {
+ "sound": "Play sound on task completion",
+ "sound-disc": "Will play a sound so user can hear when image is done.",
+ "turbo": "Turbo mode",
+ "turbo-disc": "Generates images faster, but uses an additional 1 GB of GPU memory",
+ "cpu": "Use CPU instead of GPU",
+ "cpu-disc": "Warning: this will be *very* slow",
+ "gpu": "Use full precision",
+ "gpu-disc": "(for GPU-only. warning: this will consume more VRAM)",
+ "beta": "Beta Features",
+ "beta-disc": "Get the latest features immediately (but could be less stable). \nPlease restart the program after changing this.",
+ "save": "SAVE"
+ },
+ "storage": {
+ "ast": "Automatically save to",
+ "ast-disc": "File path to auto save your creations",
+ "place": "File path",
+ "cps": "Cross profile sharing",
+ "cps-disc": "Profiles will see suggestions from each other.",
+ "acb": "Allow cloud backup",
+ "acb-disc": "A button will show up for images on hover",
+ "acb-place": "Choose your",
+ "acc-api": "Api key",
+ "acb-api-place": "Your API key",
+ "save": "SAVE"
+ },
+ "import": {
+ "imp-btn": "IMPORT",
+ "exp-btn": "EXPORT",
+ "disc": "It is a good idea to leave the exported file as it is. Otherwise it may not import correctly",
+ "disc:2": "When importing, only profiles that are not already present on the will be added."
+ },
+ "about": "If you found this project useful and want to help keep it alive, please to help cover the cost of development and maintenance! Thank you for your support!\n\nPlease feel free to join the discord community or file an issue if you have any problems or suggestions in using this interface.\n\nDisclaimer: The authors of this project are not responsible for any content generated using this interface.\n\nThis license of this software forbids you from sharing any content that violates any laws, produce any harm to a person, disseminate any personal information that would be meant for harm,\nspread misinformation and target vulnerable groups. For the full list of restrictions please read the license.\n\nBy using this software, you consent to the terms and conditions of the license.\n"
+}
diff --git a/ui/frontend/build_src/src/Translation/locales/es/home.json b/ui/frontend/build_src/src/Translation/locales/es/home.json
new file mode 100644
index 00000000..1c7fe6f5
--- /dev/null
+++ b/ui/frontend/build_src/src/Translation/locales/es/home.json
@@ -0,0 +1,108 @@
+{
+ "title": "Stable Diffusion UI",
+ "description": "",
+ "navbar": {
+ "home": "Home",
+ "history": "History",
+ "community": "Community",
+ "settings": "Settings"
+ },
+ "land-cre": {
+ "cp": "Create Profile",
+ "cp-place": "Profile name",
+ "pp": "Profile Picture",
+ "pp-disc": "",
+ "ast": "Automatically save to",
+ "ast-disc": "File path to auto save your creations",
+ "place": "File path",
+ "cre": "Create"
+ },
+ "land-pre": {
+ "user": "Username",
+ "add": "Add Profile"
+ },
+ "home": {
+ "status-starting": "Stable Diffusion is starting...",
+ "status-ready": "Stable Diffusion is ready to use!",
+ "status-error": "Stable Diffusion is not running!",
+ "editor-title": "Prompt",
+ "initial-img-txt": "Initial Image: (optional)",
+ "initial-img-btn": "Browse...",
+ "initial-img-text2": "No file selected.",
+ "make-img-btn": "Make Image",
+ "make-img-btn-stop": "Stop"
+ },
+ "in-paint": {
+ "txt": "In-Painting (select the area which the AI will paint into)",
+ "clear": "Clear"
+ },
+ "settings": {
+ "base-img": "Use base image:",
+ "seed": "Seed:",
+ "amount-of-img": "Amount of images to make:",
+ "how-many": "How many at once:",
+ "width": "Width:",
+ "height": "Height:",
+ "steps": "Number of inference steps:",
+ "guide-scale": "Guidance Scale:",
+ "prompt-str": "Prompt Strength:",
+ "live-preview": "Show a live preview of the image (disable this for faster image generation)",
+ "fix-face": "Fix incorrect faces and eyes (uses GFPGAN)",
+ "ups": "Upscale the image to 4x resolution using:",
+ "no-ups": "No Upscaling",
+ "corrected": "Show only the corrected/upscaled image"
+ },
+ "tags": {
+ "txt": "Image Modifiers (art styles, tags etc)"
+ },
+ "preview-prompt": {
+ "part1": "Type a prompt and press the \"Make Image\" button.",
+ "part2": "You can set an \"Initial Image\" if you want to guide the AI.\n",
+ "part3": "You can also add modifiers like \"Realistic\", \"Pencil Sketch\", \"ArtStation\" etc by browsing through the \"Image Modifiers\" section and selecting the desired modifiers.\n",
+ "part4": "Click \"Advanced Settings\" for additional settings like seed, image size, number of images to generate etc.",
+ "part5": "Enjoy! :)"
+ },
+ "current-task": "Current task",
+ "recent-create": "Recently Created",
+ "popup": {
+ "use-btn": "Use Image",
+ "use-btn2": "Use Image and Tags"
+ },
+ "history": {
+ "fave": "Favorites Only",
+ "search": "Search"
+ },
+ "advanced-settings": {
+ "sound": "Play sound on task completion",
+ "sound-disc": "Will play a sound so user can hear when image is done.",
+ "turbo": "Turbo mode",
+ "turbo-disc": "Generates images faster, but uses an additional 1 GB of GPU memory",
+ "cpu": "Use CPU instead of GPU",
+ "cpu-disc": "Warning: this will be *very* slow",
+ "gpu": "Use full precision",
+ "gpu-disc": "(for GPU-only. warning: this will consume more VRAM)",
+ "beta": "Beta Features",
+ "beta-disc": "Get the latest features immediately (but could be less stable). \nPlease restart the program after changing this.",
+ "save": "SAVE"
+ },
+ "storage": {
+ "ast": "Automatically save to",
+ "ast-disc": "File path to auto save your creations",
+ "place": "File path",
+ "cps": "Cross profile sharing",
+ "cps-disc": "Profiles will see suggestions from each other.",
+ "acb": "Allow cloud backup",
+ "acb-disc": "A button will show up for images on hover",
+ "acb-place": "Choose your",
+ "acc-api": "Api key",
+ "acb-api-place": "Your API key",
+ "save": "SAVE"
+ },
+ "import": {
+ "imp-btn": "IMPORT",
+ "exp-btn": "EXPORT",
+ "disc": "It is a good idea to leave the exported file as it is. Otherwise it may not import correctly",
+ "disc:2": "When importing, only profiles that are not already present on the will be added."
+ },
+ "about": "If you found this project useful and want to help keep it alive, please to help cover the cost of development and maintenance! Thank you for your support!\n\nPlease feel free to join the discord community or file an issue if you have any problems or suggestions in using this interface.\n\nDisclaimer: The authors of this project are not responsible for any content generated using this interface.\n\nThis license of this software forbids you from sharing any content that violates any laws, produce any harm to a person, disseminate any personal information that would be meant for harm,\nspread misinformation and target vulnerable groups. For the full list of restrictions please read the license.\n\nBy using this software, you consent to the terms and conditions of the license.\n"
+}
diff --git a/ui/frontend/build_src/src/api/index.ts b/ui/frontend/build_src/src/api/index.ts
new file mode 100644
index 00000000..2fba8a5f
--- /dev/null
+++ b/ui/frontend/build_src/src/api/index.ts
@@ -0,0 +1,146 @@
+/**
+ * basic server health
+ */
+
+import type { SAMPLER_OPTIONS } from "../stores/imageCreateStore";
+
+// when we are on dev we want to specifiy 9000 as the port for the backend
+// when we are on prod we want be realtive to the current url
+export const API_URL = import.meta.env.DEV ? "http://localhost:9000" : "";
+
+export const HEALTH_PING_INTERVAL = 5000; // 5 seconds
+export const healthPing = async () => {
+ const pingUrl = `${API_URL}/ping`;
+ const response = await fetch(pingUrl);
+ const data = await response.json();
+ return data;
+};
+
+/**
+ * the local list of modifications
+ */
+export const loadModifications = async () => {
+ const response = await fetch(`${API_URL}/modifiers.json`);
+ const data = await response.json();
+ return data;
+};
+
+export const getSaveDirectory = async () => {
+ const response = await fetch(`${API_URL}/output_dir`);
+ const data = await response.json();
+ return data[0];
+};
+
+export const KEY_CONFIG = "config";
+export const getConfig = async () => {
+ const response = await fetch(`${API_URL}/app_config`);
+ const data = await response.json();
+ return data;
+};
+
+export const KEY_TOGGLE_CONFIG = "toggle_config";
+export const toggleBetaConfig = async (branch: string) => {
+ const response = await fetch(`${API_URL}/app_config`, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ update_branch: branch,
+ }),
+ });
+ const data = await response.json();
+ return data;
+};
+
+/**
+ * post a new request for an image
+ */
+// TODO; put hese some place better
+export interface ImageRequest {
+ session_id: string;
+ prompt: string;
+ negative_prompt: string;
+ seed: number;
+ num_outputs: number;
+ num_inference_steps: number;
+ guidance_scale: number;
+ width:
+ | 128
+ | 192
+ | 256
+ | 320
+ | 384
+ | 448
+ | 512
+ | 576
+ | 640
+ | 704
+ | 768
+ | 832
+ | 896
+ | 960
+ | 1024;
+ height:
+ | 128
+ | 192
+ | 256
+ | 320
+ | 384
+ | 448
+ | 512
+ | 576
+ | 640
+ | 704
+ | 768
+ | 832
+ | 896
+ | 960
+ | 1024;
+ // allow_nsfw: boolean
+ turbo: boolean;
+ use_cpu: boolean;
+ use_full_precision: boolean;
+ save_to_disk_path: null | string;
+ use_face_correction: null | "GFPGANv1.3";
+ use_upscale: null | "RealESRGAN_x4plus" | "RealESRGAN_x4plus_anime_6B" | "";
+ show_only_filtered_image: boolean;
+ init_image: undefined | string;
+ prompt_strength: undefined | number;
+ mask: undefined | string;
+ sampler: typeof SAMPLER_OPTIONS[number];
+ stream_progress_updates: true;
+ stream_image_progress: boolean;
+
+}
+
+export interface ImageOutput {
+ data: string;
+ path_abs: string | null;
+ seed: number;
+}
+
+export interface ImageReturnType {
+ output: ImageOutput[];
+ request: ImageRequest;
+ status: string;
+}
+
+export const MakeImageKey = "MakeImage";
+export const doMakeImage = async (reqBody: ImageRequest) => {
+ const res = await fetch(`${API_URL}/image`, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(reqBody),
+ });
+ return res;
+};
+
+export const doStopImage = async () => {
+
+ const response = await fetch(`${API_URL}/image/stop`);
+ const data = await response.json();
+ return data;
+};
\ No newline at end of file
diff --git a/ui/frontend/build_src/src/components/_recipes/button.css.ts b/ui/frontend/build_src/src/components/_recipes/button.css.ts
new file mode 100644
index 00000000..d801ee14
--- /dev/null
+++ b/ui/frontend/build_src/src/components/_recipes/button.css.ts
@@ -0,0 +1,140 @@
+// would prefer to use a var here, but it doesn't work
+// vars: {
+// '--button-base-saturation': vars.colorMod.saturation.normal,
+// '--button-base-lightness': vars.colorMod.lightness.normal,
+// },
+
+
+import { recipe } from "@vanilla-extract/recipes";
+import { vars } from "../../styles/theme/index.css";
+
+export const buttonStyle = recipe({
+
+ base: {
+ fontSize: vars.fonts.sizes.Subheadline,
+ fontWeight: "bold",
+ color: vars.colors.text.normal,
+ padding: vars.spacing.small,
+ border: "0",
+ borderRadius: vars.trim.smallBorderRadius,
+ },
+
+ variants: {
+ color: {
+ primary: {
+ // @ts-expect-error
+ '--button-hue': vars.brandHue,
+ '--button-base-saturation': vars.colorMod.saturation.normal,
+ '--button-base-lightness': vars.colorMod.lightness.normal,
+ },
+ secondary: {
+ // @ts-expect-error
+ '--button-hue': vars.secondaryHue,
+ '--button-base-saturation': vars.colorMod.saturation.normal,
+ '--button-base-lightness': vars.colorMod.lightness.normal,
+ },
+ tertiary: {
+ // @ts-expect-error
+ '--button-hue': vars.tertiaryHue,
+ '--button-base-saturation': vars.colorMod.saturation.normal,
+ '--button-base-lightness': vars.colorMod.lightness.normal,
+ },
+ cancel: {
+ // @ts-expect-error
+ '--button-hue': vars.errorHue,
+ '--button-base-saturation': vars.colorMod.saturation.normal,
+ '--button-base-lightness': vars.colorMod.lightness.normal,
+ },
+ accent: {
+ // @ts-expect-error
+ '--button-hue': vars.backgroundAccentHue,
+ '--button-base-saturation': vars.backgroundAccentSaturation,
+ '--button-base-lightness': vars.backgroundAccentLightness,
+ },
+ clear: {
+ backgroundColor: "transparent",
+ },
+ },
+
+ type: {
+ fill: {
+ backgroundColor: `hsl(var(--button-hue),var(--button-base-saturation),${vars.colorMod.lightness.normal})`,
+ border: `1px solid hsl(var(--button-hue),var(--button-base-saturation),${vars.colorMod.lightness.normal})`,
+ ":hover": {
+ backgroundColor: `hsl(var(--button-hue),${vars.colorMod.saturation.bright},${vars.colorMod.lightness.normal})`,
+ border: `1px solid hsl(var(--button-hue),${vars.colorMod.saturation.bright},${vars.colorMod.lightness.normal})`,
+ },
+ ":active": {
+ backgroundColor: `hsl(var(--button-hue),${vars.colorMod.saturation.bright},${vars.colorMod.lightness.dim})`,
+ border: `1px solid hsl(var(--button-hue),${vars.colorMod.saturation.bright},${vars.colorMod.lightness.dim})`,
+ },
+
+ ":focus": {
+ backgroundColor: `hsl(var(--button-hue),${vars.colorMod.saturation.bright},${vars.colorMod.lightness.dim})`,
+ border: `1px solid hsl(var(--button-hue),${vars.colorMod.saturation.bright},${vars.colorMod.lightness.dim})`,
+ },
+
+ ":disabled": {
+ backgroundColor: `hsl(var(--button-hue),${vars.colorMod.saturation.dim},${vars.colorMod.lightness.dim})`,
+ border: `1px solid hsl(var(--button-hue),${vars.colorMod.saturation.dim},${vars.colorMod.lightness.dim})`,
+ },
+ },
+ outline: {
+ backgroundColor: "transparent",
+ border: `1px solid hsl(var(--button-hue),var(--button-base-saturation),${vars.colorMod.lightness.normal})`,
+ ":hover": {
+ borderColor: `hsl(var(--button-hue),${vars.colorMod.saturation.bright},${vars.colorMod.lightness.normal})`,
+ },
+
+ ":active": {
+ borderColor: `hsl(var(--button-hue),${vars.colorMod.saturation.bright},${vars.colorMod.lightness.dim})`,
+ },
+
+ ":focus": {
+ borderColor: `hsl(var(--button-hue),${vars.colorMod.saturation.bright},${vars.colorMod.lightness.dim})`,
+ },
+
+ ":disabled": {
+ borderColor: `hsl(var(--button-hue),${vars.colorMod.saturation.dim},${vars.colorMod.lightness.dim})`,
+ },
+ },
+ action: {
+ backgroundColor: "transparent",
+ color: `hsl(var(--button-hue),var(--button-base-saturation),${vars.colorMod.lightness.normal})`,
+ textDecoration: "underline",
+ ":hover": {
+ color: `hsl(var(--button-hue),${vars.colorMod.saturation.bright},${vars.colorMod.lightness.normal})`,
+ },
+
+ ":active": {
+ color: `hsl(var(--button-hue),${vars.colorMod.saturation.bright},${vars.colorMod.lightness.dim})`,
+ },
+
+ ":focus": {
+ color: `hsl(var(--button-hue),${vars.colorMod.saturation.bright},${vars.colorMod.lightness.dim})`,
+ },
+
+ ":disabled": {
+ color: `hsl(var(--button-hue),${vars.colorMod.saturation.dim},${vars.colorMod.lightness.dim})`,
+ },
+ }
+ },
+
+ size: {
+ slim: {
+ padding: vars.spacing.min,
+ fontSize: vars.fonts.sizes.Caption,
+ },
+ large: {
+ width: "100%",
+ fontSize: vars.fonts.sizes.Headline,
+ }
+ }
+ },
+
+ defaultVariants: {
+ color: "primary",
+ type: "fill",
+ },
+
+});
\ No newline at end of file
diff --git a/ui/frontend/build_src/src/components/_recipes/card.css.ts b/ui/frontend/build_src/src/components/_recipes/card.css.ts
new file mode 100644
index 00000000..efec2fa1
--- /dev/null
+++ b/ui/frontend/build_src/src/components/_recipes/card.css.ts
@@ -0,0 +1,51 @@
+import { recipe } from "@vanilla-extract/recipes";
+import { vars } from "../../styles/theme/index.css";
+
+export const card = recipe({
+
+ base: {
+ color: vars.colors.text.normal,
+ padding: vars.spacing.medium,
+ },
+
+ variants: {
+ backing: {
+ normal: {
+ background: vars.backgroundMain,
+ },
+ light: {
+ background: vars.backgroundLight,
+ },
+ dark: {
+ background: vars.backgroundDark,
+ },
+ },
+
+ rounded: {
+ true: {
+ borderRadius: vars.trim.smallBorderRadius,
+ },
+ },
+
+ info: {
+ true: {
+ background: vars.backgroundDark,
+ border: `1px solid ${vars.backgroundAccentMain}`,
+ },
+ },
+
+ level: {
+ flat: {},
+ 1: { boxShadow: "0 4px 8px 0 rgba(0, 0, 0, 0.15), 0 6px 20px 0 rgba(0, 0, 0, 0.15)" },
+ 2: { boxShadow: "0 4px 8px 0 rgba(0, 0, 0, 0.15), 0 6px 20px 0 rgba(0, 0, 0, 0.15)" },
+ 3: { boxShadow: "0 4px 8px 0 rgba(0, 0, 0, 0.15), 0 6px 20px 0 rgba(0, 0, 0, 0.15)" },
+ },
+ },
+ defaultVariants: {
+ backing: "light",
+ level: 'flat',
+ rounded: true,
+ },
+});
+
+
diff --git a/ui/frontend/build_src/src/components/_recipes/index.css.ts b/ui/frontend/build_src/src/components/_recipes/index.css.ts
new file mode 100644
index 00000000..578e13a3
--- /dev/null
+++ b/ui/frontend/build_src/src/components/_recipes/index.css.ts
@@ -0,0 +1,24 @@
+import { recipe } from "@vanilla-extract/recipes";
+import { vars } from "../../styles/theme/index.css";
+
+
+export const card = recipe({
+ base: {
+ background: vars.backgroundMain,
+ color: vars.colors.text.normal,
+ padding: vars.spacing.medium,
+ borderRadius: vars.trim.smallBorderRadius,
+ },
+ variants: {
+ level: {
+ 1: { boxShadow: "0 4px 8px 0 rgba(0, 0, 0, 0.15), 0 6px 20px 0 rgba(0, 0, 0, 0.15)" },
+ 2: { boxShadow: "0 4px 8px 0 rgba(0, 0, 0, 0.15), 0 6px 20px 0 rgba(0, 0, 0, 0.15)" },
+ 3: { boxShadow: "0 4px 8px 0 rgba(0, 0, 0, 0.15), 0 6px 20px 0 rgba(0, 0, 0, 0.15)" },
+ },
+ },
+ defaultVariants: {
+ level: 1,
+ },
+});
+
+
diff --git a/ui/frontend/build_src/src/components/_recipes/popover_headless.css.ts b/ui/frontend/build_src/src/components/_recipes/popover_headless.css.ts
new file mode 100644
index 00000000..b006c14c
--- /dev/null
+++ b/ui/frontend/build_src/src/components/_recipes/popover_headless.css.ts
@@ -0,0 +1,39 @@
+
+import { style, globalStyle } from "@vanilla-extract/css";
+
+// import { recipe } from "@vanilla-extract/recipes";
+import { vars } from "../../styles/theme/index.css";
+
+import {
+ card
+} from "./card.css";
+
+export const PopoverMain = style({
+ position: 'relative'
+});
+
+export const PopoverButtonStyle = style({
+ backgroundColor: "transparent",
+ border: "0 none",
+ cursor: "pointer",
+ padding: vars.spacing.none,
+ fontSize: vars.fonts.sizes.Subheadline,
+});
+
+globalStyle(`${PopoverButtonStyle} > i`, {
+ marginRight: vars.spacing.small,
+});
+
+export const PopoverPanelMain = style([card(
+ {
+ backing: 'dark',
+ level: 2,
+ }
+), {
+ position: 'absolute',
+ top: '100%',
+ right: '0',
+ zIndex: '1',
+}]);
+
+
diff --git a/ui/frontend/build_src/src/components/_recipes/switch_headless.css.ts b/ui/frontend/build_src/src/components/_recipes/switch_headless.css.ts
new file mode 100644
index 00000000..22a5be25
--- /dev/null
+++ b/ui/frontend/build_src/src/components/_recipes/switch_headless.css.ts
@@ -0,0 +1,19 @@
+import { style, } from "@vanilla-extract/css";
+
+// import { recipe } from "@vanilla-extract/recipes";
+import { vars } from "../../styles/theme/index.css";
+
+export const SwitchGroupMain = style({
+});
+
+export const SwitchMain = style({
+});
+
+export const SwitchLabel = style({
+});
+
+export const SwitchEnabled = style({
+});
+
+export const SwitchPill = style({
+});
diff --git a/ui/frontend/build_src/src/components/_recipes/tabs_headless.css.ts b/ui/frontend/build_src/src/components/_recipes/tabs_headless.css.ts
new file mode 100644
index 00000000..b66d4a9b
--- /dev/null
+++ b/ui/frontend/build_src/src/components/_recipes/tabs_headless.css.ts
@@ -0,0 +1,60 @@
+import { style } from '@vanilla-extract/css';
+import { recipe } from "@vanilla-extract/recipes";
+import { vars } from "../../styles/theme/index.css";
+
+export const tabStyles = recipe({
+ base: {
+ background: vars.backgroundMain,
+ color: vars.colors.text.normal,
+ padding: vars.spacing.small,
+ borderRadius: `${vars.trim.smallBorderRadius} ${vars.trim.smallBorderRadius} 0 0`,
+ border: `1px solid ${vars.backgroundLight}`,
+ borderBottom: 'none',
+ marginLeft: vars.spacing.small,
+ boxShadow: `0px -1px 4px -2px ${vars.backgroundAccentMain} inset`,
+ width: 'fit-content',
+ ':focus': {
+ outline: 'none',
+ },
+ },
+
+ variants: {
+ selected: {
+ true: {
+ background: vars.backgroundLight,
+ color: vars.colors.text.normal,
+ boxShadow: `0px -1px 4px -2px ${vars.backgroundDark} inset`,
+ }
+ }
+ }
+});
+
+export const tabPanelStyles = recipe({
+ base: {
+ color: vars.colors.text.normal,
+ // borderRadius: `0 0 ${vars.trim.smallBorderRadius} ${vars.trim.smallBorderRadius}`,
+ background: vars.backgroundLight,
+ padding: vars.spacing.medium,
+ flexGrow: 1,
+ overflow: 'auto',
+ // "::-webkit-scrollbar": {
+ // width: "4px",
+ // },
+
+ },
+ variants: {
+
+ backing: {
+ normal: {
+ background: vars.backgroundMain,
+ },
+ light: {
+ background: vars.backgroundLight,
+ },
+ dark: {
+ background: vars.backgroundDark,
+ },
+ },
+ },
+});
+
diff --git a/ui/frontend/build_src/src/components/layouts/CreationTabs/creationTabs.css.ts b/ui/frontend/build_src/src/components/layouts/CreationTabs/creationTabs.css.ts
new file mode 100644
index 00000000..8b1e9b35
--- /dev/null
+++ b/ui/frontend/build_src/src/components/layouts/CreationTabs/creationTabs.css.ts
@@ -0,0 +1,34 @@
+import { style, globalStyle } from "@vanilla-extract/css";
+import { vars } from "../../../styles/theme/index.css";
+import {
+ tabPanelStyles,
+} from "../../_recipes/tabs_headless.css";
+
+
+export const TabpanelScrollFlop = style([tabPanelStyles(), {
+ direction: 'rtl',
+ // position: 'relative',
+ overflow: 'overlay',
+ "::-webkit-scrollbar": {
+ position: 'absolute',
+ width: "6px",
+ backgroundColor: vars.backgroundAccentMain,
+ },
+
+ "::-webkit-scrollbar-thumb": {
+ backgroundColor: vars.backgroundDark,
+ borderRadius: "4px",
+ },
+
+
+ // "::-webkit-scrollbar-button: {
+ // backgroundColor: vars.backgroundDark,
+ // }
+
+
+}]);
+
+globalStyle(`${TabpanelScrollFlop} > *`, {
+ direction: 'ltr',
+
+});
diff --git a/ui/frontend/build_src/src/components/layouts/CreationTabs/index.tsx b/ui/frontend/build_src/src/components/layouts/CreationTabs/index.tsx
new file mode 100644
index 00000000..4d4d4965
--- /dev/null
+++ b/ui/frontend/build_src/src/components/layouts/CreationTabs/index.tsx
@@ -0,0 +1,61 @@
+import React, { Fragment } from "react";
+import { Tab } from '@headlessui/react';
+
+
+
+import CreationPanel from "../../organisms/creationPanel";
+import QueueDisplay from "../../organisms/queueDisplay";
+
+import ProcessingStatus from "../../molecules/queueStatusTab";
+
+import {
+ tabStyles,
+} from "../../_recipes/tabs_headless.css";
+
+import {
+ TabpanelScrollFlop
+} from "./creationTabs.css";
+
+export default function CreationTabs() {
+
+ return (
+
+
+
+ {({ selected }) => (
+
+ Create
+
+ )}
+
+
+
+ {({ selected }) => (
+
+
+
+
+ )}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/ui/frontend/build_src/src/components/layouts/basicDisplay/basicDisplay.css.ts b/ui/frontend/build_src/src/components/layouts/basicDisplay/basicDisplay.css.ts
new file mode 100644
index 00000000..29ed38b6
--- /dev/null
+++ b/ui/frontend/build_src/src/components/layouts/basicDisplay/basicDisplay.css.ts
@@ -0,0 +1,107 @@
+import { style, globalStyle } from "@vanilla-extract/css";
+import { vars } from "../../../styles/theme/index.css";
+
+import {
+ tabStyles
+} from "../../_recipes/tabs_headless.css";
+
+
+export const basicDisplayLayout = style({
+ width: "100%",
+ height: "100%",
+ display: "grid",
+ gridTemplateColumns: "1fr 250px",
+ gridTemplateRows: "1fr 250px",
+ gridTemplateAreas: `
+ "content info"
+ "history history"`,
+
+ overflow: "hidden",
+
+ selectors: {
+ '&[data-hide-info]': {
+ gridTemplateColumns: "1fr",
+ gridTemplateRows: "1fr 250px",
+ // gridTemplateAreas: `
+ // "content"
+ // "history"`,
+ },
+ '&[data-hide-history]': {
+ gridTemplateColumns: "1fr 250px",
+ gridTemplateRows: "1fr 0px",
+ // gridTemplateAreas: `
+ // "content info"`,
+ },
+ '&[data-hide-info][data-hide-history]': {
+ gridTemplateColumns: "1fr 0px",
+ gridTemplateRows: "1fr 0px",
+ // gridTemplateAreas: `
+ // "content"`,
+ },
+ },
+
+
+ // "@media": {
+ // "screen and (max-width: 800px)": {
+ // gridTemplateColumns: "1fr",
+ // gridTemplateRows: "100px 300px 1fr",
+ // gridTemplateAreas: `
+ // "header"
+ // "create"
+ // "display"
+ // `,
+ // },
+ // },
+
+});
+
+// globalStyle(`${basicDisplayLayout}.hideHistory`, {
+
+// });
+
+export const contentLayout = style({
+ gridArea: "content",
+});
+
+export const infoLayout = style({
+ gridArea: "info",
+ position: "relative",
+});
+
+export const historyLayout = style({
+ gridArea: "history",
+ position: "relative",
+});
+
+globalStyle(`${historyLayout} > button`, {
+ position: "absolute",
+ top: '-29px',
+});
+
+export const displayContainer = style({
+ flexGrow: 1,
+ overflow: 'auto',
+ display: "flex",
+});
+
+export const displayData = style({
+ width: '250px',
+ height: '100%',
+ backgroundColor: 'rebeccapurple',
+ position: 'relative',
+});
+
+export const DataTab = style([tabStyles(), {
+ position: 'absolute',
+ top: '0',
+ left: '0',
+
+ // pretty sure this is a magic number
+ transformOrigin: '37% 275%',
+ transform: 'rotate(-90deg)',
+}]);
+
+
+// export const previousImages = style({
+// minHeight: '250px',
+// });
diff --git a/ui/frontend/build_src/src/components/layouts/basicDisplay/index.tsx b/ui/frontend/build_src/src/components/layouts/basicDisplay/index.tsx
new file mode 100644
index 00000000..814ec58f
--- /dev/null
+++ b/ui/frontend/build_src/src/components/layouts/basicDisplay/index.tsx
@@ -0,0 +1,65 @@
+
+import React, { useState, useRef, useEffect } from "react";
+import { Transition } from '@headlessui/react'
+
+import CurrentDisplay from "../../organisms/currentDisplay";
+import CompletedImages from "../../organisms/completedImages";
+import CurrentInfo from "../../organisms/currentInfo";
+
+
+import {
+ tabStyles
+} from "../../_recipes/tabs_headless.css";
+
+import {
+ basicDisplayLayout,
+ contentLayout,
+ infoLayout,
+ historyLayout
+} from "./basicDisplay.css";
+
+export default function BasicDisplay() {
+
+ const [isShowingHistory, setIsShowingHistory] = useState(true)
+
+ const layoutRef = useRef(null);
+
+ useEffect(() => {
+
+ if (layoutRef.current != undefined) {
+ // set the hide-history data attribute
+ if (isShowingHistory) {
+ layoutRef.current.removeAttribute('data-hide-history');
+ }
+ else {
+ // layoutRef.current.dataset.hideHistory = "true";
+ layoutRef.current.setAttribute('data-hide-history', '');
+ }
+ }
+ }, [layoutRef, isShowingHistory]);
+
+
+ return (
+
+
+
+
+
+ {/*
+
+
*/}
+
+
+ setIsShowingHistory((isShowingHistory) => !isShowingHistory)}>
+ {isShowingHistory ? "Hide History" : "Show History"}
+
+
+
+
+ );
+}
diff --git a/ui/frontend/build_src/src/components/molecules/audioDing/index.tsx b/ui/frontend/build_src/src/components/molecules/audioDing/index.tsx
new file mode 100644
index 00000000..fbffb91a
--- /dev/null
+++ b/ui/frontend/build_src/src/components/molecules/audioDing/index.tsx
@@ -0,0 +1,16 @@
+import React from "react";
+import { API_URL } from "../../../api";
+
+const url = `${API_URL}/ding.mp3`;
+
+const AudioDing = React.forwardRef((props, ref) => (
+ // @ts-expect-error
+
+
+
+));
+
+AudioDing.displayName = "AudioDing";
+
+export default AudioDing;
+
diff --git a/ui/frontend/build_src/src/components/molecules/betaMode/index.tsx b/ui/frontend/build_src/src/components/molecules/betaMode/index.tsx
new file mode 100644
index 00000000..62740b28
--- /dev/null
+++ b/ui/frontend/build_src/src/components/molecules/betaMode/index.tsx
@@ -0,0 +1,73 @@
+import React, { useState, useEffect } from "react";
+import { useQuery, useQueryClient } from "@tanstack/react-query";
+
+import {
+ KEY_CONFIG,
+ getConfig,
+ KEY_TOGGLE_CONFIG,
+ toggleBetaConfig,
+} from "../../../api";
+
+import { useTranslation } from "react-i18next";
+
+export default function BetaMode() {
+ const { t } = useTranslation();
+ // gate for the toggle
+ const [shouldSetCofig, setShouldSetConfig] = useState(false);
+ // next branch to get
+ const [branchToGetNext, setBranchToGetNext] = useState("beta");
+
+ // our basic config
+ const { status: configStatus, data: configData } = useQuery(
+ [KEY_CONFIG],
+ getConfig
+ );
+ const queryClient = useQueryClient();
+
+ // the toggle config
+ const { status: toggleStatus, data: toggleData } = useQuery(
+ [KEY_TOGGLE_CONFIG],
+ async () => await toggleBetaConfig(branchToGetNext),
+ {
+ enabled: shouldSetCofig,
+ }
+ );
+
+ // this is also in the Header Display
+ // TODO: make this a custom hook
+ useEffect(() => {
+ if (configStatus === "success") {
+ const { update_branch: updateBranch } = configData;
+
+ if (updateBranch === "main") {
+ setBranchToGetNext("beta");
+ } else {
+ // setIsBeta(true);
+ setBranchToGetNext("main");
+ }
+ }
+ }, [configStatus, configData]);
+
+ useEffect(() => {
+ if (toggleStatus === "success") {
+ if (toggleData[0] === "OK") {
+ // force a refetch of the config
+ void queryClient.invalidateQueries([KEY_CONFIG])
+ }
+ setShouldSetConfig(false);
+ }
+ }, [toggleStatus, toggleData, setShouldSetConfig]);
+
+ return (
+
+ {
+ setShouldSetConfig(true);
+ }}
+ />🔥
+ {t("advanced-settings.beta")} {t("advanced-settings.beta-disc")}
+
+ );
+}
diff --git a/ui/frontend/build_src/src/components/molecules/clearQueue/index.tsx b/ui/frontend/build_src/src/components/molecules/clearQueue/index.tsx
new file mode 100644
index 00000000..04de1342
--- /dev/null
+++ b/ui/frontend/build_src/src/components/molecules/clearQueue/index.tsx
@@ -0,0 +1,35 @@
+import React from "react";
+import { doStopImage } from "../../../api";
+import { useRequestQueue } from "../../../stores/requestQueueStore";
+
+import {
+ buttonStyle
+} from "../../_recipes/button.css";
+
+
+export default function ClearQueue() {
+
+ const hasQueue = useRequestQueue((state) => state.hasAnyQueue());
+ const clearQueue = useRequestQueue((state) => state.clearQueue);
+
+ const stopAll = async () => {
+ try {
+ clearQueue();
+ const res = await doStopImage();
+ } catch (e) {
+ console.log(e);
+ }
+ };
+
+ return (
+ void stopAll()}>
+ STOP ALL
+
+ );
+}
\ No newline at end of file
diff --git a/ui/frontend/build_src/src/components/molecules/drawImage/drawImage.css.ts b/ui/frontend/build_src/src/components/molecules/drawImage/drawImage.css.ts
new file mode 100644
index 00000000..7b0cc7fc
--- /dev/null
+++ b/ui/frontend/build_src/src/components/molecules/drawImage/drawImage.css.ts
@@ -0,0 +1,22 @@
+import { style, globalStyle } from "@vanilla-extract/css";
+
+export const DrawImageMain = style({
+ position: "relative",
+});
+
+globalStyle(`${DrawImageMain} > canvas`, {
+ position: "absolute",
+ top: "0",
+ left: "0",
+ width: "100%",
+ height: "100%",
+});
+
+globalStyle(`${DrawImageMain} > canvas:first-of-type`, {
+ opacity: ".7",
+});
+
+globalStyle(`${DrawImageMain} > img`, {
+ top: "0",
+ left: "0",
+});
diff --git a/ui/frontend/build_src/src/components/molecules/drawImage/index.tsx b/ui/frontend/build_src/src/components/molecules/drawImage/index.tsx
new file mode 100644
index 00000000..9d8f414d
--- /dev/null
+++ b/ui/frontend/build_src/src/components/molecules/drawImage/index.tsx
@@ -0,0 +1,194 @@
+import React, { useRef, useState, useEffect } from "react";
+
+import {
+ DrawImageMain,
+} from "./drawImage.css";
+
+// https://github.com/embiem/react-canvas-draw
+
+interface DrawImageProps {
+ imageData: string;
+ brushSize: number;
+
+ brushShape: string;
+ brushColor: string;
+ isErasing: boolean;
+ setData: (data: string) => void;
+}
+
+export default function DrawImage({
+ imageData,
+ brushSize,
+ brushShape,
+ brushColor,
+ isErasing,
+ setData,
+}: DrawImageProps) {
+ const drawingRef = useRef(null);
+ const cursorRef = useRef(null);
+ const [isUpdating, setIsUpdating] = useState(false);
+
+ const [canvasWidth, setCanvasWidth] = useState(512);
+ const [canvasHeight, setCanvasHeight] = useState(512);
+
+ useEffect(() => {
+ const img = new Image();
+ img.onload = () => {
+ setCanvasWidth(img.width);
+ setCanvasHeight(img.height);
+ };
+ img.src = imageData;
+ }, [imageData]);
+
+ useEffect(() => {
+ // when the brush color changes, change the color of all the
+ // drawn pixels to the new color
+ if (drawingRef.current != null) {
+ const ctx = drawingRef.current.getContext("2d");
+ if (ctx != null) {
+
+ const imageData = ctx.getImageData(0, 0, canvasWidth, canvasHeight);
+ const data = imageData.data;
+ for (let i = 0; i < data.length; i += 4) {
+ if (data[i + 3] > 0) {
+ data[i] = parseInt(brushColor, 16);
+ data[i + 1] = parseInt(brushColor, 16);
+ data[i + 2] = parseInt(brushColor, 16);
+ }
+ }
+ ctx.putImageData(imageData, 0, 0);
+ }
+ }
+ }, [brushColor]);
+
+ const _handleMouseDown = (
+ e: React.MouseEvent
+ ) => {
+ const {
+ nativeEvent: { offsetX, offsetY },
+ } = e;
+
+ setIsUpdating(true);
+ };
+
+ const _handleMouseUp = (
+ e: React.MouseEvent
+ ) => {
+ setIsUpdating(false);
+ const canvas = drawingRef.current;
+ if (canvas != null) {
+ const data = canvas.toDataURL();
+ setData(data);
+ }
+ };
+
+ const _drawCanvas = (x: number, y: number, brushSize: number, brushShape: string, brushColor: string | CanvasGradient | CanvasPattern) => {
+ const canvas = drawingRef.current;
+ if (canvas != null) {
+ const ctx = canvas.getContext("2d");
+ if (ctx != null) {
+ if (isErasing) {
+ // stack overflow https://stackoverflow.com/questions/10396991/clearing-circular-regions-from-html5-canvas
+ const offset = brushSize / 2;
+ ctx.clearRect(x - offset, y - offset, brushSize, brushSize);
+ } else {
+ ctx.beginPath();
+ ctx.lineWidth = brushSize;
+ // @ts-expect-error
+ ctx.lineCap = brushShape;
+ ctx.strokeStyle = brushColor;
+ ctx.moveTo(x, y);
+ ctx.lineTo(x, y);
+ ctx.stroke();
+ }
+ }
+ }
+ };
+
+ const _drawCursor = (
+ x: number,
+ y: number,
+ brushSize: number,
+ brushShape: string,
+ brushColor: string
+ ) => {
+ const canvas = cursorRef.current;
+ if (canvas != null) {
+ const ctx = canvas.getContext("2d");
+ if (ctx != null) {
+ ctx.beginPath();
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+
+ if (isErasing) {
+ const offset = brushSize / 2;
+ // draw a quare
+ ctx.lineWidth = 2;
+ ctx.lineCap = "butt";
+ ctx.strokeStyle = brushColor;
+ ctx.moveTo(x - offset, y - offset);
+ ctx.lineTo(x + offset, y - offset);
+ ctx.lineTo(x + offset, y + offset);
+ ctx.lineTo(x - offset, y + offset);
+ ctx.lineTo(x - offset, y - offset);
+ ctx.stroke();
+ } else {
+ ctx.lineWidth = brushSize;
+ // @ts-expect-error
+ ctx.lineCap = brushShape;
+ ctx.strokeStyle = brushColor;
+ ctx.moveTo(x, y);
+ ctx.lineTo(x, y);
+ ctx.stroke();
+ }
+ }
+
+
+
+ }
+ };
+
+ const _handleMouseMove = (
+ e: React.MouseEvent
+ ) => {
+ const {
+ nativeEvent: { offsetX: x, offsetY: y },
+ } = e;
+
+ _drawCursor(x, y, brushSize, brushShape, brushColor);
+
+ if (isUpdating) {
+ _drawCanvas(x, y, brushSize, brushShape, brushColor);
+ }
+ };
+
+ // function for external use
+ const fillCanvas = () => {
+ const canvas = drawingRef.current;
+ if (canvas != null) {
+ const ctx = canvas.getContext("2d");
+ if (ctx != null) {
+ ctx.fillStyle = brushColor;
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
+ }
+ }
+ };
+
+ return (
+
+
+
+
+
+ );
+}
diff --git a/ui/frontend/build_src/src/components/molecules/generatedImage/generatedImage.css.ts b/ui/frontend/build_src/src/components/molecules/generatedImage/generatedImage.css.ts
new file mode 100644
index 00000000..5feab2b3
--- /dev/null
+++ b/ui/frontend/build_src/src/components/molecules/generatedImage/generatedImage.css.ts
@@ -0,0 +1,11 @@
+import { style, globalStyle } from "@vanilla-extract/css";
+
+export const generatedImageMain = style({
+ position: "relative",
+});
+
+globalStyle(`${generatedImageMain} img`, {
+ width: "100%",
+ height: "100%",
+ objectFit: "contain",
+});
diff --git a/ui/frontend/build_src/src/components/molecules/generatedImage/index.tsx b/ui/frontend/build_src/src/components/molecules/generatedImage/index.tsx
new file mode 100644
index 00000000..c15e6f25
--- /dev/null
+++ b/ui/frontend/build_src/src/components/molecules/generatedImage/index.tsx
@@ -0,0 +1,25 @@
+import React from "react";
+
+import { ImageRequest } from "../../../api";
+
+import {
+ generatedImageMain,
+} from "./generatedImage.css";
+
+interface GeneretaedImageProps {
+ imageData: string | undefined;
+ metadata: ImageRequest | undefined;
+ className?: string;
+}
+
+export default function GeneratedImage({
+ imageData,
+ metadata,
+ className,
+}: GeneretaedImageProps) {
+ return (
+
+
+
+ );
+}
diff --git a/ui/frontend/build_src/src/components/molecules/makeButton/index.tsx b/ui/frontend/build_src/src/components/molecules/makeButton/index.tsx
new file mode 100644
index 00000000..708f4686
--- /dev/null
+++ b/ui/frontend/build_src/src/components/molecules/makeButton/index.tsx
@@ -0,0 +1,276 @@
+/* eslint-disable @typescript-eslint/naming-convention */
+import React, { useEffect, useRef } from "react";
+
+import { useImageCreate } from "../../../stores/imageCreateStore";
+import {
+ QueueStatus,
+ useRequestQueue
+} from "../../../stores/requestQueueStore";
+
+import {
+ FetchingStates,
+ useImageFetching
+} from "../../../stores/imageFetchingStore";
+
+
+import { useImageDisplay } from "../../../stores/imageDisplayStore";
+
+import { v4 as uuidv4 } from "uuid";
+
+import { useRandomSeed } from "../../../utils";
+import {
+ ImageRequest,
+ ImageReturnType,
+ ImageOutput,
+ doMakeImage,
+} from "../../../api";
+
+import {
+ buttonStyle
+} from "../../_recipes/button.css";
+
+import { useTranslation } from "react-i18next";
+
+import AudioDing from "../../molecules/audioDing";
+
+const idDelim = "_batch";
+
+export default function MakeButton() {
+ const { t } = useTranslation();
+
+ const dingRef = useRef();
+
+ const parallelCount = useImageCreate((state) => state.parallelCount);
+ const builtRequest = useImageCreate((state) => state.builtRequest);
+ const isRandomSeed = useImageCreate((state) => state.isRandomSeed());
+ const setRequestOption = useImageCreate((state) => state.setRequestOptions);
+
+ const isSoundEnabled = useImageCreate((state) => state.isSoundEnabled());
+
+ const addtoQueue = useRequestQueue((state) => state.addtoQueue);
+ const hasQueue = useRequestQueue((state) => state.hasPendingQueue());
+ const { id, options } = useRequestQueue((state) => state.firstInQueue());
+ const updateQueueStatus = useRequestQueue((state) => state.updateStatus);
+
+ const status = useImageFetching((state) => state.status);
+ const setStatus = useImageFetching((state) => state.setStatus);
+ const setStep = useImageFetching((state) => state.setStep);
+ const setTotalSteps = useImageFetching((state) => state.setTotalSteps);
+ const addProgressImage = useImageFetching((state) => state.addProgressImage);
+ const setStartTime = useImageFetching((state) => state.setStartTime);
+ const setNowTime = useImageFetching((state) => state.setNowTime);
+ const resetForFetching = useImageFetching((state) => state.resetForFetching);
+ const appendData = useImageFetching((state) => state.appendData);
+
+ const updateDisplay = useImageDisplay((state) => state.updateDisplay);
+
+ const hackJson = (jsonStr: string, id: string) => {
+
+ try {
+ const parsed = JSON.parse(jsonStr);
+ const { status, request, output: outputs } = parsed as ImageReturnType;
+
+
+ if (status === 'succeeded') {
+
+ updateQueueStatus(id, QueueStatus.complete);
+ outputs.forEach((output: any, index: number) => {
+
+ const { data, seed } = output as ImageOutput;
+ const seedReq = {
+ ...request,
+ seed,
+ };
+ const batchId = `${id}${idDelim}-${seed}-${index}`;
+ updateDisplay(batchId, data, seedReq);
+ });
+ }
+
+ else {
+ console.warn(`Unexpected status: ${status}`);
+ updateQueueStatus(id, QueueStatus.error);
+ }
+
+ }
+ catch (e) {
+ updateQueueStatus(id, QueueStatus.error);
+ console.warn("Error HACKING JSON: ", e)
+ }
+ }
+
+ const parseRequest = async (id: string, reader: ReadableStreamDefaultReader) => {
+ const decoder = new TextDecoder();
+ let finalJSON = '';
+
+ while (true) {
+ const { done, value } = await reader.read();
+ const jsonStr = decoder.decode(value);
+ if (done) {
+ setStatus(FetchingStates.COMPLETE);
+ hackJson(finalJSON, id);
+ if (isSoundEnabled) {
+ void dingRef.current?.play();
+ }
+ break;
+ }
+
+ try {
+ const update = JSON.parse(jsonStr);
+ const { status } = update;
+
+ if (status === "progress") {
+ setStatus(FetchingStates.PROGRESSING);
+ const { progress: { step, total_steps }, output: outputs } = update;
+ setStep(step);
+ setTotalSteps(total_steps);
+
+ if (step === 0) {
+ setStartTime();
+ }
+ else {
+ setNowTime();
+ }
+
+ if (void 0 !== outputs) {
+ outputs.forEach((output: any) => {
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
+ const timePath = `${output.path}?t=${new Date().getTime()}`
+ addProgressImage(timePath);
+ });
+ }
+
+ } else if (status === "succeeded") {
+ // TODO this should be the the new out instead of the try catch
+ // wait for the path to come back instead of the data
+ setStatus(FetchingStates.SUCCEEDED);
+ }
+ else if (status === 'failed') {
+ console.warn('failed');
+ console.warn(update);
+ }
+ else {
+ console.warn("UNKNOWN ?", update);
+ }
+ }
+ catch (e) {
+ // console.log('EXPECTED PARSE ERRROR')
+ finalJSON += jsonStr;
+ }
+
+ }
+ }
+
+ const startStream = async (id: string, req: ImageRequest) => {
+
+ try {
+ updateQueueStatus(id, QueueStatus.processing);
+ resetForFetching();
+ const res = await doMakeImage(req);
+ const reader = res.body?.getReader();
+
+ if (void 0 !== reader) {
+ void parseRequest(id, reader);
+ }
+
+ } catch (e) {
+ console.log('TOP LINE STREAM ERROR')
+ updateQueueStatus(id, QueueStatus.error);
+ console.log(e);
+ }
+
+ }
+
+ const queueImageRequest = (req: ImageRequest) => {
+ // the actual number of request we will make
+ const requests = [];
+ // the number of images we will make
+ let { num_outputs } = req;
+ if (parallelCount > num_outputs) {
+ requests.push(num_outputs);
+ } else {
+ // while we have at least 1 image to make
+ while (num_outputs >= 1) {
+ // subtract the parallel count from the number of images to make
+ num_outputs -= parallelCount;
+
+ // if we are still 0 or greater we can make the full parallel count
+ if (num_outputs <= 0) {
+ requests.push(parallelCount);
+ }
+ // otherwise we can only make the remaining images
+ else {
+ requests.push(Math.abs(num_outputs));
+ }
+ }
+ }
+
+ requests.forEach((num, index) => {
+ // get the seed we want to use
+ let seed = req.seed;
+ if (index !== 0) {
+ // we want to use a random seed for subsequent requests
+ seed = useRandomSeed();
+ }
+ // add the request to the queue
+ addtoQueue(uuidv4(), {
+ ...req,
+ // updated the number of images to make
+ num_outputs: num,
+ // update the seed
+ seed,
+ });
+ });
+ }
+
+ const makeImageQueue = async () => {
+ // potentially update the seed
+ if (isRandomSeed) {
+ // update the seed for the next time we click the button
+ setRequestOption("seed", useRandomSeed());
+ }
+ // the request that we have built
+ const req = builtRequest();
+ queueImageRequest(req);
+ };
+
+ useEffect(() => {
+ const makeImages = async (options: ImageRequest) => {
+ // removeFirstInQueue();
+ await startStream(id ?? "", options);
+ }
+
+ if (status === FetchingStates.PROGRESSING || status === FetchingStates.FETCHING) {
+ return;
+ }
+
+ if (hasQueue) {
+
+ if (options === undefined) {
+ console.log('req is undefined');
+ return;
+ }
+
+ makeImages(options).catch((e) => {
+ console.log('HAS QUEUE ERROR');
+ console.log(e);
+ });
+ }
+
+ }, [hasQueue, status, id, options, startStream]);
+
+ return (
+ <>
+ {
+ void makeImageQueue();
+ }}
+ >
+ {t("home.make-img-btn")}
+
+
+ >
+ );
+}
diff --git a/ui/frontend/build_src/src/components/molecules/modifierTag/index.tsx b/ui/frontend/build_src/src/components/molecules/modifierTag/index.tsx
new file mode 100644
index 00000000..cd4330f1
--- /dev/null
+++ b/ui/frontend/build_src/src/components/molecules/modifierTag/index.tsx
@@ -0,0 +1,93 @@
+import React, { useState } from "react";
+import { v4 as uuidv4 } from "uuid";
+import {
+ ModifierPreview,
+ useImageCreate
+} from "../../../stores/imageCreateStore";
+
+import { API_URL } from "../../../api";
+
+import {
+ IconFont,
+} from "../../../styles/shared.css";
+
+import {
+ ModifierTagMain,
+ ModifierActions,
+ tagPreview,
+ TagText,
+ TagToggle,
+} from "./modifierTags.css";
+
+interface ModifierTagProps {
+ name: string;
+ category: string;
+ previews: ModifierPreview[];
+}
+
+export default function ModifierTag({ name, category, previews }: ModifierTagProps) {
+
+ const previewType: 'portrait' | 'landscape' = "portrait";
+
+ const [showActions, setShowActions] = useState(false);
+
+ const handleHover = () => {
+ setShowActions(true);
+ };
+
+ const handleLeave = () => {
+ setShowActions(false);
+ };
+
+ const addCreateTag = useImageCreate((state) => state.addCreateTag);
+ const setPositivePrompt = () => {
+ addCreateTag({ id: uuidv4(), name, type: 'positive' });
+ }
+ const setNegativePrompt = () => {
+ addCreateTag({ id: uuidv4(), name, type: 'negative' });
+ }
+
+
+ const hasTag = useImageCreate((state) => state.hasTag(category, name))
+ ? "selected"
+ : "";
+ const toggleTag = useImageCreate((state) => state.toggleTag);
+
+ const _toggleTag = () => {
+ toggleTag(category, name);
+ };
+
+ // , hasTag].join(" ")
+ return (
+
+
{name}
+ {showActions && (
+
+
+
+
+
+
+
+
+ )}
+ {/*
+ {previews.map((preview) => {
+ if (preview.name !== previewType) {
+ return null;
+ }
+ return (
+
+ );
+ })}
+
*/}
+
+ );
+}
diff --git a/ui/frontend/build_src/src/components/molecules/modifierTag/modifierTags.css.ts b/ui/frontend/build_src/src/components/molecules/modifierTag/modifierTags.css.ts
new file mode 100644
index 00000000..3ceb5c1f
--- /dev/null
+++ b/ui/frontend/build_src/src/components/molecules/modifierTag/modifierTags.css.ts
@@ -0,0 +1,69 @@
+import { style, globalStyle } from "@vanilla-extract/css";
+import { vars } from '../../../styles/theme/index.css';
+
+import { card } from '../../_recipes/card.css';
+
+export const ModifierTagMain = style([
+ card({
+ backing: 'normal',
+ level: 1,
+ info: true
+ }), {
+ position: "relative",
+ width: "fit-content",
+ borderColor: `hsl(${vars.brandHue}, ${vars.colorMod.saturation.normal}, ${vars.colorMod.lightness.normal})`,
+ padding: vars.spacing.small,
+ }
+]);
+
+globalStyle(`${ModifierTagMain}.selected`, {
+ backgroundColor: "rgb(131, 11, 121)",
+})
+
+globalStyle(`${ModifierTagMain} p`, {
+ margin: 0,
+ textAlign: "center",
+ marginBottom: "2px",
+});
+
+
+export const TagText = style({
+ opacity: 1,
+});
+
+export const TagToggle = style({
+ opacity: 0.3,
+});
+
+
+export const ModifierActions = style({
+ position: "absolute",
+ top: "0",
+ left: "0",
+ height: "100%",
+ width: "100%",
+ display: "flex",
+ flexDirection: "row",
+});
+
+globalStyle(`${ModifierActions} button`, {
+ flexGrow: 1,
+ backgroundColor: "transparent",
+ border: "none",
+ boxShadow: `inset 0 0 24px 0px rgb(255 255 255 / 50%)`,
+ borderRadius: "5px",
+ padding: "0",
+});
+
+export const tagPreview = style({
+ display: 'flex',
+ justifyContent: 'center',
+});
+
+globalStyle(`${tagPreview} img`, {
+ width: "90px",
+ height: "100%",
+ objectFit: "cover",
+ objectPosition: "center",
+});
+
diff --git a/ui/frontend/build_src/src/components/molecules/promptTag/index.tsx b/ui/frontend/build_src/src/components/molecules/promptTag/index.tsx
new file mode 100644
index 00000000..2a87a64b
--- /dev/null
+++ b/ui/frontend/build_src/src/components/molecules/promptTag/index.tsx
@@ -0,0 +1,68 @@
+import React, { useState } from "react";
+
+import { useImageCreate } from "../../../stores/imageCreateStore";
+
+import {
+ IconFont,
+} from "../../../styles/shared.css";
+
+import {
+ PromptTagMain,
+ TagToggle,
+ TagRemoveButton,
+ PromptTagText,
+ PromptTagToggle
+} from "./promptTag.css";
+
+interface PromptTagProps {
+ id: string;
+ name: string;
+ category?: string;
+ previews?: string[];
+ type: string;
+};
+
+export default function PromptTag({ id, name, category, previews, type }: PromptTagProps) {
+
+ const [showToggle, setShowToggle] = useState(false);
+
+ const removeCreateTag = useImageCreate((state) => state.removeCreateTag);
+ const changeCreateTagType = useImageCreate((state) => state.changeCreateTagType);
+
+ const handleHover = () => {
+ setShowToggle(true);
+ };
+
+ const handleLeave = () => {
+ setShowToggle(false);
+ };
+
+ const toggleType = () => {
+ if (type === 'positive') {
+ changeCreateTagType(id, 'negative');
+ }
+ else {
+ changeCreateTagType(id, 'positive');
+ }
+ };
+
+ const handleRemove = () => {
+ console.log('remove');
+ removeCreateTag(id);
+ };
+
+ return (
+
+
{name}
+ {showToggle &&
+ {type === 'positive' ? : }
+ }
+ {showToggle &&
+
+ }
+
+ );
+};
\ No newline at end of file
diff --git a/ui/frontend/build_src/src/components/molecules/promptTag/promptTag.css.ts b/ui/frontend/build_src/src/components/molecules/promptTag/promptTag.css.ts
new file mode 100644
index 00000000..f8932121
--- /dev/null
+++ b/ui/frontend/build_src/src/components/molecules/promptTag/promptTag.css.ts
@@ -0,0 +1,55 @@
+/* eslint-disable @typescript-eslint/restrict-template-expressions */
+import { style, globalStyle } from '@vanilla-extract/css';
+
+import { XButton } from "../../../styles/shared.css";
+import { vars } from '../../../styles/theme/index.css';
+import { card } from '../../_recipes/card.css';
+
+
+export const PromptTagMain = style([
+ card({
+ backing: 'normal',
+ level: 1,
+ info: true
+ }), {
+ position: "relative",
+ width: "fit-content",
+ backgroundColor: `hsl(${vars.backgroundLight}, ${vars.colorMod.saturation.normal}, ${vars.colorMod.lightness.normal})`,
+ padding: vars.spacing.small,
+ }
+]);
+
+export const PromptTagText = style({
+ opacity: 1,
+ fontSize: vars.fonts.sizes.Plain,
+});
+
+export const PromptTagToggle = style({
+ opacity: 0.3,
+ fontSize: vars.fonts.sizes.Plain,
+});
+
+globalStyle(`${PromptTagMain}.positive`, {
+ borderColor: `hsl(${vars.brandHue}, ${vars.colorMod.saturation.normal}, ${vars.colorMod.lightness.normal})`,
+});
+
+globalStyle(`${PromptTagMain}.negative`, {
+ borderColor: `hsl(${vars.errorHue}, ${vars.colorMod.saturation.normal}, ${vars.colorMod.lightness.normal})`,
+});
+
+export const TagToggle = style({
+ position: "absolute",
+ top: "0",
+ right: "0",
+ height: "100%",
+ width: "100%",
+ border: "none",
+ backgroundColor: "transparent",
+ boxShadow: `inset 0 0 24px 0px rgb(255 255 255 / 50%)`,
+});
+
+export const TagRemoveButton = style([XButton, {
+ top: '-4px',
+ left: '4px',
+ padding: '0',
+}]);
\ No newline at end of file
diff --git a/ui/frontend/build_src/src/components/molecules/queueStatusTab/index.tsx b/ui/frontend/build_src/src/components/molecules/queueStatusTab/index.tsx
new file mode 100644
index 00000000..b0dd173c
--- /dev/null
+++ b/ui/frontend/build_src/src/components/molecules/queueStatusTab/index.tsx
@@ -0,0 +1,70 @@
+import React, { useEffect, useState } from "react";
+
+import { FetchingStates, useImageFetching } from "../../../stores/imageFetchingStore";
+import { useRequestQueue } from "../../../stores/requestQueueStore";
+
+export default function QueueStatusTab() {
+
+
+ const [showBasicQueue, setShowBasicQueue] = useState(true);
+
+ const hasPendingQueue = useRequestQueue((state) => state.hasPendingQueue());
+ const pendingRequests = useRequestQueue((state) => state.pendingRequests());
+
+ const status = useImageFetching((state) => state.status);
+
+ const step = useImageFetching((state) => state.step);
+ const totalSteps = useImageFetching((state) => state.totalSteps);
+
+ const startTime = useImageFetching((state) => state.timeStarted);
+ const timeNow = useImageFetching((state) => state.timeNow);
+ const [timeRemaining, setTimeRemaining] = useState(0);
+
+ const [percent, setPercent] = useState(0);
+
+ useEffect(() => {
+ if (totalSteps > 0) {
+ setPercent(Math.round((step / totalSteps) * 100));
+ } else {
+ setPercent(0);
+ }
+ }, [step, totalSteps]);
+
+ useEffect(() => {
+ // find the remaining time
+ const timeTaken = +timeNow - +startTime;
+ const timePerStep = step == 0 ? 0 : timeTaken / step;
+ const totalTime = timePerStep * totalSteps;
+ const timeRemaining = (totalTime - timeTaken) / 1000;
+ // @ts-expect-error
+ setTimeRemaining(timeRemaining.toPrecision(3));
+
+ }, [step, totalSteps, startTime, timeNow, setTimeRemaining]);
+
+ useEffect(() => {
+ if (hasPendingQueue) {
+ setShowBasicQueue(false);
+ }
+ }, [status, hasPendingQueue]);
+
+ // {/* {showBasicQueue
+ // ? <> */}
+ // Queue
+ // {/* >
+ // : <>
+ // Percent: {percent}%
+ // >npm
+ // } */}
+
+
+ return (
+ <>
+ Queue
+ {hasPendingQueue && Items Remaining: {pendingRequests.length} }
+ >
+ )
+
+}
+
+
+
diff --git a/ui/frontend/build_src/src/components/molecules/stopButton/index.tsx b/ui/frontend/build_src/src/components/molecules/stopButton/index.tsx
new file mode 100644
index 00000000..9c0864bf
--- /dev/null
+++ b/ui/frontend/build_src/src/components/molecules/stopButton/index.tsx
@@ -0,0 +1,25 @@
+import React from "react";
+import { doStopImage } from "../../../api";
+
+
+import {
+ buttonStyle
+} from "../../_recipes/button.css";
+
+export default function StopButton() {
+
+ const stopMake = async () => {
+ try {
+ const res = await doStopImage();
+ } catch (e) {
+ console.log(e);
+ }
+ };
+
+ return void stopMake()}>Stop ;
+}
diff --git a/ui/frontend/build_src/src/components/organisms/completedImages/completedImages.css.ts b/ui/frontend/build_src/src/components/organisms/completedImages/completedImages.css.ts
new file mode 100644
index 00000000..c5d98bc1
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/completedImages/completedImages.css.ts
@@ -0,0 +1,63 @@
+import { style, globalStyle } from "@vanilla-extract/css";
+
+import { vars } from "../../../styles/theme/index.css";
+import {
+ card as cardStyle,
+} from '../../_recipes/card.css'
+
+export const completedImagesMain = style({
+ position: "relative",
+});
+
+// globalStyle(`${completedImagesMain} > button`, {
+// position: "absolute",
+// top: '-29px',
+// });
+
+export const completedImagesContent = style([cardStyle(), {
+ height: "250px",
+ width: "100%",
+ display: "flex",
+ padding: vars.spacing.medium,
+ borderRadius: 0,
+}]);
+
+export const completedImagesList = style({
+ display: "flex",
+ flexDirection: "row",
+ flexWrap: "nowrap",
+ height: "100%",
+ width: "100%",
+ overflow: "auto",
+ paddingLeft: vars.spacing.none,
+});
+
+globalStyle(`${completedImagesContent} li`, {
+ position: "relative",
+});
+
+globalStyle(`${completedImagesContent} > li:first-of-type`, {
+ marginLeft: vars.spacing.medium,
+});
+
+globalStyle(`${completedImagesContent} > li:last-of-type`, {
+ marginRight: 0,
+});
+
+export const imageContain = style({
+ width: "206px",
+ backgroundColor: "black",
+ display: "flex",
+ justifyContent: "center",
+ alignItems: "center",
+ flexShrink: 0,
+ border: "0 none",
+ padding: "0",
+ marginLeft: vars.spacing.medium,
+ cursor: "pointer",
+});
+
+globalStyle(`${imageContain} img`, {
+ width: "100%",
+ objectFit: "contain",
+});
diff --git a/ui/frontend/build_src/src/components/organisms/completedImages/index.tsx b/ui/frontend/build_src/src/components/organisms/completedImages/index.tsx
new file mode 100644
index 00000000..593f52c5
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/completedImages/index.tsx
@@ -0,0 +1,87 @@
+import React, { useState } from "react";
+
+
+import { useImageDisplay } from "../../../stores/imageDisplayStore";
+
+import {
+ completedImagesMain,
+ completedImagesContent,
+ completedImagesList,
+ imageContain,
+} from "./completedImages.css";
+
+import {
+ buttonStyle
+} from "../../_recipes/button.css";
+
+// import { Transition } from '@headlessui/react'
+
+
+// import {
+// tabStyles
+// } from "../../_recipes/tabs_headless.css";
+
+export default function CompletedImages(
+
+) {
+
+ const [isShowing, setIsShowing] = useState(false)
+
+
+ const images = useImageDisplay((state) => state.images);
+ const setCurrentImage = useImageDisplay((state) => state.setCurrentImage);
+ const clearDisplay = useImageDisplay((state) => state.clearDisplay);
+
+ const removeImagesAll = () => {
+ clearDisplay();
+ };
+
+ return (
+
+ {/*
setIsShowing((isShowing) => !isShowing)}>
+ {isShowing ? "Hide History" : "Show History"}
+ */}
+ {/*
*/}
+
+
+ {/* Adjust the dom do we dont do this check twice */}
+ {images != null && images.length > 0 && (
+
{
+ removeImagesAll();
+ }}
+ >
+ REMOVE ALL
+
+ )}
+
+ {images?.map((image, index) => {
+ if (void 0 === image) {
+ console.warn(`image ${index} is undefined`);
+ return null;
+ }
+
+ return (
+
+ {
+ setCurrentImage(image);
+ }}
+ >
+
+
+
+ );
+ })}
+
+
+ {/* */}
+
+ );
+}
diff --git a/ui/frontend/build_src/src/components/organisms/creationPanel/advancedSettings/advancedsettings.css.ts b/ui/frontend/build_src/src/components/organisms/creationPanel/advancedSettings/advancedsettings.css.ts
new file mode 100644
index 00000000..2bc200fa
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/creationPanel/advancedSettings/advancedsettings.css.ts
@@ -0,0 +1,12 @@
+import { style, globalStyle } from "@vanilla-extract/css";
+
+import { vars } from "../../../../styles/theme/index.css";
+
+export const AdvancedSettingsList = style({
+ paddingLeft: 0,
+ listStyleType: "none",
+});
+
+export const AdvancedSettingGrouping = style({
+ marginTop: vars.spacing.small,
+});
diff --git a/ui/frontend/build_src/src/components/organisms/creationPanel/advancedSettings/improvementSettings/index.tsx b/ui/frontend/build_src/src/components/organisms/creationPanel/advancedSettings/improvementSettings/index.tsx
new file mode 100644
index 00000000..ed423aa8
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/creationPanel/advancedSettings/improvementSettings/index.tsx
@@ -0,0 +1,119 @@
+import React, { useEffect, useState } from "react";
+import { useImageCreate } from "../../../../../stores/imageCreateStore";
+
+import { useCreateUI } from "../../creationPanelUIStore";
+
+import {
+ SettingItem,
+} from "../../../../../styles/shared.css";
+
+import {
+ buttonStyle,
+} from "../../../../_recipes/button.css";
+
+import { useTranslation } from "react-i18next";
+
+export default function ImprovementSettings() {
+ const { t } = useTranslation();
+
+ // these are conditionals that should be retired and inferred from the store
+ const isUsingFaceCorrection = useImageCreate((state) =>
+ state.isUsingFaceCorrection()
+ );
+
+ const isUsingUpscaling = useImageCreate((state) => state.isUsingUpscaling());
+
+ const useUpscale = useImageCreate((state) =>
+ state.getValueForRequestKey("use_upscale")
+ );
+
+ const filteredOnly = useImageCreate((state) =>
+ state.getValueForRequestKey("show_only_filtered_image")
+ );
+
+ const toggleUseFaceCorrection = useImageCreate(
+ (state) => state.toggleUseFaceCorrection
+ );
+
+ const setRequestOption = useImageCreate((state) => state.setRequestOptions);
+
+ const improvementOpen = useCreateUI(
+ (state) => state.isOpenAdvImprovementSettings
+ );
+
+ const toggleImprovementOpen = useCreateUI(
+ (state) => state.toggleAdvImprovementSettings
+ );
+
+ const [isFilteringDisabled, setIsFilteringDisabled] = useState(false);
+ // should probably be a store selector
+ useEffect(() => {
+ // if either are true we arent disabled
+ if (isUsingFaceCorrection || useUpscale != "") {
+ setIsFilteringDisabled(false);
+ } else {
+ setIsFilteringDisabled(true);
+ }
+ }, [isUsingFaceCorrection, isUsingUpscaling, setIsFilteringDisabled]);
+
+ return (
+
+
+ Improvement Settings
+
+ {improvementOpen && (
+ <>
+
+
+ toggleUseFaceCorrection()}
+ />
+ Fix incorrect faces and eyes (uses GFPGAN)
+
+
+
+
+ {t("settings.ups")}
+ {
+ setRequestOption("use_upscale", e.target.value);
+ }}
+ >
+ {t("settings.no-ups")}
+ RealESRGAN_x4plus
+
+ RealESRGAN_x4plus_anime_6B
+
+
+
+
+
+
+
+ setRequestOption("show_only_filtered_image", e.target.checked)
+ }
+ />
+ {t("settings.corrected")}
+
+
+ >
+ )}
+
+ );
+}
diff --git a/ui/frontend/build_src/src/components/organisms/creationPanel/advancedSettings/index.tsx b/ui/frontend/build_src/src/components/organisms/creationPanel/advancedSettings/index.tsx
new file mode 100644
index 00000000..4a0da019
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/creationPanel/advancedSettings/index.tsx
@@ -0,0 +1,69 @@
+import React, { useEffect } from "react";
+import { useCreateUI } from "../creationPanelUIStore";
+
+
+
+import {
+ card
+} from '../../../_recipes/card.css';
+
+import {
+ buttonStyle,
+} from "../../../_recipes/button.css";
+
+import {
+ AdvancedSettingsList,
+ AdvancedSettingGrouping,
+} from "./advancedsettings.css";
+
+import ImprovementSettings from "./improvementSettings";
+import PropertySettings from "./propertySettings";
+import WorkflowSettings from "./workflowSettings";
+
+function SettingsList() {
+ return (
+
+ );
+}
+
+export default function AdvancedSettings() {
+ const advancedSettingsIsOpen = useCreateUI(
+ (state) => state.isOpenAdvancedSettings
+ );
+
+ const toggleAdvancedSettingsIsOpen = useCreateUI(
+ (state) => state.toggleAdvancedSettings
+ );
+
+ return (
+
+
+ Advanced Settings
+
+ {advancedSettingsIsOpen && }
+
+ );
+}
diff --git a/ui/frontend/build_src/src/components/organisms/creationPanel/advancedSettings/propertySettings/index.tsx b/ui/frontend/build_src/src/components/organisms/creationPanel/advancedSettings/propertySettings/index.tsx
new file mode 100644
index 00000000..6d824384
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/creationPanel/advancedSettings/propertySettings/index.tsx
@@ -0,0 +1,211 @@
+import React from "react";
+import { useImageCreate, SAMPLER_OPTIONS } from "../../../../../stores/imageCreateStore";
+import { useCreateUI } from "../../creationPanelUIStore";
+
+import {
+ SettingItem,
+} from "../../../../../styles/shared.css";
+
+
+import {
+ buttonStyle,
+} from "../../../../_recipes/button.css";
+
+
+
+import { useTranslation } from "react-i18next";
+
+// todo: move this someplace more global
+const IMAGE_DIMENSIONS = [
+ { value: 128, label: "128 (*)" },
+ { value: 192, label: "192" },
+ { value: 256, label: "256 (*)" },
+ { value: 320, label: "320" },
+ { value: 384, label: "384" },
+ { value: 448, label: "448" },
+ { value: 512, label: "512 (*)" },
+ { value: 576, label: "576" },
+ { value: 640, label: "640" },
+ { value: 704, label: "704" },
+ { value: 768, label: "768 (*)" },
+ { value: 832, label: "832" },
+ { value: 896, label: "896" },
+ { value: 960, label: "960" },
+ { value: 1024, label: "1024 (*)" },
+];
+
+export default function PropertySettings() {
+ const { t } = useTranslation();
+
+ const setRequestOption = useImageCreate((state) => state.setRequestOptions);
+ const toggleUseRandomSeed = useImageCreate(
+ (state) => state.toggleUseRandomSeed
+ );
+ const isRandomSeed = useImageCreate((state) => state.isRandomSeed());
+
+ const seed = useImageCreate((state) => state.getValueForRequestKey("seed"));
+ const steps = useImageCreate((state) =>
+ state.getValueForRequestKey("num_inference_steps")
+ );
+ const guidanceScale = useImageCreate((state) =>
+ state.getValueForRequestKey("guidance_scale")
+ );
+
+ const initImage = useImageCreate((state) =>
+ state.getValueForRequestKey("init_image")
+ );
+
+ const promptStrength = useImageCreate((state) =>
+ state.getValueForRequestKey("prompt_strength")
+ );
+
+ const width = useImageCreate((state) => state.getValueForRequestKey("width"));
+ const height = useImageCreate((state) =>
+ state.getValueForRequestKey("height")
+ );
+
+ const sampler = useImageCreate((state) =>
+ state.getValueForRequestKey("sampler")
+ );
+
+ const propertyOpen = useCreateUI((state) => state.isOpenAdvPropertySettings);
+ const togglePropertyOpen = useCreateUI(
+ (state) => state.toggleAdvPropertySettings
+ );
+
+ return (
+
+ );
+}
diff --git a/ui/frontend/build_src/src/components/organisms/creationPanel/advancedSettings/workflowSettings/index.tsx b/ui/frontend/build_src/src/components/organisms/creationPanel/advancedSettings/workflowSettings/index.tsx
new file mode 100644
index 00000000..ac08418e
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/creationPanel/advancedSettings/workflowSettings/index.tsx
@@ -0,0 +1,84 @@
+import React from "react";
+import { useImageCreate } from "../../../../../stores/imageCreateStore";
+
+import { useCreateUI } from "../../creationPanelUIStore";
+
+import {
+ SettingItem,
+} from "../../../../../styles/shared.css";
+
+import {
+ buttonStyle,
+} from "../../../../_recipes/button.css";
+
+import { useTranslation } from "react-i18next";
+
+export default function WorkflowSettings() {
+ const { t } = useTranslation();
+
+ const numOutputs = useImageCreate((state) =>
+ state.getValueForRequestKey("num_outputs")
+ );
+ const parallelCount = useImageCreate((state) => state.parallelCount);
+
+ const setRequestOption = useImageCreate((state) => state.setRequestOptions);
+ const setParallelCount = useImageCreate((state) => state.setParallelCount);
+ const shouldStreamImages = useImageCreate((state) => state.getValueForRequestKey("stream_image_progress"));
+
+ const workflowOpen = useCreateUI((state) => state.isOpenAdvWorkflowSettings);
+ const toggleWorkflowOpen = useCreateUI(
+ (state) => state.toggleAdvWorkflowSettings
+ );
+
+ return (
+
+ );
+}
diff --git a/ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/basicCreation.css.ts b/ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/basicCreation.css.ts
new file mode 100644
index 00000000..10b402b1
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/basicCreation.css.ts
@@ -0,0 +1,20 @@
+import { style, globalStyle } from "@vanilla-extract/css";
+
+import { card } from "../../../_recipes/card.css";
+
+
+export const CreationBasicMain = style([
+ card({
+ backing: 'normal',
+ level: 1
+ }), {
+ position: "relative",
+ width: "100%",
+ }]
+);
+
+export const PromptDisplay = style({});
+
+globalStyle(`${CreationBasicMain} > *`, {
+ marginBottom: '10px'
+});
diff --git a/ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/index.tsx b/ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/index.tsx
new file mode 100644
index 00000000..b1aa67c9
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/index.tsx
@@ -0,0 +1,37 @@
+import React, { ChangeEvent } from "react";
+import { useImageCreate } from "../../../../stores/imageCreateStore";
+
+import {
+ CreationBasicMain,
+ PromptDisplay,
+} from "./basicCreation.css";
+
+import MakeButton from "../../../molecules/makeButton";
+
+import PromptCreator from "./promptCreator";
+// import CreationActions from "./creationActions";
+import SeedImage from "./seedImage";
+import ActiveTags from "./promptCreator/activeTags";
+
+import { useTranslation } from "react-i18next";
+
+export default function BasicCreation() {
+ const { t } = useTranslation();
+
+ const promptText = useImageCreate((state) =>
+ state.getValueForRequestKey("prompt")
+ );
+ const setRequestOption = useImageCreate((state) => state.setRequestOptions);
+
+ const handlePromptChange = (event: ChangeEvent) => {
+ setRequestOption("prompt", event.target.value);
+ };
+
+ return (
+
+ );
+}
diff --git a/ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/promptCreator/activeTags/activeTags.css.ts b/ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/promptCreator/activeTags/activeTags.css.ts
new file mode 100644
index 00000000..555f620d
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/promptCreator/activeTags/activeTags.css.ts
@@ -0,0 +1,18 @@
+import { style } from '@vanilla-extract/css';
+import { vars } from '../../../../../../styles/theme/index.css';
+export const ActiveTagListMain = style({
+ display: 'flex',
+ flexDirection: 'row',
+ flexWrap: 'wrap',
+ gap: '10px',
+ width: '100%',
+ height: '100%',
+ overflow: 'visible',
+ scrollbarWidth: 'none',
+ msOverflowStyle: 'none',
+ '::-webkit-scrollbar': {
+ display: 'none',
+ },
+});
+
+
diff --git a/ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/promptCreator/activeTags/index.tsx b/ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/promptCreator/activeTags/index.tsx
new file mode 100644
index 00000000..9406d430
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/promptCreator/activeTags/index.tsx
@@ -0,0 +1,39 @@
+import React from "react";
+
+import { useImageCreate } from "../../../../../../stores/imageCreateStore";
+import ModifierTag from "../../../../../molecules/modifierTag";
+
+// import {
+// card
+// } from '../../../../../_recipes/card.css';
+
+
+
+import PromptTag from "../../../../../molecules/promptTag";
+
+import {
+ ActiveTagListMain
+} from "./activeTags.css";
+
+
+export default function ActiveTags() {
+ const selectedtags = useImageCreate((state) => state.selectedTags());
+
+ const createTags = useImageCreate((state) => state.createTags);
+
+ return (
+
+
+ {createTags.map((tag) => {
+ console.log(tag);
+ return (
+
+ {/* @ts-expect-error */}
+
+ )
+ }
+ )}
+
+
+ );
+}
diff --git a/ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/promptCreator/index.tsx b/ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/promptCreator/index.tsx
new file mode 100644
index 00000000..a7755371
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/promptCreator/index.tsx
@@ -0,0 +1,108 @@
+import React, { useState, ChangeEvent, KeyboardEventHandler, Fragment } from "react";
+import { v4 as uuidv4 } from "uuid";
+import { Switch } from '@headlessui/react'
+
+import { useImageCreate } from "../../../../../stores/imageCreateStore";
+
+import ActiveTags from "./activeTags";
+
+import {
+ IconFont,
+} from "../../../../../styles/shared.css";
+
+import {
+ buttonStyle,
+} from "../../../../_recipes/button.css";
+
+import {
+ PromptCreatorMain,
+ ToggleGroupMain,
+ ToggleMain,
+ ToggleLabel,
+ ToggleEnabled,
+ TogglePill,
+ buttonRow,
+} from "./promptCreator.css";
+
+
+
+import { useTranslation } from "react-i18next";
+import { type } from "os";
+
+interface TagTypeProps {
+ positive: boolean;
+ setPositive: (positive: boolean) => void;
+};
+
+function TagTypeToggle({ positive, setPositive }: TagTypeProps) {
+ return (
+
+
+ Type
+
+
+ {positive
+ ?
+ : }
+
+
+
+
+ );
+}
+
+export default function PromptCreator() {
+
+ const [positive, setPositive] = useState(true)
+ const [tagText, setTagText] = useState('An astronaut riding a horse');
+
+ const addCreateTag = useImageCreate((state) => state.addCreateTag);
+
+ const { t } = useTranslation();
+
+ const checkForEnter = (event: KeyboardEventHandler) => {
+ // @ts-expect-error
+ if (event.key === "Enter") {
+ if (tagText !== '') {
+ const type = positive ? "positive" : "negative";
+
+ tagText.split(',').map((tag) => tag.trim()).forEach((tag) => {
+ addCreateTag({ id: uuidv4(), name: tag, type });
+ });
+ //debugger;
+
+ setTagText('');
+ }
+ }
+ };
+
+ return (
+
+
+
{t("home.editor-title")}
+ {/* @ts-expect-error */}
+
{
+ setTagText(event.target.value)
+ }}>
+
+
+ {
+ }}
+ >
+ Add Prompt
+
+
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/promptCreator/promptCreator.css.ts b/ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/promptCreator/promptCreator.css.ts
new file mode 100644
index 00000000..fbda231d
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/promptCreator/promptCreator.css.ts
@@ -0,0 +1,79 @@
+import { style, globalStyle } from '@vanilla-extract/css';
+
+import { vars } from "../../../../../styles/theme/index.css";
+
+export const PromptCreatorMain = style({
+ display: 'flex',
+ flexDirection: 'column',
+ width: '100%',
+ height: '100%',
+ marginBottom: 0,
+});
+
+globalStyle(`${PromptCreatorMain} input`, {
+ width: '100%',
+});
+
+globalStyle(`${PromptCreatorMain} > div`, {
+ marginBottom: vars.spacing.small,
+});
+
+export const ToggleGroupMain = style({
+ // '--toggle-size': '30px',
+});
+
+export const ToggleMain = style({
+ background: vars.backgroundDark,
+ height: '22px',
+ borderRadius: '15px',
+ width: '34px',
+ border: 0,
+ position: 'relative',
+ display: 'inline-flex',
+ padding: 0,
+ flexDirection: 'column',
+ alignItems: 'center',
+ justifyContent: 'center',
+ boxShadow: `0 0 2px 0 ${vars.backgroundDark}`,
+});
+
+export const ToggleLabel = style({
+});
+
+export const ToggleEnabled = style({
+});
+
+globalStyle(`${ToggleMain}[data-headlessui-state="checked"]`, {
+ background: vars.backgroundLight,
+});
+
+export const TogglePill = style({
+ display: 'inline-flex',
+ height: '18px',
+ width: '30px',
+ borderRadius: '15px',
+ background: vars.backgroundDark,
+ flexDirection: 'column',
+ alignItems: 'center',
+ justifyContent: 'center',
+});
+
+globalStyle(`${ToggleMain}[data-headlessui-state="checked"] ${TogglePill}`, {
+ background: vars.backgroundAccentMain,
+});
+
+globalStyle(`${TogglePill} p`, {
+ color: vars.colors.text.normal,
+});
+
+
+export const buttonRow = style({
+ marginTop: vars.spacing.small,
+ display: 'flex',
+ flexDirection: 'row',
+});
+
+globalStyle(`${buttonRow} > button`, {
+ flexGrow: 1,
+ marginRight: vars.spacing.medium,
+});
\ No newline at end of file
diff --git a/ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/seedImage/index.tsx b/ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/seedImage/index.tsx
new file mode 100644
index 00000000..7ceb78f5
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/seedImage/index.tsx
@@ -0,0 +1,108 @@
+import React, { useRef, ChangeEvent } from "react";
+
+
+
+import { XButton } from "../../../../../styles/shared.css";
+
+import {
+ ImageInputDisplay,
+ InputLabel,
+ ImageInput,
+ ImageFixer,
+} from "./seedImage.css";
+
+import {
+ buttonStyle
+} from "../../../../_recipes/button.css";
+
+import { useImageCreate } from "../../../../../stores/imageCreateStore";
+
+import { useTranslation } from "react-i18next";
+
+// TODO : figure out why this needs props to be passed in.. fixes a type error
+// when the component is used in the parent component
+export default function SeedImage(_props: any) {
+ const { t } = useTranslation();
+
+ const imageInputRef = useRef(null);
+
+ const initImage = useImageCreate((state) =>
+ state.getValueForRequestKey("init_image")
+ );
+
+ const isInPaintingMode = useImageCreate((state) => state.isInpainting);
+
+ const setRequestOption = useImageCreate((state) => state.setRequestOptions);
+
+ const _startFileSelect = () => {
+ imageInputRef.current?.click();
+ };
+ const _handleFileSelect = (event: ChangeEvent) => {
+ // @ts-expect-error
+ const file = event.target.files[0];
+
+ if (void 0 !== file) {
+ const reader = new FileReader();
+ reader.onload = (e) => {
+ if (e.target != null) {
+ setRequestOption("init_image", e.target.result);
+ }
+ };
+ reader.readAsDataURL(file);
+ }
+ };
+
+ const toggleInpainting = useImageCreate((state) => state.toggleInpainting);
+
+ const _handleClearImage = () => {
+ setRequestOption("init_image", undefined);
+
+ setRequestOption("mask", undefined);
+ if (isInPaintingMode) {
+ toggleInpainting();
+ }
+ };
+
+ return (
+
+
+
+ {t("home.initial-img-txt")}
+
+
+
+ {t("home.initial-img-btn")}
+
+
+
+
+ {void 0 !== initImage && (
+ <>
+
+
+
+ X
+
+
+
+ {
+ toggleInpainting();
+ }}
+ checked={isInPaintingMode}
+ >
+ {t("in-paint.txt")}
+
+ >
+ )}
+
+
+ );
+}
\ No newline at end of file
diff --git a/ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/seedImage/seedImage.css.ts b/ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/seedImage/seedImage.css.ts
new file mode 100644
index 00000000..8a5f4a99
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/seedImage/seedImage.css.ts
@@ -0,0 +1,23 @@
+import { style } from "@vanilla-extract/css";
+
+import { vars } from "../../../../../styles/theme/index.css";
+
+export const ImageInputDisplay = style({
+ display: "flex",
+});
+
+export const InputLabel = style({
+ marginBottom: vars.spacing.small,
+ display: "block",
+});
+
+export const ImageInput = style({
+ display: "none",
+});
+
+
+// this is needed to fix an issue with the image input text
+// when that is a drag an drop we can remove this
+export const ImageFixer = style({
+ marginLeft: "20px",
+});
diff --git a/ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/showQueue/index.tsx b/ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/showQueue/index.tsx
new file mode 100644
index 00000000..287c70ca
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/showQueue/index.tsx
@@ -0,0 +1,21 @@
+import React from "react";
+
+import { useCreateUI } from "../../creationPanelUIStore";
+
+export default function ShowQueue() {
+
+ const showQueue = useCreateUI((state) => state.showQueue);
+ const toggleQueue = useCreateUI((state) => state.toggleQueue);
+
+ return (
+
+ toggleQueue()}
+ >
+
+ Display Queue
+
+ );
+}
\ No newline at end of file
diff --git a/ui/frontend/build_src/src/components/organisms/creationPanel/creationPanel.css.ts b/ui/frontend/build_src/src/components/organisms/creationPanel/creationPanel.css.ts
new file mode 100644
index 00000000..47e6c5c5
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/creationPanel/creationPanel.css.ts
@@ -0,0 +1,21 @@
+import { style, globalStyle } from "@vanilla-extract/css";
+import { vars } from "../../../styles/theme/index.css";
+export const CreationPaneMain = style({
+ position: "relative",
+ width: "100%",
+ height: "100%",
+ overflowY: "auto",
+ overflowX: "hidden",
+});
+
+globalStyle(`${CreationPaneMain} > div`, {
+ marginBottom: vars.spacing.medium,
+});
+
+export const InpaintingSlider = style({
+ position: "absolute",
+ top: "10px",
+ left: "400px",
+ zIndex: 1,
+ backgroundColor: "rgba(0, 0, 0, 0.5)",
+});
diff --git a/ui/frontend/build_src/src/components/organisms/creationPanel/creationPanelUIStore.ts b/ui/frontend/build_src/src/components/organisms/creationPanel/creationPanelUIStore.ts
new file mode 100644
index 00000000..6a615dee
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/creationPanel/creationPanelUIStore.ts
@@ -0,0 +1,89 @@
+import create from "zustand";
+import produce from "immer";
+import { persist } from "zustand/middleware";
+
+export interface ImageCreationUIOptions {
+ isOpenAdvancedSettings: boolean;
+ isOpenAdvImprovementSettings: boolean;
+ isOpenAdvPropertySettings: boolean;
+ isOpenAdvWorkflowSettings: boolean;
+ isOpenImageModifier: boolean;
+ showQueue: boolean;
+
+ toggleAdvancedSettings: () => void;
+ toggleAdvImprovementSettings: () => void;
+ toggleAdvPropertySettings: () => void;
+ toggleAdvWorkflowSettings: () => void;
+
+ toggleImageModifier: () => void;
+ toggleQueue: () => void;
+
+}
+
+export const useCreateUI = create(
+ //@ts-expect-error
+ persist(
+ (set, get) => ({
+ isOpenAdvancedSettings: false,
+ isOpenAdvImprovementSettings: false,
+ isOpenAdvPropertySettings: false,
+ isOpenAdvWorkflowSettings: false,
+ isOpenImageModifier: false,
+ showQueue: false,
+
+ toggleAdvancedSettings: () => {
+ set(
+ produce((state: ImageCreationUIOptions) => {
+ state.isOpenAdvancedSettings = !state.isOpenAdvancedSettings;
+ })
+ );
+ },
+
+ toggleAdvImprovementSettings: () => {
+ set(
+ produce((state: ImageCreationUIOptions) => {
+ state.isOpenAdvImprovementSettings =
+ !state.isOpenAdvImprovementSettings;
+ })
+ );
+ },
+
+ toggleAdvPropertySettings: () => {
+ set(
+ produce((state: ImageCreationUIOptions) => {
+ state.isOpenAdvPropertySettings = !state.isOpenAdvPropertySettings;
+ })
+ );
+ },
+
+ toggleAdvWorkflowSettings: () => {
+ set(
+ produce((state: ImageCreationUIOptions) => {
+ state.isOpenAdvWorkflowSettings = !state.isOpenAdvWorkflowSettings;
+ })
+ );
+ },
+
+ toggleImageModifier: () => {
+ set(
+ produce((state: ImageCreationUIOptions) => {
+ state.isOpenImageModifier = !state.isOpenImageModifier;
+ })
+ );
+ },
+
+ toggleQueue: () => {
+ set(
+ produce((state: ImageCreationUIOptions) => {
+ state.showQueue = !state.showQueue;
+ })
+ );
+ },
+
+ }),
+ {
+ name: "createUI",
+ // getStorage: () => localStorage,
+ }
+ )
+);
diff --git a/ui/frontend/build_src/src/components/organisms/creationPanel/imageModifiers/imageModifiers.css.ts b/ui/frontend/build_src/src/components/organisms/creationPanel/imageModifiers/imageModifiers.css.ts
new file mode 100644
index 00000000..61056131
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/creationPanel/imageModifiers/imageModifiers.css.ts
@@ -0,0 +1,33 @@
+import { style, globalStyle } from "@vanilla-extract/css";
+import { vars } from "../../../../styles/theme/index.css";
+
+export const ImagerModifierGroups = style({
+ // marginBottom: vars.spacing.small,
+ paddingLeft: 0,
+ listStyleType: "none",
+});
+
+globalStyle(`${ImagerModifierGroups} li`, {
+ marginTop: vars.spacing.medium,
+});
+
+export const ImageModifierGrouping = style({
+ marginTop: vars.spacing.medium,
+});
+
+globalStyle(`${ImageModifierGrouping} h4`, {
+ fontSize: vars.fonts.sizes.Plain,
+});
+
+
+export const ModifierListStyle = style({
+ paddingLeft: 0,
+ listStyleType: "none",
+ display: "flex",
+ flexWrap: "wrap",
+ gap: vars.spacing.small,
+});
+
+globalStyle(`${ModifierListStyle} li`, {
+ margin: 0,
+});
diff --git a/ui/frontend/build_src/src/components/organisms/creationPanel/imageModifiers/index.tsx b/ui/frontend/build_src/src/components/organisms/creationPanel/imageModifiers/index.tsx
new file mode 100644
index 00000000..9dce96d1
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/creationPanel/imageModifiers/index.tsx
@@ -0,0 +1,115 @@
+import React, { useState } from "react";
+
+import {
+ MenuButton,
+} from "../../../../styles/shared.css";
+
+import {
+ card
+} from '../../../_recipes/card.css';
+
+import {
+ buttonStyle,
+} from "../../../_recipes/button.css";
+
+import {
+ ImagerModifierGroups,
+ ImageModifierGrouping,
+ ModifierListStyle,
+} from "./imageModifiers.css";
+
+import { ModifierObject, useImageCreate } from "../../../../stores/imageCreateStore";
+import { useCreateUI } from "../creationPanelUIStore";
+
+import ModifierTag from "../../../molecules/modifierTag";
+
+interface ModifierListProps {
+ category: string;
+ tags: ModifierObject[];
+}
+
+function ModifierList({ tags, category }: ModifierListProps) {
+ return (
+
+ {tags.map((tag) => (
+
+
+
+ ))}
+
+ );
+}
+
+interface ModifierGroupingProps {
+ title: string;
+ category: string;
+ tags: ModifierObject[];
+}
+
+function ModifierGrouping({ title, category, tags }: ModifierGroupingProps) {
+ // doing this localy for now, but could move to a store
+ // and persist if we wanted to
+ const [isExpanded, setIsExpanded] = useState(false);
+
+ const _toggleExpand = () => {
+ setIsExpanded(!isExpanded);
+ };
+
+ return (
+
+
+ {title}
+
+ {isExpanded && }
+
+ );
+}
+
+export default function ImageModifers() {
+ const allModifiers = useImageCreate((state) => state.allModifiers);
+
+ const imageModifierIsOpen = useCreateUI((state) => state.isOpenImageModifier);
+ const toggleImageModifiersIsOpen = useCreateUI(
+ (state) => state.toggleImageModifier
+ );
+
+ const handleClick = () => {
+ toggleImageModifiersIsOpen();
+ };
+
+ return (
+
+
+ Image Modifiers
+
+
+ {imageModifierIsOpen && (
+
+ {allModifiers.map((item, index) => {
+ return (
+
+
+
+ );
+ })}
+
+ )}
+
+ );
+}
diff --git a/ui/frontend/build_src/src/components/organisms/creationPanel/imageModifiers/modifiers.mock.ts b/ui/frontend/build_src/src/components/organisms/creationPanel/imageModifiers/modifiers.mock.ts
new file mode 100644
index 00000000..4a3fe97e
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/creationPanel/imageModifiers/modifiers.mock.ts
@@ -0,0 +1,18 @@
+const Mockifiers = [
+ [
+ "Drawing Style",
+ [
+ "Cel Shading",
+ "Children's Drawing",
+ "Crosshatch",
+ "Detailed and Intricate",
+ "Doodle",
+ "Dot Art",
+ "Line Art",
+ "Sketch",
+ ],
+ ],
+ ["Visual Style", ["2D", "8-bit", "16-bit", "Anaglyph", "Anime", "CGI"]],
+];
+
+export default Mockifiers;
diff --git a/ui/frontend/build_src/src/components/organisms/creationPanel/index.tsx b/ui/frontend/build_src/src/components/organisms/creationPanel/index.tsx
new file mode 100644
index 00000000..9730ba11
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/creationPanel/index.tsx
@@ -0,0 +1,43 @@
+import React, { ChangeEvent } from "react";
+
+import BasicCreation from "./basicCreation";
+import AdvancedSettings from "./advancedSettings";
+import ImageModifiers from "./imageModifiers";
+import InpaintingPanel from "./inpaintingPanel";
+
+import QueueDisplay from "../queueDisplay";
+
+// this works but causes type errors so its not worth it for now
+// import { useImageCreate } from "@stores/imageCreateStore.ts";
+
+import { useImageCreate } from "../../../stores/imageCreateStore";
+import { useRequestQueue } from "../../../stores/requestQueueStore";
+
+
+import {
+ CreationPaneMain,
+ InpaintingSlider,
+} from "./creationPanel.css";
+
+
+export default function CreationPanel() {
+ const isInPaintingMode = useImageCreate((state) => state.isInpainting);
+
+ const hasQueue = useRequestQueue((state) => state.hasAnyQueue());
+
+ return (
+ <>
+
+
+ {isInPaintingMode && (
+
+
+
+ )}
+ >
+ );
+}
diff --git a/ui/frontend/build_src/src/components/organisms/creationPanel/inpaintingPanel/index.tsx b/ui/frontend/build_src/src/components/organisms/creationPanel/inpaintingPanel/index.tsx
new file mode 100644
index 00000000..3e56f8a3
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/creationPanel/inpaintingPanel/index.tsx
@@ -0,0 +1,114 @@
+import React, { useRef, useState, ChangeEvent } from "react";
+import DrawImage from "../../../molecules/drawImage";
+
+import { useImageCreate } from "../../../../stores/imageCreateStore";
+
+import {
+ InpaintingPanelMain,
+ InpaintingControls,
+ InpaintingControlRow,
+} from "./inpaintingPanel.css";
+
+export default function InpaintingPanel() {
+ // no idea if this is the right typing
+ // const drawingRef = useRef(null);
+
+ const [brushSize, setBrushSize] = useState("20");
+ const [brushShape, setBrushShape] = useState("round");
+ const [brushColor, setBrushColor] = useState("#fff");
+ const [isErasing, setIsErasing] = useState(false);
+
+ const initImage = useImageCreate((state) =>
+ state.getValueForRequestKey("init_image")
+ );
+
+ const setRequestOption = useImageCreate((state) => state.setRequestOptions);
+
+ const setMask = (data: string) => {
+ setRequestOption("mask", data);
+ }
+
+
+ const _handleBrushMask = () => {
+ setIsErasing(false);
+ };
+
+ const _handleBrushErase = () => {
+ setIsErasing(true);
+ };
+
+
+ const _handleBrushSize = (event: ChangeEvent) => {
+ setBrushSize(event.target.value);
+ };
+
+ return (
+
+
+
+
+ Mask
+ Erase
+ {/*
+ Fill
+
+
+ Clear
+ */}
+
+
+ Brush Size
+
+
+
+
+
+ {
+ setBrushShape("round");
+ }}
+ >
+ Cirle Brush
+
+ {
+ setBrushShape("square");
+ }}
+ >
+ Square Brush
+
+
+ {/* {
+ setBrushColor("#000");
+ }}
+ >
+ Dark Brush
+ */}
+ {/* {
+ setBrushColor("#fff");
+ }}
+ >
+ Light Brush
+ */}
+
+
+
+ );
+}
diff --git a/ui/frontend/build_src/src/components/organisms/creationPanel/inpaintingPanel/inpaintingPanel.css.ts b/ui/frontend/build_src/src/components/organisms/creationPanel/inpaintingPanel/inpaintingPanel.css.ts
new file mode 100644
index 00000000..84f432ff
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/creationPanel/inpaintingPanel/inpaintingPanel.css.ts
@@ -0,0 +1,27 @@
+import { style } from "@vanilla-extract/css";
+
+export const InpaintingPanelMain = style({
+ position: "relative",
+ width: "100%",
+ height: "100%",
+ padding: "10px 10px",
+});
+
+export const InpaintingControls = style({
+ display: "flex",
+ flexDirection: "row",
+ width: "100%",
+ flexWrap: "wrap",
+});
+
+export const InpaintingControlRow = style({
+ display: "flex",
+ flexDirection: "row",
+ justifyContent: "space-evenly",
+ alignItems: "center",
+ width: "100%",
+
+ ":first-of-type": {
+ margin: "10px 0",
+ },
+});
diff --git a/ui/frontend/build_src/src/components/organisms/currentDisplay/currentDisplay.css.ts b/ui/frontend/build_src/src/components/organisms/currentDisplay/currentDisplay.css.ts
new file mode 100644
index 00000000..15ba7cc0
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/currentDisplay/currentDisplay.css.ts
@@ -0,0 +1,12 @@
+import { style } from '@vanilla-extract/css'
+
+// handles all 3
+export const currentDisplayMain = style({
+ display: 'flex',
+ flexDirection: 'column',
+ justifyContent: 'center',
+ alignItems: 'center',
+ height: '100%',
+ width: '100%',
+ padding: '0 0 0 0',
+})
diff --git a/ui/frontend/build_src/src/components/organisms/currentDisplay/imageDisplay/imageDisplay.css.ts b/ui/frontend/build_src/src/components/organisms/currentDisplay/imageDisplay/imageDisplay.css.ts
new file mode 100644
index 00000000..ad84a309
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/currentDisplay/imageDisplay/imageDisplay.css.ts
@@ -0,0 +1,40 @@
+import { style, globalStyle } from '@vanilla-extract/css'
+
+import { vars } from '../../../../styles/theme/index.css'
+
+export const imageDisplayMain = style({
+ height: '100%',
+ width: '100%',
+ display: 'flex',
+ flexDirection: 'column',
+});
+
+export const imageDisplayContainer = style({
+ height: '100%',
+ width: '80%',
+ display: 'flex',
+ justifyContent: 'center',
+});
+
+export const imageDisplayCenter = style({
+ width: '100%',
+ maxWidth: '1000px',
+ position: 'relative',
+});
+
+export const imageDisplayContent = style({
+ display: 'flex',
+ flexDirection: 'column',
+});
+
+globalStyle(`${imageDisplayContent} > div`, {
+ marginBottom: vars.spacing.medium,
+});
+
+globalStyle(`${imageDisplayContent} p`, {
+ marginBottom: vars.spacing.small,
+});
+
+globalStyle(`${imageDisplayContent} button`, {
+ marginRight: vars.spacing.medium,
+});
\ No newline at end of file
diff --git a/ui/frontend/build_src/src/components/organisms/currentDisplay/imageDisplay/index.tsx b/ui/frontend/build_src/src/components/organisms/currentDisplay/imageDisplay/index.tsx
new file mode 100644
index 00000000..48cfe2ae
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/currentDisplay/imageDisplay/index.tsx
@@ -0,0 +1,100 @@
+/* eslint-disable @typescript-eslint/naming-convention */
+import React from "react";
+import { useImageCreate } from "../../../../stores/imageCreateStore";
+import { CompletedImagesType } from "../../../../stores/imageDisplayStore";
+
+import GeneratedImage from "../../../molecules/generatedImage";
+
+import {
+ imageDisplayMain,
+ imageDisplayContainer,
+ imageDisplayCenter,
+ imageDisplayContent,
+} from './imageDisplay.css';
+
+
+import {
+ buttonStyle
+} from "../../../_recipes/button.css";
+
+export default function ImageDisplay({ info, data }: CompletedImagesType) {
+
+ const createFileName = () => {
+ const {
+ prompt,
+ negative_prompt,
+ seed,
+ num_inference_steps,
+ guidance_scale,
+ use_face_correction,
+ use_upscale,
+ width,
+ height,
+ } = info;
+
+ // Most important information is the prompt
+ let underscoreName = prompt.replace(/[^a-zA-Z0-9]/g, "_");
+ underscoreName = underscoreName.substring(0, 100);
+ // name and the top level metadata
+ let fileName = `${underscoreName}_Seed-${seed}_Steps-${num_inference_steps}_Guidance-${guidance_scale}`;
+ // Add the face correction and upscale
+ if (typeof use_face_correction == "string") {
+ fileName += `_FaceCorrection-${use_face_correction}`;
+ }
+ if (typeof use_upscale == "string") {
+ fileName += `_Upscale-${use_upscale}`;
+ }
+ // Add the width and height
+ fileName += `_${width}x${height}`;
+ // add the file extension
+ fileName += ".png";
+ // return fileName
+ return fileName;
+ };
+
+ const setRequestOption = useImageCreate((state) => state.setRequestOptions);
+
+ const _handleSave = () => {
+ const link = document.createElement("a");
+ link.download = createFileName();
+ link.href = data ?? "";
+ link.click();
+ };
+
+ const _handleUseAsInput = () => {
+ setRequestOption("init_image", data);
+ };
+
+ return (
+
+
+
+
+
+
+
+
+
{info?.prompt}
+
{info?.negative_prompt}
+
+ Save
+ Use as Input
+
+
+
+
+
+
+
+
+
+
+ );
+};
diff --git a/ui/frontend/build_src/src/components/organisms/currentDisplay/index.tsx b/ui/frontend/build_src/src/components/organisms/currentDisplay/index.tsx
new file mode 100644
index 00000000..458deac6
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/currentDisplay/index.tsx
@@ -0,0 +1,58 @@
+import React, { useEffect, useState } from "react";
+
+import { FetchingStates, useImageFetching } from "../../../stores/imageFetchingStore";
+import { useImageDisplay } from "../../../stores/imageDisplayStore";
+
+import { API_URL } from "../../../api";
+
+import {
+ currentDisplayMain,
+} from './currentDisplay.css';
+
+import ImageDisplay from "./imageDisplay";
+
+const IdleDisplay = () => {
+ return (
+ Try Making a new image!
+ );
+};
+
+const LoadingDisplay = ({ images }: { images: string[] }) => {
+
+ return (
+ <>
+ {images.map((image, index) => {
+ if (index == images.length - 1) {
+ return (
+
+ )
+ }
+ })
+ }
+ >
+ );
+};
+
+export default function CurrentDisplay() {
+
+ const status = useImageFetching((state) => state.status);
+ const currentImage = useImageDisplay((state) => state.currentImage);
+
+ const progressImages = useImageFetching((state) => state.progressImages);
+
+ return (
+
+
+ {(currentImage == null) && }
+ {/* {(status === FetchingStates.FETCHING || status === FetchingStates.PROGRESSING) && }
+ {(currentImage != null) && } */}
+
+ {
+ (progressImages.length > 0)
+ ?
+ : (currentImage != null) &&
+ }
+
+
+ );
+}
\ No newline at end of file
diff --git a/ui/frontend/build_src/src/components/organisms/currentInfo/currentInfo.css.ts b/ui/frontend/build_src/src/components/organisms/currentInfo/currentInfo.css.ts
new file mode 100644
index 00000000..167d8c2d
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/currentInfo/currentInfo.css.ts
@@ -0,0 +1,22 @@
+import { style } from '@vanilla-extract/css'
+
+import {
+ card as cardStyles,
+} from '../../_recipes/card.css'
+
+export const currentInfoMain = style([
+ cardStyles(
+ {
+ backing: 'dark',
+ }
+ ),
+ {
+ // display: 'flex',
+ // flexDirection: 'column',
+ // justifyContent: 'center',
+ // alignItems: 'center',
+ // height: '100%',
+ width: '250px',
+ padding: '0 0 0 0',
+ },
+])
diff --git a/ui/frontend/build_src/src/components/organisms/currentInfo/index.tsx b/ui/frontend/build_src/src/components/organisms/currentInfo/index.tsx
new file mode 100644
index 00000000..bb131621
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/currentInfo/index.tsx
@@ -0,0 +1,7 @@
+import React from "react";
+import { currentInfoMain } from "./currentInfo.css";
+export default function CurrentInfo() {
+ return current info
;
+}
\ No newline at end of file
diff --git a/ui/frontend/build_src/src/components/organisms/footerDisplay/footerDisplay.css.ts b/ui/frontend/build_src/src/components/organisms/footerDisplay/footerDisplay.css.ts
new file mode 100644
index 00000000..9dc7cb4d
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/footerDisplay/footerDisplay.css.ts
@@ -0,0 +1,59 @@
+import { style, globalStyle } from "@vanilla-extract/css";
+
+import { vars } from "../../../styles/theme/index.css";
+
+export const FooterDisplayMain = style({
+ color: vars.colors.text.normal,
+ fontSize: vars.fonts.sizes.Caption,
+
+ display: "inline-block",
+ // marginTop: vars.spacing.medium,
+ // marginBottom: vars.spacing.medium,
+ // TODO move this to the theme
+ padding: vars.spacing.small,
+ boxShadow:
+ "0 4px 8px 0 rgba(0, 0, 0, 0.15), 0 6px 20px 0 rgba(0, 0, 0, 0.15)",
+});
+
+export const CoffeeButton = style({
+ height: "23px",
+ transform: "translateY(25%)",
+});
+
+globalStyle(`${FooterDisplayMain} a`, {
+ color: vars.colors.link,
+ textDecoration: "none",
+});
+
+globalStyle(`${FooterDisplayMain} a:hover`, {
+ textDecoration: "underline",
+});
+
+globalStyle(`${FooterDisplayMain} a:visited`, {
+ color: vars.colors.link,
+});
+
+globalStyle(`${FooterDisplayMain} a:active`, {
+ color: vars.colors.link,
+});
+
+globalStyle(`${FooterDisplayMain} a:focus`, {
+ color: vars.colors.link,
+});
+
+globalStyle(`${FooterDisplayMain} p`, {
+ margin: vars.spacing.min,
+});
+
+// .footer-display {
+// color: #ffffff;
+// display: flex;
+// flex-direction: column;
+// align-items: center;
+// justify-content: center;
+// }
+
+// #coffeeButton {
+// height: 23px;
+// transform: translateY(25%);
+// }
diff --git a/ui/frontend/build_src/src/components/organisms/footerDisplay/index.tsx b/ui/frontend/build_src/src/components/organisms/footerDisplay/index.tsx
new file mode 100644
index 00000000..428ee3f8
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/footerDisplay/index.tsx
@@ -0,0 +1,71 @@
+import React from "react";
+
+import {
+ FooterDisplayMain,
+ CoffeeButton,
+} from "./footerDisplay.css";
+
+import { API_URL } from "../../../api";
+
+export default function FooterDisplay() {
+ return (
+
+
+ If you found this project useful and want to help keep it alive, please{" "}
+
+
+ {" "}
+ to help cover the cost of development and maintenance! Thank you for
+ your support!
+
+
+ Please feel free to join the{" "}
+
+ discord community
+ {" "}
+ or{" "}
+
+ file an issue
+ {" "}
+ if you have any problems or suggestions in using this interface.
+
+
+
+ );
+}
diff --git a/ui/frontend/build_src/src/components/organisms/headerDisplay/headerDisplay.css.ts b/ui/frontend/build_src/src/components/organisms/headerDisplay/headerDisplay.css.ts
new file mode 100644
index 00000000..f1d7a2d0
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/headerDisplay/headerDisplay.css.ts
@@ -0,0 +1,28 @@
+import { style, globalStyle } from "@vanilla-extract/css";
+import { vars } from "../../../styles/theme/index.css";
+
+export const HeaderDisplayMain = style({
+ color: vars.colors.text.normal,
+ display: "flex",
+ justifyContent: "space-between"
+});
+
+globalStyle(`${HeaderDisplayMain} > h1`, {
+ fontSize: vars.fonts.sizes.Title,
+ fontWeight: "bold",
+ marginRight: vars.spacing.medium,
+});
+
+
+export const HeaderTitle = style({
+ marginLeft: vars.spacing.large,
+});
+
+export const HeaderLinks = style({
+ display: "flex",
+ alignItems: "center",
+ flexGrow: 1,
+ justifyContent: "space-between",
+ maxWidth: "300px",
+ marginRight: vars.spacing.large,
+});
\ No newline at end of file
diff --git a/ui/frontend/build_src/src/components/organisms/headerDisplay/helpOptions/helpOptions.css.ts b/ui/frontend/build_src/src/components/organisms/headerDisplay/helpOptions/helpOptions.css.ts
new file mode 100644
index 00000000..e8be07c6
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/headerDisplay/helpOptions/helpOptions.css.ts
@@ -0,0 +1,5 @@
+import { style } from "@vanilla-extract/css";
+
+export const HelpContent = style({
+ width: '300px',
+});
diff --git a/ui/frontend/build_src/src/components/organisms/headerDisplay/helpOptions/index.tsx b/ui/frontend/build_src/src/components/organisms/headerDisplay/helpOptions/index.tsx
new file mode 100644
index 00000000..56ffb8dd
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/headerDisplay/helpOptions/index.tsx
@@ -0,0 +1,61 @@
+import React from "react";
+import { Popover } from '@headlessui/react';
+// import { useTranslation } from "react-i18next";
+
+import {
+ PopoverMain,
+ PopoverButtonStyle,
+ PopoverPanelMain,
+} from "../../../_recipes/popover_headless.css";
+
+import {
+ card
+} from '../../../_recipes/card.css';
+
+import {
+ IconFont,
+ SettingItem
+} from "../../../../styles/shared.css";
+
+import {
+ HelpContent
+} from "./helpOptions.css";
+
+export default function HelpOptions() {
+
+ return (
+
+
+
+ Help & Community
+
+
+
+
+
+
+ );
+};
\ No newline at end of file
diff --git a/ui/frontend/build_src/src/components/organisms/headerDisplay/index.tsx b/ui/frontend/build_src/src/components/organisms/headerDisplay/index.tsx
new file mode 100644
index 00000000..bb7fe3b4
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/headerDisplay/index.tsx
@@ -0,0 +1,62 @@
+import React, { useEffect, useState } from "react";
+
+import { useQuery } from "@tanstack/react-query";
+import { KEY_CONFIG, getConfig } from "../../../api";
+
+import StatusDisplay from "./statusDisplay";
+
+import HelpOptions from "./helpOptions";
+import SystemSettings from "./systemSettings";
+
+import { useTranslation } from "react-i18next";
+
+import {
+ HeaderDisplayMain,
+ HeaderTitle,
+ HeaderLinks,
+} from "./headerDisplay.css";
+
+// import LanguageDropdown from "./languageDropdown";
+
+export default function HeaderDisplay() {
+ const { t } = useTranslation();
+
+ const { status, data } = useQuery([KEY_CONFIG], getConfig);
+
+ const [version, setVersion] = useState("2.1.0");
+ const [release, setRelease] = useState("");
+
+ // this is also in the Beta Mode
+ // TODO: make this a custom hook
+ useEffect(() => {
+ if (status === "success") {
+ // TODO also pass down the actual version
+ const { update_branch: updateBranch } = data;
+
+ // just hard coded for now
+ setVersion("v2.1");
+
+ if (updateBranch === "main") {
+ setRelease("(stable)");
+ } else {
+ setRelease("(beta)");
+ }
+ }
+ }, [status, data, setVersion, setVersion]);
+
+ return (
+
+
+
+ {t("title")} {version} {release}{" "}
+
+
+
+
+
+
+
+ {/*
*/}
+
+ );
+}
diff --git a/ui/frontend/build_src/src/components/organisms/headerDisplay/languageDropdown/index.tsx b/ui/frontend/build_src/src/components/organisms/headerDisplay/languageDropdown/index.tsx
new file mode 100644
index 00000000..f6e3c651
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/headerDisplay/languageDropdown/index.tsx
@@ -0,0 +1,23 @@
+import React, { useState } from "react";
+import { useTranslation } from "react-i18next";
+
+const LanguageDropdown = () => {
+ const { i18n } = useTranslation();
+ const [language, setLanguage] = useState("id");
+
+ const handleLangChange = (evt: any) => {
+ const lang = evt.target.value;
+ console.log(lang);
+ setLanguage(lang);
+ i18n.changeLanguage(lang);
+ };
+
+ return (
+
+ EN
+ ES
+
+ );
+};
+
+export default LanguageDropdown;
diff --git a/ui/frontend/build_src/src/components/organisms/headerDisplay/statusDisplay/index.tsx b/ui/frontend/build_src/src/components/organisms/headerDisplay/statusDisplay/index.tsx
new file mode 100644
index 00000000..c4d47d80
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/headerDisplay/statusDisplay/index.tsx
@@ -0,0 +1,57 @@
+import React, { useEffect, useState, useRef } from "react";
+import { useQuery } from "@tanstack/react-query";
+
+import { healthPing, HEALTH_PING_INTERVAL } from "../../../../api";
+
+import AudioDing from "../../../molecules/audioDing";
+
+import {
+ StartingStatus,
+ ErrorStatus,
+ SuccessStatus,
+} from "./statusDisplay.css";
+
+const startingMessage = "Stable Diffusion is starting...";
+const successMessage = "Stable Diffusion is ready to use!";
+const errorMessage = "Stable Diffusion is not running!";
+
+export default function StatusDisplay({ className }: { className?: string }) {
+ const [statusMessage, setStatusMessage] = useState(startingMessage);
+ const [statusClass, setStatusClass] = useState(StartingStatus);
+
+ const dingRef = useRef();
+
+ // but this will be moved to the status display when it is created
+ const { status, data } = useQuery(["health"], healthPing, {
+ refetchInterval: HEALTH_PING_INTERVAL,
+ });
+
+ useEffect(() => {
+ if (status === "loading") {
+ setStatusMessage(startingMessage);
+ setStatusClass(StartingStatus);
+ } else if (status === "error") {
+ setStatusMessage(errorMessage);
+ setStatusClass(ErrorStatus);
+ } else if (status === "success") {
+ if (data[0] === "OK") {
+ setStatusMessage(successMessage);
+ setStatusClass(SuccessStatus);
+ // catch an auto play error
+ dingRef.current?.play().catch((e) => {
+ console.log('DING!')
+ });
+ } else {
+ setStatusMessage(errorMessage);
+ setStatusClass(ErrorStatus);
+ }
+ }
+ }, [status, data, dingRef]);
+
+ return (
+ <>
+
+ {statusMessage}
+ >
+ );
+}
diff --git a/ui/frontend/build_src/src/components/organisms/headerDisplay/statusDisplay/statusDisplay.css.ts b/ui/frontend/build_src/src/components/organisms/headerDisplay/statusDisplay/statusDisplay.css.ts
new file mode 100644
index 00000000..ccbdacb5
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/headerDisplay/statusDisplay/statusDisplay.css.ts
@@ -0,0 +1,15 @@
+import { style } from "@vanilla-extract/css";
+
+import { vars } from "../../../../styles/theme/index.css";
+
+export const StartingStatus = style({
+ color: `hsl(${vars.warningHue}, ${vars.colorMod.saturation.normal}, ${vars.colorMod.lightness.normal})`,
+});
+
+export const ErrorStatus = style({
+ color: `hsl(${vars.errorHue}, ${vars.colorMod.saturation.normal}, ${vars.colorMod.lightness.normal})`,
+});
+
+export const SuccessStatus = style({
+ color: `hsl(${vars.successHue}, ${vars.colorMod.saturation.normal}, ${vars.colorMod.lightness.normal})`,
+});
diff --git a/ui/frontend/build_src/src/components/organisms/headerDisplay/systemSettings/index.tsx b/ui/frontend/build_src/src/components/organisms/headerDisplay/systemSettings/index.tsx
new file mode 100644
index 00000000..f0162d7e
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/headerDisplay/systemSettings/index.tsx
@@ -0,0 +1,162 @@
+/* eslint-disable @typescript-eslint/strict-boolean-expressions */
+import React from "react";
+import { Popover } from '@headlessui/react';
+import { useTranslation } from "react-i18next";
+
+import { useImageCreate } from "../../../../stores/imageCreateStore";
+
+import BetaMode from "../../../molecules/betaMode";
+
+
+import {
+ IconFont,
+ SettingItem
+} from "../../../../styles/shared.css";
+
+import {
+ PopoverMain,
+ PopoverButtonStyle,
+ PopoverPanelMain,
+} from "../../../_recipes/popover_headless.css";
+
+import {
+ SettingContent
+} from "./systemSettings.css";
+
+// import {
+// SwitchGroupMain,
+// SwitchMain,
+// SwitchLabel,
+// SwitchEnabled,
+// SwitchPill,
+// } from "../../../_headless/switch/index.css";
+
+
+export default function SystemSettings() {
+ const { t } = useTranslation();
+
+ const isUseAutoSave = useImageCreate((state) => state.isUseAutoSave());
+ const diskPath = useImageCreate((state) =>
+ state.getValueForRequestKey("save_to_disk_path")
+ );
+
+ const turbo = useImageCreate((state) => state.getValueForRequestKey("turbo"));
+ const useCpu = useImageCreate((state) =>
+ state.getValueForRequestKey("use_cpu")
+ );
+ const useFullPrecision = useImageCreate((state) =>
+ state.getValueForRequestKey("use_full_precision")
+ );
+
+ const isSoundEnabled = useImageCreate((state) => state.isSoundEnabled());
+
+ const setRequestOption = useImageCreate((state) => state.setRequestOptions);
+ const toggleUseAutoSave = useImageCreate((state) => state.toggleUseAutoSave);
+ const toggleSoundEnabled = useImageCreate(
+ (state) => state.toggleSoundEnabled
+ );
+
+ return (
+
+
+
+ Settings
+
+
+
+
+
+
+
+ );
+}
diff --git a/ui/frontend/build_src/src/components/organisms/headerDisplay/systemSettings/systemSettings.css.ts b/ui/frontend/build_src/src/components/organisms/headerDisplay/systemSettings/systemSettings.css.ts
new file mode 100644
index 00000000..6d7cb097
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/headerDisplay/systemSettings/systemSettings.css.ts
@@ -0,0 +1,5 @@
+import { style } from "@vanilla-extract/css";
+
+export const SettingContent = style({
+ width: '480px',
+});
diff --git a/ui/frontend/build_src/src/components/organisms/queueDisplay/index.tsx b/ui/frontend/build_src/src/components/organisms/queueDisplay/index.tsx
new file mode 100644
index 00000000..c866b797
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/queueDisplay/index.tsx
@@ -0,0 +1,52 @@
+import React from "react";
+import { ImageRequest } from "../../../api";
+
+import { QueuedRequest, useRequestQueue } from "../../../stores/requestQueueStore";
+
+import {
+ QueueDisplayMain,
+ QueueListButtons,
+} from "./queueDisplay.css";
+
+import {
+ buttonStyle
+} from "../../_recipes/button.css";
+
+import ClearQueue from "../../molecules/clearQueue";
+import QueueItem from "./queueItem";
+
+export default function QueueDisplay() {
+
+ const requests: QueuedRequest[] = useRequestQueue((state) => state.requests);
+ const removeCompleted = useRequestQueue((state) => state.removeCompleted);
+ const removeErrored = useRequestQueue((state) => state.removeErrored);
+
+ const clearCompleted = () => {
+ removeCompleted();
+ }
+
+ const clearErrored = () => {
+ removeErrored();
+ }
+
+ return (
+
+
+
+ Clear Completed
+ Clear Errored
+
+ {requests.map((request) => {
+ return
;
+ })}
+
+ );
+};
diff --git a/ui/frontend/build_src/src/components/organisms/queueDisplay/queueDisplay.css.ts b/ui/frontend/build_src/src/components/organisms/queueDisplay/queueDisplay.css.ts
new file mode 100644
index 00000000..d3aa3259
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/queueDisplay/queueDisplay.css.ts
@@ -0,0 +1,28 @@
+import { style, globalStyle } from "@vanilla-extract/css";
+
+
+import { vars } from "../../../styles/theme/index.css";
+
+export const QueueDisplayMain = style({
+ display: "flex",
+ flexDirection: "column",
+ width: '100%',
+ height: '100%',
+});
+
+export const QueueListButtons = style({
+ display: "flex",
+ flexDirection: "row",
+ justifyContent: "space-between",
+ alignItems: "center",
+ marginBottom: vars.spacing.medium,
+ marginTop: vars.spacing.medium,
+});
+
+globalStyle(`${QueueListButtons} button`, {
+ flexGrow: 1,
+});
+
+globalStyle(`${QueueListButtons} button:first-child`, {
+ marginRight: vars.spacing.medium,
+});
\ No newline at end of file
diff --git a/ui/frontend/build_src/src/components/organisms/queueDisplay/queueItem/index.tsx b/ui/frontend/build_src/src/components/organisms/queueDisplay/queueItem/index.tsx
new file mode 100644
index 00000000..0cdf4e10
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/queueDisplay/queueItem/index.tsx
@@ -0,0 +1,125 @@
+/* eslint-disable @typescript-eslint/naming-convention */
+
+import React from "react";
+
+
+import { QueueStatus, QueuedRequest, useRequestQueue } from '../../../../stores/requestQueueStore';
+
+import StopButton from '../../../molecules/stopButton';
+
+import {
+ QueueItemMain,
+ QueueItemInfo,
+ QueueButtons,
+} from "./queueItem.css";
+
+
+import {
+ buttonStyle
+} from "../../../_recipes/button.css";
+
+
+interface QueueItemProps {
+ request: QueuedRequest;
+}
+
+export default function QueueItem({ request }: QueueItemProps) {
+
+ const removeItem = useRequestQueue((state) => state.removeItem);
+ const updateStatus = useRequestQueue((state) => state.updateStatus);
+ const sendPendingToTop = useRequestQueue((state) => state.sendPendingToTop);
+
+ const {
+ id,
+ options: {
+ prompt,
+ num_outputs,
+ seed,
+ sampler,
+ guidance_scale,
+ num_inference_steps,
+
+ },
+ status,
+ } = request;
+
+ const removeFromQueue = () => {
+ removeItem(id);
+ }
+
+ const pauseItem = () => {
+ updateStatus(id, QueueStatus.paused);
+ }
+
+ const retryRequest = () => {
+ updateStatus(id, QueueStatus.pending);
+ }
+
+ const sendToTop = () => {
+ sendPendingToTop(id);
+ }
+
+ return (
+
+
+
+
{prompt}
+
Making {num_outputs} concurrent images
+
+ Seed: {seed}
+ Sampler: {sampler}
+ Guidance Scale: {guidance_scale}
+ Num Inference Steps: {num_inference_steps}
+
+
+
+
+
+ {status === QueueStatus.processing && (
+
+ )}
+
+ {status === QueueStatus.complete && (
+
+ Clear
+
+ )}
+
+ {status === QueueStatus.pending && (
+ <>
+ Remove
+ Pause
+ Send to top
+ >
+ )}
+
+ {status === QueueStatus.paused && (
+ Resume
+ )}
+
+ {status === QueueStatus.error && (
+ Retry
+ )}
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/ui/frontend/build_src/src/components/organisms/queueDisplay/queueItem/queueItem.css.ts b/ui/frontend/build_src/src/components/organisms/queueDisplay/queueItem/queueItem.css.ts
new file mode 100644
index 00000000..54da4020
--- /dev/null
+++ b/ui/frontend/build_src/src/components/organisms/queueDisplay/queueItem/queueItem.css.ts
@@ -0,0 +1,61 @@
+import { style, globalStyle } from "@vanilla-extract/css";
+
+
+import { vars } from "../../../../styles/theme/index.css";
+
+
+import { QueueStatus } from "../../../../stores/requestQueueStore";
+
+
+import {
+ card
+} from '../../../_recipes/card.css';
+
+export const QueueItemMain = style([card(
+ {
+
+ info: true,
+ level: 1
+ }
+), {
+ display: "flex",
+ flexDirection: "column",
+ width: "100%",
+ marginBottom: vars.spacing.medium,
+}]);
+
+export const QueueItemInfo = style({
+
+});
+
+globalStyle(`${QueueItemInfo} p`, {
+ marginBottom: vars.spacing.small,
+});
+
+globalStyle(`${QueueItemMain}.${QueueStatus.complete}`, {
+ borderColor: `hsl(${vars.secondaryHue}, ${vars.colorMod.saturation.normal}, ${vars.colorMod.lightness.normal})`,
+});
+
+globalStyle(`${QueueItemMain}.${QueueStatus.processing}`, {
+ borderColor: `hsl(${vars.tertiaryHue}, ${vars.colorMod.saturation.bright}, ${vars.colorMod.lightness.bright})`,
+});
+
+globalStyle(`${QueueItemMain}.${QueueStatus.pending}`, {
+ borderColor: `hsl(${vars.backgroundAccentMain}, ${vars.colorMod.saturation.bright}, ${vars.colorMod.lightness.normal})`,
+});
+
+globalStyle(`${QueueItemMain}.${QueueStatus.paused}`, {
+ borderColor: `hsl(${vars.backgroundAccentMain}, ${vars.colorMod.saturation.dim}, ${vars.colorMod.lightness.dim})`,
+ backgroundColor: `hsl(${vars.backgroundAccentMain}, ${vars.colorMod.saturation.dim}, ${vars.colorMod.lightness.dim})`,
+});
+
+globalStyle(`${QueueItemMain}.${QueueStatus.error}`, {
+ borderColor: `hsl(${vars.errorHue}, ${vars.colorMod.saturation.normal}, ${vars.colorMod.lightness.normal})`,
+});
+
+export const QueueButtons = style({
+ display: "flex",
+ flexDirection: "row",
+ justifyContent: "space-between",
+ alignItems: "center",
+});
\ No newline at end of file
diff --git a/ui/frontend/build_src/src/main.tsx b/ui/frontend/build_src/src/main.tsx
new file mode 100644
index 00000000..8b61d6f2
--- /dev/null
+++ b/ui/frontend/build_src/src/main.tsx
@@ -0,0 +1,35 @@
+import React from "react";
+import ReactDOM from "react-dom/client";
+
+import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
+
+import { ReactQueryDevtools } from "@tanstack/react-query-devtools";
+
+import { enableMapSet } from "immer";
+
+import App from "./App";
+
+import "./styles/index.css.ts";
+
+const queryClient = new QueryClient({
+ defaultOptions: {
+ queries: {
+ refetchOnWindowFocus: false,
+ refetchOnReconnect: false,
+ refetchOnMount: false,
+ staleTime: Infinity,
+ cacheTime: Infinity,
+ },
+ },
+});
+
+enableMapSet();
+// application entry point
+ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
+
+
+
+
+
+
+);
diff --git a/ui/frontend/build_src/src/modifiers.json b/ui/frontend/build_src/src/modifiers.json
new file mode 100644
index 00000000..d680709e
--- /dev/null
+++ b/ui/frontend/build_src/src/modifiers.json
@@ -0,0 +1,144 @@
+[
+ [
+ "Drawing Style",
+ [
+ "Cel Shading",
+ "Children's Drawing",
+ "Crosshatch",
+ "Detailed and Intricate",
+ "Doodle",
+ "Dot Art",
+ "Line Art",
+ "Sketch"
+ ]
+ ],
+ [
+ "Visual Style",
+ [
+ "2D",
+ "8-bit",
+ "16-bit",
+ "Anaglyph",
+ "Anime",
+ "CGI",
+ "Cartoon",
+ "Comic Book",
+ "Concept Art",
+ "Digital Art",
+ "Fantasy",
+ "Graphic Novel",
+ "Hard Edge Painting",
+ "Hydrodipped",
+ "Lithography",
+ "Manga",
+ "Modern Art",
+ "Mosaic",
+ "Mural",
+ "Photo",
+ "Realistic",
+ "Street Art",
+ "Visual Novel",
+ "Watercolor"
+ ]
+ ],
+ [
+ "Pen",
+ ["Chalk", "Colored Pencil", "Graphite", "Ink", "Oil Paint", "Pastel Art"]
+ ],
+ [
+ "Carving and Etching",
+ [
+ "Etching",
+ "Linocut",
+ "Paper Model",
+ "Paper-Mache",
+ "Papercutting",
+ "Pyrography",
+ "Wood-Carving"
+ ]
+ ],
+ [
+ "Camera",
+ [
+ "Aerial View",
+ "Canon50",
+ "Cinematic",
+ "Close-up",
+ "Color Grading",
+ "Dramatic",
+ "Film Grain",
+ "Fisheye Lens",
+ "Glamor Shot",
+ "Golden Hour",
+ "HD",
+ "Lens Flare",
+ "Macro",
+ "Polaroid",
+ "Vintage",
+ "War Photography",
+ "White Balance",
+ "Wildlife Photography"
+ ]
+ ],
+ [
+ "Color",
+ [
+ "Beautiful Lighting",
+ "Colorful",
+ "Dynamic Lighting",
+ "Electric Colors",
+ "Infrared",
+ "Synthwave",
+ "Warm Color Palette"
+ ]
+ ],
+ [
+ "Emotions",
+ [
+ "Angry",
+ "Disgusted",
+ "Embarrassed",
+ "Evil",
+ "Excited",
+ "Fear",
+ "Happy",
+ "Lonely",
+ "Sad",
+ "Surprised"
+ ]
+ ],
+ [
+ "Style of an artist or community",
+ [
+ "Artstation",
+ "by Agnes Lawrence Pelton",
+ "by Akihito Yoshida",
+ "by Andy Warhol",
+ "by Artgerm",
+ "by Asaf Hanuka",
+ "by Aubrey Beardsley",
+ "by Banksy",
+ "by Ben Enwonwu",
+ "by Caravaggio Michelangelo Merisi",
+ "by David Mann",
+ "by Frida Kahlo",
+ "by H.R. Giger",
+ "by Hayao Miyazaki",
+ "by Ivan Shishkin",
+ "by Johannes Vermeer",
+ "by John William Waterhouse",
+ "by Katsushika Hokusai",
+ "by Ko Young Hoon",
+ "by Leonardo da Vinci",
+ "by Lisa Frank",
+ "by Mahmoud Saïd",
+ "by Mark Brooks",
+ "by Pablo Picasso",
+ "by Richard Dadd",
+ "by Salvador Dalí",
+ "by Tivadar Csontváry Kosztka",
+ "by Yoshitaka Amano",
+ "by wlop"
+ ]
+ ]
+]
diff --git a/ui/frontend/build_src/src/pages/Experimental/index.tsx b/ui/frontend/build_src/src/pages/Experimental/index.tsx
new file mode 100644
index 00000000..9ca01644
--- /dev/null
+++ b/ui/frontend/build_src/src/pages/Experimental/index.tsx
@@ -0,0 +1,9 @@
+import React from "react";
+
+export default function Beta() {
+ return (
+
+
Beta
+
+ );
+}
diff --git a/ui/frontend/build_src/src/pages/Home/home.css.ts b/ui/frontend/build_src/src/pages/Home/home.css.ts
new file mode 100644
index 00000000..60f9aead
--- /dev/null
+++ b/ui/frontend/build_src/src/pages/Home/home.css.ts
@@ -0,0 +1,54 @@
+import { style, globalStyle } from "@vanilla-extract/css";
+import { vars } from "../../styles/theme/index.css";
+
+export const AppLayout = style({
+ position: "relative",
+
+ width: "100vw",
+ height: "100vh",
+ pointerEvents: "auto",
+ display: "grid",
+ backgroundColor: vars.backgroundMain,
+ gridTemplateColumns: "400px 1fr",
+ gridTemplateRows: "70px 1fr 115px",
+ gridTemplateAreas: `
+ "header header header"
+ "create display display"
+ "create display display"
+ `,
+
+
+ // "@media": {
+ // "screen and (max-width: 800px)": {
+ // gridTemplateColumns: "1fr",
+ // gridTemplateRows: "100px 300px 1fr",
+ // gridTemplateAreas: `
+ // "header"
+ // "create"
+ // "display"
+ // `,
+ // },
+ // },
+});
+
+export const HeaderLayout = style({
+ gridArea: "header",
+});
+
+export const CreateLayout = style({
+ gridArea: "create",
+ position: "relative",
+ display: "flex",
+ flexDirection: "column",
+});
+
+export const DisplayLayout = style({
+ gridArea: "display",
+ overflow: "auto",
+});
+
+export const FooterLayout = style({
+ gridArea: "footer",
+ display: "flex",
+ justifyContent: "center",
+});
diff --git a/ui/frontend/build_src/src/pages/Home/index.tsx b/ui/frontend/build_src/src/pages/Home/index.tsx
new file mode 100644
index 00000000..811e832d
--- /dev/null
+++ b/ui/frontend/build_src/src/pages/Home/index.tsx
@@ -0,0 +1,73 @@
+import React, { useEffect } from "react";
+
+import {
+ AppLayout,
+ HeaderLayout,
+ CreateLayout,
+ DisplayLayout,
+ FooterLayout,
+} from "./home.css";
+
+import { useQuery } from "@tanstack/react-query";
+import { getSaveDirectory, loadModifications } from "../../api";
+import Mockifiers from "../../components/organisms/creationPanel/imageModifiers/modifiers.mock";
+
+import { useImageCreate } from "../../stores/imageCreateStore";
+
+// Todo - import components here
+import HeaderDisplay from "../../components/organisms/headerDisplay";
+import BasicDisplay from "../../components/layouts/basicDisplay";
+import FooterDisplay from "../../components/organisms/footerDisplay";
+import CreationTabs from "../../components/layouts/creationTabs";
+
+function Home() {
+ // Get the original save directory
+ const setRequestOption = useImageCreate((state) => state.setRequestOptions);
+
+ const { status: statusSave, data: dataSave } = useQuery(
+ ["SaveDir"],
+ getSaveDirectory
+ );
+ const { status: statusMods, data: dataMoads } = useQuery(
+ ["modifications"],
+ loadModifications
+ );
+
+ const setAllModifiers = useImageCreate((state) => state.setAllModifiers);
+
+ useEffect(() => {
+ if (statusSave === "success") {
+ setRequestOption("save_to_disk_path", dataSave);
+ }
+ }, [setRequestOption, statusSave, dataSave]);
+
+ useEffect(() => {
+ if (statusMods === "success") {
+ setAllModifiers(dataMoads);
+ } else if (statusMods === "error") {
+ // @ts-expect-error
+ setAllModifiers(Mockifiers);
+ }
+ }, [setRequestOption, statusMods, dataMoads]);
+
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
+
+export default Home;
diff --git a/ui/frontend/build_src/src/pages/Settings/index.tsx b/ui/frontend/build_src/src/pages/Settings/index.tsx
new file mode 100644
index 00000000..3d75c1ef
--- /dev/null
+++ b/ui/frontend/build_src/src/pages/Settings/index.tsx
@@ -0,0 +1,9 @@
+import React from "react";
+
+export default function Settings() {
+ return (
+
+
Settings
+
+ );
+}
diff --git a/ui/frontend/build_src/src/stores/imageCreateStore.ts b/ui/frontend/build_src/src/stores/imageCreateStore.ts
new file mode 100644
index 00000000..6b31f55a
--- /dev/null
+++ b/ui/frontend/build_src/src/stores/imageCreateStore.ts
@@ -0,0 +1,397 @@
+/* eslint-disable @typescript-eslint/strict-boolean-expressions */
+import create from "zustand";
+import produce from "immer";
+import { devtools } from "zustand/middleware";
+
+import { useRandomSeed } from "../utils";
+
+import { ImageRequest } from "../api";
+
+export interface ImageCreationUiOptions {
+ isUseRandomSeed: boolean;
+ isUseAutoSave: boolean;
+ isSoundEnabled: boolean;
+}
+
+export const SAMPLER_OPTIONS = [
+ 'plms',
+ 'ddim',
+ 'heun',
+ 'euler',
+ 'euler_a',
+ 'dpm2',
+ 'dpm2_a',
+ 'lms',
+] as const;
+
+export interface ModifierPreview {
+ name: string;
+ path: string;
+}
+
+export interface ModifierObject {
+ category?: string;
+ modifier: string;
+ previews: ModifierPreview[];
+}
+
+interface ModifiersList {
+ category: string;
+ modifiers: ModifierObject[];
+}
+
+type ModifiersOptionList = ModifiersList[];
+
+export interface promptTag {
+ id: string;
+ name: string;
+ type: 'positive' | 'negative';
+}
+
+interface ImageCreateState {
+ parallelCount: number;
+ requestOptions: ImageRequest;
+ allModifiers: ModifiersOptionList;
+
+ createTags: promptTag[];
+ // negativeTags: promptTag[];
+
+ tagMap: Record;
+ isInpainting: boolean;
+
+ setParallelCount: (count: number) => void;
+ setRequestOptions: (key: keyof ImageRequest, value: any) => void;
+ getValueForRequestKey: (key: keyof ImageRequest) => any;
+ setAllModifiers: (modifiers: ModifiersOptionList) => void;
+
+ setModifierOptions: (key: string, value: any) => void;
+ toggleTag: (category: string, tag: string) => void;
+ hasTag: (category: string, tag: string) => boolean;
+ selectedTags: () => ModifierObject[];
+ addCreateTag: (tag: promptTag) => void;
+ removeCreateTag: (id: string) => void;
+ changeCreateTagType: (id: string, type: 'positive' | 'negative') => void;
+ reorderCreateTag: (tag: promptTag, index: number) => void;
+
+ builtRequest: () => ImageRequest;
+
+ uiOptions: ImageCreationUiOptions;
+ toggleUseUpscaling: () => void;
+ // isUsingUpscaling: () => boolean
+ toggleUseFaceCorrection: () => void;
+ isUsingFaceCorrection: () => boolean;
+ isUsingUpscaling: () => boolean;
+ toggleUseRandomSeed: () => void;
+ isRandomSeed: () => boolean;
+ toggleUseAutoSave: () => void;
+ isUseAutoSave: () => boolean;
+ toggleSoundEnabled: () => void;
+ isSoundEnabled: () => boolean;
+ toggleInpainting: () => void;
+}
+
+// devtools breaks TS
+export const useImageCreate = create(
+ // @ts-expect-error
+ devtools((set, get) => ({
+ parallelCount: 1,
+
+ requestOptions: {
+ session_id: new Date().getTime().toString(),
+ prompt: "a photograph of an astronaut riding a horse",
+ negative_prompt: "",
+ seed: useRandomSeed(),
+ num_outputs: 1,
+ num_inference_steps: 50,
+ guidance_scale: 7.5,
+ width: 512,
+ height: 512,
+ prompt_strength: 0.8,
+ // allow_nsfw: false,
+ turbo: true,
+ use_cpu: false,
+ use_full_precision: true,
+ save_to_disk_path: "null",
+ use_face_correction: "GFPGANv1.3",
+ use_upscale: "RealESRGAN_x4plus",
+ show_only_filtered_image: true,
+ init_image: undefined,
+ sampler: "plms",
+ stream_progress_updates: true,
+ stream_image_progress: false,
+ mask: undefined,
+ },
+
+ // selected tags
+ createTags: [] as promptTag[],
+ // negativeTags: [] as promptTag[],
+
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
+ tagMap: {} as Record,
+
+ uiOptions: {
+ // TODO proper persistence of all UI / user settings centrally somewhere?
+ // localStorage.getItem('ui:advancedSettingsIsOpen') === 'true',
+ isUseRandomSeed: true,
+ isUseAutoSave: false,
+ isSoundEnabled: false,
+ },
+
+ allModifiers: [] as ModifiersOptionList,
+
+ isInpainting: false,
+
+ setParallelCount: (count: number) =>
+ set(
+ produce((state) => {
+ state.parallelCount = count;
+ })
+ ),
+
+ setRequestOptions: (key: keyof ImageRequest, value: any) => {
+ set(
+ produce((state) => {
+ state.requestOptions[key] = value;
+ })
+ );
+ },
+
+ getValueForRequestKey: (key: keyof ImageRequest) => {
+ return get().requestOptions[key];
+ },
+
+ setAllModifiers: (modifiers: ModifiersOptionList) => {
+ set(
+ produce((state) => {
+ state.allModifiers = modifiers;
+ })
+ );
+ },
+
+ toggleTag: (category: string, tag: string) => {
+ set(
+ produce((state) => {
+
+ if (Object.keys(state.tagMap).includes(category)) {
+ if (state.tagMap[category].includes(tag)) {
+ state.tagMap[category] = state.tagMap[category].filter((t: string) => t !== tag);
+ } else {
+ state.tagMap[category].push(tag);
+ }
+ } else {
+ state.tagMap[category] = [tag];
+ }
+
+ })
+ );
+ },
+
+ hasTag: (category: string, tag: string) => {
+ return get().tagMap[category]?.includes(tag);
+ },
+
+ selectedTags: () => {
+ // get all the modifiers and all the tags
+ const allModifiers = get().allModifiers;
+ const selectedTags = get().tagMap;
+ let selected: ModifierObject[] = [];
+
+ // for each mappped tag
+ for (const [category, tags] of Object.entries(selectedTags)) {
+ // find the modifier
+ const modifier = allModifiers.find((m) => m.category === category);
+ if (modifier) {
+ // for each tag in the modifier
+ for (const tag of tags) {
+ // find the tag
+ const tagObject = modifier.modifiers.find((m) => m.modifier === tag);
+ if (tagObject) {
+ // add the previews to the selected list
+ selected = selected.concat({
+ ...tagObject,
+ category: modifier.category
+ });
+ }
+ }
+ }
+ }
+ return selected;
+ },
+
+ addCreateTag: (tag: promptTag) => {
+ set(
+ produce((state) => {
+ state.createTags.push(tag);
+ })
+ );
+ },
+
+ removeCreateTag: (id: string) => {
+ set(
+ produce((state) => {
+ // @ts-expect-error
+ state.createTags = state.createTags.filter((t) => t.id !== id);
+ })
+
+ );
+ },
+
+ changeCreateTagType: (id: string, type: 'positive' | 'negative') => {
+ set(
+ produce((state) => {
+ // @ts-expect-error
+ const tag = state.createTags.find((t) => t.id === id);
+ if (tag) {
+ tag.type = type;
+ }
+ })
+ );
+ },
+
+
+ reorderCreateTag: (tag: promptTag, index: number) => {
+ set(
+ produce((state) => {
+ const tagIndex = state.createTags.indexOf(tag);
+ if (tagIndex !== -1) {
+ state.createTags.splice(tagIndex, 1);
+ state.createTags.splice(index, 0, tag);
+ }
+ })
+ );
+ },
+
+ // the request body to send to the server
+ // this is a computed value, just adding the tags to the request
+ builtRequest: () => {
+ const state = get();
+ const requestOptions = state.requestOptions;
+ const selectedTags = get().selectedTags();
+ const tags = selectedTags.map((t: ModifierObject) => t.modifier);
+
+ const positivePrompt = state.createTags.filter((t) => t.type === "positive").map((t) => t.name).join(",");
+ const negativePrompt = state.createTags.filter((t) => t.type === "negative").map((t) => t.name).join(",");
+
+ // join all the tags with a comma and add it to the prompt
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
+ // const prompt = `${requestOptions.prompt}, ${tags.join(",")}`;
+
+ const request = {
+ ...requestOptions,
+ prompt: positivePrompt,
+ negative_prompt: negativePrompt,
+ };
+ // if we arent using auto save clear the save path
+ if (!state.uiOptions.isUseAutoSave) {
+ // maybe this is "None" ?
+ // TODO check this
+ request.save_to_disk_path = null;
+ }
+
+ if (void 0 === request.init_image) {
+ request.prompt_strength = undefined;
+ }
+
+ // a bit of a hack. figure out what a clean value to pass to the server is
+ // if we arent using upscaling clear the upscaling
+ if (request.use_upscale === "") {
+ request.use_upscale = null;
+ }
+
+ // make sure you look above for the "null" value
+ // this patches over a a backend issue if you dont ask for a filtered image
+ // you get nothing back
+
+ if (
+ null === request.use_upscale &&
+ null === request.use_face_correction
+ ) {
+ request.show_only_filtered_image = false;
+ }
+ return request;
+ },
+
+ toggleUseFaceCorrection: () => {
+ set(
+ produce((state) => {
+ const isSeting =
+ typeof state.getValueForRequestKey("use_face_correction") ===
+ "string"
+ ? null
+ : "GFPGANv1.3";
+ state.requestOptions.use_face_correction = isSeting;
+ })
+ );
+ },
+
+ isUsingFaceCorrection: () => {
+ const isUsing =
+ typeof get().getValueForRequestKey("use_face_correction") === "string";
+ return isUsing;
+ },
+
+ isUsingUpscaling: () => {
+ const isUsing = get().getValueForRequestKey("use_upscale") !== "";
+ return isUsing;
+ },
+
+ toggleUseRandomSeed: () => {
+ set(
+ produce((state: ImageCreateState) => {
+ state.uiOptions.isUseRandomSeed = !state.uiOptions.isUseRandomSeed;
+ state.requestOptions.seed = state.uiOptions.isUseRandomSeed
+ ? useRandomSeed()
+ : state.requestOptions.seed;
+
+ // localStorage.setItem(
+ // "ui:isUseRandomSeed",
+ // state.uiOptions.isUseRandomSeed
+ // );
+ })
+ );
+ },
+
+ isRandomSeed: () => {
+ return get().uiOptions.isUseRandomSeed;
+ },
+
+ toggleUseAutoSave: () => {
+ //isUseAutoSave
+ //save_to_disk_path
+ set(
+ produce((state: ImageCreateState) => {
+ state.uiOptions.isUseAutoSave = !state.uiOptions.isUseAutoSave;
+
+ // localStorage.setItem(
+ // "ui:isUseAutoSave",
+ // state.uiOptions.isUseAutoSave
+ // );
+ })
+ );
+ },
+
+ isUseAutoSave: () => {
+ return get().uiOptions.isUseAutoSave;
+ },
+
+ toggleSoundEnabled: () => {
+ set(
+ produce((state: ImageCreateState) => {
+ state.uiOptions.isSoundEnabled = !state.uiOptions.isSoundEnabled;
+ })
+ );
+ },
+
+ isSoundEnabled: () => {
+ return get().uiOptions.isSoundEnabled;
+ },
+
+ toggleInpainting: () => {
+ set(
+ produce((state: ImageCreateState) => {
+ state.isInpainting = !state.isInpainting;
+ })
+ );
+ },
+ }))
+);
diff --git a/ui/frontend/build_src/src/stores/imageDisplayStore.ts b/ui/frontend/build_src/src/stores/imageDisplayStore.ts
new file mode 100644
index 00000000..553ad2ee
--- /dev/null
+++ b/ui/frontend/build_src/src/stores/imageDisplayStore.ts
@@ -0,0 +1,54 @@
+import create from "zustand";
+import produce from "immer";
+
+import { ImageRequest } from "../api";
+
+export interface CompletedImagesType {
+ id?: string;
+ data: string | undefined;
+ info: ImageRequest;
+}
+
+interface ImageDisplayState {
+ // imageOptions: Map;
+ images: CompletedImagesType[]
+ currentImage: CompletedImagesType | null
+ updateDisplay: (id: string, ImageData: string, imageOptions: any) => void;
+ setCurrentImage: (image: CompletedImagesType) => void;
+ clearDisplay: () => void;
+}
+
+export const useImageDisplay = create((set, get) => ({
+ imageMap: new Map(),
+ images: [],
+ currentImage: null,
+ // use produce to make sure we don't mutate state
+ // imageOptions: any
+ updateDisplay: (id: string, ImageData: string, imageOptions) => {
+ set(
+ produce((state) => {
+ state.currentImage = { id, display: ImageData, info: imageOptions };
+ state.images.unshift({ id, data: ImageData, info: imageOptions });
+ state.currentImage = state.images[0];
+ })
+ );
+ },
+
+ setCurrentImage: (image) => {
+ set(
+ produce((state) => {
+ state.currentImage = image;
+ })
+ );
+ },
+
+ clearDisplay: () => {
+ set(
+ produce((state) => {
+ state.images = [];
+ state.currentImage = null;
+ })
+ );
+ }
+
+}));
diff --git a/ui/frontend/build_src/src/stores/imageFetchingStore.ts b/ui/frontend/build_src/src/stores/imageFetchingStore.ts
new file mode 100644
index 00000000..42391a31
--- /dev/null
+++ b/ui/frontend/build_src/src/stores/imageFetchingStore.ts
@@ -0,0 +1,113 @@
+import create from "zustand";
+import produce from "immer";
+
+export const FetchingStates = {
+ IDLE: "IDLE",
+ FETCHING: "FETCHING",
+ PROGRESSING: "PROGRESSING",
+ SUCCEEDED: "SUCCEEDED",
+ COMPLETE: "COMPLETE",
+ ERROR: "ERROR",
+} as const;
+
+interface ImageFetchingState {
+ status: typeof FetchingStates[keyof typeof FetchingStates];
+ step: number;
+ totalSteps: number;
+ data: string;
+ progressImages: string[]
+ timeStarted: Date;
+ timeNow: Date;
+ appendData: (data: string) => void;
+ reset: () => void;
+ setStatus: (status: typeof FetchingStates[keyof typeof FetchingStates]) => void;
+ setStep: (step: number) => void;
+ setTotalSteps: (totalSteps: number) => void;
+ addProgressImage: (imageLink: string) => void;
+ setStartTime: () => void;
+ setNowTime: () => void;
+ resetForFetching: () => void;
+}
+
+export const useImageFetching = create((set) => ({
+ status: FetchingStates.IDLE,
+ step: 0,
+ totalSteps: 0,
+ data: '',
+ progressImages: [],
+ timeStarted: new Date(),
+ timeNow: new Date(),
+ // use produce to make sure we don't mutate state
+ appendData: (data: string) => {
+ set(
+ produce((state: ImageFetchingState) => {
+ // eslint-disable-next-line @typescript-eslint/restrict-plus-operands
+ state.data += data;
+ })
+ );
+ },
+ reset: () => {
+ set(
+ produce((state: ImageFetchingState) => {
+ state.status = FetchingStates.IDLE;
+ state.step = 0;
+ state.totalSteps = 0;
+ state.data = '';
+ })
+ );
+ },
+ setStatus: (status: typeof FetchingStates[keyof typeof FetchingStates]) => {
+ set(
+ produce((state: ImageFetchingState) => {
+ state.status = status;
+ })
+ );
+ },
+ setStep: (step: number) => {
+ set(
+ produce((state: ImageFetchingState) => {
+ state.step = step;
+ })
+ );
+ },
+ setTotalSteps: (totalSteps: number) => {
+ set(
+ produce((state: ImageFetchingState) => {
+ state.totalSteps = totalSteps;
+ })
+ );
+ },
+ addProgressImage: (imageLink: string) => {
+ set(
+ produce((state: ImageFetchingState) => {
+ state.progressImages.push(imageLink);
+ })
+ );
+ },
+ setStartTime: () => {
+ set(
+ produce((state: ImageFetchingState) => {
+ state.timeStarted = new Date();
+ })
+ );
+ },
+ setNowTime: () => {
+ set(
+ produce((state: ImageFetchingState) => {
+ state.timeNow = new Date();
+ })
+ );
+ },
+ resetForFetching: () => {
+ set(
+ produce((state: ImageFetchingState) => {
+ state.status = FetchingStates.FETCHING;
+ state.progressImages = [];
+ state.step = 0;
+ state.totalSteps = 0;
+ state.timeNow = new Date();
+ state.timeStarted = new Date();
+ })
+ );
+ }
+}));
diff --git a/ui/frontend/build_src/src/stores/requestQueueStore.ts b/ui/frontend/build_src/src/stores/requestQueueStore.ts
new file mode 100644
index 00000000..d0dad899
--- /dev/null
+++ b/ui/frontend/build_src/src/stores/requestQueueStore.ts
@@ -0,0 +1,160 @@
+import create from "zustand";
+import produce from "immer";
+
+import { ImageRequest } from "../api";
+
+export enum QueueStatus {
+ pending = "pending",
+ processing = "processing",
+ complete = "complete",
+ paused = "paused",
+ error = "error",
+}
+
+export interface QueuedRequest {
+ id: string;
+ options: ImageRequest;
+ status: QueueStatus[keyof QueueStatus];
+ //"pending" | "processing" | "complete" | "error";
+}
+
+interface RequestQueueState {
+ requests: QueuedRequest[];
+ addtoQueue: (id: string, imgRec: ImageRequest) => void;
+ pendingRequests: () => QueuedRequest[];
+ hasPendingQueue: () => boolean;
+ hasAnyQueue: () => boolean;
+ firstInQueue: () => QueuedRequest;
+ updateStatus: (id: string, status: QueueStatus[keyof QueueStatus]) => void;
+ sendPendingToTop: (id: string) => void;
+ removeItem: (id: string) => void;
+ removeCompleted: () => void;
+ removeErrored: () => void;
+ clearQueue: () => void;
+
+}
+
+export const useRequestQueue = create((set, get) => ({
+ requests: [],
+ // use produce to make sure we don't mutate state
+ addtoQueue: (id: string, imgRec: ImageRequest) => {
+ set(
+ produce((state) => {
+ const item: QueuedRequest = { id, options: imgRec, status: QueueStatus.pending };
+ state.requests.push(item);
+ })
+ );
+ },
+
+ pendingRequests: () => {
+ return get().requests.filter((item) => item.status === QueueStatus.pending);
+ },
+
+ hasPendingQueue: () => {
+ return get().pendingRequests().length > 0;
+ },
+
+ hasAnyQueue: () => {
+ return get().requests.length > 0;
+ },
+
+ firstInQueue: () => {
+ const pending = get().pendingRequests()[0];
+
+ if (pending === undefined) {
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
+ const temp: QueuedRequest = { id: "", options: ({} as ImageRequest), status: QueueStatus.pending };
+ return temp;
+ }
+ return pending;
+ },
+
+ updateStatus: (id: string, status: QueueStatus[keyof QueueStatus]) => {
+ set(
+ produce((state) => {
+ const item = state.requests.find((item: QueuedRequest) => item.id === id);
+ if (void 0 !== item) {
+ item.status = status;
+ }
+ })
+ );
+ },
+
+ sendPendingToTop: (id: string) => {
+ set(
+ produce((state) => {
+ const item = state.requests.find((item: QueuedRequest) => item.id === id);
+
+ if (void 0 !== item) {
+ // remove from current position
+ const index = state.requests.indexOf(item);
+ state.requests.splice(index, 1);
+
+ // find the first available stop and insert it there
+ for (let i = 0; i < state.requests.length; i++) {
+ const curStatus = state.requests[i].status;
+
+ // skip over any items that are not pending or paused
+ if (curStatus === QueueStatus.processing) {
+ continue;
+ }
+ if (curStatus === QueueStatus.complete) {
+ continue;
+ }
+ if (curStatus === QueueStatus.error) {
+ continue;
+ }
+
+ // insert infront of any pending or paused items
+ state.requests.splice(i, 0, item);
+ break;
+ }
+ }
+ })
+ );
+ },
+
+ removeItem: (id: string) => {
+ set(
+ produce((state) => {
+ const index = state.requests.findIndex((item: QueuedRequest) => item.id === id);
+ if (index > -1) {
+ state.requests.splice(index, 1);
+ }
+ })
+ );
+ },
+
+ removeCompleted: () => {
+ set(
+ produce((state) => {
+ const completed = state.requests.filter((item: QueuedRequest) => item.status === QueueStatus.complete);
+ completed.forEach((item: QueuedRequest) => {
+ const index = state.requests.indexOf(item);
+ state.requests.splice(index, 1);
+ });
+ })
+ );
+ },
+
+ removeErrored: () => {
+ set(
+ produce((state) => {
+ const errored = state.requests.filter((item: QueuedRequest) => item.status === QueueStatus.error);
+ errored.forEach((item: QueuedRequest) => {
+ const index = state.requests.indexOf(item);
+ state.requests.splice(index, 1);
+ });
+ })
+ );
+ },
+
+
+ clearQueue: () => {
+ set(
+ produce((state) => {
+ state.requests = [];
+ })
+ );
+ },
+}));
diff --git a/ui/frontend/build_src/src/styles/index.css.ts b/ui/frontend/build_src/src/styles/index.css.ts
new file mode 100644
index 00000000..68914de2
--- /dev/null
+++ b/ui/frontend/build_src/src/styles/index.css.ts
@@ -0,0 +1,80 @@
+import { globalStyle } from "@vanilla-extract/css";
+import { vars } from "./theme/index.css";
+
+// baisc body style
+globalStyle("body", {
+ margin: 0,
+ minWidth: "320px",
+ minHeight: "100vh",
+});
+
+
+
+
+
+// single page style
+globalStyle("#root", {
+ position: "absolute",
+ top: 0,
+ left: 0,
+ width: "100vw",
+ height: "100vh",
+ overflow: 'auto',
+ overflowX: 'hidden',
+ // "::-webkit-scrollbar": {
+ // width: "0",
+ // },
+});
+
+// border box all
+globalStyle(`*`, {
+ boxSizing: "border-box",
+});
+
+globalStyle(`button`, {
+ fontSize: vars.fonts.sizes.Body,
+});
+
+globalStyle(`.visually-hidden`, {
+ visibility: "hidden",
+ position: "absolute",
+});
+
+/** RESETS */
+globalStyle(`h1, h2, h3, h4, h5, h6, p, label, ul, textarea`, {
+ margin: 0,
+ padding: 0,
+ fontFamily: vars.fonts.body,
+});
+
+globalStyle(`h3`, {
+ fontSize: vars.fonts.sizes.Subheadline,
+});
+
+globalStyle(`h4, h5`, {
+ fontSize: vars.fonts.sizes.SubSubheadline,
+});
+
+globalStyle(`h6`, {
+ fontSize: vars.fonts.sizes.Body,
+});
+
+globalStyle(`p, label`, {
+ fontSize: vars.fonts.sizes.Body,
+});
+
+globalStyle(`textarea`, {
+ padding: 0,
+ border: "none",
+ fontSize: vars.fonts.sizes.Body,
+ fontWeight: "bold",
+});
+
+globalStyle(`a`, {
+ color: vars.colors.link,
+ textDecoration: "none",
+});
+
+globalStyle(`ul`, {
+ listStyle: "none",
+});
\ No newline at end of file
diff --git a/ui/frontend/build_src/src/styles/shared.css.ts b/ui/frontend/build_src/src/styles/shared.css.ts
new file mode 100644
index 00000000..5fcfe51b
--- /dev/null
+++ b/ui/frontend/build_src/src/styles/shared.css.ts
@@ -0,0 +1,55 @@
+import { style, globalStyle } from "@vanilla-extract/css";
+import { vars } from "./theme/index.css";
+
+
+//TODO this should probably just be for all li elements
+export const SettingItem = style({
+ marginBottom: vars.spacing.medium,
+ selectors: {
+ "&:last-of-type": {
+ marginBottom: vars.spacing.none,
+ },
+ },
+});
+
+
+export const IconFont = style({
+ // reliant on font-awesome cdn
+ fontFamily: "Font Awesome 6 Free"
+});
+
+
+export const XButton = style({
+ position: "absolute",
+ transform: "translateX(-50%) translateY(-35%)",
+ background: "black",
+ color: "white",
+ border: "2pt solid #ccc",
+ padding: "0",
+ cursor: "pointer",
+ outline: "inherit",
+ borderRadius: "8pt",
+ width: "16pt",
+ height: "16pt",
+ fontFamily: "Verdana",
+ fontSize: "8pt",
+});
+
+
+
+export const MenuButton = style({
+ display: "block",
+ width: "100%",
+ textAlign: "left",
+ backgroundColor: "transparent",
+ color: vars.colors.text.normal,
+ border: "0 none",
+ cursor: "pointer",
+ padding: "0",
+ marginBottom: vars.spacing.medium,
+});
+
+globalStyle(`${MenuButton}> h4`, {
+ color: "#e7ba71",
+});
+
diff --git a/ui/frontend/build_src/src/styles/theme/index.css.ts b/ui/frontend/build_src/src/styles/theme/index.css.ts
new file mode 100644
index 00000000..faceb83d
--- /dev/null
+++ b/ui/frontend/build_src/src/styles/theme/index.css.ts
@@ -0,0 +1,87 @@
+import {
+ createGlobalTheme,
+ createThemeContract,
+ createTheme,
+} from "@vanilla-extract/css";
+
+const app = createGlobalTheme(":root", {
+ spacing: {
+ none: "0",
+ min: "2px",
+ small: "5px",
+ medium: "10px",
+ large: "25px",
+ },
+
+ trim: {
+ smallBorderRadius: "5px",
+ },
+
+ fonts: {
+ body: "Arial, Helvetica, sans-serif;",
+ // IconFont is a shared class for now
+ sizes: {
+ Title: "2em",
+ Headline: "1.5em",
+ Subheadline: "1.20em",
+ SubSubheadline: "1.1em",
+ Body: "1em",
+ Plain: "0.8em",
+ Caption: ".75em",
+ Overline: ".5em",
+ },
+ },
+ // colors,
+
+ // 60 degree color difference
+ // step downs
+ brandHue: '265', // purple
+ secondaryHue: '225', // deep blue
+ tertiaryHue: '145', // grass green
+
+ // step ups
+ errorHue: '0',
+ warningHue: '25', // orange
+ successHue: '85', // green
+
+ colorMod: {
+ saturation: {
+ bright: "100%",
+ normal: "60%",
+ dimmed: "50%",
+ dim: "30%",
+ },
+ lightness: {
+ normal: "45%",
+ bright: "60%",
+ dim: "40%",
+ },
+ },
+
+ // is the secondary hue
+ backgroundMain: 'hsl(225, 6%, 13%)',
+ backgroundLight: 'hsl(225, 4%, 18%)',
+ backgroundDark: 'hsl(225, 3%, 7%)',
+ backgroundAccentMain: 'hsl(225, 6%, 30%)',
+
+ backgroundAccentHue: '225',
+ backgroundAccentSaturation: '26%',
+ backgroundAccentLightness: '70%',
+
+ // this is depricated
+ colors: {
+ text: {
+ normal: "#ffffff", // white
+ dimmed: "#d1d5db", // off white
+
+ secondary: "#ffffff", // white
+ secondaryDimmed: "#d1d5db", // off white
+
+ accent: "#e7ba71", // orange
+ accentDimmed: "#7d6641", // muted orange
+ },
+ link: "#0066cc", // blue
+ }
+});
+
+export const vars = { ...app };
diff --git a/ui/frontend/build_src/src/utils.ts b/ui/frontend/build_src/src/utils.ts
new file mode 100644
index 00000000..dbe52aad
--- /dev/null
+++ b/ui/frontend/build_src/src/utils.ts
@@ -0,0 +1,3 @@
+export function useRandomSeed() {
+ return Math.floor(Math.random() * 10000);
+}
diff --git a/ui/frontend/build_src/src/vite-env.d.ts b/ui/frontend/build_src/src/vite-env.d.ts
new file mode 100644
index 00000000..11f02fe2
--- /dev/null
+++ b/ui/frontend/build_src/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/ui/frontend/build_src/tsconfig.json b/ui/frontend/build_src/tsconfig.json
new file mode 100644
index 00000000..898ec466
--- /dev/null
+++ b/ui/frontend/build_src/tsconfig.json
@@ -0,0 +1,26 @@
+{
+ "compilerOptions": {
+ "baseUrl": "./",
+ "paths": {
+ "@stores": ["src/stores"]
+ },
+
+ "target": "ESNext",
+ "useDefineForClassFields": true,
+ "lib": ["DOM", "DOM.Iterable", "ESNext"],
+ "allowJs": false,
+ "skipLibCheck": true,
+ "esModuleInterop": false,
+ "allowSyntheticDefaultImports": true,
+ "strict": true,
+ "forceConsistentCasingInFileNames": true,
+ "module": "ESNext",
+ "moduleResolution": "Node",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
+ "jsx": "react-jsx"
+ },
+ "include": ["src"],
+ "references": [{ "path": "./tsconfig.node.json" }]
+}
diff --git a/ui/frontend/build_src/tsconfig.node.json b/ui/frontend/build_src/tsconfig.node.json
new file mode 100644
index 00000000..9d31e2ae
--- /dev/null
+++ b/ui/frontend/build_src/tsconfig.node.json
@@ -0,0 +1,9 @@
+{
+ "compilerOptions": {
+ "composite": true,
+ "module": "ESNext",
+ "moduleResolution": "Node",
+ "allowSyntheticDefaultImports": true
+ },
+ "include": ["vite.config.ts"]
+}
diff --git a/ui/frontend/build_src/vite.config.ts b/ui/frontend/build_src/vite.config.ts
new file mode 100644
index 00000000..5a2f2842
--- /dev/null
+++ b/ui/frontend/build_src/vite.config.ts
@@ -0,0 +1,42 @@
+import { defineConfig } from "vite";
+import eslint from "vite-plugin-eslint";
+import react from "@vitejs/plugin-react";
+import { vanillaExtractPlugin } from "@vanilla-extract/vite-plugin";
+
+import path from "path";
+// https://vitejs.dev/config/
+export default defineConfig({
+ resolve: {
+ alias: {
+ // TODO figure out why vs code complains about this even though it works
+ "@stores": path.resolve(__dirname, "./src/stores"),
+ // TODO - add more aliases
+ },
+ },
+
+ plugins: [
+ eslint(),
+ react(),
+ vanillaExtractPlugin({
+ // configuration
+ }),
+ ],
+
+ server: {
+ port: 9001,
+ },
+
+ build: {
+ // make sure everythign is in the same directory
+ outDir: "../dist",
+ rollupOptions: {
+ output: {
+ // dont hash the file names
+ // maybe once we update the python server?
+ entryFileNames: `[name].js`,
+ chunkFileNames: `[name].js`,
+ assetFileNames: `[name].[ext]`,
+ },
+ },
+ },
+});
diff --git a/ui/frontend/build_src/vite.config.ts.timestamp-1664475745198.mjs b/ui/frontend/build_src/vite.config.ts.timestamp-1664475745198.mjs
new file mode 100644
index 00000000..6232ef47
--- /dev/null
+++ b/ui/frontend/build_src/vite.config.ts.timestamp-1664475745198.mjs
@@ -0,0 +1,36 @@
+// vite.config.ts
+import { defineConfig } from "vite";
+import eslint from "vite-plugin-eslint";
+import react from "@vitejs/plugin-react";
+import { vanillaExtractPlugin } from "@vanilla-extract/vite-plugin";
+import path from "path";
+var __vite_injected_original_dirname = "C:\\Users\\KC\\stable-diffusion-ui-react\\ui\\frontend\\build_src";
+var vite_config_default = defineConfig({
+ resolve: {
+ alias: {
+ "@stores": path.resolve(__vite_injected_original_dirname, "./src/stores")
+ }
+ },
+ plugins: [
+ eslint(),
+ react(),
+ vanillaExtractPlugin({})
+ ],
+ server: {
+ port: 9001
+ },
+ build: {
+ outDir: "../dist",
+ rollupOptions: {
+ output: {
+ entryFileNames: `[name].js`,
+ chunkFileNames: `[name].js`,
+ assetFileNames: `[name].[ext]`
+ }
+ }
+ }
+});
+export {
+ vite_config_default as default
+};
+//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFxLQ1xcXFxzdGFibGUtZGlmZnVzaW9uLXVpLXJlYWN0XFxcXHVpXFxcXGZyb250ZW5kXFxcXGJ1aWxkX3NyY1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiQzpcXFxcVXNlcnNcXFxcS0NcXFxcc3RhYmxlLWRpZmZ1c2lvbi11aS1yZWFjdFxcXFx1aVxcXFxmcm9udGVuZFxcXFxidWlsZF9zcmNcXFxcdml0ZS5jb25maWcudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0M6L1VzZXJzL0tDL3N0YWJsZS1kaWZmdXNpb24tdWktcmVhY3QvdWkvZnJvbnRlbmQvYnVpbGRfc3JjL3ZpdGUuY29uZmlnLnRzXCI7aW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCBlc2xpbnQgZnJvbSBcInZpdGUtcGx1Z2luLWVzbGludFwiO1xuaW1wb3J0IHJlYWN0IGZyb20gXCJAdml0ZWpzL3BsdWdpbi1yZWFjdFwiO1xuaW1wb3J0IHsgdmFuaWxsYUV4dHJhY3RQbHVnaW4gfSBmcm9tIFwiQHZhbmlsbGEtZXh0cmFjdC92aXRlLXBsdWdpblwiO1xuXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuLy8gaHR0cHM6Ly92aXRlanMuZGV2L2NvbmZpZy9cbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZyh7XG4gIHJlc29sdmU6IHtcbiAgICBhbGlhczoge1xuICAgICAgLy8gVE9ETyBmaWd1cmUgb3V0IHdoeSB2cyBjb2RlIGNvbXBsYWlucyBhYm91dCB0aGlzIGV2ZW4gdGhvdWdoIGl0IHdvcmtzXG4gICAgICBcIkBzdG9yZXNcIjogcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgXCIuL3NyYy9zdG9yZXNcIiksXG4gICAgICAvLyBUT0RPIC0gYWRkIG1vcmUgYWxpYXNlc1xuICAgIH0sXG4gIH0sXG5cbiAgcGx1Z2luczogW1xuICAgIGVzbGludCgpLFxuICAgIHJlYWN0KCksXG4gICAgdmFuaWxsYUV4dHJhY3RQbHVnaW4oe1xuICAgICAgLy8gY29uZmlndXJhdGlvblxuICAgIH0pLFxuICBdLFxuXG4gIHNlcnZlcjoge1xuICAgIHBvcnQ6IDkwMDEsXG4gIH0sXG5cbiAgYnVpbGQ6IHtcbiAgICAvLyBtYWtlIHN1cmUgZXZlcnl0aGlnbiBpcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnlcbiAgICBvdXREaXI6IFwiLi4vZGlzdFwiLFxuICAgIHJvbGx1cE9wdGlvbnM6IHtcbiAgICAgIG91dHB1dDoge1xuICAgICAgICAvLyBkb250IGhhc2ggdGhlIGZpbGUgbmFtZXNcbiAgICAgICAgLy8gbWF5YmUgb25jZSB3ZSB1cGRhdGUgdGhlIHB5dGhvbiBzZXJ2ZXI/XG4gICAgICAgIGVudHJ5RmlsZU5hbWVzOiBgW25hbWVdLmpzYCxcbiAgICAgICAgY2h1bmtGaWxlTmFtZXM6IGBbbmFtZV0uanNgLFxuICAgICAgICBhc3NldEZpbGVOYW1lczogYFtuYW1lXS5bZXh0XWAsXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG59KTtcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBaVgsU0FBUyxvQkFBb0I7QUFDOVksT0FBTyxZQUFZO0FBQ25CLE9BQU8sV0FBVztBQUNsQixTQUFTLDRCQUE0QjtBQUVyQyxPQUFPLFVBQVU7QUFMakIsSUFBTSxtQ0FBbUM7QUFPekMsSUFBTyxzQkFBUSxhQUFhO0FBQUEsRUFDMUIsU0FBUztBQUFBLElBQ1AsT0FBTztBQUFBLE1BRUwsV0FBVyxLQUFLLFFBQVEsa0NBQVcsY0FBYztBQUFBLElBRW5EO0FBQUEsRUFDRjtBQUFBLEVBRUEsU0FBUztBQUFBLElBQ1AsT0FBTztBQUFBLElBQ1AsTUFBTTtBQUFBLElBQ04scUJBQXFCLENBRXJCLENBQUM7QUFBQSxFQUNIO0FBQUEsRUFFQSxRQUFRO0FBQUEsSUFDTixNQUFNO0FBQUEsRUFDUjtBQUFBLEVBRUEsT0FBTztBQUFBLElBRUwsUUFBUTtBQUFBLElBQ1IsZUFBZTtBQUFBLE1BQ2IsUUFBUTtBQUFBLFFBR04sZ0JBQWdCO0FBQUEsUUFDaEIsZ0JBQWdCO0FBQUEsUUFDaEIsZ0JBQWdCO0FBQUEsTUFDbEI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGLENBQUM7IiwKICAibmFtZXMiOiBbXQp9Cg==
diff --git a/ui/frontend/dist/index.css b/ui/frontend/dist/index.css
new file mode 100644
index 00000000..b2f7c486
--- /dev/null
+++ b/ui/frontend/dist/index.css
@@ -0,0 +1 @@
+:root{--_4vfmtj0: 0;--_4vfmtj1: 2px;--_4vfmtj2: 5px;--_4vfmtj3: 10px;--_4vfmtj4: 25px;--_4vfmtj5: 5px;--_4vfmtj6: Arial, Helvetica, sans-serif;--_4vfmtj7: 2em;--_4vfmtj8: 1.5em;--_4vfmtj9: 1.2em;--_4vfmtja: 1.1em;--_4vfmtjb: 1em;--_4vfmtjc: .8em;--_4vfmtjd: .75em;--_4vfmtje: .5em;--_4vfmtjf: 265;--_4vfmtjg: 225;--_4vfmtjh: 145;--_4vfmtji: 0;--_4vfmtjj: 25;--_4vfmtjk: 85;--_4vfmtjl: 100%;--_4vfmtjm: 60%;--_4vfmtjn: 50%;--_4vfmtjo: 30%;--_4vfmtjp: 45%;--_4vfmtjq: 60%;--_4vfmtjr: 40%;--_4vfmtjs: hsl(225, 6%, 13%);--_4vfmtjt: hsl(225, 4%, 18%);--_4vfmtju: hsl(225, 3%, 7%);--_4vfmtjv: hsl(225, 6%, 30%);--_4vfmtjw: 225;--_4vfmtjx: 26%;--_4vfmtjy: 70%;--_4vfmtjz: #ffffff;--_4vfmtj10: #d1d5db;--_4vfmtj11: #ffffff;--_4vfmtj12: #d1d5db;--_4vfmtj13: #e7ba71;--_4vfmtj14: #7d6641;--_4vfmtj15: #0066cc}._1qevocv0{position:relative;width:100vw;height:100vh;pointer-events:auto;display:grid;background-color:var(--_4vfmtjs);grid-template-columns:400px 1fr;grid-template-rows:70px 1fr 115px;grid-template-areas:"header header header" "create display display" "create display display"}._1qevocv1{grid-area:header}._1qevocv2{grid-area:create;position:relative;display:flex;flex-direction:column}._1qevocv3{grid-area:display;overflow:auto}._1qevocv4{grid-area:footer;display:flex;justify-content:center}._1jo75h0{color:hsl(var(--_4vfmtjj),var(--_4vfmtjm),var(--_4vfmtjp))}._1jo75h1{color:hsl(var(--_4vfmtji),var(--_4vfmtjm),var(--_4vfmtjp))}._1jo75h2{color:hsl(var(--_4vfmtjk),var(--_4vfmtjm),var(--_4vfmtjp))}._1g1xsdd0{color:var(--_4vfmtjz);padding:var(--_4vfmtj3)}._1g1xsdd1{background:var(--_4vfmtjs)}._1g1xsdd2{background:var(--_4vfmtjt)}._1g1xsdd3{background:var(--_4vfmtju)}._1g1xsdd4{border-radius:var(--_4vfmtj5)}._1g1xsdd5{background:var(--_4vfmtju);border:1px solid var(--_4vfmtjv)}._1g1xsdd6,._1g1xsdd7,._1g1xsdd8{box-shadow:0 4px 8px #00000026,0 6px 20px #00000026}._1m2mgvr0{position:relative}._1m2mgvr1{background-color:transparent;border:0 none;cursor:pointer;padding:var(--_4vfmtj0);font-size:var(--_4vfmtj9)}._1m2mgvr1>i{margin-right:var(--_4vfmtj2)}._1m2mgvr2{position:absolute;top:100%;right:0;z-index:1}._1961rof0{margin-bottom:var(--_4vfmtj3)}._1961rof0:last-of-type{margin-bottom:var(--_4vfmtj0)}._1961rof1{font-family:Font Awesome 6 Free}._1961rof2{position:absolute;transform:translate(-50%) translateY(-35%);background:black;color:#fff;border:2pt solid #ccc;padding:0;cursor:pointer;outline:inherit;border-radius:8pt;width:16pt;height:16pt;font-family:Verdana;font-size:8pt}._1961rof3{display:block;width:100%;text-align:left;background-color:transparent;color:var(--_4vfmtjz);border:0 none;cursor:pointer;padding:0;margin-bottom:var(--_4vfmtj3)}._1961rof3>h4{color:#e7ba71}._1d4r83s0{width:300px}.cg4q680{width:480px}._1v2cc580{color:var(--_4vfmtjz);display:flex;justify-content:space-between}._1v2cc580>h1{font-size:var(--_4vfmtj7);font-weight:700;margin-right:var(--_4vfmtj3)}._1v2cc581{margin-left:var(--_4vfmtj4)}._1v2cc582{display:flex;align-items:center;flex-grow:1;justify-content:space-between;max-width:300px;margin-right:var(--_4vfmtj4)}._1xhk59i0{display:flex;flex-direction:column;justify-content:center;align-items:center;height:100%;width:100%;padding:0}._1yvg52n0{position:relative}._1yvg52n0 img{width:100%;height:100%;object-fit:contain}._1swsr2r0{height:100%;width:100%;display:flex;flex-direction:column}._1swsr2r1{height:100%;width:80%;display:flex;justify-content:center}._1swsr2r2{width:100%;max-width:1000px;position:relative}._1swsr2r3{display:flex;flex-direction:column}._1swsr2r3>div{margin-bottom:var(--_4vfmtj3)}._1swsr2r3 p{margin-bottom:var(--_4vfmtj2)}._1swsr2r3 button{margin-right:var(--_4vfmtj3)}._1wzejc90{font-size:var(--_4vfmtj9);font-weight:700;color:var(--_4vfmtjz);padding:var(--_4vfmtj2);border:0;border-radius:var(--_4vfmtj5)}._1wzejc91{--button-hue: var(--_4vfmtjf);--button-base-saturation: var(--_4vfmtjm);--button-base-lightness: var(--_4vfmtjp)}._1wzejc92{--button-hue: var(--_4vfmtjg);--button-base-saturation: var(--_4vfmtjm);--button-base-lightness: var(--_4vfmtjp)}._1wzejc93{--button-hue: var(--_4vfmtjh);--button-base-saturation: var(--_4vfmtjm);--button-base-lightness: var(--_4vfmtjp)}._1wzejc94{--button-hue: var(--_4vfmtji);--button-base-saturation: var(--_4vfmtjm);--button-base-lightness: var(--_4vfmtjp)}._1wzejc95{--button-hue: var(--_4vfmtjw);--button-base-saturation: var(--_4vfmtjx);--button-base-lightness: var(--_4vfmtjy)}._1wzejc96{background-color:transparent}._1wzejc97{background-color:hsl(var(--button-hue),var(--button-base-saturation),var(--_4vfmtjp));border:1px solid hsl(var(--button-hue),var(--button-base-saturation),var(--_4vfmtjp))}._1wzejc97:hover{background-color:hsl(var(--button-hue),var(--_4vfmtjl),var(--_4vfmtjp));border:1px solid hsl(var(--button-hue),var(--_4vfmtjl),var(--_4vfmtjp))}._1wzejc97:active{background-color:hsl(var(--button-hue),var(--_4vfmtjl),var(--_4vfmtjr));border:1px solid hsl(var(--button-hue),var(--_4vfmtjl),var(--_4vfmtjr))}._1wzejc97:focus{background-color:hsl(var(--button-hue),var(--_4vfmtjl),var(--_4vfmtjr));border:1px solid hsl(var(--button-hue),var(--_4vfmtjl),var(--_4vfmtjr))}._1wzejc97:disabled{background-color:hsl(var(--button-hue),var(--_4vfmtjo),var(--_4vfmtjr));border:1px solid hsl(var(--button-hue),var(--_4vfmtjo),var(--_4vfmtjr))}._1wzejc98{background-color:transparent;border:1px solid hsl(var(--button-hue),var(--button-base-saturation),var(--_4vfmtjp))}._1wzejc98:hover{border-color:hsl(var(--button-hue),var(--_4vfmtjl),var(--_4vfmtjp))}._1wzejc98:active{border-color:hsl(var(--button-hue),var(--_4vfmtjl),var(--_4vfmtjr))}._1wzejc98:focus{border-color:hsl(var(--button-hue),var(--_4vfmtjl),var(--_4vfmtjr))}._1wzejc98:disabled{border-color:hsl(var(--button-hue),var(--_4vfmtjo),var(--_4vfmtjr))}._1wzejc99{background-color:transparent;color:hsl(var(--button-hue),var(--button-base-saturation),var(--_4vfmtjp));text-decoration:underline}._1wzejc99:hover{color:hsl(var(--button-hue),var(--_4vfmtjl),var(--_4vfmtjp))}._1wzejc99:active{color:hsl(var(--button-hue),var(--_4vfmtjl),var(--_4vfmtjr))}._1wzejc99:focus{color:hsl(var(--button-hue),var(--_4vfmtjl),var(--_4vfmtjr))}._1wzejc99:disabled{color:hsl(var(--button-hue),var(--_4vfmtjo),var(--_4vfmtjr))}._1wzejc9a{padding:var(--_4vfmtj1);font-size:var(--_4vfmtjd)}._1wzejc9b{width:100%;font-size:var(--_4vfmtj8)}._1ma99900{position:relative}._1ma99901{height:250px;width:100%;display:flex;padding:var(--_4vfmtj3);border-radius:0}._1ma99902{display:flex;flex-direction:row;flex-wrap:nowrap;height:100%;width:100%;overflow:auto;padding-left:var(--_4vfmtj0)}._1ma99901 li{position:relative}._1ma99901>li:first-of-type{margin-left:var(--_4vfmtj3)}._1ma99901>li:last-of-type{margin-right:0}._1ma99903{width:206px;background-color:#000;display:flex;justify-content:center;align-items:center;flex-shrink:0;border:0 none;padding:0;margin-left:var(--_4vfmtj3);cursor:pointer}._1ma99903 img{width:100%;object-fit:contain}.ejmsqv0{background:var(--_4vfmtjs);color:var(--_4vfmtjz);padding:var(--_4vfmtj2);border-radius:var(--_4vfmtj5) var(--_4vfmtj5) 0 0;border:1px solid var(--_4vfmtjt);border-bottom:none;margin-left:var(--_4vfmtj2);box-shadow:0 -1px 4px -2px var(--_4vfmtjv) inset;width:fit-content}.ejmsqv0:focus{outline:none}.ejmsqv1{background:var(--_4vfmtjt);color:var(--_4vfmtjz);box-shadow:0 -1px 4px -2px var(--_4vfmtju) inset}.ejmsqv2{color:var(--_4vfmtjz);background:var(--_4vfmtjt);padding:var(--_4vfmtj3);flex-grow:1;overflow:auto}.ejmsqv3{background:var(--_4vfmtjs)}.ejmsqv4{background:var(--_4vfmtjt)}.ejmsqv5{background:var(--_4vfmtju)}._3dzc6s0{width:100%;height:100%;display:grid;grid-template-columns:1fr 250px;grid-template-rows:1fr 250px;grid-template-areas:"content info" "history history";overflow:hidden}._3dzc6s0[data-hide-info]{grid-template-columns:1fr;grid-template-rows:1fr 250px}._3dzc6s0[data-hide-history]{grid-template-columns:1fr 250px;grid-template-rows:1fr 0px}._3dzc6s0[data-hide-info][data-hide-history]{grid-template-columns:1fr 0px;grid-template-rows:1fr 0px}._3dzc6s1{grid-area:content}._3dzc6s2{grid-area:info;position:relative}._3dzc6s3{grid-area:history;position:relative}._3dzc6s3>button{position:absolute;top:-29px}._3dzc6s4{flex-grow:1;overflow:auto;display:flex}._3dzc6s5{width:250px;height:100%;background-color:#639;position:relative}._3dzc6s6{position:absolute;top:0;left:0;transform-origin:37% 275%;transform:rotate(-90deg)}._97t2g70{color:var(--_4vfmtjz);font-size:var(--_4vfmtjd);display:inline-block;padding:var(--_4vfmtj2);box-shadow:0 4px 8px #00000026,0 6px 20px #00000026}._97t2g71{height:23px;transform:translateY(25%)}._97t2g70 a{color:var(--_4vfmtj15);text-decoration:none}._97t2g70 a:hover{text-decoration:underline}._97t2g70 a:visited,._97t2g70 a:active{color:var(--_4vfmtj15)}._97t2g70 a:focus{color:var(--_4vfmtj15)}._97t2g70 p{margin:var(--_4vfmtj1)}._1how28i0{position:relative;width:100%}._1how28i0>*{margin-bottom:10px}._1ilavkl0{position:relative;width:fit-content;background-color:hsl(var(--_4vfmtjt),var(--_4vfmtjm),var(--_4vfmtjp));padding:var(--_4vfmtj2)}._1ilavkl1{opacity:1;font-size:var(--_4vfmtjc)}._1ilavkl2{opacity:.3;font-size:var(--_4vfmtjc)}._1ilavkl0.positive{border-color:hsl(var(--_4vfmtjf),var(--_4vfmtjm),var(--_4vfmtjp))}._1ilavkl0.negative{border-color:hsl(var(--_4vfmtji),var(--_4vfmtjm),var(--_4vfmtjp))}._1ilavkl3{position:absolute;top:0;right:0;height:100%;width:100%;border:none;background-color:transparent;box-shadow:inset 0 0 24px #ffffff7f}._1ilavkl4{top:-4px;left:4px;padding:0}.d1va400{display:flex;flex-direction:row;flex-wrap:wrap;gap:10px;width:100%;height:100%;overflow:visible;scrollbar-width:none;-ms-overflow-style:none}.d1va400::-webkit-scrollbar{display:none}._9fxd10{display:flex;flex-direction:column;width:100%;height:100%;margin-bottom:0}._9fxd10 input{width:100%}._9fxd10>div{margin-bottom:var(--_4vfmtj2)}._9fxd12{background:var(--_4vfmtju);height:22px;border-radius:15px;width:34px;border:0;position:relative;display:inline-flex;padding:0;flex-direction:column;align-items:center;justify-content:center;box-shadow:0 0 2px 0 var(--_4vfmtju)}._9fxd12[data-headlessui-state=checked]{background:var(--_4vfmtjt)}._9fxd15{display:inline-flex;height:18px;width:30px;border-radius:15px;background:var(--_4vfmtju);flex-direction:column;align-items:center;justify-content:center}._9fxd12[data-headlessui-state=checked] ._9fxd15{background:var(--_4vfmtjv)}._9fxd15 p{color:var(--_4vfmtjz)}._9fxd16{margin-top:var(--_4vfmtj2);display:flex;flex-direction:row}._9fxd16>button{flex-grow:1;margin-right:var(--_4vfmtj3)}._1rn4m8a0{display:flex}._1rn4m8a1{margin-bottom:var(--_4vfmtj2);display:block}._1rn4m8a2{display:none}._1rn4m8a3{margin-left:20px}._11d5x3d0{padding-left:0;list-style-type:none}._11d5x3d1{margin-top:var(--_4vfmtj2)}.g3uahc0{padding-left:0;list-style-type:none}.g3uahc0 li,.g3uahc1{margin-top:var(--_4vfmtj3)}.g3uahc1 h4{font-size:var(--_4vfmtjc)}.g3uahc2{padding-left:0;list-style-type:none;display:flex;flex-wrap:wrap;gap:var(--_4vfmtj2)}.g3uahc2 li{margin:0}._1uf7s3f0{position:relative;width:fit-content;border-color:hsl(var(--_4vfmtjf),var(--_4vfmtjm),var(--_4vfmtjp));padding:var(--_4vfmtj2)}._1uf7s3f0.selected{background-color:#830b79}._1uf7s3f0 p{margin:0 0 2px;text-align:center}._1uf7s3f1{opacity:1}._1uf7s3f2{opacity:.3}._1uf7s3f3{position:absolute;top:0;left:0;height:100%;width:100%;display:flex;flex-direction:row}._1uf7s3f3 button{flex-grow:1;background-color:transparent;border:none;box-shadow:inset 0 0 24px #ffffff7f;border-radius:5px;padding:0}._1uf7s3f4{display:flex;justify-content:center}._1uf7s3f4 img{width:90px;height:100%;object-fit:cover;object-position:center}.fma0ug0{position:relative}.fma0ug0>canvas{position:absolute;top:0;left:0;width:100%;height:100%}.fma0ug0>canvas:first-of-type{opacity:.7}.fma0ug0>img{top:0;left:0}._2yyo4x0{position:relative;width:100%;height:100%;padding:10px}._2yyo4x1{display:flex;flex-direction:row;width:100%;flex-wrap:wrap}._2yyo4x2{display:flex;flex-direction:row;justify-content:space-evenly;align-items:center;width:100%}._2yyo4x2:first-of-type{margin:10px 0}.jx6k9z0{position:relative;width:100%;height:100%;overflow-y:auto;overflow-x:hidden}.jx6k9z0>div{margin-bottom:var(--_4vfmtj3)}.jx6k9z1{position:absolute;top:10px;left:400px;z-index:1;background-color:#00000080}._1jtagr80{display:flex;flex-direction:column;width:100%;height:100%}._1jtagr81{display:flex;flex-direction:row;justify-content:space-between;align-items:center;margin-bottom:var(--_4vfmtj3);margin-top:var(--_4vfmtj3)}._1jtagr81 button{flex-grow:1}._1jtagr81 button:first-child{margin-right:var(--_4vfmtj3)}._133914l0{display:flex;flex-direction:column;width:100%;margin-bottom:var(--_4vfmtj3)}._133914l1 p{margin-bottom:var(--_4vfmtj2)}._133914l0.complete{border-color:hsl(var(--_4vfmtjg),var(--_4vfmtjm),var(--_4vfmtjp))}._133914l0.processing{border-color:hsl(var(--_4vfmtjh),var(--_4vfmtjl),var(--_4vfmtjq))}._133914l0.pending{border-color:hsl(var(--_4vfmtjv),var(--_4vfmtjl),var(--_4vfmtjp))}._133914l0.paused{border-color:hsl(var(--_4vfmtjv),var(--_4vfmtjo),var(--_4vfmtjr));background-color:hsl(var(--_4vfmtjv),var(--_4vfmtjo),var(--_4vfmtjr))}._133914l0.error{border-color:hsl(var(--_4vfmtji),var(--_4vfmtjm),var(--_4vfmtjp))}._133914l2{display:flex;flex-direction:row;justify-content:space-between;align-items:center}._1j91ti00{direction:rtl;overflow:overlay}._1j91ti00::-webkit-scrollbar{position:absolute;width:6px;background-color:var(--_4vfmtjv)}._1j91ti00::-webkit-scrollbar-thumb{background-color:var(--_4vfmtju);border-radius:4px}._1j91ti00>*{direction:ltr}body{margin:0;min-width:320px;min-height:100vh}#root{position:absolute;top:0;left:0;width:100vw;height:100vh;overflow:auto;overflow-x:hidden}*{box-sizing:border-box}button{font-size:var(--_4vfmtjb)}.visually-hidden{visibility:hidden;position:absolute}h1,h2,h3,h4,h5,h6,p,label,ul,textarea{margin:0;padding:0;font-family:var(--_4vfmtj6)}h3{font-size:var(--_4vfmtj9)}h4,h5{font-size:var(--_4vfmtja)}h6,p,label{font-size:var(--_4vfmtjb)}textarea{padding:0;border:none;font-size:var(--_4vfmtjb);font-weight:700}a{color:var(--_4vfmtj15);text-decoration:none}ul{list-style:none}
diff --git a/ui/frontend/dist/index.html b/ui/frontend/dist/index.html
new file mode 100644
index 00000000..e9600505
--- /dev/null
+++ b/ui/frontend/dist/index.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+ Stable Diffusion UI
+
+
+
+
+
+
+
+
+
diff --git a/ui/frontend/dist/index.js b/ui/frontend/dist/index.js
new file mode 100644
index 00000000..68b3c9b3
--- /dev/null
+++ b/ui/frontend/dist/index.js
@@ -0,0 +1,113 @@
+(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)}})();function wd(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var P={exports:{}},$={};/**
+ * @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 ki=Symbol.for("react.element"),Ig=Symbol.for("react.portal"),Lg=Symbol.for("react.fragment"),Dg=Symbol.for("react.strict_mode"),Fg=Symbol.for("react.profiler"),Mg=Symbol.for("react.provider"),jg=Symbol.for("react.context"),Ag=Symbol.for("react.forward_ref"),$g=Symbol.for("react.suspense"),Ug=Symbol.for("react.memo"),zg=Symbol.for("react.lazy"),tc=Symbol.iterator;function Bg(e){return e===null||typeof e!="object"?null:(e=tc&&e[tc]||e["@@iterator"],typeof e=="function"?e:null)}var xd={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Pd=Object.assign,kd={};function Cr(e,t,n){this.props=e,this.context=t,this.refs=kd,this.updater=n||xd}Cr.prototype.isReactComponent={};Cr.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")};Cr.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Od(){}Od.prototype=Cr.prototype;function _l(e,t,n){this.props=e,this.context=t,this.refs=kd,this.updater=n||xd}var El=_l.prototype=new Od;El.constructor=_l;Pd(El,Cr.prototype);El.isPureReactComponent=!0;var nc=Array.isArray,_d=Object.prototype.hasOwnProperty,Cl={current:null},Ed={key:!0,ref:!0,__self:!0,__source:!0};function Cd(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)_d.call(t,r)&&!Ed.hasOwnProperty(r)&&(i[r]=t[r]);var a=arguments.length-2;if(a===1)i.children=n;else if(1>>1,X=T[B];if(0>>1;Bi(Qn,M))Bei(Mt,Qn)?(T[B]=Mt,T[Be]=M,B=Be):(T[B]=Qn,T[_e]=M,B=_e);else if(Bei(Mt,M))T[B]=Mt,T[Be]=M,B=Be;else break e}}return F}function i(T,F){var M=T.sortIndex-F.sortIndex;return M!==0?M:T.id-F.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,f=null,d=3,p=!1,g=!1,y=!1,x=typeof setTimeout=="function"?setTimeout:null,v=typeof clearTimeout=="function"?clearTimeout:null,h=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function m(T){for(var F=n(u);F!==null;){if(F.callback===null)r(u);else if(F.startTime<=T)r(u),F.sortIndex=F.expirationTime,t(l,F);else break;F=n(u)}}function S(T){if(y=!1,m(T),!g)if(n(l)!==null)g=!0,Xe(_);else{var F=n(u);F!==null&&De(S,F.startTime-T)}}function _(T,F){g=!1,y&&(y=!1,v(b),b=-1),p=!0;var M=d;try{for(m(F),f=n(l);f!==null&&(!(f.expirationTime>F)||T&&!I());){var B=f.callback;if(typeof B=="function"){f.callback=null,d=f.priorityLevel;var X=B(f.expirationTime<=F);F=e.unstable_now(),typeof X=="function"?f.callback=X:f===n(l)&&r(l),m(F)}else r(l);f=n(l)}if(f!==null)var Yt=!0;else{var _e=n(u);_e!==null&&De(S,_e.startTime-F),Yt=!1}return Yt}finally{f=null,d=M,p=!1}}var O=!1,C=null,b=-1,k=5,E=-1;function I(){return!(e.unstable_now()-ET||125B?(T.sortIndex=M,t(u,T),n(l)===null&&T===n(u)&&(y?(v(b),b=-1):y=!0,De(S,M-B))):(T.sortIndex=X,t(l,T),g||p||(g=!0,Xe(_))),T},e.unstable_shouldYield=I,e.unstable_wrapCallback=function(T){var F=d;return function(){var M=d;d=F;try{return T.apply(this,arguments)}finally{d=M}}}})(Nd);(function(e){e.exports=Nd})(Rd);/**
+ * @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 Td=P.exports,We=Rd.exports;function N(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"),da=Object.prototype.hasOwnProperty,Kg=/^[: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]*$/,ic={},oc={};function Wg(e){return da.call(oc,e)?!0:da.call(ic,e)?!1:Kg.test(e)?oc[e]=!0:(ic[e]=!0,!1)}function Gg(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 Yg(e,t,n,r){if(t===null||typeof t>"u"||Gg(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 Te(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 ye={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){ye[e]=new Te(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];ye[t]=new Te(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){ye[e]=new Te(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){ye[e]=new Te(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){ye[e]=new Te(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){ye[e]=new Te(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){ye[e]=new Te(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){ye[e]=new Te(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){ye[e]=new Te(e,5,!1,e.toLowerCase(),null,!1,!1)});var Rl=/[\-:]([a-z])/g;function Nl(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(Rl,Nl);ye[t]=new Te(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(Rl,Nl);ye[t]=new Te(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(Rl,Nl);ye[t]=new Te(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){ye[e]=new Te(e,1,!1,e.toLowerCase(),null,!1,!1)});ye.xlinkHref=new Te("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){ye[e]=new Te(e,1,!1,e.toLowerCase(),null,!0,!0)});function Tl(e,t,n,r){var i=ye.hasOwnProperty(t)?ye[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{bs=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Ur(e):""}function Jg(e){switch(e.tag){case 5:return Ur(e.type);case 16:return Ur("Lazy");case 13:return Ur("Suspense");case 19:return Ur("SuspenseList");case 0:case 2:case 15:return e=Rs(e.type,!1),e;case 11:return e=Rs(e.type.render,!1),e;case 1:return e=Rs(e.type,!0),e;default:return""}}function ma(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 Wn:return"Fragment";case Kn:return"Portal";case pa:return"Profiler";case Il:return"StrictMode";case ha:return"Suspense";case ga:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Dd:return(e.displayName||"Context")+".Consumer";case Ld:return(e._context.displayName||"Context")+".Provider";case Ll:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Dl:return t=e.displayName||null,t!==null?t:ma(e.type)||"Memo";case Zt:t=e._payload,e=e._init;try{return ma(e(t))}catch{}}return null}function Xg(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 ma(t);case 8:return t===Il?"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 yn(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Md(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Zg(e){var t=Md(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 Di(e){e._valueTracker||(e._valueTracker=Zg(e))}function jd(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Md(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function go(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 va(e,t){var n=t.checked;return te({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n!=null?n:e._wrapperState.initialChecked})}function ac(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=yn(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 Ad(e,t){t=t.checked,t!=null&&Tl(e,"checked",t,!1)}function ya(e,t){Ad(e,t);var n=yn(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")?Sa(e,t.type,n):t.hasOwnProperty("defaultValue")&&Sa(e,t.type,yn(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function lc(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 Sa(e,t,n){(t!=="number"||go(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var zr=Array.isArray;function or(e,t,n,r){if(e=e.options,t){t={};for(var i=0;i"+t.valueOf().toString()+"",t=Fi.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function ni(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Vr={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},em=["Webkit","ms","Moz","O"];Object.keys(Vr).forEach(function(e){em.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Vr[t]=Vr[e]})});function Bd(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Vr.hasOwnProperty(e)&&Vr[e]?(""+t).trim():t+"px"}function Qd(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,i=Bd(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,i):e[n]=i}}var tm=te({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 Pa(e,t){if(t){if(tm[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(N(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(N(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(N(61))}if(t.style!=null&&typeof t.style!="object")throw Error(N(62))}}function ka(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 Oa=null;function Fl(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var _a=null,sr=null,ar=null;function fc(e){if(e=Ei(e)){if(typeof _a!="function")throw Error(N(280));var t=e.stateNode;t&&(t=rs(t),_a(e.stateNode,e.type,t))}}function Hd(e){sr?ar?ar.push(e):ar=[e]:sr=e}function Vd(){if(sr){var e=sr,t=ar;if(ar=sr=null,fc(e),t)for(e=0;e>>=0,e===0?32:31-(dm(e)/pm|0)|0}var Mi=64,ji=4194304;function Br(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 So(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=Br(a):(o&=s,o!==0&&(r=Br(o)))}else s=n&~i,s!==0?r=Br(s):o!==0&&(r=Br(o));if(r===0)return 0;if(t!==0&&t!==r&&(t&i)===0&&(i=r&-r,o=t&-t,i>=o||i===16&&(o&4194240)!==0))return t;if((r&4)!==0&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function Oi(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-ht(t),e[t]=n}function vm(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=Kr),wc=String.fromCharCode(32),xc=!1;function fp(e,t){switch(e){case"keyup":return Vm.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function dp(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Gn=!1;function Km(e,t){switch(e){case"compositionend":return dp(t);case"keypress":return t.which!==32?null:(xc=!0,wc);case"textInput":return e=t.data,e===wc&&xc?null:e;default:return null}}function Wm(e,t){if(Gn)return e==="compositionend"||!Ql&&fp(e,t)?(e=up(),ro=Ul=sn=null,Gn=!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=_c(n)}}function mp(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?mp(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function vp(){for(var e=window,t=go();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=go(e.document)}return t}function Hl(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 rv(e){var t=vp(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&mp(n.ownerDocument.documentElement,n)){if(r!==null&&Hl(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=Ec(n,o);var s=Ec(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,Yn=null,Ta=null,Gr=null,Ia=!1;function Cc(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Ia||Yn==null||Yn!==go(r)||(r=Yn,"selectionStart"in r&&Hl(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}),Gr&&li(Gr,r)||(Gr=r,r=Po(Ta,"onSelect"),0Zn||(e.current=Aa[Zn],Aa[Zn]=null,Zn--)}function K(e,t){Zn++,Aa[Zn]=e.current,e.current=t}var Sn={},ke=Pn(Sn),je=Pn(!1),Fn=Sn;function pr(e,t){var n=e.type.contextTypes;if(!n)return Sn;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 Ae(e){return e=e.childContextTypes,e!=null}function Oo(){Y(je),Y(ke)}function Dc(e,t,n){if(ke.current!==Sn)throw Error(N(168));K(ke,t),K(je,n)}function Ep(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(N(108,Xg(e)||"Unknown",i));return te({},n,r)}function _o(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Sn,Fn=ke.current,K(ke,e),K(je,je.current),!0}function Fc(e,t,n){var r=e.stateNode;if(!r)throw Error(N(169));n?(e=Ep(e,t,Fn),r.__reactInternalMemoizedMergedChildContext=e,Y(je),Y(ke),K(ke,e)):Y(je),K(je,n)}var At=null,is=!1,Qs=!1;function Cp(e){At===null?At=[e]:At.push(e)}function gv(e){is=!0,Cp(e)}function kn(){if(!Qs&&At!==null){Qs=!0;var e=0,t=V;try{var n=At;for(V=1;e>=s,i-=s,Ut=1<<32-ht(t)+i|n<b?(k=C,C=null):k=C.sibling;var E=d(v,C,m[b],S);if(E===null){C===null&&(C=k);break}e&&C&&E.alternate===null&&t(v,C),h=o(E,h,b),O===null?_=E:O.sibling=E,O=E,C=k}if(b===m.length)return n(v,C),J&&_n(v,b),_;if(C===null){for(;bb?(k=C,C=null):k=C.sibling;var I=d(v,C,E.value,S);if(I===null){C===null&&(C=k);break}e&&C&&I.alternate===null&&t(v,C),h=o(I,h,b),O===null?_=I:O.sibling=I,O=I,C=k}if(E.done)return n(v,C),J&&_n(v,b),_;if(C===null){for(;!E.done;b++,E=m.next())E=f(v,E.value,S),E!==null&&(h=o(E,h,b),O===null?_=E:O.sibling=E,O=E);return J&&_n(v,b),_}for(C=r(v,C);!E.done;b++,E=m.next())E=p(C,v,b,E.value,S),E!==null&&(e&&E.alternate!==null&&C.delete(E.key===null?b:E.key),h=o(E,h,b),O===null?_=E:O.sibling=E,O=E);return e&&C.forEach(function(j){return t(v,j)}),J&&_n(v,b),_}function x(v,h,m,S){if(typeof m=="object"&&m!==null&&m.type===Wn&&m.key===null&&(m=m.props.children),typeof m=="object"&&m!==null){switch(m.$$typeof){case Li:e:{for(var _=m.key,O=h;O!==null;){if(O.key===_){if(_=m.type,_===Wn){if(O.tag===7){n(v,O.sibling),h=i(O,m.props.children),h.return=v,v=h;break e}}else if(O.elementType===_||typeof _=="object"&&_!==null&&_.$$typeof===Zt&&Bc(_)===O.type){n(v,O.sibling),h=i(O,m.props),h.ref=Mr(v,O,m),h.return=v,v=h;break e}n(v,O);break}else t(v,O);O=O.sibling}m.type===Wn?(h=Ln(m.props.children,v.mode,S,m.key),h.return=v,v=h):(S=fo(m.type,m.key,m.props,null,v.mode,S),S.ref=Mr(v,h,m),S.return=v,v=S)}return s(v);case Kn:e:{for(O=m.key;h!==null;){if(h.key===O)if(h.tag===4&&h.stateNode.containerInfo===m.containerInfo&&h.stateNode.implementation===m.implementation){n(v,h.sibling),h=i(h,m.children||[]),h.return=v,v=h;break e}else{n(v,h);break}else t(v,h);h=h.sibling}h=Js(m,v.mode,S),h.return=v,v=h}return s(v);case Zt:return O=m._init,x(v,h,O(m._payload),S)}if(zr(m))return g(v,h,m,S);if(Tr(m))return y(v,h,m,S);Hi(v,m)}return typeof m=="string"&&m!==""||typeof m=="number"?(m=""+m,h!==null&&h.tag===6?(n(v,h.sibling),h=i(h,m),h.return=v,v=h):(n(v,h),h=Ys(m,v.mode,S),h.return=v,v=h),s(v)):n(v,h)}return x}var gr=Fp(!0),Mp=Fp(!1),Ci={},Rt=Pn(Ci),di=Pn(Ci),pi=Pn(Ci);function Rn(e){if(e===Ci)throw Error(N(174));return e}function Zl(e,t){switch(K(pi,t),K(di,e),K(Rt,Ci),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:xa(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=xa(t,e)}Y(Rt),K(Rt,t)}function mr(){Y(Rt),Y(di),Y(pi)}function jp(e){Rn(pi.current);var t=Rn(Rt.current),n=xa(t,e.type);t!==n&&(K(di,e),K(Rt,n))}function eu(e){di.current===e&&(Y(Rt),Y(di))}var Z=Pn(0);function To(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)!==0)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 Hs=[];function tu(){for(var e=0;en?n:4,e(!0);var r=Vs.transition;Vs.transition={};try{e(!1),t()}finally{V=n,Vs.transition=r}}function Zp(){return at().memoizedState}function Sv(e,t,n){var r=hn(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},eh(e))th(t,n);else if(n=Tp(e,t,n,r),n!==null){var i=Re();gt(n,e,r,i),nh(n,t,r)}}function wv(e,t,n){var r=hn(e),i={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(eh(e))th(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,vt(a,s)){var l=t.interleaved;l===null?(i.next=i,Jl(t)):(i.next=l.next,l.next=i),t.interleaved=i;return}}catch{}finally{}n=Tp(e,t,i,r),n!==null&&(i=Re(),gt(n,e,r,i),nh(n,t,r))}}function eh(e){var t=e.alternate;return e===ee||t!==null&&t===ee}function th(e,t){Yr=Io=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function nh(e,t,n){if((n&4194240)!==0){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,jl(e,n)}}var Lo={readContext:st,useCallback:Se,useContext:Se,useEffect:Se,useImperativeHandle:Se,useInsertionEffect:Se,useLayoutEffect:Se,useMemo:Se,useReducer:Se,useRef:Se,useState:Se,useDebugValue:Se,useDeferredValue:Se,useTransition:Se,useMutableSource:Se,useSyncExternalStore:Se,useId:Se,unstable_isNewReconciler:!1},xv={readContext:st,useCallback:function(e,t){return Ot().memoizedState=[e,t===void 0?null:t],e},useContext:st,useEffect:Hc,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,ao(4194308,4,Wp.bind(null,t,e),n)},useLayoutEffect:function(e,t){return ao(4194308,4,e,t)},useInsertionEffect:function(e,t){return ao(4,2,e,t)},useMemo:function(e,t){var n=Ot();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Ot();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=Sv.bind(null,ee,e),[r.memoizedState,e]},useRef:function(e){var t=Ot();return e={current:e},t.memoizedState=e},useState:Qc,useDebugValue:su,useDeferredValue:function(e){return Ot().memoizedState=e},useTransition:function(){var e=Qc(!1),t=e[0];return e=yv.bind(null,e[1]),Ot().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=ee,i=Ot();if(J){if(n===void 0)throw Error(N(407));n=n()}else{if(n=t(),pe===null)throw Error(N(349));(jn&30)!==0||Up(r,t,n)}i.memoizedState=n;var o={value:n,getSnapshot:t};return i.queue=o,Hc(Bp.bind(null,r,o,e),[e]),r.flags|=2048,mi(9,zp.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=Ot(),t=pe.identifierPrefix;if(J){var n=zt,r=Ut;n=(r&~(1<<32-ht(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=hi++,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[_t]=t,e[fi]=r,fh(e,t,!1,!1),t.stateNode=e;e:{switch(s=ka(n,r),n){case"dialog":W("cancel",e),W("close",e),i=r;break;case"iframe":case"object":case"embed":W("load",e),i=r;break;case"video":case"audio":for(i=0;iyr&&(t.flags|=128,r=!0,jr(o,!1),t.lanes=4194304)}else{if(!r)if(e=To(s),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),jr(o,!0),o.tail===null&&o.tailMode==="hidden"&&!s.alternate&&!J)return we(t),null}else 2*oe()-o.renderingStartTime>yr&&n!==1073741824&&(t.flags|=128,r=!0,jr(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=oe(),t.sibling=null,n=Z.current,K(Z,r?n&1|2:n&1),t):(we(t),null);case 22:case 23:return du(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&(t.mode&1)!==0?(Qe&1073741824)!==0&&(we(t),t.subtreeFlags&6&&(t.flags|=8192)):we(t),null;case 24:return null;case 25:return null}throw Error(N(156,t.tag))}function Rv(e,t){switch(ql(t),t.tag){case 1:return Ae(t.type)&&Oo(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return mr(),Y(je),Y(ke),tu(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 5:return eu(t),null;case 13:if(Y(Z),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(N(340));hr()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Y(Z),null;case 4:return mr(),null;case 10:return Yl(t.type._context),null;case 22:case 23:return du(),null;case 24:return null;default:return null}}var qi=!1,Pe=!1,Nv=typeof WeakSet=="function"?WeakSet:Set,L=null;function rr(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){ne(e,t,r)}else n.current=null}function Ya(e,t,n){try{n()}catch(r){ne(e,t,r)}}var Zc=!1;function Tv(e,t){if(La=wo,e=vp(),Hl(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,f=e,d=null;t:for(;;){for(var p;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),(p=f.firstChild)!==null;)d=f,f=p;for(;;){if(f===e)break t;if(d===n&&++u===i&&(a=s),d===o&&++c===r&&(l=s),(p=f.nextSibling)!==null)break;f=d,d=f.parentNode}f=p}n=a===-1||l===-1?null:{start:a,end:l}}else n=null}n=n||{start:0,end:0}}else n=null;for(Da={focusedElem:e,selectionRange:n},wo=!1,L=t;L!==null;)if(t=L,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,L=e;else for(;L!==null;){t=L;try{var g=t.alternate;if((t.flags&1024)!==0)switch(t.tag){case 0:case 11:case 15:break;case 1:if(g!==null){var y=g.memoizedProps,x=g.memoizedState,v=t.stateNode,h=v.getSnapshotBeforeUpdate(t.elementType===t.type?y:ft(t.type,y),x);v.__reactInternalSnapshotBeforeUpdate=h}break;case 3:var m=t.stateNode.containerInfo;m.nodeType===1?m.textContent="":m.nodeType===9&&m.documentElement&&m.removeChild(m.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(N(163))}}catch(S){ne(t,t.return,S)}if(e=t.sibling,e!==null){e.return=t.return,L=e;break}L=t.return}return g=Zc,Zc=!1,g}function Jr(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&&Ya(t,n,o)}i=i.next}while(i!==r)}}function as(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 Ja(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 hh(e){var t=e.alternate;t!==null&&(e.alternate=null,hh(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[_t],delete t[fi],delete t[ja],delete t[pv],delete t[hv])),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 gh(e){return e.tag===5||e.tag===3||e.tag===4}function ef(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||gh(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 Xa(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=ko));else if(r!==4&&(e=e.child,e!==null))for(Xa(e,t,n),e=e.sibling;e!==null;)Xa(e,t,n),e=e.sibling}function Za(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(Za(e,t,n),e=e.sibling;e!==null;)Za(e,t,n),e=e.sibling}var ge=null,dt=!1;function Jt(e,t,n){for(n=n.child;n!==null;)mh(e,t,n),n=n.sibling}function mh(e,t,n){if(bt&&typeof bt.onCommitFiberUnmount=="function")try{bt.onCommitFiberUnmount(Zo,n)}catch{}switch(n.tag){case 5:Pe||rr(n,t);case 6:var r=ge,i=dt;ge=null,Jt(e,t,n),ge=r,dt=i,ge!==null&&(dt?(e=ge,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):ge.removeChild(n.stateNode));break;case 18:ge!==null&&(dt?(e=ge,n=n.stateNode,e.nodeType===8?Bs(e.parentNode,n):e.nodeType===1&&Bs(e,n),si(e)):Bs(ge,n.stateNode));break;case 4:r=ge,i=dt,ge=n.stateNode.containerInfo,dt=!0,Jt(e,t,n),ge=r,dt=i;break;case 0:case 11:case 14:case 15:if(!Pe&&(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)!==0||(o&4)!==0)&&Ya(n,t,s),i=i.next}while(i!==r)}Jt(e,t,n);break;case 1:if(!Pe&&(rr(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(a){ne(n,t,a)}Jt(e,t,n);break;case 21:Jt(e,t,n);break;case 22:n.mode&1?(Pe=(r=Pe)||n.memoizedState!==null,Jt(e,t,n),Pe=r):Jt(e,t,n);break;default:Jt(e,t,n)}}function tf(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new Nv),t.forEach(function(r){var i=Uv.bind(null,e,r);n.has(r)||(n.add(r),r.then(i,i))})}}function ut(e,t){var n=t.deletions;if(n!==null)for(var r=0;ri&&(i=s),r&=~o}if(r=i,r=oe()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*Lv(r/1960))-r,10e?16:e,an===null)var r=!1;else{if(e=an,an=null,Mo=0,(U&6)!==0)throw Error(N(331));var i=U;for(U|=4,L=e.current;L!==null;){var o=L,s=o.child;if((L.flags&16)!==0){var a=o.deletions;if(a!==null){for(var l=0;loe()-cu?In(e,0):uu|=n),$e(e,t)}function Oh(e,t){t===0&&((e.mode&1)===0?t=1:(t=ji,ji<<=1,(ji&130023424)===0&&(ji=4194304)));var n=Re();e=Vt(e,t),e!==null&&(Oi(e,t,n),$e(e,n))}function $v(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Oh(e,n)}function Uv(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(N(314))}r!==null&&r.delete(t),Oh(e,n)}var _h;_h=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||je.current)Me=!0;else{if((e.lanes&n)===0&&(t.flags&128)===0)return Me=!1,Cv(e,t,n);Me=(e.flags&131072)!==0}else Me=!1,J&&(t.flags&1048576)!==0&&bp(t,Co,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;lo(e,t),e=t.pendingProps;var i=pr(t,ke.current);ur(t,n),i=ru(null,t,r,e,i,n);var o=iu();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,Ae(r)?(o=!0,_o(t)):o=!1,t.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,Xl(t),i.updater=os,t.stateNode=i,i._reactInternals=t,Qa(t,r,e,n),t=qa(null,t,r,!0,o,n)):(t.tag=0,J&&o&&Vl(t),Ce(null,t,i,n),t=t.child),t;case 16:r=t.elementType;e:{switch(lo(e,t),e=t.pendingProps,i=r._init,r=i(r._payload),t.type=r,i=t.tag=Bv(r),e=ft(r,e),i){case 0:t=Va(null,t,r,e,n);break e;case 1:t=Yc(null,t,r,e,n);break e;case 11:t=Wc(null,t,r,e,n);break e;case 14:t=Gc(null,t,r,ft(r.type,e),n);break e}throw Error(N(306,r,""))}return t;case 0:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:ft(r,i),Va(e,t,r,i,n);case 1:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:ft(r,i),Yc(e,t,r,i,n);case 3:e:{if(lh(t),e===null)throw Error(N(387));r=t.pendingProps,o=t.memoizedState,i=o.element,Ip(e,t),No(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=vr(Error(N(423)),t),t=Jc(e,t,r,n,i);break e}else if(r!==i){i=vr(Error(N(424)),t),t=Jc(e,t,r,n,i);break e}else for(qe=fn(t.stateNode.containerInfo.firstChild),Ke=t,J=!0,pt=null,n=Mp(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(hr(),r===i){t=qt(e,t,n);break e}Ce(e,t,r,n)}t=t.child}return t;case 5:return jp(t),e===null&&Ua(t),r=t.type,i=t.pendingProps,o=e!==null?e.memoizedProps:null,s=i.children,Fa(r,i)?s=null:o!==null&&Fa(r,o)&&(t.flags|=32),ah(e,t),Ce(e,t,s,n),t.child;case 6:return e===null&&Ua(t),null;case 13:return uh(e,t,n);case 4:return Zl(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=gr(t,null,r,n):Ce(e,t,r,n),t.child;case 11:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:ft(r,i),Wc(e,t,r,i,n);case 7:return Ce(e,t,t.pendingProps,n),t.child;case 8:return Ce(e,t,t.pendingProps.children,n),t.child;case 12:return Ce(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,K(bo,r._currentValue),r._currentValue=s,o!==null)if(vt(o.value,s)){if(o.children===i.children&&!je.current){t=qt(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=Bt(-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),za(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(N(341));s.lanes|=n,a=s.alternate,a!==null&&(a.lanes|=n),za(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}Ce(e,t,i.children,n),t=t.child}return t;case 9:return i=t.type,r=t.pendingProps.children,ur(t,n),i=st(i),r=r(i),t.flags|=1,Ce(e,t,r,n),t.child;case 14:return r=t.type,i=ft(r,t.pendingProps),i=ft(r.type,i),Gc(e,t,r,i,n);case 15:return oh(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:ft(r,i),lo(e,t),t.tag=1,Ae(r)?(e=!0,_o(t)):e=!1,ur(t,n),Dp(t,r,i),Qa(t,r,i,n),qa(null,t,r,!0,e,n);case 19:return ch(e,t,n);case 22:return sh(e,t,n)}throw Error(N(156,t.tag))};function Eh(e,t){return Xd(e,t)}function zv(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 it(e,t,n,r){return new zv(e,t,n,r)}function hu(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Bv(e){if(typeof e=="function")return hu(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Ll)return 11;if(e===Dl)return 14}return 2}function gn(e,t){var n=e.alternate;return n===null?(n=it(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 fo(e,t,n,r,i,o){var s=2;if(r=e,typeof e=="function")hu(e)&&(s=1);else if(typeof e=="string")s=5;else e:switch(e){case Wn:return Ln(n.children,i,o,t);case Il:s=8,i|=8;break;case pa:return e=it(12,n,t,i|2),e.elementType=pa,e.lanes=o,e;case ha:return e=it(13,n,t,i),e.elementType=ha,e.lanes=o,e;case ga:return e=it(19,n,t,i),e.elementType=ga,e.lanes=o,e;case Fd:return us(n,i,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Ld:s=10;break e;case Dd:s=9;break e;case Ll:s=11;break e;case Dl:s=14;break e;case Zt:s=16,r=null;break e}throw Error(N(130,e==null?e:typeof e,""))}return t=it(s,n,t,i),t.elementType=e,t.type=r,t.lanes=o,t}function Ln(e,t,n,r){return e=it(7,e,r,t),e.lanes=n,e}function us(e,t,n,r){return e=it(22,e,r,t),e.elementType=Fd,e.lanes=n,e.stateNode={isHidden:!1},e}function Ys(e,t,n){return e=it(6,e,null,t),e.lanes=n,e}function Js(e,t,n){return t=it(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Qv(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=Ts(0),this.expirationTimes=Ts(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ts(0),this.identifierPrefix=r,this.onRecoverableError=i,this.mutableSourceEagerHydrationData=null}function gu(e,t,n,r,i,o,s,a,l){return e=new Qv(e,t,n,a,l),t===1?(t=1,o===!0&&(t|=8)):t=0,o=it(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Xl(o),e}function Hv(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(n){console.error(n)}}t(),e.exports=Ye})(bd);var cf=bd.exports;fa.createRoot=cf.createRoot,fa.hydrateRoot=cf.hydrateRoot;var Su={exports:{}},Nh={};/**
+ * @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 Sr=P.exports;function Gv(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var Yv=typeof Object.is=="function"?Object.is:Gv,Jv=Sr.useState,Xv=Sr.useEffect,Zv=Sr.useLayoutEffect,ey=Sr.useDebugValue;function ty(e,t){var n=t(),r=Jv({inst:{value:n,getSnapshot:t}}),i=r[0].inst,o=r[1];return Zv(function(){i.value=n,i.getSnapshot=t,Xs(i)&&o({inst:i})},[e,n,t]),Xv(function(){return Xs(i)&&o({inst:i}),e(function(){Xs(i)&&o({inst:i})})},[e]),ey(n),n}function Xs(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!Yv(e,n)}catch{return!0}}function ny(e,t){return t()}var ry=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?ny:ty;Nh.useSyncExternalStore=Sr.useSyncExternalStore!==void 0?Sr.useSyncExternalStore:ry;(function(e){e.exports=Nh})(Su);var hs={exports:{}},gs={};/**
+ * @license React
+ * react-jsx-runtime.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 iy=P.exports,oy=Symbol.for("react.element"),sy=Symbol.for("react.fragment"),ay=Object.prototype.hasOwnProperty,ly=iy.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,uy={key:!0,ref:!0,__self:!0,__source:!0};function Th(e,t,n){var r,i={},o=null,s=null;n!==void 0&&(o=""+n),t.key!==void 0&&(o=""+t.key),t.ref!==void 0&&(s=t.ref);for(r in t)ay.call(t,r)&&!uy.hasOwnProperty(r)&&(i[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps,t)i[r]===void 0&&(i[r]=t[r]);return{$$typeof:oy,type:e,key:o,ref:s,props:i,_owner:ly.current}}gs.Fragment=sy;gs.jsx=Th;gs.jsxs=Th;(function(e){e.exports=gs})(hs);const lt=hs.exports.Fragment,w=hs.exports.jsx,R=hs.exports.jsxs;/**
+ * react-query
+ *
+ * Copyright (c) TanStack
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE.md file in the root directory of this source tree.
+ *
+ * @license MIT
+ */class bi{constructor(){this.listeners=[],this.subscribe=this.subscribe.bind(this)}subscribe(t){return this.listeners.push(t),this.onSubscribe(),()=>{this.listeners=this.listeners.filter(n=>n!==t),this.onUnsubscribe()}}hasListeners(){return this.listeners.length>0}onSubscribe(){}onUnsubscribe(){}}const yi=typeof window>"u";function Ze(){}function cy(e,t){return typeof e=="function"?e(t):e}function il(e){return typeof e=="number"&&e>=0&&e!==1/0}function Ih(e,t){return Math.max(e+(t||0)-Date.now(),0)}function po(e,t,n){return ms(e)?typeof t=="function"?{...n,queryKey:e,queryFn:t}:{...t,queryKey:e}:e}function tn(e,t,n){return ms(e)?[{...t,queryKey:e},n]:[e||{},t]}function ff(e,t){const{type:n="all",exact:r,fetchStatus:i,predicate:o,queryKey:s,stale:a}=e;if(ms(s)){if(r){if(t.queryHash!==wu(s,t.options))return!1}else if(!$o(t.queryKey,s))return!1}if(n!=="all"){const l=t.isActive();if(n==="active"&&!l||n==="inactive"&&l)return!1}return!(typeof a=="boolean"&&t.isStale()!==a||typeof i<"u"&&i!==t.state.fetchStatus||o&&!o(t))}function df(e,t){const{exact:n,fetching:r,predicate:i,mutationKey:o}=e;if(ms(o)){if(!t.options.mutationKey)return!1;if(n){if(Nn(t.options.mutationKey)!==Nn(o))return!1}else if(!$o(t.options.mutationKey,o))return!1}return!(typeof r=="boolean"&&t.state.status==="loading"!==r||i&&!i(t))}function wu(e,t){return((t==null?void 0:t.queryKeyHashFn)||Nn)(e)}function Nn(e){return JSON.stringify(e,(t,n)=>ol(n)?Object.keys(n).sort().reduce((r,i)=>(r[i]=n[i],r),{}):n)}function $o(e,t){return Lh(e,t)}function Lh(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?!Object.keys(t).some(n=>!Lh(e[n],t[n])):!1}function Dh(e,t){if(e===t)return e;const n=hf(e)&&hf(t);if(n||ol(e)&&ol(t)){const r=n?e.length:Object.keys(e).length,i=n?t:Object.keys(t),o=i.length,s=n?[]:{};let a=0;for(let l=0;l"u")return!0;const n=t.prototype;return!(!gf(n)||!n.hasOwnProperty("isPrototypeOf"))}function gf(e){return Object.prototype.toString.call(e)==="[object Object]"}function ms(e){return Array.isArray(e)}function Fh(e){return new Promise(t=>{setTimeout(t,e)})}function mf(e){Fh(0).then(e)}function fy(){if(typeof AbortController=="function")return new AbortController}function sl(e,t,n){return n.isDataEqual!=null&&n.isDataEqual(e,t)?e:typeof n.structuralSharing=="function"?n.structuralSharing(e,t):n.structuralSharing!==!1?Dh(e,t):t}class dy extends bi{constructor(){super(),this.setup=t=>{if(!yi&&window.addEventListener){const n=()=>t();return window.addEventListener("visibilitychange",n,!1),window.addEventListener("focus",n,!1),()=>{window.removeEventListener("visibilitychange",n),window.removeEventListener("focus",n)}}}}onSubscribe(){this.cleanup||this.setEventListener(this.setup)}onUnsubscribe(){if(!this.hasListeners()){var t;(t=this.cleanup)==null||t.call(this),this.cleanup=void 0}}setEventListener(t){var n;this.setup=t,(n=this.cleanup)==null||n.call(this),this.cleanup=t(r=>{typeof r=="boolean"?this.setFocused(r):this.onFocus()})}setFocused(t){this.focused=t,t&&this.onFocus()}onFocus(){this.listeners.forEach(t=>{t()})}isFocused(){return typeof this.focused=="boolean"?this.focused:typeof document>"u"?!0:[void 0,"visible","prerender"].includes(document.visibilityState)}}const Uo=new dy;class py extends bi{constructor(){super(),this.setup=t=>{if(!yi&&window.addEventListener){const n=()=>t();return window.addEventListener("online",n,!1),window.addEventListener("offline",n,!1),()=>{window.removeEventListener("online",n),window.removeEventListener("offline",n)}}}}onSubscribe(){this.cleanup||this.setEventListener(this.setup)}onUnsubscribe(){if(!this.hasListeners()){var t;(t=this.cleanup)==null||t.call(this),this.cleanup=void 0}}setEventListener(t){var n;this.setup=t,(n=this.cleanup)==null||n.call(this),this.cleanup=t(r=>{typeof r=="boolean"?this.setOnline(r):this.onOnline()})}setOnline(t){this.online=t,t&&this.onOnline()}onOnline(){this.listeners.forEach(t=>{t()})}isOnline(){return typeof this.online=="boolean"?this.online:typeof navigator>"u"||typeof navigator.onLine>"u"?!0:navigator.onLine}}const zo=new py;function hy(e){return Math.min(1e3*2**e,3e4)}function vs(e){return(e!=null?e:"online")==="online"?zo.isOnline():!0}class Mh{constructor(t){this.revert=t==null?void 0:t.revert,this.silent=t==null?void 0:t.silent}}function ho(e){return e instanceof Mh}function jh(e){let t=!1,n=0,r=!1,i,o,s;const a=new Promise((x,v)=>{o=x,s=v}),l=x=>{r||(p(new Mh(x)),e.abort==null||e.abort())},u=()=>{t=!0},c=()=>{t=!1},f=()=>!Uo.isFocused()||e.networkMode!=="always"&&!zo.isOnline(),d=x=>{r||(r=!0,e.onSuccess==null||e.onSuccess(x),i==null||i(),o(x))},p=x=>{r||(r=!0,e.onError==null||e.onError(x),i==null||i(),s(x))},g=()=>new Promise(x=>{i=v=>{if(r||!f())return x(v)},e.onPause==null||e.onPause()}).then(()=>{i=void 0,r||e.onContinue==null||e.onContinue()}),y=()=>{if(r)return;let x;try{x=e.fn()}catch(v){x=Promise.reject(v)}Promise.resolve(x).then(d).catch(v=>{var h,m;if(r)return;const S=(h=e.retry)!=null?h:3,_=(m=e.retryDelay)!=null?m:hy,O=typeof _=="function"?_(n,v):_,C=S===!0||typeof S=="number"&&n{if(f())return g()}).then(()=>{t?p(v):y()})})};return vs(e.networkMode)?y():g().then(y),{promise:a,cancel:l,continue:()=>{i==null||i()},cancelRetry:u,continueRetry:c}}const xu=console;function gy(){let e=[],t=0,n=c=>{c()},r=c=>{c()};const i=c=>{let f;t++;try{f=c()}finally{t--,t||a()}return f},o=c=>{t?e.push(c):mf(()=>{n(c)})},s=c=>(...f)=>{o(()=>{c(...f)})},a=()=>{const c=e;e=[],c.length&&mf(()=>{r(()=>{c.forEach(f=>{n(f)})})})};return{batch:i,batchCalls:s,schedule:o,setNotifyFunction:c=>{n=c},setBatchNotifyFunction:c=>{r=c}}}const ae=gy();class Ah{destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),il(this.cacheTime)&&(this.gcTimeout=setTimeout(()=>{this.optionalRemove()},this.cacheTime))}updateCacheTime(t){this.cacheTime=Math.max(this.cacheTime||0,t!=null?t:yi?1/0:5*60*1e3)}clearGcTimeout(){this.gcTimeout&&(clearTimeout(this.gcTimeout),this.gcTimeout=void 0)}}class my extends Ah{constructor(t){super(),this.abortSignalConsumed=!1,this.defaultOptions=t.defaultOptions,this.setOptions(t.options),this.observers=[],this.cache=t.cache,this.logger=t.logger||xu,this.queryKey=t.queryKey,this.queryHash=t.queryHash,this.initialState=t.state||vy(this.options),this.state=this.initialState,this.meta=t.meta}setOptions(t){this.options={...this.defaultOptions,...t},this.meta=t==null?void 0:t.meta,this.updateCacheTime(this.options.cacheTime)}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&this.cache.remove(this)}setData(t,n){const r=sl(this.state.data,t,this.options);return this.dispatch({data:r,type:"success",dataUpdatedAt:n==null?void 0:n.updatedAt,manual:n==null?void 0:n.manual}),r}setState(t,n){this.dispatch({type:"setState",state:t,setStateOptions:n})}cancel(t){var n;const r=this.promise;return(n=this.retryer)==null||n.cancel(t),r?r.then(Ze).catch(Ze):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}reset(){this.destroy(),this.setState(this.initialState)}isActive(){return this.observers.some(t=>t.options.enabled!==!1)}isDisabled(){return this.getObserversCount()>0&&!this.isActive()}isStale(){return this.state.isInvalidated||!this.state.dataUpdatedAt||this.observers.some(t=>t.getCurrentResult().isStale)}isStaleByTime(t=0){return this.state.isInvalidated||!this.state.dataUpdatedAt||!Ih(this.state.dataUpdatedAt,t)}onFocus(){var t;const n=this.observers.find(r=>r.shouldFetchOnWindowFocus());n&&n.refetch({cancelRefetch:!1}),(t=this.retryer)==null||t.continue()}onOnline(){var t;const n=this.observers.find(r=>r.shouldFetchOnReconnect());n&&n.refetch({cancelRefetch:!1}),(t=this.retryer)==null||t.continue()}addObserver(t){this.observers.indexOf(t)===-1&&(this.observers.push(t),this.clearGcTimeout(),this.cache.notify({type:"observerAdded",query:this,observer:t}))}removeObserver(t){this.observers.indexOf(t)!==-1&&(this.observers=this.observers.filter(n=>n!==t),this.observers.length||(this.retryer&&(this.abortSignalConsumed?this.retryer.cancel({revert:!0}):this.retryer.cancelRetry()),this.scheduleGc()),this.cache.notify({type:"observerRemoved",query:this,observer:t}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||this.dispatch({type:"invalidate"})}fetch(t,n){var r,i;if(this.state.fetchStatus!=="idle"){if(this.state.dataUpdatedAt&&n!=null&&n.cancelRefetch)this.cancel({silent:!0});else if(this.promise){var o;return(o=this.retryer)==null||o.continueRetry(),this.promise}}if(t&&this.setOptions(t),!this.options.queryFn){const p=this.observers.find(g=>g.options.queryFn);p&&this.setOptions(p.options)}Array.isArray(this.options.queryKey);const s=fy(),a={queryKey:this.queryKey,pageParam:void 0,meta:this.meta},l=p=>{Object.defineProperty(p,"signal",{enumerable:!0,get:()=>{if(s)return this.abortSignalConsumed=!0,s.signal}})};l(a);const u=()=>this.options.queryFn?(this.abortSignalConsumed=!1,this.options.queryFn(a)):Promise.reject("Missing queryFn"),c={fetchOptions:n,options:this.options,queryKey:this.queryKey,state:this.state,fetchFn:u,meta:this.meta};if(l(c),(r=this.options.behavior)==null||r.onFetch(c),this.revertState=this.state,this.state.fetchStatus==="idle"||this.state.fetchMeta!==((i=c.fetchOptions)==null?void 0:i.meta)){var f;this.dispatch({type:"fetch",meta:(f=c.fetchOptions)==null?void 0:f.meta})}const d=p=>{if(ho(p)&&p.silent||this.dispatch({type:"error",error:p}),!ho(p)){var g,y;(g=(y=this.cache.config).onError)==null||g.call(y,p,this)}this.isFetchingOptimistic||this.scheduleGc(),this.isFetchingOptimistic=!1};return this.retryer=jh({fn:c.fetchFn,abort:s==null?void 0:s.abort.bind(s),onSuccess:p=>{var g,y;if(typeof p>"u"){d(new Error("Query data cannot be undefined"));return}this.setData(p),(g=(y=this.cache.config).onSuccess)==null||g.call(y,p,this),this.isFetchingOptimistic||this.scheduleGc(),this.isFetchingOptimistic=!1},onError:d,onFail:()=>{this.dispatch({type:"failed"})},onPause:()=>{this.dispatch({type:"pause"})},onContinue:()=>{this.dispatch({type:"continue"})},retry:c.options.retry,retryDelay:c.options.retryDelay,networkMode:c.options.networkMode}),this.promise=this.retryer.promise,this.promise}dispatch(t){const n=r=>{var i,o;switch(t.type){case"failed":return{...r,fetchFailureCount:r.fetchFailureCount+1};case"pause":return{...r,fetchStatus:"paused"};case"continue":return{...r,fetchStatus:"fetching"};case"fetch":return{...r,fetchFailureCount:0,fetchMeta:(i=t.meta)!=null?i:null,fetchStatus:vs(this.options.networkMode)?"fetching":"paused",...!r.dataUpdatedAt&&{error:null,status:"loading"}};case"success":return{...r,data:t.data,dataUpdateCount:r.dataUpdateCount+1,dataUpdatedAt:(o=t.dataUpdatedAt)!=null?o:Date.now(),error:null,isInvalidated:!1,status:"success",...!t.manual&&{fetchStatus:"idle",fetchFailureCount:0}};case"error":const s=t.error;return ho(s)&&s.revert&&this.revertState?{...this.revertState}:{...r,error:s,errorUpdateCount:r.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:r.fetchFailureCount+1,fetchStatus:"idle",status:"error"};case"invalidate":return{...r,isInvalidated:!0};case"setState":return{...r,...t.state}}};this.state=n(this.state),ae.batch(()=>{this.observers.forEach(r=>{r.onQueryUpdate(t)}),this.cache.notify({query:this,type:"updated",action:t})})}}function vy(e){const t=typeof e.initialData=="function"?e.initialData():e.initialData,r=typeof e.initialData<"u"?typeof e.initialDataUpdatedAt=="function"?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0,i=typeof t<"u";return{data:t,dataUpdateCount:0,dataUpdatedAt:i?r!=null?r:Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchMeta:null,isInvalidated:!1,status:i?"success":"loading",fetchStatus:"idle"}}class yy extends bi{constructor(t){super(),this.config=t||{},this.queries=[],this.queriesMap={}}build(t,n,r){var i;const o=n.queryKey,s=(i=n.queryHash)!=null?i:wu(o,n);let a=this.get(s);return a||(a=new my({cache:this,logger:t.getLogger(),queryKey:o,queryHash:s,options:t.defaultQueryOptions(n),state:r,defaultOptions:t.getQueryDefaults(o),meta:n.meta}),this.add(a)),a}add(t){this.queriesMap[t.queryHash]||(this.queriesMap[t.queryHash]=t,this.queries.push(t),this.notify({type:"added",query:t}))}remove(t){const n=this.queriesMap[t.queryHash];n&&(t.destroy(),this.queries=this.queries.filter(r=>r!==t),n===t&&delete this.queriesMap[t.queryHash],this.notify({type:"removed",query:t}))}clear(){ae.batch(()=>{this.queries.forEach(t=>{this.remove(t)})})}get(t){return this.queriesMap[t]}getAll(){return this.queries}find(t,n){const[r]=tn(t,n);return typeof r.exact>"u"&&(r.exact=!0),this.queries.find(i=>ff(r,i))}findAll(t,n){const[r]=tn(t,n);return Object.keys(r).length>0?this.queries.filter(i=>ff(r,i)):this.queries}notify(t){ae.batch(()=>{this.listeners.forEach(n=>{n(t)})})}onFocus(){ae.batch(()=>{this.queries.forEach(t=>{t.onFocus()})})}onOnline(){ae.batch(()=>{this.queries.forEach(t=>{t.onOnline()})})}}class Sy extends Ah{constructor(t){super(),this.options={...t.defaultOptions,...t.options},this.mutationId=t.mutationId,this.mutationCache=t.mutationCache,this.logger=t.logger||xu,this.observers=[],this.state=t.state||wy(),this.meta=t.meta,this.updateCacheTime(this.options.cacheTime),this.scheduleGc()}setState(t){this.dispatch({type:"setState",state:t})}addObserver(t){this.observers.indexOf(t)===-1&&(this.observers.push(t),this.clearGcTimeout(),this.mutationCache.notify({type:"observerAdded",mutation:this,observer:t}))}removeObserver(t){this.observers=this.observers.filter(n=>n!==t),this.scheduleGc(),this.mutationCache.notify({type:"observerRemoved",mutation:this,observer:t})}optionalRemove(){this.observers.length||(this.state.status==="loading"?this.scheduleGc():this.mutationCache.remove(this))}continue(){return this.retryer?(this.retryer.continue(),this.retryer.promise):this.execute()}async execute(){const t=()=>{var m;return this.retryer=jh({fn:()=>this.options.mutationFn?this.options.mutationFn(this.state.variables):Promise.reject("No mutationFn found"),onFail:()=>{this.dispatch({type:"failed"})},onPause:()=>{this.dispatch({type:"pause"})},onContinue:()=>{this.dispatch({type:"continue"})},retry:(m=this.options.retry)!=null?m:0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode}),this.retryer.promise},n=this.state.status==="loading";try{var r,i,o,s,a,l;if(!n){var u,c,f,d;this.dispatch({type:"loading",variables:this.options.variables}),(u=(c=this.mutationCache.config).onMutate)==null||u.call(c,this.state.variables,this);const S=await((f=(d=this.options).onMutate)==null?void 0:f.call(d,this.state.variables));S!==this.state.context&&this.dispatch({type:"loading",context:S,variables:this.state.variables})}const m=await t();return(r=(i=this.mutationCache.config).onSuccess)==null||r.call(i,m,this.state.variables,this.state.context,this),await((o=(s=this.options).onSuccess)==null?void 0:o.call(s,m,this.state.variables,this.state.context)),await((a=(l=this.options).onSettled)==null?void 0:a.call(l,m,null,this.state.variables,this.state.context)),this.dispatch({type:"success",data:m}),m}catch(m){try{var p,g,y,x,v,h;throw(p=(g=this.mutationCache.config).onError)==null||p.call(g,m,this.state.variables,this.state.context,this),await((y=(x=this.options).onError)==null?void 0:y.call(x,m,this.state.variables,this.state.context)),await((v=(h=this.options).onSettled)==null?void 0:v.call(h,void 0,m,this.state.variables,this.state.context)),m}finally{this.dispatch({type:"error",error:m})}}}dispatch(t){const n=r=>{switch(t.type){case"failed":return{...r,failureCount:r.failureCount+1};case"pause":return{...r,isPaused:!0};case"continue":return{...r,isPaused:!1};case"loading":return{...r,context:t.context,data:void 0,error:null,isPaused:!vs(this.options.networkMode),status:"loading",variables:t.variables};case"success":return{...r,data:t.data,error:null,status:"success",isPaused:!1};case"error":return{...r,data:void 0,error:t.error,failureCount:r.failureCount+1,isPaused:!1,status:"error"};case"setState":return{...r,...t.state}}};this.state=n(this.state),ae.batch(()=>{this.observers.forEach(r=>{r.onMutationUpdate(t)}),this.mutationCache.notify({mutation:this,type:"updated",action:t})})}}function wy(){return{context:void 0,data:void 0,error:null,failureCount:0,isPaused:!1,status:"idle",variables:void 0}}class xy extends bi{constructor(t){super(),this.config=t||{},this.mutations=[],this.mutationId=0}build(t,n,r){const i=new Sy({mutationCache:this,logger:t.getLogger(),mutationId:++this.mutationId,options:t.defaultMutationOptions(n),state:r,defaultOptions:n.mutationKey?t.getMutationDefaults(n.mutationKey):void 0,meta:n.meta});return this.add(i),i}add(t){this.mutations.push(t),this.notify({type:"added",mutation:t})}remove(t){this.mutations=this.mutations.filter(n=>n!==t),this.notify({type:"removed",mutation:t})}clear(){ae.batch(()=>{this.mutations.forEach(t=>{this.remove(t)})})}getAll(){return this.mutations}find(t){return typeof t.exact>"u"&&(t.exact=!0),this.mutations.find(n=>df(t,n))}findAll(t){return this.mutations.filter(n=>df(t,n))}notify(t){ae.batch(()=>{this.listeners.forEach(n=>{n(t)})})}resumePausedMutations(){const t=this.mutations.filter(n=>n.state.isPaused);return ae.batch(()=>t.reduce((n,r)=>n.then(()=>r.continue().catch(Ze)),Promise.resolve()))}}function Py(){return{onFetch:e=>{e.fetchFn=()=>{var t,n,r,i,o,s;const a=(t=e.fetchOptions)==null||(n=t.meta)==null?void 0:n.refetchPage,l=(r=e.fetchOptions)==null||(i=r.meta)==null?void 0:i.fetchMore,u=l==null?void 0:l.pageParam,c=(l==null?void 0:l.direction)==="forward",f=(l==null?void 0:l.direction)==="backward",d=((o=e.state.data)==null?void 0:o.pages)||[],p=((s=e.state.data)==null?void 0:s.pageParams)||[];let g=p,y=!1;const x=O=>{Object.defineProperty(O,"signal",{enumerable:!0,get:()=>{var C;if((C=e.signal)!=null&&C.aborted)y=!0;else{var b;(b=e.signal)==null||b.addEventListener("abort",()=>{y=!0})}return e.signal}})},v=e.options.queryFn||(()=>Promise.reject("Missing queryFn")),h=(O,C,b,k)=>(g=k?[C,...g]:[...g,C],k?[b,...O]:[...O,b]),m=(O,C,b,k)=>{if(y)return Promise.reject("Cancelled");if(typeof b>"u"&&!C&&O.length)return Promise.resolve(O);const E={queryKey:e.queryKey,pageParam:b,meta:e.meta};x(E);const I=v(E);return Promise.resolve(I).then(z=>h(O,b,z,k))};let S;if(!d.length)S=m([]);else if(c){const O=typeof u<"u",C=O?u:vf(e.options,d);S=m(d,O,C)}else if(f){const O=typeof u<"u",C=O?u:ky(e.options,d);S=m(d,O,C,!0)}else{g=[];const O=typeof e.options.getNextPageParam>"u";S=(a&&d[0]?a(d[0],0,d):!0)?m([],O,p[0]):Promise.resolve(h([],p[0],d[0]));for(let b=1;b{if(a&&d[b]?a(d[b],b,d):!0){const I=O?p[b]:vf(e.options,k);return m(k,O,I)}return Promise.resolve(h(k,p[b],d[b]))})}return S.then(O=>({pages:O,pageParams:g}))}}}}function vf(e,t){return e.getNextPageParam==null?void 0:e.getNextPageParam(t[t.length-1],t)}function ky(e,t){return e.getPreviousPageParam==null?void 0:e.getPreviousPageParam(t[0],t)}class Oy{constructor(t={}){this.queryCache=t.queryCache||new yy,this.mutationCache=t.mutationCache||new xy,this.logger=t.logger||xu,this.defaultOptions=t.defaultOptions||{},this.queryDefaults=[],this.mutationDefaults=[]}mount(){this.unsubscribeFocus=Uo.subscribe(()=>{Uo.isFocused()&&(this.resumePausedMutations(),this.queryCache.onFocus())}),this.unsubscribeOnline=zo.subscribe(()=>{zo.isOnline()&&(this.resumePausedMutations(),this.queryCache.onOnline())})}unmount(){var t,n;(t=this.unsubscribeFocus)==null||t.call(this),(n=this.unsubscribeOnline)==null||n.call(this)}isFetching(t,n){const[r]=tn(t,n);return r.fetchStatus="fetching",this.queryCache.findAll(r).length}isMutating(t){return this.mutationCache.findAll({...t,fetching:!0}).length}getQueryData(t,n){var r;return(r=this.queryCache.find(t,n))==null?void 0:r.state.data}getQueriesData(t){return this.getQueryCache().findAll(t).map(({queryKey:n,state:r})=>{const i=r.data;return[n,i]})}setQueryData(t,n,r){const i=this.queryCache.find(t),o=i==null?void 0:i.state.data,s=cy(n,o);if(typeof s>"u")return;const a=po(t),l=this.defaultQueryOptions(a);return this.queryCache.build(this,l).setData(s,{...r,manual:!0})}setQueriesData(t,n,r){return ae.batch(()=>this.getQueryCache().findAll(t).map(({queryKey:i})=>[i,this.setQueryData(i,n,r)]))}getQueryState(t,n){var r;return(r=this.queryCache.find(t,n))==null?void 0:r.state}removeQueries(t,n){const[r]=tn(t,n),i=this.queryCache;ae.batch(()=>{i.findAll(r).forEach(o=>{i.remove(o)})})}resetQueries(t,n,r){const[i,o]=tn(t,n,r),s=this.queryCache,a={type:"active",...i};return ae.batch(()=>(s.findAll(i).forEach(l=>{l.reset()}),this.refetchQueries(a,o)))}cancelQueries(t,n,r){const[i,o={}]=tn(t,n,r);typeof o.revert>"u"&&(o.revert=!0);const s=ae.batch(()=>this.queryCache.findAll(i).map(a=>a.cancel(o)));return Promise.all(s).then(Ze).catch(Ze)}invalidateQueries(t,n,r){const[i,o]=tn(t,n,r);return ae.batch(()=>{var s,a;if(this.queryCache.findAll(i).forEach(u=>{u.invalidate()}),i.refetchType==="none")return Promise.resolve();const l={...i,type:(s=(a=i.refetchType)!=null?a:i.type)!=null?s:"active"};return this.refetchQueries(l,o)})}refetchQueries(t,n,r){const[i,o]=tn(t,n,r),s=ae.batch(()=>this.queryCache.findAll(i).filter(l=>!l.isDisabled()).map(l=>{var u;return l.fetch(void 0,{...o,cancelRefetch:(u=o==null?void 0:o.cancelRefetch)!=null?u:!0,meta:{refetchPage:i.refetchPage}})}));let a=Promise.all(s).then(Ze);return o!=null&&o.throwOnError||(a=a.catch(Ze)),a}fetchQuery(t,n,r){const i=po(t,n,r),o=this.defaultQueryOptions(i);typeof o.retry>"u"&&(o.retry=!1);const s=this.queryCache.build(this,o);return s.isStaleByTime(o.staleTime)?s.fetch(o):Promise.resolve(s.state.data)}prefetchQuery(t,n,r){return this.fetchQuery(t,n,r).then(Ze).catch(Ze)}fetchInfiniteQuery(t,n,r){const i=po(t,n,r);return i.behavior=Py(),this.fetchQuery(i)}prefetchInfiniteQuery(t,n,r){return this.fetchInfiniteQuery(t,n,r).then(Ze).catch(Ze)}resumePausedMutations(){return this.mutationCache.resumePausedMutations()}getQueryCache(){return this.queryCache}getMutationCache(){return this.mutationCache}getLogger(){return this.logger}getDefaultOptions(){return this.defaultOptions}setDefaultOptions(t){this.defaultOptions=t}setQueryDefaults(t,n){const r=this.queryDefaults.find(i=>Nn(t)===Nn(i.queryKey));r?r.defaultOptions=n:this.queryDefaults.push({queryKey:t,defaultOptions:n})}getQueryDefaults(t){if(!t)return;const n=this.queryDefaults.find(r=>$o(t,r.queryKey));return n==null?void 0:n.defaultOptions}setMutationDefaults(t,n){const r=this.mutationDefaults.find(i=>Nn(t)===Nn(i.mutationKey));r?r.defaultOptions=n:this.mutationDefaults.push({mutationKey:t,defaultOptions:n})}getMutationDefaults(t){if(!t)return;const n=this.mutationDefaults.find(r=>$o(t,r.mutationKey));return n==null?void 0:n.defaultOptions}defaultQueryOptions(t){if(t!=null&&t._defaulted)return t;const n={...this.defaultOptions.queries,...this.getQueryDefaults(t==null?void 0:t.queryKey),...t,_defaulted:!0};return!n.queryHash&&n.queryKey&&(n.queryHash=wu(n.queryKey,n)),typeof n.refetchOnReconnect>"u"&&(n.refetchOnReconnect=n.networkMode!=="always"),typeof n.useErrorBoundary>"u"&&(n.useErrorBoundary=!!n.suspense),n}defaultMutationOptions(t){return t!=null&&t._defaulted?t:{...this.defaultOptions.mutations,...this.getMutationDefaults(t==null?void 0:t.mutationKey),...t,_defaulted:!0}}clear(){this.queryCache.clear(),this.mutationCache.clear()}}class _y extends bi{constructor(t,n){super(),this.client=t,this.options=n,this.trackedProps=new Set,this.selectError=null,this.bindMethods(),this.setOptions(n)}bindMethods(){this.remove=this.remove.bind(this),this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.length===1&&(this.currentQuery.addObserver(this),yf(this.currentQuery,this.options)&&this.executeFetch(),this.updateTimers())}onUnsubscribe(){this.listeners.length||this.destroy()}shouldFetchOnReconnect(){return al(this.currentQuery,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return al(this.currentQuery,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=[],this.clearStaleTimeout(),this.clearRefetchInterval(),this.currentQuery.removeObserver(this)}setOptions(t,n){const r=this.options,i=this.currentQuery;if(this.options=this.client.defaultQueryOptions(t),pf(r,this.options)||this.client.getQueryCache().notify({type:"observerOptionsUpdated",query:this.currentQuery,observer:this}),typeof this.options.enabled<"u"&&typeof this.options.enabled!="boolean")throw new Error("Expected enabled to be a boolean");this.options.queryKey||(this.options.queryKey=r.queryKey),this.updateQuery();const o=this.hasListeners();o&&Sf(this.currentQuery,i,this.options,r)&&this.executeFetch(),this.updateResult(n),o&&(this.currentQuery!==i||this.options.enabled!==r.enabled||this.options.staleTime!==r.staleTime)&&this.updateStaleTimeout();const s=this.computeRefetchInterval();o&&(this.currentQuery!==i||this.options.enabled!==r.enabled||s!==this.currentRefetchInterval)&&this.updateRefetchInterval(s)}getOptimisticResult(t){const n=this.client.getQueryCache().build(this.client,t);return this.createResult(n,t)}getCurrentResult(){return this.currentResult}trackResult(t){const n={};return Object.keys(t).forEach(r=>{Object.defineProperty(n,r,{configurable:!1,enumerable:!0,get:()=>(this.trackedProps.add(r),t[r])})}),n}getCurrentQuery(){return this.currentQuery}remove(){this.client.getQueryCache().remove(this.currentQuery)}refetch({refetchPage:t,...n}={}){return this.fetch({...n,meta:{refetchPage:t}})}fetchOptimistic(t){const n=this.client.defaultQueryOptions(t),r=this.client.getQueryCache().build(this.client,n);return r.isFetchingOptimistic=!0,r.fetch().then(()=>this.createResult(r,n))}fetch(t){var n;return this.executeFetch({...t,cancelRefetch:(n=t.cancelRefetch)!=null?n:!0}).then(()=>(this.updateResult(),this.currentResult))}executeFetch(t){this.updateQuery();let n=this.currentQuery.fetch(this.options,t);return t!=null&&t.throwOnError||(n=n.catch(Ze)),n}updateStaleTimeout(){if(this.clearStaleTimeout(),yi||this.currentResult.isStale||!il(this.options.staleTime))return;const n=Ih(this.currentResult.dataUpdatedAt,this.options.staleTime)+1;this.staleTimeoutId=setTimeout(()=>{this.currentResult.isStale||this.updateResult()},n)}computeRefetchInterval(){var t;return typeof this.options.refetchInterval=="function"?this.options.refetchInterval(this.currentResult.data,this.currentQuery):(t=this.options.refetchInterval)!=null?t:!1}updateRefetchInterval(t){this.clearRefetchInterval(),this.currentRefetchInterval=t,!(yi||this.options.enabled===!1||!il(this.currentRefetchInterval)||this.currentRefetchInterval===0)&&(this.refetchIntervalId=setInterval(()=>{(this.options.refetchIntervalInBackground||Uo.isFocused())&&this.executeFetch()},this.currentRefetchInterval))}updateTimers(){this.updateStaleTimeout(),this.updateRefetchInterval(this.computeRefetchInterval())}clearStaleTimeout(){this.staleTimeoutId&&(clearTimeout(this.staleTimeoutId),this.staleTimeoutId=void 0)}clearRefetchInterval(){this.refetchIntervalId&&(clearInterval(this.refetchIntervalId),this.refetchIntervalId=void 0)}createResult(t,n){const r=this.currentQuery,i=this.options,o=this.currentResult,s=this.currentResultState,a=this.currentResultOptions,l=t!==r,u=l?t.state:this.currentQueryInitialState,c=l?this.currentResult:this.previousQueryResult,{state:f}=t;let{dataUpdatedAt:d,error:p,errorUpdatedAt:g,fetchStatus:y,status:x}=f,v=!1,h=!1,m;if(n._optimisticResults){const O=this.hasListeners(),C=!O&&yf(t,n),b=O&&Sf(t,r,n,i);(C||b)&&(y=vs(t.options.networkMode)?"fetching":"paused",d||(x="loading")),n._optimisticResults==="isRestoring"&&(y="idle")}if(n.keepPreviousData&&!f.dataUpdateCount&&c!=null&&c.isSuccess&&x!=="error")m=c.data,d=c.dataUpdatedAt,x=c.status,v=!0;else if(n.select&&typeof f.data<"u")if(o&&f.data===(s==null?void 0:s.data)&&n.select===this.selectFn)m=this.selectResult;else try{this.selectFn=n.select,m=n.select(f.data),m=sl(o==null?void 0:o.data,m,n),this.selectResult=m,this.selectError=null}catch(O){this.selectError=O}else m=f.data;if(typeof n.placeholderData<"u"&&typeof m>"u"&&x==="loading"){let O;if(o!=null&&o.isPlaceholderData&&n.placeholderData===(a==null?void 0:a.placeholderData))O=o.data;else if(O=typeof n.placeholderData=="function"?n.placeholderData():n.placeholderData,n.select&&typeof O<"u")try{O=n.select(O),O=sl(o==null?void 0:o.data,O,n),this.selectError=null}catch(C){this.selectError=C}typeof O<"u"&&(x="success",m=O,h=!0)}this.selectError&&(p=this.selectError,m=this.selectResult,g=Date.now(),x="error");const S=y==="fetching";return{status:x,fetchStatus:y,isLoading:x==="loading",isSuccess:x==="success",isError:x==="error",data:m,dataUpdatedAt:d,error:p,errorUpdatedAt:g,failureCount:f.fetchFailureCount,errorUpdateCount:f.errorUpdateCount,isFetched:f.dataUpdateCount>0||f.errorUpdateCount>0,isFetchedAfterMount:f.dataUpdateCount>u.dataUpdateCount||f.errorUpdateCount>u.errorUpdateCount,isFetching:S,isRefetching:S&&x!=="loading",isLoadingError:x==="error"&&f.dataUpdatedAt===0,isPaused:y==="paused",isPlaceholderData:h,isPreviousData:v,isRefetchError:x==="error"&&f.dataUpdatedAt!==0,isStale:Pu(t,n),refetch:this.refetch,remove:this.remove}}updateResult(t){const n=this.currentResult,r=this.createResult(this.currentQuery,this.options);if(this.currentResultState=this.currentQuery.state,this.currentResultOptions=this.options,pf(r,n))return;this.currentResult=r;const i={cache:!0},o=()=>{if(!n)return!0;const{notifyOnChangeProps:s}=this.options;if(s==="all"||!s&&!this.trackedProps.size)return!0;const a=new Set(s!=null?s:this.trackedProps);return this.options.useErrorBoundary&&a.add("error"),Object.keys(this.currentResult).some(l=>{const u=l;return this.currentResult[u]!==n[u]&&a.has(u)})};(t==null?void 0:t.listeners)!==!1&&o()&&(i.listeners=!0),this.notify({...i,...t})}updateQuery(){const t=this.client.getQueryCache().build(this.client,this.options);if(t===this.currentQuery)return;const n=this.currentQuery;this.currentQuery=t,this.currentQueryInitialState=t.state,this.previousQueryResult=this.currentResult,this.hasListeners()&&(n==null||n.removeObserver(this),t.addObserver(this))}onQueryUpdate(t){const n={};t.type==="success"?n.onSuccess=!t.manual:t.type==="error"&&!ho(t.error)&&(n.onError=!0),this.updateResult(n),this.hasListeners()&&this.updateTimers()}notify(t){ae.batch(()=>{if(t.onSuccess){var n,r,i,o;(n=(r=this.options).onSuccess)==null||n.call(r,this.currentResult.data),(i=(o=this.options).onSettled)==null||i.call(o,this.currentResult.data,null)}else if(t.onError){var s,a,l,u;(s=(a=this.options).onError)==null||s.call(a,this.currentResult.error),(l=(u=this.options).onSettled)==null||l.call(u,void 0,this.currentResult.error)}t.listeners&&this.listeners.forEach(c=>{c(this.currentResult)}),t.cache&&this.client.getQueryCache().notify({query:this.currentQuery,type:"observerResultsUpdated"})})}}function Ey(e,t){return t.enabled!==!1&&!e.state.dataUpdatedAt&&!(e.state.status==="error"&&t.retryOnMount===!1)}function yf(e,t){return Ey(e,t)||e.state.dataUpdatedAt>0&&al(e,t,t.refetchOnMount)}function al(e,t,n){if(t.enabled!==!1){const r=typeof n=="function"?n(e):n;return r==="always"||r!==!1&&Pu(e,t)}return!1}function Sf(e,t,n,r){return n.enabled!==!1&&(e!==t||r.enabled===!1)&&(!n.suspense||e.state.status!=="error")&&Pu(e,n)}function Pu(e,t){return e.isStaleByTime(t.staleTime)}const wf=P.exports.createContext(void 0),$h=P.exports.createContext(!1);function Uh(e,t){return e||(t&&typeof window<"u"?(window.ReactQueryClientContext||(window.ReactQueryClientContext=wf),window.ReactQueryClientContext):wf)}const zh=({context:e}={})=>{const t=P.exports.useContext(Uh(e,P.exports.useContext($h)));if(!t)throw new Error("No QueryClient set, use QueryClientProvider to set one");return t},Cy=({client:e,children:t,context:n,contextSharing:r=!1})=>{P.exports.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]);const i=Uh(n,r);return w($h.Provider,{value:!n&&r,children:w(i.Provider,{value:e,children:t})})},Bh=P.exports.createContext(!1),by=()=>P.exports.useContext(Bh);Bh.Provider;function Ry(){let e=!1;return{clearReset:()=>{e=!1},reset:()=>{e=!0},isReset:()=>e}}const Ny=P.exports.createContext(Ry()),Ty=()=>P.exports.useContext(Ny);function Iy(e,t){return typeof e=="function"?e(...t):!!e}function Ly(e,t){const n=zh({context:e.context}),r=by(),i=Ty(),o=n.defaultQueryOptions(e);o._optimisticResults=r?"isRestoring":"optimistic",o.onError&&(o.onError=ae.batchCalls(o.onError)),o.onSuccess&&(o.onSuccess=ae.batchCalls(o.onSuccess)),o.onSettled&&(o.onSettled=ae.batchCalls(o.onSettled)),o.suspense&&typeof o.staleTime!="number"&&(o.staleTime=1e3),(o.suspense||o.useErrorBoundary)&&(i.isReset()||(o.retryOnMount=!1));const[s]=P.exports.useState(()=>new t(n,o)),a=s.getOptimisticResult(o);if(Su.exports.useSyncExternalStore(P.exports.useCallback(l=>r?()=>{}:s.subscribe(ae.batchCalls(l)),[s,r]),()=>s.getCurrentResult(),()=>s.getCurrentResult()),P.exports.useEffect(()=>{i.clearReset()},[i]),P.exports.useEffect(()=>{s.setOptions(o,{listeners:!1})},[o,s]),o.suspense&&a.isLoading&&a.isFetching&&!r)throw s.fetchOptimistic(o).then(({data:l})=>{o.onSuccess==null||o.onSuccess(l),o.onSettled==null||o.onSettled(l,null)}).catch(l=>{i.clearReset(),o.onError==null||o.onError(l),o.onSettled==null||o.onSettled(void 0,l)});if(a.isError&&!i.isReset()&&!a.isFetching&&Iy(o.useErrorBoundary,[a.error,s.getCurrentQuery()]))throw a.error;return o.notifyOnChangeProps?a:s.trackResult(a)}function wr(e,t,n){const r=po(e,t,n);return Ly(r,_y)}/**
+ * react-query-devtools-noop
+ *
+ * Copyright (c) TanStack
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE.md file in the root directory of this source tree.
+ *
+ * @license MIT
+ */function Dy(){return null}function rt(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:ku(e)?2:Ou(e)?3:0}function ll(e,t){return Nr(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function Fy(e,t){return Nr(e)===2?e.get(t):e[t]}function Qh(e,t,n){var r=Nr(e);r===2?e.set(t,n):r===3?(e.delete(t),e.add(n)):e[t]=n}function My(e,t){return e===t?e!==0||1/e==1/t:e!=e&&t!=t}function ku(e){return By&&e instanceof Map}function Ou(e){return Qy&&e instanceof Set}function fe(e){return e.o||e.t}function _u(e){if(Array.isArray(e))return Array.prototype.slice.call(e);var t=Vy(e);delete t[Q];for(var n=Ru(t),r=0;r1&&(e.set=e.add=e.clear=e.delete=jy),Object.freeze(e),t&&Pr(e,function(n,r){return Eu(r,!0)},!0)),e}function jy(){rt(2)}function Cu(e){return e==null||typeof e!="object"||Object.isFrozen(e)}function Nt(e){var t=cl[e];return t||rt(18,e),t}function Ay(e,t){cl[e]||(cl[e]=t)}function Bo(){return wi}function Zs(e,t){t&&(Nt("Patches"),e.u=[],e.s=[],e.v=t)}function Qo(e){ul(e),e.p.forEach($y),e.p=null}function ul(e){e===wi&&(wi=e.l)}function xf(e){return wi={p:[],l:wi,h:e,m:!0,_:0}}function $y(e){var t=e[Q];t.i===0||t.i===1?t.j():t.O=!0}function ea(e,t){t._=t.p.length;var n=t.p[0],r=e!==void 0&&e!==n;return t.h.g||Nt("ES5").S(t,e,r),r?(n[Q].P&&(Qo(t),rt(4)),Kt(e)&&(e=Ho(t,e),t.l||Vo(t,e)),t.u&&Nt("Patches").M(n[Q].t,e,t.u,t.s)):e=Ho(t,n,[]),Qo(t),t.u&&t.v(t.u,t.s),e!==Hh?e:void 0}function Ho(e,t,n){if(Cu(t))return t;var r=t[Q];if(!r)return Pr(t,function(o,s){return Pf(e,r,t,o,s,n)},!0),t;if(r.A!==e)return t;if(!r.P)return Vo(e,r.t,!0),r.t;if(!r.I){r.I=!0,r.A._--;var i=r.i===4||r.i===5?r.o=_u(r.k):r.o;Pr(r.i===3?new Set(i):i,function(o,s){return Pf(e,r,i,o,s,n)}),Vo(e,i,!1),n&&e.u&&Nt("Patches").R(r,n,e.u,e.s)}return r.o}function Pf(e,t,n,r,i,o){if(xr(i)){var s=Ho(e,i,o&&t&&t.i!==3&&!ll(t.D,r)?o.concat(r):void 0);if(Qh(n,r,s),!xr(s))return;e.m=!1}if(Kt(i)&&!Cu(i)){if(!e.h.F&&e._<1)return;Ho(e,i),t&&t.A.l||Vo(e,i)}}function Vo(e,t,n){n===void 0&&(n=!1),e.h.F&&e.m&&Eu(t,n)}function ta(e,t){var n=e[Q];return(n?fe(n):e)[t]}function kf(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 $t(e){e.P||(e.P=!0,e.l&&$t(e.l))}function na(e){e.o||(e.o=_u(e.t))}function Si(e,t,n){var r=ku(t)?Nt("MapSet").N(t,n):Ou(t)?Nt("MapSet").T(t,n):e.g?function(i,o){var s=Array.isArray(i),a={i:s?1:0,A:o?o.A:Bo(),P:!1,I:!1,D:{},l:o,t:i,k:null,o:null,j:null,C:!1},l=a,u=fl;s&&(l=[a],u=Hr);var c=Proxy.revocable(l,u),f=c.revoke,d=c.proxy;return a.k=d,a.j=f,d}(t,n):Nt("ES5").J(t,n);return(n?n.A:Bo()).p.push(r),r}function Uy(e){return xr(e)||rt(22,e),function t(n){if(!Kt(n))return n;var r,i=n[Q],o=Nr(n);if(i){if(!i.P&&(i.i<4||!Nt("ES5").K(i)))return i.t;i.I=!0,r=Of(n,o),i.I=!1}else r=Of(n,o);return Pr(r,function(s,a){i&&Fy(i.t,s)===a||Qh(r,s,t(a))}),o===3?new Set(r):r}(e)}function Of(e,t){switch(t){case 2:return new Map(e);case 3:return Array.from(e)}return _u(e)}function zy(){function e(a,l){function u(){this.constructor=a}i(a,l),a.prototype=(u.prototype=l.prototype,new u)}function t(a){a.o||(a.D=new Map,a.o=new Map(a.t))}function n(a){a.o||(a.o=new Set,a.t.forEach(function(l){if(Kt(l)){var u=Si(a.A.h,l,a);a.p.set(l,u),a.o.add(u)}else a.o.add(l)}))}function r(a){a.O&&rt(3,JSON.stringify(fe(a)))}var i=function(a,l){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(u,c){u.__proto__=c}||function(u,c){for(var f in c)c.hasOwnProperty(f)&&(u[f]=c[f])})(a,l)},o=function(){function a(u,c){return this[Q]={i:2,l:c,A:c?c.A:Bo(),P:!1,I:!1,o:void 0,D:void 0,t:u,k:this,C:!1,O:!1},this}e(a,Map);var l=a.prototype;return Object.defineProperty(l,"size",{get:function(){return fe(this[Q]).size}}),l.has=function(u){return fe(this[Q]).has(u)},l.set=function(u,c){var f=this[Q];return r(f),fe(f).has(u)&&fe(f).get(u)===c||(t(f),$t(f),f.D.set(u,!0),f.o.set(u,c),f.D.set(u,!0)),this},l.delete=function(u){if(!this.has(u))return!1;var c=this[Q];return r(c),t(c),$t(c),c.t.has(u)?c.D.set(u,!1):c.D.delete(u),c.o.delete(u),!0},l.clear=function(){var u=this[Q];r(u),fe(u).size&&(t(u),$t(u),u.D=new Map,Pr(u.t,function(c){u.D.set(c,!1)}),u.o.clear())},l.forEach=function(u,c){var f=this;fe(this[Q]).forEach(function(d,p){u.call(c,f.get(p),p,f)})},l.get=function(u){var c=this[Q];r(c);var f=fe(c).get(u);if(c.I||!Kt(f)||f!==c.t.get(u))return f;var d=Si(c.A.h,f,c);return t(c),c.o.set(u,d),d},l.keys=function(){return fe(this[Q]).keys()},l.values=function(){var u,c=this,f=this.keys();return(u={})[Gi]=function(){return c.values()},u.next=function(){var d=f.next();return d.done?d:{done:!1,value:c.get(d.value)}},u},l.entries=function(){var u,c=this,f=this.keys();return(u={})[Gi]=function(){return c.entries()},u.next=function(){var d=f.next();if(d.done)return d;var p=c.get(d.value);return{done:!1,value:[d.value,p]}},u},l[Gi]=function(){return this.entries()},a}(),s=function(){function a(u,c){return this[Q]={i:3,l:c,A:c?c.A:Bo(),P:!1,I:!1,o:void 0,t:u,k:this,p:new Map,O:!1,C:!1},this}e(a,Set);var l=a.prototype;return Object.defineProperty(l,"size",{get:function(){return fe(this[Q]).size}}),l.has=function(u){var c=this[Q];return r(c),c.o?!!c.o.has(u)||!(!c.p.has(u)||!c.o.has(c.p.get(u))):c.t.has(u)},l.add=function(u){var c=this[Q];return r(c),this.has(u)||(n(c),$t(c),c.o.add(u)),this},l.delete=function(u){if(!this.has(u))return!1;var c=this[Q];return r(c),n(c),$t(c),c.o.delete(u)||!!c.p.has(u)&&c.o.delete(c.p.get(u))},l.clear=function(){var u=this[Q];r(u),fe(u).size&&(n(u),$t(u),u.o.clear())},l.values=function(){var u=this[Q];return r(u),n(u),u.o.values()},l.entries=function(){var u=this[Q];return r(u),n(u),u.o.entries()},l.keys=function(){return this.values()},l[Gi]=function(){return this.values()},l.forEach=function(u,c){for(var f=this.values(),d=f.next();!d.done;)u.call(c,d.value,d.value,this),d=f.next()},a}();Ay("MapSet",{N:function(a,l){return new o(a,l)},T:function(a,l){return new s(a,l)}})}var _f,wi,bu=typeof Symbol<"u"&&typeof Symbol("x")=="symbol",By=typeof Map<"u",Qy=typeof Set<"u",Ef=typeof Proxy<"u"&&Proxy.revocable!==void 0&&typeof Reflect<"u",Hh=bu?Symbol.for("immer-nothing"):((_f={})["immer-nothing"]=!0,_f),Cf=bu?Symbol.for("immer-draftable"):"__$immer_draftable",Q=bu?Symbol.for("immer-state"):"__$immer_state",Gi=typeof Symbol<"u"&&Symbol.iterator||"@@iterator",Hy=""+Object.prototype.constructor,Ru=typeof Reflect<"u"&&Reflect.ownKeys?Reflect.ownKeys:Object.getOwnPropertySymbols!==void 0?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Object.getOwnPropertyNames,Vy=Object.getOwnPropertyDescriptors||function(e){var t={};return Ru(e).forEach(function(n){t[n]=Object.getOwnPropertyDescriptor(e,n)}),t},cl={},fl={get:function(e,t){if(t===Q)return e;var n=fe(e);if(!ll(n,t))return function(i,o,s){var a,l=kf(o,s);return l?"value"in l?l.value:(a=l.get)===null||a===void 0?void 0:a.call(i.k):void 0}(e,n,t);var r=n[t];return e.I||!Kt(r)?r:r===ta(e.t,t)?(na(e),e.o[t]=Si(e.A.h,r,e)):r},has:function(e,t){return t in fe(e)},ownKeys:function(e){return Reflect.ownKeys(fe(e))},set:function(e,t,n){var r=kf(fe(e),t);if(r!=null&&r.set)return r.set.call(e.k,n),!0;if(!e.P){var i=ta(fe(e),t),o=i==null?void 0:i[Q];if(o&&o.t===n)return e.o[t]=n,e.D[t]=!1,!0;if(My(n,i)&&(n!==void 0||ll(e.t,t)))return!0;na(e),$t(e)}return e.o[t]===n&&typeof n!="number"&&(n!==void 0||t in e.o)||(e.o[t]=n,e.D[t]=!0,!0)},deleteProperty:function(e,t){return ta(e.t,t)!==void 0||t in e.t?(e.D[t]=!1,na(e),$t(e)):delete e.D[t],e.o&&delete e.o[t],!0},getOwnPropertyDescriptor:function(e,t){var n=fe(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{writable:!0,configurable:e.i!==1||t!=="length",enumerable:r.enumerable,value:n[t]}},defineProperty:function(){rt(11)},getPrototypeOf:function(e){return Object.getPrototypeOf(e.t)},setPrototypeOf:function(){rt(12)}},Hr={};Pr(fl,function(e,t){Hr[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}}),Hr.deleteProperty=function(e,t){return Hr.set.call(this,e,t,void 0)},Hr.set=function(e,t,n){return fl.set.call(this,e[0],t,n,e[0])};var qy=function(){function e(n){var r=this;this.g=Ef,this.F=!0,this.produce=function(i,o,s){if(typeof i=="function"&&typeof o!="function"){var a=o;o=i;var l=r;return function(y){var x=this;y===void 0&&(y=a);for(var v=arguments.length,h=Array(v>1?v-1:0),m=1;m1?c-1:0),d=1;d=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=Nt("Patches").$;return xr(n)?s(n,r):this.produce(n,function(a){return s(a,r)})},e}(),Ge=new qy,A=Ge.produce;Ge.produceWithPatches.bind(Ge);Ge.setAutoFreeze.bind(Ge);Ge.setUseProxies.bind(Ge);Ge.applyPatches.bind(Ge);Ge.createDraft.bind(Ge);Ge.finishDraft.bind(Ge);function kr(){return kr=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0&&(t.hash=e.substr(n),e=e.substr(0,n));var r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}/**
+ * react-location
+ *
+ * Copyright (c) TanStack
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE.md file in the root directory of this source tree.
+ *
+ * @license MIT
+ */function mt(){return mt=Object.assign||function(e){for(var t=1;t=0)&&(n[i]=e[i]);return n}function Yy(e,t){var n,r,i,o="";for(n in e)if((i=e[n])!==void 0)if(Array.isArray(i))for(r=0;rGh?Wy():Gy();class Nu{constructor(){this.listeners=[]}subscribe(t){return this.listeners.push(t),()=>{this.listeners=this.listeners.filter(n=>n!==t)}}notify(){this.listeners.forEach(t=>t())}}class n0 extends Nu{constructor(t){var n,r;super(),this.isTransitioning=!1,this.history=(t==null?void 0:t.history)||t0(),this.stringifySearch=(n=t==null?void 0:t.stringifySearch)!=null?n:g0,this.parseSearch=(r=t==null?void 0:t.parseSearch)!=null?r:h0,this.current=this.parseLocation(this.history.location),this.destroy=this.history.listen(i=>{this.current=this.parseLocation(i.location,this.current),this.notify()})}buildNext(t,n){var r,i,o,s;t===void 0&&(t="/"),n===void 0&&(n={});const a=mt({},this.current,n.from),l=p0(t,a.pathname,""+((r=n.to)!=null?r:".")),u=(i=n.__searchFilters)!=null&&i.length?n.__searchFilters.reduce((g,y)=>y(g),a.search):a.search,c=n.search===!0?u:n.search?(o=Df(n.search,u))!=null?o:{}:(s=n.__searchFilters)!=null&&s.length?u:{},f=ml(a.search,c),d=this.stringifySearch(f);let p=n.hash===!0?a.hash:Df(n.hash,a.hash);return p=p?"#"+p:"",{pathname:l,search:f,searchStr:d,hash:p,href:""+l+d+p,key:n.key}}navigate(t,n){this.current=t,this.navigateTimeout&&clearTimeout(this.navigateTimeout);let r="replace";return n||(r="push"),this.parseLocation(this.history.location).href===this.current.href&&!this.current.key&&(r="replace"),r==="replace"?this.history.replace({pathname:this.current.pathname,hash:this.current.hash,search:this.current.searchStr}):this.history.push({pathname:this.current.pathname,hash:this.current.hash,search:this.current.searchStr})}parseLocation(t,n){var r;const i=this.parseSearch(t.search);return{pathname:t.pathname,searchStr:t.search,search:ml(n==null?void 0:n.search,i),hash:(r=t.hash.split("#").reverse()[0])!=null?r:"",href:""+t.pathname+t.search+t.hash,key:t.key}}}function Yh(e){return w(Kh.Provider,{...e})}function r0(e){let{children:t,location:n,__experimental__snapshot:r}=e,i=hl(e,Xy);const o=P.exports.useRef(null);o.current||(o.current=new o0({location:n,__experimental__snapshot:r,routes:i.routes}));const s=o.current,[a,l]=P.exports.useReducer(()=>({}),{});return s.update(i),gl(()=>s.subscribe(()=>{l()}),[]),gl(()=>s.updateLocation(n.current).unsubscribe,[n.current.key]),P.exports.createElement(qh.Provider,{value:{location:n}},P.exports.createElement(Wh.Provider,{value:{router:s}},w(i0,{}),w(Yh,{value:[s.rootMatch,...s.state.matches],children:t!=null?t:w(ng,{})})))}function i0(){const e=Tu(),t=tg(),n=l0();return gl(()=>{t({to:".",search:!0,hash:!0}).href!==e.current.href&&n({to:".",search:!0,hash:!0,fromCurrent:!0,replace:!0})},[]),null}class o0 extends Nu{constructor(t){var n;let{location:r,__experimental__snapshot:i}=t,o=hl(t,Zy);super(),this.routesById={},this.update=a=>{let{basepath:l,routes:u}=a,c=hl(a,e0);Object.assign(this,c),this.basepath=ys("/"+(l!=null?l:"")),this.routesById={};const f=(d,p)=>d.map(g=>{var y,x,v,h;const m=(y=g.path)!=null?y:"*",S=Or([(p==null?void 0:p.id)==="root"?"":p==null?void 0:p.id,""+(m==null?void 0:m.replace(/(.)\/$/,"$1"))+(g.id?"-"+g.id:"")]);if(g=mt({},g,{pendingMs:(x=g.pendingMs)!=null?x:c==null?void 0:c.defaultPendingMs,pendingMinMs:(v=g.pendingMinMs)!=null?v:c==null?void 0:c.defaultPendingMinMs,id:S}),this.routesById[S])throw new Error;return this.routesById[S]=g,g.children=(h=g.children)!=null&&h.length?f(g.children,g):void 0,g});this.routes=f(u),this.rootMatch={id:"root",params:{},search:{},pathname:this.basepath,route:null,ownData:{},data:{},isLoading:!1,status:"resolved"}},this.setState=a=>{const l=a({state:this.state,pending:this.pending});this.state=l.state,this.pending=l.pending,this.cleanMatchCache(),this.notify()},this.matchCache={},this.cleanMatchCache=()=>{var a,l,u;const c=[...(a=this==null?void 0:this.state.matches)!=null?a:[],...(l=this==null||(u=this.pending)==null?void 0:u.matches)!=null?l:[]].map(f=>f.id);Object.values(this.matchCache).forEach(f=>{var d;if(!f.updatedAt||c.includes(f.id))return;const p=Date.now()-((d=f.updatedAt)!=null?d:0);(!f.maxAge||p>f.maxAge)&&(f.route.unloader&&f.route.unloader(f),delete this.matchCache[f.id])})},this.updateLocation=a=>{let l;return{promise:new Promise(c=>{const f=new If(this,a);this.setState(d=>mt({},d,{pending:{location:f.location,matches:f.matches}})),l=f.subscribe(()=>{const d=this.state.matches;d.filter(p=>!f.matches.find(g=>g.id===p.id)).forEach(p=>{p.onExit==null||p.onExit(p)}),d.filter(p=>f.matches.find(g=>g.id===p.id)).forEach(p=>{p.route.onTransition==null||p.route.onTransition(p)}),f.matches.filter(p=>!d.find(g=>g.id===p.id)).forEach(p=>{p.onExit=p.route.onMatch==null?void 0:p.route.onMatch(p)}),this.setState(p=>mt({},p,{state:{location:f.location,matches:f.matches},pending:void 0})),c()}),f.loadData(),f.startPending()}),unsubscribe:l}},this.__experimental__createSnapshot=()=>({location:this.state.location,matches:this.state.matches.map(a=>{let{ownData:l,id:u}=a;return{id:u,ownData:l}})}),this.update(o);let s=[];if(i){const a=new If(this,r.current);a.matches.forEach((l,u)=>{var c,f,d;if(l.id!==((c=i.matches[u])==null?void 0:c.id)){var p;throw new Error("Router hydration mismatch: "+l.id+" !== "+((p=i.matches[u])==null?void 0:p.id))}l.ownData=(f=(d=i.matches[u])==null?void 0:d.ownData)!=null?f:{}}),Jh(a.matches),s=a.matches}this.state={location:(n=i==null?void 0:i.location)!=null?n:r.current,matches:s},r.subscribe(()=>this.notify())}}function Tu(){const e=P.exports.useContext(qh);return rg(!!e,"useLocation must be used within a "),e.location}class s0{constructor(t){this.status="loading",this.ownData={},this.data={},this.isLoading=!1,this.notify=n=>{var r;(r=this.matchLoader)==null||r.preNotify(n?this:void 0)},this.assignMatchLoader=n=>{this.matchLoader=n},this.startPending=()=>{this.pendingTimeout&&clearTimeout(this.pendingTimeout),this.route.pendingMs!==void 0&&(this.pendingTimeout=setTimeout(()=>{var n;this.status==="loading"&&(this.status="pending"),(n=this.notify)==null||n.call(this),typeof this.route.pendingMinMs<"u"&&(this.pendingMinPromise=new Promise(r=>setTimeout(r,this.route.pendingMinMs)))},this.route.pendingMs))},this.load=n=>{var r,i;if(this.maxAge=(r=(i=n.maxAge)!=null?i:this.route.loaderMaxAge)!=null?r:n.router.defaultLoaderMaxAge,this.loaderPromise)return;const o=this.route.import;this.loaderPromise=(o?(()=>(this.isLoading=!0,o({params:this.params,search:this.search}).then(s=>{this.route=mt({},this.route,s)})))():Promise.resolve()).then(()=>{const s=[];["element","errorElement","pendingElement"].forEach(c=>{const f=this.route[c];this[c]||(typeof f=="function"?(this.isLoading=!0,s.push(f(this).then(d=>{this[c]=d}))):this[c]=this.route[c])});const l=this.route.loader,u=l?new Promise(async c=>{this.isLoading=!0;const f=g=>{this.updatedAt=Date.now(),c(this.ownData),this.status=g},d=g=>{this.ownData=g,this.error=void 0,f("resolved")},p=g=>{console.error(g),this.error=g,f("rejected")};try{d(await l(this,{parentMatch:n.parentMatch,dispatch:async g=>{var y;g.type==="resolve"?d(g.data):g.type==="reject"?p(g.error):g.type==="loading"?this.isLoading=!0:g.type==="maxAge"&&(this.maxAge=g.maxAge),this.updatedAt=Date.now(),(y=this.notify)==null||y.call(this,!0)}}))}catch(g){p(g)}}):Promise.resolve();return Promise.all([...s,u]).then(()=>{this.status="resolved",this.isLoading=!1,this.startPending=void 0}).then(()=>this.pendingMinPromise).then(()=>{var c;this.pendingTimeout&&clearTimeout(this.pendingTimeout),(c=this.notify)==null||c.call(this,!0)})}).then(()=>this.ownData)},Object.assign(this,t)}}class If extends Nu{constructor(t,n){var r;super(),r=this,this.preNotifiedMatches=[],this.status="pending",this.preNotify=o=>{o&&(this.preNotifiedMatches.includes(o)||this.preNotifiedMatches.push(o)),(!o||this.preNotifiedMatches.length===this.matches.length)&&(this.status="resolved",Jh(this.matches),this.notify())},this.loadData=async function(o){var s;let{maxAge:a}=o===void 0?{}:o;if(r.router.cleanMatchCache(),!((s=r.matches)!=null&&s.length)){r.preNotify();return}return r.firstRenderPromises=[],r.matches.forEach((l,u)=>{var c,f;const d=(c=r.matches)==null?void 0:c[u-1];l.assignMatchLoader==null||l.assignMatchLoader(r),l.load==null||l.load({maxAge:a,parentMatch:d,router:r.router}),(f=r.firstRenderPromises)==null||f.push(l.loaderPromise)}),await Promise.all(r.firstRenderPromises).then(()=>(r.preNotify(),r.matches))},this.load=async function(o){let{maxAge:s}=o===void 0?{}:o;return await r.loadData({maxAge:s})},this.startPending=async()=>{this.matches.forEach(o=>o.startPending==null?void 0:o.startPending())},this.router=t,this.location=n,this.matches=[];const i=Zh(this.router,this.location);this.matches=i==null?void 0:i.map(o=>(this.router.matchCache[o.id]||(this.router.matchCache[o.id]=new s0(o)),this.router.matchCache[o.id]))}}function Jh(e){e==null||e.forEach((t,n)=>{var r;const i=e==null?void 0:e[n-1];t.data=mt({},(r=i==null?void 0:i.data)!=null?r:{},t.ownData)})}function Xh(){const e=P.exports.useContext(Wh);if(!e)throw rg(!0,"You are trying to use useRouter() outside of ReactLocation!"),new Error;return e.router}function Zh(e,t){if(!e.routes.length)return[];const n=[],r=async(i,o)=>{var s;let{pathname:a,params:l}=o;const c=(e!=null&&e.filterRoutes?e==null?void 0:e.filterRoutes(i):i).find(g=>{var y,x;const v=Or([a,g.path]),h=!!(g.path!=="/"||(y=g.children)!=null&&y.length),m=u0(t,{to:v,search:g.search,fuzzy:h,caseSensitive:(x=g.caseSensitive)!=null?x:e.caseSensitive});return m&&(l=mt({},l,m)),!!m});if(!c)return;const f=Lf(c.path,l);a=Or([a,f]);const p={id:Lf(c.id,l,!0),route:c,params:l,pathname:a,search:t.search};n.push(p),(s=c.children)!=null&&s.length&&r(c.children,p)};return r(e.routes,e.rootMatch),n}function Lf(e,t,n){const r=xi(e);return Or(r.map(i=>{if(i.value==="*"&&!n)return"";if(i.type==="param"){var o;return(o=t[i.value.substring(1)])!=null?o:""}return i.value}))}function eg(){return P.exports.useContext(Kh)}function a0(){var e;return(e=eg())==null?void 0:e[0]}function l0(){const e=Tu(),t=a0(),n=tg();function r(i){var o;let{search:s,hash:a,replace:l,from:u,to:c,fromCurrent:f}=i;f=(o=f)!=null?o:typeof c>"u";const d=n({to:c,search:s,hash:a,from:f?e.current:u!=null?u:{pathname:t.pathname}});e.navigate(d,l)}return ig(r)}function tg(){const e=Tu(),t=Xh();return ig(r=>{const i=e.buildNext(t.basepath,r),s=Zh(t,i).map(a=>{var l;return(l=a.route.searchFilters)!=null?l:[]}).flat().filter(Boolean);return e.buildNext(t.basepath,mt({},r,{__searchFilters:s}))})}function ng(){var e;const t=Xh(),[n,...r]=eg(),i=r[0];if(!i)return null;const o=(e=i.errorElement)!=null?e:t.defaultErrorElement,s=(()=>{var a,l;if(i.status==="rejected"){if(o)return o;if(!t.useErrorBoundary)return"An unknown error occured!";throw i.error}const u=(a=i.pendingElement)!=null?a:t.defaultPendingElement;if(i.status==="loading")return null;if(i.status==="pending"&&(i.route.pendingMs||u))return u!=null?u:null;const c=(l=i.element)!=null?l:t.defaultElement;return c!=null?c:w(ng,{})})();return w(Yh,{value:r,children:s})}function u0(e,t){const n=f0(e,t),r=d0(e,t);if(!(t.to&&!n)&&!(t.search&&!r))return n!=null?n:{}}function rg(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function c0(e){return typeof e=="function"}function Df(e,t){return c0(e)?e(t):e}function Or(e){return ys(e.filter(Boolean).join("/"))}function ys(e){return(""+e).replace(/\/{2,}/g,"/")}function f0(e,t){var n;const r=xi(e.pathname),i=xi(""+((n=t.to)!=null?n:"*")),o={};return(()=>{for(let a=0;ad.value)),!0):!1;if(u.type==="pathname"){if(u.value==="/"&&!(l!=null&&l.value))return!0;if(l){if(t.caseSensitive){if(u.value!==l.value)return!1}else if(u.value.toLowerCase()!==l.value.toLowerCase())return!1}}if(!l)return!1;u.type==="param"&&(o[u.value.substring(1)]=l.value)}if(c&&!f)return!!t.fuzzy}return!0})()?o:void 0}function d0(e,t){return!!(t.search&&t.search(e.search))}function xi(e){if(!e)return[];e=ys(e);const t=[];if(e.slice(0,1)==="/"&&(e=e.substring(1),t.push({type:"pathname",value:"/"})),!e)return t;const n=e.split("/").filter(Boolean);return t.push(...n.map(r=>r.startsWith("*")?{type:"wildcard",value:r}:r.charAt(0)===":"?{type:"param",value:r}:{type:"pathname",value:r})),e.slice(-1)==="/"&&(e=e.substring(1),t.push({type:"pathname",value:"/"})),t}function p0(e,t,n){t=t.replace(new RegExp("^"+e),"/"),n=n.replace(new RegExp("^"+e),"/");let r=xi(t);const i=xi(n);i.forEach((s,a)=>{if(s.value==="/")a?a===i.length-1&&r.push(s):r=[s];else if(s.value==="..")r.pop();else{if(s.value===".")return;r.push(s)}});const o=Or([e,...r.map(s=>s.value)]);return ys(o)}function ig(e){const t=P.exports.useRef(),n=P.exports.useRef(e);return n.current=e,t.current||(t.current=function(){return n.current(...arguments)}),t.current}function ml(e,t){if(e===t)return e;const n=Array.isArray(e)&&Array.isArray(t);if(n||Ff(e)&&Ff(t)){const r=n?e.length:Object.keys(e).length,i=n?t:Object.keys(t),o=i.length,s=n?[]:{};let a=0;for(let l=0;l"u")return!0;const n=t.prototype;return!(!Mf(n)||!n.hasOwnProperty("isPrototypeOf"))}function Mf(e){return Object.prototype.toString.call(e)==="[object Object]"}const h0=m0(JSON.parse),g0=v0(JSON.stringify);function m0(e){return t=>{t.substring(0,1)==="?"&&(t=t.substring(1));let n=Jy(t);for(let r in n){const i=n[r];if(typeof i=="string")try{n[r]=e(i)}catch{}}return n}}function v0(e){return t=>{t=mt({},t),t&&Object.keys(t).forEach(r=>{const i=t[r];if(typeof i>"u"||i===void 0)delete t[r];else if(i&&typeof i=="object"&&i!==null)try{t[r]=e(i)}catch{}});const n=Yy(t).toString();return n?"?"+n:""}}var y0="_1qevocv0",S0="_1qevocv2",w0="_1qevocv3",x0="_1qevocv4",P0="_1qevocv1";const Lt="",k0=5e3,O0=async()=>{const e=`${Lt}/ping`;return await(await fetch(e)).json()},_0=async()=>await(await fetch(`${Lt}/modifiers.json`)).json(),E0=async()=>(await(await fetch(`${Lt}/output_dir`)).json())[0],vl="config",og=async()=>await(await fetch(`${Lt}/app_config`)).json(),C0="toggle_config",b0=async e=>await(await fetch(`${Lt}/app_config`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({update_branch:e})})).json(),R0=async e=>await fetch(`${Lt}/image`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),sg=async()=>await(await fetch(`${Lt}/image/stop`)).json(),N0=[["Drawing Style",["Cel Shading","Children's Drawing","Crosshatch","Detailed and Intricate","Doodle","Dot Art","Line Art","Sketch"]],["Visual Style",["2D","8-bit","16-bit","Anaglyph","Anime","CGI"]]],jf=e=>{let t;const n=new Set,r=(l,u)=>{const c=typeof l=="function"?l(t):l;if(c!==t){const f=t;t=(u!=null?u:typeof c!="object")?c:Object.assign({},t,c),n.forEach(d=>d(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},T0=e=>e?jf(e):jf;var ag={exports:{}},lg={};/**
+ * @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 Ss=P.exports,I0=Su.exports;function L0(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var D0=typeof Object.is=="function"?Object.is:L0,F0=I0.useSyncExternalStore,M0=Ss.useRef,j0=Ss.useEffect,A0=Ss.useMemo,$0=Ss.useDebugValue;lg.useSyncExternalStoreWithSelector=function(e,t,n,r,i){var o=M0(null);if(o.current===null){var s={hasValue:!1,value:null};o.current=s}else s=o.current;o=A0(function(){function l(p){if(!u){if(u=!0,c=p,p=r(p),i!==void 0&&s.hasValue){var g=s.value;if(i(g,p))return f=g}return f=p}if(g=f,D0(c,p))return g;var y=r(p);return i!==void 0&&i(g,y)?g:(c=p,f=y)}var u=!1,c,f,d=n===void 0?null:n;return[function(){return l(t())},d===null?void 0:function(){return l(d())}]},[t,n,r,i]);var a=F0(e,o[0],o[1]);return j0(function(){s.hasValue=!0,s.value=a},[a]),$0(a),a};(function(e){e.exports=lg})(ag);const U0=wd(ag.exports),{useSyncExternalStoreWithSelector:z0}=U0;function B0(e,t=e.getState,n){const r=z0(e.subscribe,e.getState,e.getServerState||e.getState,t,n);return P.exports.useDebugValue(r),r}const Af=e=>{const t=typeof e=="function"?T0(e):e,n=(r,i)=>B0(t,r,i);return Object.assign(n,t),n},Q0=e=>e?Af(e):Af;var Ri=Q0;const H0=(e,t={})=>(n,r,i)=>{const{enabled:o,anonymousActionType:s,...a}=t;let l;try{l=(o!=null?o:({BASE_URL:"/",MODE:"production",DEV:!1,PROD:!0}&&"production")!=="production")&&window.__REDUX_DEVTOOLS_EXTENSION__}catch{}if(!l)return({BASE_URL:"/",MODE:"production",DEV:!1,PROD:!0}&&"production")!=="production"&&o&&console.warn("[zustand devtools middleware] Please install/enable Redux devtools extension"),e(n,r,i);const u=l.connect(a);let c=!0;i.setState=(p,g,y)=>{const x=n(p,g);return c&&u.send(y===void 0?{type:s||"anonymous"}:typeof y=="string"?{type:y}:y,r()),x};const f=(...p)=>{const g=c;c=!1,n(...p),c=g},d=e(i.setState,r,i);if(u.init(d),i.dispatchFromDevtools&&typeof i.dispatch=="function"){let p=!1;const g=i.dispatch;i.dispatch=(...y)=>{({BASE_URL:"/",MODE:"production",DEV:!1,PROD:!0}&&"production")!=="production"&&y[0].type==="__setState"&&!p&&(console.warn('[zustand devtools middleware] "__setState" action type is reserved to set state from the devtools. Avoid using it.'),p=!0),g(...y)}}return u.subscribe(p=>{var g;switch(p.type){case"ACTION":if(typeof p.payload!="string"){console.error("[zustand devtools middleware] Unsupported action format");return}return ra(p.payload,y=>{if(y.type==="__setState"){f(y.state);return}!i.dispatchFromDevtools||typeof i.dispatch=="function"&&i.dispatch(y)});case"DISPATCH":switch(p.payload.type){case"RESET":return f(d),u.init(i.getState());case"COMMIT":return u.init(i.getState());case"ROLLBACK":return ra(p.state,y=>{f(y),u.init(i.getState())});case"JUMP_TO_STATE":case"JUMP_TO_ACTION":return ra(p.state,y=>{f(y)});case"IMPORT_STATE":{const{nextLiftedState:y}=p.payload,x=(g=y.computedStates.slice(-1)[0])==null?void 0:g.state;if(!x)return;f(x),u.send(null,y);return}case"PAUSE_RECORDING":return c=!c}return}}),d},V0=H0,ra=(e,t)=>{let n;try{n=JSON.parse(e)}catch(r){console.error("[zustand devtools middleware] Could not parse the received json",r)}n!==void 0&&t(n)},Wo=e=>t=>{try{const n=e(t);return n instanceof Promise?n:{then(r){return Wo(r)(n)},catch(r){return this}}}catch(n){return{then(r){return this},catch(r){return Wo(r)(n)}}}},q0=(e,t)=>(n,r,i)=>{let o={getStorage:()=>localStorage,serialize:JSON.stringify,deserialize:JSON.parse,partialize:x=>x,version:0,merge:(x,v)=>({...v,...x}),...t},s=!1;const a=new Set,l=new Set;let u;try{u=o.getStorage()}catch{}if(!u)return e((...x)=>{console.warn(`[zustand persist middleware] Unable to update item '${o.name}', the given storage is currently unavailable.`),n(...x)},r,i);const c=Wo(o.serialize),f=()=>{const x=o.partialize({...r()});let v;const h=c({state:x,version:o.version}).then(m=>u.setItem(o.name,m)).catch(m=>{v=m});if(v)throw v;return h},d=i.setState;i.setState=(x,v)=>{d(x,v),f()};const p=e((...x)=>{n(...x),f()},r,i);let g;const y=()=>{var x;if(!u)return;s=!1,a.forEach(h=>h(r()));const v=((x=o.onRehydrateStorage)==null?void 0:x.call(o,r()))||void 0;return Wo(u.getItem.bind(u))(o.name).then(h=>{if(h)return o.deserialize(h)}).then(h=>{if(h)if(typeof h.version=="number"&&h.version!==o.version){if(o.migrate)return o.migrate(h.state,h.version);console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}else return h.state}).then(h=>{var m;return g=o.merge(h,(m=r())!=null?m:p),n(g,!0),f()}).then(()=>{v==null||v(g,void 0),s=!0,l.forEach(h=>h(g))}).catch(h=>{v==null||v(void 0,h)})};return i.persist={setOptions:x=>{o={...o,...x},x.getStorage&&(u=x.getStorage())},clearStorage:()=>{u==null||u.removeItem(o.name)},getOptions:()=>o,rehydrate:()=>y(),hasHydrated:()=>s,onHydrate:x=>(a.add(x),()=>{a.delete(x)}),onFinishHydration:x=>(l.add(x),()=>{l.delete(x)})},y(),g||p},K0=q0;function Go(){return Math.floor(Math.random()*1e4)}const W0=["plms","ddim","heun","euler","euler_a","dpm2","dpm2_a","lms"],D=Ri(V0((e,t)=>({parallelCount:1,requestOptions:{session_id:new Date().getTime().toString(),prompt:"a photograph of an astronaut riding a horse",negative_prompt:"",seed:Go(),num_outputs:1,num_inference_steps:50,guidance_scale:7.5,width:512,height:512,prompt_strength:.8,turbo:!0,use_cpu:!1,use_full_precision:!0,save_to_disk_path:"null",use_face_correction:"GFPGANv1.3",use_upscale:"RealESRGAN_x4plus",show_only_filtered_image:!0,init_image:void 0,sampler:"plms",stream_progress_updates:!0,stream_image_progress:!1,mask:void 0},createTags:[],tagMap:{},uiOptions:{isUseRandomSeed:!0,isUseAutoSave:!1,isSoundEnabled:!1},allModifiers:[],isInpainting:!1,setParallelCount:n=>e(A(r=>{r.parallelCount=n})),setRequestOptions:(n,r)=>{e(A(i=>{i.requestOptions[n]=r}))},getValueForRequestKey:n=>t().requestOptions[n],setAllModifiers:n=>{e(A(r=>{r.allModifiers=n}))},toggleTag:(n,r)=>{e(A(i=>{Object.keys(i.tagMap).includes(n)?i.tagMap[n].includes(r)?i.tagMap[n]=i.tagMap[n].filter(o=>o!==r):i.tagMap[n].push(r):i.tagMap[n]=[r]}))},hasTag:(n,r)=>{var i;return(i=t().tagMap[n])==null?void 0:i.includes(r)},selectedTags:()=>{const n=t().allModifiers,r=t().tagMap;let i=[];for(const[o,s]of Object.entries(r)){const a=n.find(l=>l.category===o);if(a)for(const l of s){const u=a.modifiers.find(c=>c.modifier===l);u&&(i=i.concat({...u,category:a.category}))}}return i},addCreateTag:n=>{e(A(r=>{r.createTags.push(n)}))},removeCreateTag:n=>{e(A(r=>{r.createTags=r.createTags.filter(i=>i.id!==n)}))},changeCreateTagType:(n,r)=>{e(A(i=>{const o=i.createTags.find(s=>s.id===n);o&&(o.type=r)}))},reorderCreateTag:(n,r)=>{e(A(i=>{const o=i.createTags.indexOf(n);o!==-1&&(i.createTags.splice(o,1),i.createTags.splice(r,0,n))}))},builtRequest:()=>{const n=t(),r=n.requestOptions;t().selectedTags().map(l=>l.modifier);const o=n.createTags.filter(l=>l.type==="positive").map(l=>l.name).join(","),s=n.createTags.filter(l=>l.type==="negative").map(l=>l.name).join(","),a={...r,prompt:o,negative_prompt:s};return n.uiOptions.isUseAutoSave||(a.save_to_disk_path=null),a.init_image===void 0&&(a.prompt_strength=void 0),a.use_upscale===""&&(a.use_upscale=null),a.use_upscale===null&&a.use_face_correction===null&&(a.show_only_filtered_image=!1),a},toggleUseFaceCorrection:()=>{e(A(n=>{const r=typeof n.getValueForRequestKey("use_face_correction")=="string"?null:"GFPGANv1.3";n.requestOptions.use_face_correction=r}))},isUsingFaceCorrection:()=>typeof t().getValueForRequestKey("use_face_correction")=="string",isUsingUpscaling:()=>t().getValueForRequestKey("use_upscale")!=="",toggleUseRandomSeed:()=>{e(A(n=>{n.uiOptions.isUseRandomSeed=!n.uiOptions.isUseRandomSeed,n.requestOptions.seed=n.uiOptions.isUseRandomSeed?Go():n.requestOptions.seed}))},isRandomSeed:()=>t().uiOptions.isUseRandomSeed,toggleUseAutoSave:()=>{e(A(n=>{n.uiOptions.isUseAutoSave=!n.uiOptions.isUseAutoSave}))},isUseAutoSave:()=>t().uiOptions.isUseAutoSave,toggleSoundEnabled:()=>{e(A(n=>{n.uiOptions.isSoundEnabled=!n.uiOptions.isSoundEnabled}))},isSoundEnabled:()=>t().uiOptions.isSoundEnabled,toggleInpainting:()=>{e(A(n=>{n.isInpainting=!n.isInpainting}))}}))),G0=`${Lt}/ding.mp3`,Iu=G.forwardRef((e,t)=>w("audio",{ref:t,style:{display:"none"},children:w("source",{src:G0,type:"audio/mp3"})}));Iu.displayName="AudioDing";var $f="_1jo75h1",Uf="_1jo75h0",Y0="_1jo75h2";const zf="Stable Diffusion is starting...",J0="Stable Diffusion is ready to use!",Bf="Stable Diffusion is not running!";function X0({className:e}){const[t,n]=P.exports.useState(zf),[r,i]=P.exports.useState(Uf),o=P.exports.useRef(),{status:s,data:a}=wr(["health"],O0,{refetchInterval:k0});return P.exports.useEffect(()=>{var l;s==="loading"?(n(zf),i(Uf)):s==="error"?(n(Bf),i($f)):s==="success"&&(a[0]==="OK"?(n(J0),i(Y0),(l=o.current)==null||l.play().catch(u=>{console.log("DING!")})):(n(Bf),i($f)))},[s,a,o]),R(lt,{children:[w(Iu,{ref:o}),w("p",{className:[r,e].join(" "),children:t})]})}const ug=typeof window>"u"||typeof document>"u";let Wt=ug?P.exports.useEffect:P.exports.useLayoutEffect;function Dn(e){let t=P.exports.useRef(e);return Wt(()=>{t.current=e},[e]),t}function Z0(e){typeof queueMicrotask=="function"?queueMicrotask(e):Promise.resolve().then(e).catch(t=>setTimeout(()=>{throw t}))}let q=function(e){let t=Dn(e);return G.useCallback((...n)=>t.current(...n),[t])},ia={serverHandoffComplete:!1};function e1(){let[e,t]=P.exports.useState(ia.serverHandoffComplete);return P.exports.useEffect(()=>{e!==!0&&t(!0)},[e]),P.exports.useEffect(()=>{ia.serverHandoffComplete===!1&&(ia.serverHandoffComplete=!0)},[]),e}var Qf;let t1=0;function Hf(){return++t1}let yt=(Qf=G.useId)!=null?Qf:function(){let e=e1(),[t,n]=G.useState(e?Hf:null);return Wt(()=>{t===null&&n(Hf())},[t]),t!=null?""+t:void 0};function St(e,t,...n){if(e in t){let i=t[e];return typeof i=="function"?i(...n):i}let r=new Error(`Tried to handle "${e}" but there is no handler defined. Only defined handlers are: ${Object.keys(t).map(i=>`"${i}"`).join(", ")}.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,St),r}function Lu(e){return ug?null:e instanceof Node?e.ownerDocument:e!=null&&e.hasOwnProperty("current")&&e.current instanceof Node?e.current.ownerDocument:document}let yl=["[contentEditable=true]","[tabindex]","a[href]","area[href]","button:not([disabled])","iframe","input:not([disabled])","select:not([disabled])","textarea:not([disabled])"].map(e=>`${e}:not([tabindex='-1'])`).join(",");var me=(e=>(e[e.First=1]="First",e[e.Previous=2]="Previous",e[e.Next=4]="Next",e[e.Last=8]="Last",e[e.WrapAround=16]="WrapAround",e[e.NoScroll=32]="NoScroll",e))(me||{}),n1=(e=>(e[e.Error=0]="Error",e[e.Overflow=1]="Overflow",e[e.Success=2]="Success",e[e.Underflow=3]="Underflow",e))(n1||{}),r1=(e=>(e[e.Previous=-1]="Previous",e[e.Next=1]="Next",e))(r1||{});function cg(e=document.body){return e==null?[]:Array.from(e.querySelectorAll(yl))}var Du=(e=>(e[e.Strict=0]="Strict",e[e.Loose=1]="Loose",e))(Du||{});function fg(e,t=0){var n;return e===((n=Lu(e))==null?void 0:n.body)?!1:St(t,{[0](){return e.matches(yl)},[1](){let r=e;for(;r!==null;){if(r.matches(yl))return!0;r=r.parentElement}return!1}})}let i1=["textarea","input"].join(",");function o1(e){var t,n;return(n=(t=e==null?void 0:e.matches)==null?void 0:t.call(e,i1))!=null?n:!1}function Sl(e,t=n=>n){return e.slice().sort((n,r)=>{let i=t(n),o=t(r);if(i===null||o===null)return 0;let s=i.compareDocumentPosition(o);return s&Node.DOCUMENT_POSITION_FOLLOWING?-1:s&Node.DOCUMENT_POSITION_PRECEDING?1:0})}function nt(e,t,n=!0,r=null){let i=Array.isArray(e)?e.length>0?e[0].ownerDocument:document:e.ownerDocument,o=Array.isArray(e)?n?Sl(e):e:cg(e);r=r!=null?r:i.activeElement;let s=(()=>{if(t&5)return 1;if(t&10)return-1;throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last")})(),a=(()=>{if(t&1)return 0;if(t&2)return Math.max(0,o.indexOf(r))-1;if(t&4)return Math.max(0,o.indexOf(r))+1;if(t&8)return o.length-1;throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last")})(),l=t&32?{preventScroll:!0}:{},u=0,c=o.length,f;do{if(u>=c||u+c<=0)return 0;let d=a+u;if(t&16)d=(d+c)%c;else{if(d<0)return 3;if(d>=c)return 1}f=o[d],f==null||f.focus(l),u+=s}while(f!==i.activeElement);return t&6&&o1(f)&&f.select(),f.hasAttribute("tabindex")||f.setAttribute("tabindex","0"),2}function oa(e,t,n){let r=Dn(t);P.exports.useEffect(()=>{function i(o){r.current(o)}return document.addEventListener(e,i,n),()=>document.removeEventListener(e,i,n)},[e,n])}function s1(e,t,n=!0){let r=P.exports.useRef(!1);P.exports.useEffect(()=>{requestAnimationFrame(()=>{r.current=n})},[n]);function i(s,a){if(!r.current||s.defaultPrevented)return;let l=function c(f){return typeof f=="function"?c(f()):Array.isArray(f)||f instanceof Set?f:[f]}(e),u=a(s);if(u!==null&&!!u.ownerDocument.documentElement.contains(u)){for(let c of l){if(c===null)continue;let f=c instanceof HTMLElement?c:c.current;if(f!=null&&f.contains(u))return}return!fg(u,Du.Loose)&&u.tabIndex!==-1&&s.preventDefault(),t(s,u)}}let o=P.exports.useRef(null);oa("mousedown",s=>{r.current&&(o.current=s.target)},!0),oa("click",s=>{!o.current||(i(s,()=>o.current),o.current=null)},!0),oa("blur",s=>i(s,()=>window.document.activeElement instanceof HTMLIFrameElement?window.document.activeElement:null),!0)}function Vf(e){var t;if(e.type)return e.type;let n=(t=e.as)!=null?t:"button";if(typeof n=="string"&&n.toLowerCase()==="button")return"button"}function Fu(e,t){let[n,r]=P.exports.useState(()=>Vf(e));return Wt(()=>{r(Vf(e))},[e.type,e.as]),Wt(()=>{n||!t.current||t.current instanceof HTMLButtonElement&&!t.current.hasAttribute("type")&&r("button")},[n,t]),n}let dg=Symbol();function a1(e,t=!0){return Object.assign(e,{[dg]:t})}function Ue(...e){let t=P.exports.useRef(e);P.exports.useEffect(()=>{t.current=e},[e]);let n=q(r=>{for(let i of t.current)i!=null&&(typeof i=="function"?i(r):i.current=r)});return e.every(r=>r==null||(r==null?void 0:r[dg]))?void 0:n}var Un=(e=>(e[e.None=0]="None",e[e.RenderStrategy=1]="RenderStrategy",e[e.Static=2]="Static",e))(Un||{}),l1=(e=>(e[e.Unmount=0]="Unmount",e[e.Hidden=1]="Hidden",e))(l1||{});function Ie({ourProps:e,theirProps:t,slot:n,defaultTag:r,features:i,visible:o=!0,name:s}){let a=pg(t,e);if(o)return Yi(a,n,r,s);let l=i!=null?i:0;if(l&2){let{static:u=!1,...c}=a;if(u)return Yi(c,n,r,s)}if(l&1){let{unmount:u=!0,...c}=a;return St(u?0:1,{[0](){return null},[1](){return Yi({...c,hidden:!0,style:{display:"none"}},n,r,s)}})}return Yi(a,n,r,s)}function Yi(e,t={},n,r){let{as:i=n,children:o,refName:s="ref",...a}=sa(e,["unmount","static"]),l=e.ref!==void 0?{[s]:e.ref}:{},u=typeof o=="function"?o(t):o;a.className&&typeof a.className=="function"&&(a.className=a.className(t));let c={};if(t){let f=!1,d=[];for(let[p,g]of Object.entries(t))typeof g=="boolean"&&(f=!0),g===!0&&d.push(p);f&&(c["data-headlessui-state"]=d.join(" "))}if(i===P.exports.Fragment&&Object.keys(wl(a)).length>0){if(!P.exports.isValidElement(u)||Array.isArray(u)&&u.length>1)throw new Error(['Passing props on "Fragment"!',"",`The current component <${r} /> is rendering a "Fragment".`,"However we need to passthrough the following props:",Object.keys(a).map(f=>` - ${f}`).join(`
+`),"","You can apply a few solutions:",['Add an `as="..."` prop, to ensure that we render an actual element instead of a "Fragment".',"Render a single element as the child so that we can forward the props onto that element."].map(f=>` - ${f}`).join(`
+`)].join(`
+`));return P.exports.cloneElement(u,Object.assign({},pg(u.props,wl(sa(a,["ref"]))),c,l,u1(u.ref,l.ref)))}return P.exports.createElement(i,Object.assign({},sa(a,["ref"]),i!==P.exports.Fragment&&l,i!==P.exports.Fragment&&c),u)}function u1(...e){return{ref:e.every(t=>t==null)?void 0:t=>{for(let n of e)n!=null&&(typeof n=="function"?n(t):n.current=t)}}}function pg(...e){if(e.length===0)return{};if(e.length===1)return e[0];let t={},n={};for(let r of e)for(let i in r)i.startsWith("on")&&typeof r[i]=="function"?(n[i]!=null||(n[i]=[]),n[i].push(r[i])):t[i]=r[i];if(t.disabled||t["aria-disabled"])return Object.assign(t,Object.fromEntries(Object.keys(n).map(r=>[r,void 0])));for(let r in n)Object.assign(t,{[r](i,...o){let s=n[r];for(let a of s){if((i instanceof Event||(i==null?void 0:i.nativeEvent)instanceof Event)&&i.defaultPrevented)return;a(i,...o)}}});return t}function ze(e){var t;return Object.assign(P.exports.forwardRef(e),{displayName:(t=e.displayName)!=null?t:e.name})}function wl(e){let t=Object.assign({},e);for(let n in t)t[n]===void 0&&delete t[n];return t}function sa(e,t=[]){let n=Object.assign({},e);for(let r of t)r in n&&delete n[r];return n}function Mu(e){let t=e.parentElement,n=null;for(;t&&!(t instanceof HTMLFieldSetElement);)t instanceof HTMLLegendElement&&(n=t),t=t.parentElement;let r=(t==null?void 0:t.getAttribute("disabled"))==="";return r&&c1(n)?!1:r}function c1(e){if(!e)return!1;let t=e.previousElementSibling;for(;t!==null;){if(t instanceof HTMLLegendElement)return!1;t=t.previousElementSibling}return!0}function f1(e){var t;let n=(t=e==null?void 0:e.form)!=null?t:e.closest("form");if(n){for(let r of n.elements)if(r.tagName==="INPUT"&&r.type==="submit"||r.tagName==="BUTTON"&&r.type==="submit"||r.nodeName==="INPUT"&&r.type==="image"){r.click();return}}}let d1="div";var _r=(e=>(e[e.None=1]="None",e[e.Focusable=2]="Focusable",e[e.Hidden=4]="Hidden",e))(_r||{});let Er=ze(function(e,t){let{features:n=1,...r}=e,i={ref:t,"aria-hidden":(n&2)===2?!0:void 0,style:{position:"fixed",top:1,left:1,width:1,height:0,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0",...(n&4)===4&&(n&2)!==2&&{display:"none"}}};return Ie({ourProps:i,theirProps:r,slot:{},defaultTag:d1,name:"Hidden"})}),ju=P.exports.createContext(null);ju.displayName="OpenClosedContext";var Pi=(e=>(e[e.Open=0]="Open",e[e.Closed=1]="Closed",e))(Pi||{});function hg(){return P.exports.useContext(ju)}function p1({value:e,children:t}){return G.createElement(ju.Provider,{value:e},t)}var se=(e=>(e.Space=" ",e.Enter="Enter",e.Escape="Escape",e.Backspace="Backspace",e.Delete="Delete",e.ArrowLeft="ArrowLeft",e.ArrowUp="ArrowUp",e.ArrowRight="ArrowRight",e.ArrowDown="ArrowDown",e.Home="Home",e.End="End",e.PageUp="PageUp",e.PageDown="PageDown",e.Tab="Tab",e))(se||{});function h1(e,t,n){let[r,i]=P.exports.useState(n),o=e!==void 0;return[o?e:r,q(s=>(o||i(s),t==null?void 0:t(s)))]}function g1(e,t,n){let r=Dn(t);P.exports.useEffect(()=>{function i(o){r.current(o)}return window.addEventListener(e,i,n),()=>window.removeEventListener(e,i,n)},[e,n])}var Tn=(e=>(e[e.Forwards=0]="Forwards",e[e.Backwards=1]="Backwards",e))(Tn||{});function gg(){let e=P.exports.useRef(0);return g1("keydown",t=>{t.key==="Tab"&&(e.current=t.shiftKey?1:0)},!0),e}function Au(...e){return P.exports.useMemo(()=>Lu(...e),[...e])}function m1(e,t,n,r){let i=Dn(n);P.exports.useEffect(()=>{e=e!=null?e:window;function o(s){i.current(s)}return e.addEventListener(t,o,r),()=>e.removeEventListener(t,o,r)},[e,t,r])}let mg=P.exports.createContext(null);function vg(){let e=P.exports.useContext(mg);if(e===null){let t=new Error("You used a component, but it is not inside a relevant parent.");throw Error.captureStackTrace&&Error.captureStackTrace(t,vg),t}return e}function v1(){let[e,t]=P.exports.useState([]);return[e.length>0?e.join(" "):void 0,P.exports.useMemo(()=>function(n){let r=q(o=>(t(s=>[...s,o]),()=>t(s=>{let a=s.slice(),l=a.indexOf(o);return l!==-1&&a.splice(l,1),a}))),i=P.exports.useMemo(()=>({register:r,slot:n.slot,name:n.name,props:n.props}),[r,n.slot,n.name,n.props]);return G.createElement(mg.Provider,{value:i},n.children)},[t])]}let y1="p",S1=ze(function(e,t){let n=vg(),r=`headlessui-description-${yt()}`,i=Ue(t);Wt(()=>n.register(r),[r,n.register]);let o=e,s={ref:i,...n.props,id:r};return Ie({ourProps:s,theirProps:o,slot:n.slot||{},defaultTag:y1,name:n.name||"Description"})});var w1=(e=>(e[e.Open=0]="Open",e[e.Closed=1]="Closed",e))(w1||{}),x1=(e=>(e[e.TogglePopover=0]="TogglePopover",e[e.ClosePopover=1]="ClosePopover",e[e.SetButton=2]="SetButton",e[e.SetButtonId=3]="SetButtonId",e[e.SetPanel=4]="SetPanel",e[e.SetPanelId=5]="SetPanelId",e))(x1||{});let P1={[0]:e=>({...e,popoverState:St(e.popoverState,{[0]:1,[1]:0})}),[1](e){return e.popoverState===1?e:{...e,popoverState:1}},[2](e,t){return e.button===t.button?e:{...e,button:t.button}},[3](e,t){return e.buttonId===t.buttonId?e:{...e,buttonId:t.buttonId}},[4](e,t){return e.panel===t.panel?e:{...e,panel:t.panel}},[5](e,t){return e.panelId===t.panelId?e:{...e,panelId:t.panelId}}},$u=P.exports.createContext(null);$u.displayName="PopoverContext";function ws(e){let t=P.exports.useContext($u);if(t===null){let n=new Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(n,ws),n}return t}let Uu=P.exports.createContext(null);Uu.displayName="PopoverAPIContext";function zu(e){let t=P.exports.useContext(Uu);if(t===null){let n=new Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(n,zu),n}return t}let Bu=P.exports.createContext(null);Bu.displayName="PopoverGroupContext";function yg(){return P.exports.useContext(Bu)}let Qu=P.exports.createContext(null);Qu.displayName="PopoverPanelContext";function k1(){return P.exports.useContext(Qu)}function O1(e,t){return St(t.type,P1,e,t)}let _1="div",E1=ze(function(e,t){var n;let r=`headlessui-popover-button-${yt()}`,i=`headlessui-popover-panel-${yt()}`,o=P.exports.useRef(null),s=Ue(t,a1(k=>{o.current=k})),a=P.exports.useReducer(O1,{popoverState:1,button:null,buttonId:r,panel:null,panelId:i,beforePanelSentinel:P.exports.createRef(),afterPanelSentinel:P.exports.createRef()}),[{popoverState:l,button:u,panel:c,beforePanelSentinel:f,afterPanelSentinel:d},p]=a,g=Au((n=o.current)!=null?n:u);P.exports.useEffect(()=>p({type:3,buttonId:r}),[r,p]),P.exports.useEffect(()=>p({type:5,panelId:i}),[i,p]);let y=P.exports.useMemo(()=>{if(!u||!c)return!1;for(let k of document.querySelectorAll("body > *"))if(Number(k==null?void 0:k.contains(u))^Number(k==null?void 0:k.contains(c)))return!0;return!1},[u,c]),x=P.exports.useMemo(()=>({buttonId:r,panelId:i,close:()=>p({type:1})}),[r,i,p]),v=yg(),h=v==null?void 0:v.registerPopover,m=q(()=>{var k;return(k=v==null?void 0:v.isFocusWithinPopoverGroup())!=null?k:(g==null?void 0:g.activeElement)&&((u==null?void 0:u.contains(g.activeElement))||(c==null?void 0:c.contains(g.activeElement)))});P.exports.useEffect(()=>h==null?void 0:h(x),[h,x]),m1(g==null?void 0:g.defaultView,"focus",k=>{var E,I,j,z;l===0&&(m()||!u||!c||(I=(E=f.current)==null?void 0:E.contains)!=null&&I.call(E,k.target)||(z=(j=d.current)==null?void 0:j.contains)!=null&&z.call(j,k.target)||p({type:1}))},!0),s1([u,c],(k,E)=>{p({type:1}),fg(E,Du.Loose)||(k.preventDefault(),u==null||u.focus())},l===0);let S=q(k=>{p({type:1});let E=(()=>k?k instanceof HTMLElement?k:"current"in k&&k.current instanceof HTMLElement?k.current:u:u)();E==null||E.focus()}),_=P.exports.useMemo(()=>({close:S,isPortalled:y}),[S,y]),O=P.exports.useMemo(()=>({open:l===0,close:S}),[l,S]),C=e,b={ref:s};return G.createElement($u.Provider,{value:a},G.createElement(Uu.Provider,{value:_},G.createElement(p1,{value:St(l,{[0]:Pi.Open,[1]:Pi.Closed})},Ie({ourProps:b,theirProps:C,slot:O,defaultTag:_1,name:"Popover"}))))}),C1="button",b1=ze(function(e,t){let[n,r]=ws("Popover.Button"),{isPortalled:i}=zu("Popover.Button"),o=P.exports.useRef(null),s=`headlessui-focus-sentinel-${yt()}`,a=yg(),l=a==null?void 0:a.closeOthers,u=k1(),c=u===null?!1:u===n.panelId,f=Ue(o,t,c?null:k=>r({type:2,button:k})),d=Ue(o,t),p=Au(o),g=q(k=>{var E,I,j;if(c){if(n.popoverState===1)return;switch(k.key){case se.Space:case se.Enter:k.preventDefault(),(I=(E=k.target).click)==null||I.call(E),r({type:1}),(j=n.button)==null||j.focus();break}}else switch(k.key){case se.Space:case se.Enter:k.preventDefault(),k.stopPropagation(),n.popoverState===1&&(l==null||l(n.buttonId)),r({type:0});break;case se.Escape:if(n.popoverState!==0)return l==null?void 0:l(n.buttonId);if(!o.current||(p==null?void 0:p.activeElement)&&!o.current.contains(p.activeElement))return;k.preventDefault(),k.stopPropagation(),r({type:1});break}}),y=q(k=>{c||k.key===se.Space&&k.preventDefault()}),x=q(k=>{var E,I;Mu(k.currentTarget)||e.disabled||(c?(r({type:1}),(E=n.button)==null||E.focus()):(k.preventDefault(),k.stopPropagation(),n.popoverState===1&&(l==null||l(n.buttonId)),r({type:0}),(I=n.button)==null||I.focus()))}),v=q(k=>{k.preventDefault(),k.stopPropagation()}),h=n.popoverState===0,m=P.exports.useMemo(()=>({open:h}),[h]),S=Fu(e,o),_=e,O=c?{ref:d,type:S,onKeyDown:g,onClick:x}:{ref:f,id:n.buttonId,type:S,"aria-expanded":e.disabled?void 0:n.popoverState===0,"aria-controls":n.panel?n.panelId:void 0,onKeyDown:g,onKeyUp:y,onClick:x,onMouseDown:v},C=gg(),b=q(()=>{let k=n.panel;if(!k)return;function E(){St(C.current,{[Tn.Forwards]:()=>nt(k,me.First),[Tn.Backwards]:()=>nt(k,me.Last)})}E()});return R(lt,{children:[Ie({ourProps:O,theirProps:_,slot:m,defaultTag:C1,name:"Popover.Button"}),h&&!c&&i&&w(Er,{id:s,features:_r.Focusable,as:"button",type:"button",onFocus:b})]})}),R1="div",N1=Un.RenderStrategy|Un.Static,T1=ze(function(e,t){let[{popoverState:n},r]=ws("Popover.Overlay"),i=Ue(t),o=`headlessui-popover-overlay-${yt()}`,s=hg(),a=(()=>s!==null?s===Pi.Open:n===0)(),l=q(c=>{if(Mu(c.currentTarget))return c.preventDefault();r({type:1})}),u=P.exports.useMemo(()=>({open:n===0}),[n]);return Ie({ourProps:{ref:i,id:o,"aria-hidden":!0,onClick:l},theirProps:e,slot:u,defaultTag:R1,features:N1,visible:a,name:"Popover.Overlay"})}),I1="div",L1=Un.RenderStrategy|Un.Static,D1=ze(function(e,t){let{focus:n=!1,...r}=e,[i,o]=ws("Popover.Panel"),{close:s,isPortalled:a}=zu("Popover.Panel"),l=`headlessui-focus-sentinel-before-${yt()}`,u=`headlessui-focus-sentinel-after-${yt()}`,c=P.exports.useRef(null),f=Ue(c,t,_=>{o({type:4,panel:_})}),d=Au(c),p=hg(),g=(()=>p!==null?p===Pi.Open:i.popoverState===0)(),y=q(_=>{var O;switch(_.key){case se.Escape:if(i.popoverState!==0||!c.current||(d==null?void 0:d.activeElement)&&!c.current.contains(d.activeElement))return;_.preventDefault(),_.stopPropagation(),o({type:1}),(O=i.button)==null||O.focus();break}});P.exports.useEffect(()=>{var _;e.static||i.popoverState===1&&((_=e.unmount)!=null?_:!0)&&o({type:4,panel:null})},[i.popoverState,e.unmount,e.static,o]),P.exports.useEffect(()=>{if(!n||i.popoverState!==0||!c.current)return;let _=d==null?void 0:d.activeElement;c.current.contains(_)||nt(c.current,me.First)},[n,c,i.popoverState]);let x=P.exports.useMemo(()=>({open:i.popoverState===0,close:s}),[i,s]),v={ref:f,id:i.panelId,onKeyDown:y,onBlur:n&&i.popoverState===0?_=>{var O,C,b,k,E;let I=_.relatedTarget;!I||!c.current||(O=c.current)!=null&&O.contains(I)||(o({type:1}),(((b=(C=i.beforePanelSentinel.current)==null?void 0:C.contains)==null?void 0:b.call(C,I))||((E=(k=i.afterPanelSentinel.current)==null?void 0:k.contains)==null?void 0:E.call(k,I)))&&I.focus({preventScroll:!0}))}:void 0,tabIndex:-1},h=gg(),m=q(()=>{let _=c.current;if(!_)return;function O(){St(h.current,{[Tn.Forwards]:()=>{nt(_,me.First)},[Tn.Backwards]:()=>{var C;(C=i.button)==null||C.focus({preventScroll:!0})}})}O()}),S=q(()=>{let _=c.current;if(!_)return;function O(){St(h.current,{[Tn.Forwards]:()=>{var C,b,k;if(!i.button)return;let E=cg(),I=E.indexOf(i.button),j=E.slice(0,I+1),z=[...E.slice(I+1),...j];for(let H of z.slice())if(((b=(C=H==null?void 0:H.id)==null?void 0:C.startsWith)==null?void 0:b.call(C,"headlessui-focus-sentinel-"))||((k=i.panel)==null?void 0:k.contains(H))){let Oe=z.indexOf(H);Oe!==-1&&z.splice(Oe,1)}nt(z,me.First,!1)},[Tn.Backwards]:()=>nt(_,me.Last)})}O()});return G.createElement(Qu.Provider,{value:i.panelId},g&&a&&w(Er,{id:l,ref:i.beforePanelSentinel,features:_r.Focusable,as:"button",type:"button",onFocus:m}),Ie({ourProps:v,theirProps:r,slot:x,defaultTag:I1,features:L1,visible:g,name:"Popover.Panel"}),g&&a&&w(Er,{id:u,ref:i.afterPanelSentinel,features:_r.Focusable,as:"button",type:"button",onFocus:S}))}),F1="div",M1=ze(function(e,t){let n=P.exports.useRef(null),r=Ue(n,t),[i,o]=P.exports.useState([]),s=q(g=>{o(y=>{let x=y.indexOf(g);if(x!==-1){let v=y.slice();return v.splice(x,1),v}return y})}),a=q(g=>(o(y=>[...y,g]),()=>s(g))),l=q(()=>{var g;let y=Lu(n);if(!y)return!1;let x=y.activeElement;return(g=n.current)!=null&&g.contains(x)?!0:i.some(v=>{var h,m;return((h=y.getElementById(v.buttonId))==null?void 0:h.contains(x))||((m=y.getElementById(v.panelId))==null?void 0:m.contains(x))})}),u=q(g=>{for(let y of i)y.buttonId!==g&&y.close()}),c=P.exports.useMemo(()=>({registerPopover:a,unregisterPopover:s,isFocusWithinPopoverGroup:l,closeOthers:u}),[a,s,l,u]),f=P.exports.useMemo(()=>({}),[]),d=e,p={ref:r};return G.createElement(Bu.Provider,{value:c},Ie({ourProps:p,theirProps:d,slot:f,defaultTag:F1,name:"Popover.Group"}))}),fr=Object.assign(E1,{Button:b1,Overlay:T1,Panel:D1,Group:M1}),Sg=P.exports.createContext(null);function wg(){let e=P.exports.useContext(Sg);if(e===null){let t=new Error("You used a component, but it is not inside a relevant parent.");throw Error.captureStackTrace&&Error.captureStackTrace(t,wg),t}return e}function j1(){let[e,t]=P.exports.useState([]);return[e.length>0?e.join(" "):void 0,P.exports.useMemo(()=>function(n){let r=q(o=>(t(s=>[...s,o]),()=>t(s=>{let a=s.slice(),l=a.indexOf(o);return l!==-1&&a.splice(l,1),a}))),i=P.exports.useMemo(()=>({register:r,slot:n.slot,name:n.name,props:n.props}),[r,n.slot,n.name,n.props]);return G.createElement(Sg.Provider,{value:i},n.children)},[t])]}let A1="label",$1=ze(function(e,t){let{passive:n=!1,...r}=e,i=wg(),o=`headlessui-label-${yt()}`,s=Ue(t);Wt(()=>i.register(o),[o,i.register]);let a={ref:s,...i.props,id:o};return n&&("onClick"in a&&delete a.onClick,"onClick"in r&&delete r.onClick),Ie({ourProps:a,theirProps:r,slot:i.slot||{},defaultTag:A1,name:i.name||"Label"})}),Hu=P.exports.createContext(null);Hu.displayName="GroupContext";let U1=P.exports.Fragment;function z1(e){let[t,n]=P.exports.useState(null),[r,i]=j1(),[o,s]=v1(),a=P.exports.useMemo(()=>({switch:t,setSwitch:n,labelledby:r,describedby:o}),[t,n,r,o]),l={},u=e;return G.createElement(s,{name:"Switch.Description"},G.createElement(i,{name:"Switch.Label",props:{onClick(){!t||(t.click(),t.focus({preventScroll:!0}))}}},G.createElement(Hu.Provider,{value:a},Ie({ourProps:l,theirProps:u,defaultTag:U1,name:"Switch.Group"}))))}let B1="button",Q1=ze(function(e,t){let{checked:n,defaultChecked:r=!1,onChange:i,name:o,value:s,...a}=e,l=`headlessui-switch-${yt()}`,u=P.exports.useContext(Hu),c=P.exports.useRef(null),f=Ue(c,t,u===null?null:u.setSwitch),[d,p]=h1(n,i,r),g=q(()=>p==null?void 0:p(!d)),y=q(S=>{if(Mu(S.currentTarget))return S.preventDefault();S.preventDefault(),g()}),x=q(S=>{S.key===se.Space?(S.preventDefault(),g()):S.key===se.Enter&&f1(S.currentTarget)}),v=q(S=>S.preventDefault()),h=P.exports.useMemo(()=>({checked:d}),[d]),m={id:l,ref:f,role:"switch",type:Fu(e,c),tabIndex:0,"aria-checked":d,"aria-labelledby":u==null?void 0:u.labelledby,"aria-describedby":u==null?void 0:u.describedby,onClick:y,onKeyUp:x,onKeyPress:v};return G.createElement(G.Fragment,null,o!=null&&d&&G.createElement(Er,{features:_r.Hidden,...wl({as:"input",type:"checkbox",hidden:!0,readOnly:!0,checked:d,name:o,value:s})}),Ie({ourProps:m,theirProps:a,slot:h,defaultTag:B1,name:"Switch"}))}),aa=Object.assign(Q1,{Group:z1,Label:$1,Description:S1});function H1({onFocus:e}){let[t,n]=P.exports.useState(!0);return t?G.createElement(Er,{as:"button",type:"button",features:_r.Focusable,onFocus:r=>{r.preventDefault();let i,o=50;function s(){if(o--<=0){i&&cancelAnimationFrame(i);return}if(e()){n(!1),cancelAnimationFrame(i);return}i=requestAnimationFrame(s)}i=requestAnimationFrame(s)}}):null}var V1=(e=>(e[e.SetSelectedIndex=0]="SetSelectedIndex",e[e.RegisterTab=1]="RegisterTab",e[e.UnregisterTab=2]="UnregisterTab",e[e.RegisterPanel=3]="RegisterPanel",e[e.UnregisterPanel=4]="UnregisterPanel",e))(V1||{});let q1={[0](e,t){let n=e.tabs.filter(o=>{var s;return!((s=o.current)!=null&&s.hasAttribute("disabled"))});if(t.index<0)return{...e,selectedIndex:e.tabs.indexOf(n[0])};if(t.index>e.tabs.length)return{...e,selectedIndex:e.tabs.indexOf(n[n.length-1])};let r=e.tabs.slice(0,t.index),i=[...e.tabs.slice(t.index),...r].find(o=>n.includes(o));return i?{...e,selectedIndex:e.tabs.indexOf(i)}:e},[1](e,t){var n;if(e.tabs.includes(t.tab))return e;let r=e.tabs[e.selectedIndex],i=Sl([...e.tabs,t.tab],s=>s.current),o=(n=i.indexOf(r))!=null?n:e.selectedIndex;return o===-1&&(o=e.selectedIndex),{...e,tabs:i,selectedIndex:o}},[2](e,t){return{...e,tabs:e.tabs.filter(n=>n!==t.tab)}},[3](e,t){return e.panels.includes(t.panel)?e:{...e,panels:Sl([...e.panels,t.panel],n=>n.current)}},[4](e,t){return{...e,panels:e.panels.filter(n=>n!==t.panel)}}},Vu=P.exports.createContext(null);Vu.displayName="TabsSSRContext";function qu(e){let t=P.exports.useContext(Vu);if(t===null){let n=new Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(n,qu),n}return t}let Ku=P.exports.createContext(null);Ku.displayName="TabsDataContext";function Ni(e){let t=P.exports.useContext(Ku);if(t===null){let n=new Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(n,Ni),n}return t}let Wu=P.exports.createContext(null);Wu.displayName="TabsActionsContext";function Gu(e){let t=P.exports.useContext(Wu);if(t===null){let n=new Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(n,Gu),n}return t}function K1(e,t){return St(t.type,q1,e,t)}let W1=P.exports.Fragment,G1=ze(function(e,t){let{defaultIndex:n=0,vertical:r=!1,manual:i=!1,onChange:o,selectedIndex:s=null,...a}=e;const l=r?"vertical":"horizontal",u=i?"manual":"auto";let c=s!==null,f=Ue(t),[d,p]=P.exports.useReducer(K1,{selectedIndex:s!=null?s:n,tabs:[],panels:[]}),g=P.exports.useMemo(()=>({selectedIndex:d.selectedIndex}),[d.selectedIndex]),y=Dn(o||(()=>{})),x=Dn(d.tabs),v=P.exports.useMemo(()=>({orientation:l,activation:u,...d}),[l,u,d]),h=Dn(c?e.selectedIndex:d.selectedIndex),m=P.exports.useMemo(()=>({registerTab(O){return p({type:1,tab:O}),()=>p({type:2,tab:O})},registerPanel(O){return p({type:3,panel:O}),()=>p({type:4,panel:O})},change(O){h.current!==O&&y.current(O),c||p({type:0,index:O})}}),[p,c]);Wt(()=>{p({type:0,index:s!=null?s:n})},[s]);let S=P.exports.useRef({tabs:[],panels:[]}),_={ref:f};return G.createElement(Vu.Provider,{value:S},G.createElement(Wu.Provider,{value:m},G.createElement(Ku.Provider,{value:v},v.tabs.length<=0&&G.createElement(H1,{onFocus:()=>{var O,C;for(let b of x.current)if(((O=b.current)==null?void 0:O.tabIndex)===0)return(C=b.current)==null||C.focus(),!0;return!1}}),Ie({ourProps:_,theirProps:a,slot:g,defaultTag:W1,name:"Tabs"}))))}),Y1="div",J1=ze(function(e,t){let{orientation:n,selectedIndex:r}=Ni("Tab.List"),i=Ue(t);return Ie({ourProps:{ref:i,role:"tablist","aria-orientation":n},theirProps:e,slot:{selectedIndex:r},defaultTag:Y1,name:"Tabs.List"})}),X1="button",Z1=ze(function(e,t){var n,r;let i=`headlessui-tabs-tab-${yt()}`,{orientation:o,activation:s,selectedIndex:a,tabs:l,panels:u}=Ni("Tab"),c=Gu("Tab"),f=qu("Tab"),d=P.exports.useRef(null),p=Ue(d,t);Wt(()=>c.registerTab(d),[c,d]);let g=f.current.tabs.indexOf(i);g===-1&&(g=f.current.tabs.push(i)-1);let y=l.indexOf(d);y===-1&&(y=g);let x=y===a,v=q(k=>{let E=l.map(I=>I.current).filter(Boolean);if(k.key===se.Space||k.key===se.Enter){k.preventDefault(),k.stopPropagation(),c.change(y);return}switch(k.key){case se.Home:case se.PageUp:return k.preventDefault(),k.stopPropagation(),nt(E,me.First);case se.End:case se.PageDown:return k.preventDefault(),k.stopPropagation(),nt(E,me.Last)}if(St(o,{vertical(){if(k.key===se.ArrowUp)return nt(E,me.Previous|me.WrapAround);if(k.key===se.ArrowDown)return nt(E,me.Next|me.WrapAround)},horizontal(){if(k.key===se.ArrowLeft)return nt(E,me.Previous|me.WrapAround);if(k.key===se.ArrowRight)return nt(E,me.Next|me.WrapAround)}}))return k.preventDefault()}),h=q(()=>{var k;(k=d.current)==null||k.focus()}),m=P.exports.useRef(!1),S=q(()=>{var k;m.current||(m.current=!0,(k=d.current)==null||k.focus(),c.change(y),Z0(()=>{m.current=!1}))}),_=q(k=>{k.preventDefault()}),O=P.exports.useMemo(()=>({selected:x}),[x]),C=e,b={ref:p,onKeyDown:v,onFocus:s==="manual"?h:S,onMouseDown:_,onClick:S,id:i,role:"tab",type:Fu(e,d),"aria-controls":(r=(n=u[y])==null?void 0:n.current)==null?void 0:r.id,"aria-selected":x,tabIndex:x?0:-1};return Ie({ourProps:b,theirProps:C,slot:O,defaultTag:X1,name:"Tabs.Tab"})}),eS="div",tS=ze(function(e,t){let{selectedIndex:n}=Ni("Tab.Panels"),r=Ue(t),i=P.exports.useMemo(()=>({selectedIndex:n}),[n]);return Ie({ourProps:{ref:r},theirProps:e,slot:i,defaultTag:eS,name:"Tabs.Panels"})}),nS="div",rS=Un.RenderStrategy|Un.Static,iS=ze(function(e,t){var n,r,i,o;let{selectedIndex:s,tabs:a,panels:l}=Ni("Tab.Panel"),u=Gu("Tab.Panel"),c=qu("Tab.Panel"),f=`headlessui-tabs-panel-${yt()}`,d=P.exports.useRef(null),p=Ue(d,t);Wt(()=>u.registerPanel(d),[u,d]);let g=c.current.panels.indexOf(f);g===-1&&(g=c.current.panels.push(f)-1);let y=l.indexOf(d);y===-1&&(y=g);let x=y===s,v=P.exports.useMemo(()=>({selected:x}),[x]),h=e,m={ref:p,id:f,role:"tabpanel","aria-labelledby":(r=(n=a[y])==null?void 0:n.current)==null?void 0:r.id,tabIndex:x?0:-1};return!x&&((i=e.unmount)!=null?i:!0)&&!((o=e.static)!=null&&o)?G.createElement(Er,{as:"span",...m}):Ie({ourProps:m,theirProps:h,slot:v,defaultTag:nS,features:rS,visible:x,name:"Tabs.Panel"})}),On=Object.assign(Z1,{Group:G1,List:J1,Panels:tS,Panel:iS});var xg="_1m2mgvr1",Pg="_1m2mgvr0",kg="_1m2mgvr2 _1g1xsdd0 _1g1xsdd3 _1g1xsdd7 _1g1xsdd4";var Ve="_1961rof1",re="_1961rof0",oS="_1961rof2";var sS="_1d4r83s0";function aS(){return R(fr,{className:Pg,children:[R(fr.Button,{className:xg,children:[w("i",{className:[Ve,"fa-solid","fa-comments"].join(" ")}),"Help & Community"]}),w(fr.Panel,{className:kg,children:w("div",{className:sS,children:R("ul",{children:[w("li",{className:re,children:R("a",{href:"https://github.com/cmdr2/stable-diffusion-ui/blob/main/Troubleshooting.md",target:"_blank",rel:"noreferrer",children:[w("i",{className:[Ve,"fa-solid","fa-circle-question"].join(" ")})," Usual Problems and Solutions"]})}),w("li",{className:re,children:R("a",{href:"https://discord.com/invite/u9yhsFmEkB",target:"_blank",rel:"noreferrer",children:[w("i",{className:[Ve,"fa-brands","fa-discord"].join(" ")})," Discord user Community"]})}),w("li",{className:re,children:R("a",{href:"https://old.reddit.com/r/StableDiffusionUI/",target:"_blank",rel:"noreferrer",children:[w("i",{className:[Ve,"fa-brands","fa-reddit"].join(" ")})," Reddit Community"]})}),w("li",{className:re,children:R("a",{href:"https://github.com/cmdr2/stable-diffusion-ui ",target:"_blank",rel:"noreferrer",children:[w("i",{className:[Ve,"fa-brands","fa-github"].join(" ")})," Source Code on Github"]})})]})})})]})}function mn(e){return mn=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},mn(e)}function Dt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function wt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function qf(e,t){for(var n=0;n",">":">","'":"'","'":"'",""":'"',""":'"'," ":" "," ":" ","©":"\xA9","©":"\xA9","®":"\xAE","®":"\xAE","…":"\u2026","…":"\u2026","/":"/","/":"/"},cS=function(t){return uS[t]},fS=function(t){return t.replace(lS,cS)};function Kf(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 Wf(e){for(var t=1;t0&&arguments[0]!==void 0?arguments[0]:{};xl=Wf(Wf({},xl),e)}function hS(){return xl}var gS=function(){function e(){wt(this,e),this.usedNamespaces={}}return xt(e,[{key:"addUsedNamespaces",value:function(n){var r=this;n.forEach(function(i){r.usedNamespaces[i]||(r.usedNamespaces[i]=!0)})}},{key:"getUsedNamespaces",value:function(){return Object.keys(this.usedNamespaces)}}]),e}();function mS(e){Og=e}function vS(){return Og}var yS={type:"3rdParty",init:function(t){pS(t.options.react),mS(t)}};function SS(){if(console&&console.warn){for(var e,t=arguments.length,n=new Array(t),r=0;r2&&arguments[2]!==void 0?arguments[2]:{},r=t.languages[0],i=t.options?t.options.fallbackLng:!1,o=t.languages[t.languages.length-1];if(r.toLowerCase()==="cimode")return!0;var s=function(l,u){var c=t.services.backendConnector.state["".concat(l,"|").concat(u)];return c===-1||c===2};return n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!s(t.isLanguageChangingTo,e)?!1:!!(t.hasResourceBundle(r,e)||!t.services.backendConnector.backend||t.options.resources&&!t.options.partialBundledLanguages||s(r,e)&&(!i||s(o,e)))}function xS(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(!t.languages||!t.languages.length)return Pl("i18n.languages were undefined or empty",t.languages),!0;var r=t.options.ignoreJSONStructure!==void 0;return r?t.hasLoadedNamespace(e,{precheck:function(o,s){if(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&o.services.backendConnector.backend&&o.isLanguageChangingTo&&!s(o.isLanguageChangingTo,e))return!1}}):wS(e,t,n)}function _g(e){if(Array.isArray(e))return e}function PS(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r=[],i=!0,o=!1,s,a;try{for(n=n.call(e);!(i=(s=n.next()).done)&&(r.push(s.value),!(t&&r.length===t));i=!0);}catch(l){o=!0,a=l}finally{try{!i&&n.return!=null&&n.return()}finally{if(o)throw a}}return r}}function Jf(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&arguments[1]!==void 0?arguments[1]:{},n=t.i18n,r=P.exports.useContext(dS)||{},i=r.i18n,o=r.defaultNS,s=n||i||vS();if(s&&!s.reportNamespaces&&(s.reportNamespaces=new gS),!s){Pl("You will need to pass in an i18next instance by using initReactI18next");var a=function(k){return Array.isArray(k)?k[k.length-1]:k},l=[a,{},!1];return l.t=a,l.i18n={},l.ready=!1,l}s.options.react&&s.options.react.wait!==void 0&&Pl("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");var u=la(la(la({},hS()),s.options.react),t),c=u.useSuspense,f=u.keyPrefix,d=e||o||s.options&&s.options.defaultNS;d=typeof d=="string"?[d]:d||["translation"],s.reportNamespaces.addUsedNamespaces&&s.reportNamespaces.addUsedNamespaces(d);var p=(s.isInitialized||s.initializedStoreOnce)&&d.every(function(b){return xS(b,s,u)});function g(){return s.getFixedT(null,u.nsMode==="fallback"?d:d[0],f)}var y=P.exports.useState(g),x=kS(y,2),v=x[0],h=x[1],m=d.join(),S=OS(m),_=P.exports.useRef(!0);P.exports.useEffect(function(){var b=u.bindI18n,k=u.bindI18nStore;_.current=!0,!p&&!c&&Yf(s,d,function(){_.current&&h(g)}),p&&S&&S!==m&&_.current&&h(g);function E(){_.current&&h(g)}return b&&s&&s.on(b,E),k&&s&&s.store.on(k,E),function(){_.current=!1,b&&s&&b.split(" ").forEach(function(I){return s.off(I,E)}),k&&s&&k.split(" ").forEach(function(I){return s.store.off(I,E)})}},[s,m]);var O=P.exports.useRef(!0);P.exports.useEffect(function(){_.current&&!O.current&&h(g),O.current=!1},[s,f]);var C=[v,s,p];if(C.t=v,C.i18n=s,C.ready=p,p||!p&&!c)return C;throw new Promise(function(b){Yf(s,d,function(){b()})})}function _S(){const{t:e}=Ft(),[t,n]=P.exports.useState(!1),[r,i]=P.exports.useState("beta"),{status:o,data:s}=wr([vl],og),a=zh(),{status:l,data:u}=wr([C0],async()=>await b0(r),{enabled:t});return P.exports.useEffect(()=>{if(o==="success"){const{update_branch:c}=s;i(c==="main"?"beta":"main")}},[o,s]),P.exports.useEffect(()=>{l==="success"&&(u[0]==="OK"&&a.invalidateQueries([vl]),n(!1))},[l,u,n]),R("label",{children:[w("input",{type:"checkbox",checked:r==="main",onChange:c=>{n(!0)}}),"\u{1F525}",e("advanced-settings.beta")," ",e("advanced-settings.beta-disc")]})}var ES="cg4q680";function CS(){const{t:e}=Ft(),t=D(c=>c.isUseAutoSave()),n=D(c=>c.getValueForRequestKey("save_to_disk_path")),r=D(c=>c.getValueForRequestKey("turbo")),i=D(c=>c.getValueForRequestKey("use_cpu")),o=D(c=>c.getValueForRequestKey("use_full_precision")),s=D(c=>c.isSoundEnabled()),a=D(c=>c.setRequestOptions),l=D(c=>c.toggleUseAutoSave),u=D(c=>c.toggleSoundEnabled);return R(fr,{className:Pg,children:[R(fr.Button,{className:xg,children:[w("i",{className:[Ve,"fa-solid","fa-gear"].join(" ")}),"Settings"]}),w(fr.Panel,{className:kg,children:R("div",{className:ES,children:[w("h4",{children:"System Settings"}),R("ul",{children:[R("li",{className:re,children:[R("label",{children:[w("input",{checked:t,onChange:c=>l(),type:"checkbox"}),e("storage.ast")," "]}),R("label",{children:[w("input",{value:n,onChange:c=>a("save_to_disk_path",c.target.value),size:40,disabled:!t}),w("span",{className:"visually-hidden",children:"Path on disk where images will be saved"})]})]}),w("li",{className:re,children:R("label",{children:[w("input",{checked:s,onChange:c=>u(),type:"checkbox"}),e("advanced-settings.sound")]})}),w("li",{className:re,children:R("label",{children:[w("input",{checked:r,onChange:c=>a("turbo",c.target.checked),type:"checkbox"}),e("advanced-settings.turbo")," ",e("advanced-settings.turbo-disc")]})}),w("li",{className:re,children:R("label",{children:[w("input",{type:"checkbox",checked:i,onChange:c=>a("use_cpu",c.target.checked)}),e("advanced-settings.cpu")," ",e("advanced-settings.cpu-disc")]})}),w("li",{className:re,children:R("label",{children:[w("input",{checked:o,onChange:c=>a("use_full_precision",c.target.checked),type:"checkbox"}),e("advanced-settings.gpu")," ",e("advanced-settings.gpu-disc")]})}),w("li",{className:re,children:w(_S,{})})]})]})})]})}var bS="_1v2cc580",RS="_1v2cc582",NS="_1v2cc581";function TS(){const{t:e}=Ft(),{status:t,data:n}=wr([vl],og),[r,i]=P.exports.useState("2.1.0"),[o,s]=P.exports.useState("");return P.exports.useEffect(()=>{if(t==="success"){const{update_branch:a}=n;i("v2.1"),s(a==="main"?"(stable)":"(beta)")}},[t,n,i,i]),R("div",{className:bS,children:[R("div",{className:NS,children:[R("h1",{children:[e("title")," ",r," ",o," "]}),w(X0,{className:"status-display"})]}),R("div",{className:RS,children:[w(aS,{}),w(CS,{})]})]})}const on={IDLE:"IDLE",FETCHING:"FETCHING",PROGRESSING:"PROGRESSING",SUCCEEDED:"SUCCEEDED",COMPLETE:"COMPLETE",ERROR:"ERROR"},xe=Ri(e=>({status:on.IDLE,step:0,totalSteps:0,data:"",progressImages:[],timeStarted:new Date,timeNow:new Date,appendData:t=>{e(A(n=>{n.data+=t}))},reset:()=>{e(A(t=>{t.status=on.IDLE,t.step=0,t.totalSteps=0,t.data=""}))},setStatus:t=>{e(A(n=>{n.status=t}))},setStep:t=>{e(A(n=>{n.step=t}))},setTotalSteps:t=>{e(A(n=>{n.totalSteps=t}))},addProgressImage:t=>{e(A(n=>{n.progressImages.push(t)}))},setStartTime:()=>{e(A(t=>{t.timeStarted=new Date}))},setNowTime:()=>{e(A(t=>{t.timeNow=new Date}))},resetForFetching:()=>{e(A(t=>{t.status=on.FETCHING,t.progressImages=[],t.step=0,t.totalSteps=0,t.timeNow=new Date,t.timeStarted=new Date}))}})),ei=Ri((e,t)=>({imageMap:new Map,images:[],currentImage:null,updateDisplay:(n,r,i)=>{e(A(o=>{o.currentImage={id:n,display:r,info:i},o.images.unshift({id:n,data:r,info:i}),o.currentImage=o.images[0]}))},setCurrentImage:n=>{e(A(r=>{r.currentImage=n}))},clearDisplay:()=>{e(A(n=>{n.images=[],n.currentImage=null}))}}));var IS="_1xhk59i0";var LS="_1yvg52n0";function DS({imageData:e,metadata:t,className:n}){return w("div",{className:[LS,n].join(" "),children:w("img",{src:e,alt:t.prompt})})}var FS="_1swsr2r2",MS="_1swsr2r1",jS="_1swsr2r3",AS="_1swsr2r0";function $S(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Zf(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 ed(e){for(var t=1;t{for(var r of Object.keys(e)){var i;if(e[r]!==((i=t[r])!==null&&i!==void 0?i:n[r]))return!1}return!0},Yu=e=>t=>{var n=e.defaultClassName,r=ed(ed({},e.defaultVariants),t);for(var i in r){var o,s=(o=r[i])!==null&&o!==void 0?o:e.defaultVariants[i];if(s!=null){var a=s;typeof a=="boolean"&&(a=a===!0?"true":"false");var l=e.variantClassNames[i][a];l&&(n+=" "+l)}}for(var[u,c]of e.compoundVariants)US(u,r,e.defaultVariants)&&(n+=" "+c);return n},ie=Yu({defaultClassName:"_1wzejc90",variantClassNames:{color:{primary:"_1wzejc91",secondary:"_1wzejc92",tertiary:"_1wzejc93",cancel:"_1wzejc94",accent:"_1wzejc95",clear:"_1wzejc96"},type:{fill:"_1wzejc97",outline:"_1wzejc98",action:"_1wzejc99"},size:{slim:"_1wzejc9a",large:"_1wzejc9b"}},defaultVariants:{color:"primary",type:"fill"},compoundVariants:[]});function zS({info:e,data:t}){const n=()=>{const{prompt:s,negative_prompt:a,seed:l,num_inference_steps:u,guidance_scale:c,use_face_correction:f,use_upscale:d,width:p,height:g}=e;let y=s.replace(/[^a-zA-Z0-9]/g,"_");y=y.substring(0,100);let x=`${y}_Seed-${l}_Steps-${u}_Guidance-${c}`;return typeof f=="string"&&(x+=`_FaceCorrection-${f}`),typeof d=="string"&&(x+=`_Upscale-${d}`),x+=`_${p}x${g}`,x+=".png",x},r=D(s=>s.setRequestOptions),i=()=>{const s=document.createElement("a");s.download=n(),s.href=t!=null?t:"",s.click()},o=()=>{r("init_image",t)};return w("div",{className:AS,children:w("div",{className:MS,children:w("div",{className:FS,children:R("div",{className:jS,children:[R("div",{children:[R("p",{children:[" ",e==null?void 0:e.prompt]}),R("p",{children:[" ",e==null?void 0:e.negative_prompt]}),R("div",{children:[w("button",{className:ie(),onClick:i,children:"Save"}),w("button",{className:ie({color:"secondary",type:"outline"}),onClick:o,children:"Use as Input"})]})]}),w(DS,{imageData:t,metadata:e})]})})})})}const BS=()=>w("h4",{className:"no-image",children:"Try Making a new image!"}),QS=({images:e})=>w(lt,{children:e.map((t,n)=>{if(n==e.length-1)return w("img",{src:`${Lt}${t}`},n)})});function HS(){xe(n=>n.status);const e=ei(n=>n.currentImage),t=xe(n=>n.progressImages);return R("div",{className:IS,children:[e==null&&w(BS,{}),t.length>0?w(QS,{images:t}):e!=null&&w(zS,{info:e==null?void 0:e.info,data:e==null?void 0:e.data})]})}var VS="_1ma99901 _1g1xsdd0 _1g1xsdd2 _1g1xsdd9 _1g1xsdd4",qS="_1ma99902",KS="_1ma99900",WS="_1ma99903";function GS(){P.exports.useState(!1);const e=ei(i=>i.images),t=ei(i=>i.setCurrentImage),n=ei(i=>i.clearDisplay),r=()=>{n()};return w("div",{className:KS,children:R("div",{className:VS,children:[e!=null&&e.length>0&&w("button",{className:ie(),onClick:()=>{r()},children:"REMOVE ALL"}),w("ul",{className:qS,children:e==null?void 0:e.map((i,o)=>i===void 0?(console.warn(`image ${o} is undefined`),null):w("li",{children:w("button",{className:WS,onClick:()=>{t(i)},children:w("img",{src:i.data,alt:i.info.prompt})})},i.id))})]})})}var kl=Yu({defaultClassName:"ejmsqv0",variantClassNames:{selected:{true:"ejmsqv1"}},defaultVariants:{},compoundVariants:[]});var YS="_3dzc6s0",JS="_3dzc6s1",XS="_3dzc6s3";function ZS(){const[e,t]=P.exports.useState(!0),n=P.exports.useRef(null);return P.exports.useEffect(()=>{n.current!=null&&(e?n.current.removeAttribute("data-hide-history"):n.current.setAttribute("data-hide-history",""))},[n,e]),R("div",{ref:n,className:YS,children:[w("div",{className:JS,children:w(HS,{})}),R("div",{className:XS,children:[w("button",{className:kl({}),onClick:()=>t(r=>!r),children:e?"Hide History":"Show History"}),w(GS,{})]})]})}var ew="_97t2g71",tw="_97t2g70";function nw(){return R("div",{className:tw,children:[R("p",{children:["If you found this project useful and want to help keep it alive, please"," ",w("a",{href:"https://ko-fi.com/cmdr2_stablediffusion_ui",target:"_blank",rel:"noreferrer",children:w("img",{src:`${Lt}/kofi.png`,className:ew})})," ","to help cover the cost of development and maintenance! Thank you for your support!"]}),R("p",{children:["Please feel free to join the"," ",w("a",{href:"https://discord.com/invite/u9yhsFmEkB",target:"_blank",rel:"noreferrer",children:"discord community"})," ","or"," ",w("a",{href:"https://github.com/cmdr2/stable-diffusion-ui/issues",target:"_blank",rel:"noreferrer",children:"file an issue"})," ","if you have any problems or suggestions in using this interface."]}),R("div",{id:"footer-legal",children:[R("p",{children:[w("b",{children:"Disclaimer:"})," The authors of this project are not responsible for any content generated using this interface."]}),R("p",{children:["This license of this software forbids you from sharing any content that violates any laws, produce any harm to a person, disseminate any personal information that would be meant for harm, ",w("br",{}),"spread misinformation and target vulnerable groups. For the full list of restrictions please read"," ",w("a",{href:"https://github.com/cmdr2/stable-diffusion-ui/blob/main/LICENSE",target:"_blank",rel:"noreferrer",children:"the license"}),"."]}),w("p",{children:"By using this software, you consent to the terms and conditions of the license."})]})]})}var rw="_1how28i0 _1g1xsdd0 _1g1xsdd1 _1g1xsdd6 _1g1xsdd4",He=(e=>(e.pending="pending",e.processing="processing",e.complete="complete",e.paused="paused",e.error="error",e))(He||{});const be=Ri((e,t)=>({requests:[],addtoQueue:(n,r)=>{e(A(i=>{const o={id:n,options:r,status:"pending"};i.requests.push(o)}))},pendingRequests:()=>t().requests.filter(n=>n.status==="pending"),hasPendingQueue:()=>t().pendingRequests().length>0,hasAnyQueue:()=>t().requests.length>0,firstInQueue:()=>{const n=t().pendingRequests()[0];return n===void 0?{id:"",options:{},status:"pending"}:n},updateStatus:(n,r)=>{e(A(i=>{const o=i.requests.find(s=>s.id===n);o!==void 0&&(o.status=r)}))},sendPendingToTop:n=>{e(A(r=>{const i=r.requests.find(o=>o.id===n);if(i!==void 0){const o=r.requests.indexOf(i);r.requests.splice(o,1);for(let s=0;s{e(A(r=>{const i=r.requests.findIndex(o=>o.id===n);i>-1&&r.requests.splice(i,1)}))},removeCompleted:()=>{e(A(n=>{n.requests.filter(i=>i.status==="complete").forEach(i=>{const o=n.requests.indexOf(i);n.requests.splice(o,1)})}))},removeErrored:()=>{e(A(n=>{n.requests.filter(i=>i.status==="error").forEach(i=>{const o=n.requests.indexOf(i);n.requests.splice(o,1)})}))},clearQueue:()=>{e(A(n=>{n.requests=[]}))}}));let Ji;const iw=new Uint8Array(16);function ow(){if(!Ji&&(Ji=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!Ji))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Ji(iw)}const he=[];for(let e=0;e<256;++e)he.push((e+256).toString(16).slice(1));function sw(e,t=0){return(he[e[t+0]]+he[e[t+1]]+he[e[t+2]]+he[e[t+3]]+"-"+he[e[t+4]]+he[e[t+5]]+"-"+he[e[t+6]]+he[e[t+7]]+"-"+he[e[t+8]]+he[e[t+9]]+"-"+he[e[t+10]]+he[e[t+11]]+he[e[t+12]]+he[e[t+13]]+he[e[t+14]]+he[e[t+15]]).toLowerCase()}const aw=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),td={randomUUID:aw};function Yo(e,t,n){if(td.randomUUID&&!t&&!e)return td.randomUUID();e=e||{};const r=e.random||(e.rng||ow)();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 sw(r)}const lw="_batch";function uw(){const{t:e}=Ft(),t=P.exports.useRef(),n=D(E=>E.parallelCount),r=D(E=>E.builtRequest),i=D(E=>E.isRandomSeed()),o=D(E=>E.setRequestOptions),s=D(E=>E.isSoundEnabled()),a=be(E=>E.addtoQueue),l=be(E=>E.hasPendingQueue()),{id:u,options:c}=be(E=>E.firstInQueue()),f=be(E=>E.updateStatus),d=xe(E=>E.status),p=xe(E=>E.setStatus),g=xe(E=>E.setStep),y=xe(E=>E.setTotalSteps),x=xe(E=>E.addProgressImage),v=xe(E=>E.setStartTime),h=xe(E=>E.setNowTime),m=xe(E=>E.resetForFetching);xe(E=>E.appendData);const S=ei(E=>E.updateDisplay),_=(E,I)=>{try{const j=JSON.parse(E),{status:z,request:H,output:Oe}=j;z==="succeeded"?(f(I,He.complete),Oe.forEach((Xe,De)=>{const{data:T,seed:F}=Xe,M={...H,seed:F},B=`${I}${lw}-${F}-${De}`;S(B,T,M)})):(console.warn(`Unexpected status: ${z}`),f(I,He.error))}catch(j){f(I,He.error),console.warn("Error HACKING JSON: ",j)}},O=async(E,I)=>{var H;const j=new TextDecoder;let z="";for(;;){const{done:Oe,value:Xe}=await I.read(),De=j.decode(Xe);if(Oe){p(on.COMPLETE),_(z,E),s&&((H=t.current)==null||H.play());break}try{const T=JSON.parse(De),{status:F}=T;if(F==="progress"){p(on.PROGRESSING);const{progress:{step:M,total_steps:B},output:X}=T;g(M),y(B),M===0?v():h(),X!==void 0&&X.forEach(Yt=>{const _e=`${Yt.path}?t=${new Date().getTime()}`;x(_e)})}else F==="succeeded"?p(on.SUCCEEDED):F==="failed"?(console.warn("failed"),console.warn(T)):console.warn("UNKNOWN ?",T)}catch{z+=De}}},C=async(E,I)=>{var j;try{f(E,He.processing),m();const H=(j=(await R0(I)).body)==null?void 0:j.getReader();H!==void 0&&O(E,H)}catch(z){console.log("TOP LINE STREAM ERROR"),f(E,He.error),console.log(z)}},b=E=>{const I=[];let{num_outputs:j}=E;if(n>j)I.push(j);else for(;j>=1;)j-=n,j<=0?I.push(n):I.push(Math.abs(j));I.forEach((z,H)=>{let Oe=E.seed;H!==0&&(Oe=Go()),a(Yo(),{...E,num_outputs:z,seed:Oe})})},k=async()=>{i&&o("seed",Go());const E=r();b(E)};return P.exports.useEffect(()=>{const E=async I=>{await C(u!=null?u:"",I)};if(!(d===on.PROGRESSING||d===on.FETCHING)&&l){if(c===void 0){console.log("req is undefined");return}E(c).catch(I=>{console.log("HAS QUEUE ERROR"),console.log(I)})}},[l,d,u,c,C]),R(lt,{children:[w("button",{className:ie({size:"large"}),onClick:()=>{k()},children:e("home.make-img-btn")}),w(Iu,{ref:t})]})}var cw="_1ilavkl0 _1g1xsdd0 _1g1xsdd1 _1g1xsdd6 _1g1xsdd4 _1g1xsdd5",fw="_1ilavkl1",dw="_1ilavkl2",pw="_1ilavkl4 _1961rof2",hw="_1ilavkl3";function gw({id:e,name:t,category:n,previews:r,type:i}){const[o,s]=P.exports.useState(!1),a=D(p=>p.removeCreateTag),l=D(p=>p.changeCreateTagType),u=()=>{s(!0)},c=()=>{s(!1)},f=()=>{i==="positive"?l(e,"negative"):l(e,"positive")},d=()=>{console.log("remove"),a(e)};return R("div",{onMouseEnter:u,onMouseLeave:c,className:[cw,i].join(" "),children:[w("p",{className:o?dw:fw,children:t}),o&&w("button",{className:hw,onClick:f,children:i==="positive"?w("i",{className:[Ve,"fa-solid","fa-minus"].join(" ")}):w("i",{className:[Ve,"fa-solid","fa-plus"].join(" ")})}),o&&w("button",{className:pw,onClick:d,children:w("i",{className:[Ve,"fa-solid","fa-close"].join(" ")})})]})}var mw="d1va400";function vw(){D(t=>t.selectedTags());const e=D(t=>t.createTags);return w("div",{children:w("ul",{className:mw,children:e.map(t=>(console.log(t),w("li",{children:w(gw,{id:t.id,name:t.name,category:t==null?void 0:t.category,previews:t==null?void 0:t.previews,type:t.type})},t.id)))})})}var yw="_9fxd10",Sw="_9fxd11",ww="_9fxd12",xw="_9fxd15",Pw="_9fxd16";function kw({positive:e,setPositive:t}){return w(aa.Group,{as:P.exports.Fragment,children:R("div",{className:Sw,children:[w(aa.Label,{children:" Type "}),w(aa,{className:ww,checked:e,onChange:t,children:w("span",{className:xw,children:e?w("i",{className:[Ve,"fa-solid","fa-plus"].join(" ")}):w("i",{className:[Ve,"fa-solid","fa-minus"].join(" ")})})})]})})}function Ow(){const[e,t]=P.exports.useState(!0),[n,r]=P.exports.useState("An astronaut riding a horse"),i=D(a=>a.addCreateTag),{t:o}=Ft(),s=a=>{if(a.key==="Enter"&&n!==""){const l=e?"positive":"negative";n.split(",").map(u=>u.trim()).forEach(u=>{i({id:Yo(),name:u,type:l})}),r("")}};return R("div",{className:yw,children:[R("div",{children:[w("p",{children:o("home.editor-title")}),w("input",{value:n,onKeyDown:s,onChange:a=>{r(a.target.value)}})]}),R("div",{className:Pw,children:[w("button",{className:ie({size:"slim"}),onClick:()=>{},children:"Add Prompt"}),w(kw,{positive:e,setPositive:t})]}),w(vw,{})]})}var _w="_1rn4m8a3",Ew="_1rn4m8a2",Cw="_1rn4m8a0",bw="_1rn4m8a1";function Rw(e){const{t}=Ft(),n=P.exports.useRef(null),r=D(c=>c.getValueForRequestKey("init_image")),i=D(c=>c.isInpainting),o=D(c=>c.setRequestOptions),s=()=>{var c;(c=n.current)==null||c.click()},a=c=>{const f=c.target.files[0];if(f!==void 0){const d=new FileReader;d.onload=p=>{p.target!=null&&o("init_image",p.target.result)},d.readAsDataURL(f)}},l=D(c=>c.toggleInpainting),u=()=>{o("init_image",void 0),o("mask",void 0),i&&l()};return R("div",{className:Cw,children:[R("div",{children:[w("label",{className:bw,children:w("b",{children:t("home.initial-img-txt")})}),w("input",{ref:n,className:Ew,name:"init_image",type:"file",onChange:a}),w("button",{className:ie(),onClick:s,children:t("home.initial-img-btn")})]}),w("div",{className:_w,children:r!==void 0&&R(lt,{children:[R("div",{children:[w("img",{src:r,width:"100",height:"100"}),w("button",{className:oS,onClick:u,children:"X"})]}),R("label",{children:[w("input",{type:"checkbox",onChange:c=>{l()},checked:i}),t("in-paint.txt")]})]})})]})}function Nw(){return Ft(),D(e=>e.getValueForRequestKey("prompt")),D(e=>e.setRequestOptions),R("div",{className:rw,children:[w(uw,{}),w(Ow,{}),w(Rw,{})]})}const Tt=Ri(K0((e,t)=>({isOpenAdvancedSettings:!1,isOpenAdvImprovementSettings:!1,isOpenAdvPropertySettings:!1,isOpenAdvWorkflowSettings:!1,isOpenImageModifier:!1,showQueue:!1,toggleAdvancedSettings:()=>{e(A(n=>{n.isOpenAdvancedSettings=!n.isOpenAdvancedSettings}))},toggleAdvImprovementSettings:()=>{e(A(n=>{n.isOpenAdvImprovementSettings=!n.isOpenAdvImprovementSettings}))},toggleAdvPropertySettings:()=>{e(A(n=>{n.isOpenAdvPropertySettings=!n.isOpenAdvPropertySettings}))},toggleAdvWorkflowSettings:()=>{e(A(n=>{n.isOpenAdvWorkflowSettings=!n.isOpenAdvWorkflowSettings}))},toggleImageModifier:()=>{e(A(n=>{n.isOpenImageModifier=!n.isOpenImageModifier}))},toggleQueue:()=>{e(A(n=>{n.showQueue=!n.showQueue}))}}),{name:"createUI"}));var bg=Yu({defaultClassName:"_1g1xsdd0",variantClassNames:{backing:{normal:"_1g1xsdd1",light:"_1g1xsdd2",dark:"_1g1xsdd3"},rounded:{true:"_1g1xsdd4"},info:{true:"_1g1xsdd5"},level:{1:"_1g1xsdd6",2:"_1g1xsdd7",3:"_1g1xsdd8",flat:"_1g1xsdd9"}},defaultVariants:{backing:"light",level:"flat",rounded:!0},compoundVariants:[]});var ua="_11d5x3d1",Tw="_11d5x3d0";function Iw(){const{t:e}=Ft(),t=D(f=>f.isUsingFaceCorrection()),n=D(f=>f.isUsingUpscaling()),r=D(f=>f.getValueForRequestKey("use_upscale")),i=D(f=>f.getValueForRequestKey("show_only_filtered_image")),o=D(f=>f.toggleUseFaceCorrection),s=D(f=>f.setRequestOptions),a=Tt(f=>f.isOpenAdvImprovementSettings),l=Tt(f=>f.toggleAdvImprovementSettings),[u,c]=P.exports.useState(!1);return P.exports.useEffect(()=>{t||r!=""?c(!1):c(!0)},[t,n,c]),R("div",{children:[w("button",{type:"button",className:ie({type:"action",color:"accent"}),onClick:l,children:"Improvement Settings"}),a&&R(lt,{children:[w("div",{className:re,children:R("label",{children:[w("input",{type:"checkbox",checked:t,onChange:f=>o()}),"Fix incorrect faces and eyes (uses GFPGAN)"]})}),w("div",{className:re,children:R("label",{children:[e("settings.ups"),R("select",{id:"upscale_model",name:"upscale_model",value:r,onChange:f=>{s("use_upscale",f.target.value)},children:[w("option",{value:"",children:e("settings.no-ups")}),w("option",{value:"RealESRGAN_x4plus",children:"RealESRGAN_x4plus"}),w("option",{value:"RealESRGAN_x4plus_anime_6B",children:"RealESRGAN_x4plus_anime_6B"})]})]})}),w("div",{className:re,children:R("label",{children:[w("input",{disabled:u,type:"checkbox",checked:i,onChange:f=>s("show_only_filtered_image",f.target.checked)}),e("settings.corrected")]})})]})]})}const nd=[{value:128,label:"128 (*)"},{value:192,label:"192"},{value:256,label:"256 (*)"},{value:320,label:"320"},{value:384,label:"384"},{value:448,label:"448"},{value:512,label:"512 (*)"},{value:576,label:"576"},{value:640,label:"640"},{value:704,label:"704"},{value:768,label:"768 (*)"},{value:832,label:"832"},{value:896,label:"896"},{value:960,label:"960"},{value:1024,label:"1024 (*)"}];function Lw(){const{t:e}=Ft(),t=D(g=>g.setRequestOptions),n=D(g=>g.toggleUseRandomSeed),r=D(g=>g.isRandomSeed()),i=D(g=>g.getValueForRequestKey("seed")),o=D(g=>g.getValueForRequestKey("num_inference_steps")),s=D(g=>g.getValueForRequestKey("guidance_scale")),a=D(g=>g.getValueForRequestKey("init_image")),l=D(g=>g.getValueForRequestKey("prompt_strength")),u=D(g=>g.getValueForRequestKey("width")),c=D(g=>g.getValueForRequestKey("height")),f=D(g=>g.getValueForRequestKey("sampler")),d=Tt(g=>g.isOpenAdvPropertySettings),p=Tt(g=>g.toggleAdvPropertySettings);return R("div",{children:[w("button",{type:"button",className:ie({type:"action",color:"accent"}),onClick:p,children:"Property Settings"}),d&&R(lt,{children:[R("div",{className:re,children:[R("label",{children:["Seed:",w("input",{size:10,value:i,onChange:g=>t("seed",g.target.value),disabled:r,placeholder:"random"})]}),R("label",{children:[w("input",{type:"checkbox",checked:r,onChange:g=>n()})," ","Random Image"]})]}),w("div",{className:re,children:R("label",{children:[e("settings.steps")," ",w("input",{value:o,onChange:g=>{t("num_inference_steps",g.target.value)},size:4})]})}),R("div",{className:re,children:[R("label",{children:[e("settings.guide-scale"),w("input",{value:s,onChange:g=>t("guidance_scale",g.target.value),type:"range",min:"0",max:"20",step:".1"})]}),w("span",{children:s})]}),a!==void 0&&R("div",{className:re,children:[R("label",{children:[e("settings.prompt-str")," ",w("input",{value:l,onChange:g=>t("prompt_strength",g.target.value),type:"range",min:"0",max:"1",step:".05"})]}),w("span",{children:l})]}),R("div",{className:re,children:[R("label",{children:[e("settings.width"),w("select",{value:u,onChange:g=>t("width",g.target.value),children:nd.map(g=>w("option",{value:g.value,children:g.label},`width-option_${g.value}`))})]}),R("label",{children:[e("settings.height"),w("select",{value:c,onChange:g=>t("height",g.target.value),children:nd.map(g=>w("option",{value:g.value,children:g.label},`height-option_${g.value}`))})]})]}),w("div",{className:re,children:R("label",{children:[e("settings.sampler"),w("select",{value:f,onChange:g=>t("sampler",g.target.value),children:W0.map(g=>w("option",{value:g,children:g},`sampler-option_${g}`))})]})})]})]})}function Dw(){const{t:e}=Ft(),t=D(l=>l.getValueForRequestKey("num_outputs")),n=D(l=>l.parallelCount),r=D(l=>l.setRequestOptions),i=D(l=>l.setParallelCount),o=D(l=>l.getValueForRequestKey("stream_image_progress")),s=Tt(l=>l.isOpenAdvWorkflowSettings),a=Tt(l=>l.toggleAdvWorkflowSettings);return R("div",{children:[w("button",{type:"button",className:ie({type:"action",color:"accent"}),onClick:a,children:"Workflow Settings"}),s&&R(lt,{children:[w("div",{className:re,children:R("label",{children:[e("settings.amount-of-img")," ",w("input",{type:"number",value:t,onChange:l=>r("num_outputs",parseInt(l.target.value,10)),size:4})]})}),w("div",{className:re,children:R("label",{children:[e("settings.how-many"),w("input",{type:"number",value:n,onChange:l=>i(parseInt(l.target.value,10)),size:4})]})}),w("div",{className:re,children:R("label",{children:[e("settings.stream-img"),w("input",{type:"checkbox",checked:o,onChange:l=>r("stream_image_progress",l.target.checked)})]})})]})]})}function Fw(){return R("ul",{className:Tw,children:[w("li",{className:ua,children:w(Iw,{})}),w("li",{className:ua,children:w(Lw,{})}),w("li",{className:ua,children:w(Dw,{})})]})}function Mw(){const e=Tt(n=>n.isOpenAdvancedSettings),t=Tt(n=>n.toggleAdvancedSettings);return R("div",{className:bg({level:1,backing:"normal"}),children:[w("button",{type:"button",onClick:t,className:ie({type:"action",color:"secondary",size:"large"}),children:"Advanced Settings"}),e&&w(Fw,{})]})}var jw="g3uahc1",Aw="g3uahc0",$w="g3uahc2";var Uw="_1uf7s3f3",zw="_1uf7s3f0 _1g1xsdd0 _1g1xsdd1 _1g1xsdd6 _1g1xsdd4 _1g1xsdd5",Bw="_1uf7s3f1",Qw="_1uf7s3f2";function Hw({name:e,category:t,previews:n}){const[r,i]=P.exports.useState(!1),o=()=>{i(!0)},s=()=>{i(!1)},a=D(c=>c.addCreateTag),l=()=>{a({id:Yo(),name:e,type:"positive"})},u=()=>{a({id:Yo(),name:e,type:"negative"})};return D(c=>c.hasTag(t,e)),D(c=>c.toggleTag),R("div",{className:zw,onMouseEnter:o,onMouseLeave:s,children:[w("p",{className:r?Qw:Bw,children:e}),r&&R("div",{className:Uw,children:[w("button",{onClick:l,children:w("i",{className:[Ve,"fa-solid","fa-plus"].join(" ")})}),w("button",{onClick:u,children:w("i",{className:[Ve,"fa-solid","fa-minus"].join(" ")})})]})]})}function Vw({tags:e,category:t}){return w("ul",{className:$w,children:e.map(n=>w("li",{children:w(Hw,{category:t,name:n.modifier,previews:n.previews})},n.modifier))})}function qw({title:e,category:t,tags:n}){const[r,i]=P.exports.useState(!1),o=()=>{i(!r)};return R("div",{className:jw,children:[w("button",{type:"button",className:ie({type:"action",color:"accent"}),onClick:o,children:w("h4",{children:e})}),r&&w(Vw,{category:t,tags:n})]})}function Kw(){const e=D(i=>i.allModifiers),t=Tt(i=>i.isOpenImageModifier),n=Tt(i=>i.toggleImageModifier),r=()=>{n()};return R("div",{className:bg({level:1,backing:"normal"}),children:[w("button",{type:"button",onClick:r,className:ie({type:"action",color:"secondary",size:"large"}),children:"Image Modifiers"}),t&&w("ul",{className:Aw,children:e.map((i,o)=>w("li",{children:w(qw,{title:i.category,category:i.category,tags:i.modifiers})},i.category))})]})}var Ww="fma0ug0";function Gw({imageData:e,brushSize:t,brushShape:n,brushColor:r,isErasing:i,setData:o}){const s=P.exports.useRef(null),a=P.exports.useRef(null),[l,u]=P.exports.useState(!1),[c,f]=P.exports.useState(512),[d,p]=P.exports.useState(512);P.exports.useEffect(()=>{const m=new Image;m.onload=()=>{f(m.width),p(m.height)},m.src=e},[e]),P.exports.useEffect(()=>{if(s.current!=null){const m=s.current.getContext("2d");if(m!=null){const S=m.getImageData(0,0,c,d),_=S.data;for(let O=0;O<_.length;O+=4)_[O+3]>0&&(_[O]=parseInt(r,16),_[O+1]=parseInt(r,16),_[O+2]=parseInt(r,16));m.putImageData(S,0,0)}}},[r]);const g=m=>{u(!0)},y=m=>{u(!1);const S=s.current;if(S!=null){const _=S.toDataURL();o(_)}},x=(m,S,_,O,C)=>{const b=s.current;if(b!=null){const k=b.getContext("2d");if(k!=null)if(i){const E=_/2;k.clearRect(m-E,S-E,_,_)}else k.beginPath(),k.lineWidth=_,k.lineCap=O,k.strokeStyle=C,k.moveTo(m,S),k.lineTo(m,S),k.stroke()}},v=(m,S,_,O,C)=>{const b=a.current;if(b!=null){const k=b.getContext("2d");if(k!=null)if(k.beginPath(),k.clearRect(0,0,b.width,b.height),i){const E=_/2;k.lineWidth=2,k.lineCap="butt",k.strokeStyle=C,k.moveTo(m-E,S-E),k.lineTo(m+E,S-E),k.lineTo(m+E,S+E),k.lineTo(m-E,S+E),k.lineTo(m-E,S-E),k.stroke()}else k.lineWidth=_,k.lineCap=O,k.strokeStyle=C,k.moveTo(m,S),k.lineTo(m,S),k.stroke()}};return R("div",{className:Ww,children:[w("img",{src:e}),w("canvas",{ref:s,width:c,height:d}),w("canvas",{ref:a,width:c,height:d,onMouseDown:g,onMouseUp:y,onMouseMove:m=>{const{nativeEvent:{offsetX:S,offsetY:_}}=m;v(S,_,t,n,r),l&&x(S,_,t,n,r)}})]})}var rd="_2yyo4x2",Yw="_2yyo4x1",Jw="_2yyo4x0";function Xw(){const[e,t]=P.exports.useState("20"),[n,r]=P.exports.useState("round"),[i,o]=P.exports.useState("#fff"),[s,a]=P.exports.useState(!1),l=D(g=>g.getValueForRequestKey("init_image")),u=D(g=>g.setRequestOptions);return R("div",{className:Jw,children:[w(Gw,{imageData:l,brushSize:e,brushShape:n,brushColor:i,isErasing:s,setData:g=>{u("mask",g)}}),R("div",{className:Yw,children:[R("div",{className:rd,children:[w("button",{onClick:()=>{a(!1)},children:"Mask"}),w("button",{onClick:()=>{a(!0)},children:"Erase"}),R("label",{children:["Brush Size",w("input",{type:"range",min:"1",max:"100",value:e,onChange:g=>{t(g.target.value)}})]})]}),R("div",{className:rd,children:[w("button",{onClick:()=>{r("round")},children:"Cirle Brush"}),w("button",{onClick:()=>{r("square")},children:"Square Brush"})]})]})]})}var Zw="jx6k9z0",ex="jx6k9z1";function tx(){const e=D(t=>t.isInpainting);return be(t=>t.hasAnyQueue()),R(lt,{children:[R("div",{className:Zw,children:[w(Nw,{}),w(Mw,{}),w(Kw,{})]}),e&&w("div",{className:ex,children:w(Xw,{})})]})}var nx="_1jtagr80",rx="_1jtagr81";function ix(){const e=be(r=>r.hasAnyQueue()),t=be(r=>r.clearQueue),n=async()=>{try{t();const r=await sg()}catch(r){console.log(r)}};return w("button",{className:ie({color:"cancel",size:"large"}),disabled:!e,onClick:()=>void n(),children:"STOP ALL"})}function ox(){const e=async()=>{try{const t=await sg()}catch(t){console.log(t)}};return w("button",{className:ie({color:"cancel",size:"large"}),onClick:()=>void e(),children:"Stop"})}var sx="_133914l2",ax="_133914l1",lx="_133914l0 _1g1xsdd0 _1g1xsdd2 _1g1xsdd6 _1g1xsdd4 _1g1xsdd5";function ux({request:e}){const t=be(x=>x.removeItem),n=be(x=>x.updateStatus),r=be(x=>x.sendPendingToTop),{id:i,options:{prompt:o,num_outputs:s,seed:a,sampler:l,guidance_scale:u,num_inference_steps:c},status:f}=e,d=()=>{t(i)},p=()=>{n(i,He.paused)},g=()=>{n(i,He.pending)},y=()=>{r(i)};return R("div",{className:[lx,f].join(" "),children:[R("div",{className:ax,children:[w("p",{children:o}),R("p",{children:["Making ",s," concurrent images"]}),R("p",{children:[R("span",{children:["Seed: ",a," "]}),R("span",{children:["Sampler: ",l," "]}),R("span",{children:["Guidance Scale: ",u," "]}),R("span",{children:["Num Inference Steps: ",c," "]})]})]}),R("div",{className:sx,children:[f===He.processing&&w(ox,{}),f===He.complete&&w("button",{className:ie({size:"large"}),onClick:d,children:"Clear"}),f===He.pending&&R(lt,{children:[w("button",{className:ie({color:"cancel"}),onClick:d,children:"Remove"}),w("button",{className:ie({color:"secondary",type:"outline"}),onClick:p,children:"Pause"}),w("button",{className:ie({color:"tertiary",type:"action"}),onClick:y,children:"Send to top"})]}),f===He.paused&&w("button",{className:ie({size:"large"}),onClick:g,children:"Resume"}),f===He.error&&w("button",{className:ie({size:"large"}),onClick:g,children:"Retry"})]})]})}function cx(){const e=be(o=>o.requests),t=be(o=>o.removeCompleted),n=be(o=>o.removeErrored),r=()=>{t()},i=()=>{n()};return R("div",{className:nx,children:[w(ix,{}),R("div",{className:rx,children:[w("button",{className:ie({type:"outline"}),onClick:r,children:"Clear Completed"}),w("button",{className:ie({type:"outline"}),onClick:i,children:"Clear Errored"})]}),e.map(o=>w(ux,{request:o},o.id))]})}function fx(){const[e,t]=P.exports.useState(!0),n=be(p=>p.hasPendingQueue()),r=be(p=>p.pendingRequests()),i=xe(p=>p.status),o=xe(p=>p.step),s=xe(p=>p.totalSteps),a=xe(p=>p.timeStarted),l=xe(p=>p.timeNow),[u,c]=P.exports.useState(0),[f,d]=P.exports.useState(0);return P.exports.useEffect(()=>{s>0?d(Math.round(o/s*100)):d(0)},[o,s]),P.exports.useEffect(()=>{const p=+l-+a,x=((o==0?0:p/o)*s-p)/1e3;c(x.toPrecision(3))},[o,s,a,l,c]),P.exports.useEffect(()=>{n&&t(!1)},[i,n]),R(lt,{children:[w("span",{children:"Queue "}),n&&R("span",{children:[" Items Remaining: ",r.length," "]})]})}var dx="_1j91ti00 ejmsqv2";function px(){return R(On.Group,{children:[R(On.List,{children:[w(On,{as:P.exports.Fragment,children:({selected:e})=>w("button",{className:kl({selected:e}),children:"Create"})}),w(On,{as:P.exports.Fragment,children:({selected:e})=>w("button",{className:kl({selected:e}),children:w(fx,{})})})]}),R(On.Panels,{className:dx,children:[w(On.Panel,{children:w(tx,{})}),w(On.Panel,{children:w(cx,{})})]})]})}function hx(){const e=D(s=>s.setRequestOptions),{status:t,data:n}=wr(["SaveDir"],E0),{status:r,data:i}=wr(["modifications"],_0),o=D(s=>s.setAllModifiers);return P.exports.useEffect(()=>{t==="success"&&e("save_to_disk_path",n)},[e,t,n]),P.exports.useEffect(()=>{r==="success"?o(i):r==="error"&&o(N0)},[e,r,i]),R(lt,{children:[R("div",{className:[y0].join(" "),children:[w("header",{className:P0,children:w(TS,{})}),w("nav",{className:S0,children:w(px,{})}),w("main",{className:w0,children:w(ZS,{})})]}),w("footer",{className:x0,children:w(nw,{})})]})}function gx(){return w("div",{children:w("h1",{children:"Settings"})})}function vn(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function Ol(e,t){return Ol=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,i){return r.__proto__=i,r},Ol(e,t)}function xs(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Ol(e,t)}function Ti(e,t){if(t&&(mn(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return vn(e)}function It(e){return It=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},It(e)}function mx(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function vx(e){return _g(e)||mx(e)||Eg(e)||Cg()}function id(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 od(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{};wt(this,e),this.init(t,n)}return xt(e,[{key:"init",value:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.prefix=r.prefix||"i18next:",this.logger=n||yx,this.options=r,this.debug=r.debug}},{key:"setDebug",value:function(n){this.debug=n}},{key:"log",value:function(){for(var n=arguments.length,r=new Array(n),i=0;i1?r-1:0),o=1;o-1?a.replace(/###/g,"."):a}function i(){return!e||typeof e=="string"}for(var o=typeof t!="string"?[].concat(t):t.split(".");o.length>1;){if(i())return{};var 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 ad(e,t,n){var r=Ju(e,t,Object),i=r.obj,o=r.k;i[o]=n}function xx(e,t,n,r){var i=Ju(e,t,Object),o=i.obj,s=i.k;o[s]=o[s]||[],r&&(o[s]=o[s].concat(n)),r||o[s].push(n)}function Jo(e,t){var n=Ju(e,t),r=n.obj,i=n.k;if(!!r)return r[i]}function ld(e,t,n){var r=Jo(e,n);return r!==void 0?r:Jo(t,n)}function Rg(e,t,n){for(var 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]):Rg(e[r],t[r],n):e[r]=t[r]);return e}function qn(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}var Px={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};function kx(e){return typeof e=="string"?e.replace(/[&<>"'\/]/g,function(t){return Px[t]}):e}var Ps=typeof window<"u"&&window.navigator&&typeof window.navigator.userAgentData>"u"&&window.navigator.userAgent&&window.navigator.userAgent.indexOf("MSIE")>-1,Ox=[" ",",","?","!",";"];function _x(e,t,n){t=t||"",n=n||"";var r=Ox.filter(function(a){return t.indexOf(a)<0&&n.indexOf(a)<0});if(r.length===0)return!0;var i=new RegExp("(".concat(r.map(function(a){return a==="?"?"\\?":a}).join("|"),")")),o=!i.test(e);if(!o){var s=e.indexOf(n);s>0&&!i.test(e.substring(0,s))&&(o=!0)}return o}function ud(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 Xi(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Ng(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:".";if(!!e){if(e[t])return e[t];for(var r=t.split(n),i=e,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]}var u=r.slice(o+s).join(n);return u?Ng(l,u,n):void 0}i=i[r[o]]}return i}}var bx=function(e){xs(n,e);var t=Ex(n);function n(r){var i,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{ns:["translation"],defaultNS:"translation"};return wt(this,n),i=t.call(this),Ps&&wn.call(vn(i)),i.data=r||{},i.options=o,i.options.keySeparator===void 0&&(i.options.keySeparator="."),i.options.ignoreJSONStructure===void 0&&(i.options.ignoreJSONStructure=!0),i}return xt(n,[{key:"addNamespaces",value:function(i){this.options.ns.indexOf(i)<0&&this.options.ns.push(i)}},{key:"removeNamespaces",value:function(i){var o=this.options.ns.indexOf(i);o>-1&&this.options.ns.splice(o,1)}},{key:"getResource",value:function(i,o,s){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},l=a.keySeparator!==void 0?a.keySeparator:this.options.keySeparator,u=a.ignoreJSONStructure!==void 0?a.ignoreJSONStructure:this.options.ignoreJSONStructure,c=[i,o];s&&typeof s!="string"&&(c=c.concat(s)),s&&typeof s=="string"&&(c=c.concat(l?s.split(l):s)),i.indexOf(".")>-1&&(c=i.split("."));var f=Jo(this.data,c);return f||!u||typeof s!="string"?f:Ng(this.data&&this.data[i]&&this.data[i][o],s,l)}},{key:"addResource",value:function(i,o,s,a){var l=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{silent:!1},u=this.options.keySeparator;u===void 0&&(u=".");var c=[i,o];s&&(c=c.concat(u?s.split(u):s)),i.indexOf(".")>-1&&(c=i.split("."),a=o,o=c[1]),this.addNamespaces(o),ad(this.data,c,a),l.silent||this.emit("added",i,o,s,a)}},{key:"addResources",value:function(i,o,s){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{silent:!1};for(var l in s)(typeof s[l]=="string"||Object.prototype.toString.apply(s[l])==="[object Array]")&&this.addResource(i,o,l,s[l],{silent:!0});a.silent||this.emit("added",i,o,s)}},{key:"addResourceBundle",value:function(i,o,s,a,l){var u=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{silent:!1},c=[i,o];i.indexOf(".")>-1&&(c=i.split("."),a=s,s=o,o=c[1]),this.addNamespaces(o);var f=Jo(this.data,c)||{};a?Rg(f,s,l):f=Xi(Xi({},f),s),ad(this.data,c,f),u.silent||this.emit("added",i,o,s)}},{key:"removeResourceBundle",value:function(i,o){this.hasResourceBundle(i,o)&&delete this.data[i][o],this.removeNamespaces(o),this.emit("removed",i,o)}},{key:"hasResourceBundle",value:function(i,o){return this.getResource(i,o)!==void 0}},{key:"getResourceBundle",value:function(i,o){return o||(o=this.options.defaultNS),this.options.compatibilityAPI==="v1"?Xi(Xi({},{}),this.getResource(i,o)):this.getResource(i,o)}},{key:"getDataByLanguage",value:function(i){return this.data[i]}},{key:"hasLanguageSomeTranslations",value:function(i){var o=this.getDataByLanguage(i),s=o&&Object.keys(o)||[];return!!s.find(function(a){return o[a]&&Object.keys(o[a]).length>0})}},{key:"toJSON",value:function(){return this.data}}]),n}(wn),Tg={processors:{},addPostProcessor:function(t){this.processors[t.name]=t},handle:function(t,n,r,i,o){var s=this;return t.forEach(function(a){s.processors[a]&&(n=s.processors[a].process(n,r,i,o))}),n}};function cd(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 Ee(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var fd={},dd=function(e){xs(n,e);var t=Rx(n);function n(r){var i,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return wt(this,n),i=t.call(this),Ps&&wn.call(vn(i)),wx(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],r,vn(i)),i.options=o,i.options.keySeparator===void 0&&(i.options.keySeparator="."),i.logger=Ct.create("translator"),i}return xt(n,[{key:"changeLanguage",value:function(i){i&&(this.language=i)}},{key:"exists",value:function(i){var o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}};if(i==null)return!1;var s=this.resolve(i,o);return s&&s.res!==void 0}},{key:"extractFromKey",value:function(i,o){var s=o.nsSeparator!==void 0?o.nsSeparator:this.options.nsSeparator;s===void 0&&(s=":");var a=o.keySeparator!==void 0?o.keySeparator:this.options.keySeparator,l=o.ns||this.options.defaultNS||[],u=s&&i.indexOf(s)>-1,c=!this.options.userDefinedKeySeparator&&!o.keySeparator&&!this.options.userDefinedNsSeparator&&!o.nsSeparator&&!_x(i,s,a);if(u&&!c){var f=i.match(this.interpolator.nestingRegexp);if(f&&f.length>0)return{key:i,namespaces:l};var d=i.split(s);(s!==a||s===a&&this.options.ns.indexOf(d[0])>-1)&&(l=d.shift()),i=d.join(a)}return typeof l=="string"&&(l=[l]),{key:i,namespaces:l}}},{key:"translate",value:function(i,o,s){var a=this;if(mn(o)!=="object"&&this.options.overloadTranslationOptionHandler&&(o=this.options.overloadTranslationOptionHandler(arguments)),o||(o={}),i==null)return"";Array.isArray(i)||(i=[String(i)]);var l=o.returnDetails!==void 0?o.returnDetails:this.options.returnDetails,u=o.keySeparator!==void 0?o.keySeparator:this.options.keySeparator,c=this.extractFromKey(i[i.length-1],o),f=c.key,d=c.namespaces,p=d[d.length-1],g=o.lng||this.language,y=o.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(g&&g.toLowerCase()==="cimode"){if(y){var x=o.nsSeparator||this.options.nsSeparator;return l?(v.res="".concat(p).concat(x).concat(f),v):"".concat(p).concat(x).concat(f)}return l?(v.res=f,v):f}var v=this.resolve(i,o),h=v&&v.res,m=v&&v.usedKey||f,S=v&&v.exactUsedKey||f,_=Object.prototype.toString.apply(h),O=["[object Number]","[object Function]","[object RegExp]"],C=o.joinArrays!==void 0?o.joinArrays:this.options.joinArrays,b=!this.i18nFormat||this.i18nFormat.handleAsObject,k=typeof h!="string"&&typeof h!="boolean"&&typeof h!="number";if(b&&h&&k&&O.indexOf(_)<0&&!(typeof C=="string"&&_==="[object Array]")){if(!o.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");var E=this.options.returnedObjectHandler?this.options.returnedObjectHandler(m,h,Ee(Ee({},o),{},{ns:d})):"key '".concat(f," (").concat(this.language,")' returned an object instead of string.");return l?(v.res=E,v):E}if(u){var I=_==="[object Array]",j=I?[]:{},z=I?S:m;for(var H in h)if(Object.prototype.hasOwnProperty.call(h,H)){var Oe="".concat(z).concat(u).concat(H);j[H]=this.translate(Oe,Ee(Ee({},o),{joinArrays:!1,ns:d})),j[H]===Oe&&(j[H]=h[H])}h=j}}else if(b&&typeof C=="string"&&_==="[object Array]")h=h.join(C),h&&(h=this.extendTranslation(h,i,o,s));else{var Xe=!1,De=!1,T=o.count!==void 0&&typeof o.count!="string",F=n.hasDefaultValue(o),M=T?this.pluralResolver.getSuffix(g,o.count,o):"",B=o["defaultValue".concat(M)]||o.defaultValue;!this.isValidLookup(h)&&F&&(Xe=!0,h=B),this.isValidLookup(h)||(De=!0,h=f);var X=o.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey,Yt=X&&De?void 0:h,_e=F&&B!==h&&this.options.updateMissing;if(De||Xe||_e){if(this.logger.log(_e?"updateKey":"missingKey",g,p,f,_e?B:h),u){var Qn=this.resolve(f,Ee(Ee({},o),{},{keySeparator:!1}));Qn&&Qn.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.")}var Be=[],Mt=this.languageUtils.getFallbackCodes(this.options.fallbackLng,o.lng||this.language);if(this.options.saveMissingTo==="fallback"&&Mt&&Mt[0])for(var ks=0;ks1&&arguments[1]!==void 0?arguments[1]:{},a,l,u,c,f;return typeof i=="string"&&(i=[i]),i.forEach(function(d){if(!o.isValidLookup(a)){var p=o.extractFromKey(d,s),g=p.key;l=g;var y=p.namespaces;o.options.fallbackNS&&(y=y.concat(o.options.fallbackNS));var x=s.count!==void 0&&typeof s.count!="string",v=x&&!s.ordinal&&s.count===0&&o.pluralResolver.shouldUseIntlApi(),h=s.context!==void 0&&(typeof s.context=="string"||typeof s.context=="number")&&s.context!=="",m=s.lngs?s.lngs:o.languageUtils.toResolveHierarchy(s.lng||o.language,s.fallbackLng);y.forEach(function(S){o.isValidLookup(a)||(f=S,!fd["".concat(m[0],"-").concat(S)]&&o.utils&&o.utils.hasLoadedNamespace&&!o.utils.hasLoadedNamespace(f)&&(fd["".concat(m[0],"-").concat(S)]=!0,o.logger.warn('key "'.concat(l,'" for languages "').concat(m.join(", "),`" won't get resolved as namespace "`).concat(f,'" 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(function(_){if(!o.isValidLookup(a)){c=_;var O=[g];if(o.i18nFormat&&o.i18nFormat.addLookupKeys)o.i18nFormat.addLookupKeys(O,g,_,S,s);else{var C;x&&(C=o.pluralResolver.getSuffix(_,s.count,s));var b="".concat(o.options.pluralSeparator,"zero");if(x&&(O.push(g+C),v&&O.push(g+b)),h){var k="".concat(g).concat(o.options.contextSeparator).concat(s.context);O.push(k),x&&(O.push(k+C),v&&O.push(k+b))}}for(var E;E=O.pop();)o.isValidLookup(a)||(u=E,a=o.getResource(_,S,E,s))}}))})}}),{res:a,usedKey:l,exactUsedKey:u,usedLng:c,usedNS:f}}},{key:"isValidLookup",value:function(i){return i!==void 0&&!(!this.options.returnNull&&i===null)&&!(!this.options.returnEmptyString&&i==="")}},{key:"getResource",value:function(i,o,s){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return this.i18nFormat&&this.i18nFormat.getResource?this.i18nFormat.getResource(i,o,s,a):this.resourceStore.getResource(i,o,s,a)}}],[{key:"hasDefaultValue",value:function(i){var o="defaultValue";for(var s in i)if(Object.prototype.hasOwnProperty.call(i,s)&&o===s.substring(0,o.length)&&i[s]!==void 0)return!0;return!1}}]),n}(wn);function ca(e){return e.charAt(0).toUpperCase()+e.slice(1)}var Tx=function(){function e(t){wt(this,e),this.options=t,this.supportedLngs=this.options.supportedLngs||!1,this.logger=Ct.create("languageUtils")}return xt(e,[{key:"getScriptPartFromCode",value:function(n){if(!n||n.indexOf("-")<0)return null;var r=n.split("-");return r.length===2||(r.pop(),r[r.length-1].toLowerCase()==="x")?null:this.formatLanguageCode(r.join("-"))}},{key:"getLanguagePartFromCode",value:function(n){if(!n||n.indexOf("-")<0)return n;var r=n.split("-");return this.formatLanguageCode(r[0])}},{key:"formatLanguageCode",value:function(n){if(typeof n=="string"&&n.indexOf("-")>-1){var r=["hans","hant","latn","cyrl","cans","mong","arab"],i=n.split("-");return this.options.lowerCaseLng?i=i.map(function(o){return o.toLowerCase()}):i.length===2?(i[0]=i[0].toLowerCase(),i[1]=i[1].toUpperCase(),r.indexOf(i[1].toLowerCase())>-1&&(i[1]=ca(i[1].toLowerCase()))):i.length===3&&(i[0]=i[0].toLowerCase(),i[1].length===2&&(i[1]=i[1].toUpperCase()),i[0]!=="sgn"&&i[2].length===2&&(i[2]=i[2].toUpperCase()),r.indexOf(i[1].toLowerCase())>-1&&(i[1]=ca(i[1].toLowerCase())),r.indexOf(i[2].toLowerCase())>-1&&(i[2]=ca(i[2].toLowerCase()))),i.join("-")}return this.options.cleanCode||this.options.lowerCaseLng?n.toLowerCase():n}},{key:"isSupportedCode",value:function(n){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(n=this.getLanguagePartFromCode(n)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(n)>-1}},{key:"getBestMatchFromCodes",value:function(n){var r=this;if(!n)return null;var i;return n.forEach(function(o){if(!i){var s=r.formatLanguageCode(o);(!r.options.supportedLngs||r.isSupportedCode(s))&&(i=s)}}),!i&&this.options.supportedLngs&&n.forEach(function(o){if(!i){var s=r.getLanguagePartFromCode(o);if(r.isSupportedCode(s))return i=s;i=r.options.supportedLngs.find(function(a){if(a.indexOf(s)===0)return a})}}),i||(i=this.getFallbackCodes(this.options.fallbackLng)[0]),i}},{key:"getFallbackCodes",value:function(n,r){if(!n)return[];if(typeof n=="function"&&(n=n(r)),typeof n=="string"&&(n=[n]),Object.prototype.toString.apply(n)==="[object Array]")return n;if(!r)return n.default||[];var i=n[r];return i||(i=n[this.getScriptPartFromCode(r)]),i||(i=n[this.formatLanguageCode(r)]),i||(i=n[this.getLanguagePartFromCode(r)]),i||(i=n.default),i||[]}},{key:"toResolveHierarchy",value:function(n,r){var i=this,o=this.getFallbackCodes(r||this.options.fallbackLng||[],n),s=[],a=function(u){!u||(i.isSupportedCode(u)?s.push(u):i.logger.warn("rejecting language code not found in supportedLngs: ".concat(u)))};return typeof n=="string"&&n.indexOf("-")>-1?(this.options.load!=="languageOnly"&&a(this.formatLanguageCode(n)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&a(this.getScriptPartFromCode(n)),this.options.load!=="currentOnly"&&a(this.getLanguagePartFromCode(n))):typeof n=="string"&&a(this.formatLanguageCode(n)),o.forEach(function(l){s.indexOf(l)<0&&a(i.formatLanguageCode(l))}),s}}]),e}(),Ix=[{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}],Lx={1:function(t){return Number(t>1)},2:function(t){return Number(t!=1)},3:function(t){return 0},4:function(t){return Number(t%10==1&&t%100!=11?0:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?1:2)},5:function(t){return Number(t==0?0:t==1?1:t==2?2:t%100>=3&&t%100<=10?3:t%100>=11?4:5)},6:function(t){return Number(t==1?0:t>=2&&t<=4?1:2)},7:function(t){return Number(t==1?0:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?1:2)},8:function(t){return Number(t==1?0:t==2?1:t!=8&&t!=11?2:3)},9:function(t){return Number(t>=2)},10:function(t){return Number(t==1?0:t==2?1:t<7?2:t<11?3:4)},11:function(t){return Number(t==1||t==11?0:t==2||t==12?1:t>2&&t<20?2:3)},12:function(t){return Number(t%10!=1||t%100==11)},13:function(t){return Number(t!==0)},14:function(t){return Number(t==1?0:t==2?1:t==3?2:3)},15:function(t){return Number(t%10==1&&t%100!=11?0:t%10>=2&&(t%100<10||t%100>=20)?1:2)},16:function(t){return Number(t%10==1&&t%100!=11?0:t!==0?1:2)},17:function(t){return Number(t==1||t%10==1&&t%100!=11?0:1)},18:function(t){return Number(t==0?0:t==1?1:2)},19:function(t){return Number(t==1?0:t==0||t%100>1&&t%100<11?1:t%100>10&&t%100<20?2:3)},20:function(t){return Number(t==1?0:t==0||t%100>0&&t%100<20?1:2)},21:function(t){return Number(t%100==1?1:t%100==2?2:t%100==3||t%100==4?3:0)},22:function(t){return Number(t==1?0:t==2?1:(t<0||t>10)&&t%10==0?2:3)}},Dx=["v1","v2","v3"],pd={zero:0,one:1,two:2,few:3,many:4,other:5};function Fx(){var e={};return Ix.forEach(function(t){t.lngs.forEach(function(n){e[n]={numbers:t.nr,plurals:Lx[t.fc]}})}),e}var Mx=function(){function e(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};wt(this,e),this.languageUtils=t,this.options=n,this.logger=Ct.create("pluralResolver"),(!this.options.compatibilityJSON||this.options.compatibilityJSON==="v4")&&(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=Fx()}return xt(e,[{key:"addRule",value:function(n,r){this.rules[n]=r}},{key:"getRule",value:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(this.shouldUseIntlApi())try{return new Intl.PluralRules(n,{type:r.ordinal?"ordinal":"cardinal"})}catch{return}return this.rules[n]||this.rules[this.languageUtils.getLanguagePartFromCode(n)]}},{key:"needsPlural",value:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=this.getRule(n,r);return this.shouldUseIntlApi()?i&&i.resolvedOptions().pluralCategories.length>1:i&&i.numbers.length>1}},{key:"getPluralFormsOfKey",value:function(n,r){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return this.getSuffixes(n,i).map(function(o){return"".concat(r).concat(o)})}},{key:"getSuffixes",value:function(n){var r=this,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=this.getRule(n,i);return o?this.shouldUseIntlApi()?o.resolvedOptions().pluralCategories.sort(function(s,a){return pd[s]-pd[a]}).map(function(s){return"".concat(r.options.prepend).concat(s)}):o.numbers.map(function(s){return r.getSuffix(n,s,i)}):[]}},{key:"getSuffix",value:function(n,r){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},o=this.getRule(n,i);return o?this.shouldUseIntlApi()?"".concat(this.options.prepend).concat(o.select(r)):this.getSuffixRetroCompatible(o,r):(this.logger.warn("no plural rule found for: ".concat(n)),"")}},{key:"getSuffixRetroCompatible",value:function(n,r){var i=this,o=n.noAbs?n.plurals(r):n.plurals(Math.abs(r)),s=n.numbers[o];this.options.simplifyPluralSuffix&&n.numbers.length===2&&n.numbers[0]===1&&(s===2?s="plural":s===1&&(s=""));var a=function(){return i.options.prepend&&s.toString()?i.options.prepend+s.toString():s.toString()};return this.options.compatibilityJSON==="v1"?s===1?"":typeof s=="number"?"_plural_".concat(s.toString()):a():this.options.compatibilityJSON==="v2"||this.options.simplifyPluralSuffix&&n.numbers.length===2&&n.numbers[0]===1?a():this.options.prepend&&o.toString()?this.options.prepend+o.toString():o.toString()}},{key:"shouldUseIntlApi",value:function(){return!Dx.includes(this.options.compatibilityJSON)}}]),e}();function hd(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 ct(e){for(var t=1;t0&&arguments[0]!==void 0?arguments[0]:{};wt(this,e),this.logger=Ct.create("interpolator"),this.options=t,this.format=t.interpolation&&t.interpolation.format||function(n){return n},this.init(t)}return xt(e,[{key:"init",value:function(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};n.interpolation||(n.interpolation={escapeValue:!0});var r=n.interpolation;this.escape=r.escape!==void 0?r.escape:kx,this.escapeValue=r.escapeValue!==void 0?r.escapeValue:!0,this.useRawValueToEscape=r.useRawValueToEscape!==void 0?r.useRawValueToEscape:!1,this.prefix=r.prefix?qn(r.prefix):r.prefixEscaped||"{{",this.suffix=r.suffix?qn(r.suffix):r.suffixEscaped||"}}",this.formatSeparator=r.formatSeparator?r.formatSeparator:r.formatSeparator||",",this.unescapePrefix=r.unescapeSuffix?"":r.unescapePrefix||"-",this.unescapeSuffix=this.unescapePrefix?"":r.unescapeSuffix||"",this.nestingPrefix=r.nestingPrefix?qn(r.nestingPrefix):r.nestingPrefixEscaped||qn("$t("),this.nestingSuffix=r.nestingSuffix?qn(r.nestingSuffix):r.nestingSuffixEscaped||qn(")"),this.nestingOptionsSeparator=r.nestingOptionsSeparator?r.nestingOptionsSeparator:r.nestingOptionsSeparator||",",this.maxReplaces=r.maxReplaces?r.maxReplaces:1e3,this.alwaysFormat=r.alwaysFormat!==void 0?r.alwaysFormat:!1,this.resetRegExp()}},{key:"reset",value:function(){this.options&&this.init(this.options)}},{key:"resetRegExp",value:function(){var n="".concat(this.prefix,"(.+?)").concat(this.suffix);this.regexp=new RegExp(n,"g");var r="".concat(this.prefix).concat(this.unescapePrefix,"(.+?)").concat(this.unescapeSuffix).concat(this.suffix);this.regexpUnescape=new RegExp(r,"g");var i="".concat(this.nestingPrefix,"(.+?)").concat(this.nestingSuffix);this.nestingRegexp=new RegExp(i,"g")}},{key:"interpolate",value:function(n,r,i,o){var s=this,a,l,u,c=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{};function f(x){return x.replace(/\$/g,"$$$$")}var d=function(v){if(v.indexOf(s.formatSeparator)<0){var h=ld(r,c,v);return s.alwaysFormat?s.format(h,void 0,i,ct(ct(ct({},o),r),{},{interpolationkey:v})):h}var m=v.split(s.formatSeparator),S=m.shift().trim(),_=m.join(s.formatSeparator).trim();return s.format(ld(r,c,S),_,i,ct(ct(ct({},o),r),{},{interpolationkey:S}))};this.resetRegExp();var p=o&&o.missingInterpolationHandler||this.options.missingInterpolationHandler,g=o&&o.interpolation&&o.interpolation.skipOnVariables!==void 0?o.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables,y=[{regex:this.regexpUnescape,safeValue:function(v){return f(v)}},{regex:this.regexp,safeValue:function(v){return s.escapeValue?f(s.escape(v)):f(v)}}];return y.forEach(function(x){for(u=0;a=x.regex.exec(n);){var v=a[1].trim();if(l=d(v),l===void 0)if(typeof p=="function"){var h=p(n,a,o);l=typeof h=="string"?h:""}else if(o&&o.hasOwnProperty(v))l="";else if(g){l=a[0];continue}else s.logger.warn("missed to pass in variable ".concat(v," for interpolating ").concat(n)),l="";else typeof l!="string"&&!s.useRawValueToEscape&&(l=sd(l));var m=x.safeValue(l);if(n=n.replace(a[0],m),g?(x.regex.lastIndex+=l.length,x.regex.lastIndex-=a[0].length):x.regex.lastIndex=0,u++,u>=s.maxReplaces)break}}),n}},{key:"nest",value:function(n,r){var i=this,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},s,a,l=ct({},o);l.applyPostProcessor=!1,delete l.defaultValue;function u(p,g){var y=this.nestingOptionsSeparator;if(p.indexOf(y)<0)return p;var x=p.split(new RegExp("".concat(y,"[ ]*{"))),v="{".concat(x[1]);p=x[0],v=this.interpolate(v,l);var h=v.match(/'/g),m=v.match(/"/g);(h&&h.length%2===0&&!m||m.length%2!==0)&&(v=v.replace(/'/g,'"'));try{l=JSON.parse(v),g&&(l=ct(ct({},g),l))}catch(S){return this.logger.warn("failed parsing options string in nesting for key ".concat(p),S),"".concat(p).concat(y).concat(v)}return delete l.defaultValue,p}for(;s=this.nestingRegexp.exec(n);){var c=[],f=!1;if(s[0].indexOf(this.formatSeparator)!==-1&&!/{.*}/.test(s[1])){var d=s[1].split(this.formatSeparator).map(function(p){return p.trim()});s[1]=d.shift(),c=d,f=!0}if(a=r(u.call(this,s[1].trim(),l),l),a&&s[0]===n&&typeof a!="string")return a;typeof a!="string"&&(a=sd(a)),a||(this.logger.warn("missed to resolve ".concat(s[1]," for nesting ").concat(n)),a=""),f&&(a=c.reduce(function(p,g){return i.format(p,g,o.lng,ct(ct({},o),{},{interpolationkey:s[1].trim()}))},a.trim())),n=n.replace(s[0],a),this.regexp.lastIndex=0}return n}}]),e}();function gd(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 Xt(e){for(var t=1;t-1){var r=e.split("(");t=r[0].toLowerCase().trim();var i=r[1].substring(0,r[1].length-1);if(t==="currency"&&i.indexOf(":")<0)n.currency||(n.currency=i.trim());else if(t==="relativetime"&&i.indexOf(":")<0)n.range||(n.range=i.trim());else{var o=i.split(";");o.forEach(function(s){if(!!s){var a=s.split(":"),l=vx(a),u=l[0],c=l.slice(1),f=c.join(":").trim().replace(/^'+|'+$/g,"");n[u.trim()]||(n[u.trim()]=f),f==="false"&&(n[u.trim()]=!1),f==="true"&&(n[u.trim()]=!0),isNaN(f)||(n[u.trim()]=parseInt(f,10))}})}}return{formatName:t,formatOptions:n}}var $x=function(){function e(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};wt(this,e),this.logger=Ct.create("formatter"),this.options=t,this.formats={number:function(r,i,o){return new Intl.NumberFormat(i,o).format(r)},currency:function(r,i,o){return new Intl.NumberFormat(i,Xt(Xt({},o),{},{style:"currency"})).format(r)},datetime:function(r,i,o){return new Intl.DateTimeFormat(i,Xt({},o)).format(r)},relativetime:function(r,i,o){return new Intl.RelativeTimeFormat(i,Xt({},o)).format(r,o.range||"day")},list:function(r,i,o){return new Intl.ListFormat(i,Xt({},o)).format(r)}},this.init(t)}return xt(e,[{key:"init",value:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}},i=r.interpolation;this.formatSeparator=i.formatSeparator?i.formatSeparator:i.formatSeparator||","}},{key:"add",value:function(n,r){this.formats[n.toLowerCase().trim()]=r}},{key:"format",value:function(n,r,i,o){var s=this,a=r.split(this.formatSeparator),l=a.reduce(function(u,c){var f=Ax(c),d=f.formatName,p=f.formatOptions;if(s.formats[d]){var g=u;try{var y=o&&o.formatParams&&o.formatParams[o.interpolationkey]||{},x=y.locale||y.lng||o.locale||o.lng||i;g=s.formats[d](u,x,Xt(Xt(Xt({},p),o),y))}catch(v){s.logger.warn(v)}return g}else s.logger.warn("there was no format function for ".concat(d));return u},n);return l}}]),e}();function md(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 vd(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Bx(e,t){e.pending[t]!==void 0&&(delete e.pending[t],e.pendingCount--)}var Qx=function(e){xs(n,e);var t=Ux(n);function n(r,i,o){var s,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return wt(this,n),s=t.call(this),Ps&&wn.call(vn(s)),s.backend=r,s.store=i,s.services=o,s.languageUtils=o.languageUtils,s.options=a,s.logger=Ct.create("backendConnector"),s.waitingReads=[],s.maxParallelReads=a.maxParallelReads||10,s.readingCalls=0,s.maxRetries=a.maxRetries>=0?a.maxRetries:5,s.retryTimeout=a.retryTimeout>=1?a.retryTimeout:350,s.state={},s.queue=[],s.backend&&s.backend.init&&s.backend.init(o,a.backend,a),s}return xt(n,[{key:"queueLoad",value:function(i,o,s,a){var l=this,u={},c={},f={},d={};return i.forEach(function(p){var g=!0;o.forEach(function(y){var x="".concat(p,"|").concat(y);!s.reload&&l.store.hasResourceBundle(p,y)?l.state[x]=2:l.state[x]<0||(l.state[x]===1?c[x]===void 0&&(c[x]=!0):(l.state[x]=1,g=!1,c[x]===void 0&&(c[x]=!0),u[x]===void 0&&(u[x]=!0),d[y]===void 0&&(d[y]=!0)))}),g||(f[p]=!0)}),(Object.keys(u).length||Object.keys(c).length)&&this.queue.push({pending:c,pendingCount:Object.keys(c).length,loaded:{},errors:[],callback:a}),{toLoad:Object.keys(u),pending:Object.keys(c),toLoadLanguages:Object.keys(f),toLoadNamespaces:Object.keys(d)}}},{key:"loaded",value:function(i,o,s){var a=i.split("|"),l=a[0],u=a[1];o&&this.emit("failedLoading",l,u,o),s&&this.store.addResourceBundle(l,u,s),this.state[i]=o?-1:2;var c={};this.queue.forEach(function(f){xx(f.loaded,[l],u),Bx(f,i),o&&f.errors.push(o),f.pendingCount===0&&!f.done&&(Object.keys(f.loaded).forEach(function(d){c[d]||(c[d]={});var p=f.loaded[d];p.length&&p.forEach(function(g){c[d][g]===void 0&&(c[d][g]=!0)})}),f.done=!0,f.errors.length?f.callback(f.errors):f.callback())}),this.emit("loaded",c),this.queue=this.queue.filter(function(f){return!f.done})}},{key:"read",value:function(i,o,s){var a=this,l=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,u=arguments.length>4&&arguments[4]!==void 0?arguments[4]:this.retryTimeout,c=arguments.length>5?arguments[5]:void 0;if(!i.length)return c(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:i,ns:o,fcName:s,tried:l,wait:u,callback:c});return}return this.readingCalls++,this.backend[s](i,o,function(f,d){if(a.readingCalls--,a.waitingReads.length>0){var p=a.waitingReads.shift();a.read(p.lng,p.ns,p.fcName,p.tried,p.wait,p.callback)}if(f&&d&&l2&&arguments[2]!==void 0?arguments[2]:{},l=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."),l&&l();typeof i=="string"&&(i=this.languageUtils.toResolveHierarchy(i)),typeof o=="string"&&(o=[o]);var u=this.queueLoad(i,o,a,l);if(!u.toLoad.length)return u.pending.length||l(),null;u.toLoad.forEach(function(c){s.loadOne(c)})}},{key:"load",value:function(i,o,s){this.prepareLoading(i,o,{},s)}},{key:"reload",value:function(i,o,s){this.prepareLoading(i,o,{reload:!0},s)}},{key:"loadOne",value:function(i){var o=this,s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"",a=i.split("|"),l=a[0],u=a[1];this.read(l,u,"read",void 0,void 0,function(c,f){c&&o.logger.warn("".concat(s,"loading namespace ").concat(u," for language ").concat(l," failed"),c),!c&&f&&o.logger.log("".concat(s,"loaded namespace ").concat(u," for language ").concat(l),f),o.loaded(i,c,f)})}},{key:"saveMissing",value:function(i,o,s,a,l){var u=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{};if(this.services.utils&&this.services.utils.hasLoadedNamespace&&!this.services.utils.hasLoadedNamespace(o)){this.logger.warn('did not save key "'.concat(s,'" as the namespace "').concat(o,'" 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}s==null||s===""||(this.backend&&this.backend.create&&this.backend.create(i,o,s,a,null,vd(vd({},u),{},{isUpdate:l})),!(!i||!i[0])&&this.store.addResource(i[0],o,s,a))}}]),n}(wn);function Hx(){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:!0,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:function(t){var n={};if(mn(t[1])==="object"&&(n=t[1]),typeof t[1]=="string"&&(n.defaultValue=t[1]),typeof t[2]=="string"&&(n.tDescription=t[2]),mn(t[2])==="object"||mn(t[3])==="object"){var r=t[3]||t[2];Object.keys(r).forEach(function(i){n[i]=r[i]})}return n},interpolation:{escapeValue:!0,format:function(t,n,r,i){return t},prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0}}}function yd(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 Sd(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 kt(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Zi(){}function Kx(e){var t=Object.getOwnPropertyNames(Object.getPrototypeOf(e));t.forEach(function(n){typeof e[n]=="function"&&(e[n]=e[n].bind(e))})}var Xo=function(e){xs(n,e);var t=Vx(n);function n(){var r,i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},o=arguments.length>1?arguments[1]:void 0;if(wt(this,n),r=t.call(this),Ps&&wn.call(vn(r)),r.options=yd(i),r.services={},r.logger=Ct,r.modules={external:[]},Kx(vn(r)),o&&!r.isInitialized&&!i.isClone){if(!r.options.initImmediate)return r.init(i,o),Ti(r,vn(r));setTimeout(function(){r.init(i,o)},0)}return r}return xt(n,[{key:"init",value:function(){var i=this,o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},s=arguments.length>1?arguments[1]:void 0;typeof o=="function"&&(s=o,o={}),!o.defaultNS&&o.defaultNS!==!1&&o.ns&&(typeof o.ns=="string"?o.defaultNS=o.ns:o.ns.indexOf("translation")<0&&(o.defaultNS=o.ns[0]));var a=Hx();this.options=kt(kt(kt({},a),this.options),yd(o)),this.options.compatibilityAPI!=="v1"&&(this.options.interpolation=kt(kt({},a.interpolation),this.options.interpolation)),o.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=o.keySeparator),o.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=o.nsSeparator);function l(v){return v?typeof v=="function"?new v:v:null}if(!this.options.isClone){this.modules.logger?Ct.init(l(this.modules.logger),this.options):Ct.init(null,this.options);var u;this.modules.formatter?u=this.modules.formatter:typeof Intl<"u"&&(u=$x);var c=new Tx(this.options);this.store=new bx(this.options.resources,this.options);var f=this.services;f.logger=Ct,f.resourceStore=this.store,f.languageUtils=c,f.pluralResolver=new Mx(c,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),u&&(!this.options.interpolation.format||this.options.interpolation.format===a.interpolation.format)&&(f.formatter=l(u),f.formatter.init(f,this.options),this.options.interpolation.format=f.formatter.format.bind(f.formatter)),f.interpolator=new jx(this.options),f.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},f.backendConnector=new Qx(l(this.modules.backend),f.resourceStore,f,this.options),f.backendConnector.on("*",function(v){for(var h=arguments.length,m=new Array(h>1?h-1:0),S=1;S1?h-1:0),S=1;S0&&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");var p=["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"];p.forEach(function(v){i[v]=function(){var h;return(h=i.store)[v].apply(h,arguments)}});var g=["addResource","addResources","addResourceBundle","removeResourceBundle"];g.forEach(function(v){i[v]=function(){var h;return(h=i.store)[v].apply(h,arguments),i}});var y=$r(),x=function(){var h=function(S,_){i.isInitialized&&!i.initializedStoreOnce&&i.logger.warn("init: i18next is already initialized. You should call init just once!"),i.isInitialized=!0,i.options.isClone||i.logger.log("initialized",i.options),i.emit("initialized",i.options),y.resolve(_),s(S,_)};if(i.languages&&i.options.compatibilityAPI!=="v1"&&!i.isInitialized)return h(null,i.t.bind(i));i.changeLanguage(i.options.lng,h)};return this.options.resources||!this.options.initImmediate?x():setTimeout(x,0),y}},{key:"loadResources",value:function(i){var o=this,s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Zi,a=s,l=typeof i=="string"?i:this.language;if(typeof i=="function"&&(a=i),!this.options.resources||this.options.partialBundledLanguages){if(l&&l.toLowerCase()==="cimode")return a();var u=[],c=function(p){if(!!p){var g=o.services.languageUtils.toResolveHierarchy(p);g.forEach(function(y){u.indexOf(y)<0&&u.push(y)})}};if(l)c(l);else{var f=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);f.forEach(function(d){return c(d)})}this.options.preload&&this.options.preload.forEach(function(d){return c(d)}),this.services.backendConnector.load(u,this.options.ns,function(d){!d&&!o.resolvedLanguage&&o.language&&o.setResolvedLanguage(o.language),a(d)})}else a(null)}},{key:"reloadResources",value:function(i,o,s){var a=$r();return i||(i=this.languages),o||(o=this.options.ns),s||(s=Zi),this.services.backendConnector.reload(i,o,function(l){a.resolve(),s(l)}),a}},{key:"use",value:function(i){if(!i)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!i.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return i.type==="backend"&&(this.modules.backend=i),(i.type==="logger"||i.log&&i.warn&&i.error)&&(this.modules.logger=i),i.type==="languageDetector"&&(this.modules.languageDetector=i),i.type==="i18nFormat"&&(this.modules.i18nFormat=i),i.type==="postProcessor"&&Tg.addPostProcessor(i),i.type==="formatter"&&(this.modules.formatter=i),i.type==="3rdParty"&&this.modules.external.push(i),this}},{key:"setResolvedLanguage",value:function(i){if(!(!i||!this.languages)&&!(["cimode","dev"].indexOf(i)>-1))for(var o=0;o-1)&&this.store.hasLanguageSomeTranslations(s)){this.resolvedLanguage=s;break}}}},{key:"changeLanguage",value:function(i,o){var s=this;this.isLanguageChangingTo=i;var a=$r();this.emit("languageChanging",i);var l=function(d){s.language=d,s.languages=s.services.languageUtils.toResolveHierarchy(d),s.resolvedLanguage=void 0,s.setResolvedLanguage(d)},u=function(d,p){p?(l(p),s.translator.changeLanguage(p),s.isLanguageChangingTo=void 0,s.emit("languageChanged",p),s.logger.log("languageChanged",p)):s.isLanguageChangingTo=void 0,a.resolve(function(){return s.t.apply(s,arguments)}),o&&o(d,function(){return s.t.apply(s,arguments)})},c=function(d){!i&&!d&&s.services.languageDetector&&(d=[]);var p=typeof d=="string"?d:s.services.languageUtils.getBestMatchFromCodes(d);p&&(s.language||l(p),s.translator.language||s.translator.changeLanguage(p),s.services.languageDetector&&s.services.languageDetector.cacheUserLanguage(p)),s.loadResources(p,function(g){u(g,p)})};return!i&&this.services.languageDetector&&!this.services.languageDetector.async?c(this.services.languageDetector.detect()):!i&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect(c):c(i),a}},{key:"getFixedT",value:function(i,o,s){var a=this,l=function u(c,f){var d;if(mn(f)!=="object"){for(var p=arguments.length,g=new Array(p>2?p-2:0),y=2;y1&&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;var a=this.resolvedLanguage||this.languages[0],l=this.options?this.options.fallbackLng:!1,u=this.languages[this.languages.length-1];if(a.toLowerCase()==="cimode")return!0;var c=function(p,g){var y=o.services.backendConnector.state["".concat(p,"|").concat(g)];return y===-1||y===2};if(s.precheck){var f=s.precheck(this,c);if(f!==void 0)return f}return!!(this.hasResourceBundle(a,i)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||c(a,i)&&(!l||c(u,i)))}},{key:"loadNamespaces",value:function(i,o){var s=this,a=$r();return this.options.ns?(typeof i=="string"&&(i=[i]),i.forEach(function(l){s.options.ns.indexOf(l)<0&&s.options.ns.push(l)}),this.loadResources(function(l){a.resolve(),o&&o(l)}),a):(o&&o(),Promise.resolve())}},{key:"loadLanguages",value:function(i,o){var s=$r();typeof i=="string"&&(i=[i]);var a=this.options.preload||[],l=i.filter(function(u){return a.indexOf(u)<0});return l.length?(this.options.preload=a.concat(l),this.loadResources(function(u){s.resolve(),o&&o(u)}),s):(o&&o(),Promise.resolve())}},{key:"dir",value:function(i){if(i||(i=this.resolvedLanguage||(this.languages&&this.languages.length>0?this.languages[0]:this.language)),!i)return"rtl";var o=["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"];return o.indexOf(this.services.languageUtils.getLanguagePartFromCode(i))>-1||i.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}},{key:"cloneInstance",value:function(){var i=this,o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Zi,a=kt(kt(kt({},this.options),o),{isClone:!0}),l=new n(a);(o.debug!==void 0||o.prefix!==void 0)&&(l.logger=l.logger.clone(o));var u=["store","services","language"];return u.forEach(function(c){l[c]=i[c]}),l.services=kt({},this.services),l.services.utils={hasLoadedNamespace:l.hasLoadedNamespace.bind(l)},l.translator=new dd(l.services,l.options),l.translator.on("*",function(c){for(var f=arguments.length,d=new Array(f>1?f-1:0),p=1;p0&&arguments[0]!==void 0?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;return new Xo(e,t)});var Le=Xo.createInstance();Le.createInstance=Xo.createInstance;Le.createInstance;Le.init;Le.loadResources;Le.reloadResources;Le.use;Le.changeLanguage;Le.getFixedT;Le.t;Le.exists;Le.setDefaultNamespace;Le.hasLoadedNamespace;Le.loadNamespaces;Le.loadLanguages;const Wx="Stable Diffusion UI",Gx="",Yx={home:"Home",history:"History",community:"Community",settings:"Settings"},Jx={"status-starting":"Stable Diffusion is starting...","status-ready":"Stable Diffusion is ready to use!","status-error":"Stable Diffusion is not running!","editor-title":"Prompt","initial-img-txt":"Initial Image: (optional)","initial-img-btn":"Browse...","initial-img-text2":"No file selected.","make-img-btn":"Make Image","make-img-btn-stop":"Stop"},Xx={"base-img":"Use base image:",seed:"Seed:","amount-of-img":"Amount of images to make:","how-many":"How many at once:","stream-img":"Stream images (this will slow down image generation):",width:"Width:",height:"Height:",sampler:"Sampler:",steps:"Number of inference steps:","guide-scale":"Guidance Scale:","prompt-str":"Prompt Strength:","live-preview":"Show a live preview of the image (disable this for faster image generation)","fix-face":"Fix incorrect faces and eyes (uses GFPGAN)",ups:"Upscale the image to 4x resolution using:","no-ups":"No Upscaling",corrected:"Show only the corrected/upscaled image"},Zx={txt:"Image Modifiers (art styles, tags etc)"},eP={"use-btn":"Use Image","use-btn2":"Use Image and Tags"},tP={fave:"Favorites Only",search:"Search"},nP={ast:"Automatically save to","ast-disc":"File path to auto save your creations",place:"File path",cps:"Cross profile sharing","cps-disc":"Profiles will see suggestions from each other.",acb:"Allow cloud backup","acb-disc":"A button will show up for images on hover","acb-place":"Choose your","acc-api":"Api key","acb-api-place":"Your API key",save:"SAVE"},rP=`If you found this project useful and want to help keep it alive, please to help cover the cost of development and maintenance! Thank you for your support!
+
+Please feel free to join the discord community or file an issue if you have any problems or suggestions in using this interface.
+
+Disclaimer: The authors of this project are not responsible for any content generated using this interface.
+
+This license of this software forbids you from sharing any content that violates any laws, produce any harm to a person, disseminate any personal information that would be meant for harm,
+spread misinformation and target vulnerable groups. For the full list of restrictions please read the license.
+
+By using this software, you consent to the terms and conditions of the license.
+`,iP={title:Wx,description:Gx,navbar:Yx,"land-cre":{cp:"Create Profile","cp-place":"Profile name",pp:"Profile Picture","pp-disc":"",ast:"Automatically save to","ast-disc":"File path to auto save your creations",place:"File path",cre:"Create"},"land-pre":{user:"Username",add:"Add Profile"},home:Jx,"in-paint":{txt:"In-Painting (select the area which the AI will paint into)",clear:"Clear"},settings:Xx,tags:Zx,"preview-prompt":{part1:'Type a prompt and press the "Make Image" button.',part2:`You can set an "Initial Image" if you want to guide the AI.
+`,part3:`You can also add modifiers like "Realistic", "Pencil Sketch", "ArtStation" etc by browsing through the "Image Modifiers" section and selecting the desired modifiers.
+`,part4:'Click "Advanced Settings" for additional settings like seed, image size, number of images to generate etc.',part5:"Enjoy! :)"},"current-task":"Current task","recent-create":"Recently Created",popup:eP,history:tP,"advanced-settings":{sound:"Play sound on task completion","sound-disc":"Will play a sound so user can hear when image is done.",turbo:"Turbo mode","turbo-disc":"Generates images faster, but uses an additional 1 GB of GPU memory",cpu:"Use CPU instead of GPU","cpu-disc":"Warning: this will be *very* slow",gpu:"Use full precision","gpu-disc":"(for GPU-only. warning: this will consume more VRAM)",beta:"Beta Features","beta-disc":`Get the latest features immediately (but could be less stable).
+Please restart the program after changing this.`,save:"SAVE"},storage:nP,import:{"imp-btn":"IMPORT","exp-btn":"EXPORT",disc:"It is a good idea to leave the exported file as it is. Otherwise it may not import correctly","disc:2":"When importing, only profiles that are not already present on the will be added."},about:rP},oP="Stable Diffusion UI",sP="",aP={home:"Home",history:"History",community:"Community",settings:"Settings"},lP={"status-starting":"Stable Diffusion is starting...","status-ready":"Stable Diffusion is ready to use!","status-error":"Stable Diffusion is not running!","editor-title":"Prompt","initial-img-txt":"Initial Image: (optional)","initial-img-btn":"Browse...","initial-img-text2":"No file selected.","make-img-btn":"Make Image","make-img-btn-stop":"Stop"},uP={"base-img":"Use base image:",seed:"Seed:","amount-of-img":"Amount of images to make:","how-many":"How many at once:",width:"Width:",height:"Height:",steps:"Number of inference steps:","guide-scale":"Guidance Scale:","prompt-str":"Prompt Strength:","live-preview":"Show a live preview of the image (disable this for faster image generation)","fix-face":"Fix incorrect faces and eyes (uses GFPGAN)",ups:"Upscale the image to 4x resolution using:","no-ups":"No Upscaling",corrected:"Show only the corrected/upscaled image"},cP={txt:"Image Modifiers (art styles, tags etc)"},fP={"use-btn":"Use Image","use-btn2":"Use Image and Tags"},dP={fave:"Favorites Only",search:"Search"},pP={ast:"Automatically save to","ast-disc":"File path to auto save your creations",place:"File path",cps:"Cross profile sharing","cps-disc":"Profiles will see suggestions from each other.",acb:"Allow cloud backup","acb-disc":"A button will show up for images on hover","acb-place":"Choose your","acc-api":"Api key","acb-api-place":"Your API key",save:"SAVE"},hP=`If you found this project useful and want to help keep it alive, please to help cover the cost of development and maintenance! Thank you for your support!
+
+Please feel free to join the discord community or file an issue if you have any problems or suggestions in using this interface.
+
+Disclaimer: The authors of this project are not responsible for any content generated using this interface.
+
+This license of this software forbids you from sharing any content that violates any laws, produce any harm to a person, disseminate any personal information that would be meant for harm,
+spread misinformation and target vulnerable groups. For the full list of restrictions please read the license.
+
+By using this software, you consent to the terms and conditions of the license.
+`,gP={title:oP,description:sP,navbar:aP,"land-cre":{cp:"Create Profile","cp-place":"Profile name",pp:"Profile Picture","pp-disc":"",ast:"Automatically save to","ast-disc":"File path to auto save your creations",place:"File path",cre:"Create"},"land-pre":{user:"Username",add:"Add Profile"},home:lP,"in-paint":{txt:"In-Painting (select the area which the AI will paint into)",clear:"Clear"},settings:uP,tags:cP,"preview-prompt":{part1:'Type a prompt and press the "Make Image" button.',part2:`You can set an "Initial Image" if you want to guide the AI.
+`,part3:`You can also add modifiers like "Realistic", "Pencil Sketch", "ArtStation" etc by browsing through the "Image Modifiers" section and selecting the desired modifiers.
+`,part4:'Click "Advanced Settings" for additional settings like seed, image size, number of images to generate etc.',part5:"Enjoy! :)"},"current-task":"Current task","recent-create":"Recently Created",popup:fP,history:dP,"advanced-settings":{sound:"Play sound on task completion","sound-disc":"Will play a sound so user can hear when image is done.",turbo:"Turbo mode","turbo-disc":"Generates images faster, but uses an additional 1 GB of GPU memory",cpu:"Use CPU instead of GPU","cpu-disc":"Warning: this will be *very* slow",gpu:"Use full precision","gpu-disc":"(for GPU-only. warning: this will consume more VRAM)",beta:"Beta Features","beta-disc":`Get the latest features immediately (but could be less stable).
+Please restart the program after changing this.`,save:"SAVE"},storage:pP,import:{"imp-btn":"IMPORT","exp-btn":"EXPORT",disc:"It is a good idea to leave the exported file as it is. Otherwise it may not import correctly","disc:2":"When importing, only profiles that are not already present on the will be added."},about:hP},mP={en:{translation:iP},es:{translation:gP}};Le.use(yS).init({lng:"en",interpolation:{escapeValue:!1},resources:mP}).then(()=>{console.log("i18n initialized")}).catch(e=>{console.error("i18n initialization failed",e)}).finally(()=>{console.log("i18n initialization finished")});const vP=new n0;function yP(){return w(r0,{location:vP,routes:[{path:"/",element:w(hx,{})},{path:"/settings",element:w(gx,{})}]})}const SP=new Oy({defaultOptions:{queries:{refetchOnWindowFocus:!1,refetchOnReconnect:!1,refetchOnMount:!1,staleTime:1/0,cacheTime:1/0}}});zy();fa.createRoot(document.getElementById("root")).render(w(G.StrictMode,{children:R(Cy,{client:SP,children:[w(yP,{}),w(Dy,{initialIsOpen:!0})]})}));
diff --git a/ui/index.html b/ui/index.html
index 9d681e97..93423eb6 100644
--- a/ui/index.html
+++ b/ui/index.html
@@ -1,10 +1,14 @@
+
-
+
@@ -15,7 +19,7 @@
-
Stable Diffusion UI v2.2
+ Stable Diffusion UI v2.195
-
+