diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d843e4cc7d72..d136f0cc7e48 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -23,16 +23,16 @@ jobs: DJANGO_SU_EMAIL: 'admin@localhost.company' DJANGO_SU_PASSWORD: '12qwaszx' run: | - docker-compose -f docker-compose.yml -f docker-compose.ci.yml build - docker-compose -f docker-compose.yml -f docker-compose.ci.yml run cvat_ci /bin/bash -c 'coverage run -a manage.py test cvat/apps utils/cli && mv .coverage ${CONTAINER_COVERAGE_DATA_DIR}' - docker-compose -f docker-compose.yml -f docker-compose.ci.yml run cvat_ci /bin/bash -c 'cd cvat-data && npm ci && cd ../cvat-core && npm ci && npm run test && mv ./reports/coverage/lcov.info ${CONTAINER_COVERAGE_DATA_DIR} && chmod a+rwx ${CONTAINER_COVERAGE_DATA_DIR}/lcov.info' + docker-compose -f docker-compose.yml -f docker-compose.dev.yml -f docker-compose.ci.yml build + docker-compose -f docker-compose.yml -f docker-compose.dev.yml -f docker-compose.ci.yml run cvat_ci /bin/bash -c 'coverage run -a manage.py test cvat/apps utils/cli && mv .coverage ${CONTAINER_COVERAGE_DATA_DIR}' + docker-compose -f docker-compose.yml -f docker-compose.dev.yml -f docker-compose.ci.yml run cvat_ci /bin/bash -c 'cd cvat-data && npm ci && cd ../cvat-core && npm ci && npm run test && mv ./reports/coverage/lcov.info ${CONTAINER_COVERAGE_DATA_DIR} && chmod a+rwx ${CONTAINER_COVERAGE_DATA_DIR}/lcov.info' docker-compose up -d docker exec -i cvat /bin/bash -c "echo \"from django.contrib.auth.models import User; User.objects.create_superuser('${DJANGO_SU_NAME}', '${DJANGO_SU_EMAIL}', '${DJANGO_SU_PASSWORD}')\" | python3 ~/manage.py shell" - name: Code instrumentation run: | npm ci npm run coverage - docker-compose up -d --build + docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d --build - name: End-to-end testing run: | cd ./tests diff --git a/.github/workflows/publish_docker_images.yml b/.github/workflows/publish_docker_images.yml new file mode 100644 index 000000000000..44aad7e9137b --- /dev/null +++ b/.github/workflows/publish_docker_images.yml @@ -0,0 +1,54 @@ +name: Publish Docker images +on: + release: + types: [published] + +jobs: + build_and_push_to_registry: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: 12 + + - name: Build images + run: | + CLAM_AV=yes INSTALL_SOURCES=yes docker-compose -f docker-compose.yml -f docker-compose.dev.yml -f docker-compose.ci.yml build + + - name: Run unit tests + env: + HOST_COVERAGE_DATA_DIR: ${{ github.workspace }} + CONTAINER_COVERAGE_DATA_DIR: '/coverage_data' + DJANGO_SU_NAME: 'admin' + DJANGO_SU_EMAIL: 'admin@localhost.company' + DJANGO_SU_PASSWORD: '12qwaszx' + run: | + docker-compose -f docker-compose.yml -f docker-compose.dev.yml -f docker-compose.ci.yml run cvat_ci /bin/bash -c 'coverage run -a manage.py test cvat/apps utils/cli' + docker-compose -f docker-compose.yml -f docker-compose.dev.yml -f docker-compose.ci.yml run cvat_ci /bin/bash -c 'cd cvat-data && npm ci && cd ../cvat-core && npm ci && npm run test' + docker-compose up -d + docker exec -i cvat /bin/bash -c "echo \"from django.contrib.auth.models import User; User.objects.create_superuser('${DJANGO_SU_NAME}', '${DJANGO_SU_EMAIL}', '${DJANGO_SU_PASSWORD}')\" | python3 ~/manage.py shell" + + - name: Run end-to-end tests + run: | + cd ./tests + npm ci + npx cypress run --headless --browser chrome + - name: Login to Docker Hub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Push to Docker Hub + env: + DOCKERHUB_WORKSPACE: 'openvino' + SERVER_IMAGE_REPO: 'cvat_server' + UI_IMAGE_REPO: 'cvat_ui' + run: | + docker tag "${DOCKERHUB_WORKSPACE}/${SERVER_IMAGE_REPO}:latest" "${DOCKERHUB_WORKSPACE}/${SERVER_IMAGE_REPO}:${{ github.event.release.tag_name }}" + docker push "${DOCKERHUB_WORKSPACE}/${SERVER_IMAGE_REPO}:${{ github.event.release.tag_name }}" + docker push "${DOCKERHUB_WORKSPACE}/${SERVER_IMAGE_REPO}:latest" + + docker tag "${DOCKERHUB_WORKSPACE}/${UI_IMAGE_REPO}:latest" "${DOCKERHUB_WORKSPACE}/${UI_IMAGE_REPO}:${{ github.event.release.tag_name }}" + docker push "${DOCKERHUB_WORKSPACE}/${UI_IMAGE_REPO}:${{ github.event.release.tag_name }}" + docker push "${DOCKERHUB_WORKSPACE}/${UI_IMAGE_REPO}:latest" diff --git a/.github/workflows/schedule.yml b/.github/workflows/schedule.yml index 16b7e9aba8de..ecce8547728e 100644 --- a/.github/workflows/schedule.yml +++ b/.github/workflows/schedule.yml @@ -18,7 +18,7 @@ jobs: DJANGO_SU_PASSWORD: "12qwaszx" API_ABOUT_PAGE: "localhost:8080/api/v1/server/about" run: | - docker-compose -f docker-compose.yml -f ./tests/docker-compose.email.yml up -d --build + docker-compose -f docker-compose.yml -f docker-compose.dev.yml -f ./tests/docker-compose.email.yml up -d --build /bin/bash -c 'while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' ${API_ABOUT_PAGE})" != "401" ]]; do sleep 5; done' docker exec -i cvat /bin/bash -c "echo \"from django.contrib.auth.models import User; User.objects.create_superuser('${DJANGO_SU_NAME}', '${DJANGO_SU_EMAIL}', '${DJANGO_SU_PASSWORD}')\" | python3 ~/manage.py shell" - name: End-to-end testing diff --git a/.remarkrc.js b/.remarkrc.js index e57d403a110f..5c301e63c101 100644 --- a/.remarkrc.js +++ b/.remarkrc.js @@ -3,7 +3,7 @@ exports.settings = { bullet: '*', paddedTable: false }; exports.plugins = [ 'remark-preset-lint-recommended', 'remark-preset-lint-consistent', - ['remark-preset-lint-markdown-style-guide', 'mixed'], + ['remark-lint-list-item-indent', 'space'], ['remark-lint-no-dead-urls', { skipOffline: true }], ['remark-lint-maximum-line-length', 120], ['remark-lint-maximum-heading-length', 120], diff --git a/.vscode/launch.json b/.vscode/launch.json index d6e8e878dec2..658abd2fe482 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -42,8 +42,11 @@ "request": "launch", "stopOnEntry": false, "justMyCode": false, - "pythonPath": "${command:python.interpreterPath}", + "python": "${command:python.interpreterPath}", "program": "${workspaceRoot}/manage.py", + "env": { + "CVAT_SERVERLESS": "1", + }, "args": [ "runserver", "--noreload", @@ -73,7 +76,7 @@ "request": "launch", "stopOnEntry": false, "justMyCode": false, - "pythonPath": "${command:python.interpreterPath}", + "python": "${command:python.interpreterPath}", "program": "${workspaceRoot}/manage.py", "args": [ "rqworker", @@ -92,7 +95,7 @@ "request": "launch", "stopOnEntry": false, "justMyCode": false, - "pythonPath": "${command:python.interpreterPath}", + "python": "${command:python.interpreterPath}", "program": "${workspaceRoot}/manage.py", "args": [ "rqscheduler", @@ -108,7 +111,7 @@ "request": "launch", "justMyCode": false, "stopOnEntry": false, - "pythonPath":"${command:python.interpreterPath}", + "python":"${command:python.interpreterPath}", "program": "${workspaceRoot}/manage.py", "args": [ "rqworker", @@ -127,7 +130,7 @@ "request": "launch", "justMyCode": false, "stopOnEntry": false, - "pythonPath": "${command:python.interpreterPath}", + "python": "${command:python.interpreterPath}", "program": "${workspaceRoot}/manage.py", "args": [ "update_git_states" @@ -143,7 +146,7 @@ "request": "launch", "justMyCode": false, "stopOnEntry": false, - "pythonPath": "${command:python.interpreterPath}", + "python": "${command:python.interpreterPath}", "program": "${workspaceRoot}/manage.py", "args": [ "migrate" @@ -159,7 +162,7 @@ "request": "launch", "justMyCode": false, "stopOnEntry": false, - "pythonPath": "${command:python.interpreterPath}", + "python": "${command:python.interpreterPath}", "program": "${workspaceRoot}/manage.py", "args": [ "test", diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f0c41dbecd6..3e2e70ebaaef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,11 +13,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - CVAT-3D: Load all frames corresponding to the job instance () - Intelligent scissors with OpenCV javascript () +- [Inside Outside Guidence](https://github.com/shiyinzhang/Inside-Outside-Guidance) serverless + function for interative segmentation +- Pre-built [cvat_server](https://hub.docker.com/r/openvino/cvat_server) and + [cvat_ui](https://hub.docker.com/r/openvino/cvat_ui) images were published on DockerHub () ### Changed - Updated HTTPS install README section (cleanup and described more robust deploy) - Logstash is improved for using with configurable elasticsearch outputs () +- Bumped nuclio version to 1.5.16 +- All methods for interative segmentation accept negative points as well - Persistent queue added to logstash () ### Deprecated @@ -40,6 +46,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - A couple of css-related issues (top bar disappear, wrong arrow position on collapse elements) () - Issue with point region doesn't work in Firefox () - Fixed cuboid perpective change () +- Annotation page popups (ai tools, drawing) reset state after detecting, tracking, drawing () ### Security diff --git a/Dockerfile b/Dockerfile index 741bb9df431d..9c38ec5d35fb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -34,10 +34,12 @@ RUN curl -sL https://github.com/cisco/openh264/archive/v${OPENH264_VERSION}.tar. make -j5 && make install PREFIX=${PREFIX} && make clean WORKDIR /tmp/ffmpeg -RUN curl -sLO https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2 && \ - tar -jx --strip-components=1 -f ffmpeg-${FFMPEG_VERSION}.tar.bz2 && \ +RUN curl -sL https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2 --output - | \ + tar -jx --strip-components=1 && \ ./configure --disable-nonfree --disable-gpl --enable-libopenh264 --enable-shared --disable-static --prefix="${PREFIX}" && \ - make -j5 && make install && make distclean + # make clean keeps the configuration files that let to know how the original sources were used to create the binary + make -j5 && make install && make clean && \ + tar -zcf "/tmp/ffmpeg-$FFMPEG_VERSION.tar.gz" . && mv "/tmp/ffmpeg-$FFMPEG_VERSION.tar.gz" . # Install requirements RUN python3 -m venv /opt/venv @@ -93,8 +95,17 @@ RUN apt-get update && \ rm -rf /var/lib/apt/lists/* && \ echo 'application/wasm wasm' >> /etc/mime.types -ARG CLAM_AV -ENV CLAM_AV=${CLAM_AV} +# Add a non-root user +ENV USER=${USER} +ENV HOME /home/${USER} +RUN adduser --shell /bin/bash --disabled-password --gecos "" ${USER} && \ + if [ -z ${socks_proxy} ]; then \ + echo export "GIT_SSH_COMMAND=\"ssh -o StrictHostKeyChecking=no -o ConnectTimeout=30\"" >> ${HOME}/.bashrc; \ + else \ + echo export "GIT_SSH_COMMAND=\"ssh -o StrictHostKeyChecking=no -o ConnectTimeout=30 -o ProxyCommand='nc -X 5 -x ${socks_proxy} %h %p'\"" >> ${HOME}/.bashrc; \ + fi + +ARG CLAM_AV="no" RUN if [ "$CLAM_AV" = "yes" ]; then \ apt-get update && \ apt-get --no-install-recommends install -yq \ @@ -106,16 +117,6 @@ RUN if [ "$CLAM_AV" = "yes" ]; then \ rm -rf /var/lib/apt/lists/*; \ fi -# Add a non-root user -ENV USER=${USER} -ENV HOME /home/${USER} -RUN adduser --shell /bin/bash --disabled-password --gecos "" ${USER} && \ - if [ -z ${socks_proxy} ]; then \ - echo export "GIT_SSH_COMMAND=\"ssh -o StrictHostKeyChecking=no -o ConnectTimeout=30\"" >> ${HOME}/.bashrc; \ - else \ - echo export "GIT_SSH_COMMAND=\"ssh -o StrictHostKeyChecking=no -o ConnectTimeout=30 -o ProxyCommand='nc -X 5 -x ${socks_proxy} %h %p'\"" >> ${HOME}/.bashrc; \ - fi - ARG INSTALL_SOURCES='no' WORKDIR ${HOME}/sources RUN if [ "$INSTALL_SOURCES" = "yes" ]; then \ @@ -131,7 +132,7 @@ RUN if [ "$INSTALL_SOURCES" = "yes" ]; then \ done && \ rm -rf /var/lib/apt/lists/*; \ fi -COPY --from=build-image /tmp/openh264/openh264*.tar.gz /tmp/ffmpeg/ffmpeg*.tar.bz2 ${HOME}/sources/ +COPY --from=build-image /tmp/openh264/openh264*.tar.gz /tmp/ffmpeg/ffmpeg*.tar.gz ${HOME}/sources/ # Copy python virtual enviroment and FFmpeg binaries from build-image COPY --from=build-image /opt/venv /opt/venv diff --git a/Dockerfile.ci b/Dockerfile.ci index bc642137e17b..4becdae086ed 100644 --- a/Dockerfile.ci +++ b/Dockerfile.ci @@ -1,4 +1,4 @@ -FROM cvat/server +FROM openvino/cvat_server ENV DJANGO_CONFIGURATION=testing USER root diff --git a/LICENSE b/LICENSE index e6959cbc514a..b4bd68239995 100644 --- a/LICENSE +++ b/LICENSE @@ -20,3 +20,12 @@ OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.   +This software uses LGPL licensed libraries from the [FFmpeg](https://www.ffmpeg.org) project. +The exact steps on how FFmpeg was configured and compiled can be found in the [Dockerfile](Dockerfile). + +FFmpeg is an open source framework licensed under LGPL and GPL. +See https://www.ffmpeg.org/legal.html. You are solely responsible +for determining if your use of FFmpeg requires any +additional licenses. Intel is not responsible for obtaining any +such licenses, nor liable for any licensing fees due in +connection with your use of FFmpeg. \ No newline at end of file diff --git a/README.md b/README.md index 07a3da833bbb..ed2ca0feb9cd 100644 --- a/README.md +++ b/README.md @@ -63,18 +63,26 @@ For more information about supported formats look at the | [ImageNet](http://www.image-net.org) | X | X | | [CamVid](http://mi.eng.cam.ac.uk/research/projects/VideoRec/CamVid/) | X | X | -## Deep learning models for automatic labeling +## Deep learning serverless functions for automatic labeling + + | Name | Type | Framework | CPU | GPU | | ------------------------------------------------------------------------------------------------------- | ---------- | ---------- | --- | --- | -| [Deep Extreme Cut](/serverless/openvino/dextr/nuclio) | interactor | OpenVINO | X | +| [Deep Extreme Cut](/serverless/openvino/dextr/nuclio) | interactor | OpenVINO | X | | +| [Faster RCNN](/serverless/openvino/omz/public/faster_rcnn_inception_v2_coco/nuclio) | detector | OpenVINO | X | | +| [Mask RCNN](/serverless/openvino/omz/public/mask_rcnn_inception_resnet_v2_atrous_coco/nuclio) | detector | OpenVINO | X | | +| [YOLO v3](/serverless/openvino/omz/public/yolo-v3-tf/nuclio) | detector | OpenVINO | X | | +| [Object reidentification](/serverless/openvino/omz/intel/person-reidentification-retail-300/nuclio) | reid | OpenVINO | X | | +| [Semantic segmentation for ADAS](/serverless/openvino/omz/intel/semantic-segmentation-adas-0001/nuclio) | detector | OpenVINO | X | | +| [Text detection v4](/serverless/openvino/omz/intel/text-detection-0004/nuclio) | detector | OpenVINO | X | | +| [SiamMask](/serverless/pytorch/foolwood/siammask/nuclio) | tracker | PyTorch | X | | +| [f-BRS](/serverless/pytorch/saic-vul/fbrs/nuclio) | interactor | PyTorch | X | | +| [Inside-Outside Guidance](/serverless/pytorch/shiyinzhang/iog/nuclio) | interactor | PyTorch | X | | | [Faster RCNN](/serverless/tensorflow/faster_rcnn_inception_v2_coco/nuclio) | detector | TensorFlow | X | X | -| [Mask RCNN](/serverless/openvino/omz/public/mask_rcnn_inception_resnet_v2_atrous_coco/nuclio) | detector | OpenVINO | X | -| [YOLO v3](/serverless/openvino/omz/public/yolo-v3-tf/nuclio) | detector | OpenVINO | X | -| [Text detection v4](/serverless/openvino/omz/intel/text-detection-0004/nuclio) | detector | OpenVINO | X | -| [Semantic segmentation for ADAS](/serverless/openvino/omz/intel/semantic-segmentation-adas-0001/nuclio) | detector | OpenVINO | X | -| [Mask RCNN](/serverless/tensorflow/matterport/mask_rcnn/nuclio) | detector | TensorFlow | X | -| [Object reidentification](/serverless/openvino/omz/intel/person-reidentification-retail-300/nuclio) | reid | OpenVINO | X | +| [Mask RCNN](/serverless/tensorflow/matterport/mask_rcnn/nuclio) | detector | TensorFlow | X | | + + ## Online demo: [cvat.org](https://cvat.org) @@ -91,18 +99,36 @@ Limitations: - No more than 10 tasks per user - Uploaded data is limited to 500Mb +## Prebuilt Docker images + +Prebuilt docker images for CVAT releases are available on Docker Hub: + +- [cvat_server](https://hub.docker.com/r/openvino/cvat_server) +- [cvat_ui](https://hub.docker.com/r/openvino/cvat_ui) + ## REST API -Automatically generated Swagger documentation for Django REST API is -available on `/api/swagger` -(default: `localhost:8080/api/swagger`). +Automatically generated Swagger documentation for Django REST API is available +on `/api/swagger`(default: `localhost:8080/api/swagger`). -Swagger documentation is visiable on allowed hostes, Update environement variable in docker-compose.yml file with cvat hosted machine IP or domain name. Example - `ALLOWED_HOSTS: 'localhost, 127.0.0.1'`) +Swagger documentation is visiable on allowed hostes, Update environement +variable in docker-compose.yml file with cvat hosted machine IP or domain +name. Example - `ALLOWED_HOSTS: 'localhost, 127.0.0.1'`. ## LICENSE Code released under the [MIT License](https://opensource.org/licenses/MIT). +This software uses LGPL licensed libraries from the [FFmpeg](https://www.ffmpeg.org) project. +The exact steps on how FFmpeg was configured and compiled can be found in the [Dockerfile](Dockerfile). + +FFmpeg is an open source framework licensed under LGPL and GPL. +See [https://www.ffmpeg.org/legal.html](https://www.ffmpeg.org/legal.html). You are solely responsible +for determining if your use of FFmpeg requires any +additional licenses. Intel is not responsible for obtaining any +such licenses, nor liable for any licensing fees due in +connection with your use of FFmpeg. + ## Questions CVAT usage related questions or unclear concepts can be posted in our @@ -129,4 +155,6 @@ Other ways to ask questions and get our support: ## Projects using CVAT -- [Onepanel](https://github.com/onepanelio/core) - Onepanel is an open source vision AI platform that fully integrates CVAT with scalable data processing and parallelized training pipelines. +- [Onepanel](https://github.com/onepanelio/core) - Onepanel is an open source + vision AI platform that fully integrates CVAT with scalable data processing + and parallelized training pipelines. diff --git a/components/serverless/docker-compose.serverless.yml b/components/serverless/docker-compose.serverless.yml index de94f6166b83..8938d5c53207 100644 --- a/components/serverless/docker-compose.serverless.yml +++ b/components/serverless/docker-compose.serverless.yml @@ -2,7 +2,7 @@ version: '3.3' services: serverless: container_name: nuclio - image: quay.io/nuclio/dashboard:1.5.8-amd64 + image: quay.io/nuclio/dashboard:1.5.16-amd64 restart: always networks: default: @@ -16,6 +16,7 @@ services: https_proxy: no_proxy: 172.28.0.1,${no_proxy} NUCLIO_CHECK_FUNCTION_CONTAINERS_HEALTHINESS: 'true' + NUCLIO_DASHBOARD_DEFAULT_FUNCTION_MOUNT_MODE: 'volume' ports: - '8070:8070' diff --git a/cvat-core/src/server-proxy.js b/cvat-core/src/server-proxy.js index f18f62f02b74..1fafc92ae75e 100644 --- a/cvat-core/src/server-proxy.js +++ b/cvat-core/src/server-proxy.js @@ -1,4 +1,4 @@ -// Copyright (C) 2019-2020 Intel Corporation +// Copyright (C) 2021 Intel Corporation // // SPDX-License-Identifier: MIT diff --git a/cvat-core/src/session.js b/cvat-core/src/session.js index f3c89da2099d..31fc5fe19e77 100644 --- a/cvat-core/src/session.js +++ b/cvat-core/src/session.js @@ -1,4 +1,4 @@ -// Copyright (C) 2019-2020 Intel Corporation +// Copyright (C) 2021 Intel Corporation // // SPDX-License-Identifier: MIT diff --git a/cvat-data/src/js/unzip_imgs.worker.js b/cvat-data/src/js/unzip_imgs.worker.js index 91b95dfde0c3..3434e3b8aca0 100644 --- a/cvat-data/src/js/unzip_imgs.worker.js +++ b/cvat-data/src/js/unzip_imgs.worker.js @@ -1,4 +1,4 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2021 Intel Corporation // // SPDX-License-Identifier: MIT @@ -7,7 +7,9 @@ const JSZip = require('jszip'); onmessage = (e) => { const zip = new JSZip(); if (e.data) { - const { start, end, block, dimension, dimension2D } = e.data; + const { + start, end, block, dimension, dimension2D, + } = e.data; zip.loadAsync(block).then((_zip) => { let index = start; diff --git a/cvat-ui/package-lock.json b/cvat-ui/package-lock.json index eafa81e50341..ff9de4e803c1 100644 --- a/cvat-ui/package-lock.json +++ b/cvat-ui/package-lock.json @@ -1,6 +1,6 @@ { "name": "cvat-ui", - "version": "1.14.0", + "version": "1.14.2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -13,9 +13,9 @@ } }, "@ant-design/icons": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-4.3.0.tgz", - "integrity": "sha512-UoIbw4oz/L/msbkgqs2nls2KP7XNKScOxVR54wRrWwnXOzJaGNwwSdYjHQz+5ETf8C53YPpzMOnRX99LFCdeIQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-4.4.0.tgz", + "integrity": "sha512-+X44IouK56JbP3r7zM+Zoykv5wQlXBlxY0NTaFXGpiyYSS/Bh6HIo9aTF62QkSuDTqA3UpeNVTRFioKKRmkWDQ==", "requires": { "@ant-design/colors": "^5.0.0", "@ant-design/icons-svg": "^4.0.0", @@ -26,9 +26,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -58,9 +58,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -1217,9 +1217,9 @@ "dev": true }, "@types/lodash": { - "version": "4.14.167", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.167.tgz", - "integrity": "sha512-w7tQPjARrvdeBkX/Rwg95S592JwxqOjmms3zWQ0XZgSyxSLdzWaYH3vErBhdVS/lRBX7F8aBYcYJYTr5TMGOzw==" + "version": "4.14.168", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.168.tgz", + "integrity": "sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q==" }, "@types/minimatch": { "version": "3.0.3", @@ -1875,9 +1875,9 @@ } }, "antd": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/antd/-/antd-4.10.2.tgz", - "integrity": "sha512-aWEP5DnYV3ytWhVQuoTc9qlkbPkVaSX8IY7u1yycQayD2gEvdnhJEs4JPdH1VNAMI4FO3M+iTPsIS6uZPch0sA==", + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/antd/-/antd-4.10.3.tgz", + "integrity": "sha512-J/IZvW15MwTmUxK/AWFkSU51T1Hyn4e0GchJWlIe7+FrPpLoTgLf9/Cx3mgxiooHfE9OfvnYvvRli1VxHH6H0Q==", "requires": { "@ant-design/colors": "^5.0.0", "@ant-design/icons": "^4.3.0", @@ -1888,7 +1888,6 @@ "copy-to-clipboard": "^3.2.0", "lodash": "^4.17.20", "moment": "^2.25.3", - "omit.js": "^2.0.2", "rc-cascader": "~1.4.0", "rc-checkbox": "~2.3.0", "rc-collapse": "~3.1.0", @@ -1918,34 +1917,23 @@ "rc-tree": "~4.1.0", "rc-tree-select": "~4.3.0", "rc-upload": "~3.3.4", - "rc-util": "^5.6.6", + "rc-util": "^5.7.0", "scroll-into-view-if-needed": "^2.2.25", "warning": "^4.0.3" }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } }, - "rc-resize-observer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-1.0.0.tgz", - "integrity": "sha512-RgKGukg1mlzyGdvzF7o/LGFC8AeoMH9aGzXTUdp6m+OApvmRdUuOscq/Y2O45cJA+rXt1ApWlpFoOIioXL3AGg==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1", - "rc-util": "^5.0.0", - "resize-observer-polyfill": "^1.5.1" - } - }, "rc-util": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.7.0.tgz", - "integrity": "sha512-0hh5XkJ+vBDeMJsHElqT1ijMx+gC3gpClwQ10h/5hccrrgrMx8VUem183KLlH1YrWCfMMPmDXWWNnwsn+p6URw==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.8.0.tgz", + "integrity": "sha512-x8UGbURS1/9mMyqNMsRdCq+nBLefjcubfS++d/P/oAKZ2b0X2Zo6TPPPS4nKyZIK8Xvo4DFx5zfwJ9hUm9CRYQ==", "requires": { "@babel/runtime": "^7.12.5", "react-is": "^16.12.0", @@ -21326,14 +21314,14 @@ } }, "date-fns": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.16.1.tgz", - "integrity": "sha512-sAJVKx/FqrLYHAQeN7VpJrPhagZc9R4ImZIWYRFZaaohR3KzmuK88touwsSwSVT8Qcbd4zoDsnGfX4GFB4imyQ==" + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.17.0.tgz", + "integrity": "sha512-ZEhqxUtEZeGgg9eHNSOAJ8O9xqSgiJdrL0lzSSfMF54x6KXWJiOH/xntSJ9YomJPrYH/p08t6gWjGWq1SDJlSA==" }, "dayjs": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.3.tgz", - "integrity": "sha512-/2fdLN987N8Ki7Id8BUN2nhuiRyxTLumQnSQf9CNncFCyqFsSKb9TNhzRYcC8K8eJSJOKvbvkImo/MKKhNi4iw==" + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.4.tgz", + "integrity": "sha512-RI/Hh4kqRc1UKLOAf/T5zdMMX5DQIlDxwUe3wSyMMnEbGunnpENCdbUgM+dW7kXidZqCttBrmw7BhN4TMddkCw==" }, "debug": { "version": "4.1.1", @@ -25415,7 +25403,8 @@ "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true }, "language-subtag-registry": { "version": "0.3.20", @@ -26720,11 +26709,6 @@ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "dev": true }, - "omit.js": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/omit.js/-/omit.js-2.0.2.tgz", - "integrity": "sha512-hJmu9D+bNB40YpL9jYebQl4lsTW6yEHRTroJzNLqQJYHm7c+NQnJGfZmIWh8S3q3KoaxV1aLhV6B3+0N0/kyJg==" - }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -27896,9 +27880,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -27923,9 +27907,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -27947,9 +27931,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -27974,9 +27958,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -28000,17 +27984,17 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } }, "rc-util": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.7.0.tgz", - "integrity": "sha512-0hh5XkJ+vBDeMJsHElqT1ijMx+gC3gpClwQ10h/5hccrrgrMx8VUem183KLlH1YrWCfMMPmDXWWNnwsn+p6URw==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.8.0.tgz", + "integrity": "sha512-x8UGbURS1/9mMyqNMsRdCq+nBLefjcubfS++d/P/oAKZ2b0X2Zo6TPPPS4nKyZIK8Xvo4DFx5zfwJ9hUm9CRYQ==", "requires": { "@babel/runtime": "^7.12.5", "react-is": "^16.12.0", @@ -28040,17 +28024,17 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } }, "rc-util": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.7.0.tgz", - "integrity": "sha512-0hh5XkJ+vBDeMJsHElqT1ijMx+gC3gpClwQ10h/5hccrrgrMx8VUem183KLlH1YrWCfMMPmDXWWNnwsn+p6URw==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.8.0.tgz", + "integrity": "sha512-x8UGbURS1/9mMyqNMsRdCq+nBLefjcubfS++d/P/oAKZ2b0X2Zo6TPPPS4nKyZIK8Xvo4DFx5zfwJ9hUm9CRYQ==", "requires": { "@babel/runtime": "^7.12.5", "react-is": "^16.12.0", @@ -28080,9 +28064,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -28105,9 +28089,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -28131,9 +28115,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -28146,9 +28130,9 @@ } }, "rc-input-number": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-6.1.2.tgz", - "integrity": "sha512-UvP0tpOUeGetx6caS8RzBs3Du+NwPUn9ijQ3LeR1jOmzjXNuXvv58U6hvIXSHx/4ulPleQ5BAQP/aLTsFB4yGw==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-6.1.3.tgz", + "integrity": "sha512-qCLWK9NuuKGTsPXjRU/XvSOX7EKdnHlOpg59nPjYSDdH/czsAHZyYq50O6b6RF2TMPOjVpmsZQoMjNJYcnn6JA==", "requires": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.5", @@ -28156,9 +28140,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -28184,9 +28168,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -28199,9 +28183,9 @@ } }, "rc-menu": { - "version": "8.10.4", - "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-8.10.4.tgz", - "integrity": "sha512-eZOyl6RZFNwREP2MMyIOicrEOA9oeAFz13YG5LBmclz1nJQnpkWRN1NjSSQf2JQGybiuI3zQn+PMfFG99i0YxQ==", + "version": "8.10.5", + "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-8.10.5.tgz", + "integrity": "sha512-8Ets93wQFy9IysmgRUm1VGdrEz6XfZTM0jQOqOPLYNXah5HgAmCh4xT0UOygfHB3IWiQeqDgr2uPB4uVhwI2+Q==", "requires": { "@babel/runtime": "^7.10.1", "classnames": "2.x", @@ -28214,17 +28198,17 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } }, "rc-util": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.7.0.tgz", - "integrity": "sha512-0hh5XkJ+vBDeMJsHElqT1ijMx+gC3gpClwQ10h/5hccrrgrMx8VUem183KLlH1YrWCfMMPmDXWWNnwsn+p6URw==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.8.0.tgz", + "integrity": "sha512-x8UGbURS1/9mMyqNMsRdCq+nBLefjcubfS++d/P/oAKZ2b0X2Zo6TPPPS4nKyZIK8Xvo4DFx5zfwJ9hUm9CRYQ==", "requires": { "@babel/runtime": "^7.12.5", "react-is": "^16.12.0", @@ -28254,9 +28238,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -28280,9 +28264,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -28306,28 +28290,17 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } }, - "rc-resize-observer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-1.0.0.tgz", - "integrity": "sha512-RgKGukg1mlzyGdvzF7o/LGFC8AeoMH9aGzXTUdp6m+OApvmRdUuOscq/Y2O45cJA+rXt1ApWlpFoOIioXL3AGg==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1", - "rc-util": "^5.0.0", - "resize-observer-polyfill": "^1.5.1" - } - }, "rc-util": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.7.0.tgz", - "integrity": "sha512-0hh5XkJ+vBDeMJsHElqT1ijMx+gC3gpClwQ10h/5hccrrgrMx8VUem183KLlH1YrWCfMMPmDXWWNnwsn+p6URw==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.8.0.tgz", + "integrity": "sha512-x8UGbURS1/9mMyqNMsRdCq+nBLefjcubfS++d/P/oAKZ2b0X2Zo6TPPPS4nKyZIK8Xvo4DFx5zfwJ9hUm9CRYQ==", "requires": { "@babel/runtime": "^7.12.5", "react-is": "^16.12.0", @@ -28356,9 +28329,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -28371,9 +28344,9 @@ } }, "rc-picker": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-2.5.2.tgz", - "integrity": "sha512-rQLgvjyFrxjiWlR+Q7CyXdTOP/gHbiXlBca7irOtuEb6HMRLdm+/OfIB7xaaPHgdkv1ZOsxCk8zCEX6j0qf24g==", + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-2.5.4.tgz", + "integrity": "sha512-H2G5armWMWUWbCt1jEdJQkkUvrh3IzC2Sd9Wb/T6AtMI3mjyd/TQEe68pWozS+NGA/ElDO9PiFiZjiHDep6NAQ==", "requires": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.1", @@ -28386,9 +28359,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -28410,9 +28383,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -28435,9 +28408,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -28450,9 +28423,9 @@ } }, "rc-resize-observer": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-0.2.6.tgz", - "integrity": "sha512-YX6nYnd6fk7zbuvT6oSDMKiZjyngjHoy+fz+vL3Tez38d/G5iGdaDJa2yE7345G6sc4Mm1IGRUIwclvltddhmA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-1.0.0.tgz", + "integrity": "sha512-RgKGukg1mlzyGdvzF7o/LGFC8AeoMH9aGzXTUdp6m+OApvmRdUuOscq/Y2O45cJA+rXt1ApWlpFoOIioXL3AGg==", "requires": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.1", @@ -28461,9 +28434,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -28476,9 +28449,9 @@ } }, "rc-select": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-12.1.0.tgz", - "integrity": "sha512-e4WTEwnl1Hg2t8sjFPPCk4SekCf6Thqk6Q+zGKB7gT8lHFHJ4cEnrqs8ntYZkkot1YtjmS67LbE80zq+JHHdTA==", + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-12.1.3.tgz", + "integrity": "sha512-pMJ27VQRh5QbyGLSE+by4tORYucNFbZxON+Ywj81qjXAGMjvhMcOOvlv1RZRNdnZxaMwH//3iDPOf80b0AJxZg==", "requires": { "@babel/runtime": "^7.10.1", "classnames": "2.x", @@ -28490,9 +28463,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -28517,9 +28490,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -28542,9 +28515,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -28567,9 +28540,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -28582,9 +28555,9 @@ } }, "rc-table": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.12.3.tgz", - "integrity": "sha512-R87lx28os4Ftm/9x+MamwzLw+Dtp9yxihceAgLA/9JS9QP/sqej1qlO+3T/Uw4paZqCg9SpW0XzLI1MandviWA==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.12.5.tgz", + "integrity": "sha512-XV4m5h0W+NjGkNzvp5ahOhYHyNG8oPNV9pTLre2EsfmyStXUJBICyfkNID7WZulMdCehv/Wa3MdqXwZ4EsJchw==", "requires": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.5", @@ -28594,24 +28567,13 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } }, - "rc-resize-observer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-1.0.0.tgz", - "integrity": "sha512-RgKGukg1mlzyGdvzF7o/LGFC8AeoMH9aGzXTUdp6m+OApvmRdUuOscq/Y2O45cJA+rXt1ApWlpFoOIioXL3AGg==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1", - "rc-util": "^5.0.0", - "resize-observer-polyfill": "^1.5.1" - } - }, "regenerator-runtime": { "version": "0.13.7", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", @@ -28633,24 +28595,13 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } }, - "rc-resize-observer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-1.0.0.tgz", - "integrity": "sha512-RgKGukg1mlzyGdvzF7o/LGFC8AeoMH9aGzXTUdp6m+OApvmRdUuOscq/Y2O45cJA+rXt1ApWlpFoOIioXL3AGg==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1", - "rc-util": "^5.0.0", - "resize-observer-polyfill": "^1.5.1" - } - }, "regenerator-runtime": { "version": "0.13.7", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", @@ -28670,28 +28621,17 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } }, - "rc-resize-observer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-1.0.0.tgz", - "integrity": "sha512-RgKGukg1mlzyGdvzF7o/LGFC8AeoMH9aGzXTUdp6m+OApvmRdUuOscq/Y2O45cJA+rXt1ApWlpFoOIioXL3AGg==", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1", - "rc-util": "^5.0.0", - "resize-observer-polyfill": "^1.5.1" - } - }, "rc-util": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.7.0.tgz", - "integrity": "sha512-0hh5XkJ+vBDeMJsHElqT1ijMx+gC3gpClwQ10h/5hccrrgrMx8VUem183KLlH1YrWCfMMPmDXWWNnwsn+p6URw==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.8.0.tgz", + "integrity": "sha512-x8UGbURS1/9mMyqNMsRdCq+nBLefjcubfS++d/P/oAKZ2b0X2Zo6TPPPS4nKyZIK8Xvo4DFx5zfwJ9hUm9CRYQ==", "requires": { "@babel/runtime": "^7.12.5", "react-is": "^16.12.0", @@ -28720,9 +28660,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -28747,9 +28687,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -28774,9 +28714,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -28801,9 +28741,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -28826,9 +28766,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -28857,12 +28797,12 @@ } }, "rc-virtual-list": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.2.3.tgz", - "integrity": "sha512-uEeYDQWwQhxR97SekPeGRbzPtHSbSpw/mYb6QpZZ9bA43kf7s1socV3fD3ySYhQVzo0I+/IUD9jFGit6FbM0WA==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.2.6.tgz", + "integrity": "sha512-8FiQLDzm3c/tMX0d62SQtKDhLH7zFlSI6pWBAPt+TUntEqd3Lz9zFAmpvTu8gkvUom/HCsDSZs4wfV4wDPWC0Q==", "requires": { "classnames": "^2.2.6", - "rc-resize-observer": "^0.2.3", + "rc-resize-observer": "^1.0.0", "rc-util": "^5.0.7" } }, diff --git a/cvat-ui/package.json b/cvat-ui/package.json index 4cb29daf787c..e78795fb9c2f 100644 --- a/cvat-ui/package.json +++ b/cvat-ui/package.json @@ -1,6 +1,6 @@ { "name": "cvat-ui", - "version": "1.14.0", + "version": "1.14.2", "description": "CVAT single-page application", "main": "src/index.tsx", "scripts": { @@ -47,8 +47,8 @@ "worker-loader": "^2.0.0" }, "dependencies": { - "@ant-design/icons": "^4.3.0", - "@types/lodash": "^4.14.167", + "@ant-design/icons": "^4.4.0", + "@types/lodash": "^4.14.168", "@types/platform": "^1.3.3", "@types/react": "^16.14.2", "@types/react-color": "^3.0.4", @@ -58,7 +58,7 @@ "@types/react-router-dom": "^5.1.7", "@types/react-share": "^3.0.3", "@types/redux-logger": "^3.0.8", - "antd": "^4.10.2", + "antd": "^4.10.3", "copy-to-clipboard": "^3.3.1", "cvat-canvas3d": "file:../cvat-canvas3d", "cvat-canvas": "file:../cvat-canvas", diff --git a/cvat-ui/src/actions/annotation-actions.ts b/cvat-ui/src/actions/annotation-actions.ts index 4a949adaf0a8..194edc1c06ae 100644 --- a/cvat-ui/src/actions/annotation-actions.ts +++ b/cvat-ui/src/actions/annotation-actions.ts @@ -1362,10 +1362,7 @@ export function pasteShapeAsync(): ThunkAction { }; } -export function interactWithCanvas( - activeInteractor: Model | OpenCVTool, - activeLabelID: number, -): AnyAction { +export function interactWithCanvas(activeInteractor: Model | OpenCVTool, activeLabelID: number): AnyAction { return { type: AnnotationActionTypes.INTERACT_WITH_CANVAS, payload: { diff --git a/cvat-ui/src/components/annotation-page/annotation-page.tsx b/cvat-ui/src/components/annotation-page/annotation-page.tsx index 35c179339cfb..feb6f7b6d72f 100644 --- a/cvat-ui/src/components/annotation-page/annotation-page.tsx +++ b/cvat-ui/src/components/annotation-page/annotation-page.tsx @@ -1,4 +1,4 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2021 Intel Corporation // // SPDX-License-Identifier: MIT diff --git a/cvat-ui/src/components/annotation-page/annotations-filters-input.tsx b/cvat-ui/src/components/annotation-page/annotations-filters-input.tsx index 0d701df32294..674e8e30bab6 100644 --- a/cvat-ui/src/components/annotation-page/annotations-filters-input.tsx +++ b/cvat-ui/src/components/annotation-page/annotations-filters-input.tsx @@ -8,7 +8,6 @@ import Select, { SelectValue, LabeledValue } from 'antd/lib/select'; import Title from 'antd/lib/typography/Title'; import Text from 'antd/lib/typography/Text'; import Paragraph from 'antd/lib/typography/Paragraph'; -import Tooltip from 'antd/lib/tooltip'; import Modal from 'antd/lib/modal'; import { FilterOutlined } from '@ant-design/icons'; @@ -16,6 +15,7 @@ import { changeAnnotationsFilters as changeAnnotationsFiltersAction, fetchAnnotationsAsync, } from 'actions/annotation-actions'; +import CVATTooltip from 'components/common/cvat-tooltip'; import { CombinedState } from 'reducers/interfaces'; interface StateToProps { @@ -53,7 +53,7 @@ function mapDispatchToProps(dispatch: any): DispatchToProps { dispatch(fetchAnnotationsAsync()); } else if ( Array.isArray(value) && - value.every((element: string | number | LabeledValue): boolean => typeof element === 'string') + !value.some((element: string | number | LabeledValue): boolean => typeof element !== 'string') ) { dispatch(changeAnnotationsFiltersAction(value as string[])); dispatch(fetchAnnotationsAsync()); @@ -134,7 +134,7 @@ function AnnotationsFiltersInput(props: StateToProps & DispatchToProps): JSX.Ele placeholder={ underCursor ? ( <> - + { @@ -152,7 +152,7 @@ function AnnotationsFiltersInput(props: StateToProps & DispatchToProps): JSX.Ele onMouseEnter={() => setDropdownVisible(false)} onMouseLeave={() => setDropdownVisible(true)} /> - + ) : ( <> diff --git a/cvat-ui/src/components/annotation-page/attribute-annotation-workspace/attribute-annotation-sidebar/attribute-switcher.tsx b/cvat-ui/src/components/annotation-page/attribute-annotation-workspace/attribute-annotation-sidebar/attribute-switcher.tsx index 2632b6a6d9b9..59a17593da00 100644 --- a/cvat-ui/src/components/annotation-page/attribute-annotation-workspace/attribute-annotation-sidebar/attribute-switcher.tsx +++ b/cvat-ui/src/components/annotation-page/attribute-annotation-workspace/attribute-annotation-sidebar/attribute-switcher.tsx @@ -1,13 +1,14 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT import React from 'react'; import Text from 'antd/lib/typography/Text'; -import Tooltip from 'antd/lib/tooltip'; import Button from 'antd/lib/button'; import { LeftOutlined, RightOutlined } from '@ant-design/icons'; +import CVATTooltip from 'components/common/cvat-tooltip'; + interface Props { currentAttribute: string; currentIndex: number; @@ -24,20 +25,28 @@ function AttributeSwitcher(props: Props): JSX.Element { const title = `${currentAttribute} [${currentIndex + 1}/${attributesCount}]`; return (
- - - - + + {currentAttribute} {` [${currentIndex + 1}/${attributesCount}]`} - - - - +
); } diff --git a/cvat-ui/src/components/annotation-page/attribute-annotation-workspace/attribute-annotation-sidebar/object-switcher.tsx b/cvat-ui/src/components/annotation-page/attribute-annotation-workspace/attribute-annotation-sidebar/object-switcher.tsx index f371a287261e..b64d2c5fc41d 100644 --- a/cvat-ui/src/components/annotation-page/attribute-annotation-workspace/attribute-annotation-sidebar/object-switcher.tsx +++ b/cvat-ui/src/components/annotation-page/attribute-annotation-workspace/attribute-annotation-sidebar/object-switcher.tsx @@ -1,13 +1,14 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT import React from 'react'; import Text from 'antd/lib/typography/Text'; -import Tooltip from 'antd/lib/tooltip'; import Button from 'antd/lib/button'; import { LeftOutlined, RightOutlined } from '@ant-design/icons'; +import CVATTooltip from 'components/common/cvat-tooltip'; + interface Props { currentLabel: string; clientID: number; @@ -26,21 +27,29 @@ function ObjectSwitcher(props: Props): JSX.Element { const title = `${currentLabel} ${clientID} [${currentIndex + 1}/${objectsCount}]`; return (
- - - - + + {currentLabel} {` ${clientID} `} {`[${currentIndex + 1}/${objectsCount}]`} - - - - +
); } diff --git a/cvat-ui/src/components/annotation-page/canvas/canvas-point-context-menu.tsx b/cvat-ui/src/components/annotation-page/canvas/canvas-point-context-menu.tsx index 04ecd78c7760..490359584143 100644 --- a/cvat-ui/src/components/annotation-page/canvas/canvas-point-context-menu.tsx +++ b/cvat-ui/src/components/annotation-page/canvas/canvas-point-context-menu.tsx @@ -1,16 +1,16 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT import React, { useState } from 'react'; import ReactDOM from 'react-dom'; import Button from 'antd/lib/button'; -import Tooltip from 'antd/lib/tooltip'; import { DeleteOutlined, EnvironmentOutlined } from '@ant-design/icons'; import { connect } from 'react-redux'; import { CombinedState, ContextMenuType } from 'reducers/interfaces'; import { updateAnnotationsAsync, updateCanvasContextMenu } from 'actions/annotation-actions'; +import CVATTooltip from 'components/common/cvat-tooltip'; interface StateToProps { activatedState: any | null; @@ -103,11 +103,11 @@ function CanvasPointContextMenu(props: Props): React.ReactPortal | null { return visible && contextMenuFor && type === ContextMenuType.CANVAS_SHAPE_POINT ? ReactDOM.createPortal(
- + - + {contextMenuFor && contextMenuFor.shapeType === 'polygon' && (
); diff --git a/cvat-ui/src/components/annotation-page/review-workspace/controls-side-bar/issue-control.tsx b/cvat-ui/src/components/annotation-page/review-workspace/controls-side-bar/issue-control.tsx index 6fe71158df40..4947f7661518 100644 --- a/cvat-ui/src/components/annotation-page/review-workspace/controls-side-bar/issue-control.tsx +++ b/cvat-ui/src/components/annotation-page/review-workspace/controls-side-bar/issue-control.tsx @@ -1,14 +1,14 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT import React from 'react'; import Icon from '@ant-design/icons'; -import Tooltip from 'antd/lib/tooltip'; import { ActiveControl } from 'reducers/interfaces'; import { Canvas } from 'cvat-canvas-wrapper'; import { RectangleIcon } from 'icons'; +import CVATTooltip from 'components/common/cvat-tooltip'; interface Props { canvasInstance: Canvas; @@ -20,7 +20,7 @@ function ResizeControl(props: Props): JSX.Element { const { activeControl, canvasInstance, selectIssuePosition } = props; return ( - + - + ); } diff --git a/cvat-ui/src/components/annotation-page/review/hidden-issue-label.tsx b/cvat-ui/src/components/annotation-page/review/hidden-issue-label.tsx index 02b5572e17e2..579bec3129f0 100644 --- a/cvat-ui/src/components/annotation-page/review/hidden-issue-label.tsx +++ b/cvat-ui/src/components/annotation-page/review/hidden-issue-label.tsx @@ -1,13 +1,14 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT import React, { ReactPortal, useEffect } from 'react'; import ReactDOM from 'react-dom'; import Tag from 'antd/lib/tag'; -import Tooltip from 'antd/lib/tooltip'; import { CheckOutlined, CloseCircleOutlined } from '@ant-design/icons'; +import CVATTooltip from 'components/common/cvat-tooltip'; + interface Props { id: number; message: string; @@ -34,7 +35,7 @@ export default function HiddenIssueLabel(props: Props): ReactPortal { const elementID = `cvat-hidden-issue-label-${id}`; return ReactDOM.createPortal( - + - , + , window.document.getElementById('cvat_canvas_attachment_board') as HTMLElement, ); } diff --git a/cvat-ui/src/components/annotation-page/review/issue-dialog.tsx b/cvat-ui/src/components/annotation-page/review/issue-dialog.tsx index 8660017d3c85..27b89772ced7 100644 --- a/cvat-ui/src/components/annotation-page/review/issue-dialog.tsx +++ b/cvat-ui/src/components/annotation-page/review/issue-dialog.tsx @@ -1,4 +1,4 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT @@ -9,10 +9,10 @@ import { CloseOutlined } from '@ant-design/icons'; import Comment from 'antd/lib/comment'; import Text from 'antd/lib/typography/Text'; import Title from 'antd/lib/typography/Title'; -import Tooltip from 'antd/lib/tooltip'; import Button from 'antd/lib/button'; import Input from 'antd/lib/input'; import moment from 'moment'; +import CVATTooltip from 'components/common/cvat-tooltip'; interface Props { id: number; @@ -67,9 +67,9 @@ export default function IssueDialog(props: Props): JSX.Element { author={{_comment.author ? _comment.author.username : 'Unknown'}} content={

{_comment.message}

} datetime={( - + {diff} - + )} /> ); @@ -93,9 +93,9 @@ export default function IssueDialog(props: Props): JSX.Element { {id >= 0 ? `Issue #${id}` : 'Issue'} - + - + diff --git a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/cursor-control.tsx b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/cursor-control.tsx index 9983fd6c3379..dd26d376f254 100644 --- a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/cursor-control.tsx +++ b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/cursor-control.tsx @@ -1,14 +1,14 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT import React from 'react'; import Icon from '@ant-design/icons'; -import Tooltip from 'antd/lib/tooltip'; import { CursorIcon } from 'icons'; import { ActiveControl } from 'reducers/interfaces'; import { Canvas } from 'cvat-canvas-wrapper'; +import CVATTooltip from 'components/common/cvat-tooltip'; interface Props { canvasInstance: Canvas; @@ -20,7 +20,7 @@ function CursorControl(props: Props): JSX.Element { const { canvasInstance, activeControl, cursorShortkey } = props; return ( - + canvasInstance.cancel() : undefined} /> - + ); } diff --git a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/draw-cuboid-control.tsx b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/draw-cuboid-control.tsx index 958b208bba78..0a86df2ebe90 100644 --- a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/draw-cuboid-control.tsx +++ b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/draw-cuboid-control.tsx @@ -1,4 +1,4 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT @@ -19,10 +19,9 @@ interface Props { isDrawing: boolean; } +const CustomPopover = withVisibilityHandling(Popover, 'draw-cuboid'); function DrawPolygonControl(props: Props): JSX.Element { const { canvasInstance, isDrawing } = props; - const CustomPopover = withVisibilityHandling(Popover, 'draw-cuboid'); - const dynamcPopoverPros = isDrawing ? { overlayStyle: { diff --git a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/draw-points-control.tsx b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/draw-points-control.tsx index 8127059d4a06..462e78c9d695 100644 --- a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/draw-points-control.tsx +++ b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/draw-points-control.tsx @@ -1,4 +1,4 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT @@ -18,10 +18,9 @@ interface Props { isDrawing: boolean; } +const CustomPopover = withVisibilityHandling(Popover, 'draw-points'); function DrawPointsControl(props: Props): JSX.Element { const { canvasInstance, isDrawing } = props; - const CustomPopover = withVisibilityHandling(Popover, 'draw-points'); - const dynamcPopoverPros = isDrawing ? { overlayStyle: { diff --git a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/draw-polygon-control.tsx b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/draw-polygon-control.tsx index 23f5e7549eb7..f07a324d7cf5 100644 --- a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/draw-polygon-control.tsx +++ b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/draw-polygon-control.tsx @@ -1,4 +1,4 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT @@ -18,10 +18,9 @@ interface Props { isDrawing: boolean; } +const CustomPopover = withVisibilityHandling(Popover, 'draw-polygon'); function DrawPolygonControl(props: Props): JSX.Element { const { canvasInstance, isDrawing } = props; - const CustomPopover = withVisibilityHandling(Popover, 'draw-polygon'); - const dynamcPopoverPros = isDrawing ? { overlayStyle: { diff --git a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/draw-polyline-control.tsx b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/draw-polyline-control.tsx index 2139ad4dcb9b..a1d3c157b3de 100644 --- a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/draw-polyline-control.tsx +++ b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/draw-polyline-control.tsx @@ -1,4 +1,4 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT @@ -18,10 +18,9 @@ interface Props { isDrawing: boolean; } +const CustomPopover = withVisibilityHandling(Popover, 'draw-polyline'); function DrawPolylineControl(props: Props): JSX.Element { const { canvasInstance, isDrawing } = props; - const CustomPopover = withVisibilityHandling(Popover, 'draw-polyline'); - const dynamcPopoverPros = isDrawing ? { overlayStyle: { diff --git a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/draw-rectangle-control.tsx b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/draw-rectangle-control.tsx index 50efd5183f01..0d0462818f5b 100644 --- a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/draw-rectangle-control.tsx +++ b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/draw-rectangle-control.tsx @@ -1,4 +1,4 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT @@ -18,10 +18,9 @@ interface Props { isDrawing: boolean; } +const CustomPopover = withVisibilityHandling(Popover, 'draw-rectangle'); function DrawRectangleControl(props: Props): JSX.Element { const { canvasInstance, isDrawing } = props; - const CustomPopover = withVisibilityHandling(Popover, 'draw-rectangle'); - const dynamcPopoverPros = isDrawing ? { overlayStyle: { diff --git a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/draw-shape-popover.tsx b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/draw-shape-popover.tsx index a8a7ff428917..b85f5d6a746b 100644 --- a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/draw-shape-popover.tsx +++ b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/draw-shape-popover.tsx @@ -1,4 +1,4 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT @@ -7,13 +7,13 @@ import { Row, Col } from 'antd/lib/grid'; import Button from 'antd/lib/button'; import InputNumber from 'antd/lib/input-number'; import Radio, { RadioChangeEvent } from 'antd/lib/radio'; -import Tooltip from 'antd/lib/tooltip'; import Text from 'antd/lib/typography/Text'; import { RectDrawingMethod, CuboidDrawingMethod } from 'cvat-canvas-wrapper'; import { ShapeType } from 'reducers/interfaces'; import { clamp } from 'utils/math'; import LabelSelector from 'components/label-selector/label-selector'; +import CVATTooltip from 'components/common/cvat-tooltip'; interface Props { shapeType: ShapeType; @@ -129,11 +129,11 @@ function DrawShapePopoverComponent(props: Props): JSX.Element { { - if (typeof value !== 'undefined') { - onChangePoints(Math.floor(clamp(+value, minimumPoints, Number.MAX_SAFE_INTEGER))); - } else if (!value) { + onChange={(value: number | undefined | string | null) => { + if (typeof value === 'undefined' || value === null) { onChangePoints(undefined); + } else { + onChangePoints(Math.floor(clamp(+value, minimumPoints, Number.MAX_SAFE_INTEGER))); } }} className='cvat-draw-shape-popover-points-selector' @@ -146,14 +146,14 @@ function DrawShapePopoverComponent(props: Props): JSX.Element { )} - + - + - + - + diff --git a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/fit-control.tsx b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/fit-control.tsx index e8f10f29d222..baa544ff412b 100644 --- a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/fit-control.tsx +++ b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/fit-control.tsx @@ -1,13 +1,13 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT import React from 'react'; import Icon from '@ant-design/icons'; -import Tooltip from 'antd/lib/tooltip'; import { FitIcon } from 'icons'; import { Canvas } from 'cvat-canvas-wrapper'; +import CVATTooltip from 'components/common/cvat-tooltip'; interface Props { canvasInstance: Canvas; @@ -17,9 +17,9 @@ function FitControl(props: Props): JSX.Element { const { canvasInstance } = props; return ( - + canvasInstance.fit()} /> - + ); } diff --git a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/group-control.tsx b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/group-control.tsx index fb05e3f90ec8..8b93c7577e5f 100644 --- a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/group-control.tsx +++ b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/group-control.tsx @@ -1,14 +1,14 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT import React from 'react'; -import Tooltip from 'antd/lib/tooltip'; import Icon from '@ant-design/icons'; import { GroupIcon } from 'icons'; import { Canvas } from 'cvat-canvas-wrapper'; import { ActiveControl } from 'reducers/interfaces'; +import CVATTooltip from 'components/common/cvat-tooltip'; interface Props { canvasInstance: Canvas; @@ -19,30 +19,37 @@ interface Props { } function GroupControl(props: Props): JSX.Element { - const { switchGroupShortcut, resetGroupShortcut, activeControl, canvasInstance, groupObjects } = props; + const { + switchGroupShortcut, resetGroupShortcut, activeControl, canvasInstance, groupObjects, + } = props; const dynamicIconProps = - activeControl === ActiveControl.GROUP ? { - className: 'cvat-group-control cvat-active-canvas-control', - onClick: (): void => { - canvasInstance.group({ enabled: false }); - groupObjects(false); - }, - } : { - className: 'cvat-group-control', - onClick: (): void => { - canvasInstance.cancel(); - canvasInstance.group({ enabled: true }); - groupObjects(true); - }, - }; - - const title = - `Group shapes/tracks ${switchGroupShortcut}.` + ` Select and press ${resetGroupShortcut} to reset a group`; + activeControl === ActiveControl.GROUP ? + { + className: 'cvat-group-control cvat-active-canvas-control', + onClick: (): void => { + canvasInstance.group({ enabled: false }); + groupObjects(false); + }, + } : + { + className: 'cvat-group-control', + onClick: (): void => { + canvasInstance.cancel(); + canvasInstance.group({ enabled: true }); + groupObjects(true); + }, + }; + + const title = [ + `Group shapes/tracks ${switchGroupShortcut}. `, + `Select and press ${resetGroupShortcut} to reset a group.`, + ].join(' '); + return ( - + - + ); } diff --git a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/handle-popover-visibility.tsx b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/handle-popover-visibility.tsx index c9de255dca18..fdc80926e6e7 100644 --- a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/handle-popover-visibility.tsx +++ b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/handle-popover-visibility.tsx @@ -1,4 +1,4 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT diff --git a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/merge-control.tsx b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/merge-control.tsx index b00c9eb533ea..2d29fb21196c 100644 --- a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/merge-control.tsx +++ b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/merge-control.tsx @@ -1,14 +1,14 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT import React from 'react'; -import Tooltip from 'antd/lib/tooltip'; import Icon from '@ant-design/icons'; import { MergeIcon } from 'icons'; import { Canvas } from 'cvat-canvas-wrapper'; import { ActiveControl } from 'reducers/interfaces'; +import CVATTooltip from 'components/common/cvat-tooltip'; interface Props { canvasInstance: Canvas; @@ -18,28 +18,32 @@ interface Props { } function MergeControl(props: Props): JSX.Element { - const { switchMergeShortcut, activeControl, canvasInstance, mergeObjects } = props; + const { + switchMergeShortcut, activeControl, canvasInstance, mergeObjects, + } = props; const dynamicIconProps = - activeControl === ActiveControl.MERGE ? { - className: 'cvat-merge-control cvat-active-canvas-control', - onClick: (): void => { - canvasInstance.merge({ enabled: false }); - mergeObjects(false); - }, - } : { - className: 'cvat-merge-control', - onClick: (): void => { - canvasInstance.cancel(); - canvasInstance.merge({ enabled: true }); - mergeObjects(true); - }, - }; + activeControl === ActiveControl.MERGE ? + { + className: 'cvat-merge-control cvat-active-canvas-control', + onClick: (): void => { + canvasInstance.merge({ enabled: false }); + mergeObjects(false); + }, + } : + { + className: 'cvat-merge-control', + onClick: (): void => { + canvasInstance.cancel(); + canvasInstance.merge({ enabled: true }); + mergeObjects(true); + }, + }; return ( - + - + ); } diff --git a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/move-control.tsx b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/move-control.tsx index 05b38556beda..760a59ddb22b 100644 --- a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/move-control.tsx +++ b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/move-control.tsx @@ -1,14 +1,14 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT import React from 'react'; import Icon from '@ant-design/icons'; -import Tooltip from 'antd/lib/tooltip'; import { MoveIcon } from 'icons'; import { ActiveControl } from 'reducers/interfaces'; import { Canvas } from 'cvat-canvas-wrapper'; +import CVATTooltip from 'components/common/cvat-tooltip'; interface Props { canvasInstance: Canvas; @@ -19,7 +19,7 @@ function MoveControl(props: Props): JSX.Element { const { canvasInstance, activeControl } = props; return ( - + - + ); } diff --git a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/opencv-control.tsx b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/opencv-control.tsx index af59821a378c..8bb4ea8740c8 100644 --- a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/opencv-control.tsx +++ b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/opencv-control.tsx @@ -5,7 +5,6 @@ import React from 'react'; import { connect } from 'react-redux'; import { Row, Col } from 'antd/lib/grid'; -import Tooltip from 'antd/lib/tooltip'; import Popover from 'antd/lib/popover'; import Icon, { ScissorOutlined } from '@ant-design/icons'; import Text from 'antd/lib/typography/Text'; @@ -29,6 +28,8 @@ import { createAnnotationsAsync, } from 'actions/annotation-actions'; import LabelSelector from 'components/label-selector/label-selector'; +import CVATTooltip from 'components/common/cvat-tooltip'; +import withVisibilityHandling from './handle-popover-visibility'; interface Props { labels: any[]; @@ -55,6 +56,7 @@ interface State { } const core = getCore(); +const CustomPopover = withVisibilityHandling(Popover, 'opencv-control'); function mapStateToProps(state: CombinedState): Props { const { @@ -73,7 +75,7 @@ function mapStateToProps(state: CombinedState): Props { return { isActivated: activeControl === ActiveControl.OPENCV_TOOLS, - canvasInstance, + canvasInstance: canvasInstance as Canvas, jobInstance, curZOrder, labels, @@ -168,7 +170,7 @@ class OpenCVControlComponent extends React.PureComponent - + - + @@ -402,14 +404,14 @@ class OpenCVControlComponent extends React.PureComponent - + ); } } diff --git a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/resize-control.tsx b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/resize-control.tsx index 47d216d737a1..ac7806cb070a 100644 --- a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/resize-control.tsx +++ b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/resize-control.tsx @@ -1,14 +1,14 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT import React from 'react'; import Icon from '@ant-design/icons'; -import Tooltip from 'antd/lib/tooltip'; import { ZoomIcon } from 'icons'; import { ActiveControl } from 'reducers/interfaces'; import { Canvas } from 'cvat-canvas-wrapper'; +import CVATTooltip from 'components/common/cvat-tooltip'; interface Props { canvasInstance: Canvas; @@ -19,7 +19,7 @@ function ResizeControl(props: Props): JSX.Element { const { activeControl, canvasInstance } = props; return ( - + - + ); } diff --git a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/rotate-control.tsx b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/rotate-control.tsx index 380e6b55f8a6..9fa1e2f9796b 100644 --- a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/rotate-control.tsx +++ b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/rotate-control.tsx @@ -1,15 +1,14 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT import React from 'react'; import Icon from '@ant-design/icons'; -import Tooltip from 'antd/lib/tooltip'; import Popover from 'antd/lib/popover'; import { RotateIcon } from 'icons'; import { Rotation } from 'reducers/interfaces'; - +import CVATTooltip from 'components/common/cvat-tooltip'; import withVisibilityHandling from './handle-popover-visibility'; interface Props { @@ -18,37 +17,29 @@ interface Props { rotateFrame(rotation: Rotation): void; } +const CustomPopover = withVisibilityHandling(Popover, 'rotate-canvas'); function RotateControl(props: Props): JSX.Element { const { anticlockwiseShortcut, clockwiseShortcut, rotateFrame } = props; - const CustomPopover = withVisibilityHandling(Popover, 'rotate-canvas'); return ( - + rotateFrame(Rotation.ANTICLOCKWISE90)} component={RotateIcon} /> - - + + rotateFrame(Rotation.CLOCKWISE90)} component={RotateIcon} /> - + )} trigger='hover' diff --git a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/setup-tag-control.tsx b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/setup-tag-control.tsx index fcc4ea39a6c5..5b57b98c4514 100644 --- a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/setup-tag-control.tsx +++ b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/setup-tag-control.tsx @@ -1,4 +1,4 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT @@ -17,10 +17,9 @@ interface Props { isDrawing: boolean; } +const CustomPopover = withVisibilityHandling(Popover, 'setup-tag'); function SetupTagControl(props: Props): JSX.Element { const { isDrawing } = props; - const CustomPopover = withVisibilityHandling(Popover, 'setup-tag'); - const dynamcPopoverPros = isDrawing ? { overlayStyle: { diff --git a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/setup-tag-popover.tsx b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/setup-tag-popover.tsx index a0e31a605dbb..a202e3467a42 100644 --- a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/setup-tag-popover.tsx +++ b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/setup-tag-popover.tsx @@ -1,13 +1,14 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT import React from 'react'; import { Row, Col } from 'antd/lib/grid'; import Button from 'antd/lib/button'; -import Tooltip from 'antd/lib/tooltip'; import Text from 'antd/lib/typography/Text'; + import LabelSelector from 'components/label-selector/label-selector'; +import CVATTooltip from 'components/common/cvat-tooltip'; interface Props { labels: any[]; @@ -48,9 +49,9 @@ function SetupTagPopover(props: Props): JSX.Element { - + - + diff --git a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/split-control.tsx b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/split-control.tsx index 43625fd6fc38..61d6bfcee717 100644 --- a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/split-control.tsx +++ b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/split-control.tsx @@ -1,14 +1,14 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT import React from 'react'; -import Tooltip from 'antd/lib/tooltip'; import Icon from '@ant-design/icons'; import { SplitIcon } from 'icons'; import { Canvas } from 'cvat-canvas-wrapper'; import { ActiveControl } from 'reducers/interfaces'; +import CVATTooltip from 'components/common/cvat-tooltip'; interface Props { canvasInstance: Canvas; @@ -41,9 +41,9 @@ function SplitControl(props: Props): JSX.Element { }; return ( - + - + ); } diff --git a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/tools-control.tsx b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/tools-control.tsx index 25941565847f..8ff6aae647bb 100644 --- a/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/tools-control.tsx +++ b/cvat-ui/src/components/annotation-page/standard-workspace/controls-side-bar/tools-control.tsx @@ -1,4 +1,4 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT @@ -56,6 +56,7 @@ interface DispatchToProps { } const core = getCore(); +const CustomPopover = withVisibilityHandling(Popover, 'tools-control'); function mapStateToProps(state: CombinedState): StateToProps { const { annotation } = state; @@ -73,7 +74,7 @@ function mapStateToProps(state: CombinedState): StateToProps { activeLabelID: annotation.drawing.activeLabelID, labels: annotation.job.labels, states: annotation.annotations.states, - canvasInstance, + canvasInstance: canvasInstance as Canvas, jobInstance, frame, curZOrder: annotation.annotations.zLayer.cur, @@ -219,7 +220,8 @@ export class ToolsControlComponent extends React.PureComponent { try { result = await core.lambda.call(jobInstance.task, interactor, { frame, - points: convertShapesForInteractor((e as CustomEvent).detail.shapes), + pos_points: convertShapesForInteractor((e as CustomEvent).detail.shapes, 0), + neg_points: convertShapesForInteractor((e as CustomEvent).detail.shapes, 2), }); if (this.interactionIsAborted) { @@ -303,11 +305,7 @@ export class ToolsControlComponent extends React.PureComponent { private onTracking = async (e: Event): Promise => { const { - isActivated, - jobInstance, - frame, - curZOrder, - fetchAnnotations, + isActivated, jobInstance, frame, curZOrder, fetchAnnotations, } = this.props; if (!isActivated) { @@ -520,8 +518,8 @@ export class ToolsControlComponent extends React.PureComponent { min={1} precision={0} max={jobInstance.stopFrame - frame} - onChange={(value: number | undefined | string): void => { - if (typeof value !== 'undefined') { + onChange={(value: number | undefined | string | null): void => { + if (typeof value !== 'undefined' && value !== null) { this.setState({ trackingFrames: +value, }); @@ -659,19 +657,20 @@ export class ToolsControlComponent extends React.PureComponent { try { this.setState({ mode: 'detection', fetching: true }); const result = await core.lambda.call(task, model, { ...body, frame }); - const states = result.map((data: any): any => ( - new core.classes.ObjectState({ - shapeType: data.type, - label: task.labels.filter((label: any): boolean => label.name === data.label)[0], - points: data.points, - objectType: ObjectType.SHAPE, - frame, - occluded: false, - source: 'auto', - attributes: {}, - zOrder: curZOrder, - }) - )); + const states = result.map( + (data: any): any => + new core.classes.ObjectState({ + shapeType: data.type, + label: task.labels.filter((label: any): boolean => label.name === data.label)[0], + points: data.points, + objectType: ObjectType.SHAPE, + frame, + occluded: false, + source: 'auto', + attributes: {}, + zOrder: curZOrder, + }), + ); await jobInstance.annotations.put(states); fetchAnnotations(); @@ -722,7 +721,6 @@ export class ToolsControlComponent extends React.PureComponent { const { fetching, trackingProgress } = this.state; if (![...interactors, ...detectors, ...trackers].length) return null; - const CustomPopover = withVisibilityHandling(Popover, 'tools-control'); const dynamcPopoverPros = isActivated ? { diff --git a/cvat-ui/src/components/annotation-page/standard-workspace/objects-side-bar/color-picker.tsx b/cvat-ui/src/components/annotation-page/standard-workspace/objects-side-bar/color-picker.tsx index e877af6c324a..28043cce0a04 100644 --- a/cvat-ui/src/components/annotation-page/standard-workspace/objects-side-bar/color-picker.tsx +++ b/cvat-ui/src/components/annotation-page/standard-workspace/objects-side-bar/color-picker.tsx @@ -1,4 +1,4 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT import React, { useState } from 'react'; @@ -9,9 +9,9 @@ import Button from 'antd/lib/button'; import Popover from 'antd/lib/popover'; import Text from 'antd/lib/typography/Text'; import { SketchPicker } from 'react-color'; -import Tooltip from 'antd/lib/tooltip'; import getCore from 'cvat-core-wrapper'; +import CVATTooltip from 'components/common/cvat-tooltip'; const core = getCore(); @@ -108,7 +108,7 @@ function ColorPicker(props: Props, ref: React.Ref): JSX.Element { Select color - + - + )} diff --git a/cvat-ui/src/components/annotation-page/standard-workspace/objects-side-bar/issues-list.tsx b/cvat-ui/src/components/annotation-page/standard-workspace/objects-side-bar/issues-list.tsx index 31a65ad2053b..f9fb7070176c 100644 --- a/cvat-ui/src/components/annotation-page/standard-workspace/objects-side-bar/issues-list.tsx +++ b/cvat-ui/src/components/annotation-page/standard-workspace/objects-side-bar/issues-list.tsx @@ -1,4 +1,4 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT @@ -8,12 +8,12 @@ import { CombinedState } from 'reducers/interfaces'; import { LeftOutlined, RightOutlined, EyeInvisibleFilled, EyeOutlined, } from '@ant-design/icons'; -import Tooltip from 'antd/lib/tooltip'; import Alert from 'antd/lib/alert'; import { Row, Col } from 'antd/lib/grid'; import { changeFrameAsync } from 'actions/annotation-actions'; import { reviewActions } from 'actions/review-actions'; +import CVATTooltip from 'components/common/cvat-tooltip'; export default function LabelsListComponent(): JSX.Element { const dispatch = useDispatch(); @@ -54,17 +54,17 @@ export default function LabelsListComponent(): JSX.Element {
- + - + - + - + - + {issuesHidden ? ( dispatch(reviewActions.switchIssuesHiddenFlag(true))} /> )} - +
@@ -84,6 +84,7 @@ export default function LabelsListComponent(): JSX.Element { {frameIssues.map( (frameIssue: any): JSX.Element => (
{ const element = window.document.getElementById( diff --git a/cvat-ui/src/components/annotation-page/standard-workspace/objects-side-bar/object-item-basics.tsx b/cvat-ui/src/components/annotation-page/standard-workspace/objects-side-bar/object-item-basics.tsx index 8aa249eeb310..0e7cda1ecd0b 100644 --- a/cvat-ui/src/components/annotation-page/standard-workspace/objects-side-bar/object-item-basics.tsx +++ b/cvat-ui/src/components/annotation-page/standard-workspace/objects-side-bar/object-item-basics.tsx @@ -1,4 +1,4 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT @@ -7,9 +7,9 @@ import { Row, Col } from 'antd/lib/grid'; import { MoreOutlined } from '@ant-design/icons'; import Dropdown from 'antd/lib/dropdown'; import Text from 'antd/lib/typography/Text'; -import Tooltip from 'antd/lib/tooltip'; import { ObjectType, ShapeType, ColorBy } from 'reducers/interfaces'; +import CVATTooltip from 'components/common/cvat-tooltip'; import LabelSelector from 'components/label-selector/label-selector'; import ItemMenu from './object-item-menu'; @@ -103,7 +103,7 @@ function ItemTopComponent(props: Props): JSX.Element { - + - + + - + ) : ( ); @@ -118,9 +118,9 @@ function NavigatePrevKeyframe(props: Props): JSX.Element { function NavigateNextKeyframe(props: Props): JSX.Element { const { navigateNextKeyframe, nextKeyFrameShortcut } = props; return navigateNextKeyframe ? ( - + - + ) : ( ); @@ -140,13 +140,13 @@ function SwitchLock(props: Props): JSX.Element { locked, switchLockShortcut, lock, unlock, } = props; return ( - + {locked ? ( ) : ( )} - + ); } @@ -155,26 +155,26 @@ function SwitchOccluded(props: Props): JSX.Element { switchOccludedShortcut, occluded, unsetOccluded, setOccluded, } = props; return ( - + {occluded ? ( ) : ( )} - + ); } function SwitchPinned(props: Props): JSX.Element { const { pinned, pin, unpin } = props; return ( - + {pinned ? ( ) : ( )} - + ); } @@ -184,13 +184,13 @@ function SwitchHidden(props: Props): JSX.Element { } = props; const hiddenStyle = hiddenDisabled ? { opacity: 0.5, pointerEvents: 'none' as const } : {}; return ( - + ); } @@ -200,7 +200,7 @@ function SwitchOutside(props: Props): JSX.Element { } = props; const outsideStyle = outsideDisabled ? { opacity: 0.5, pointerEvents: 'none' as const } : {}; return ( - + {outside ? ( )} - + ); } @@ -221,13 +221,13 @@ function SwitchKeyframe(props: Props): JSX.Element { } = props; const keyframeStyle = keyframeDisabled ? { opacity: 0.5, pointerEvents: 'none' as const } : {}; return ( - + {keyframe ? ( ) : ( )} - + ); } diff --git a/cvat-ui/src/components/annotation-page/standard-workspace/objects-side-bar/object-item-menu.tsx b/cvat-ui/src/components/annotation-page/standard-workspace/objects-side-bar/object-item-menu.tsx index d27aa05b1b78..933a12836deb 100644 --- a/cvat-ui/src/components/annotation-page/standard-workspace/objects-side-bar/object-item-menu.tsx +++ b/cvat-ui/src/components/annotation-page/standard-workspace/objects-side-bar/object-item-menu.tsx @@ -1,4 +1,4 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT @@ -6,7 +6,6 @@ import React from 'react'; import Menu from 'antd/lib/menu'; import Button from 'antd/lib/button'; import Modal from 'antd/lib/modal'; -import Tooltip from 'antd/lib/tooltip'; import Icon, { LinkOutlined, CopyOutlined, @@ -15,9 +14,11 @@ import Icon, { RetweetOutlined, DeleteOutlined, } from '@ant-design/icons'; + import { BackgroundIcon, ForegroundIcon, ResetPerspectiveIcon, ColorizeIcon, } from 'icons'; +import CVATTooltip from 'components/common/cvat-tooltip'; import { ObjectType, ShapeType, ColorBy } from 'reducers/interfaces'; import ColorPicker from './color-picker'; @@ -71,11 +72,11 @@ function MakeCopyItem(props: ItemProps): JSX.Element { const { copyShortcut, pasteShortcut, copy } = toolProps; return ( - + - + ); } @@ -85,11 +86,11 @@ function PropagateItem(props: ItemProps): JSX.Element { const { propagateShortcut, propagate } = toolProps; return ( - + - + ); } @@ -99,11 +100,11 @@ function TrackingItem(props: ItemProps): JSX.Element { const { activateTracking } = toolProps; return ( - + - + ); } @@ -138,12 +139,12 @@ function ToBackgroundItem(props: ItemProps): JSX.Element { const { toBackgroundShortcut, toBackground } = toolProps; return ( - + - + ); } @@ -153,12 +154,12 @@ function ToForegroundItem(props: ItemProps): JSX.Element { const { toForegroundShortcut, toForeground } = toolProps; return ( - + - + ); } @@ -182,12 +183,12 @@ function SwitchColorItem(props: ItemProps): JSX.Element { onVisibleChange={changeColorPickerVisible} resetVisible={false} > - + - + ); @@ -198,7 +199,7 @@ function RemoveItem(props: ItemProps): JSX.Element { const { removeShortcut, locked, remove } = toolProps; return ( - + - + ); } diff --git a/cvat-ui/src/components/annotation-page/standard-workspace/objects-side-bar/objects-list-header.tsx b/cvat-ui/src/components/annotation-page/standard-workspace/objects-side-bar/objects-list-header.tsx index 05c1272ace44..1e77e7af2b64 100644 --- a/cvat-ui/src/components/annotation-page/standard-workspace/objects-side-bar/objects-list-header.tsx +++ b/cvat-ui/src/components/annotation-page/standard-workspace/objects-side-bar/objects-list-header.tsx @@ -1,4 +1,4 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT @@ -12,8 +12,8 @@ import { CaretDownOutlined, CaretUpFilled, } from '@ant-design/icons'; -import Tooltip from 'antd/lib/tooltip'; +import CVATTooltip from 'components/common/cvat-tooltip'; import AnnotationsFiltersInput from 'components/annotation-page/annotations-filters-input'; import StatesOrderingSelector from 'components/annotation-page/standard-workspace/objects-side-bar/states-ordering-selector'; import { StatesOrdering } from 'reducers/interfaces'; @@ -41,9 +41,9 @@ function LockAllSwitcher(props: Props): JSX.Element { } = props; return ( - + {statesLocked ? : } - + ); } @@ -54,13 +54,13 @@ function HideAllSwitcher(props: Props): JSX.Element { } = props; return ( - + ); } @@ -69,13 +69,13 @@ function CollapseAllSwitcher(props: Props): JSX.Element { const { statesCollapsed, expandAllStates, collapseAllStates } = props; return ( - + {statesCollapsed ? ( ) : ( )} - + ); } diff --git a/cvat-ui/src/components/annotation-page/standard3D-workspace/controls-side-bar/cursor-control.tsx b/cvat-ui/src/components/annotation-page/standard3D-workspace/controls-side-bar/cursor-control.tsx index b8b634567f56..72b2c99d3f4d 100644 --- a/cvat-ui/src/components/annotation-page/standard3D-workspace/controls-side-bar/cursor-control.tsx +++ b/cvat-ui/src/components/annotation-page/standard3D-workspace/controls-side-bar/cursor-control.tsx @@ -4,11 +4,11 @@ import React from 'react'; import Icon from '@ant-design/icons'; -import Tooltip from 'antd/lib/tooltip'; import { CursorIcon } from 'icons'; import { ActiveControl } from 'reducers/interfaces'; import { Canvas3d as Canvas } from 'cvat-canvas3d-wrapper'; +import CVATTooltip from 'components/common/cvat-tooltip'; interface Props { canvasInstance: Canvas; @@ -20,15 +20,15 @@ function CursorControl(props: Props): JSX.Element { const { activeControl, cursorShortkey } = props; return ( - + - + ); } diff --git a/cvat-ui/src/components/annotation-page/standard3D-workspace/controls-side-bar/move-control.tsx b/cvat-ui/src/components/annotation-page/standard3D-workspace/controls-side-bar/move-control.tsx index 05ddd20a8b32..4a41c6df86c4 100644 --- a/cvat-ui/src/components/annotation-page/standard3D-workspace/controls-side-bar/move-control.tsx +++ b/cvat-ui/src/components/annotation-page/standard3D-workspace/controls-side-bar/move-control.tsx @@ -4,10 +4,10 @@ import React from 'react'; import Icon from '@ant-design/icons'; -import Tooltip from 'antd/lib/tooltip'; import { MoveIcon } from 'icons'; import { ActiveControl } from 'reducers/interfaces'; +import CVATTooltip from 'components/common/cvat-tooltip'; import { Canvas3d as Canvas } from 'cvat-canvas3d-wrapper'; interface Props { @@ -19,15 +19,15 @@ function MoveControl(props: Props): JSX.Element { const { activeControl } = props; return ( - + - + ); } diff --git a/cvat-ui/src/components/annotation-page/standard3D-workspace/controls-side-bar/photo-context.tsx b/cvat-ui/src/components/annotation-page/standard3D-workspace/controls-side-bar/photo-context.tsx index b18b84b86379..f5b9587b0c59 100644 --- a/cvat-ui/src/components/annotation-page/standard3D-workspace/controls-side-bar/photo-context.tsx +++ b/cvat-ui/src/components/annotation-page/standard3D-workspace/controls-side-bar/photo-context.tsx @@ -2,10 +2,11 @@ // // SPDX-License-Identifier: MIT +import React from 'react'; import CameraIcon from '@ant-design/icons/CameraOutlined'; -import Tooltip from 'antd/lib/tooltip'; + +import CVATTooltip from 'components/common/cvat-tooltip'; import { Canvas3d as Canvas } from 'cvat-canvas3d-wrapper'; -import React from 'react'; import { ActiveControl } from 'reducers/interfaces'; interface Props { @@ -19,7 +20,7 @@ function PhotoContextControl(props: Props): JSX.Element { const { activeControl, contextImageHide, hideShowContextImage } = props; return ( - + - + ); } diff --git a/cvat-ui/src/components/annotation-page/top-bar/player-buttons.tsx b/cvat-ui/src/components/annotation-page/top-bar/player-buttons.tsx index 22ca7c9798e9..5bc79ca24064 100644 --- a/cvat-ui/src/components/annotation-page/top-bar/player-buttons.tsx +++ b/cvat-ui/src/components/annotation-page/top-bar/player-buttons.tsx @@ -1,14 +1,14 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT import React from 'react'; - import { Col } from 'antd/lib/grid'; import Icon from '@ant-design/icons'; -import Tooltip from 'antd/lib/tooltip'; import Popover from 'antd/lib/popover'; +import CVATTooltip from 'components/common/cvat-tooltip'; + import { FirstIcon, BackJumpIcon, @@ -104,18 +104,18 @@ function PlayerButtons(props: Props): JSX.Element { return ( - + - - + + - + - + - - + + - - + + - + )} > - + {prevButton} - + {!playing ? ( - + - + ) : ( - + - + )} - + - - + + - - + + - + )} > - + {nextButton} - + - + - - + + - + ); } diff --git a/cvat-ui/src/components/annotation-page/top-bar/player-navigation.tsx b/cvat-ui/src/components/annotation-page/top-bar/player-navigation.tsx index 65ef51305669..dfe72354c344 100644 --- a/cvat-ui/src/components/annotation-page/top-bar/player-navigation.tsx +++ b/cvat-ui/src/components/annotation-page/top-bar/player-navigation.tsx @@ -1,4 +1,4 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT @@ -7,11 +7,11 @@ import React, { useState, useEffect } from 'react'; import { Row, Col } from 'antd/lib/grid'; import { LinkOutlined } from '@ant-design/icons'; import Slider from 'antd/lib/slider'; -import Tooltip from 'antd/lib/tooltip'; import InputNumber from 'antd/lib/input-number'; import Input from 'antd/lib/input'; import Text from 'antd/lib/typography/Text'; +import CVATTooltip from 'components/common/cvat-tooltip'; import { clamp } from 'utils/math'; interface Props { @@ -63,26 +63,26 @@ function PlayerNavigation(props: Props): JSX.Element { - + {frameFilename} - + - + - + - + { - if (typeof value !== 'undefined') { + onChange={(value: number | undefined | string | null) => { + if (typeof value !== 'undefined' && value !== null) { setFrameInputValue(Math.floor(clamp(+value, startFrame, stopFrame))); } }} @@ -93,7 +93,7 @@ function PlayerNavigation(props: Props): JSX.Element { onInputChange(frameInputValue); }} /> - + ); diff --git a/cvat-ui/src/components/annotation-page/top-bar/right-group.tsx b/cvat-ui/src/components/annotation-page/top-bar/right-group.tsx index 2e1b92afb623..dfd1a62cff83 100644 --- a/cvat-ui/src/components/annotation-page/top-bar/right-group.tsx +++ b/cvat-ui/src/components/annotation-page/top-bar/right-group.tsx @@ -1,4 +1,4 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2021 Intel Corporation // // SPDX-License-Identifier: MIT diff --git a/cvat-ui/src/components/annotation-page/top-bar/statistics-modal.tsx b/cvat-ui/src/components/annotation-page/top-bar/statistics-modal.tsx index 7db9b687307a..2ac1339dfcba 100644 --- a/cvat-ui/src/components/annotation-page/top-bar/statistics-modal.tsx +++ b/cvat-ui/src/components/annotation-page/top-bar/statistics-modal.tsx @@ -5,12 +5,13 @@ import React from 'react'; import { Row, Col } from 'antd/lib/grid'; import { QuestionCircleOutlined } from '@ant-design/icons'; -import Tooltip from 'antd/lib/tooltip'; import Table from 'antd/lib/table'; import Modal from 'antd/lib/modal'; import Spin from 'antd/lib/spin'; import Text from 'antd/lib/typography/Text'; +import CVATTooltip from 'components/common/cvat-tooltip'; + interface Props { collecting: boolean; data: any; @@ -76,12 +77,12 @@ export default function StatisticsModalComponent(props: Props): JSX.Element { }); const makeShapesTracksTitle = (title: string): JSX.Element => ( - + {title} - + ); const columns = [ diff --git a/cvat-ui/src/components/annotation-page/top-bar/top-bar.tsx b/cvat-ui/src/components/annotation-page/top-bar/top-bar.tsx index 2e9212dee329..38f559edab2a 100644 --- a/cvat-ui/src/components/annotation-page/top-bar/top-bar.tsx +++ b/cvat-ui/src/components/annotation-page/top-bar/top-bar.tsx @@ -1,4 +1,4 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2021 Intel Corporation // // SPDX-License-Identifier: MIT diff --git a/cvat-ui/src/components/common/cvat-tooltip.tsx b/cvat-ui/src/components/common/cvat-tooltip.tsx new file mode 100644 index 000000000000..062fedd1ffa2 --- /dev/null +++ b/cvat-ui/src/components/common/cvat-tooltip.tsx @@ -0,0 +1,18 @@ +// Copyright (C) 2021 Intel Corporation +// +// SPDX-License-Identifier: MIT + +import React from 'react'; +import Tooltip, { TooltipProps } from 'antd/lib/tooltip'; + +function CVATTooltip(props: TooltipProps): JSX.Element { + const { children, ...rest } = props; + + return ( + + {children} + + ); +} + +export default React.memo(CVATTooltip); diff --git a/cvat-ui/src/components/create-task-page/advanced-configuration-form.tsx b/cvat-ui/src/components/create-task-page/advanced-configuration-form.tsx index 804a87257020..5ac9d3aeeac2 100644 --- a/cvat-ui/src/components/create-task-page/advanced-configuration-form.tsx +++ b/cvat-ui/src/components/create-task-page/advanced-configuration-form.tsx @@ -1,4 +1,4 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT @@ -7,12 +7,12 @@ import { Row, Col } from 'antd/lib/grid'; import { PercentageOutlined } from '@ant-design/icons'; import Input from 'antd/lib/input'; import Checkbox from 'antd/lib/checkbox'; -import Tooltip from 'antd/lib/tooltip'; import Form, { FormInstance, RuleObject, RuleRender } from 'antd/lib/form'; import Text from 'antd/lib/typography/Text'; +import { Store } from 'antd/lib/form/interface'; +import CVATTooltip from 'components/common/cvat-tooltip'; import patterns from 'utils/validation-patterns'; -import { Store } from 'antd/lib/form/interface'; export interface AdvancedConfiguration { bugTracker?: string; @@ -176,7 +176,7 @@ class AdvancedConfigurationForm extends React.PureComponent { private renderImageQuality(): JSX.Element { return ( - + { > } /> - + ); } private renderOverlap(): JSX.Element { return ( - + { > - + ); } private renderSegmentSize(): JSX.Element { return ( - + - + ); } @@ -329,7 +329,7 @@ class AdvancedConfigurationForm extends React.PureComponent { private renderChunkSize(): JSX.Element { return ( - Defines a number of frames to be packed in a chunk when send from client to server. Server @@ -346,12 +346,11 @@ class AdvancedConfigurationForm extends React.PureComponent { More: 1 - 4 )} - mouseLeaveDelay={0} > - + ); } diff --git a/cvat-ui/src/components/global-error-boundary/global-error-boundary.tsx b/cvat-ui/src/components/global-error-boundary/global-error-boundary.tsx index 6330ca00cdfe..30db61c7c7a5 100644 --- a/cvat-ui/src/components/global-error-boundary/global-error-boundary.tsx +++ b/cvat-ui/src/components/global-error-boundary/global-error-boundary.tsx @@ -1,4 +1,4 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT @@ -10,7 +10,6 @@ import Text from 'antd/lib/typography/Text'; import Paragraph from 'antd/lib/typography/Paragraph'; import Collapse from 'antd/lib/collapse'; import TextArea from 'antd/lib/input/TextArea'; -import Tooltip from 'antd/lib/tooltip'; import copy from 'copy-to-clipboard'; import ErrorStackParser from 'error-stack-parser'; @@ -18,6 +17,7 @@ import { ThunkDispatch } from 'utils/redux'; import { resetAfterErrorAsync } from 'actions/boundaries-actions'; import { CombinedState } from 'reducers/interfaces'; import logger, { LogType } from 'cvat-logger'; +import CVATTooltip from 'components/common/cvat-tooltip'; import consts from 'consts'; interface StateToProps { @@ -146,7 +146,7 @@ class GlobalErrorBoundary extends React.PureComponent {
  • - + {/* eslint-disable-next-line */} { @@ -157,7 +157,7 @@ class GlobalErrorBoundary extends React.PureComponent { Copy {' '} - + the error message to clipboard
  • diff --git a/cvat-ui/src/components/labels-editor/common.ts b/cvat-ui/src/components/labels-editor/common.ts index f843218e2e70..d0c75f9f1e7f 100644 --- a/cvat-ui/src/components/labels-editor/common.ts +++ b/cvat-ui/src/components/labels-editor/common.ts @@ -26,23 +26,23 @@ function validateParsedAttribute(attr: Attribute): void { if (!['number', 'undefined'].includes(typeof attr.id)) { throw new Error( - `Attribute: "${attr.name}". ` + `Type of attribute id must be a number or undefined. Got value ${attr.id}`, + `Attribute: "${attr.name}". Type of attribute id must be a number or undefined. Got value ${attr.id}`, ); } if (!['checkbox', 'number', 'text', 'radio', 'select'].includes((attr.input_type || '').toLowerCase())) { - throw new Error(`Attribute: "${attr.name}". ` + `Unknown input type: ${attr.input_type}`); + throw new Error(`Attribute: "${attr.name}". Unknown input type: ${attr.input_type}`); } if (typeof attr.mutable !== 'boolean') { throw new Error( - `Attribute: "${attr.name}". ` + `Mutable flag must be a boolean value. Got value ${attr.mutable}`, + `Attribute: "${attr.name}". Mutable flag must be a boolean value. Got value ${attr.mutable}`, ); } if (!Array.isArray(attr.values)) { throw new Error( - `Attribute: "${attr.name}". ` + `Attribute values must be an array. Got type ${typeof attr.values}`, + `Attribute: "${attr.name}". Attribute values must be an array. Got type ${typeof attr.values}`, ); } @@ -52,7 +52,7 @@ function validateParsedAttribute(attr: Attribute): void { for (const value of attr.values) { if (typeof value !== 'string') { - throw new Error(`Attribute: "${attr.name}". ` + `Each value must be a string. Got value ${value}`); + throw new Error(`Attribute: "${attr.name}". Each value must be a string. Got value ${value}`); } } } @@ -64,12 +64,12 @@ export function validateParsedLabel(label: Label): void { if (!['number', 'undefined'].includes(typeof label.id)) { throw new Error( - `Label "${label.name}". ` + `Type of label id must be only a number or undefined. Got value ${label.id}`, + `Label "${label.name}". Type of label id must be only a number or undefined. Got value ${label.id}`, ); } if (typeof label.color !== 'string') { - throw new Error(`Label "${label.name}". ` + `Label color must be a string. Got ${typeof label.color}`); + throw new Error(`Label "${label.name}". Label color must be a string. Got ${typeof label.color}`); } if (!label.color.match(/^#[0-9a-fA-F]{6}$|^$/)) { @@ -80,7 +80,7 @@ export function validateParsedLabel(label: Label): void { } if (!Array.isArray(label.attributes)) { - throw new Error(`Label "${label.name}". ` + `attributes must be an array. Got type ${typeof label.attributes}`); + throw new Error(`Label "${label.name}". Attributes must be an array. Got type ${typeof label.attributes}`); } for (const attr of label.attributes) { diff --git a/cvat-ui/src/components/labels-editor/constructor-viewer-item.tsx b/cvat-ui/src/components/labels-editor/constructor-viewer-item.tsx index 8e97274297bd..32c56dd7677e 100644 --- a/cvat-ui/src/components/labels-editor/constructor-viewer-item.tsx +++ b/cvat-ui/src/components/labels-editor/constructor-viewer-item.tsx @@ -1,12 +1,12 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT import React from 'react'; import { EditOutlined, CloseOutlined } from '@ant-design/icons'; -import Tooltip from 'antd/lib/tooltip'; import Text from 'antd/lib/typography/Text'; +import CVATTooltip from 'components/common/cvat-tooltip'; import consts from 'consts'; import { Label } from './common'; @@ -25,7 +25,7 @@ export default function ConstructorViewerItem(props: ConstructorViewerItemProps) return (
    {label.name} - + - + {label.id < 0 && ( - + - + )}
    ); diff --git a/cvat-ui/src/components/labels-editor/label-form.tsx b/cvat-ui/src/components/labels-editor/label-form.tsx index e8e7388069aa..4d7639524dfc 100644 --- a/cvat-ui/src/components/labels-editor/label-form.tsx +++ b/cvat-ui/src/components/labels-editor/label-form.tsx @@ -1,4 +1,4 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT @@ -8,12 +8,12 @@ import Icon, { CloseCircleOutlined, PlusOutlined } from '@ant-design/icons'; import Input from 'antd/lib/input'; import Button from 'antd/lib/button'; import Checkbox from 'antd/lib/checkbox'; -import Tooltip from 'antd/lib/tooltip'; import Select from 'antd/lib/select'; import Form, { FormInstance } from 'antd/lib/form'; import Badge from 'antd/lib/badge'; import { Store } from 'antd/lib/form/interface'; +import CVATTooltip from 'components/common/cvat-tooltip'; import ColorPicker from 'components/annotation-page/standard-workspace/objects-side-bar/color-picker'; import { ColorizeIcon } from 'icons'; import patterns from 'utils/validation-patterns'; @@ -132,17 +132,27 @@ export default class LabelForm extends React.Component { const type = attr ? attr.input_type.toUpperCase() : AttributeType.SELECT; return ( - + - + ); } @@ -168,7 +178,7 @@ export default class LabelForm extends React.Component { }; return ( - + { dropdownStyle={{ display: 'none' }} /> - + ); } @@ -199,14 +209,14 @@ export default class LabelForm extends React.Component { const value = attr ? attr.values[0] : 'false'; return ( - + - + ); } @@ -281,7 +291,7 @@ export default class LabelForm extends React.Component { const value = attr ? attr.mutable : false; return ( - + { Mutable - + ); } @@ -301,7 +311,7 @@ export default class LabelForm extends React.Component { const locked = attr ? attr.id >= 0 : false; return ( - + - + ); } @@ -407,7 +417,7 @@ export default class LabelForm extends React.Component { private renderDoneButton(): JSX.Element { return ( - + - + ); } @@ -427,7 +437,7 @@ export default class LabelForm extends React.Component { if (label) return null; return ( - + - + ); } @@ -446,7 +456,7 @@ export default class LabelForm extends React.Component { const { onSubmit } = this.props; return ( - + - + ); } @@ -469,7 +479,7 @@ export default class LabelForm extends React.Component { {() => ( - + - + )} diff --git a/cvat-ui/src/components/labels-editor/labels-editor.tsx b/cvat-ui/src/components/labels-editor/labels-editor.tsx index a95ed14df5eb..df92fc416feb 100644 --- a/cvat-ui/src/components/labels-editor/labels-editor.tsx +++ b/cvat-ui/src/components/labels-editor/labels-editor.tsx @@ -1,4 +1,4 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT @@ -6,12 +6,12 @@ import './styles.scss'; import React from 'react'; import Tabs from 'antd/lib/tabs'; import Button from 'antd/lib/button'; -import Tooltip from 'antd/lib/tooltip'; import notification from 'antd/lib/notification'; import Text from 'antd/lib/typography/Text'; import copy from 'copy-to-clipboard'; import { CopyOutlined, EditOutlined, BuildOutlined } from '@ant-design/icons'; +import CVATTooltip from 'components/common/cvat-tooltip'; import RawViewer from './raw-viewer'; import ConstructorViewer from './constructor-viewer'; import ConstructorCreator from './constructor-creator'; @@ -195,7 +195,7 @@ export default class LabelsEditor extends React.PureComponent + - + )} > { - + - + - + - + diff --git a/cvat-ui/src/components/model-runner-modal/detector-runner.tsx b/cvat-ui/src/components/model-runner-modal/detector-runner.tsx index db757867c138..2c049fe8b587 100644 --- a/cvat-ui/src/components/model-runner-modal/detector-runner.tsx +++ b/cvat-ui/src/components/model-runner-modal/detector-runner.tsx @@ -1,4 +1,4 @@ -// Copyright (C) 2020 Intel Corporation +// Copyright (C) 2020-2021 Intel Corporation // // SPDX-License-Identifier: MIT @@ -8,7 +8,6 @@ import { Row, Col } from 'antd/lib/grid'; import { CloseCircleOutlined, QuestionCircleOutlined } from '@ant-design/icons'; import Select from 'antd/lib/select'; import Checkbox, { CheckboxChangeEvent } from 'antd/lib/checkbox'; -import Tooltip from 'antd/lib/tooltip'; import Tag from 'antd/lib/tag'; import Text from 'antd/lib/typography/Text'; import InputNumber from 'antd/lib/input-number'; @@ -19,6 +18,8 @@ import { OptionData, OptionGroupData } from 'rc-select/lib/interface'; import { Model, StringObject } from 'reducers/interfaces'; +import CVATTooltip from 'components/common/cvat-tooltip'; + import { clamp } from 'utils/math'; import consts from 'consts'; import { DimensionType } from '../../reducers/interfaces'; @@ -93,7 +94,7 @@ function DetectorRunner(props: Props): JSX.Element { onChange: (label: string) => void, ): JSX.Element { return ( - +