diff --git a/.gitignore b/.gitignore index 5b668843..dd89019a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,7 @@ __pycache__ installer installer.tar -dist \ No newline at end of file +dist + +# built code for the front end +!/ui/frontend/dist \ No newline at end of file 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..70735b9b --- /dev/null +++ b/ui/frontend/build_src/index.html @@ -0,0 +1,1267 @@ + + + + + + Stable Diffusion UI + + + +
+ + + + + + + + + + + + +
+
+
+
+
+
 
+ Stable Diffusion is starting.. +
+

Stable Diffusion UI v2.1

+
+
+
+ + +
+ +
+
+
+ + +
+
+ +
+ +
+
+
+ + +
+ +
 
+ +
+

Advanced Settings

+
    +
  • +
  • + + +
  • +
  • +
    +
  • +
  • (images at once)
  • +
  • + +
  • +
  • + +
  • +
  • +
  • +

  • +
  •  
  • +
  • +
  • +
  • +
  • +
  • + +
    +
  • +
+
+ +
+

Image Modifiers (art styles, tags etc)

+
+
+
+
+ +
+
Type a prompt and press the "Make Image" button.

You can set an "Initial Image" if you want to guide the AI.

You can also add modifiers like "Realistic", "Pencil Sketch", "ArtStation" etc by browsing through the "Image Modifiers" section and selecting the desired modifiers.

Click "Advanced Settings" for additional settings like seed, image size, number of images to generate etc.

Enjoy! :)
+ +
+
+
+
+
+ +
 
+ + +
+ + + + + + diff --git a/ui/frontend/build_src/package-lock.json b/ui/frontend/build_src/package-lock.json new file mode 100644 index 00000000..812e9253 --- /dev/null +++ b/ui/frontend/build_src/package-lock.json @@ -0,0 +1,2571 @@ +{ + "name": "react-ts", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "react-ts", + "version": "0.0.0", + "dependencies": { + "@tanstack/react-query": "^4.2.3", + "@tanstack/react-query-devtools": "^4.2.3", + "immer": "^9.0.15", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "uuid": "^9.0.0", + "zustand": "^4.1.1" + }, + "devDependencies": { + "@types/react": "^18.0.17", + "@types/react-dom": "^18.0.6", + "@types/uuid": "^8.3.4", + "@vitejs/plugin-react": "^2.0.1", + "typescript": "^4.6.4", + "vite": "^3.0.7" + } + }, + "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/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/@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" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "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/@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-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/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/@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/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/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/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/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/csstype": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", + "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==", + "dev": true + }, + "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/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/esbuild": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.7.tgz", + "integrity": "sha512-7V8tzllIbAQV1M4QoE52ImKu8hT/NLGlGXkiDsbEU5PS6K8Mn09ZnYoS+dcmHxOS9CRsV4IRAMdT3I67IyUNXw==", + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "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==", + "dev": true + }, + "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/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/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "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/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/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==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/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/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/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/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/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==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "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/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==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/postcss": { + "version": "8.4.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", + "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", + "dev": true, + "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/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-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/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/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "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/rollup": { + "version": "2.78.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz", + "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.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/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==", + "dev": true, + "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/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==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/typescript": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", + "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "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/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==", + "dev": true, + "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/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/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" + } + }, + "@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==", + "dev": true, + "optional": 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" + } + }, + "@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-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/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 + }, + "@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" + } + }, + "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" + } + }, + "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" + } + }, + "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 + }, + "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" + } + }, + "csstype": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", + "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==", + "dev": true + }, + "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" + } + }, + "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 + }, + "esbuild": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.7.tgz", + "integrity": "sha512-7V8tzllIbAQV1M4QoE52ImKu8hT/NLGlGXkiDsbEU5PS6K8Mn09ZnYoS+dcmHxOS9CRsV4IRAMdT3I67IyUNXw==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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 + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "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 + }, + "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 + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "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 + }, + "immer": { + "version": "9.0.15", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz", + "integrity": "sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==" + }, + "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==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + }, + "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" + } + }, + "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" + } + }, + "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==", + "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 + }, + "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==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "postcss": { + "version": "8.4.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", + "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", + "dev": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "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-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 + }, + "remove-accents": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", + "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==" + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "rollup": { + "version": "2.78.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz", + "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==", + "dev": true, + "requires": { + "fsevents": "~2.3.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 + }, + "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==", + "dev": true + }, + "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 + }, + "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==", + "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 + }, + "typescript": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", + "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==", + "dev": true + }, + "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" + } + }, + "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==", + "dev": true, + "requires": { + "esbuild": "^0.15.6", + "fsevents": "~2.3.2", + "postcss": "^8.4.16", + "resolve": "^1.22.1", + "rollup": "~2.78.0" + } + }, + "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..dcf74148 --- /dev/null +++ b/ui/frontend/build_src/package.json @@ -0,0 +1,28 @@ +{ + "name": "react-ts", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build --emptyOutDir", + "preview": "vite preview" + }, + "dependencies": { + "@tanstack/react-query": "^4.2.3", + "@tanstack/react-query-devtools": "^4.2.3", + "immer": "^9.0.15", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "uuid": "^9.0.0", + "zustand": "^4.1.1" + }, + "devDependencies": { + "@types/react": "^18.0.17", + "@types/react-dom": "^18.0.6", + "@types/uuid": "^8.3.4", + "@vitejs/plugin-react": "^2.0.1", + "typescript": "^4.6.4", + "vite": "^3.0.7" + } +} diff --git a/ui/frontend/build_src/public/ding.mp3 b/ui/frontend/build_src/public/ding.mp3 new file mode 100644 index 00000000..f2843b06 Binary files /dev/null and b/ui/frontend/build_src/public/ding.mp3 differ diff --git a/ui/frontend/build_src/public/kofi.png b/ui/frontend/build_src/public/kofi.png new file mode 100644 index 00000000..0fdebbaa Binary files /dev/null and b/ui/frontend/build_src/public/kofi.png differ diff --git a/ui/frontend/build_src/public/modifiers.json b/ui/frontend/build_src/public/modifiers.json new file mode 100644 index 00000000..ca18cc07 --- /dev/null +++ b/ui/frontend/build_src/public/modifiers.json @@ -0,0 +1,151 @@ +[ + [ + "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/App.css b/ui/frontend/build_src/src/App.css new file mode 100644 index 00000000..95b693d5 --- /dev/null +++ b/ui/frontend/build_src/src/App.css @@ -0,0 +1,60 @@ +.App { + position: relative; + width: 100%; + height: 100%; + pointer-events: auto; + display: grid; + background-color: rgb(32, 33, 36); + grid-template-columns: 360px 1fr; + grid-template-rows: 100px 1fr 300px; + grid-template-areas: "header header header" + "create display display" + "footer footer footer"; +} + +/* Very basic mobile stacked UI*/ +@media screen and (max-width: 768px) { + .App { + grid-template-columns: 1fr; + grid-template-rows: 100px 1fr 1fr 300px; + grid-template-areas: "header" + "create" + "display" + "footer"; + } +} + +.header-layout { + grid-area: header; +} + +.create-layout { + grid-area: create; +} + +.display-layout { + grid-area: display; +} + +.footer-layout { + grid-area: footer; + +} + +/* Copypasta from Bootstrap, makes content visually hidden but still accessible for screenreaders */ +.visually-hidden, .visually-hidden-focusable:not(:focus):not(:focus-within) { + position: absolute !important; + width: 1px !important; + height: 1px !important; + padding: 0 !important; + margin: -1px !important; + overflow: hidden !important; + clip: rect(0, 0, 0, 0) !important; + white-space: nowrap !important; + border: 0 !important; +} + +/* TODO proper utility classes */ +.mb-4 { + margin-bottom: 1rem; +} \ No newline at end of file diff --git a/ui/frontend/build_src/src/App.tsx b/ui/frontend/build_src/src/App.tsx new file mode 100644 index 00000000..f9642370 --- /dev/null +++ b/ui/frontend/build_src/src/App.tsx @@ -0,0 +1,46 @@ +import React, {useEffect, useState} from 'react' +import './App.css' + +import { useQuery } from "@tanstack/react-query"; +import { getSaveDirectory } from './api' +import { useImageCreate } from "./store/imageCreateStore"; + +// Todo - import components here +import HeaderDisplay from './components/headerDisplay'; +import CreationPanel from './components/creationPanel'; +import DisplayPanel from './components/displayPanel'; +import FooterDisplay from './components/footerDisplay'; + +function App() { + + // Get the original save directory + const setRequestOption = useImageCreate((state) => state.setRequestOptions); + const { status, data } = useQuery( + ['SaveDir'], getSaveDirectory, + ); + useEffect(() => { + if(status === 'success') { + setRequestOption("save_to_disk_path", data); + } + }, [setRequestOption, status, data]); + + + return ( +
+
+ +
+ +
+ +
+ +
+ ) +} + +export default App 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..113d1359 --- /dev/null +++ b/ui/frontend/build_src/src/api/index.ts @@ -0,0 +1,55 @@ +/** + * basic server health + */ + +import type {ImageRequest} from '../store/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 +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`; + let 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]; +}; + +/** + * post a new request for an image + */ + +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) + }); + + const data = await res.json(); + return data; +} + + diff --git a/ui/frontend/build_src/src/components/creationPanel/advancedSettings/advancedSettings.css b/ui/frontend/build_src/src/components/creationPanel/advancedSettings/advancedSettings.css new file mode 100644 index 00000000..054ba201 --- /dev/null +++ b/ui/frontend/build_src/src/components/creationPanel/advancedSettings/advancedSettings.css @@ -0,0 +1,3 @@ +input[size="4"] { + width: 4.5rem; +} \ No newline at end of file diff --git a/ui/frontend/build_src/src/components/creationPanel/advancedSettings/index.tsx b/ui/frontend/build_src/src/components/creationPanel/advancedSettings/index.tsx new file mode 100644 index 00000000..7519a30f --- /dev/null +++ b/ui/frontend/build_src/src/components/creationPanel/advancedSettings/index.tsx @@ -0,0 +1,353 @@ +import React, {useEffect} from "react"; +import { useImageCreate } from "../../../store/imageCreateStore"; +import "./advancedSettings.css"; + +// 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 (*)" }, +]; + +function SettingsList() { + + const requestCount = useImageCreate((state) => state.requestCount); + const setRequestCount = useImageCreate((state) => state.setRequestCount); + const setRequestOption = useImageCreate((state) => state.setRequestOptions); + + + const toggleUseFaceCorrection = useImageCreate((state) => state.toggleUseFaceCorrection); + const isUsingFaceCorrection = useImageCreate((state) => state.isUsingFaceCorrection()); + + const toggleUseUpscaling = useImageCreate((state) => state.toggleUseUpscaling); + const isUsingUpscaling = useImageCreate((state) => state.isUsingUpscaling()); + + + const toggleUseRandomSeed = useImageCreate((state) => state.toggleUseRandomSeed); + const isRandomSeed = useImageCreate((state) => state.isRandomSeed()); + + const toggleUseAutoSave = useImageCreate((state) => state.toggleUseAutoSave); + const isUseAutoSave = useImageCreate((state) => state.isUseAutoSave()); + + const toggleSoundEnabled = useImageCreate((state) => state.toggleSoundEnabled); + const isSoundEnabled = useImageCreate((state) => state.isSoundEnabled()); + + const use_upscale = useImageCreate((state) => state.getValueForRequestKey(('use_upscale'))); + const show_only_filtered_image = useImageCreate((state) => state.getValueForRequestKey(('show_only_filtered_image'))); + const seed = useImageCreate((state) => state.getValueForRequestKey(('seed'))); + const width = useImageCreate((state) => state.getValueForRequestKey(('width'))); + const num_outputs = useImageCreate((state) => state.getValueForRequestKey(('num_outputs'))); + const height = useImageCreate((state) => state.getValueForRequestKey(('height'))); + const steps = useImageCreate((state) => state.getValueForRequestKey(('num_inference_steps'))); + const guidance_scale = useImageCreate((state) => state.getValueForRequestKey(('guidance_scale'))); + const prompt_strength = useImageCreate((state) => state.getValueForRequestKey(('prompt_strength'))); + const save_to_disk_path = useImageCreate((state) => state.getValueForRequestKey(('save_to_disk_path'))); + const turbo = useImageCreate((state) => state.getValueForRequestKey(('turbo'))); + const use_cpu = useImageCreate((state) => state.getValueForRequestKey(('use_cpu'))); + const use_full_precision = useImageCreate((state) => state.getValueForRequestKey(('use_full_precision'))); + + return ( + + ) +} + +// {/* */} + +export default function AdvancedSettings() { + + const advancedSettingsIsOpen = useImageCreate( + (state) => state.uiOptions.advancedSettingsIsOpen + ); + + const toggleAdvancedSettingsIsOpen = useImageCreate( + (state) => state.toggleAdvancedSettingsIsOpen + ); + + return ( +
+ + {advancedSettingsIsOpen && } +
+ ); +} diff --git a/ui/frontend/build_src/src/components/creationPanel/creationPanel.css b/ui/frontend/build_src/src/components/creationPanel/creationPanel.css new file mode 100644 index 00000000..fc6b861a --- /dev/null +++ b/ui/frontend/build_src/src/components/creationPanel/creationPanel.css @@ -0,0 +1,48 @@ +.panel-box-toggle-btn { + display: block; + width: 100%; + text-align: left; + background-color: transparent; + color: #fff; + border: 0 none; + cursor: pointer; +} + +.selected-tags { + margin: 10px 0; +} + +.selected-tags ul { + margin: 0; + padding: 0; + display: flex; + flex-wrap: wrap; +} + +li { + list-style: none; +} + +.modifier-list{ + display: flex; + flex-wrap: wrap; + margin: 0; + padding: 0; +} + +.modifierTag { + display: inline-block; + padding: 6px; + background-color: rgb(38, 77, 141); + color: #fff; + border-radius: 5px; + margin: 5px; +} + +.modifierTag.selected { + background-color: rgb(131, 11, 121); +} + +.modifierTag p { + margin: 0; +} \ No newline at end of file diff --git a/ui/frontend/build_src/src/components/creationPanel/imageModifiers/imageModifiers.css b/ui/frontend/build_src/src/components/creationPanel/imageModifiers/imageModifiers.css new file mode 100644 index 00000000..e69de29b diff --git a/ui/frontend/build_src/src/components/creationPanel/imageModifiers/index.tsx b/ui/frontend/build_src/src/components/creationPanel/imageModifiers/index.tsx new file mode 100644 index 00000000..afb6a8ac --- /dev/null +++ b/ui/frontend/build_src/src/components/creationPanel/imageModifiers/index.tsx @@ -0,0 +1,96 @@ +import React, {useEffect, useState} from "react"; + +import { useQuery } from "@tanstack/react-query"; +import { loadModifications } from "../../../api"; + +import { useImageCreate } from "../../../store/imageCreateStore"; + +import ModifierTag from "../modierTag"; + + +type ModifierListProps = { + tags: string[]; +} + +function ModifierList({tags}: ModifierListProps) { + const setImageOptions = useImageCreate((state) => state.setImageOptions); + const imageOptions = useImageCreate((state) => state.imageOptions); + return( + + ) +} + +type ModifierGroupingProps = { + title: string; + tags: string[]; +}; + +function ModifierGrouping({title, tags}: ModifierGroupingProps) { + + // doing this localy for now, but could move to a store + // and persist if we wanted to + const [isExpanded, setIsExpanded] = useState(false); + + // console.log('grouping', title, tags) + + const _toggleExpand = () => { + // console.log('toggle expand') + setIsExpanded(!isExpanded); + }; + + return ( +
+
+
{title}
+
+ {isExpanded && } +
+ ); +} + +export default function ImageModifers() { + const {status, data} = useQuery(["modifications"], loadModifications); + + const imageModifierIsOpen = useImageCreate( + (state) => state.uiOptions.imageModifierIsOpen + ); + const toggleImageModifiersIsOpen = useImageCreate( + (state) => state.toggleImageModifiersIsOpen + ); + + // useEffect(() => { + // console.log("imageModifers", status, data); + // }, [status, data]); + + + const handleClick = () => { + // debugger; + toggleImageModifiersIsOpen(); + }; + + return ( +
+ + + {/* @ts-ignore */} + {imageModifierIsOpen && data.map((item, index) => { + return ( + + ) + })} +
+ ); +} \ No newline at end of file diff --git a/ui/frontend/build_src/src/components/creationPanel/index.tsx b/ui/frontend/build_src/src/components/creationPanel/index.tsx new file mode 100644 index 00000000..248182ff --- /dev/null +++ b/ui/frontend/build_src/src/components/creationPanel/index.tsx @@ -0,0 +1,86 @@ +import React, { ChangeEvent } from "react"; + +import MakeButton from "./makeButton"; +import AdvancedSettings from "./advancedSettings"; +import ImageModifiers from "./imageModifiers"; + +import ModifierTag from "./modierTag"; + +import { useImageCreate } from "../../store/imageCreateStore"; + +import './creationPanel.css'; + +export default function CreationPanel() { + + const promptText = useImageCreate((state) => state.getValueForRequestKey("prompt")); + const init_image = useImageCreate((state) => state.getValueForRequestKey("init_image")); + const setRequestOption = useImageCreate((state) => state.setRequestOptions); + const selectedtags = useImageCreate((state) => state.selectedTags()); + + const handlePromptChange = (event: ChangeEvent) => { + setRequestOption("prompt", event.target.value); + }; + + const _handleFileSelect = (event: ChangeEvent) => { + //console.log("file select", event); + const file = event.target.files[0]; + + // console.log("file", file); + + if (file) { + const reader = new FileReader(); + reader.onload = (e) => { + if (e.target) { + debugger; + setRequestOption("init_image", e.target.result); + } + }; + reader.readAsDataURL(file); + } + }; + + return ( +
+
+
+

Prompt

+ +
+ + {/*
+

Seed Image

+ +
*/} + + +
+ +
+
+ { init_image && + + } + +
+
+ + +
+

Active Tags

+
    + {selectedtags.map((tag) => ( +
  • + +
  • + ))} +
+
+
+ +
+ + +
+
+ ); +} diff --git a/ui/frontend/build_src/src/components/creationPanel/makeButton/index.tsx b/ui/frontend/build_src/src/components/creationPanel/makeButton/index.tsx new file mode 100644 index 00000000..3afeb625 --- /dev/null +++ b/ui/frontend/build_src/src/components/creationPanel/makeButton/index.tsx @@ -0,0 +1,24 @@ +import React, {useEffect, useState}from "react"; + +import { useImageCreate } from "../../../store/imageCreateStore"; +// import { useImageDisplay } from "../../../store/imageDisplayStore"; +import { useImageQueue } from "../../../store/imageQueueStore"; +// import { doMakeImage } from "../../../api"; +import {v4 as uuidv4} from 'uuid'; + +export default function MakeButton() { + + const builtRequest = useImageCreate((state) => state.builtRequest); + const addNewImage = useImageQueue((state) => state.addNewImage); + + const makeImage = () => { + // todo turn this into a loop and adjust the parallel count + // + const req = builtRequest(); + addNewImage(uuidv4(), req) + }; + + return ( + + ); +} \ No newline at end of file diff --git a/ui/frontend/build_src/src/components/creationPanel/modierTag/index.tsx b/ui/frontend/build_src/src/components/creationPanel/modierTag/index.tsx new file mode 100644 index 00000000..e9f3ecc9 --- /dev/null +++ b/ui/frontend/build_src/src/components/creationPanel/modierTag/index.tsx @@ -0,0 +1,25 @@ +import React from "react"; +import { useImageCreate } from "../../../store/imageCreateStore"; + + +type ModifierTagProps = { + name: string; +} + +export default function ModifierTag({name}: ModifierTagProps) { + + const hasTag = useImageCreate((state) => state.hasTag(name)) ? "selected" : ""; + const toggleTag = useImageCreate((state) => state.toggleTag); + + console.log('has tag', hasTag) + + const _toggleTag = () => { + toggleTag(name); + }; + + return ( +
+

