From 355870a75049fbc9bb91d56a641ac4b051060c5c Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Fri, 7 Oct 2022 20:07:15 +0530 Subject: [PATCH] Revert "Merge pull request #294 from cmdr2/main" This reverts commit 1e3b4f99698b10679ad620997118f30acb177f85, reversing changes made to e0c0935d3a9b17d655da976ad4fb9afc1a813e0f. --- .gitattributes | 1 + .gitignore | 6 + README.md | 3 +- Troubleshooting.md | 2 +- scripts/Developer Console.cmd | 14 - scripts/developer_console.sh | 17 - scripts/on_env_start.bat | 1 - scripts/on_env_start.sh | 1 - scripts/on_sd_start.bat | 6 - scripts/on_sd_start.sh | 24 +- ui/{media => frontend/assets}/ding.mp3 | Bin ui/{media => frontend/assets}/kofi.png | Bin .../artist/artstation/landscape-0.jpg | Bin .../artist/artstation/portrait-0.jpg | Bin .../by_agnes_lawrence_pelton/landscape-0.jpg | Bin .../by_agnes_lawrence_pelton/portrait-0.jpg | Bin .../artist/by_akihito_yoshida/landscape-0.jpg | Bin .../artist/by_akihito_yoshida/portrait-0.jpg | Bin .../artist/by_alex_grey/landscape-0.jpg | Bin .../artist/by_alex_grey/portrait-0.jpg | Bin .../by_alexander_jansson/landscape-0.jpg | Bin .../by_alexander_jansson/portrait-0.jpg | Bin .../artist/by_alphonse_mucha/landscape-0.jpg | Bin .../artist/by_alphonse_mucha/portrait-0.jpg | Bin .../artist/by_andy_warhol/landscape-0.jpg | Bin .../artist/by_andy_warhol/portrait-0.jpg | Bin .../artist/by_artgerm/landscape-0.jpg | Bin .../artist/by_artgerm/portrait-0.jpg | Bin .../artist/by_asaf_hanuka/landscape-0.jpg | Bin .../artist/by_asaf_hanuka/portrait-0.jpg | Bin .../by_aubrey_beardsley/landscape-0.jpg | Bin .../artist/by_aubrey_beardsley/portrait-0.jpg | Bin .../artist/by_banksy/landscape-0.jpg | Bin .../artist/by_banksy/portrait-0.jpg | Bin .../artist/by_beeple/landscape-0.jpg | Bin .../artist/by_beeple/portrait-0.jpg | Bin .../artist/by_ben_enwonwu/landscape-0.jpg | Bin .../artist/by_ben_enwonwu/portrait-0.jpg | Bin .../artist/by_bob_eggleton/landscape-0.jpg | Bin .../artist/by_bob_eggleton/portrait-0.jpg | Bin .../landscape-0.jpg | Bin .../portrait-0.jpg | Bin .../by_caspar_david_friedrich/landscape-0.jpg | Bin .../by_caspar_david_friedrich/portrait-0.jpg | Bin .../artist/by_chris_foss/landscape-0.jpg | Bin .../artist/by_chris_foss/portrait-0.jpg | Bin .../artist/by_claude_monet/landscape-0.jpg | Bin .../artist/by_claude_monet/portrait-0.jpg | Bin .../artist/by_dan_mumford/landscape-0.jpg | Bin .../artist/by_dan_mumford/portrait-0.jpg | Bin .../artist/by_david_mann/landscape-0.jpg | Bin .../artist/by_david_mann/portrait-0.jpg | Bin .../by_diego_vela_zquez/landscape-0.jpg | Bin .../artist/by_diego_vela_zquez/portrait-0.jpg | Bin .../landscape-0.jpg | Bin .../portrait-0.jpg | Bin .../artist/by_e_douard_manet/landscape-0.jpg | Bin .../artist/by_e_douard_manet/portrait-0.jpg | Bin .../artist/by_esao_andrews/landscape-0.jpg | Bin .../artist/by_esao_andrews/portrait-0.jpg | Bin .../artist/by_frida_kahlo/landscape-0.jpg | Bin .../artist/by_frida_kahlo/portrait-0.jpg | Bin .../landscape-0.jpg | Bin .../by_gediminas_pranckevicius/portrait-0.jpg | Bin .../by_georgia_o_keeffe/landscape-0.jpg | Bin .../artist/by_georgia_o_keeffe/portrait-0.jpg | Bin .../artist/by_greg_rutkowski/landscape-0.jpg | Bin .../artist/by_greg_rutkowski/portrait-0.jpg | Bin .../artist/by_gustave_dore_/landscape-0.jpg | Bin .../artist/by_gustave_dore_/portrait-0.jpg | Bin .../artist/by_gustave_klimt/landscape-0.jpg | Bin .../artist/by_gustave_klimt/portrait-0.jpg | Bin .../artist/by_h_r_giger/landscape-0.jpg | Bin .../artist/by_h_r_giger/portrait-0.jpg | Bin .../artist/by_hayao_miyazaki/landscape-0.jpg | Bin .../artist/by_hayao_miyazaki/portrait-0.jpg | Bin .../artist/by_henri_matisse/landscape-0.jpg | Bin .../artist/by_henri_matisse/portrait-0.jpg | Bin .../artist/by_hp_lovecraft/landscape-0.jpg | Bin .../artist/by_hp_lovecraft/portrait-0.jpg | Bin .../artist/by_ivan_shishkin/landscape-0.jpg | Bin .../artist/by_ivan_shishkin/portrait-0.jpg | Bin .../artist/by_jack_kirby/landscape-0.jpg | Bin .../artist/by_jack_kirby/portrait-0.jpg | Bin .../artist/by_jackson_pollock/landscape-0.jpg | Bin .../artist/by_jackson_pollock/portrait-0.jpg | Bin .../artist/by_james_jean/landscape-0.jpg | Bin .../artist/by_james_jean/portrait-0.jpg | Bin .../artist/by_jim_burns/landscape-0.jpg | Bin .../artist/by_jim_burns/portrait-0.jpg | Bin .../by_johannes_vermeer/landscape-0.jpg | Bin .../artist/by_johannes_vermeer/portrait-0.jpg | Bin .../landscape-0.jpg | Bin .../by_john_william_waterhouse/portrait-0.jpg | Bin .../by_katsushika_hokusai/landscape-0.jpg | Bin .../by_katsushika_hokusai/portrait-0.jpg | Bin .../by_kim_tschang_yeul/landscape-0.jpg | Bin .../artist/by_kim_tschang_yeul/portrait-0.jpg | Bin .../artist/by_ko_young_hoon/landscape-0.jpg | Bin .../artist/by_ko_young_hoon/portrait-0.jpg | Bin .../by_leonardo_da_vinci/landscape-0.jpg | Bin .../by_leonardo_da_vinci/portrait-0.jpg | Bin .../artist/by_lisa_frank/landscape-0.jpg | Bin .../artist/by_lisa_frank/portrait-0.jpg | Bin .../artist/by_m_c_escher/landscape-0.jpg | Bin .../artist/by_m_c_escher/portrait-0.jpg | Bin .../artist/by_mahmoud_sai_d/landscape-0.jpg | Bin .../artist/by_mahmoud_sai_d/portrait-0.jpg | Bin .../artist/by_makoto_shinkai/landscape-0.jpg | Bin .../artist/by_makoto_shinkai/portrait-0.jpg | Bin .../artist/by_marc_simonetti/landscape-0.jpg | Bin .../artist/by_marc_simonetti/portrait-0.jpg | Bin .../artist/by_mark_brooks/landscape-0.jpg | Bin .../artist/by_mark_brooks/portrait-0.jpg | Bin .../artist/by_michelangelo/landscape-0.jpg | Bin .../artist/by_michelangelo/portrait-0.jpg | Bin .../artist/by_pablo_picasso/landscape-0.jpg | Bin .../artist/by_pablo_picasso/portrait-0.jpg | Bin .../artist/by_paul_klee/landscape-0.jpg | Bin .../artist/by_paul_klee/portrait-0.jpg | Bin .../by_peter_mohrbacher/landscape-0.jpg | Bin .../artist/by_peter_mohrbacher/portrait-0.jpg | Bin .../by_pierre-auguste_renoir/landscape-0.jpg | Bin .../by_pierre-auguste_renoir/portrait-0.jpg | Bin .../landscape-0.jpg | Bin .../by_pixar_animation_studios/portrait-0.jpg | Bin .../artist/by_rembrandt/landscape-0.jpg | Bin .../artist/by_rembrandt/portrait-0.jpg | Bin .../artist/by_richard_dadd/landscape-0.jpg | Bin .../artist/by_richard_dadd/portrait-0.jpg | Bin .../artist/by_rossdraws/landscape-0.jpg | Bin .../artist/by_rossdraws/portrait-0.jpg | Bin .../artist/by_salvador_dali_/landscape-0.jpg | Bin .../artist/by_salvador_dali_/portrait-0.jpg | Bin .../artist/by_sam_does_arts/landscape-0.jpg | Bin .../artist/by_sam_does_arts/portrait-0.jpg | Bin .../by_sandro_botticelli/landscape-0.jpg | Bin .../by_sandro_botticelli/portrait-0.jpg | Bin .../artist/by_ted_nasmith/landscape-0.jpg | Bin .../artist/by_ted_nasmith/portrait-0.jpg | Bin .../artist/by_ten_hundred/landscape-0.jpg | Bin .../artist/by_ten_hundred/portrait-0.jpg | Bin .../artist/by_thomas_kinkade/landscape-0.jpg | Bin .../artist/by_thomas_kinkade/portrait-0.jpg | Bin .../landscape-0.jpg | Bin .../portrait-0.jpg | Bin .../artist/by_victo_ngai/landscape-0.jpg | Bin .../artist/by_victo_ngai/portrait-0.jpg | Bin .../artist/by_vincent_di_fate/landscape-0.jpg | Bin .../artist/by_vincent_di_fate/portrait-0.jpg | Bin .../by_vincent_van_gogh/landscape-0.jpg | Bin .../artist/by_vincent_van_gogh/portrait-0.jpg | Bin .../artist/by_wes_anderson/landscape-0.jpg | Bin .../artist/by_wes_anderson/portrait-0.jpg | Bin .../artist/by_wlop/landscape-0.jpg | Bin .../artist/by_wlop/portrait-0.jpg | Bin .../artist/by_yoshitaka_amano/landscape-0.jpg | Bin .../artist/by_yoshitaka_amano/portrait-0.jpg | Bin .../camera/aerial_view/landscape-0.jpg | Bin .../camera/aerial_view/portrait-0.jpg | Bin .../camera/canon50/landscape-0.jpg | Bin .../camera/canon50/portrait-0.jpg | Bin .../camera/cinematic/landscape-0.jpg | Bin .../camera/cinematic/portrait-0.jpg | Bin .../camera/close-up/landscape-0.jpg | Bin .../camera/close-up/portrait-0.jpg | Bin .../camera/color_grading/landscape-0.jpg | Bin .../camera/color_grading/portrait-0.jpg | Bin .../camera/dramatic/landscape-0.jpg | Bin .../camera/dramatic/portrait-0.jpg | Bin .../camera/film_grain/landscape-0.jpg | Bin .../camera/film_grain/portrait-0.jpg | Bin .../camera/fisheye_lens/landscape-0.jpg | Bin .../camera/fisheye_lens/portrait-0.jpg | Bin .../camera/glamor_shot/landscape-0.jpg | Bin .../camera/glamor_shot/portrait-0.jpg | Bin .../camera/golden_hour/landscape-0.jpg | Bin .../camera/golden_hour/portrait-0.jpg | Bin .../camera/hd/landscape-0.jpg | Bin .../camera/hd/portrait-0.jpg | Bin .../camera/landscape/landscape-0.jpg | Bin .../camera/landscape/portrait-0.jpg | Bin .../camera/lens_flare/landscape-0.jpg | Bin .../camera/lens_flare/portrait-0.jpg | Bin .../camera/macro/landscape-0.jpg | Bin .../camera/macro/portrait-0.jpg | Bin .../camera/photoshoot/landscape-0.jpg | Bin .../camera/photoshoot/portrait-0.jpg | Bin .../camera/polaroid/landscape-0.jpg | Bin .../camera/polaroid/portrait-0.jpg | Bin .../camera/portrait/landscape-0.jpg | Bin .../camera/portrait/portrait-0.jpg | Bin .../camera/studio_lighting/landscape-0.jpg | Bin .../camera/studio_lighting/portrait-0.jpg | Bin .../camera/vintage/landscape-0.jpg | Bin .../camera/vintage/portrait-0.jpg | Bin .../camera/war_photography/landscape-0.jpg | Bin .../camera/war_photography/portrait-0.jpg | Bin .../camera/white_balance/landscape-0.jpg | Bin .../camera/white_balance/portrait-0.jpg | Bin .../wildlife_photography/landscape-0.jpg | Bin .../wildlife_photography/portrait-0.jpg | Bin .../etching/landscape-0.jpg | Bin .../etching/portrait-0.jpg | Bin .../linocut/landscape-0.jpg | Bin .../linocut/portrait-0.jpg | Bin .../paper-mache/landscape-0.jpg | Bin .../paper-mache/portrait-0.jpg | Bin .../paper_model/landscape-0.jpg | Bin .../paper_model/portrait-0.jpg | Bin .../papercutting/landscape-0.jpg | Bin .../papercutting/portrait-0.jpg | Bin .../pyrography/landscape-0.jpg | Bin .../pyrography/portrait-0.jpg | Bin .../wood-carving/landscape-0.jpg | Bin .../wood-carving/portrait-0.jpg | Bin .../cgi_rendering/3d_render/landscape-0.jpg | Bin .../cgi_rendering/3d_render/portrait-0.jpg | Bin .../corona_render/landscape-0.jpg | Bin .../corona_render/portrait-0.jpg | Bin .../creature_design/landscape-0.jpg | Bin .../creature_design/portrait-0.jpg | Bin .../cycles_render/landscape-0.jpg | Bin .../cycles_render/portrait-0.jpg | Bin .../detailed_render/landscape-0.jpg | Bin .../detailed_render/portrait-0.jpg | Bin .../environment_design/landscape-0.jpg | Bin .../environment_design/portrait-0.jpg | Bin .../glass_caustics/landscape-0.jpg | Bin .../glass_caustics/portrait-0.jpg | Bin .../global_illumination/landscape-0.jpg | Bin .../global_illumination/portrait-0.jpg | Bin .../intricate_environment/landscape-0.jpg | Bin .../intricate_environment/portrait-0.jpg | Bin .../cgi_rendering/lsd_render/landscape-0.jpg | Bin .../cgi_rendering/lsd_render/portrait-0.jpg | Bin .../octane_render/landscape-0.jpg | Bin .../octane_render/portrait-0.jpg | Bin .../cgi_rendering/pbr/landscape-0.jpg | Bin .../cgi_rendering/pbr/portrait-0.jpg | Bin .../subsurface_scattering/landscape-0.jpg | Bin .../subsurface_scattering/portrait-0.jpg | Bin .../cgi_software/3d_model/landscape-0.jpg | Bin .../cgi_software/3d_model/portrait-0.jpg | Bin .../cgi_software/3d_sculpt/landscape-0.jpg | Bin .../cgi_software/3d_sculpt/portrait-0.jpg | Bin .../3ds_max_model/landscape-0.jpg | Bin .../cgi_software/3ds_max_model/portrait-0.jpg | Bin .../blender_model/landscape-0.jpg | Bin .../cgi_software/blender_model/portrait-0.jpg | Bin .../cinema4d_model/landscape-0.jpg | Bin .../cinema4d_model/portrait-0.jpg | Bin .../cgi_software/maya_model/landscape-0.jpg | Bin .../cgi_software/maya_model/portrait-0.jpg | Bin .../unreal_engine/landscape-0.jpg | Bin .../cgi_software/unreal_engine/portrait-0.jpg | Bin .../zbrush_sculpt/landscape-0.jpg | Bin .../cgi_software/zbrush_sculpt/portrait-0.jpg | Bin .../color/beautiful_lighting/landscape-0.jpg | Bin .../color/beautiful_lighting/portrait-0.jpg | Bin .../color/cold_color_palette/landscape-0.jpg | Bin .../color/cold_color_palette/portrait-0.jpg | Bin .../color/colorful/landscape-0.jpg | Bin .../color/colorful/portrait-0.jpg | Bin .../color/dynamic_lighting/landscape-0.jpg | Bin .../color/dynamic_lighting/portrait-0.jpg | Bin .../color/electric_colors/landscape-0.jpg | Bin .../color/electric_colors/portrait-0.jpg | Bin .../color/infrared/landscape-0.jpg | Bin .../color/infrared/portrait-0.jpg | Bin .../color/neon/landscape-0.jpg | Bin .../color/neon/portrait-0.jpg | Bin .../color/pastel/landscape-0.jpg | Bin .../color/pastel/portrait-0.jpg | Bin .../color/synthwave/landscape-0.jpg | Bin .../color/synthwave/portrait-0.jpg | Bin .../color/warm_color_palette/landscape-0.jpg | Bin .../color/warm_color_palette/portrait-0.jpg | Bin .../drawing_style/cel_shading/landscape-0.jpg | Bin .../drawing_style/cel_shading/portrait-0.jpg | Bin .../children_s_drawing/landscape-0.jpg | Bin .../children_s_drawing/portrait-0.jpg | Bin .../drawing_style/crosshatch/landscape-0.jpg | Bin .../drawing_style/crosshatch/portrait-0.jpg | Bin .../detailed_and_intricate/landscape-0.jpg | Bin .../detailed_and_intricate/portrait-0.jpg | Bin .../drawing_style/doodle/landscape-0.jpg | Bin .../drawing_style/doodle/portrait-0.jpg | Bin .../drawing_style/dot_art/landscape-0.jpg | Bin .../drawing_style/dot_art/portrait-0.jpg | Bin .../drawing_style/line_art/landscape-0.jpg | Bin .../drawing_style/line_art/portrait-0.jpg | Bin .../drawing_style/sketch/landscape-0.jpg | Bin .../drawing_style/sketch/portrait-0.jpg | Bin .../emotions/angry/landscape-0.jpg | Bin .../emotions/angry/portrait-0.jpg | Bin .../emotions/bitter/landscape-0.jpg | Bin .../emotions/bitter/portrait-0.jpg | Bin .../emotions/disgusted/landscape-0.jpg | Bin .../emotions/disgusted/portrait-0.jpg | Bin .../emotions/embarrassed/landscape-0.jpg | Bin .../emotions/embarrassed/portrait-0.jpg | Bin .../emotions/evil/landscape-0.jpg | Bin .../emotions/evil/portrait-0.jpg | Bin .../emotions/excited/landscape-0.jpg | Bin .../emotions/excited/portrait-0.jpg | Bin .../emotions/fear/landscape-0.jpg | Bin .../emotions/fear/portrait-0.jpg | Bin .../emotions/funny/landscape-0.jpg | Bin .../emotions/funny/portrait-0.jpg | Bin .../emotions/happy/landscape-0.jpg | Bin .../emotions/happy/portrait-0.jpg | Bin .../emotions/horrifying/landscape-0.jpg | Bin .../emotions/horrifying/portrait-0.jpg | Bin .../emotions/lonely/landscape-0.jpg | Bin .../emotions/lonely/portrait-0.jpg | Bin .../emotions/melancholic/landscape-0.jpg | Bin .../emotions/melancholic/portrait-0.jpg | Bin .../emotions/sad/landscape-0.jpg | Bin .../emotions/sad/portrait-0.jpg | Bin .../emotions/serene/landscape-0.jpg | Bin .../emotions/serene/portrait-0.jpg | Bin .../emotions/surprised/landscape-0.jpg | Bin .../emotions/surprised/portrait-0.jpg | Bin .../pen/chalk/landscape-0.jpg | Bin .../pen/chalk/portrait-0.jpg | Bin .../pen/colored_pencil/landscape-0.jpg | Bin .../pen/colored_pencil/portrait-0.jpg | Bin .../pen/graphite/landscape-0.jpg | Bin .../pen/graphite/portrait-0.jpg | Bin .../pen/ink/landscape-0.jpg | Bin .../pen/ink/portrait-0.jpg | Bin .../pen/oil_paint/landscape-0.jpg | Bin .../pen/oil_paint/portrait-0.jpg | Bin .../pen/pastel_art/landscape-0.jpg | Bin .../pen/pastel_art/portrait-0.jpg | Bin .../visual_style/16-bit/landscape-0.jpg | Bin .../visual_style/16-bit/portrait-0.jpg | Bin .../visual_style/2d/landscape-0.jpg | Bin .../visual_style/2d/portrait-0.jpg | Bin .../visual_style/8-bit/landscape-0.jpg | Bin .../visual_style/8-bit/portrait-0.jpg | Bin .../visual_style/anaglyph/landscape-0.jpg | Bin .../visual_style/anaglyph/portrait-0.jpg | Bin .../visual_style/anime/landscape-0.jpg | Bin .../visual_style/anime/portrait-0.jpg | Bin .../visual_style/art_nouveau/landscape-0.jpg | Bin .../visual_style/art_nouveau/portrait-0.jpg | Bin .../visual_style/baroque/landscape-0.jpg | Bin .../visual_style/baroque/portrait-0.jpg | Bin .../visual_style/bauhaus/landscape-0.jpg | Bin .../visual_style/bauhaus/portrait-0.jpg | Bin .../visual_style/cartoon/landscape-0.jpg | Bin .../visual_style/cartoon/portrait-0.jpg | Bin .../visual_style/cgi/landscape-0.jpg | Bin .../visual_style/cgi/portrait-0.jpg | Bin .../visual_style/comic_book/landscape-0.jpg | Bin .../visual_style/comic_book/portrait-0.jpg | Bin .../visual_style/concept_art/landscape-0.jpg | Bin .../visual_style/concept_art/portrait-0.jpg | Bin .../constructivist/landscape-0.jpg | Bin .../constructivist/portrait-0.jpg | Bin .../visual_style/cubist/landscape-0.jpg | Bin .../visual_style/cubist/portrait-0.jpg | Bin .../visual_style/dadaist/landscape-0.jpg | Bin .../visual_style/dadaist/portrait-0.jpg | Bin .../visual_style/digital_art/landscape-0.jpg | Bin .../visual_style/digital_art/portrait-0.jpg | Bin .../expressionist/landscape-0.jpg | Bin .../visual_style/expressionist/portrait-0.jpg | Bin .../visual_style/fantasy/landscape-0.jpg | Bin .../visual_style/fantasy/portrait-0.jpg | Bin .../visual_style/fauvist/landscape-0.jpg | Bin .../visual_style/fauvist/portrait-0.jpg | Bin .../visual_style/figurative/landscape-0.jpg | Bin .../visual_style/figurative/portrait-0.jpg | Bin .../visual_style/geometric/landscape-0.jpg | Bin .../visual_style/geometric/portrait-0.jpg | Bin .../graphic_novel/landscape-0.jpg | Bin .../visual_style/graphic_novel/portrait-0.jpg | Bin .../hard_edge_painting/landscape-0.jpg | Bin .../hard_edge_painting/portrait-0.jpg | Bin .../visual_style/hydrodipped/landscape-0.jpg | Bin .../visual_style/hydrodipped/portrait-0.jpg | Bin .../impressionistic/landscape-0.jpg | Bin .../impressionistic/portrait-0.jpg | Bin .../visual_style/lithography/landscape-0.jpg | Bin .../visual_style/lithography/portrait-0.jpg | Bin .../visual_style/manga/landscape-0.jpg | Bin .../visual_style/manga/portrait-0.jpg | Bin .../visual_style/minimalist/landscape-0.jpg | Bin .../visual_style/minimalist/portrait-0.jpg | Bin .../visual_style/modern_art/landscape-0.jpg | Bin .../visual_style/modern_art/portrait-0.jpg | Bin .../visual_style/mosaic/landscape-0.jpg | Bin .../visual_style/mosaic/portrait-0.jpg | Bin .../visual_style/mural/landscape-0.jpg | Bin .../visual_style/mural/portrait-0.jpg | Bin .../visual_style/naive/landscape-0.jpg | Bin .../visual_style/naive/portrait-0.jpg | Bin .../visual_style/neoclassical/landscape-0.jpg | Bin .../visual_style/neoclassical/portrait-0.jpg | Bin .../visual_style/photo/landscape-0.jpg | Bin .../visual_style/photo/portrait-0.jpg | Bin .../visual_style/realistic/landscape-0.jpg | Bin .../visual_style/realistic/portrait-0.jpg | Bin .../visual_style/rococo/landscape-0.jpg | Bin .../visual_style/rococo/portrait-0.jpg | Bin .../visual_style/romantic/landscape-0.jpg | Bin .../visual_style/romantic/portrait-0.jpg | Bin .../visual_style/street_art/landscape-0.jpg | Bin .../visual_style/street_art/portrait-0.jpg | Bin .../visual_style/stuckist/landscape-0.jpg | Bin .../visual_style/stuckist/portrait-0.jpg | Bin .../visual_style/surrealist/landscape-0.jpg | Bin .../visual_style/surrealist/portrait-0.jpg | Bin .../visual_style/symbolist/landscape-0.jpg | Bin .../visual_style/symbolist/portrait-0.jpg | Bin .../visual_style/visual_novel/landscape-0.jpg | Bin .../visual_style/visual_novel/portrait-0.jpg | Bin .../visual_style/watercolor/landscape-0.jpg | Bin .../visual_style/watercolor/portrait-0.jpg | Bin ui/frontend/assets/modifiers.json | 2717 ++++++ ui/frontend/build_src/.eslintrc.cjs | 87 + ui/frontend/build_src/.gitignore | 18 + ui/frontend/build_src/index.html | 17 + ui/frontend/build_src/package-lock.json | 8225 +++++++++++++++++ ui/frontend/build_src/package.json | 56 + ui/frontend/build_src/prettier.cjs | 7 + ui/frontend/build_src/src/App.tsx | 21 + .../build_src/src/Translation/config.ts | 32 + .../src/Translation/locales/en/home.json | 110 + .../src/Translation/locales/es/home.json | 108 + ui/frontend/build_src/src/api/index.ts | 146 + .../src/components/_recipes/button.css.ts | 140 + .../src/components/_recipes/card.css.ts | 51 + .../src/components/_recipes/index.css.ts | 24 + .../_recipes/popover_headless.css.ts | 39 + .../_recipes/switch_headless.css.ts | 19 + .../components/_recipes/tabs_headless.css.ts | 60 + .../layouts/CreationTabs/creationTabs.css.ts | 34 + .../components/layouts/CreationTabs/index.tsx | 61 + .../layouts/basicDisplay/basicDisplay.css.ts | 107 + .../components/layouts/basicDisplay/index.tsx | 65 + .../components/molecules/audioDing/index.tsx | 16 + .../components/molecules/betaMode/index.tsx | 73 + .../components/molecules/clearQueue/index.tsx | 35 + .../molecules/drawImage/drawImage.css.ts | 22 + .../components/molecules/drawImage/index.tsx | 194 + .../generatedImage/generatedImage.css.ts | 11 + .../molecules/generatedImage/index.tsx | 25 + .../components/molecules/makeButton/index.tsx | 276 + .../molecules/modifierTag/index.tsx | 93 + .../molecules/modifierTag/modifierTags.css.ts | 69 + .../components/molecules/promptTag/index.tsx | 68 + .../molecules/promptTag/promptTag.css.ts | 55 + .../molecules/queueStatusTab/index.tsx | 70 + .../components/molecules/stopButton/index.tsx | 25 + .../completedImages/completedImages.css.ts | 63 + .../organisms/completedImages/index.tsx | 87 + .../advancedSettings/advancedsettings.css.ts | 12 + .../improvementSettings/index.tsx | 119 + .../creationPanel/advancedSettings/index.tsx | 69 + .../propertySettings/index.tsx | 211 + .../workflowSettings/index.tsx | 84 + .../basicCreation/basicCreation.css.ts | 20 + .../creationPanel/basicCreation/index.tsx | 37 + .../activeTags/activeTags.css.ts | 18 + .../promptCreator/activeTags/index.tsx | 39 + .../basicCreation/promptCreator/index.tsx | 108 + .../promptCreator/promptCreator.css.ts | 79 + .../basicCreation/seedImage/index.tsx | 108 + .../basicCreation/seedImage/seedImage.css.ts | 23 + .../basicCreation/showQueue/index.tsx | 21 + .../creationPanel/creationPanel.css.ts | 21 + .../creationPanel/creationPanelUIStore.ts | 89 + .../imageModifiers/imageModifiers.css.ts | 33 + .../creationPanel/imageModifiers/index.tsx | 115 + .../imageModifiers/modifiers.mock.ts | 18 + .../organisms/creationPanel/index.tsx | 43 + .../creationPanel/inpaintingPanel/index.tsx | 114 + .../inpaintingPanel/inpaintingPanel.css.ts | 27 + .../currentDisplay/currentDisplay.css.ts | 12 + .../imageDisplay/imageDisplay.css.ts | 40 + .../currentDisplay/imageDisplay/index.tsx | 100 + .../organisms/currentDisplay/index.tsx | 58 + .../organisms/currentInfo/currentInfo.css.ts | 22 + .../organisms/currentInfo/index.tsx | 7 + .../footerDisplay/footerDisplay.css.ts | 59 + .../organisms/footerDisplay/index.tsx | 71 + .../headerDisplay/headerDisplay.css.ts | 28 + .../helpOptions/helpOptions.css.ts | 5 + .../headerDisplay/helpOptions/index.tsx | 61 + .../organisms/headerDisplay/index.tsx | 62 + .../headerDisplay/languageDropdown/index.tsx | 23 + .../headerDisplay/statusDisplay/index.tsx | 57 + .../statusDisplay/statusDisplay.css.ts | 15 + .../headerDisplay/systemSettings/index.tsx | 162 + .../systemSettings/systemSettings.css.ts | 5 + .../organisms/queueDisplay/index.tsx | 52 + .../queueDisplay/queueDisplay.css.ts | 28 + .../queueDisplay/queueItem/index.tsx | 125 + .../queueDisplay/queueItem/queueItem.css.ts | 61 + ui/frontend/build_src/src/main.tsx | 35 + ui/frontend/build_src/src/modifiers.json | 144 + .../src/pages/Experimental/index.tsx | 9 + .../build_src/src/pages/Home/home.css.ts | 54 + .../build_src/src/pages/Home/index.tsx | 73 + .../build_src/src/pages/Settings/index.tsx | 9 + .../build_src/src/stores/imageCreateStore.ts | 397 + .../build_src/src/stores/imageDisplayStore.ts | 54 + .../src/stores/imageFetchingStore.ts | 113 + .../build_src/src/stores/requestQueueStore.ts | 160 + ui/frontend/build_src/src/styles/index.css.ts | 80 + .../build_src/src/styles/shared.css.ts | 55 + .../build_src/src/styles/theme/index.css.ts | 87 + ui/frontend/build_src/src/utils.ts | 3 + ui/frontend/build_src/src/vite-env.d.ts | 1 + ui/frontend/build_src/tsconfig.json | 26 + ui/frontend/build_src/tsconfig.node.json | 9 + ui/frontend/build_src/vite.config.ts | 42 + ...vite.config.ts.timestamp-1664475745198.mjs | 36 + ui/frontend/dist/index.css | 1 + ui/frontend/dist/index.html | 19 + ui/frontend/dist/index.js | 113 + ui/index.html | 22 +- ui/media/main.css | 55 +- ui/media/main.js | 447 +- ui/sd_internal/__init__.py | 6 - ui/sd_internal/runtime.py | 54 +- ui/server.py | 152 +- 531 files changed, 17640 insertions(+), 478 deletions(-) create mode 100644 .gitattributes delete mode 100644 scripts/Developer Console.cmd delete mode 100644 scripts/developer_console.sh rename ui/{media => frontend/assets}/ding.mp3 (100%) rename ui/{media => frontend/assets}/kofi.png (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/artstation/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/artstation/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_agnes_lawrence_pelton/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_agnes_lawrence_pelton/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_akihito_yoshida/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_akihito_yoshida/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_alex_grey/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_alex_grey/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_alexander_jansson/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_alexander_jansson/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_alphonse_mucha/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_alphonse_mucha/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_andy_warhol/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_andy_warhol/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_artgerm/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_artgerm/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_asaf_hanuka/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_asaf_hanuka/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_aubrey_beardsley/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_aubrey_beardsley/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_banksy/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_banksy/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_beeple/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_beeple/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_ben_enwonwu/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_ben_enwonwu/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_bob_eggleton/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_bob_eggleton/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_caravaggio_michelangelo_merisi/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_caravaggio_michelangelo_merisi/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_caspar_david_friedrich/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_caspar_david_friedrich/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_chris_foss/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_chris_foss/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_claude_monet/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_claude_monet/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_dan_mumford/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_dan_mumford/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_david_mann/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_david_mann/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_diego_vela_zquez/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_diego_vela_zquez/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_disney_animation_studios/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_disney_animation_studios/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_e_douard_manet/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_e_douard_manet/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_esao_andrews/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_esao_andrews/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_frida_kahlo/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_frida_kahlo/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_gediminas_pranckevicius/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_gediminas_pranckevicius/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_georgia_o_keeffe/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_georgia_o_keeffe/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_greg_rutkowski/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_greg_rutkowski/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_gustave_dore_/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_gustave_dore_/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_gustave_klimt/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_gustave_klimt/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_h_r_giger/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_h_r_giger/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_hayao_miyazaki/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_hayao_miyazaki/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_henri_matisse/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_henri_matisse/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_hp_lovecraft/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_hp_lovecraft/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_ivan_shishkin/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_ivan_shishkin/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_jack_kirby/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_jack_kirby/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_jackson_pollock/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_jackson_pollock/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_james_jean/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_james_jean/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_jim_burns/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_jim_burns/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_johannes_vermeer/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_johannes_vermeer/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_john_william_waterhouse/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_john_william_waterhouse/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_katsushika_hokusai/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_katsushika_hokusai/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_kim_tschang_yeul/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_kim_tschang_yeul/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_ko_young_hoon/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_ko_young_hoon/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_leonardo_da_vinci/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_leonardo_da_vinci/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_lisa_frank/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_lisa_frank/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_m_c_escher/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_m_c_escher/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_mahmoud_sai_d/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_mahmoud_sai_d/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_makoto_shinkai/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_makoto_shinkai/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_marc_simonetti/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_marc_simonetti/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_mark_brooks/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_mark_brooks/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_michelangelo/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_michelangelo/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_pablo_picasso/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_pablo_picasso/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_paul_klee/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_paul_klee/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_peter_mohrbacher/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_peter_mohrbacher/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_pierre-auguste_renoir/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_pierre-auguste_renoir/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_pixar_animation_studios/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_pixar_animation_studios/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_rembrandt/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_rembrandt/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_richard_dadd/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_richard_dadd/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_rossdraws/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_rossdraws/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_salvador_dali_/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_salvador_dali_/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_sam_does_arts/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_sam_does_arts/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_sandro_botticelli/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_sandro_botticelli/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_ted_nasmith/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_ted_nasmith/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_ten_hundred/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_ten_hundred/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_thomas_kinkade/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_thomas_kinkade/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_tivadar_csontva_ry_kosztka/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_tivadar_csontva_ry_kosztka/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_victo_ngai/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_victo_ngai/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_vincent_di_fate/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_vincent_di_fate/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_vincent_van_gogh/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_vincent_van_gogh/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_wes_anderson/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_wes_anderson/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_wlop/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_wlop/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_yoshitaka_amano/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/artist/by_yoshitaka_amano/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/aerial_view/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/aerial_view/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/canon50/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/canon50/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/cinematic/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/cinematic/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/close-up/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/close-up/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/color_grading/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/color_grading/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/dramatic/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/dramatic/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/film_grain/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/film_grain/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/fisheye_lens/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/fisheye_lens/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/glamor_shot/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/glamor_shot/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/golden_hour/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/golden_hour/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/hd/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/hd/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/landscape/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/landscape/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/lens_flare/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/lens_flare/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/macro/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/macro/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/photoshoot/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/photoshoot/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/polaroid/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/polaroid/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/portrait/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/portrait/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/studio_lighting/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/studio_lighting/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/vintage/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/vintage/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/war_photography/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/war_photography/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/white_balance/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/white_balance/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/wildlife_photography/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/camera/wildlife_photography/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/carving_and_etching/etching/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/carving_and_etching/etching/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/carving_and_etching/linocut/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/carving_and_etching/linocut/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/carving_and_etching/paper-mache/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/carving_and_etching/paper-mache/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/carving_and_etching/paper_model/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/carving_and_etching/paper_model/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/carving_and_etching/papercutting/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/carving_and_etching/papercutting/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/carving_and_etching/pyrography/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/carving_and_etching/pyrography/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/carving_and_etching/wood-carving/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/carving_and_etching/wood-carving/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_rendering/3d_render/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_rendering/3d_render/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_rendering/corona_render/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_rendering/corona_render/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_rendering/creature_design/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_rendering/creature_design/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_rendering/cycles_render/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_rendering/cycles_render/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_rendering/detailed_render/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_rendering/detailed_render/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_rendering/environment_design/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_rendering/environment_design/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_rendering/glass_caustics/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_rendering/glass_caustics/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_rendering/global_illumination/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_rendering/global_illumination/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_rendering/intricate_environment/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_rendering/intricate_environment/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_rendering/lsd_render/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_rendering/lsd_render/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_rendering/octane_render/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_rendering/octane_render/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_rendering/pbr/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_rendering/pbr/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_rendering/subsurface_scattering/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_rendering/subsurface_scattering/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_software/3d_model/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_software/3d_model/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_software/3d_sculpt/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_software/3d_sculpt/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_software/3ds_max_model/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_software/3ds_max_model/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_software/blender_model/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_software/blender_model/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_software/cinema4d_model/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_software/cinema4d_model/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_software/maya_model/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_software/maya_model/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_software/unreal_engine/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_software/unreal_engine/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_software/zbrush_sculpt/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/cgi_software/zbrush_sculpt/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/color/beautiful_lighting/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/color/beautiful_lighting/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/color/cold_color_palette/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/color/cold_color_palette/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/color/colorful/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/color/colorful/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/color/dynamic_lighting/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/color/dynamic_lighting/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/color/electric_colors/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/color/electric_colors/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/color/infrared/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/color/infrared/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/color/neon/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/color/neon/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/color/pastel/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/color/pastel/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/color/synthwave/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/color/synthwave/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/color/warm_color_palette/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/color/warm_color_palette/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/drawing_style/cel_shading/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/drawing_style/cel_shading/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/drawing_style/children_s_drawing/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/drawing_style/children_s_drawing/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/drawing_style/crosshatch/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/drawing_style/crosshatch/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/drawing_style/detailed_and_intricate/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/drawing_style/detailed_and_intricate/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/drawing_style/doodle/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/drawing_style/doodle/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/drawing_style/dot_art/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/drawing_style/dot_art/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/drawing_style/line_art/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/drawing_style/line_art/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/drawing_style/sketch/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/drawing_style/sketch/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/angry/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/angry/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/bitter/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/bitter/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/disgusted/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/disgusted/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/embarrassed/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/embarrassed/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/evil/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/evil/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/excited/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/excited/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/fear/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/fear/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/funny/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/funny/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/happy/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/happy/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/horrifying/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/horrifying/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/lonely/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/lonely/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/melancholic/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/melancholic/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/sad/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/sad/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/serene/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/serene/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/surprised/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/emotions/surprised/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/pen/chalk/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/pen/chalk/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/pen/colored_pencil/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/pen/colored_pencil/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/pen/graphite/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/pen/graphite/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/pen/ink/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/pen/ink/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/pen/oil_paint/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/pen/oil_paint/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/pen/pastel_art/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/pen/pastel_art/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/16-bit/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/16-bit/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/2d/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/2d/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/8-bit/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/8-bit/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/anaglyph/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/anaglyph/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/anime/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/anime/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/art_nouveau/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/art_nouveau/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/baroque/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/baroque/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/bauhaus/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/bauhaus/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/cartoon/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/cartoon/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/cgi/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/cgi/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/comic_book/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/comic_book/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/concept_art/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/concept_art/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/constructivist/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/constructivist/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/cubist/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/cubist/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/dadaist/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/dadaist/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/digital_art/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/digital_art/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/expressionist/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/expressionist/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/fantasy/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/fantasy/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/fauvist/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/fauvist/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/figurative/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/figurative/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/geometric/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/geometric/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/graphic_novel/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/graphic_novel/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/hard_edge_painting/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/hard_edge_painting/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/hydrodipped/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/hydrodipped/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/impressionistic/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/impressionistic/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/lithography/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/lithography/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/manga/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/manga/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/minimalist/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/minimalist/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/modern_art/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/modern_art/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/mosaic/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/mosaic/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/mural/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/mural/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/naive/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/naive/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/neoclassical/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/neoclassical/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/photo/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/photo/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/realistic/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/realistic/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/rococo/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/rococo/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/romantic/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/romantic/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/street_art/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/street_art/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/stuckist/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/stuckist/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/surrealist/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/surrealist/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/symbolist/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/symbolist/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/visual_novel/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/visual_novel/portrait-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/watercolor/landscape-0.jpg (100%) rename ui/{ => frontend/assets}/media/modifier-thumbnails/visual_style/watercolor/portrait-0.jpg (100%) create mode 100644 ui/frontend/assets/modifiers.json create mode 100644 ui/frontend/build_src/.eslintrc.cjs create mode 100644 ui/frontend/build_src/.gitignore create mode 100644 ui/frontend/build_src/index.html create mode 100644 ui/frontend/build_src/package-lock.json create mode 100644 ui/frontend/build_src/package.json create mode 100644 ui/frontend/build_src/prettier.cjs create mode 100644 ui/frontend/build_src/src/App.tsx create mode 100644 ui/frontend/build_src/src/Translation/config.ts create mode 100644 ui/frontend/build_src/src/Translation/locales/en/home.json create mode 100644 ui/frontend/build_src/src/Translation/locales/es/home.json create mode 100644 ui/frontend/build_src/src/api/index.ts create mode 100644 ui/frontend/build_src/src/components/_recipes/button.css.ts create mode 100644 ui/frontend/build_src/src/components/_recipes/card.css.ts create mode 100644 ui/frontend/build_src/src/components/_recipes/index.css.ts create mode 100644 ui/frontend/build_src/src/components/_recipes/popover_headless.css.ts create mode 100644 ui/frontend/build_src/src/components/_recipes/switch_headless.css.ts create mode 100644 ui/frontend/build_src/src/components/_recipes/tabs_headless.css.ts create mode 100644 ui/frontend/build_src/src/components/layouts/CreationTabs/creationTabs.css.ts create mode 100644 ui/frontend/build_src/src/components/layouts/CreationTabs/index.tsx create mode 100644 ui/frontend/build_src/src/components/layouts/basicDisplay/basicDisplay.css.ts create mode 100644 ui/frontend/build_src/src/components/layouts/basicDisplay/index.tsx create mode 100644 ui/frontend/build_src/src/components/molecules/audioDing/index.tsx create mode 100644 ui/frontend/build_src/src/components/molecules/betaMode/index.tsx create mode 100644 ui/frontend/build_src/src/components/molecules/clearQueue/index.tsx create mode 100644 ui/frontend/build_src/src/components/molecules/drawImage/drawImage.css.ts create mode 100644 ui/frontend/build_src/src/components/molecules/drawImage/index.tsx create mode 100644 ui/frontend/build_src/src/components/molecules/generatedImage/generatedImage.css.ts create mode 100644 ui/frontend/build_src/src/components/molecules/generatedImage/index.tsx create mode 100644 ui/frontend/build_src/src/components/molecules/makeButton/index.tsx create mode 100644 ui/frontend/build_src/src/components/molecules/modifierTag/index.tsx create mode 100644 ui/frontend/build_src/src/components/molecules/modifierTag/modifierTags.css.ts create mode 100644 ui/frontend/build_src/src/components/molecules/promptTag/index.tsx create mode 100644 ui/frontend/build_src/src/components/molecules/promptTag/promptTag.css.ts create mode 100644 ui/frontend/build_src/src/components/molecules/queueStatusTab/index.tsx create mode 100644 ui/frontend/build_src/src/components/molecules/stopButton/index.tsx create mode 100644 ui/frontend/build_src/src/components/organisms/completedImages/completedImages.css.ts create mode 100644 ui/frontend/build_src/src/components/organisms/completedImages/index.tsx create mode 100644 ui/frontend/build_src/src/components/organisms/creationPanel/advancedSettings/advancedsettings.css.ts create mode 100644 ui/frontend/build_src/src/components/organisms/creationPanel/advancedSettings/improvementSettings/index.tsx create mode 100644 ui/frontend/build_src/src/components/organisms/creationPanel/advancedSettings/index.tsx create mode 100644 ui/frontend/build_src/src/components/organisms/creationPanel/advancedSettings/propertySettings/index.tsx create mode 100644 ui/frontend/build_src/src/components/organisms/creationPanel/advancedSettings/workflowSettings/index.tsx create mode 100644 ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/basicCreation.css.ts create mode 100644 ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/index.tsx create mode 100644 ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/promptCreator/activeTags/activeTags.css.ts create mode 100644 ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/promptCreator/activeTags/index.tsx create mode 100644 ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/promptCreator/index.tsx create mode 100644 ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/promptCreator/promptCreator.css.ts create mode 100644 ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/seedImage/index.tsx create mode 100644 ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/seedImage/seedImage.css.ts create mode 100644 ui/frontend/build_src/src/components/organisms/creationPanel/basicCreation/showQueue/index.tsx create mode 100644 ui/frontend/build_src/src/components/organisms/creationPanel/creationPanel.css.ts create mode 100644 ui/frontend/build_src/src/components/organisms/creationPanel/creationPanelUIStore.ts create mode 100644 ui/frontend/build_src/src/components/organisms/creationPanel/imageModifiers/imageModifiers.css.ts create mode 100644 ui/frontend/build_src/src/components/organisms/creationPanel/imageModifiers/index.tsx create mode 100644 ui/frontend/build_src/src/components/organisms/creationPanel/imageModifiers/modifiers.mock.ts create mode 100644 ui/frontend/build_src/src/components/organisms/creationPanel/index.tsx create mode 100644 ui/frontend/build_src/src/components/organisms/creationPanel/inpaintingPanel/index.tsx create mode 100644 ui/frontend/build_src/src/components/organisms/creationPanel/inpaintingPanel/inpaintingPanel.css.ts create mode 100644 ui/frontend/build_src/src/components/organisms/currentDisplay/currentDisplay.css.ts create mode 100644 ui/frontend/build_src/src/components/organisms/currentDisplay/imageDisplay/imageDisplay.css.ts create mode 100644 ui/frontend/build_src/src/components/organisms/currentDisplay/imageDisplay/index.tsx create mode 100644 ui/frontend/build_src/src/components/organisms/currentDisplay/index.tsx create mode 100644 ui/frontend/build_src/src/components/organisms/currentInfo/currentInfo.css.ts create mode 100644 ui/frontend/build_src/src/components/organisms/currentInfo/index.tsx create mode 100644 ui/frontend/build_src/src/components/organisms/footerDisplay/footerDisplay.css.ts create mode 100644 ui/frontend/build_src/src/components/organisms/footerDisplay/index.tsx create mode 100644 ui/frontend/build_src/src/components/organisms/headerDisplay/headerDisplay.css.ts create mode 100644 ui/frontend/build_src/src/components/organisms/headerDisplay/helpOptions/helpOptions.css.ts create mode 100644 ui/frontend/build_src/src/components/organisms/headerDisplay/helpOptions/index.tsx create mode 100644 ui/frontend/build_src/src/components/organisms/headerDisplay/index.tsx create mode 100644 ui/frontend/build_src/src/components/organisms/headerDisplay/languageDropdown/index.tsx create mode 100644 ui/frontend/build_src/src/components/organisms/headerDisplay/statusDisplay/index.tsx create mode 100644 ui/frontend/build_src/src/components/organisms/headerDisplay/statusDisplay/statusDisplay.css.ts create mode 100644 ui/frontend/build_src/src/components/organisms/headerDisplay/systemSettings/index.tsx create mode 100644 ui/frontend/build_src/src/components/organisms/headerDisplay/systemSettings/systemSettings.css.ts create mode 100644 ui/frontend/build_src/src/components/organisms/queueDisplay/index.tsx create mode 100644 ui/frontend/build_src/src/components/organisms/queueDisplay/queueDisplay.css.ts create mode 100644 ui/frontend/build_src/src/components/organisms/queueDisplay/queueItem/index.tsx create mode 100644 ui/frontend/build_src/src/components/organisms/queueDisplay/queueItem/queueItem.css.ts create mode 100644 ui/frontend/build_src/src/main.tsx create mode 100644 ui/frontend/build_src/src/modifiers.json create mode 100644 ui/frontend/build_src/src/pages/Experimental/index.tsx create mode 100644 ui/frontend/build_src/src/pages/Home/home.css.ts create mode 100644 ui/frontend/build_src/src/pages/Home/index.tsx create mode 100644 ui/frontend/build_src/src/pages/Settings/index.tsx create mode 100644 ui/frontend/build_src/src/stores/imageCreateStore.ts create mode 100644 ui/frontend/build_src/src/stores/imageDisplayStore.ts create mode 100644 ui/frontend/build_src/src/stores/imageFetchingStore.ts create mode 100644 ui/frontend/build_src/src/stores/requestQueueStore.ts create mode 100644 ui/frontend/build_src/src/styles/index.css.ts create mode 100644 ui/frontend/build_src/src/styles/shared.css.ts create mode 100644 ui/frontend/build_src/src/styles/theme/index.css.ts create mode 100644 ui/frontend/build_src/src/utils.ts create mode 100644 ui/frontend/build_src/src/vite-env.d.ts create mode 100644 ui/frontend/build_src/tsconfig.json create mode 100644 ui/frontend/build_src/tsconfig.node.json create mode 100644 ui/frontend/build_src/vite.config.ts create mode 100644 ui/frontend/build_src/vite.config.ts.timestamp-1664475745198.mjs create mode 100644 ui/frontend/dist/index.css create mode 100644 ui/frontend/dist/index.html create mode 100644 ui/frontend/dist/index.js diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..94f480de --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto eol=lf \ No newline at end of file diff --git a/.gitignore b/.gitignore index b5157e17..f74be2e3 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,10 @@ __pycache__ installer installer.tar dist + +# built code for the front end +!/ui/frontend/dist +ui/frontend/.idea/* +ui/frontend/build_src/.idea/* + .idea/* diff --git a/README.md b/README.md index eb9955d4..d493be61 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ [![Discord Server](https://img.shields.io/discord/1014774730907209781?label=Discord)](https://discord.com/invite/u9yhsFmEkB) (for support, and development discussion) | [Troubleshooting guide for common problems](Troubleshooting.md) -️‍🔥🎉 **New!** Use Custom Weights, Task Queue, Negative Prompt, Live Preview, More Samplers, In-Painting, Face Correction (GFPGAN) and Upscaling (RealESRGAN) have been added! +️‍🔥🎉 **New!** Task Queue, Negative Prompt, Live Preview, More Samplers, In-Painting, Face Correction (GFPGAN) and Upscaling (RealESRGAN) have been added! This distribution currently uses Stable Diffusion 1.4. Once the model for 1.5 becomes publicly available, the model in this distribution will be updated. @@ -18,7 +18,6 @@ This distribution currently uses Stable Diffusion 1.4. Once the model for 1.5 be - **In-Painting** - **Live Preview**: See the image as the AI is drawing it - **Task Queue**: Queue up all your ideas, without waiting for the current task to finish -- **Custom Weights**: Use your own `.ckpt` file, by placing it inside the `stable-diffusion` folder (rename it to `custom-model.ckpt`) - **Negative Prompt**: Specify aspects of the image to *remove*. - **Lots of Samplers:** ddim, plms, heun, euler, euler_a, dpm2, dpm2_a, lms - **Image Modifiers**: A library of *modifier tags* like *"Realistic"*, *"Pencil Sketch"*, *"ArtStation"* etc. Experiment with various styles quickly. diff --git a/Troubleshooting.md b/Troubleshooting.md index e607fb1a..1955a424 100644 --- a/Troubleshooting.md +++ b/Troubleshooting.md @@ -64,7 +64,7 @@ Users don't need to have the Anaconda Prompt installed to do this anymore, since 5. Type `conda activate .\env` and press enter 6. Type `python --version` and press enter. You should see 3.8.5. -**Linux:** +**Windows:** 1. Open the terminal 2. Type `cd /path/to/stable-diffusion-ui` and press enter 3. Type `installer/bin/activate` and press enter diff --git a/scripts/Developer Console.cmd b/scripts/Developer Console.cmd deleted file mode 100644 index e9bfb28b..00000000 --- a/scripts/Developer Console.cmd +++ /dev/null @@ -1,14 +0,0 @@ -@echo off - -echo "Opening Stable Diffusion UI - Developer Console.." & echo. - -@call installer\Scripts\activate.bat - -@call conda-unpack - -@call conda --version -@call git --version - -@call conda activate .\stable-diffusion\env - -cmd /k \ No newline at end of file diff --git a/scripts/developer_console.sh b/scripts/developer_console.sh deleted file mode 100644 index 9cd84f49..00000000 --- a/scripts/developer_console.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -if [ "$0" == "bash" ]; then - echo "Opening Stable Diffusion UI - Developer Console.." - echo "" - - source installer/bin/activate - - conda-unpack - - conda --version - git --version - - conda activate ./stable-diffusion/env -else - bash --init-file open_dev_console.sh -fi \ No newline at end of file diff --git a/scripts/on_env_start.bat b/scripts/on_env_start.bat index a73198ce..16312a5a 100644 --- a/scripts/on_env_start.bat +++ b/scripts/on_env_start.bat @@ -55,7 +55,6 @@ if "%update_branch%"=="" ( @xcopy sd-ui-files\ui ui /s /i /Y @copy sd-ui-files\scripts\on_sd_start.bat scripts\ /Y @copy "sd-ui-files\scripts\Start Stable Diffusion UI.cmd" . /Y -@copy "sd-ui-files\scripts\Developer Console.cmd" . /Y @call scripts\on_sd_start.bat diff --git a/scripts/on_env_start.sh b/scripts/on_env_start.sh index 3a934153..79ab23a7 100755 --- a/scripts/on_env_start.sh +++ b/scripts/on_env_start.sh @@ -37,7 +37,6 @@ rm -rf ui cp -Rf sd-ui-files/ui . cp sd-ui-files/scripts/on_sd_start.sh scripts/ cp sd-ui-files/scripts/start.sh . -cp sd-ui-files/scripts/developer_console.sh . ./scripts/on_sd_start.sh diff --git a/scripts/on_sd_start.bat b/scripts/on_sd_start.bat index b857451a..34ccdf83 100644 --- a/scripts/on_sd_start.bat +++ b/scripts/on_sd_start.bat @@ -5,9 +5,6 @@ @REM Caution, this file will make your eyes and brain bleed. It's such an unholy mess. @REM Note to self: Please rewrite this in Python. For the sake of your own sanity. -@copy "sd-ui-files\scripts\Developer Console.cmd" . /Y -if exist "Open Developer Console.cmd" del "Open Developer Console.cmd" - @call python -c "import os; import shutil; frm = 'sd-ui-files\\ui\\hotfix\\9c24e6cd9f499d02c4f21a033736dabd365962dc80fe3aeb57a8f85ea45a20a3.26fead7ea4f0f843f6eb4055dfd25693f1a71f3c6871b184042d4b126244e142'; dst = os.path.join(os.path.expanduser('~'), '.cache', 'huggingface', 'transformers', '9c24e6cd9f499d02c4f21a033736dabd365962dc80fe3aeb57a8f85ea45a20a3.26fead7ea4f0f843f6eb4055dfd25693f1a71f3c6871b184042d4b126244e142'); shutil.copyfile(frm, dst) if os.path.exists(dst) else print(''); print('Hotfixed broken JSON file from OpenAI');" @>nul grep -c "sd_git_cloned" scripts\install_status.txt @@ -166,9 +163,6 @@ call WHERE uvicorn > .tmp -if not exist "..\models\stable-diffusion" mkdir "..\models\stable-diffusion" -echo. > "..\models\stable-diffusion\Put your custom ckpt files here.txt" - @if exist "sd-v1-4.ckpt" ( for %%I in ("sd-v1-4.ckpt") do if "%%~zI" EQU "4265380512" ( echo "Data files (weights) necessary for Stable Diffusion were already downloaded. Using the HuggingFace 4 GB Model." diff --git a/scripts/on_sd_start.sh b/scripts/on_sd_start.sh index 8f5f7551..2941764f 100755 --- a/scripts/on_sd_start.sh +++ b/scripts/on_sd_start.sh @@ -4,11 +4,6 @@ cp sd-ui-files/scripts/on_env_start.sh scripts/ source installer/etc/profile.d/conda.sh -cp sd-ui-files/scripts/developer_console.sh . -if [ -e "open_dev_console.sh" ]; then - rm "open_dev_console.sh" -fi - python -c "import os; import shutil; frm = 'sd-ui-files/ui/hotfix/9c24e6cd9f499d02c4f21a033736dabd365962dc80fe3aeb57a8f85ea45a20a3.26fead7ea4f0f843f6eb4055dfd25693f1a71f3c6871b184042d4b126244e142'; dst = os.path.join(os.path.expanduser('~'), '.cache', 'huggingface', 'transformers', '9c24e6cd9f499d02c4f21a033736dabd365962dc80fe3aeb57a8f85ea45a20a3.26fead7ea4f0f843f6eb4055dfd25693f1a71f3c6871b184042d4b126244e142'); shutil.copyfile(frm, dst) if os.path.exists(dst) else print(''); print('Hotfixed broken JSON file from OpenAI');" # Caution, this file will make your eyes and brain bleed. It's such an unholy mess. @@ -164,11 +159,8 @@ fi -mkdir -p "../models/stable-diffusion" -echo "" > "../models/stable-diffusion/Put your custom ckpt files here.txt" - if [ -f "sd-v1-4.ckpt" ]; then - model_size=`find "sd-v1-4.ckpt" -printf "%s"` + model_size=`ls -l sd-v1-4.ckpt | awk '{print $5}'` if [ "$model_size" -eq "4265380512" ] || [ "$model_size" -eq "7703807346" ] || [ "$model_size" -eq "7703810927" ]; then echo "Data files (weights) necessary for Stable Diffusion were already downloaded" @@ -184,7 +176,7 @@ if [ ! -f "sd-v1-4.ckpt" ]; then curl -L -k https://me.cmdr2.org/stable-diffusion-ui/sd-v1-4.ckpt > sd-v1-4.ckpt if [ -f "sd-v1-4.ckpt" ]; then - model_size=`find "sd-v1-4.ckpt" -printf "%s"` + model_size=`ls -l sd-v1-4.ckpt | awk '{print $5}'` if [ ! "$model_size" == "4265380512" ]; then printf "\n\nError: The downloaded model file was invalid! Bytes downloaded: $model_size\n\n" printf "\n\nError downloading the data files (weights) for Stable Diffusion. Sorry about that, please try to:\n 1. Run this installer again.\n 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/blob/main/Troubleshooting.md\n 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB\n 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues\nThanks!\n\n" @@ -200,7 +192,7 @@ fi if [ -f "GFPGANv1.3.pth" ]; then - model_size=`find "GFPGANv1.3.pth" -printf "%s"` + model_size=`ls -l GFPGANv1.3.pth | awk '{print $5}'` if [ "$model_size" -eq "348632874" ]; then echo "Data files (weights) necessary for GFPGAN (Face Correction) were already downloaded" @@ -216,7 +208,7 @@ if [ ! -f "GFPGANv1.3.pth" ]; then curl -L -k https://github.com/TencentARC/GFPGAN/releases/download/v1.3.0/GFPGANv1.3.pth > GFPGANv1.3.pth if [ -f "GFPGANv1.3.pth" ]; then - model_size=`find "GFPGANv1.3.pth" -printf "%s"` + model_size=`ls -l GFPGANv1.3.pth | awk '{print $5}'` if [ ! "$model_size" -eq "348632874" ]; then printf "\n\nError: The downloaded GFPGAN model file was invalid! Bytes downloaded: $model_size\n\n" printf "\n\nError downloading the data files (weights) for GFPGAN (Face Correction). Sorry about that, please try to:\n 1. Run this installer again.\n 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/blob/main/Troubleshooting.md\n 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB\n 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues\nThanks!\n\n" @@ -232,7 +224,7 @@ fi if [ -f "RealESRGAN_x4plus.pth" ]; then - model_size=`find "RealESRGAN_x4plus.pth" -printf "%s"` + model_size=`ls -l RealESRGAN_x4plus.pth | awk '{print $5}'` if [ "$model_size" -eq "67040989" ]; then echo "Data files (weights) necessary for ESRGAN (Resolution Upscaling) x4plus were already downloaded" @@ -248,7 +240,7 @@ if [ ! -f "RealESRGAN_x4plus.pth" ]; then curl -L -k https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth > RealESRGAN_x4plus.pth if [ -f "RealESRGAN_x4plus.pth" ]; then - model_size=`find "RealESRGAN_x4plus.pth" -printf "%s"` + model_size=`ls -l RealESRGAN_x4plus.pth | awk '{print $5}'` if [ ! "$model_size" -eq "67040989" ]; then printf "\n\nError: The downloaded ESRGAN x4plus model file was invalid! Bytes downloaded: $model_size\n\n" printf "\n\nError downloading the data files (weights) for ESRGAN (Resolution Upscaling) x4plus. Sorry about that, please try to:\n 1. Run this installer again.\n 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/blob/main/Troubleshooting.md\n 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB\n 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues\nThanks!\n\n" @@ -264,7 +256,7 @@ fi if [ -f "RealESRGAN_x4plus_anime_6B.pth" ]; then - model_size=`find "RealESRGAN_x4plus_anime_6B.pth" -printf "%s"` + model_size=`ls -l RealESRGAN_x4plus_anime_6B.pth | awk '{print $5}'` if [ "$model_size" -eq "17938799" ]; then echo "Data files (weights) necessary for ESRGAN (Resolution Upscaling) x4plus_anime were already downloaded" @@ -280,7 +272,7 @@ if [ ! -f "RealESRGAN_x4plus_anime_6B.pth" ]; then curl -L -k https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.2.4/RealESRGAN_x4plus_anime_6B.pth > RealESRGAN_x4plus_anime_6B.pth if [ -f "RealESRGAN_x4plus_anime_6B.pth" ]; then - model_size=`find "RealESRGAN_x4plus_anime_6B.pth" -printf "%s"` + model_size=`ls -l RealESRGAN_x4plus_anime_6B.pth | awk '{print $5}'` if [ ! "$model_size" -eq "17938799" ]; then printf "\n\nError: The downloaded ESRGAN x4plus_anime model file was invalid! Bytes downloaded: $model_size\n\n" printf "\n\nError downloading the data files (weights) for ESRGAN (Resolution Upscaling) x4plus_anime. Sorry about that, please try to:\n 1. Run this installer again.\n 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/blob/main/Troubleshooting.md\n 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB\n 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues\nThanks!\n\n" diff --git a/ui/media/ding.mp3 b/ui/frontend/assets/ding.mp3 similarity index 100% rename from ui/media/ding.mp3 rename to ui/frontend/assets/ding.mp3 diff --git a/ui/media/kofi.png b/ui/frontend/assets/kofi.png similarity index 100% rename from ui/media/kofi.png rename to ui/frontend/assets/kofi.png diff --git a/ui/media/modifier-thumbnails/artist/artstation/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/artstation/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/artstation/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/artstation/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/artstation/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/artstation/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/artstation/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/artstation/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_agnes_lawrence_pelton/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_agnes_lawrence_pelton/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_agnes_lawrence_pelton/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_agnes_lawrence_pelton/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_agnes_lawrence_pelton/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_agnes_lawrence_pelton/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_agnes_lawrence_pelton/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_agnes_lawrence_pelton/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_akihito_yoshida/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_akihito_yoshida/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_akihito_yoshida/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_akihito_yoshida/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_akihito_yoshida/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_akihito_yoshida/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_akihito_yoshida/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_akihito_yoshida/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_alex_grey/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_alex_grey/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_alex_grey/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_alex_grey/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_alex_grey/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_alex_grey/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_alex_grey/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_alex_grey/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_alexander_jansson/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_alexander_jansson/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_alexander_jansson/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_alexander_jansson/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_alexander_jansson/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_alexander_jansson/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_alexander_jansson/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_alexander_jansson/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_alphonse_mucha/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_alphonse_mucha/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_alphonse_mucha/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_alphonse_mucha/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_alphonse_mucha/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_alphonse_mucha/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_alphonse_mucha/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_alphonse_mucha/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_andy_warhol/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_andy_warhol/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_andy_warhol/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_andy_warhol/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_andy_warhol/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_andy_warhol/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_andy_warhol/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_andy_warhol/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_artgerm/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_artgerm/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_artgerm/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_artgerm/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_artgerm/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_artgerm/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_artgerm/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_artgerm/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_asaf_hanuka/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_asaf_hanuka/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_asaf_hanuka/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_asaf_hanuka/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_asaf_hanuka/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_asaf_hanuka/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_asaf_hanuka/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_asaf_hanuka/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_aubrey_beardsley/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_aubrey_beardsley/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_aubrey_beardsley/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_aubrey_beardsley/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_aubrey_beardsley/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_aubrey_beardsley/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_aubrey_beardsley/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_aubrey_beardsley/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_banksy/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_banksy/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_banksy/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_banksy/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_banksy/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_banksy/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_banksy/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_banksy/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_beeple/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_beeple/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_beeple/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_beeple/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_beeple/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_beeple/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_beeple/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_beeple/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_ben_enwonwu/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_ben_enwonwu/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_ben_enwonwu/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_ben_enwonwu/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_ben_enwonwu/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_ben_enwonwu/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_ben_enwonwu/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_ben_enwonwu/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_bob_eggleton/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_bob_eggleton/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_bob_eggleton/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_bob_eggleton/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_bob_eggleton/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_bob_eggleton/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_bob_eggleton/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_bob_eggleton/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_caravaggio_michelangelo_merisi/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_caravaggio_michelangelo_merisi/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_caravaggio_michelangelo_merisi/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_caravaggio_michelangelo_merisi/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_caravaggio_michelangelo_merisi/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_caravaggio_michelangelo_merisi/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_caravaggio_michelangelo_merisi/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_caravaggio_michelangelo_merisi/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_caspar_david_friedrich/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_caspar_david_friedrich/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_caspar_david_friedrich/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_caspar_david_friedrich/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_caspar_david_friedrich/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_caspar_david_friedrich/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_caspar_david_friedrich/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_caspar_david_friedrich/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_chris_foss/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_chris_foss/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_chris_foss/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_chris_foss/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_chris_foss/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_chris_foss/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_chris_foss/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_chris_foss/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_claude_monet/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_claude_monet/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_claude_monet/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_claude_monet/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_claude_monet/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_claude_monet/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_claude_monet/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_claude_monet/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_dan_mumford/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_dan_mumford/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_dan_mumford/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_dan_mumford/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_dan_mumford/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_dan_mumford/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_dan_mumford/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_dan_mumford/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_david_mann/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_david_mann/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_david_mann/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_david_mann/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_david_mann/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_david_mann/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_david_mann/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_david_mann/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_diego_vela_zquez/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_diego_vela_zquez/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_diego_vela_zquez/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_diego_vela_zquez/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_diego_vela_zquez/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_diego_vela_zquez/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_diego_vela_zquez/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_diego_vela_zquez/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_disney_animation_studios/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_disney_animation_studios/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_disney_animation_studios/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_disney_animation_studios/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_disney_animation_studios/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_disney_animation_studios/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_disney_animation_studios/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_disney_animation_studios/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_e_douard_manet/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_e_douard_manet/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_e_douard_manet/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_e_douard_manet/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_e_douard_manet/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_e_douard_manet/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_e_douard_manet/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_e_douard_manet/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_esao_andrews/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_esao_andrews/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_esao_andrews/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_esao_andrews/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_esao_andrews/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_esao_andrews/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_esao_andrews/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_esao_andrews/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_frida_kahlo/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_frida_kahlo/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_frida_kahlo/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_frida_kahlo/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_frida_kahlo/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_frida_kahlo/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_frida_kahlo/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_frida_kahlo/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_gediminas_pranckevicius/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_gediminas_pranckevicius/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_gediminas_pranckevicius/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_gediminas_pranckevicius/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_gediminas_pranckevicius/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_gediminas_pranckevicius/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_gediminas_pranckevicius/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_gediminas_pranckevicius/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_georgia_o_keeffe/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_georgia_o_keeffe/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_georgia_o_keeffe/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_georgia_o_keeffe/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_georgia_o_keeffe/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_georgia_o_keeffe/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_georgia_o_keeffe/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_georgia_o_keeffe/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_greg_rutkowski/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_greg_rutkowski/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_greg_rutkowski/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_greg_rutkowski/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_greg_rutkowski/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_greg_rutkowski/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_greg_rutkowski/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_greg_rutkowski/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_gustave_dore_/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_gustave_dore_/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_gustave_dore_/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_gustave_dore_/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_gustave_dore_/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_gustave_dore_/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_gustave_dore_/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_gustave_dore_/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_gustave_klimt/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_gustave_klimt/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_gustave_klimt/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_gustave_klimt/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_gustave_klimt/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_gustave_klimt/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_gustave_klimt/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_gustave_klimt/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_h_r_giger/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_h_r_giger/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_h_r_giger/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_h_r_giger/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_h_r_giger/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_h_r_giger/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_h_r_giger/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_h_r_giger/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_hayao_miyazaki/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_hayao_miyazaki/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_hayao_miyazaki/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_hayao_miyazaki/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_hayao_miyazaki/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_hayao_miyazaki/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_hayao_miyazaki/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_hayao_miyazaki/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_henri_matisse/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_henri_matisse/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_henri_matisse/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_henri_matisse/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_henri_matisse/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_henri_matisse/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_henri_matisse/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_henri_matisse/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_hp_lovecraft/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_hp_lovecraft/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_hp_lovecraft/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_hp_lovecraft/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_hp_lovecraft/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_hp_lovecraft/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_hp_lovecraft/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_hp_lovecraft/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_ivan_shishkin/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_ivan_shishkin/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_ivan_shishkin/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_ivan_shishkin/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_ivan_shishkin/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_ivan_shishkin/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_ivan_shishkin/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_ivan_shishkin/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_jack_kirby/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_jack_kirby/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_jack_kirby/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_jack_kirby/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_jack_kirby/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_jack_kirby/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_jack_kirby/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_jack_kirby/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_jackson_pollock/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_jackson_pollock/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_jackson_pollock/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_jackson_pollock/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_jackson_pollock/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_jackson_pollock/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_jackson_pollock/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_jackson_pollock/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_james_jean/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_james_jean/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_james_jean/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_james_jean/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_james_jean/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_james_jean/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_james_jean/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_james_jean/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_jim_burns/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_jim_burns/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_jim_burns/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_jim_burns/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_jim_burns/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_jim_burns/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_jim_burns/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_jim_burns/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_johannes_vermeer/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_johannes_vermeer/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_johannes_vermeer/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_johannes_vermeer/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_johannes_vermeer/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_johannes_vermeer/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_johannes_vermeer/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_johannes_vermeer/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_john_william_waterhouse/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_john_william_waterhouse/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_john_william_waterhouse/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_john_william_waterhouse/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_john_william_waterhouse/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_john_william_waterhouse/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_john_william_waterhouse/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_john_william_waterhouse/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_katsushika_hokusai/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_katsushika_hokusai/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_katsushika_hokusai/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_katsushika_hokusai/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_katsushika_hokusai/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_katsushika_hokusai/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_katsushika_hokusai/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_katsushika_hokusai/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_kim_tschang_yeul/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_kim_tschang_yeul/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_kim_tschang_yeul/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_kim_tschang_yeul/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_kim_tschang_yeul/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_kim_tschang_yeul/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_kim_tschang_yeul/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_kim_tschang_yeul/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_ko_young_hoon/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_ko_young_hoon/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_ko_young_hoon/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_ko_young_hoon/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_ko_young_hoon/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_ko_young_hoon/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_ko_young_hoon/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_ko_young_hoon/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_leonardo_da_vinci/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_leonardo_da_vinci/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_leonardo_da_vinci/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_leonardo_da_vinci/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_leonardo_da_vinci/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_leonardo_da_vinci/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_leonardo_da_vinci/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_leonardo_da_vinci/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_lisa_frank/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_lisa_frank/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_lisa_frank/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_lisa_frank/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_lisa_frank/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_lisa_frank/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_lisa_frank/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_lisa_frank/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_m_c_escher/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_m_c_escher/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_m_c_escher/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_m_c_escher/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_m_c_escher/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_m_c_escher/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_m_c_escher/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_m_c_escher/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_mahmoud_sai_d/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_mahmoud_sai_d/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_mahmoud_sai_d/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_mahmoud_sai_d/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_mahmoud_sai_d/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_mahmoud_sai_d/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_mahmoud_sai_d/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_mahmoud_sai_d/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_makoto_shinkai/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_makoto_shinkai/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_makoto_shinkai/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_makoto_shinkai/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_makoto_shinkai/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_makoto_shinkai/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_makoto_shinkai/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_makoto_shinkai/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_marc_simonetti/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_marc_simonetti/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_marc_simonetti/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_marc_simonetti/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_marc_simonetti/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_marc_simonetti/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_marc_simonetti/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_marc_simonetti/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_mark_brooks/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_mark_brooks/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_mark_brooks/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_mark_brooks/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_mark_brooks/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_mark_brooks/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_mark_brooks/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_mark_brooks/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_michelangelo/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_michelangelo/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_michelangelo/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_michelangelo/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_michelangelo/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_michelangelo/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_michelangelo/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_michelangelo/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_pablo_picasso/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_pablo_picasso/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_pablo_picasso/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_pablo_picasso/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_pablo_picasso/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_pablo_picasso/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_pablo_picasso/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_pablo_picasso/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_paul_klee/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_paul_klee/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_paul_klee/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_paul_klee/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_paul_klee/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_paul_klee/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_paul_klee/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_paul_klee/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_peter_mohrbacher/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_peter_mohrbacher/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_peter_mohrbacher/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_peter_mohrbacher/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_peter_mohrbacher/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_peter_mohrbacher/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_peter_mohrbacher/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_peter_mohrbacher/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_pierre-auguste_renoir/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_pierre-auguste_renoir/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_pierre-auguste_renoir/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_pierre-auguste_renoir/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_pierre-auguste_renoir/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_pierre-auguste_renoir/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_pierre-auguste_renoir/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_pierre-auguste_renoir/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_pixar_animation_studios/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_pixar_animation_studios/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_pixar_animation_studios/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_pixar_animation_studios/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_pixar_animation_studios/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_pixar_animation_studios/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_pixar_animation_studios/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_pixar_animation_studios/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_rembrandt/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_rembrandt/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_rembrandt/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_rembrandt/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_rembrandt/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_rembrandt/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_rembrandt/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_rembrandt/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_richard_dadd/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_richard_dadd/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_richard_dadd/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_richard_dadd/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_richard_dadd/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_richard_dadd/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_richard_dadd/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_richard_dadd/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_rossdraws/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_rossdraws/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_rossdraws/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_rossdraws/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_rossdraws/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_rossdraws/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_rossdraws/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_rossdraws/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_salvador_dali_/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_salvador_dali_/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_salvador_dali_/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_salvador_dali_/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_salvador_dali_/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_salvador_dali_/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_salvador_dali_/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_salvador_dali_/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_sam_does_arts/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_sam_does_arts/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_sam_does_arts/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_sam_does_arts/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_sam_does_arts/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_sam_does_arts/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_sam_does_arts/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_sam_does_arts/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_sandro_botticelli/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_sandro_botticelli/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_sandro_botticelli/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_sandro_botticelli/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_sandro_botticelli/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_sandro_botticelli/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_sandro_botticelli/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_sandro_botticelli/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_ted_nasmith/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_ted_nasmith/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_ted_nasmith/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_ted_nasmith/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_ted_nasmith/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_ted_nasmith/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_ted_nasmith/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_ted_nasmith/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_ten_hundred/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_ten_hundred/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_ten_hundred/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_ten_hundred/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_ten_hundred/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_ten_hundred/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_ten_hundred/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_ten_hundred/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_thomas_kinkade/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_thomas_kinkade/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_thomas_kinkade/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_thomas_kinkade/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_thomas_kinkade/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_thomas_kinkade/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_thomas_kinkade/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_thomas_kinkade/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_tivadar_csontva_ry_kosztka/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_tivadar_csontva_ry_kosztka/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_tivadar_csontva_ry_kosztka/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_tivadar_csontva_ry_kosztka/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_tivadar_csontva_ry_kosztka/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_tivadar_csontva_ry_kosztka/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_tivadar_csontva_ry_kosztka/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_tivadar_csontva_ry_kosztka/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_victo_ngai/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_victo_ngai/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_victo_ngai/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_victo_ngai/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_victo_ngai/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_victo_ngai/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_victo_ngai/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_victo_ngai/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_vincent_di_fate/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_vincent_di_fate/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_vincent_di_fate/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_vincent_di_fate/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_vincent_di_fate/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_vincent_di_fate/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_vincent_di_fate/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_vincent_di_fate/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_vincent_van_gogh/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_vincent_van_gogh/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_vincent_van_gogh/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_vincent_van_gogh/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_vincent_van_gogh/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_vincent_van_gogh/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_vincent_van_gogh/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_vincent_van_gogh/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_wes_anderson/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_wes_anderson/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_wes_anderson/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_wes_anderson/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_wes_anderson/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_wes_anderson/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_wes_anderson/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_wes_anderson/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_wlop/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_wlop/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_wlop/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_wlop/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_wlop/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_wlop/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_wlop/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_wlop/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_yoshitaka_amano/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_yoshitaka_amano/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_yoshitaka_amano/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_yoshitaka_amano/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_yoshitaka_amano/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/artist/by_yoshitaka_amano/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/artist/by_yoshitaka_amano/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/artist/by_yoshitaka_amano/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/aerial_view/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/aerial_view/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/aerial_view/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/aerial_view/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/aerial_view/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/aerial_view/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/aerial_view/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/aerial_view/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/canon50/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/canon50/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/canon50/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/canon50/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/canon50/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/canon50/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/canon50/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/canon50/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/cinematic/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/cinematic/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/cinematic/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/cinematic/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/cinematic/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/cinematic/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/cinematic/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/cinematic/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/close-up/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/close-up/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/close-up/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/close-up/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/close-up/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/close-up/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/close-up/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/close-up/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/color_grading/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/color_grading/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/color_grading/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/color_grading/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/color_grading/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/color_grading/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/color_grading/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/color_grading/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/dramatic/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/dramatic/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/dramatic/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/dramatic/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/dramatic/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/dramatic/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/dramatic/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/dramatic/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/film_grain/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/film_grain/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/film_grain/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/film_grain/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/film_grain/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/film_grain/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/film_grain/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/film_grain/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/fisheye_lens/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/fisheye_lens/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/fisheye_lens/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/fisheye_lens/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/fisheye_lens/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/fisheye_lens/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/fisheye_lens/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/fisheye_lens/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/glamor_shot/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/glamor_shot/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/glamor_shot/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/glamor_shot/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/glamor_shot/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/glamor_shot/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/glamor_shot/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/glamor_shot/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/golden_hour/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/golden_hour/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/golden_hour/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/golden_hour/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/golden_hour/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/golden_hour/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/golden_hour/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/golden_hour/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/hd/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/hd/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/hd/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/hd/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/hd/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/hd/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/hd/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/hd/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/landscape/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/landscape/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/landscape/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/landscape/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/landscape/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/landscape/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/landscape/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/landscape/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/lens_flare/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/lens_flare/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/lens_flare/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/lens_flare/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/lens_flare/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/lens_flare/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/lens_flare/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/lens_flare/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/macro/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/macro/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/macro/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/macro/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/macro/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/macro/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/macro/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/macro/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/photoshoot/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/photoshoot/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/photoshoot/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/photoshoot/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/photoshoot/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/photoshoot/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/photoshoot/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/photoshoot/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/polaroid/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/polaroid/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/polaroid/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/polaroid/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/polaroid/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/polaroid/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/polaroid/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/polaroid/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/portrait/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/portrait/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/portrait/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/portrait/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/portrait/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/portrait/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/portrait/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/portrait/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/studio_lighting/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/studio_lighting/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/studio_lighting/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/studio_lighting/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/studio_lighting/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/studio_lighting/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/studio_lighting/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/studio_lighting/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/vintage/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/vintage/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/vintage/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/vintage/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/vintage/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/vintage/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/vintage/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/vintage/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/war_photography/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/war_photography/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/war_photography/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/war_photography/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/war_photography/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/war_photography/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/war_photography/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/war_photography/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/white_balance/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/white_balance/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/white_balance/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/white_balance/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/white_balance/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/white_balance/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/white_balance/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/white_balance/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/wildlife_photography/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/wildlife_photography/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/wildlife_photography/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/wildlife_photography/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/camera/wildlife_photography/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/camera/wildlife_photography/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/camera/wildlife_photography/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/camera/wildlife_photography/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/carving_and_etching/etching/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/etching/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/carving_and_etching/etching/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/etching/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/carving_and_etching/etching/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/etching/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/carving_and_etching/etching/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/etching/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/carving_and_etching/linocut/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/linocut/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/carving_and_etching/linocut/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/linocut/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/carving_and_etching/linocut/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/linocut/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/carving_and_etching/linocut/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/linocut/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/carving_and_etching/paper-mache/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/paper-mache/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/carving_and_etching/paper-mache/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/paper-mache/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/carving_and_etching/paper-mache/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/paper-mache/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/carving_and_etching/paper-mache/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/paper-mache/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/carving_and_etching/paper_model/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/paper_model/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/carving_and_etching/paper_model/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/paper_model/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/carving_and_etching/paper_model/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/paper_model/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/carving_and_etching/paper_model/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/paper_model/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/carving_and_etching/papercutting/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/papercutting/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/carving_and_etching/papercutting/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/papercutting/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/carving_and_etching/papercutting/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/papercutting/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/carving_and_etching/papercutting/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/papercutting/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/carving_and_etching/pyrography/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/pyrography/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/carving_and_etching/pyrography/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/pyrography/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/carving_and_etching/pyrography/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/pyrography/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/carving_and_etching/pyrography/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/pyrography/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/carving_and_etching/wood-carving/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/wood-carving/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/carving_and_etching/wood-carving/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/wood-carving/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/carving_and_etching/wood-carving/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/wood-carving/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/carving_and_etching/wood-carving/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/carving_and_etching/wood-carving/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_rendering/3d_render/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/3d_render/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_rendering/3d_render/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/3d_render/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_rendering/3d_render/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/3d_render/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_rendering/3d_render/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/3d_render/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_rendering/corona_render/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/corona_render/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_rendering/corona_render/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/corona_render/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_rendering/corona_render/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/corona_render/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_rendering/corona_render/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/corona_render/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_rendering/creature_design/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/creature_design/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_rendering/creature_design/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/creature_design/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_rendering/creature_design/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/creature_design/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_rendering/creature_design/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/creature_design/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_rendering/cycles_render/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/cycles_render/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_rendering/cycles_render/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/cycles_render/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_rendering/cycles_render/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/cycles_render/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_rendering/cycles_render/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/cycles_render/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_rendering/detailed_render/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/detailed_render/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_rendering/detailed_render/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/detailed_render/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_rendering/detailed_render/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/detailed_render/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_rendering/detailed_render/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/detailed_render/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_rendering/environment_design/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/environment_design/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_rendering/environment_design/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/environment_design/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_rendering/environment_design/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/environment_design/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_rendering/environment_design/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/environment_design/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_rendering/glass_caustics/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/glass_caustics/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_rendering/glass_caustics/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/glass_caustics/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_rendering/glass_caustics/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/glass_caustics/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_rendering/glass_caustics/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/glass_caustics/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_rendering/global_illumination/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/global_illumination/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_rendering/global_illumination/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/global_illumination/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_rendering/global_illumination/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/global_illumination/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_rendering/global_illumination/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/global_illumination/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_rendering/intricate_environment/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/intricate_environment/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_rendering/intricate_environment/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/intricate_environment/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_rendering/intricate_environment/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/intricate_environment/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_rendering/intricate_environment/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/intricate_environment/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_rendering/lsd_render/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/lsd_render/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_rendering/lsd_render/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/lsd_render/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_rendering/lsd_render/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/lsd_render/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_rendering/lsd_render/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/lsd_render/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_rendering/octane_render/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/octane_render/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_rendering/octane_render/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/octane_render/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_rendering/octane_render/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/octane_render/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_rendering/octane_render/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/octane_render/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_rendering/pbr/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/pbr/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_rendering/pbr/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/pbr/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_rendering/pbr/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/pbr/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_rendering/pbr/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/pbr/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_rendering/subsurface_scattering/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/subsurface_scattering/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_rendering/subsurface_scattering/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/subsurface_scattering/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_rendering/subsurface_scattering/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/subsurface_scattering/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_rendering/subsurface_scattering/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_rendering/subsurface_scattering/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_software/3d_model/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/3d_model/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_software/3d_model/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/3d_model/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_software/3d_model/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/3d_model/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_software/3d_model/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/3d_model/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_software/3d_sculpt/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/3d_sculpt/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_software/3d_sculpt/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/3d_sculpt/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_software/3d_sculpt/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/3d_sculpt/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_software/3d_sculpt/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/3d_sculpt/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_software/3ds_max_model/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/3ds_max_model/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_software/3ds_max_model/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/3ds_max_model/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_software/3ds_max_model/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/3ds_max_model/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_software/3ds_max_model/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/3ds_max_model/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_software/blender_model/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/blender_model/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_software/blender_model/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/blender_model/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_software/blender_model/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/blender_model/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_software/blender_model/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/blender_model/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_software/cinema4d_model/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/cinema4d_model/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_software/cinema4d_model/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/cinema4d_model/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_software/cinema4d_model/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/cinema4d_model/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_software/cinema4d_model/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/cinema4d_model/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_software/maya_model/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/maya_model/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_software/maya_model/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/maya_model/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_software/maya_model/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/maya_model/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_software/maya_model/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/maya_model/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_software/unreal_engine/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/unreal_engine/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_software/unreal_engine/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/unreal_engine/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_software/unreal_engine/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/unreal_engine/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_software/unreal_engine/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/unreal_engine/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_software/zbrush_sculpt/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/zbrush_sculpt/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_software/zbrush_sculpt/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/zbrush_sculpt/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/cgi_software/zbrush_sculpt/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/cgi_software/zbrush_sculpt/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/cgi_software/zbrush_sculpt/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/cgi_software/zbrush_sculpt/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/color/beautiful_lighting/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/beautiful_lighting/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/color/beautiful_lighting/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/color/beautiful_lighting/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/color/beautiful_lighting/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/beautiful_lighting/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/color/beautiful_lighting/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/color/beautiful_lighting/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/color/cold_color_palette/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/cold_color_palette/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/color/cold_color_palette/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/color/cold_color_palette/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/color/cold_color_palette/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/cold_color_palette/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/color/cold_color_palette/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/color/cold_color_palette/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/color/colorful/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/colorful/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/color/colorful/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/color/colorful/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/color/colorful/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/colorful/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/color/colorful/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/color/colorful/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/color/dynamic_lighting/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/dynamic_lighting/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/color/dynamic_lighting/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/color/dynamic_lighting/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/color/dynamic_lighting/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/dynamic_lighting/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/color/dynamic_lighting/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/color/dynamic_lighting/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/color/electric_colors/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/electric_colors/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/color/electric_colors/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/color/electric_colors/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/color/electric_colors/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/electric_colors/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/color/electric_colors/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/color/electric_colors/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/color/infrared/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/infrared/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/color/infrared/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/color/infrared/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/color/infrared/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/infrared/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/color/infrared/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/color/infrared/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/color/neon/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/neon/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/color/neon/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/color/neon/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/color/neon/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/neon/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/color/neon/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/color/neon/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/color/pastel/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/pastel/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/color/pastel/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/color/pastel/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/color/pastel/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/pastel/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/color/pastel/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/color/pastel/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/color/synthwave/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/synthwave/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/color/synthwave/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/color/synthwave/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/color/synthwave/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/synthwave/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/color/synthwave/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/color/synthwave/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/color/warm_color_palette/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/warm_color_palette/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/color/warm_color_palette/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/color/warm_color_palette/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/color/warm_color_palette/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/color/warm_color_palette/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/color/warm_color_palette/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/color/warm_color_palette/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/drawing_style/cel_shading/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/cel_shading/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/drawing_style/cel_shading/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/cel_shading/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/drawing_style/cel_shading/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/cel_shading/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/drawing_style/cel_shading/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/cel_shading/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/drawing_style/children_s_drawing/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/children_s_drawing/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/drawing_style/children_s_drawing/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/children_s_drawing/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/drawing_style/children_s_drawing/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/children_s_drawing/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/drawing_style/children_s_drawing/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/children_s_drawing/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/drawing_style/crosshatch/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/crosshatch/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/drawing_style/crosshatch/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/crosshatch/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/drawing_style/crosshatch/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/crosshatch/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/drawing_style/crosshatch/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/crosshatch/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/drawing_style/detailed_and_intricate/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/detailed_and_intricate/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/drawing_style/detailed_and_intricate/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/detailed_and_intricate/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/drawing_style/detailed_and_intricate/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/detailed_and_intricate/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/drawing_style/detailed_and_intricate/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/detailed_and_intricate/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/drawing_style/doodle/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/doodle/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/drawing_style/doodle/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/doodle/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/drawing_style/doodle/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/doodle/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/drawing_style/doodle/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/doodle/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/drawing_style/dot_art/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/dot_art/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/drawing_style/dot_art/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/dot_art/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/drawing_style/dot_art/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/dot_art/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/drawing_style/dot_art/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/dot_art/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/drawing_style/line_art/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/line_art/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/drawing_style/line_art/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/line_art/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/drawing_style/line_art/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/line_art/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/drawing_style/line_art/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/line_art/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/drawing_style/sketch/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/sketch/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/drawing_style/sketch/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/sketch/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/drawing_style/sketch/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/drawing_style/sketch/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/drawing_style/sketch/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/drawing_style/sketch/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/angry/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/angry/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/angry/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/angry/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/angry/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/angry/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/angry/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/angry/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/bitter/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/bitter/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/bitter/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/bitter/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/bitter/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/bitter/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/bitter/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/bitter/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/disgusted/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/disgusted/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/disgusted/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/disgusted/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/disgusted/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/disgusted/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/disgusted/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/disgusted/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/embarrassed/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/embarrassed/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/embarrassed/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/embarrassed/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/embarrassed/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/embarrassed/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/embarrassed/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/embarrassed/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/evil/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/evil/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/evil/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/evil/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/evil/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/evil/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/evil/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/evil/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/excited/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/excited/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/excited/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/excited/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/excited/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/excited/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/excited/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/excited/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/fear/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/fear/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/fear/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/fear/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/fear/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/fear/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/fear/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/fear/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/funny/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/funny/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/funny/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/funny/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/funny/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/funny/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/funny/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/funny/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/happy/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/happy/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/happy/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/happy/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/happy/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/happy/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/happy/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/happy/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/horrifying/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/horrifying/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/horrifying/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/horrifying/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/horrifying/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/horrifying/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/horrifying/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/horrifying/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/lonely/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/lonely/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/lonely/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/lonely/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/lonely/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/lonely/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/lonely/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/lonely/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/melancholic/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/melancholic/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/melancholic/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/melancholic/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/melancholic/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/melancholic/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/melancholic/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/melancholic/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/sad/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/sad/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/sad/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/sad/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/sad/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/sad/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/sad/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/sad/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/serene/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/serene/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/serene/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/serene/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/serene/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/serene/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/serene/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/serene/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/surprised/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/surprised/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/surprised/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/surprised/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/emotions/surprised/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/emotions/surprised/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/emotions/surprised/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/emotions/surprised/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/pen/chalk/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/pen/chalk/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/pen/chalk/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/pen/chalk/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/pen/chalk/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/pen/chalk/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/pen/chalk/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/pen/chalk/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/pen/colored_pencil/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/pen/colored_pencil/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/pen/colored_pencil/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/pen/colored_pencil/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/pen/colored_pencil/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/pen/colored_pencil/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/pen/colored_pencil/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/pen/colored_pencil/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/pen/graphite/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/pen/graphite/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/pen/graphite/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/pen/graphite/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/pen/graphite/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/pen/graphite/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/pen/graphite/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/pen/graphite/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/pen/ink/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/pen/ink/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/pen/ink/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/pen/ink/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/pen/ink/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/pen/ink/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/pen/ink/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/pen/ink/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/pen/oil_paint/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/pen/oil_paint/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/pen/oil_paint/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/pen/oil_paint/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/pen/oil_paint/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/pen/oil_paint/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/pen/oil_paint/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/pen/oil_paint/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/pen/pastel_art/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/pen/pastel_art/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/pen/pastel_art/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/pen/pastel_art/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/pen/pastel_art/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/pen/pastel_art/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/pen/pastel_art/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/pen/pastel_art/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/16-bit/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/16-bit/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/16-bit/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/16-bit/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/16-bit/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/16-bit/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/16-bit/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/16-bit/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/2d/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/2d/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/2d/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/2d/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/2d/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/2d/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/2d/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/2d/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/8-bit/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/8-bit/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/8-bit/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/8-bit/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/8-bit/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/8-bit/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/8-bit/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/8-bit/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/anaglyph/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/anaglyph/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/anaglyph/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/anaglyph/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/anaglyph/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/anaglyph/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/anaglyph/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/anaglyph/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/anime/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/anime/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/anime/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/anime/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/anime/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/anime/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/anime/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/anime/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/art_nouveau/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/art_nouveau/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/art_nouveau/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/art_nouveau/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/art_nouveau/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/art_nouveau/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/art_nouveau/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/art_nouveau/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/baroque/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/baroque/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/baroque/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/baroque/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/baroque/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/baroque/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/baroque/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/baroque/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/bauhaus/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/bauhaus/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/bauhaus/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/bauhaus/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/bauhaus/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/bauhaus/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/bauhaus/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/bauhaus/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/cartoon/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/cartoon/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/cartoon/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/cartoon/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/cartoon/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/cartoon/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/cartoon/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/cartoon/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/cgi/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/cgi/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/cgi/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/cgi/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/cgi/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/cgi/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/cgi/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/cgi/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/comic_book/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/comic_book/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/comic_book/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/comic_book/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/comic_book/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/comic_book/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/comic_book/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/comic_book/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/concept_art/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/concept_art/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/concept_art/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/concept_art/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/concept_art/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/concept_art/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/concept_art/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/concept_art/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/constructivist/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/constructivist/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/constructivist/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/constructivist/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/constructivist/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/constructivist/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/constructivist/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/constructivist/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/cubist/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/cubist/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/cubist/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/cubist/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/cubist/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/cubist/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/cubist/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/cubist/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/dadaist/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/dadaist/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/dadaist/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/dadaist/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/dadaist/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/dadaist/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/dadaist/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/dadaist/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/digital_art/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/digital_art/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/digital_art/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/digital_art/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/digital_art/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/digital_art/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/digital_art/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/digital_art/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/expressionist/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/expressionist/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/expressionist/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/expressionist/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/expressionist/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/expressionist/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/expressionist/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/expressionist/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/fantasy/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/fantasy/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/fantasy/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/fantasy/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/fantasy/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/fantasy/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/fantasy/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/fantasy/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/fauvist/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/fauvist/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/fauvist/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/fauvist/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/fauvist/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/fauvist/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/fauvist/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/fauvist/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/figurative/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/figurative/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/figurative/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/figurative/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/figurative/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/figurative/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/figurative/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/figurative/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/geometric/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/geometric/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/geometric/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/geometric/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/geometric/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/geometric/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/geometric/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/geometric/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/graphic_novel/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/graphic_novel/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/graphic_novel/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/graphic_novel/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/graphic_novel/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/graphic_novel/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/graphic_novel/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/graphic_novel/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/hard_edge_painting/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/hard_edge_painting/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/hard_edge_painting/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/hard_edge_painting/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/hard_edge_painting/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/hard_edge_painting/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/hard_edge_painting/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/hard_edge_painting/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/hydrodipped/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/hydrodipped/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/hydrodipped/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/hydrodipped/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/hydrodipped/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/hydrodipped/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/hydrodipped/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/hydrodipped/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/impressionistic/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/impressionistic/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/impressionistic/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/impressionistic/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/impressionistic/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/impressionistic/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/impressionistic/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/impressionistic/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/lithography/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/lithography/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/lithography/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/lithography/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/lithography/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/lithography/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/lithography/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/lithography/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/manga/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/manga/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/manga/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/manga/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/manga/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/manga/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/manga/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/manga/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/minimalist/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/minimalist/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/minimalist/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/minimalist/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/minimalist/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/minimalist/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/minimalist/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/minimalist/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/modern_art/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/modern_art/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/modern_art/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/modern_art/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/modern_art/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/modern_art/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/modern_art/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/modern_art/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/mosaic/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/mosaic/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/mosaic/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/mosaic/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/mosaic/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/mosaic/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/mosaic/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/mosaic/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/mural/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/mural/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/mural/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/mural/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/mural/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/mural/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/mural/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/mural/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/naive/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/naive/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/naive/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/naive/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/naive/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/naive/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/naive/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/naive/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/neoclassical/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/neoclassical/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/neoclassical/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/neoclassical/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/neoclassical/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/neoclassical/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/neoclassical/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/neoclassical/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/photo/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/photo/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/photo/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/photo/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/photo/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/photo/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/photo/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/photo/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/realistic/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/realistic/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/realistic/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/realistic/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/realistic/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/realistic/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/realistic/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/realistic/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/rococo/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/rococo/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/rococo/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/rococo/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/rococo/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/rococo/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/rococo/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/rococo/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/romantic/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/romantic/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/romantic/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/romantic/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/romantic/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/romantic/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/romantic/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/romantic/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/street_art/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/street_art/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/street_art/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/street_art/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/street_art/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/street_art/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/street_art/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/street_art/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/stuckist/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/stuckist/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/stuckist/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/stuckist/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/stuckist/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/stuckist/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/stuckist/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/stuckist/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/surrealist/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/surrealist/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/surrealist/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/surrealist/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/surrealist/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/surrealist/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/surrealist/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/surrealist/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/symbolist/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/symbolist/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/symbolist/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/symbolist/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/symbolist/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/symbolist/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/symbolist/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/symbolist/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/visual_novel/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/visual_novel/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/visual_novel/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/visual_novel/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/visual_novel/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/visual_novel/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/visual_novel/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/visual_novel/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/watercolor/landscape-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/watercolor/landscape-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/watercolor/landscape-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/watercolor/landscape-0.jpg diff --git a/ui/media/modifier-thumbnails/visual_style/watercolor/portrait-0.jpg b/ui/frontend/assets/media/modifier-thumbnails/visual_style/watercolor/portrait-0.jpg similarity index 100% rename from ui/media/modifier-thumbnails/visual_style/watercolor/portrait-0.jpg rename to ui/frontend/assets/media/modifier-thumbnails/visual_style/watercolor/portrait-0.jpg diff --git a/ui/frontend/assets/modifiers.json b/ui/frontend/assets/modifiers.json new file mode 100644 index 00000000..325e724e --- /dev/null +++ b/ui/frontend/assets/modifiers.json @@ -0,0 +1,2717 @@ +[ + { + "category": "Drawing Style", + "modifiers": [ + { + "modifier": "Cel Shading", + "previews": [ + { + "name": "portrait", + "path": "drawing_style/cel_shading/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "drawing_style/cel_shading/landscape-0.jpg" + } + ] + }, + { + "modifier": "Children's Drawing", + "previews": [ + { + "name": "portrait", + "path": "drawing_style/children_s_drawing/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "drawing_style/children_s_drawing/landscape-0.jpg" + } + ] + }, + { + "modifier": "Crosshatch", + "previews": [ + { + "name": "portrait", + "path": "drawing_style/crosshatch/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "drawing_style/crosshatch/landscape-0.jpg" + } + ] + }, + { + "modifier": "Detailed and Intricate", + "previews": [ + { + "name": "portrait", + "path": "drawing_style/detailed_and_intricate/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "drawing_style/detailed_and_intricate/landscape-0.jpg" + } + ] + }, + { + "modifier": "Doodle", + "previews": [ + { + "name": "portrait", + "path": "drawing_style/doodle/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "drawing_style/doodle/landscape-0.jpg" + } + ] + }, + { + "modifier": "Dot Art", + "previews": [ + { + "name": "portrait", + "path": "drawing_style/dot_art/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "drawing_style/dot_art/landscape-0.jpg" + } + ] + }, + { + "modifier": "Line Art", + "previews": [ + { + "name": "portrait", + "path": "drawing_style/line_art/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "drawing_style/line_art/landscape-0.jpg" + } + ] + }, + { + "modifier": "Sketch", + "previews": [ + { + "name": "portrait", + "path": "drawing_style/sketch/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "drawing_style/sketch/landscape-0.jpg" + } + ] + } + ] + }, + { + "category": "Visual Style", + "modifiers": [ + { + "modifier": "2D", + "previews": [ + { + "name": "portrait", + "path": "visual_style/2d/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/2d/landscape-0.jpg" + } + ] + }, + { + "modifier": "8-Bit", + "previews": [ + { + "name": "portrait", + "path": "visual_style/8-bit/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/8-bit/landscape-0.jpg" + } + ] + }, + { + "modifier": "16-Bit", + "previews": [ + { + "name": "portrait", + "path": "visual_style/16-bit/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/16-bit/landscape-0.jpg" + } + ] + }, + { + "modifier": "Anaglyph", + "previews": [ + { + "name": "portrait", + "path": "visual_style/anaglyph/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/anaglyph/landscape-0.jpg" + } + ] + }, + { + "modifier": "Anime", + "previews": [ + { + "name": "portrait", + "path": "visual_style/anime/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/anime/landscape-0.jpg" + } + ] + }, + { + "modifier": "Art Nouveau", + "previews": [ + { + "name": "portrait", + "path": "visual_style/art_nouveau/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/art_nouveau/landscape-0.jpg" + } + ] + }, + { + "modifier": "Bauhaus", + "previews": [ + { + "name": "portrait", + "path": "visual_style/bauhaus/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/bauhaus/landscape-0.jpg" + } + ] + }, + { + "modifier": "Baroque", + "previews": [ + { + "name": "portrait", + "path": "visual_style/baroque/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/baroque/landscape-0.jpg" + } + ] + }, + { + "modifier": "CGI", + "previews": [ + { + "name": "portrait", + "path": "visual_style/cgi/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/cgi/landscape-0.jpg" + } + ] + }, + { + "modifier": "Cartoon", + "previews": [ + { + "name": "portrait", + "path": "visual_style/cartoon/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/cartoon/landscape-0.jpg" + } + ] + }, + { + "modifier": "Comic Book", + "previews": [ + { + "name": "portrait", + "path": "visual_style/comic_book/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/comic_book/landscape-0.jpg" + } + ] + }, + { + "modifier": "Concept Art", + "previews": [ + { + "name": "portrait", + "path": "visual_style/concept_art/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/concept_art/landscape-0.jpg" + } + ] + }, + { + "modifier": "Constructivist", + "previews": [ + { + "name": "portrait", + "path": "visual_style/constructivist/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/constructivist/landscape-0.jpg" + } + ] + }, + { + "modifier": "Cubist", + "previews": [ + { + "name": "portrait", + "path": "visual_style/cubist/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/cubist/landscape-0.jpg" + } + ] + }, + { + "modifier": "Digital Art", + "previews": [ + { + "name": "portrait", + "path": "visual_style/digital_art/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/digital_art/landscape-0.jpg" + } + ] + }, + { + "modifier": "Dadaist", + "previews": [ + { + "name": "portrait", + "path": "visual_style/dadaist/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/dadaist/landscape-0.jpg" + } + ] + }, + { + "modifier": "Expressionist", + "previews": [ + { + "name": "portrait", + "path": "visual_style/expressionist/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/expressionist/landscape-0.jpg" + } + ] + }, + { + "modifier": "Fantasy", + "previews": [ + { + "name": "portrait", + "path": "visual_style/fantasy/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/fantasy/landscape-0.jpg" + } + ] + }, + { + "modifier": "Fauvist", + "previews": [ + { + "name": "portrait", + "path": "visual_style/fauvist/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/fauvist/landscape-0.jpg" + } + ] + }, + { + "modifier": "Figurative", + "previews": [ + { + "name": "portrait", + "path": "visual_style/figurative/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/figurative/landscape-0.jpg" + } + ] + }, + { + "modifier": "Graphic Novel", + "previews": [ + { + "name": "portrait", + "path": "visual_style/graphic_novel/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/graphic_novel/landscape-0.jpg" + } + ] + }, + { + "modifier": "Geometric", + "previews": [ + { + "name": "portrait", + "path": "visual_style/geometric/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/geometric/landscape-0.jpg" + } + ] + }, + { + "modifier": "Hard Edge Painting", + "previews": [ + { + "name": "portrait", + "path": "visual_style/hard_edge_painting/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/hard_edge_painting/landscape-0.jpg" + } + ] + }, + { + "modifier": "Hydrodipped", + "previews": [ + { + "name": "portrait", + "path": "visual_style/hydrodipped/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/hydrodipped/landscape-0.jpg" + } + ] + }, + { + "modifier": "Impressionistic", + "previews": [ + { + "name": "portrait", + "path": "visual_style/impressionistic/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/impressionistic/landscape-0.jpg" + } + ] + }, + { + "modifier": "Lithography", + "previews": [ + { + "name": "portrait", + "path": "visual_style/lithography/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/lithography/landscape-0.jpg" + } + ] + }, + { + "modifier": "Manga", + "previews": [ + { + "name": "portrait", + "path": "visual_style/manga/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/manga/landscape-0.jpg" + } + ] + }, + { + "modifier": "Minimalist", + "previews": [ + { + "name": "portrait", + "path": "visual_style/minimalist/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/minimalist/landscape-0.jpg" + } + ] + }, + { + "modifier": "Modern Art", + "previews": [ + { + "name": "portrait", + "path": "visual_style/modern_art/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/modern_art/landscape-0.jpg" + } + ] + }, + { + "modifier": "Mosaic", + "previews": [ + { + "name": "portrait", + "path": "visual_style/mosaic/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/mosaic/landscape-0.jpg" + } + ] + }, + { + "modifier": "Mural", + "previews": [ + { + "name": "portrait", + "path": "visual_style/mural/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/mural/landscape-0.jpg" + } + ] + }, + { + "modifier": "Naive", + "previews": [ + { + "name": "portrait", + "path": "visual_style/naive/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/naive/landscape-0.jpg" + } + ] + }, + { + "modifier": "Neoclassical", + "previews": [ + { + "name": "portrait", + "path": "visual_style/neoclassical/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/neoclassical/landscape-0.jpg" + } + ] + }, + { + "modifier": "Photo", + "previews": [ + { + "name": "portrait", + "path": "visual_style/photo/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/photo/landscape-0.jpg" + } + ] + }, + { + "modifier": "Realistic", + "previews": [ + { + "name": "portrait", + "path": "visual_style/realistic/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/realistic/landscape-0.jpg" + } + ] + }, + { + "modifier": "Rococo", + "previews": [ + { + "name": "portrait", + "path": "visual_style/rococo/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/rococo/landscape-0.jpg" + } + ] + }, + { + "modifier": "Romantic", + "previews": [ + { + "name": "portrait", + "path": "visual_style/romantic/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/romantic/landscape-0.jpg" + } + ] + }, + { + "modifier": "Street Art", + "previews": [ + { + "name": "portrait", + "path": "visual_style/street_art/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/street_art/landscape-0.jpg" + } + ] + }, + { + "modifier": "Symbolist", + "previews": [ + { + "name": "portrait", + "path": "visual_style/symbolist/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/symbolist/landscape-0.jpg" + } + ] + }, + { + "modifier": "Stuckist", + "previews": [ + { + "name": "portrait", + "path": "visual_style/stuckist/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/stuckist/landscape-0.jpg" + } + ] + }, + { + "modifier": "Surrealist", + "previews": [ + { + "name": "portrait", + "path": "visual_style/surrealist/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/surrealist/landscape-0.jpg" + } + ] + }, + { + "modifier": "Visual Novel", + "previews": [ + { + "name": "portrait", + "path": "visual_style/visual_novel/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/visual_novel/landscape-0.jpg" + } + ] + }, + { + "modifier": "Watercolor", + "previews": [ + { + "name": "portrait", + "path": "visual_style/watercolor/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "visual_style/watercolor/landscape-0.jpg" + } + ] + } + ] + }, + { + "category": "Pen", + "modifiers": [ + { + "modifier": "Chalk", + "previews": [ + { + "name": "portrait", + "path": "pen/chalk/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "pen/chalk/landscape-0.jpg" + } + ] + }, + { + "modifier": "Colored Pencil", + "previews": [ + { + "name": "portrait", + "path": "pen/colored_pencil/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "pen/colored_pencil/landscape-0.jpg" + } + ] + }, + { + "modifier": "Graphite", + "previews": [ + { + "name": "portrait", + "path": "pen/graphite/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "pen/graphite/landscape-0.jpg" + } + ] + }, + { + "modifier": "Ink", + "previews": [ + { + "name": "portrait", + "path": "pen/ink/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "pen/ink/landscape-0.jpg" + } + ] + }, + { + "modifier": "Oil Paint", + "previews": [ + { + "name": "portrait", + "path": "pen/oil_paint/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "pen/oil_paint/landscape-0.jpg" + } + ] + }, + { + "modifier": "Pastel Art", + "previews": [ + { + "name": "portrait", + "path": "pen/pastel_art/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "pen/pastel_art/landscape-0.jpg" + } + ] + } + ] + }, + { + "category": "Carving and Etching", + "modifiers": [ + { + "modifier": "etching", + "previews": [ + { + "name": "portrait", + "path": "carving_and_etching/etching/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "carving_and_etching/etching/landscape-0.jpg" + } + ] + }, + { + "modifier": "Linocut", + "previews": [ + { + "name": "portrait", + "path": "carving_and_etching/linocut/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "carving_and_etching/linocut/landscape-0.jpg" + } + ] + }, + { + "modifier": "Paper Model", + "previews": [ + { + "name": "portrait", + "path": "carving_and_etching/paper_model/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "carving_and_etching/paper_model/landscape-0.jpg" + } + ] + }, + { + "modifier": "Paper-Mache", + "previews": [ + { + "name": "portrait", + "path": "carving_and_etching/paper-mache/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "carving_and_etching/paper-mache/landscape-0.jpg" + } + ] + }, + { + "modifier": "Papercutting", + "previews": [ + { + "name": "portrait", + "path": "carving_and_etching/papercutting/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "carving_and_etching/papercutting/landscape-0.jpg" + } + ] + }, + { + "modifier": "Pyrography", + "previews": [ + { + "name": "portrait", + "path": "carving_and_etching/pyrography/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "carving_and_etching/pyrography/landscape-0.jpg" + } + ] + }, + { + "modifier": "Wood-Carving", + "previews": [ + { + "name": "portrait", + "path": "carving_and_etching/wood-carving/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "carving_and_etching/wood-carving/landscape-0.jpg" + } + ] + } + ] + }, + { + "category": "Camera", + "modifiers": [ + { + "modifier": "Aerial View", + "previews": [ + { + "name": "portrait", + "path": "camera/aerial_view/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "camera/aerial_view/landscape-0.jpg" + } + ] + }, + { + "modifier": "Canon50", + "previews": [ + { + "name": "portrait", + "path": "camera/canon50/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "camera/canon50/landscape-0.jpg" + } + ] + }, + { + "modifier": "Cinematic", + "previews": [ + { + "name": "portrait", + "path": "camera/cinematic/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "camera/cinematic/landscape-0.jpg" + } + ] + }, + { + "modifier": "Close-up", + "previews": [ + { + "name": "portrait", + "path": "camera/close-up/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "camera/close-up/landscape-0.jpg" + } + ] + }, + { + "modifier": "Color Grading", + "previews": [ + { + "name": "portrait", + "path": "camera/color_grading/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "camera/color_grading/landscape-0.jpg" + } + ] + }, + { + "modifier": "Dramatic", + "previews": [ + { + "name": "portrait", + "path": "camera/dramatic/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "camera/dramatic/landscape-0.jpg" + } + ] + }, + { + "modifier": "Film Grain", + "previews": [ + { + "name": "portrait", + "path": "camera/film_grain/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "camera/film_grain/landscape-0.jpg" + } + ] + }, + { + "modifier": "Fisheye Lens", + "previews": [ + { + "name": "portrait", + "path": "camera/fisheye_lens/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "camera/fisheye_lens/landscape-0.jpg" + } + ] + }, + { + "modifier": "Glamor Shot", + "previews": [ + { + "name": "portrait", + "path": "camera/glamor_shot/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "camera/glamor_shot/landscape-0.jpg" + } + ] + }, + { + "modifier": "Golden Hour", + "previews": [ + { + "name": "portrait", + "path": "camera/golden_hour/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "camera/golden_hour/landscape-0.jpg" + } + ] + }, + { + "modifier": "HD", + "previews": [ + { + "name": "portrait", + "path": "camera/hd/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "camera/hd/landscape-0.jpg" + } + ] + }, + { + "modifier": "Landscape", + "previews": [ + { + "name": "portrait", + "path": "camera/landscape/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "camera/landscape/landscape-0.jpg" + } + ] + }, + { + "modifier": "Lens Flare", + "previews": [ + { + "name": "portrait", + "path": "camera/lens_flare/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "camera/lens_flare/landscape-0.jpg" + } + ] + }, + { + "modifier": "Macro", + "previews": [ + { + "name": "portrait", + "path": "camera/macro/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "camera/macro/landscape-0.jpg" + } + ] + }, + { + "modifier": "Polaroid", + "previews": [ + { + "name": "portrait", + "path": "camera/polaroid/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "camera/polaroid/landscape-0.jpg" + } + ] + }, + { + "modifier": "Photoshoot", + "previews": [ + { + "name": "portrait", + "path": "camera/photoshoot/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "camera/photoshoot/landscape-0.jpg" + } + ] + }, + { + "modifier": "Portrait", + "previews": [ + { + "name": "portrait", + "path": "camera/portrait/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "camera/portrait/landscape-0.jpg" + } + ] + }, + { + "modifier": "Studio Lighting", + "previews": [ + { + "name": "portrait", + "path": "camera/studio_lighting/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "camera/studio_lighting/landscape-0.jpg" + } + ] + }, + { + "modifier": "Vintage", + "previews": [ + { + "name": "portrait", + "path": "camera/vintage/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "camera/vintage/landscape-0.jpg" + } + ] + }, + { + "modifier": "War Photography", + "previews": [ + { + "name": "portrait", + "path": "camera/war_photography/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "camera/war_photography/landscape-0.jpg" + } + ] + }, + { + "modifier": "White Balance", + "previews": [ + { + "name": "portrait", + "path": "camera/white_balance/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "camera/white_balance/landscape-0.jpg" + } + ] + }, + { + "modifier": "Wildlife Photography", + "previews": [ + { + "name": "portrait", + "path": "camera/wildlife_photography/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "camera/wildlife_photography/landscape-0.jpg" + } + ] + } + ] + }, + { + "category": "Color", + "modifiers": [ + { + "modifier": "Beautiful Lighting", + "previews": [ + { + "name": "portrait", + "path": "color/beautiful_lighting/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "color/beautiful_lighting/landscape-0.jpg" + } + ] + }, + { + "modifier": "Cold Color Palette", + "previews": [ + { + "name": "portrait", + "path": "color/cold_color_palette/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "color/cold_color_palette/landscape-0.jpg" + } + ] + }, + { + "modifier": "Colorful", + "previews": [ + { + "name": "portrait", + "path": "color/colorful/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "color/colorful/landscape-0.jpg" + } + ] + }, + { + "modifier": "Dynamic Lighting", + "previews": [ + { + "name": "portrait", + "path": "color/dynamic_lighting/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "color/dynamic_lighting/landscape-0.jpg" + } + ] + }, + { + "modifier": "Electric Colors", + "previews": [ + { + "name": "portrait", + "path": "color/electric_colors/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "color/electric_colors/landscape-0.jpg" + } + ] + }, + { + "modifier": "Infrared", + "previews": [ + { + "name": "portrait", + "path": "color/infrared/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "color/infrared/landscape-0.jpg" + } + ] + }, + { + "modifier": "Pastel", + "previews": [ + { + "name": "portrait", + "path": "color/pastel/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "color/pastel/landscape-0.jpg" + } + ] + }, + { + "modifier": "Neon", + "previews": [ + { + "name": "portrait", + "path": "color/neon/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "color/neon/landscape-0.jpg" + } + ] + }, + { + "modifier": "Synthwave", + "previews": [ + { + "name": "portrait", + "path": "color/synthwave/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "color/synthwave/landscape-0.jpg" + } + ] + }, + { + "modifier": "Warm Color Palette", + "previews": [ + { + "name": "portrait", + "path": "color/warm_color_palette/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "color/warm_color_palette/landscape-0.jpg" + } + ] + } + ] + }, + { + "category": "Emotions", + "modifiers": [ + { + "modifier": "Angry", + "previews": [ + { + "name": "portrait", + "path": "emotions/angry/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "emotions/angry/landscape-0.jpg" + } + ] + }, + { + "modifier": "Bitter", + "previews": [ + { + "name": "portrait", + "path": "emotions/bitter/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "emotions/bitter/landscape-0.jpg" + } + ] + }, + { + "modifier": "Disgusted", + "previews": [ + { + "name": "portrait", + "path": "emotions/disgusted/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "emotions/disgusted/landscape-0.jpg" + } + ] + }, + { + "modifier": "Embarrassed", + "previews": [ + { + "name": "portrait", + "path": "emotions/embarrassed/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "emotions/embarrassed/landscape-0.jpg" + } + ] + }, + { + "modifier": "Evil", + "previews": [ + { + "name": "portrait", + "path": "emotions/evil/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "emotions/evil/landscape-0.jpg" + } + ] + }, + { + "modifier": "Excited", + "previews": [ + { + "name": "portrait", + "path": "emotions/excited/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "emotions/excited/landscape-0.jpg" + } + ] + }, + { + "modifier": "Fear", + "previews": [ + { + "name": "portrait", + "path": "emotions/fear/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "emotions/fear/landscape-0.jpg" + } + ] + }, + { + "modifier": "Funny", + "previews": [ + { + "name": "portrait", + "path": "emotions/funny/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "emotions/funny/landscape-0.jpg" + } + ] + }, + { + "modifier": "Happy", + "previews": [ + { + "name": "portrait", + "path": "emotions/happy/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "emotions/happy/landscape-0.jpg" + } + ] + }, + { + "modifier": "Horrifying", + "previews": [ + { + "name": "portrait", + "path": "emotions/horrifying/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "emotions/horrifying/landscape-0.jpg" + } + ] + }, + { + "modifier": "Lonely", + "previews": [ + { + "name": "portrait", + "path": "emotions/lonely/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "emotions/lonely/landscape-0.jpg" + } + ] + }, + { + "modifier": "Sad", + "previews": [ + { + "name": "portrait", + "path": "emotions/sad/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "emotions/sad/landscape-0.jpg" + } + ] + }, + { + "modifier": "Serene", + "previews": [ + { + "name": "portrait", + "path": "emotions/serene/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "emotions/serene/landscape-0.jpg" + } + ] + }, + { + "modifier": "Surprised", + "previews": [ + { + "name": "portrait", + "path": "emotions/surprised/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "emotions/surprised/landscape-0.jpg" + } + ] + }, + { + "modifier": "Melancholic", + "previews": [ + { + "name": "portrait", + "path": "emotions/melancholic/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "emotions/melancholic/landscape-0.jpg" + } + ] + } + ] + }, + { + "category": "Artist", + "modifiers": [ + { + "modifier": "Artstation", + "previews": [ + { + "name": "portrait", + "path": "artist/artstation/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/artstation/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Agnes Lawrence Pelton", + "previews": [ + { + "name": "portrait", + "path": "artist/by_agnes_lawrence_pelton/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_agnes_lawrence_pelton/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Akihito Yoshida", + "previews": [ + { + "name": "portrait", + "path": "artist/by_akihito_yoshida/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_akihito_yoshida/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Alex Grey", + "previews": [ + { + "name": "portrait", + "path": "artist/by_alex_grey/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_alex_grey/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Alexander Jansson", + "previews": [ + { + "name": "portrait", + "path": "artist/by_alexander_jansson/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_alexander_jansson/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Alphonse Mucha", + "previews": [ + { + "name": "portrait", + "path": "artist/by_alphonse_mucha/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_alphonse_mucha/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Andy Warhol", + "previews": [ + { + "name": "portrait", + "path": "artist/by_andy_warhol/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_andy_warhol/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Artgerm", + "previews": [ + { + "name": "portrait", + "path": "artist/by_artgerm/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_artgerm/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Asaf Hanuka", + "previews": [ + { + "name": "portrait", + "path": "artist/by_asaf_hanuka/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_asaf_hanuka/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Aubrey Beardsley", + "previews": [ + { + "name": "portrait", + "path": "artist/by_aubrey_beardsley/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_aubrey_beardsley/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Banksy", + "previews": [ + { + "name": "portrait", + "path": "artist/by_banksy/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_banksy/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Beeple", + "previews": [ + { + "name": "portrait", + "path": "artist/by_beeple/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_beeple/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Ben Enwonwu", + "previews": [ + { + "name": "portrait", + "path": "artist/by_ben_enwonwu/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_ben_enwonwu/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Bob Eggleton", + "previews": [ + { + "name": "portrait", + "path": "artist/by_bob_eggleton/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_bob_eggleton/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Caravaggio Michelangelo Merisi", + "previews": [ + { + "name": "portrait", + "path": "artist/by_caravaggio_michelangelo_merisi/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_caravaggio_michelangelo_merisi/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Caspar David Friedrich", + "previews": [ + { + "name": "portrait", + "path": "artist/by_caspar_david_friedrich/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_caspar_david_friedrich/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Chris Foss", + "previews": [ + { + "name": "portrait", + "path": "artist/by_chris_foss/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_chris_foss/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Claude Monet", + "previews": [ + { + "name": "portrait", + "path": "artist/by_claude_monet/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_claude_monet/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Dan Mumford", + "previews": [ + { + "name": "portrait", + "path": "artist/by_dan_mumford/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_dan_mumford/landscape-0.jpg" + } + ] + }, + { + "modifier": "by David Mann", + "previews": [ + { + "name": "portrait", + "path": "artist/by_david_mann/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_david_mann/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Diego Velázquez", + "previews": [ + { + "name": "portrait", + "path": "artist/by_diego_vela_zquez/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_diego_vela_zquez/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Disney Animation Studios", + "previews": [ + { + "name": "portrait", + "path": "artist/by_disney_animation_studios/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_disney_animation_studios/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Édouard Manet", + "previews": [ + { + "name": "portrait", + "path": "artist/by_e_douard_manet/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_e_douard_manet/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Esao Andrews", + "previews": [ + { + "name": "portrait", + "path": "artist/by_esao_andrews/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_esao_andrews/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Frida Kahlo", + "previews": [ + { + "name": "portrait", + "path": "artist/by_frida_kahlo/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_frida_kahlo/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Gediminas Pranckevicius", + "previews": [ + { + "name": "portrait", + "path": "artist/by_gediminas_pranckevicius/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_gediminas_pranckevicius/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Georgia O'Keeffe", + "previews": [ + { + "name": "portrait", + "path": "artist/by_georgia_o_keeffe/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_georgia_o_keeffe/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Greg Rutkowski", + "previews": [ + { + "name": "portrait", + "path": "artist/by_greg_rutkowski/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_greg_rutkowski/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Gustave Doré", + "previews": [ + { + "name": "portrait", + "path": "artist/by_gustave_dore_/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_gustave_dore_/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Gustave Klimt", + "previews": [ + { + "name": "portrait", + "path": "artist/by_gustave_klimt/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_gustave_klimt/landscape-0.jpg" + } + ] + }, + { + "modifier": "by H.R. Giger", + "previews": [ + { + "name": "portrait", + "path": "artist/by_h_r_giger/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_h_r_giger/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Hayao Miyazaki", + "previews": [ + { + "name": "portrait", + "path": "artist/by_hayao_miyazaki/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_hayao_miyazaki/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Henri Matisse", + "previews": [ + { + "name": "portrait", + "path": "artist/by_henri_matisse/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_henri_matisse/landscape-0.jpg" + } + ] + }, + { + "modifier": "by HP Lovecraft", + "previews": [ + { + "name": "portrait", + "path": "artist/by_hp_lovecraft/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_hp_lovecraft/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Ivan Shishkin", + "previews": [ + { + "name": "portrait", + "path": "artist/by_ivan_shishkin/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_ivan_shishkin/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Jack Kirby", + "previews": [ + { + "name": "portrait", + "path": "artist/by_jack_kirby/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_jack_kirby/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Jackson Pollock", + "previews": [ + { + "name": "portrait", + "path": "artist/by_jackson_pollock/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_jackson_pollock/landscape-0.jpg" + } + ] + }, + { + "modifier": "by James Jean", + "previews": [ + { + "name": "portrait", + "path": "artist/by_james_jean/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_james_jean/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Jim Burns", + "previews": [ + { + "name": "portrait", + "path": "artist/by_jim_burns/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_jim_burns/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Johannes Vermeer", + "previews": [ + { + "name": "portrait", + "path": "artist/by_johannes_vermeer/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_johannes_vermeer/landscape-0.jpg" + } + ] + }, + { + "modifier": "by John William Waterhouse", + "previews": [ + { + "name": "portrait", + "path": "artist/by_john_william_waterhouse/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_john_william_waterhouse/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Katsushika Hokusai", + "previews": [ + { + "name": "portrait", + "path": "artist/by_katsushika_hokusai/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_katsushika_hokusai/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Kim Tschang Yeul", + "previews": [ + { + "name": "portrait", + "path": "artist/by_kim_tschang_yeul/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_kim_tschang_yeul/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Ko Young Hoon", + "previews": [ + { + "name": "portrait", + "path": "artist/by_ko_young_hoon/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_ko_young_hoon/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Leonardo da Vinci", + "previews": [ + { + "name": "portrait", + "path": "artist/by_leonardo_da_vinci/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_leonardo_da_vinci/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Lisa Frank", + "previews": [ + { + "name": "portrait", + "path": "artist/by_lisa_frank/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_lisa_frank/landscape-0.jpg" + } + ] + }, + { + "modifier": "by M.C Escher", + "previews": [ + { + "name": "portrait", + "path": "artist/by_m_c_escher/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_m_c_escher/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Mahmoud Saïd", + "previews": [ + { + "name": "portrait", + "path": "artist/by_mahmoud_sai_d/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_mahmoud_sai_d/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Makoto Shinkai", + "previews": [ + { + "name": "portrait", + "path": "artist/by_makoto_shinkai/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_makoto_shinkai/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Marc Simonetti", + "previews": [ + { + "name": "portrait", + "path": "artist/by_marc_simonetti/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_marc_simonetti/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Mark Brooks", + "previews": [ + { + "name": "portrait", + "path": "artist/by_mark_brooks/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_mark_brooks/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Michelangelo", + "previews": [ + { + "name": "portrait", + "path": "artist/by_michelangelo/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_michelangelo/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Pablo Picasso", + "previews": [ + { + "name": "portrait", + "path": "artist/by_pablo_picasso/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_pablo_picasso/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Paul Klee", + "previews": [ + { + "name": "portrait", + "path": "artist/by_paul_klee/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_paul_klee/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Peter Mohrbacher", + "previews": [ + { + "name": "portrait", + "path": "artist/by_peter_mohrbacher/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_peter_mohrbacher/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Pierre-Auguste Renoir", + "previews": [ + { + "name": "portrait", + "path": "artist/by_pierre-auguste_renoir/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_pierre-auguste_renoir/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Pixar Animation Studios", + "previews": [ + { + "name": "portrait", + "path": "artist/by_pixar_animation_studios/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_pixar_animation_studios/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Rembrandt", + "previews": [ + { + "name": "portrait", + "path": "artist/by_rembrandt/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_rembrandt/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Richard Dadd", + "previews": [ + { + "name": "portrait", + "path": "artist/by_richard_dadd/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_richard_dadd/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Rossdraws", + "previews": [ + { + "name": "portrait", + "path": "artist/by_rossdraws/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_rossdraws/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Salvador Dalí", + "previews": [ + { + "name": "portrait", + "path": "artist/by_salvador_dali_/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_salvador_dali_/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Sam does Arts", + "previews": [ + { + "name": "portrait", + "path": "artist/by_sam_does_arts/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_sam_does_arts/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Sandro Botticelli", + "previews": [ + { + "name": "portrait", + "path": "artist/by_sandro_botticelli/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_sandro_botticelli/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Ted Nasmith", + "previews": [ + { + "name": "portrait", + "path": "artist/by_ted_nasmith/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_ted_nasmith/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Ten Hundred", + "previews": [ + { + "name": "portrait", + "path": "artist/by_ten_hundred/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_ten_hundred/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Thomas Kinkade", + "previews": [ + { + "name": "portrait", + "path": "artist/by_thomas_kinkade/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_thomas_kinkade/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Tivadar Csontváry Kosztka", + "previews": [ + { + "name": "portrait", + "path": "artist/by_tivadar_csontva_ry_kosztka/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_tivadar_csontva_ry_kosztka/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Victo Ngai", + "previews": [ + { + "name": "portrait", + "path": "artist/by_victo_ngai/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_victo_ngai/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Vincent di Fate", + "previews": [ + { + "name": "portrait", + "path": "artist/by_vincent_di_fate/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_vincent_di_fate/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Vincent van Gogh", + "previews": [ + { + "name": "portrait", + "path": "artist/by_vincent_van_gogh/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_vincent_van_gogh/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Wes Anderson", + "previews": [ + { + "name": "portrait", + "path": "artist/by_wes_anderson/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_wes_anderson/landscape-0.jpg" + } + ] + }, + { + "modifier": "by wlop", + "previews": [ + { + "name": "portrait", + "path": "artist/by_wlop/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_wlop/landscape-0.jpg" + } + ] + }, + { + "modifier": "by Yoshitaka Amano", + "previews": [ + { + "name": "portrait", + "path": "artist/by_yoshitaka_amano/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_yoshitaka_amano/landscape-0.jpg" + } + ] + } + ] + }, + { + "category": "CGI Software", + "modifiers": [ + { + "modifier": "3D Model", + "previews": [ + { + "name": "portrait", + "path": "cgi_software/3d_model/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "cgi_software/3d_model/landscape-0.jpg" + } + ] + }, + { + "modifier": "3D Sculpt", + "previews": [ + { + "name": "portrait", + "path": "cgi_software/3d_sculpt/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "cgi_software/3d_sculpt/landscape-0.jpg" + } + ] + }, + { + "modifier": "3Ds Max Model", + "previews": [ + { + "name": "portrait", + "path": "cgi_software/3ds_max_model/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "cgi_software/3ds_max_model/landscape-0.jpg" + } + ] + }, + { + "modifier": "Blender Model", + "previews": [ + { + "name": "portrait", + "path": "cgi_software/blender_model/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "cgi_software/blender_model/landscape-0.jpg" + } + ] + }, + { + "modifier": "Cinema4d Model", + "previews": [ + { + "name": "portrait", + "path": "cgi_software/cinema4d_model/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "cgi_software/cinema4d_model/landscape-0.jpg" + } + ] + }, + { + "modifier": "Maya Model", + "previews": [ + { + "name": "portrait", + "path": "cgi_software/maya_model/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "cgi_software/maya_model/landscape-0.jpg" + } + ] + }, + { + "modifier": "Unreal Engine", + "previews": [ + { + "name": "portrait", + "path": "cgi_software/unreal_engine/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "cgi_software/unreal_engine/landscape-0.jpg" + } + ] + }, + { + "modifier": "Zbrush Sculpt", + "previews": [ + { + "name": "portrait", + "path": "cgi_software/zbrush_sculpt/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "cgi_software/zbrush_sculpt/landscape-0.jpg" + } + ] + } + ] + }, + { + "category": "CGI Rendering", + "modifiers": [ + { + "modifier": "3D Render", + "previews": [ + { + "name": "portrait", + "path": "cgi_rendering/3d_render/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "cgi_rendering/3d_render/landscape-0.jpg" + } + ] + }, + { + "modifier": "Corona Render", + "previews": [ + { + "name": "portrait", + "path": "cgi_rendering/corona_render/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "cgi_rendering/corona_render/landscape-0.jpg" + } + ] + }, + { + "modifier": "Creature Design", + "previews": [ + { + "name": "portrait", + "path": "cgi_rendering/creature_design/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "cgi_rendering/creature_design/landscape-0.jpg" + } + ] + }, + { + "modifier": "Cycles Render", + "previews": [ + { + "name": "portrait", + "path": "cgi_rendering/cycles_render/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "cgi_rendering/cycles_render/landscape-0.jpg" + } + ] + }, + { + "modifier": "Detailed Render", + "previews": [ + { + "name": "portrait", + "path": "cgi_rendering/detailed_render/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "cgi_rendering/detailed_render/landscape-0.jpg" + } + ] + }, + { + "modifier": "Environment Design", + "previews": [ + { + "name": "portrait", + "path": "cgi_rendering/environment_design/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "cgi_rendering/environment_design/landscape-0.jpg" + } + ] + }, + { + "modifier": "Intricate Environment", + "previews": [ + { + "name": "portrait", + "path": "cgi_rendering/intricate_environment/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "cgi_rendering/intricate_environment/landscape-0.jpg" + } + ] + }, + { + "modifier": "LSD Render", + "previews": [ + { + "name": "portrait", + "path": "cgi_rendering/lsd_render/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "cgi_rendering/lsd_render/landscape-0.jpg" + } + ] + }, + { + "modifier": "Octane Render", + "previews": [ + { + "name": "portrait", + "path": "cgi_rendering/octane_render/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "cgi_rendering/octane_render/landscape-0.jpg" + } + ] + }, + { + "modifier": "PBR", + "previews": [ + { + "name": "portrait", + "path": "cgi_rendering/pbr/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "cgi_rendering/pbr/landscape-0.jpg" + } + ] + }, + { + "modifier": "Glass Caustics", + "previews": [ + { + "name": "portrait", + "path": "cgi_rendering/glass_caustics/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "cgi_rendering/glass_caustics/landscape-0.jpg" + } + ] + }, + { + "modifier": "Global Illumination", + "previews": [ + { + "name": "portrait", + "path": "cgi_rendering/global_illumination/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "cgi_rendering/global_illumination/landscape-0.jpg" + } + ] + }, + { + "modifier": "Subsurface Scattering", + "previews": [ + { + "name": "portrait", + "path": "cgi_rendering/subsurface_scattering/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "cgi_rendering/subsurface_scattering/landscape-0.jpg" + } + ] + } + ] + } +] diff --git a/ui/frontend/build_src/.eslintrc.cjs b/ui/frontend/build_src/.eslintrc.cjs new file mode 100644 index 00000000..7193167b --- /dev/null +++ b/ui/frontend/build_src/.eslintrc.cjs @@ -0,0 +1,87 @@ +const path = require("path"); + +module.exports = { + env: { + browser: true, + es2021: true, + }, + parser: "@typescript-eslint/parser", + parserOptions: { + ecmaVersion: "latest", + sourceType: "module", + ecmaFeatures: { + jsx: true, + }, + tsconfigRootDir: __dirname, + }, + + plugins: ["react"], + + extends: [ + "prettier", + "plugin:react/recommended", + "standard-with-typescript", + "plugin:i18next/recommended", + "plugin:i18n-json/recommended", + ], + settings: { + react: { + version: "detect", + }, + }, + rules: { + // general things turned off for now + "no-debugger": "warn", + "eol-last": "off", + "comma-dangle": ["off", "always-multiline"], + "no-void": ["off"], + "array-callback-return": ["off"], + "spaced-comment": ["off"], + "padded-blocks": ["off"], + "no-multiple-empty-lines": ["off", { max: 2, maxEOF: 1 }], + quotes: ["off", "double"], + semi: ["off", "always"], + yoda: ["off"], + eqeqeq: ["off"], + "react/display-name": "warn", + + // TS THINGS WE DONT WANT + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/ban-ts-comment": "off", + + // these are things that fight with prettier + "@typescript-eslint/comma-dangle": "off", + "@typescript-eslint/space-before-function-paren": "off", + "@typescript-eslint/quotes": "off", + "@typescript-eslint/semi": "off", + "@typescript-eslint/brace-style": "off", + "@typescript-eslint/indent": "off", + "@typescript-eslint/member-delimiter-style": "off", + + // TS WARNINGS WE WANT + "@typescript-eslint/no-unused-vars": "warn", + "@typescript-eslint/no-non-null-assertion": "warn", + + // i18n stuff no string literal works but turned off for now + "i18next/no-literal-string": "off", + // still need to figure out how to get this to work + // it should error if we dont haev all the keys in the translation file + "i18n-json/identical-keys": [ + "error", + { + filePath: { + "home.json/": path.resolve("./Translation/locales/en/home.json"), + }, + }, + ], + }, + overrides: [ + { + files: ["*.ts", "*.tsx"], + parserOptions: { + project: ["./tsconfig.json"], // Specify it only for TypeScript files + }, + }, + ], + // eslint-disable-next-line semi +}; diff --git a/ui/frontend/build_src/.gitignore b/ui/frontend/build_src/.gitignore new file mode 100644 index 00000000..ad930832 --- /dev/null +++ b/ui/frontend/build_src/.gitignore @@ -0,0 +1,18 @@ +# local ignores - We could move these to the global ignores, +# but I think it makes sense to keep them here + +# env +*.local + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +# installed dependencies +node_modules + diff --git a/ui/frontend/build_src/index.html b/ui/frontend/build_src/index.html new file mode 100644 index 00000000..7223622c --- /dev/null +++ b/ui/frontend/build_src/index.html @@ -0,0 +1,17 @@ + + + + + + + + + + Stable Diffusion UI + + + +
+ + + diff --git a/ui/frontend/build_src/package-lock.json b/ui/frontend/build_src/package-lock.json new file mode 100644 index 00000000..bfa45c4f --- /dev/null +++ b/ui/frontend/build_src/package-lock.json @@ -0,0 +1,8225 @@ +{ + "name": "react-ts", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "react-ts", + "version": "0.0.0", + "dependencies": { + "@headlessui/react": "^1.7.2", + "@tanstack/react-location": "^3.7.4", + "@tanstack/react-query": "^4.2.3", + "@tanstack/react-query-devtools": "^4.2.3", + "@vanilla-extract/css": "^1.9.0", + "@vanilla-extract/css-utils": "^0.1.2", + "@vanilla-extract/recipes": "^0.2.5", + "@vanilla-extract/vite-plugin": "^3.5.0", + "i18next": "^21.9.2", + "immer": "^9.0.15", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-i18next": "^11.18.6", + "uuid": "^9.0.0", + "zustand": "^4.1.1" + }, + "devDependencies": { + "@types/node": "^18.7.18", + "@types/react": "^18.0.17", + "@types/react-dom": "^18.0.6", + "@types/uuid": "^8.3.4", + "@typescript-eslint/eslint-plugin": "^5.37.0", + "@typescript-eslint/parser": "^5.37.0", + "@vitejs/plugin-react": "^2.0.1", + "eslint": "^8.23.1", + "eslint-config-prettier": "^8.5.0", + "eslint-config-standard-with-typescript": "^23.0.0", + "eslint-plugin-i18n-json": "^4.0.0", + "eslint-plugin-i18next": "^6.0.0-4", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-n": "^15.2.5", + "eslint-plugin-promise": "^6.0.1", + "eslint-plugin-react": "^7.31.8", + "prettier": "^2.7.1", + "typescript": "^4.8.3", + "vite": "^3.0.7", + "vite-plugin-eslint": "^1.8.1" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.0.tgz", + "integrity": "sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.0.tgz", + "integrity": "sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.0", + "@babel/helper-compilation-targets": "^7.19.0", + "@babel/helper-module-transforms": "^7.19.0", + "@babel/helpers": "^7.19.0", + "@babel/parser": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz", + "integrity": "sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.19.0", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz", + "integrity": "sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.19.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", + "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", + "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz", + "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.0.tgz", + "integrity": "sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", + "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "dev": true, + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", + "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.18.6.tgz", + "integrity": "sha512-utZmlASneDfdaMh0m/WausbjUjEdGrQJz0vFK93d7wD3xf5wBtX219+q6IlCNZeguIcxS2f/CvLZrlLSvSHQXw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz", + "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.0.tgz", + "integrity": "sha512-4pKpFRDh+utd2mbRC8JLnlsMUii3PMHjpL6a0SZ4NMZy7YFP9aXORxEhdMVOc9CpWtDF09IkciQLEhK7Ml7gRA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.19.0", + "@babel/types": "^7.19.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz", + "integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.7.tgz", + "integrity": "sha512-IKznSJOsVUuyt7cDzzSZyqBEcZe+7WlBqTVXiF1OXP/4Nm387ToaXZ0fyLwI1iBlI/bzpxVq411QE2/Bt2XWWw==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", + "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@formatjs/ecma402-abstract": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.12.0.tgz", + "integrity": "sha512-0/wm9b7brUD40kx7KSE0S532T8EfH06Zc41rGlinoNyYXnuusR6ull2x63iFJgVXgwahm42hAW7dcYdZ+llZzA==", + "dev": true, + "dependencies": { + "@formatjs/intl-localematcher": "0.2.31", + "tslib": "2.4.0" + } + }, + "node_modules/@formatjs/ecma402-abstract/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, + "node_modules/@formatjs/icu-messageformat-parser": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.7.tgz", + "integrity": "sha512-KM4ikG5MloXMulqn39Js3ypuVzpPKq/DDplvl01PE2qD9rAzFO8YtaUCC9vr9j3sRXwdHPeTe8r3J/8IJgvYEQ==", + "dev": true, + "dependencies": { + "@formatjs/ecma402-abstract": "1.12.0", + "@formatjs/icu-skeleton-parser": "1.3.13", + "tslib": "2.4.0" + } + }, + "node_modules/@formatjs/icu-messageformat-parser/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, + "node_modules/@formatjs/icu-skeleton-parser": { + "version": "1.3.13", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.13.tgz", + "integrity": "sha512-qb1kxnA4ep76rV+d9JICvZBThBpK5X+nh1dLmmIReX72QyglicsaOmKEcdcbp7/giCWfhVs6CXPVA2JJ5/ZvAw==", + "dev": true, + "dependencies": { + "@formatjs/ecma402-abstract": "1.12.0", + "tslib": "2.4.0" + } + }, + "node_modules/@formatjs/icu-skeleton-parser/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, + "node_modules/@formatjs/intl-localematcher": { + "version": "0.2.31", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.31.tgz", + "integrity": "sha512-9QTjdSBpQ7wHShZgsNzNig5qT3rCPvmZogS/wXZzKotns5skbXgs0I7J8cuN0PPqXyynvNVuN+iOKhNS2eb+ZA==", + "dev": true, + "dependencies": { + "tslib": "2.4.0" + } + }, + "node_modules/@formatjs/intl-localematcher/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, + "node_modules/@headlessui/react": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.7.2.tgz", + "integrity": "sha512-snLv2lxwsf2HNTOBNgHYdvoYZ3ChJE8QszPi1d/hl9js8KrFrUulTaQBfSyPbJP5BybVreWh9DxCgz9S0Z6hKQ==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^16 || ^17 || ^18", + "react-dom": "^16 || ^17 || ^18" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", + "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", + "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@tanstack/match-sorter-utils": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.1.1.tgz", + "integrity": "sha512-IdmEekEYxQsoLOR0XQyw3jD1GujBpRRYaGJYQUw1eOT1eUugWxdc7jomh1VQ1EKHcdwDLpLaCz/8y4KraU4T9A==", + "dependencies": { + "remove-accents": "0.4.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kentcdodds" + } + }, + "node_modules/@tanstack/query-core": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.2.3.tgz", + "integrity": "sha512-zdt5lYWs1dZaA3IxJbCgtAfHZJScRZONpiLL7YkeOkrme5MfjQqTpjq7LYbzpyuwPOh2Jx68le0PLl57JFv5hQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-location": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@tanstack/react-location/-/react-location-3.7.4.tgz", + "integrity": "sha512-6rH2vNHGr0uyeUz5ZHvWMYjeYKGgIKFzvs5749QtnS9f+FU7t7fQE0hKZAzltBZk82LT7iYbcHBRyUg2lW13VA==", + "dependencies": { + "@babel/runtime": "^7.16.7", + "history": "^5.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": ">=16", + "react-dom": ">=16" + } + }, + "node_modules/@tanstack/react-query": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.2.3.tgz", + "integrity": "sha512-JLaMOxoJTkiAu7QpevRCt2uI/0vd3E8K/rSlCuRgWlcW5DeJDFpDS5kfzmLO5MOcD97fgsJRrDbxDORxR1FdJA==", + "dependencies": { + "@tanstack/query-core": "4.2.3", + "@types/use-sync-external-store": "^0.0.3", + "use-sync-external-store": "^1.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-native": "*" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/@tanstack/react-query-devtools": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-4.2.3.tgz", + "integrity": "sha512-0PH8n824BnFyMrtv7q5uLS0b7jYg2tDH8vU4etkSYzV1uL4RJjiqMh7Gyi8qhYCwM+khlrkRYlNZvE0cxlp3SQ==", + "dependencies": { + "@tanstack/match-sorter-utils": "^8.0.0-alpha.82", + "@types/use-sync-external-store": "^0.0.3", + "use-sync-external-store": "^1.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "@tanstack/react-query": "4.2.3", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@types/eslint": { + "version": "8.4.6", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.6.tgz", + "integrity": "sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.7.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.18.tgz", + "integrity": "sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.0.18", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.18.tgz", + "integrity": "sha512-6hI08umYs6NaiHFEEGioXnxJ+oEhY3eRz8VCUaudZmGdtvPviCJB8mgaMxaDWAdPSYd4eFavrPk2QIolwbLYrg==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.0.6", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz", + "integrity": "sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" + }, + "node_modules/@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.37.0.tgz", + "integrity": "sha512-Fde6W0IafXktz1UlnhGkrrmnnGpAo1kyX7dnyHHVrmwJOn72Oqm3eYtddrpOwwel2W8PAK9F3pIL5S+lfoM0og==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.37.0", + "@typescript-eslint/type-utils": "5.37.0", + "@typescript-eslint/utils": "5.37.0", + "debug": "^4.3.4", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.37.0.tgz", + "integrity": "sha512-01VzI/ipYKuaG5PkE5+qyJ6m02fVALmMPY3Qq5BHflDx3y4VobbLdHQkSMg9VPRS4KdNt4oYTMaomFoHonBGAw==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.37.0", + "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/typescript-estree": "5.37.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.37.0.tgz", + "integrity": "sha512-F67MqrmSXGd/eZnujjtkPgBQzgespu/iCZ+54Ok9X5tALb9L2v3G+QBSoWkXG0p3lcTJsL+iXz5eLUEdSiJU9Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/visitor-keys": "5.37.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.37.0.tgz", + "integrity": "sha512-BSx/O0Z0SXOF5tY0bNTBcDEKz2Ec20GVYvq/H/XNKiUorUFilH7NPbFUuiiyzWaSdN3PA8JV0OvYx0gH/5aFAQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.37.0", + "@typescript-eslint/utils": "5.37.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.37.0.tgz", + "integrity": "sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.37.0.tgz", + "integrity": "sha512-JkFoFIt/cx59iqEDSgIGnQpCTRv96MQnXCYvJi7QhBC24uyuzbD8wVbajMB1b9x4I0octYFJ3OwjAwNqk1AjDA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/visitor-keys": "5.37.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.37.0.tgz", + "integrity": "sha512-jUEJoQrWbZhmikbcWSMDuUSxEE7ID2W/QCV/uz10WtQqfOuKZUqFGjqLJ+qhDd17rjgp+QJPqTdPIBWwoob2NQ==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.37.0", + "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/typescript-estree": "5.37.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz", + "integrity": "sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.37.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vanilla-extract/css": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@vanilla-extract/css/-/css-1.9.0.tgz", + "integrity": "sha512-YERVutWIpttfkEAynBUgdHKMcSPjMAtu5IFfDfEdXmeygilV12S5WUYMzjrqu0F/LZBtqrHG5fa2tiCiFpay+w==", + "dependencies": { + "@emotion/hash": "^0.8.0", + "@vanilla-extract/private": "^1.0.3", + "chalk": "^4.1.1", + "css-what": "^5.0.1", + "cssesc": "^3.0.0", + "csstype": "^3.0.7", + "deep-object-diff": "^1.1.0", + "deepmerge": "^4.2.2", + "escape-string-regexp": "^4.0.0", + "media-query-parser": "^2.0.2", + "outdent": "^0.8.0" + } + }, + "node_modules/@vanilla-extract/css-utils": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@vanilla-extract/css-utils/-/css-utils-0.1.2.tgz", + "integrity": "sha512-qoxIu5E/UhJtoKsPL1JaU9nhTN0Xl5zYV0pScOgsvc3JN46TvTTt0L3GV8x3PQpZP7x3elw8BsC9czYbhJy9Gg==" + }, + "node_modules/@vanilla-extract/css/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@vanilla-extract/css/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@vanilla-extract/css/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@vanilla-extract/css/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@vanilla-extract/css/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vanilla-extract/css/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@vanilla-extract/css/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vanilla-extract/integration": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@vanilla-extract/integration/-/integration-5.0.1.tgz", + "integrity": "sha512-HRV/HvC/lihb9wT3x5s7pf5qLjqxSd9nBePJ10juOuMB5cl2ZClEcts076m9BuRKM3wRK2h7KuwkNsaUtjujxQ==", + "dependencies": { + "@vanilla-extract/css": "^1.7.2", + "esbuild": "^0.11.16", + "eval": "0.1.6", + "find-up": "^5.0.0", + "javascript-stringify": "^2.0.1", + "lodash": "^4.17.21", + "outdent": "^0.8.0" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/esbuild": { + "version": "0.11.23", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.11.23.tgz", + "integrity": "sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + } + }, + "node_modules/@vanilla-extract/private": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@vanilla-extract/private/-/private-1.0.3.tgz", + "integrity": "sha512-17kVyLq3ePTKOkveHxXuIJZtGYs+cSoev7BlP+Lf4916qfDhk/HBjvlYDe8egrea7LNPHKwSZJK/bzZC+Q6AwQ==" + }, + "node_modules/@vanilla-extract/recipes": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@vanilla-extract/recipes/-/recipes-0.2.5.tgz", + "integrity": "sha512-OWXUUiFJdswD3+Xg8f8avuw/vAHZRFS4oHqFeoV1TcO8cfbDQ0zmkreBHvyspoJU+qsyWK48yPHKSptqNRPy9Q==", + "peerDependencies": { + "@vanilla-extract/css": "^1.0.0" + } + }, + "node_modules/@vanilla-extract/vite-plugin": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@vanilla-extract/vite-plugin/-/vite-plugin-3.5.0.tgz", + "integrity": "sha512-UMK2xUkfBclg8EAsR9V3mKQ44XjiyqpABZUBOJp3Vk8NDYHV8E/Ysn8xUB2WSJJnRLd4gqpHnivqRNRRfKV/gw==", + "dependencies": { + "@vanilla-extract/integration": "^5.0.0", + "outdent": "^0.8.0", + "postcss": "^8.3.6", + "postcss-load-config": "^3.1.0" + }, + "peerDependencies": { + "vite": "^2.2.3" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-2.1.0.tgz", + "integrity": "sha512-am6rPyyU3LzUYne3Gd9oj9c4Rzbq5hQnuGXSMT6Gujq45Il/+bunwq3lrB7wghLkiF45ygMwft37vgJ/NE8IAA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.18.13", + "@babel/plugin-transform-react-jsx": "^7.18.10", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-jsx-self": "^7.18.6", + "@babel/plugin-transform-react-jsx-source": "^7.18.6", + "magic-string": "^0.26.2", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^3.0.0" + } + }, + "node_modules/acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-includes": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", + "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", + "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", + "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/builtins/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001390", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001390.tgz", + "integrity": "sha512-sS4CaUM+/+vqQUlCvCJ2WtDlV81aWtHhqeEVkLokVJJa3ViN4zDxAGfq9R8i1m90uGHxo99cy10Od+lvn3hf0g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", + "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deep-object-diff": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.7.tgz", + "integrity": "sha512-QkgBca0mL08P6HiOjoqvmm6xOAl2W6CT2+34Ljhg0OeFan8cwlcdq8jrLKsBBuUFAZLsN5b6y491KdKEoSo9lg==" + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.242", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.242.tgz", + "integrity": "sha512-nPdgMWtjjWGCtreW/2adkrB2jyHjClo9PtVhR6rW+oxa4E4Wom642Tn+5LslHP3XPL5MCpkn5/UEY60EXylNeQ==", + "dev": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.2.tgz", + "integrity": "sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.2", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.7.tgz", + "integrity": "sha512-7V8tzllIbAQV1M4QoE52ImKu8hT/NLGlGXkiDsbEU5PS6K8Mn09ZnYoS+dcmHxOS9CRsV4IRAMdT3I67IyUNXw==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/linux-loong64": "0.15.7", + "esbuild-android-64": "0.15.7", + "esbuild-android-arm64": "0.15.7", + "esbuild-darwin-64": "0.15.7", + "esbuild-darwin-arm64": "0.15.7", + "esbuild-freebsd-64": "0.15.7", + "esbuild-freebsd-arm64": "0.15.7", + "esbuild-linux-32": "0.15.7", + "esbuild-linux-64": "0.15.7", + "esbuild-linux-arm": "0.15.7", + "esbuild-linux-arm64": "0.15.7", + "esbuild-linux-mips64le": "0.15.7", + "esbuild-linux-ppc64le": "0.15.7", + "esbuild-linux-riscv64": "0.15.7", + "esbuild-linux-s390x": "0.15.7", + "esbuild-netbsd-64": "0.15.7", + "esbuild-openbsd-64": "0.15.7", + "esbuild-sunos-64": "0.15.7", + "esbuild-windows-32": "0.15.7", + "esbuild-windows-64": "0.15.7", + "esbuild-windows-arm64": "0.15.7" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.7.tgz", + "integrity": "sha512-p7rCvdsldhxQr3YHxptf1Jcd86dlhvc3EQmQJaZzzuAxefO9PvcI0GLOa5nCWem1AJ8iMRu9w0r5TG8pHmbi9w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.7.tgz", + "integrity": "sha512-L775l9ynJT7rVqRM5vo+9w5g2ysbOCfsdLV4CWanTZ1k/9Jb3IYlQ06VCI1edhcosTYJRECQFJa3eAvkx72eyQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.7.tgz", + "integrity": "sha512-KGPt3r1c9ww009t2xLB6Vk0YyNOXh7hbjZ3EecHoVDxgtbUlYstMPDaReimKe6eOEfyY4hBEEeTvKwPsiH5WZg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.7.tgz", + "integrity": "sha512-kBIHvtVqbSGajN88lYMnR3aIleH3ABZLLFLxwL2stiuIGAjGlQW741NxVTpUHQXUmPzxi6POqc9npkXa8AcSZQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.7.tgz", + "integrity": "sha512-hESZB91qDLV5MEwNxzMxPfbjAhOmtfsr9Wnuci7pY6TtEh4UDuevmGmkUIjX/b+e/k4tcNBMf7SRQ2mdNuK/HQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.7.tgz", + "integrity": "sha512-dLFR0ChH5t+b3J8w0fVKGvtwSLWCv7GYT2Y2jFGulF1L5HftQLzVGN+6pi1SivuiVSmTh28FwUhi9PwQicXI6Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.7.tgz", + "integrity": "sha512-v3gT/LsONGUZcjbt2swrMjwxo32NJzk+7sAgtxhGx1+ZmOFaTRXBAi1PPfgpeo/J//Un2jIKm/I+qqeo4caJvg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.7.tgz", + "integrity": "sha512-LxXEfLAKwOVmm1yecpMmWERBshl+Kv5YJ/1KnyAr6HRHFW8cxOEsEfisD3sVl/RvHyW//lhYUVSuy9jGEfIRAQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.7.tgz", + "integrity": "sha512-JKgAHtMR5f75wJTeuNQbyznZZa+pjiUHV7sRZp42UNdyXC6TiUYMW/8z8yIBAr2Fpad8hM1royZKQisqPABPvQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.7.tgz", + "integrity": "sha512-P3cfhudpzWDkglutWgXcT2S7Ft7o2e3YDMrP1n0z2dlbUZghUkKCyaWw0zhp4KxEEzt/E7lmrtRu/pGWnwb9vw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.7.tgz", + "integrity": "sha512-T7XKuxl0VpeFLCJXub6U+iybiqh0kM/bWOTb4qcPyDDwNVhLUiPcGdG2/0S7F93czUZOKP57YiLV8YQewgLHKw==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.7.tgz", + "integrity": "sha512-6mGuC19WpFN7NYbecMIJjeQgvDb5aMuvyk0PDYBJrqAEMkTwg3Z98kEKuCm6THHRnrgsdr7bp4SruSAxEM4eJw==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.7.tgz", + "integrity": "sha512-uUJsezbswAYo/X7OU/P+PuL/EI9WzxsEQXDekfwpQ23uGiooxqoLFAPmXPcRAt941vjlY9jtITEEikWMBr+F/g==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.7.tgz", + "integrity": "sha512-+tO+xOyTNMc34rXlSxK7aCwJgvQyffqEM5MMdNDEeMU3ss0S6wKvbBOQfgd5jRPblfwJ6b+bKiz0g5nABpY0QQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.7.tgz", + "integrity": "sha512-yVc4Wz+Pu3cP5hzm5kIygNPrjar/v5WCSoRmIjCPWfBVJkZNb5brEGKUlf+0Y759D48BCWa0WHrWXaNy0DULTQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.7.tgz", + "integrity": "sha512-GsimbwC4FSR4lN3wf8XmTQ+r8/0YSQo21rWDL0XFFhLHKlzEA4SsT1Tl8bPYu00IU6UWSJ+b3fG/8SB69rcuEQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.7.tgz", + "integrity": "sha512-8CDI1aL/ts0mDGbWzjEOGKXnU7p3rDzggHSBtVryQzkSOsjCHRVe0iFYUuhczlxU1R3LN/E7HgUO4NXzGGP/Ag==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.7.tgz", + "integrity": "sha512-cOnKXUEPS8EGCzRSFa1x6NQjGhGsFlVgjhqGEbLTPsA7x4RRYiy2RKoArNUU4iR2vHmzqS5Gr84MEumO/wxYKA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.7.tgz", + "integrity": "sha512-7MI08Ec2sTIDv+zH6StNBKO+2hGUYIT42GmFyW6MBBWWtJhTcQLinKS6ldIN1d52MXIbiJ6nXyCJ+LpL4jBm3Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.7.tgz", + "integrity": "sha512-R06nmqBlWjKHddhRJYlqDd3Fabx9LFdKcjoOy08YLimwmsswlFBJV4rXzZCxz/b7ZJXvrZgj8DDv1ewE9+StMw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.23.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.1.tgz", + "integrity": "sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.3.2", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@humanwhocodes/module-importer": "^1.0.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-config-standard": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz", + "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peerDependencies": { + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0", + "eslint-plugin-promise": "^6.0.0" + } + }, + "node_modules/eslint-config-standard-with-typescript": { + "version": "23.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-23.0.0.tgz", + "integrity": "sha512-iaaWifImn37Z1OXbNW1es7KI+S7D408F9ys0bpaQf2temeBWlvb0Nc5qHkOgYaRb5QxTZT32GGeN1gtswASOXA==", + "dev": true, + "dependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint-config-standard": "17.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^5.0.0", + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0", + "eslint-plugin-promise": "^6.0.0", + "typescript": "*" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-es": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "dev": true, + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-es/node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-i18n-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-i18n-json/-/eslint-plugin-i18n-json-4.0.0.tgz", + "integrity": "sha512-rglbr9f/UaPN/OeiSLVVFlIh4RrXPTzX5qr4tqOdTj1Ryr8xIhUzriDDuyuPWliektO86c/zy1RldmBIOfDNsQ==", + "dev": true, + "dependencies": { + "@formatjs/icu-messageformat-parser": "^2.0.18", + "chalk": "^2.3.2", + "indent-string": "^3.2.0", + "jest-diff": "^22.0.3", + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "lodash.isplainobject": "^4.0.6", + "lodash.set": "^4.3.2", + "log-symbols": "^2.2.0", + "parse-json": "^5.2.0", + "plur": "^2.1.2", + "pretty-format": "^22.0.3" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "eslint": ">=4.0.0" + } + }, + "node_modules/eslint-plugin-i18next": { + "version": "6.0.0-4", + "resolved": "https://registry.npmjs.org/eslint-plugin-i18next/-/eslint-plugin-i18next-6.0.0-4.tgz", + "integrity": "sha512-QF0TpFuk5HkdzKBirXsWvueX50GIu/mhTUtYWSUSHjJcLPugap890XGsyDhOSUpX/tNzX32K43v96InZr7+mmg==", + "dev": true, + "dependencies": { + "lodash": "^4.17.21", + "requireindex": "~1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/eslint-plugin-n": { + "version": "15.2.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.2.5.tgz", + "integrity": "sha512-8+BYsqiyZfpu6NXmdLOXVUfk8IocpCjpd8nMRRH0A9ulrcemhb2VI9RSJMEy5udx++A/YcVPD11zT8hpFq368g==", + "dev": true, + "dependencies": { + "builtins": "^5.0.1", + "eslint-plugin-es": "^4.1.0", + "eslint-utils": "^3.0.0", + "ignore": "^5.1.1", + "is-core-module": "^2.10.0", + "minimatch": "^3.1.2", + "resolve": "^1.22.1", + "semver": "^7.3.7" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-n/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-promise": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.0.1.tgz", + "integrity": "sha512-uM4Tgo5u3UWQiroOyDEsYcVMOo7re3zmno0IZmB5auxoaQNIceAbXEkSt8RNrKtaYehARHG06pYK6K1JhtP0Zw==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.31.8", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.8.tgz", + "integrity": "sha512-5lBTZmgQmARLLSYiwI71tiGVTLUuqXantZM6vlSY39OaDSV0M7+32K5DnLkmFrwTe+Ksz0ffuLUC91RUviVZfw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.5", + "array.prototype.flatmap": "^1.3.0", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.1", + "object.values": "^1.1.5", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", + "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eval": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.6.tgz", + "integrity": "sha512-o0XUw+5OGkXw4pJZzQoXUk+H87DHuC+7ZE//oSrRGtatTmr12oTnLfg6QOq9DyTt0c/p4TwzgmkKrBzWTSizyQ==", + "dependencies": { + "require-like": ">= 0.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/history": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz", + "integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==", + "dependencies": { + "@babel/runtime": "^7.7.6" + } + }, + "node_modules/html-parse-stringify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", + "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", + "dependencies": { + "void-elements": "3.1.0" + } + }, + "node_modules/i18next": { + "version": "21.9.2", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-21.9.2.tgz", + "integrity": "sha512-00fVrLQOwy45nm3OtC9l1WiLK3nJlIYSljgCt0qzTaAy65aciMdRy9GsuW+a2AtKtdg9/njUGfRH30LRupV7ZQ==", + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], + "dependencies": { + "@babel/runtime": "^7.17.2" + } + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "9.0.15", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz", + "integrity": "sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/irregular-plurals": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.4.0.tgz", + "integrity": "sha512-kniTIJmaZYiwa17eTtWIfm0K342seyugl6vuC8DiiyiRAJWAVlLkqGCI0Im0neo0TkXw+pRcKaBPRdcKHnQJ6Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.6.tgz", + "integrity": "sha512-krO72EO2NptOGAX2KYyqbP9vYMlNAXdB53rq6f8LXY6RY7JdSR/3BD6wLUlPHSAesmY9vstNrjvqGaCiRK/91Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/javascript-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", + "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==" + }, + "node_modules/jest-diff": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-22.4.3.tgz", + "integrity": "sha512-/QqGvCDP5oZOF6PebDuLwrB2BMD8ffJv6TAGAdEVuDx1+uEgrHpSFrfrOiMRx2eJ1hgNjlQrOQEHetVwij90KA==", + "dev": true, + "dependencies": { + "chalk": "^2.0.1", + "diff": "^3.2.0", + "jest-get-type": "^22.4.3", + "pretty-format": "^22.4.3" + } + }, + "node_modules/jest-get-type": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", + "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==", + "dev": true + }, + "node_modules/js-sdsl": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.4.tgz", + "integrity": "sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", + "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.5", + "object.assign": "^4.1.3" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "dev": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.set": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", + "integrity": "sha512-4hNPN5jlm/N/HLMCO43v8BXKq9Z7QdAGc/VGrRD61w8gN9g/6jF9A4L1pbUgBLCffi0w9VsXfTOij5x8iTyFvg==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.26.3", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.3.tgz", + "integrity": "sha512-u1Po0NDyFcwdg2nzHT88wSK0+Rih0N1M+Ph1Sp08k8yvFFU3KR72wryS7e1qMPJypt99WB7fIFVCA92mQrMjrg==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/media-query-parser": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/media-query-parser/-/media-query-parser-2.0.2.tgz", + "integrity": "sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==", + "dependencies": { + "@babel/runtime": "^7.12.5" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", + "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/outdent": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.8.0.tgz", + "integrity": "sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==" + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/plur": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz", + "integrity": "sha512-WhcHk576xg9y/iv6RWOuroZgsqvCbJN+XGvAypCJwLAYs2iWDp5LUmvaCdV6JR2O0SMBf8l6p7A94AyLCFVMlQ==", + "dev": true, + "dependencies": { + "irregular-plurals": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "8.4.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", + "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-format": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-22.4.3.tgz", + "integrity": "sha512-S4oT9/sT6MN7/3COoOy+ZJeA92VmOnveLHgrwBE3Z1W5N9S2A1QGNYiE1z75DAENbJrXXUb+OWXhpJcg05QKQQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0", + "ansi-styles": "^3.2.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-i18next": { + "version": "11.18.6", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.18.6.tgz", + "integrity": "sha512-yHb2F9BiT0lqoQDt8loZ5gWP331GwctHz9tYQ8A2EIEUu+CcEdjBLQWli1USG3RdWQt3W+jqQLg/d4rrQR96LA==", + "dependencies": { + "@babel/runtime": "^7.14.5", + "html-parse-stringify": "^3.0.1" + }, + "peerDependencies": { + "i18next": ">= 19.0.0", + "react": ">= 16.8.0" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/remove-accents": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", + "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==" + }, + "node_modules/require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", + "engines": { + "node": "*" + } + }, + "node_modules/requireindex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz", + "integrity": "sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==", + "dev": true, + "engines": { + "node": ">=0.10.5" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.78.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz", + "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", + "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.1", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz", + "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.7.tgz", + "integrity": "sha512-iN/XYesmZ2RmmWAiI4Z5rq0YqSiv0brj9Ce9CfhNE4xIW2h+MFxcgkxIzZ+ShkFPUkjU3gQ+3oypadD3RAMtrg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vite": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.1.0.tgz", + "integrity": "sha512-YBg3dUicDpDWFCGttmvMbVyS9ydjntwEjwXRj2KBFwSB8SxmGcudo1yb8FW5+M/G86aS8x828ujnzUVdsLjs9g==", + "dependencies": { + "esbuild": "^0.15.6", + "postcss": "^8.4.16", + "resolve": "^1.22.1", + "rollup": "~2.78.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "less": "*", + "sass": "*", + "stylus": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-plugin-eslint": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/vite-plugin-eslint/-/vite-plugin-eslint-1.8.1.tgz", + "integrity": "sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^4.2.1", + "@types/eslint": "^8.4.5", + "rollup": "^2.77.2" + }, + "peerDependencies": { + "eslint": ">=7", + "vite": ">=2" + } + }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zustand": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.1.1.tgz", + "integrity": "sha512-h4F3WMqsZgvvaE0n3lThx4MM81Ls9xebjvrABNzf5+jb3/03YjNTSgZXeyrvXDArMeV9untvWXRw1tY+ntPYbA==", + "dependencies": { + "use-sync-external-store": "1.2.0" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "immer": ">=9.0", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.0.tgz", + "integrity": "sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw==", + "dev": true + }, + "@babel/core": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.0.tgz", + "integrity": "sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.0", + "@babel/helper-compilation-targets": "^7.19.0", + "@babel/helper-module-transforms": "^7.19.0", + "@babel/helpers": "^7.19.0", + "@babel/parser": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz", + "integrity": "sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==", + "dev": true, + "requires": { + "@babel/types": "^7.19.0", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz", + "integrity": "sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.19.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dev": true, + "requires": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", + "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", + "dev": true + }, + "@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", + "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz", + "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==", + "dev": true, + "requires": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.0.tgz", + "integrity": "sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw==", + "dev": true + }, + "@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", + "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.19.0" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "dev": true, + "requires": { + "@babel/plugin-transform-react-jsx": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", + "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.18.6.tgz", + "integrity": "sha512-utZmlASneDfdaMh0m/WausbjUjEdGrQJz0vFK93d7wD3xf5wBtX219+q6IlCNZeguIcxS2f/CvLZrlLSvSHQXw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/runtime": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz", + "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + } + }, + "@babel/traverse": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.0.tgz", + "integrity": "sha512-4pKpFRDh+utd2mbRC8JLnlsMUii3PMHjpL6a0SZ4NMZy7YFP9aXORxEhdMVOc9CpWtDF09IkciQLEhK7Ml7gRA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.19.0", + "@babel/types": "^7.19.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz", + "integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + } + }, + "@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" + }, + "@esbuild/linux-loong64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.7.tgz", + "integrity": "sha512-IKznSJOsVUuyt7cDzzSZyqBEcZe+7WlBqTVXiF1OXP/4Nm387ToaXZ0fyLwI1iBlI/bzpxVq411QE2/Bt2XWWw==", + "optional": true + }, + "@eslint/eslintrc": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", + "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + } + } + }, + "@formatjs/ecma402-abstract": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.12.0.tgz", + "integrity": "sha512-0/wm9b7brUD40kx7KSE0S532T8EfH06Zc41rGlinoNyYXnuusR6ull2x63iFJgVXgwahm42hAW7dcYdZ+llZzA==", + "dev": true, + "requires": { + "@formatjs/intl-localematcher": "0.2.31", + "tslib": "2.4.0" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + } + } + }, + "@formatjs/icu-messageformat-parser": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.7.tgz", + "integrity": "sha512-KM4ikG5MloXMulqn39Js3ypuVzpPKq/DDplvl01PE2qD9rAzFO8YtaUCC9vr9j3sRXwdHPeTe8r3J/8IJgvYEQ==", + "dev": true, + "requires": { + "@formatjs/ecma402-abstract": "1.12.0", + "@formatjs/icu-skeleton-parser": "1.3.13", + "tslib": "2.4.0" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + } + } + }, + "@formatjs/icu-skeleton-parser": { + "version": "1.3.13", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.13.tgz", + "integrity": "sha512-qb1kxnA4ep76rV+d9JICvZBThBpK5X+nh1dLmmIReX72QyglicsaOmKEcdcbp7/giCWfhVs6CXPVA2JJ5/ZvAw==", + "dev": true, + "requires": { + "@formatjs/ecma402-abstract": "1.12.0", + "tslib": "2.4.0" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + } + } + }, + "@formatjs/intl-localematcher": { + "version": "0.2.31", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.31.tgz", + "integrity": "sha512-9QTjdSBpQ7wHShZgsNzNig5qT3rCPvmZogS/wXZzKotns5skbXgs0I7J8cuN0PPqXyynvNVuN+iOKhNS2eb+ZA==", + "dev": true, + "requires": { + "tslib": "2.4.0" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + } + } + }, + "@headlessui/react": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.7.2.tgz", + "integrity": "sha512-snLv2lxwsf2HNTOBNgHYdvoYZ3ChJE8QszPi1d/hl9js8KrFrUulTaQBfSyPbJP5BybVreWh9DxCgz9S0Z6hKQ==", + "requires": {} + }, + "@humanwhocodes/config-array": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", + "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", + "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "requires": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + } + }, + "@tanstack/match-sorter-utils": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.1.1.tgz", + "integrity": "sha512-IdmEekEYxQsoLOR0XQyw3jD1GujBpRRYaGJYQUw1eOT1eUugWxdc7jomh1VQ1EKHcdwDLpLaCz/8y4KraU4T9A==", + "requires": { + "remove-accents": "0.4.2" + } + }, + "@tanstack/query-core": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.2.3.tgz", + "integrity": "sha512-zdt5lYWs1dZaA3IxJbCgtAfHZJScRZONpiLL7YkeOkrme5MfjQqTpjq7LYbzpyuwPOh2Jx68le0PLl57JFv5hQ==" + }, + "@tanstack/react-location": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@tanstack/react-location/-/react-location-3.7.4.tgz", + "integrity": "sha512-6rH2vNHGr0uyeUz5ZHvWMYjeYKGgIKFzvs5749QtnS9f+FU7t7fQE0hKZAzltBZk82LT7iYbcHBRyUg2lW13VA==", + "requires": { + "@babel/runtime": "^7.16.7", + "history": "^5.2.0" + } + }, + "@tanstack/react-query": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.2.3.tgz", + "integrity": "sha512-JLaMOxoJTkiAu7QpevRCt2uI/0vd3E8K/rSlCuRgWlcW5DeJDFpDS5kfzmLO5MOcD97fgsJRrDbxDORxR1FdJA==", + "requires": { + "@tanstack/query-core": "4.2.3", + "@types/use-sync-external-store": "^0.0.3", + "use-sync-external-store": "^1.2.0" + } + }, + "@tanstack/react-query-devtools": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-4.2.3.tgz", + "integrity": "sha512-0PH8n824BnFyMrtv7q5uLS0b7jYg2tDH8vU4etkSYzV1uL4RJjiqMh7Gyi8qhYCwM+khlrkRYlNZvE0cxlp3SQ==", + "requires": { + "@tanstack/match-sorter-utils": "^8.0.0-alpha.82", + "@types/use-sync-external-store": "^0.0.3", + "use-sync-external-store": "^1.2.0" + } + }, + "@types/eslint": { + "version": "8.4.6", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.6.tgz", + "integrity": "sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "@types/node": { + "version": "18.7.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.18.tgz", + "integrity": "sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg==", + "dev": true + }, + "@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "dev": true + }, + "@types/react": { + "version": "18.0.18", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.18.tgz", + "integrity": "sha512-6hI08umYs6NaiHFEEGioXnxJ+oEhY3eRz8VCUaudZmGdtvPviCJB8mgaMxaDWAdPSYd4eFavrPk2QIolwbLYrg==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "18.0.6", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz", + "integrity": "sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, + "@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" + }, + "@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.37.0.tgz", + "integrity": "sha512-Fde6W0IafXktz1UlnhGkrrmnnGpAo1kyX7dnyHHVrmwJOn72Oqm3eYtddrpOwwel2W8PAK9F3pIL5S+lfoM0og==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.37.0", + "@typescript-eslint/type-utils": "5.37.0", + "@typescript-eslint/utils": "5.37.0", + "debug": "^4.3.4", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/parser": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.37.0.tgz", + "integrity": "sha512-01VzI/ipYKuaG5PkE5+qyJ6m02fVALmMPY3Qq5BHflDx3y4VobbLdHQkSMg9VPRS4KdNt4oYTMaomFoHonBGAw==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.37.0", + "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/typescript-estree": "5.37.0", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.37.0.tgz", + "integrity": "sha512-F67MqrmSXGd/eZnujjtkPgBQzgespu/iCZ+54Ok9X5tALb9L2v3G+QBSoWkXG0p3lcTJsL+iXz5eLUEdSiJU9Q==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/visitor-keys": "5.37.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.37.0.tgz", + "integrity": "sha512-BSx/O0Z0SXOF5tY0bNTBcDEKz2Ec20GVYvq/H/XNKiUorUFilH7NPbFUuiiyzWaSdN3PA8JV0OvYx0gH/5aFAQ==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.37.0", + "@typescript-eslint/utils": "5.37.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.37.0.tgz", + "integrity": "sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.37.0.tgz", + "integrity": "sha512-JkFoFIt/cx59iqEDSgIGnQpCTRv96MQnXCYvJi7QhBC24uyuzbD8wVbajMB1b9x4I0octYFJ3OwjAwNqk1AjDA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/visitor-keys": "5.37.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/utils": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.37.0.tgz", + "integrity": "sha512-jUEJoQrWbZhmikbcWSMDuUSxEE7ID2W/QCV/uz10WtQqfOuKZUqFGjqLJ+qhDd17rjgp+QJPqTdPIBWwoob2NQ==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.37.0", + "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/typescript-estree": "5.37.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz", + "integrity": "sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.37.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "@vanilla-extract/css": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@vanilla-extract/css/-/css-1.9.0.tgz", + "integrity": "sha512-YERVutWIpttfkEAynBUgdHKMcSPjMAtu5IFfDfEdXmeygilV12S5WUYMzjrqu0F/LZBtqrHG5fa2tiCiFpay+w==", + "requires": { + "@emotion/hash": "^0.8.0", + "@vanilla-extract/private": "^1.0.3", + "chalk": "^4.1.1", + "css-what": "^5.0.1", + "cssesc": "^3.0.0", + "csstype": "^3.0.7", + "deep-object-diff": "^1.1.0", + "deepmerge": "^4.2.2", + "escape-string-regexp": "^4.0.0", + "media-query-parser": "^2.0.2", + "outdent": "^0.8.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@vanilla-extract/css-utils": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@vanilla-extract/css-utils/-/css-utils-0.1.2.tgz", + "integrity": "sha512-qoxIu5E/UhJtoKsPL1JaU9nhTN0Xl5zYV0pScOgsvc3JN46TvTTt0L3GV8x3PQpZP7x3elw8BsC9czYbhJy9Gg==" + }, + "@vanilla-extract/integration": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@vanilla-extract/integration/-/integration-5.0.1.tgz", + "integrity": "sha512-HRV/HvC/lihb9wT3x5s7pf5qLjqxSd9nBePJ10juOuMB5cl2ZClEcts076m9BuRKM3wRK2h7KuwkNsaUtjujxQ==", + "requires": { + "@vanilla-extract/css": "^1.7.2", + "esbuild": "^0.11.16", + "eval": "0.1.6", + "find-up": "^5.0.0", + "javascript-stringify": "^2.0.1", + "lodash": "^4.17.21", + "outdent": "^0.8.0" + }, + "dependencies": { + "esbuild": { + "version": "0.11.23", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.11.23.tgz", + "integrity": "sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==" + } + } + }, + "@vanilla-extract/private": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@vanilla-extract/private/-/private-1.0.3.tgz", + "integrity": "sha512-17kVyLq3ePTKOkveHxXuIJZtGYs+cSoev7BlP+Lf4916qfDhk/HBjvlYDe8egrea7LNPHKwSZJK/bzZC+Q6AwQ==" + }, + "@vanilla-extract/recipes": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@vanilla-extract/recipes/-/recipes-0.2.5.tgz", + "integrity": "sha512-OWXUUiFJdswD3+Xg8f8avuw/vAHZRFS4oHqFeoV1TcO8cfbDQ0zmkreBHvyspoJU+qsyWK48yPHKSptqNRPy9Q==", + "requires": {} + }, + "@vanilla-extract/vite-plugin": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@vanilla-extract/vite-plugin/-/vite-plugin-3.5.0.tgz", + "integrity": "sha512-UMK2xUkfBclg8EAsR9V3mKQ44XjiyqpABZUBOJp3Vk8NDYHV8E/Ysn8xUB2WSJJnRLd4gqpHnivqRNRRfKV/gw==", + "requires": { + "@vanilla-extract/integration": "^5.0.0", + "outdent": "^0.8.0", + "postcss": "^8.3.6", + "postcss-load-config": "^3.1.0" + } + }, + "@vitejs/plugin-react": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-2.1.0.tgz", + "integrity": "sha512-am6rPyyU3LzUYne3Gd9oj9c4Rzbq5hQnuGXSMT6Gujq45Il/+bunwq3lrB7wghLkiF45ygMwft37vgJ/NE8IAA==", + "dev": true, + "requires": { + "@babel/core": "^7.18.13", + "@babel/plugin-transform-react-jsx": "^7.18.10", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-jsx-self": "^7.18.6", + "@babel/plugin-transform-react-jsx-source": "^7.18.6", + "magic-string": "^0.26.2", + "react-refresh": "^0.14.0" + } + }, + "acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-includes": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", + "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array.prototype.flat": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", + "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.flatmap": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", + "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + } + }, + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001390", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001390.tgz", + "integrity": "sha512-sS4CaUM+/+vqQUlCvCJ2WtDlV81aWtHhqeEVkLokVJJa3ViN4zDxAGfq9R8i1m90uGHxo99cy10Od+lvn3hf0g==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==" + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "csstype": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", + "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deep-object-diff": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.7.tgz", + "integrity": "sha512-QkgBca0mL08P6HiOjoqvmm6xOAl2W6CT2+34Ljhg0OeFan8cwlcdq8jrLKsBBuUFAZLsN5b6y491KdKEoSo9lg==" + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "electron-to-chromium": { + "version": "1.4.242", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.242.tgz", + "integrity": "sha512-nPdgMWtjjWGCtreW/2adkrB2jyHjClo9PtVhR6rW+oxa4E4Wom642Tn+5LslHP3XPL5MCpkn5/UEY60EXylNeQ==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.2.tgz", + "integrity": "sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.2", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "esbuild": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.7.tgz", + "integrity": "sha512-7V8tzllIbAQV1M4QoE52ImKu8hT/NLGlGXkiDsbEU5PS6K8Mn09ZnYoS+dcmHxOS9CRsV4IRAMdT3I67IyUNXw==", + "requires": { + "@esbuild/linux-loong64": "0.15.7", + "esbuild-android-64": "0.15.7", + "esbuild-android-arm64": "0.15.7", + "esbuild-darwin-64": "0.15.7", + "esbuild-darwin-arm64": "0.15.7", + "esbuild-freebsd-64": "0.15.7", + "esbuild-freebsd-arm64": "0.15.7", + "esbuild-linux-32": "0.15.7", + "esbuild-linux-64": "0.15.7", + "esbuild-linux-arm": "0.15.7", + "esbuild-linux-arm64": "0.15.7", + "esbuild-linux-mips64le": "0.15.7", + "esbuild-linux-ppc64le": "0.15.7", + "esbuild-linux-riscv64": "0.15.7", + "esbuild-linux-s390x": "0.15.7", + "esbuild-netbsd-64": "0.15.7", + "esbuild-openbsd-64": "0.15.7", + "esbuild-sunos-64": "0.15.7", + "esbuild-windows-32": "0.15.7", + "esbuild-windows-64": "0.15.7", + "esbuild-windows-arm64": "0.15.7" + } + }, + "esbuild-android-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.7.tgz", + "integrity": "sha512-p7rCvdsldhxQr3YHxptf1Jcd86dlhvc3EQmQJaZzzuAxefO9PvcI0GLOa5nCWem1AJ8iMRu9w0r5TG8pHmbi9w==", + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.7.tgz", + "integrity": "sha512-L775l9ynJT7rVqRM5vo+9w5g2ysbOCfsdLV4CWanTZ1k/9Jb3IYlQ06VCI1edhcosTYJRECQFJa3eAvkx72eyQ==", + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.7.tgz", + "integrity": "sha512-KGPt3r1c9ww009t2xLB6Vk0YyNOXh7hbjZ3EecHoVDxgtbUlYstMPDaReimKe6eOEfyY4hBEEeTvKwPsiH5WZg==", + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.7.tgz", + "integrity": "sha512-kBIHvtVqbSGajN88lYMnR3aIleH3ABZLLFLxwL2stiuIGAjGlQW741NxVTpUHQXUmPzxi6POqc9npkXa8AcSZQ==", + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.7.tgz", + "integrity": "sha512-hESZB91qDLV5MEwNxzMxPfbjAhOmtfsr9Wnuci7pY6TtEh4UDuevmGmkUIjX/b+e/k4tcNBMf7SRQ2mdNuK/HQ==", + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.7.tgz", + "integrity": "sha512-dLFR0ChH5t+b3J8w0fVKGvtwSLWCv7GYT2Y2jFGulF1L5HftQLzVGN+6pi1SivuiVSmTh28FwUhi9PwQicXI6Q==", + "optional": true + }, + "esbuild-linux-32": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.7.tgz", + "integrity": "sha512-v3gT/LsONGUZcjbt2swrMjwxo32NJzk+7sAgtxhGx1+ZmOFaTRXBAi1PPfgpeo/J//Un2jIKm/I+qqeo4caJvg==", + "optional": true + }, + "esbuild-linux-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.7.tgz", + "integrity": "sha512-LxXEfLAKwOVmm1yecpMmWERBshl+Kv5YJ/1KnyAr6HRHFW8cxOEsEfisD3sVl/RvHyW//lhYUVSuy9jGEfIRAQ==", + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.7.tgz", + "integrity": "sha512-JKgAHtMR5f75wJTeuNQbyznZZa+pjiUHV7sRZp42UNdyXC6TiUYMW/8z8yIBAr2Fpad8hM1royZKQisqPABPvQ==", + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.7.tgz", + "integrity": "sha512-P3cfhudpzWDkglutWgXcT2S7Ft7o2e3YDMrP1n0z2dlbUZghUkKCyaWw0zhp4KxEEzt/E7lmrtRu/pGWnwb9vw==", + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.7.tgz", + "integrity": "sha512-T7XKuxl0VpeFLCJXub6U+iybiqh0kM/bWOTb4qcPyDDwNVhLUiPcGdG2/0S7F93czUZOKP57YiLV8YQewgLHKw==", + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.7.tgz", + "integrity": "sha512-6mGuC19WpFN7NYbecMIJjeQgvDb5aMuvyk0PDYBJrqAEMkTwg3Z98kEKuCm6THHRnrgsdr7bp4SruSAxEM4eJw==", + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.7.tgz", + "integrity": "sha512-uUJsezbswAYo/X7OU/P+PuL/EI9WzxsEQXDekfwpQ23uGiooxqoLFAPmXPcRAt941vjlY9jtITEEikWMBr+F/g==", + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.7.tgz", + "integrity": "sha512-+tO+xOyTNMc34rXlSxK7aCwJgvQyffqEM5MMdNDEeMU3ss0S6wKvbBOQfgd5jRPblfwJ6b+bKiz0g5nABpY0QQ==", + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.7.tgz", + "integrity": "sha512-yVc4Wz+Pu3cP5hzm5kIygNPrjar/v5WCSoRmIjCPWfBVJkZNb5brEGKUlf+0Y759D48BCWa0WHrWXaNy0DULTQ==", + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.7.tgz", + "integrity": "sha512-GsimbwC4FSR4lN3wf8XmTQ+r8/0YSQo21rWDL0XFFhLHKlzEA4SsT1Tl8bPYu00IU6UWSJ+b3fG/8SB69rcuEQ==", + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.7.tgz", + "integrity": "sha512-8CDI1aL/ts0mDGbWzjEOGKXnU7p3rDzggHSBtVryQzkSOsjCHRVe0iFYUuhczlxU1R3LN/E7HgUO4NXzGGP/Ag==", + "optional": true + }, + "esbuild-windows-32": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.7.tgz", + "integrity": "sha512-cOnKXUEPS8EGCzRSFa1x6NQjGhGsFlVgjhqGEbLTPsA7x4RRYiy2RKoArNUU4iR2vHmzqS5Gr84MEumO/wxYKA==", + "optional": true + }, + "esbuild-windows-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.7.tgz", + "integrity": "sha512-7MI08Ec2sTIDv+zH6StNBKO+2hGUYIT42GmFyW6MBBWWtJhTcQLinKS6ldIN1d52MXIbiJ6nXyCJ+LpL4jBm3Q==", + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.7.tgz", + "integrity": "sha512-R06nmqBlWjKHddhRJYlqDd3Fabx9LFdKcjoOy08YLimwmsswlFBJV4rXzZCxz/b7ZJXvrZgj8DDv1ewE9+StMw==", + "optional": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "eslint": { + "version": "8.23.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.1.tgz", + "integrity": "sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.2", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@humanwhocodes/module-importer": "^1.0.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true, + "requires": {} + }, + "eslint-config-standard": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz", + "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==", + "dev": true, + "requires": {} + }, + "eslint-config-standard-with-typescript": { + "version": "23.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-23.0.0.tgz", + "integrity": "sha512-iaaWifImn37Z1OXbNW1es7KI+S7D408F9ys0bpaQf2temeBWlvb0Nc5qHkOgYaRb5QxTZT32GGeN1gtswASOXA==", + "dev": true, + "requires": { + "@typescript-eslint/parser": "^5.0.0", + "eslint-config-standard": "17.0.0" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-module-utils": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "dev": true, + "requires": { + "debug": "^3.2.7" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-plugin-es": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "dev": true, + "requires": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "dependencies": { + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-plugin-i18n-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-i18n-json/-/eslint-plugin-i18n-json-4.0.0.tgz", + "integrity": "sha512-rglbr9f/UaPN/OeiSLVVFlIh4RrXPTzX5qr4tqOdTj1Ryr8xIhUzriDDuyuPWliektO86c/zy1RldmBIOfDNsQ==", + "dev": true, + "requires": { + "@formatjs/icu-messageformat-parser": "^2.0.18", + "chalk": "^2.3.2", + "indent-string": "^3.2.0", + "jest-diff": "^22.0.3", + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "lodash.isplainobject": "^4.0.6", + "lodash.set": "^4.3.2", + "log-symbols": "^2.2.0", + "parse-json": "^5.2.0", + "plur": "^2.1.2", + "pretty-format": "^22.0.3" + } + }, + "eslint-plugin-i18next": { + "version": "6.0.0-4", + "resolved": "https://registry.npmjs.org/eslint-plugin-i18next/-/eslint-plugin-i18next-6.0.0-4.tgz", + "integrity": "sha512-QF0TpFuk5HkdzKBirXsWvueX50GIu/mhTUtYWSUSHjJcLPugap890XGsyDhOSUpX/tNzX32K43v96InZr7+mmg==", + "dev": true, + "requires": { + "lodash": "^4.17.21", + "requireindex": "~1.1.0" + } + }, + "eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "eslint-plugin-n": { + "version": "15.2.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.2.5.tgz", + "integrity": "sha512-8+BYsqiyZfpu6NXmdLOXVUfk8IocpCjpd8nMRRH0A9ulrcemhb2VI9RSJMEy5udx++A/YcVPD11zT8hpFq368g==", + "dev": true, + "requires": { + "builtins": "^5.0.1", + "eslint-plugin-es": "^4.1.0", + "eslint-utils": "^3.0.0", + "ignore": "^5.1.1", + "is-core-module": "^2.10.0", + "minimatch": "^3.1.2", + "resolve": "^1.22.1", + "semver": "^7.3.7" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "eslint-plugin-promise": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.0.1.tgz", + "integrity": "sha512-uM4Tgo5u3UWQiroOyDEsYcVMOo7re3zmno0IZmB5auxoaQNIceAbXEkSt8RNrKtaYehARHG06pYK6K1JhtP0Zw==", + "dev": true, + "requires": {} + }, + "eslint-plugin-react": { + "version": "7.31.8", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.8.tgz", + "integrity": "sha512-5lBTZmgQmARLLSYiwI71tiGVTLUuqXantZM6vlSY39OaDSV0M7+32K5DnLkmFrwTe+Ksz0ffuLUC91RUviVZfw==", + "dev": true, + "requires": { + "array-includes": "^3.1.5", + "array.prototype.flatmap": "^1.3.0", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.1", + "object.values": "^1.1.5", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.7" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + } + } + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", + "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "eval": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.6.tgz", + "integrity": "sha512-o0XUw+5OGkXw4pJZzQoXUk+H87DHuC+7ZE//oSrRGtatTmr12oTnLfg6QOq9DyTt0c/p4TwzgmkKrBzWTSizyQ==", + "requires": { + "require-like": ">= 0.1.1" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "history": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz", + "integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==", + "requires": { + "@babel/runtime": "^7.7.6" + } + }, + "html-parse-stringify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", + "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", + "requires": { + "void-elements": "3.1.0" + } + }, + "i18next": { + "version": "21.9.2", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-21.9.2.tgz", + "integrity": "sha512-00fVrLQOwy45nm3OtC9l1WiLK3nJlIYSljgCt0qzTaAy65aciMdRy9GsuW+a2AtKtdg9/njUGfRH30LRupV7ZQ==", + "requires": { + "@babel/runtime": "^7.17.2" + } + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "immer": { + "version": "9.0.15", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz", + "integrity": "sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==" + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "irregular-plurals": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.4.0.tgz", + "integrity": "sha512-kniTIJmaZYiwa17eTtWIfm0K342seyugl6vuC8DiiyiRAJWAVlLkqGCI0Im0neo0TkXw+pRcKaBPRdcKHnQJ6Q==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.6.tgz", + "integrity": "sha512-krO72EO2NptOGAX2KYyqbP9vYMlNAXdB53rq6f8LXY6RY7JdSR/3BD6wLUlPHSAesmY9vstNrjvqGaCiRK/91Q==", + "dev": true + }, + "is-core-module": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "javascript-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", + "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==" + }, + "jest-diff": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-22.4.3.tgz", + "integrity": "sha512-/QqGvCDP5oZOF6PebDuLwrB2BMD8ffJv6TAGAdEVuDx1+uEgrHpSFrfrOiMRx2eJ1hgNjlQrOQEHetVwij90KA==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "diff": "^3.2.0", + "jest-get-type": "^22.4.3", + "pretty-format": "^22.4.3" + } + }, + "jest-get-type": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", + "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==", + "dev": true + }, + "js-sdsl": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.4.tgz", + "integrity": "sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + }, + "jsx-ast-utils": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", + "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "dev": true, + "requires": { + "array-includes": "^3.1.5", + "object.assign": "^4.1.3" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==" + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.set": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", + "integrity": "sha512-4hNPN5jlm/N/HLMCO43v8BXKq9Z7QdAGc/VGrRD61w8gN9g/6jF9A4L1pbUgBLCffi0w9VsXfTOij5x8iTyFvg==", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "magic-string": { + "version": "0.26.3", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.3.tgz", + "integrity": "sha512-u1Po0NDyFcwdg2nzHT88wSK0+Rih0N1M+Ph1Sp08k8yvFFU3KR72wryS7e1qMPJypt99WB7fIFVCA92mQrMjrg==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "media-query-parser": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/media-query-parser/-/media-query-parser-2.0.2.tgz", + "integrity": "sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==", + "requires": { + "@babel/runtime": "^7.12.5" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.fromentries": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.hasown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", + "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", + "dev": true, + "requires": { + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "outdent": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.8.0.tgz", + "integrity": "sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==" + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "requires": { + "p-limit": "^3.0.2" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "plur": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz", + "integrity": "sha512-WhcHk576xg9y/iv6RWOuroZgsqvCbJN+XGvAypCJwLAYs2iWDp5LUmvaCdV6JR2O0SMBf8l6p7A94AyLCFVMlQ==", + "dev": true, + "requires": { + "irregular-plurals": "^1.0.0" + } + }, + "postcss": { + "version": "8.4.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", + "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true + }, + "pretty-format": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-22.4.3.tgz", + "integrity": "sha512-S4oT9/sT6MN7/3COoOy+ZJeA92VmOnveLHgrwBE3Z1W5N9S2A1QGNYiE1z75DAENbJrXXUb+OWXhpJcg05QKQQ==", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0", + "ansi-styles": "^3.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true + } + } + }, + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "requires": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + } + }, + "react-i18next": { + "version": "11.18.6", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.18.6.tgz", + "integrity": "sha512-yHb2F9BiT0lqoQDt8loZ5gWP331GwctHz9tYQ8A2EIEUu+CcEdjBLQWli1USG3RdWQt3W+jqQLg/d4rrQR96LA==", + "requires": { + "@babel/runtime": "^7.14.5", + "html-parse-stringify": "^3.0.1" + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "remove-accents": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", + "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==" + }, + "require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==" + }, + "requireindex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz", + "integrity": "sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "2.78.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz", + "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==", + "requires": { + "fsevents": "~2.3.2" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "string.prototype.matchall": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", + "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.1", + "side-channel": "^1.0.4" + } + }, + "string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typescript": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz", + "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==", + "dev": true + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "update-browserslist-db": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.7.tgz", + "integrity": "sha512-iN/XYesmZ2RmmWAiI4Z5rq0YqSiv0brj9Ce9CfhNE4xIW2h+MFxcgkxIzZ+ShkFPUkjU3gQ+3oypadD3RAMtrg==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "requires": {} + }, + "uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + }, + "vite": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.1.0.tgz", + "integrity": "sha512-YBg3dUicDpDWFCGttmvMbVyS9ydjntwEjwXRj2KBFwSB8SxmGcudo1yb8FW5+M/G86aS8x828ujnzUVdsLjs9g==", + "requires": { + "esbuild": "^0.15.6", + "fsevents": "~2.3.2", + "postcss": "^8.4.16", + "resolve": "^1.22.1", + "rollup": "~2.78.0" + } + }, + "vite-plugin-eslint": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/vite-plugin-eslint/-/vite-plugin-eslint-1.8.1.tgz", + "integrity": "sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^4.2.1", + "@types/eslint": "^8.4.5", + "rollup": "^2.77.2" + } + }, + "void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + }, + "zustand": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.1.1.tgz", + "integrity": "sha512-h4F3WMqsZgvvaE0n3lThx4MM81Ls9xebjvrABNzf5+jb3/03YjNTSgZXeyrvXDArMeV9untvWXRw1tY+ntPYbA==", + "requires": { + "use-sync-external-store": "1.2.0" + } + } + } +} diff --git a/ui/frontend/build_src/package.json b/ui/frontend/build_src/package.json new file mode 100644 index 00000000..e5b27a7e --- /dev/null +++ b/ui/frontend/build_src/package.json @@ -0,0 +1,56 @@ +{ + "name": "react-ts", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "pretty": "prettier --write .", + "dev": "vite", + "build": "tsc && vite build --emptyOutDir", + "preview": "vite preview" + }, + "dependencies": { + "@headlessui/react": "^1.7.2", + "@tanstack/react-location": "^3.7.4", + "@tanstack/react-query": "^4.2.3", + "@tanstack/react-query-devtools": "^4.2.3", + "@vanilla-extract/css": "^1.9.0", + "@vanilla-extract/css-utils": "^0.1.2", + "@vanilla-extract/recipes": "^0.2.5", + "@vanilla-extract/vite-plugin": "^3.5.0", + "i18next": "^21.9.2", + "immer": "^9.0.15", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-i18next": "^11.18.6", + "uuid": "^9.0.0", + "zustand": "^4.1.1" + }, + "devDependencies": { + "@types/node": "^18.7.18", + "@types/react": "^18.0.17", + "@types/react-dom": "^18.0.6", + "@types/uuid": "^8.3.4", + "@typescript-eslint/eslint-plugin": "^5.37.0", + "@typescript-eslint/parser": "^5.37.0", + "@vitejs/plugin-react": "^2.0.1", + "eslint": "^8.23.1", + "eslint-config-prettier": "^8.5.0", + "eslint-config-standard-with-typescript": "^23.0.0", + "eslint-plugin-i18n-json": "^4.0.0", + "eslint-plugin-i18next": "^6.0.0-4", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-n": "^15.2.5", + "eslint-plugin-promise": "^6.0.1", + "eslint-plugin-react": "^7.31.8", + "prettier": "^2.7.1", + "typescript": "^4.8.3", + "vite": "^3.0.7", + "vite-plugin-eslint": "^1.8.1" + }, + "overrides": { + "@vanilla-extract/vite-plugin": { + "vite": "^3" + } + } +} diff --git a/ui/frontend/build_src/prettier.cjs b/ui/frontend/build_src/prettier.cjs new file mode 100644 index 00000000..f57cec25 --- /dev/null +++ b/ui/frontend/build_src/prettier.cjs @@ -0,0 +1,7 @@ +module.exports = { + singleQuote: true, + tabWidth: 2, + semi: true, + trailingComma: "es5", + endOfLine: "lf", +}; diff --git a/ui/frontend/build_src/src/App.tsx b/ui/frontend/build_src/src/App.tsx new file mode 100644 index 00000000..f4e312e1 --- /dev/null +++ b/ui/frontend/build_src/src/App.tsx @@ -0,0 +1,21 @@ +import React from "react"; +import { ReactLocation, Router } from "@tanstack/react-location"; +import Home from "./pages/Home"; +import Settings from "./pages/Settings"; +import "./Translation/config"; +const location = new ReactLocation(); + +function App() { + + return ( + }, + { path: "/settings", element: }, + ]} + > + ); +} + +export default App; diff --git a/ui/frontend/build_src/src/Translation/config.ts b/ui/frontend/build_src/src/Translation/config.ts new file mode 100644 index 00000000..31c0611b --- /dev/null +++ b/ui/frontend/build_src/src/Translation/config.ts @@ -0,0 +1,32 @@ +import i18n from "i18next"; +// this should be updated to an interface +import ENTranslation from "./locales/en/home.json"; +import ESTranslation from "./locales/es/home.json"; +import { initReactI18next } from "react-i18next"; + +export const resources = { + en: { + translation: ENTranslation, + }, + es: { + translation: ESTranslation, + }, +} as const; +i18n + .use(initReactI18next) + .init({ + lng: "en", + interpolation: { + escapeValue: false, + }, + resources, + }) + .then(() => { + console.log("i18n initialized"); + }) + .catch((err) => { + console.error("i18n initialization failed", err); + }) + .finally(() => { + console.log("i18n initialization finished"); + }); diff --git a/ui/frontend/build_src/src/Translation/locales/en/home.json b/ui/frontend/build_src/src/Translation/locales/en/home.json new file mode 100644 index 00000000..143adf7e --- /dev/null +++ b/ui/frontend/build_src/src/Translation/locales/en/home.json @@ -0,0 +1,110 @@ +{ + "title": "Stable Diffusion UI", + "description": "", + "navbar": { + "home": "Home", + "history": "History", + "community": "Community", + "settings": "Settings" + }, + "land-cre": { + "cp": "Create Profile", + "cp-place": "Profile name", + "pp": "Profile Picture", + "pp-disc": "", + "ast": "Automatically save to", + "ast-disc": "File path to auto save your creations", + "place": "File path", + "cre": "Create" + }, + "land-pre": { + "user": "Username", + "add": "Add Profile" + }, + "home": { + "status-starting": "Stable Diffusion is starting...", + "status-ready": "Stable Diffusion is ready to use!", + "status-error": "Stable Diffusion is not running!", + "editor-title": "Prompt", + "initial-img-txt": "Initial Image: (optional)", + "initial-img-btn": "Browse...", + "initial-img-text2": "No file selected.", + "make-img-btn": "Make Image", + "make-img-btn-stop": "Stop" + }, + "in-paint": { + "txt": "In-Painting (select the area which the AI will paint into)", + "clear": "Clear" + }, + "settings": { + "base-img": "Use base image:", + "seed": "Seed:", + "amount-of-img": "Amount of images to make:", + "how-many": "How many at once:", + "stream-img": "Stream images (this will slow down image generation):", + "width": "Width:", + "height": "Height:", + "sampler": "Sampler:", + "steps": "Number of inference steps:", + "guide-scale": "Guidance Scale:", + "prompt-str": "Prompt Strength:", + "live-preview": "Show a live preview of the image (disable this for faster image generation)", + "fix-face": "Fix incorrect faces and eyes (uses GFPGAN)", + "ups": "Upscale the image to 4x resolution using:", + "no-ups": "No Upscaling", + "corrected": "Show only the corrected/upscaled image" + }, + "tags": { + "txt": "Image Modifiers (art styles, tags etc)" + }, + "preview-prompt": { + "part1": "Type a prompt and press the \"Make Image\" button.", + "part2": "You can set an \"Initial Image\" if you want to guide the AI.\n", + "part3": "You can also add modifiers like \"Realistic\", \"Pencil Sketch\", \"ArtStation\" etc by browsing through the \"Image Modifiers\" section and selecting the desired modifiers.\n", + "part4": "Click \"Advanced Settings\" for additional settings like seed, image size, number of images to generate etc.", + "part5": "Enjoy! :)" + }, + "current-task": "Current task", + "recent-create": "Recently Created", + "popup": { + "use-btn": "Use Image", + "use-btn2": "Use Image and Tags" + }, + "history": { + "fave": "Favorites Only", + "search": "Search" + }, + "advanced-settings": { + "sound": "Play sound on task completion", + "sound-disc": "Will play a sound so user can hear when image is done.", + "turbo": "Turbo mode", + "turbo-disc": "Generates images faster, but uses an additional 1 GB of GPU memory", + "cpu": "Use CPU instead of GPU", + "cpu-disc": "Warning: this will be *very* slow", + "gpu": "Use full precision", + "gpu-disc": "(for GPU-only. warning: this will consume more VRAM)", + "beta": "Beta Features", + "beta-disc": "Get the latest features immediately (but could be less stable). \nPlease restart the program after changing this.", + "save": "SAVE" + }, + "storage": { + "ast": "Automatically save to", + "ast-disc": "File path to auto save your creations", + "place": "File path", + "cps": "Cross profile sharing", + "cps-disc": "Profiles will see suggestions from each other.", + "acb": "Allow cloud backup", + "acb-disc": "A button will show up for images on hover", + "acb-place": "Choose your", + "acc-api": "Api key", + "acb-api-place": "Your API key", + "save": "SAVE" + }, + "import": { + "imp-btn": "IMPORT", + "exp-btn": "EXPORT", + "disc": "It is a good idea to leave the exported file as it is. Otherwise it may not import correctly", + "disc:2": "When importing, only profiles that are not already present on the will be added." + }, + "about": "If you found this project useful and want to help keep it alive, please to help cover the cost of development and maintenance! Thank you for your support!\n\nPlease feel free to join the discord community or file an issue if you have any problems or suggestions in using this interface.\n\nDisclaimer: The authors of this project are not responsible for any content generated using this interface.\n\nThis license of this software forbids you from sharing any content that violates any laws, produce any harm to a person, disseminate any personal information that would be meant for harm,\nspread misinformation and target vulnerable groups. For the full list of restrictions please read the license.\n\nBy using this software, you consent to the terms and conditions of the license.\n" +} diff --git a/ui/frontend/build_src/src/Translation/locales/es/home.json b/ui/frontend/build_src/src/Translation/locales/es/home.json new file mode 100644 index 00000000..1c7fe6f5 --- /dev/null +++ b/ui/frontend/build_src/src/Translation/locales/es/home.json @@ -0,0 +1,108 @@ +{ + "title": "Stable Diffusion UI", + "description": "", + "navbar": { + "home": "Home", + "history": "History", + "community": "Community", + "settings": "Settings" + }, + "land-cre": { + "cp": "Create Profile", + "cp-place": "Profile name", + "pp": "Profile Picture", + "pp-disc": "", + "ast": "Automatically save to", + "ast-disc": "File path to auto save your creations", + "place": "File path", + "cre": "Create" + }, + "land-pre": { + "user": "Username", + "add": "Add Profile" + }, + "home": { + "status-starting": "Stable Diffusion is starting...", + "status-ready": "Stable Diffusion is ready to use!", + "status-error": "Stable Diffusion is not running!", + "editor-title": "Prompt", + "initial-img-txt": "Initial Image: (optional)", + "initial-img-btn": "Browse...", + "initial-img-text2": "No file selected.", + "make-img-btn": "Make Image", + "make-img-btn-stop": "Stop" + }, + "in-paint": { + "txt": "In-Painting (select the area which the AI will paint into)", + "clear": "Clear" + }, + "settings": { + "base-img": "Use base image:", + "seed": "Seed:", + "amount-of-img": "Amount of images to make:", + "how-many": "How many at once:", + "width": "Width:", + "height": "Height:", + "steps": "Number of inference steps:", + "guide-scale": "Guidance Scale:", + "prompt-str": "Prompt Strength:", + "live-preview": "Show a live preview of the image (disable this for faster image generation)", + "fix-face": "Fix incorrect faces and eyes (uses GFPGAN)", + "ups": "Upscale the image to 4x resolution using:", + "no-ups": "No Upscaling", + "corrected": "Show only the corrected/upscaled image" + }, + "tags": { + "txt": "Image Modifiers (art styles, tags etc)" + }, + "preview-prompt": { + "part1": "Type a prompt and press the \"Make Image\" button.", + "part2": "You can set an \"Initial Image\" if you want to guide the AI.\n", + "part3": "You can also add modifiers like \"Realistic\", \"Pencil Sketch\", \"ArtStation\" etc by browsing through the \"Image Modifiers\" section and selecting the desired modifiers.\n", + "part4": "Click \"Advanced Settings\" for additional settings like seed, image size, number of images to generate etc.", + "part5": "Enjoy! :)" + }, + "current-task": "Current task", + "recent-create": "Recently Created", + "popup": { + "use-btn": "Use Image", + "use-btn2": "Use Image and Tags" + }, + "history": { + "fave": "Favorites Only", + "search": "Search" + }, + "advanced-settings": { + "sound": "Play sound on task completion", + "sound-disc": "Will play a sound so user can hear when image is done.", + "turbo": "Turbo mode", + "turbo-disc": "Generates images faster, but uses an additional 1 GB of GPU memory", + "cpu": "Use CPU instead of GPU", + "cpu-disc": "Warning: this will be *very* slow", + "gpu": "Use full precision", + "gpu-disc": "(for GPU-only. warning: this will consume more VRAM)", + "beta": "Beta Features", + "beta-disc": "Get the latest features immediately (but could be less stable). \nPlease restart the program after changing this.", + "save": "SAVE" + }, + "storage": { + "ast": "Automatically save to", + "ast-disc": "File path to auto save your creations", + "place": "File path", + "cps": "Cross profile sharing", + "cps-disc": "Profiles will see suggestions from each other.", + "acb": "Allow cloud backup", + "acb-disc": "A button will show up for images on hover", + "acb-place": "Choose your", + "acc-api": "Api key", + "acb-api-place": "Your API key", + "save": "SAVE" + }, + "import": { + "imp-btn": "IMPORT", + "exp-btn": "EXPORT", + "disc": "It is a good idea to leave the exported file as it is. Otherwise it may not import correctly", + "disc:2": "When importing, only profiles that are not already present on the will be added." + }, + "about": "If you found this project useful and want to help keep it alive, please to help cover the cost of development and maintenance! Thank you for your support!\n\nPlease feel free to join the discord community or file an issue if you have any problems or suggestions in using this interface.\n\nDisclaimer: The authors of this project are not responsible for any content generated using this interface.\n\nThis license of this software forbids you from sharing any content that violates any laws, produce any harm to a person, disseminate any personal information that would be meant for harm,\nspread misinformation and target vulnerable groups. For the full list of restrictions please read the license.\n\nBy using this software, you consent to the terms and conditions of the license.\n" +} diff --git a/ui/frontend/build_src/src/api/index.ts b/ui/frontend/build_src/src/api/index.ts new file mode 100644 index 00000000..2fba8a5f --- /dev/null +++ b/ui/frontend/build_src/src/api/index.ts @@ -0,0 +1,146 @@ +/** + * basic server health + */ + +import type { SAMPLER_OPTIONS } from "../stores/imageCreateStore"; + +// when we are on dev we want to specifiy 9000 as the port for the backend +// when we are on prod we want be realtive to the current url +export const API_URL = import.meta.env.DEV ? "http://localhost:9000" : ""; + +export const HEALTH_PING_INTERVAL = 5000; // 5 seconds +export const healthPing = async () => { + const pingUrl = `${API_URL}/ping`; + const response = await fetch(pingUrl); + const data = await response.json(); + return data; +}; + +/** + * the local list of modifications + */ +export const loadModifications = async () => { + const response = await fetch(`${API_URL}/modifiers.json`); + const data = await response.json(); + return data; +}; + +export const getSaveDirectory = async () => { + const response = await fetch(`${API_URL}/output_dir`); + const data = await response.json(); + return data[0]; +}; + +export const KEY_CONFIG = "config"; +export const getConfig = async () => { + const response = await fetch(`${API_URL}/app_config`); + const data = await response.json(); + return data; +}; + +export const KEY_TOGGLE_CONFIG = "toggle_config"; +export const toggleBetaConfig = async (branch: string) => { + const response = await fetch(`${API_URL}/app_config`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + update_branch: branch, + }), + }); + const data = await response.json(); + return data; +}; + +/** + * post a new request for an image + */ +// TODO; put hese some place better +export interface ImageRequest { + session_id: string; + prompt: string; + negative_prompt: string; + seed: number; + num_outputs: number; + num_inference_steps: number; + guidance_scale: number; + width: + | 128 + | 192 + | 256 + | 320 + | 384 + | 448 + | 512 + | 576 + | 640 + | 704 + | 768 + | 832 + | 896 + | 960 + | 1024; + height: + | 128 + | 192 + | 256 + | 320 + | 384 + | 448 + | 512 + | 576 + | 640 + | 704 + | 768 + | 832 + | 896 + | 960 + | 1024; + // allow_nsfw: boolean + turbo: boolean; + use_cpu: boolean; + use_full_precision: boolean; + save_to_disk_path: null | string; + use_face_correction: null | "GFPGANv1.3"; + use_upscale: null | "RealESRGAN_x4plus" | "RealESRGAN_x4plus_anime_6B" | ""; + show_only_filtered_image: boolean; + init_image: undefined | string; + prompt_strength: undefined | number; + mask: undefined | string; + sampler: typeof SAMPLER_OPTIONS[number]; + stream_progress_updates: true; + stream_image_progress: boolean; + +} + +export interface ImageOutput { + data: string; + path_abs: string | null; + seed: number; +} + +export interface ImageReturnType { + output: ImageOutput[]; + request: ImageRequest; + status: string; +} + +export const MakeImageKey = "MakeImage"; +export const doMakeImage = async (reqBody: ImageRequest) => { + const res = await fetch(`${API_URL}/image`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(reqBody), + }); + return res; +}; + +export const doStopImage = async () => { + + const response = await fetch(`${API_URL}/image/stop`); + const data = await response.json(); + return data; +}; \ No newline at end of file diff --git a/ui/frontend/build_src/src/components/_recipes/button.css.ts b/ui/frontend/build_src/src/components/_recipes/button.css.ts new file mode 100644 index 00000000..d801ee14 --- /dev/null +++ b/ui/frontend/build_src/src/components/_recipes/button.css.ts @@ -0,0 +1,140 @@ +// would prefer to use a var here, but it doesn't work +// vars: { +// '--button-base-saturation': vars.colorMod.saturation.normal, +// '--button-base-lightness': vars.colorMod.lightness.normal, +// }, + + +import { recipe } from "@vanilla-extract/recipes"; +import { vars } from "../../styles/theme/index.css"; + +export const buttonStyle = recipe({ + + base: { + fontSize: vars.fonts.sizes.Subheadline, + fontWeight: "bold", + color: vars.colors.text.normal, + padding: vars.spacing.small, + border: "0", + borderRadius: vars.trim.smallBorderRadius, + }, + + variants: { + color: { + primary: { + // @ts-expect-error + '--button-hue': vars.brandHue, + '--button-base-saturation': vars.colorMod.saturation.normal, + '--button-base-lightness': vars.colorMod.lightness.normal, + }, + secondary: { + // @ts-expect-error + '--button-hue': vars.secondaryHue, + '--button-base-saturation': vars.colorMod.saturation.normal, + '--button-base-lightness': vars.colorMod.lightness.normal, + }, + tertiary: { + // @ts-expect-error + '--button-hue': vars.tertiaryHue, + '--button-base-saturation': vars.colorMod.saturation.normal, + '--button-base-lightness': vars.colorMod.lightness.normal, + }, + cancel: { + // @ts-expect-error + '--button-hue': vars.errorHue, + '--button-base-saturation': vars.colorMod.saturation.normal, + '--button-base-lightness': vars.colorMod.lightness.normal, + }, + accent: { + // @ts-expect-error + '--button-hue': vars.backgroundAccentHue, + '--button-base-saturation': vars.backgroundAccentSaturation, + '--button-base-lightness': vars.backgroundAccentLightness, + }, + clear: { + backgroundColor: "transparent", + }, + }, + + type: { + fill: { + backgroundColor: `hsl(var(--button-hue),var(--button-base-saturation),${vars.colorMod.lightness.normal})`, + border: `1px solid hsl(var(--button-hue),var(--button-base-saturation),${vars.colorMod.lightness.normal})`, + ":hover": { + backgroundColor: `hsl(var(--button-hue),${vars.colorMod.saturation.bright},${vars.colorMod.lightness.normal})`, + border: `1px solid hsl(var(--button-hue),${vars.colorMod.saturation.bright},${vars.colorMod.lightness.normal})`, + }, + ":active": { + backgroundColor: `hsl(var(--button-hue),${vars.colorMod.saturation.bright},${vars.colorMod.lightness.dim})`, + border: `1px solid hsl(var(--button-hue),${vars.colorMod.saturation.bright},${vars.colorMod.lightness.dim})`, + }, + + ":focus": { + backgroundColor: `hsl(var(--button-hue),${vars.colorMod.saturation.bright},${vars.colorMod.lightness.dim})`, + border: `1px solid hsl(var(--button-hue),${vars.colorMod.saturation.bright},${vars.colorMod.lightness.dim})`, + }, + + ":disabled": { + backgroundColor: `hsl(var(--button-hue),${vars.colorMod.saturation.dim},${vars.colorMod.lightness.dim})`, + border: `1px solid hsl(var(--button-hue),${vars.colorMod.saturation.dim},${vars.colorMod.lightness.dim})`, + }, + }, + outline: { + backgroundColor: "transparent", + border: `1px solid hsl(var(--button-hue),var(--button-base-saturation),${vars.colorMod.lightness.normal})`, + ":hover": { + borderColor: `hsl(var(--button-hue),${vars.colorMod.saturation.bright},${vars.colorMod.lightness.normal})`, + }, + + ":active": { + borderColor: `hsl(var(--button-hue),${vars.colorMod.saturation.bright},${vars.colorMod.lightness.dim})`, + }, + + ":focus": { + borderColor: `hsl(var(--button-hue),${vars.colorMod.saturation.bright},${vars.colorMod.lightness.dim})`, + }, + + ":disabled": { + borderColor: `hsl(var(--button-hue),${vars.colorMod.saturation.dim},${vars.colorMod.lightness.dim})`, + }, + }, + action: { + backgroundColor: "transparent", + color: `hsl(var(--button-hue),var(--button-base-saturation),${vars.colorMod.lightness.normal})`, + textDecoration: "underline", + ":hover": { + color: `hsl(var(--button-hue),${vars.colorMod.saturation.bright},${vars.colorMod.lightness.normal})`, + }, + + ":active": { + color: `hsl(var(--button-hue),${vars.colorMod.saturation.bright},${vars.colorMod.lightness.dim})`, + }, + + ":focus": { + color: `hsl(var(--button-hue),${vars.colorMod.saturation.bright},${vars.colorMod.lightness.dim})`, + }, + + ":disabled": { + color: `hsl(var(--button-hue),${vars.colorMod.saturation.dim},${vars.colorMod.lightness.dim})`, + }, + } + }, + + size: { + slim: { + padding: vars.spacing.min, + fontSize: vars.fonts.sizes.Caption, + }, + large: { + width: "100%", + fontSize: vars.fonts.sizes.Headline, + } + } + }, + + defaultVariants: { + color: "primary", + type: "fill", + }, + +}); \ No newline at end of file diff --git a/ui/frontend/build_src/src/components/_recipes/card.css.ts b/ui/frontend/build_src/src/components/_recipes/card.css.ts new file mode 100644 index 00000000..efec2fa1 --- /dev/null +++ b/ui/frontend/build_src/src/components/_recipes/card.css.ts @@ -0,0 +1,51 @@ +import { recipe } from "@vanilla-extract/recipes"; +import { vars } from "../../styles/theme/index.css"; + +export const card = recipe({ + + base: { + color: vars.colors.text.normal, + padding: vars.spacing.medium, + }, + + variants: { + backing: { + normal: { + background: vars.backgroundMain, + }, + light: { + background: vars.backgroundLight, + }, + dark: { + background: vars.backgroundDark, + }, + }, + + rounded: { + true: { + borderRadius: vars.trim.smallBorderRadius, + }, + }, + + info: { + true: { + background: vars.backgroundDark, + border: `1px solid ${vars.backgroundAccentMain}`, + }, + }, + + level: { + flat: {}, + 1: { boxShadow: "0 4px 8px 0 rgba(0, 0, 0, 0.15), 0 6px 20px 0 rgba(0, 0, 0, 0.15)" }, + 2: { boxShadow: "0 4px 8px 0 rgba(0, 0, 0, 0.15), 0 6px 20px 0 rgba(0, 0, 0, 0.15)" }, + 3: { boxShadow: "0 4px 8px 0 rgba(0, 0, 0, 0.15), 0 6px 20px 0 rgba(0, 0, 0, 0.15)" }, + }, + }, + defaultVariants: { + backing: "light", + level: 'flat', + rounded: true, + }, +}); + + diff --git a/ui/frontend/build_src/src/components/_recipes/index.css.ts b/ui/frontend/build_src/src/components/_recipes/index.css.ts new file mode 100644 index 00000000..578e13a3 --- /dev/null +++ b/ui/frontend/build_src/src/components/_recipes/index.css.ts @@ -0,0 +1,24 @@ +import { recipe } from "@vanilla-extract/recipes"; +import { vars } from "../../styles/theme/index.css"; + + +export const card = recipe({ + base: { + background: vars.backgroundMain, + color: vars.colors.text.normal, + padding: vars.spacing.medium, + borderRadius: vars.trim.smallBorderRadius, + }, + variants: { + level: { + 1: { boxShadow: "0 4px 8px 0 rgba(0, 0, 0, 0.15), 0 6px 20px 0 rgba(0, 0, 0, 0.15)" }, + 2: { boxShadow: "0 4px 8px 0 rgba(0, 0, 0, 0.15), 0 6px 20px 0 rgba(0, 0, 0, 0.15)" }, + 3: { boxShadow: "0 4px 8px 0 rgba(0, 0, 0, 0.15), 0 6px 20px 0 rgba(0, 0, 0, 0.15)" }, + }, + }, + defaultVariants: { + level: 1, + }, +}); + + diff --git a/ui/frontend/build_src/src/components/_recipes/popover_headless.css.ts b/ui/frontend/build_src/src/components/_recipes/popover_headless.css.ts new file mode 100644 index 00000000..b006c14c --- /dev/null +++ b/ui/frontend/build_src/src/components/_recipes/popover_headless.css.ts @@ -0,0 +1,39 @@ + +import { style, globalStyle } from "@vanilla-extract/css"; + +// import { recipe } from "@vanilla-extract/recipes"; +import { vars } from "../../styles/theme/index.css"; + +import { + card +} from "./card.css"; + +export const PopoverMain = style({ + position: 'relative' +}); + +export const PopoverButtonStyle = style({ + backgroundColor: "transparent", + border: "0 none", + cursor: "pointer", + padding: vars.spacing.none, + fontSize: vars.fonts.sizes.Subheadline, +}); + +globalStyle(`${PopoverButtonStyle} > i`, { + marginRight: vars.spacing.small, +}); + +export const PopoverPanelMain = style([card( + { + backing: 'dark', + level: 2, + } +), { + position: 'absolute', + top: '100%', + right: '0', + zIndex: '1', +}]); + + diff --git a/ui/frontend/build_src/src/components/_recipes/switch_headless.css.ts b/ui/frontend/build_src/src/components/_recipes/switch_headless.css.ts new file mode 100644 index 00000000..22a5be25 --- /dev/null +++ b/ui/frontend/build_src/src/components/_recipes/switch_headless.css.ts @@ -0,0 +1,19 @@ +import { style, } from "@vanilla-extract/css"; + +// import { recipe } from "@vanilla-extract/recipes"; +import { vars } from "../../styles/theme/index.css"; + +export const SwitchGroupMain = style({ +}); + +export const SwitchMain = style({ +}); + +export const SwitchLabel = style({ +}); + +export const SwitchEnabled = style({ +}); + +export const SwitchPill = style({ +}); diff --git a/ui/frontend/build_src/src/components/_recipes/tabs_headless.css.ts b/ui/frontend/build_src/src/components/_recipes/tabs_headless.css.ts new file mode 100644 index 00000000..b66d4a9b --- /dev/null +++ b/ui/frontend/build_src/src/components/_recipes/tabs_headless.css.ts @@ -0,0 +1,60 @@ +import { style } from '@vanilla-extract/css'; +import { recipe } from "@vanilla-extract/recipes"; +import { vars } from "../../styles/theme/index.css"; + +export const tabStyles = recipe({ + base: { + background: vars.backgroundMain, + color: vars.colors.text.normal, + padding: vars.spacing.small, + borderRadius: `${vars.trim.smallBorderRadius} ${vars.trim.smallBorderRadius} 0 0`, + border: `1px solid ${vars.backgroundLight}`, + borderBottom: 'none', + marginLeft: vars.spacing.small, + boxShadow: `0px -1px 4px -2px ${vars.backgroundAccentMain} inset`, + width: 'fit-content', + ':focus': { + outline: 'none', + }, + }, + + variants: { + selected: { + true: { + background: vars.backgroundLight, + color: vars.colors.text.normal, + boxShadow: `0px -1px 4px -2px ${vars.backgroundDark} inset`, + } + } + } +}); + +export const tabPanelStyles = recipe({ + base: { + color: vars.colors.text.normal, + // borderRadius: `0 0 ${vars.trim.smallBorderRadius} ${vars.trim.smallBorderRadius}`, + background: vars.backgroundLight, + padding: vars.spacing.medium, + flexGrow: 1, + overflow: 'auto', + // "::-webkit-scrollbar": { + // width: "4px", + // }, + + }, + variants: { + + backing: { + normal: { + background: vars.backgroundMain, + }, + light: { + background: vars.backgroundLight, + }, + dark: { + background: vars.backgroundDark, + }, + }, + }, +}); + diff --git a/ui/frontend/build_src/src/components/layouts/CreationTabs/creationTabs.css.ts b/ui/frontend/build_src/src/components/layouts/CreationTabs/creationTabs.css.ts new file mode 100644 index 00000000..8b1e9b35 --- /dev/null +++ b/ui/frontend/build_src/src/components/layouts/CreationTabs/creationTabs.css.ts @@ -0,0 +1,34 @@ +import { style, globalStyle } from "@vanilla-extract/css"; +import { vars } from "../../../styles/theme/index.css"; +import { + tabPanelStyles, +} from "../../_recipes/tabs_headless.css"; + + +export const TabpanelScrollFlop = style([tabPanelStyles(), { + direction: 'rtl', + // position: 'relative', + overflow: 'overlay', + "::-webkit-scrollbar": { + position: 'absolute', + width: "6px", + backgroundColor: vars.backgroundAccentMain, + }, + + "::-webkit-scrollbar-thumb": { + backgroundColor: vars.backgroundDark, + borderRadius: "4px", + }, + + + // "::-webkit-scrollbar-button: { + // backgroundColor: vars.backgroundDark, + // } + + +}]); + +globalStyle(`${TabpanelScrollFlop} > *`, { + direction: 'ltr', + +}); diff --git a/ui/frontend/build_src/src/components/layouts/CreationTabs/index.tsx b/ui/frontend/build_src/src/components/layouts/CreationTabs/index.tsx new file mode 100644 index 00000000..4d4d4965 --- /dev/null +++ b/ui/frontend/build_src/src/components/layouts/CreationTabs/index.tsx @@ -0,0 +1,61 @@ +import React, { Fragment } from "react"; +import { Tab } from '@headlessui/react'; + + + +import CreationPanel from "../../organisms/creationPanel"; +import QueueDisplay from "../../organisms/queueDisplay"; + +import ProcessingStatus from "../../molecules/queueStatusTab"; + +import { + tabStyles, +} from "../../_recipes/tabs_headless.css"; + +import { + TabpanelScrollFlop +} from "./creationTabs.css"; + +export default function CreationTabs() { + + return ( + + + + {({ selected }) => ( + + )} + + + + {({ 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 ( +
+
+ +
+ + {/*
+ +
*/} + +
+ + +
+
+ ); +} 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 ( + + ); +} 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 ( + + ); +} \ 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 ( +
+ {metadata!.prompt} +
+ ); +} 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 ( + <> + + + + ); +} 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 ( + {preview.name} + ); + })} +
*/} +
+ ); +} 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 && } + {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 ; +} 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 ( +
+ {/* */} + {/* */} + +
+ {/* Adjust the dom do we dont do this check twice */} + {images != null && images.length > 0 && ( + + )} +
    + {images?.map((image, index) => { + if (void 0 === image) { + console.warn(`image ${index} is undefined`); + return null; + } + + return ( +
  • + +
  • + ); + })} +
+
+ {/*
*/} +
+ ); +} 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 ( +
+ + {improvementOpen && ( + <> +
+ +
+
+ +
+
+ +
+ + )} +
+ ); +} 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 ( +
+ + {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 ( +
+ + {propertyOpen && ( + <> +
+ + +
+ +
+ +
+ +
+ + {guidanceScale} +
+ + {void 0 !== initImage && ( +
+ + {promptStrength} +
+ )} + +
+ + + +
+ +
+ +
+ + )} +
+ ); +} 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 ( +
+ + {workflowOpen && ( + <> +
+ +
+
+ +
+ +
+ +
+ + )} +
+ ); +} 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) + }}> +
+
+ + + +
+ +
+ ); +} \ 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 ( +
+
+ + + +
+ +
+ {void 0 !== initImage && ( + <> +
+ + +
+ + + )} +
+
+ ); +} \ 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 ( + + ); +} \ 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 ( +
+ + {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 ( +
+ + + {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 ( +
+ +
+
+ + + {/* + */} + + +
+ +
+ + + + {/* */} + {/* */} +
+
+
+ ); +} 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}

+
+ + +
+
+ +
+ +
+ +
+ +
+ ); +}; 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 ( + + ); +}; + +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 + + + +
+

System Settings

+
    +
  • + + +
  • +
  • + + + + {/* + <>{t("advanced-settings.sound")} + + + + */} +
  • + + +
  • + +
  • +
  • + +
  • +
  • + +
  • + +
  • + +
  • + + + + + +
+
+
+
+ + ); +} 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 ( +
+ +
+ + +
+ {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 && ( + + )} + + {status === QueueStatus.pending && ( + <> + + + + + )} + + {status === QueueStatus.paused && ( + + )} + + {status === QueueStatus.error && ( + + )} +
+ +
+ ); +} \ 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