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/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..12d28012 100644
--- a/ui/index.html
+++ b/ui/index.html
@@ -1,3 +1,7 @@
+
diff --git a/ui/sd_internal/runtime.py b/ui/sd_internal/runtime.py
index 7c20eff9..a7de2666 100644
--- a/ui/sd_internal/runtime.py
+++ b/ui/sd_internal/runtime.py
@@ -380,7 +380,13 @@ def do_mk_img(req: Request):
if req.stream_progress_updates:
n_steps = opt_ddim_steps if req.init_image is None else t_enc
- progress = {"step": i, "total_steps": n_steps}
+ progress = {
+ "status": "progress",
+ #"progress": (i + 1) / n_steps,
+ "progress": {
+ "step": i, "total_steps": n_steps
+ }
+ }
if req.stream_image_progress and i % 5 == 0:
partial_images = []
diff --git a/ui/server.py b/ui/server.py
index 5d7f1bfd..4161f170 100644
--- a/ui/server.py
+++ b/ui/server.py
@@ -19,12 +19,26 @@ from fastapi import FastAPI, HTTPException
from fastapi.staticfiles import StaticFiles
from starlette.responses import FileResponse, StreamingResponse
from pydantic import BaseModel
+# this is needed for development.
+from fastapi.middleware.cors import CORSMiddleware
import logging
from sd_internal import Request, Response
app = FastAPI()
+# we need to be able to run a local server for the UI (9001)
+# and still be able to hit our python port (9000)
+origins = ["*"]
+app.add_middleware(
+ CORSMiddleware,
+ allow_origins=origins,
+ allow_credentials=True,
+ allow_methods=["*"],
+ allow_headers=["*"],
+)
+
+
model_loaded = False
model_is_loading = False
@@ -34,7 +48,9 @@ outpath = os.path.join(os.path.expanduser("~"), OUTPUT_DIRNAME)
# don't show access log entries for URLs that start with the given prefix
ACCESS_LOG_SUPPRESS_PATH_PREFIXES = ['/ping', '/modifier-thumbnails']
-app.mount('/media', StaticFiles(directory=os.path.join(SD_UI_DIR, 'media/')), name="media")
+# app.mount('/media', StaticFiles(directory=os.path.join(SD_UI_DIR, 'media/')), name="media")
+app.mount('/media', StaticFiles(directory=os.path.join(SD_UI_DIR, 'frontend/assets/media/')), name="media")
+
# defaults from https://huggingface.co/blog/stable_diffusion
class ImageRequest(BaseModel):
@@ -71,7 +87,18 @@ class SetAppConfigRequest(BaseModel):
@app.get('/')
def read_root():
headers = {"Cache-Control": "no-cache, no-store, must-revalidate", "Pragma": "no-cache", "Expires": "0"}
- return FileResponse(os.path.join(SD_UI_DIR, 'index.html'), headers=headers)
+ return FileResponse(os.path.join(SD_UI_DIR,'frontend/dist/index.html'), headers=headers)
+
+# then get the js files
+@app.get('/index.js')
+def read_scripts():
+ return FileResponse(os.path.join(SD_UI_DIR, 'frontend/dist/index.js'))
+
+#then get the css files
+@app.get('/index.css')
+def read_styles():
+ return FileResponse(os.path.join(SD_UI_DIR, 'frontend/dist/index.css'))
+
@app.get('/ping')
async def ping():
@@ -307,10 +334,20 @@ def getModels():
return models
+# moved these to the root for easier pathing
+# TODO: change the vite config for public files
+@app.get('/ding.mp3')
+def read_ding():
+ return FileResponse(os.path.join(SD_UI_DIR, 'frontend/assets/ding.mp3'))
+
+@app.get('/kofi.png')
+def read_kofi():
+ return FileResponse(os.path.join(SD_UI_DIR, 'frontend/assets/kofi.png'))
+
@app.get('/modifiers.json')
def read_modifiers():
headers = {"Cache-Control": "no-cache, no-store, must-revalidate", "Pragma": "no-cache", "Expires": "0"}
- return FileResponse(os.path.join(SD_UI_DIR, 'modifiers.json'), headers=headers)
+ return FileResponse(os.path.join(SD_UI_DIR, 'frontend/assets/modifiers.json'), headers=headers)
@app.get('/output_dir')
def read_home_dir():