{name}

+
+ ); +} \ No newline at end of file diff --git a/ui/frontend/build_src/src/components/displayPanel/completedImages/index.tsx b/ui/frontend/build_src/src/components/displayPanel/completedImages/index.tsx new file mode 100644 index 00000000..040f0a27 --- /dev/null +++ b/ui/frontend/build_src/src/components/displayPanel/completedImages/index.tsx @@ -0,0 +1,18 @@ +export const CompletedImages = () => { + return ( +
+

Completed Images

+
+ ); + // const { data } = useQuery("completedImages", getCompletedImages); + // return ( + //
+ //

Completed Images

+ //
+ // {data?.map((image) => ( + // + // ))} + //
+ //
+ // ); +} \ No newline at end of file diff --git a/ui/frontend/build_src/src/components/displayPanel/currentImage/index.tsx b/ui/frontend/build_src/src/components/displayPanel/currentImage/index.tsx new file mode 100644 index 00000000..0afcb601 --- /dev/null +++ b/ui/frontend/build_src/src/components/displayPanel/currentImage/index.tsx @@ -0,0 +1,50 @@ +import React, { useEffect, useState } from "react"; +import { useImageQueue } from "../../../store/imageQueueStore"; + +import { doMakeImage, MakeImageKey } from "../../../api"; + +import { useQuery } from "@tanstack/react-query"; +import GeneratedImage from "../generatedImage"; + + +export default function CurrentImage() { + + const [imageData, setImageData] = useState(null); + // @ts-ignore + const {id, options} = useImageQueue((state) => state.firstInQueue()); + console.log('CurrentImage id', id) + + + const removeFirstInQueue = useImageQueue((state) => state.removeFirstInQueue); + + const { status, data } = useQuery( + [MakeImageKey, id], + () => doMakeImage(options), + { + enabled: void 0 !== id, + } + ); + + useEffect(() => { + // query is done + if(status === 'success') { + console.log("success"); + + // check to make sure that the image was created + if(data.status === 'succeeded') { + console.log("succeeded"); + setImageData(data.output[0].data); + removeFirstInQueue(); + } + } + + }, [status, data, removeFirstInQueue]); + + + return ( +
+

Current Image

+ {imageData && } +
+ ); +}; \ No newline at end of file diff --git a/ui/frontend/build_src/src/components/displayPanel/displayPanel.css b/ui/frontend/build_src/src/components/displayPanel/displayPanel.css new file mode 100644 index 00000000..e69de29b diff --git a/ui/frontend/build_src/src/components/displayPanel/generatedImage/generatedImage.css b/ui/frontend/build_src/src/components/displayPanel/generatedImage/generatedImage.css new file mode 100644 index 00000000..e69de29b diff --git a/ui/frontend/build_src/src/components/displayPanel/generatedImage/index.tsx b/ui/frontend/build_src/src/components/displayPanel/generatedImage/index.tsx new file mode 100644 index 00000000..7b922f13 --- /dev/null +++ b/ui/frontend/build_src/src/components/displayPanel/generatedImage/index.tsx @@ -0,0 +1,53 @@ +import React from "react"; + + +import { useImageCreate } from "../../../store/imageCreateStore"; + +export default function GeneratedImage({ imageData }: { imageData: string }) { + + + const setRequestOption = useImageCreate((state) => state.setRequestOptions); + const _handleSave = () => { + const link = document.createElement("a"); + link.download = "image.png"; + link.href = imageData; + link.click(); + }; + + const _handleUseAsInput = () => { + console.log(" TODO : use as input"); + + + setRequestOption("init_image", imageData); + // initImageSelector.value = null + // initImagePreview.src = imgBody + + + // imgUseBtn.addEventListener('click', function() { + // initImageSelector.value = null + // initImagePreview.src = imgBody + + // initImagePreviewContainer.style.display = 'block' + // promptStrengthContainer.style.display = 'block' + + // // maskSetting.style.display = 'block' + + // randomSeedField.checked = false + // seedField.value = seed + // seedField.disabled = false + // }) + } + + return ( +
+

Your image

+ generated + + +
+ ); +} \ No newline at end of file diff --git a/ui/frontend/build_src/src/components/displayPanel/index.tsx b/ui/frontend/build_src/src/components/displayPanel/index.tsx new file mode 100644 index 00000000..a7bfeee1 --- /dev/null +++ b/ui/frontend/build_src/src/components/displayPanel/index.tsx @@ -0,0 +1,78 @@ +import React, {useEffect, useState} from "react"; +import { useImageQueue } from "../../store/imageQueueStore"; + +import { ImageRequest } from '../../store/imageCreateStore'; + +import { useQueryClient } from '@tanstack/react-query' + + +import { MakeImageKey } from "../../api"; + +import CurrentImage from "./currentImage"; + +import GeneratedImage from "./generatedImage"; + + +type CompletedImagesType = { + id: string; + data: string; +} +export default function DisplayPanel() { + + const queryClient = useQueryClient(); + const [completedImages, setCompletedImages] = useState([]); + const completedIds = useImageQueue((state) => state.completedImageIds); + + useEffect(() => { + + const testReq = {} as ImageRequest; + const completedQueries = completedIds.map((id) => { + const imageData = queryClient.getQueryData([MakeImageKey,id]) + return imageData; + }); + + console.log('completedQueries', completedQueries); + + if (completedQueries.length > 0) { + // map the completedImagesto a new array + // and then set the state + const temp = completedQueries.map((query, index ) => { + // debugger; + if(void 0 !== query) { + return query.output.map((data)=>{ + return {id: `${completedIds[index]}-${data.seed}`, data: data.data} + }) + } + + }).flat().reverse(); + setCompletedImages(temp); + } + else { + setCompletedImages([]); + } + + },[setCompletedImages, queryClient, completedIds]); + + + return ( +
+

Display Panel

+
+ + {completedImages.map((image, index) => { + if(index == 0){ + return null; + } + if(void 0 !== image) { + return ; + } + else { + console.warn('image is undefined', image, index); + return null; + } + })} +
+ +
+ ); +}; diff --git a/ui/frontend/build_src/src/components/footerDisplay/footerDisplay.css b/ui/frontend/build_src/src/components/footerDisplay/footerDisplay.css new file mode 100644 index 00000000..84bd03e1 --- /dev/null +++ b/ui/frontend/build_src/src/components/footerDisplay/footerDisplay.css @@ -0,0 +1,8 @@ +.footer-display { + color: #ffffff; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + +} \ No newline at end of file diff --git a/ui/frontend/build_src/src/components/footerDisplay/index.tsx b/ui/frontend/build_src/src/components/footerDisplay/index.tsx new file mode 100644 index 00000000..85fa485d --- /dev/null +++ b/ui/frontend/build_src/src/components/footerDisplay/index.tsx @@ -0,0 +1,18 @@ +import React from "react"; + +import './footerDisplay.css'; + +export default function FooterDisplay() { + return ( + + ); +} + diff --git a/ui/frontend/build_src/src/components/headerDisplay/headerDisplay.css b/ui/frontend/build_src/src/components/headerDisplay/headerDisplay.css new file mode 100644 index 00000000..6b140142 --- /dev/null +++ b/ui/frontend/build_src/src/components/headerDisplay/headerDisplay.css @@ -0,0 +1,10 @@ +.header-display { + color: #ffffff; + display: flex; + align-items: center; + justify-content: center; +} + +.status-display { + margin-left: 10px; +} \ No newline at end of file diff --git a/ui/frontend/build_src/src/components/headerDisplay/index.tsx b/ui/frontend/build_src/src/components/headerDisplay/index.tsx new file mode 100644 index 00000000..6b7a623d --- /dev/null +++ b/ui/frontend/build_src/src/components/headerDisplay/index.tsx @@ -0,0 +1,14 @@ +import React from "react"; + +import StatusDisplay from "./statusDisplay"; + +import './headerDisplay.css'; + +export default function HeaderDisplay() { + return ( +
+

Stable Diffusion UI v2.1.0

+ +
+ ); +}; \ No newline at end of file diff --git a/ui/frontend/build_src/src/components/headerDisplay/statusDisplay/index.tsx b/ui/frontend/build_src/src/components/headerDisplay/statusDisplay/index.tsx new file mode 100644 index 00000000..3c311eb7 --- /dev/null +++ b/ui/frontend/build_src/src/components/headerDisplay/statusDisplay/index.tsx @@ -0,0 +1,59 @@ +import React, {useEffect, useState} from 'react' +import { useQuery } from '@tanstack/react-query'; + +import { healthPing, HEALTH_PING_INTERVAL } from '../../../api'; + +const startingMessage = 'Stable Diffusion is starting...'; +const successMessage = 'Stable Diffusion is ready to use!'; +const errorMessage = 'Stable Diffusion is not running!'; + +import './statusDisplay.css'; + +export default function StatusDisplay({className}: {className?: string}) { + + const [statusMessage, setStatusMessage] = useState(startingMessage); + const [statusClass, setStatusClass] = useState('starting'); + + + // doing this here for the time being, to show the data getting loaded + // but this will be moved to the status display when it is created + const {status, data} = useQuery(['health'], healthPing, {refetchInterval: HEALTH_PING_INTERVAL}); + useEffect(() => { + console.log('health data', data); + }, [data]); + + + // const data = {}; + + useEffect(() => { + console.log('status', status); + + if (status === 'loading') { + setStatusMessage(startingMessage); + setStatusClass('starting'); + } + else if (status === 'error') { + setStatusMessage(errorMessage); + setStatusClass('error'); + } + + else if (status === 'success') { + + if(data[0] === 'OK') { + setStatusMessage(successMessage); + setStatusClass('success'); + } + else { + setStatusMessage(errorMessage); + setStatusClass('error'); + } + } + }, [status, data]); + + return ( + <> + {/* alittle hacky but joins the class names, will probably need a better css in js solution or tailwinds*/} +

{statusMessage}

+ + ); +}; \ No newline at end of file diff --git a/ui/frontend/build_src/src/components/headerDisplay/statusDisplay/statusDisplay.css b/ui/frontend/build_src/src/components/headerDisplay/statusDisplay/statusDisplay.css new file mode 100644 index 00000000..b51544ee --- /dev/null +++ b/ui/frontend/build_src/src/components/headerDisplay/statusDisplay/statusDisplay.css @@ -0,0 +1,11 @@ +.starting { + color: #f0ad4e; +} + +.error { + color: #d9534f; +} + +.success { + color: #5cb85c; +} \ No newline at end of file diff --git a/ui/frontend/build_src/src/index.css b/ui/frontend/build_src/src/index.css new file mode 100644 index 00000000..036d0cc0 --- /dev/null +++ b/ui/frontend/build_src/src/index.css @@ -0,0 +1,18 @@ +body { + margin: 0; + min-width: 320px; + min-height: 100vh; +} + +#root { + position: absolute; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + /* pointer-events: none; */ + + /* this are used while we still have the original app code in the index.html */ + /* display: none; */ + z-index: 1; +} \ 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..363219a9 --- /dev/null +++ b/ui/frontend/build_src/src/main.tsx @@ -0,0 +1,37 @@ +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 './index.css' + +const queryClient = new QueryClient( + { + defaultOptions: { + queries: { + refetchOnWindowFocus: false, + refetchOnReconnect : false, + refetchOnMount : false, + staleTime: 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..ca18cc07 --- /dev/null +++ b/ui/frontend/build_src/src/modifiers.json @@ -0,0 +1,151 @@ +[ + [ + "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/store/imageCreateStore.ts b/ui/frontend/build_src/src/store/imageCreateStore.ts new file mode 100644 index 00000000..b8d9abb7 --- /dev/null +++ b/ui/frontend/build_src/src/store/imageCreateStore.ts @@ -0,0 +1,258 @@ +import create from 'zustand'; +import produce from 'immer'; +import { devtools } from 'zustand/middleware' + +import { useRandomSeed } from '../utils'; + +export type ImageCreationUiOptions = { + advancedSettingsIsOpen: boolean; + imageModifierIsOpen: boolean; + isCheckedUseUpscaling: boolean; + isCheckUseFaceCorrection: boolean; + isUseRandomSeed: boolean; + isUseAutoSave: boolean; + isSoundEnabled: boolean; +} + + +export type ImageRequest = { + 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; + }; + +interface ImageCreateState { + requestCount: number; + requestOptions: ImageRequest; + tags: string[]; + + setRequestCount: (count: number) => void; + setRequestOptions: (key: keyof ImageRequest, value: any) => void; + getValueForRequestKey: (key: keyof ImageRequest) => any; + + toggleTag: (tag: string) => void; + hasTag: (tag: string) => boolean; + selectedTags:() => string[] + builtRequest: () => ImageRequest; + + uiOptions: ImageCreationUiOptions; + toggleAdvancedSettingsIsOpen: () => void; + toggleImageModifiersIsOpen: () => void; + toggleUseUpscaling: () => void; + isUsingUpscaling: () => boolean; + toggleUseFaceCorrection: () => void; + isUsingFaceCorrection: () => boolean; + toggleUseRandomSeed: () => void; + isRandomSeed: () => boolean; + toggleUseAutoSave: () => void; + isUseAutoSave: () => boolean; + toggleSoundEnabled: () => void; + isSoundEnabled: () => boolean; +} + +// devtools breaks TS +// @ts-ignore +export const useImageCreate = create(devtools((set, get) => ({ + + requestCount: 1, + + requestOptions:{ + prompt: 'a photograph of an astronaut riding a horse', + 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: null, + use_upscale: 'RealESRGAN_x4plus', + show_only_filtered_image: false, + } as ImageRequest, + + tags: [] as string[], + + setRequestCount: (count: number) => set(produce((state) => { + state.requestCount = count; + })), + + setRequestOptions: (key: keyof ImageRequest, value: any) => { + set( produce((state) => { + state.requestOptions[key] = value; + })) + }, + + getValueForRequestKey: (key: keyof ImageRequest) => { + return get().requestOptions[key]; + }, + + toggleTag: (tag: string) => { + set( produce((state) => { + const index = state.tags.indexOf(tag); + if (index > -1) { + state.tags.splice(index, 1); + } else { + state.tags.push(tag); + } + })) + }, + + hasTag: (tag:string) => { + return get().tags.indexOf(tag) > -1; + }, + + selectedTags: () => { + return get().tags; + }, + + // the request body to send to the server + // this is a computed value, just adding the tags to the request + builtRequest: () => { + + console.log('builtRequest'); + const state = get(); + const requestOptions = state.requestOptions; + const tags = state.tags; + + // join all the tags with a comma and add it to the prompt + const prompt = `${requestOptions.prompt} ${tags.join(',')}`; + console.log('builtRequest return1'); + + const request = { + ...requestOptions, + prompt + } + // 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; + } + console.log('builtRequest return2'); + // if we arent using face correction clear the face correction + if(!state.uiOptions.isCheckUseFaceCorrection){ + request.use_face_correction = null; + } + console.log('builtRequest return3'); + // if we arent using upscaling clear the upscaling + if(!state.uiOptions.isCheckedUseUpscaling){ + request.use_upscale = null; + } + + // const request = { + // ...requestOptions, + // prompt + // } + console.log('builtRequest return last'); + return request; + }, + + uiOptions: { + // TODO proper persistence of all UI / user settings centrally somewhere? + // localStorage.getItem('ui:advancedSettingsIsOpen') === 'true', + advancedSettingsIsOpen:false, + imageModifierIsOpen: false, + isCheckedUseUpscaling: false, + isCheckUseFaceCorrection: true, + isUseRandomSeed: true, + isUseAutoSave: false, + isSoundEnabled: true, + }, + + toggleAdvancedSettingsIsOpen: () => { + set( produce((state) => { + state.uiOptions.advancedSettingsIsOpen = !state.uiOptions.advancedSettingsIsOpen; + localStorage.setItem('ui:advancedSettingsIsOpen', state.uiOptions.advancedSettingsIsOpen); + })) + }, + + toggleImageModifiersIsOpen: () => { + set( produce((state) => { + state.uiOptions.imageModifierIsOpen = !state.uiOptions.imageModifierIsOpen; + localStorage.setItem('ui:imageModifierIsOpen', state.uiOptions.imageModifierIsOpen); + })) + }, + + toggleUseUpscaling: () => { + set( produce((state) => { + state.uiOptions.isCheckedUseUpscaling = !state.uiOptions.isCheckedUseUpscaling; + state.requestOptions.use_upscale = state.uiOptions.isCheckedUseUpscaling ? 'RealESRGAN_x4plus' : null; + localStorage.setItem('ui:isCheckedUseUpscaling', state.uiOptions.isCheckedUseUpscaling); + })) + }, + + isUsingUpscaling: () => { + return get().uiOptions.isCheckedUseUpscaling; + }, + + toggleUseFaceCorrection: () => { + set( produce((state) => { + state.uiOptions.isCheckUseFaceCorrection = !state.uiOptions.isCheckUseFaceCorrection; + state.use_face_correction = state.uiOptions.isCheckUseFaceCorrection ? 'GFPGANv1.3' : null; + localStorage.setItem('ui:isCheckUseFaceCorrection', state.uiOptions.isCheckUseFaceCorrection); + })) + }, + + isUsingFaceCorrection: () => { + return get().uiOptions.isCheckUseFaceCorrection; + }, + + + toggleUseRandomSeed: () => { + set( produce((state) => { + 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) => { + state.uiOptions.isUseAutoSave = !state.uiOptions.isUseAutoSave; + localStorage.setItem('ui:isUseAutoSave', state.uiOptions.isUseAutoSave); + })) + }, + + isUseAutoSave: () => { + return get().uiOptions.isUseAutoSave; + }, + + toggleSoundEnabled: () => { + set( produce((state) => { + state.uiOptions.isSoundEnabled = !state.uiOptions.isSoundEnabled; + //localStorage.setItem('ui:isSoundEnabled', state.uiOptions.isSoundEnabled); + })) + }, + + isSoundEnabled: () => { + return get().uiOptions.isSoundEnabled; + }, + +}))); + + diff --git a/ui/frontend/build_src/src/store/imageDisplayStore.ts b/ui/frontend/build_src/src/store/imageDisplayStore.ts new file mode 100644 index 00000000..c0addd3a --- /dev/null +++ b/ui/frontend/build_src/src/store/imageDisplayStore.ts @@ -0,0 +1,22 @@ +import create from 'zustand'; +import produce from 'immer'; + +// import { devtools } from 'zustand/middleware' + +interface ImageDisplayState { + imageOptions: Map; + currentImage: object | null; + addNewImage: (ImageData: string, imageOptions: any) => void +} + +export const useImageDisplay = create((set) => ({ + imageOptions: new Map(), + currentImage: null, + // use produce to make sure we don't mutate state + addNewImage: (ImageData: string, imageOptions: any) => { + set( produce((state) => { + state.currentImage = { display: ImageData, options: imageOptions }; + state.images.set(ImageData, imageOptions) + })); + } +})); \ No newline at end of file diff --git a/ui/frontend/build_src/src/store/imageQueueStore.ts b/ui/frontend/build_src/src/store/imageQueueStore.ts new file mode 100644 index 00000000..c64b1af3 --- /dev/null +++ b/ui/frontend/build_src/src/store/imageQueueStore.ts @@ -0,0 +1,48 @@ +import create from 'zustand'; +import produce from 'immer'; +import { useRandomSeed } from '../utils'; + +import { imageOptions } from './imageCreateStore'; + +interface ImageQueueState { + images : imageOptions[]; + completedImageIds: string[]; + addNewImage: (id:string, imageOptions: imageOptions) => void + hasQueuedImages: () => boolean; + firstInQueue: () => imageOptions | []; + removeFirstInQueue: () => void; +} + +// figure out why TS is complaining about this +// @ts-ignore +export const useImageQueue = create((set, get) => ({ + images: new Array(), + completedImageIds: new Array(), + // use produce to make sure we don't mutate state + addNewImage: (id: string, imageOptions: any) => { + set( produce((state) => { + + let { seed } = imageOptions; + if (imageOptions.isSeedRandom) { + seed = useRandomSeed(); + } + + state.images.push({ id, options: {...imageOptions, seed} }); + })); + }, + + hasQueuedImages: () => { + return get().images.length > 0; + }, + firstInQueue: () => { + return get().images[0] as imageOptions || []; + }, + + removeFirstInQueue: () => { + set( produce((state) => { + const image = state.images.shift(); + state.completedImageIds.push(image.id); + })); + } +})); + \ No newline at end of file diff --git a/ui/frontend/build_src/src/utils.ts b/ui/frontend/build_src/src/utils.ts new file mode 100644 index 00000000..0c91183a --- /dev/null +++ b/ui/frontend/build_src/src/utils.ts @@ -0,0 +1,3 @@ +export function useRandomSeed(){ + return Math.floor(Math.random() * 10000); +}; \ No newline at end of file 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..3d0a51a8 --- /dev/null +++ b/ui/frontend/build_src/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "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..93da2313 --- /dev/null +++ b/ui/frontend/build_src/vite.config.ts @@ -0,0 +1,24 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], + 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/dist/ding.mp3 b/ui/frontend/dist/ding.mp3 new file mode 100644 index 00000000..f2843b06 Binary files /dev/null and b/ui/frontend/dist/ding.mp3 differ diff --git a/ui/frontend/dist/index.css b/ui/frontend/dist/index.css new file mode 100644 index 00000000..a2b3cecf --- /dev/null +++ b/ui/frontend/dist/index.css @@ -0,0 +1 @@ +.App{position:relative;width:100%;height:100%;pointer-events:auto;display:grid;background-color:#202124;grid-template-columns:360px 1fr;grid-template-rows:100px 1fr 300px;grid-template-areas:"header header header" "create display display" "footer footer footer"}@media screen and (max-width: 768px){.App{grid-template-columns:1fr;grid-template-rows:100px 1fr 1fr 300px;grid-template-areas:"header" "create" "display" "footer"}}.header-layout{grid-area:header}.create-layout{grid-area:create}.display-layout{grid-area:display}.footer-layout{grid-area:footer}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.mb-4{margin-bottom:1rem}.starting{color:#f0ad4e}.error{color:#d9534f}.success{color:#5cb85c}.header-display{color:#fff;display:flex;align-items:center;justify-content:center}.status-display{margin-left:10px}input[size="4"]{width:4.5rem}.panel-box-toggle-btn{display:block;width:100%;text-align:left;background-color:transparent;color:#fff;border:0 none;cursor:pointer}.selected-tags{margin:10px 0}.selected-tags ul{margin:0;padding:0;display:flex;flex-wrap:wrap}li{list-style:none}.modifier-list{display:flex;flex-wrap:wrap;margin:0;padding:0}.modifierTag{display:inline-block;padding:6px;background-color:#264d8d;color:#fff;border-radius:5px;margin:5px}.modifierTag.selected{background-color:#830b79}.modifierTag p{margin:0}.footer-display{color:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center}body{margin:0;min-width:320px;min-height:100vh}#root{position:absolute;top:0;left:0;width:100vw;height:100vh;z-index:1} diff --git a/ui/frontend/dist/index.html b/ui/frontend/dist/index.html new file mode 100644 index 00000000..0a9c7228 --- /dev/null +++ b/ui/frontend/dist/index.html @@ -0,0 +1,1265 @@ + + + + + + Stable Diffusion UI + + + + + +
+ + + + + + + +
+
+
+
+
+
 
+ Stable Diffusion is starting.. +
+

Stable Diffusion UI v2.1

+
+
+
+ + +
+ +
+
+
+ + +
+
+ +
+ +
+
+
+ + +
+ +
 
+ +
+

Advanced Settings

+
    +
  • +
  • + + +
  • +
  • +
    +
  • +
  • (images at once)
  • +
  • + +
  • +
  • + +
  • +
  • +
  • +

  • +
  •  
  • +
  • +
  • +
  • +
  • +
  • + +
    +
  • +
+
+ +
+

Image Modifiers (art styles, tags etc)

+
+
+
+
+ +
+
Type a prompt and press the "Make Image" button.

You can set an "Initial Image" if you want to guide the AI.

You can also add modifiers like "Realistic", "Pencil Sketch", "ArtStation" etc by browsing through the "Image Modifiers" section and selecting the desired modifiers.

Click "Advanced Settings" for additional settings like seed, image size, number of images to generate etc.

Enjoy! :)
+ +
+
+
+
+
+ +
 
