From 003a104406fbf9ec4109dd7ec6d287e9c02ad825 Mon Sep 17 00:00:00 2001 From: Qing Date: Sat, 25 Mar 2023 13:39:56 +0800 Subject: [PATCH] plugins add dropdown menu; realesrgan support 2x 4x --- lama_cleaner/app/package.json | 1 + lama_cleaner/app/pnpm-lock.yaml | 696 +++++++++++++++++- lama_cleaner/app/src/adapters/inpainting.ts | 4 + .../app/src/components/Editor/Editor.tsx | 16 +- .../app/src/components/Plugins/Plugins.scss | 193 +++-- .../app/src/components/Plugins/Plugins.tsx | 106 ++- lama_cleaner/app/src/styles/_Colors.scss | 1 + lama_cleaner/app/src/styles/_ColorsDark.scss | 1 + lama_cleaner/plugins/realesrgan.py | 8 +- 9 files changed, 877 insertions(+), 149 deletions(-) diff --git a/lama_cleaner/app/package.json b/lama_cleaner/app/package.json index c456638..aa3ba76 100644 --- a/lama_cleaner/app/package.json +++ b/lama_cleaner/app/package.json @@ -9,6 +9,7 @@ "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", "@radix-ui/colors": "^0.1.8", "@radix-ui/react-dialog": "0.1.8-rc.25", + "@radix-ui/react-dropdown-menu": "^2.0.4", "@radix-ui/react-icons": "^1.1.1", "@radix-ui/react-popover": "^1.0.0", "@radix-ui/react-scroll-area": "^1.0.2", diff --git a/lama_cleaner/app/pnpm-lock.yaml b/lama_cleaner/app/pnpm-lock.yaml index d6857bb..0fc1920 100644 --- a/lama_cleaner/app/pnpm-lock.yaml +++ b/lama_cleaner/app/pnpm-lock.yaml @@ -6,6 +6,7 @@ specifiers: '@pmmmwh/react-refresh-webpack-plugin': ^0.5.3 '@radix-ui/colors': ^0.1.8 '@radix-ui/react-dialog': 0.1.8-rc.25 + '@radix-ui/react-dropdown-menu': ^2.0.4 '@radix-ui/react-icons': ^1.1.1 '@radix-ui/react-popover': ^1.0.0 '@radix-ui/react-scroll-area': ^1.0.2 @@ -102,6 +103,7 @@ dependencies: '@pmmmwh/react-refresh-webpack-plugin': registry.npmmirror.com/@pmmmwh/react-refresh-webpack-plugin/0.5.10_unmakpayn7vcxadrrsbqlrpehy '@radix-ui/colors': registry.npmmirror.com/@radix-ui/colors/0.1.8 '@radix-ui/react-dialog': registry.npmmirror.com/@radix-ui/react-dialog/0.1.8-rc.25_zsjcj4gvi24ks76nprapl4hsmq + '@radix-ui/react-dropdown-menu': 2.0.4_zsjcj4gvi24ks76nprapl4hsmq '@radix-ui/react-icons': registry.npmmirror.com/@radix-ui/react-icons/1.1.1_react@17.0.2 '@radix-ui/react-popover': registry.npmmirror.com/@radix-ui/react-popover/1.0.3_zsjcj4gvi24ks76nprapl4hsmq '@radix-ui/react-scroll-area': registry.npmmirror.com/@radix-ui/react-scroll-area/1.0.2_sfoxds7t5ydpegc3knd667wn6m @@ -113,7 +115,7 @@ dependencies: '@svgr/webpack': registry.npmmirror.com/@svgr/webpack/5.5.0 '@testing-library/jest-dom': registry.npmmirror.com/@testing-library/jest-dom/5.16.5 '@testing-library/react': registry.npmmirror.com/@testing-library/react/12.1.5_sfoxds7t5ydpegc3knd667wn6m - '@testing-library/user-event': registry.npmmirror.com/@testing-library/user-event/13.5.0_yxlyej73nftwmh2fiao7paxmlm + '@testing-library/user-event': registry.npmmirror.com/@testing-library/user-event/13.5.0 '@types/flexsearch': registry.npmmirror.com/@types/flexsearch/0.7.3 '@types/jest': registry.npmmirror.com/@types/jest/27.5.2 '@types/lodash': registry.npmmirror.com/@types/lodash/4.14.191 @@ -134,7 +136,7 @@ dependencies: dotenv: registry.npmmirror.com/dotenv/10.0.0 dotenv-expand: registry.npmmirror.com/dotenv-expand/5.1.0 eslint: registry.npmmirror.com/eslint/8.32.0 - eslint-config-react-app: registry.npmmirror.com/eslint-config-react-app/7.0.1_yyahsyh3owwgfgz2uzkbdwzzie + eslint-config-react-app: registry.npmmirror.com/eslint-config-react-app/7.0.1_hvqfsct7uiljobdhzxotopon4u eslint-webpack-plugin: registry.npmmirror.com/eslint-webpack-plugin/3.2.0_ozjdf2ywoi3qlyjpudft42m7aq file-loader: registry.npmmirror.com/file-loader/6.2.0_webpack@5.75.0 flexsearch: registry.npmmirror.com/flexsearch/0.7.21 @@ -183,10 +185,10 @@ dependencies: workbox-webpack-plugin: registry.npmmirror.com/workbox-webpack-plugin/6.5.4_webpack@5.75.0 devDependencies: - '@typescript-eslint/eslint-plugin': registry.npmmirror.com/@typescript-eslint/eslint-plugin/5.49.0_iu322prlnwsygkcra5kbpy22si + '@typescript-eslint/eslint-plugin': registry.npmmirror.com/@typescript-eslint/eslint-plugin/5.49.0_7uibuqfxkfaozanbtbziikiqje eslint-config-airbnb: registry.npmmirror.com/eslint-config-airbnb/18.2.1_td5yecidacttadzxcsbd5t7tli eslint-config-prettier: registry.npmmirror.com/eslint-config-prettier/8.6.0_eslint@8.32.0 - eslint-plugin-import: registry.npmmirror.com/eslint-plugin-import/2.27.5_6savw6y3b7jng6f64kgkyoij64 + eslint-plugin-import: registry.npmmirror.com/eslint-plugin-import/2.27.5_eslint@8.32.0 eslint-plugin-jsx-a11y: registry.npmmirror.com/eslint-plugin-jsx-a11y/6.7.1_eslint@8.32.0 eslint-plugin-prettier: registry.npmmirror.com/eslint-plugin-prettier/4.2.1_cn4lalcyadplruoxa5mhp7j3dq eslint-plugin-react: registry.npmmirror.com/eslint-plugin-react/7.32.1_eslint@8.32.0 @@ -196,6 +198,549 @@ devDependencies: packages: + /@babel/runtime/7.20.13: + resolution: {integrity: sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.11 + dev: false + + /@floating-ui/core/0.7.3: + resolution: {integrity: sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg==} + dev: false + + /@floating-ui/dom/0.5.4: + resolution: {integrity: sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg==} + dependencies: + '@floating-ui/core': 0.7.3 + dev: false + + /@floating-ui/react-dom/0.7.2_zsjcj4gvi24ks76nprapl4hsmq: + resolution: {integrity: sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + '@floating-ui/dom': 0.5.4 + react: registry.npmmirror.com/react/17.0.2 + react-dom: registry.npmmirror.com/react-dom/17.0.2_react@17.0.2 + use-isomorphic-layout-effect: 1.1.2_h7fc2el62uaa77gho3xhys6ola + transitivePeerDependencies: + - '@types/react' + dev: false + + /@radix-ui/primitive/1.0.0: + resolution: {integrity: sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==} + dependencies: + '@babel/runtime': 7.20.13 + dev: false + + /@radix-ui/react-arrow/1.0.2_sfoxds7t5ydpegc3knd667wn6m: + resolution: {integrity: sha512-fqYwhhI9IarZ0ll2cUSfKuXHlJK0qE4AfnRrPBbRwEH/4mGQn04/QFGomLi8TXWIdv9WJk//KgGm+aDxVIr1wA==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + '@radix-ui/react-primitive': 1.0.2_sfoxds7t5ydpegc3knd667wn6m + react: registry.npmmirror.com/react/17.0.2 + react-dom: registry.npmmirror.com/react-dom/17.0.2_react@17.0.2 + dev: false + + /@radix-ui/react-collection/1.0.2_sfoxds7t5ydpegc3knd667wn6m: + resolution: {integrity: sha512-s8WdQQ6wNXpaxdZ308KSr8fEWGrg4un8i4r/w7fhiS4ElRNjk5rRcl0/C6TANG2LvLOGIxtzo/jAg6Qf73TEBw==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + '@radix-ui/react-compose-refs': 1.0.0_react@17.0.2 + '@radix-ui/react-context': 1.0.0_react@17.0.2 + '@radix-ui/react-primitive': 1.0.2_sfoxds7t5ydpegc3knd667wn6m + '@radix-ui/react-slot': 1.0.1_react@17.0.2 + react: registry.npmmirror.com/react/17.0.2 + react-dom: registry.npmmirror.com/react-dom/17.0.2_react@17.0.2 + dev: false + + /@radix-ui/react-compose-refs/1.0.0_react@17.0.2: + resolution: {integrity: sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + react: registry.npmmirror.com/react/17.0.2 + dev: false + + /@radix-ui/react-context/1.0.0_react@17.0.2: + resolution: {integrity: sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + react: registry.npmmirror.com/react/17.0.2 + dev: false + + /@radix-ui/react-direction/1.0.0_react@17.0.2: + resolution: {integrity: sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + react: registry.npmmirror.com/react/17.0.2 + dev: false + + /@radix-ui/react-dismissable-layer/1.0.3_sfoxds7t5ydpegc3knd667wn6m: + resolution: {integrity: sha512-nXZOvFjOuHS1ovumntGV7NNoLaEp9JEvTht3MBjP44NSW5hUKj/8OnfN3+8WmB+CEhN44XaGhpHoSsUIEl5P7Q==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + '@radix-ui/primitive': 1.0.0 + '@radix-ui/react-compose-refs': 1.0.0_react@17.0.2 + '@radix-ui/react-primitive': 1.0.2_sfoxds7t5ydpegc3knd667wn6m + '@radix-ui/react-use-callback-ref': 1.0.0_react@17.0.2 + '@radix-ui/react-use-escape-keydown': 1.0.2_react@17.0.2 + react: registry.npmmirror.com/react/17.0.2 + react-dom: registry.npmmirror.com/react-dom/17.0.2_react@17.0.2 + dev: false + + /@radix-ui/react-dropdown-menu/2.0.4_zsjcj4gvi24ks76nprapl4hsmq: + resolution: {integrity: sha512-y6AT9+MydyXcByivdK1+QpjWoKaC7MLjkS/cH1Q3keEyMvDkiY85m8o2Bi6+Z1PPUlCsMULopxagQOSfN0wahg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + '@radix-ui/primitive': 1.0.0 + '@radix-ui/react-compose-refs': 1.0.0_react@17.0.2 + '@radix-ui/react-context': 1.0.0_react@17.0.2 + '@radix-ui/react-id': 1.0.0_react@17.0.2 + '@radix-ui/react-menu': 2.0.4_zsjcj4gvi24ks76nprapl4hsmq + '@radix-ui/react-primitive': 1.0.2_sfoxds7t5ydpegc3knd667wn6m + '@radix-ui/react-use-controllable-state': 1.0.0_react@17.0.2 + react: registry.npmmirror.com/react/17.0.2 + react-dom: registry.npmmirror.com/react-dom/17.0.2_react@17.0.2 + transitivePeerDependencies: + - '@types/react' + dev: false + + /@radix-ui/react-focus-guards/1.0.0_react@17.0.2: + resolution: {integrity: sha512-UagjDk4ijOAnGu4WMUPj9ahi7/zJJqNZ9ZAiGPp7waUWJO0O1aWXi/udPphI0IUjvrhBsZJGSN66dR2dsueLWQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + react: registry.npmmirror.com/react/17.0.2 + dev: false + + /@radix-ui/react-focus-scope/1.0.2_sfoxds7t5ydpegc3knd667wn6m: + resolution: {integrity: sha512-spwXlNTfeIprt+kaEWE/qYuYT3ZAqJiAGjN/JgdvgVDTu8yc+HuX+WOWXrKliKnLnwck0F6JDkqIERncnih+4A==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + '@radix-ui/react-compose-refs': 1.0.0_react@17.0.2 + '@radix-ui/react-primitive': 1.0.2_sfoxds7t5ydpegc3knd667wn6m + '@radix-ui/react-use-callback-ref': 1.0.0_react@17.0.2 + react: registry.npmmirror.com/react/17.0.2 + react-dom: registry.npmmirror.com/react-dom/17.0.2_react@17.0.2 + dev: false + + /@radix-ui/react-id/1.0.0_react@17.0.2: + resolution: {integrity: sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + '@radix-ui/react-use-layout-effect': 1.0.0_react@17.0.2 + react: registry.npmmirror.com/react/17.0.2 + dev: false + + /@radix-ui/react-menu/2.0.4_zsjcj4gvi24ks76nprapl4hsmq: + resolution: {integrity: sha512-mzKR47tZ1t193trEqlQoJvzY4u9vYfVH16ryBrVrCAGZzkgyWnMQYEZdUkM7y8ak9mrkKtJiqB47TlEnubeOFQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + '@radix-ui/primitive': 1.0.0 + '@radix-ui/react-collection': 1.0.2_sfoxds7t5ydpegc3knd667wn6m + '@radix-ui/react-compose-refs': 1.0.0_react@17.0.2 + '@radix-ui/react-context': 1.0.0_react@17.0.2 + '@radix-ui/react-direction': 1.0.0_react@17.0.2 + '@radix-ui/react-dismissable-layer': 1.0.3_sfoxds7t5ydpegc3knd667wn6m + '@radix-ui/react-focus-guards': 1.0.0_react@17.0.2 + '@radix-ui/react-focus-scope': 1.0.2_sfoxds7t5ydpegc3knd667wn6m + '@radix-ui/react-id': 1.0.0_react@17.0.2 + '@radix-ui/react-popper': 1.1.1_zsjcj4gvi24ks76nprapl4hsmq + '@radix-ui/react-portal': 1.0.2_sfoxds7t5ydpegc3knd667wn6m + '@radix-ui/react-presence': 1.0.0_sfoxds7t5ydpegc3knd667wn6m + '@radix-ui/react-primitive': 1.0.2_sfoxds7t5ydpegc3knd667wn6m + '@radix-ui/react-roving-focus': 1.0.3_sfoxds7t5ydpegc3knd667wn6m + '@radix-ui/react-slot': 1.0.1_react@17.0.2 + '@radix-ui/react-use-callback-ref': 1.0.0_react@17.0.2 + aria-hidden: 1.2.2_h7fc2el62uaa77gho3xhys6ola + react: registry.npmmirror.com/react/17.0.2 + react-dom: registry.npmmirror.com/react-dom/17.0.2_react@17.0.2 + react-remove-scroll: 2.5.5_h7fc2el62uaa77gho3xhys6ola + transitivePeerDependencies: + - '@types/react' + dev: false + + /@radix-ui/react-popper/1.1.1_zsjcj4gvi24ks76nprapl4hsmq: + resolution: {integrity: sha512-keYDcdMPNMjSC8zTsZ8wezUMiWM9Yj14wtF3s0PTIs9srnEPC9Kt2Gny1T3T81mmSeyDjZxsD9N5WCwNNb712w==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + '@floating-ui/react-dom': 0.7.2_zsjcj4gvi24ks76nprapl4hsmq + '@radix-ui/react-arrow': 1.0.2_sfoxds7t5ydpegc3knd667wn6m + '@radix-ui/react-compose-refs': 1.0.0_react@17.0.2 + '@radix-ui/react-context': 1.0.0_react@17.0.2 + '@radix-ui/react-primitive': 1.0.2_sfoxds7t5ydpegc3knd667wn6m + '@radix-ui/react-use-callback-ref': 1.0.0_react@17.0.2 + '@radix-ui/react-use-layout-effect': 1.0.0_react@17.0.2 + '@radix-ui/react-use-rect': 1.0.0_react@17.0.2 + '@radix-ui/react-use-size': 1.0.0_react@17.0.2 + '@radix-ui/rect': 1.0.0 + react: registry.npmmirror.com/react/17.0.2 + react-dom: registry.npmmirror.com/react-dom/17.0.2_react@17.0.2 + transitivePeerDependencies: + - '@types/react' + dev: false + + /@radix-ui/react-portal/1.0.2_sfoxds7t5ydpegc3knd667wn6m: + resolution: {integrity: sha512-swu32idoCW7KA2VEiUZGBSu9nB6qwGdV6k6HYhUoOo3M1FFpD+VgLzUqtt3mwL1ssz7r2x8MggpLSQach2Xy/Q==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + '@radix-ui/react-primitive': 1.0.2_sfoxds7t5ydpegc3knd667wn6m + react: registry.npmmirror.com/react/17.0.2 + react-dom: registry.npmmirror.com/react-dom/17.0.2_react@17.0.2 + dev: false + + /@radix-ui/react-presence/1.0.0_sfoxds7t5ydpegc3knd667wn6m: + resolution: {integrity: sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + '@radix-ui/react-compose-refs': 1.0.0_react@17.0.2 + '@radix-ui/react-use-layout-effect': 1.0.0_react@17.0.2 + react: registry.npmmirror.com/react/17.0.2 + react-dom: registry.npmmirror.com/react-dom/17.0.2_react@17.0.2 + dev: false + + /@radix-ui/react-primitive/1.0.2_sfoxds7t5ydpegc3knd667wn6m: + resolution: {integrity: sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + '@radix-ui/react-slot': 1.0.1_react@17.0.2 + react: registry.npmmirror.com/react/17.0.2 + react-dom: registry.npmmirror.com/react-dom/17.0.2_react@17.0.2 + dev: false + + /@radix-ui/react-roving-focus/1.0.3_sfoxds7t5ydpegc3knd667wn6m: + resolution: {integrity: sha512-stjCkIoMe6h+1fWtXlA6cRfikdBzCLp3SnVk7c48cv/uy3DTGoXhN76YaOYUJuy3aEDvDIKwKR5KSmvrtPvQPQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + '@radix-ui/primitive': 1.0.0 + '@radix-ui/react-collection': 1.0.2_sfoxds7t5ydpegc3knd667wn6m + '@radix-ui/react-compose-refs': 1.0.0_react@17.0.2 + '@radix-ui/react-context': 1.0.0_react@17.0.2 + '@radix-ui/react-direction': 1.0.0_react@17.0.2 + '@radix-ui/react-id': 1.0.0_react@17.0.2 + '@radix-ui/react-primitive': 1.0.2_sfoxds7t5ydpegc3knd667wn6m + '@radix-ui/react-use-callback-ref': 1.0.0_react@17.0.2 + '@radix-ui/react-use-controllable-state': 1.0.0_react@17.0.2 + react: registry.npmmirror.com/react/17.0.2 + react-dom: registry.npmmirror.com/react-dom/17.0.2_react@17.0.2 + dev: false + + /@radix-ui/react-slot/1.0.1_react@17.0.2: + resolution: {integrity: sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + '@radix-ui/react-compose-refs': 1.0.0_react@17.0.2 + react: registry.npmmirror.com/react/17.0.2 + dev: false + + /@radix-ui/react-use-callback-ref/1.0.0_react@17.0.2: + resolution: {integrity: sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + react: registry.npmmirror.com/react/17.0.2 + dev: false + + /@radix-ui/react-use-controllable-state/1.0.0_react@17.0.2: + resolution: {integrity: sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + '@radix-ui/react-use-callback-ref': 1.0.0_react@17.0.2 + react: registry.npmmirror.com/react/17.0.2 + dev: false + + /@radix-ui/react-use-escape-keydown/1.0.2_react@17.0.2: + resolution: {integrity: sha512-DXGim3x74WgUv+iMNCF+cAo8xUHHeqvjx8zs7trKf+FkQKPQXLk2sX7Gx1ysH7Q76xCpZuxIJE7HLPxRE+Q+GA==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + '@radix-ui/react-use-callback-ref': 1.0.0_react@17.0.2 + react: registry.npmmirror.com/react/17.0.2 + dev: false + + /@radix-ui/react-use-layout-effect/1.0.0_react@17.0.2: + resolution: {integrity: sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + react: registry.npmmirror.com/react/17.0.2 + dev: false + + /@radix-ui/react-use-rect/1.0.0_react@17.0.2: + resolution: {integrity: sha512-TB7pID8NRMEHxb/qQJpvSt3hQU4sqNPM1VCTjTRjEOa7cEop/QMuq8S6fb/5Tsz64kqSvB9WnwsDHtjnrM9qew==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + '@radix-ui/rect': 1.0.0 + react: registry.npmmirror.com/react/17.0.2 + dev: false + + /@radix-ui/react-use-size/1.0.0_react@17.0.2: + resolution: {integrity: sha512-imZ3aYcoYCKhhgNpkNDh/aTiU05qw9hX+HHI1QDBTyIlcFjgeFlKKySNGMwTp7nYFLQg/j0VA2FmCY4WPDDHMg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + '@radix-ui/react-use-layout-effect': 1.0.0_react@17.0.2 + react: registry.npmmirror.com/react/17.0.2 + dev: false + + /@radix-ui/rect/1.0.0: + resolution: {integrity: sha512-d0O68AYy/9oeEy1DdC07bz1/ZXX+DqCskRd3i4JzLSTXwefzaepQrKjXC7aNM8lTHjFLDO0pDgaEiQ7jEk+HVg==} + dependencies: + '@babel/runtime': 7.20.13 + dev: false + + /ajv/8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: false + + /aria-hidden/1.2.2_h7fc2el62uaa77gho3xhys6ola: + resolution: {integrity: sha512-6y/ogyDTk/7YAe91T3E2PR1ALVKyM2QbTio5HwM+N1Q6CMlCKhvClyIjkckBswa0f2xJhjsfzIGa1yVSe1UMVA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.9.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': registry.npmmirror.com/@types/react/17.0.53 + react: registry.npmmirror.com/react/17.0.2 + tslib: 2.4.1 + dev: false + + /detect-node-es/1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + dev: false + + /fast-deep-equal/3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: false + + /fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + optional: true + + /get-nonce/1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + dev: false + + /graceful-fs/4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + requiresBuild: true + dev: false + optional: true + + /invariant/2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + dependencies: + loose-envify: 1.4.0 + dev: false + + /js-tokens/4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: false + + /json-schema-traverse/1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: false + + /loose-envify/1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: false + + /punycode/2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + engines: {node: '>=6'} + dev: false + + /react-remove-scroll-bar/2.3.4_h7fc2el62uaa77gho3xhys6ola: + resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': registry.npmmirror.com/@types/react/17.0.53 + react: registry.npmmirror.com/react/17.0.2 + react-style-singleton: 2.2.1_h7fc2el62uaa77gho3xhys6ola + tslib: 2.4.1 + dev: false + + /react-remove-scroll/2.5.5_h7fc2el62uaa77gho3xhys6ola: + resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': registry.npmmirror.com/@types/react/17.0.53 + react: registry.npmmirror.com/react/17.0.2 + react-remove-scroll-bar: 2.3.4_h7fc2el62uaa77gho3xhys6ola + react-style-singleton: 2.2.1_h7fc2el62uaa77gho3xhys6ola + tslib: 2.4.1 + use-callback-ref: 1.3.0_h7fc2el62uaa77gho3xhys6ola + use-sidecar: 1.1.2_h7fc2el62uaa77gho3xhys6ola + dev: false + + /react-style-singleton/2.2.1_h7fc2el62uaa77gho3xhys6ola: + resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': registry.npmmirror.com/@types/react/17.0.53 + get-nonce: 1.0.1 + invariant: 2.2.4 + react: registry.npmmirror.com/react/17.0.2 + tslib: 2.4.1 + dev: false + + /regenerator-runtime/0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: false + + /require-from-string/2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: false + + /source-map/0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + requiresBuild: true + dev: false + optional: true + + /tslib/2.4.1: + resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} + dev: false + + /uri-js/4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.0 + dev: false + + /use-callback-ref/1.3.0_h7fc2el62uaa77gho3xhys6ola: + resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': registry.npmmirror.com/@types/react/17.0.53 + react: registry.npmmirror.com/react/17.0.2 + tslib: 2.4.1 + dev: false + + /use-isomorphic-layout-effect/1.1.2_h7fc2el62uaa77gho3xhys6ola: + resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': registry.npmmirror.com/@types/react/17.0.53 + react: registry.npmmirror.com/react/17.0.2 + dev: false + + /use-sidecar/1.1.2_h7fc2el62uaa77gho3xhys6ola: + resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': registry.npmmirror.com/@types/react/17.0.53 + detect-node-es: 1.1.0 + react: registry.npmmirror.com/react/17.0.2 + tslib: 2.4.1 + dev: false + registry.npmmirror.com/@adobe/css-tools/4.0.2: resolution: {integrity: sha512-Fx6tYjk2wKUgLi8uMANZr8GNZx05u44ArIJldn9VxLvolzlJVgHbTUCbwhMd6bcYky178+WUSxPHO3DAtGLWpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@adobe/css-tools/-/css-tools-4.0.2.tgz} name: '@adobe/css-tools' @@ -4082,9 +4627,8 @@ packages: react-dom: registry.npmmirror.com/react-dom/17.0.2_react@17.0.2 dev: false - registry.npmmirror.com/@testing-library/user-event/13.5.0_yxlyej73nftwmh2fiao7paxmlm: + registry.npmmirror.com/@testing-library/user-event/13.5.0: resolution: {integrity: sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@testing-library/user-event/-/user-event-13.5.0.tgz} - id: registry.npmmirror.com/@testing-library/user-event/13.5.0 name: '@testing-library/user-event' version: 13.5.0 engines: {node: '>=10', npm: '>=6'} @@ -4092,7 +4636,6 @@ packages: '@testing-library/dom': '>=7.21.4' dependencies: '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.20.13 - '@testing-library/dom': registry.npmmirror.com/@testing-library/dom/8.20.0 dev: false registry.npmmirror.com/@tootallnate/once/1.1.2: @@ -4490,6 +5033,35 @@ packages: '@types/yargs-parser': registry.npmmirror.com/@types/yargs-parser/21.0.0 dev: false + registry.npmmirror.com/@typescript-eslint/eslint-plugin/5.49.0_7uibuqfxkfaozanbtbziikiqje: + resolution: {integrity: sha512-IhxabIpcf++TBaBa1h7jtOWyon80SXPRLDq0dVz5SLFC/eW6tofkw/O7Ar3lkx5z5U6wzbKDrl2larprp5kk5Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.49.0.tgz} + id: registry.npmmirror.com/@typescript-eslint/eslint-plugin/5.49.0 + name: '@typescript-eslint/eslint-plugin' + version: 5.49.0 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': registry.npmmirror.com/@typescript-eslint/scope-manager/5.49.0 + '@typescript-eslint/type-utils': registry.npmmirror.com/@typescript-eslint/type-utils/5.49.0_7uibuqfxkfaozanbtbziikiqje + '@typescript-eslint/utils': registry.npmmirror.com/@typescript-eslint/utils/5.49.0_7uibuqfxkfaozanbtbziikiqje + debug: registry.npmmirror.com/debug/4.3.4 + eslint: registry.npmmirror.com/eslint/8.32.0 + ignore: registry.npmmirror.com/ignore/5.2.4 + natural-compare-lite: registry.npmmirror.com/natural-compare-lite/1.4.0 + regexpp: registry.npmmirror.com/regexpp/3.2.0 + semver: registry.npmmirror.com/semver/7.3.8 + tsutils: registry.npmmirror.com/tsutils/3.21.0_typescript@4.9.4 + typescript: registry.npmmirror.com/typescript/4.9.4 + transitivePeerDependencies: + - supports-color + dev: true + registry.npmmirror.com/@typescript-eslint/eslint-plugin/5.49.0_iu322prlnwsygkcra5kbpy22si: resolution: {integrity: sha512-IhxabIpcf++TBaBa1h7jtOWyon80SXPRLDq0dVz5SLFC/eW6tofkw/O7Ar3lkx5z5U6wzbKDrl2larprp5kk5Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.49.0.tgz} id: registry.npmmirror.com/@typescript-eslint/eslint-plugin/5.49.0 @@ -4518,6 +5090,7 @@ packages: typescript: registry.npmmirror.com/typescript/4.9.4 transitivePeerDependencies: - supports-color + dev: false registry.npmmirror.com/@typescript-eslint/experimental-utils/5.49.0_7uibuqfxkfaozanbtbziikiqje: resolution: {integrity: sha512-veLpCJLYn44Fru7mSvi2doxQMzMCOFSDYdMUQhAzaH1vFYq2RVNpecZ8d18Wh6UMv07yahXkiv/aShWE48iE9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.49.0.tgz} @@ -4556,6 +5129,7 @@ packages: typescript: registry.npmmirror.com/typescript/4.9.4 transitivePeerDependencies: - supports-color + dev: false registry.npmmirror.com/@typescript-eslint/scope-manager/5.49.0: resolution: {integrity: sha512-clpROBOiMIzpbWNxCe1xDK14uPZh35u4QaZO1GddilEzoCLAEz4szb51rBpdgurs5k2YzPtJeTEN3qVbG+LRUQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-5.49.0.tgz} @@ -4908,18 +5482,15 @@ packages: - supports-color dev: false - registry.npmmirror.com/ajv-formats/2.1.1_ajv@8.12.0: + registry.npmmirror.com/ajv-formats/2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ajv-formats/-/ajv-formats-2.1.1.tgz} - id: registry.npmmirror.com/ajv-formats/2.1.1 name: ajv-formats version: 2.1.1 - peerDependencies: - ajv: ^8.0.0 peerDependenciesMeta: ajv: optional: true dependencies: - ajv: registry.npmmirror.com/ajv/8.12.0 + ajv: 8.12.0 dev: false registry.npmmirror.com/ajv-keywords/3.5.2_ajv@6.12.6: @@ -5710,7 +6281,7 @@ packages: normalize-path: registry.npmmirror.com/normalize-path/3.0.0 readdirp: registry.npmmirror.com/readdirp/3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 registry.npmmirror.com/chrome-trace-event/1.0.3: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz} @@ -6968,7 +7539,7 @@ packages: esutils: registry.npmmirror.com/esutils/2.0.3 optionator: registry.npmmirror.com/optionator/0.8.3 optionalDependencies: - source-map: registry.npmmirror.com/source-map/0.6.1 + source-map: 0.6.1 dev: false registry.npmmirror.com/eslint-config-airbnb-base/14.2.1_ps7hf4l2dvbuxvtusmrfhmzsba: @@ -6983,7 +7554,7 @@ packages: dependencies: confusing-browser-globals: registry.npmmirror.com/confusing-browser-globals/1.0.11 eslint: registry.npmmirror.com/eslint/8.32.0 - eslint-plugin-import: registry.npmmirror.com/eslint-plugin-import/2.27.5_6savw6y3b7jng6f64kgkyoij64 + eslint-plugin-import: registry.npmmirror.com/eslint-plugin-import/2.27.5_eslint@8.32.0 object.assign: registry.npmmirror.com/object.assign/4.1.4 object.entries: registry.npmmirror.com/object.entries/1.1.6 dev: true @@ -7003,7 +7574,7 @@ packages: dependencies: eslint: registry.npmmirror.com/eslint/8.32.0 eslint-config-airbnb-base: registry.npmmirror.com/eslint-config-airbnb-base/14.2.1_ps7hf4l2dvbuxvtusmrfhmzsba - eslint-plugin-import: registry.npmmirror.com/eslint-plugin-import/2.27.5_6savw6y3b7jng6f64kgkyoij64 + eslint-plugin-import: registry.npmmirror.com/eslint-plugin-import/2.27.5_eslint@8.32.0 eslint-plugin-jsx-a11y: registry.npmmirror.com/eslint-plugin-jsx-a11y/6.7.1_eslint@8.32.0 eslint-plugin-react: registry.npmmirror.com/eslint-plugin-react/7.32.1_eslint@8.32.0 eslint-plugin-react-hooks: registry.npmmirror.com/eslint-plugin-react-hooks/4.6.0_eslint@8.32.0 @@ -7023,7 +7594,7 @@ packages: eslint: registry.npmmirror.com/eslint/8.32.0 dev: true - registry.npmmirror.com/eslint-config-react-app/7.0.1_yyahsyh3owwgfgz2uzkbdwzzie: + registry.npmmirror.com/eslint-config-react-app/7.0.1_hvqfsct7uiljobdhzxotopon4u: resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz} id: registry.npmmirror.com/eslint-config-react-app/7.0.1 name: eslint-config-react-app @@ -7044,7 +7615,7 @@ packages: babel-preset-react-app: registry.npmmirror.com/babel-preset-react-app/10.0.1 confusing-browser-globals: registry.npmmirror.com/confusing-browser-globals/1.0.11 eslint: registry.npmmirror.com/eslint/8.32.0 - eslint-plugin-flowtype: registry.npmmirror.com/eslint-plugin-flowtype/8.0.3_23c4lsi4xzppo2hw5hetkgj7dy + eslint-plugin-flowtype: registry.npmmirror.com/eslint-plugin-flowtype/8.0.3_eslint@8.32.0 eslint-plugin-import: registry.npmmirror.com/eslint-plugin-import/2.27.5_6savw6y3b7jng6f64kgkyoij64 eslint-plugin-jest: registry.npmmirror.com/eslint-plugin-jest/25.7.0_fek2wkkgugnru77z7wqbnvmndy eslint-plugin-jsx-a11y: registry.npmmirror.com/eslint-plugin-jsx-a11y/6.7.1_eslint@8.32.0 @@ -7102,8 +7673,40 @@ packages: eslint-import-resolver-node: registry.npmmirror.com/eslint-import-resolver-node/0.3.7 transitivePeerDependencies: - supports-color + dev: false - registry.npmmirror.com/eslint-plugin-flowtype/8.0.3_23c4lsi4xzppo2hw5hetkgj7dy: + registry.npmmirror.com/eslint-module-utils/2.7.4_tdm2zecdp3gdwhfxnfmevnwugq: + resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz} + id: registry.npmmirror.com/eslint-module-utils/2.7.4 + name: eslint-module-utils + version: 2.7.4 + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + debug: registry.npmmirror.com/debug/3.2.7 + eslint: registry.npmmirror.com/eslint/8.32.0 + eslint-import-resolver-node: registry.npmmirror.com/eslint-import-resolver-node/0.3.7 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmmirror.com/eslint-plugin-flowtype/8.0.3_eslint@8.32.0: resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz} id: registry.npmmirror.com/eslint-plugin-flowtype/8.0.3 name: eslint-plugin-flowtype @@ -7114,8 +7717,6 @@ packages: '@babel/plugin-transform-react-jsx': ^7.14.9 eslint: ^8.1.0 dependencies: - '@babel/plugin-syntax-flow': registry.npmmirror.com/@babel/plugin-syntax-flow/7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-react-jsx': registry.npmmirror.com/@babel/plugin-transform-react-jsx/7.20.13_@babel+core@7.20.12 eslint: registry.npmmirror.com/eslint/8.32.0 lodash: registry.npmmirror.com/lodash/4.17.21 string-natural-compare: registry.npmmirror.com/string-natural-compare/3.0.1 @@ -7155,6 +7756,42 @@ packages: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color + dev: false + + registry.npmmirror.com/eslint-plugin-import/2.27.5_eslint@8.32.0: + resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz} + id: registry.npmmirror.com/eslint-plugin-import/2.27.5 + name: eslint-plugin-import + version: 2.27.5 + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + array-includes: registry.npmmirror.com/array-includes/3.1.6 + array.prototype.flat: registry.npmmirror.com/array.prototype.flat/1.3.1 + array.prototype.flatmap: registry.npmmirror.com/array.prototype.flatmap/1.3.1 + debug: registry.npmmirror.com/debug/3.2.7 + doctrine: registry.npmmirror.com/doctrine/2.1.0 + eslint: registry.npmmirror.com/eslint/8.32.0 + eslint-import-resolver-node: registry.npmmirror.com/eslint-import-resolver-node/0.3.7 + eslint-module-utils: registry.npmmirror.com/eslint-module-utils/2.7.4_tdm2zecdp3gdwhfxnfmevnwugq + has: registry.npmmirror.com/has/1.0.3 + is-core-module: registry.npmmirror.com/is-core-module/2.11.0 + is-glob: registry.npmmirror.com/is-glob/4.0.3 + minimatch: registry.npmmirror.com/minimatch/3.1.2 + object.values: registry.npmmirror.com/object.values/1.1.6 + resolve: registry.npmmirror.com/resolve/1.22.1 + semver: registry.npmmirror.com/semver/6.3.0 + tsconfig-paths: registry.npmmirror.com/tsconfig-paths/3.14.1 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true registry.npmmirror.com/eslint-plugin-jest/25.7.0_fek2wkkgugnru77z7wqbnvmndy: resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz} @@ -7861,15 +8498,6 @@ packages: name: fs.realpath version: 1.0.0 - registry.npmmirror.com/fsevents/2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz} - name: fsevents - version: 2.3.2 - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - optional: true - registry.npmmirror.com/function-bind/1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz} name: function-bind @@ -9077,7 +9705,7 @@ packages: micromatch: registry.npmmirror.com/micromatch/4.0.5 walker: registry.npmmirror.com/walker/1.0.8 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: false registry.npmmirror.com/jest-jasmine2/27.5.1: @@ -9639,7 +10267,7 @@ packages: dependencies: universalify: registry.npmmirror.com/universalify/2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: false registry.npmmirror.com/jsonpointer/5.0.1: @@ -12452,7 +13080,7 @@ packages: engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: false registry.npmmirror.com/rtl-css-js/1.16.1: @@ -12607,7 +13235,7 @@ packages: dependencies: '@types/json-schema': registry.npmmirror.com/@types/json-schema/7.0.11 ajv: registry.npmmirror.com/ajv/8.12.0 - ajv-formats: registry.npmmirror.com/ajv-formats/2.1.1_ajv@8.12.0 + ajv-formats: registry.npmmirror.com/ajv-formats/2.1.1 ajv-keywords: registry.npmmirror.com/ajv-keywords/5.1.0_ajv@8.12.0 dev: false diff --git a/lama_cleaner/app/src/adapters/inpainting.ts b/lama_cleaner/app/src/adapters/inpainting.ts index 1fb6c9b..eff417d 100644 --- a/lama_cleaner/app/src/adapters/inpainting.ts +++ b/lama_cleaner/app/src/adapters/inpainting.ts @@ -153,12 +153,16 @@ export function modelDownloaded(name: string) { export async function runPlugin( name: string, imageFile: File, + upscale?: number, maskFile?: File | null, clicks?: number[][] ) { const fd = new FormData() fd.append('name', name) fd.append('image', imageFile) + if (upscale) { + fd.append('upscale', upscale.toString()) + } if (clicks) { fd.append('clicks', JSON.stringify(clicks)) } diff --git a/lama_cleaner/app/src/components/Editor/Editor.tsx b/lama_cleaner/app/src/components/Editor/Editor.tsx index 80fbbb7..1ea2640 100644 --- a/lama_cleaner/app/src/components/Editor/Editor.tsx +++ b/lama_cleaner/app/src/components/Editor/Editor.tsx @@ -562,7 +562,7 @@ export default function Editor() { }) const runRenderablePlugin = useCallback( - async (name: string) => { + async (name: string, data?: any) => { if (isProcessing) { return } @@ -570,7 +570,7 @@ export default function Editor() { // TODO 要不要加 undoCurrentLine?? setIsPluginRunning(true) const targetFile = await getCurrentRender() - const res = await runPlugin(name, targetFile) + const res = await runPlugin(name, targetFile, data?.upscale) if (!res) { throw new Error('Something went wrong on server side.') } @@ -603,8 +603,8 @@ export default function Editor() { }, [runRenderablePlugin]) useEffect(() => { - emitter.on(PluginName.RealESRGAN, () => { - runRenderablePlugin(PluginName.RealESRGAN) + emitter.on(PluginName.RealESRGAN, (data: any) => { + runRenderablePlugin(PluginName.RealESRGAN, data) }) return () => { emitter.off(PluginName.RealESRGAN) @@ -845,8 +845,9 @@ export default function Editor() { try { const res = await runPlugin( - PluginName.InteractiveSeg.toString(), + PluginName.InteractiveSeg, targetFile, + undefined, prevMask, newClicks ) @@ -938,7 +939,7 @@ export default function Editor() { } const onMouseDown = (ev: SyntheticEvent) => { - if (isInteractiveSeg) { + if (isProcessing) { return } if (isChangingBrushSizeByMouse) { @@ -954,9 +955,6 @@ export default function Editor() { if (!canvas) { return } - if (isInpainting) { - return - } if (isRightClick(ev)) { return diff --git a/lama_cleaner/app/src/components/Plugins/Plugins.scss b/lama_cleaner/app/src/components/Plugins/Plugins.scss index c1050ee..afc8706 100644 --- a/lama_cleaner/app/src/components/Plugins/Plugins.scss +++ b/lama_cleaner/app/src/components/Plugins/Plugins.scss @@ -3,90 +3,131 @@ .plugins { position: absolute; top: 68px; - left: 1rem; - padding: 0.1rem 0.3rem; + left: 24px; z-index: 4; - - border-radius: 0.8rem; - border-style: solid; - border-color: var(--border-color); - border-width: 1px; + border: 1px solid var(--border-color); + border-radius: 8px; } -.plugins-trigger { - font-family: 'WorkSans', sans-serif; - font-size: 16px; - border: 0px; -} - -.plugins-content { - outline: none; - position: relative; - font-family: 'WorkSans', sans-serif; - font-size: 14px; - top: 8px; - left: 1rem; - padding: 0.8rem 0.5rem; - z-index: 9; - - // backdrop-filter: blur(12px); - color: var(--text-color); +.DropdownMenuContent, +.DropdownMenuSubContent { + border: 1px solid var(--border-color); + min-width: 80px; background-color: var(--page-bg); + border-radius: 6px; + padding: 5px; + box-shadow: 0px 10px 38px -10px rgba(22, 23, 24, 0.35), 0px 10px 20px -15px rgba(22, 23, 24, 0.2); + animation-duration: 400ms; + animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1); + will-change: transform, opacity; +} +.DropdownMenuContent[data-side='top'], +.DropdownMenuSubContent[data-side='top'] { + animation-name: slideDownAndFade; +} +.DropdownMenuContent[data-side='right'], +.DropdownMenuSubContent[data-side='right'] { + animation-name: slideLeftAndFade; +} +.DropdownMenuContent[data-side='bottom'], +.DropdownMenuSubContent[data-side='bottom'] { + animation-name: slideUpAndFade; +} +.DropdownMenuContent[data-side='left'], +.DropdownMenuSubContent[data-side='left'] { + animation-name: slideRightAndFade; +} - border-radius: 0.8rem; - border-style: solid; - border-color: var(--border-color); - border-width: 1px; - +.DropdownMenuItem, +.DropdownMenuCheckboxItem, +.DropdownMenuRadioItem, +.DropdownMenuSubTrigger { + font-size: 13px; + line-height: 1; + color: var(--btn-text-color); + border-radius: 3px; display: flex; - flex-direction: column; - gap: 12px; - - .setting-block-content { - gap: 1rem; - } - - // input { - // height: 24px; - // // border-radius: 4px; - // } - - // button { - // height: 28px; - // // border-radius: 4px; - // } + align-items: center; + height: 25px; + padding: 0 5px; + position: relative; + user-select: none; + outline: none; + gap: 8px; +} +.DropdownMenuSubTrigger[data-state='open'] { + background-color: var(--page-bg); + color: var(--btn-text-color); +} +.DropdownMenuItem[data-disabled], +.DropdownMenuCheckboxItem[data-disabled], +.DropdownMenuRadioItem[data-disabled], +.DropdownMenuSubTrigger[data-disabled] { + color: var(--text-color-disabled); + pointer-events: none; +} +.DropdownMenuItem[data-highlighted], +.DropdownMenuCheckboxItem[data-highlighted], +.DropdownMenuRadioItem[data-highlighted], +.DropdownMenuSubTrigger[data-highlighted] { + background-color: var(--yellow-accent); + color: var(--btn-text-hover-color); } -.negative-prompt { - all: unset; - border-width: 0; - border-radius: 0.5rem; - min-height: 150px; - max-width: 200px; - width: 100%; - padding: 12px 0.8rem; - outline: 1px solid var(--border-color); - - &:focus-visible { - border-width: 0; - outline: 1px solid var(--yellow-accent); - } - - &:-webkit-input-placeholder { - padding-top: 10px; - } - - &:-moz-input-placeholder { - padding-top: 10px; - } - - &:-ms-input-placeholder { - padding-top: 10px; - } +.RightSlot { + margin-left: auto; + padding-left: 10px; + color: var(--btn-text-color); + display: flex; + align-items: center; } - -.resize-title-tile { - width: 86px; - font-size: 0.5rem; +[data-highlighted] > .RightSlot { + color: var(--btn-text-hover-color); +} +[data-disabled] .RightSlot { color: var(--text-color-gray); } + +@keyframes slideUpAndFade { + from { + opacity: 0; + transform: translateY(2px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes slideRightAndFade { + from { + opacity: 0; + transform: translateX(-2px); + } + to { + opacity: 1; + transform: translateX(0); + } +} + +@keyframes slideDownAndFade { + from { + opacity: 0; + transform: translateY(-2px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes slideLeftAndFade { + from { + opacity: 0; + transform: translateX(2px); + } + to { + opacity: 1; + transform: translateX(0); + } +} \ No newline at end of file diff --git a/lama_cleaner/app/src/components/Plugins/Plugins.tsx b/lama_cleaner/app/src/components/Plugins/Plugins.tsx index 83a6596..49e8f1a 100644 --- a/lama_cleaner/app/src/components/Plugins/Plugins.tsx +++ b/lama_cleaner/app/src/components/Plugins/Plugins.tsx @@ -1,13 +1,16 @@ import React, { FormEvent } from 'react' import { useRecoilValue } from 'recoil' import { CursorArrowRaysIcon, GifIcon } from '@heroicons/react/24/outline' -import { BoxModelIcon, MarginIcon, HobbyKnifeIcon } from '@radix-ui/react-icons' +import { + BoxModelIcon, + ChevronRightIcon, + HobbyKnifeIcon, + MixIcon, +} from '@radix-ui/react-icons' import { useToggle } from 'react-use' -import * as PopoverPrimitive from '@radix-ui/react-popover' +import * as DropdownMenu from '@radix-ui/react-dropdown-menu' import { fileState, - isInpaintingState, - isPluginRunningState, isProcessingState, serverConfigState, } from '../../store/Atoms' @@ -41,50 +44,97 @@ const pluginMap = { } const Plugins = () => { - const [open, toggleOpen] = useToggle(true) + // const [open, toggleOpen] = useToggle(true) const serverConfig = useRecoilValue(serverConfigState) const file = useRecoilValue(fileState) const isProcessing = useRecoilValue(isProcessingState) + const disabled = !file || isProcessing const onPluginClick = (pluginName: string) => { - if (isProcessing) { - return + if (!disabled) { + emitter.emit(pluginName) } - emitter.emit(pluginName) + } + + const onRealESRGANClick = (upscale: number) => { + if (!disabled) { + emitter.emit(PluginName.RealESRGAN, { upscale }) + } + } + + const renderRealESRGANPlugin = () => { + return ( + + + + RealESRGAN +
+ +
+
+ + + onRealESRGANClick(2)} + > + upscale 2x + + onRealESRGANClick(4)} + disabled={disabled} + > + upscale 4x + + + +
+ ) } const renderPlugins = () => { return serverConfig.plugins.map((plugin: string) => { const { IconClass } = pluginMap[plugin as PluginName] + if (plugin === PluginName.RealESRGAN) { + return renderRealESRGANPlugin() + } return ( - + + {plugin} + ) }) } + if (serverConfig.plugins.length === 0) { + return null + } return ( -
- - toggleOpen()} + + +
+ {renderPlugins()} + + + ) } diff --git a/lama_cleaner/app/src/styles/_Colors.scss b/lama_cleaner/app/src/styles/_Colors.scss index 04ab986..0c7d601 100644 --- a/lama_cleaner/app/src/styles/_Colors.scss +++ b/lama_cleaner/app/src/styles/_Colors.scss @@ -32,6 +32,7 @@ // Text --text-color: #040404; --text-color-gray: rgb(107, 111, 118); + --text-color-disabled: rgb(107, 111, 118); // Shared --btn-text-color: var(--text-color); diff --git a/lama_cleaner/app/src/styles/_ColorsDark.scss b/lama_cleaner/app/src/styles/_ColorsDark.scss index cb020f2..9f82a91 100644 --- a/lama_cleaner/app/src/styles/_ColorsDark.scss +++ b/lama_cleaner/app/src/styles/_ColorsDark.scss @@ -30,6 +30,7 @@ // Text --text-color: white; --text-color-gray: rgb(195, 196, 198); + --text-color-disabled: rgb(107, 111, 118); // Shared --btn-text-color: var(--text-color); diff --git a/lama_cleaner/plugins/realesrgan.py b/lama_cleaner/plugins/realesrgan.py index 9000ee1..6652764 100644 --- a/lama_cleaner/plugins/realesrgan.py +++ b/lama_cleaner/plugins/realesrgan.py @@ -1,6 +1,7 @@ from enum import Enum import cv2 +from loguru import logger from lama_cleaner.helper import download_model @@ -83,8 +84,11 @@ class RealESRGANUpscaler: def __call__(self, rgb_np_img, files, form): bgr_np_img = cv2.cvtColor(rgb_np_img, cv2.COLOR_RGB2BGR) - scale = 4 - return self.forward(bgr_np_img, scale) + scale = float(form['upscale']) + logger.info(f"RealESRGAN input shape: {bgr_np_img.shape}, scale: {scale}") + result = self.forward(bgr_np_img, scale) + logger.info(f"RealESRGAN output shape: {result.shape}") + return result def forward(self, bgr_np_img, scale: float): # 输出是 BGR