plugins add dropdown menu; realesrgan support 2x 4x

This commit is contained in:
Qing 2023-03-25 13:39:56 +08:00
parent a5997e9332
commit 003a104406
9 changed files with 877 additions and 149 deletions

View File

@ -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",

View File

@ -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

View File

@ -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))
}

View File

@ -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

View File

@ -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);
}
}

View File

@ -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 (
<DropdownMenu.Sub>
<DropdownMenu.SubTrigger
className="DropdownMenuSubTrigger"
disabled={disabled}
>
<BoxModelIcon />
RealESRGAN
<div className="RightSlot">
<ChevronRightIcon />
</div>
</DropdownMenu.SubTrigger>
<DropdownMenu.Portal>
<DropdownMenu.SubContent className="DropdownMenuSubContent">
<DropdownMenu.Item
className="DropdownMenuItem"
onClick={() => onRealESRGANClick(2)}
>
upscale 2x
</DropdownMenu.Item>
<DropdownMenu.Item
className="DropdownMenuItem"
onClick={() => onRealESRGANClick(4)}
disabled={disabled}
>
upscale 4x
</DropdownMenu.Item>
</DropdownMenu.SubContent>
</DropdownMenu.Portal>
</DropdownMenu.Sub>
)
}
const renderPlugins = () => {
return serverConfig.plugins.map((plugin: string) => {
const { IconClass } = pluginMap[plugin as PluginName]
if (plugin === PluginName.RealESRGAN) {
return renderRealESRGANPlugin()
}
return (
<Button
style={{ gap: 6 }}
icon={<IconClass style={{ width: 15 }} />}
<DropdownMenu.Item
className="DropdownMenuItem"
onClick={() => onPluginClick(plugin)}
disabled={!file || isProcessing}
disabled={disabled}
>
{pluginMap[plugin as PluginName].showName}
</Button>
<IconClass style={{ width: 15 }} />
{plugin}
</DropdownMenu.Item>
)
})
}
if (serverConfig.plugins.length === 0) {
return null
}
return (
<div className="plugins">
<PopoverPrimitive.Root open={open}>
<PopoverPrimitive.Trigger
className="btn-primary plugins-trigger"
onClick={() => toggleOpen()}
<DropdownMenu.Root>
<DropdownMenu.Trigger className="plugins">
<Button icon={<MixIcon />} />
</DropdownMenu.Trigger>
<DropdownMenu.Portal>
<DropdownMenu.Content
className="DropdownMenuContent"
side="bottom"
align="start"
sideOffset={5}
>
Plugins
</PopoverPrimitive.Trigger>
<PopoverPrimitive.Portal>
<PopoverPrimitive.Content className="plugins-content">
{renderPlugins()}
</PopoverPrimitive.Content>
</PopoverPrimitive.Portal>
</PopoverPrimitive.Root>
</div>
{renderPlugins()}
</DropdownMenu.Content>
</DropdownMenu.Portal>
</DropdownMenu.Root>
)
}

View File

@ -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);

View File

@ -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);

View File

@ -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