+ + +
+ + + + + + diff --git a/ui/frontend/dist/index.js b/ui/frontend/dist/index.js new file mode 100644 index 00000000..e28b5496 --- /dev/null +++ b/ui/frontend/dist/index.js @@ -0,0 +1,74 @@ +(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 l of i)if(l.type==="childList")for(const o of l.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&r(o)}).observe(document,{childList:!0,subtree:!0});function n(i){const l={};return i.integrity&&(l.integrity=i.integrity),i.referrerpolicy&&(l.referrerPolicy=i.referrerpolicy),i.crossorigin==="use-credentials"?l.credentials="include":i.crossorigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function r(i){if(i.ep)return;i.ep=!0;const l=n(i);fetch(i.href,l)}})();function xa(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var j={exports:{}},M={};/** + * @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 yr=Symbol.for("react.element"),id=Symbol.for("react.portal"),ld=Symbol.for("react.fragment"),od=Symbol.for("react.strict_mode"),ud=Symbol.for("react.profiler"),sd=Symbol.for("react.provider"),ad=Symbol.for("react.context"),cd=Symbol.for("react.forward_ref"),fd=Symbol.for("react.suspense"),dd=Symbol.for("react.memo"),pd=Symbol.for("react.lazy"),qu=Symbol.iterator;function hd(e){return e===null||typeof e!="object"?null:(e=qu&&e[qu]||e["@@iterator"],typeof e=="function"?e:null)}var Oa={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},_a=Object.assign,Ra={};function xn(e,t,n){this.props=e,this.context=t,this.refs=Ra,this.updater=n||Oa}xn.prototype.isReactComponent={};xn.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")};xn.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Na(){}Na.prototype=xn.prototype;function Uo(e,t,n){this.props=e,this.context=t,this.refs=Ra,this.updater=n||Oa}var Qo=Uo.prototype=new Na;Qo.constructor=Uo;_a(Qo,xn.prototype);Qo.isPureReactComponent=!0;var Gu=Array.isArray,Ia=Object.prototype.hasOwnProperty,$o={current:null},Ta={key:!0,ref:!0,__self:!0,__source:!0};function Da(e,t,n){var r,i={},l=null,o=null;if(t!=null)for(r in t.ref!==void 0&&(o=t.ref),t.key!==void 0&&(l=""+t.key),t)Ia.call(t,r)&&!Ta.hasOwnProperty(r)&&(i[r]=t[r]);var u=arguments.length-2;if(u===1)i.children=n;else if(1>>1,b=R[q];if(0>>1;qi(il,D))Tti(Pr,il)?(R[q]=Pr,R[Tt]=D,q=Tt):(R[q]=il,R[It]=D,q=It);else if(Tti(Pr,D))R[q]=Pr,R[Tt]=D,q=Tt;else break e}}return I}function i(R,I){var D=R.sortIndex-I.sortIndex;return D!==0?D:R.id-I.id}if(typeof performance=="object"&&typeof performance.now=="function"){var l=performance;e.unstable_now=function(){return l.now()}}else{var o=Date,u=o.now();e.unstable_now=function(){return o.now()-u}}var s=[],a=[],c=1,p=null,m=3,v=!1,S=!1,y=!1,O=typeof setTimeout=="function"?setTimeout:null,h=typeof clearTimeout=="function"?clearTimeout:null,f=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function d(R){for(var I=n(a);I!==null;){if(I.callback===null)r(a);else if(I.startTime<=R)r(a),I.sortIndex=I.expirationTime,t(s,I);else break;I=n(a)}}function g(R){if(y=!1,d(R),!S)if(n(s)!==null)S=!0,nl(x);else{var I=n(a);I!==null&&rl(g,I.startTime-R)}}function x(R,I){S=!1,y&&(y=!1,h(P),P=-1),v=!0;var D=m;try{for(d(I),p=n(s);p!==null&&(!(p.expirationTime>I)||R&&!fe());){var q=p.callback;if(typeof q=="function"){p.callback=null,m=p.priorityLevel;var b=q(p.expirationTime<=I);I=e.unstable_now(),typeof b=="function"?p.callback=b:p===n(s)&&r(s),d(I)}else r(s);p=n(s)}if(p!==null)var Er=!0;else{var It=n(a);It!==null&&rl(g,It.startTime-I),Er=!1}return Er}finally{p=null,m=D,v=!1}}var w=!1,E=null,P=-1,z=5,T=-1;function fe(){return!(e.unstable_now()-TR||125q?(R.sortIndex=D,t(a,R),n(s)===null&&R===n(a)&&(y?(h(P),P=-1):y=!0,rl(g,D-q))):(R.sortIndex=b,t(s,R),S||v||(S=!0,nl(x))),R},e.unstable_shouldYield=fe,e.unstable_wrapCallback=function(R){var I=m;return function(){var D=m;m=I;try{return R.apply(this,arguments)}finally{m=D}}}})(za);(function(e){e.exports=za})(Fa);/** + * @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 La=j.exports,xe=Fa.exports;function k(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"),Al=Object.prototype.hasOwnProperty,wd=/^[: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]*$/,Xu={},Zu={};function kd(e){return Al.call(Zu,e)?!0:Al.call(Xu,e)?!1:wd.test(e)?Zu[e]=!0:(Xu[e]=!0,!1)}function Cd(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 Ed(e,t,n,r){if(t===null||typeof t>"u"||Cd(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 me(e,t,n,r,i,l,o){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=l,this.removeEmptyString=o}var oe={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){oe[e]=new me(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];oe[t]=new me(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){oe[e]=new me(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){oe[e]=new me(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){oe[e]=new me(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){oe[e]=new me(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){oe[e]=new me(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){oe[e]=new me(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){oe[e]=new me(e,5,!1,e.toLowerCase(),null,!1,!1)});var Bo=/[\-:]([a-z])/g;function Ho(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(Bo,Ho);oe[t]=new me(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(Bo,Ho);oe[t]=new me(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(Bo,Ho);oe[t]=new me(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){oe[e]=new me(e,1,!1,e.toLowerCase(),null,!1,!1)});oe.xlinkHref=new me("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){oe[e]=new me(e,1,!1,e.toLowerCase(),null,!0,!0)});function Wo(e,t,n,r){var i=oe.hasOwnProperty(t)?oe[t]:null;(i!==null?i.type!==0:r||!(2u||i[o]!==l[u]){var s=` +`+i[o].replace(" at new "," at ");return e.displayName&&s.includes("")&&(s=s.replace("",e.displayName)),s}while(1<=o&&0<=u);break}}}finally{ul=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?jn(e):""}function Pd(e){switch(e.tag){case 5:return jn(e.type);case 16:return jn("Lazy");case 13:return jn("Suspense");case 19:return jn("SuspenseList");case 0:case 2:case 15:return e=sl(e.type,!1),e;case 11:return e=sl(e.type.render,!1),e;case 1:return e=sl(e.type,!0),e;default:return""}}function Vl(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 Zt:return"Fragment";case Xt:return"Portal";case Ul:return"Profiler";case Ko:return"StrictMode";case Ql:return"Suspense";case $l:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Ua:return(e.displayName||"Context")+".Consumer";case Aa:return(e._context.displayName||"Context")+".Provider";case qo:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Go:return t=e.displayName||null,t!==null?t:Vl(e.type)||"Memo";case at:t=e._payload,e=e._init;try{return Vl(e(t))}catch{}}return null}function xd(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 Vl(t);case 8:return t===Ko?"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 Pt(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function $a(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Od(e){var t=$a(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,l=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return i.call(this)},set:function(o){r=""+o,l.call(this,o)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(o){r=""+o},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function _r(e){e._valueTracker||(e._valueTracker=Od(e))}function Va(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=$a(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function ii(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 Bl(e,t){var n=t.checked;return W({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n!=null?n:e._wrapperState.initialChecked})}function bu(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=Pt(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 Ba(e,t){t=t.checked,t!=null&&Wo(e,"checked",t,!1)}function Hl(e,t){Ba(e,t);var n=Pt(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")?Wl(e,t.type,n):t.hasOwnProperty("defaultValue")&&Wl(e,t.type,Pt(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function es(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 Wl(e,t,n){(t!=="number"||ii(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var An=Array.isArray;function an(e,t,n,r){if(e=e.options,t){t={};for(var i=0;i"+t.valueOf().toString()+"",t=Rr.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Jn(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Vn={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},_d=["Webkit","ms","Moz","O"];Object.keys(Vn).forEach(function(e){_d.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Vn[t]=Vn[e]})});function qa(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Vn.hasOwnProperty(e)&&Vn[e]?(""+t).trim():t+"px"}function Ga(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,i=qa(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,i):e[n]=i}}var Rd=W({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 Gl(e,t){if(t){if(Rd[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(k(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(k(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(k(61))}if(t.style!=null&&typeof t.style!="object")throw Error(k(62))}}function Yl(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 Xl=null;function Yo(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Zl=null,cn=null,fn=null;function rs(e){if(e=wr(e)){if(typeof Zl!="function")throw Error(k(280));var t=e.stateNode;t&&(t=Qi(t),Zl(e.stateNode,e.type,t))}}function Ya(e){cn?fn?fn.push(e):fn=[e]:cn=e}function Xa(){if(cn){var e=cn,t=fn;if(fn=cn=null,rs(e),t)for(e=0;e>>=0,e===0?32:31-(Ud(e)/Qd|0)|0}var Nr=64,Ir=4194304;function Un(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 si(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,i=e.suspendedLanes,l=e.pingedLanes,o=n&268435455;if(o!==0){var u=o&~i;u!==0?r=Un(u):(l&=o,l!==0&&(r=Un(l)))}else o=n&~i,o!==0?r=Un(o):l!==0&&(r=Un(l));if(r===0)return 0;if(t!==0&&t!==r&&(t&i)===0&&(i=r&-r,l=t&-t,i>=l||i===16&&(l&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 gr(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-$e(t),e[t]=n}function Hd(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=Hn),ds=String.fromCharCode(32),ps=!1;function vc(e,t){switch(e){case"keyup":return gp.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function yc(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Jt=!1;function wp(e,t){switch(e){case"compositionend":return yc(t);case"keypress":return t.which!==32?null:(ps=!0,ds);case"textInput":return e=t.data,e===ds&&ps?null:e;default:return null}}function kp(e,t){if(Jt)return e==="compositionend"||!ru&&vc(e,t)?(e=hc(),qr=eu=ht=null,Jt=!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=ys(n)}}function kc(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?kc(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Cc(){for(var e=window,t=ii();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=ii(e.document)}return t}function iu(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 Ip(e){var t=Cc(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&kc(n.ownerDocument.documentElement,n)){if(r!==null&&iu(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,l=Math.min(r.start,i);r=r.end===void 0?l:Math.min(r.end,i),!e.extend&&l>r&&(i=r,r=l,l=i),i=gs(n,l);var o=gs(n,r);i&&o&&(e.rangeCount!==1||e.anchorNode!==i.node||e.anchorOffset!==i.offset||e.focusNode!==o.node||e.focusOffset!==o.offset)&&(t=t.createRange(),t.setStart(i.node,i.offset),e.removeAllRanges(),l>r?(e.addRange(t),e.extend(o.node,o.offset)):(t.setEnd(o.node,o.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,bt=null,ro=null,Kn=null,io=!1;function Ss(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;io||bt==null||bt!==ii(r)||(r=bt,"selectionStart"in r&&iu(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}),Kn&&ir(Kn,r)||(Kn=r,r=fi(ro,"onSelect"),0nn||(e.current=co[nn],co[nn]=null,nn--)}function U(e,t){nn++,co[nn]=e.current,e.current=t}var xt={},ce=_t(xt),ge=_t(!1),$t=xt;function vn(e,t){var n=e.type.contextTypes;if(!n)return xt;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var i={},l;for(l in n)i[l]=t[l];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function Se(e){return e=e.childContextTypes,e!=null}function pi(){$(ge),$(ce)}function Os(e,t,n){if(ce.current!==xt)throw Error(k(168));U(ce,t),U(ge,n)}function Tc(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(k(108,xd(e)||"Unknown",i));return W({},n,r)}function hi(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||xt,$t=ce.current,U(ce,e),U(ge,ge.current),!0}function _s(e,t,n){var r=e.stateNode;if(!r)throw Error(k(169));n?(e=Tc(e,t,$t),r.__reactInternalMemoizedMergedChildContext=e,$(ge),$(ce),U(ce,e)):$(ge),U(ge,n)}var Ze=null,$i=!1,Cl=!1;function Dc(e){Ze===null?Ze=[e]:Ze.push(e)}function Vp(e){$i=!0,Dc(e)}function Rt(){if(!Cl&&Ze!==null){Cl=!0;var e=0,t=A;try{var n=Ze;for(A=1;e>=o,i-=o,be=1<<32-$e(t)+i|n<P?(z=E,E=null):z=E.sibling;var T=m(h,E,d[P],g);if(T===null){E===null&&(E=z);break}e&&E&&T.alternate===null&&t(h,E),f=l(T,f,P),w===null?x=T:w.sibling=T,w=T,E=z}if(P===d.length)return n(h,E),V&&Dt(h,P),x;if(E===null){for(;PP?(z=E,E=null):z=E.sibling;var fe=m(h,E,T.value,g);if(fe===null){E===null&&(E=z);break}e&&E&&fe.alternate===null&&t(h,E),f=l(fe,f,P),w===null?x=fe:w.sibling=fe,w=fe,E=z}if(T.done)return n(h,E),V&&Dt(h,P),x;if(E===null){for(;!T.done;P++,T=d.next())T=p(h,T.value,g),T!==null&&(f=l(T,f,P),w===null?x=T:w.sibling=T,w=T);return V&&Dt(h,P),x}for(E=r(h,E);!T.done;P++,T=d.next())T=v(E,h,P,T.value,g),T!==null&&(e&&T.alternate!==null&&E.delete(T.key===null?P:T.key),f=l(T,f,P),w===null?x=T:w.sibling=T,w=T);return e&&E.forEach(function(Gt){return t(h,Gt)}),V&&Dt(h,P),x}function O(h,f,d,g){if(typeof d=="object"&&d!==null&&d.type===Zt&&d.key===null&&(d=d.props.children),typeof d=="object"&&d!==null){switch(d.$$typeof){case Or:e:{for(var x=d.key,w=f;w!==null;){if(w.key===x){if(x=d.type,x===Zt){if(w.tag===7){n(h,w.sibling),f=i(w,d.props.children),f.return=h,h=f;break e}}else if(w.elementType===x||typeof x=="object"&&x!==null&&x.$$typeof===at&&Fs(x)===w.type){n(h,w.sibling),f=i(w,d.props),f.ref=Fn(h,w,d),f.return=h,h=f;break e}n(h,w);break}else t(h,w);w=w.sibling}d.type===Zt?(f=Qt(d.props.children,h.mode,g,d.key),f.return=h,h=f):(g=ti(d.type,d.key,d.props,null,h.mode,g),g.ref=Fn(h,f,d),g.return=h,h=g)}return o(h);case Xt:e:{for(w=d.key;f!==null;){if(f.key===w)if(f.tag===4&&f.stateNode.containerInfo===d.containerInfo&&f.stateNode.implementation===d.implementation){n(h,f.sibling),f=i(f,d.children||[]),f.return=h,h=f;break e}else{n(h,f);break}else t(h,f);f=f.sibling}f=Il(d,h.mode,g),f.return=h,h=f}return o(h);case at:return w=d._init,O(h,f,w(d._payload),g)}if(An(d))return S(h,f,d,g);if(Nn(d))return y(h,f,d,g);jr(h,d)}return typeof d=="string"&&d!==""||typeof d=="number"?(d=""+d,f!==null&&f.tag===6?(n(h,f.sibling),f=i(f,d),f.return=h,h=f):(n(h,f),f=Nl(d,h.mode,g),f.return=h,h=f),o(h)):n(h,f)}return O}var gn=Qc(!0),$c=Qc(!1),kr={},Ge=_t(kr),sr=_t(kr),ar=_t(kr);function jt(e){if(e===kr)throw Error(k(174));return e}function pu(e,t){switch(U(ar,t),U(sr,e),U(Ge,kr),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:ql(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=ql(t,e)}$(Ge),U(Ge,t)}function Sn(){$(Ge),$(sr),$(ar)}function Vc(e){jt(ar.current);var t=jt(Ge.current),n=ql(t,e.type);t!==n&&(U(sr,e),U(Ge,n))}function hu(e){sr.current===e&&($(Ge),$(sr))}var B=_t(0);function wi(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 El=[];function mu(){for(var e=0;en?n:4,e(!0);var r=Pl.transition;Pl.transition={};try{e(!1),t()}finally{A=n,Pl.transition=r}}function lf(){return Le().memoizedState}function Kp(e,t,n){var r=Ct(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},of(e))uf(t,n);else if(n=Lc(e,t,n,r),n!==null){var i=pe();Ve(n,e,r,i),sf(n,t,r)}}function qp(e,t,n){var r=Ct(e),i={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(of(e))uf(t,i);else{var l=e.alternate;if(e.lanes===0&&(l===null||l.lanes===0)&&(l=t.lastRenderedReducer,l!==null))try{var o=t.lastRenderedState,u=l(o,n);if(i.hasEagerState=!0,i.eagerState=u,Be(u,o)){var s=t.interleaved;s===null?(i.next=i,fu(t)):(i.next=s.next,s.next=i),t.interleaved=i;return}}catch{}finally{}n=Lc(e,t,i,r),n!==null&&(i=pe(),Ve(n,e,r,i),sf(n,t,r))}}function of(e){var t=e.alternate;return e===H||t!==null&&t===H}function uf(e,t){qn=ki=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function sf(e,t,n){if((n&4194240)!==0){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Zo(e,n)}}var Ci={readContext:ze,useCallback:ue,useContext:ue,useEffect:ue,useImperativeHandle:ue,useInsertionEffect:ue,useLayoutEffect:ue,useMemo:ue,useReducer:ue,useRef:ue,useState:ue,useDebugValue:ue,useDeferredValue:ue,useTransition:ue,useMutableSource:ue,useSyncExternalStore:ue,useId:ue,unstable_isNewReconciler:!1},Gp={readContext:ze,useCallback:function(e,t){return We().memoizedState=[e,t===void 0?null:t],e},useContext:ze,useEffect:Ls,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Zr(4194308,4,bc.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Zr(4194308,4,e,t)},useInsertionEffect:function(e,t){return Zr(4,2,e,t)},useMemo:function(e,t){var n=We();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=We();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=Kp.bind(null,H,e),[r.memoizedState,e]},useRef:function(e){var t=We();return e={current:e},t.memoizedState=e},useState:zs,useDebugValue:wu,useDeferredValue:function(e){return We().memoizedState=e},useTransition:function(){var e=zs(!1),t=e[0];return e=Wp.bind(null,e[1]),We().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=H,i=We();if(V){if(n===void 0)throw Error(k(407));n=n()}else{if(n=t(),ne===null)throw Error(k(349));(Bt&30)!==0||Wc(r,t,n)}i.memoizedState=n;var l={value:n,getSnapshot:t};return i.queue=l,Ls(qc.bind(null,r,l,e),[e]),r.flags|=2048,dr(9,Kc.bind(null,r,l,n,t),void 0,null),n},useId:function(){var e=We(),t=ne.identifierPrefix;if(V){var n=et,r=be;n=(r&~(1<<32-$e(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=cr++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=o.createElement(n,{is:r.is}):(e=o.createElement(n),n==="select"&&(o=e,r.multiple?o.multiple=!0:r.size&&(o.size=r.size))):e=o.createElementNS(e,n),e[Ke]=t,e[ur]=r,yf(e,t,!1,!1),t.stateNode=e;e:{switch(o=Yl(n,r),n){case"dialog":Q("cancel",e),Q("close",e),i=r;break;case"iframe":case"object":case"embed":Q("load",e),i=r;break;case"video":case"audio":for(i=0;ikn&&(t.flags|=128,r=!0,zn(l,!1),t.lanes=4194304)}else{if(!r)if(e=wi(o),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),zn(l,!0),l.tail===null&&l.tailMode==="hidden"&&!o.alternate&&!V)return se(t),null}else 2*G()-l.renderingStartTime>kn&&n!==1073741824&&(t.flags|=128,r=!0,zn(l,!1),t.lanes=4194304);l.isBackwards?(o.sibling=t.child,t.child=o):(n=l.last,n!==null?n.sibling=o:t.child=o,l.last=o)}return l.tail!==null?(t=l.tail,l.rendering=t,l.tail=t.sibling,l.renderingStartTime=G(),t.sibling=null,n=B.current,U(B,r?n&1|2:n&1),t):(se(t),null);case 22:case 23:return Ou(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&(t.mode&1)!==0?(Ce&1073741824)!==0&&(se(t),t.subtreeFlags&6&&(t.flags|=8192)):se(t),null;case 24:return null;case 25:return null}throw Error(k(156,t.tag))}function nh(e,t){switch(ou(t),t.tag){case 1:return Se(t.type)&&pi(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Sn(),$(ge),$(ce),mu(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 5:return hu(t),null;case 13:if($(B),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(k(340));yn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return $(B),null;case 4:return Sn(),null;case 10:return cu(t.type._context),null;case 22:case 23:return Ou(),null;case 24:return null;default:return null}}var Ur=!1,ae=!1,rh=typeof WeakSet=="function"?WeakSet:Set,_=null;function un(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){K(e,t,r)}else n.current=null}function Eo(e,t,n){try{n()}catch(r){K(e,t,r)}}var Ws=!1;function ih(e,t){if(lo=ai,e=Cc(),iu(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,l=r.focusNode;r=r.focusOffset;try{n.nodeType,l.nodeType}catch{n=null;break e}var o=0,u=-1,s=-1,a=0,c=0,p=e,m=null;t:for(;;){for(var v;p!==n||i!==0&&p.nodeType!==3||(u=o+i),p!==l||r!==0&&p.nodeType!==3||(s=o+r),p.nodeType===3&&(o+=p.nodeValue.length),(v=p.firstChild)!==null;)m=p,p=v;for(;;){if(p===e)break t;if(m===n&&++a===i&&(u=o),m===l&&++c===r&&(s=o),(v=p.nextSibling)!==null)break;p=m,m=p.parentNode}p=v}n=u===-1||s===-1?null:{start:u,end:s}}else n=null}n=n||{start:0,end:0}}else n=null;for(oo={focusedElem:e,selectionRange:n},ai=!1,_=t;_!==null;)if(t=_,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,_=e;else for(;_!==null;){t=_;try{var S=t.alternate;if((t.flags&1024)!==0)switch(t.tag){case 0:case 11:case 15:break;case 1:if(S!==null){var y=S.memoizedProps,O=S.memoizedState,h=t.stateNode,f=h.getSnapshotBeforeUpdate(t.elementType===t.type?y:Ae(t.type,y),O);h.__reactInternalSnapshotBeforeUpdate=f}break;case 3:var d=t.stateNode.containerInfo;d.nodeType===1?d.textContent="":d.nodeType===9&&d.documentElement&&d.removeChild(d.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(k(163))}}catch(g){K(t,t.return,g)}if(e=t.sibling,e!==null){e.return=t.return,_=e;break}_=t.return}return S=Ws,Ws=!1,S}function Gn(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 l=i.destroy;i.destroy=void 0,l!==void 0&&Eo(t,n,l)}i=i.next}while(i!==r)}}function Hi(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 Po(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 wf(e){var t=e.alternate;t!==null&&(e.alternate=null,wf(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Ke],delete t[ur],delete t[ao],delete t[Qp],delete t[$p])),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 kf(e){return e.tag===5||e.tag===3||e.tag===4}function Ks(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||kf(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 xo(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=di));else if(r!==4&&(e=e.child,e!==null))for(xo(e,t,n),e=e.sibling;e!==null;)xo(e,t,n),e=e.sibling}function Oo(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(Oo(e,t,n),e=e.sibling;e!==null;)Oo(e,t,n),e=e.sibling}var ie=null,Ue=!1;function st(e,t,n){for(n=n.child;n!==null;)Cf(e,t,n),n=n.sibling}function Cf(e,t,n){if(qe&&typeof qe.onCommitFiberUnmount=="function")try{qe.onCommitFiberUnmount(Li,n)}catch{}switch(n.tag){case 5:ae||un(n,t);case 6:var r=ie,i=Ue;ie=null,st(e,t,n),ie=r,Ue=i,ie!==null&&(Ue?(e=ie,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):ie.removeChild(n.stateNode));break;case 18:ie!==null&&(Ue?(e=ie,n=n.stateNode,e.nodeType===8?kl(e.parentNode,n):e.nodeType===1&&kl(e,n),nr(e)):kl(ie,n.stateNode));break;case 4:r=ie,i=Ue,ie=n.stateNode.containerInfo,Ue=!0,st(e,t,n),ie=r,Ue=i;break;case 0:case 11:case 14:case 15:if(!ae&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){i=r=r.next;do{var l=i,o=l.destroy;l=l.tag,o!==void 0&&((l&2)!==0||(l&4)!==0)&&Eo(n,t,o),i=i.next}while(i!==r)}st(e,t,n);break;case 1:if(!ae&&(un(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(u){K(n,t,u)}st(e,t,n);break;case 21:st(e,t,n);break;case 22:n.mode&1?(ae=(r=ae)||n.memoizedState!==null,st(e,t,n),ae=r):st(e,t,n);break;default:st(e,t,n)}}function qs(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new rh),t.forEach(function(r){var i=ph.bind(null,e,r);n.has(r)||(n.add(r),r.then(i,i))})}}function je(e,t){var n=t.deletions;if(n!==null)for(var r=0;ri&&(i=o),r&=~l}if(r=i,r=G()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*oh(r/1960))-r,10e?16:e,mt===null)var r=!1;else{if(e=mt,mt=null,xi=0,(F&6)!==0)throw Error(k(331));var i=F;for(F|=4,_=e.current;_!==null;){var l=_,o=l.child;if((_.flags&16)!==0){var u=l.deletions;if(u!==null){for(var s=0;sG()-Pu?Ut(e,0):Eu|=n),we(e,t)}function If(e,t){t===0&&((e.mode&1)===0?t=1:(t=Ir,Ir<<=1,(Ir&130023424)===0&&(Ir=4194304)));var n=pe();e=it(e,t),e!==null&&(gr(e,t,n),we(e,n))}function dh(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),If(e,n)}function ph(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(k(314))}r!==null&&r.delete(t),If(e,n)}var Tf;Tf=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||ge.current)ye=!0;else{if((e.lanes&n)===0&&(t.flags&128)===0)return ye=!1,eh(e,t,n);ye=(e.flags&131072)!==0}else ye=!1,V&&(t.flags&1048576)!==0&&Mc(t,vi,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Jr(e,t),e=t.pendingProps;var i=vn(t,ce.current);pn(t,n),i=yu(null,t,r,e,i,n);var l=gu();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,Se(r)?(l=!0,hi(t)):l=!1,t.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,du(t),i.updater=Vi,t.stateNode=i,i._reactInternals=t,vo(t,r,e,n),t=So(null,t,r,!0,l,n)):(t.tag=0,V&&l&&lu(t),de(null,t,i,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Jr(e,t),e=t.pendingProps,i=r._init,r=i(r._payload),t.type=r,i=t.tag=mh(r),e=Ae(r,e),i){case 0:t=go(null,t,r,e,n);break e;case 1:t=Vs(null,t,r,e,n);break e;case 11:t=Qs(null,t,r,e,n);break e;case 14:t=$s(null,t,r,Ae(r.type,e),n);break e}throw Error(k(306,r,""))}return t;case 0:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:Ae(r,i),go(e,t,r,i,n);case 1:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:Ae(r,i),Vs(e,t,r,i,n);case 3:e:{if(hf(t),e===null)throw Error(k(387));r=t.pendingProps,l=t.memoizedState,i=l.element,jc(e,t),Si(t,r,null,n);var o=t.memoizedState;if(r=o.element,l.isDehydrated)if(l={element:r,isDehydrated:!1,cache:o.cache,pendingSuspenseBoundaries:o.pendingSuspenseBoundaries,transitions:o.transitions},t.updateQueue.baseState=l,t.memoizedState=l,t.flags&256){i=wn(Error(k(423)),t),t=Bs(e,t,r,n,i);break e}else if(r!==i){i=wn(Error(k(424)),t),t=Bs(e,t,r,n,i);break e}else for(Ee=St(t.stateNode.containerInfo.firstChild),Pe=t,V=!0,Qe=null,n=$c(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(yn(),r===i){t=lt(e,t,n);break e}de(e,t,r,n)}t=t.child}return t;case 5:return Vc(t),e===null&&po(t),r=t.type,i=t.pendingProps,l=e!==null?e.memoizedProps:null,o=i.children,uo(r,i)?o=null:l!==null&&uo(r,l)&&(t.flags|=32),pf(e,t),de(e,t,o,n),t.child;case 6:return e===null&&po(t),null;case 13:return mf(e,t,n);case 4:return pu(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=gn(t,null,r,n):de(e,t,r,n),t.child;case 11:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:Ae(r,i),Qs(e,t,r,i,n);case 7:return de(e,t,t.pendingProps,n),t.child;case 8:return de(e,t,t.pendingProps.children,n),t.child;case 12:return de(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,i=t.pendingProps,l=t.memoizedProps,o=i.value,U(yi,r._currentValue),r._currentValue=o,l!==null)if(Be(l.value,o)){if(l.children===i.children&&!ge.current){t=lt(e,t,n);break e}}else for(l=t.child,l!==null&&(l.return=t);l!==null;){var u=l.dependencies;if(u!==null){o=l.child;for(var s=u.firstContext;s!==null;){if(s.context===r){if(l.tag===1){s=tt(-1,n&-n),s.tag=2;var a=l.updateQueue;if(a!==null){a=a.shared;var c=a.pending;c===null?s.next=s:(s.next=c.next,c.next=s),a.pending=s}}l.lanes|=n,s=l.alternate,s!==null&&(s.lanes|=n),ho(l.return,n,t),u.lanes|=n;break}s=s.next}}else if(l.tag===10)o=l.type===t.type?null:l.child;else if(l.tag===18){if(o=l.return,o===null)throw Error(k(341));o.lanes|=n,u=o.alternate,u!==null&&(u.lanes|=n),ho(o,n,t),o=l.sibling}else o=l.child;if(o!==null)o.return=l;else for(o=l;o!==null;){if(o===t){o=null;break}if(l=o.sibling,l!==null){l.return=o.return,o=l;break}o=o.return}l=o}de(e,t,i.children,n),t=t.child}return t;case 9:return i=t.type,r=t.pendingProps.children,pn(t,n),i=ze(i),r=r(i),t.flags|=1,de(e,t,r,n),t.child;case 14:return r=t.type,i=Ae(r,t.pendingProps),i=Ae(r.type,i),$s(e,t,r,i,n);case 15:return ff(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:Ae(r,i),Jr(e,t),t.tag=1,Se(r)?(e=!0,hi(t)):e=!1,pn(t,n),Uc(t,r,i),vo(t,r,i,n),So(null,t,r,!0,e,n);case 19:return vf(e,t,n);case 22:return df(e,t,n)}throw Error(k(156,t.tag))};function Df(e,t){return rc(e,t)}function hh(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 Me(e,t,n,r){return new hh(e,t,n,r)}function Ru(e){return e=e.prototype,!(!e||!e.isReactComponent)}function mh(e){if(typeof e=="function")return Ru(e)?1:0;if(e!=null){if(e=e.$$typeof,e===qo)return 11;if(e===Go)return 14}return 2}function Et(e,t){var n=e.alternate;return n===null?(n=Me(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 ti(e,t,n,r,i,l){var o=2;if(r=e,typeof e=="function")Ru(e)&&(o=1);else if(typeof e=="string")o=5;else e:switch(e){case Zt:return Qt(n.children,i,l,t);case Ko:o=8,i|=8;break;case Ul:return e=Me(12,n,t,i|2),e.elementType=Ul,e.lanes=l,e;case Ql:return e=Me(13,n,t,i),e.elementType=Ql,e.lanes=l,e;case $l:return e=Me(19,n,t,i),e.elementType=$l,e.lanes=l,e;case Qa:return Ki(n,i,l,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Aa:o=10;break e;case Ua:o=9;break e;case qo:o=11;break e;case Go:o=14;break e;case at:o=16,r=null;break e}throw Error(k(130,e==null?e:typeof e,""))}return t=Me(o,n,t,i),t.elementType=e,t.type=r,t.lanes=l,t}function Qt(e,t,n,r){return e=Me(7,e,r,t),e.lanes=n,e}function Ki(e,t,n,r){return e=Me(22,e,r,t),e.elementType=Qa,e.lanes=n,e.stateNode={isHidden:!1},e}function Nl(e,t,n){return e=Me(6,e,null,t),e.lanes=n,e}function Il(e,t,n){return t=Me(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function vh(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=cl(0),this.expirationTimes=cl(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=cl(0),this.identifierPrefix=r,this.onRecoverableError=i,this.mutableSourceEagerHydrationData=null}function Nu(e,t,n,r,i,l,o,u,s){return e=new vh(e,t,n,u,s),t===1?(t=1,l===!0&&(t|=8)):t=0,l=Me(3,null,null,t),e.current=l,l.stateNode=e,l.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},du(l),e}function yh(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=_e})(Ma);var ta=Ma.exports;jl.createRoot=ta.createRoot,jl.hydrateRoot=ta.hydrateRoot;var Mu={exports:{}},Lf={};/** + * @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 Cn=j.exports;function Ch(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var Eh=typeof Object.is=="function"?Object.is:Ch,Ph=Cn.useState,xh=Cn.useEffect,Oh=Cn.useLayoutEffect,_h=Cn.useDebugValue;function Rh(e,t){var n=t(),r=Ph({inst:{value:n,getSnapshot:t}}),i=r[0].inst,l=r[1];return Oh(function(){i.value=n,i.getSnapshot=t,Tl(i)&&l({inst:i})},[e,n,t]),xh(function(){return Tl(i)&&l({inst:i}),e(function(){Tl(i)&&l({inst:i})})},[e]),_h(n),n}function Tl(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!Eh(e,n)}catch{return!0}}function Nh(e,t){return t()}var Ih=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?Nh:Rh;Lf.useSyncExternalStore=Cn.useSyncExternalStore!==void 0?Cn.useSyncExternalStore:Ih;(function(e){e.exports=Lf})(Mu);var Zi={exports:{}},Ji={};/** + * @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 Th=j.exports,Dh=Symbol.for("react.element"),Mh=Symbol.for("react.fragment"),Fh=Object.prototype.hasOwnProperty,zh=Th.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,Lh={key:!0,ref:!0,__self:!0,__source:!0};function jf(e,t,n){var r,i={},l=null,o=null;n!==void 0&&(l=""+n),t.key!==void 0&&(l=""+t.key),t.ref!==void 0&&(o=t.ref);for(r in t)Fh.call(t,r)&&!Lh.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:Dh,type:e,key:l,ref:o,props:i,_owner:zh.current}}Ji.Fragment=Mh;Ji.jsx=jf;Ji.jsxs=jf;(function(e){e.exports=Ji})(Zi);const jh=Zi.exports.Fragment,C=Zi.exports.jsx,N=Zi.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 Cr{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 hr=typeof window>"u";function Ne(){}function Ah(e,t){return typeof e=="function"?e(t):e}function To(e){return typeof e=="number"&&e>=0&&e!==1/0}function Af(e,t){return Math.max(e+(t||0)-Date.now(),0)}function ni(e,t,n){return bi(e)?typeof t=="function"?{...n,queryKey:e,queryFn:t}:{...t,queryKey:e}:e}function ft(e,t,n){return bi(e)?[{...t,queryKey:e},n]:[e||{},t]}function na(e,t){const{type:n="all",exact:r,fetchStatus:i,predicate:l,queryKey:o,stale:u}=e;if(bi(o)){if(r){if(t.queryHash!==Fu(o,t.options))return!1}else if(!Ri(t.queryKey,o))return!1}if(n!=="all"){const s=t.isActive();if(n==="active"&&!s||n==="inactive"&&s)return!1}return!(typeof u=="boolean"&&t.isStale()!==u||typeof i<"u"&&i!==t.state.fetchStatus||l&&!l(t))}function ra(e,t){const{exact:n,fetching:r,predicate:i,mutationKey:l}=e;if(bi(l)){if(!t.options.mutationKey)return!1;if(n){if(At(t.options.mutationKey)!==At(l))return!1}else if(!Ri(t.options.mutationKey,l))return!1}return!(typeof r=="boolean"&&t.state.status==="loading"!==r||i&&!i(t))}function Fu(e,t){return((t==null?void 0:t.queryKeyHashFn)||At)(e)}function At(e){return JSON.stringify(e,(t,n)=>Do(n)?Object.keys(n).sort().reduce((r,i)=>(r[i]=n[i],r),{}):n)}function Ri(e,t){return Uf(e,t)}function Uf(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?!Object.keys(t).some(n=>!Uf(e[n],t[n])):!1}function Qf(e,t){if(e===t)return e;const n=la(e)&&la(t);if(n||Do(e)&&Do(t)){const r=n?e.length:Object.keys(e).length,i=n?t:Object.keys(t),l=i.length,o=n?[]:{};let u=0;for(let s=0;s"u")return!0;const n=t.prototype;return!(!oa(n)||!n.hasOwnProperty("isPrototypeOf"))}function oa(e){return Object.prototype.toString.call(e)==="[object Object]"}function bi(e){return Array.isArray(e)}function $f(e){return new Promise(t=>{setTimeout(t,e)})}function ua(e){$f(0).then(e)}function Uh(){if(typeof AbortController=="function")return new AbortController}function Mo(e,t,n){return n.isDataEqual!=null&&n.isDataEqual(e,t)?e:typeof n.structuralSharing=="function"?n.structuralSharing(e,t):n.structuralSharing!==!1?Qf(e,t):t}class Qh extends Cr{constructor(){super(),this.setup=t=>{if(!hr&&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 Ni=new Qh;class $h extends Cr{constructor(){super(),this.setup=t=>{if(!hr&&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 Ii=new $h;function Vh(e){return Math.min(1e3*2**e,3e4)}function el(e){return(e!=null?e:"online")==="online"?Ii.isOnline():!0}class Vf{constructor(t){this.revert=t==null?void 0:t.revert,this.silent=t==null?void 0:t.silent}}function ri(e){return e instanceof Vf}function Bf(e){let t=!1,n=0,r=!1,i,l,o;const u=new Promise((O,h)=>{l=O,o=h}),s=O=>{r||(v(new Vf(O)),e.abort==null||e.abort())},a=()=>{t=!0},c=()=>{t=!1},p=()=>!Ni.isFocused()||e.networkMode!=="always"&&!Ii.isOnline(),m=O=>{r||(r=!0,e.onSuccess==null||e.onSuccess(O),i==null||i(),l(O))},v=O=>{r||(r=!0,e.onError==null||e.onError(O),i==null||i(),o(O))},S=()=>new Promise(O=>{i=h=>{if(r||!p())return O(h)},e.onPause==null||e.onPause()}).then(()=>{i=void 0,r||e.onContinue==null||e.onContinue()}),y=()=>{if(r)return;let O;try{O=e.fn()}catch(h){O=Promise.reject(h)}Promise.resolve(O).then(m).catch(h=>{var f,d;if(r)return;const g=(f=e.retry)!=null?f:3,x=(d=e.retryDelay)!=null?d:Vh,w=typeof x=="function"?x(n,h):x,E=g===!0||typeof g=="number"&&n{if(p())return S()}).then(()=>{t?v(h):y()})})};return el(e.networkMode)?y():S().then(y),{promise:u,cancel:s,continue:()=>{i==null||i()},cancelRetry:a,continueRetry:c}}const zu=console;function Bh(){let e=[],t=0,n=c=>{c()},r=c=>{c()};const i=c=>{let p;t++;try{p=c()}finally{t--,t||u()}return p},l=c=>{t?e.push(c):ua(()=>{n(c)})},o=c=>(...p)=>{l(()=>{c(...p)})},u=()=>{const c=e;e=[],c.length&&ua(()=>{r(()=>{c.forEach(p=>{n(p)})})})};return{batch:i,batchCalls:o,schedule:l,setNotifyFunction:c=>{n=c},setBatchNotifyFunction:c=>{r=c}}}const Y=Bh();class Hf{destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),To(this.cacheTime)&&(this.gcTimeout=setTimeout(()=>{this.optionalRemove()},this.cacheTime))}updateCacheTime(t){this.cacheTime=Math.max(this.cacheTime||0,t!=null?t:hr?1/0:5*60*1e3)}clearGcTimeout(){this.gcTimeout&&(clearTimeout(this.gcTimeout),this.gcTimeout=void 0)}}class Hh extends Hf{constructor(t){super(),this.abortSignalConsumed=!1,this.defaultOptions=t.defaultOptions,this.setOptions(t.options),this.observers=[],this.cache=t.cache,this.logger=t.logger||zu,this.queryKey=t.queryKey,this.queryHash=t.queryHash,this.initialState=t.state||Wh(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=Mo(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(Ne).catch(Ne):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||!Af(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 l;return(l=this.retryer)==null||l.continueRetry(),this.promise}}if(t&&this.setOptions(t),!this.options.queryFn){const v=this.observers.find(S=>S.options.queryFn);v&&this.setOptions(v.options)}Array.isArray(this.options.queryKey);const o=Uh(),u={queryKey:this.queryKey,pageParam:void 0,meta:this.meta},s=v=>{Object.defineProperty(v,"signal",{enumerable:!0,get:()=>{if(o)return this.abortSignalConsumed=!0,o.signal}})};s(u);const a=()=>this.options.queryFn?(this.abortSignalConsumed=!1,this.options.queryFn(u)):Promise.reject("Missing queryFn"),c={fetchOptions:n,options:this.options,queryKey:this.queryKey,state:this.state,fetchFn:a,meta:this.meta};if(s(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 p;this.dispatch({type:"fetch",meta:(p=c.fetchOptions)==null?void 0:p.meta})}const m=v=>{if(ri(v)&&v.silent||this.dispatch({type:"error",error:v}),!ri(v)){var S,y;(S=(y=this.cache.config).onError)==null||S.call(y,v,this)}this.isFetchingOptimistic||this.scheduleGc(),this.isFetchingOptimistic=!1};return this.retryer=Bf({fn:c.fetchFn,abort:o==null?void 0:o.abort.bind(o),onSuccess:v=>{var S,y;if(typeof v>"u"){m(new Error("Query data cannot be undefined"));return}this.setData(v),(S=(y=this.cache.config).onSuccess)==null||S.call(y,v,this),this.isFetchingOptimistic||this.scheduleGc(),this.isFetchingOptimistic=!1},onError:m,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,l;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:el(this.options.networkMode)?"fetching":"paused",...!r.dataUpdatedAt&&{error:null,status:"loading"}};case"success":return{...r,data:t.data,dataUpdateCount:r.dataUpdateCount+1,dataUpdatedAt:(l=t.dataUpdatedAt)!=null?l:Date.now(),error:null,isInvalidated:!1,status:"success",...!t.manual&&{fetchStatus:"idle",fetchFailureCount:0}};case"error":const o=t.error;return ri(o)&&o.revert&&this.revertState?{...this.revertState}:{...r,error:o,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),Y.batch(()=>{this.observers.forEach(r=>{r.onQueryUpdate(t)}),this.cache.notify({query:this,type:"updated",action:t})})}}function Wh(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 Kh extends Cr{constructor(t){super(),this.config=t||{},this.queries=[],this.queriesMap={}}build(t,n,r){var i;const l=n.queryKey,o=(i=n.queryHash)!=null?i:Fu(l,n);let u=this.get(o);return u||(u=new Hh({cache:this,logger:t.getLogger(),queryKey:l,queryHash:o,options:t.defaultQueryOptions(n),state:r,defaultOptions:t.getQueryDefaults(l),meta:n.meta}),this.add(u)),u}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(){Y.batch(()=>{this.queries.forEach(t=>{this.remove(t)})})}get(t){return this.queriesMap[t]}getAll(){return this.queries}find(t,n){const[r]=ft(t,n);return typeof r.exact>"u"&&(r.exact=!0),this.queries.find(i=>na(r,i))}findAll(t,n){const[r]=ft(t,n);return Object.keys(r).length>0?this.queries.filter(i=>na(r,i)):this.queries}notify(t){Y.batch(()=>{this.listeners.forEach(n=>{n(t)})})}onFocus(){Y.batch(()=>{this.queries.forEach(t=>{t.onFocus()})})}onOnline(){Y.batch(()=>{this.queries.forEach(t=>{t.onOnline()})})}}class qh extends Hf{constructor(t){super(),this.options={...t.defaultOptions,...t.options},this.mutationId=t.mutationId,this.mutationCache=t.mutationCache,this.logger=t.logger||zu,this.observers=[],this.state=t.state||Gh(),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 d;return this.retryer=Bf({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:(d=this.options.retry)!=null?d:0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode}),this.retryer.promise},n=this.state.status==="loading";try{var r,i,l,o,u,s;if(!n){var a,c,p,m;this.dispatch({type:"loading",variables:this.options.variables}),(a=(c=this.mutationCache.config).onMutate)==null||a.call(c,this.state.variables,this);const g=await((p=(m=this.options).onMutate)==null?void 0:p.call(m,this.state.variables));g!==this.state.context&&this.dispatch({type:"loading",context:g,variables:this.state.variables})}const d=await t();return(r=(i=this.mutationCache.config).onSuccess)==null||r.call(i,d,this.state.variables,this.state.context,this),await((l=(o=this.options).onSuccess)==null?void 0:l.call(o,d,this.state.variables,this.state.context)),await((u=(s=this.options).onSettled)==null?void 0:u.call(s,d,null,this.state.variables,this.state.context)),this.dispatch({type:"success",data:d}),d}catch(d){try{var v,S,y,O,h,f;throw(v=(S=this.mutationCache.config).onError)==null||v.call(S,d,this.state.variables,this.state.context,this),await((y=(O=this.options).onError)==null?void 0:y.call(O,d,this.state.variables,this.state.context)),await((h=(f=this.options).onSettled)==null?void 0:h.call(f,void 0,d,this.state.variables,this.state.context)),d}finally{this.dispatch({type:"error",error:d})}}}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:!el(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),Y.batch(()=>{this.observers.forEach(r=>{r.onMutationUpdate(t)}),this.mutationCache.notify({mutation:this,type:"updated",action:t})})}}function Gh(){return{context:void 0,data:void 0,error:null,failureCount:0,isPaused:!1,status:"idle",variables:void 0}}class Yh extends Cr{constructor(t){super(),this.config=t||{},this.mutations=[],this.mutationId=0}build(t,n,r){const i=new qh({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(){Y.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=>ra(t,n))}findAll(t){return this.mutations.filter(n=>ra(t,n))}notify(t){Y.batch(()=>{this.listeners.forEach(n=>{n(t)})})}resumePausedMutations(){const t=this.mutations.filter(n=>n.state.isPaused);return Y.batch(()=>t.reduce((n,r)=>n.then(()=>r.continue().catch(Ne)),Promise.resolve()))}}function Xh(){return{onFetch:e=>{e.fetchFn=()=>{var t,n,r,i,l,o;const u=(t=e.fetchOptions)==null||(n=t.meta)==null?void 0:n.refetchPage,s=(r=e.fetchOptions)==null||(i=r.meta)==null?void 0:i.fetchMore,a=s==null?void 0:s.pageParam,c=(s==null?void 0:s.direction)==="forward",p=(s==null?void 0:s.direction)==="backward",m=((l=e.state.data)==null?void 0:l.pages)||[],v=((o=e.state.data)==null?void 0:o.pageParams)||[];let S=v,y=!1;const O=w=>{Object.defineProperty(w,"signal",{enumerable:!0,get:()=>{var E;if((E=e.signal)!=null&&E.aborted)y=!0;else{var P;(P=e.signal)==null||P.addEventListener("abort",()=>{y=!0})}return e.signal}})},h=e.options.queryFn||(()=>Promise.reject("Missing queryFn")),f=(w,E,P,z)=>(S=z?[E,...S]:[...S,E],z?[P,...w]:[...w,P]),d=(w,E,P,z)=>{if(y)return Promise.reject("Cancelled");if(typeof P>"u"&&!E&&w.length)return Promise.resolve(w);const T={queryKey:e.queryKey,pageParam:P,meta:e.meta};O(T);const fe=h(T);return Promise.resolve(fe).then(Nt=>f(w,P,Nt,z))};let g;if(!m.length)g=d([]);else if(c){const w=typeof a<"u",E=w?a:sa(e.options,m);g=d(m,w,E)}else if(p){const w=typeof a<"u",E=w?a:Zh(e.options,m);g=d(m,w,E,!0)}else{S=[];const w=typeof e.options.getNextPageParam>"u";g=(u&&m[0]?u(m[0],0,m):!0)?d([],w,v[0]):Promise.resolve(f([],v[0],m[0]));for(let P=1;P{if(u&&m[P]?u(m[P],P,m):!0){const fe=w?v[P]:sa(e.options,z);return d(z,w,fe)}return Promise.resolve(f(z,v[P],m[P]))})}return g.then(w=>({pages:w,pageParams:S}))}}}}function sa(e,t){return e.getNextPageParam==null?void 0:e.getNextPageParam(t[t.length-1],t)}function Zh(e,t){return e.getPreviousPageParam==null?void 0:e.getPreviousPageParam(t[0],t)}class Jh{constructor(t={}){this.queryCache=t.queryCache||new Kh,this.mutationCache=t.mutationCache||new Yh,this.logger=t.logger||zu,this.defaultOptions=t.defaultOptions||{},this.queryDefaults=[],this.mutationDefaults=[]}mount(){this.unsubscribeFocus=Ni.subscribe(()=>{Ni.isFocused()&&(this.resumePausedMutations(),this.queryCache.onFocus())}),this.unsubscribeOnline=Ii.subscribe(()=>{Ii.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]=ft(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),l=i==null?void 0:i.state.data,o=Ah(n,l);if(typeof o>"u")return;const u=ni(t),s=this.defaultQueryOptions(u);return this.queryCache.build(this,s).setData(o,{...r,manual:!0})}setQueriesData(t,n,r){return Y.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]=ft(t,n),i=this.queryCache;Y.batch(()=>{i.findAll(r).forEach(l=>{i.remove(l)})})}resetQueries(t,n,r){const[i,l]=ft(t,n,r),o=this.queryCache,u={type:"active",...i};return Y.batch(()=>(o.findAll(i).forEach(s=>{s.reset()}),this.refetchQueries(u,l)))}cancelQueries(t,n,r){const[i,l={}]=ft(t,n,r);typeof l.revert>"u"&&(l.revert=!0);const o=Y.batch(()=>this.queryCache.findAll(i).map(u=>u.cancel(l)));return Promise.all(o).then(Ne).catch(Ne)}invalidateQueries(t,n,r){const[i,l]=ft(t,n,r);return Y.batch(()=>{var o,u;if(this.queryCache.findAll(i).forEach(a=>{a.invalidate()}),i.refetchType==="none")return Promise.resolve();const s={...i,type:(o=(u=i.refetchType)!=null?u:i.type)!=null?o:"active"};return this.refetchQueries(s,l)})}refetchQueries(t,n,r){const[i,l]=ft(t,n,r),o=Y.batch(()=>this.queryCache.findAll(i).filter(s=>!s.isDisabled()).map(s=>{var a;return s.fetch(void 0,{...l,cancelRefetch:(a=l==null?void 0:l.cancelRefetch)!=null?a:!0,meta:{refetchPage:i.refetchPage}})}));let u=Promise.all(o).then(Ne);return l!=null&&l.throwOnError||(u=u.catch(Ne)),u}fetchQuery(t,n,r){const i=ni(t,n,r),l=this.defaultQueryOptions(i);typeof l.retry>"u"&&(l.retry=!1);const o=this.queryCache.build(this,l);return o.isStaleByTime(l.staleTime)?o.fetch(l):Promise.resolve(o.state.data)}prefetchQuery(t,n,r){return this.fetchQuery(t,n,r).then(Ne).catch(Ne)}fetchInfiniteQuery(t,n,r){const i=ni(t,n,r);return i.behavior=Xh(),this.fetchQuery(i)}prefetchInfiniteQuery(t,n,r){return this.fetchInfiniteQuery(t,n,r).then(Ne).catch(Ne)}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=>At(t)===At(i.queryKey));r?r.defaultOptions=n:this.queryDefaults.push({queryKey:t,defaultOptions:n})}getQueryDefaults(t){if(!t)return;const n=this.queryDefaults.find(r=>Ri(t,r.queryKey));return n==null?void 0:n.defaultOptions}setMutationDefaults(t,n){const r=this.mutationDefaults.find(i=>At(t)===At(i.mutationKey));r?r.defaultOptions=n:this.mutationDefaults.push({mutationKey:t,defaultOptions:n})}getMutationDefaults(t){if(!t)return;const n=this.mutationDefaults.find(r=>Ri(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=Fu(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 bh extends Cr{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),aa(this.currentQuery,this.options)&&this.executeFetch(),this.updateTimers())}onUnsubscribe(){this.listeners.length||this.destroy()}shouldFetchOnReconnect(){return Fo(this.currentQuery,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return Fo(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),ia(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 l=this.hasListeners();l&&ca(this.currentQuery,i,this.options,r)&&this.executeFetch(),this.updateResult(n),l&&(this.currentQuery!==i||this.options.enabled!==r.enabled||this.options.staleTime!==r.staleTime)&&this.updateStaleTimeout();const o=this.computeRefetchInterval();l&&(this.currentQuery!==i||this.options.enabled!==r.enabled||o!==this.currentRefetchInterval)&&this.updateRefetchInterval(o)}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(Ne)),n}updateStaleTimeout(){if(this.clearStaleTimeout(),hr||this.currentResult.isStale||!To(this.options.staleTime))return;const n=Af(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,!(hr||this.options.enabled===!1||!To(this.currentRefetchInterval)||this.currentRefetchInterval===0)&&(this.refetchIntervalId=setInterval(()=>{(this.options.refetchIntervalInBackground||Ni.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,l=this.currentResult,o=this.currentResultState,u=this.currentResultOptions,s=t!==r,a=s?t.state:this.currentQueryInitialState,c=s?this.currentResult:this.previousQueryResult,{state:p}=t;let{dataUpdatedAt:m,error:v,errorUpdatedAt:S,fetchStatus:y,status:O}=p,h=!1,f=!1,d;if(n._optimisticResults){const w=this.hasListeners(),E=!w&&aa(t,n),P=w&&ca(t,r,n,i);(E||P)&&(y=el(t.options.networkMode)?"fetching":"paused",m||(O="loading")),n._optimisticResults==="isRestoring"&&(y="idle")}if(n.keepPreviousData&&!p.dataUpdateCount&&c!=null&&c.isSuccess&&O!=="error")d=c.data,m=c.dataUpdatedAt,O=c.status,h=!0;else if(n.select&&typeof p.data<"u")if(l&&p.data===(o==null?void 0:o.data)&&n.select===this.selectFn)d=this.selectResult;else try{this.selectFn=n.select,d=n.select(p.data),d=Mo(l==null?void 0:l.data,d,n),this.selectResult=d,this.selectError=null}catch(w){this.selectError=w}else d=p.data;if(typeof n.placeholderData<"u"&&typeof d>"u"&&O==="loading"){let w;if(l!=null&&l.isPlaceholderData&&n.placeholderData===(u==null?void 0:u.placeholderData))w=l.data;else if(w=typeof n.placeholderData=="function"?n.placeholderData():n.placeholderData,n.select&&typeof w<"u")try{w=n.select(w),w=Mo(l==null?void 0:l.data,w,n),this.selectError=null}catch(E){this.selectError=E}typeof w<"u"&&(O="success",d=w,f=!0)}this.selectError&&(v=this.selectError,d=this.selectResult,S=Date.now(),O="error");const g=y==="fetching";return{status:O,fetchStatus:y,isLoading:O==="loading",isSuccess:O==="success",isError:O==="error",data:d,dataUpdatedAt:m,error:v,errorUpdatedAt:S,failureCount:p.fetchFailureCount,errorUpdateCount:p.errorUpdateCount,isFetched:p.dataUpdateCount>0||p.errorUpdateCount>0,isFetchedAfterMount:p.dataUpdateCount>a.dataUpdateCount||p.errorUpdateCount>a.errorUpdateCount,isFetching:g,isRefetching:g&&O!=="loading",isLoadingError:O==="error"&&p.dataUpdatedAt===0,isPaused:y==="paused",isPlaceholderData:f,isPreviousData:h,isRefetchError:O==="error"&&p.dataUpdatedAt!==0,isStale:Lu(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,ia(r,n))return;this.currentResult=r;const i={cache:!0},l=()=>{if(!n)return!0;const{notifyOnChangeProps:o}=this.options;if(o==="all"||!o&&!this.trackedProps.size)return!0;const u=new Set(o!=null?o:this.trackedProps);return this.options.useErrorBoundary&&u.add("error"),Object.keys(this.currentResult).some(s=>{const a=s;return this.currentResult[a]!==n[a]&&u.has(a)})};(t==null?void 0:t.listeners)!==!1&&l()&&(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"&&!ri(t.error)&&(n.onError=!0),this.updateResult(n),this.hasListeners()&&this.updateTimers()}notify(t){Y.batch(()=>{if(t.onSuccess){var n,r,i,l;(n=(r=this.options).onSuccess)==null||n.call(r,this.currentResult.data),(i=(l=this.options).onSettled)==null||i.call(l,this.currentResult.data,null)}else if(t.onError){var o,u,s,a;(o=(u=this.options).onError)==null||o.call(u,this.currentResult.error),(s=(a=this.options).onSettled)==null||s.call(a,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 em(e,t){return t.enabled!==!1&&!e.state.dataUpdatedAt&&!(e.state.status==="error"&&t.retryOnMount===!1)}function aa(e,t){return em(e,t)||e.state.dataUpdatedAt>0&&Fo(e,t,t.refetchOnMount)}function Fo(e,t,n){if(t.enabled!==!1){const r=typeof n=="function"?n(e):n;return r==="always"||r!==!1&&Lu(e,t)}return!1}function ca(e,t,n,r){return n.enabled!==!1&&(e!==t||r.enabled===!1)&&(!n.suspense||e.state.status!=="error")&&Lu(e,n)}function Lu(e,t){return e.isStaleByTime(t.staleTime)}const fa=j.exports.createContext(void 0),Wf=j.exports.createContext(!1);function Kf(e,t){return e||(t&&typeof window<"u"?(window.ReactQueryClientContext||(window.ReactQueryClientContext=fa),window.ReactQueryClientContext):fa)}const qf=({context:e}={})=>{const t=j.exports.useContext(Kf(e,j.exports.useContext(Wf)));if(!t)throw new Error("No QueryClient set, use QueryClientProvider to set one");return t},tm=({client:e,children:t,context:n,contextSharing:r=!1})=>{j.exports.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]);const i=Kf(n,r);return C(Wf.Provider,{value:!n&&r,children:C(i.Provider,{value:e,children:t})})},Gf=j.exports.createContext(!1),nm=()=>j.exports.useContext(Gf);Gf.Provider;function rm(){let e=!1;return{clearReset:()=>{e=!1},reset:()=>{e=!0},isReset:()=>e}}const im=j.exports.createContext(rm()),lm=()=>j.exports.useContext(im);function om(e,t){return typeof e=="function"?e(...t):!!e}function um(e,t){const n=qf({context:e.context}),r=nm(),i=lm(),l=n.defaultQueryOptions(e);l._optimisticResults=r?"isRestoring":"optimistic",l.onError&&(l.onError=Y.batchCalls(l.onError)),l.onSuccess&&(l.onSuccess=Y.batchCalls(l.onSuccess)),l.onSettled&&(l.onSettled=Y.batchCalls(l.onSettled)),l.suspense&&typeof l.staleTime!="number"&&(l.staleTime=1e3),(l.suspense||l.useErrorBoundary)&&(i.isReset()||(l.retryOnMount=!1));const[o]=j.exports.useState(()=>new t(n,l)),u=o.getOptimisticResult(l);if(Mu.exports.useSyncExternalStore(j.exports.useCallback(s=>r?()=>{}:o.subscribe(Y.batchCalls(s)),[o,r]),()=>o.getCurrentResult(),()=>o.getCurrentResult()),j.exports.useEffect(()=>{i.clearReset()},[i]),j.exports.useEffect(()=>{o.setOptions(l,{listeners:!1})},[l,o]),l.suspense&&u.isLoading&&u.isFetching&&!r)throw o.fetchOptimistic(l).then(({data:s})=>{l.onSuccess==null||l.onSuccess(s),l.onSettled==null||l.onSettled(s,null)}).catch(s=>{i.clearReset(),l.onError==null||l.onError(s),l.onSettled==null||l.onSettled(void 0,s)});if(u.isError&&!i.isReset()&&!u.isFetching&&om(l.useErrorBoundary,[u.error,o.getCurrentQuery()]))throw u.error;return l.notifyOnChangeProps?u:o.trackResult(u)}function ju(e,t,n){const r=ni(e,t,n);return um(r,bh)}/** + * 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 sm(){return null}function De(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:Au(e)?2:Uu(e)?3:0}function zo(e,t){return Rn(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function am(e,t){return Rn(e)===2?e.get(t):e[t]}function Yf(e,t,n){var r=Rn(e);r===2?e.set(t,n):r===3?(e.delete(t),e.add(n)):e[t]=n}function cm(e,t){return e===t?e!==0||1/e==1/t:e!=e&&t!=t}function Au(e){return vm&&e instanceof Map}function Uu(e){return ym&&e instanceof Set}function ee(e){return e.o||e.t}function Qu(e){if(Array.isArray(e))return Array.prototype.slice.call(e);var t=Sm(e);delete t[L];for(var n=Hu(t),r=0;r1&&(e.set=e.add=e.clear=e.delete=fm),Object.freeze(e),t&&Pn(e,function(n,r){return $u(r,!0)},!0)),e}function fm(){De(2)}function Vu(e){return e==null||typeof e!="object"||Object.isFrozen(e)}function Ye(e){var t=jo[e];return t||De(18,e),t}function dm(e,t){jo[e]||(jo[e]=t)}function Ti(){return vr}function Dl(e,t){t&&(Ye("Patches"),e.u=[],e.s=[],e.v=t)}function Di(e){Lo(e),e.p.forEach(pm),e.p=null}function Lo(e){e===vr&&(vr=e.l)}function da(e){return vr={p:[],l:vr,h:e,m:!0,_:0}}function pm(e){var t=e[L];t.i===0||t.i===1?t.j():t.O=!0}function Ml(e,t){t._=t.p.length;var n=t.p[0],r=e!==void 0&&e!==n;return t.h.g||Ye("ES5").S(t,e,r),r?(n[L].P&&(Di(t),De(4)),ot(e)&&(e=Mi(t,e),t.l||Fi(t,e)),t.u&&Ye("Patches").M(n[L].t,e,t.u,t.s)):e=Mi(t,n,[]),Di(t),t.u&&t.v(t.u,t.s),e!==Xf?e:void 0}function Mi(e,t,n){if(Vu(t))return t;var r=t[L];if(!r)return Pn(t,function(l,o){return pa(e,r,t,l,o,n)},!0),t;if(r.A!==e)return t;if(!r.P)return Fi(e,r.t,!0),r.t;if(!r.I){r.I=!0,r.A._--;var i=r.i===4||r.i===5?r.o=Qu(r.k):r.o;Pn(r.i===3?new Set(i):i,function(l,o){return pa(e,r,i,l,o,n)}),Fi(e,i,!1),n&&e.u&&Ye("Patches").R(r,n,e.u,e.s)}return r.o}function pa(e,t,n,r,i,l){if(En(i)){var o=Mi(e,i,l&&t&&t.i!==3&&!zo(t.D,r)?l.concat(r):void 0);if(Yf(n,r,o),!En(o))return;e.m=!1}if(ot(i)&&!Vu(i)){if(!e.h.F&&e._<1)return;Mi(e,i),t&&t.A.l||Fi(e,i)}}function Fi(e,t,n){n===void 0&&(n=!1),e.h.F&&e.m&&$u(t,n)}function Fl(e,t){var n=e[L];return(n?ee(n):e)[t]}function ha(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 Je(e){e.P||(e.P=!0,e.l&&Je(e.l))}function zl(e){e.o||(e.o=Qu(e.t))}function mr(e,t,n){var r=Au(t)?Ye("MapSet").N(t,n):Uu(t)?Ye("MapSet").T(t,n):e.g?function(i,l){var o=Array.isArray(i),u={i:o?1:0,A:l?l.A:Ti(),P:!1,I:!1,D:{},l,t:i,k:null,o:null,j:null,C:!1},s=u,a=Ao;o&&(s=[u],a=$n);var c=Proxy.revocable(s,a),p=c.revoke,m=c.proxy;return u.k=m,u.j=p,m}(t,n):Ye("ES5").J(t,n);return(n?n.A:Ti()).p.push(r),r}function hm(e){return En(e)||De(22,e),function t(n){if(!ot(n))return n;var r,i=n[L],l=Rn(n);if(i){if(!i.P&&(i.i<4||!Ye("ES5").K(i)))return i.t;i.I=!0,r=ma(n,l),i.I=!1}else r=ma(n,l);return Pn(r,function(o,u){i&&am(i.t,o)===u||Yf(r,o,t(u))}),l===3?new Set(r):r}(e)}function ma(e,t){switch(t){case 2:return new Map(e);case 3:return Array.from(e)}return Qu(e)}function mm(){function e(u,s){function a(){this.constructor=u}i(u,s),u.prototype=(a.prototype=s.prototype,new a)}function t(u){u.o||(u.D=new Map,u.o=new Map(u.t))}function n(u){u.o||(u.o=new Set,u.t.forEach(function(s){if(ot(s)){var a=mr(u.A.h,s,u);u.p.set(s,a),u.o.add(a)}else u.o.add(s)}))}function r(u){u.O&&De(3,JSON.stringify(ee(u)))}var i=function(u,s){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,c){a.__proto__=c}||function(a,c){for(var p in c)c.hasOwnProperty(p)&&(a[p]=c[p])})(u,s)},l=function(){function u(a,c){return this[L]={i:2,l:c,A:c?c.A:Ti(),P:!1,I:!1,o:void 0,D:void 0,t:a,k:this,C:!1,O:!1},this}e(u,Map);var s=u.prototype;return Object.defineProperty(s,"size",{get:function(){return ee(this[L]).size}}),s.has=function(a){return ee(this[L]).has(a)},s.set=function(a,c){var p=this[L];return r(p),ee(p).has(a)&&ee(p).get(a)===c||(t(p),Je(p),p.D.set(a,!0),p.o.set(a,c),p.D.set(a,!0)),this},s.delete=function(a){if(!this.has(a))return!1;var c=this[L];return r(c),t(c),Je(c),c.t.has(a)?c.D.set(a,!1):c.D.delete(a),c.o.delete(a),!0},s.clear=function(){var a=this[L];r(a),ee(a).size&&(t(a),Je(a),a.D=new Map,Pn(a.t,function(c){a.D.set(c,!1)}),a.o.clear())},s.forEach=function(a,c){var p=this;ee(this[L]).forEach(function(m,v){a.call(c,p.get(v),v,p)})},s.get=function(a){var c=this[L];r(c);var p=ee(c).get(a);if(c.I||!ot(p)||p!==c.t.get(a))return p;var m=mr(c.A.h,p,c);return t(c),c.o.set(a,m),m},s.keys=function(){return ee(this[L]).keys()},s.values=function(){var a,c=this,p=this.keys();return(a={})[Vr]=function(){return c.values()},a.next=function(){var m=p.next();return m.done?m:{done:!1,value:c.get(m.value)}},a},s.entries=function(){var a,c=this,p=this.keys();return(a={})[Vr]=function(){return c.entries()},a.next=function(){var m=p.next();if(m.done)return m;var v=c.get(m.value);return{done:!1,value:[m.value,v]}},a},s[Vr]=function(){return this.entries()},u}(),o=function(){function u(a,c){return this[L]={i:3,l:c,A:c?c.A:Ti(),P:!1,I:!1,o:void 0,t:a,k:this,p:new Map,O:!1,C:!1},this}e(u,Set);var s=u.prototype;return Object.defineProperty(s,"size",{get:function(){return ee(this[L]).size}}),s.has=function(a){var c=this[L];return r(c),c.o?!!c.o.has(a)||!(!c.p.has(a)||!c.o.has(c.p.get(a))):c.t.has(a)},s.add=function(a){var c=this[L];return r(c),this.has(a)||(n(c),Je(c),c.o.add(a)),this},s.delete=function(a){if(!this.has(a))return!1;var c=this[L];return r(c),n(c),Je(c),c.o.delete(a)||!!c.p.has(a)&&c.o.delete(c.p.get(a))},s.clear=function(){var a=this[L];r(a),ee(a).size&&(n(a),Je(a),a.o.clear())},s.values=function(){var a=this[L];return r(a),n(a),a.o.values()},s.entries=function(){var a=this[L];return r(a),n(a),a.o.entries()},s.keys=function(){return this.values()},s[Vr]=function(){return this.values()},s.forEach=function(a,c){for(var p=this.values(),m=p.next();!m.done;)a.call(c,m.value,m.value,this),m=p.next()},u}();dm("MapSet",{N:function(u,s){return new l(u,s)},T:function(u,s){return new o(u,s)}})}var va,vr,Bu=typeof Symbol<"u"&&typeof Symbol("x")=="symbol",vm=typeof Map<"u",ym=typeof Set<"u",ya=typeof Proxy<"u"&&Proxy.revocable!==void 0&&typeof Reflect<"u",Xf=Bu?Symbol.for("immer-nothing"):((va={})["immer-nothing"]=!0,va),ga=Bu?Symbol.for("immer-draftable"):"__$immer_draftable",L=Bu?Symbol.for("immer-state"):"__$immer_state",Vr=typeof Symbol<"u"&&Symbol.iterator||"@@iterator",gm=""+Object.prototype.constructor,Hu=typeof Reflect<"u"&&Reflect.ownKeys?Reflect.ownKeys:Object.getOwnPropertySymbols!==void 0?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Object.getOwnPropertyNames,Sm=Object.getOwnPropertyDescriptors||function(e){var t={};return Hu(e).forEach(function(n){t[n]=Object.getOwnPropertyDescriptor(e,n)}),t},jo={},Ao={get:function(e,t){if(t===L)return e;var n=ee(e);if(!zo(n,t))return function(i,l,o){var u,s=ha(l,o);return s?"value"in s?s.value:(u=s.get)===null||u===void 0?void 0:u.call(i.k):void 0}(e,n,t);var r=n[t];return e.I||!ot(r)?r:r===Fl(e.t,t)?(zl(e),e.o[t]=mr(e.A.h,r,e)):r},has:function(e,t){return t in ee(e)},ownKeys:function(e){return Reflect.ownKeys(ee(e))},set:function(e,t,n){var r=ha(ee(e),t);if(r!=null&&r.set)return r.set.call(e.k,n),!0;if(!e.P){var i=Fl(ee(e),t),l=i==null?void 0:i[L];if(l&&l.t===n)return e.o[t]=n,e.D[t]=!1,!0;if(cm(n,i)&&(n!==void 0||zo(e.t,t)))return!0;zl(e),Je(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 Fl(e.t,t)!==void 0||t in e.t?(e.D[t]=!1,zl(e),Je(e)):delete e.D[t],e.o&&delete e.o[t],!0},getOwnPropertyDescriptor:function(e,t){var n=ee(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{writable:!0,configurable:e.i!==1||t!=="length",enumerable:r.enumerable,value:n[t]}},defineProperty:function(){De(11)},getPrototypeOf:function(e){return Object.getPrototypeOf(e.t)},setPrototypeOf:function(){De(12)}},$n={};Pn(Ao,function(e,t){$n[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}}),$n.deleteProperty=function(e,t){return $n.set.call(this,e,t,void 0)},$n.set=function(e,t,n){return Ao.set.call(this,e[0],t,n,e[0])};var wm=function(){function e(n){var r=this;this.g=ya,this.F=!0,this.produce=function(i,l,o){if(typeof i=="function"&&typeof l!="function"){var u=l;l=i;var s=r;return function(y){var O=this;y===void 0&&(y=u);for(var h=arguments.length,f=Array(h>1?h-1:0),d=1;d1?c-1:0),m=1;m=0;i--){var l=r[i];if(l.path.length===0&&l.op==="replace"){n=l.value;break}}i>-1&&(r=r.slice(i+1));var o=Ye("Patches").$;return En(n)?o(n,r):this.produce(n,function(u){return o(u,r)})},e}(),Oe=new wm,Ft=Oe.produce;Oe.produceWithPatches.bind(Oe);Oe.setAutoFreeze.bind(Oe);Oe.setUseProxies.bind(Oe);Oe.applyPatches.bind(Oe);Oe.createDraft.bind(Oe);Oe.finishDraft.bind(Oe);const Wu="",km=5e3,Cm=async()=>{const e=`${Wu}/ping`;return console.log("pinging",e),await(await fetch(e)).json()},Em=async()=>await(await fetch(`${Wu}/modifiers.json`)).json(),Zf="MakeImage",Pm=async e=>{let t={...e};return t.tags.length>0&&(t.prompt+=",",t.prompt+=t.tags.join(",")),delete t.tags,await(await fetch(`${Wu}/image`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})).json()};const Sa="Stable Diffusion is starting...",xm="Stable Diffusion is ready to use!",wa="Stable Diffusion is not running!";function Om({className:e}){const[t,n]=j.exports.useState(Sa),[r,i]=j.exports.useState("starting"),{status:l,data:o}=ju(["health"],Cm,{refetchInterval:km});return j.exports.useEffect(()=>{console.log("health data",o)},[o]),j.exports.useEffect(()=>{console.log("status",l),l==="loading"?(n(Sa),i("starting")):l==="error"?(n(wa),i("error")):l==="success"&&(o[0]==="OK"?(n(xm),i("success")):(n(wa),i("error")))},[l,o]),C(jh,{children:C("p",{className:[r,e].join(" "),children:t})})}function _m(){return N("div",{className:"header-display",children:[C("h1",{children:"Stable Diffusion UI v2.1.0"}),C(Om,{className:"status-display"})]})}const ka=e=>{let t;const n=new Set,r=(s,a)=>{const c=typeof s=="function"?s(t):s;if(c!==t){const p=t;t=(a!=null?a:typeof c!="object")?c:Object.assign({},t,c),n.forEach(m=>m(t,p))}},i=()=>t,u={setState:r,getState:i,subscribe:s=>(n.add(s),()=>n.delete(s)),destroy:()=>n.clear()};return t=e(r,i,u),u},Rm=e=>e?ka(e):ka;var Jf={exports:{}},bf={};/** + * @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 tl=j.exports,Nm=Mu.exports;function Im(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var Tm=typeof Object.is=="function"?Object.is:Im,Dm=Nm.useSyncExternalStore,Mm=tl.useRef,Fm=tl.useEffect,zm=tl.useMemo,Lm=tl.useDebugValue;bf.useSyncExternalStoreWithSelector=function(e,t,n,r,i){var l=Mm(null);if(l.current===null){var o={hasValue:!1,value:null};l.current=o}else o=l.current;l=zm(function(){function s(v){if(!a){if(a=!0,c=v,v=r(v),i!==void 0&&o.hasValue){var S=o.value;if(i(S,v))return p=S}return p=v}if(S=p,Tm(c,v))return S;var y=r(v);return i!==void 0&&i(S,y)?S:(c=v,p=y)}var a=!1,c,p,m=n===void 0?null:n;return[function(){return s(t())},m===null?void 0:function(){return s(m())}]},[t,n,r,i]);var u=Dm(e,l[0],l[1]);return Fm(function(){o.hasValue=!0,o.value=u},[u]),Lm(u),u};(function(e){e.exports=bf})(Jf);const jm=xa(Jf.exports),{useSyncExternalStoreWithSelector:Am}=jm;function Um(e,t=e.getState,n){const r=Am(e.subscribe,e.getState,e.getServerState||e.getState,t,n);return j.exports.useDebugValue(r),r}const Ca=e=>{const t=typeof e=="function"?Rm(e):e,n=(r,i)=>Um(t,r,i);return Object.assign(n,t),n},Qm=e=>e?Ca(e):Ca;var ed=Qm;const $m=(e,t={})=>(n,r,i)=>{const{enabled:l,anonymousActionType:o,...u}=t;let s;try{s=(l!=null?l:({BASE_URL:"/",MODE:"production",DEV:!1,PROD:!0}&&"production")!=="production")&&window.__REDUX_DEVTOOLS_EXTENSION__}catch{}if(!s)return({BASE_URL:"/",MODE:"production",DEV:!1,PROD:!0}&&"production")!=="production"&&l&&console.warn("[zustand devtools middleware] Please install/enable Redux devtools extension"),e(n,r,i);const a=s.connect(u);let c=!0;i.setState=(v,S,y)=>{const O=n(v,S);return c&&a.send(y===void 0?{type:o||"anonymous"}:typeof y=="string"?{type:y}:y,r()),O};const p=(...v)=>{const S=c;c=!1,n(...v),c=S},m=e(i.setState,r,i);if(a.init(m),i.dispatchFromDevtools&&typeof i.dispatch=="function"){let v=!1;const S=i.dispatch;i.dispatch=(...y)=>{({BASE_URL:"/",MODE:"production",DEV:!1,PROD:!0}&&"production")!=="production"&&y[0].type==="__setState"&&!v&&(console.warn('[zustand devtools middleware] "__setState" action type is reserved to set state from the devtools. Avoid using it.'),v=!0),S(...y)}}return a.subscribe(v=>{var S;switch(v.type){case"ACTION":if(typeof v.payload!="string"){console.error("[zustand devtools middleware] Unsupported action format");return}return Ll(v.payload,y=>{if(y.type==="__setState"){p(y.state);return}!i.dispatchFromDevtools||typeof i.dispatch=="function"&&i.dispatch(y)});case"DISPATCH":switch(v.payload.type){case"RESET":return p(m),a.init(i.getState());case"COMMIT":return a.init(i.getState());case"ROLLBACK":return Ll(v.state,y=>{p(y),a.init(i.getState())});case"JUMP_TO_STATE":case"JUMP_TO_ACTION":return Ll(v.state,y=>{p(y)});case"IMPORT_STATE":{const{nextLiftedState:y}=v.payload,O=(S=y.computedStates.slice(-1)[0])==null?void 0:S.state;if(!O)return;p(O),a.send(null,y);return}case"PAUSE_RECORDING":return c=!c}return}}),m},Vm=$m,Ll=(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)},ke=ed(Vm((e,t)=>({imageOptions:{prompt:"a photograph of an astronaut riding a horse",tags:[],imgSrc:"",seed:0,isSeedRandom:!0,numberOfImages:1,parallelRequests:1,width:512,height:512,stepCount:50,guidence:75,promptStrength:8,autoSave:!1,diskPath:"",soundOnComplete:!1,useTurboMode:!1,useCPU:!1,useFullPrecision:!1},setPrompt:n=>{e(Ft(r=>{r.imageOptions.prompt=n}))},toggleTag:n=>{e(Ft(r=>{const i=r.imageOptions.tags.indexOf(n);i>-1?r.imageOptions.tags.splice(i,1):r.imageOptions.tags.push(n)}))},hasTag:n=>t().imageOptions.tags.indexOf(n)>-1,selectedTags:()=>t().imageOptions.tags,setImageOptions:n=>{e(Ft(r=>{r.imageOptions={...r.imageOptions,...n}}))},uiOptions:{advancedSettingsIsOpen:localStorage.getItem("ui:advancedSettingsIsOpen")==="true",imageModifierIsOpen:!1},toggleAdvancedSettingsIsOpen:()=>{e(Ft(n=>{n.uiOptions.advancedSettingsIsOpen=!n.uiOptions.advancedSettingsIsOpen,localStorage.setItem("ui:advancedSettingsIsOpen",n.uiOptions.advancedSettingsIsOpen)}))},toggleImageModifiersIsOpen:()=>{e(Ft(n=>{n.uiOptions.imageModifierIsOpen=!n.uiOptions.imageModifierIsOpen,localStorage.setItem("ui:imageModifierIsOpen",n.uiOptions.imageModifierIsOpen)}))}}))),zi=ed((e,t)=>({images:new Array,completedImageIds:new Array,addNewImage:(n,r)=>{e(Ft(i=>{let{seed:l}=r;r.isSeedRandom&&(l=Math.floor(Math.random()*1e4)),i.images.push({id:n,options:{...r,seed:l}})}))},hasQueuedImages:()=>t().images.length>0,firstInQueue:()=>t().images[0]||[],removeFirstInQueue:()=>{e(Ft(n=>{const r=n.images.shift();n.completedImageIds.push(r.id)}))}}));let Br;const Bm=new Uint8Array(16);function Hm(){if(!Br&&(Br=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!Br))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Br(Bm)}const re=[];for(let e=0;e<256;++e)re.push((e+256).toString(16).slice(1));function Wm(e,t=0){return(re[e[t+0]]+re[e[t+1]]+re[e[t+2]]+re[e[t+3]]+"-"+re[e[t+4]]+re[e[t+5]]+"-"+re[e[t+6]]+re[e[t+7]]+"-"+re[e[t+8]]+re[e[t+9]]+"-"+re[e[t+10]]+re[e[t+11]]+re[e[t+12]]+re[e[t+13]]+re[e[t+14]]+re[e[t+15]]).toLowerCase()}const Km=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),Ea={randomUUID:Km};function qm(e,t,n){if(Ea.randomUUID&&!t&&!e)return Ea.randomUUID();e=e||{};const r=e.random||(e.rng||Hm)();if(r[6]=r[6]&15|64,r[8]=r[8]&63|128,t){n=n||0;for(let i=0;i<16;++i)t[n+i]=r[i];return t}return Wm(r)}function Gm(){const e=ke(r=>r.imageOptions),t=zi(r=>r.addNewImage);return C("button",{onClick:()=>{t(qm(),e)},children:"Make"})}const Pa=[{value:128,label:"128 (*)"},{value:192,label:"192"},{value:256,label:"256 (*)"},{value:320,label:"320"},{value:384,label:"384"},{value:448,label:"448"},{value:512,label:"512 (*)"},{value:576,label:"576"},{value:640,label:"640"},{value:704,label:"704"},{value:768,label:"768 (*)"},{value:832,label:"832"},{value:896,label:"896"},{value:960,label:"960"},{value:1024,label:"1024 (*)"}];function Ym(){const e=ke(n=>n.setImageOptions),t=ke(n=>n.imageOptions);return N("ul",{id:"editor-settings-entries",children:[N("li",{children:[N("label",{children:["Seed:",C("input",{size:10,value:t.seed?t.seed:"",onChange:n=>e({seed:Number(n.target.value)}),disabled:t.isSeedRandom,placeholder:"random"})]}),N("label",{children:[C("input",{type:"checkbox",checked:t.isSeedRandom,onChange:n=>e({isSeedRandom:n.target.checked})})," ","Random Image"]})]}),N("li",{children:[N("label",{children:["Number of images to make:"," ",C("input",{type:"number",value:t.numberOfImages,onChange:n=>e({numberOfImages:Number(n.target.value)}),size:4})]}),N("label",{children:["Generate in parallel:",C("input",{type:"number",value:t.parallelRequests,onChange:n=>e({parallelRequests:Number(n.target.value)}),size:4})]})," ","(images at once)"]}),C("li",{children:N("label",{children:["Width:",C("select",{value:t.width,onChange:n=>e({width:Number(n.target.value)}),children:Pa.map(n=>C("option",{value:n.value,children:n.label},"width-option_"+n.value))})]})}),C("li",{children:N("label",{children:["Height:",C("select",{value:t.height,onChange:n=>e({height:Number(n.target.value)}),children:Pa.map(n=>C("option",{value:n.value,children:n.label},"height-option_"+n.value))})]})}),C("li",{children:N("label",{children:["Number of inference steps:"," ",C("input",{value:t.stepCount,onChange:n=>e({stepCount:Number(n.target.value)}),size:4})]})}),N("li",{children:[N("label",{children:["Guidance Scale:",C("input",{value:t.guidence,onChange:n=>e({guidence:Number(n.target.value)}),type:"range",min:"10",max:"200"})]}),C("span",{children:t.guidence/10})]}),N("li",{className:"mb-4",children:[N("label",{children:["Prompt Strength:"," ",C("input",{value:t.promptStrength,onChange:n=>e({promptStrength:Number(n.target.value)}),type:"range",min:"0",max:"10"})]}),C("span",{children:t.promptStrength/10})]}),N("li",{children:[N("label",{children:[C("input",{checked:t.autoSave,onChange:n=>e({autoSave:n.target.checked}),type:"checkbox"}),"Automatically save to"," "]}),N("label",{children:[C("input",{value:t.diskPath,onChange:n=>e({diskPath:n.target.value}),size:40,disabled:!t.autoSave}),C("span",{className:"visually-hidden",children:"Path on disk where images will be saved"})]})]}),C("li",{children:N("label",{children:[C("input",{checked:t.soundOnComplete,onChange:n=>e({soundOnComplete:n.target.checked}),type:"checkbox"}),"Play sound on task completion"]})}),C("li",{children:N("label",{children:[C("input",{checked:t.useTurboMode,onChange:n=>e({useTurboMode:n.target.checked}),type:"checkbox"}),"Turbo mode (generates images faster, but uses an additional 1 GB of GPU memory)"]})}),C("li",{children:N("label",{children:[C("input",{type:"checkbox",checked:t.useCPU,onChange:n=>e({useCPU:n.target.checked})}),"Use CPU instead of GPU (warning: this will be *very* slow)"]})}),C("li",{children:N("label",{children:[C("input",{checked:t.useFullPrecision,onChange:n=>e({useFullPrecision:n.target.checked}),type:"checkbox"}),"Use full precision (for GPU-only. warning: this will consume more VRAM)"]})})]})}function Xm(){const e=ke(n=>n.uiOptions.advancedSettingsIsOpen),t=ke(n=>n.toggleAdvancedSettingsIsOpen);return N("div",{className:"panel-box",children:[C("button",{type:"button",onClick:t,className:"panel-box-toggle-btn",children:C("h4",{children:"Advanced Settings"})}),e&&C(Ym,{})]})}function td({name:e}){const t=ke(i=>i.hasTag(e))?"selected":"",n=ke(i=>i.toggleTag);console.log("has tag",t);const r=()=>{n(e)};return C("div",{className:"modifierTag "+t,onClick:r,children:C("p",{children:e})})}function Zm({tags:e}){return ke(t=>t.setImageOptions),ke(t=>t.imageOptions),C("ul",{className:"modifier-list",children:e.map(t=>C("li",{children:C(td,{name:t})},t))})}function Jm({title:e,tags:t}){const[n,r]=j.exports.useState(!1);return N("div",{className:"modifier-grouping",children:[C("div",{className:"modifier-grouping-header",onClick:()=>{r(!n)},children:C("h5",{children:e})}),n&&C(Zm,{tags:t})]})}function bm(){const{status:e,data:t}=ju(["modifications"],Em),n=ke(l=>l.uiOptions.imageModifierIsOpen),r=ke(l=>l.toggleImageModifiersIsOpen);return N("div",{className:"panel-box",children:[C("button",{type:"button",onClick:()=>{r()},className:"panel-box-toggle-btn",children:C("h4",{children:"Image Modifiers (art styles, tags, ect)"})}),n&&t.map((l,o)=>C(Jm,{title:l[0],tags:l[1]},l[0]))]})}function ev(){const e=ke(i=>i.imageOptions.prompt),t=ke(i=>i.setPrompt),n=ke(i=>i.selectedTags());return N("div",{className:"create-panel",children:[N("div",{className:"basic-create",children:[N("div",{className:"prompt",children:[C("p",{children:"Prompt "}),C("textarea",{value:e,onChange:i=>{console.log("handlePromptChange",i.target.value),t(i.target.value)}})]}),N("div",{className:"seed-image",children:[C("p",{children:"Seed Image"}),C("input",{type:"file",accept:"image/*"})]}),C(Gm,{}),N("div",{className:"selected-tags",children:[C("p",{children:"Active Tags"}),C("ul",{children:n.map(i=>C("li",{children:C(td,{name:i})},i))})]})]}),N("div",{className:"advanced-create",children:[C(Xm,{}),C(bm,{})]})]})}function nd({imageData:e}){return N("div",{className:"generated-image",children:[C("p",{children:"Your image"}),C("img",{src:e,alt:"generated"})]})}function tv(){const[e,t]=j.exports.useState(null),{id:n,options:r}=zi(u=>u.firstInQueue());console.log("CurrentImage id",n);const i=zi(u=>u.removeFirstInQueue),{status:l,data:o}=ju([Zf,n],()=>Pm(r),{enabled:n!==void 0});return j.exports.useEffect(()=>{l==="success"&&(console.log("success"),o.status==="succeeded"&&(console.log("succeeded"),t(o.output[0].data),i()))},[l,o,i]),N("div",{className:"current-display",children:[C("h1",{children:"Current Image"}),e&&C(nd,{imageData:e})]})}function nv(){const e=qf(),[t,n]=j.exports.useState([]),r=zi(i=>i.completedImageIds);return j.exports.useEffect(()=>{const i=r.map(l=>e.getQueryData([Zf,l]));if(i.length>0){debugger;n(i.map((l,o)=>{if(l!==void 0)return{id:r[o],data:l.output[0].data}}).reverse())}else n([])},[n,e,r]),N("div",{className:"display-panel",children:[C("h1",{children:"Display Panel"}),N("div",{children:[C(tv,{}),t.map((i,l)=>l==0?null:i!==void 0?C(nd,{imageData:i.data},i.id):(console.warn("image is undefined",i,l),null))]})]})}function rv(){return N("div",{id:"footer",className:"panel-box",children:[N("p",{children:["If you found this project useful and want to help keep it alive, please ",C("a",{href:"https://ko-fi.com/cmdr2_stablediffusion_ui",target:"_blank",children:C("img",{src:"./kofi.png",id:"coffeeButton"})})," to help cover the cost of development and maintenance! Thank you for your support!"]}),N("p",{children:["Please feel free to join the ",C("a",{href:"https://discord.com/invite/u9yhsFmEkB",target:"_blank",children:"discord community"})," or ",C("a",{href:"https://github.com/cmdr2/stable-diffusion-ui/issues",target:"_blank",children:"file an issue"})," if you have any problems or suggestions in using this interface."]}),N("div",{id:"footer-legal",children:[N("p",{children:[C("b",{children:"Disclaimer:"})," The authors of this project are not responsible for any content generated using this interface."]}),N("p",{children:["This license of this software forbids you from sharing any content that violates any laws, produce any harm to a person, disseminate any personal information that would be meant for harm, ",C("br",{}),"spread misinformation and target vulnerable groups. For the full list of restrictions please read ",C("a",{href:"https://github.com/cmdr2/stable-diffusion-ui/blob/main/LICENSE",target:"_blank",children:"the license"}),"."]}),C("p",{children:"By using this software, you consent to the terms and conditions of the license."})]})]})}function iv(){return console.log("App render"),N("div",{className:"App",children:[C("header",{className:"header-layout",children:C(_m,{})}),C("nav",{className:"create-layout",children:C(ev,{})}),C("main",{className:"display-layout",children:C(nv,{})}),C("footer",{className:"footer-layout",children:C(rv,{})})]})}const lv=new Jh({defaultOptions:{queries:{refetchOnWindowFocus:!1,refetchOnReconnect:!1,refetchOnMount:!1,staleTime:1/0}}});mm();jl.createRoot(document.getElementById("root")).render(C(Sd.StrictMode,{children:N(tm,{client:lv,children:[C(iv,{}),C(sm,{initialIsOpen:!0})]})})); diff --git a/ui/frontend/dist/kofi.png b/ui/frontend/dist/kofi.png new file mode 100644 index 00000000..0fdebbaa Binary files /dev/null and b/ui/frontend/dist/kofi.png differ diff --git a/ui/frontend/dist/modifiers.json b/ui/frontend/dist/modifiers.json new file mode 100644 index 00000000..ca18cc07 --- /dev/null +++ b/ui/frontend/dist/modifiers.json @@ -0,0 +1,151 @@ +[ + [ + "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/server.py b/ui/server.py index c7c2766c..e3b2fba0 100644 --- a/ui/server.py +++ b/ui/server.py @@ -18,11 +18,24 @@ from fastapi import FastAPI, HTTPException from starlette.responses import FileResponse, StreamingResponse from pydantic import BaseModel import logging - +# this is needed for development. +from fastapi.middleware.cors import CORSMiddleware from sd_internal import Request, Response app = FastAPI() +# we need to be able to run a local server for the UI (9001) +# and still be able to hit our python port (9000) +origins = ["*"] +app.add_middleware( + CORSMiddleware, + allow_origins=origins, + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + + model_loaded = False model_is_loading = False @@ -58,7 +71,18 @@ class SetAppConfigRequest(BaseModel): @app.get('/') def read_root(): headers = {"Cache-Control": "no-cache, no-store, must-revalidate", "Pragma": "no-cache", "Expires": "0"} - return FileResponse(os.path.join(SD_UI_DIR, 'index.html'), headers=headers) + #return FileResponse(os.path.join(SD_UI_DIR, 'index.html'), headers=headers) + return FileResponse(os.path.join(SD_UI_DIR,'frontend/dist/index.html'), headers=headers) + +# then get the js files +@app.get('/index.js') +def read_scripts(): + return FileResponse(os.path.join(SD_UI_DIR, 'frontend/dist/index.js')) + +#then get the css files +@app.get('/index.css') +def read_styles(): + return FileResponse(os.path.join(SD_UI_DIR, 'frontend/dist/index.css')) @app.get('/ping') async def ping(): @@ -180,13 +204,15 @@ def getAppConfig(): print(traceback.format_exc()) return HTTPException(status_code=500, detail=str(e)) -@app.get('/media/ding.mp3') +# moved these to the root for easier pathing +# TODO: change the vite config for public files +@app.get('/ding.mp3') def read_ding(): - return FileResponse(os.path.join(SD_UI_DIR, 'media/ding.mp3')) + return FileResponse(os.path.join(SD_UI_DIR, 'frontend/dist/ding.mp3')) -@app.get('/media/kofi.png') +@app.get('/kofi.png') def read_modifiers(): - return FileResponse(os.path.join(SD_UI_DIR, 'media/kofi.png')) + return FileResponse(os.path.join(SD_UI_DIR, 'frontend/dist/kofi.png')) @app.get('/modifiers.json') def read_modifiers():