From 62b4a7ca1a60bcad876751b834a6a501d71fcbb8 Mon Sep 17 00:00:00 2001 From: Zoltan Takacs Date: Wed, 16 Dec 2020 09:18:10 +0100 Subject: [PATCH 01/11] Dependency upgrade (#1106) * Dependency upgrade * upgrade webpack related packages & fix webpack config problems --- apps/sensenet/package-lock.json | 514 ----- apps/sensenet/package.json | 30 +- apps/sensenet/webpack.dev.js | 1 + examples/sn-dms-demo/package.json | 20 +- examples/sn-react-browser/package.json | 10 +- examples/sn-react-calendar/package.json | 12 +- examples/sn-react-component-docs/package.json | 32 +- examples/sn-react-imagegallery/package.json | 10 +- .../FullScreenDialog.test.tsx.snap | 4 +- examples/sn-react-imageupload/package.json | 10 +- .../__snapshots__/DropFileArea.test.tsx.snap | 2 +- .../UploadControll.test.tsx.snap | 2 +- examples/sn-react-memoapp/package.json | 10 +- .../__snapshots__/add-new-memo.test.tsx.snap | 4 +- examples/sn-react-tasklist/package.json | 10 +- .../package.json | 8 +- examples/sn-react-usersearch/package.json | 10 +- package.json | 18 +- packages/sn-authentication-jwt/package.json | 6 +- .../sn-authentication-oidc-react/package.json | 6 +- packages/sn-client-auth-google/package.json | 4 +- packages/sn-client-core/package.json | 6 +- packages/sn-client-utils/package.json | 4 +- packages/sn-control-mapper/package.json | 4 +- packages/sn-controls-react/package.json | 10 +- .../sn-document-viewer-react/package.json | 10 +- .../download-widget.test.tsx.snap | 2 +- .../__snapshots__/print-widget.test.tsx.snap | 2 +- .../rotate-active-page.test.tsx.snap | 24 +- .../save-document-component.test.tsx.snap | 6 +- .../__snapshots__/share-widget.test.tsx.snap | 2 +- .../toggle-widgets.test.tsx.snap | 10 +- .../__snapshots__/zoom-in-out.test.tsx.snap | 8 +- .../test/document-viewer-layout.test.tsx | 8 +- packages/sn-hooks-react/package.json | 4 +- packages/sn-icons-react/package.json | 10 +- packages/sn-list-controls-react/package.json | 14 +- .../test/virtualized-table.test.tsx | 2 +- packages/sn-pickers-react/package.json | 6 +- packages/sn-query/package.json | 6 +- .../sn-redux-promise-middleware/package.json | 4 +- packages/sn-redux/package.json | 6 +- packages/sn-repository-events/package.json | 4 +- packages/sn-search-react/package.json | 18 +- packages/sn-search-react/webpack.config.js | 35 +- yarn.lock | 1979 +++++++++-------- 46 files changed, 1266 insertions(+), 1641 deletions(-) delete mode 100644 apps/sensenet/package-lock.json diff --git a/apps/sensenet/package-lock.json b/apps/sensenet/package-lock.json deleted file mode 100644 index d3ea604b1..000000000 --- a/apps/sensenet/package-lock.json +++ /dev/null @@ -1,514 +0,0 @@ -{ - "name": "@sensenet/sn-app", - "version": "1.15.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "cypress-file-upload": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/cypress-file-upload/-/cypress-file-upload-4.1.1.tgz", - "integrity": "sha512-tX6UhuJ63rNgjdzxglpX+ZYf/bM6PDhFMtt1qCBljLtAgdearqyfD1AHqyh59rOHCjfM+bf6FA3o9b/mdaX6pw==", - "dev": true, - "requires": { - "mime": "^2.4.4" - } - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fork-ts-checker-webpack-plugin": { - "version": "5.2.0", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - } - }, - "fs-monkey": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.1.tgz", - "integrity": "sha512-fcSa+wyTqZa46iWweI7/ZiUfegOZl0SG8+dltIwFXo7+zYU9J9kpS3NB6pZcSlJdhvIwp81Adx2XhZorncxiaA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "jsonfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", - "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^1.0.0" - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "memfs": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.0.tgz", - "integrity": "sha512-f/xxz2TpdKv6uDn6GtHee8ivFyxwxmPuXatBb1FBwxYNuVpbM3k/Y1Z+vC0mH/dIXXrukYfe3qe5J32Dfjg93A==", - "dev": true, - "requires": { - "fs-monkey": "1.0.1" - } - }, - "mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - }, - "style-loader": { - "version": "2.0.0", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - }, - "universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "dev": true - }, - "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "uuid": { - "version": "8.3.1" - }, - "yaml": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", - "dev": true - } - } -} diff --git a/apps/sensenet/package.json b/apps/sensenet/package.json index fbf16d792..8c950b538 100644 --- a/apps/sensenet/package.json +++ b/apps/sensenet/package.json @@ -17,7 +17,7 @@ "fix:prettier": "prettier \"{,!(dist|temp|bundle)/**/}*.{ts,tsx}\" --write", "build": "webpack --config webpack.prod.js", "build:stats": "webpack --config webpack.prod.js --profile --json > stats.json", - "start": "webpack-dev-server --open --progress --config webpack.dev.js", + "start": "webpack serve --progress --config webpack.dev.js", "cypress": "cypress open", "cypress:all": "cypress run" }, @@ -42,30 +42,30 @@ "clean-webpack-plugin": "^3.0.0", "copy-webpack-plugin": "^6.2.1", "css-loader": "^5.0.0", - "cypress": "^5.4.0", + "cypress": "^6.1.0", "cypress-file-upload": "^4.1.1", "cypress-xpath": "^1.4.0", "file-loader": "^6.1.1", - "fork-ts-checker-webpack-plugin": "^5.2.0", + "fork-ts-checker-webpack-plugin": "^6.0.7", "html-webpack-plugin": "^4.5.0", - "mini-css-extract-plugin": "^1.2.0", + "mini-css-extract-plugin": "^1.3.3", "monaco-editor-webpack-plugin": "^2.0.0", "react-router": "^5.2.0", "react-router-dom": "^5.2.0", "style-loader": "^2.0.0", "terser-webpack-plugin": "^4.2.2", - "ts-loader": "^8.0.7", + "ts-loader": "^8.0.12", "url-loader": "^4.1.1", "webpack": "^4.44.2", - "webpack-bundle-analyzer": "^3.9.0", - "webpack-cli": "^3.3.12", + "webpack-bundle-analyzer": "^4.2.0", + "webpack-cli": "^4.2.0", "webpack-dev-server": "^3.11.0", - "webpack-merge": "^5.2.0" + "webpack-merge": "^5.7.0" }, "dependencies": { - "@material-ui/core": "^4.11.0", - "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "^4.0.0-alpha.56", + "@material-ui/core": "^4.11.2", + "@material-ui/icons": "^4.11.2", + "@material-ui/lab": "^4.0.0-alpha.57", "@sensenet/authentication-oidc-react": "^2.0.1", "@sensenet/client-core": "^3.7.0", "@sensenet/client-utils": "^2.0.1", @@ -84,14 +84,14 @@ "moment": "^2.29.1", "monaco-editor": "0.21.2", "react": "^16.13.0", - "react-autosuggest": "^10.0.3", + "react-autosuggest": "^10.0.4", "react-dom": "^16.13.0", "react-markdown": "^5.0.3", - "react-monaco-editor": "0.40.0", - "react-responsive": "^8.1.0", + "react-monaco-editor": "0.41.1", + "react-responsive": "^8.2.0", "react-virtualized": "^9.21.2", "semaphore-async-await": "^1.5.1", - "uuid": "^8.3.1" + "uuid": "^8.3.2" }, "typings": "./dist/index.d.ts" } diff --git a/apps/sensenet/webpack.dev.js b/apps/sensenet/webpack.dev.js index 80178f924..329d2c94f 100644 --- a/apps/sensenet/webpack.dev.js +++ b/apps/sensenet/webpack.dev.js @@ -8,6 +8,7 @@ module.exports = merge(common, { devtool: 'cheap-module-eval-source-map', devServer: { historyApiFallback: true, + open: true, }, output: { filename: 'static/js/bundle.js', diff --git a/examples/sn-dms-demo/package.json b/examples/sn-dms-demo/package.json index 33d2973f5..74c5c4e18 100644 --- a/examples/sn-dms-demo/package.json +++ b/examples/sn-dms-demo/package.json @@ -29,8 +29,8 @@ "fix:prettier": "prettier \"{,!(dist|temp|bundle)/**/}*.{ts,tsx}\" --write" }, "dependencies": { - "@material-ui/core": "^4.11.0", - "@material-ui/icons": "^4.9.1", + "@material-ui/core": "^4.11.2", + "@material-ui/icons": "^4.11.2", "@sensenet/authentication-oidc-react": "^2.0.1", "@sensenet/client-core": "^3.7.0", "@sensenet/client-utils": "^2.0.1", @@ -57,32 +57,32 @@ "react-loadable": "^5.5.0", "react-moment": "^1.0.0", "react-redux": "^7.2.1", - "react-responsive": "^8.1.0", + "react-responsive": "^8.2.0", "react-router": "^5.2.0", "react-router-dom": "^5.2.0", "redux": "^4.0.4", "redux-di-middleware": "^4.1.0", "redux-oidc": "^4.0.0-beta1", "semaphore-async-await": "^1.5.1", - "uuid": "^8.3.1" + "uuid": "^8.3.2" }, "devDependencies": { "@cypress/webpack-preprocessor": "^5.4.8", - "@types/chance": "^1.1.0", - "@types/jest": "^26.0.15", + "@types/chance": "^1.1.1", + "@types/jest": "^26.0.19", "@types/lodash.groupby": "^4.6.6", - "@types/node": "^14.14.9", + "@types/node": "^14.14.13", "@types/react": "^17.0.0", "@types/react-custom-scrollbars": "^4.0.6", "@types/react-dom": "^17.0.0", "@types/react-loadable": "^5.5.2", - "@types/react-redux": "^7.1.9", + "@types/react-redux": "^7.1.12", "@types/react-responsive": "^8.0.2", "@types/react-router-dom": "^5.1.6", "@types/uuid": "^8.0.1", "chance": "^1.1.6", - "cross-env": "^7.0.2", - "cypress": "^5.4.0", + "cross-env": "^7.0.3", + "cypress": "^6.1.0", "path-to-regexp": "^6.2.0", "prop-types": "^15.7.2", "react-scripts": "^4.0.1" diff --git a/examples/sn-react-browser/package.json b/examples/sn-react-browser/package.json index ef321c5c1..d04711aeb 100644 --- a/examples/sn-react-browser/package.json +++ b/examples/sn-react-browser/package.json @@ -21,8 +21,8 @@ "eject": "react-scripts eject" }, "devDependencies": { - "@types/jest": "^26.0.15", - "@types/node": "^14.14.9", + "@types/jest": "^26.0.19", + "@types/node": "^14.14.13", "@types/react": "^17.0.0", "@types/react-dom": "^17.0.0", "@types/react-router": "^5.1.8", @@ -30,11 +30,11 @@ "react": "^16.13.0", "react-dom": "^16.13.0", "react-scripts": "^4.0.1", - "typescript": "^4.1.2" + "typescript": "^4.1.3" }, "dependencies": { - "@material-ui/core": "^4.11.0", - "@material-ui/icons": "^4.9.1", + "@material-ui/core": "^4.11.2", + "@material-ui/icons": "^4.11.2", "@sensenet/authentication-oidc-react": "^2.0.1", "@sensenet/client-core": "^3.7.0", "@sensenet/default-content-types": "^3.1.1", diff --git a/examples/sn-react-calendar/package.json b/examples/sn-react-calendar/package.json index dd8dd234f..4bc6bec15 100644 --- a/examples/sn-react-calendar/package.json +++ b/examples/sn-react-calendar/package.json @@ -21,9 +21,9 @@ "eject": "react-scripts eject" }, "devDependencies": { - "@types/jest": "^26.0.15", + "@types/jest": "^26.0.19", "@types/lodash.orderby": "^4.6.6", - "@types/node": "^14.14.9", + "@types/node": "^14.14.13", "@types/react": "^17.0.0", "@types/react-dom": "^17.0.0", "@types/react-router": "^5.1.8", @@ -34,11 +34,11 @@ "react-router": "^5.2.0", "react-router-dom": "^5.2.0", "react-scripts": "^4.0.1", - "typescript": "^4.1.2" + "typescript": "^4.1.3" }, "dependencies": { - "@material-ui/core": "^4.11.0", - "@material-ui/icons": "^4.9.1", + "@material-ui/core": "^4.11.2", + "@material-ui/icons": "^4.11.2", "@sensenet/authentication-oidc-react": "^2.0.1", "@sensenet/client-core": "^3.7.0", "@sensenet/controls-react": "^6.0.1", @@ -50,7 +50,7 @@ "lodash.orderby": "^4.6.0", "moment": "^2.29.1", "striptags": "^3.1.1", - "uuid": "^8.3.1" + "uuid": "^8.3.2" }, "browserslist": { "production": [ diff --git a/examples/sn-react-component-docs/package.json b/examples/sn-react-component-docs/package.json index 9b24fbeac..e72272f9e 100644 --- a/examples/sn-react-component-docs/package.json +++ b/examples/sn-react-component-docs/package.json @@ -43,30 +43,30 @@ "react-dom": "^16.13.0" }, "devDependencies": { - "@babel/core": "^7.12.7", - "@storybook/addon-a11y": "^6.1.3", - "@storybook/addon-actions": "^6.1.3", - "@storybook/addon-events": "^6.1.3", + "@babel/core": "^7.12.10", + "@storybook/addon-a11y": "^6.1.11", + "@storybook/addon-actions": "^6.1.11", + "@storybook/addon-events": "^6.1.11", "@storybook/addon-info": "^5.3.21", - "@storybook/addon-knobs": "^6.1.3", - "@storybook/addon-links": "^6.1.3", + "@storybook/addon-knobs": "^6.1.11", + "@storybook/addon-links": "^6.1.11", "@storybook/addon-notes": "^5.3.21", "@storybook/addon-options": "^5.3.21", - "@storybook/addon-storysource": "^6.1.3", - "@storybook/addon-viewport": "^6.1.3", - "@storybook/addons": "^6.1.3", - "@storybook/core": "^6.1.3", - "@storybook/react": "^6.1.3", - "@storybook/source-loader": "^6.1.3", - "@types/node": "^14.14.9", + "@storybook/addon-storysource": "^6.1.11", + "@storybook/addon-viewport": "^6.1.11", + "@storybook/addons": "^6.1.11", + "@storybook/core": "^6.1.11", + "@storybook/react": "^6.1.11", + "@storybook/source-loader": "^6.1.11", + "@types/node": "^14.14.13", "@types/react": "^17.0.0", "@types/uuid": "^8.0.1", - "babel-loader": "^8.0.6", + "babel-loader": "^8.2.2", "prop-types": "^15.7.2", "react-docgen-typescript-loader": "^3.7.1", "regenerator-runtime": "^0.13.7", - "ts-loader": "^8.0.7", - "uuid": "^8.3.1", + "ts-loader": "^8.0.12", + "uuid": "^8.3.2", "webpack": "^4.44.2" } } diff --git a/examples/sn-react-imagegallery/package.json b/examples/sn-react-imagegallery/package.json index 560df9514..a22e7f512 100644 --- a/examples/sn-react-imagegallery/package.json +++ b/examples/sn-react-imagegallery/package.json @@ -21,8 +21,8 @@ "eject": "react-scripts eject" }, "devDependencies": { - "@types/jest": "^26.0.15", - "@types/node": "^14.14.9", + "@types/jest": "^26.0.19", + "@types/node": "^14.14.13", "@types/react": "^17.0.0", "@types/react-dom": "^17.0.0", "@types/react-router": "^5.1.8", @@ -32,11 +32,11 @@ "react-router": "^5.2.0", "react-router-dom": "^5.2.0", "react-scripts": "^4.0.1", - "typescript": "^4.1.2" + "typescript": "^4.1.3" }, "dependencies": { - "@material-ui/core": "^4.11.0", - "@material-ui/icons": "^4.9.1", + "@material-ui/core": "^4.11.2", + "@material-ui/icons": "^4.11.2", "@sensenet/authentication-oidc-react": "^2.0.1", "@sensenet/client-core": "^3.7.0", "@sensenet/default-content-types": "^3.1.1", diff --git a/examples/sn-react-imagegallery/test/__snapshots__/FullScreenDialog.test.tsx.snap b/examples/sn-react-imagegallery/test/__snapshots__/FullScreenDialog.test.tsx.snap index d33ef3da6..92bcdd5cc 100644 --- a/examples/sn-react-imagegallery/test/__snapshots__/FullScreenDialog.test.tsx.snap +++ b/examples/sn-react-imagegallery/test/__snapshots__/FullScreenDialog.test.tsx.snap @@ -23,7 +23,7 @@ exports[`FullScreenDialog Matches snapshot 1`] = ` edge="start" onClick={[MockFunction]} > - + - + diff --git a/examples/sn-react-imageupload/package.json b/examples/sn-react-imageupload/package.json index 995b7e447..5a35bfa8c 100644 --- a/examples/sn-react-imageupload/package.json +++ b/examples/sn-react-imageupload/package.json @@ -21,8 +21,8 @@ "eject": "react-scripts eject" }, "devDependencies": { - "@types/jest": "^26.0.15", - "@types/node": "^14.14.9", + "@types/jest": "^26.0.19", + "@types/node": "^14.14.13", "@types/react": "^17.0.0", "@types/react-dom": "^17.0.0", "@types/react-router": "^5.1.8", @@ -32,11 +32,11 @@ "react-router": "^5.2.0", "react-router-dom": "^5.2.0", "react-scripts": "^4.0.1", - "typescript": "^4.1.2" + "typescript": "^4.1.3" }, "dependencies": { - "@material-ui/core": "^4.11.0", - "@material-ui/icons": "^4.9.1", + "@material-ui/core": "^4.11.2", + "@material-ui/icons": "^4.11.2", "@sensenet/authentication-oidc-react": "^2.0.1", "@sensenet/client-core": "^3.7.0", "@sensenet/default-content-types": "^3.1.1", diff --git a/examples/sn-react-imageupload/test/__snapshots__/DropFileArea.test.tsx.snap b/examples/sn-react-imageupload/test/__snapshots__/DropFileArea.test.tsx.snap index 5bbf08ae3..0f86309a1 100644 --- a/examples/sn-react-imageupload/test/__snapshots__/DropFileArea.test.tsx.snap +++ b/examples/sn-react-imageupload/test/__snapshots__/DropFileArea.test.tsx.snap @@ -29,7 +29,7 @@ exports[`DropFileArea Matches snapshot 1`] = ` } } > - - + diff --git a/examples/sn-react-memoapp/package.json b/examples/sn-react-memoapp/package.json index 2fe76cbb1..bce733285 100644 --- a/examples/sn-react-memoapp/package.json +++ b/examples/sn-react-memoapp/package.json @@ -21,8 +21,8 @@ "eject": "react-scripts eject" }, "devDependencies": { - "@types/jest": "^26.0.15", - "@types/node": "^14.14.9", + "@types/jest": "^26.0.19", + "@types/node": "^14.14.13", "@types/react": "^17.0.0", "@types/react-dom": "^17.0.0", "@types/react-router": "^5.1.8", @@ -32,11 +32,11 @@ "react-router": "^5.2.0", "react-router-dom": "^5.2.0", "react-scripts": "^4.0.1", - "typescript": "^4.1.2" + "typescript": "^4.1.3" }, "dependencies": { - "@material-ui/core": "^4.11.0", - "@material-ui/icons": "^4.9.1", + "@material-ui/core": "^4.11.2", + "@material-ui/icons": "^4.11.2", "@sensenet/authentication-oidc-react": "^2.0.1", "@sensenet/client-core": "^3.7.0", "@sensenet/default-content-types": "^3.1.1", diff --git a/examples/sn-react-memoapp/test/__snapshots__/add-new-memo.test.tsx.snap b/examples/sn-react-memoapp/test/__snapshots__/add-new-memo.test.tsx.snap index 7f38c11ed..95fc4b12e 100644 --- a/examples/sn-react-memoapp/test/__snapshots__/add-new-memo.test.tsx.snap +++ b/examples/sn-react-memoapp/test/__snapshots__/add-new-memo.test.tsx.snap @@ -85,7 +85,7 @@ exports[`The new memo panel instance should be rendered correctly 1`] = ` } } > - + - + diff --git a/examples/sn-react-tasklist/package.json b/examples/sn-react-tasklist/package.json index 149c141f7..fc4a9fd0b 100644 --- a/examples/sn-react-tasklist/package.json +++ b/examples/sn-react-tasklist/package.json @@ -22,8 +22,8 @@ "eject": "react-scripts eject" }, "devDependencies": { - "@types/jest": "^26.0.15", - "@types/node": "^14.14.9", + "@types/jest": "^26.0.19", + "@types/node": "^14.14.13", "@types/react": "^17.0.0", "@types/react-dom": "^17.0.0", "@types/react-router": "^5.1.8", @@ -33,11 +33,11 @@ "react-router": "^5.2.0", "react-router-dom": "^5.2.0", "react-scripts": "^4.0.1", - "typescript": "^4.1.2" + "typescript": "^4.1.3" }, "dependencies": { - "@material-ui/core": "^4.11.0", - "@material-ui/icons": "^4.9.1", + "@material-ui/core": "^4.11.2", + "@material-ui/icons": "^4.11.2", "@sensenet/authentication-oidc-react": "^2.0.1", "@sensenet/client-core": "^3.7.0", "@sensenet/default-content-types": "^3.1.1", diff --git a/examples/sn-react-typescript-boilerplate/package.json b/examples/sn-react-typescript-boilerplate/package.json index 26e3f3f4a..e2b5b2516 100644 --- a/examples/sn-react-typescript-boilerplate/package.json +++ b/examples/sn-react-typescript-boilerplate/package.json @@ -19,8 +19,8 @@ "eject": "react-scripts eject" }, "devDependencies": { - "@types/jest": "^26.0.15", - "@types/node": "^14.14.9", + "@types/jest": "^26.0.19", + "@types/node": "^14.14.13", "@types/react": "^17.0.0", "@types/react-dom": "^17.0.0", "@types/react-router": "^5.1.8", @@ -30,10 +30,10 @@ "react-router": "^5.2.0", "react-router-dom": "^5.2.0", "react-scripts": "^4.0.1", - "typescript": "^4.1.2" + "typescript": "^4.1.3" }, "dependencies": { - "@material-ui/core": "^4.11.0", + "@material-ui/core": "^4.11.2", "@sensenet/authentication-oidc-react": "^2.0.1", "@sensenet/client-core": "^3.7.0", "@sensenet/hooks-react": "^1.4.2" diff --git a/examples/sn-react-usersearch/package.json b/examples/sn-react-usersearch/package.json index b68973cc6..d990774bf 100644 --- a/examples/sn-react-usersearch/package.json +++ b/examples/sn-react-usersearch/package.json @@ -22,8 +22,8 @@ "eject": "react-scripts eject" }, "devDependencies": { - "@types/jest": "^26.0.15", - "@types/node": "^14.14.9", + "@types/jest": "^26.0.19", + "@types/node": "^14.14.13", "@types/react": "^17.0.0", "@types/react-dom": "^17.0.0", "@types/react-router": "^5.1.8", @@ -33,11 +33,11 @@ "react-router": "^5.2.0", "react-router-dom": "^5.2.0", "react-scripts": "^4.0.1", - "typescript": "^4.1.2" + "typescript": "^4.1.3" }, "dependencies": { - "@material-ui/core": "^4.11.0", - "@material-ui/icons": "^4.9.1", + "@material-ui/core": "^4.11.2", + "@material-ui/icons": "^4.11.2", "@sensenet/authentication-oidc-react": "^2.0.1", "@sensenet/client-core": "^3.7.0", "@sensenet/controls-react": "^6.0.1", diff --git a/package.json b/package.json index 7edd5d8d3..d5705f76a 100644 --- a/package.json +++ b/package.json @@ -12,29 +12,29 @@ } }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "^4.8.1", - "@typescript-eslint/parser": "^4.8.1", + "@typescript-eslint/eslint-plugin": "^4.10.0", + "@typescript-eslint/parser": "^4.10.0", "babel-eslint": "10.1.0", "cz-conventional-changelog": "^3.3.0", - "eslint": "^7.14.0", - "eslint-config-prettier": "^6.14.0", + "eslint": "^7.15.0", + "eslint-config-prettier": "^7.0.0", "eslint-config-react-app": "^6.0.0", "eslint-plugin-cypress": "^2.11.2", "eslint-plugin-flowtype": "5.2.0", "eslint-plugin-import": "2.22.1", "eslint-plugin-jsdoc": "^30.7.3", "eslint-plugin-jsx-a11y": "6.4.1", - "eslint-plugin-prettier": "^3.1.4", + "eslint-plugin-prettier": "^3.3.0", "eslint-plugin-react": "^7.21.5", "eslint-plugin-react-hooks": "^4.2.0", - "husky": "^4.3.0", + "husky": "^4.3.6", "isomorphic-fetch": "^3.0.0", "jest-environment-jsdom-sixteen": "^1.0.3", "lerna": "^3.22.1", - "lint-staged": "^10.4.2", - "prettier": "^2.2.0", + "lint-staged": "^10.5.3", + "prettier": "^2.2.1", "start-server-and-test": "^1.11.6", - "typescript": "^4.1.2", + "typescript": "^4.1.3", "wait-on": "^5.1.0" }, "scripts": { diff --git a/packages/sn-authentication-jwt/package.json b/packages/sn-authentication-jwt/package.json index f28fda7ee..930fa6d9a 100644 --- a/packages/sn-authentication-jwt/package.json +++ b/packages/sn-authentication-jwt/package.json @@ -42,10 +42,10 @@ "tslib": "^2.0.3" }, "devDependencies": { - "@types/jest": "^26.0.15", - "@types/node": "^14.14.9", + "@types/jest": "^26.0.19", + "@types/node": "^14.14.13", "jest": "^26.6.1", "ts-jest": "^26.4.2", - "typescript": "^4.1.2" + "typescript": "^4.1.3" } } diff --git a/packages/sn-authentication-oidc-react/package.json b/packages/sn-authentication-oidc-react/package.json index 174d11ec9..c673bc621 100644 --- a/packages/sn-authentication-oidc-react/package.json +++ b/packages/sn-authentication-oidc-react/package.json @@ -23,7 +23,7 @@ }, "homepage": "https://sensenet.com", "dependencies": { - "@material-ui/core": "^4.11.0", + "@material-ui/core": "^4.11.2", "@types/history": "^4.7.8", "oidc-client": "^1.10.1", "react": "^16.13.0", @@ -32,7 +32,7 @@ }, "devDependencies": { "@types/enzyme": "^3.10.7", - "@types/jest": "^26.0.15", + "@types/jest": "^26.0.19", "@types/react": "^17.0.0", "@types/react-dom": "^17.0.0", "@types/react-router": "^5.1.8", @@ -42,7 +42,7 @@ "enzyme-to-json": "^3.6.1", "jest": "^26.6.1", "ts-jest": "^26.4.2", - "typescript": "^4.1.2" + "typescript": "^4.1.3" }, "publishConfig": { "access": "public" diff --git a/packages/sn-client-auth-google/package.json b/packages/sn-client-auth-google/package.json index 4eb085e43..322e8adbd 100644 --- a/packages/sn-client-auth-google/package.json +++ b/packages/sn-client-auth-google/package.json @@ -40,11 +40,11 @@ "tslib": "^2.0.3" }, "devDependencies": { - "@types/jest": "^26.0.15", + "@types/jest": "^26.0.19", "@types/jsdom": "^16.2.4", "jest": "^26.6.1", "jsdom": "16.4.0", "ts-jest": "^26.4.2", - "typescript": "^4.1.2" + "typescript": "^4.1.3" } } diff --git a/packages/sn-client-core/package.json b/packages/sn-client-core/package.json index 0faf321d2..811871bd5 100644 --- a/packages/sn-client-core/package.json +++ b/packages/sn-client-core/package.json @@ -32,13 +32,13 @@ "@sensenet/query": "^1.1.15", "semaphore-async-await": "^1.5.1", "tslib": "^2.0.3", - "uuid": "^8.3.1" + "uuid": "^8.3.2" }, "devDependencies": { - "@types/jest": "^26.0.15", + "@types/jest": "^26.0.19", "@types/uuid": "^8.0.1", "jest": "^26.6.1", "ts-jest": "^26.4.2", - "typescript": "^4.1.2" + "typescript": "^4.1.3" } } diff --git a/packages/sn-client-utils/package.json b/packages/sn-client-utils/package.json index 73cc518de..f6b3fe5d3 100644 --- a/packages/sn-client-utils/package.json +++ b/packages/sn-client-utils/package.json @@ -40,9 +40,9 @@ "tslib": "^2.0.3" }, "devDependencies": { - "@types/jest": "^26.0.15", + "@types/jest": "^26.0.19", "jest": "^26.6.1", "ts-jest": "^26.4.2", - "typescript": "^4.1.2" + "typescript": "^4.1.3" } } diff --git a/packages/sn-control-mapper/package.json b/packages/sn-control-mapper/package.json index bce504bf9..23b98d84a 100644 --- a/packages/sn-control-mapper/package.json +++ b/packages/sn-control-mapper/package.json @@ -40,9 +40,9 @@ "tslib": "^2.0.3" }, "devDependencies": { - "@types/jest": "^26.0.15", + "@types/jest": "^26.0.19", "jest": "^26.6.1", "ts-jest": "^26.4.2", - "typescript": "^4.1.2" + "typescript": "^4.1.3" } } diff --git a/packages/sn-controls-react/package.json b/packages/sn-controls-react/package.json index 499c5861e..198a7aacf 100644 --- a/packages/sn-controls-react/package.json +++ b/packages/sn-controls-react/package.json @@ -34,7 +34,7 @@ "dependencies": { "@date-io/core": "^1.3.13", "@date-io/moment": "^1.3.13", - "@material-ui/core": "^4.11.0", + "@material-ui/core": "^4.11.2", "@material-ui/pickers": "^3.2.10", "@sensenet/client-core": "^3.7.0", "@sensenet/client-utils": "^2.0.1", @@ -49,13 +49,13 @@ "react-color": "^2.18.1", "react-dom": "^16.13.0", "react-quill": "^1.3.3", - "react-responsive": "^8.1.0", + "react-responsive": "^8.2.0", "tslib": "^2.0.3" }, "devDependencies": { "@types/enzyme": "^3.10.7", - "@types/jest": "^26.0.15", - "@types/node": "^14.14.9", + "@types/jest": "^26.0.19", + "@types/node": "^14.14.13", "@types/react": "^17.0.0", "@types/react-color": "^3.0.4", "@types/react-dom": "^17.0.0", @@ -66,7 +66,7 @@ "jest": "^26.6.1", "prop-types": "^15.7.2", "ts-jest": "^26.4.2", - "typescript": "^4.1.2" + "typescript": "^4.1.3" }, "publishConfig": { "access": "public" diff --git a/packages/sn-document-viewer-react/package.json b/packages/sn-document-viewer-react/package.json index b6c191455..5344da2c9 100644 --- a/packages/sn-document-viewer-react/package.json +++ b/packages/sn-document-viewer-react/package.json @@ -26,8 +26,8 @@ "license": "GPL-2.0", "homepage": "https://sensenet.com", "dependencies": { - "@material-ui/core": "^4.11.0", - "@material-ui/icons": "^4.9.1", + "@material-ui/core": "^4.11.2", + "@material-ui/icons": "^4.11.2", "@sensenet/client-core": "^3.7.0", "@sensenet/client-utils": "^2.0.1", "@sensenet/default-content-types": "^3.1.1", @@ -40,15 +40,15 @@ }, "devDependencies": { "@types/enzyme": "^3.10.7", - "@types/jest": "^26.0.15", + "@types/jest": "^26.0.19", "@types/react": "^17.0.0", - "@types/styled-components": "^5.1.4", + "@types/styled-components": "^5.1.5", "enzyme": "^3.10.0", "enzyme-adapter-react-16": "^1.15.5", "enzyme-to-json": "^3.6.1", "jest": "^26.6.1", "react-is": "^17.0.1", "ts-jest": "^26.4.2", - "typescript": "^4.1.2" + "typescript": "^4.1.3" } } diff --git a/packages/sn-document-viewer-react/test/__snapshots__/download-widget.test.tsx.snap b/packages/sn-document-viewer-react/test/__snapshots__/download-widget.test.tsx.snap index 09c31eaaa..9e320daad 100644 --- a/packages/sn-document-viewer-react/test/__snapshots__/download-widget.test.tsx.snap +++ b/packages/sn-document-viewer-react/test/__snapshots__/download-widget.test.tsx.snap @@ -14,7 +14,7 @@ exports[`DownloadWidget component Should render without crashing 1`] = ` onClick={[Function]} title="Download" > - + `; diff --git a/packages/sn-document-viewer-react/test/__snapshots__/print-widget.test.tsx.snap b/packages/sn-document-viewer-react/test/__snapshots__/print-widget.test.tsx.snap index e04a6db62..6b92f92c9 100644 --- a/packages/sn-document-viewer-react/test/__snapshots__/print-widget.test.tsx.snap +++ b/packages/sn-document-viewer-react/test/__snapshots__/print-widget.test.tsx.snap @@ -14,7 +14,7 @@ exports[`Print component Should render without crashing 1`] = ` onClick={[Function]} title="Print" > - + `; diff --git a/packages/sn-document-viewer-react/test/__snapshots__/rotate-active-page.test.tsx.snap b/packages/sn-document-viewer-react/test/__snapshots__/rotate-active-page.test.tsx.snap index 00518b2c2..2b8e3e572 100644 --- a/packages/sn-document-viewer-react/test/__snapshots__/rotate-active-page.test.tsx.snap +++ b/packages/sn-document-viewer-react/test/__snapshots__/rotate-active-page.test.tsx.snap @@ -81,7 +81,7 @@ exports[`RotateActivePage component Should render without crashing 1`] = ` - + - + - + - + - + - + - + - + - + - + - + - + - + `; @@ -101,7 +101,7 @@ exports[`SaveDocumentComponent component Should render without crashing when the - + - + diff --git a/packages/sn-document-viewer-react/test/__snapshots__/share-widget.test.tsx.snap b/packages/sn-document-viewer-react/test/__snapshots__/share-widget.test.tsx.snap index e0b064002..d61f0aa88 100644 --- a/packages/sn-document-viewer-react/test/__snapshots__/share-widget.test.tsx.snap +++ b/packages/sn-document-viewer-react/test/__snapshots__/share-widget.test.tsx.snap @@ -14,7 +14,7 @@ exports[`DownloadWidget component Should render without crashing 1`] = ` onClick={[Function]} title="Share" > - + `; diff --git a/packages/sn-document-viewer-react/test/__snapshots__/toggle-widgets.test.tsx.snap b/packages/sn-document-viewer-react/test/__snapshots__/toggle-widgets.test.tsx.snap index 8278a797c..dda05f63a 100644 --- a/packages/sn-document-viewer-react/test/__snapshots__/toggle-widgets.test.tsx.snap +++ b/packages/sn-document-viewer-react/test/__snapshots__/toggle-widgets.test.tsx.snap @@ -104,7 +104,7 @@ exports[`Component ToggleComments should render without crashing 1`] = ` - - + - + `; @@ -211,7 +211,7 @@ exports[`Component ToggleShapes should render without crashing 1`] = ` setValue={[Function]} title="Toggle shapes" > - + `; @@ -377,6 +377,6 @@ exports[`Component ToggleWatermark should render without crashing 1`] = ` setValue={[Function]} title="Toggle watermark" > - + `; diff --git a/packages/sn-document-viewer-react/test/__snapshots__/zoom-in-out.test.tsx.snap b/packages/sn-document-viewer-react/test/__snapshots__/zoom-in-out.test.tsx.snap index a94f54f96..9d0151fd5 100644 --- a/packages/sn-document-viewer-react/test/__snapshots__/zoom-in-out.test.tsx.snap +++ b/packages/sn-document-viewer-react/test/__snapshots__/zoom-in-out.test.tsx.snap @@ -79,7 +79,7 @@ exports[`ZoomInOUt component should render without crashing 1`] = ` - + - + - + - + ({ + get THUMBNAIL_PADDING() { + return THUMBNAIL_PADDING + }, +})) + describe('Document Viewer Layout component', () => { beforeEach(() => { const div = document.createElement('div') diff --git a/packages/sn-hooks-react/package.json b/packages/sn-hooks-react/package.json index 746fee20d..ed0c2a8e3 100644 --- a/packages/sn-hooks-react/package.json +++ b/packages/sn-hooks-react/package.json @@ -37,7 +37,7 @@ }, "devDependencies": { "@types/enzyme": "^3.10.7", - "@types/jest": "^26.0.15", + "@types/jest": "^26.0.19", "@types/react": "^17.0.0", "@types/react-dom": "^17.0.0", "enzyme": "^3.10.0", @@ -45,6 +45,6 @@ "enzyme-to-json": "^3.6.1", "jest": "^26.6.1", "ts-jest": "^26.4.2", - "typescript": "^4.1.2" + "typescript": "^4.1.3" } } diff --git a/packages/sn-icons-react/package.json b/packages/sn-icons-react/package.json index 50ec5e76d..681722e47 100644 --- a/packages/sn-icons-react/package.json +++ b/packages/sn-icons-react/package.json @@ -33,16 +33,16 @@ }, "homepage": "https://sensenet.com", "dependencies": { - "@material-ui/core": "^4.11.0", - "@material-ui/icons": "^4.9.1", + "@material-ui/core": "^4.11.2", + "@material-ui/icons": "^4.11.2", "react": "^16.13.0", "react-dom": "^16.13.0", "tslib": "^2.0.3" }, "devDependencies": { "@types/enzyme": "^3.10.7", - "@types/jest": "^26.0.15", - "@types/node": "^14.14.9", + "@types/jest": "^26.0.19", + "@types/node": "^14.14.13", "@types/react": "^17.0.0", "@types/react-dom": "^17.0.0", "enzyme": "^3.10.0", @@ -51,7 +51,7 @@ "jest": "^26.6.1", "prop-types": "^15.7.2", "ts-jest": "^26.4.2", - "typescript": "^4.1.2" + "typescript": "^4.1.3" }, "publishConfig": { "access": "public" diff --git a/packages/sn-list-controls-react/package.json b/packages/sn-list-controls-react/package.json index b3d2fc4e9..b7dc6f186 100644 --- a/packages/sn-list-controls-react/package.json +++ b/packages/sn-list-controls-react/package.json @@ -17,9 +17,7 @@ ], "scripts": { "fix:prettier": "prettier \"{,!(dist|temp|bundle)/**/}*.{ts,tsx}\" --write", - "build": "tsc -b", - "build:webpack": "rimraf bundle && webpack", - "start": "webpack serve" + "build": "tsc -b" }, "publishConfig": { "access": "public" @@ -28,7 +26,7 @@ "license": "GPL-2.0", "homepage": "https://sensenet.com", "dependencies": { - "@material-ui/core": "^4.11.0", + "@material-ui/core": "^4.11.2", "@sensenet/default-content-types": "^3.1.1", "@sensenet/icons-react": "^1.2.19", "clsx": "^1.1.1", @@ -41,18 +39,18 @@ }, "devDependencies": { "@types/enzyme": "^3.10.7", - "@types/jest": "^26.0.15", + "@types/jest": "^26.0.19", "@types/react": "^17.0.0", "@types/react-dom": "^17.0.0", "@types/react-virtualized": "^9.21.10", - "autoprefixer": "^10.0.1", + "autoprefixer": "^10.1.0", "enzyme": "^3.10.0", "enzyme-adapter-react-16": "^1.15.5", "enzyme-to-json": "^3.6.1", "jest": "^26.6.1", - "postcss": "^8.1.9", + "postcss": "^8.2.1", "prop-types": "^15.7.2", "ts-jest": "^26.4.2", - "typescript": "^4.1.2" + "typescript": "^4.1.3" } } diff --git a/packages/sn-list-controls-react/test/virtualized-table.test.tsx b/packages/sn-list-controls-react/test/virtualized-table.test.tsx index ae0c692d1..445bac541 100644 --- a/packages/sn-list-controls-react/test/virtualized-table.test.tsx +++ b/packages/sn-list-controls-react/test/virtualized-table.test.tsx @@ -539,7 +539,7 @@ describe('Virtualized Table component', () => { const fieldRefFunc = (fieldOptions) => { if (fieldOptions.dataKey === 'CreatedBy/ModificationDate') { - return + return } } diff --git a/packages/sn-pickers-react/package.json b/packages/sn-pickers-react/package.json index 9e4433185..5de71200d 100644 --- a/packages/sn-pickers-react/package.json +++ b/packages/sn-pickers-react/package.json @@ -32,7 +32,7 @@ "url": "https://github.com/SenseNet/sn-client/issues" }, "dependencies": { - "@material-ui/core": "^4.11.0", + "@material-ui/core": "^4.11.2", "@sensenet/client-core": "^3.7.0", "@sensenet/client-utils": "^2.0.1", "@sensenet/default-content-types": "^3.1.1", @@ -42,7 +42,7 @@ }, "devDependencies": { "@types/enzyme": "^3.10.7", - "@types/jest": "^26.0.15", + "@types/jest": "^26.0.19", "@types/react": "^17.0.0", "@types/react-dom": "^17.0.0", "enzyme": "^3.10.0", @@ -50,6 +50,6 @@ "enzyme-to-json": "^3.6.1", "jest": "^26.6.1", "ts-jest": "^26.4.2", - "typescript": "^4.1.2" + "typescript": "^4.1.3" } } diff --git a/packages/sn-query/package.json b/packages/sn-query/package.json index e7f5d5de5..ba9b4bf3a 100644 --- a/packages/sn-query/package.json +++ b/packages/sn-query/package.json @@ -37,10 +37,10 @@ "tslib": "^2.0.3" }, "devDependencies": { - "@types/jest": "^26.0.15", - "@types/node": "^14.14.9", + "@types/jest": "^26.0.19", + "@types/node": "^14.14.13", "jest": "^26.6.1", "ts-jest": "^26.4.2", - "typescript": "^4.1.2" + "typescript": "^4.1.3" } } diff --git a/packages/sn-redux-promise-middleware/package.json b/packages/sn-redux-promise-middleware/package.json index a254b1b67..183b8b9e9 100644 --- a/packages/sn-redux-promise-middleware/package.json +++ b/packages/sn-redux-promise-middleware/package.json @@ -39,9 +39,9 @@ "tslib": "^2.0.3" }, "devDependencies": { - "@types/jest": "^26.0.15", + "@types/jest": "^26.0.19", "jest": "^26.6.1", "ts-jest": "^26.4.2", - "typescript": "^4.1.2" + "typescript": "^4.1.3" } } diff --git a/packages/sn-redux/package.json b/packages/sn-redux/package.json index 45a7a6d52..eb48fc6b4 100644 --- a/packages/sn-redux/package.json +++ b/packages/sn-redux/package.json @@ -44,11 +44,11 @@ "tslib": "^2.0.3" }, "devDependencies": { - "@types/jest": "^26.0.15", - "@types/node": "^14.14.9", + "@types/jest": "^26.0.19", + "@types/node": "^14.14.13", "@types/redux-logger": "^3.0.8", "jest": "^26.6.1", "ts-jest": "^26.4.2", - "typescript": "^4.1.2" + "typescript": "^4.1.3" } } diff --git a/packages/sn-repository-events/package.json b/packages/sn-repository-events/package.json index 55769bdd6..f169f83aa 100644 --- a/packages/sn-repository-events/package.json +++ b/packages/sn-repository-events/package.json @@ -41,9 +41,9 @@ "tslib": "^2.0.3" }, "devDependencies": { - "@types/jest": "^26.0.15", + "@types/jest": "^26.0.19", "jest": "^26.6.1", "ts-jest": "^26.4.2", - "typescript": "^4.1.2" + "typescript": "^4.1.3" } } diff --git a/packages/sn-search-react/package.json b/packages/sn-search-react/package.json index 0eab3dc9f..f9182b091 100644 --- a/packages/sn-search-react/package.json +++ b/packages/sn-search-react/package.json @@ -28,7 +28,7 @@ "license": "GPL-2.0", "homepage": "https://sensenet.com", "dependencies": { - "@material-ui/core": "^4.11.0", + "@material-ui/core": "^4.11.2", "@sensenet/client-core": "^3.7.0", "@sensenet/client-utils": "^2.0.1", "@sensenet/default-content-types": "^3.1.1", @@ -36,19 +36,18 @@ "@sensenet/query": "^1.1.15", "autosuggest-highlight": "^3.1.1", "react": "^16.13.0", - "react-autosuggest": "^10.0.3", + "react-autosuggest": "^10.0.4", "react-dom": "^16.13.0", "tslib": "^2.0.3" }, "devDependencies": { "@types/autosuggest-highlight": "3.1.0", "@types/enzyme": "^3.10.7", - "@types/jest": "^26.0.15", + "@types/jest": "^26.0.19", "@types/react": "^17.0.0", "@types/react-autosuggest": "^10.0.1", "@types/react-dom": "^17.0.0", "@types/react-router-dom": "^5.1.6", - "awesome-typescript-loader": "^5.2.1", "copy-webpack-plugin": "^6.2.1", "css-loader": "^5.0.0", "enzyme": "^3.10.0", @@ -56,16 +55,17 @@ "enzyme-to-json": "^3.6.1", "file-loader": "^6.1.1", "jest": "^26.6.1", - "postcss": "^8.1.9", + "postcss": "^8.2.1", "postcss-flexbugs-fixes": "^5.0.2", "postcss-loader": "^4.1.0", - "source-map-loader": "^1.1.1", + "source-map-loader": "^1.1.3", "style-loader": "^2.0.0", "ts-jest": "^26.4.2", - "typescript": "^4.1.2", + "ts-loader": "^8.0.12", + "typescript": "^4.1.3", "url-loader": "^4.1.1", "webpack": "^4.44.2", - "webpack-bundle-analyzer": "^3.9.0", - "webpack-cli": "^3.3.12" + "webpack-bundle-analyzer": "^4.2.0", + "webpack-cli": "^4.2.0" } } diff --git a/packages/sn-search-react/webpack.config.js b/packages/sn-search-react/webpack.config.js index beafc232c..15f953250 100644 --- a/packages/sn-search-react/webpack.config.js +++ b/packages/sn-search-react/webpack.config.js @@ -11,6 +11,9 @@ module.exports = { publicPath: '/assets/', path: path.resolve(__dirname + '/bundle/assets'), }, + devServer: { + publicPath: '/assets/', + }, optimization: { splitChunks: { cacheGroups: { @@ -31,22 +34,23 @@ module.exports = { }, plugins: [ // new BundleAnalyzerPlugin(), - new CopyWebpackPlugin([ - { - from: 'index.html', - to: './../', - }, - // { - // from: "assets", - // to: "./assets" - - // } - ]), + new CopyWebpackPlugin({ + patterns: [ + { + from: 'index.html', + to: './../', + }, + // { + // from: "assets", + // to: "./assets" + // } + ], + }), ], module: { rules: [ // All files with a '.ts' or '.tsx' extension will be handled by 'awesome-typescript-loader'. - { test: /\.tsx?$/, loader: 'awesome-typescript-loader' }, + { test: /\.tsx?$/, loader: 'ts-loader' }, // All output '.js' files will have any sourcemaps re-processed by 'source-map-loader'. { enforce: 'pre', test: /\.js$/, loader: 'source-map-loader' }, @@ -63,10 +67,9 @@ module.exports = { { loader: require.resolve('postcss-loader'), options: { - // Necessary for external CSS imports to work - // https://github.com/facebookincubator/create-react-app/issues/2677 - ident: 'postcss', - plugins: () => [require('postcss-flexbugs-fixes')], + postcssOptions: { + plugins: ['postcss-flexbugs-fixes'], + }, }, }, ], diff --git a/yarn.lock b/yarn.lock index 8e5519d4d..773b2f5b4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -43,43 +43,42 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.12.7", "@babel/core@^7.7.5", "@babel/core@^7.8.4", "@babel/core@^7.9.0": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.7.tgz#bf55363c08c8352a37691f7216ec30090bf7e3bf" - integrity sha512-tRKx9B53kJe8NCGGIxEQb2Bkr0riUIEuN7Sc1fxhs5H8lKlCWUvQCSNMVIB0Meva7hcbCRJ76de15KoLltdoqw== +"@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.7.5", "@babel/core@^7.8.4", "@babel/core@^7.9.0": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.10.tgz#b79a2e1b9f70ed3d84bbfb6d8c4ef825f606bccd" + integrity sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w== dependencies: "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.5" + "@babel/generator" "^7.12.10" "@babel/helper-module-transforms" "^7.12.1" "@babel/helpers" "^7.12.5" - "@babel/parser" "^7.12.7" + "@babel/parser" "^7.12.10" "@babel/template" "^7.12.7" - "@babel/traverse" "^7.12.7" - "@babel/types" "^7.12.7" + "@babel/traverse" "^7.12.10" + "@babel/types" "^7.12.10" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.1" json5 "^2.1.2" lodash "^4.17.19" - resolve "^1.3.2" semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.12.1", "@babel/generator@^7.12.5": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.5.tgz#a2c50de5c8b6d708ab95be5e6053936c1884a4de" - integrity sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A== +"@babel/generator@^7.12.1", "@babel/generator@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.10.tgz#2b188fc329fb8e4f762181703beffc0fe6df3460" + integrity sha512-6mCdfhWgmqLdtTkhXjnIz0LcdVCd26wS2JXRtj2XY0u5klDsXBREA/pG5NVOuVnF2LUrBGNFtQkIqqTbblg0ww== dependencies: - "@babel/types" "^7.12.5" + "@babel/types" "^7.12.10" jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" - integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== +"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz#54ab9b000e60a93644ce17b3f37d313aaf1d115d" + integrity sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ== dependencies: - "@babel/types" "^7.10.4" + "@babel/types" "^7.12.10" "@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": version "7.10.4" @@ -89,14 +88,14 @@ "@babel/helper-explode-assignable-expression" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/helper-builder-react-jsx-experimental@^7.12.4": - version "7.12.4" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.4.tgz#55fc1ead5242caa0ca2875dcb8eed6d311e50f48" - integrity sha512-AjEa0jrQqNk7eDQOo0pTfUOwQBMF+xVqrausQwT9/rTKy0g04ggFNaJpaE09IQMn9yExluigWMJcj0WC7bq+Og== +"@babel/helper-builder-react-jsx-experimental@^7.12.10", "@babel/helper-builder-react-jsx-experimental@^7.12.4": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.10.tgz#a58cb96a793dc0fcd5c9ed3bb36d62fdc60534c2" + integrity sha512-3Kcr2LGpL7CTRDTTYm1bzeor9qZbxbvU2AxsLA6mUG9gYarSfIKMK0UlU+azLWI+s0+BH768bwyaziWB2NOJlQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-module-imports" "^7.12.1" - "@babel/types" "^7.12.1" + "@babel/helper-annotate-as-pure" "^7.12.10" + "@babel/helper-module-imports" "^7.12.5" + "@babel/types" "^7.12.10" "@babel/helper-builder-react-jsx@^7.10.4": version "7.10.4" @@ -161,11 +160,11 @@ "@babel/types" "^7.10.4" "@babel/helper-get-function-arity@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" - integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf" + integrity sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag== dependencies: - "@babel/types" "^7.10.4" + "@babel/types" "^7.12.10" "@babel/helper-hoist-variables@^7.10.4": version "7.10.4" @@ -204,11 +203,11 @@ lodash "^4.17.19" "@babel/helper-optimise-call-expression@^7.10.4": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz#7f94ae5e08721a49467346aa04fd22f750033b9c" - integrity sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw== + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz#94ca4e306ee11a7dd6e9f42823e2ac6b49881e2d" + integrity sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ== dependencies: - "@babel/types" "^7.12.7" + "@babel/types" "^7.12.10" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.10.4" @@ -293,10 +292,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.12.3", "@babel/parser@^7.12.7", "@babel/parser@^7.7.0": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.7.tgz#fee7b39fe809d0e73e5b25eecaf5780ef3d73056" - integrity sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg== +"@babel/parser@^7.1.0", "@babel/parser@^7.12.10", "@babel/parser@^7.12.3", "@babel/parser@^7.12.7", "@babel/parser@^7.7.0": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.10.tgz#824600d59e96aea26a5a2af5a9d812af05c3ae81" + integrity sha512-PJdRPwyoOqFAWfLytxrWwGrAxghCgh/yTNCYciOz8QgjflA7aZhECPZAa2VUedKg2+QMWkI0L9lynh2SNmNEgA== "@babel/plugin-proposal-async-generator-functions@^7.12.1": version "7.12.1" @@ -653,7 +652,7 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-flow-strip-types@7.12.1", "@babel/plugin-transform-flow-strip-types@^7.12.1": +"@babel/plugin-transform-flow-strip-types@7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.1.tgz#8430decfa7eb2aea5414ed4a3fa6e1652b7d77c4" integrity sha512-8hAtkmsQb36yMmEtk2JZ9JnVyDSnDOdlB+0nEGzIDLuK4yR3JcEjfuFPYkdEPSh8Id+rAMeBEn+X0iVEyho6Hg== @@ -661,6 +660,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-flow" "^7.12.1" +"@babel/plugin-transform-flow-strip-types@^7.12.1": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.10.tgz#d85e30ecfa68093825773b7b857e5085bbd32c95" + integrity sha512-0ti12wLTLeUIzu9U7kjqIn4MyOL7+Wibc7avsHhj4o1l5C0ATs8p2IMHrVYjm9t9wzhfEO6S3kxax0Rpdo8LTg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-flow" "^7.12.1" + "@babel/plugin-transform-for-of@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz#07640f28867ed16f9511c99c888291f560921cfa" @@ -764,7 +771,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-react-constant-elements@^7.12.1", "@babel/plugin-transform-react-constant-elements@^7.9.0": +"@babel/plugin-transform-react-constant-elements@^7.9.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.12.1.tgz#4471f0851feec3231cc9aaa0dccde39947c1ac1e" integrity sha512-KOHd0tIRLoER+J+8f9DblZDa1fLGPwaaN1DI1TVHuQFOpjHV22C3CUB3obeC4fexHY9nx+fH0hQNvLFFfA1mxA== @@ -801,13 +808,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-react-jsx@^7.12.1", "@babel/plugin-transform-react-jsx@^7.12.7": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.7.tgz#8b14d45f6eccd41b7f924bcb65c021e9f0a06f7f" - integrity sha512-YFlTi6MEsclFAPIDNZYiCRbneg1MFGao9pPG9uD5htwE0vDbPaMUMeYd6itWjw7K4kro4UbdQf3ljmFl9y48dQ== +"@babel/plugin-transform-react-jsx@^7.12.1", "@babel/plugin-transform-react-jsx@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.10.tgz#a7af3097c73479123594c8c8fe39545abebd44e3" + integrity sha512-MM7/BC8QdHXM7Qc1wdnuk73R4gbuOpfrSUgfV/nODGc86sPY1tgmY2M9E9uAnf2e4DOIp8aKGWqgZfQxnTNGuw== dependencies: "@babel/helper-builder-react-jsx" "^7.10.4" - "@babel/helper-builder-react-jsx-experimental" "^7.12.4" + "@babel/helper-builder-react-jsx-experimental" "^7.12.10" "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-jsx" "^7.12.1" @@ -872,10 +879,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-typeof-symbol@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz#9ca6be343d42512fbc2e68236a82ae64bc7af78a" - integrity sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q== +"@babel/plugin-transform-typeof-symbol@^7.12.1", "@babel/plugin-transform-typeof-symbol@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz#de01c4c8f96580bd00f183072b0d0ecdcf0dec4b" + integrity sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" @@ -976,9 +983,9 @@ semver "^5.5.0" "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.8.4", "@babel/preset-env@^7.9.5": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.7.tgz#54ea21dbe92caf6f10cb1a0a576adc4ebf094b55" - integrity sha512-OnNdfAr1FUQg7ksb7bmbKoby4qFOHw6DKWWUNB9KqnnCldxhxJlP+21dpyaWFmf2h0rTbOkXJtAGevY3XW1eew== + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.10.tgz#ca981b95f641f2610531bd71948656306905e6ab" + integrity sha512-Gz9hnBT/tGeTE2DBNDkD7BiWRELZt+8lSysHuDwmYXUIvtwZl0zI+D6mZgXZX0u8YBlLS4tmai9ONNY9tjRgRA== dependencies: "@babel/compat-data" "^7.12.7" "@babel/helper-compilation-targets" "^7.12.5" @@ -1039,12 +1046,12 @@ "@babel/plugin-transform-spread" "^7.12.1" "@babel/plugin-transform-sticky-regex" "^7.12.7" "@babel/plugin-transform-template-literals" "^7.12.1" - "@babel/plugin-transform-typeof-symbol" "^7.12.1" + "@babel/plugin-transform-typeof-symbol" "^7.12.10" "@babel/plugin-transform-unicode-escapes" "^7.12.1" "@babel/plugin-transform-unicode-regex" "^7.12.1" "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.12.7" - core-js-compat "^3.7.0" + "@babel/types" "^7.12.10" + core-js-compat "^3.8.0" semver "^5.5.0" "@babel/preset-flow@^7.12.1": @@ -1079,17 +1086,15 @@ "@babel/plugin-transform-react-jsx-source" "^7.12.1" "@babel/plugin-transform-react-pure-annotations" "^7.12.1" -"@babel/preset-react@^7.12.1", "@babel/preset-react@^7.12.5", "@babel/preset-react@^7.9.4": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.7.tgz#36d61d83223b07b6ac4ec55cf016abb0f70be83b" - integrity sha512-wKeTdnGUP5AEYCYQIMeXMMwU7j+2opxrG0WzuZfxuuW9nhKvvALBjl67653CWamZJVefuJGI219G591RSldrqQ== +"@babel/preset-react@^7.12.1", "@babel/preset-react@^7.9.4": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.10.tgz#4fed65f296cbb0f5fb09de6be8cddc85cc909be9" + integrity sha512-vtQNjaHRl4DUpp+t+g4wvTHsLQuye+n0H/wsXIZRn69oz/fvNC7gQ4IK73zGJBaxvHoxElDvnYCthMcT7uzFoQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-react-display-name" "^7.12.1" - "@babel/plugin-transform-react-jsx" "^7.12.7" + "@babel/plugin-transform-react-jsx" "^7.12.10" "@babel/plugin-transform-react-jsx-development" "^7.12.7" - "@babel/plugin-transform-react-jsx-self" "^7.12.1" - "@babel/plugin-transform-react-jsx-source" "^7.12.1" "@babel/plugin-transform-react-pure-annotations" "^7.12.1" "@babel/preset-typescript@7.12.1": @@ -1110,9 +1115,9 @@ "@babel/plugin-transform-typescript" "^7.12.1" "@babel/register@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.12.1.tgz#cdb087bdfc4f7241c03231f22e15d211acf21438" - integrity sha512-XWcmseMIncOjoydKZnWvWi0/5CUCD+ZYKhRwgYlWOrA8fGZ/FjuLRpqtIhLOVD/fvR1b9DQHtZPn68VvhpYf+Q== + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.12.10.tgz#19b87143f17128af4dbe7af54c735663b3999f60" + integrity sha512-EvX/BvMMJRAA3jZgILWgbsrHwBQvllC5T8B29McyME8DvkdOxk4ujESfrMvME8IHSDvWXrmMXxPvA/lx2gqPLQ== dependencies: find-cache-dir "^2.0.0" lodash "^4.17.19" @@ -1143,9 +1148,9 @@ regenerator-runtime "^0.13.4" "@babel/standalone@^7.4.5": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.12.7.tgz#07dc3d76bea978d5c5a3fd0966c218da3fae89c9" - integrity sha512-KsNrLEOTUDg/QZ2KdPUqC+PamvbIDBqrfdbkHxnY9TWyedSUch+KU/TDoj/1kg55rmma595fnVWVqQ1eCOwsaA== + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.12.10.tgz#f77f6750d0ab88c7c23234dd2d2f3800f170a573" + integrity sha512-e3sJ7uwwjiGWv7qeATKrP+Mjltr6JEurPh3yR0dBb9ie2YDnKl52lO82f+Ha+HAtyxTHfsPIXwgFmWKsCT2zOQ== "@babel/template@^7.10.4", "@babel/template@^7.12.7", "@babel/template@^7.3.3": version "7.12.7" @@ -1156,25 +1161,25 @@ "@babel/parser" "^7.12.7" "@babel/types" "^7.12.7" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5", "@babel/traverse@^7.12.7", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.7.tgz#572a722408681cef17d6b0bef69ef2e728ca69f1" - integrity sha512-nMWaqsQEeSvMNypswUDzjqQ+0rR6pqCtoQpsqGJC4/Khm9cISwPTSpai57F6/jDaOoEGz8yE/WxcO3PV6tKSmQ== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.10.tgz#2d1f4041e8bf42ea099e5b2dc48d6a594c00017a" + integrity sha512-6aEtf0IeRgbYWzta29lePeYSk+YAFIC3kyqESeft8o5CkFlYIMX+EQDDWEiAQ9LHOA3d0oHdgrSsID/CKqXJlg== dependencies: "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.5" + "@babel/generator" "^7.12.10" "@babel/helper-function-name" "^7.10.4" "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/parser" "^7.12.7" - "@babel/types" "^7.12.7" + "@babel/parser" "^7.12.10" + "@babel/types" "^7.12.10" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.19" -"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.5", "@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.7.tgz#6039ff1e242640a29452c9ae572162ec9a8f5d13" - integrity sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ== +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.5", "@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.10.tgz#7965e4a7260b26f09c56bcfcb0498af1f6d9b260" + integrity sha512-sf6wboJV5mGyip2hIpDSKsr80RszPinEFjsHTalMxZAZkoQ2/2yQzxlcFN52SJqsyPfLtPmenL4g2KB3KJXPDw== dependencies: "@babel/helper-validator-identifier" "^7.10.4" lodash "^4.17.19" @@ -1287,9 +1292,9 @@ uuid "^3.3.2" "@cypress/webpack-preprocessor@^5.4.8": - version "5.4.11" - resolved "https://registry.yarnpkg.com/@cypress/webpack-preprocessor/-/webpack-preprocessor-5.4.11.tgz#77f86e399f04969d5d8692ada96c794c52d38f87" - integrity sha512-6kj0HsaWf1s0UT4qkABuwl676sW8S8lSTai3NUcF3BWj9BqhN4JPd2DdGcHNkNmYRkjpklPeGUHqAOyqMDj5+A== + version "5.5.0" + resolved "https://registry.yarnpkg.com/@cypress/webpack-preprocessor/-/webpack-preprocessor-5.5.0.tgz#e7010b2ee7449691cc16a9d5d1956af17ea175fd" + integrity sha512-iqwPygSNZ1u6bM3r5QRVv6qYngkcgI2xCzi9Jmo4mrkcofwX08UaItJq7xlB2/dHbB2aryQYOsfe4xNKtQIm3A== dependencies: bluebird "^3.7.1" debug "^4.1.1" @@ -1417,10 +1422,10 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== -"@eslint/eslintrc@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.1.tgz#f72069c330461a06684d119384435e12a5d76e3c" - integrity sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA== +"@eslint/eslintrc@^0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.2.tgz#d01fc791e2fc33e88a29d6f3dc7e93d0cd784b76" + integrity sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ== dependencies: ajv "^6.12.4" debug "^4.1.1" @@ -1508,17 +1513,17 @@ which "^1.3.1" "@furystack/inject@^4.0.1": - version "4.0.41" - resolved "https://registry.yarnpkg.com/@furystack/inject/-/inject-4.0.41.tgz#c2c43a7aac218b94041fa00cf0b407971e3c50f9" - integrity sha512-jLeyPFanz83zhNU134i2N6W9t0i2r4dBnUd5DWCraMf+Xv5z7Ww8Ihh84Z2N3Z7aor6GqCveBZ+u6CQouQHJLQ== + version "4.0.44" + resolved "https://registry.yarnpkg.com/@furystack/inject/-/inject-4.0.44.tgz#256c7ce05a0abb6100a16fe2c530b9b3238332d2" + integrity sha512-TnwDmAIK6TLVA5toG1OuyLNHXonc30BmCohbI22JwPB7zS/8UaK1GTZOdrQhPoARFJSztmNESK0XE398iBavIA== dependencies: - "@furystack/utils" "^1.2.11" + "@furystack/utils" "^1.2.14" tslib "^2.0.3" -"@furystack/utils@^1.2.11": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@furystack/utils/-/utils-1.2.11.tgz#1a11244769df2ae77cb5f3625984408b99c5a3b1" - integrity sha512-ZqxKYZxn84EoI4tkYx54/YiBsXmhx7wllaMaBOpCUYSG6lKwbVQ0ForCqHcLAgETQrH+vzEm7J5ibV9cl/Wseg== +"@furystack/utils@^1.2.14": + version "1.2.14" + resolved "https://registry.yarnpkg.com/@furystack/utils/-/utils-1.2.14.tgz#e9207446c5b2fb955b91fa67a9f02ab496b5a20e" + integrity sha512-TUtnY0wYmZAWHDGudO4BdyZBf1irNpKt4qEfZt2obfwxPz860Gya6G7YN/WncVXvvPYO407rxUENU+eT3yaf2w== dependencies: tslib "^2.0.3" @@ -2464,41 +2469,41 @@ npmlog "^4.1.2" write-file-atomic "^2.3.0" -"@material-ui/core@^4.11.0": - version "4.11.0" - resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.11.0.tgz#b69b26e4553c9e53f2bfaf1053e216a0af9be15a" - integrity sha512-bYo9uIub8wGhZySHqLQ833zi4ZML+XCBE1XwJ8EuUVSpTWWG57Pm+YugQToJNFsEyiKFhPh8DPD0bgupz8n01g== +"@material-ui/core@^4.11.2": + version "4.11.2" + resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.11.2.tgz#f8276dfa40d88304e6ceb98962af73803d27d42d" + integrity sha512-/D1+AQQeYX/WhT/FUk78UCRj8ch/RCglsQLYujYTIqPSJlwZHKcvHidNeVhODXeApojeXjkl0tWdk5C9ofwOkQ== dependencies: "@babel/runtime" "^7.4.4" - "@material-ui/styles" "^4.10.0" - "@material-ui/system" "^4.9.14" + "@material-ui/styles" "^4.11.2" + "@material-ui/system" "^4.11.2" "@material-ui/types" "^5.1.0" - "@material-ui/utils" "^4.10.2" + "@material-ui/utils" "^4.11.2" "@types/react-transition-group" "^4.2.0" clsx "^1.0.4" hoist-non-react-statics "^3.3.2" popper.js "1.16.1-lts" prop-types "^15.7.2" - react-is "^16.8.0" + react-is "^16.8.0 || ^17.0.0" react-transition-group "^4.4.0" -"@material-ui/icons@^4.9.1": - version "4.9.1" - resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.9.1.tgz#fdeadf8cb3d89208945b33dbc50c7c616d0bd665" - integrity sha512-GBitL3oBWO0hzBhvA9KxqcowRUsA0qzwKkURyC8nppnC3fw54KPKZ+d4V1Eeg/UnDRSzDaI9nGCdel/eh9AQMg== +"@material-ui/icons@^4.11.2": + version "4.11.2" + resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.11.2.tgz#b3a7353266519cd743b6461ae9fdfcb1b25eb4c5" + integrity sha512-fQNsKX2TxBmqIGJCSi3tGTO/gZ+eJgWmMJkgDiOfyNaunNaxcklJQFaFogYcFl0qFuaEz1qaXYXboa/bUXVSOQ== dependencies: "@babel/runtime" "^7.4.4" -"@material-ui/lab@^4.0.0-alpha.56": - version "4.0.0-alpha.56" - resolved "https://registry.yarnpkg.com/@material-ui/lab/-/lab-4.0.0-alpha.56.tgz#ff63080949b55b40625e056bbda05e130d216d34" - integrity sha512-xPlkK+z/6y/24ka4gVJgwPfoCF4RCh8dXb1BNE7MtF9bXEBLN/lBxNTK8VAa0qm3V2oinA6xtUIdcRh0aeRtVw== +"@material-ui/lab@^4.0.0-alpha.57": + version "4.0.0-alpha.57" + resolved "https://registry.yarnpkg.com/@material-ui/lab/-/lab-4.0.0-alpha.57.tgz#e8961bcf6449e8a8dabe84f2700daacfcafbf83a" + integrity sha512-qo/IuIQOmEKtzmRD2E4Aa6DB4A87kmY6h0uYhjUmrrgmEAgbbw9etXpWPVXuRK6AGIQCjFzV6WO2i21m1R4FCw== dependencies: "@babel/runtime" "^7.4.4" - "@material-ui/utils" "^4.10.2" + "@material-ui/utils" "^4.11.2" clsx "^1.0.4" prop-types "^15.7.2" - react-is "^16.8.0" + react-is "^16.8.0 || ^17.0.0" "@material-ui/pickers@^3.2.10": version "3.2.10" @@ -2512,15 +2517,15 @@ react-transition-group "^4.0.0" rifm "^0.7.0" -"@material-ui/styles@^4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.10.0.tgz#2406dc23aa358217aa8cc772e6237bd7f0544071" - integrity sha512-XPwiVTpd3rlnbfrgtEJ1eJJdFCXZkHxy8TrdieaTvwxNYj42VnnCyFzxYeNW9Lhj4V1oD8YtQ6S5Gie7bZDf7Q== +"@material-ui/styles@^4.11.2": + version "4.11.2" + resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.11.2.tgz#e70558be3f41719e8c0d63c7a3c9ae163fdc84cb" + integrity sha512-xbItf8zkfD3FuGoD9f2vlcyPf9jTEtj9YTJoNNV+NMWaSAHXgrW6geqRoo/IwBuMjqpwqsZhct13e2nUyU9Ljw== dependencies: "@babel/runtime" "^7.4.4" "@emotion/hash" "^0.8.0" "@material-ui/types" "^5.1.0" - "@material-ui/utils" "^4.9.6" + "@material-ui/utils" "^4.11.2" clsx "^1.0.4" csstype "^2.5.2" hoist-non-react-statics "^3.3.2" @@ -2534,13 +2539,13 @@ jss-plugin-vendor-prefixer "^10.0.3" prop-types "^15.7.2" -"@material-ui/system@^4.9.14": - version "4.9.14" - resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.9.14.tgz#4b00c48b569340cefb2036d0596b93ac6c587a5f" - integrity sha512-oQbaqfSnNlEkXEziDcJDDIy8pbvwUmZXWNqlmIwDqr/ZdCK8FuV3f4nxikUh7hvClKV2gnQ9djh5CZFTHkZj3w== +"@material-ui/system@^4.11.2": + version "4.11.2" + resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.11.2.tgz#7f0a754bba3673ed5fdbfa02fe438096c104b1f6" + integrity sha512-BELFJEel5E+5DMiZb6XXT3peWRn6UixRvBtKwSxqntmD0+zwbbfCij6jtGwwdJhN1qX/aXrKu10zX31GBaeR7A== dependencies: "@babel/runtime" "^7.4.4" - "@material-ui/utils" "^4.9.6" + "@material-ui/utils" "^4.11.2" csstype "^2.5.2" prop-types "^15.7.2" @@ -2549,14 +2554,14 @@ resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-5.1.0.tgz#efa1c7a0b0eaa4c7c87ac0390445f0f88b0d88f2" integrity sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A== -"@material-ui/utils@^4.10.2", "@material-ui/utils@^4.9.6": - version "4.10.2" - resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.10.2.tgz#3fd5470ca61b7341f1e0468ac8f29a70bf6df321" - integrity sha512-eg29v74P7W5r6a4tWWDAAfZldXIzfyO1am2fIsC39hdUUHm/33k6pGOKPbgDjg/U/4ifmgAePy/1OjkKN6rFRw== +"@material-ui/utils@^4.11.2": + version "4.11.2" + resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.11.2.tgz#f1aefa7e7dff2ebcb97d31de51aecab1bb57540a" + integrity sha512-Uul8w38u+PICe2Fg2pDKCaIG7kOyhowZ9vjiC1FsVwPABTW8vPPKfF6OvxRq3IiBaI1faOJmgdvMG7rMJARBhA== dependencies: "@babel/runtime" "^7.4.4" prop-types "^15.7.2" - react-is "^16.8.0" + react-is "^16.8.0 || ^17.0.0" "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" @@ -2600,21 +2605,26 @@ mkdirp "^1.0.4" "@octokit/auth-token@^2.4.0": - version "2.4.3" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.3.tgz#b868b5f2366533a7e62933eaa1181a8924228cc4" - integrity sha512-fdGoOQ3kQJh+hrilc0Plg50xSfaCKOeYN9t6dpJKXN9BxhhfquL0OzoQXg3spLYymL5rm29uPeI3KEXRaZQ9zg== + version "2.4.4" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.4.tgz#ee31c69b01d0378c12fd3ffe406030f3d94d3b56" + integrity sha512-LNfGu3Ro9uFAYh10MUZVaT7X2CnNm2C8IDQmabx+3DygYIQjs9FwzFAHN/0t6mu5HEPhxcb1XOuxdpY82vCg2Q== dependencies: - "@octokit/types" "^5.0.0" + "@octokit/types" "^6.0.0" "@octokit/endpoint@^6.0.1": - version "6.0.9" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.9.tgz#c6a772e024202b1bd19ab69f90e0536a2598b13e" - integrity sha512-3VPLbcCuqji4IFTclNUtGdp9v7g+nspWdiCUbK3+iPMjJCZ6LEhn1ts626bWLOn0GiDb6j+uqGvPpqLnY7pBgw== + version "6.0.10" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.10.tgz#741ce1fa2f4fb77ce8ebe0c6eaf5ce63f565f8e8" + integrity sha512-9+Xef8nT7OKZglfkOMm7IL6VwxXUQyR7DUSU0LH/F7VNqs8vyd7es5pTfz9E7DwUIx7R3pGscxu1EBhYljyu7Q== dependencies: - "@octokit/types" "^5.0.0" + "@octokit/types" "^6.0.0" is-plain-object "^5.0.0" universal-user-agent "^6.0.0" +"@octokit/openapi-types@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-2.0.0.tgz#6d8f8ad9db3b75a39115f5def2654df8bed39f28" + integrity sha512-J4bfM7lf8oZvEAdpS71oTvC1ofKxfEZgU5vKVwzZKi4QPiL82udjpseJwxPid9Pu2FNmyRQOX4iEj6W1iOSnPw== + "@octokit/plugin-enterprise-rest@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" @@ -2650,22 +2660,22 @@ once "^1.4.0" "@octokit/request-error@^2.0.0": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.0.3.tgz#b51b200052bf483f6fa56c9e7e3aa51ead36ecd8" - integrity sha512-GgD5z8Btm301i2zfvJLk/mkhvGCdjQ7wT8xF9ov5noQY8WbKZDH9cOBqXzoeKd1mLr1xH2FwbtGso135zGBgTA== + version "2.0.4" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.0.4.tgz#07dd5c0521d2ee975201274c472a127917741262" + integrity sha512-LjkSiTbsxIErBiRh5wSZvpZqT4t0/c9+4dOe0PII+6jXR+oj/h66s7E4a/MghV7iT8W9ffoQ5Skoxzs96+gBPA== dependencies: - "@octokit/types" "^5.0.1" + "@octokit/types" "^6.0.0" deprecation "^2.0.0" once "^1.4.0" "@octokit/request@^5.2.0": - version "5.4.10" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.10.tgz#402d2c53768bde12b99348329ba4129746aebb9c" - integrity sha512-egA49HkqEORVGDZGav1mh+VD+7uLgOxtn5oODj6guJk0HCy+YBSYapFkSLFgeYj3Fr18ZULKGURkjyhkAChylw== + version "5.4.12" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.12.tgz#b04826fa934670c56b135a81447be2c1723a2ffc" + integrity sha512-MvWYdxengUWTGFpfpefBBpVmmEYfkwMoxonIB3sUGp5rhdgwjXL1ejo6JbgzG/QD9B/NYt/9cJX1pxXeSIUCkg== dependencies: "@octokit/endpoint" "^6.0.1" "@octokit/request-error" "^2.0.0" - "@octokit/types" "^5.0.0" + "@octokit/types" "^6.0.3" deprecation "^2.0.0" is-plain-object "^5.0.0" node-fetch "^2.6.1" @@ -2701,11 +2711,12 @@ dependencies: "@types/node" ">= 8" -"@octokit/types@^5.0.0", "@octokit/types@^5.0.1": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-5.5.0.tgz#e5f06e8db21246ca102aa28444cdb13ae17a139b" - integrity sha512-UZ1pErDue6bZNjYOotCNveTXArOMZQFG6hKJfOnGnulVCMcVVi7YIIuuR4WfBhjo7zgpmzn/BkPDnUXtNx+PcQ== +"@octokit/types@^6.0.0", "@octokit/types@^6.0.3": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.1.1.tgz#bc88b3eb5f447b025a2a1a8177a72db216e8d4ca" + integrity sha512-btm3D6S7VkRrgyYF31etUtVY/eQ1KzrNRqhFt25KSe2mKlXuLXJilglRC6eDA2P6ou94BUnk/Kz5MPEolXgoiw== dependencies: + "@octokit/openapi-types" "^2.0.0" "@types/node" ">= 8" "@pmmmwh/react-refresh-webpack-plugin@0.4.2": @@ -2732,7 +2743,7 @@ schema-utils "^2.6.5" source-map "^0.7.3" -"@popperjs/core@^2.4.4", "@popperjs/core@^2.5.4": +"@popperjs/core@^2.5.4": version "2.5.4" resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.5.4.tgz#de25b5da9f727985a3757fd59b5d028aba75841a" integrity sha512-ZpKr+WTb8zsajqgDkvCEWgp6d5eJT6Q63Ng2neTbzBO76Lbe91vX/iVIW9dikq+Fs3yEo+ls4cxeXABD2LtcbQ== @@ -2836,19 +2847,19 @@ dependencies: "@sinonjs/commons" "^1.7.0" -"@storybook/addon-a11y@^6.1.3": - version "6.1.3" - resolved "https://registry.yarnpkg.com/@storybook/addon-a11y/-/addon-a11y-6.1.3.tgz#76a6b12e029c6eb7b9443aa4836c0ef1c79aefcd" - integrity sha512-1sbat2c1raRxuVBOoy1SUsh1IbhsEykW43oP8bKA4nfS5em6JeG3YY/B3zh38c3e5jgc04W8eZIXVP2xkxycPg== - dependencies: - "@storybook/addons" "6.1.3" - "@storybook/api" "6.1.3" - "@storybook/channels" "6.1.3" - "@storybook/client-api" "6.1.3" - "@storybook/client-logger" "6.1.3" - "@storybook/components" "6.1.3" - "@storybook/core-events" "6.1.3" - "@storybook/theming" "6.1.3" +"@storybook/addon-a11y@^6.1.11": + version "6.1.11" + resolved "https://registry.yarnpkg.com/@storybook/addon-a11y/-/addon-a11y-6.1.11.tgz#13f1cbe02a6c6ab08cebe1851183e1813d86eb16" + integrity sha512-DJJeBoYlO/WjSKgQEE44fwaKg9KZE6yifPAXT6oJlEPU9sRNnIIY5cAJNeaRbJ61SZ8rDr51iF/4yJb0uvyNxw== + dependencies: + "@storybook/addons" "6.1.11" + "@storybook/api" "6.1.11" + "@storybook/channels" "6.1.11" + "@storybook/client-api" "6.1.11" + "@storybook/client-logger" "6.1.11" + "@storybook/components" "6.1.11" + "@storybook/core-events" "6.1.11" + "@storybook/theming" "6.1.11" axe-core "^4.0.1" core-js "^3.0.1" global "^4.3.2" @@ -2858,17 +2869,17 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/addon-actions@^6.1.3": - version "6.1.3" - resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-6.1.3.tgz#c499e7904e0a5186699e5c1a1380b90c5f7ab7bc" - integrity sha512-/cQZVoALtn9evRyewbzkN+3qeNMMEUpHrrA3jiB8xAdzfsjxvEKB1NF89O5ArF7samW+1LgDzG9UYZGPiXgyFg== - dependencies: - "@storybook/addons" "6.1.3" - "@storybook/api" "6.1.3" - "@storybook/client-api" "6.1.3" - "@storybook/components" "6.1.3" - "@storybook/core-events" "6.1.3" - "@storybook/theming" "6.1.3" +"@storybook/addon-actions@^6.1.11": + version "6.1.11" + resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-6.1.11.tgz#73e91cc95c45ea477cfd4f3603f6b95f5829eab6" + integrity sha512-J44XLx2G732OG7Az79Cpk5UlI5SyXHeQqdykwT/4IEQXSBXAYWSTIJJjpJdcjR/D+zpklab1QDSiWxCrKbe81A== + dependencies: + "@storybook/addons" "6.1.11" + "@storybook/api" "6.1.11" + "@storybook/client-api" "6.1.11" + "@storybook/components" "6.1.11" + "@storybook/core-events" "6.1.11" + "@storybook/theming" "6.1.11" core-js "^3.0.1" fast-deep-equal "^3.1.1" global "^4.3.2" @@ -2881,16 +2892,16 @@ util-deprecate "^1.0.2" uuid "^8.0.0" -"@storybook/addon-events@^6.1.3": - version "6.1.3" - resolved "https://registry.yarnpkg.com/@storybook/addon-events/-/addon-events-6.1.3.tgz#3dee60c16f734f707a5f8fd490c61008cf8da0f4" - integrity sha512-JbIlyvq81/j2+pG3fIXMRotc0SkNE/zG5rHLpeBxg/27s8XTFF8HfgftgEx+RbE8YEJYszJVgFhBtq5JQ/D84A== +"@storybook/addon-events@^6.1.11": + version "6.1.11" + resolved "https://registry.yarnpkg.com/@storybook/addon-events/-/addon-events-6.1.11.tgz#13ee944a8ba7f7cb5b50ed9b951af812c4c589bd" + integrity sha512-MNYhs3Kbhd5AzVAo+ICdW8t+UkNDArDdJmf3MsLiksFf/5d87x6eDl/KHG8ADb6ShusoF7R3T+cr43HQnuYzrA== dependencies: - "@storybook/addons" "6.1.3" - "@storybook/api" "6.1.3" - "@storybook/client-api" "6.1.3" - "@storybook/core-events" "6.1.3" - "@storybook/theming" "6.1.3" + "@storybook/addons" "6.1.11" + "@storybook/api" "6.1.11" + "@storybook/client-api" "6.1.11" + "@storybook/core-events" "6.1.11" + "@storybook/theming" "6.1.11" core-js "^3.0.1" format-json "^1.0.3" lodash "^4.17.15" @@ -2920,18 +2931,18 @@ react-lifecycles-compat "^3.0.4" util-deprecate "^1.0.2" -"@storybook/addon-knobs@^6.1.3": - version "6.1.3" - resolved "https://registry.yarnpkg.com/@storybook/addon-knobs/-/addon-knobs-6.1.3.tgz#4c543d0e0d2e018c11961f884ea546bdbfc537e3" - integrity sha512-UI94fljNSnsbQQK7UN37C0JnKaDz6V0ef+qUXdb5S0H9J/LN4w35AAmSwzRYx8x1mvKMQgTZ16uSnUgtzFL99g== - dependencies: - "@storybook/addons" "6.1.3" - "@storybook/api" "6.1.3" - "@storybook/channels" "6.1.3" - "@storybook/client-api" "6.1.3" - "@storybook/components" "6.1.3" - "@storybook/core-events" "6.1.3" - "@storybook/theming" "6.1.3" +"@storybook/addon-knobs@^6.1.11": + version "6.1.11" + resolved "https://registry.yarnpkg.com/@storybook/addon-knobs/-/addon-knobs-6.1.11.tgz#bd0e33af886f00f359b8d2e83b63bde1bf97e8c7" + integrity sha512-5bVB7JbClyL/v8hJcifRL1Jetj1rDbVjmIOw2RputZHPbOJ2Dd18X3uOAfzNa7e2KJ0BmtA1ojZ3PuDfy9MAPw== + dependencies: + "@storybook/addons" "6.1.11" + "@storybook/api" "6.1.11" + "@storybook/channels" "6.1.11" + "@storybook/client-api" "6.1.11" + "@storybook/components" "6.1.11" + "@storybook/core-events" "6.1.11" + "@storybook/theming" "6.1.11" copy-to-clipboard "^3.0.8" core-js "^3.0.1" escape-html "^1.0.3" @@ -2945,16 +2956,16 @@ react-select "^3.0.8" regenerator-runtime "^0.13.7" -"@storybook/addon-links@^6.1.3": - version "6.1.3" - resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-6.1.3.tgz#2d39e7dece8e511d8cd1ef03580ffd2be4045989" - integrity sha512-Up1b5tHRZw7STNO7H+LssoOWf2JQM7zwZS/0fIHCPTYJaS6I1mrDpdpzjHh0rdtXOW7UfXSVNMuUmjHlS2NcRw== +"@storybook/addon-links@^6.1.11": + version "6.1.11" + resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-6.1.11.tgz#84b20b0c13bbfc8270cdf52389ce52f98c415b6a" + integrity sha512-OIBeOdTHNr/egIuyOUEtEBtZJXVp9PEPQ4MDxvKsCgpnXruPhjenPNW+mQKxm4SefpePW7zkx6k1ubpYVJUeag== dependencies: - "@storybook/addons" "6.1.3" - "@storybook/client-logger" "6.1.3" - "@storybook/core-events" "6.1.3" + "@storybook/addons" "6.1.11" + "@storybook/client-logger" "6.1.11" + "@storybook/core-events" "6.1.11" "@storybook/csf" "0.0.1" - "@storybook/router" "6.1.3" + "@storybook/router" "6.1.11" "@types/qs" "^6.9.0" core-js "^3.0.1" global "^4.3.2" @@ -2991,18 +3002,18 @@ core-js "^3.0.1" util-deprecate "^1.0.2" -"@storybook/addon-storysource@^6.1.3": - version "6.1.3" - resolved "https://registry.yarnpkg.com/@storybook/addon-storysource/-/addon-storysource-6.1.3.tgz#fe572ad6c52973e7157ea73395ae63d9b54aefb9" - integrity sha512-N8cob4ILDHpCYfgGdSbvGXo3lN1N71xdV7BmXJ3cHc7HYc/1gQKjWTJl5smfzRaTB0YxzVgzd8XH65E5F8vQlw== - dependencies: - "@storybook/addons" "6.1.3" - "@storybook/api" "6.1.3" - "@storybook/client-logger" "6.1.3" - "@storybook/components" "6.1.3" - "@storybook/router" "6.1.3" - "@storybook/source-loader" "6.1.3" - "@storybook/theming" "6.1.3" +"@storybook/addon-storysource@^6.1.11": + version "6.1.11" + resolved "https://registry.yarnpkg.com/@storybook/addon-storysource/-/addon-storysource-6.1.11.tgz#f5413a51262f62eed3b399c4d9861b873f2c2827" + integrity sha512-uscKgALJa/inMFPb/Fpe9LXB6c6WlrGOfaUiAdrahn9gZbDAG9qunaSkAZ9EPWckSosq3RuV59HMCQ2Bolh/lQ== + dependencies: + "@storybook/addons" "6.1.11" + "@storybook/api" "6.1.11" + "@storybook/client-logger" "6.1.11" + "@storybook/components" "6.1.11" + "@storybook/router" "6.1.11" + "@storybook/source-loader" "6.1.11" + "@storybook/theming" "6.1.11" core-js "^3.0.1" estraverse "^4.2.0" loader-utils "^2.0.0" @@ -3011,17 +3022,17 @@ react-syntax-highlighter "^13.5.0" regenerator-runtime "^0.13.7" -"@storybook/addon-viewport@^6.1.3": - version "6.1.3" - resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-6.1.3.tgz#8c1fd98d097c8abdb36aae1dca601269530906c5" - integrity sha512-VqScNlkqNmWyceQ7LppWRhSHOHSW35ncstc66y85hPgfK587gKeDxt3tsmXzNuShIURIkXJb1YqPwSlm/jQf3w== - dependencies: - "@storybook/addons" "6.1.3" - "@storybook/api" "6.1.3" - "@storybook/client-logger" "6.1.3" - "@storybook/components" "6.1.3" - "@storybook/core-events" "6.1.3" - "@storybook/theming" "6.1.3" +"@storybook/addon-viewport@^6.1.11": + version "6.1.11" + resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-6.1.11.tgz#70c6c2e81a800e4cd217693a30448bb4e3cbc811" + integrity sha512-VgCRLpTu56WzSJ0piBu4nL99GtXeMcDxaLvEZKyVCoYjyQZxRcg4N9OFwxpnu6bYYF7O4pMbs2wITc4mW6YSEg== + dependencies: + "@storybook/addons" "6.1.11" + "@storybook/api" "6.1.11" + "@storybook/client-logger" "6.1.11" + "@storybook/components" "6.1.11" + "@storybook/core-events" "6.1.11" + "@storybook/theming" "6.1.11" core-js "^3.0.1" global "^4.3.2" memoizerific "^1.11.3" @@ -3041,17 +3052,17 @@ global "^4.3.2" util-deprecate "^1.0.2" -"@storybook/addons@6.1.3", "@storybook/addons@^6.1.3": - version "6.1.3" - resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-6.1.3.tgz#6e083ef348d793fe886bc9707dcfc60663ed1013" - integrity sha512-1HkT1NgWcWPKU0VDWv2M7cDtHO7/S8YzAWtPqf+fQ/A2F+yWV+jSf2S34/wxtc16XtNbKnRhywu0/UOsMpOMWw== - dependencies: - "@storybook/api" "6.1.3" - "@storybook/channels" "6.1.3" - "@storybook/client-logger" "6.1.3" - "@storybook/core-events" "6.1.3" - "@storybook/router" "6.1.3" - "@storybook/theming" "6.1.3" +"@storybook/addons@6.1.11", "@storybook/addons@^6.1.11": + version "6.1.11" + resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-6.1.11.tgz#cb4578411ca00ccb206b484df5a171ccaca34719" + integrity sha512-OZXsdmn60dVe482l9zWxzOqqJApD2jggk/8QJKn3/Ub9posmqdqg712bW6v71BBe0UXXG/QfkZA7gcyiyEENbw== + dependencies: + "@storybook/api" "6.1.11" + "@storybook/channels" "6.1.11" + "@storybook/client-logger" "6.1.11" + "@storybook/core-events" "6.1.11" + "@storybook/router" "6.1.11" + "@storybook/theming" "6.1.11" core-js "^3.0.1" global "^4.3.2" regenerator-runtime "^0.13.7" @@ -3082,19 +3093,19 @@ telejson "^3.2.0" util-deprecate "^1.0.2" -"@storybook/api@6.1.3": - version "6.1.3" - resolved "https://registry.yarnpkg.com/@storybook/api/-/api-6.1.3.tgz#b9c5aa07ab4a217d25353c8bb8c2bb6bf018bceb" - integrity sha512-I9Lx9QXAVFXH5uPVTtSSP7/FEqbpoz7aBOj9sVQn0O65zYT7XxoGTkqb1wbhlPc7qd49lqQ8oSJiA7MohMEyRA== +"@storybook/api@6.1.11": + version "6.1.11" + resolved "https://registry.yarnpkg.com/@storybook/api/-/api-6.1.11.tgz#1e0b798203df823ac21184386258cf8b5f17f440" + integrity sha512-/p4QW/p3uWO0AKVveNezX3I/CotyBKaJ5ui8PuvSPsl7yvqcsK41qI4evKOw7GMQn6oP+2enRbzHpGuCUgQSjA== dependencies: "@reach/router" "^1.3.3" - "@storybook/channels" "6.1.3" - "@storybook/client-logger" "6.1.3" - "@storybook/core-events" "6.1.3" + "@storybook/channels" "6.1.11" + "@storybook/client-logger" "6.1.11" + "@storybook/core-events" "6.1.11" "@storybook/csf" "0.0.1" - "@storybook/router" "6.1.3" + "@storybook/router" "6.1.11" "@storybook/semver" "^7.3.2" - "@storybook/theming" "6.1.3" + "@storybook/theming" "6.1.11" "@types/reach__router" "^1.3.5" core-js "^3.0.1" fast-deep-equal "^3.1.1" @@ -3107,14 +3118,14 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/channel-postmessage@6.1.3": - version "6.1.3" - resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-6.1.3.tgz#fa2905eb0c8aa1482744cf3066a40031457e04d9" - integrity sha512-L/CHmAPRzf7ct8NXDGBoDTAx9cUiKd1fY1uqHEbh9yOZf6l9AR4dOqeNuLfH8Tj4/MnbXrbYSnnqhXjE69nhOA== +"@storybook/channel-postmessage@6.1.11": + version "6.1.11" + resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-6.1.11.tgz#62c1079f04870dd27925bd538a2020e7380daa2e" + integrity sha512-voW4Z2SUacDOxwN2q1NEBL//8OpgvL2C5CeoG1VQyEllKM8Vg9t1Nxo2FFTJBzv5LeEX7VIJKeBoB25DYvKyng== dependencies: - "@storybook/channels" "6.1.3" - "@storybook/client-logger" "6.1.3" - "@storybook/core-events" "6.1.3" + "@storybook/channels" "6.1.11" + "@storybook/client-logger" "6.1.11" + "@storybook/core-events" "6.1.11" core-js "^3.0.1" global "^4.3.2" qs "^6.6.0" @@ -3127,25 +3138,25 @@ dependencies: core-js "^3.0.1" -"@storybook/channels@6.1.3": - version "6.1.3" - resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-6.1.3.tgz#72ff6f4afdc78d79d2afc5562a23efb92f2934e8" - integrity sha512-lBdUwRDiW2RKWUo8+mih4rLPJr9jOVs0UFGPOACiBICszi8CExvgDV50r2fBewos6gKUHg99lffBxqWrotoxnA== +"@storybook/channels@6.1.11": + version "6.1.11" + resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-6.1.11.tgz#a93a83746ad78dd40e1c056029f6d93b17bb66bc" + integrity sha512-NvjWzQ95TSV1e18jaQBCOGoe+vptKH2NOKZ7QRQ7I0O5OoHKr47IXoh+MQ5C8CRD9FTdLE/xWdn1sVVEPRyHEw== dependencies: core-js "^3.0.1" ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/client-api@6.1.3": - version "6.1.3" - resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-6.1.3.tgz#1e61235a0a984ccbc51719d810fc49e3693e7c7d" - integrity sha512-CQZuyEK1qz9WNxLQeiTp3Mv1h2t9riDvDVnkcRkU5u3Cw+KChnEzQXX1OMBt74uzd+HlXNzz8sOw3n00tXMyEQ== +"@storybook/client-api@6.1.11": + version "6.1.11" + resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-6.1.11.tgz#d25aac484ca84a1acb01d450e756a62408f00c1a" + integrity sha512-DodJQzGCR+PYs26klvbquTjfBgkw5nvCZd3jpgWQtOrYaY/cMY1LLkVkKqrm2ENW8f7vf7tiw78RtxaXy7xeIQ== dependencies: - "@storybook/addons" "6.1.3" - "@storybook/channel-postmessage" "6.1.3" - "@storybook/channels" "6.1.3" - "@storybook/client-logger" "6.1.3" - "@storybook/core-events" "6.1.3" + "@storybook/addons" "6.1.11" + "@storybook/channel-postmessage" "6.1.11" + "@storybook/channels" "6.1.11" + "@storybook/client-logger" "6.1.11" + "@storybook/core-events" "6.1.11" "@storybook/csf" "0.0.1" "@types/qs" "^6.9.0" "@types/webpack-env" "^1.15.3" @@ -3167,10 +3178,10 @@ dependencies: core-js "^3.0.1" -"@storybook/client-logger@6.1.3": - version "6.1.3" - resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-6.1.3.tgz#d35d7dd34db4d6eb6e88c51a1402d109c3a4e175" - integrity sha512-oMNoHHtRnDF/VSxm+odr88fc7X41q5OIQtKLCw3wIMyV+UA/bIRRo30q+rUgOung99lk/aVxlmJ7nyFJpZMVfQ== +"@storybook/client-logger@6.1.11": + version "6.1.11" + resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-6.1.11.tgz#5dd092e4293e5f58f7e89ddbc6eb2511b7d60954" + integrity sha512-dSc+VKLW1UaiMPMhlZYRqhynrrHdHFiBEgU28+8LcmoZ1yhZBwLkcKdSD4YTT0CbMJAG1/+NUW5kRI8Geeg+rA== dependencies: core-js "^3.0.1" global "^4.3.2" @@ -3202,15 +3213,15 @@ simplebar-react "^1.0.0-alpha.6" ts-dedent "^1.1.0" -"@storybook/components@6.1.3": - version "6.1.3" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-6.1.3.tgz#6c1aab3bdd01ad0659087550231aa568252ccb51" - integrity sha512-QWDgvSAZ3mS4w+LcYY0hM7c9dN2eow1oE3UeH1WZw+MAV3l3UkiyQWdd3uVavskR+ofA/R2yOrB2L2hfSAJ3Yw== +"@storybook/components@6.1.11": + version "6.1.11" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-6.1.11.tgz#edd5db7fe43f47b5a7ab515840795a89d931512e" + integrity sha512-DGDl76uONTkg0rpsa36TpVuXv4K7rFYe8GnQ/Q8n4By5tvldC4s9YXwcDRYHVrfnYybKzuZ/+jv2ZAp4/8ZaeA== dependencies: - "@popperjs/core" "^2.4.4" - "@storybook/client-logger" "6.1.3" + "@popperjs/core" "^2.5.4" + "@storybook/client-logger" "6.1.11" "@storybook/csf" "0.0.1" - "@storybook/theming" "6.1.3" + "@storybook/theming" "6.1.11" "@types/overlayscrollbars" "^1.9.0" "@types/react-color" "^3.0.1" "@types/react-syntax-highlighter" "11.0.4" @@ -3223,7 +3234,7 @@ overlayscrollbars "^1.10.2" polished "^3.4.4" react-color "^2.17.0" - react-popper-tooltip "^3.1.0" + react-popper-tooltip "^3.1.1" react-syntax-highlighter "^13.5.0" react-textarea-autosize "^8.1.1" ts-dedent "^2.0.0" @@ -3235,17 +3246,17 @@ dependencies: core-js "^3.0.1" -"@storybook/core-events@6.1.3": - version "6.1.3" - resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-6.1.3.tgz#75f1dbaecdcee0aafdcb45fcb2a3dda05b88c705" - integrity sha512-O/piXZqlqTfaEh5RvAjKFJJRNik9H5sHv1wT3U5RXSXirCM6UTZ6ePuv8cp9Fu55Dnc0nONVh2cFJOTL2V8X0Q== +"@storybook/core-events@6.1.11": + version "6.1.11" + resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-6.1.11.tgz#d50e8ec90490f9a7180a8c8a83afb6dcfe47ed66" + integrity sha512-hTib81W8PxepM7iXVvl3pBXSaGpChl5LTzaLCoIRO9sSB8dy0/x2DLAHzbQvShk/l1wqUc3TtOLIxq+eC9l3wg== dependencies: core-js "^3.0.1" -"@storybook/core@6.1.3", "@storybook/core@^6.1.3": - version "6.1.3" - resolved "https://registry.yarnpkg.com/@storybook/core/-/core-6.1.3.tgz#cdf0452e9c1830ab3e368890bd71107d0b52a625" - integrity sha512-oUzX5TlKvVv3pMMeY8np7PffYiNGhstbCw9b1/6OtMHnb94f7cib+/ZcGgWLm58TV1dKYDi+J+a1pvaS2IH77A== +"@storybook/core@6.1.11", "@storybook/core@^6.1.11": + version "6.1.11" + resolved "https://registry.yarnpkg.com/@storybook/core/-/core-6.1.11.tgz#ed9d3b513794c604ab11180f6a014924b871179e" + integrity sha512-pYOOQwiNJ5myLRn6p6nnLUjjjISHK/N55vS4HFnETYSaRLA++h1coN1jk7Zwt89dOQTdF0EsTJn+6snYOC+lxQ== dependencies: "@babel/core" "^7.12.3" "@babel/plugin-proposal-class-properties" "^7.12.1" @@ -3269,20 +3280,20 @@ "@babel/preset-react" "^7.12.1" "@babel/preset-typescript" "^7.12.1" "@babel/register" "^7.12.1" - "@storybook/addons" "6.1.3" - "@storybook/api" "6.1.3" - "@storybook/channel-postmessage" "6.1.3" - "@storybook/channels" "6.1.3" - "@storybook/client-api" "6.1.3" - "@storybook/client-logger" "6.1.3" - "@storybook/components" "6.1.3" - "@storybook/core-events" "6.1.3" + "@storybook/addons" "6.1.11" + "@storybook/api" "6.1.11" + "@storybook/channel-postmessage" "6.1.11" + "@storybook/channels" "6.1.11" + "@storybook/client-api" "6.1.11" + "@storybook/client-logger" "6.1.11" + "@storybook/components" "6.1.11" + "@storybook/core-events" "6.1.11" "@storybook/csf" "0.0.1" - "@storybook/node-logger" "6.1.3" - "@storybook/router" "6.1.3" + "@storybook/node-logger" "6.1.11" + "@storybook/router" "6.1.11" "@storybook/semver" "^7.3.2" - "@storybook/theming" "6.1.3" - "@storybook/ui" "6.1.3" + "@storybook/theming" "6.1.11" + "@storybook/ui" "6.1.11" "@types/glob-base" "^0.3.0" "@types/micromatch" "^4.0.1" "@types/node-fetch" "^2.5.4" @@ -3356,10 +3367,10 @@ dependencies: lodash "^4.17.15" -"@storybook/node-logger@6.1.3": - version "6.1.3" - resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-6.1.3.tgz#e2fb5bbc81ef41f96d0d13b7fcf80dbc03d2b591" - integrity sha512-q/yU0xs+sDroxIoMvjmarbMJpPts03QKNtNBwCsMgtjjtfpGqs1RA8D7YyEp577tccNEihU3eyzIxJIcmP6sVA== +"@storybook/node-logger@6.1.11": + version "6.1.11" + resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-6.1.11.tgz#8e0d058b4804f2fea03c9d7d331b8e2d02f3b7ff" + integrity sha512-MASonXDWpSMU9HF9mqbGOR1Ps/DTJ8AVmYD50+OnB9kXl4M42Dliobeq7JwKFMnZ42RelUCCSXdWW80hGrUKKA== dependencies: "@types/npmlog" "^4.1.2" chalk "^4.0.0" @@ -3367,19 +3378,18 @@ npmlog "^4.1.2" pretty-hrtime "^1.0.3" -"@storybook/react@^6.1.3": - version "6.1.3" - resolved "https://registry.yarnpkg.com/@storybook/react/-/react-6.1.3.tgz#558311ea377719d30b118c51c6ad2b8a0efc8971" - integrity sha512-GjnQyIGiEpBXpapZWiOgXajW+9zCwp4aDL7ZesZOb1lsho8Ih2Y4wcvSc3m3Wa25SAIhkQo9ZAJcHuETQ1RYrA== +"@storybook/react@^6.1.11": + version "6.1.11" + resolved "https://registry.yarnpkg.com/@storybook/react/-/react-6.1.11.tgz#e94403cd878c66b445df993bad9bec9023db3ebe" + integrity sha512-EmR7yvVW6z6AYhfzAgJMGR/5+igeBGa1EePaEIibn51r5uboSB72N12NaADyF2OaycIdV+0sW6vP9Zvlvexa/w== dependencies: "@babel/preset-flow" "^7.12.1" "@babel/preset-react" "^7.12.1" "@pmmmwh/react-refresh-webpack-plugin" "^0.4.2" - "@storybook/addons" "6.1.3" - "@storybook/core" "6.1.3" - "@storybook/node-logger" "6.1.3" + "@storybook/addons" "6.1.11" + "@storybook/core" "6.1.11" + "@storybook/node-logger" "6.1.11" "@storybook/semver" "^7.3.2" - "@svgr/webpack" "^5.4.0" "@types/webpack-env" "^1.15.3" babel-plugin-add-react-displayname "^0.0.5" babel-plugin-named-asset-import "^0.3.1" @@ -3410,10 +3420,10 @@ qs "^6.6.0" util-deprecate "^1.0.2" -"@storybook/router@6.1.3": - version "6.1.3" - resolved "https://registry.yarnpkg.com/@storybook/router/-/router-6.1.3.tgz#299b957b06895072ed5bacdda6e43532fa638e03" - integrity sha512-OSH8qJorIxavha5euDIp7PCzQnRzRyIdE1Uj605yNDuCQigoijYjJjEI2VAvqdq1jxN5VY+CzmuAJfXWSUwAqA== +"@storybook/router@6.1.11": + version "6.1.11" + resolved "https://registry.yarnpkg.com/@storybook/router/-/router-6.1.11.tgz#d58e0c8324d8b16d71e09c017a4e3c844b1a4139" + integrity sha512-YEYOoKMo/WI13MZCkdqI9X3H1G0Oj5OUxi7So4qd3khX3zcCjSr3LjiMDBcmIVZpFo5VAvzjhIY4KqpgvzTG0A== dependencies: "@reach/router" "^1.3.3" "@types/reach__router" "^1.3.5" @@ -3430,13 +3440,13 @@ core-js "^3.6.5" find-up "^4.1.0" -"@storybook/source-loader@6.1.3", "@storybook/source-loader@^6.1.3": - version "6.1.3" - resolved "https://registry.yarnpkg.com/@storybook/source-loader/-/source-loader-6.1.3.tgz#f37a2691122a07b441c8c84470cff384249c576a" - integrity sha512-66VYzWktvKaxTDl2arPgQJz88DAsEPD5yEQWmimujHpL1sjspccbv4dtlVr5RFgAr4wuvkprEGhGsOKkqhqmfw== +"@storybook/source-loader@6.1.11", "@storybook/source-loader@^6.1.11": + version "6.1.11" + resolved "https://registry.yarnpkg.com/@storybook/source-loader/-/source-loader-6.1.11.tgz#26e0ba30d5b9d1828ed10ccb76eb38bf48aad304" + integrity sha512-pEMWGn3XwZYAXwIrtmd7ziH5d1zN8NCpJM8vNJssntZFW45rDo69xgGM/PrTLPDca6f/Mhv+vqzR99tdfarJSw== dependencies: - "@storybook/addons" "6.1.3" - "@storybook/client-logger" "6.1.3" + "@storybook/addons" "6.1.11" + "@storybook/client-logger" "6.1.11" "@storybook/csf" "0.0.1" core-js "^3.0.1" estraverse "^4.2.0" @@ -3465,15 +3475,15 @@ resolve-from "^5.0.0" ts-dedent "^1.1.0" -"@storybook/theming@6.1.3": - version "6.1.3" - resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-6.1.3.tgz#68b5fec3e8e60bbb2b1368e542023aa82fe8ea67" - integrity sha512-geshl3P0ZBhGIRsear/PXhmfribdAAl1W8bFD9Wiec8M+81SMOGGEan+RRHjnf6MngjWQqVagbPhmJnDbMLKYA== +"@storybook/theming@6.1.11": + version "6.1.11" + resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-6.1.11.tgz#0e757e0562aedefc96bd1d12714d4c8e92823467" + integrity sha512-zRChacVgKoU2BmpvwK1ntiF3KIpc8QblJT7IGiKfP/BNpy9gNeXbLPLk3g/tkHszOvVYtkaZhEXni4Od8tqy1A== dependencies: "@emotion/core" "^10.1.1" "@emotion/is-prop-valid" "^0.8.6" "@emotion/styled" "^10.0.23" - "@storybook/client-logger" "6.1.3" + "@storybook/client-logger" "6.1.11" core-js "^3.0.1" deep-object-diff "^1.1.0" emotion-theming "^10.0.19" @@ -3483,21 +3493,21 @@ resolve-from "^5.0.0" ts-dedent "^2.0.0" -"@storybook/ui@6.1.3": - version "6.1.3" - resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-6.1.3.tgz#4a6275cbe534b625d63bd1225689498fad6745d6" - integrity sha512-hV4eaDeu58ah7qkDzpk1eVvVsc+pgE3CmHwwHU/gBG2ob8Z2EkFH+tG1SOe/FQanm0ovqWBGUnX+iSaEr+Y4qA== +"@storybook/ui@6.1.11": + version "6.1.11" + resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-6.1.11.tgz#2e5a5df010f2bb75a09a0fd0439fc8e62f8c89e5" + integrity sha512-Qth2dxS5+VbKHcqgkiKpeD+xr/hRUuUIDUA/2Ierh/BaA8Up/krlso/mCLaQOa5E8Og9WJAdDFO0cUbt939c2Q== dependencies: "@emotion/core" "^10.1.1" - "@storybook/addons" "6.1.3" - "@storybook/api" "6.1.3" - "@storybook/channels" "6.1.3" - "@storybook/client-logger" "6.1.3" - "@storybook/components" "6.1.3" - "@storybook/core-events" "6.1.3" - "@storybook/router" "6.1.3" + "@storybook/addons" "6.1.11" + "@storybook/api" "6.1.11" + "@storybook/channels" "6.1.11" + "@storybook/client-logger" "6.1.11" + "@storybook/components" "6.1.11" + "@storybook/core-events" "6.1.11" + "@storybook/router" "6.1.11" "@storybook/semver" "^7.3.2" - "@storybook/theming" "6.1.3" + "@storybook/theming" "6.1.11" "@types/markdown-to-jsx" "^6.11.0" copy-to-clipboard "^3.0.8" core-js "^3.0.1" @@ -3581,7 +3591,7 @@ "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0" "@svgr/babel-plugin-transform-svg-component" "^5.5.0" -"@svgr/core@^5.4.0", "@svgr/core@^5.5.0": +"@svgr/core@^5.4.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579" integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ== @@ -3607,7 +3617,7 @@ "@svgr/hast-util-to-babel-ast" "^5.5.0" svg-parser "^2.0.2" -"@svgr/plugin-svgo@^5.4.0", "@svgr/plugin-svgo@^5.5.0": +"@svgr/plugin-svgo@^5.4.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246" integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ== @@ -3630,20 +3640,6 @@ "@svgr/plugin-svgo" "^5.4.0" loader-utils "^2.0.0" -"@svgr/webpack@^5.4.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.5.0.tgz#aae858ee579f5fa8ce6c3166ef56c6a1b381b640" - integrity sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g== - dependencies: - "@babel/core" "^7.12.3" - "@babel/plugin-transform-react-constant-elements" "^7.12.1" - "@babel/preset-env" "^7.12.1" - "@babel/preset-react" "^7.12.5" - "@svgr/core" "^5.5.0" - "@svgr/plugin-jsx" "^5.5.0" - "@svgr/plugin-svgo" "^5.5.0" - loader-utils "^2.0.0" - "@types/anymatch@*": version "1.3.1" resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" @@ -3681,9 +3677,9 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.15.tgz#db9e4238931eb69ef8aab0ad6523d4d4caa39d03" - integrity sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A== + version "7.11.0" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.0.tgz#b9a1efa635201ba9bc850323a8793ee2d36c04a0" + integrity sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg== dependencies: "@babel/types" "^7.3.0" @@ -3692,15 +3688,15 @@ resolved "https://registry.yarnpkg.com/@types/braces/-/braces-3.0.0.tgz#7da1c0d44ff1c7eb660a36ec078ea61ba7eb42cb" integrity sha512-TbH79tcyi9FHwbyboOKeRachRq63mSuWYXOflsNO9ZyE5ClQ/JaozNKl+aWUq87qPNsXasXxi2AbgfwIJ+8GQw== -"@types/chance@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@types/chance/-/chance-1.1.0.tgz#7d8e6bd0506344d94c042f692d59d20f8eb7d66d" - integrity sha512-j/9aaLU6JaaN2iFiSZgvD+G0nju1Fi2/f2WM+WwS+8+cpTdzFhXFH3+SHZgfjgum6wNW80sfcawUx+Rx7tH26w== +"@types/chance@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/chance/-/chance-1.1.1.tgz#2e06aeaf58130470f2dfe96017cdbc403de002f9" + integrity sha512-Ze94JMnM33+dj/tQCWxXWaQ80uYmV9HwydTyrbHAiBa91ETQuI+3iF5OFPicDpQx+md+/6rDpTp9I2VKOGOtpw== "@types/cheerio@*", "@types/cheerio@^0.22.22": - version "0.22.22" - resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.22.tgz#ae71cf4ca59b8bbaf34c99af7a5d6c8894988f5f" - integrity sha512-05DYX4zU96IBfZFY+t3Mh88nlwSMtmmzSYaQkKN48T495VV1dkHSah6qYyDTN5ngaS0i0VonH37m+RuzSM0YiA== + version "0.22.23" + resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.23.tgz#74bcfee9c5ee53f619711dca953a89fe5cfa4eb4" + integrity sha512-QfHLujVMlGqcS/ePSf3Oe5hK3H8wi/yN2JYuxSB1U10VvW1fO3K8C+mURQesFYS1Hn7lspOsTT75SKq/XtydQg== dependencies: "@types/node" "*" @@ -3713,9 +3709,9 @@ "@types/react" "*" "@types/eslint@^7.2.4": - version "7.2.5" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.5.tgz#92172ecf490c2fce4b076739693d75f30376d610" - integrity sha512-Dc6ar9x16BdaR3NSxSF7T4IjL9gxxViJq8RmFd+2UAyA+K6ck2W+gUwfgpG/y9TPyUuBL35109bbULpEynvltA== + version "7.2.6" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.6.tgz#5e9aff555a975596c03a98b59ecd103decc70c3c" + integrity sha512-I+1sYH+NPQ3/tVqCeUSBwTE/0heyvtXqpIopUUArlBm0Kpocb8FbMa3AZ/ASKIFpN3rnEx932TTXDbt9OXsNDw== dependencies: "@types/estree" "*" "@types/json-schema" "*" @@ -3807,10 +3803,10 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@26.x", "@types/jest@^26.0.15": - version "26.0.15" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.15.tgz#12e02c0372ad0548e07b9f4e19132b834cb1effe" - integrity sha512-s2VMReFXRg9XXxV+CW9e5Nz8fH2K1aEhwgjUqPPbQd7g95T0laAcvLv032EhFHIa5GHsZ8W7iJEQVaJq6k3Gog== +"@types/jest@26.x", "@types/jest@^26.0.19": + version "26.0.19" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.19.tgz#e6fa1e3def5842ec85045bd5210e9bb8289de790" + integrity sha512-jqHoirTG61fee6v6rwbnEuKhpSKih0tuhqeFbCmMmErhtu3BYlOZaXWjffgOstMM4S/3iQD31lI5bGLTrs97yQ== dependencies: jest-diff "^26.0.0" pretty-format "^26.0.0" @@ -3892,10 +3888,10 @@ "@types/node" "*" form-data "^3.0.0" -"@types/node@*", "@types/node@>= 8", "@types/node@^14.14.9": - version "14.14.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.9.tgz#04afc9a25c6ff93da14deabd65dc44485b53c8d6" - integrity sha512-JsoLXFppG62tWTklIoO4knA+oDTYsmqWxHRvd4lpmfQRNhX6osheUOWETP2jMoV/2bEHuMra8Pp3Dmo/stBFcw== +"@types/node@*", "@types/node@>= 8", "@types/node@^14.14.13": + version "14.14.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.13.tgz#9e425079799322113ae8477297ae6ef51b8e0cdf" + integrity sha512-vbxr0VZ8exFMMAjCW8rJwaya0dMCDyYW2ZRdTyjtrCvJoENMpdUHOT/eTzvgyA5ZnqRZ/sI0NwqAxNHKYokLJQ== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -3995,16 +3991,16 @@ "@types/webpack" "*" "@types/react-native@*": - version "0.63.36" - resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.63.36.tgz#649ca8fd2b0cda9e41b961e7501e33b71246e88d" - integrity sha512-mCWEiPgi55MkXXMuDe0VsOWO3C4hhj6mO/jnTvy0sXcRD6MbAmGwXnVe5+m1FRCuEQMaJwgG1ZNahZvvyvuGUA== + version "0.63.40" + resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.63.40.tgz#66b11824a6aadb0dde0db87bd8aff58165c7a8f8" + integrity sha512-y98TQBjfncIrdDrwIhxcmcad1gHKNfUKFnCBk3heYy0Gvt6BNcBeSKRvACV4cf6R1K/cNJMoS3rjaMvYhQyAgw== dependencies: "@types/react" "*" -"@types/react-redux@^7.1.9": - version "7.1.11" - resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.11.tgz#a18e8ab3651e8e8cc94798934927937c66021217" - integrity sha512-OjaFlmqy0CRbYKBoaWF84dub3impqnLJUrz4u8PRjDzaa4n1A2cVmjMV81shwXyAD5x767efhA8STFGJz/r1Zg== +"@types/react-redux@^7.1.12": + version "7.1.12" + resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.12.tgz#148f2c768687346b556e29a322ca44cfa28cc3ac" + integrity sha512-xZj4/8oRZP5RlJPlC5XPnawPtMn+T2bV4Hxi38AcuoZzXlN/Il/ZPfgXuIq3WG37wVL6FP7suVfmE4BopuqtTg== dependencies: "@types/hoist-non-react-statics" "^3.3.0" "@types/react" "*" @@ -4118,10 +4114,10 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== -"@types/styled-components@^5.1.4": - version "5.1.4" - resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.4.tgz#11f167dbde268635c66adc89b5a5db2e69d75384" - integrity sha512-78f5Zuy0v/LTQNOYfpH+CINHpchzMMmAt9amY2YNtSgsk1TmlKm8L2Wijss/mtTrsUAVTm2CdGB8VOM65vA8xg== +"@types/styled-components@^5.1.5": + version "5.1.5" + resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.5.tgz#a98e2ead1a1c7660b966f3aade4df9c0ec8ed75a" + integrity sha512-VWwoKm39W783a75oILtdCjnNn+FSV8Yh3O9naIudtZCAkk+rRfwLWzuPjf5k/OilENgZqAkxJ9sukSOZTAD86g== dependencies: "@types/hoist-non-react-statics" "*" "@types/react" "*" @@ -4163,14 +4159,14 @@ integrity sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ== "@types/webpack-env@^1.15.3": - version "1.15.3" - resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.15.3.tgz#fb602cd4c2f0b7c0fb857e922075fdf677d25d84" - integrity sha512-5oiXqR7kwDGZ6+gmzIO2lTC+QsriNuQXZDWNYRV3l2XRN/zmPgnC21DLSx2D05zvD8vnXW6qUg7JnXZ4I6qLVQ== + version "1.16.0" + resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.16.0.tgz#8c0a9435dfa7b3b1be76562f3070efb3f92637b4" + integrity sha512-Fx+NpfOO0CpeYX2g9bkvX8O5qh9wrU1sOF4g8sft4Mu7z+qfe387YlyY8w8daDyDsKY5vUxM0yxkAYnbkRbZEw== "@types/webpack-sources@*": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.0.0.tgz#08216ab9be2be2e1499beaebc4d469cec81e82a7" - integrity sha512-a5kPx98CNFRKQ+wqawroFunvFqv7GHm/3KOI52NY9xWADgc8smu4R6prt4EU/M4QfVjvgBkMqU4fBhw3QfMVkg== + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.1.0.tgz#8882b0bd62d1e0ce62f183d0d01b72e6e82e8c10" + integrity sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg== dependencies: "@types/node" "*" "@types/source-list-map" "*" @@ -4194,34 +4190,59 @@ integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== "@types/yargs@^15.0.0": - version "15.0.10" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.10.tgz#0fe3c8173a0d5c3e780b389050140c3f5ea6ea74" - integrity sha512-z8PNtlhrj7eJNLmrAivM7rjBESG6JwC5xP3RVk12i/8HVP7Xnx/sEmERnRImyEuUaJfO942X0qMOYsoupaJbZQ== + version "15.0.11" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.11.tgz#361d7579ecdac1527687bcebf9946621c12ab78c" + integrity sha512-jfcNBxHFYJ4nPIacsi3woz1+kvUO6s1CyeEhtnDHBjHUMNj5UlW2GynmnSgiJJEdNg9yW5C8lfoNRZrHGv5EqA== dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^4.5.0", "@typescript-eslint/eslint-plugin@^4.8.1": - version "4.8.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.8.1.tgz#b362abe0ee478a6c6d06c14552a6497f0b480769" - integrity sha512-d7LeQ7dbUrIv5YVFNzGgaW3IQKMmnmKFneRWagRlGYOSfLJVaRbj/FrBNOBC1a3tVO+TgNq1GbHvRtg1kwL0FQ== +"@typescript-eslint/eslint-plugin@^4.10.0": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.10.0.tgz#19ed3baf4bc4232c5a7fcd32eaca75c3a5baf9f3" + integrity sha512-h6/V46o6aXpKRlarP1AiJEXuCJ7cMQdlpfMDrcllIgX3dFkLwEBTXAoNP98ZoOmqd1xvymMVRAI4e7yVvlzWEg== + dependencies: + "@typescript-eslint/experimental-utils" "4.10.0" + "@typescript-eslint/scope-manager" "4.10.0" + debug "^4.1.1" + functional-red-black-tree "^1.0.1" + regexpp "^3.0.0" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/eslint-plugin@^4.5.0": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.9.1.tgz#66758cbe129b965fe9c63b04b405d0cf5280868b" + integrity sha512-QRLDSvIPeI1pz5tVuurD+cStNR4sle4avtHhxA+2uyixWGFjKzJ+EaFVRW6dA/jOgjV5DTAjOxboQkRDE8cRlQ== dependencies: - "@typescript-eslint/experimental-utils" "4.8.1" - "@typescript-eslint/scope-manager" "4.8.1" + "@typescript-eslint/experimental-utils" "4.9.1" + "@typescript-eslint/scope-manager" "4.9.1" debug "^4.1.1" functional-red-black-tree "^1.0.1" regexpp "^3.0.0" semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@4.8.1", "@typescript-eslint/experimental-utils@^4.0.1": - version "4.8.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.8.1.tgz#27275c20fa4336df99ebcf6195f7d7aa7aa9f22d" - integrity sha512-WigyLn144R3+lGATXW4nNcDJ9JlTkG8YdBWHkDlN0lC3gUGtDi7Pe3h5GPvFKMcRz8KbZpm9FJV9NTW8CpRHpg== +"@typescript-eslint/experimental-utils@4.10.0": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.10.0.tgz#dbf5d0f89802d5feaf7d11e5b32df29bbc2f3a0e" + integrity sha512-opX+7ai1sdWBOIoBgpVJrH5e89ra1KoLrJTz0UtWAa4IekkKmqDosk5r6xqRaNJfCXEfteW4HXQAwMdx+jjEmw== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/scope-manager" "4.8.1" - "@typescript-eslint/types" "4.8.1" - "@typescript-eslint/typescript-estree" "4.8.1" + "@typescript-eslint/scope-manager" "4.10.0" + "@typescript-eslint/types" "4.10.0" + "@typescript-eslint/typescript-estree" "4.10.0" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/experimental-utils@4.9.1", "@typescript-eslint/experimental-utils@^4.0.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.9.1.tgz#86633e8395191d65786a808dc3df030a55267ae2" + integrity sha512-c3k/xJqk0exLFs+cWSJxIjqLYwdHCuLWhnpnikmPQD2+NGAx9KjLYlBDcSI81EArh9FDYSL6dslAUSwILeWOxg== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/scope-manager" "4.9.1" + "@typescript-eslint/types" "4.9.1" + "@typescript-eslint/typescript-estree" "4.9.1" eslint-scope "^5.0.0" eslint-utils "^2.0.0" @@ -4236,33 +4257,56 @@ eslint-scope "^5.0.0" eslint-utils "^2.0.0" -"@typescript-eslint/parser@^4.5.0", "@typescript-eslint/parser@^4.8.1": - version "4.8.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.8.1.tgz#4fe2fbdbb67485bafc4320b3ae91e34efe1219d1" - integrity sha512-QND8XSVetATHK9y2Ltc/XBl5Ro7Y62YuZKnPEwnNPB8E379fDsvzJ1dMJ46fg/VOmk0hXhatc+GXs5MaXuL5Uw== +"@typescript-eslint/parser@^4.10.0": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.10.0.tgz#1a622b0847b765b2d8f0ede6f0cdd85f03d76031" + integrity sha512-amBvUUGBMadzCW6c/qaZmfr3t9PyevcSWw7hY2FuevdZVp5QPw/K76VSQ5Sw3BxlgYCHZcK6DjIhSZK0PQNsQg== + dependencies: + "@typescript-eslint/scope-manager" "4.10.0" + "@typescript-eslint/types" "4.10.0" + "@typescript-eslint/typescript-estree" "4.10.0" + debug "^4.1.1" + +"@typescript-eslint/parser@^4.5.0": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.9.1.tgz#2d74c4db5dd5117379a9659081a4d1ec02629055" + integrity sha512-Gv2VpqiomvQ2v4UL+dXlQcZ8zCX4eTkoIW+1aGVWT6yTO+6jbxsw7yQl2z2pPl/4B9qa5JXeIbhJpONKjXIy3g== dependencies: - "@typescript-eslint/scope-manager" "4.8.1" - "@typescript-eslint/types" "4.8.1" - "@typescript-eslint/typescript-estree" "4.8.1" + "@typescript-eslint/scope-manager" "4.9.1" + "@typescript-eslint/types" "4.9.1" + "@typescript-eslint/typescript-estree" "4.9.1" debug "^4.1.1" -"@typescript-eslint/scope-manager@4.8.1": - version "4.8.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.8.1.tgz#e343c475f8f1d15801b546cb17d7f309b768fdce" - integrity sha512-r0iUOc41KFFbZdPAdCS4K1mXivnSZqXS5D9oW+iykQsRlTbQRfuFRSW20xKDdYiaCoH+SkSLeIF484g3kWzwOQ== +"@typescript-eslint/scope-manager@4.10.0": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.10.0.tgz#dbd7e1fc63d7363e3aaff742a6f2b8afdbac9d27" + integrity sha512-WAPVw35P+fcnOa8DEic0tQUhoJJsgt+g6DEcz257G7vHFMwmag58EfowdVbiNcdfcV27EFR0tUBVXkDoIvfisQ== + dependencies: + "@typescript-eslint/types" "4.10.0" + "@typescript-eslint/visitor-keys" "4.10.0" + +"@typescript-eslint/scope-manager@4.9.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.9.1.tgz#cc2fde310b3f3deafe8436a924e784eaab265103" + integrity sha512-sa4L9yUfD/1sg9Kl8OxPxvpUcqxKXRjBeZxBuZSSV1v13hjfEJkn84n0An2hN8oLQ1PmEl2uA6FkI07idXeFgQ== dependencies: - "@typescript-eslint/types" "4.8.1" - "@typescript-eslint/visitor-keys" "4.8.1" + "@typescript-eslint/types" "4.9.1" + "@typescript-eslint/visitor-keys" "4.9.1" "@typescript-eslint/types@3.10.1": version "3.10.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727" integrity sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ== -"@typescript-eslint/types@4.8.1": - version "4.8.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.8.1.tgz#23829c73c5fc6f4fcd5346a7780b274f72fee222" - integrity sha512-ave2a18x2Y25q5K05K/U3JQIe2Av4+TNi/2YuzyaXLAsDx6UZkz1boZ7nR/N6Wwae2PpudTZmHFXqu7faXfHmA== +"@typescript-eslint/types@4.10.0": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.10.0.tgz#12f983750ebad867f0c806e705c1953cd6415789" + integrity sha512-+dt5w1+Lqyd7wIPMa4XhJxUuE8+YF+vxQ6zxHyhLGHJjHiunPf0wSV8LtQwkpmAsRi1lEOoOIR30FG5S2HS33g== + +"@typescript-eslint/types@4.9.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.9.1.tgz#a1a7dd80e4e5ac2c593bc458d75dd1edaf77faa2" + integrity sha512-fjkT+tXR13ks6Le7JiEdagnwEFc49IkOyys7ueWQ4O8k4quKPwPJudrwlVOJCUQhXo45PrfIvIarcrEjFTNwUA== "@typescript-eslint/typescript-estree@3.10.1": version "3.10.1" @@ -4278,13 +4322,27 @@ semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/typescript-estree@4.8.1": - version "4.8.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.8.1.tgz#7307e3f2c9e95df7daa8dc0a34b8c43b7ec0dd32" - integrity sha512-bJ6Fn/6tW2g7WIkCWh3QRlaSU7CdUUK52shx36/J7T5oTQzANvi6raoTsbwGM11+7eBbeem8hCCKbyvAc0X3sQ== +"@typescript-eslint/typescript-estree@4.10.0": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.10.0.tgz#1e62e45fd57866afd42daf5e9fb6bd4e8dbcfa75" + integrity sha512-mGK0YRp9TOk6ZqZ98F++bW6X5kMTzCRROJkGXH62d2azhghmq+1LNLylkGe6uGUOQzD452NOAEth5VAF6PDo5g== dependencies: - "@typescript-eslint/types" "4.8.1" - "@typescript-eslint/visitor-keys" "4.8.1" + "@typescript-eslint/types" "4.10.0" + "@typescript-eslint/visitor-keys" "4.10.0" + debug "^4.1.1" + globby "^11.0.1" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/typescript-estree@4.9.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.9.1.tgz#6e5b86ff5a5f66809e1f347469fadeec69ac50bf" + integrity sha512-bzP8vqwX6Vgmvs81bPtCkLtM/Skh36NE6unu6tsDeU/ZFoYthlTXbBmpIrvosgiDKlWTfb2ZpPELHH89aQjeQw== + dependencies: + "@typescript-eslint/types" "4.9.1" + "@typescript-eslint/visitor-keys" "4.9.1" debug "^4.1.1" globby "^11.0.1" is-glob "^4.0.1" @@ -4299,12 +4357,20 @@ dependencies: eslint-visitor-keys "^1.1.0" -"@typescript-eslint/visitor-keys@4.8.1": - version "4.8.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.8.1.tgz#794f68ee292d1b2e3aa9690ebedfcb3a8c90e3c3" - integrity sha512-3nrwXFdEYALQh/zW8rFwP4QltqsanCDz4CwWMPiIZmwlk9GlvBeueEIbq05SEq4ganqM0g9nh02xXgv5XI3PeQ== +"@typescript-eslint/visitor-keys@4.10.0": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.10.0.tgz#9478822329a9bc8ebcc80623d7f79a01da5ee451" + integrity sha512-hPyz5qmDMuZWFtHZkjcCpkAKHX8vdu1G3YsCLEd25ryZgnJfj6FQuJ5/O7R+dB1ueszilJmAFMtlU4CA6se3Jg== dependencies: - "@typescript-eslint/types" "4.8.1" + "@typescript-eslint/types" "4.10.0" + eslint-visitor-keys "^2.0.0" + +"@typescript-eslint/visitor-keys@4.9.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.9.1.tgz#d76374a58c4ead9e92b454d186fea63487b25ae1" + integrity sha512-9gspzc6UqLQHd7lXQS7oWs+hrYggspv/rk6zzEMhCbYwPE/sF7oxo7GAjkS35Tdlt7wguIG+ViWCPtVZHz/ybQ== + dependencies: + "@typescript-eslint/types" "4.9.1" eslint-visitor-keys "^2.0.0" "@webassemblyjs/ast@1.9.0": @@ -4452,6 +4518,18 @@ "@webassemblyjs/wast-parser" "1.9.0" "@xtuc/long" "4.2.2" +"@webpack-cli/info@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.1.0.tgz#c596d5bc48418b39df00c5ed7341bf0f102dbff1" + integrity sha512-uNWSdaYHc+f3LdIZNwhdhkjjLDDl3jP2+XBqAq9H8DjrJUvlOKdP8TNruy1yEaDfgpAIgbSAN7pye4FEHg9tYQ== + dependencies: + envinfo "^7.7.3" + +"@webpack-cli/serve@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.1.0.tgz#13ad38f89b6e53d1133bac0006a128217a6ebf92" + integrity sha512-7RfnMXCpJ/NThrhq4gYQYILB18xWyoQcBey81oIyVbmgbc6m5ZHHyFK+DyH7pLHJf0p14MxL4mTsoPAgBSTpIg== + "@webpack-contrib/schema-utils@^1.0.0-beta.0": version "1.0.0-beta.0" resolved "https://registry.yarnpkg.com/@webpack-contrib/schema-utils/-/schema-utils-1.0.0-beta.0.tgz#bf9638c9464d177b48209e84209e23bee2eb4f65" @@ -4517,7 +4595,7 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" -acorn-jsx@^5.2.0: +acorn-jsx@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== @@ -4527,6 +4605,11 @@ acorn-walk@^7.1.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== +acorn-walk@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.0.0.tgz#56ae4c0f434a45fff4a125e7ea95fa9c98f67a16" + integrity sha512-oZRad/3SMOI/pxbbmqyurIx7jHw1wZDcR9G44L8pUVFEomX/0dH89SrM1KaDXuv1NpzAXz6Op/Xu/Qd5XXzdEA== + acorn@^6.4.1: version "6.4.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" @@ -4537,6 +4620,11 @@ acorn@^7.1.0, acorn@^7.1.1, acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.0.4: + version "8.0.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.0.4.tgz#7a3ae4191466a6984eee0fe3407a4f3aa9db8354" + integrity sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ== + add-px-to-style@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/add-px-to-style/-/add-px-to-style-1.0.0.tgz#d0c135441fa8014a8137904531096f67f28f263a" @@ -4816,6 +4904,11 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= +array-back@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.1.tgz#9b80312935a52062e1a233a9c7abeb5481b30e90" + integrity sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg== + array-differ@^2.0.3: version "2.1.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-2.1.0.tgz#4b9c1c3f14b906757082925769e8ab904f4801b1" @@ -4847,12 +4940,14 @@ array-ify@^1.0.0: integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= array-includes@^3.0.3, array-includes@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" - integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== + version "3.1.2" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.2.tgz#a8db03e0b88c8c6aeddc49cb132f9bcab4ebf9c8" + integrity sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.0" + es-abstract "^1.18.0-next.1" + get-intrinsic "^1.0.1" is-string "^1.0.5" array-union@^1.0.1, array-union@^1.0.2: @@ -5034,16 +5129,16 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -autoprefixer@^10.0.1: - version "10.0.2" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.0.2.tgz#a79f9a02bfb95c621998776ac0d85f8f855b367e" - integrity sha512-okBmu9OMdt6DNEcZmnl0IYVv8Xl/xYWRSnc2OJ9UJEOt1u30opG1B8aLsViqKryBaYv1SKB4f85fOGZs5zYxHQ== +autoprefixer@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.1.0.tgz#b19fd8524edef8c85c9db3bdb0c998de84e172fb" + integrity sha512-0/lBNwN+ZUnb5su18NZo5MBIjDaq6boQKZcxwy86Gip/CmXA2zZqUoFQLCNAGI5P25ZWSP2RWdhDJ8osfKEjoQ== dependencies: - browserslist "^4.14.7" - caniuse-lite "^1.0.30001157" + browserslist "^4.15.0" + caniuse-lite "^1.0.30001165" colorette "^1.2.1" + fraction.js "^4.0.12" normalize-range "^0.1.2" - num2fraction "^1.2.2" postcss-value-parser "^4.1.0" autoprefixer@^9.6.1, autoprefixer@^9.7.2: @@ -5066,20 +5161,6 @@ autosuggest-highlight@^3.1.1: dependencies: diacritic "0.0.2" -awesome-typescript-loader@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/awesome-typescript-loader/-/awesome-typescript-loader-5.2.1.tgz#a41daf7847515f4925cdbaa3075d61f289e913fc" - integrity sha512-slv66OAJB8orL+UUaTI3pKlLorwIvS4ARZzYR9iJJyGsEgOqueMfOMdKySWzZ73vIkEe3fcwFgsKMg4d8zyb1g== - dependencies: - chalk "^2.4.1" - enhanced-resolve "^4.0.0" - loader-utils "^1.1.0" - lodash "^4.17.5" - micromatch "^3.1.9" - mkdirp "^0.5.1" - source-map-support "^0.5.3" - webpack-log "^1.2.0" - aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -5195,15 +5276,14 @@ babel-loader@8.1.0: pify "^4.0.1" schema-utils "^2.6.5" -babel-loader@^8.0.6: - version "8.2.1" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.1.tgz#e53313254677e86f27536f5071d807e01d24ec00" - integrity sha512-dMF8sb2KQ8kJl21GUjkW1HWmcsL39GOV5vnzjqrCzEPNY0S0UfMLnumidiwIajDSBmKhYf5iRW+HXaM4cvCKBw== +babel-loader@^8.0.6, babel-loader@^8.2.2: + version "8.2.2" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" + integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g== dependencies: - find-cache-dir "^2.1.0" + find-cache-dir "^3.3.1" loader-utils "^1.4.0" - make-dir "^2.1.0" - pify "^4.0.1" + make-dir "^3.1.0" schema-utils "^2.6.5" babel-plugin-add-react-displayname@^0.0.5: @@ -5592,16 +5672,6 @@ better-opn@^2.0.0: dependencies: open "^7.0.3" -bfj@^6.1.1: - version "6.1.2" - resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.2.tgz#325c861a822bcb358a41c78a33b8e6e2086dde7f" - integrity sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw== - dependencies: - bluebird "^3.5.5" - check-types "^8.0.3" - hoopy "^0.1.4" - tryer "^1.0.1" - bfj@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/bfj/-/bfj-7.0.2.tgz#1988ce76f3add9ac2913fd8ba47aad9e651bfbb2" @@ -5823,16 +5893,16 @@ browserslist@4.14.2: escalade "^3.0.2" node-releases "^1.1.61" -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.14.6, browserslist@^4.14.7, browserslist@^4.6.2, browserslist@^4.6.4: - version "4.14.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.7.tgz#c071c1b3622c1c2e790799a37bb09473a4351cb6" - integrity sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ== +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.15.0, browserslist@^4.6.2, browserslist@^4.6.4: + version "4.16.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.0.tgz#410277627500be3cb28a1bfe037586fbedf9488b" + integrity sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ== dependencies: - caniuse-lite "^1.0.30001157" + caniuse-lite "^1.0.30001165" colorette "^1.2.1" - electron-to-chromium "^1.3.591" + electron-to-chromium "^1.3.621" escalade "^3.1.1" - node-releases "^1.1.66" + node-releases "^1.1.67" bs-logger@0.x: version "0.2.6" @@ -6024,12 +6094,12 @@ callsites@^3.0.0: integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camel-case@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.1.tgz#1fc41c854f00e2f7d0139dfeba1542d6896fe547" - integrity sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q== + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== dependencies: - pascal-case "^3.1.1" - tslib "^1.10.0" + pascal-case "^3.1.2" + tslib "^2.0.3" camelcase-keys@^2.0.0: version "2.1.0" @@ -6097,10 +6167,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001157: - version "1.0.30001159" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001159.tgz#bebde28f893fa9594dadcaa7d6b8e2aa0299df20" - integrity sha512-w9Ph56jOsS8RL20K9cLND3u/+5WASWdhC/PPrf+V3/HsM3uHOavWOR1Xzakbv4Puo/srmPHudkmCRWM7Aq+/UA== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001165: + version "1.0.30001166" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001166.tgz#ca73e8747acfd16a4fd6c4b784f1b995f9698cf8" + integrity sha512-nCL4LzYK7F4mL0TjEMeYavafOGnBa98vTudH5c8lW9izUjnB99InG6pmC1ElAI1p0GlyZajv4ltUdFXvOHIl1A== capture-exit@^2.0.0: version "2.0.0" @@ -6195,11 +6265,6 @@ check-types@^11.1.1: resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.1.2.tgz#86a7c12bf5539f6324eb0e70ca8896c0e38f3e2f" integrity sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ== -check-types@^8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552" - integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ== - cheerio@^1.0.0-rc.3: version "1.0.0-rc.3" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6" @@ -6231,7 +6296,7 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chokidar@^3.3.0, chokidar@^3.4.1: +chokidar@^3.3.0, chokidar@^3.4.1, chokidar@^3.4.2: version "3.4.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== @@ -6531,7 +6596,17 @@ comma-separated-tokens@^1.0.0: resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== -commander@^2.18.0, commander@^2.19.0, commander@^2.20.0: +command-line-usage@^6.1.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.1.tgz#c908e28686108917758a49f45efb4f02f76bc03f" + integrity sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA== + dependencies: + array-back "^4.0.1" + chalk "^2.4.2" + table-layout "^1.0.1" + typical "^5.2.0" + +commander@^2.19.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -6547,9 +6622,9 @@ commander@^5.0.0, commander@^5.1.0: integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== commander@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.0.tgz#b990bfb8ac030aedc6d11bc04d1488ffef56db75" - integrity sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q== + version "6.2.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" + integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== comment-parser@^0.7.6: version "0.7.6" @@ -6631,7 +6706,7 @@ compression@^1.7.4: safe-buffer "5.1.2" vary "~1.1.2" -compute-scroll-into-view@^1.0.14: +compute-scroll-into-view@^1.0.16: version "1.0.16" resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.16.tgz#5b7bf4f7127ea2c19b750353d7ce6776a90ee088" integrity sha512-a85LHKY81oQnikatZYA90pufpZ6sQx++BoCxOEMsjpZx+ZnaKGQnCyCehTRr/1p9GBIAHTjcU9k71kSYWloLiQ== @@ -6854,9 +6929,9 @@ copy-to-clipboard@^3.0.8: toggle-selection "^1.0.6" copy-webpack-plugin@^6.2.1: - version "6.3.2" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-6.3.2.tgz#0e920a6c181a5052aa6e2861b164bda03f83afeb" - integrity sha512-MgJ1uouLIbDg4ST1GzqrGQyKoXY5iPqi6fghFqarijam7FQcBa/r6Rg0VkoIuzx75Xq8iAMghyOueMkWUQ5OaA== + version "6.4.0" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-6.4.0.tgz#7fd397af78e0d310dbf6575d1a0f2fe10efd4d59" + integrity sha512-p4eIA0ZWk4UI+xewyxOBTDCSDfjK6nCkr3zhDenoi7SFd+NgDNH/D14IZeFaCEFcK/psNDcAUMOB+sAxZ3SsAA== dependencies: cacache "^15.0.5" fast-glob "^3.2.4" @@ -6870,18 +6945,18 @@ copy-webpack-plugin@^6.2.1: serialize-javascript "^5.0.1" webpack-sources "^1.4.3" -core-js-compat@^3.6.2, core-js-compat@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.7.0.tgz#8479c5d3d672d83f1f5ab94cf353e57113e065ed" - integrity sha512-V8yBI3+ZLDVomoWICO6kq/CD28Y4r1M7CWeO4AGpMdMfseu8bkSubBmUPySMGKRTS+su4XQ07zUkAsiu9FCWTg== +core-js-compat@^3.6.2, core-js-compat@^3.8.0: + version "3.8.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.1.tgz#8d1ddd341d660ba6194cbe0ce60f4c794c87a36e" + integrity sha512-a16TLmy9NVD1rkjUGbwuyWkiDoN0FDpAwrfLONvHFQx0D9k7J9y0srwMT8QP/Z6HE3MIFaVynEeYwZwPX1o5RQ== dependencies: - browserslist "^4.14.6" + browserslist "^4.15.0" semver "7.0.0" core-js-pure@^3.0.0, core-js-pure@^3.0.1: - version "3.7.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.7.0.tgz#28a57c861d5698e053f0ff36905f7a3301b4191e" - integrity sha512-EZD2ckZysv8MMt4J6HSvS9K2GdtlZtdBncKAmF9lr2n0c9dJUaUN88PSTjvgwCgQPWKTkERXITgS6JJRAnljtg== + version "3.8.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.8.1.tgz#23f84048f366fdfcf52d3fd1c68fec349177d119" + integrity sha512-Se+LaxqXlVXGvmexKGPvnUIYC1jwXu1H6Pkyb3uBM5d8/NELMYCHs/4/roD7721NxrTLyv7e5nXd5/QLBO+10g== core-js@^1.0.0: version "1.2.7" @@ -6889,14 +6964,14 @@ core-js@^1.0.0: integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= core-js@^2.4.0, core-js@^2.6.4: - version "2.6.11" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" - integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== core-js@^3.0.1, core-js@^3.0.4, core-js@^3.1.4, core-js@^3.6.4, core-js@^3.6.5: - version "3.7.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.7.0.tgz#b0a761a02488577afbf97179e4681bf49568520f" - integrity sha512-NwS7fI5M5B85EwpWuIwJN4i/fbisQUwLwiSNUWeXlkAZ0sbBjLEvLvFLf1uzAUV66PcEPt4xCGCmOZSxVf3xzA== + version "3.8.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.8.1.tgz#f51523668ac8a294d1285c3b9db44025fda66d47" + integrity sha512-9Id2xHY1W7m8hCl8NkhQn5CufmF/WuR30BTRewvCXc1aZd3kMECwNZ69ndLbekKfakw9Rf2Xyc+QR6E7Gg+obg== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -7007,10 +7082,10 @@ create-react-context@0.3.0, create-react-context@^0.3.0: gud "^1.0.0" warning "^4.0.3" -cross-env@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.2.tgz#bd5ed31339a93a3418ac4f3ca9ca3403082ae5f9" - integrity sha512-KZP/bMEOJEDCkDQAyRhu3RL2ZO/SUVrxQVI0G3YEQ+OLbRA3c6zgixe8Mq8a/z7+HKlNEjo8oiLUs8iRijY2Rw== +cross-env@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" + integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== dependencies: cross-spawn "^7.0.1" @@ -7032,7 +7107,7 @@ cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" -cross-spawn@^6.0.0, cross-spawn@^6.0.5: +cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -7212,10 +7287,10 @@ css-tree@1.0.0-alpha.37: mdn-data "2.0.4" source-map "^0.6.1" -css-tree@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.1.tgz#30b8c0161d9fb4e9e2141d762589b6ec2faebd2e" - integrity sha512-NVN42M2fjszcUNpDbdkvutgQSlFYsr1z7kqeuCagHnNLBfYor6uP1WL1KrkmdYZ5Y1vTBCIOI/C/+8T98fJ71w== +css-tree@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.2.tgz#9ae393b5dafd7dae8a622475caec78d3d8fbd7b5" + integrity sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ== dependencies: mdn-data "2.0.14" source-map "^0.6.1" @@ -7332,11 +7407,11 @@ cssnano@^4.1.10: postcss "^7.0.0" csso@^4.0.2: - version "4.1.1" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.1.1.tgz#e0cb02d6eb3af1df719222048e4359efd662af13" - integrity sha512-Rvq+e1e0TFB8E8X+8MQjHSY6vtol45s5gxtLI/018UsAn2IBMmwNEZRM/h+HVnAJRHjasLIKKUO3uvoMM28LvA== + version "4.2.0" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== dependencies: - css-tree "^1.0.0" + css-tree "^1.1.2" cssom@^0.4.4: version "0.4.4" @@ -7389,10 +7464,10 @@ cypress-xpath@^1.4.0: resolved "https://registry.yarnpkg.com/cypress-xpath/-/cypress-xpath-1.6.1.tgz#31b8ba3a9544b485f8d520d279a397e27748a2ef" integrity sha512-o0SZlCscap8RkYZ1yOp+exse8RFO9x37rGOQ8qsAxR5/juJ10P522FG3v6kwzM7I15Ur7m5+sHs3yF41g7QeeQ== -cypress@^5.4.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-5.6.0.tgz#6781755c3ddfd644ce3179fcd7389176c0c82280" - integrity sha512-cs5vG3E2JLldAc16+5yQxaVRLLqMVya5RlrfPWkC72S5xrlHFdw7ovxPb61s4wYweROKTyH01WQc2PFzwwVvyQ== +cypress@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-6.1.0.tgz#af2596cb110aa98eaf75fef3d8ab379ca0ff2413" + integrity sha512-uQnSxRcZ6hkf9R5cr8KpRBTzN88QZwLIImbf5DWa5RIxH6o5Gpff58EcjiYhAR8/8p9SGv7O6SRygq4H+k0Qpw== dependencies: "@cypress/listr-verbose-renderer" "^0.4.1" "@cypress/request" "^2.88.5" @@ -7571,6 +7646,11 @@ deep-equal@^1.0.1, deep-equal@^1.1.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" +deep-extend@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -7856,12 +7936,12 @@ dom-serializer@0: entities "^2.0.0" dom-serializer@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.1.0.tgz#5f7c828f1bfc44887dc2a315ab5c45691d544b58" - integrity sha512-ox7bvGXt2n+uLWtCRLybYx60IrOlWL/aCebWJk1T0d4m3y2tzf4U3ij9wBMUb6YJZpz06HCCYuyCDveE2xXmzQ== + version "1.2.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.2.0.tgz#3433d9136aeb3c627981daa385fc7f32d27c48f1" + integrity sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA== dependencies: domelementtype "^2.0.1" - domhandler "^3.0.0" + domhandler "^4.0.0" entities "^2.0.0" dom-serializer@~0.1.1: @@ -7887,10 +7967,10 @@ domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== -domelementtype@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.2.tgz#f3b6e549201e46f588b59463dd77187131fe6971" - integrity sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA== +domelementtype@^2.0.1, domelementtype@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.1.0.tgz#a851c080a6d1c3d94344aed151d99f669edf585e" + integrity sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w== domexception@^2.0.1: version "2.0.1" @@ -7906,13 +7986,20 @@ domhandler@^2.3.0: dependencies: domelementtype "1" -domhandler@^3.0.0, domhandler@^3.3.0: +domhandler@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== dependencies: domelementtype "^2.0.1" +domhandler@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.0.0.tgz#01ea7821de996d85f69029e81fa873c21833098e" + integrity sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA== + dependencies: + domelementtype "^2.1.0" + domutils@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" @@ -7930,21 +8017,21 @@ domutils@^1.5.1, domutils@^1.7.0: domelementtype "1" domutils@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.4.2.tgz#7ee5be261944e1ad487d9aa0616720010123922b" - integrity sha512-NKbgaM8ZJOecTZsIzW5gSuplsX2IWW2mIK7xVr8hTQF2v1CJWTmLZ1HOCh5sH+IzVPAGE5IucooOkvwBRAdowA== + version "2.4.4" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.4.4.tgz#282739c4b150d022d34699797369aad8d19bbbd3" + integrity sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA== dependencies: dom-serializer "^1.0.1" domelementtype "^2.0.1" - domhandler "^3.3.0" + domhandler "^4.0.0" -dot-case@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.3.tgz#21d3b52efaaba2ea5fda875bb1aa8124521cf4aa" - integrity sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA== +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== dependencies: - no-case "^3.0.3" - tslib "^1.10.0" + no-case "^3.0.4" + tslib "^2.0.3" dot-prop@^4.2.0: version "4.2.1" @@ -7990,16 +8077,16 @@ dotenv@^6.2.0: integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w== downshift@^6.0.6: - version "6.0.6" - resolved "https://registry.yarnpkg.com/downshift/-/downshift-6.0.6.tgz#82aee8e2e260d7ad99df8a0969bd002dd523abe8" - integrity sha512-tmLab3cXCn6PtZYl9V8r/nB2m+7/nCNrwo0B3kTHo/2lRBHr+1en1VNOQt2wIt0ajanAnxquZ00WPCyxe6cNFQ== + version "6.0.7" + resolved "https://registry.yarnpkg.com/downshift/-/downshift-6.0.7.tgz#05ef58b991e4467cdb8cd36e7a87a011d0bada5c" + integrity sha512-+rqgx3JTSs8b4V9q++hsLvaP8mhMOdX7u+jy5S2etg7+Y7uFLVzZaI0S7Xo2yEnNDmTcNnYZZ/vFjdWuJ2kZdg== dependencies: - "@babel/runtime" "^7.11.2" - compute-scroll-into-view "^1.0.14" + "@babel/runtime" "^7.12.5" + compute-scroll-into-view "^1.0.16" prop-types "^15.7.2" - react-is "^16.13.1" + react-is "^17.0.1" -duplexer@^0.1.1, duplexer@~0.1.1: +duplexer@^0.1.1, duplexer@^0.1.2, duplexer@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== @@ -8039,10 +8126,10 @@ ejs@^3.1.2: dependencies: jake "^10.6.1" -electron-to-chromium@^1.3.378, electron-to-chromium@^1.3.564, electron-to-chromium@^1.3.591: - version "1.3.603" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.603.tgz#1b71bec27fb940eccd79245f6824c63d5f7e8abf" - integrity sha512-J8OHxOeJkoSLgBXfV9BHgKccgfLMHh+CoeRo6wJsi6m0k3otaxS/5vrHpMNSEYY4MISwewqanPOuhAtuE8riQQ== +electron-to-chromium@^1.3.378, electron-to-chromium@^1.3.564, electron-to-chromium@^1.3.621: + version "1.3.625" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.625.tgz#a7bd18da4dc732c180b2e95e0e296c0bf22f3bd6" + integrity sha512-CsLk/r0C9dAzVPa9QF74HIXduxaucsaRfqiOYvIv2PRhvyC6EOqc/KbpgToQuDVgPf3sNAFZi3iBu4vpGOwGag== elegant-spinner@^1.0.1: version "1.0.1" @@ -8136,7 +8223,7 @@ endent@^2.0.1: fast-json-parse "^1.0.3" objectorarray "^1.0.4" -enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.1, enhanced-resolve@^4.3.0: +enhanced-resolve@^4.0.0, enhanced-resolve@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== @@ -8167,7 +8254,7 @@ env-paths@^2.2.0: resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== -envinfo@^7.3.1: +envinfo@^7.3.1, envinfo@^7.7.3: version "7.7.3" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.7.3.tgz#4b2d8622e3e7366afb8091b23ed95569ea0208cc" integrity sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA== @@ -8188,14 +8275,15 @@ enzyme-adapter-react-16@^1.15.5: semver "^5.7.0" enzyme-adapter-utils@^1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.13.1.tgz#59c1b734b0927543e3d8dc477299ec957feb312d" - integrity sha512-5A9MXXgmh/Tkvee3bL/9RCAAgleHqFnsurTYCbymecO4ohvtNO5zqIhHxV370t7nJAwaCfkgtffarKpC0GPt0g== + version "1.14.0" + resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.14.0.tgz#afbb0485e8033aa50c744efb5f5711e64fbf1ad0" + integrity sha512-F/z/7SeLt+reKFcb7597IThpDp0bmzcH1E9Oabqv+o01cID2/YInlqHbFl7HzWBl4h3OdZYedtwNDOmSKkk0bg== dependencies: airbnb-prop-types "^2.16.0" - function.prototype.name "^1.1.2" - object.assign "^4.1.0" - object.fromentries "^2.0.2" + function.prototype.name "^1.1.3" + has "^1.0.3" + object.assign "^4.1.2" + object.fromentries "^2.0.3" prop-types "^15.7.2" semver "^5.7.1" @@ -8270,7 +8358,7 @@ error-stack-parser@^2.0.6: dependencies: stackframe "^1.1.1" -es-abstract@^1.17.0, es-abstract@^1.17.0-next.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.4, es-abstract@^1.17.5: +es-abstract@^1.17.0-next.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.4: version "1.17.7" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" integrity sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g== @@ -8413,12 +8501,10 @@ escodegen@^1.14.1: optionalDependencies: source-map "~0.6.1" -eslint-config-prettier@^6.14.0: - version "6.15.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz#7f93f6cb7d45a92f1537a70ecc06366e1ac6fed9" - integrity sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw== - dependencies: - get-stdin "^6.0.0" +eslint-config-prettier@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-7.0.0.tgz#c1ae4106f74e6c0357f44adb076771d032ac0e97" + integrity sha512-8Y8lGLVPPZdaNA7JXqnvETVC7IiVRgAP6afQu9gOQRn90YY3otMNh+x7Vr2vMePQntF+5erdSUBqSzCmU/AxaQ== eslint-config-react-app@^6.0.0: version "6.0.0" @@ -8514,10 +8600,10 @@ eslint-plugin-jsx-a11y@6.4.1, eslint-plugin-jsx-a11y@^6.3.1: jsx-ast-utils "^3.1.0" language-tags "^1.0.5" -eslint-plugin-prettier@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz#168ab43154e2ea57db992a2cd097c828171f75c2" - integrity sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg== +eslint-plugin-prettier@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.0.tgz#61e295349a65688ffac0b7808ef0a8244bdd8d40" + integrity sha512-tMTwO8iUWlSRZIwS9k7/E4vrTsfvsrcM5p1eftyuqWH25nKsz/o6/54I7jwQ/3zobISyC7wMy9ZsFwgTxOcOpQ== dependencies: prettier-linter-helpers "^1.0.0" @@ -8584,9 +8670,9 @@ eslint-visitor-keys@^2.0.0: integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== eslint-webpack-plugin@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-2.4.0.tgz#dcfd2653d0e15e52251f34dd3690ce60718d5589" - integrity sha512-j0lAJj3RnStAFdIH2P0+nsEImiBijwogZhL1go4bI6DE+9OhQuOmJ/xtmxkLtNr1w0cf5SRNkDlmIe8t/pHgww== + version "2.4.1" + resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-2.4.1.tgz#9353ec46a31d29558734a38a05eb14c5760a7144" + integrity sha512-cj8iPWZKuAiVD8MMgTSunyMCAvxQxp5mxoPHZl1UMGkApFXaXJHdCFcCR+oZEJbBNhReNa5SjESIn34uqUbBtg== dependencies: "@types/eslint" "^7.2.4" arrify "^2.0.1" @@ -8594,13 +8680,13 @@ eslint-webpack-plugin@^2.1.0: micromatch "^4.0.2" schema-utils "^3.0.0" -eslint@^7.11.0, eslint@^7.14.0: - version "7.14.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.14.0.tgz#2d2cac1d28174c510a97b377f122a5507958e344" - integrity sha512-5YubdnPXrlrYAFCKybPuHIAH++PINe1pmKNc5wQRB9HSbqIK1ywAnntE3Wwua4giKu0bjligf1gLF6qxMGOYRA== +eslint@^7.11.0, eslint@^7.15.0: + version "7.15.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.15.0.tgz#eb155fb8ed0865fcf5d903f76be2e5b6cd7e0bc7" + integrity sha512-Vr64xFDT8w30wFll643e7cGrIkPEU50yIiI36OdSIDoSGguIeaLzBo0vpGvzo9RECUqq7htURfwEtKqwytkqzA== dependencies: "@babel/code-frame" "^7.0.0" - "@eslint/eslintrc" "^0.2.1" + "@eslint/eslintrc" "^0.2.2" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -8610,10 +8696,10 @@ eslint@^7.11.0, eslint@^7.14.0: eslint-scope "^5.1.1" eslint-utils "^2.1.0" eslint-visitor-keys "^2.0.0" - espree "^7.3.0" + espree "^7.3.1" esquery "^1.2.0" esutils "^2.0.2" - file-entry-cache "^5.0.1" + file-entry-cache "^6.0.0" functional-red-black-tree "^1.0.1" glob-parent "^5.0.0" globals "^12.1.0" @@ -8637,13 +8723,13 @@ eslint@^7.11.0, eslint@^7.14.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348" - integrity sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw== +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== dependencies: acorn "^7.4.0" - acorn-jsx "^5.2.0" + acorn-jsx "^5.3.1" eslint-visitor-keys "^1.3.0" esprima@^4.0.0, esprima@^4.0.1: @@ -8846,7 +8932,7 @@ expect@^26.6.0, expect@^26.6.2: jest-message-util "^26.6.2" jest-regex-util "^26.0.0" -express@^4.16.3, express@^4.17.0, express@^4.17.1: +express@^4.17.0, express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== @@ -9093,12 +9179,12 @@ figures@^3.0.0, figures@^3.2.0: dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== +file-entry-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a" + integrity sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA== dependencies: - flat-cache "^2.0.1" + flat-cache "^3.0.4" file-loader@6.1.1: version "6.1.1" @@ -9147,11 +9233,6 @@ filesize@6.1.0, filesize@^6.1.0: resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.1.0.tgz#e81bdaa780e2451d714d71c0d7a4f3238d37ad00" integrity sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg== -filesize@^3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" - integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== - fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -9260,19 +9341,18 @@ findup-sync@^3.0.0: micromatch "^3.0.4" resolve-dir "^1.0.1" -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" + flatted "^3.1.0" + rimraf "^3.0.2" -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== +flatted@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.0.tgz#a5d06b4a8b01e3a63771daa5cb7a1903e2e57067" + integrity sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA== flatten@^1.0.2: version "1.0.3" @@ -9302,9 +9382,9 @@ follow-redirects@1.5.10: debug "=3.1.0" follow-redirects@^1.0.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" - integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== + version "1.13.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.1.tgz#5f69b813376cee4fd0474a3aba835df04ab763b7" + integrity sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg== for-in@^1.0.2: version "1.0.2" @@ -9343,14 +9423,15 @@ fork-ts-checker-webpack-plugin@4.1.6, fork-ts-checker-webpack-plugin@^4.1.4: tapable "^1.0.0" worker-rpc "^0.1.0" -fork-ts-checker-webpack-plugin@^5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-5.2.1.tgz#79326d869797906fa8b24e2abcf9421fc805450d" - integrity sha512-SVi+ZAQOGbtAsUWrZvGzz38ga2YqjWvca1pXQFUArIVXqli0lLoDQ8uS0wg0kSpcwpZmaW5jVCZXQebkyUQSsw== +fork-ts-checker-webpack-plugin@^6.0.7: + version "6.0.7" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.0.7.tgz#90d36489d553c4de0d76b8a75f8734e43c6f8e9d" + integrity sha512-8M9q76SFQFNruI2L5Z/WmDWZsbkzAjEtUcL8QXKSuTLC+8A4MriNNIiXR9yRcKvGxaBTFzygAmUYb3huTiPraw== dependencies: "@babel/code-frame" "^7.8.3" "@types/json-schema" "^7.0.5" chalk "^4.1.0" + chokidar "^3.4.2" cosmiconfig "^6.0.0" deepmerge "^4.2.2" fs-extra "^9.0.0" @@ -9393,6 +9474,11 @@ forwarded@~0.1.2: resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= +fraction.js@^4.0.12: + version "4.0.12" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.0.12.tgz#0526d47c65a5fb4854df78bc77f7bec708d7b8c3" + integrity sha512-8Z1K0VTG4hzYY7kA/1sj4/r1/RWLBD3xwReT/RCrUCbzPszjNQCCsy3ktkU/eaEqX3MYa4pY37a52eiBlPMlhA== + fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" @@ -9514,21 +9600,22 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -function.prototype.name@^1.1.0, function.prototype.name@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.2.tgz#5cdf79d7c05db401591dfde83e3b70c5123e9a45" - integrity sha512-C8A+LlHBJjB2AdcRPorc5JvJ5VUoWlXdEHLOJdCI7kjHEtGTpHQUiqMvCIKUwIsGwZX2jZJy761AXsn356bJQg== +function.prototype.name@^1.1.0, function.prototype.name@^1.1.2, function.prototype.name@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.3.tgz#0bb034bb308e7682826f215eb6b2ae64918847fe" + integrity sha512-H51qkbNSp8mtkJt+nyW1gyStBiKZxfRqySNUR99ylq6BPXHKI4SEvIlTKp4odLfjRKJV04DFWMU3G/YRlQOsag== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - functions-have-names "^1.2.0" + es-abstract "^1.18.0-next.1" + functions-have-names "^1.2.1" functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -functions-have-names@^1.2.0: +functions-have-names@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.1.tgz#a981ac397fa0c9964551402cdc5533d7a4d52f91" integrity sha512-j48B/ZI7VKs3sgeI2cZp7WXWmZXu7Iq5pl5/vptV5N2mq+DGFuS/ulaDjtaoLpYzuD6u8UgrUKHfgo7fDTSiBA== @@ -9607,11 +9694,6 @@ get-stdin@^4.0.1: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= -get-stdin@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" - integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== - get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -9768,13 +9850,13 @@ global-dirs@^0.1.1: ini "^1.3.4" global-dirs@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.0.1.tgz#acdf3bb6685bcd55cb35e8a052266569e9469201" - integrity sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A== + version "2.1.0" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" + integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== dependencies: - ini "^1.3.5" + ini "1.3.7" -global-modules@2.0.0, global-modules@^2.0.0: +global-modules@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== @@ -9909,7 +9991,7 @@ gud@^1.0.0: resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== -gzip-size@5.1.1, gzip-size@^5.0.0: +gzip-size@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== @@ -9917,6 +9999,13 @@ gzip-size@5.1.1, gzip-size@^5.0.0: duplexer "^0.1.1" pify "^4.0.1" +gzip-size@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" + integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== + dependencies: + duplexer "^0.1.2" + handle-thing@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" @@ -10083,9 +10172,9 @@ hex-color-regex@^1.1.0: integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== highlight.js@^10.1.1, highlight.js@~10.4.0: - version "10.4.0" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.4.0.tgz#ef3ce475e5dfa7a48484260b49ea242ddab823a0" - integrity sha512-EfrUGcQ63oLJbj0J0RI9ebX6TAITbsDBLbsjr881L/X5fMO9+oadKzEF21C7R3ULKG6Gv3uoab2HiqVJa/4+oA== + version "10.4.1" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.4.1.tgz#d48fbcf4a9971c4361b3f95f302747afe19dbad0" + integrity sha512-yR5lWvNz7c85OhVAEAeFhVCc/GV4C30Fjzc/rCP0aCWzc1UUOPUk55dK/qdwTZHBvMZo+eZ2jpk62ndX/xMFlg== highlight.js@~9.13.0: version "9.13.1" @@ -10191,9 +10280,9 @@ html-encoding-sniffer@^2.0.1: whatwg-encoding "^1.0.5" html-entities@^1.2.0, html-entities@^1.2.1, html-entities@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" - integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== + version "1.3.3" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.3.tgz#3dca638a43ee7de316fc23067398491152ad4736" + integrity sha512-/VulV3SYni1taM7a4RMdceqzJWR39gpZHjBwUnsCFKWV/GJkD14CJ5F7eWcZozmHJK0/f/H5U3b3SiPkuvxMgg== html-escaper@^2.0.0: version "2.0.2" @@ -10368,10 +10457,10 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -husky@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/husky/-/husky-4.3.0.tgz#0b2ec1d66424e9219d359e26a51c58ec5278f0de" - integrity sha512-tTMeLCLqSBqnflBZnlVDhpaIMucSGaYyX6855jM4AguGeWCeSzNdb1mfyWduTZ3pe3SJVvVWGL0jO1iKZVPfTA== +husky@^4.3.6: + version "4.3.6" + resolved "https://registry.yarnpkg.com/husky/-/husky-4.3.6.tgz#ebd9dd8b9324aa851f1587318db4cccb7665a13c" + integrity sha512-o6UjVI8xtlWRL5395iWq9LKDyp/9TE7XMOTvIpEVzW638UcGxTmV5cfel6fsk/jbZSTlvfGVJf2svFtybcIZag== dependencies: chalk "^4.0.0" ci-info "^2.0.0" @@ -10572,10 +10661,15 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= +ini@1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" + integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== + ini@^1.3.2, ini@^1.3.4, ini@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== init-package-json@^1.10.3: version "1.10.3" @@ -10665,12 +10759,12 @@ internal-slot@^1.0.2: has "^1.0.3" side-channel "^1.0.2" -interpret@^1.0.0, interpret@^1.4.0: +interpret@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== -interpret@^2.0.0: +interpret@^2.0.0, interpret@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== @@ -10735,9 +10829,11 @@ is-alphanumerical@^1.0.0: is-decimal "^1.0.0" is-arguments@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" - integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" + integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + dependencies: + call-bind "^1.0.0" is-arrayish@^0.2.1: version "0.2.1" @@ -10764,9 +10860,11 @@ is-binary-path@~2.1.0: binary-extensions "^2.0.0" is-boolean-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.1.tgz#10edc0900dd127697a92f6f9807c7617d68ac48e" - integrity sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ== + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0" + integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== + dependencies: + call-bind "^1.0.0" is-buffer@^1.1.5: version "1.1.6" @@ -10803,9 +10901,9 @@ is-color-stop@^1.0.0: rgba-regex "^1.0.0" is-core-module@^2.0.0, is-core-module@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.1.0.tgz#a4cc031d9b1aca63eecbd18a650e13cb4eeab946" - integrity sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== dependencies: has "^1.0.3" @@ -10963,9 +11061,9 @@ is-installed-globally@^0.3.2: is-path-inside "^3.0.1" is-map@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.1.tgz#520dafc4307bb8ebc33b813de5ce7c9400d644a1" - integrity sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw== + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" + integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== is-module@^1.0.0: version "1.0.0" @@ -10973,9 +11071,9 @@ is-module@^1.0.0: integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= is-negative-zero@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" - integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== is-number-object@^1.0.4: version "1.0.4" @@ -11005,9 +11103,9 @@ is-obj@^2.0.0: integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== is-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" - integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA= + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" + integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== is-observable@^1.1.0: version "1.1.0" @@ -11100,9 +11198,9 @@ is-root@2.1.0: integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== is-set@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.1.tgz#d1604afdab1724986d30091575f54945da7e5f43" - integrity sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA== + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" + integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== is-ssh@^1.3.0: version "1.3.2" @@ -11819,9 +11917,9 @@ js-tokens@^3.0.2: integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= js-yaml@^3.13.1: - version "3.14.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" - integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -12181,10 +12279,10 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= -lint-staged@^10.4.2: - version "10.5.1" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.5.1.tgz#901e915c2360072dded0e7d752a0d9a49e079daa" - integrity sha512-fTkTGFtwFIJJzn/PbUO3RXyEBHIhbfYBE7+rJyLcOXabViaO/h6OslgeK6zpeUtzkDrzkgyAYDTLAwx6JzDTHw== +lint-staged@^10.5.3: + version "10.5.3" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.5.3.tgz#c682838b3eadd4c864d1022da05daa0912fb1da5" + integrity sha512-TanwFfuqUBLufxCc3RUtFEkFraSPNR3WzWcGF39R3f2J7S9+iF9W0KTVLfSy09lYGmZS5NDCxjNvhGMSJyFCWg== dependencies: chalk "^4.1.0" cli-truncate "^2.1.0" @@ -12232,9 +12330,9 @@ listr-verbose-renderer@^0.5.0: figures "^2.0.0" listr2@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.2.2.tgz#d20feb75015e506992b55af40722ba1af168b8f1" - integrity sha512-AajqcZEUikF2ioph6PfH3dIuxJclhr3i3kHgTOP0xeXdWQohrvJAAmqVcV43/GI987HFY/vzT73jYXoa4esDHg== + version "3.2.3" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.2.3.tgz#ef9e0d790862f038dde8a9837be552b1adfd1c07" + integrity sha512-vUb80S2dSUi8YxXahO8/I/s29GqnOL8ozgHVLjfWQXa03BNEeS1TpBLjh2ruaqq5ufx46BRGvfymdBSuoXET5w== dependencies: chalk "^4.1.0" cli-truncate "^2.1.0" @@ -12654,9 +12752,9 @@ log-update@^4.0.0: wrap-ansi "^6.2.0" loglevel@^1.6.8: - version "1.7.0" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.0.tgz#728166855a740d59d38db01cf46f042caa041bb0" - integrity sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ== + version "1.7.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" + integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== loglevelnext@^1.0.1: version "1.0.5" @@ -12693,12 +12791,12 @@ loud-rejection@^1.0.0: currently-unhandled "^0.4.1" signal-exit "^3.0.0" -lower-case@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7" - integrity sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ== +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== dependencies: - tslib "^1.10.0" + tslib "^2.0.3" lowlight@^1.14.0: version "1.17.0" @@ -12757,7 +12855,7 @@ make-dir@^2.0.0, make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -make-dir@^3.0.0, make-dir@^3.0.2: +make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== @@ -12881,19 +12979,20 @@ mdast-add-list-metadata@1.0.1: unist-util-visit-parents "1.1.2" mdast-util-from-markdown@^0.8.0: - version "0.8.1" - resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.1.tgz#781371d493cac11212947226190270c15dc97116" - integrity sha512-qJXNcFcuCSPqUF0Tb0uYcFDIq67qwB3sxo9RPdf9vG8T90ViKnksFqdB/Coq2a7sTnxL/Ify2y7aIQXDkQFH0w== + version "0.8.4" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.4.tgz#2882100c1b9fc967d3f83806802f303666682d32" + integrity sha512-jj891B5pV2r63n2kBTFh8cRI2uR9LQHsXG1zSDqfhXkIlDzrTcIlbB5+5aaYEkl8vOPIOPLf8VT7Ere1wWTMdw== dependencies: "@types/mdast" "^3.0.0" - mdast-util-to-string "^1.0.0" - micromark "~2.10.0" + mdast-util-to-string "^2.0.0" + micromark "~2.11.0" parse-entities "^2.0.0" + unist-util-stringify-position "^2.0.0" -mdast-util-to-string@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz#27055500103f51637bd07d01da01eb1967a43527" - integrity sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A== +mdast-util-to-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" + integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== mdn-data@2.0.14: version "2.0.14" @@ -13023,15 +13122,15 @@ microevent.ts@~0.1.1: resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== -micromark@~2.10.0: - version "2.10.1" - resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.10.1.tgz#cd73f54e0656f10e633073db26b663a221a442a7" - integrity sha512-fUuVF8sC1X7wsCS29SYQ2ZfIZYbTymp0EYr6sab3idFjigFFjGa5UwoniPlV9tAgntjuapW1t9U+S0yDYeGKHQ== +micromark@~2.11.0: + version "2.11.2" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.11.2.tgz#e8b6a05f54697d2d3d27fc89600c6bc40dd05f35" + integrity sha512-IXuP76p2uj8uMg4FQc1cRE7lPCLsfAXuEfdjtdO55VRiFO1asrCSQ5g43NmPqFtRwzEnEhafRVzn2jg0UiKArQ== dependencies: debug "^4.0.0" parse-entities "^2.0.0" -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.9: +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -13133,10 +13232,10 @@ mini-css-extract-plugin@0.11.3: schema-utils "^1.0.0" webpack-sources "^1.1.0" -mini-css-extract-plugin@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.3.1.tgz#1375c88b2bc2a9d197670a55761edcd1b5d72f21" - integrity sha512-jIOheqh9EU98rqj6ZaFTYNNDSFqdakNqaUZfkYwaXPjI9batmXVXX+K71NrqRAgtoGefELBMld1EQ7dqSAD5SQ== +mini-css-extract-plugin@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.3.3.tgz#7802e62b34199aa7d1a62e654395859a836486a0" + integrity sha512-7lvliDSMiuZc81kI+5/qxvn47SCM7BehXex3f2c6l/pR3Goj58IQxZh9nuPQ3AkGQgoETyXuIqLDaO5Oa0TyBw== dependencies: loader-utils "^2.0.0" schema-utils "^3.0.0" @@ -13324,11 +13423,16 @@ ms@2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== -ms@2.1.2, ms@^2.0.0, ms@^2.1.1: +ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@^2.0.0, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + multicast-dns-service-types@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" @@ -13376,10 +13480,10 @@ nan@^2.12.1: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== -nanoid@^3.1.18: - version "3.1.18" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.18.tgz#0680db22ab01c372e89209f5d18283d98de3e96d" - integrity sha512-rndlDjbbHbcV3xi+R2fpJ+PbGMdfBxz5v1fATIQFq0DP64FsicQdwnKLy47K4kZHdRpmQXtz24eGsxQqamzYTA== +nanoid@^3.1.20: + version "3.1.20" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" + integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== nanomatch@^1.2.9: version "1.2.13" @@ -13416,15 +13520,14 @@ navbar@^2.1.0: integrity sha512-s+EDPMotnD2Dd5sZmsS3ZX48vPxRfsryH1fHPqScjqM2DZJgpJ8oJvR0iZHL7mZt70zW7d/x7H8yCLkrjt/CCA== nearley@^2.7.10: - version "2.19.8" - resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.19.8.tgz#2c6e2f9e8c0daa145e78c9734b4ad7713e96fcca" - integrity sha512-te4JCrxbzLvVqUWfVOASgsbkWaFvJ6JlHTRQzfnU862bnyHGHEGX2s5OYvLAS4NDPmQvRtC2tBdV6THy6xHFyQ== + version "2.20.1" + resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.20.1.tgz#246cd33eff0d012faf197ff6774d7ac78acdd474" + integrity sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ== dependencies: commander "^2.19.0" moo "^0.5.0" railroad-diagrams "^1.0.0" randexp "0.4.6" - semver "^5.4.1" negotiator@0.6.2: version "0.6.2" @@ -13456,13 +13559,13 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -no-case@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.3.tgz#c21b434c1ffe48b39087e86cfb4d2582e9df18f8" - integrity sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw== +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== dependencies: - lower-case "^2.0.1" - tslib "^1.10.0" + lower-case "^2.0.2" + tslib "^2.0.3" node-dir@^0.1.10: version "0.1.17" @@ -13566,7 +13669,7 @@ node-notifier@^8.0.0: uuid "^8.3.0" which "^2.0.2" -node-releases@^1.1.52, node-releases@^1.1.61, node-releases@^1.1.66: +node-releases@^1.1.52, node-releases@^1.1.61, node-releases@^1.1.67: version "1.1.67" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.67.tgz#28ebfcccd0baa6aad8e8d4d8fe4cbc49ae239c12" integrity sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg== @@ -13756,17 +13859,17 @@ object-copy@^0.1.0: kind-of "^3.0.3" object-inspect@^1.7.0, object-inspect@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" - integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== + version "1.9.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" + integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== object-is@^1.0.1, object-is@^1.0.2, object-is@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.3.tgz#2e3b9e65560137455ee3bd62aec4d90a2ea1cc81" - integrity sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg== + version "1.1.4" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.4.tgz#63d6c83c00a43f4cbc9434eb9757c8a5b8565068" + integrity sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" @@ -13780,7 +13883,7 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.1.0, object.assign@^4.1.1: +object.assign@^4.1.0, object.assign@^4.1.1, object.assign@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== @@ -13791,31 +13894,33 @@ object.assign@^4.1.0, object.assign@^4.1.1: object-keys "^1.1.1" object.entries@^1.1.0, object.entries@^1.1.1, object.entries@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add" - integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA== + version "1.1.3" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.3.tgz#c601c7f168b62374541a07ddbd3e2d5e4f7711a6" + integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.5" + es-abstract "^1.18.0-next.1" has "^1.0.3" -"object.fromentries@^2.0.0 || ^1.0.0", object.fromentries@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9" - integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ== +"object.fromentries@^2.0.0 || ^1.0.0", object.fromentries@^2.0.2, object.fromentries@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.3.tgz#13cefcffa702dc67750314a3305e8cb3fad1d072" + integrity sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" + es-abstract "^1.18.0-next.1" has "^1.0.3" object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" - integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== + version "2.1.1" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz#0dfda8d108074d9c563e80490c883b6661091544" + integrity sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" + es-abstract "^1.18.0-next.1" object.pick@^1.3.0: version "1.3.0" @@ -13825,13 +13930,13 @@ object.pick@^1.3.0: isobject "^3.0.1" object.values@^1.1.0, object.values@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" - integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.2.tgz#7a2015e06fcb0f546bd652486ce8583a4731c731" + integrity sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" + es-abstract "^1.18.0-next.1" has "^1.0.3" objectorarray@^1.0.4: @@ -13910,7 +14015,7 @@ opencollective-postinstall@^2.0.2: resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== -opener@^1.5.1: +opener@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== @@ -14053,11 +14158,11 @@ p-limit@^2.0.0, p-limit@^2.2.0: p-try "^2.0.0" p-limit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.0.2.tgz#1664e010af3cadc681baafd3e2a437be7b0fb5fe" - integrity sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg== + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: - p-try "^2.0.0" + yocto-queue "^0.1.0" p-locate@^2.0.0: version "2.0.0" @@ -14169,12 +14274,12 @@ parallel-transform@^1.1.0: readable-stream "^2.1.5" param-case@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.3.tgz#4be41f8399eff621c56eebb829a5e451d9801238" - integrity sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA== + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== dependencies: - dot-case "^3.0.3" - tslib "^1.10.0" + dot-case "^3.0.4" + tslib "^2.0.3" parchment@^1.1.2, parchment@^1.1.4: version "1.1.4" @@ -14293,13 +14398,13 @@ parseurl@~1.3.2, parseurl@~1.3.3: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== -pascal-case@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.1.tgz#5ac1975133ed619281e88920973d2cd1f279de5f" - integrity sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA== +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== dependencies: - no-case "^3.0.3" - tslib "^1.10.0" + no-case "^3.0.4" + tslib "^2.0.3" pascalcase@^0.1.1: version "0.1.1" @@ -15249,15 +15354,14 @@ postcss@^7, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, po source-map "^0.6.1" supports-color "^6.1.0" -postcss@^8.1.0, postcss@^8.1.4, postcss@^8.1.9: - version "8.1.9" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.1.9.tgz#20ff4b598a6f5015c5f7fe524b8ed5313d7ecade" - integrity sha512-oWuBpEl1meaMKkQXn0ic78TUrgsMvrAZLE/6ZY0H3LTteq2O3L8PGWwMbPLctpksTJIHjQeossMUMNQW7qRIHQ== +postcss@^8.1.0, postcss@^8.1.4, postcss@^8.2.1: + version "8.2.1" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.1.tgz#eabc5557c4558059b9d9e5b15bce7ffa9089c2a8" + integrity sha512-RhsqOOAQzTgh1UB/IZdca7F9WDb7SUCR2Vnv1x7DbvuuggQIpoDwjK+q0rzoPffhYvWNKX5JSwS4so4K3UC6vA== dependencies: colorette "^1.2.1" - nanoid "^3.1.18" + nanoid "^3.1.20" source-map "^0.6.1" - vfile-location "^3.2.0" prefix-style@2.0.1: version "2.0.1" @@ -15286,10 +15390,10 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.0.tgz#8a03c7777883b29b37fb2c4348c66a78e980418b" - integrity sha512-yYerpkvseM4iKD/BXLYUkQV5aKt4tQPqaGW6EsZjzyu0r7sVZZNPJW4Y8MyKmicp6t42XUPcBVA+H6sB3gqndw== +prettier@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" + integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== prettier@~2.0.5: version "2.0.5" @@ -15702,10 +15806,10 @@ react-app-polyfill@^2.0.0: regenerator-runtime "^0.13.7" whatwg-fetch "^3.4.1" -react-autosuggest@^10.0.3: - version "10.0.3" - resolved "https://registry.yarnpkg.com/react-autosuggest/-/react-autosuggest-10.0.3.tgz#d18b74a083d27c295331884d1d6a9de4cc1a212a" - integrity sha512-h+Cv1emcw7AQsDuN5MYPkmpDvg14jScmKyiQv5LqYRn/gqI6VHzmBdL2I2CHVFARHOvK2R+D35sNd5AEvGc3mQ== +react-autosuggest@^10.0.4: + version "10.0.4" + resolved "https://registry.yarnpkg.com/react-autosuggest/-/react-autosuggest-10.0.4.tgz#451b8d95200faf2725a4b45dd005df673a3edb18" + integrity sha512-UM4Kh7ao0+zo9xhX35jt0iS8uPsDWDUiN2Sjgi4Q+eGp6632LJ9tlvUcZSq3Zg0HPDsvO/haw8ZBo/9YqPDTVg== dependencies: es6-promise "^4.2.8" prop-types "^15.7.2" @@ -15802,7 +15906,7 @@ react-dev-utils@^11.0.1: strip-ansi "6.0.0" text-table "0.2.0" -react-docgen-typescript-loader@^3.7.1, react-docgen-typescript-loader@^3.7.2: +react-docgen-typescript-loader@^3.7.1: version "3.7.2" resolved "https://registry.yarnpkg.com/react-docgen-typescript-loader/-/react-docgen-typescript-loader-3.7.2.tgz#45cb2305652c0602767242a8700ad1ebd66bbbbd" integrity sha512-fNzUayyUGzSyoOl7E89VaPKJk9dpvdSgyXg81cUkwy0u+NBvkzQG3FC5WBIlXda0k/iaxS+PWi+OC+tUiGxzPA== @@ -15812,18 +15916,17 @@ react-docgen-typescript-loader@^3.7.1, react-docgen-typescript-loader@^3.7.2: react-docgen-typescript "^1.15.0" react-docgen-typescript-plugin@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-0.6.2.tgz#c83305206c61d5c7e004eaf2dc4661367ddc105d" - integrity sha512-Orw0WKdJGAg5eMZGbEMw/rKonoxbi8epU6RJWTW3ukWuTarxckFXTltGvm8XADAWlBHak30KD71XThtJruxfTg== + version "0.6.3" + resolved "https://registry.yarnpkg.com/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-0.6.3.tgz#664b22601df083597ecb1e60bd21beca60125fdf" + integrity sha512-av1S/fmWBNFGgNa4qtkidFjjOz23eEi6EdCtwSWo9WNhGzUMyMygbD/DosMWoeFlZpk9R3MXPkRE7PDH6j5GMQ== dependencies: debug "^4.1.1" endent "^2.0.1" micromatch "^4.0.2" - react-docgen-typescript "^1.20.1" - react-docgen-typescript-loader "^3.7.2" + react-docgen-typescript "^1.20.5" tslib "^2.0.0" -react-docgen-typescript@^1.15.0, react-docgen-typescript@^1.20.1: +react-docgen-typescript@^1.15.0, react-docgen-typescript@^1.20.5: version "1.20.5" resolved "https://registry.yarnpkg.com/react-docgen-typescript/-/react-docgen-typescript-1.20.5.tgz#fb8d78a707243498436c2952bd3f6f488a68d4f3" integrity sha512-AbLGMtn76bn7SYBJSSaKJrZ0lgNRRR3qL60PucM5M4v/AXyC8221cKBXW5Pyt9TfDRfe+LDnPNlg7TibxX0ovA== @@ -15929,12 +16032,12 @@ react-inspector@^5.0.1: is-dom "^1.0.0" prop-types "^15.0.0" -react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1, react-is@^16.8.3, react-is@^16.8.6: +react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.3, react-is@^16.8.6: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-is@^17.0.1: +"react-is@^16.8.0 || ^17.0.0", react-is@^17.0.1: version "17.0.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== @@ -15972,10 +16075,10 @@ react-moment@^1.0.0: resolved "https://registry.yarnpkg.com/react-moment/-/react-moment-1.0.0.tgz#aedac867cd08739065799de9452c898d954ba6d7" integrity sha512-J4iIiwUT4oZcL7cp2U7naQKbQtqvmzGXXBMg/DLj+Pi7n9EW0VhBRx/1aJ1Tp2poCqTCAPoadLEoUIkReGnNNg== -react-monaco-editor@0.40.0: - version "0.40.0" - resolved "https://registry.yarnpkg.com/react-monaco-editor/-/react-monaco-editor-0.40.0.tgz#f1b021b32952cfc63a4bf2661fd20f61b2b8309f" - integrity sha512-IG322vOwKc/yjhn91xbqHONyAVxjv5L0YOUBU+hDwfswlglm/sGsqGhK9n1lD5d3l3kegMO/ZeZaMHC2LGgNRw== +react-monaco-editor@0.41.1: + version "0.41.1" + resolved "https://registry.yarnpkg.com/react-monaco-editor/-/react-monaco-editor-0.41.1.tgz#64baf18b294822b5607ba5352cdd9bb902ac63e5" + integrity sha512-axXoPL1F5AL6mSB43fQCbkxYZ+XKSA860JsRA24G4KW/2EkIMwMZ2tutgVwuQk0+rigKAw3tLU9l3DvORPgZfA== dependencies: monaco-editor "*" prop-types "^15.7.2" @@ -15988,7 +16091,7 @@ react-popper-tooltip@^2.8.3: "@babel/runtime" "^7.9.2" react-popper "^1.3.7" -react-popper-tooltip@^3.1.0: +react-popper-tooltip@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/react-popper-tooltip/-/react-popper-tooltip-3.1.1.tgz#329569eb7b287008f04fcbddb6370452ad3f9eac" integrity sha512-EnERAnnKRptQBJyaee5GJScWNUKQPDD2ywvzZyUjst/wj5U64C8/CnSYLNEmP2hG0IJ3ZhtDxE8oDN+KOyavXQ== @@ -16046,10 +16149,10 @@ react-refresh@^0.8.3: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f" integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg== -react-responsive@^8.1.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/react-responsive/-/react-responsive-8.1.1.tgz#e4b1bd677798deecb4f1c3cff35a020ca0abdb27" - integrity sha512-kvgOGU4m64ALsDiNKgImW6xtbdx/aSuw8sTCHC8RsBlkXsDA/gMoZkYboZuk4V9DhX6bCFh4gBH2UqlYVPLvcA== +react-responsive@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/react-responsive/-/react-responsive-8.2.0.tgz#e0ffb306cfd8f38c9c12e26725b9e1245fa9debc" + integrity sha512-iagCqVrw4QSjhxKp3I/YK6+ODkWY6G+YPElvdYKiUUbywwh9Ds0M7r26Fj2/7dWFFbOpcGnJE6uE7aMck8j5Qg== dependencies: hyphenate-style-name "^1.0.0" matchmediaquery "^0.3.0" @@ -16427,6 +16530,13 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" +rechoir@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.0.tgz#32650fd52c21ab252aa5d65b19310441c7e03aca" + integrity sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q== + dependencies: + resolve "^1.9.0" + recursive-readdir@2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" @@ -16458,6 +16568,11 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" +reduce-flatten@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" + integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== + redux-di-middleware@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/redux-di-middleware/-/redux-di-middleware-4.1.0.tgz#5d7a3575e8af69cceb0d04fa409536a23955866e" @@ -16643,11 +16758,6 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -replace-ext@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" - integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= - request-progress@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" @@ -16795,7 +16905,7 @@ resolve@1.18.1: is-core-module "^2.0.0" path-parse "^1.0.6" -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.3.2, resolve@^1.8.1: +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.3.2, resolve@^1.8.1, resolve@^1.9.0: version "1.19.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== @@ -16877,13 +16987,6 @@ rifm@^0.7.0: dependencies: "@babel/runtime" "^7.3.1" -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -17139,11 +17242,18 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@7.3.2, semver@7.x, semver@^7.2.1, semver@^7.3.2: +semver@7.3.2: version "7.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== +semver@7.x, semver@^7.2.1, semver@^7.3.2: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -17502,10 +17612,10 @@ source-list-map@^2.0.0: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -source-map-loader@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-1.1.2.tgz#5b782bf08496d3a7f355e1780df0e25190a80991" - integrity sha512-bjf6eSENOYBX4JZDfl9vVLNsGAQ6Uz90fLmOazcmMcyDYOBFsGxPNn83jXezWLY9bJsVAo1ObztxPcV8HAbjVA== +source-map-loader@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-1.1.3.tgz#7dbc2fe7ea09d3e43c51fd9fc478b7f016c1f820" + integrity sha512-6YHeF+XzDOrT/ycFJNI53cgEsp/tHTMl37hi7uVyqFAlTXW109JazaQCkbc+jjoL2637qkH1amLi+JzrIpt5lA== dependencies: abab "^2.0.5" iconv-lite "^0.6.2" @@ -17525,7 +17635,7 @@ source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.16, source-map-support@^0.5.3, source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.19: +source-map-support@^0.5.16, source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.19: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -17585,9 +17695,9 @@ spdx-expression-parse@^3.0.0, spdx-expression-parse@^3.0.1: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.6" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz#c80757383c28abf7296744998cbc106ae8b854ce" - integrity sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw== + version "3.0.7" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" + integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== spdy-transport@^3.0.0: version "3.0.0" @@ -17680,9 +17790,9 @@ stable@^0.1.8: integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== stack-utils@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.3.tgz#db7a475733b5b8bf6521907b18891d29006f7751" - integrity sha512-WldO+YmqhEpjp23eHZRhOT1NQF51STsbxZ+/AdpFD+EhheFxAe5d0WoK4DQVJkSHacPrJJX3OqRAl9CgHf78pg== + version "1.0.4" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.4.tgz#4b600971dcfc6aed0cbdf2a8268177cc916c87c8" + integrity sha512-IPDJfugEGbfizBwBZRZ3xpccMdRyP5lqsBWXGQWimVjua/ccLCeMOAVjlc1R7LxFjo5sEDhyNIXd8mo/AiDS9w== dependencies: escape-string-regexp "^2.0.0" @@ -18143,6 +18253,16 @@ symbol.prototype.description@^1.0.0: has-symbols "^1.0.1" object.getownpropertydescriptors "^2.1.0" +table-layout@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.1.tgz#8411181ee951278ad0638aea2f779a9ce42894f9" + integrity sha512-dEquqYNJiGwY7iPfZ3wbXDI944iqanTSchrACLL2nOB+1r+h1Nzu2eH+DuPPvWvm5Ry7iAPeFlgEtP5bIp5U7Q== + dependencies: + array-back "^4.0.1" + deep-extend "~0.6.0" + typical "^5.2.0" + wordwrapjs "^4.0.0" + table@^5.2.3: version "5.4.6" resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" @@ -18305,9 +18425,9 @@ terser@^4.1.2, terser@^4.6.2, terser@^4.6.3, terser@^4.8.0: source-map-support "~0.5.12" terser@^5.3.4: - version "5.5.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.5.0.tgz#1406fcb4d4bc517add3b22a9694284c040e33448" - integrity sha512-eopt1Gf7/AQyPhpygdKePTzaet31TvQxXvrf7xYUvD/d8qkCJm4SKPDzu+GHK5ZaYTn8rvttfqaZc3swK21e5g== + version "5.5.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.5.1.tgz#540caa25139d6f496fdea056e414284886fb2289" + integrity sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ== dependencies: commander "^2.20.0" source-map "~0.7.2" @@ -18609,10 +18729,10 @@ ts-jest@^26.4.2: semver "7.x" yargs-parser "20.x" -ts-loader@^8.0.7: - version "8.0.11" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.0.11.tgz#35d58a65932caacb120426eea59eca841786c899" - integrity sha512-06X+mWA2JXoXJHYAesUUL4mHFYhnmyoCdQVMXofXF552Lzd4wNwSGg7unJpttqUP7ziaruM8d7u8LUB6I1sgzA== +ts-loader@^8.0.12: + version "8.0.12" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.0.12.tgz#1de9f1de65176318c1e6d187bfc496182f8dc2a0" + integrity sha512-UIivVfGVJDdwwjgSrbtcL9Nf10c1BWnL1mxAQUVcnhNIn/P9W3nP5v60Z0aBMtc7ZrE11lMmU6+5jSgAXmGaYw== dependencies: chalk "^2.3.0" enhanced-resolve "^4.0.0" @@ -18635,7 +18755,7 @@ tsconfig-paths@^3.9.0: minimist "^1.2.0" strip-bom "^3.0.0" -tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -18748,20 +18868,25 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.2.tgz#6369ef22516fe5e10304aae5a5c4862db55380e9" - integrity sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ== +typescript@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.3.tgz#519d582bd94cba0cf8934c7d8e8467e473f53bb7" + integrity sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg== + +typical@^5.0.0, typical@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" + integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== ua-parser-js@^0.7.18: - version "0.7.22" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.22.tgz#960df60a5f911ea8f1c818f3747b99c6e177eae3" - integrity sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q== + version "0.7.23" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.23.tgz#704d67f951e13195fbcd3d78818577f5bc1d547b" + integrity sha512-m4hvMLxgGHXG3O3fQVAyyAQpZzDOvwnhOTjYz5Xmr7r/+LpkNy3vJXdVRWgd1TkAb7NGROZuSy96CrlNVjA7KA== uglify-js@^3.1.4: - version "3.12.0" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.12.0.tgz#b943f129275c41d435eb54b643bbffee71dccf57" - integrity sha512-8lBMSkFZuAK7gGF8LswsXmir8eX8d2AAMOnxSDWjKBx/fBR6MypQjs78m6ML9zQVp1/hD4TBdfeMZMC7nW1TAA== + version "3.12.1" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.12.1.tgz#78307f539f7b9ca5557babb186ea78ad30cc0375" + integrity sha512-o8lHP20KjIiQe5b/67Rh68xEGRrc2SRsCuuoYclXXoC74AfSRGblU1HKzJWH3HxPZ+Ort85fWHpSX7KwBUC9CQ== uid-number@0.0.6: version "0.0.6" @@ -18855,9 +18980,9 @@ unique-string@^1.0.0: crypto-random-string "^1.0.0" unist-util-is@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.0.3.tgz#e8b44db55fc20c43752b3346c116344d45d7c91d" - integrity sha512-bTofCFVx0iQM8Jqb1TBDVRIQW03YkD3p66JOd/aCWuqzlLyUtx1ZAGw/u+Zw+SttKvSVcvTiKYbfrtLoLefykw== + version "4.0.4" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.0.4.tgz#3e9e8de6af2eb0039a59f50c9b3e99698a924f50" + integrity sha512-3dF39j/u423v4BBQrk1AQ2Ve1FxY5W3JKwXxVFzBODQ6WEvccguhgp802qQLKSnxPODE6WuRZtV+ohlUg4meBA== unist-util-stringify-position@^2.0.0: version "2.0.3" @@ -19076,12 +19201,12 @@ uuid@^3.0.1, uuid@^3.1.0, uuid@^3.3.2, uuid@^3.4.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^8.0.0, uuid@^8.3.0, uuid@^8.3.1: - version "8.3.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31" - integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg== +uuid@^8.0.0, uuid@^8.3.0, uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1: +v8-compile-cache@^2.0.3, v8-compile-cache@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== @@ -19134,11 +19259,6 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -vfile-location@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c" - integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA== - vfile-message@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" @@ -19148,13 +19268,12 @@ vfile-message@^2.0.0: unist-util-stringify-position "^2.0.0" vfile@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.0.tgz#26c78ac92eb70816b01d4565e003b7e65a2a0e01" - integrity sha512-a/alcwCvtuc8OX92rqqo7PflxiCgXRFjdyoGVuYV+qbgCb0GgZJRvIgCD4+U/Kl1yhaRsaTwksF88xbPyGsgpw== + version "4.2.1" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624" + integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA== dependencies: "@types/unist" "^2.0.0" is-buffer "^2.0.0" - replace-ext "1.0.0" unist-util-stringify-position "^2.0.0" vfile-message "^2.0.0" @@ -19249,41 +19368,40 @@ webidl-conversions@^6.1.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== -webpack-bundle-analyzer@^3.9.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz#f6f94db108fb574e415ad313de41a2707d33ef3c" - integrity sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA== +webpack-bundle-analyzer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.2.0.tgz#f19ed40e1767ab35cad78c517529596e885bf64a" + integrity sha512-gmjpdL/AJeGAftSzA+bjIPiChUffjBelcH2+3woCUiRpQfuwrTJuWRyZuqegiwBAroMJp7gIwcJaGeol039zbQ== dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - bfj "^6.1.1" - chalk "^2.4.1" - commander "^2.18.0" - ejs "^2.6.1" - express "^4.16.3" - filesize "^3.6.1" - gzip-size "^5.0.0" - lodash "^4.17.19" - mkdirp "^0.5.1" - opener "^1.5.1" - ws "^6.0.0" + acorn "^8.0.4" + acorn-walk "^8.0.0" + chalk "^4.1.0" + commander "^6.2.0" + express "^4.17.1" + filesize "^6.1.0" + gzip-size "^6.0.0" + lodash "^4.17.20" + opener "^1.5.2" + ws "^7.3.1" -webpack-cli@^3.3.12: - version "3.3.12" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a" - integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag== +webpack-cli@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.2.0.tgz#10a09030ad2bd4d8b0f78322fba6ea43ec56aaaa" + integrity sha512-EIl3k88vaF4fSxWSgtAQR+VwicfLMTZ9amQtqS4o+TDPW9HGaEpbFBbAZ4A3ZOT5SOnMxNOzROsSTPiE8tBJPA== dependencies: - chalk "^2.4.2" - cross-spawn "^6.0.5" - enhanced-resolve "^4.1.1" - findup-sync "^3.0.0" - global-modules "^2.0.0" - import-local "^2.0.0" - interpret "^1.4.0" - loader-utils "^1.4.0" - supports-color "^6.1.0" - v8-compile-cache "^2.1.1" - yargs "^13.3.2" + "@webpack-cli/info" "^1.1.0" + "@webpack-cli/serve" "^1.1.0" + colorette "^1.2.1" + command-line-usage "^6.1.0" + commander "^6.2.0" + enquirer "^2.3.6" + execa "^4.1.0" + import-local "^3.0.2" + interpret "^2.2.0" + leven "^3.1.0" + rechoir "^0.7.0" + v8-compile-cache "^2.2.0" + webpack-merge "^4.2.2" webpack-dev-middleware@^3.7.0, webpack-dev-middleware@^3.7.2: version "3.7.2" @@ -19350,7 +19468,7 @@ webpack-hot-middleware@^2.25.0: querystring "^0.2.0" strip-ansi "^3.0.0" -webpack-log@^1.1.2, webpack-log@^1.2.0: +webpack-log@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-1.2.0.tgz#a4b34cda6b22b518dbb0ab32e567962d5c72a43d" integrity sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA== @@ -19378,10 +19496,17 @@ webpack-manifest-plugin@2.2.0: object.entries "^1.1.0" tapable "^1.0.0" -webpack-merge@^5.2.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.4.0.tgz#81bef0a7d23fc1e6c24b06ad8bf22ddeb533a3a3" - integrity sha512-/scBgu8LVPlHDgqH95Aw1xS+L+PHrpHKOwYVGFaNOQl4Q4wwwWDarwB1WdZAbLQ24SKhY3Awe7VZGYAdp+N+gQ== +webpack-merge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" + integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== + dependencies: + lodash "^4.17.15" + +webpack-merge@^5.7.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.7.0.tgz#004dec31f7a875e590c9731e5bdcd3efad0f2715" + integrity sha512-UryoMJGRMwOOh/ie4NXZC1OtT0mkA7Ny2+C/MkWOwTRG+jVNEwChVV/+x8rd+ga2mVLeQ0m+QmzLAg7N36+oag== dependencies: clone-deep "^4.0.1" wildcard "^2.0.0" @@ -19546,6 +19671,14 @@ wordwrap@^1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= +wordwrapjs@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.0.tgz#9aa9394155993476e831ba8e59fb5795ebde6800" + integrity sha512-Svqw723a3R34KvsMgpjFBYCgNOSdcW3mQFK4wIfhGQhtaFVOJmdYoXgi63ne3dTlWgatVcUc7t4HtQ/+bUVIzQ== + dependencies: + reduce-flatten "^2.0.0" + typical "^5.0.0" + workbox-background-sync@^5.1.4: version "5.1.4" resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-5.1.4.tgz#5ae0bbd455f4e9c319e8d827c055bb86c894fd12" @@ -19795,24 +19928,17 @@ write-pkg@^3.1.0: sort-keys "^2.0.0" write-json-file "^2.2.0" -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - -ws@^6.0.0, ws@^6.2.1: +ws@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== dependencies: async-limiter "~1.0.0" -ws@^7.2.3: - version "7.4.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.0.tgz#a5dd76a24197940d4a8bb9e0e152bb4503764da7" - integrity sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ== +ws@^7.2.3, ws@^7.3.1: + version "7.4.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.1.tgz#a333be02696bd0e54cea0434e21dcc8a9ac294bb" + integrity sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ== xml-name-validator@^3.0.0: version "3.0.0" @@ -19830,9 +19956,9 @@ xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + version "4.0.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" + integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: version "3.1.1" @@ -19935,3 +20061,8 @@ yauzl@^2.10.0: dependencies: buffer-crc32 "~0.2.3" fd-slicer "~1.1.0" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From e75c9118082f312676108181e7c59b9a6fd2686e Mon Sep 17 00:00:00 2001 From: Zoltan Takacs Date: Mon, 4 Jan 2021 20:41:46 +0100 Subject: [PATCH 02/11] Feature: cypress code coverage (#1104) * Cypress basic code coverage * add npm script for cypress with coverage * workaround for: https://github.com/istanbuljs/istanbuljs/issues/572 * Upgrade dependency for coverage report fix --- apps/sensenet/.gitignore | 3 + apps/sensenet/cypress/plugins/index.js | 3 + apps/sensenet/cypress/support/index.js | 1 + apps/sensenet/package.json | 20 +- apps/sensenet/webpack.dev.js | 79 +- yarn.lock | 1084 +++++++++++++++++++++--- 6 files changed, 1048 insertions(+), 142 deletions(-) diff --git a/apps/sensenet/.gitignore b/apps/sensenet/.gitignore index 52a381e80..69e5fed65 100644 --- a/apps/sensenet/.gitignore +++ b/apps/sensenet/.gitignore @@ -65,3 +65,6 @@ stats.json # Cypress related videos and screenshots cypress/videos cypress/screenshots + +# Instrumented code for cypress code coverage +instrumented diff --git a/apps/sensenet/cypress/plugins/index.js b/apps/sensenet/cypress/plugins/index.js index aa9918d21..ad3b7807f 100644 --- a/apps/sensenet/cypress/plugins/index.js +++ b/apps/sensenet/cypress/plugins/index.js @@ -18,4 +18,7 @@ module.exports = (on, config) => { // `on` is used to hook into various events Cypress emits // `config` is the resolved Cypress config + + require('@cypress/code-coverage/task')(on, config) + return config } diff --git a/apps/sensenet/cypress/support/index.js b/apps/sensenet/cypress/support/index.js index 17f0d1641..61db7fbad 100644 --- a/apps/sensenet/cypress/support/index.js +++ b/apps/sensenet/cypress/support/index.js @@ -13,5 +13,6 @@ // https://on.cypress.io/configuration // *********************************************************** import 'cypress-xpath' +import '@cypress/code-coverage/support' import './commands' diff --git a/apps/sensenet/package.json b/apps/sensenet/package.json index 8c950b538..13a97e268 100644 --- a/apps/sensenet/package.json +++ b/apps/sensenet/package.json @@ -18,8 +18,10 @@ "build": "webpack --config webpack.prod.js", "build:stats": "webpack --config webpack.prod.js --profile --json > stats.json", "start": "webpack serve --progress --config webpack.dev.js", - "cypress": "cypress open", - "cypress:all": "cypress run" + "cypress": "cypress open --env coverage=false", + "cypress:all": "cypress run --env coverage=false", + "cypress:coverage": "cypress run && nyc report --reporter=text-summary", + "instrument": "nyc instrument --compct=false --complete-copy --delete src instrumented && yarn start --env coverage" }, "private": true, "publishConfig": { @@ -28,7 +30,15 @@ "author": "Sense/Net (http://sensenet.com/)", "license": "GPL-2.0", "homepage": "https://sensenet.com", + "nyc": { + "extends": "nyc-config-tsx", + "all": true, + "reporter": [ + "html" + ] + }, "devDependencies": { + "@cypress/code-coverage": "^3.8.7", "@relative-ci/agent": "^1.4.0", "@types/autosuggest-highlight": "^3.1.0", "@types/react": "^17.0.0", @@ -50,11 +60,15 @@ "html-webpack-plugin": "^4.5.0", "mini-css-extract-plugin": "^1.3.3", "monaco-editor-webpack-plugin": "^2.0.0", + "nyc": "^15.1.0", + "nyc-config-tsx": "^0.1.0", "react-router": "^5.2.0", "react-router-dom": "^5.2.0", + "source-map-support": "^0.5.19", "style-loader": "^2.0.0", "terser-webpack-plugin": "^4.2.2", "ts-loader": "^8.0.12", + "ts-node": "^9.0.0", "url-loader": "^4.1.1", "webpack": "^4.44.2", "webpack-bundle-analyzer": "^4.2.0", @@ -94,4 +108,4 @@ "uuid": "^8.3.2" }, "typings": "./dist/index.d.ts" -} +} \ No newline at end of file diff --git a/apps/sensenet/webpack.dev.js b/apps/sensenet/webpack.dev.js index 329d2c94f..66aa221b0 100644 --- a/apps/sensenet/webpack.dev.js +++ b/apps/sensenet/webpack.dev.js @@ -1,42 +1,49 @@ const HtmlWebpackPlugin = require('html-webpack-plugin') const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin') -const { merge } = require('webpack-merge') +const { customizeArray, mergeWithCustomize } = require('webpack-merge') const common = require('./webpack.common.js') -module.exports = merge(common, { - mode: 'development', - devtool: 'cheap-module-eval-source-map', - devServer: { - historyApiFallback: true, - open: true, - }, - output: { - filename: 'static/js/bundle.js', - chunkFilename: 'static/js/[name].chunk.js', - }, - plugins: [ - new ForkTsCheckerWebpackPlugin({ - eslint: { enabled: true, files: './src/**/*.{ts,tsx,js,jsx}' }, +module.exports = (env) => { + return mergeWithCustomize({ + customizeArray: customizeArray({ + entry: 'replace', }), - new HtmlWebpackPlugin({ - template: './index.html', - favicon: './src/assets/favicon.ico', - }), - ], - module: { - rules: [ - { - test: /\.css$/, - use: [ - require.resolve('style-loader'), - { - loader: require.resolve('css-loader'), - options: { - importLoaders: 1, - }, - }, - ], - }, + })(common, { + entry: env.coverage ? ['./instrumented/index.tsx'] : ['./src/index.tsx'], + mode: 'development', + devtool: 'cheap-module-eval-source-map', + devServer: { + historyApiFallback: true, + open: true, + }, + output: { + filename: 'static/js/bundle.js', + chunkFilename: 'static/js/[name].chunk.js', + }, + plugins: [ + new ForkTsCheckerWebpackPlugin({ + eslint: { enabled: true, files: './src/**/*.{ts,tsx,js,jsx}' }, + }), + new HtmlWebpackPlugin({ + template: './index.html', + favicon: './src/assets/favicon.ico', + }), ], - }, -}) + module: { + rules: [ + { + test: /\.css$/, + use: [ + require.resolve('style-loader'), + { + loader: require.resolve('css-loader'), + options: { + importLoaders: 1, + }, + }, + ], + }, + ], + }, + }) +} diff --git a/yarn.lock b/yarn.lock index 773b2f5b4..301afe457 100644 --- a/yarn.lock +++ b/yarn.lock @@ -43,6 +43,26 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/core@7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.5.tgz#081f97e8ffca65a9b4b0fdc7e274e703f000c06a" + integrity sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.4.4" + "@babel/helpers" "^7.4.4" + "@babel/parser" "^7.4.5" + "@babel/template" "^7.4.4" + "@babel/traverse" "^7.4.5" + "@babel/types" "^7.4.4" + convert-source-map "^1.1.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.11" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + "@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.7.5", "@babel/core@^7.8.4", "@babel/core@^7.9.0": version "7.12.10" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.10.tgz#b79a2e1b9f70ed3d84bbfb6d8c4ef825f606bccd" @@ -64,7 +84,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.12.1", "@babel/generator@^7.12.10": +"@babel/generator@^7.12.1", "@babel/generator@^7.12.10", "@babel/generator@^7.4.4": version "7.12.10" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.10.tgz#2b188fc329fb8e4f762181703beffc0fe6df3460" integrity sha512-6mCdfhWgmqLdtTkhXjnIz0LcdVCd26wS2JXRtj2XY0u5klDsXBREA/pG5NVOuVnF2LUrBGNFtQkIqqTbblg0ww== @@ -115,7 +135,7 @@ browserslist "^4.14.5" semver "^5.5.0" -"@babel/helper-create-class-features-plugin@^7.12.1": +"@babel/helper-create-class-features-plugin@^7.12.1", "@babel/helper-create-class-features-plugin@^7.3.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz#3c45998f431edd4a9214c5f1d3ad1448a6137f6e" integrity sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w== @@ -274,7 +294,7 @@ "@babel/traverse" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/helpers@^7.12.1", "@babel/helpers@^7.12.5": +"@babel/helpers@^7.12.1", "@babel/helpers@^7.12.5", "@babel/helpers@^7.4.4": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== @@ -297,7 +317,12 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.10.tgz#824600d59e96aea26a5a2af5a9d812af05c3ae81" integrity sha512-PJdRPwyoOqFAWfLytxrWwGrAxghCgh/yTNCYciOz8QgjflA7aZhECPZAa2VUedKg2+QMWkI0L9lynh2SNmNEgA== -"@babel/plugin-proposal-async-generator-functions@^7.12.1": +"@babel/parser@^7.4.5": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.11.tgz#9ce3595bcd74bc5c466905e86c535b8b25011e79" + integrity sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg== + +"@babel/plugin-proposal-async-generator-functions@^7.12.1", "@babel/plugin-proposal-async-generator-functions@^7.2.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz#dc6c1170e27d8aca99ff65f4925bd06b1c90550e" integrity sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A== @@ -314,6 +339,14 @@ "@babel/helper-create-class-features-plugin" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-proposal-class-properties@7.3.0": + version "7.3.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.3.0.tgz#272636bc0fa19a0bc46e601ec78136a173ea36cd" + integrity sha512-wNHxLkEKTQ2ay0tnsam2z7fGZUi+05ziDJflEt3AZTP3oXLKHJp9HqhfroB/vdMvt3sda9fAbq7FsG8QPDrZBg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.3.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-decorators@7.12.1", "@babel/plugin-proposal-decorators@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.1.tgz#59271439fed4145456c41067450543aee332d15f" @@ -347,7 +380,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.12.1": +"@babel/plugin-proposal-json-strings@^7.12.1", "@babel/plugin-proposal-json-strings@^7.2.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz#d45423b517714eedd5621a9dfdc03fa9f4eb241c" integrity sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw== @@ -387,7 +420,15 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.12.1": +"@babel/plugin-proposal-object-rest-spread@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.2.tgz#6d1859882d4d778578e41f82cc5d7bf3d5daf6c1" + integrity sha512-DjeMS+J2+lpANkYLLO+m6GjoTMygYglKmRe6cDTbFv3L9i6mmiE8fe6B8MtCSLZpVXscD5kn7s6SgtHrDoBWoA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + +"@babel/plugin-proposal-object-rest-spread@^7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.4.4": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== @@ -396,7 +437,7 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-transform-parameters" "^7.12.1" -"@babel/plugin-proposal-optional-catch-binding@^7.12.1": +"@babel/plugin-proposal-optional-catch-binding@^7.12.1", "@babel/plugin-proposal-optional-catch-binding@^7.2.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz#ccc2421af64d3aae50b558a71cede929a5ab2942" integrity sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g== @@ -438,7 +479,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": +"@babel/plugin-syntax-async-generators@^7.2.0", "@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== @@ -501,7 +542,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": +"@babel/plugin-syntax-json-strings@^7.2.0", "@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== @@ -536,14 +577,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": +"@babel/plugin-syntax-object-rest-spread@^7.2.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": +"@babel/plugin-syntax-optional-catch-binding@^7.2.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== @@ -571,14 +612,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-arrow-functions@^7.12.1": +"@babel/plugin-transform-arrow-functions@^7.12.1", "@babel/plugin-transform-arrow-functions@^7.2.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz#8083ffc86ac8e777fbe24b5967c4b2521f3cb2b3" integrity sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-async-to-generator@^7.12.1": +"@babel/plugin-transform-async-to-generator@^7.12.1", "@babel/plugin-transform-async-to-generator@^7.4.4": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz#3849a49cc2a22e9743cbd6b52926d30337229af1" integrity sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A== @@ -587,21 +628,21 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-remap-async-to-generator" "^7.12.1" -"@babel/plugin-transform-block-scoped-functions@^7.12.1": +"@babel/plugin-transform-block-scoped-functions@^7.12.1", "@babel/plugin-transform-block-scoped-functions@^7.2.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz#f2a1a365bde2b7112e0a6ded9067fdd7c07905d9" integrity sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-block-scoping@^7.12.1": +"@babel/plugin-transform-block-scoping@^7.12.1", "@babel/plugin-transform-block-scoping@^7.4.4": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz#f0ee727874b42a208a48a586b84c3d222c2bbef1" integrity sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-classes@^7.12.1": +"@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.4.4": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz#65e650fcaddd3d88ddce67c0f834a3d436a32db6" integrity sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog== @@ -615,14 +656,14 @@ "@babel/helper-split-export-declaration" "^7.10.4" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.12.1": +"@babel/plugin-transform-computed-properties@^7.12.1", "@babel/plugin-transform-computed-properties@^7.2.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz#d68cf6c9b7f838a8a4144badbe97541ea0904852" integrity sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-destructuring@^7.12.1": +"@babel/plugin-transform-destructuring@^7.12.1", "@babel/plugin-transform-destructuring@^7.4.4": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz#b9a570fe0d0a8d460116413cb4f97e8e08b2f847" integrity sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw== @@ -637,14 +678,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-duplicate-keys@^7.12.1": +"@babel/plugin-transform-duplicate-keys@^7.12.1", "@babel/plugin-transform-duplicate-keys@^7.2.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz#745661baba295ac06e686822797a69fbaa2ca228" integrity sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-exponentiation-operator@^7.12.1": +"@babel/plugin-transform-exponentiation-operator@^7.12.1", "@babel/plugin-transform-exponentiation-operator@^7.2.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz#b0f2ed356ba1be1428ecaf128ff8a24f02830ae0" integrity sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug== @@ -668,14 +709,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-flow" "^7.12.1" -"@babel/plugin-transform-for-of@^7.12.1": +"@babel/plugin-transform-for-of@^7.12.1", "@babel/plugin-transform-for-of@^7.4.4": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz#07640f28867ed16f9511c99c888291f560921cfa" integrity sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-function-name@^7.12.1": +"@babel/plugin-transform-function-name@^7.12.1", "@babel/plugin-transform-function-name@^7.4.4": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz#2ec76258c70fe08c6d7da154003a480620eba667" integrity sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw== @@ -683,21 +724,21 @@ "@babel/helper-function-name" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-literals@^7.12.1": +"@babel/plugin-transform-literals@^7.12.1", "@babel/plugin-transform-literals@^7.2.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz#d73b803a26b37017ddf9d3bb8f4dc58bfb806f57" integrity sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.12.1": +"@babel/plugin-transform-member-expression-literals@^7.12.1", "@babel/plugin-transform-member-expression-literals@^7.2.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz#496038602daf1514a64d43d8e17cbb2755e0c3ad" integrity sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-modules-amd@^7.12.1": +"@babel/plugin-transform-modules-amd@^7.12.1", "@babel/plugin-transform-modules-amd@^7.2.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz#3154300b026185666eebb0c0ed7f8415fefcf6f9" integrity sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ== @@ -706,7 +747,7 @@ "@babel/helper-plugin-utils" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.12.1": +"@babel/plugin-transform-modules-commonjs@^7.12.1", "@babel/plugin-transform-modules-commonjs@^7.4.4": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz#fa403124542636c786cf9b460a0ffbb48a86e648" integrity sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag== @@ -716,7 +757,7 @@ "@babel/helper-simple-access" "^7.12.1" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.12.1": +"@babel/plugin-transform-modules-systemjs@^7.12.1", "@babel/plugin-transform-modules-systemjs@^7.4.4": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz#663fea620d593c93f214a464cd399bf6dc683086" integrity sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q== @@ -727,7 +768,7 @@ "@babel/helper-validator-identifier" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.12.1": +"@babel/plugin-transform-modules-umd@^7.12.1", "@babel/plugin-transform-modules-umd@^7.2.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz#eb5a218d6b1c68f3d6217b8fa2cc82fec6547902" integrity sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q== @@ -735,21 +776,21 @@ "@babel/helper-module-transforms" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-named-capturing-groups-regex@^7.12.1": +"@babel/plugin-transform-named-capturing-groups-regex@^7.12.1", "@babel/plugin-transform-named-capturing-groups-regex@^7.4.5": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz#b407f5c96be0d9f5f88467497fa82b30ac3e8753" integrity sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.12.1" -"@babel/plugin-transform-new-target@^7.12.1": +"@babel/plugin-transform-new-target@^7.12.1", "@babel/plugin-transform-new-target@^7.4.4": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz#80073f02ee1bb2d365c3416490e085c95759dec0" integrity sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-object-super@^7.12.1": +"@babel/plugin-transform-object-super@^7.12.1", "@babel/plugin-transform-object-super@^7.2.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz#4ea08696b8d2e65841d0c7706482b048bed1066e" integrity sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw== @@ -757,14 +798,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-replace-supers" "^7.12.1" -"@babel/plugin-transform-parameters@^7.12.1": +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.4.4": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz#d2e963b038771650c922eff593799c96d853255d" integrity sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-property-literals@^7.12.1": +"@babel/plugin-transform-property-literals@^7.12.1", "@babel/plugin-transform-property-literals@^7.2.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz#41bc81200d730abb4456ab8b3fbd5537b59adecd" integrity sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ== @@ -778,7 +819,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-react-display-name@7.12.1", "@babel/plugin-transform-react-display-name@^7.12.1": +"@babel/plugin-transform-react-display-name@7.12.1", "@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz#1cbcd0c3b1d6648c55374a22fc9b6b7e5341c00d" integrity sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w== @@ -794,21 +835,21 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-jsx" "^7.12.1" -"@babel/plugin-transform-react-jsx-self@^7.12.1": +"@babel/plugin-transform-react-jsx-self@^7.0.0", "@babel/plugin-transform-react-jsx-self@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz#ef43cbca2a14f1bd17807dbe4376ff89d714cf28" integrity sha512-FbpL0ieNWiiBB5tCldX17EtXgmzeEZjFrix72rQYeq9X6nUK38HCaxexzVQrZWXanxKJPKVVIU37gFjEQYkPkA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-react-jsx-source@^7.12.1": +"@babel/plugin-transform-react-jsx-source@^7.0.0", "@babel/plugin-transform-react-jsx-source@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz#d07de6863f468da0809edcf79a1aa8ce2a82a26b" integrity sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-react-jsx@^7.12.1", "@babel/plugin-transform-react-jsx@^7.12.10": +"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.12.1", "@babel/plugin-transform-react-jsx@^7.12.10": version "7.12.10" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.10.tgz#a7af3097c73479123594c8c8fe39545abebd44e3" integrity sha512-MM7/BC8QdHXM7Qc1wdnuk73R4gbuOpfrSUgfV/nODGc86sPY1tgmY2M9E9uAnf2e4DOIp8aKGWqgZfQxnTNGuw== @@ -826,14 +867,14 @@ "@babel/helper-annotate-as-pure" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-regenerator@^7.12.1": +"@babel/plugin-transform-regenerator@^7.12.1", "@babel/plugin-transform-regenerator@^7.4.5": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz#5f0a28d842f6462281f06a964e88ba8d7ab49753" integrity sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng== dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-reserved-words@^7.12.1": +"@babel/plugin-transform-reserved-words@^7.12.1", "@babel/plugin-transform-reserved-words@^7.2.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz#6fdfc8cc7edcc42b36a7c12188c6787c873adcd8" integrity sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A== @@ -850,14 +891,24 @@ resolve "^1.8.1" semver "^5.5.1" -"@babel/plugin-transform-shorthand-properties@^7.12.1": +"@babel/plugin-transform-runtime@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.2.0.tgz#566bc43f7d0aedc880eaddbd29168d0f248966ea" + integrity sha512-jIgkljDdq4RYDnJyQsiWbdvGeei/0MOTtSHKO/rfbd/mXBxNpdlulMx49L0HQ4pug1fXannxoqCI+fYSle9eSw== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + resolve "^1.8.1" + semver "^5.5.1" + +"@babel/plugin-transform-shorthand-properties@^7.12.1", "@babel/plugin-transform-shorthand-properties@^7.2.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz#0bf9cac5550fce0cfdf043420f661d645fdc75e3" integrity sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-spread@^7.12.1": +"@babel/plugin-transform-spread@^7.12.1", "@babel/plugin-transform-spread@^7.2.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz#527f9f311be4ec7fdc2b79bb89f7bf884b3e1e1e" integrity sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng== @@ -865,21 +916,21 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" -"@babel/plugin-transform-sticky-regex@^7.12.1", "@babel/plugin-transform-sticky-regex@^7.12.7": +"@babel/plugin-transform-sticky-regex@^7.12.1", "@babel/plugin-transform-sticky-regex@^7.12.7", "@babel/plugin-transform-sticky-regex@^7.2.0": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz#560224613ab23987453948ed21d0b0b193fa7fad" integrity sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-template-literals@^7.12.1": +"@babel/plugin-transform-template-literals@^7.12.1", "@babel/plugin-transform-template-literals@^7.4.4": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz#b43ece6ed9a79c0c71119f576d299ef09d942843" integrity sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-typeof-symbol@^7.12.1", "@babel/plugin-transform-typeof-symbol@^7.12.10": +"@babel/plugin-transform-typeof-symbol@^7.12.1", "@babel/plugin-transform-typeof-symbol@^7.12.10", "@babel/plugin-transform-typeof-symbol@^7.2.0": version "7.12.10" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz#de01c4c8f96580bd00f183072b0d0ecdcf0dec4b" integrity sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA== @@ -902,7 +953,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-unicode-regex@^7.12.1": +"@babel/plugin-transform-unicode-regex@^7.12.1", "@babel/plugin-transform-unicode-regex@^7.4.4": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz#cc9661f61390db5c65e3febaccefd5c6ac3faecb" integrity sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg== @@ -982,6 +1033,60 @@ core-js-compat "^3.6.2" semver "^5.5.0" +"@babel/preset-env@7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.4.5.tgz#2fad7f62983d5af563b5f3139242755884998a58" + integrity sha512-f2yNVXM+FsR5V8UwcFeIHzHWgnhXg3NpRmy0ADvALpnhB0SLbCvrCRr4BLOUYbQNLS+Z0Yer46x9dJXpXewI7w== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-async-generator-functions" "^7.2.0" + "@babel/plugin-proposal-json-strings" "^7.2.0" + "@babel/plugin-proposal-object-rest-spread" "^7.4.4" + "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-syntax-async-generators" "^7.2.0" + "@babel/plugin-syntax-json-strings" "^7.2.0" + "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + "@babel/plugin-transform-arrow-functions" "^7.2.0" + "@babel/plugin-transform-async-to-generator" "^7.4.4" + "@babel/plugin-transform-block-scoped-functions" "^7.2.0" + "@babel/plugin-transform-block-scoping" "^7.4.4" + "@babel/plugin-transform-classes" "^7.4.4" + "@babel/plugin-transform-computed-properties" "^7.2.0" + "@babel/plugin-transform-destructuring" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/plugin-transform-duplicate-keys" "^7.2.0" + "@babel/plugin-transform-exponentiation-operator" "^7.2.0" + "@babel/plugin-transform-for-of" "^7.4.4" + "@babel/plugin-transform-function-name" "^7.4.4" + "@babel/plugin-transform-literals" "^7.2.0" + "@babel/plugin-transform-member-expression-literals" "^7.2.0" + "@babel/plugin-transform-modules-amd" "^7.2.0" + "@babel/plugin-transform-modules-commonjs" "^7.4.4" + "@babel/plugin-transform-modules-systemjs" "^7.4.4" + "@babel/plugin-transform-modules-umd" "^7.2.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.5" + "@babel/plugin-transform-new-target" "^7.4.4" + "@babel/plugin-transform-object-super" "^7.2.0" + "@babel/plugin-transform-parameters" "^7.4.4" + "@babel/plugin-transform-property-literals" "^7.2.0" + "@babel/plugin-transform-regenerator" "^7.4.5" + "@babel/plugin-transform-reserved-words" "^7.2.0" + "@babel/plugin-transform-shorthand-properties" "^7.2.0" + "@babel/plugin-transform-spread" "^7.2.0" + "@babel/plugin-transform-sticky-regex" "^7.2.0" + "@babel/plugin-transform-template-literals" "^7.4.4" + "@babel/plugin-transform-typeof-symbol" "^7.2.0" + "@babel/plugin-transform-unicode-regex" "^7.4.4" + "@babel/types" "^7.4.4" + browserslist "^4.6.0" + core-js-compat "^3.1.1" + invariant "^2.2.2" + js-levenshtein "^1.1.3" + semver "^5.5.0" + "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.8.4", "@babel/preset-env@^7.9.5": version "7.12.10" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.10.tgz#ca981b95f641f2610531bd71948656306905e6ab" @@ -1073,6 +1178,17 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" +"@babel/preset-react@7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.0.0.tgz#e86b4b3d99433c7b3e9e91747e2653958bc6b3c0" + integrity sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-self" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/preset-react@7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.1.tgz#7f022b13f55b6dd82f00f16d1c599ae62985358c" @@ -1140,6 +1256,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@7.3.1": + version "7.3.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.3.1.tgz#574b03e8e8a9898eaf4a872a92ea20b7846f6f2a" + integrity sha512-7jGW8ppV0ant637pIqAcFfQDDH1orEPGJb8aXfUozuCU3QqX7rX4DA8iwrbPrR1hcH0FTTHz47yQnk+bl5xHQA== + dependencies: + regenerator-runtime "^0.12.0" + "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.0", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" @@ -1152,7 +1275,7 @@ resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.12.10.tgz#f77f6750d0ab88c7c23234dd2d2f3800f170a573" integrity sha512-e3sJ7uwwjiGWv7qeATKrP+Mjltr6JEurPh3yR0dBb9ie2YDnKl52lO82f+Ha+HAtyxTHfsPIXwgFmWKsCT2zOQ== -"@babel/template@^7.10.4", "@babel/template@^7.12.7", "@babel/template@^7.3.3": +"@babel/template@^7.10.4", "@babel/template@^7.12.7", "@babel/template@^7.3.3", "@babel/template@^7.4.4": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" integrity sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow== @@ -1255,6 +1378,43 @@ resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-10.1.0.tgz#f0950bba18819512d42f7197e56c518aa491cf18" integrity sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg== +"@cypress/browserify-preprocessor@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@cypress/browserify-preprocessor/-/browserify-preprocessor-3.0.1.tgz#ab86335b0c061d11f5ad7df03f06b1877b836f71" + integrity sha512-sErmFSEr5287bLMRl0POGnyFtJCs/lSk5yxrUIJUIHZ8eDvtTEr0V93xRgLjJVG54gJU4MbpHy1mRPA9VZbtQA== + dependencies: + "@babel/core" "7.4.5" + "@babel/plugin-proposal-class-properties" "7.3.0" + "@babel/plugin-proposal-object-rest-spread" "7.3.2" + "@babel/plugin-transform-runtime" "7.2.0" + "@babel/preset-env" "7.4.5" + "@babel/preset-react" "7.0.0" + "@babel/runtime" "7.3.1" + babel-plugin-add-module-exports "1.0.2" + babelify "10.0.0" + bluebird "3.5.3" + browserify "16.2.3" + coffeeify "3.0.1" + coffeescript "1.12.7" + debug "4.1.1" + fs-extra "9.0.0" + lodash.clonedeep "4.5.0" + through2 "^2.0.0" + watchify "3.11.1" + +"@cypress/code-coverage@^3.8.7": + version "3.8.7" + resolved "https://registry.yarnpkg.com/@cypress/code-coverage/-/code-coverage-3.8.7.tgz#c98decc8253a99cb808c99e70f5c857b76dd1e74" + integrity sha512-+kBKM5SGHe6KlsbKN4I9FebCK7CtylUUQJTQGerfEAKYK7tguEOETxfB+tWT8MxWMgxiR/Ovc0rWsp1ND+KBKQ== + dependencies: + "@cypress/browserify-preprocessor" "3.0.1" + debug "4.3.1" + execa "4.1.0" + globby "11.0.1" + istanbul-lib-coverage "3.0.0" + js-yaml "3.14.1" + nyc "15.1.0" + "@cypress/listr-verbose-renderer@^0.4.1": version "0.4.1" resolved "https://registry.yarnpkg.com/@cypress/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#a77492f4b11dcc7c446a34b3e28721afd33c642a" @@ -4561,7 +4721,7 @@ mkdirp-promise "^5.0.1" mz "^2.5.0" -JSONStream@^1.0.4, JSONStream@^1.3.4: +JSONStream@^1.0.3, JSONStream@^1.0.4, JSONStream@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== @@ -4600,7 +4760,16 @@ acorn-jsx@^5.3.1: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== -acorn-walk@^7.1.1: +acorn-node@^1.2.0, acorn-node@^1.3.0, acorn-node@^1.5.2, acorn-node@^1.6.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" + integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== + dependencies: + acorn "^7.0.0" + acorn-walk "^7.0.0" + xtend "^4.0.2" + +acorn-walk@^7.0.0, acorn-walk@^7.1.1: version "7.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== @@ -4615,7 +4784,7 @@ acorn@^6.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^7.1.0, acorn@^7.1.1, acorn@^7.4.0: +acorn@^7.0.0, acorn@^7.1.0, acorn@^7.1.1, acorn@^7.4.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== @@ -4846,6 +5015,13 @@ app-root-dir@^1.0.2: resolved "https://registry.yarnpkg.com/app-root-dir/-/app-root-dir-1.0.2.tgz#38187ec2dea7577fff033ffcb12172692ff6e118" integrity sha1-OBh+wt6nV3//Az/8sSFyaS/24Rg= +append-transform@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-2.0.0.tgz#99d9d29c7b38391e6f428d28ce136551f0b77e12" + integrity sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg== + dependencies: + default-require-extensions "^3.0.0" + aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -4861,6 +5037,11 @@ arch@^2.1.2: resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== +archy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= + are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" @@ -4869,6 +5050,11 @@ are-we-there-yet@~1.1.2: delegates "^1.0.0" readable-stream "^2.0.6" +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -5047,7 +5233,7 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= -assert@^1.1.1: +assert@^1.1.1, assert@^1.4.0: version "1.5.0" resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== @@ -5286,6 +5472,13 @@ babel-loader@^8.0.6, babel-loader@^8.2.2: make-dir "^3.1.0" schema-utils "^2.6.5" +babel-plugin-add-module-exports@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-1.0.2.tgz#96cd610d089af664f016467fc4567c099cce2d9c" + integrity sha512-4paN7RivvU3Rzju1vGSHWPjO8Y0rI6droWvSFKI6dvEQ4mvoV0zGojnlzVRfI6N8zISo6VERXt3coIuVmzuvNg== + optionalDependencies: + chokidar "^2.0.4" + babel-plugin-add-react-displayname@^0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz#339d4cddb7b65fd62d1df9db9fe04de134122bd5" @@ -5610,6 +5803,11 @@ babel-runtime@^6.26.0: core-js "^2.4.0" regenerator-runtime "^0.11.0" +babelify@10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/babelify/-/babelify-10.0.0.tgz#fe73b1a22583f06680d8d072e25a1e0d1d1d7fb5" + integrity sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg== + babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" @@ -5625,7 +5823,7 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base64-js@^1.0.2, base64-js@^1.3.0: +base64-js@^1.0.2, base64-js@^1.3.0, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -5709,6 +5907,11 @@ blob-util@2.0.2: resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== +bluebird@3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" + integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw== + bluebird@3.7.2, bluebird@^3.3.5, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5, bluebird@^3.7.1, bluebird@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" @@ -5807,11 +6010,37 @@ brorand@^1.0.1: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= +browser-pack@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.1.0.tgz#c34ba10d0b9ce162b5af227c7131c92c2ecd5774" + integrity sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA== + dependencies: + JSONStream "^1.0.3" + combine-source-map "~0.8.0" + defined "^1.0.0" + safe-buffer "^5.1.1" + through2 "^2.0.0" + umd "^3.0.0" + browser-process-hrtime@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== +browser-resolve@^1.11.0: + version "1.11.3" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" + integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== + dependencies: + resolve "1.1.7" + +browser-resolve@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-2.0.0.tgz#99b7304cb392f8d73dba741bb2d7da28c6d7842b" + integrity sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ== + dependencies: + resolve "^1.17.0" + browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" @@ -5866,13 +6095,121 @@ browserify-sign@^4.0.0: readable-stream "^3.6.0" safe-buffer "^5.2.0" -browserify-zlib@^0.2.0: +browserify-zlib@^0.2.0, browserify-zlib@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== dependencies: pako "~1.0.5" +browserify@16.2.3: + version "16.2.3" + resolved "https://registry.yarnpkg.com/browserify/-/browserify-16.2.3.tgz#7ee6e654ba4f92bce6ab3599c3485b1cc7a0ad0b" + integrity sha512-zQt/Gd1+W+IY+h/xX2NYMW4orQWhqSwyV+xsblycTtpOuB27h1fZhhNQuipJ4t79ohw4P4mMem0jp/ZkISQtjQ== + dependencies: + JSONStream "^1.0.3" + assert "^1.4.0" + browser-pack "^6.0.1" + browser-resolve "^1.11.0" + browserify-zlib "~0.2.0" + buffer "^5.0.2" + cached-path-relative "^1.0.0" + concat-stream "^1.6.0" + console-browserify "^1.1.0" + constants-browserify "~1.0.0" + crypto-browserify "^3.0.0" + defined "^1.0.0" + deps-sort "^2.0.0" + domain-browser "^1.2.0" + duplexer2 "~0.1.2" + events "^2.0.0" + glob "^7.1.0" + has "^1.0.0" + htmlescape "^1.1.0" + https-browserify "^1.0.0" + inherits "~2.0.1" + insert-module-globals "^7.0.0" + labeled-stream-splicer "^2.0.0" + mkdirp "^0.5.0" + module-deps "^6.0.0" + os-browserify "~0.3.0" + parents "^1.0.1" + path-browserify "~0.0.0" + process "~0.11.0" + punycode "^1.3.2" + querystring-es3 "~0.2.0" + read-only-stream "^2.0.0" + readable-stream "^2.0.2" + resolve "^1.1.4" + shasum "^1.0.0" + shell-quote "^1.6.1" + stream-browserify "^2.0.0" + stream-http "^2.0.0" + string_decoder "^1.1.1" + subarg "^1.0.0" + syntax-error "^1.1.1" + through2 "^2.0.0" + timers-browserify "^1.0.1" + tty-browserify "0.0.1" + url "~0.11.0" + util "~0.10.1" + vm-browserify "^1.0.0" + xtend "^4.0.0" + +browserify@^16.1.0: + version "16.5.2" + resolved "https://registry.yarnpkg.com/browserify/-/browserify-16.5.2.tgz#d926835e9280fa5fd57f5bc301f2ef24a972ddfe" + integrity sha512-TkOR1cQGdmXU9zW4YukWzWVSJwrxmNdADFbqbE3HFgQWe5wqZmOawqZ7J/8MPCwk/W8yY7Y0h+7mOtcZxLP23g== + dependencies: + JSONStream "^1.0.3" + assert "^1.4.0" + browser-pack "^6.0.1" + browser-resolve "^2.0.0" + browserify-zlib "~0.2.0" + buffer "~5.2.1" + cached-path-relative "^1.0.0" + concat-stream "^1.6.0" + console-browserify "^1.1.0" + constants-browserify "~1.0.0" + crypto-browserify "^3.0.0" + defined "^1.0.0" + deps-sort "^2.0.0" + domain-browser "^1.2.0" + duplexer2 "~0.1.2" + events "^2.0.0" + glob "^7.1.0" + has "^1.0.0" + htmlescape "^1.1.0" + https-browserify "^1.0.0" + inherits "~2.0.1" + insert-module-globals "^7.0.0" + labeled-stream-splicer "^2.0.0" + mkdirp-classic "^0.5.2" + module-deps "^6.2.3" + os-browserify "~0.3.0" + parents "^1.0.1" + path-browserify "~0.0.0" + process "~0.11.0" + punycode "^1.3.2" + querystring-es3 "~0.2.0" + read-only-stream "^2.0.0" + readable-stream "^2.0.2" + resolve "^1.1.4" + shasum "^1.0.0" + shell-quote "^1.6.1" + stream-browserify "^2.0.0" + stream-http "^3.0.0" + string_decoder "^1.1.1" + subarg "^1.0.0" + syntax-error "^1.1.1" + through2 "^2.0.0" + timers-browserify "^1.0.1" + tty-browserify "0.0.1" + url "~0.11.0" + util "~0.10.1" + vm-browserify "^1.0.0" + xtend "^4.0.0" + browserslist@4.10.0: version "4.10.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.10.0.tgz#f179737913eaf0d2b98e4926ac1ca6a15cbcc6a9" @@ -5893,7 +6230,7 @@ browserslist@4.14.2: escalade "^3.0.2" node-releases "^1.1.61" -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.15.0, browserslist@^4.6.2, browserslist@^4.6.4: +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.0, browserslist@^4.6.0, browserslist@^4.6.2, browserslist@^4.6.4: version "4.16.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.0.tgz#410277627500be3cb28a1bfe037586fbedf9488b" integrity sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ== @@ -5904,6 +6241,17 @@ browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4 escalade "^3.1.1" node-releases "^1.1.67" +browserslist@^4.15.0: + version "4.15.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.15.0.tgz#3d48bbca6a3f378e86102ffd017d9a03f122bdb0" + integrity sha512-IJ1iysdMkGmjjYeRlDU8PQejVwxvVO5QOfXH7ylW31GO6LwNRSmm/SgRXtNsEXqMLl2e+2H5eEJ7sfynF8TCaQ== + dependencies: + caniuse-lite "^1.0.30001164" + colorette "^1.2.1" + electron-to-chromium "^1.3.612" + escalade "^3.1.1" + node-releases "^1.1.67" + bs-logger@0.x: version "0.2.6" resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" @@ -5952,6 +6300,22 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" +buffer@^5.0.2: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +buffer@~5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6" + integrity sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + builtin-modules@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" @@ -6046,6 +6410,11 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +cached-path-relative@^1.0.0, cached-path-relative@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.2.tgz#a13df4196d26776220cc3356eb147a52dba2c6db" + integrity sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg== + cachedir@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.2.0.tgz#19afa4305e05d79e417566882e0c8f960f62ff0e" @@ -6056,6 +6425,16 @@ cachedir@^2.3.0: resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== +caching-transform@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-4.0.0.tgz#00d297a4206d71e2163c39eaffa8157ac0651f0f" + integrity sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA== + dependencies: + hasha "^5.0.0" + make-dir "^3.0.0" + package-hash "^4.0.0" + write-file-atomic "^3.0.0" + call-bind@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" @@ -6172,6 +6551,11 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, can resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001166.tgz#ca73e8747acfd16a4fd6c4b784f1b995f9698cf8" integrity sha512-nCL4LzYK7F4mL0TjEMeYavafOGnBa98vTudH5c8lW9izUjnB99InG6pmC1ElAI1p0GlyZajv4ltUdFXvOHIl1A== +caniuse-lite@^1.0.30001164: + version "1.0.30001165" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001165.tgz#32955490d2f60290bb186bb754f2981917fa744f" + integrity sha512-8cEsSMwXfx7lWSUMA2s08z9dIgsnR5NAqjXP23stdsU3AUWkCr/rr4s4OFtHXn5XXr6+7kam3QFVoYyXNPdJPA== + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -6277,7 +6661,7 @@ cheerio@^1.0.0-rc.3: lodash "^4.15.0" parse5 "^3.0.1" -chokidar@^2.1.8: +chokidar@^2.0.4, chokidar@^2.1.1, chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== @@ -6513,6 +6897,19 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= +coffeeify@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/coffeeify/-/coffeeify-3.0.1.tgz#5e2753000c50bd24c693115f33864248dd11136c" + integrity sha512-Qjnr7UX6ldK1PHV7wCnv7AuCd4q19KTUtwJnu/6JRJB4rfm12zvcXtKdacUoePOKr1I4ka/ydKiwWpNAdsQb0g== + dependencies: + convert-source-map "^1.3.0" + through2 "^2.0.0" + +coffeescript@1.12.7: + version "1.12.7" + resolved "https://registry.yarnpkg.com/coffeescript/-/coffeescript-1.12.7.tgz#e57ee4c4867cf7f606bfc4a0f2d550c0981ddd27" + integrity sha512-pLXHFxQMPklVoEekowk8b3erNynC+DVJzChxS/LCBBgR6/8AJkHivkm//zbowcfc7BTCAjryuhx6gPqPRfsFoA== + collect-v8-coverage@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" @@ -6584,6 +6981,16 @@ columnify@^1.5.4: strip-ansi "^3.0.0" wcwidth "^1.0.0" +combine-source-map@^0.8.0, combine-source-map@~0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b" + integrity sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos= + dependencies: + convert-source-map "~1.1.0" + inline-source-map "~0.6.0" + lodash.memoize "~3.0.3" + source-map "~0.5.3" + combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -6716,7 +7123,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.5.0, concat-stream@^1.6.2: +concat-stream@^1.5.0, concat-stream@^1.6.0, concat-stream@^1.6.1, concat-stream@^1.6.2, concat-stream@~1.6.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -6764,7 +7171,7 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= -constants-browserify@^1.0.0: +constants-browserify@^1.0.0, constants-browserify@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= @@ -6874,7 +7281,7 @@ conventional-recommended-bump@^5.0.0: meow "^4.0.0" q "^1.5.1" -convert-source-map@1.7.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-source-map@1.7.0, convert-source-map@^1.1.0, convert-source-map@^1.3.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== @@ -6886,6 +7293,11 @@ convert-source-map@^0.3.3: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190" integrity sha1-8dgClQr33SYxof6+BZZVDIarMZA= +convert-source-map@~1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" + integrity sha1-SCnId+n+SbMWHzvzZziI4gRpmGA= + convert-units@^2.3.4: version "2.3.4" resolved "https://registry.yarnpkg.com/convert-units/-/convert-units-2.3.4.tgz#a279f4b3cb9b5d5094beba61abc742dcb46a180d" @@ -6945,6 +7357,14 @@ copy-webpack-plugin@^6.2.1: serialize-javascript "^5.0.1" webpack-sources "^1.4.3" +core-js-compat@^3.1.1: + version "3.8.2" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.2.tgz#3717f51f6c3d2ebba8cbf27619b57160029d1d4c" + integrity sha512-LO8uL9lOIyRRrQmZxHZFl1RV+ZbcsAkFWTktn5SmH40WgLtSNYN4m4W2v9ONT147PxBY/XrRhrWq8TlvObyUjQ== + dependencies: + browserslist "^4.16.0" + semver "7.0.0" + core-js-compat@^3.6.2, core-js-compat@^3.8.0: version "3.8.1" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.1.tgz#8d1ddd341d660ba6194cbe0ce60f4c794c87a36e" @@ -7118,7 +7538,7 @@ cross-spawn@^6.0.0: shebang-command "^1.2.0" which "^1.2.9" -crypto-browserify@^3.11.0: +crypto-browserify@^3.0.0, crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== @@ -7542,6 +7962,11 @@ dargs@^4.0.1: dependencies: number-is-nan "^1.0.0" +dash-ast@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dash-ast/-/dash-ast-1.0.0.tgz#12029ba5fb2f8aa6f0a861795b23c1b4b6c27d37" + integrity sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA== + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -7582,6 +8007,13 @@ debug@3.1.0, debug@=3.1.0: dependencies: ms "2.0.0" +debug@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + debug@4.3.1, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" @@ -7674,6 +8106,13 @@ default-gateway@^4.2.0: execa "^1.0.0" ip-regex "^2.1.0" +default-require-extensions@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-3.0.0.tgz#e03f93aac9b2b6443fc52e5e4a37b3ad9ad8df96" + integrity sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg== + dependencies: + strip-bom "^4.0.0" + defaults@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" @@ -7710,6 +8149,11 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= + del@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" @@ -7748,6 +8192,16 @@ deprecation@^2.0.0, deprecation@^2.3.1: resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== +deps-sort@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.1.tgz#9dfdc876d2bcec3386b6829ac52162cda9fa208d" + integrity sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw== + dependencies: + JSONStream "^1.0.3" + shasum-object "^1.0.0" + subarg "^1.0.0" + through2 "^2.0.0" + des.js@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" @@ -7807,6 +8261,15 @@ detect-port@^1.3.0: address "^1.0.1" debug "^2.6.0" +detective@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b" + integrity sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg== + dependencies: + acorn-node "^1.6.1" + defined "^1.0.0" + minimist "^1.1.1" + dezalgo@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" @@ -7825,6 +8288,11 @@ diff-sequences@^26.6.2: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -7957,7 +8425,7 @@ dom-walk@^0.1.0: resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== -domain-browser@^1.1.1: +domain-browser@^1.1.1, domain-browser@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== @@ -8086,6 +8554,13 @@ downshift@^6.0.6: prop-types "^15.7.2" react-is "^17.0.1" +duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= + dependencies: + readable-stream "^2.0.2" + duplexer@^0.1.1, duplexer@^0.1.2, duplexer@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" @@ -8131,6 +8606,11 @@ electron-to-chromium@^1.3.378, electron-to-chromium@^1.3.564, electron-to-chromi resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.625.tgz#a7bd18da4dc732c180b2e95e0e296c0bf22f3bd6" integrity sha512-CsLk/r0C9dAzVPa9QF74HIXduxaucsaRfqiOYvIv2PRhvyC6EOqc/KbpgToQuDVgPf3sNAFZi3iBu4vpGOwGag== +electron-to-chromium@^1.3.612: + version "1.3.621" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.621.tgz#0bbe2100ef0b28f88d0b1101fbdf433312f69be0" + integrity sha512-FeIuBzArONbAmKmZIsZIFGu/Gc9AVGlVeVbhCq+G2YIl6QkT0TDn2HKN/FMf1btXEB9kEmIuQf3/lBTVAbmFOg== + elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" @@ -8435,6 +8915,11 @@ es5-shim@^4.5.13: resolved "https://registry.yarnpkg.com/es5-shim/-/es5-shim-4.5.14.tgz#90009e1019d0ea327447cb523deaff8fe45697ef" integrity sha512-7SwlpL+2JpymWTt8sNLuC2zdhhc+wrfe5cMPI2j0o6WsPdfAiPwmFy2f0AocPB4RQVBOZ9kNTgi5YF7TdhkvEg== +es6-error@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + es6-iterator@2.0.3, es6-iterator@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" @@ -8814,6 +9299,11 @@ eventemitter3@^4.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +events@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/events/-/events-2.1.0.tgz#2a9a1e18e6106e0e812aa9ebd4a819b3c29c0ba5" + integrity sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg== + events@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" @@ -8855,20 +9345,7 @@ execa@3.4.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^4.0.0, execa@^4.0.2, execa@^4.1.0: +execa@4.1.0, execa@^4.0.0, execa@^4.0.2, execa@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== @@ -8883,6 +9360,19 @@ execa@^4.0.0, execa@^4.0.2, execa@^4.1.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + executable@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" @@ -9097,6 +9587,11 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fast-safe-stringify@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" + integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== + fastq@^1.6.0: version "1.9.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.9.0.tgz#e16a72f338eaca48e91b5c23593bcc2ef66b7947" @@ -9272,7 +9767,7 @@ find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: make-dir "^2.0.0" pkg-dir "^3.0.0" -find-cache-dir@^3.3.1: +find-cache-dir@^3.2.0, find-cache-dir@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== @@ -9391,6 +9886,14 @@ for-in@^1.0.2: resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= +foreground-child@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" + integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^3.0.2" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -9504,6 +10007,11 @@ from@~0: resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4= +fromentries@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" + integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== + fs-extra@8.1.0, fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -9513,6 +10021,16 @@ fs-extra@8.1.0, fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.0.tgz#b6afc31036e247b2466dc99c29ae797d5d4580a3" + integrity sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + fs-extra@^0.30.0: version "0.30.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" @@ -9649,6 +10167,11 @@ gensync@^1.0.0-beta.1: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== +get-assigned-identifiers@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz#6dbf411de648cbaf8d9169ebb0d2d576191e2ff1" + integrity sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ== + get-caller-file@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -9830,7 +10353,7 @@ glob@7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.0.0, glob@^7.0.3, glob@^7.1.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -10135,6 +10658,14 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" +hasha@^5.0.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/hasha/-/hasha-5.2.2.tgz#a48477989b3b327aea3c04f53096d816d97522a1" + integrity sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ== + dependencies: + is-stream "^2.0.0" + type-fest "^0.8.0" + hast-util-parse-selector@^2.0.0: version "2.2.5" resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" @@ -10327,6 +10858,11 @@ html-webpack-plugin@4.5.0, html-webpack-plugin@^4.2.1, html-webpack-plugin@^4.5. tapable "^1.1.3" util.promisify "1.0.0" +htmlescape@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" + integrity sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E= + htmlparser2@^3.3.0, htmlparser2@^3.9.1: version "3.10.1" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" @@ -10511,7 +11047,7 @@ identity-obj-proxy@3.0.0: dependencies: harmony-reflect "^1.4.6" -ieee754@^1.1.4: +ieee754@^1.1.13, ieee754@^1.1.4: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -10685,6 +11221,13 @@ init-package-json@^1.10.3: validate-npm-package-license "^3.0.1" validate-npm-package-name "^3.0.0" +inline-source-map@~0.6.0: + version "0.6.2" + resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" + integrity sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU= + dependencies: + source-map "~0.5.3" + inquirer@6.5.2, inquirer@^6.2.0: version "6.5.2" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" @@ -10742,6 +11285,22 @@ inquirer@^7.0.0: strip-ansi "^6.0.0" through "^2.3.6" +insert-module-globals@^7.0.0: + version "7.2.1" + resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.2.1.tgz#d5e33185181a4e1f33b15f7bf100ee91890d5cb3" + integrity sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg== + dependencies: + JSONStream "^1.0.3" + acorn-node "^1.5.2" + combine-source-map "^0.8.0" + concat-stream "^1.6.1" + is-buffer "^1.1.0" + path-is-absolute "^1.0.1" + process "~0.11.0" + through2 "^2.0.0" + undeclared-identifiers "^1.1.2" + xtend "^4.0.0" + internal-ip@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" @@ -10769,7 +11328,7 @@ interpret@^2.0.0, interpret@^2.2.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== -invariant@^2.2.3, invariant@^2.2.4: +invariant@^2.2.2, invariant@^2.2.3, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -10866,7 +11425,7 @@ is-boolean-object@^1.0.1: dependencies: call-bind "^1.0.0" -is-buffer@^1.1.5: +is-buffer@^1.1.0, is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== @@ -11340,11 +11899,18 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -istanbul-lib-coverage@^3.0.0: +istanbul-lib-coverage@3.0.0, istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.0.0-alpha.1: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== +istanbul-lib-hook@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz#8f84c9434888cc6b1d0a9d7092a76d239ebf0cc6" + integrity sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ== + dependencies: + append-transform "^2.0.0" + istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" @@ -11355,6 +11921,19 @@ istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: istanbul-lib-coverage "^3.0.0" semver "^6.3.0" +istanbul-lib-processinfo@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz#e1426514662244b2f25df728e8fd1ba35fe53b9c" + integrity sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw== + dependencies: + archy "^1.0.0" + cross-spawn "^7.0.0" + istanbul-lib-coverage "^3.0.0-alpha.1" + make-dir "^3.0.0" + p-map "^3.0.0" + rimraf "^3.0.0" + uuid "^3.3.3" + istanbul-lib-report@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" @@ -11906,6 +12485,11 @@ joi@^17.1.1: "@sideway/formula" "^3.0.0" "@sideway/pinpoint" "^2.0.0" +js-levenshtein@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" + integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -11916,7 +12500,7 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@^3.13.1: +js-yaml@3.14.1, js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -12001,6 +12585,13 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= +json-stable-stringify@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" + integrity sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U= + dependencies: + jsonify "~0.0.0" + json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -12011,7 +12602,7 @@ json3@^3.3.2: resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== -json5@2.x, json5@^2.1.1, json5@^2.1.2: +json5@2.x, json5@^2.1.0, json5@^2.1.1, json5@^2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== @@ -12048,6 +12639,11 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= + jsonparse@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" @@ -12193,6 +12789,14 @@ klona@^2.0.4: resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== +labeled-stream-splicer@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz#42a41a16abcd46fd046306cf4f2c3576fffb1c21" + integrity sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw== + dependencies: + inherits "^2.0.1" + stream-splicer "^2.0.0" + language-subtag-registry@~0.3.2: version "0.3.21" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a" @@ -12556,7 +13160,7 @@ lodash.camelcase@^4.3.0: resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= -lodash.clonedeep@^4.5.0: +lodash.clonedeep@4.5.0, lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= @@ -12649,6 +13253,11 @@ lodash.memoize@4.x, lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= +lodash.memoize@~3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" + integrity sha1-LcvSwofLwKVcxCMovQxzYVDVPj8= + lodash.noop@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/lodash.noop/-/lodash.noop-2.3.0.tgz#3059d628d51bbf937cd2a0b6fc3a7f212a669c2c" @@ -12862,7 +13471,7 @@ make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: dependencies: semver "^6.0.0" -make-error@1.x: +make-error@1.x, make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== @@ -13275,7 +13884,7 @@ minimist-options@^3.0.1: arrify "^1.0.1" is-plain-obj "^1.1.0" -minimist@1.2.5, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: +minimist@1.2.5, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== @@ -13355,6 +13964,11 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" +mkdirp-classic@^0.5.2: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + mkdirp-promise@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" @@ -13379,6 +13993,27 @@ modify-values@^1.0.0: resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== +module-deps@^6.0.0, module-deps@^6.2.3: + version "6.2.3" + resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-6.2.3.tgz#15490bc02af4b56cf62299c7c17cba32d71a96ee" + integrity sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA== + dependencies: + JSONStream "^1.0.3" + browser-resolve "^2.0.0" + cached-path-relative "^1.0.2" + concat-stream "~1.6.0" + defined "^1.0.0" + detective "^5.2.0" + duplexer2 "^0.1.2" + inherits "^2.0.1" + parents "^1.0.0" + readable-stream "^2.0.2" + resolve "^1.4.0" + stream-combiner2 "^1.1.1" + subarg "^1.0.0" + through2 "^2.0.0" + xtend "^4.0.0" + moment@^2.27.0, moment@^2.29.1: version "2.29.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" @@ -13669,6 +14304,13 @@ node-notifier@^8.0.0: uuid "^8.3.0" which "^2.0.2" +node-preload@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/node-preload/-/node-preload-0.2.1.tgz#c03043bb327f417a18fee7ab7ee57b408a144301" + integrity sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ== + dependencies: + process-on-spawn "^1.0.0" + node-releases@^1.1.52, node-releases@^1.1.61, node-releases@^1.1.67: version "1.1.67" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.67.tgz#28ebfcccd0baa6aad8e8d4d8fe4cbc49ae239c12" @@ -13834,6 +14476,46 @@ nwsapi@^2.2.0: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== +nyc-config-tsx@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/nyc-config-tsx/-/nyc-config-tsx-0.1.0.tgz#617aa0fb2cd6a3449210f2e0edb8945146c89c53" + integrity sha512-uYmVkZPc4O4DrwsERZyPvtqBwEVBlvgdiANUktBnOuIr1Gsghhm4QEiM8587n9byRM/B5e7K+fm5pFOIyJbktA== + dependencies: + "@istanbuljs/schema" "^0.1.2" + +nyc@15.1.0, nyc@^15.1.0: + version "15.1.0" + resolved "https://registry.yarnpkg.com/nyc/-/nyc-15.1.0.tgz#1335dae12ddc87b6e249d5a1994ca4bdaea75f02" + integrity sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A== + dependencies: + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + caching-transform "^4.0.0" + convert-source-map "^1.7.0" + decamelize "^1.2.0" + find-cache-dir "^3.2.0" + find-up "^4.1.0" + foreground-child "^2.0.0" + get-package-type "^0.1.0" + glob "^7.1.6" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-hook "^3.0.0" + istanbul-lib-instrument "^4.0.0" + istanbul-lib-processinfo "^2.0.2" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + make-dir "^3.0.0" + node-preload "^0.2.1" + p-map "^3.0.0" + process-on-spawn "^1.0.0" + resolve-from "^5.0.0" + rimraf "^3.0.0" + signal-exit "^3.0.2" + spawn-wrap "^2.0.0" + test-exclude "^6.0.0" + yargs "^15.0.2" + oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" @@ -14066,7 +14748,7 @@ original@^1.0.0: dependencies: url-parse "^1.4.3" -os-browserify@^0.3.0: +os-browserify@^0.3.0, os-browserify@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= @@ -14102,6 +14784,13 @@ ospath@^1.2.2: resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" integrity sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs= +outpipe@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/outpipe/-/outpipe-1.1.1.tgz#50cf8616365e87e031e29a5ec9339a3da4725fa2" + integrity sha1-UM+GFjZeh+Ax4ppeyTOaPaRyX6I= + dependencies: + shell-quote "^1.4.2" + overlayscrollbars@^1.10.2: version "1.13.0" resolved "https://registry.yarnpkg.com/overlayscrollbars/-/overlayscrollbars-1.13.0.tgz#1edb436328133b94877b558f77966d5497ca36a7" @@ -14259,6 +14948,16 @@ p-waterfall@^1.0.0: dependencies: p-reduce "^1.0.0" +package-hash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-4.0.0.tgz#3537f654665ec3cc38827387fc904c163c54f506" + integrity sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ== + dependencies: + graceful-fs "^4.1.15" + hasha "^5.0.0" + lodash.flattendeep "^4.4.0" + release-zalgo "^1.0.0" + pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" @@ -14293,6 +14992,13 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parents@^1.0.0, parents@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" + integrity sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E= + dependencies: + path-platform "~0.11.15" + parse-asn1@^5.0.0, parse-asn1@^5.1.5: version "5.1.6" resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" @@ -14411,7 +15117,7 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= -path-browserify@0.0.1: +path-browserify@0.0.1, path-browserify@~0.0.0: version "0.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== @@ -14438,7 +15144,7 @@ path-exists@^4.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== -path-is-absolute@^1.0.0: +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= @@ -14463,6 +15169,11 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== +path-platform@~0.11.15: + version "0.11.15" + resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" + integrity sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I= + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -15447,7 +16158,14 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -process@^0.11.10: +process-on-spawn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/process-on-spawn/-/process-on-spawn-1.0.0.tgz#95b05a23073d30a17acfdc92a440efd2baefdc93" + integrity sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg== + dependencies: + fromentries "^1.2.0" + +process@^0.11.10, process@~0.11.0: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= @@ -15628,7 +16346,7 @@ punycode@1.3.2: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= -punycode@^1.2.4: +punycode@^1.2.4, punycode@^1.3.2: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= @@ -15666,7 +16384,7 @@ query-string@^4.1.0: object-assign "^4.1.0" strict-uri-encode "^1.0.0" -querystring-es3@^0.2.0: +querystring-es3@^0.2.0, querystring-es3@~0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= @@ -16379,6 +17097,13 @@ read-cmd-shim@^1.0.1: dependencies: graceful-fs "^4.1.2" +read-only-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0" + integrity sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A= + dependencies: + readable-stream "^2.0.2" + "read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13: version "2.1.2" resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.2.tgz#6992b2b66c7177259feb8eaac73c3acd28b9222a" @@ -16646,6 +17371,11 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== +regenerator-runtime@^0.12.0: + version "0.12.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" + integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg== + regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: version "0.13.7" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" @@ -16718,6 +17448,13 @@ relateurl@^0.2.7: resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= +release-zalgo@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" + integrity sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA= + dependencies: + es6-error "^4.0.1" + remark-parse@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-9.0.0.tgz#4d20a299665880e4f4af5d90b7c7b8a935853640" @@ -16897,6 +17634,11 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= + resolve@1.18.1: version "1.18.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.18.1.tgz#018fcb2c5b207d2a6424aee361c5a266da8f4130" @@ -16905,7 +17647,7 @@ resolve@1.18.1: is-core-module "^2.0.0" path-parse "^1.0.6" -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.3.2, resolve@^1.8.1, resolve@^1.9.0: +resolve@^1.1.4, resolve@^1.1.6, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.8.1, resolve@^1.9.0: version "1.19.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== @@ -17356,7 +18098,7 @@ setprototypeof@1.1.1: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== -sha.js@^2.4.0, sha.js@^2.4.8: +sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== @@ -17381,6 +18123,21 @@ shallowequal@^1.1.0: resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== +shasum-object@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shasum-object/-/shasum-object-1.0.0.tgz#0b7b74ff5b66ecf9035475522fa05090ac47e29e" + integrity sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg== + dependencies: + fast-safe-stringify "^2.0.7" + +shasum@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f" + integrity sha1-5wEjENj0F/TetXEhUOVni4euVl8= + dependencies: + json-stable-stringify "~0.0.0" + sha.js "~2.4.4" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -17405,7 +18162,7 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shell-quote@1.7.2: +shell-quote@1.7.2, shell-quote@^1.4.2, shell-quote@^1.6.1: version "1.7.2" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== @@ -17437,6 +18194,11 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" @@ -17635,7 +18397,7 @@ source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.16, source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.19: +source-map-support@^0.5.16, source-map-support@^0.5.17, source-map-support@^0.5.19, source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.19: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -17653,7 +18415,7 @@ source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, sourc resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.3: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -17673,6 +18435,18 @@ space-separated-tokens@^1.0.0: resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== +spawn-wrap@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-2.0.0.tgz#103685b8b8f9b79771318827aa78650a610d457e" + integrity sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg== + dependencies: + foreground-child "^2.0.0" + is-windows "^1.0.2" + make-dir "^3.0.0" + rimraf "^3.0.0" + signal-exit "^3.0.2" + which "^2.0.1" + spdx-correct@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" @@ -17844,7 +18618,7 @@ store2@^2.7.1: resolved "https://registry.yarnpkg.com/store2/-/store2-2.12.0.tgz#e1f1b7e1a59b6083b2596a8d067f6ee88fd4d3cf" integrity sha512-7t+/wpKLanLzSnQPX8WAcuLCCeuSHoWdQuh9SB3xD0kNOM38DNf+0Oa+wmvxmYueRzkmh6IcdKFtvTa+ecgPDw== -stream-browserify@^2.0.1: +stream-browserify@^2.0.0, stream-browserify@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== @@ -17852,6 +18626,14 @@ stream-browserify@^2.0.1: inherits "~2.0.1" readable-stream "^2.0.2" +stream-combiner2@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" + integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4= + dependencies: + duplexer2 "~0.1.0" + readable-stream "^2.0.2" + stream-combiner@~0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" @@ -17867,7 +18649,7 @@ stream-each@^1.1.0: end-of-stream "^1.1.0" stream-shift "^1.0.0" -stream-http@^2.7.2: +stream-http@^2.0.0, stream-http@^2.7.2: version "2.8.3" resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== @@ -17878,11 +18660,29 @@ stream-http@^2.7.2: to-arraybuffer "^1.0.0" xtend "^4.0.0" +stream-http@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-3.1.1.tgz#0370a8017cf8d050b9a8554afe608f043eaff564" + integrity sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.4" + readable-stream "^3.6.0" + xtend "^4.0.2" + stream-shift@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== +stream-splicer@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.1.tgz#0b13b7ee2b5ac7e0609a7463d83899589a363fcd" + integrity sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg== + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.2" + strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" @@ -18167,6 +18967,13 @@ stylehacks@^4.0.0: postcss "^7.0.0" postcss-selector-parser "^3.0.0" +subarg@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" + integrity sha1-9izxdYHplrSPyWVpn1TAauJouNI= + dependencies: + minimist "^1.1.0" + superstruct@^0.8.3: version "0.8.4" resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.8.4.tgz#478a19649f6b02c6319c02044db6a1f5863c391f" @@ -18253,6 +19060,13 @@ symbol.prototype.description@^1.0.0: has-symbols "^1.0.1" object.getownpropertydescriptors "^2.1.0" +syntax-error@^1.1.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c" + integrity sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w== + dependencies: + acorn-node "^1.2.0" + table-layout@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.1.tgz#8411181ee951278ad0638aea2f779a9ce42894f9" @@ -18514,6 +19328,13 @@ thunky@^1.0.2: resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== +timers-browserify@^1.0.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" + integrity sha1-ycWLV1voQHN1y14kYtrO50NZ9B0= + dependencies: + process "~0.11.0" + timers-browserify@^2.0.4: version "2.0.12" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" @@ -18740,6 +19561,17 @@ ts-loader@^8.0.12: micromatch "^4.0.0" semver "^6.0.0" +ts-node@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.0.0.tgz#e7699d2a110cc8c0d3b831715e417688683460b3" + integrity sha512-/TqB4SnererCDR/vb4S/QvSZvzQMJN8daAslg7MeaiHvD8rDZsSfXmNeNumyZZzMned72Xoq/isQljYSt8Ynfg== + dependencies: + arg "^4.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.17" + yn "3.1.1" + ts-pnp@1.2.0, ts-pnp@^1.1.6: version "1.2.0" resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" @@ -18777,6 +19609,11 @@ tty-browserify@0.0.0: resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= +tty-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" + integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -18828,7 +19665,7 @@ type-fest@^0.6.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== -type-fest@^0.8.1: +type-fest@^0.8.0, type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== @@ -18898,6 +19735,22 @@ umask@^1.1.0: resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= +umd@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.3.tgz#aa9fe653c42b9097678489c01000acb69f0b26cf" + integrity sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow== + +undeclared-identifiers@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz#9254c1d37bdac0ac2b52de4b6722792d2a91e30f" + integrity sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw== + dependencies: + acorn-node "^1.3.0" + dash-ast "^1.0.0" + get-assigned-identifiers "^1.2.0" + simple-concat "^1.0.0" + xtend "^4.0.1" + unfetch@^4.1.0: version "4.2.0" resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" @@ -19097,7 +19950,7 @@ url-parse@^1.4.3: querystringify "^2.1.1" requires-port "^1.0.0" -url@^0.11.0: +url@^0.11.0, url@~0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= @@ -19186,6 +20039,13 @@ util@^0.11.0: dependencies: inherits "2.0.3" +util@~0.10.1: + version "0.10.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" + integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== + dependencies: + inherits "2.0.3" + utila@~0.4: version "0.4.0" resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" @@ -19196,7 +20056,7 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.0.1, uuid@^3.1.0, uuid@^3.3.2, uuid@^3.4.0: +uuid@^3.0.1, uuid@^3.1.0, uuid@^3.3.2, uuid@^3.3.3, uuid@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== @@ -19277,7 +20137,7 @@ vfile@^4.0.0: unist-util-stringify-position "^2.0.0" vfile-message "^2.0.0" -vm-browserify@^1.0.1: +vm-browserify@^1.0.0, vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== @@ -19321,6 +20181,19 @@ warning@^4.0.2, warning@^4.0.3: dependencies: loose-envify "^1.0.0" +watchify@3.11.1: + version "3.11.1" + resolved "https://registry.yarnpkg.com/watchify/-/watchify-3.11.1.tgz#8e4665871fff1ef64c0430d1a2c9d084d9721881" + integrity sha512-WwnUClyFNRMB2NIiHgJU9RQPQNqVeFk7OmZaWf5dC5EnNa0Mgr7imBydbaJ7tGTuPM2hz1Cb4uiBvK9NVxMfog== + dependencies: + anymatch "^2.0.0" + browserify "^16.1.0" + chokidar "^2.1.1" + defined "^1.0.0" + outpipe "^1.1.0" + through2 "^2.0.0" + xtend "^4.0.0" + watchpack-chokidar2@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" @@ -19950,7 +20823,7 @@ xmlchars@^2.2.0: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: +xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== @@ -20037,7 +20910,7 @@ yargs@^14.2.2: y18n "^4.0.0" yargs-parser "^15.0.1" -yargs@^15.4.1: +yargs@^15.0.2, yargs@^15.4.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== @@ -20062,6 +20935,11 @@ yauzl@^2.10.0: buffer-crc32 "~0.2.3" fd-slicer "~1.1.0" +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" From b38c6fff1b84383060d7d8c3904b0feefc201cf6 Mon Sep 17 00:00:00 2001 From: "eniko.pusztai" Date: Wed, 13 Jan 2021 13:24:42 +0100 Subject: [PATCH 03/11] remove santas hat (#1114) --- apps/sensenet/src/components/appbar/desktop-app-bar.tsx | 2 +- apps/sensenet/src/components/dashboard/subscription-widget.tsx | 2 +- apps/sensenet/src/components/login/auth-override-skeleton.tsx | 2 +- apps/sensenet/src/components/login/login-page.tsx | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/sensenet/src/components/appbar/desktop-app-bar.tsx b/apps/sensenet/src/components/appbar/desktop-app-bar.tsx index 17ec6a645..20c28d8a0 100644 --- a/apps/sensenet/src/components/appbar/desktop-app-bar.tsx +++ b/apps/sensenet/src/components/appbar/desktop-app-bar.tsx @@ -4,7 +4,7 @@ import Menu from '@material-ui/icons/Menu' import clsx from 'clsx' import React, { useContext } from 'react' import { Link } from 'react-router-dom' -import logo from '../../assets/sensenet-icon-32_hat.png' +import logo from '../../assets/sensenet-icon-32.png' import { ResponsivePersonalSettings } from '../../context' import { globals, useGlobalStyles } from '../../globalStyles' import { CommandPalette } from '../command-palette/CommandPalette' diff --git a/apps/sensenet/src/components/dashboard/subscription-widget.tsx b/apps/sensenet/src/components/dashboard/subscription-widget.tsx index 5d269c75d..822a51567 100644 --- a/apps/sensenet/src/components/dashboard/subscription-widget.tsx +++ b/apps/sensenet/src/components/dashboard/subscription-widget.tsx @@ -1,6 +1,6 @@ import { Button, createStyles, Grid, Link, makeStyles, Paper, Typography } from '@material-ui/core' import React from 'react' -import logo from '../../assets/sensenet-icon-32_hat.png' +import logo from '../../assets/sensenet-icon-32.png' import { useLocalization } from '../../hooks' import { DashboardSubscription, DashboardVersion } from './types' import { round, useWidgetStyles } from '.' diff --git a/apps/sensenet/src/components/login/auth-override-skeleton.tsx b/apps/sensenet/src/components/login/auth-override-skeleton.tsx index ba1f8b610..60ed042bb 100644 --- a/apps/sensenet/src/components/login/auth-override-skeleton.tsx +++ b/apps/sensenet/src/components/login/auth-override-skeleton.tsx @@ -1,7 +1,7 @@ import { AppBar, Button, Container, createStyles, makeStyles, Toolbar, Typography } from '@material-ui/core' import React from 'react' import { NavLink } from 'react-router-dom' -import logo from '../../assets/sensenet-icon-32_hat.png' +import logo from '../../assets/sensenet-icon-32.png' import { globals, useGlobalStyles } from '../../globalStyles' const useStyles = makeStyles(() => diff --git a/apps/sensenet/src/components/login/login-page.tsx b/apps/sensenet/src/components/login/login-page.tsx index f578fd04a..8f7e66f68 100644 --- a/apps/sensenet/src/components/login/login-page.tsx +++ b/apps/sensenet/src/components/login/login-page.tsx @@ -13,7 +13,7 @@ import { import clsx from 'clsx' import React, { useState } from 'react' import { Link } from 'react-router-dom' -import snLogo from '../../assets/sensenet-icon-32_hat.png' +import snLogo from '../../assets/sensenet-icon-32.png' import { globals, useGlobalStyles } from '../../globalStyles' import { useLocalization } from '../../hooks' From 1e30981b0c1dc5f597cde6ebae716f855fbef5ca Mon Sep 17 00:00:00 2001 From: Zoltan Takacs Date: Mon, 18 Jan 2021 08:39:53 +0100 Subject: [PATCH 04/11] Type of items in ContentList is overridable (#1139) * Type of items in ContentList is overridable * revert unwanted change --- .../src/components/ContentBreadcrumbs.tsx | 12 +++--- .../components/content-list/content-list.tsx | 38 +++++++++---------- .../src/components/search/saved-queries.tsx | 4 +- .../src/context/PersonalSettingsContext.tsx | 3 +- .../notes/listcontrols/ContentList.md | 6 +-- .../ContentList/CellTemplates/CellProps.tsx | 2 +- .../ContentList/CellTemplates/DateCell.tsx | 2 +- .../ContentList/CellTemplates/RowCheckBox.tsx | 2 +- .../src/ContentList/ContentList.tsx | 16 ++++---- .../ContentList/content-list-base-props.ts | 2 +- .../src/ContentList/virtualized-table.tsx | 6 +-- 11 files changed, 47 insertions(+), 46 deletions(-) diff --git a/apps/sensenet/src/components/ContentBreadcrumbs.tsx b/apps/sensenet/src/components/ContentBreadcrumbs.tsx index 2e7fe09c0..76d756f1b 100644 --- a/apps/sensenet/src/components/ContentBreadcrumbs.tsx +++ b/apps/sensenet/src/components/ContentBreadcrumbs.tsx @@ -23,14 +23,14 @@ const useStyles = makeStyles((theme: Theme) => { }) }) -type ContentBreadcrumbsProps = { - onItemClick?: (item: BreadcrumbItem) => void +type ContentBreadcrumbsProps = { + onItemClick?: (item: BreadcrumbItem) => void batchActions?: boolean } -export const ContentBreadcrumbs = (props: ContentBreadcrumbsProps) => { - const ancestors = useContext(CurrentAncestorsContext) - const parent = useContext(CurrentContentContext) +export const ContentBreadcrumbs = (props: ContentBreadcrumbsProps) => { + const ancestors = useContext(CurrentAncestorsContext) as T[] + const parent = useContext(CurrentContentContext) as T const uiSettings = useContext(ResponsivePersonalSettings) const repository = useRepository() const history = useHistory() @@ -53,7 +53,7 @@ export const ContentBreadcrumbs = (props: ContentBreadcrumbsProps) => { return ( <> - items={[ ...ancestors.map((content) => ({ displayName: content.DisplayName || content.Name, diff --git a/apps/sensenet/src/components/content-list/content-list.tsx b/apps/sensenet/src/components/content-list/content-list.tsx index 407568056..89b7bbb2e 100644 --- a/apps/sensenet/src/components/content-list/content-list.tsx +++ b/apps/sensenet/src/components/content-list/content-list.tsx @@ -56,20 +56,20 @@ const useStyles = makeStyles(() => { }) }) -export interface ContentListProps { +export interface ContentListProps { enableBreadcrumbs?: boolean hideHeader?: boolean disableSelection?: boolean parentIdOrPath: number | string - onParentChange: (newParent: GenericContent) => void + onParentChange: (newParent: T) => void onTabRequest?: () => void - onActiveItemChange?: (item: GenericContent) => void - onActivateItem: (item: GenericContent) => void + onActiveItemChange?: (item: T) => void + onActivateItem: (item: T) => void style?: React.CSSProperties containerRef?: (r: HTMLDivElement | null) => void - fieldsToDisplay?: Array + fieldsToDisplay?: Array> schema?: string - onSelectionChange?: (sel: GenericContent[]) => void + onSelectionChange?: (sel: T[]) => void onFocus?: () => void containerProps?: React.DetailedHTMLProps, HTMLDivElement> } @@ -83,11 +83,11 @@ export const isReferenceField = (fieldName: string, repo: Repository, schema = ' const rowHeightConst = 57 const headerHeightConst = 42 -export const ContentList: React.FunctionComponent = (props) => { +export const ContentList = (props: ContentListProps) => { const selectionService = useSelectionService() const parentContent = useContext(CurrentContentContext) - const children = useContext(CurrentChildrenContext) - const ancestors = useContext(CurrentAncestorsContext) + const children = useContext(CurrentChildrenContext) as T[] + const ancestors = useContext(CurrentAncestorsContext) as T[] const device = useContext(ResponsiveContext) const personalSettings = useContext(ResponsivePersonalSettings) const loadSettings = useContext(LoadSettingsContext) @@ -97,8 +97,8 @@ export const ContentList: React.FunctionComponent = (props) => const { openDialog } = useDialog() const logger = useLogger('ContentList') const localization = useLocalization() - const [selected, setSelected] = useState([]) - const [activeContent, setActiveContent] = useState(children[0]) + const [selected, setSelected] = useState([]) + const [activeContent, setActiveContent] = useState(children[0]) const [isFocused, setIsFocused] = useState(true) const [isContextMenuOpened, setIsContextMenuOpened] = useState(false) const [schema, setSchema] = useState(repo.schemas.getSchemaByName(props.schema || 'GenericContent')) @@ -107,11 +107,11 @@ export const ContentList: React.FunctionComponent = (props) => left: 0, }) const loadChildrenSettingsOrderBy = loadSettings?.loadChildrenSettings.orderby - const [currentOrder, setCurrentOrder] = useState( - ((loadChildrenSettingsOrderBy && loadChildrenSettingsOrderBy[0][0]) as keyof GenericContent) || 'DisplayName', + const [currentOrder, setCurrentOrder] = useState( + (loadChildrenSettingsOrderBy?.[0][0] as keyof T) || 'DisplayName', ) const [currentDirection, setCurrentDirection] = useState<'asc' | 'desc'>( - (loadChildrenSettingsOrderBy && (loadChildrenSettingsOrderBy[0][1] as any)) || 'asc', + (loadChildrenSettingsOrderBy?.[0][1] as 'asc' | 'desc') || 'asc', ) useEffect(() => { @@ -139,7 +139,7 @@ export const ContentList: React.FunctionComponent = (props) => ...loadSettings.loadChildrenSettings, expand: [ 'CheckedOutTo', - ...fields.reduce((referenceFields, fieldName) => { + ...(fields as string[]).reduce((referenceFields, fieldName) => { if (fieldName.includes('/')) { const splittedFieldName = fieldName.split('/') if (splittedFieldName.length === 2 && splittedFieldName[1] === '') { @@ -185,7 +185,7 @@ export const ContentList: React.FunctionComponent = (props) => const onOpenFunc = () => setIsContextMenuOpened(true) const handleActivateItem = useCallback( - (item: GenericContent) => { + (item: T) => { if (item.IsFolder) { props.onParentChange(item) } else { @@ -303,14 +303,14 @@ export const ContentList: React.FunctionComponent = (props) => setCurrentDirection(dir) } - const onItemDoubleClickFunc = (rowMouseEventHandlerParams: { rowData: GenericContent }) => + const onItemDoubleClickFunc = (rowMouseEventHandlerParams: { rowData: T }) => handleActivateItem(rowMouseEventHandlerParams.rowData) const getSelectionControl = (isSelected: any, content: any, onChangeCallback: any) => ( ) - const openContext = (ev: React.MouseEvent, rowData: GenericContent) => { + const openContext = (ev: React.MouseEvent, rowData: T) => { ev.preventDefault() ev.stopPropagation() setActiveContent(rowData) @@ -518,7 +518,7 @@ export const ContentList: React.FunctionComponent = (props) =>
{props.enableBreadcrumbs ? (
- props.onParentChange(i.content)} /> + onItemClick={(i) => props.onParentChange(i.content)} />
) : null} diff --git a/apps/sensenet/src/components/search/saved-queries.tsx b/apps/sensenet/src/components/search/saved-queries.tsx index d9ea4dd75..a2e1a700f 100644 --- a/apps/sensenet/src/components/search/saved-queries.tsx +++ b/apps/sensenet/src/components/search/saved-queries.tsx @@ -109,7 +109,7 @@ export default function SavedQueries() { - style={{ height: 'calc(100% - 107px)', overflow: 'auto', @@ -119,7 +119,7 @@ export default function SavedQueries() { onParentChange={() => { // ignore, only queries will be listed }} - onActivateItem={(p: Query) => { + onActivateItem={(p) => { history.push( pathWithQueryParams({ path: PATHS.search.appPath, newParams: { term: p.Query } }), ) diff --git a/apps/sensenet/src/context/PersonalSettingsContext.tsx b/apps/sensenet/src/context/PersonalSettingsContext.tsx index 9aea4936a..bf7dc536b 100644 --- a/apps/sensenet/src/context/PersonalSettingsContext.tsx +++ b/apps/sensenet/src/context/PersonalSettingsContext.tsx @@ -3,7 +3,8 @@ import React, { useEffect, useState } from 'react' import { defaultSettings, PersonalSettings } from '../services/PersonalSettings' export const PersonalSettingsContext = React.createContext(defaultSettings) -export const PersonalSettingsContextProvider: React.StatelessComponent = (props) => { + +export const PersonalSettingsContextProvider: React.FunctionComponent = (props) => { const di = useInjector() const settingsService = di.getInstance(PersonalSettings) const [settings, setSettings] = useState(settingsService.effectiveValue.getValue()) diff --git a/examples/sn-react-component-docs/notes/listcontrols/ContentList.md b/examples/sn-react-component-docs/notes/listcontrols/ContentList.md index cc258b9ce..3d6f373ef 100644 --- a/examples/sn-react-component-docs/notes/listcontrols/ContentList.md +++ b/examples/sn-react-component-docs/notes/listcontrols/ContentList.md @@ -1,8 +1,8 @@ ### Content List -This is a component to display items in a grid with a row for every item and with columns for the given fields of the content. +This is a component to display items in a grid with a row for every item and with columns for the given fields of the content. Type of items is GenericContent by default, but it is customizable by ...> (e.g. ...>). -The cells can have templates to display the related data. There're some Field types which have a default template in the list-controls package (```ActionsCell```, ```DateCell```, ```DisplayNameCell```), all the other types are displayed with the ```DefaultCell```. It is also possible to create and set a fully custom celltemplate based on your needs through the ```fieldComponent``` param. This param has the list component properties as an input so that you are able to reach all the fields, match them by their names and set a custom component to display the related cell. +The cells can have templates to display the related data. There're some Field types which have a default template in the list-controls package (`ActionsCell`, `DateCell`, `DisplayNameCell`), all the other types are displayed with the `DefaultCell`. It is also possible to create and set a fully custom celltemplate based on your needs through the `fieldComponent` param. This param has the list component properties as an input so that you are able to reach all the fields, match them by their names and set a custom component to display the related cell. ```tsx -``` \ No newline at end of file +``` diff --git a/packages/sn-list-controls-react/src/ContentList/CellTemplates/CellProps.tsx b/packages/sn-list-controls-react/src/ContentList/CellTemplates/CellProps.tsx index fcb96958b..2d2f4187c 100644 --- a/packages/sn-list-controls-react/src/ContentList/CellTemplates/CellProps.tsx +++ b/packages/sn-list-controls-react/src/ContentList/CellTemplates/CellProps.tsx @@ -1,7 +1,7 @@ import { FieldSetting, GenericContent } from '@sensenet/default-content-types' import { ContentListProps } from '../ContentList' -export interface CellProps +export interface CellProps extends ContentListProps { content: T field: K diff --git a/packages/sn-list-controls-react/src/ContentList/CellTemplates/DateCell.tsx b/packages/sn-list-controls-react/src/ContentList/CellTemplates/DateCell.tsx index b8487c28f..eb4a2a651 100644 --- a/packages/sn-list-controls-react/src/ContentList/CellTemplates/DateCell.tsx +++ b/packages/sn-list-controls-react/src/ContentList/CellTemplates/DateCell.tsx @@ -7,7 +7,7 @@ interface DateCellProps { virtual?: boolean } -export const DateCell: React.StatelessComponent = (props) => { +export const DateCell: React.FunctionComponent = (props) => { return ( { handleContentSelection: (item: any) => void } -export const RowCheckbox: React.StatelessComponent = (props) => { +export const RowCheckbox: React.FunctionComponent = (props) => { return ( extends ContentListBaseProps { +export interface ContentListProps extends ContentListBaseProps { /** * Contains custom cell template components */ - fieldComponent?: React.StatelessComponent> + fieldComponent?: React.FunctionComponent> /** * Called when a content item is clicked */ @@ -52,7 +52,7 @@ export interface ContentListProps ext hideHeader?: boolean } -export const ContentList: React.FC> = (props) => { +export const ContentList = (props: ContentListProps) => { const handleSelectAllClick = useCallback(() => { props.onRequestSelectionChange && (props.selected && props.selected.length === props.items.length @@ -62,7 +62,7 @@ export const ContentList: React.FC> = (props) = }, [props.onRequestSelectionChange, props.selected, props.items]) const handleContentSelection = useCallback( - (content: GenericContent) => { + (content: T) => { const selected = props.selected !== undefined && props.selected.length > 0 ? props.selected : [] if (props.onRequestSelectionChange) { if (selected.find((c) => c.Id === content.Id)) { @@ -76,7 +76,7 @@ export const ContentList: React.FC> = (props) = [props.onRequestSelectionChange, props.selected, props.items], ) - const defaultFieldComponents: React.FC> = useCallback( + const defaultFieldComponents: React.FC> = useCallback( (fieldProps) => { switch (fieldProps.field) { case 'DisplayName': @@ -200,8 +200,8 @@ export const ContentList: React.FC> = (props) = ) : null} {props.fieldsToDisplay.map((field) => { const fieldSetting = getSchemaForField(field) - const cellProps: CellProps = { - ...(props as ContentListProps), + const cellProps: CellProps = { + ...props, field, content: item, fieldSetting, @@ -209,7 +209,7 @@ export const ContentList: React.FC> = (props) = } const FieldComponent = props.fieldComponent || defaultFieldComponents - return + return })} ) diff --git a/packages/sn-list-controls-react/src/ContentList/content-list-base-props.ts b/packages/sn-list-controls-react/src/ContentList/content-list-base-props.ts index bb1a3d00a..c144937a3 100644 --- a/packages/sn-list-controls-react/src/ContentList/content-list-base-props.ts +++ b/packages/sn-list-controls-react/src/ContentList/content-list-base-props.ts @@ -37,7 +37,7 @@ export interface ContentListBaseProps /** * Array of fields that should be displayed */ - fieldsToDisplay: Array + fieldsToDisplay: Array> /** * Defines wheter a checkbox per row should be displayed or not */ diff --git a/packages/sn-list-controls-react/src/ContentList/virtualized-table.tsx b/packages/sn-list-controls-react/src/ContentList/virtualized-table.tsx index 45883fd6c..0fd34221d 100644 --- a/packages/sn-list-controls-react/src/ContentList/virtualized-table.tsx +++ b/packages/sn-list-controls-react/src/ContentList/virtualized-table.tsx @@ -56,7 +56,7 @@ export interface VirtualCellProps { fieldSettings: FieldSetting } -interface VirtualizedTableProps extends ContentListBaseProps { +interface VirtualizedTableProps extends ContentListBaseProps { /** * Contains custom cell template components */ @@ -101,7 +101,7 @@ interface VirtualizedTableProps extends ContentListBaseProps { } } -export const VirtualizedTable: React.FC = (props) => { +export const VirtualizedTable = (props: VirtualizedTableProps) => { const classes = useStyles() const handleSelectAllClick = () => { @@ -111,7 +111,7 @@ export const VirtualizedTable: React.FC = (props) => { : props.onRequestSelectionChange(props.items)) } - const handleContentSelection = (content: GenericContent) => { + const handleContentSelection = (content: T) => { const tempSelected = props.selected !== undefined && props.selected.length > 0 ? props.selected : [] if (props.onRequestSelectionChange) { if (tempSelected.find((c) => c.Id === content.Id)) { From 874b2c0688645ceddcbc92ad9f0afb676cd30167 Mon Sep 17 00:00:00 2001 From: Zoltan Takacs Date: Wed, 20 Jan 2021 08:58:52 +0100 Subject: [PATCH 05/11] gzip assets & minify css (#1141) * Minify css * gzip assets --- apps/sensenet/package.json | 4 +++- apps/sensenet/webpack.prod.js | 4 ++++ yarn.lock | 28 +++++++++++++++++++++++++++- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/apps/sensenet/package.json b/apps/sensenet/package.json index 13a97e268..2b5709071 100644 --- a/apps/sensenet/package.json +++ b/apps/sensenet/package.json @@ -50,8 +50,10 @@ "@types/react-virtualized": "^9.21.10", "@types/uuid": "^8.0.1", "clean-webpack-plugin": "^3.0.0", + "compression-webpack-plugin": "6.1.1", "copy-webpack-plugin": "^6.2.1", "css-loader": "^5.0.0", + "css-minimizer-webpack-plugin": "^1.2.0", "cypress": "^6.1.0", "cypress-file-upload": "^4.1.1", "cypress-xpath": "^1.4.0", @@ -108,4 +110,4 @@ "uuid": "^8.3.2" }, "typings": "./dist/index.d.ts" -} \ No newline at end of file +} diff --git a/apps/sensenet/webpack.prod.js b/apps/sensenet/webpack.prod.js index 2f564b083..77347c79a 100644 --- a/apps/sensenet/webpack.prod.js +++ b/apps/sensenet/webpack.prod.js @@ -3,8 +3,10 @@ const { CleanWebpackPlugin } = require('clean-webpack-plugin') const { RelativeCiAgentWebpackPlugin } = require('@relative-ci/agent') const CopyPlugin = require('copy-webpack-plugin') const HtmlWebpackPlugin = require('html-webpack-plugin') +const CssMinimizerPlugin = require('css-minimizer-webpack-plugin') const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin') const MiniCssExtractPlugin = require('mini-css-extract-plugin') +const CompressionPlugin = require('compression-webpack-plugin') const TerserPlugin = require('terser-webpack-plugin') const { merge } = require('webpack-merge') const common = require('./webpack.common.js') @@ -26,6 +28,7 @@ module.exports = merge(common, { keep_fnames: true, }, }), + new CssMinimizerPlugin(), ], }, plugins: [ @@ -53,6 +56,7 @@ module.exports = merge(common, { minifyURLs: true, }, }), + new CompressionPlugin(), new CopyPlugin({ patterns: [ { from: path.resolve(`${__dirname}/_redirects`), to: path.resolve(`${__dirname}/build`) }, diff --git a/yarn.lock b/yarn.lock index 301afe457..ac3328039 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7100,6 +7100,17 @@ compressible@~2.0.16: dependencies: mime-db ">= 1.43.0 < 2" +compression-webpack-plugin@6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-6.1.1.tgz#ae8e4b2ffdb7396bb776e66918d751a20d8ccf0e" + integrity sha512-BEHft9M6lwOqVIQFMS/YJGmeCYXVOakC5KzQk05TFpMBlODByh1qNsZCWjUBxCQhUP9x0WfGidxTbGkjbWO/TQ== + dependencies: + cacache "^15.0.5" + find-cache-dir "^3.3.1" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" + webpack-sources "^1.4.3" + compression@^1.7.4: version "1.7.4" resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" @@ -7658,6 +7669,21 @@ css-mediaquery@^0.1.2: resolved "https://registry.yarnpkg.com/css-mediaquery/-/css-mediaquery-0.1.2.tgz#6a2c37344928618631c54bd33cedd301da18bea0" integrity sha1-aiw3NEkoYYYxxUvTPO3TAdoYvqA= +css-minimizer-webpack-plugin@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-1.2.0.tgz#3e9d75f6bcc16f1eb84d56ebfee124d1e1f2e1c5" + integrity sha512-XU4+PXw7QKAlRGU+fB386YiczAAPtk0kVsB/Qf2nX8GJaOXgTsk/PST8YBExeoD299wheG//MCCKlCD5fykb7Q== + dependencies: + cacache "^15.0.5" + cssnano "^4.1.10" + find-cache-dir "^3.3.1" + jest-worker "^26.3.0" + p-limit "^3.0.2" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" + source-map "^0.6.1" + webpack-sources "^1.4.3" + css-prefers-color-scheme@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz#6f830a2714199d4f0d0d0bb8a27916ed65cff1f4" @@ -12447,7 +12473,7 @@ jest-worker@^24.9.0: merge-stream "^2.0.0" supports-color "^6.1.0" -jest-worker@^26.2.1, jest-worker@^26.5.0, jest-worker@^26.6.2: +jest-worker@^26.2.1, jest-worker@^26.3.0, jest-worker@^26.5.0, jest-worker@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== From 7e92ab43adb90f3ab966ba0da4eb269953ef1ab7 Mon Sep 17 00:00:00 2001 From: Zoltan Takacs Date: Wed, 20 Jan 2021 10:59:18 +0100 Subject: [PATCH 06/11] Picker (#1126) * Picker basic functionality * Picker add new features and fix tests * unit tests * Bug fixes & styling & rename files Co-authored-by: Aniko Litvanyi --- .../src/components/ContentBreadcrumbs.tsx | 14 +- .../context-menu/use-context-menu-actions.ts | 9 +- .../src/components/dialogs/content-picker.tsx | 86 +++--- .../src/components/dialogs/copy-move.tsx | 261 +++++++---------- .../src/components/dialogs/restore.tsx | 4 +- .../src/components/field-controls/index.ts | 1 + .../field-controls/reference-grid.tsx | 19 ++ .../src/components/react-control-mapper.ts | 2 +- apps/sensenet/src/globalStyles.ts | 4 + apps/sensenet/src/localization/default.ts | 8 +- .../src/components/Pickers/PathPicker.tsx | 36 +-- .../stories/pickers/ExampleApp.tsx | 37 +-- .../stories/pickers/Pickers.stories.tsx | 2 +- .../src/fieldcontrols/auto-complete.tsx | 24 +- .../reference-grid/reference-grid.tsx | 81 ++---- .../reference-grid/reference-picker.tsx | 160 ++++------- .../test/reference-grid.test.tsx | 14 +- packages/sn-pickers-react/package.json | 1 + .../src/ListPicker/ListPicker.tsx | 80 ------ .../src/ListPicker/ListPickerProps.ts | 81 ------ .../sn-pickers-react/src/ListPicker/index.ts | 5 - .../sn-pickers-react/src/ListPicker/types.ts | 49 ---- .../src/ListPicker/useListPicker.ts | 104 ------- .../src/components/picker/index.ts | 2 + .../src/components/picker/picker-props.ts | 166 +++++++++++ .../src/components/picker/picker.tsx | 168 +++++++++++ .../src/components/save-button.tsx | 25 ++ .../src/components/search-picker.tsx | 82 ++++++ .../src/components/selection-list.tsx | 62 ++++ .../src/components/show-selected-button.tsx | 24 ++ .../src/components/tree-picker/index.ts | 2 + .../tree-picker}/loaders.ts | 2 +- .../components/tree-picker/tree-picker.tsx | 124 ++++++++ .../src/context/selection.tsx | 41 +++ packages/sn-pickers-react/src/hooks/index.ts | 2 + .../src/hooks/use-selection.ts | 4 + .../src/hooks/use-tree-picker.ts | 109 +++++++ packages/sn-pickers-react/src/index.ts | 7 +- packages/sn-pickers-react/src/types.ts | 6 + .../sn-pickers-react/tests/loaders.test.ts | 2 +- .../sn-pickers-react/tests/mocks/items.ts | 10 +- .../tests/mocks/{Pickers.tsx => pickers.tsx} | 5 +- .../sn-pickers-react/tests/picker.test.tsx | 272 ++++++++++++++++++ .../tests/search-picker.test.tsx | 78 +++++ .../tests/selection-list.test.tsx | 30 ++ ...stPicker.test.tsx => tree-picker.test.tsx} | 38 +-- packages/sn-pickers-react/tsconfig.json | 3 +- .../src/Components/Fields/ReferenceField.tsx | 2 +- 48 files changed, 1544 insertions(+), 804 deletions(-) create mode 100644 apps/sensenet/src/components/field-controls/reference-grid.tsx delete mode 100644 packages/sn-pickers-react/src/ListPicker/ListPicker.tsx delete mode 100644 packages/sn-pickers-react/src/ListPicker/ListPickerProps.ts delete mode 100644 packages/sn-pickers-react/src/ListPicker/index.ts delete mode 100644 packages/sn-pickers-react/src/ListPicker/types.ts delete mode 100644 packages/sn-pickers-react/src/ListPicker/useListPicker.ts create mode 100644 packages/sn-pickers-react/src/components/picker/index.ts create mode 100644 packages/sn-pickers-react/src/components/picker/picker-props.ts create mode 100644 packages/sn-pickers-react/src/components/picker/picker.tsx create mode 100644 packages/sn-pickers-react/src/components/save-button.tsx create mode 100644 packages/sn-pickers-react/src/components/search-picker.tsx create mode 100644 packages/sn-pickers-react/src/components/selection-list.tsx create mode 100644 packages/sn-pickers-react/src/components/show-selected-button.tsx create mode 100644 packages/sn-pickers-react/src/components/tree-picker/index.ts rename packages/sn-pickers-react/src/{ListPicker => components/tree-picker}/loaders.ts (98%) create mode 100644 packages/sn-pickers-react/src/components/tree-picker/tree-picker.tsx create mode 100644 packages/sn-pickers-react/src/context/selection.tsx create mode 100644 packages/sn-pickers-react/src/hooks/index.ts create mode 100644 packages/sn-pickers-react/src/hooks/use-selection.ts create mode 100644 packages/sn-pickers-react/src/hooks/use-tree-picker.ts create mode 100644 packages/sn-pickers-react/src/types.ts rename packages/sn-pickers-react/tests/mocks/{Pickers.tsx => pickers.tsx} (60%) create mode 100644 packages/sn-pickers-react/tests/picker.test.tsx create mode 100644 packages/sn-pickers-react/tests/search-picker.test.tsx create mode 100644 packages/sn-pickers-react/tests/selection-list.test.tsx rename packages/sn-pickers-react/tests/{ListPicker.test.tsx => tree-picker.test.tsx} (69%) diff --git a/apps/sensenet/src/components/ContentBreadcrumbs.tsx b/apps/sensenet/src/components/ContentBreadcrumbs.tsx index 76d756f1b..b39406d3a 100644 --- a/apps/sensenet/src/components/ContentBreadcrumbs.tsx +++ b/apps/sensenet/src/components/ContentBreadcrumbs.tsx @@ -7,6 +7,7 @@ import FileCopyOutlinedIcon from '@material-ui/icons/FileCopyOutlined' import React, { useContext, useEffect, useState } from 'react' import { useHistory } from 'react-router-dom' import { ResponsivePersonalSettings } from '../context' +import { useGlobalStyles } from '../globalStyles' import { useLocalization, useSelectionService } from '../hooks' import { getPrimaryActionUrl } from '../services' import { BreadcrumbItem, Breadcrumbs } from './Breadcrumbs' @@ -36,6 +37,7 @@ export const ContentBreadcrumbs = (pr const history = useHistory() const { location } = history const localization = useLocalization() + const globalClasses = useGlobalStyles() const classes = useStyles() const { openDialog } = useDialog() const selectionService = useSelectionService() @@ -101,7 +103,11 @@ export const ContentBreadcrumbs = (pr currentParent: parent, operation: 'move', }, - dialogProps: { disableBackdropClick: true, disableEscapeKeyDown: true }, + dialogProps: { + disableBackdropClick: true, + disableEscapeKeyDown: true, + classes: { paper: globalClasses.pickerDialog }, + }, }) }}> @@ -118,7 +124,11 @@ export const ContentBreadcrumbs = (pr currentParent: parent, operation: 'copy', }, - dialogProps: { disableBackdropClick: true, disableEscapeKeyDown: true }, + dialogProps: { + disableBackdropClick: true, + disableEscapeKeyDown: true, + classes: { paper: globalClasses.pickerDialog }, + }, }) }}> diff --git a/apps/sensenet/src/components/context-menu/use-context-menu-actions.ts b/apps/sensenet/src/components/context-menu/use-context-menu-actions.ts index 20ace89ca..af986b361 100644 --- a/apps/sensenet/src/components/context-menu/use-context-menu-actions.ts +++ b/apps/sensenet/src/components/context-menu/use-context-menu-actions.ts @@ -4,6 +4,7 @@ import { useDownload, useLogger, useRepository } from '@sensenet/hooks-react' import { useContext } from 'react' import { useHistory } from 'react-router-dom' import { ResponsivePersonalSettings } from '../../context' +import { useGlobalStyles } from '../../globalStyles' import { useLoadContent, useSnRoute } from '../../hooks' import { getUrlForContent, navigateToAction } from '../../services' import { useDialog } from '../dialogs' @@ -18,6 +19,7 @@ export function useContextMenuActions( const history = useHistory() const repository = useRepository() const download = useDownload(content) + const globalClasses = useGlobalStyles() const currentParent = useLoadContent({ idOrPath: content.ParentId!, isOpened }).content const { openDialog } = useDialog() const uiSettings = useContext(ResponsivePersonalSettings) @@ -59,7 +61,12 @@ export function useContextMenuActions( const operation = actionName === 'CopyTo' ? 'copy' : 'move' openDialog({ name: 'copy-move', - props: { content: [content], currentParent: currentParent!, operation }, + props: { + content: [content], + currentParent: currentParent!, + operation, + }, + dialogProps: { classes: { paper: globalClasses.pickerDialog } }, }) break } diff --git a/apps/sensenet/src/components/dialogs/content-picker.tsx b/apps/sensenet/src/components/dialogs/content-picker.tsx index 27db0d8d2..bff5a3e95 100644 --- a/apps/sensenet/src/components/dialogs/content-picker.tsx +++ b/apps/sensenet/src/components/dialogs/content-picker.tsx @@ -1,16 +1,11 @@ import { ConstantContent } from '@sensenet/client-core' import { GenericContent } from '@sensenet/default-content-types' import { useRepository } from '@sensenet/hooks-react' -import { useListPicker } from '@sensenet/pickers-react' -import Button from '@material-ui/core/Button' +import { GenericContentWithIsParent, Picker } from '@sensenet/pickers-react' import DialogActions from '@material-ui/core/DialogActions' import DialogContent from '@material-ui/core/DialogContent' -import List from '@material-ui/core/List' -import ListItem from '@material-ui/core/ListItem' -import ListItemIcon from '@material-ui/core/ListItemIcon' -import ListItemText from '@material-ui/core/ListItemText' -import ArrowUpward from '@material-ui/icons/ArrowUpward' -import React from 'react' +import LinearProgress from '@material-ui/core/LinearProgress' +import React, { useMemo } from 'react' import { useGlobalStyles } from '../../globalStyles' import { useLocalization } from '../../hooks' import { Icon } from '../Icon' @@ -18,7 +13,7 @@ import { DialogTitle, useDialog } from '.' export interface ContentPickerDialogProps { currentPath: string - rootPath?: string + selectionRoot?: string content: GenericContent handleSubmit?: (path: string) => void } @@ -27,61 +22,44 @@ export const ContentPickerDialog: React.FunctionComponent (props.selectionRoot ? [props.selectionRoot] : [ConstantContent.PORTAL_ROOT.Path]), + [props.selectionRoot], + ) + const itemsODataOptions = useMemo(() => ({ filter: '' }), []) + + const handleSubmit = async (selection: GenericContentWithIsParent[]) => { + props.handleSubmit?.(selection[0].Path) + closeLastDialog() + } + return ( <>
- {localization.title.replace('{0}', props.content.DisplayName || props.content.Name).replace('{1}', list.path)} + {localization.title}
- -

{list.path}

- - {list.items?.map((item) => ( - list.setSelectedItem(item)} - onDoubleClick={() => { - list.navigateTo(item) - list.reload() - }}> - {item.isParent ? : } - - - ))} - -
- - - - + + } + renderLoading={() => } + pickerContainer={DialogContent} + actionsContainer={DialogActions} + handleCancel={closeLastDialog} + handleSubmit={handleSubmit} + required={1} + localization={{ cancelButton: localization.cancelButton, submitButton: localization.selectButton }} + classes={{ cancelButton: globalClasses.cancelButton }} + /> ) } diff --git a/apps/sensenet/src/components/dialogs/copy-move.tsx b/apps/sensenet/src/components/dialogs/copy-move.tsx index 560a1663d..04c16bdb9 100644 --- a/apps/sensenet/src/components/dialogs/copy-move.tsx +++ b/apps/sensenet/src/components/dialogs/copy-move.tsx @@ -1,17 +1,11 @@ import { PathHelper } from '@sensenet/client-utils' import { GenericContent } from '@sensenet/default-content-types' import { useLogger, useRepository } from '@sensenet/hooks-react' -import { useListPicker } from '@sensenet/pickers-react' +import { GenericContentWithIsParent, Picker } from '@sensenet/pickers-react' import { LinearProgress } from '@material-ui/core' -import Button from '@material-ui/core/Button' import DialogActions from '@material-ui/core/DialogActions' import DialogContent from '@material-ui/core/DialogContent' -import List from '@material-ui/core/List' -import ListItem from '@material-ui/core/ListItem' -import ListItemIcon from '@material-ui/core/ListItemIcon' -import ListItemText from '@material-ui/core/ListItemText' -import ArrowUpward from '@material-ui/icons/ArrowUpward' -import React, { useEffect, useState } from 'react' +import React, { useEffect, useMemo, useState } from 'react' import { useHistory } from 'react-router-dom' import { useGlobalStyles } from '../../globalStyles' import { useLocalization, useQuery, useSnRoute } from '../../hooks' @@ -31,18 +25,16 @@ export const CopyMoveDialog: React.FunctionComponent = (pro const { closeLastDialog } = useDialog() const history = useHistory() const currentPath = useQuery().get('path') - const list = useListPicker({ - repository: repo, - currentPath: props.currentParent.Path, - rootPath: snRoute.path, - itemsODataOptions: { filter: '' }, - }) const localizations = useLocalization().copyMoveContentDialog - const [localization, setLocalization] = useState(localizations[props.operation]) const logger = useLogger('CopyDialog') const globalClasses = useGlobalStyles() + + const [localization, setLocalization] = useState(localizations[props.operation]) const [isExecInProgress, setIsExecInProgress] = useState(false) + const selectionRoots = useMemo(() => [snRoute.path], [snRoute.path]) + const itemsODataOptions = useMemo(() => ({ filter: '' }), []) + useEffect(() => { setLocalization(localizations[props.operation]) }, [localizations, props.operation]) @@ -51,6 +43,88 @@ export const CopyMoveDialog: React.FunctionComponent = (pro return null } + const handleSubmit = async (selection: GenericContentWithIsParent[]) => { + try { + const target = selection[0] + + setIsExecInProgress(true) + + const action = props.operation === 'copy' ? repo.copy : repo.move + const result = await action({ idOrPath: props.content.map((c) => c.Id), targetPath: target.Path }) + + if (result.d.errors.length === 1) { + return logger.warning({ + message: `${localization.copyFailedNotification + .replace('{0}', result.d.errors[0].content.Name) + .replace('{1}', target.DisplayName || target.Name)}\r\n${result.d.errors[0].error.message.value}`, + data: { + details: result, + ...(props.content.length === 1 + ? { + relatedRepository: repo.configuration.repositoryUrl, + relatedContent: props.content[0], + } + : {}), + }, + }) + } else if (result.d.errors.length > 1) { + return logger.warning({ + message: localization.copyMultipleFailedNotification + .replace('{0}', result.d.errors.length.toString()) + .replace('{1}', target.DisplayName || target.Name), + data: { + details: result, + }, + }) + } + + if (result.d.results.length === 1) { + logger.information({ + message: localization.copySucceededNotification + .replace('{0}', result.d.results[0].Name) + .replace('{1}', target.Path), + data: { + error: result.d.errors[0], + ...(props.content.length === 1 + ? { + relatedRepository: repo.configuration.repositoryUrl, + relatedContent: props.content[0], + } + : {}), + }, + }) + } else if (result.d.results.length > 1) { + logger.information({ + message: localization.copyMultipleSucceededNotification + .replace('{0}', result.d.results.length.toString()) + .replace('{1}', target.DisplayName || target.Name), + data: { + error: result.d.errors, + }, + }) + } + + if ( + props.content.some((currentContent) => + PathHelper.isInSubTree(`${snRoute.path}${currentPath || ''}`, currentContent.Path), + ) + ) { + navigateToAction({ + history, + routeMatch: snRoute.match, + queryParams: { + path: `/${PathHelper.getParentPath(props.content[0].Path)}`.replace(snRoute.path, ''), + }, + }) + } + } catch (error) { + /** */ + } finally { + setIsExecInProgress(false) + closeLastDialog() + } + } + return ( <> @@ -59,147 +133,26 @@ export const CopyMoveDialog: React.FunctionComponent = (pro {isExecInProgress ? localization.inProgress : props.content.length === 1 - ? localization.title - .replace('{0}', props.content[0].DisplayName || props.content[0].Name) - .replace('{1}', list.path) - : localization.titleMultiple.replace('{0}', props.content.length.toString()).replace('{1}', list.path)} + ? localization.title.replace('{0}', props.content[0].DisplayName || props.content[0].Name) + : localization.titleMultiple.replace('{0}', props.content.length.toString())}
- - - {list.items?.map((item) => ( - list.setSelectedItem(item)} - onDoubleClick={() => { - list.navigateTo(item) - list.reload() - }}> - {item.isParent ? : } - - - ))} - - {isExecInProgress && } - - - - - + } + renderLoading={() => } + pickerContainer={DialogContent} + actionsContainer={DialogActions} + handleCancel={closeLastDialog} + handleSubmit={handleSubmit} + selectionBlacklist={[props.content[0].Path, `/${PathHelper.getParentPath(props.content[0].Path)}`]} + isExecInProgress={isExecInProgress} + required={1} + classes={{ cancelButton: globalClasses.cancelButton }} + /> ) } diff --git a/apps/sensenet/src/components/dialogs/restore.tsx b/apps/sensenet/src/components/dialogs/restore.tsx index 2309f0c4b..f164d93ff 100644 --- a/apps/sensenet/src/components/dialogs/restore.tsx +++ b/apps/sensenet/src/components/dialogs/restore.tsx @@ -93,10 +93,10 @@ export function Restore(props: RestoreProps) { props: { content: props.content, currentPath: props.content.OriginalPath || '/Root', - rootPath, + selectionRoot: rootPath, handleSubmit: (path: string) => setDestination(path), }, - dialogProps: { disableBackdropClick: true, open: true }, + dialogProps: { disableBackdropClick: true, open: true, classes: { paper: globalClasses.pickerDialog } }, }) } style={{ marginLeft: '8px', padding: '6px 0' }}> diff --git a/apps/sensenet/src/components/field-controls/index.ts b/apps/sensenet/src/components/field-controls/index.ts index 034311ca3..5980e83fd 100644 --- a/apps/sensenet/src/components/field-controls/index.ts +++ b/apps/sensenet/src/components/field-controls/index.ts @@ -1,4 +1,5 @@ export * from './allowed-child-types' export * from './avatar/avatar' export * from './path' +export * from './reference-grid' export * from './rich-text-editor' diff --git a/apps/sensenet/src/components/field-controls/reference-grid.tsx b/apps/sensenet/src/components/field-controls/reference-grid.tsx new file mode 100644 index 000000000..5a710eea3 --- /dev/null +++ b/apps/sensenet/src/components/field-controls/reference-grid.tsx @@ -0,0 +1,19 @@ +import { ReactClientFieldSetting, ReferenceGrid as SnReferenceGrid } from '@sensenet/controls-react' +import clsx from 'clsx' +import React from 'react' +import { useGlobalStyles } from '../../globalStyles' +import { DialogTitle } from '../dialogs/dialog-title' +import { Icon } from '../Icon' + +export const ReferenceGrid: React.FC = (props) => { + const globalClasses = useGlobalStyles() + return ( + } + pickerClasses={{ cancelButton: globalClasses.cancelButton }} + /> + ) +} diff --git a/apps/sensenet/src/components/react-control-mapper.ts b/apps/sensenet/src/components/react-control-mapper.ts index 5b31a5daf..d180ec49b 100644 --- a/apps/sensenet/src/components/react-control-mapper.ts +++ b/apps/sensenet/src/components/react-control-mapper.ts @@ -27,7 +27,7 @@ export const reactControlMapper = (repository: Repository) => { if (setting.AllowedTypes && setting.AllowedTypes.indexOf('User') !== -1 && setting.AllowMultiple) { return SnFieldControls.TagsInput } else { - return SnFieldControls.ReferenceGrid + return FieldControls.ReferenceGrid } }) .setupFieldSettingDefault('LongTextFieldSetting', (setting) => { diff --git a/apps/sensenet/src/globalStyles.ts b/apps/sensenet/src/globalStyles.ts index 919731eba..db408ed0b 100644 --- a/apps/sensenet/src/globalStyles.ts +++ b/apps/sensenet/src/globalStyles.ts @@ -121,6 +121,10 @@ export const useGlobalStyles = makeStyles((theme: Theme) => { backgroundColor: theme.palette.type === 'light' ? globals.light.dialogBackground : globals.dark.dialogBackground, border: theme.palette.type === 'light' ? clsx(globals.light.borderColor, '1px') : 'none', }, + pickerDialog: { + height: '100%', + maxHeight: 750, + }, cancelButton: { marginRight: 38, border: theme.palette.type === 'light' ? '2px solid #212121DE' : '2px solid #505050', diff --git a/apps/sensenet/src/localization/default.ts b/apps/sensenet/src/localization/default.ts index 82ad0bd8b..5a71d75e9 100644 --- a/apps/sensenet/src/localization/default.ts +++ b/apps/sensenet/src/localization/default.ts @@ -84,9 +84,9 @@ const values = { }, copyMoveContentDialog: { copy: { - title: `Copy '{0}' to '{1}'`, + title: `Copy '{0}'`, inProgress: 'Copy in progress...', - titleMultiple: `Copy {0} items to '{1}'`, + titleMultiple: `Copy {0} items`, copyButton: 'Copy', cancelButton: 'Cancel', details: 'Copy {0} content to {1}', @@ -96,9 +96,9 @@ const values = { copyMultipleFailedNotification: 'Failed to copy {0} items to {1}', }, move: { - title: `Move '{0}' to '{1}'`, + title: `Move '{0}''`, inProgress: 'Move in progress...', - titleMultiple: `Move {0} items to '{1}'`, + titleMultiple: `Move {0} items`, copyButton: 'Move', cancelButton: 'Cancel', details: 'Move {0} content to {1}', diff --git a/examples/sn-dms-demo/src/components/Pickers/PathPicker.tsx b/examples/sn-dms-demo/src/components/Pickers/PathPicker.tsx index b6eb210af..d30244b34 100644 --- a/examples/sn-dms-demo/src/components/Pickers/PathPicker.tsx +++ b/examples/sn-dms-demo/src/components/Pickers/PathPicker.tsx @@ -2,12 +2,12 @@ import { ODataParams } from '@sensenet/client-core' import { Folder, GenericContent } from '@sensenet/default-content-types' import { useRepository } from '@sensenet/hooks-react' import { Icon, iconType } from '@sensenet/icons-react' -import { GenericContentWithIsParent, useListPicker } from '@sensenet/pickers-react' +import { GenericContentWithIsParent, useTreePicker } from '@sensenet/pickers-react' import List from '@material-ui/core/List' import ListItem from '@material-ui/core/ListItem/ListItem' import ListItemIcon from '@material-ui/core/ListItemIcon' import ListItemText from '@material-ui/core/ListItemText' -import React, { useEffect } from 'react' +import React, { useEffect, useState } from 'react' import { connect } from 'react-redux' import { deselectPickeritem, reloadPickerItems, selectPickerItem } from '../../store/picker/actions' import { rootStateType } from '../../store/rootReducer' @@ -39,7 +39,8 @@ const pickerItemOptions: ODataParams = { // eslint-disable-next-line require-jsdoc function PathPicker(props: PathPickerProps & ReturnType & typeof mapDispatchToProps) { const repository = useRepository() - const { items, selectedItem, setSelectedItem, navigateTo, reload } = useListPicker({ + const [selectedItem, setSelectedItem] = useState() + const { items, navigateTo, reload } = useTreePicker({ repository, currentPath: props.currentPath, itemsODataOptions: pickerItemOptions, @@ -74,21 +75,20 @@ function PathPicker(props: PathPickerProps & ReturnType return ( - {items && - items.map((node) => ( - onClickHandler(e, node)} - onDoubleClick={() => navigateTo(node)} - button={true} - selected={selectedItem && node.Id === selectedItem.Id}> - - - - - {hasChildren(node as any) ? : null} - - ))} + {items?.map((node) => ( + onClickHandler(e, node)} + onDoubleClick={() => navigateTo(node)} + button={true} + selected={selectedItem && node.Id === selectedItem.Id}> + + + + + {hasChildren(node as any) ? : null} + + ))} ) } diff --git a/examples/sn-react-component-docs/stories/pickers/ExampleApp.tsx b/examples/sn-react-component-docs/stories/pickers/ExampleApp.tsx index 19d463d63..2ba1583f2 100644 --- a/examples/sn-react-component-docs/stories/pickers/ExampleApp.tsx +++ b/examples/sn-react-component-docs/stories/pickers/ExampleApp.tsx @@ -1,19 +1,13 @@ import { Repository } from '@sensenet/client-core' import { SchemaStore } from '@sensenet/default-content-types' -import { - GenericContentWithIsParent, - ListPickerComponent, - SET_SELECTED_ITEM, - useListPicker, -} from '@sensenet/pickers-react' -import CircularProgress from '@material-ui/core/CircularProgress' -import Fade from '@material-ui/core/Fade' -import React from 'react' +import { GenericContentWithIsParent, Picker, useTreePicker } from '@sensenet/pickers-react' +import LinearProgress from '@material-ui/core/LinearProgress' +import React, { useState } from 'react' const contentPath = '/Root/Content' const testRepository = new Repository({ repositoryUrl: 'https://dev.demo.sensenet.com', - requiredSelect: ['Id', 'Path', 'Name', 'Type', 'ParentId', 'DisplayName'], + requiredSelect: ['Id', 'Path', 'Name', 'Type', 'ParentId', 'DisplayName', 'IsFolder'], schemas: SchemaStore, }) @@ -32,32 +26,23 @@ export const ExampleApp = () => { } return

{message}

} - const renderLoading = () => ( - - - - ) + return ( - } repository={testRepository} currentPath={contentPath} + required={1} /> ) } export const ExampleAppWithHook = () => { - const { items, selectedItem, setSelectedItem, path, navigateTo, reload } = useListPicker({ + const [selectedItem, setSelectedItem] = useState() + const { items, path, navigateTo, reload } = useTreePicker({ currentPath: contentPath, repository: testRepository, - stateReducer: (_state, action) => { - if (action.type === SET_SELECTED_ITEM && action.payload && action.payload.isParent) { - return { ...action.changes, selectedItem: undefined } - } else { - return action.changes - } - }, }) console.log({ selectedItem, path }) @@ -69,7 +54,7 @@ export const ExampleAppWithHook = () => { items.map((node) => (
  • setSelectedItem(node)} + onClick={() => setSelectedItem(node.isParent ? undefined : node)} onDoubleClick={() => navigateTo(node)} key={node.Id}> {node.isParent ? '..' : node.DisplayName} diff --git a/examples/sn-react-component-docs/stories/pickers/Pickers.stories.tsx b/examples/sn-react-component-docs/stories/pickers/Pickers.stories.tsx index af342ea1a..c5f38e92c 100644 --- a/examples/sn-react-component-docs/stories/pickers/Pickers.stories.tsx +++ b/examples/sn-react-component-docs/stories/pickers/Pickers.stories.tsx @@ -3,6 +3,6 @@ import React from 'react' import showCaseAppNotes from '../../notes/pickers/ConnectedToDms.md' import { ExampleApp, ExampleAppWithHook } from './ExampleApp' -storiesOf('ListPicker', module) +storiesOf('Picker', module) .add('Connected to repository', () => , { showCaseAppNotes }) .add('Example app with hook', () => ) diff --git a/packages/sn-controls-react/src/fieldcontrols/auto-complete.tsx b/packages/sn-controls-react/src/fieldcontrols/auto-complete.tsx index bcb025077..6d1bda9a9 100644 --- a/packages/sn-controls-react/src/fieldcontrols/auto-complete.tsx +++ b/packages/sn-controls-react/src/fieldcontrols/auto-complete.tsx @@ -1,6 +1,6 @@ import { deepMerge } from '@sensenet/client-utils' import { GenericContent, ReferenceFieldSetting } from '@sensenet/default-content-types' -import { Query, QueryExpression, QueryOperators } from '@sensenet/query' +import { Query } from '@sensenet/query' import { ReferenceField } from '@sensenet/search-react' import Typography from '@material-ui/core/Typography' import React from 'react' @@ -22,28 +22,6 @@ export const AutoComplete: React.FC { - props.settings.AllowedTypes && - props.settings.AllowedTypes.forEach((allowedType, index, array) => { - new QueryExpression(q2.queryRef).term(`TypeIs:${allowedType}`) - if (index < array.length - 1) { - return new QueryOperators(q2.queryRef).or - } - }) - return q2 - }) - - new QueryOperators(fetchQuery).and.query((q2) => { - props.settings.SelectionRoots && - props.settings.SelectionRoots.forEach((root, index, array) => { - new QueryExpression(q2.queryRef).inTree(root) - if (index < array.length - 1) { - return new QueryOperators(q2.queryRef).or - } - }) - return q2 - }) - const result = await props.repository.loadCollection({ path: '/Root', oDataOptions: { diff --git a/packages/sn-controls-react/src/fieldcontrols/reference-grid/reference-grid.tsx b/packages/sn-controls-react/src/fieldcontrols/reference-grid/reference-grid.tsx index 986abfa85..0ddcfd335 100644 --- a/packages/sn-controls-react/src/fieldcontrols/reference-grid/reference-grid.tsx +++ b/packages/sn-controls-react/src/fieldcontrols/reference-grid/reference-grid.tsx @@ -1,15 +1,15 @@ import { deepMerge, PathHelper } from '@sensenet/client-utils' import { GenericContent, ReferenceFieldSetting } from '@sensenet/default-content-types' -import Button from '@material-ui/core/Button' -import Dialog from '@material-ui/core/Dialog' -import DialogActions from '@material-ui/core/DialogActions' +import { PickerClassKey } from '@sensenet/pickers-react' +import { DialogTitle } from '@material-ui/core' +import Dialog, { DialogProps } from '@material-ui/core/Dialog' import FormControl from '@material-ui/core/FormControl' import FormGroup from '@material-ui/core/FormGroup' import FormHelperText from '@material-ui/core/FormHelperText' import InputLabel from '@material-ui/core/InputLabel' import List from '@material-ui/core/List' import Typography from '@material-ui/core/Typography' -import React, { useCallback, useEffect, useMemo, useState } from 'react' +import React, { ElementType, useCallback, useEffect, useMemo, useState } from 'react' import { ReactClientFieldSetting } from '../client-field-setting' import { defaultLocalization } from '../localization' import { DefaultItemTemplate } from './default-item-template' @@ -20,17 +20,22 @@ const styles = { display: 'flex', flexWrap: 'wrap', }, - dialog: { - padding: 20, - }, listContainer: { display: 'block', marginTop: 10, }, } -export const ReferenceGrid: React.FC> = (props) => { +interface ReferenceGridProps extends ReactClientFieldSetting { + dialogProps?: Partial + dialogTitleComponent?: ElementType + renderPickerIcon?: (item: any) => JSX.Element + pickerClasses?: PickerClassKey +} + +export const ReferenceGrid: React.FC = (props) => { const localization = deepMerge(defaultLocalization.referenceGrid, props.localization?.referenceGrid) + const DialogTitleComponent = props.dialogTitleComponent ?? DialogTitle const emptyContent = useMemo( () => ({ @@ -58,7 +63,6 @@ export const ReferenceGrid: React.FC([]) - const [selected, setSelected] = useState([]) const getSelected = useCallback(async () => { try { @@ -80,7 +84,6 @@ export const ReferenceGrid: React.FC { - setSelected(fieldValue) handleDialogClose() } - const handleOkClick = () => { + const handleOkClick = (newSelection: GenericContent[]) => { props.fieldOnChange?.( props.settings.Name, - selected.map((item: GenericContent) => item.Id), + newSelection.map((item) => item.Id), ) - setFieldValue(selected) + setFieldValue(newSelection) handleDialogClose() } - const selectItem = (content: GenericContent) => { - selected.length > 0 && !props.settings.AllowMultiple - ? setSelected((previous) => (previous.some((c) => content.Id === c.Id) ? previous : [content])) - : setSelected((previous) => - previous.some((c) => content.Id === c.Id) - ? previous.filter((c) => content.Id !== c.Id) - : [...previous, content], - ) - } - const getDefaultValue = useCallback(async () => { if (!props.settings.DefaultValue || !props.repository) { return @@ -163,7 +154,6 @@ export const ReferenceGrid: React.FC response.d) - setSelected(defaultContent) setFieldValue(defaultContent) } catch (error) { console.error('At least one request for default reference value has failed.') @@ -219,32 +209,19 @@ export const ReferenceGrid: React.FC {!props.hideDescription && {props.settings.Description}} - -
    - - {localization.referencePickerTitle} - - selectItem(content)} - selected={selected} - renderIcon={props.renderIcon} - /> - - - - -
    + + {localization.referencePickerTitle} + ) diff --git a/packages/sn-controls-react/src/fieldcontrols/reference-grid/reference-picker.tsx b/packages/sn-controls-react/src/fieldcontrols/reference-grid/reference-picker.tsx index 164981129..aaeaceb84 100644 --- a/packages/sn-controls-react/src/fieldcontrols/reference-grid/reference-picker.tsx +++ b/packages/sn-controls-react/src/fieldcontrols/reference-grid/reference-picker.tsx @@ -1,29 +1,19 @@ import { ODataParams, Repository } from '@sensenet/client-core' -import { Folder, GenericContent, User } from '@sensenet/default-content-types' -import { useListPicker } from '@sensenet/pickers-react' +import { Folder, ReferenceFieldSetting, User } from '@sensenet/default-content-types' +import { GenericContentWithIsParent, Picker, PickerProps } from '@sensenet/pickers-react' import Avatar from '@material-ui/core/Avatar' -import CircularProgress from '@material-ui/core/CircularProgress' -import Fade from '@material-ui/core/Fade' -import List from '@material-ui/core/List' -import ListItem from '@material-ui/core/ListItem' -import ListItemIcon from '@material-ui/core/ListItemIcon' -import ListItemText from '@material-ui/core/ListItemText' -import React, { useEffect, useState } from 'react' +import DialogActions from '@material-ui/core/DialogActions' +import DialogContent from '@material-ui/core/DialogContent' +import LinearProgress from '@material-ui/core/LinearProgress' +import React, { useMemo } from 'react' import { renderIconDefault } from '../icon' -const styles: { [index: string]: React.CSSProperties } = { - uploadContainer: { minHeight: 50, position: 'relative' }, - loaderContainer: { display: 'flex', alignItems: 'center', justifyContent: 'center' }, -} - -interface ReferencePickerProps { - change?: () => void - select: (content: GenericContent) => void +interface ReferencePickerProps + extends Pick, 'handleSubmit' | 'handleCancel' | 'localization' | 'defaultValue' | 'classes'> { repository: Repository path: string - allowedTypes?: string[] - selected: GenericContent[] - renderIcon?: (name: string) => JSX.Element + renderIcon?: (name: T) => JSX.Element + fieldSettings: ReferenceFieldSetting } const createTypeFilterString = (allowedTypes: string[]) => { @@ -39,40 +29,19 @@ const createTypeFilterString = (allowedTypes: string[]) => { /** * Represents a reference picker component */ -export const ReferencePicker: React.FC = (props) => { - const pickerItemOptions: ODataParams = { - select: ['DisplayName', 'Path', 'Id', 'Children/IsFolder', 'IsFolder', 'Avatar', 'Icon'] as any, - expand: ['Children'] as any, - filter: props.allowedTypes - ? createTypeFilterString(props.allowedTypes) - : "(isOf('GenericContent') and not isOf('SystemFolder'))", - metadata: 'no', - orderby: 'DisplayName', - } - - const { items, setSelectedItem, navigateTo, isLoading, error } = useListPicker({ - repository: props.repository, - currentPath: props.path, - itemsODataOptions: pickerItemOptions, - }) - const [showLoading, setShowLoading] = useState(false) - - const onClickHandler = (_e: React.MouseEvent, node: GenericContent) => { - setSelectedItem(node) - if (!props.allowedTypes || props.allowedTypes.some((type) => type === node.Type)) { - props.select(node) - } - } - - // Wait to show spinner to prevent content jumping - useEffect(() => { - const timer = window.setTimeout(() => { - setShowLoading(isLoading) - }, 800) - return () => { - window.clearTimeout(timer) - } - }, [isLoading]) +export const ReferencePicker: React.FC> = (props) => { + const pickerItemOptions: ODataParams = useMemo( + () => ({ + select: ['DisplayName', 'Path', 'Id', 'Children/IsFolder', 'IsFolder', 'Avatar', 'Icon'] as any, + expand: ['Children'] as any, + filter: props.fieldSettings.AllowedTypes + ? createTypeFilterString(props.fieldSettings.AllowedTypes) + : "(isOf('GenericContent') and not isOf('SystemFolder'))", + metadata: 'no', + orderby: 'DisplayName', + }), + [props.fieldSettings.AllowedTypes], + ) const iconName = (isFolder?: boolean) => { if (isFolder == null) { @@ -81,58 +50,41 @@ export const ReferencePicker: React.FC = (props) => { return isFolder ? 'folder' : 'insert_drive_file' } - if (showLoading) { - return ( -
    - - - -
    + const renderIcon = (item: GenericContentWithIsParent) => + props.repository.schemas.isContentFromType(item, 'User') ? ( + (item as User).Avatar?.Url ? ( + + ) : ( + + {item.DisplayName?.split(' ') + .map((namePart) => namePart[0]) + .join('.')} + + ) + ) : props.renderIcon ? ( + props.renderIcon(item) + ) : ( + renderIconDefault(iconName(item.IsFolder)) ) - } - - if (error) { - return

    {error.message}

    - } return ( - - {items && - items.map((node) => ( - onClickHandler(e, node)} - onDoubleClick={() => navigateTo(node)} - selected={props.selected.some((c) => c.Id === node.Id)}> - - {props.repository.schemas.isContentFromType(node, 'User') ? ( - (node as User).Avatar?.Url ? ( - - ) : ( - - {node.DisplayName?.split(' ') - .map((namePart) => namePart[0]) - .join('.')} - - ) - ) : props.renderIcon ? ( - props.renderIcon(iconName(node.IsFolder)) - ) : ( - renderIconDefault(iconName(node.IsFolder)) - )} - - - - ))} - + } + allowMultiple={props.fieldSettings.AllowMultiple} + pickerContainer={DialogContent} + actionsContainer={DialogActions} + handleCancel={props.handleCancel} + handleSubmit={props.handleSubmit} + classes={props.classes} + /> ) } diff --git a/packages/sn-controls-react/test/reference-grid.test.tsx b/packages/sn-controls-react/test/reference-grid.test.tsx index b359ed276..d362a6586 100644 --- a/packages/sn-controls-react/test/reference-grid.test.tsx +++ b/packages/sn-controls-react/test/reference-grid.test.tsx @@ -173,12 +173,14 @@ describe('Reference grid field control', () => { wrapper.find(DefaultItemTemplate).last().find(IconButton).simulate('click') await act(async () => { - wrapper.find(ReferencePicker).prop('select')({ Path: '/', Name: 'Jane Doe', Id: 1234, Type: 'User' }) + wrapper.find(ReferencePicker).prop('handleSubmit')([ + userContent, + { Path: '/', Name: 'Jane Doe', Id: 1234, Type: 'User' }, + ]) }) - wrapper.find(Dialog).find(Button).first().simulate('click') expect(fieldOnChange).toBeCalled() - expect(wrapper.find(DefaultItemTemplate)).toHaveLength(3) + expect(wrapper.update().find(DefaultItemTemplate)).toHaveLength(3) }) it('should remove all the items when a new item is selected with allow multiple false', async () => { @@ -193,8 +195,8 @@ describe('Reference grid field control', () => { ) await sleepAsync(0) - wrapper.find(ReferencePicker).prop('select')({ Path: '/', Name: 'Jane Doe', Id: 1234, Type: 'User' }) - wrapper.find(Dialog).find(Button).first().simulate('click') + wrapper.find(ReferencePicker).prop('handleSubmit')([{ Path: '/', Name: 'Jane Doe', Id: 1234, Type: 'User' }]) + // Jane Doe + add reference expect(wrapper.update().find(DefaultItemTemplate)).toHaveLength(2) }) @@ -208,7 +210,7 @@ describe('Reference grid field control', () => { } as any let wrapper: any await act(async () => { - wrapper = mount() + wrapper = mount() }) expect(wrapper.update().find(Avatar).text()).toBe('A.M') diff --git a/packages/sn-pickers-react/package.json b/packages/sn-pickers-react/package.json index 5de71200d..8c2c1b5b6 100644 --- a/packages/sn-pickers-react/package.json +++ b/packages/sn-pickers-react/package.json @@ -37,6 +37,7 @@ "@sensenet/client-utils": "^2.0.1", "@sensenet/default-content-types": "^3.1.1", "@sensenet/icons-react": "^1.2.19", + "@sensenet/query": "^1.1.15", "react": "^16.13.0", "tslib": "^2.0.3" }, diff --git a/packages/sn-pickers-react/src/ListPicker/ListPicker.tsx b/packages/sn-pickers-react/src/ListPicker/ListPicker.tsx deleted file mode 100644 index b8256d139..000000000 --- a/packages/sn-pickers-react/src/ListPicker/ListPicker.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import { GenericContent } from '@sensenet/default-content-types' -import { Icon, iconType } from '@sensenet/icons-react' -import List from '@material-ui/core/List' -import ListItem from '@material-ui/core/ListItem' -import ListItemIcon from '@material-ui/core/ListItemIcon' -import ListItemText from '@material-ui/core/ListItemText' -import React, { useCallback } from 'react' -import { ListPickerProps } from './ListPickerProps' -import { GenericContentWithIsParent } from './types' -import { useListPicker } from '.' - -/** - * Represents a list picker component. - */ -export function ListPickerComponent(props: ListPickerProps) { - const { items, selectedItem, setSelectedItem, navigateTo, isLoading, error } = useListPicker({ - repository: props.repository, - currentPath: props.currentPath, - itemsODataOptions: props.itemsODataOptions as any, - parentODataOptions: props.parentODataOptions as any, - }) - - const onClickHandler = useCallback( - (_event: React.MouseEvent, node: T) => { - setSelectedItem(node) - props.onSelectionChanged && props.onSelectionChanged(node) - }, - [props, setSelectedItem], - ) - - const onDoubleClickHandler = useCallback( - (_event: React.MouseEvent, node: T) => { - navigateTo(node) - props.onNavigation && props.onNavigation(node.Path) - }, - [navigateTo, props], - ) - - const defaultRenderer = useCallback( - (item: T) => { - return ( - - - - - - - ) - }, - [selectedItem], - ) - - const renderItem = props.renderItem || defaultRenderer - - if (isLoading) { - return props.renderLoading ? props.renderLoading() : null - } - - if (error) { - return props.renderError ? props.renderError(error.message) : null - } - - return ( - - {items && - items.map((item) => ( -
    onClickHandler(e, item as any)} - onDoubleClick={(e) => onDoubleClickHandler(e, item as any)} - key={item.Id}> - {renderItem(item as any)} -
    - ))} -
    - ) -} diff --git a/packages/sn-pickers-react/src/ListPicker/ListPickerProps.ts b/packages/sn-pickers-react/src/ListPicker/ListPickerProps.ts deleted file mode 100644 index afbcee0fa..000000000 --- a/packages/sn-pickers-react/src/ListPicker/ListPickerProps.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { ODataParams, Repository } from '@sensenet/client-core' -import { ReactElement } from 'react' - -/** - * Properties for list picker component. - * @interface ListPickerProps - * @template T - */ -export interface ListPickerProps { - /** - * Repositry to load contents from. - * To use the default load options you need to provide a repository. - * @type {Repository} - */ - repository: Repository - - /** - * OData parameters for list items. - * @default { select: ['DisplayName', 'Path', 'Id'], - * filter: "(isOf('Folder') and not isOf('SystemFolder'))", - * metadata: 'no', - * orderby: 'DisplayName',} - */ - itemsODataOptions?: ODataParams - - /** - * OData parameters for the parent list item. - * @default { - * select: ['DisplayName', 'Path', 'Id', 'ParentId', 'Workspace'], - * expand: ['Workspace'], - * metadata: 'no', - * } - */ - parentODataOptions?: ODataParams - - /** - * The current content's path. - * @type {string} - * @default '' // - empty string (This will load content under default site) - */ - currentPath?: string - - /** - * Called on navigation. Can be used to clear the selected state and to know the path - * of the navigation. - */ - onNavigation?: (path: string) => void - - /** - * Called on click with the current item. - */ - onSelectionChanged?: (node: T) => void - - /** - * Render a loading component when loadItems called. - * @default null - */ - renderLoading?: () => ReactElement - - /** - * Render an error component when error happened in loadItems call. - * @default null - */ - renderError?: (message: string) => ReactElement - - /** - * Function to render the item component. - * @default - * ```js - * const defaultRenderItem = (node: T) => ( - * - * - * - * - * - * - * ) - * ``` - */ - renderItem?: (props: T) => ReactElement -} diff --git a/packages/sn-pickers-react/src/ListPicker/index.ts b/packages/sn-pickers-react/src/ListPicker/index.ts deleted file mode 100644 index a2fc484b1..000000000 --- a/packages/sn-pickers-react/src/ListPicker/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './ListPicker' -export * from './loaders' -export * from './ListPickerProps' -export * from './useListPicker' -export * from './types' diff --git a/packages/sn-pickers-react/src/ListPicker/types.ts b/packages/sn-pickers-react/src/ListPicker/types.ts deleted file mode 100644 index ba1744e4b..000000000 --- a/packages/sn-pickers-react/src/ListPicker/types.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { GenericContent } from '@sensenet/default-content-types' - -/** - * useListPicker state - */ -export interface State { - selectedItem: T | undefined - path: string - parentId: number | undefined -} - -/** - * SelectAction's type - */ -export const SET_SELECTED_ITEM = 'SET_SELECTED_ITEM' - -/** - * NavigateToAction's type - */ -export const NAVIGATE_TO = 'NAVIGATE_TO' - -/** - * Union type of SelectAction & NavigateToAction - */ -export type Action = SelectAction | NavigateToAction - -/** - * Select action interface - */ -export interface SelectAction { - type: typeof SET_SELECTED_ITEM - payload?: T -} - -/** - * Navigate to action interface - */ -export interface NavigateToAction { - type: typeof NAVIGATE_TO - payload: { - node: T - parent?: T - } -} - -/** - * Generic content with isParent property - */ -export type GenericContentWithIsParent = GenericContent & { isParent?: boolean } diff --git a/packages/sn-pickers-react/src/ListPicker/useListPicker.ts b/packages/sn-pickers-react/src/ListPicker/useListPicker.ts deleted file mode 100644 index 2e3cfe5d0..000000000 --- a/packages/sn-pickers-react/src/ListPicker/useListPicker.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { ODataParams, Repository } from '@sensenet/client-core' -import { AsyncReturnValue } from '@sensenet/client-utils' -import { GenericContent } from '@sensenet/default-content-types' -import { Reducer, useCallback, useEffect, useReducer, useState } from 'react' -import { loadItems } from './loaders' -import { Action, GenericContentWithIsParent, NAVIGATE_TO, SET_SELECTED_ITEM, State } from './types' - -const setParentIdAndPath = (node: T, parent?: T) => { - return parent && parent.Id === node.Id - ? { parentId: parent.ParentId, path: parent.Path } - : { parentId: node.ParentId, path: node.Path } -} - -/** - * Reducer to modify the state of the list picker - * @template T - * @param {State} state - * @param {Action} action - * @returns a new state - */ -function reducer(state: State, action: Action) { - switch (action.type) { - case SET_SELECTED_ITEM: { - return { ...state, selectedItem: action.payload } - } - case NAVIGATE_TO: { - return { ...state, ...setParentIdAndPath(action.payload.node, action.payload.parent) } - } - // no default - } -} - -/** - * useListPicker let you select and navigate in the repository with built in defaults - */ -export const useListPicker = (options: { - repository: Repository - currentPath?: string - rootPath?: string - itemsODataOptions?: ODataParams - parentODataOptions?: ODataParams - stateReducer?: Reducer, Action & { changes: State }> -}) => { - // get defaults - const { repository, stateReducer = (_s: any, a: any) => a.changes, currentPath = '' } = options - - const [{ selectedItem, path, parentId }, dispatch] = useReducer, Action>>( - (state, action) => { - const changes = reducer(state, action) - return stateReducer(state, { ...action, changes }) - }, - { - path: currentPath, - selectedItem: undefined, - parentId: undefined, - }, - ) - - const [reloadToken, setReloadToken] = useState(0) - const [items, setItems] = useState>([]) - const [isLoading, setIsLoading] = useState(false) - const [error, setError] = useState() - const reload = useCallback(() => { - setReloadToken(Math.random()) - }, []) - - useEffect(() => { - const abortController = new AbortController() - ;(async () => { - try { - setIsLoading(true) - const result = await loadItems({ - path, - loadParent: path !== options.rootPath, - repository, - parentId, - itemsODataOptions: options.itemsODataOptions, - parentODataOptions: options.parentODataOptions, - abortController, - }) - setItems(result) - } catch (e) { - if (!abortController.signal.aborted) { - setError(e) - } - } finally { - setIsLoading(false) - } - })() - // It might be a case to change odata options without the path but it is unlikely. If you see bugs because of this then - // check out this https://stackoverflow.com/questions/54095994/react-useeffect-comparing-objects - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [path, repository, reloadToken, parentId]) - - const setSelectedItem = (node?: T) => dispatch({ type: SET_SELECTED_ITEM, payload: node }) - - const navigateTo = useCallback( - (node: T) => - dispatch({ type: NAVIGATE_TO, payload: { node, parent: items && (items.find((c) => c.isParent) as any) } }), - [items], - ) - - return { items, selectedItem, setSelectedItem, navigateTo, path, isLoading, error, reload } -} diff --git a/packages/sn-pickers-react/src/components/picker/index.ts b/packages/sn-pickers-react/src/components/picker/index.ts new file mode 100644 index 000000000..dd4542191 --- /dev/null +++ b/packages/sn-pickers-react/src/components/picker/index.ts @@ -0,0 +1,2 @@ +export * from './picker' +export * from './picker-props' diff --git a/packages/sn-pickers-react/src/components/picker/picker-props.ts b/packages/sn-pickers-react/src/components/picker/picker-props.ts new file mode 100644 index 000000000..53ada59f6 --- /dev/null +++ b/packages/sn-pickers-react/src/components/picker/picker-props.ts @@ -0,0 +1,166 @@ +import { ODataParams, Repository } from '@sensenet/client-core' +import { GenericContent } from '@sensenet/default-content-types' +import { ReactElement } from 'react' +import { PickerClassKey } from './picker' + +export interface PickerLocalization { + searchPlaceholder?: string + showSelected?: string + treeViewButton?: string + submitButton?: string + cancelButton?: string +} + +/** + * Properties for picker component. + * @interface PickerProps + * @template T + */ +export interface PickerProps { + /** + * Repositry to load contents from. + * To use the default load options you need to provide a repository. + * @type {Repository} + */ + repository: Repository + + /** + * OData parameters for list items. + * @default { select: ['DisplayName', 'Path', 'Id'], + * filter: "(isOf('Folder') and not isOf('SystemFolder'))", + * metadata: 'no', + * orderby: 'DisplayName',} + */ + itemsODataOptions?: ODataParams + + /** + * OData parameters for the parent list item. + * @default { + * select: ['DisplayName', 'Path', 'Id', 'ParentId', 'Workspace'], + * expand: ['Workspace'], + * metadata: 'no', + * } + */ + parentODataOptions?: ODataParams + + /** + * The current content's path. + * @type {string} + * @default '' // - empty string (This will load content under default site) + */ + currentPath?: string + + /** + * Roots of subtrees where selection is enabled + * @type {string} + */ + selectionRoots?: string[] + + /** + * List of items which selection are disabled + * @type {string[]} + */ + selectionBlacklist?: string[] + + /** + * Is selection of multiple items enabled? + * @type {boolean} + */ + allowMultiple?: boolean + + /** + * Called on navigation. Can be used to clear the selected state and to know the path + * of the navigation. + */ + onTreeNavigation?: (path: string) => void + + /** + * Called on click with the current item. + */ + onSelectionChanged?: (nodes: T[]) => void + + /** + * Render a loading component when loadItems called. + * @default null + */ + renderLoading?: () => ReactElement + + /** + * Render an error component when error happened in loadItems call. + * @default null + */ + renderError?: (message: string) => ReactElement + + /** + * Function to render the item component. + * @default + * ```js + * const defaultRenderItem = (node: T) => ( + * + * + * + * + * + * + * ) + * ``` + */ + renderItem?: (props: T) => ReactElement + + /** + * Function to render the icon of items. + */ + renderIcon?: (props: T) => ReactElement + + /** + * Function to render the action buttons. + */ + renderActions?: (currentSelection: T[]) => ReactElement + + /** + * Function which called is on the Cancel button click. + */ + handleCancel?: () => void + + /** + * Function which is called on the Submit button click. + */ + handleSubmit?: (selection: T[]) => void + + /** + * Is submit execution in progress? + * @type {boolean} + */ + isExecInProgress?: boolean + + /** + * Container element of the picker + * @default div + */ + pickerContainer?: React.ElementType + + /** + * Container element of the action buttons + * @default div + */ + actionsContainer?: React.ElementType + + /** + * Localization object for UI labels and texts + * @type {PickerLocalization} + */ + localization?: PickerLocalization + + /** + * Default selection + * @type {GenericContent[]} + */ + defaultValue?: GenericContent[] + + /** + * Minimum number of items for a valid selection + */ + required?: number + + classes?: PickerClassKey +} diff --git a/packages/sn-pickers-react/src/components/picker/picker.tsx b/packages/sn-pickers-react/src/components/picker/picker.tsx new file mode 100644 index 000000000..0074c733f --- /dev/null +++ b/packages/sn-pickers-react/src/components/picker/picker.tsx @@ -0,0 +1,168 @@ +import { ConstantContent } from '@sensenet/client-core' +import { debounce } from '@sensenet/client-utils' +import { GenericContent } from '@sensenet/default-content-types' +import { Query, QueryExpression, QueryOperators } from '@sensenet/query' +import Box from '@material-ui/core/Box' +import Button from '@material-ui/core/Button' +import IconButton from '@material-ui/core/IconButton' +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles' +import TextField from '@material-ui/core/TextField' +import AccountTree from '@material-ui/icons/AccountTree' +import React, { useCallback, useEffect, useState } from 'react' +import { SelectionContext, SelectionProvider } from '../../context/selection' +import { SaveButton } from '../save-button' +import { SearchPicker } from '../search-picker' +import { SelectionList } from '../selection-list' +import { ShowSelectedButton } from '../show-selected-button' +import { TreePicker } from '../tree-picker' +import { PickerProps } from './picker-props' + +enum PickerModes { + TREE, + SEARCH, + SELECTION, +} + +const useStyles = makeStyles((theme: Theme) => { + return createStyles({ + treeIcon: { + color: theme.palette.type === 'dark' ? 'rgba(255,255,255,0.5)' : undefined, + }, + treeActiveIcon: { + color: theme.palette.type === 'light' ? theme.palette.common.black : theme.palette.common.white, + }, + showSelected: { + marginTop: '0.5rem', + textAlign: 'right', + }, + toolbar: { + display: 'flex', + alignItems: 'center', + }, + cancelButton: {}, + }) +}) + +export type PickerClassKey = Partial> + +export const Picker: React.FunctionComponent> = (props) => { + const [term, setTerm] = useState() + const [result, setResult] = useState([]) + const [searchError, setSearchError] = useState() + const [mode, setMode] = useState(PickerModes.TREE) + const classes = useStyles(props) + + const PickerContainer = props.pickerContainer || 'div' + const ActionsContainer = props.actionsContainer || 'div' + + const debouncedQuery = useCallback( + debounce((a: string) => setTerm(a), 250), + [], + ) + + useEffect(() => { + const ac = new AbortController() + const fetchResult = async () => { + if (!term) { + setResult([]) + return + } + + try { + const getQueryFromTerm = () => { + const query = new Query((q) => + q.query((q2) => q2.equals('Name', `*${term}*`).or.equals('DisplayName', `*${term}*`)), + ) + + if (props.selectionRoots) { + new QueryOperators(query).and.query((q2) => { + props.selectionRoots?.forEach((root, index, array) => { + new QueryExpression(q2.queryRef).inTree(root) + if (index < array.length - 1) { + return new QueryOperators(q2.queryRef).or + } + }) + return q2 + }) + } + return query + } + + setSearchError('') + + const response = await props.repository.loadCollection({ + path: ConstantContent.PORTAL_ROOT.Path, + oDataOptions: { + query: getQueryFromTerm().toString(), + }, + requestInit: { signal: ac.signal }, + }) + setResult(response.d.results) + } catch (e) { + if (!ac.signal.aborted) { + setSearchError(e.message) + setResult([]) + } + } + } + + fetchResult() + return () => ac.abort() + }, [term, props.repository, props.selectionRoots]) + + return ( + + + + setMode(PickerModes.TREE)} + className={`${classes.treeIcon} ${mode === PickerModes.TREE ? classes.treeActiveIcon : ''}`}> + + + setMode(PickerModes.SEARCH)} + onChange={(ev) => { + debouncedQuery(ev.target.value) + }} + /> + + setMode(PickerModes.SELECTION)} + localization={{ label: props.localization?.showSelected ?? 'Show selected' }} + /> + {mode === PickerModes.SELECTION && } + {mode === PickerModes.SEARCH && } + {mode === PickerModes.TREE && } + + + {({ selection }) => + props.renderActions ? ( + props.renderActions(selection) + ) : ( + + + props.handleSubmit?.(selection)} + /> + + ) + } + + + ) +} diff --git a/packages/sn-pickers-react/src/components/save-button.tsx b/packages/sn-pickers-react/src/components/save-button.tsx new file mode 100644 index 000000000..bbe989a62 --- /dev/null +++ b/packages/sn-pickers-react/src/components/save-button.tsx @@ -0,0 +1,25 @@ +import Button, { ButtonProps } from '@material-ui/core/Button' +import React from 'react' +import { useSelection } from '../hooks' + +interface SaveButtonProps extends ButtonProps { + localization: { + label: string + } +} + +export const SaveButton: React.FC = ({ localization, ...props }) => { + const { selection } = useSelection() + + return ( + + ) +} diff --git a/packages/sn-pickers-react/src/components/search-picker.tsx b/packages/sn-pickers-react/src/components/search-picker.tsx new file mode 100644 index 000000000..05ca6e399 --- /dev/null +++ b/packages/sn-pickers-react/src/components/search-picker.tsx @@ -0,0 +1,82 @@ +import { GenericContent } from '@sensenet/default-content-types' +import { Icon, iconType } from '@sensenet/icons-react' +import Checkbox from '@material-ui/core/Checkbox' +import List from '@material-ui/core/List' +import ListItem from '@material-ui/core/ListItem' +import ListItemIcon from '@material-ui/core/ListItemIcon' +import ListItemText from '@material-ui/core/ListItemText' +import Typography from '@material-ui/core/Typography' +import React, { useCallback } from 'react' +import { GenericContentWithIsParent } from '..' +import { useSelection } from '../hooks' +import { PickerProps } from './picker' + +/** + * Represents a list picker component. + */ +export function SearchPicker( + props: PickerProps & { items: T[]; error?: string }, +) { + const { selection, setSelection, allowMultiple } = useSelection() + + const onCheckedChangeHandler = useCallback( + (_event: React.ChangeEvent, node: T) => { + const newSelection = allowMultiple ? selection.filter((item) => item.Id !== node.Id) : [] + if (newSelection.length === selection.length || (!allowMultiple && selection[0].Id !== node.Id)) { + newSelection.push(node) + } + setSelection(newSelection) + }, + [allowMultiple, selection, setSelection], + ) + + const defaultRenderer = useCallback( + (item: T) => { + const labelId = `checkbox-list-label-${item.Id}` + + return ( + + + {!props.selectionBlacklist?.includes(item.Path) && ( + selected.Id === item.Id)} + onChange={(e) => onCheckedChangeHandler(e, item as any)} + onDoubleClick={(e) => e.stopPropagation()} + tabIndex={-1} + disableRipple + inputProps={{ 'aria-labelledby': labelId }} + /> + )} + + + {props.renderIcon?.(item) || ( + + )} + + + + ) + }, + [selection, onCheckedChangeHandler, props], + ) + + const renderItem = props.renderItem || defaultRenderer + + if (props.error) { + return ( + props.renderError?.(props.error) || ( + + {props.error} + + ) + ) + } + + return {props.items.map((item) => renderItem(item as any))} +} diff --git a/packages/sn-pickers-react/src/components/selection-list.tsx b/packages/sn-pickers-react/src/components/selection-list.tsx new file mode 100644 index 000000000..c3900bb6b --- /dev/null +++ b/packages/sn-pickers-react/src/components/selection-list.tsx @@ -0,0 +1,62 @@ +import { GenericContent } from '@sensenet/default-content-types' +import { Icon, iconType } from '@sensenet/icons-react' +import Checkbox from '@material-ui/core/Checkbox' +import List from '@material-ui/core/List' +import ListItem from '@material-ui/core/ListItem' +import ListItemIcon from '@material-ui/core/ListItemIcon' +import ListItemText from '@material-ui/core/ListItemText' +import React, { useCallback } from 'react' +import { GenericContentWithIsParent } from '..' +import { useSelection } from '../hooks/use-selection' +import { PickerProps } from './picker' + +/** + * Represents a selection list component. + */ +export function SelectionList(props: PickerProps) { + const { selection, setSelection } = useSelection() + + const onCheckedChangeHandler = useCallback( + (_event: React.ChangeEvent, node: T) => { + setSelection(selection.filter((item) => item.Id !== node.Id)) + }, + [selection, setSelection], + ) + + const defaultRenderer = useCallback( + (item: T) => { + const labelId = `checkbox-list-label-${item.Id}` + + return ( + + + onCheckedChangeHandler(e, item as any)} + tabIndex={-1} + disableRipple + inputProps={{ 'aria-labelledby': labelId }} + /> + + + {props.renderIcon?.(item) || ( + + )} + + + + ) + }, + [onCheckedChangeHandler, props], + ) + + const renderItem = props.renderItem || defaultRenderer + + return {selection.map((item) => renderItem(item as any))} +} diff --git a/packages/sn-pickers-react/src/components/show-selected-button.tsx b/packages/sn-pickers-react/src/components/show-selected-button.tsx new file mode 100644 index 000000000..17f18d90e --- /dev/null +++ b/packages/sn-pickers-react/src/components/show-selected-button.tsx @@ -0,0 +1,24 @@ +import Box from '@material-ui/core/Box' +import Link from '@material-ui/core/Link' +import React from 'react' +import { useSelection } from '../hooks/use-selection' + +interface ShowSelectedButtonProps { + localization: { + label: string + } + handleClick: () => void + className?: string +} + +export const ShowSelectedButton: React.FC = ({ localization, className, handleClick }) => { + const { selection } = useSelection() + + return ( + + + {localization.label} ({selection.length}) + + + ) +} diff --git a/packages/sn-pickers-react/src/components/tree-picker/index.ts b/packages/sn-pickers-react/src/components/tree-picker/index.ts new file mode 100644 index 000000000..63cd3dae2 --- /dev/null +++ b/packages/sn-pickers-react/src/components/tree-picker/index.ts @@ -0,0 +1,2 @@ +export * from './tree-picker' +export * from './loaders' diff --git a/packages/sn-pickers-react/src/ListPicker/loaders.ts b/packages/sn-pickers-react/src/components/tree-picker/loaders.ts similarity index 98% rename from packages/sn-pickers-react/src/ListPicker/loaders.ts rename to packages/sn-pickers-react/src/components/tree-picker/loaders.ts index e6b8221b3..23bcc24b5 100644 --- a/packages/sn-pickers-react/src/ListPicker/loaders.ts +++ b/packages/sn-pickers-react/src/components/tree-picker/loaders.ts @@ -1,7 +1,7 @@ import { ODataParams, Repository } from '@sensenet/client-core' import { PathHelper } from '@sensenet/client-utils' import { GenericContent } from '@sensenet/default-content-types' -import { GenericContentWithIsParent } from './types' +import { GenericContentWithIsParent } from '../../types' interface LoadItemsOptions { path: string diff --git a/packages/sn-pickers-react/src/components/tree-picker/tree-picker.tsx b/packages/sn-pickers-react/src/components/tree-picker/tree-picker.tsx new file mode 100644 index 000000000..94351c344 --- /dev/null +++ b/packages/sn-pickers-react/src/components/tree-picker/tree-picker.tsx @@ -0,0 +1,124 @@ +import { GenericContent } from '@sensenet/default-content-types' +import { Icon, iconType } from '@sensenet/icons-react' +import Checkbox from '@material-ui/core/Checkbox' +import List from '@material-ui/core/List' +import ListItem from '@material-ui/core/ListItem' +import ListItemIcon from '@material-ui/core/ListItemIcon' +import ListItemText from '@material-ui/core/ListItemText' +import Typography from '@material-ui/core/Typography' +import ArrowUpward from '@material-ui/icons/ArrowUpward' +import React, { useCallback } from 'react' +import { useSelection, useTreePicker } from '../../hooks' +import { GenericContentWithIsParent } from '../../types' +import { PickerProps } from '../picker' + +/** + * Represents a list picker component. + */ +export function TreePicker(props: PickerProps) { + const { selection, setSelection } = useSelection() + const { items, navigateTo, isLoading, error } = useTreePicker({ + repository: props.repository, + currentPath: props.currentPath, + selectionRoots: props.selectionRoots, + allowMultiple: props.allowMultiple, + itemsODataOptions: props.itemsODataOptions as any, + parentODataOptions: props.parentODataOptions as any, + }) + + const onCheckedChangeHandler = useCallback( + (_event: React.ChangeEvent, node: T) => { + if (!node.isParent) { + const newSelection = props.allowMultiple ? selection.filter((item) => item.Id !== node.Id) : [] + if (newSelection.length === selection.length || (!props.allowMultiple && selection[0].Id !== node.Id)) { + newSelection.push(node) + } + setSelection(newSelection) + } + }, + [props, selection, setSelection], + ) + + const onDoubleClickHandler = useCallback( + (_event: React.MouseEvent, node: T) => { + if (node.IsFolder) { + navigateTo(node) + props.onTreeNavigation?.(node.Path) + } + }, + [navigateTo, props], + ) + + const defaultRenderer = useCallback( + (item: T) => { + if (item.isParent) { + return ( + + + + + + + ) + } + + const labelId = `checkbox-list-label-${item.Id}` + + return ( + + + {!props.selectionBlacklist?.includes(item.Path) && ( + selected.Id === item.Id)} + onChange={(e) => onCheckedChangeHandler(e, item as any)} + onDoubleClick={(e) => e.stopPropagation()} + tabIndex={-1} + disableRipple + inputProps={{ 'aria-labelledby': labelId }} + /> + )} + + + {props.renderIcon?.(item) || ( + + )} + + + + ) + }, + [selection, onCheckedChangeHandler, props], + ) + + const renderItem = props.renderItem || defaultRenderer + + if (isLoading) { + return props.renderLoading?.() || null + } + + if (error) { + return ( + props.renderError?.(error.message) || ( + + {error.message} + + ) + ) + } + + return ( + + {items?.map((item) => ( +
    onDoubleClickHandler(e, item as any)} key={item.Id}> + {renderItem(item as any)} +
    + ))} +
    + ) +} diff --git a/packages/sn-pickers-react/src/context/selection.tsx b/packages/sn-pickers-react/src/context/selection.tsx new file mode 100644 index 000000000..da2f5f308 --- /dev/null +++ b/packages/sn-pickers-react/src/context/selection.tsx @@ -0,0 +1,41 @@ +import { GenericContent } from '@sensenet/default-content-types' +import React, { useCallback, useState } from 'react' + +export interface SelectionState { + selection: GenericContent[] + setSelection: (nodes: GenericContent[]) => void + allowMultiple: boolean +} + +export const defaultSelectionState: SelectionState = { + selection: [], + setSelection: () => undefined, + allowMultiple: false, +} + +export const SelectionContext = React.createContext(defaultSelectionState) + +export const SelectionProvider: React.FC<{ + defaultValue?: GenericContent[] + allowMultiple?: boolean + selectionChangeCallback?: (selection: GenericContent[]) => void +}> = (props) => { + const { allowMultiple = false, children, selectionChangeCallback } = props + + const [selection, setSelectionValue] = useState( + props.defaultValue?.length ? props.defaultValue : [], + ) + + const setSelection = useCallback( + (nodes: GenericContent[]) => { + const newSelection = allowMultiple ? nodes : nodes.slice(-1) + setSelectionValue(newSelection) + selectionChangeCallback?.(newSelection) + }, + [allowMultiple, selectionChangeCallback], + ) + + return ( + {children} + ) +} diff --git a/packages/sn-pickers-react/src/hooks/index.ts b/packages/sn-pickers-react/src/hooks/index.ts new file mode 100644 index 000000000..011972e7c --- /dev/null +++ b/packages/sn-pickers-react/src/hooks/index.ts @@ -0,0 +1,2 @@ +export * from './use-selection' +export * from './use-tree-picker' diff --git a/packages/sn-pickers-react/src/hooks/use-selection.ts b/packages/sn-pickers-react/src/hooks/use-selection.ts new file mode 100644 index 000000000..fa705d563 --- /dev/null +++ b/packages/sn-pickers-react/src/hooks/use-selection.ts @@ -0,0 +1,4 @@ +import { useContext } from 'react' +import { SelectionContext } from '../context/selection' + +export const useSelection = () => useContext(SelectionContext) diff --git a/packages/sn-pickers-react/src/hooks/use-tree-picker.ts b/packages/sn-pickers-react/src/hooks/use-tree-picker.ts new file mode 100644 index 000000000..a48c0e924 --- /dev/null +++ b/packages/sn-pickers-react/src/hooks/use-tree-picker.ts @@ -0,0 +1,109 @@ +import { ConstantContent, ODataParams, Repository } from '@sensenet/client-core' +import { AsyncReturnValue, PathHelper } from '@sensenet/client-utils' +import { GenericContent } from '@sensenet/default-content-types' +import { useCallback, useEffect, useMemo, useState } from 'react' +import { loadItems } from '../components/tree-picker/loaders' +import { GenericContentWithIsParent } from '../types' + +interface State { + path: string + parentId: number | undefined +} + +const virtualRootPath = '!VirtualRoot!' + +const setParentIdAndPath = (node: T, parent?: T) => { + return parent && parent.Id === node.Id + ? { parentId: parent.ParentId, path: parent.Path } + : { parentId: node.ParentId, path: node.Path } +} + +/** + * useTreePicker let you select and navigate in the repository with built in defaults + */ +export const useTreePicker = (options: { + repository: Repository + currentPath?: string + selectionRoots?: string[] + allowMultiple?: boolean + itemsODataOptions?: ODataParams + parentODataOptions?: ODataParams +}) => { + // get defaults + const { repository, currentPath = '' } = options + + const roots = useMemo( + () => + options.selectionRoots?.filter( + (root, _index, original) => !original.some((item) => PathHelper.isAncestorOf(item, root)), + ), + [options.selectionRoots], + ) + + const [{ path, parentId }, dispatch] = useState({ + path: currentPath, + parentId: undefined, + }) + + const [reloadToken, setReloadToken] = useState(0) + const [items, setItems] = useState>([]) + const [isLoading, setIsLoading] = useState(false) + const [error, setError] = useState() + const reload = useCallback(() => { + setReloadToken(Date.now()) + }, []) + + useEffect(() => { + const abortController = new AbortController() + ;(async () => { + try { + setIsLoading(true) + + if (path === virtualRootPath && roots) { + const result = await Promise.all( + roots.map((root) => + repository.load({ + idOrPath: root, + oDataOptions: options.itemsODataOptions, + }), + ), + ) + return setItems(result.map((item) => ({ ...item.d, isParent: false }))) + } + + const result = await loadItems({ + path, + loadParent: !roots?.includes(path), + repository, + parentId, + itemsODataOptions: options.itemsODataOptions, + parentODataOptions: options.parentODataOptions, + abortController, + }) + + if ((roots?.length ?? 0) > 1 && roots?.includes(path)) { + result.unshift({ + ...(ConstantContent.EMPTY_CONTENT as T), + isParent: true, + IsFolder: true, + Path: virtualRootPath, + }) + } + + setItems(result) + } catch (e) { + if (!abortController.signal.aborted) { + setError(e) + } + } finally { + setIsLoading(false) + } + })() + }, [repository, reloadToken, parentId, roots, options.itemsODataOptions, options.parentODataOptions, path]) + + const navigateTo = useCallback((node: T) => dispatch(setParentIdAndPath(node, items?.find((c) => c.isParent) as T)), [ + items, + ]) + + return { items, navigateTo, path, isLoading, error, reload } +} diff --git a/packages/sn-pickers-react/src/index.ts b/packages/sn-pickers-react/src/index.ts index d6dadb159..b6b746ec6 100644 --- a/packages/sn-pickers-react/src/index.ts +++ b/packages/sn-pickers-react/src/index.ts @@ -1 +1,6 @@ -export * from './ListPicker' +export * from './components/picker' +export * from './components/search-picker' +export * from './components/selection-list' +export * from './components/tree-picker' +export * from './hooks' +export * from './types' diff --git a/packages/sn-pickers-react/src/types.ts b/packages/sn-pickers-react/src/types.ts new file mode 100644 index 000000000..5886c8713 --- /dev/null +++ b/packages/sn-pickers-react/src/types.ts @@ -0,0 +1,6 @@ +import { GenericContent } from '@sensenet/default-content-types' + +/** + * Generic content with isParent property + */ +export type GenericContentWithIsParent = GenericContent & { isParent?: boolean } diff --git a/packages/sn-pickers-react/tests/loaders.test.ts b/packages/sn-pickers-react/tests/loaders.test.ts index bcaebe8c0..5273c1986 100644 --- a/packages/sn-pickers-react/tests/loaders.test.ts +++ b/packages/sn-pickers-react/tests/loaders.test.ts @@ -1,4 +1,4 @@ -import { defaultLoadItemsODataOptions, loadItems } from '../src/ListPicker/loaders' +import { defaultLoadItemsODataOptions, loadItems } from '../src/components/tree-picker/loaders' import { mockContent } from './mocks/items' const repository = { diff --git a/packages/sn-pickers-react/tests/mocks/items.ts b/packages/sn-pickers-react/tests/mocks/items.ts index 49c7af5f0..9b366a30a 100644 --- a/packages/sn-pickers-react/tests/mocks/items.ts +++ b/packages/sn-pickers-react/tests/mocks/items.ts @@ -6,29 +6,31 @@ export const genericContentItems: Array { Id: 1, Type: 'Folder', - Path: 'path', + Path: 'path1', Name: 'Content1', DisplayName: 'Content 1', + IsFolder: true, isParent: true, }, { Id: 2, Type: 'Folder', - Path: 'path', + Path: 'path2', Name: 'Content2', DisplayName: 'Content 2', }, { Id: 3, Type: 'Folder', - Path: 'path', + Path: 'path3', Name: 'Content3', DisplayName: 'Content 3', + IsFolder: true, }, { Id: 4, Type: 'Folder', - Path: 'path', + Path: 'path4', Name: 'Content4', DisplayName: 'Content 4', }, diff --git a/packages/sn-pickers-react/tests/mocks/Pickers.tsx b/packages/sn-pickers-react/tests/mocks/pickers.tsx similarity index 60% rename from packages/sn-pickers-react/tests/mocks/Pickers.tsx rename to packages/sn-pickers-react/tests/mocks/pickers.tsx index d0959fa7d..3f0685a69 100644 --- a/packages/sn-pickers-react/tests/mocks/Pickers.tsx +++ b/packages/sn-pickers-react/tests/mocks/pickers.tsx @@ -1,9 +1,10 @@ import { Repository } from '@sensenet/client-core' import React from 'react' -import { GenericContentWithIsParent, useListPicker } from '../../src/ListPicker' +import { useTreePicker } from '../../src/hooks' +import { GenericContentWithIsParent } from '../../src/types' export const PickerWithoutOptions = (props: { repository: Repository }) => { - const { items } = useListPicker({ repository: props.repository }) + const { items } = useTreePicker({ repository: props.repository }) return
      {items && items.map((item) =>
    • )}
    } diff --git a/packages/sn-pickers-react/tests/picker.test.tsx b/packages/sn-pickers-react/tests/picker.test.tsx new file mode 100644 index 000000000..113aaf801 --- /dev/null +++ b/packages/sn-pickers-react/tests/picker.test.tsx @@ -0,0 +1,272 @@ +import Button from '@material-ui/core/Button' +import Checkbox from '@material-ui/core/Checkbox' +import IconButton from '@material-ui/core/IconButton' +import Link from '@material-ui/core/Link' +import ListItem from '@material-ui/core/ListItem' +import ListItemText from '@material-ui/core/ListItemText' +import TextField from '@material-ui/core/TextField' +import { mount } from 'enzyme' +import React from 'react' +import { act } from 'react-dom/test-utils' +import { SearchPicker, SelectionList, TreePicker } from '../src' +import { Picker } from '../src/components/picker' +import { genericContentItems } from './mocks/items' + +describe('Picker component', () => { + const repository = (loadCollectionValue?: unknown, loadValue?: unknown) => { + return { + loadCollection: () => { + return { + d: { + results: loadCollectionValue, + }, + } + }, + load: () => { + return { + d: loadValue, + } + }, + } + } + + it('should render properly', async () => { + let wrapper: any + await act(async () => { + wrapper = mount() + }) + + expect(wrapper.update().find(ListItem).exists()).toBeTruthy() + expect(wrapper.find(TextField).exists()).toBeTruthy() + expect(wrapper.find(Button).length).toBe(2) + expect(wrapper.find(ListItem).length).toBe(4) + }) + + it('should render disabled submit button when execution is in progress', async () => { + let wrapper: any + await act(async () => { + wrapper = mount() + }) + + const submitButton = wrapper.update().find(Button).at(1) + expect(submitButton.props().disabled).toBeTruthy() + }) + + it('should activate submit button only when the required number of items are selected', async () => { + let wrapper: any + await act(async () => { + wrapper = mount() + }) + + expect(wrapper.update().find(Button).at(1).props().disabled).toBeTruthy() + + await act( + async () => + await wrapper.find(ListItem).at(1).find(Checkbox).prop('onChange')({ target: { checked: true } } as any, true), + ) + + expect(wrapper.update().find(Button).at(1).props().disabled).toBeFalsy() + }) + + it('texts of "Show selected" link and in submit button should contain the count of selected items', async () => { + let wrapper: any + await act(async () => { + wrapper = mount() + }) + + wrapper.update() + + expect(wrapper.find(Button).at(1).text()).toContain('(0)') + expect(wrapper.find(Link).text()).toContain('(0)') + + await act( + async () => + await wrapper.find(ListItem).at(1).find(Checkbox).prop('onChange')({ target: { checked: true } } as any, true), + ) + + wrapper.update() + + expect(wrapper.find(Button).at(1).text()).toContain('(1)') + expect(wrapper.find(Link).text()).toContain('(1)') + }) + + it('should handle submit', async () => { + const onSubmit = jest.fn() + let wrapper: any + await act(async () => { + wrapper = mount() + }) + + await act(async () => wrapper.find(Button).at(1).simulate('click')) + + expect(onSubmit).toBeCalled() + }) + + it('should handle cancellation', async () => { + const onCancel = jest.fn() + let wrapper: any + await act(async () => { + wrapper = mount() + }) + + await act(async () => wrapper.find(Button).at(0).simulate('click')) + + expect(onCancel).toBeCalled() + }) + + it('should enter selection view mode after link is clicked', async () => { + let wrapper: any + await act(async () => { + wrapper = mount() + }) + + expect(wrapper.update().find(SelectionList).exists()).toBeFalsy() + + act(() => wrapper.find(Link).prop('onClick')()) + wrapper.update() + + expect(wrapper.update().find(SelectionList).exists()).toBeTruthy() + }) + + it('should enter tree view mode after icon is clicked', async () => { + let wrapper: any + await act(async () => { + wrapper = mount() + }) + + // navigate to selection list from tree view + act(() => wrapper.find(Link).prop('onClick')()) + + wrapper.update() + + expect(wrapper.update().find(TreePicker).exists()).toBeFalsy() + + // navigate back to tree view + await act(async () => { + await wrapper.find(IconButton).prop('onClick')() + wrapper.update() + }) + + expect(wrapper.update().find(TreePicker).exists()).toBeTruthy() + }) + + it('should enter search mode after input getting focus', async () => { + let wrapper: any + await act(async () => { + wrapper = mount() + }) + + expect(wrapper.update().find(SearchPicker).exists()).toBeFalsy() + + act(() => wrapper.find(TextField).prop('onFocus')()) + wrapper.update() + + expect(wrapper.update().find(SearchPicker).exists()).toBeTruthy() + }) + + it('should refresh the results after search', async () => { + jest.useFakeTimers('legacy') + + let wrapper: any + const repositoryInstance = repository(genericContentItems) + await act(async () => { + wrapper = mount() + }) + + await act(async () => { + const searchField = wrapper.find(TextField) + searchField.prop('onFocus')() + + repositoryInstance.loadCollection = () => ({ + d: { + results: [ + { + Id: 10, + Type: 'Folder', + Path: 'path', + Name: 'SampleWorkspace', + DisplayName: 'Sample Workspace', + }, + ], + }, + }) + + await searchField.prop('onChange')({ target: { value: 'workspace' } }) + jest.advanceTimersByTime(250) + }) + + wrapper.update() + + expect(wrapper.find(ListItem).length).toBe(1) + expect(wrapper.find(ListItemText).prop('primary')).toBe('Sample Workspace') + }) + + it('should search inside SelectionRoots', async () => { + jest.useFakeTimers('legacy') + + let wrapper: any + const loadCollection = jest.fn() + await act(async () => { + wrapper = mount( + , + ) + }) + + await act(async () => { + const searchField = wrapper.find(TextField) + searchField.prop('onFocus')() + + await searchField.prop('onChange')({ target: { value: 'workspace' } }) + jest.advanceTimersByTime(250) + + expect(loadCollection.mock.calls[1][0].oDataOptions).toEqual({ + query: + '(Name:\'*workspace*\' OR DisplayName:\'*workspace*\') AND (InTree:"/Root/Content" OR InTree:"/Root/IMS/Public")', + }) + }) + + wrapper.update() + }) + + it('should handle distinct SelectionRoots', async () => { + const loadCollection = () => ({ + d: { + results: [ + { + Id: 10, + Type: 'Folder', + Path: '/Root/Content', + Name: 'SampleWorkspace', + DisplayName: 'Sample Workspace', + }, + ], + }, + }) + const load = jest.fn() + const onTreeNavigation = jest.fn() + + let wrapper: any + await act(async () => { + wrapper = mount( + , + ) + }) + + wrapper.update() + + await act(async () => wrapper.update().find(ListItem).at(0).simulate('dblclick')) + + expect(onTreeNavigation).toHaveBeenCalledWith('!VirtualRoot!') + + expect(load).toHaveBeenCalledWith({ idOrPath: '/Root/Content', oDataOptions: undefined }) + expect(load).toHaveBeenCalledWith({ + idOrPath: '/Root/IMS/Public', + oDataOptions: undefined, + }) + }) +}) diff --git a/packages/sn-pickers-react/tests/search-picker.test.tsx b/packages/sn-pickers-react/tests/search-picker.test.tsx new file mode 100644 index 000000000..d5c303a63 --- /dev/null +++ b/packages/sn-pickers-react/tests/search-picker.test.tsx @@ -0,0 +1,78 @@ +import Checkbox from '@material-ui/core/Checkbox' +import ListItem from '@material-ui/core/ListItem' +import Typography from '@material-ui/core/Typography' +import { mount } from 'enzyme' +import React from 'react' +import { act } from 'react-dom/test-utils' +import { SearchPicker } from '../src' +import { SelectionProvider } from '../src/context/selection' +import { genericContentItems } from './mocks/items' + +describe('Search picker component', () => { + it('should handle selection', async () => { + let wrapper: any + await act(async () => { + wrapper = mount( + + + , + ) + }) + + await act(async () => { + await wrapper.find(ListItem).at(1).find(Checkbox).prop('onChange')({ target: { checked: true } }) + wrapper.update() + }) + + await act(async () => { + await wrapper.find(ListItem).at(2).find(Checkbox).prop('onChange')({ target: { checked: true } }) + wrapper.update() + }) + + expect(wrapper.findWhere((node) => node.name() === 'input' && node.prop('checked') === true)).toHaveLength(1) + }) + + it('should handle multiple selection', async () => { + let wrapper: any + await act(async () => { + wrapper = mount( + + + , + ) + }) + + await act(async () => { + await wrapper.find(ListItem).at(1).find(Checkbox).prop('onChange')({ target: { checked: true } }) + wrapper.update() + }) + + await act(async () => { + await wrapper.find(ListItem).at(2).find(Checkbox).prop('onChange')({ target: { checked: true } }) + wrapper.update() + }) + + expect(wrapper.findWhere((node) => node.name() === 'input' && node.prop('checked') === true)).toHaveLength(2) + }) + + it('should not render checkbox before blacklisted content', async () => { + let wrapper: any + await act(async () => { + wrapper = mount( + , + ) + }) + + expect(wrapper.find(ListItem).first().find(Checkbox).exists()).toBeFalsy() + }) + + it('should render an error message when error', async () => { + const errorMessage = 'Internal server error' + let wrapper: any + await act(async () => { + wrapper = mount() + }) + + expect(wrapper.find(Typography).text()).toEqual(errorMessage) + }) +}) diff --git a/packages/sn-pickers-react/tests/selection-list.test.tsx b/packages/sn-pickers-react/tests/selection-list.test.tsx new file mode 100644 index 000000000..d590d12a0 --- /dev/null +++ b/packages/sn-pickers-react/tests/selection-list.test.tsx @@ -0,0 +1,30 @@ +import Checkbox from '@material-ui/core/Checkbox' +import ListItem from '@material-ui/core/ListItem' +import { mount } from 'enzyme' +import React from 'react' +import { act } from 'react-dom/test-utils' +import { SelectionList } from '../src' +import { SelectionProvider } from '../src/context/selection' +import { genericContentItems } from './mocks/items' + +describe('Selection list component', () => { + it('should handle deselection', async () => { + let wrapper: any + await act(async () => { + wrapper = mount( + + + , + ) + }) + + await act(async () => { + await wrapper.find(ListItem).at(1).find(Checkbox).prop('onChange')({ target: { checked: false } }) + wrapper.update() + }) + + expect(wrapper.findWhere((node) => node.name() === 'input' && node.prop('checked') === true)).toHaveLength( + genericContentItems.length - 1, + ) + }) +}) diff --git a/packages/sn-pickers-react/tests/ListPicker.test.tsx b/packages/sn-pickers-react/tests/tree-picker.test.tsx similarity index 69% rename from packages/sn-pickers-react/tests/ListPicker.test.tsx rename to packages/sn-pickers-react/tests/tree-picker.test.tsx index 9428effc5..d8a2081fd 100644 --- a/packages/sn-pickers-react/tests/ListPicker.test.tsx +++ b/packages/sn-pickers-react/tests/tree-picker.test.tsx @@ -2,11 +2,11 @@ import ListItem from '@material-ui/core/ListItem' import { mount } from 'enzyme' import React from 'react' import { act } from 'react-dom/test-utils' -import { ListPickerComponent } from '../src/ListPicker' +import { TreePicker } from '../src/components/tree-picker' import { genericContentItems } from './mocks/items' -import { PickerWithoutOptions } from './mocks/Pickers' +import { PickerWithoutOptions } from './mocks/pickers' -describe('List picker component', () => { +describe('Tree picker component', () => { const repository = (loadCollectionValue?: unknown, loadValue?: unknown) => { return { loadCollection: () => { @@ -27,7 +27,7 @@ describe('List picker component', () => { it('should render list items', async () => { let wrapper: any await act(async () => { - wrapper = mount() + wrapper = mount() }) expect(wrapper.update().find(ListItem).exists()).toBeTruthy() @@ -38,7 +38,7 @@ describe('List picker component', () => { const loadingRenderer = jest.fn(() => null) let wrapper: any await act(async () => { - wrapper = mount() + wrapper = mount() }) expect(wrapper.find(ListItem).exists()).toBeFalsy() expect(loadingRenderer).toBeCalled() @@ -47,7 +47,7 @@ describe('List picker component', () => { it('should render nothing when no renderLoading and loading is true', async () => { let wrapper: any await act(async () => { - wrapper = mount() + wrapper = mount() }) expect(wrapper.find(ListItem).exists()).toBeFalsy() }) @@ -57,7 +57,7 @@ describe('List picker component', () => { let wrapper: any await act(async () => { wrapper = mount( - { let wrapper: any await act(async () => { wrapper = mount( - { @@ -97,7 +97,7 @@ describe('List picker component', () => { let wrapper: any await act(async () => { wrapper = mount( - , + , ) }) @@ -105,28 +105,14 @@ describe('List picker component', () => { wrapper.update().find(ListItem).first().simulate('dblclick') }) expect(onNavigation).toBeCalledWith(genericContentItems[0].Path) - await act(async () => { - wrapper.find(ListItem).first().simulate('dblclick') - }) - expect(onNavigation).toBeCalledWith(genericContentItems[3].Path) - }) - it('should handle selection', async () => { - const onSelectionChanged = jest.fn() - let wrapper: any await act(async () => { - wrapper = mount( - , - ) + wrapper.update().find(ListItem).at(2).simulate('dblclick') }) - wrapper.update().find(ListItem).first().simulate('click') - expect(onSelectionChanged).toBeCalled() + expect(onNavigation).toBeCalledWith(genericContentItems[2].Path) }) - it('render list items when no options passed to useListPicker', async () => { + it('render list items when no options passed to useTreePicker', async () => { let wrapper: any await act(async () => { wrapper = mount() diff --git a/packages/sn-pickers-react/tsconfig.json b/packages/sn-pickers-react/tsconfig.json index a6c024238..be03ac7b9 100644 --- a/packages/sn-pickers-react/tsconfig.json +++ b/packages/sn-pickers-react/tsconfig.json @@ -9,6 +9,7 @@ { "path": "../sn-client-core" }, { "path": "../sn-default-content-types" }, { "path": "../sn-icons-react" }, - { "path": "../sn-client-utils" } + { "path": "../sn-client-utils" }, + { "path": "../sn-query" } ] } diff --git a/packages/sn-search-react/src/Components/Fields/ReferenceField.tsx b/packages/sn-search-react/src/Components/Fields/ReferenceField.tsx index 9fa89b4a3..f37a236cc 100644 --- a/packages/sn-search-react/src/Components/Fields/ReferenceField.tsx +++ b/packages/sn-search-react/src/Components/Fields/ReferenceField.tsx @@ -109,7 +109,7 @@ export function ReferenceField(props: ReferenceFieldPr q.query((q2) => q2.equals('Name', term).or.equals('DisplayName', term).or.equals('Path', term)), ) - if (props.fieldSetting.AllowedTypes) { + if (props.fieldSetting.AllowedTypes?.length) { new QueryOperators(query).and.query((q2) => { ;(props.fieldSetting.AllowedTypes as string[]).forEach((allowedType, index, array) => { new QueryExpression(q2.queryRef).term(`TypeIs:${allowedType}`) From 7a8c6c3649a72187eb54ca86b8b09d7aaf5dbbc3 Mon Sep 17 00:00:00 2001 From: "eniko.pusztai" Date: Wed, 20 Jan 2021 13:21:02 +0100 Subject: [PATCH 07/11] Docviewer refact part2 (#1101) * make style changeable * refact shapes * style refact * add new shape widgets * add shapes * add annotation attributes * fix shapes * fix rotation * fix shape rotation again * reduce number of requests * finalize code * update unit tests part1 * add new unit tests * fix findings part1 * fix findings part2 * fix findings part3 * fix findings part4 --- .../src/components/content/Explore.tsx | 8 +- .../src/components/document-viewer.tsx | 59 +- .../src/services/content-context-service.ts | 8 + .../stories/viewer/ExampleAppLayout.tsx | 12 +- packages/sn-client-core/src/Models/Shapes.ts | 7 +- packages/sn-document-viewer-react/README.md | 49 +- .../src/components/comment/comment-card.tsx | 37 + .../src/components/comment/comment.tsx | 12 +- .../src/components/comment/create-comment.tsx | 45 +- .../comment/delete-comment-button.tsx | 2 +- .../src/components/comment/index.ts | 3 +- .../src/components/comment/pushpin-icon.tsx | 35 + .../src/components/comment/style.tsx | 29 - .../src/components/confirmation-dialog.tsx | 7 +- .../src/components/document-viewer-error.tsx | 44 +- .../src/components/document-viewer-layout.tsx | 56 +- .../components/document-viewer-loading.tsx | 52 +- .../document-viewer-regenerate-previews.tsx | 45 +- .../document-widgets/add-annotation.tsx | 46 + .../document-widgets/add-highlight.tsx | 46 + .../document-widgets/add-redaction.tsx | 46 + .../document-widgets/document-title-pager.tsx | 42 +- .../document-widgets/download-widget.tsx | 34 +- .../src/components/document-widgets/index.ts | 3 + .../document-widgets/print-widget.tsx | 28 +- .../document-widgets/rotate-active-pages.tsx | 16 +- .../document-widgets/rotate-document.tsx | 29 +- .../document-widgets/rotate-widget.tsx | 45 +- .../document-widgets/save-widget.tsx | 34 +- .../document-widgets/share-widget.tsx | 28 +- .../document-widgets/toggle-base.tsx | 39 +- .../document-widgets/toggle-comments.tsx | 26 +- .../document-widgets/toggle-redaction.tsx | 30 +- .../document-widgets/toggle-shapes.tsx | 28 +- .../document-widgets/toggle-thumbnails.tsx | 44 +- .../document-widgets/toggle-watermark.tsx | 29 +- .../document-widgets/zoom-in-out.tsx | 32 +- .../src/components/index.ts | 1 - .../src/components/layout-app-bar.tsx | 32 +- .../src/components/page-list.tsx | 56 +- .../src/components/page.tsx | 196 +++- .../components/shapes/annotation-wrapper.tsx | 87 ++ .../src/components/shapes/comment-marker.tsx | 101 ++ .../src/components/shapes/index.ts | 4 +- .../components/shapes/shape-annotation.tsx | 229 ++++- .../src/components/shapes/shape-draft.tsx | 39 + .../src/components/shapes/shape-highlight.tsx | 117 ++- .../src/components/shapes/shape-redaction.tsx | 131 ++- .../src/components/shapes/shape-skeleton.tsx | 30 +- .../src/components/shapes/shapes.tsx | 81 +- .../src/components/shapes/style.ts | 76 -- .../src/components/styles.ts | 26 - .../src/components/thumbnail-page.tsx | 32 +- .../src/components/thumbnails.tsx | 30 +- .../src/context/api-settings.tsx | 12 +- .../src/context/document-permissions.tsx | 10 +- .../src/context/localization-context.tsx | 3 + .../src/context/viewer-state.tsx | 1 + .../models/document-viewer-api-settings.ts | 6 +- .../src/models/viewer-state.ts | 11 + .../src/services/apply-shape-rotations.ts | 41 +- .../test/__Mocks__/viewercontext.ts | 7 +- .../document-title-pager.test.tsx.snap | 48 +- .../document-viewer-error.test.tsx.snap | 42 +- .../document-viewer-loading.test.tsx.snap | 28 +- ...t-viewer-regenerate-previews.test.tsx.snap | 42 +- .../document-viewer.test.tsx.snap | 9 + .../download-widget.test.tsx.snap | 25 +- .../layout-app-bar.test.tsx.snap | 14 +- .../__snapshots__/page-list.test.tsx.snap | 13 +- .../test/__snapshots__/page.test.tsx.snap | 20 +- .../__snapshots__/print-widget.test.tsx.snap | 25 +- .../rotate-active-page.test.tsx.snap | 942 +++++++++--------- .../save-document-component.test.tsx.snap | 200 ++-- .../shape-skeleton.test.tsx.snap | 53 +- .../test/__snapshots__/shapes.test.tsx.snap | 9 + .../__snapshots__/share-widget.test.tsx.snap | 25 +- .../__snapshots__/thumbnails.test.tsx.snap | 13 +- .../toggle-widgets.test.tsx.snap | 382 ------- .../__snapshots__/zoom-in-out.test.tsx.snap | 40 +- .../test/create-comment.test.tsx | 3 +- .../test/document-viewer-layout.test.tsx | 5 +- ...cument-viewer-regenerate-previews.test.tsx | 2 +- .../test/page-list.test.tsx | 3 +- .../test/page.test.tsx | 129 ++- .../test/rotate-active-page.test.tsx | 47 - .../test/shape-skeleton.test.tsx | 231 ++++- .../test/shapes.test.tsx | 7 + .../test/thumbnails.test.tsx | 2 +- .../test/toggle-widgets.test.tsx | 254 ++--- .../test/zoom-in-out.test.tsx | 4 +- 91 files changed, 3027 insertions(+), 2084 deletions(-) create mode 100644 packages/sn-document-viewer-react/src/components/comment/comment-card.tsx create mode 100644 packages/sn-document-viewer-react/src/components/comment/pushpin-icon.tsx delete mode 100644 packages/sn-document-viewer-react/src/components/comment/style.tsx create mode 100644 packages/sn-document-viewer-react/src/components/document-widgets/add-annotation.tsx create mode 100644 packages/sn-document-viewer-react/src/components/document-widgets/add-highlight.tsx create mode 100644 packages/sn-document-viewer-react/src/components/document-widgets/add-redaction.tsx create mode 100644 packages/sn-document-viewer-react/src/components/shapes/annotation-wrapper.tsx create mode 100644 packages/sn-document-viewer-react/src/components/shapes/comment-marker.tsx create mode 100644 packages/sn-document-viewer-react/src/components/shapes/shape-draft.tsx delete mode 100644 packages/sn-document-viewer-react/src/components/shapes/style.ts delete mode 100644 packages/sn-document-viewer-react/src/components/styles.ts create mode 100644 packages/sn-document-viewer-react/test/__snapshots__/shapes.test.tsx.snap delete mode 100644 packages/sn-document-viewer-react/test/__snapshots__/toggle-widgets.test.tsx.snap diff --git a/apps/sensenet/src/components/content/Explore.tsx b/apps/sensenet/src/components/content/Explore.tsx index 9082aa97e..535f66765 100644 --- a/apps/sensenet/src/components/content/Explore.tsx +++ b/apps/sensenet/src/components/content/Explore.tsx @@ -91,9 +91,13 @@ export function Explore({ const snRoute = useSnRoute() const activeAction = snRoute.match!.params.action - const onActivateItemOverride = (activeItem: GenericContent) => { + const onActivateItemOverride = async (activeItem: GenericContent) => { + const expandedItem = await repository.load({ + idOrPath: activeItem.Id, + oDataOptions: { select: 'all', expand: ['Actions'] as any }, + }) const { location } = history - history.push(getPrimaryActionUrl({ content: activeItem, repository, uiSettings, location, snRoute })) + history.push(getPrimaryActionUrl({ content: expandedItem.d, repository, uiSettings, location, snRoute })) } const onTreeLoadingChange = useCallback((isLoading) => setIsTreeLoading(isLoading), []) diff --git a/apps/sensenet/src/components/document-viewer.tsx b/apps/sensenet/src/components/document-viewer.tsx index 8023e9739..9c65e161b 100644 --- a/apps/sensenet/src/components/document-viewer.tsx +++ b/apps/sensenet/src/components/document-viewer.tsx @@ -1,21 +1,26 @@ import { + AddAnnotationWidget, + AddHighlightWidget, + AddRedactionWidget, DocumentTitlePager, LayoutAppBar, RotateActivePagesWidget, RotateDocumentWidget, ROTATION_MODE, + SaveWidget, DocumentViewer as SnDocumentViewer, ToggleCommentsWidget, + ToggleRedactionWidget, + ToggleShapesWidget, ToggleThumbnailsWidget, ZoomInOutWidget, } from '@sensenet/document-viewer-react' import { CurrentContentProvider } from '@sensenet/hooks-react' import { Button, createStyles, makeStyles, Theme } from '@material-ui/core' -import clsx from 'clsx' import React, { useCallback, useEffect } from 'react' import { useHistory, useRouteMatch } from 'react-router-dom' import { globals, useGlobalStyles } from '../globalStyles' -import { useLocalization, useSelectionService, useTheme } from '../hooks' +import { useLocalization, useSelectionService } from '../hooks' import { navigateToAction } from '../services' const useStyles = makeStyles((theme: Theme) => { @@ -44,15 +49,35 @@ const useStyles = makeStyles((theme: Theme) => { }) }) +const useAppBarStyles = makeStyles((theme: Theme) => + createStyles({ + appBar: { + backgroundColor: theme.palette.type === 'light' ? globals.light.drawerBackground : globals.dark.drawerBackground, + color: theme.palette.type === 'light' ? theme.palette.common.black : theme.palette.common.white, + }, + }), +) + +const useZoomInOutStyles = makeStyles(() => + createStyles({ + iconButton: { + '&:disabled': { + opacity: 0.26, + }, + }, + }), +) + export function DocumentViewer(props: { contentPath: string }) { const routeMatch = useRouteMatch<{ browseType: string; action: string }>() const history = useHistory() const selectionService = useSelectionService() const localization = useLocalization() - const theme = useTheme() const closeViewer = useCallback(() => navigateToAction({ history, routeMatch }), [history, routeMatch]) const classes = useStyles() const globalClasses = useGlobalStyles() + const layoutAppBarStyle = useAppBarStyles() + const disabledStyle = useZoomInOutStyles() useEffect(() => { const keyboardHandler = (event: KeyboardEvent) => { @@ -77,27 +102,23 @@ export function DocumentViewer(props: { contentPath: string }) { ( - +
    - - + + +
    - +
    + + + + + + +
    )} /> diff --git a/apps/sensenet/src/services/content-context-service.ts b/apps/sensenet/src/services/content-context-service.ts index 80c148e78..fa4cce182 100644 --- a/apps/sensenet/src/services/content-context-service.ts +++ b/apps/sensenet/src/services/content-context-service.ts @@ -183,6 +183,14 @@ export function getPrimaryActionUrl({ return getUrlForContent({ content, uiSettings, location, action: 'preview', snRoute, removePath }) } + if ( + content.Actions && + (content.Actions as any[]).length > 0 && + (content.Actions as ActionModel[]).find((a) => a.Name === 'CheckPreviews') + ) { + return getUrlForContent({ content, uiSettings, location, action: 'preview', snRoute, removePath }) + } + if ( content.Actions && (content.Actions as any[]).length > 0 && diff --git a/examples/sn-react-component-docs/stories/viewer/ExampleAppLayout.tsx b/examples/sn-react-component-docs/stories/viewer/ExampleAppLayout.tsx index 2a992c4f7..84ba1a339 100644 --- a/examples/sn-react-component-docs/stories/viewer/ExampleAppLayout.tsx +++ b/examples/sn-react-component-docs/stories/viewer/ExampleAppLayout.tsx @@ -1,5 +1,8 @@ import { Repository } from '@sensenet/client-core' import { + AddAnnotationWidget, + AddHighlightWidget, + AddRedactionWidget, defaultTheme, DocumentTitlePager, DocumentViewer, @@ -10,10 +13,11 @@ import { SaveWidget, Share, ToggleCommentsWidget, + ToggleRedactionWidget, ToggleShapesWidget, ToggleThumbnailsWidget, ZoomInOutWidget, -} from '@sensenet/document-viewer-react/src' +} from '@sensenet/document-viewer-react' import { RepositoryContext } from '@sensenet/hooks-react' import Button from '@material-ui/core/Button' import Checkbox from '@material-ui/core/Checkbox' @@ -82,7 +86,6 @@ export const ExampleAppLayout: React.FC = () => { renderAppBar={() => (
    - { @@ -105,6 +108,11 @@ export const ExampleAppLayout: React.FC = () => {
    + + + + +
    diff --git a/packages/sn-client-core/src/Models/Shapes.ts b/packages/sn-client-core/src/Models/Shapes.ts index 78f3e10d5..3877a06f2 100644 --- a/packages/sn-client-core/src/Models/Shapes.ts +++ b/packages/sn-client-core/src/Models/Shapes.ts @@ -45,14 +45,13 @@ export type Highlight = Shape * Model definition for an Annotation shape */ export interface Annotation extends Shape { - index: number lineHeight: number text: string - fontBold: string + fontBold: number fontColor: string fontFamily: string - fontItalic: string - fontSize: string + fontItalic: boolean + fontSize: number } /** diff --git a/packages/sn-document-viewer-react/README.md b/packages/sn-document-viewer-react/README.md index dc84b2863..c9d6c81df 100644 --- a/packages/sn-document-viewer-react/README.md +++ b/packages/sn-document-viewer-react/README.md @@ -20,41 +20,46 @@ npm install @sensenet/document-viewer-react ``` import { + AddAnnotationWidget, + AddHighlightWidget, + AddRedactionWidget, DocumentTitlePager, - Download, LayoutAppBar, - Print, RotateActivePagesWidget, RotateDocumentWidget, ROTATION_MODE, SaveWidget, - Share, DocumentViewer as SnDocumentViewer, ToggleCommentsWidget, ToggleRedactionWidget, ToggleShapesWidget, ToggleThumbnailsWidget, - ToggleWatermarkWidget, - ZoomInOutWidget + ZoomInOutWidget, } from '@sensenet/document-viewer-react' -}> - - - - - - - /> - - - --> this is under construction - --> this is under construction - --> this is under construction - --> this is under construction - - - +} + renderAppBar={() => ( + +
    + + + + + +
    + +
    + + + + + + +
    +
    + )} +/> ``` The main component is SnDocumentViewer, but you can extend functionality with any widgets from the example diff --git a/packages/sn-document-viewer-react/src/components/comment/comment-card.tsx b/packages/sn-document-viewer-react/src/components/comment/comment-card.tsx new file mode 100644 index 000000000..a6ac2f73a --- /dev/null +++ b/packages/sn-document-viewer-react/src/components/comment/comment-card.tsx @@ -0,0 +1,37 @@ +import Card from '@material-ui/core/Card/Card' +import { Theme } from '@material-ui/core/styles/createMuiTheme' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' +import React from 'react' + +type Props = { + active: boolean + onClick: () => void +} + +const useStyles = makeStyles(() => + createStyles({ + root: { + overflow: 'visible', + backgroundColor: ({ active }) => `${active ? 'rgb(0,0,0,0.1)' : 'rgb(0,0,0,0)'}`, + width: '100%', + marginBottom: '10px', + }, + }), +) + +/** + * Return a styled comment card component + * @param isSelected A flag for store if comment is selected or not + * @param onClick Function triggered on click event + * @returns styled comment card component + */ +export const CommentCard: React.FC = (props) => { + const classes = useStyles(props) + + return ( + + {props.children} + + ) +} diff --git a/packages/sn-document-viewer-react/src/components/comment/comment.tsx b/packages/sn-document-viewer-react/src/components/comment/comment.tsx index 2c2bb1cb7..83e4fd5c0 100644 --- a/packages/sn-document-viewer-react/src/components/comment/comment.tsx +++ b/packages/sn-document-viewer-react/src/components/comment/comment.tsx @@ -9,8 +9,7 @@ import Collapse from '@material-ui/core/Collapse' import Typography from '@material-ui/core/Typography' import React, { useEffect, useState } from 'react' import { useCommentState, useLocalization } from '../../hooks' -import { StyledCard } from './style' -import { DeleteButton } from '.' +import { CommentCard, DeleteButton } from '.' /** * Comment prop type @@ -38,12 +37,7 @@ export const Comment: React.FC = (props) => { }, [commentState.activeCommentId, props.comment.id]) return ( - commentState.setActiveComment(props.comment.id)}> + commentState.setActiveComment(props.comment.id)}> = (props) => { )} - + ) } diff --git a/packages/sn-document-viewer-react/src/components/comment/create-comment.tsx b/packages/sn-document-viewer-react/src/components/comment/create-comment.tsx index eb9230878..af505baef 100644 --- a/packages/sn-document-viewer-react/src/components/comment/create-comment.tsx +++ b/packages/sn-document-viewer-react/src/components/comment/create-comment.tsx @@ -1,13 +1,38 @@ -import { Button, FormControl, FormHelperText, IconButton, InputAdornment, TextField } from '@material-ui/core' +import Button from '@material-ui/core/Button/Button' +import FormControl from '@material-ui/core/FormControl/FormControl' +import FormHelperText from '@material-ui/core/FormHelperText/FormHelperText' +import IconButton from '@material-ui/core/IconButton/IconButton' +import InputAdornment from '@material-ui/core/InputAdornment/InputAdornment' +import { Theme } from '@material-ui/core/styles/createMuiTheme' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' +import TextField from '@material-ui/core/TextField/TextField' import Tooltip from '@material-ui/core/Tooltip' import React, { useCallback, useState } from 'react' import { useCommentState, useDocumentData, useDocumentViewerApi, useLocalization, useViewerState } from '../../hooks' -import { StyledButtonContainer, StyledForm, StyledSvgIcon } from './style' +import { PushPinIcon } from '.' + +const useStyles = makeStyles((theme: Theme) => { + return createStyles({ + buttonContainer: { + display: 'flex', + flexDirection: 'row-reverse', + }, + form: { + width: '100%', + display: 'flex', + }, + activePin: { + color: theme.palette.primary.light, + }, + }) +}) /** * Represents a comment creator component */ export function CreateComment() { + const classes = useStyles() const [errorMessage, setErrorMessage] = useState() const [createCommentValue, setCreateCommentValue] = useState('') const localization = useLocalization() @@ -16,6 +41,9 @@ export function CreateComment() { const api = useDocumentViewerApi() const { documentData } = useDocumentData() + const pageRotation = + viewerState.rotation?.find((rotation) => rotation.pageNum === viewerState.activePage)?.degree || 0 + const createComment = useCallback( (text: string) => { if (!commentState.draft) { @@ -76,6 +104,7 @@ export function CreateComment() { if (!viewerState.isCreateCommentActive) { return ( - + - + ) } diff --git a/packages/sn-document-viewer-react/src/components/comment/delete-comment-button.tsx b/packages/sn-document-viewer-react/src/components/comment/delete-comment-button.tsx index f0d84af0e..46150f680 100644 --- a/packages/sn-document-viewer-react/src/components/comment/delete-comment-button.tsx +++ b/packages/sn-document-viewer-react/src/components/comment/delete-comment-button.tsx @@ -1,5 +1,5 @@ import { CommentData } from '@sensenet/client-core' -import { Button } from '@material-ui/core' +import Button from '@material-ui/core/Button' import React, { useState } from 'react' import { ConfirmationDialog } from '..' import { useDocumentData, useDocumentViewerApi, useLocalization } from '../../hooks' diff --git a/packages/sn-document-viewer-react/src/components/comment/index.ts b/packages/sn-document-viewer-react/src/components/comment/index.ts index 5afbaa048..a36ca4e33 100644 --- a/packages/sn-document-viewer-react/src/components/comment/index.ts +++ b/packages/sn-document-viewer-react/src/components/comment/index.ts @@ -1,4 +1,5 @@ +export * from './comment-card' export * from './comment' export * from './create-comment' export * from './delete-comment-button' -export * from './style' +export * from './pushpin-icon' diff --git a/packages/sn-document-viewer-react/src/components/comment/pushpin-icon.tsx b/packages/sn-document-viewer-react/src/components/comment/pushpin-icon.tsx new file mode 100644 index 000000000..c0855bab0 --- /dev/null +++ b/packages/sn-document-viewer-react/src/components/comment/pushpin-icon.tsx @@ -0,0 +1,35 @@ +import { Theme } from '@material-ui/core/styles/createMuiTheme' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' +import SvgIcon from '@material-ui/core/SvgIcon/SvgIcon' +import React from 'react' + +type Props = { + isPlacingMarker: boolean + viewBox: string +} + +const useStyles = makeStyles((theme) => + createStyles({ + root: { + color: ({ isPlacingMarker }) => `${isPlacingMarker ? theme.palette.primary.light : 'inherit'}`, + transform: ({ isPlacingMarker }) => `${isPlacingMarker ? 'rotate(90deg)' : 'none'}`, + }, + }), +) + +/** + * Return a styled pushpin icon + * @param isPlacingMarker A flag to store if placing marker is in progress or not + * @param viewBox Viewbox property + * @returns styled pushpin icon + */ +export function PushPinIcon({ isPlacingMarker, viewBox }: Props) { + const classes = useStyles({ isPlacingMarker, viewBox }) + + return ( + + + + ) +} diff --git a/packages/sn-document-viewer-react/src/components/comment/style.tsx b/packages/sn-document-viewer-react/src/components/comment/style.tsx deleted file mode 100644 index abe83018e..000000000 --- a/packages/sn-document-viewer-react/src/components/comment/style.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import Card from '@material-ui/core/Card' -import SvgIcon from '@material-ui/core/SvgIcon' -import React from 'react' -import styled from 'styled-components' - -export const StyledForm = styled.form` - width: 100%; - display: flex; -` - -export const StyledSvgIcon = styled(({ isPlacingMarker, ...rest }) => )<{ - isPlacingMarker: boolean -}>` - color: ${(props) => (props.isPlacingMarker ? props.theme.palette.primary.light : 'inherit')}; - transform: ${(props) => (props.isPlacingMarker ? 'rotate(90deg)' : '')}; -` - -export const StyledCard = styled(({ isSelected, ...rest }) => )<{ isSelected: boolean }>` - && { - background-color: ${(props) => (props.isSelected ? 'rgb(0,0,0,0.1)' : 'rgb(0,0,0,0)')}; - width: 100%; - margin-bottom: 10px; - } -` - -export const StyledButtonContainer = styled.div` - display: flex; - flex-direction: row-reverse; -` diff --git a/packages/sn-document-viewer-react/src/components/confirmation-dialog.tsx b/packages/sn-document-viewer-react/src/components/confirmation-dialog.tsx index a2f2bb6a1..3887ee6a5 100644 --- a/packages/sn-document-viewer-react/src/components/confirmation-dialog.tsx +++ b/packages/sn-document-viewer-react/src/components/confirmation-dialog.tsx @@ -1,4 +1,9 @@ -import { Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle } from '@material-ui/core' +import Button from '@material-ui/core/Button/Button' +import Dialog from '@material-ui/core/Dialog/Dialog' +import DialogActions from '@material-ui/core/DialogActions/DialogActions' +import DialogContent from '@material-ui/core/DialogContent/DialogContent' +import DialogContentText from '@material-ui/core/DialogContentText/DialogContentText' +import DialogTitle from '@material-ui/core/DialogTitle/DialogTitle' import React from 'react' /** diff --git a/packages/sn-document-viewer-react/src/components/document-viewer-error.tsx b/packages/sn-document-viewer-react/src/components/document-viewer-error.tsx index 4b52171a5..193cfbcb7 100644 --- a/packages/sn-document-viewer-react/src/components/document-viewer-error.tsx +++ b/packages/sn-document-viewer-react/src/components/document-viewer-error.tsx @@ -1,32 +1,40 @@ -import { Typography } from '@material-ui/core' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' +import Typography from '@material-ui/core/Typography/Typography' import React from 'react' import { useDocumentData, useLocalization } from '../hooks' +const useStyles = makeStyles(() => { + return createStyles({ + mainWrapper: { + display: 'flex', + justifyContent: 'space-around', + alignContent: 'center', + alignItems: 'center', + height: '100%', + }, + errorWrapper: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + flexDirection: 'column', + maxWidth: 500, + margin: '.5em 0 .6em 0', + }, + }) +}) + /** * Component to display viewer related errors */ export const DocumentViewerError: React.FC = () => { + const classes = useStyles() const { documentData } = useDocumentData() const localization = useLocalization() return ( -
    -
    +
    +
    diff --git a/packages/sn-document-viewer-react/src/components/document-viewer-layout.tsx b/packages/sn-document-viewer-react/src/components/document-viewer-layout.tsx index fe8f35a8c..663f2b173 100644 --- a/packages/sn-document-viewer-react/src/components/document-viewer-layout.tsx +++ b/packages/sn-document-viewer-react/src/components/document-viewer-layout.tsx @@ -1,10 +1,12 @@ import Drawer from '@material-ui/core/Drawer' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' import Typography from '@material-ui/core/Typography' import React, { useCallback, useEffect } from 'react' import { CommentsContext } from '../context/comments' import { useLocalization, useViewerSettings, useViewerState } from '../hooks' import { Comment, CreateComment } from './comment' -import { CommentsContainer, PageList, Thumbnails } from './' +import { PageList, Thumbnails } from './' export const THUMBNAIL_PADDING = 16 export const THUMBNAIL_NAME = 'Thumbnail' @@ -13,6 +15,34 @@ export const PAGE_PADDING = 8 export const PAGE_NAME = 'Page' export const PAGE_CONTAINER_ID = 'sn-document-viewer-pages' +const useStyles = makeStyles(() => { + return createStyles({ + mainWrapper: { + width: '100%', + height: '100%', + display: 'flex', + flexDirection: 'column', + flexGrow: 1, + }, + layout: { + display: 'flex', + flexGrow: 1, + width: '100%', + overflow: 'hidden', + zIndex: 0, + position: 'relative', + }, + commentContainer: { + display: 'flex', + flexFlow: 'column', + padding: '15px', + justifyContent: 'space-between', + alignItems: 'center', + overflow: 'auto', + }, + }) +}) + interface ScrollToOptions { containerId: string index: number @@ -22,6 +52,7 @@ interface ScrollToOptions { } export const DocumentViewerLayout: React.FC = () => { + const classes = useStyles() const viewerState = useViewerState() const localization = useLocalization() const viewerSettings = useViewerSettings() @@ -66,24 +97,9 @@ export const DocumentViewerLayout: React.FC = () => { }, [scrollTo, viewerState.pageToGo]) return ( -
    +
    {viewerSettings.renderAppBar()} -
    +
    { overflow: 'hidden', }, }}> - +
    {localization.commentSideBarTitle} @@ -121,7 +137,7 @@ export const DocumentViewerLayout: React.FC = () => { commentsContext.comments.map((comment) => ) } - +
    diff --git a/packages/sn-document-viewer-react/src/components/document-viewer-loading.tsx b/packages/sn-document-viewer-react/src/components/document-viewer-loading.tsx index 3d610dac5..2c11a534e 100644 --- a/packages/sn-document-viewer-react/src/components/document-viewer-loading.tsx +++ b/packages/sn-document-viewer-react/src/components/document-viewer-loading.tsx @@ -1,38 +1,46 @@ +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' import Typography from '@material-ui/core/Typography' import React from 'react' import { useLocalization } from '../hooks' +const useStyles = makeStyles(() => { + return createStyles({ + mainWrapper: { + display: 'flex', + justifyContent: 'space-around', + alignContent: 'center', + alignItems: 'center', + height: '100%', + }, + loaderWrapper: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + flexDirection: 'column', + maxWidth: 500, + margin: '.5em 0 .6em 0', + }, + typography: { + marginTop: '1rem', + fontWeight: 'bolder', + }, + }) +}) + interface DocumentViewerLoadingProps { image: string } export const DocumentViewerLoading: React.FC = (props) => { + const classes = useStyles() const localization = useLocalization() return ( -
    -
    +
    +
    Loader - + {localization.loadingDocument}
    diff --git a/packages/sn-document-viewer-react/src/components/document-viewer-regenerate-previews.tsx b/packages/sn-document-viewer-react/src/components/document-viewer-regenerate-previews.tsx index bbff06754..804f0e34f 100644 --- a/packages/sn-document-viewer-react/src/components/document-viewer-regenerate-previews.tsx +++ b/packages/sn-document-viewer-react/src/components/document-viewer-regenerate-previews.tsx @@ -1,9 +1,33 @@ -import { Button, CircularProgress } from '@material-ui/core' +import Button from '@material-ui/core/Button/Button' +import CircularProgress from '@material-ui/core/CircularProgress/CircularProgress' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' import Typography from '@material-ui/core/Typography' import React, { useState } from 'react' import { useDocumentData, useDocumentViewerApi, useLocalization } from '../hooks' +const useStyles = makeStyles(() => { + return createStyles({ + mainWrapper: { + display: 'flex', + justifyContent: 'space-around', + alignContent: 'center', + alignItems: 'center', + height: '100%', + }, + regenerateWrapper: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + flexDirection: 'column', + maxWidth: 500, + margin: '.5em 0 .6em 0', + }, + }) +}) + export const DocumentViewerRegeneratePreviews: React.FC = () => { + const classes = useStyles() const [isRegenerating, setIsRegenerating] = useState(false) const localization = useLocalization() @@ -15,23 +39,8 @@ export const DocumentViewerRegeneratePreviews: React.FC = () => { * renders the component */ return ( -
    -
    +
    +
    {localization.regeneratePreviews} diff --git a/packages/sn-document-viewer-react/src/components/document-widgets/add-annotation.tsx b/packages/sn-document-viewer-react/src/components/document-widgets/add-annotation.tsx new file mode 100644 index 000000000..1f59b7c21 --- /dev/null +++ b/packages/sn-document-viewer-react/src/components/document-widgets/add-annotation.tsx @@ -0,0 +1,46 @@ +import { Theme } from '@material-ui/core/styles/createMuiTheme' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' +import ChatSharp from '@material-ui/icons/ChatSharp' +import clsx from 'clsx' +import React from 'react' +import { useDocumentPermissions, useLocalization, useViewerState } from '../../hooks' +import { ToggleBase } from './toggle-base' + +const useStyles = makeStyles((theme: Theme) => { + return createStyles({ + iconButton: {}, + icon: {}, + iconActive: { + fill: theme.palette.primary.main, + }, + }) +}) + +type AddAnnnotationClassKey = Partial> + +/** + * Document widget component to draw Annotation + */ +export const AddAnnotationWidget: React.FC<{ classes?: AddAnnnotationClassKey }> = (props) => { + const classes = useStyles(props) + const localization = useLocalization() + const viewerState = useViewerState() + const permissions = useDocumentPermissions() + + const pageRotation = + viewerState.rotation?.find((rotation) => rotation.pageNum === viewerState.activePage)?.degree || 0 + + return ( + viewerState.updateState({ activeShapePlacing: value ? 'annotation' : 'none' })}> + + + ) +} diff --git a/packages/sn-document-viewer-react/src/components/document-widgets/add-highlight.tsx b/packages/sn-document-viewer-react/src/components/document-widgets/add-highlight.tsx new file mode 100644 index 000000000..49d29378f --- /dev/null +++ b/packages/sn-document-viewer-react/src/components/document-widgets/add-highlight.tsx @@ -0,0 +1,46 @@ +import { Theme } from '@material-ui/core/styles/createMuiTheme' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' +import ChatBubbleOutlineSharp from '@material-ui/icons/ChatBubbleOutlineSharp' +import clsx from 'clsx' +import React from 'react' +import { useDocumentPermissions, useLocalization, useViewerState } from '../../hooks' +import { ToggleBase } from './toggle-base' + +const useStyles = makeStyles((theme: Theme) => { + return createStyles({ + iconButton: {}, + icon: {}, + iconActive: { + fill: theme.palette.primary.main, + }, + }) +}) + +type AddRHightlightClassKey = Partial> + +/** + * Document widget component to draw Highlight + */ +export const AddHighlightWidget: React.FC<{ classes?: AddRHightlightClassKey }> = (props) => { + const classes = useStyles(props) + const localization = useLocalization() + const viewerState = useViewerState() + const permissions = useDocumentPermissions() + + const pageRotation = + viewerState.rotation?.find((rotation) => rotation.pageNum === viewerState.activePage)?.degree || 0 + + return ( + viewerState.updateState({ activeShapePlacing: value ? 'highlight' : 'none' })}> + + + ) +} diff --git a/packages/sn-document-viewer-react/src/components/document-widgets/add-redaction.tsx b/packages/sn-document-viewer-react/src/components/document-widgets/add-redaction.tsx new file mode 100644 index 000000000..eebe51414 --- /dev/null +++ b/packages/sn-document-viewer-react/src/components/document-widgets/add-redaction.tsx @@ -0,0 +1,46 @@ +import { Theme } from '@material-ui/core/styles/createMuiTheme' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' +import ChatBubbleSharp from '@material-ui/icons/ChatBubbleSharp' +import clsx from 'clsx' +import React from 'react' +import { useDocumentPermissions, useLocalization, useViewerState } from '../../hooks' +import { ToggleBase } from './toggle-base' + +const useStyles = makeStyles((theme: Theme) => { + return createStyles({ + iconButton: {}, + icon: {}, + iconActive: { + fill: theme.palette.primary.main, + }, + }) +}) + +type AddRedactionClassKey = Partial> + +/** + * Document widget component to draw Redaction + */ +export const AddRedactionWidget: React.FC<{ classes?: AddRedactionClassKey }> = (props) => { + const classes = useStyles(props) + const localization = useLocalization() + const viewerState = useViewerState() + const permissions = useDocumentPermissions() + + const pageRotation = + viewerState.rotation?.find((rotation) => rotation.pageNum === viewerState.activePage)?.degree || 0 + + return ( + viewerState.updateState({ activeShapePlacing: value ? 'redaction' : 'none' })}> + + + ) +} diff --git a/packages/sn-document-viewer-react/src/components/document-widgets/document-title-pager.tsx b/packages/sn-document-viewer-react/src/components/document-widgets/document-title-pager.tsx index cea7d0da6..c3125f7b7 100644 --- a/packages/sn-document-viewer-react/src/components/document-widgets/document-title-pager.tsx +++ b/packages/sn-document-viewer-react/src/components/document-widgets/document-title-pager.tsx @@ -1,13 +1,41 @@ import ClickAwayListener from '@material-ui/core/ClickAwayListener' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' import TextField from '@material-ui/core/TextField' import Typography from '@material-ui/core/Typography' import React, { useState } from 'react' import { useDocumentData, useLocalization, useViewerState } from '../../hooks' +const useStyles = makeStyles(() => { + return createStyles({ + typography: { + cursor: 'pointer', + display: 'flex', + alignItems: 'center', + overflow: 'hidden', + margin: '0 2.5em', + }, + nameWrapper: { + whiteSpace: 'nowrap', + overflow: 'hidden', + textOverflow: 'ellipsis', + }, + textField: { + flexShrink: 0, + }, + notFocusedText: { + flexShrink: 0, + }, + }) +}) + +type DocumentTitlePagerClassKey = Partial> + /** * Document widget component for paging */ -export const DocumentTitlePager: React.FC = () => { +export const DocumentTitlePager: React.FunctionComponent<{ classes?: DocumentTitlePagerClassKey }> = (props) => { + const classes = useStyles(props) const { documentData } = useDocumentData() const viewerState = useViewerState() const localization = useLocalization() @@ -29,11 +57,9 @@ export const DocumentTitlePager: React.FC = () => { onClick={() => setIsFocused(true)} variant="h6" color="inherit" - style={{ cursor: 'pointer', display: 'flex', alignItems: 'center', overflow: 'hidden', margin: '0 2.5em' }} - title={documentData.documentName}> -
    - {documentData.documentName}  -
    + title={documentData.documentName} + className={classes.typography}> +
    {documentData.documentName} 
    {isFocused ? (
    { @@ -41,7 +67,7 @@ export const DocumentTitlePager: React.FC = () => { ev.preventDefault() }}> setCurrentValue(ev.currentTarget.value)} onBlur={() => gotoPage(currentValue)} @@ -60,7 +86,7 @@ export const DocumentTitlePager: React.FC = () => { /> ) : ( -
    +
    {viewerState.activePage} / {documentData.pageCount}
    )} diff --git a/packages/sn-document-viewer-react/src/components/document-widgets/download-widget.tsx b/packages/sn-document-viewer-react/src/components/document-widgets/download-widget.tsx index d407e85ee..6259381a3 100644 --- a/packages/sn-document-viewer-react/src/components/document-widgets/download-widget.tsx +++ b/packages/sn-document-viewer-react/src/components/document-widgets/download-widget.tsx @@ -1,31 +1,43 @@ import { DocumentData } from '@sensenet/client-core' import IconButton from '@material-ui/core/IconButton' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' import CloudDownload from '@material-ui/icons/CloudDownload' import React from 'react' import { useDocumentData, useLocalization } from '../../hooks' +const useStyles = makeStyles(() => { + return createStyles({ + iconButton: { display: 'inline-block' }, + icon: {}, + }) +}) + +type DownloadClassKey = Partial> + /** - * Own properties for the Share component + * Own properties for the Download component */ export interface DownloadProps { download: (document: DocumentData) => void + classes?: DownloadClassKey } /** - * Component that allows active page rotation + * Component that allows download */ export const Download: React.FC = (props) => { + const classes = useStyles(props) const localization = useLocalization() const { documentData } = useDocumentData() return ( -
    - props.download(documentData)} - id="CloudDownload"> - - -
    + props.download(documentData)} + id="CloudDownload"> + + ) } diff --git a/packages/sn-document-viewer-react/src/components/document-widgets/index.ts b/packages/sn-document-viewer-react/src/components/document-widgets/index.ts index 19eef0f5d..53ffa8289 100644 --- a/packages/sn-document-viewer-react/src/components/document-widgets/index.ts +++ b/packages/sn-document-viewer-react/src/components/document-widgets/index.ts @@ -1,3 +1,6 @@ +export * from './add-annotation' +export * from './add-highlight' +export * from './add-redaction' export * from './document-title-pager' export * from './download-widget' export * from './print-widget' diff --git a/packages/sn-document-viewer-react/src/components/document-widgets/print-widget.tsx b/packages/sn-document-viewer-react/src/components/document-widgets/print-widget.tsx index 24f71719b..5709acf8f 100644 --- a/packages/sn-document-viewer-react/src/components/document-widgets/print-widget.tsx +++ b/packages/sn-document-viewer-react/src/components/document-widgets/print-widget.tsx @@ -1,27 +1,43 @@ import { DocumentData } from '@sensenet/client-core' import IconButton from '@material-ui/core/IconButton' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' import PrintIcon from '@material-ui/icons/Print' import React from 'react' import { useDocumentData, useLocalization } from '../../hooks' +const useStyles = makeStyles(() => { + return createStyles({ + iconButton: { display: 'inline-block' }, + icon: {}, + }) +}) + +type PrintClassKey = Partial> + /** * Own properties for the Print component */ export interface PrintProps { print: (document: DocumentData) => void + classes?: PrintClassKey } /** - * Component that allows active page rotation + * Component that allows print */ export const Print: React.FC = (props) => { + const classes = useStyles(props) const localization = useLocalization() const { documentData } = useDocumentData() return ( -
    - props.print(documentData)} id="Print"> - - -
    + props.print(documentData)} + id="Print"> + + ) } diff --git a/packages/sn-document-viewer-react/src/components/document-widgets/rotate-active-pages.tsx b/packages/sn-document-viewer-react/src/components/document-widgets/rotate-active-pages.tsx index 09a834ae5..3dae93bda 100644 --- a/packages/sn-document-viewer-react/src/components/document-widgets/rotate-active-pages.tsx +++ b/packages/sn-document-viewer-react/src/components/document-widgets/rotate-active-pages.tsx @@ -1,4 +1,6 @@ import IconButton from '@material-ui/core/IconButton' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' import RotateLeft from '@material-ui/icons/RotateLeft' import RotateRight from '@material-ui/icons/RotateRight' import React from 'react' @@ -6,21 +8,33 @@ import { useLocalization } from '../../hooks' import { ROTATION_MODE } from '../../models/rotation-model' import { RotateWidget } from './rotate-widget' +const useStyles = makeStyles(() => { + return createStyles({ + iconButton: {}, + icon: {}, + }) +}) + +type RotateActivePagesClassKey = Partial> + export interface RotateActivePagesWidgetProps { mode?: ROTATION_MODE + classes?: RotateActivePagesClassKey } export const RotateActivePagesWidget: React.FC = (props) => { const localization = useLocalization() + const classes = useStyles(props) const button = (direction: ROTATION_MODE, rotateDocument: (mode: string) => void) => { const isLeft = direction === ROTATION_MODE.anticlockwise return ( (isLeft ? rotateDocument('left') : rotateDocument('right'))}> - {isLeft ? : } + {isLeft ? : } ) } diff --git a/packages/sn-document-viewer-react/src/components/document-widgets/rotate-document.tsx b/packages/sn-document-viewer-react/src/components/document-widgets/rotate-document.tsx index 3f2b910e9..bfdd5d5af 100644 --- a/packages/sn-document-viewer-react/src/components/document-widgets/rotate-document.tsx +++ b/packages/sn-document-viewer-react/src/components/document-widgets/rotate-document.tsx @@ -1,4 +1,6 @@ import IconButton from '@material-ui/core/IconButton' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' import RotateLeft from '@material-ui/icons/RotateLeft' import RotateRight from '@material-ui/icons/RotateRight' import React from 'react' @@ -6,24 +8,39 @@ import { useLocalization } from '../../hooks' import { ROTATION_MODE } from '../../models/rotation-model' import { RotateWidget } from './rotate-widget' +const useStyles = makeStyles(() => { + return createStyles({ + iconButton: { display: 'inline-block' }, + icon: { + border: '2px solid', + borderRadius: '5px', + }, + }) +}) + +type RotateDocumentClassKey = Partial> + +export interface RotateDocumentWidgetProps { + mode?: ROTATION_MODE + classes?: RotateDocumentClassKey +} + /** * Component that allows document rotation */ -export const RotateDocumentWidget: React.FC<{ mode?: ROTATION_MODE }> = (props) => { +export const RotateDocumentWidget: React.FC = (props) => { const localization = useLocalization() + const classes = useStyles(props) const button = (direction: ROTATION_MODE, rotateDocument: (mode: string) => void) => { const isLeft = direction === ROTATION_MODE.anticlockwise return ( rotateDocument('left') : () => rotateDocument('right')} id={isLeft ? 'RotateLeft' : 'RotateRight'}> - {isLeft ? ( - - ) : ( - - )} + {isLeft ? : } ) } diff --git a/packages/sn-document-viewer-react/src/components/document-widgets/rotate-widget.tsx b/packages/sn-document-viewer-react/src/components/document-widgets/rotate-widget.tsx index f6f9f94e8..53e48fe9f 100644 --- a/packages/sn-document-viewer-react/src/components/document-widgets/rotate-widget.tsx +++ b/packages/sn-document-viewer-react/src/components/document-widgets/rotate-widget.tsx @@ -1,6 +1,6 @@ import React, { useCallback } from 'react' -import { applyShapeRotations, ImageUtil, ROTATION_AMOUNT, ROTATION_MODE, RotationModel } from '../..' -import { useDocumentData, usePreviewImages, useViewerState } from '../../hooks' +import { ImageUtil, ROTATION_AMOUNT, ROTATION_MODE, RotationModel } from '../..' +import { usePreviewImages, useViewerState } from '../../hooks' export interface RotateWidgetProps { mode?: ROTATION_MODE @@ -11,7 +11,6 @@ export interface RotateWidgetProps { export const RotateWidget: React.FC = (props) => { const viewerState = useViewerState() const previewImages = usePreviewImages() - const { documentData, updateDocumentData } = useDocumentData() const rotateFunc = (newRotation: RotationModel[], direction: string, pageIndex: number) => { const existingObj = newRotation.find((rotation) => rotation.pageNum === pageIndex) @@ -45,42 +44,8 @@ export const RotateWidget: React.FC = (props) => { viewerState.updateState({ rotation: newRotation, }) - - //update shapes as well - const newImages = previewImages.imageData.map((img) => { - updateDocumentData({ - shapes: { - annotations: applyShapeRotations( - documentData.shapes.annotations, - direction === 'left' ? -ROTATION_AMOUNT : ROTATION_AMOUNT, - img, - ), - highlights: applyShapeRotations( - documentData.shapes.highlights, - direction === 'left' ? -ROTATION_AMOUNT : ROTATION_AMOUNT, - img, - ), - redactions: applyShapeRotations( - documentData.shapes.redactions, - direction === 'left' ? -ROTATION_AMOUNT : ROTATION_AMOUNT, - img, - ), - }, - }) - - return img - }) - previewImages.setImageData(newImages) }, - [ - documentData.shapes.annotations, - documentData.shapes.highlights, - documentData.shapes.redactions, - previewImages, - props.pages, - updateDocumentData, - viewerState, - ], + [previewImages.imageData, props.pages, viewerState], ) switch (props.mode) { @@ -89,10 +54,10 @@ export const RotateWidget: React.FC = (props) => { return props.renderButton(props.mode, rotateDocument) default: return ( -
    + <> {props.renderButton(ROTATION_MODE.anticlockwise, rotateDocument)} {props.renderButton(ROTATION_MODE.clockwise, rotateDocument)} -
    + ) } } diff --git a/packages/sn-document-viewer-react/src/components/document-widgets/save-widget.tsx b/packages/sn-document-viewer-react/src/components/document-widgets/save-widget.tsx index b03e15f8b..f77df3105 100644 --- a/packages/sn-document-viewer-react/src/components/document-widgets/save-widget.tsx +++ b/packages/sn-document-viewer-react/src/components/document-widgets/save-widget.tsx @@ -1,4 +1,6 @@ import IconButton from '@material-ui/core/IconButton' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' import Save from '@material-ui/icons/Save' import React, { useCallback } from 'react' import { @@ -10,10 +12,20 @@ import { useViewerState, } from '../../hooks' +const useStyles = makeStyles(() => { + return createStyles({ + iconButton: { display: 'inline-block' }, + icon: {}, + }) +}) + +type SaveClassKey = Partial> + /** * Document widget component for saving document state */ -export const SaveWidget: React.FC = () => { +export const SaveWidget: React.FC<{ classes?: SaveClassKey }> = (props) => { + const classes = useStyles(props) const api = useDocumentViewerApi() const { documentData } = useDocumentData() const permissions = useDocumentPermissions() @@ -28,17 +40,17 @@ export const SaveWidget: React.FC = () => { pages: pages.imageData, abortController: new AbortController(), }) - }, [api, documentData, pages, permissions.canEdit]) + viewerState.updateState({ hasChanges: false }) + }, [api, documentData, pages.imageData, permissions.canEdit, viewerState]) return ( -
    - - - -
    + + + ) } diff --git a/packages/sn-document-viewer-react/src/components/document-widgets/share-widget.tsx b/packages/sn-document-viewer-react/src/components/document-widgets/share-widget.tsx index 81f11a54d..9863b3486 100644 --- a/packages/sn-document-viewer-react/src/components/document-widgets/share-widget.tsx +++ b/packages/sn-document-viewer-react/src/components/document-widgets/share-widget.tsx @@ -1,27 +1,43 @@ import { DocumentData } from '@sensenet/client-core' import IconButton from '@material-ui/core/IconButton' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' import ShareIcon from '@material-ui/icons/Share' import React from 'react' import { useDocumentData, useLocalization } from '../../hooks' +const useStyles = makeStyles(() => { + return createStyles({ + iconButton: { display: 'inline-block' }, + icon: {}, + }) +}) + +type ShareClassKey = Partial> + /** * Own properties for the Share component */ export interface ShareProps { share: (document: DocumentData) => void + classes?: ShareClassKey } /** - * Component that allows active page rotation + * Component that allows sharing */ export const Share: React.FC = (props) => { + const classes = useStyles(props) const localization = useLocalization() const { documentData } = useDocumentData() return ( -
    - props.share(documentData)} id="Share"> - - -
    + props.share(documentData)} + id="Share"> + + ) } diff --git a/packages/sn-document-viewer-react/src/components/document-widgets/toggle-base.tsx b/packages/sn-document-viewer-react/src/components/document-widgets/toggle-base.tsx index 5cf1e615a..565bcd260 100644 --- a/packages/sn-document-viewer-react/src/components/document-widgets/toggle-base.tsx +++ b/packages/sn-document-viewer-react/src/components/document-widgets/toggle-base.tsx @@ -1,6 +1,18 @@ import IconButton from '@material-ui/core/IconButton/IconButton' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' import React from 'react' +const useStyles = makeStyles(() => { + return createStyles({ + iconButton: { display: 'inline-block' }, + iconActive: {}, + icon: {}, + }) +}) + +type ToggleBaseClassKey = Partial> + /** * Properties for Toggle Base component */ @@ -8,7 +20,7 @@ export interface ToggleBaseProps { /** * Determines if the button is toggled */ - isVisible: boolean + active: boolean /** * The title property of the button @@ -19,18 +31,31 @@ export interface ToggleBaseProps { * Function to set the isVisible's value */ setValue: (isVisible: boolean) => void + + /** + * Determines if the button is disabled + */ + disabled?: boolean + + /** + * Styles to override + */ + classes?: ToggleBaseClassKey } /** * Represents a base toggle component */ -export const ToggleBase: React.FunctionComponent = (props) => ( -
    +export const ToggleBase: React.FunctionComponent = (props) => { + const classes = useStyles(props) + return ( props.setValue(!props.isVisible)}> + onClick={() => props.setValue(!props.active)}> {props.children} -
    -) + ) +} diff --git a/packages/sn-document-viewer-react/src/components/document-widgets/toggle-comments.tsx b/packages/sn-document-viewer-react/src/components/document-widgets/toggle-comments.tsx index ba2c0bf45..95b44ed3d 100644 --- a/packages/sn-document-viewer-react/src/components/document-widgets/toggle-comments.tsx +++ b/packages/sn-document-viewer-react/src/components/document-widgets/toggle-comments.tsx @@ -1,20 +1,38 @@ -import Comment from '@material-ui/icons/Comment' +import { Theme } from '@material-ui/core/styles/createMuiTheme' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' +import Forum from '@material-ui/icons/Forum' +import clsx from 'clsx' import React from 'react' import { useLocalization, useViewerState } from '../../hooks' import { ToggleBase } from './toggle-base' +const useStyles = makeStyles((theme: Theme) => { + return createStyles({ + iconButton: {}, + icon: {}, + iconActive: { + fill: theme.palette.primary.main, + }, + }) +}) + +type ToggleCommentsClassKey = Partial> + /** * Represents a comment toggler component */ -export const ToggleCommentsWidget: React.FC<{ activeColor?: string }> = (props) => { +export const ToggleCommentsWidget: React.FC<{ classes?: ToggleCommentsClassKey }> = (props) => { + const classes = useStyles(props) const localization = useLocalization() const viewerState = useViewerState() return ( viewerState.updateState({ showComments: v })}> - + ) } diff --git a/packages/sn-document-viewer-react/src/components/document-widgets/toggle-redaction.tsx b/packages/sn-document-viewer-react/src/components/document-widgets/toggle-redaction.tsx index 20a18f483..70432d8e8 100644 --- a/packages/sn-document-viewer-react/src/components/document-widgets/toggle-redaction.tsx +++ b/packages/sn-document-viewer-react/src/components/document-widgets/toggle-redaction.tsx @@ -1,21 +1,41 @@ +import { Theme } from '@material-ui/core/styles/createMuiTheme' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' import PictureInPicture from '@material-ui/icons/PictureInPicture' +import clsx from 'clsx' import React from 'react' -import { useLocalization, useViewerState } from '../../hooks' +import { useDocumentPermissions, useLocalization, useViewerState } from '../../hooks' import { ToggleBase } from './toggle-base' +const useStyles = makeStyles((theme: Theme) => { + return createStyles({ + iconButton: {}, + icon: {}, + iconActive: { + fill: theme.palette.primary.main, + }, + }) +}) + +type ToggleRedactionClassKey = Partial> + /** * Document widget component to toggleing redaction */ -export const ToggleRedactionWidget: React.FC = () => { +export const ToggleRedactionWidget: React.FC<{ classes?: ToggleRedactionClassKey }> = (props) => { + const classes = useStyles(props) const localization = useLocalization() const viewerState = useViewerState() + const permissions = useDocumentPermissions() return ( viewerState.updateState({ showRedaction: v })}> - + setValue={(value) => viewerState.updateState({ showRedaction: value })}> + ) } diff --git a/packages/sn-document-viewer-react/src/components/document-widgets/toggle-shapes.tsx b/packages/sn-document-viewer-react/src/components/document-widgets/toggle-shapes.tsx index 5f779dda3..4222b7bb3 100644 --- a/packages/sn-document-viewer-react/src/components/document-widgets/toggle-shapes.tsx +++ b/packages/sn-document-viewer-react/src/components/document-widgets/toggle-shapes.tsx @@ -1,21 +1,41 @@ +import { Theme } from '@material-ui/core/styles/createMuiTheme' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' import Dashboard from '@material-ui/icons/Dashboard' +import clsx from 'clsx' import React from 'react' -import { useLocalization, useViewerState } from '../../hooks' +import { useDocumentPermissions, useLocalization, useViewerState } from '../../hooks' import { ToggleBase } from './toggle-base' +const useStyles = makeStyles((theme: Theme) => { + return createStyles({ + iconButton: {}, + icon: {}, + iconActive: { + fill: theme.palette.primary.main, + }, + }) +}) + +type ToggleShapesClassKey = Partial> + /** * Document widget component that toggles the displaying of the shapes */ -export const ToggleShapesWidget: React.FC = () => { +export const ToggleShapesWidget: React.FC<{ classes?: ToggleShapesClassKey }> = (props) => { + const classes = useStyles(props) const localization = useLocalization() const viewerState = useViewerState() + const permissions = useDocumentPermissions() return ( viewerState.updateState({ showShapes: v })}> - + ) } diff --git a/packages/sn-document-viewer-react/src/components/document-widgets/toggle-thumbnails.tsx b/packages/sn-document-viewer-react/src/components/document-widgets/toggle-thumbnails.tsx index b91328772..2aa983abc 100644 --- a/packages/sn-document-viewer-react/src/components/document-widgets/toggle-thumbnails.tsx +++ b/packages/sn-document-viewer-react/src/components/document-widgets/toggle-thumbnails.tsx @@ -1,35 +1,39 @@ -import React, { CSSProperties } from 'react' +import { Theme } from '@material-ui/core/styles/createMuiTheme' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' +import VerticalSplit from '@material-ui/icons/VerticalSplit' +import clsx from 'clsx' +import React from 'react' import { useLocalization, useViewerState } from '../../hooks' import { ToggleBase } from './toggle-base' +const useStyles = makeStyles((theme: Theme) => { + return createStyles({ + iconButton: {}, + icon: {}, + iconActive: { + fill: theme.palette.primary.main, + }, + }) +}) + +type ToggleThumbnailsClassKey = Partial> + /** * Document widget component that toggles the thumbnails */ -export const ToggleThumbnailsWidget: React.FC<{ style?: CSSProperties; activeColor?: string }> = (props) => { +export const ToggleThumbnailsWidget: React.FC<{ classes?: ToggleThumbnailsClassKey }> = (props) => { + const classes = useStyles(props) const localization = useLocalization() const viewerState = useViewerState() + return ( viewerState.updateState({ showThumbnails: v })}> - - - - - - - - + ) } diff --git a/packages/sn-document-viewer-react/src/components/document-widgets/toggle-watermark.tsx b/packages/sn-document-viewer-react/src/components/document-widgets/toggle-watermark.tsx index b954fb943..291f34270 100644 --- a/packages/sn-document-viewer-react/src/components/document-widgets/toggle-watermark.tsx +++ b/packages/sn-document-viewer-react/src/components/document-widgets/toggle-watermark.tsx @@ -1,20 +1,41 @@ +import { Theme } from '@material-ui/core/styles/createMuiTheme' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' import BrandingWatermark from '@material-ui/icons/BrandingWatermark' +import clsx from 'clsx' import React from 'react' -import { useLocalization, useViewerState } from '../../hooks' +import { useDocumentPermissions, useLocalization, useViewerState } from '../../hooks' import { ToggleBase } from './toggle-base' +const useStyles = makeStyles((theme: Theme) => { + return createStyles({ + iconButton: {}, + icon: {}, + iconActive: { + fill: theme.palette.primary.main, + }, + }) +}) + +type ToggleWatermarkClassKey = Partial> + /** * Document widget component that toggles the displaying of the watermark */ -export const ToggleWatermarkWidget: React.FC = () => { +export const ToggleWatermarkWidget: React.FC<{ classes?: ToggleWatermarkClassKey }> = (props) => { + const classes = useStyles(props) const localization = useLocalization() const viewerState = useViewerState() + const permissions = useDocumentPermissions() + return ( viewerState.updateState({ showWatermark: v })}> - + ) } diff --git a/packages/sn-document-viewer-react/src/components/document-widgets/zoom-in-out.tsx b/packages/sn-document-viewer-react/src/components/document-widgets/zoom-in-out.tsx index e1b2a2d02..1b0495f19 100644 --- a/packages/sn-document-viewer-react/src/components/document-widgets/zoom-in-out.tsx +++ b/packages/sn-document-viewer-react/src/components/document-widgets/zoom-in-out.tsx @@ -1,13 +1,25 @@ import IconButton from '@material-ui/core/IconButton' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' import ZoomIn from '@material-ui/icons/ZoomIn' import ZoomOut from '@material-ui/icons/ZoomOut' import React, { useCallback } from 'react' import { useLocalization, useViewerState } from '../../hooks' +const useStyles = makeStyles(() => { + return createStyles({ + iconButton: {}, + icon: {}, + }) +}) + +type ZoomInOutClassKey = Partial> + /** * Document widget component for modifying the zoom mode / level */ -export const ZoomInOutWidget: React.FC = () => { +export const ZoomInOutWidget: React.FC<{ classes?: ZoomInOutClassKey }> = (props) => { + const classes = useStyles(props) const localization = useLocalization() const viewerState = useViewerState() @@ -25,11 +37,21 @@ export const ZoomInOutWidget: React.FC = () => { return (
    - = 13}> - + = 13}> + - - + +
    ) diff --git a/packages/sn-document-viewer-react/src/components/index.ts b/packages/sn-document-viewer-react/src/components/index.ts index e34b03e84..1c2ff5110 100644 --- a/packages/sn-document-viewer-react/src/components/index.ts +++ b/packages/sn-document-viewer-react/src/components/index.ts @@ -10,6 +10,5 @@ export * from './document-viewer' export * from './layout-app-bar' export * from './page-list' export * from './page' -export * from './styles' export * from './thumbnail-page' export * from './thumbnails' diff --git a/packages/sn-document-viewer-react/src/components/layout-app-bar.tsx b/packages/sn-document-viewer-react/src/components/layout-app-bar.tsx index e5fcbb045..c68b5d251 100644 --- a/packages/sn-document-viewer-react/src/components/layout-app-bar.tsx +++ b/packages/sn-document-viewer-react/src/components/layout-app-bar.tsx @@ -1,12 +1,32 @@ import AppBar from '@material-ui/core/AppBar' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' import Toolbar from '@material-ui/core/Toolbar' -import React, { CSSProperties } from 'react' +import React from 'react' +const useStyles = makeStyles(() => { + return createStyles({ + appBar: { + position: 'relative', + zIndex: 1, + }, + toolBar: { + display: 'flex', + justifyContent: 'space-between', + }, + }) +}) + +type LayoutAppBarClassKey = Partial> /** * Represents a Toolbar component in an AppBar */ -export const LayoutAppBar: React.FunctionComponent<{ style?: CSSProperties }> = (props) => ( - - {props.children} - -) +export const LayoutAppBar: React.FunctionComponent<{ classes?: LayoutAppBarClassKey }> = (props) => { + const classes = useStyles(props) + + return ( + + {props.children} + + ) +} diff --git a/packages/sn-document-viewer-react/src/components/page-list.tsx b/packages/sn-document-viewer-react/src/components/page-list.tsx index 96ce0e307..7b2f198ca 100644 --- a/packages/sn-document-viewer-react/src/components/page-list.tsx +++ b/packages/sn-document-viewer-react/src/components/page-list.tsx @@ -1,11 +1,30 @@ import { PreviewImageData } from '@sensenet/client-core' import { debounce } from '@sensenet/client-utils' import Grid from '@material-ui/core/Grid' +import { Theme } from '@material-ui/core/styles/createMuiTheme' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' import React, { useCallback, useEffect, useRef, useState } from 'react' import { usePreviewImages, useViewerState } from '../hooks' import { Dimensions, ImageUtil } from '../services' import { Page, PAGE_CONTAINER_ID, PAGE_PADDING } from './' +const useStyles = makeStyles(() => { + return createStyles({ + grid: { + flexGrow: 1, + flexShrink: 1, + overflow: 'auto', + }, + pagesWrapper: { + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + }, + }) +}) + /** * Defines the own properties for the PageList component */ @@ -14,8 +33,8 @@ export interface PageListProps { } export const PageList: React.FC = (props) => { - const [marginTop, setMarginTop] = useState(0) - const [marginBottom, setMarginBottom] = useState(0) + const [paddingTop, setPaddingTop] = useState(0) + const [paddingBottom, setPaddingBottom] = useState(0) const [visiblePages, setVisiblePages] = useState([]) const [scrollState, setScrollState] = useState(0) const viewportElement = useRef() @@ -23,6 +42,7 @@ export const PageList: React.FC = (props) => { const [resizeToken, setResizeToken] = useState(0) const [viewport, setViewport] = useState({ width: 0, height: 0 }) const pages = usePreviewImages() + const classes = useStyles() const requestResize = useCallback( debounce(() => { @@ -97,11 +117,11 @@ export const PageList: React.FC = (props) => { } }) - let _marginTop = 0 + let _paddingTop = 0 let _pagesToSkip = 0 - while (_visiblePages[_pagesToSkip] && _marginTop + _visiblePages[_pagesToSkip].Height < scrollState) { - _marginTop += _visiblePages[_pagesToSkip].Height + PAGE_PADDING * 2 + while (_visiblePages[_pagesToSkip] && _paddingTop + _visiblePages[_pagesToSkip].Height < scrollState) { + _paddingTop += _visiblePages[_pagesToSkip].Height + PAGE_PADDING * 2 _pagesToSkip++ } @@ -113,13 +133,13 @@ export const PageList: React.FC = (props) => { _pagesToTake++ } - let _marginBottom = 0 + let _paddingBottom = 0 for (let i = _pagesToSkip + _pagesToTake - 1; i < _visiblePages.length - 1; i++) { - _marginBottom += _visiblePages[i].Height + PAGE_PADDING * 2 + _paddingBottom += _visiblePages[i].Height + PAGE_PADDING * 2 } - setMarginTop(_marginTop) - setMarginBottom(_marginBottom) + setPaddingTop(_paddingTop) + setPaddingBottom(_paddingBottom + _visiblePages[0].Height / 4) const newVisiblePages = _visiblePages.slice(_pagesToSkip, _pagesToSkip + _pagesToTake) setVisiblePages(newVisiblePages) @@ -129,7 +149,7 @@ export const PageList: React.FC = (props) => { newActivePage = newVisiblePages[0].Index } else { newActivePage = - scrollState - _marginTop >= 0 && scrollState - _marginTop > newVisiblePages[0].Height / 2 + scrollState - _paddingTop >= 0 && scrollState - _paddingTop > newVisiblePages[0].Height / 2 ? newVisiblePages[1].Index : newVisiblePages[0].Index } @@ -140,20 +160,8 @@ export const PageList: React.FC = (props) => { }, [pages.imageData, scrollState, viewerState, viewport.height, viewport.width]) return ( - -
    + +
    {visiblePages.map((page) => ( (() => { + return createStyles({ + page: { + padding: 0, + overflow: 'hidden', + width: ({ page }) => page.Width, + height: ({ page }) => page.Height, + position: 'relative', + }, + image: { + display: 'flex', + justifyContent: 'center', + }, + isPlacingShape: { + cursor: 'crosshair', + }, + draftShapeContainer: { + position: 'absolute', + top: 0, + left: 0, + width: '100%', + height: '100%', + zIndex: 1, + }, + }) +}) /** * Defined the component's own properties @@ -18,9 +60,16 @@ export interface PageProps { } export const Page: React.FC = (props) => { + const classes = useStyles(props) const viewerState = useViewerState() const page = usePreviewImage(props.page.Index) const commentState = useCommentState() + const [mouseIsDown, setMouseIsDown] = useState(false) + const [startX, setStartX] = useState(0) + const [startY, setStartY] = useState(0) + const [draftWidth, setdraftWidth] = useState(0) + const [draftHeight, setdraftHeight] = useState(0) + const { documentData, updateDocumentData } = useDocumentData() const isActive = page.image && viewerState.activePage === page.image.Index @@ -34,8 +83,8 @@ export const Page: React.FC = (props) => { const boundingBox = ImageUtil.getRotatedBoundingBoxSize( { - width: (page.image && page.image.Width) || 0, - height: (page.image && page.image.Height) || 0, + width: page.image?.Width || 0, + height: page.image?.Height || 0, }, imageRotation, ) @@ -46,8 +95,11 @@ export const Page: React.FC = (props) => { const handleMarkerPlacement = useCallback( (event: React.MouseEvent) => { - const xCoord = event.nativeEvent.offsetX / (props.page.Height / ((page.image && page.image.Height) || 1)) - const yCoord = event.nativeEvent.offsetY / (props.page.Width / ((page.image && page.image.Width) || 1)) + if (imageRotation !== 0) { + viewerState.updateState({ isPlacingCommentMarker: false }) + } + const xCoord = event.nativeEvent.offsetX / (props.page.Height / (page.image?.Height || 1)) + const yCoord = event.nativeEvent.offsetY / (props.page.Width / (page.image?.Width || 1)) if (!viewerState.isPlacingCommentMarker || xCoord <= MARKER_SIZE || yCoord <= MARKER_SIZE) { return @@ -62,37 +114,139 @@ export const Page: React.FC = (props) => { }, [ commentState, - page.image, + imageRotation, + page.image?.Height, + page.image?.Width, props.page.Height, props.page.Width, - viewerState.activePage, - viewerState.isPlacingCommentMarker, + viewerState, ], ) + const handleMouseDown = (ev: React.MouseEvent) => { + if (imageRotation !== 0) { + viewerState.updateState({ activeShapePlacing: 'none' }) + } + setMouseIsDown(true) + setStartX(ev.nativeEvent.offsetX / (props.page.Height / (page.image?.Height || 1))) + setStartY(ev.nativeEvent.offsetY / (props.page.Width / (page.image?.Width || 1))) + } + + const handleMouseMove = (ev: React.MouseEvent) => { + const endX = ev.nativeEvent.offsetX / (props.page.Height / (page.image?.Height || 1)) + const endY = ev.nativeEvent.offsetY / (props.page.Width / (page.image?.Width || 1)) + setdraftHeight(endY - startY) + setdraftWidth(endX - startX) + } + + const handleMouseUp = (ev: React.MouseEvent, shapeType: ActiveShapPlacingOptions) => { + setMouseIsDown(false) + setdraftHeight(0) + setdraftWidth(0) + const endX = ev.nativeEvent.offsetX / (props.page.Height / (page.image?.Height || 1)) + const endY = ev.nativeEvent.offsetY / (props.page.Width / (page.image?.Width || 1)) + + if (endY - startY > 0 && endX - startX > 0) { + switch (shapeType) { + case 'annotation': + documentData.shapes.annotations.push({ + h: endY - startY, + w: endX - startX, + x: startX, + y: startY, + imageIndex: props.page.Index, + guid: `a-${startX}-${startY}`, + ...ANNOTATION_EXTRA_VALUES, + }) + + updateDocumentData(documentData) + viewerState.updateState({ + hasChanges: true, + activeShapePlacing: 'none', + showShapes: true, + }) + break + case 'highlight': + documentData.shapes.highlights.push({ + h: endY - startY, + w: endX - startX, + x: startX, + y: startY, + imageIndex: props.page.Index, + guid: `h-${startX}-${startY}`, + }) + updateDocumentData(documentData) + viewerState.updateState({ + hasChanges: true, + activeShapePlacing: 'none', + showShapes: true, + }) + break + case 'redaction': + documentData.shapes.redactions.push({ + h: endY - startY, + w: endX - startX, + x: startX, + y: startY, + imageIndex: props.page.Index, + guid: `r-${startX}-${startY}`, + }) + updateDocumentData(documentData) + viewerState.updateState({ + hasChanges: true, + activeShapePlacing: 'none', + showRedaction: true, + }) + break + default: + break + } + } + setStartX(0) + setStartY(0) + } return (
    { viewerState.isPlacingCommentMarker ? handleMarkerPlacement(ev) : props.onClick(ev) + }} + onMouseDown={(ev) => { + viewerState.activeShapePlacing !== 'none' && !mouseIsDown && handleMouseDown(ev) + }} + onMouseMove={(ev) => { + viewerState.activeShapePlacing !== 'none' && mouseIsDown && handleMouseMove(ev) + }} + onMouseUp={(ev) => { + mouseIsDown && handleMouseUp(ev, viewerState.activeShapePlacing) }}> {page.image && ( -
    + <> -
    + + {mouseIsDown && ( +
    + +
    + )} + )} - + {imgUrl ? ( ) => void + onResized: (ev: React.MouseEvent) => void + onRightClick: (ev: React.MouseEvent) => void + rotationDegree: number +} + +const useStyles = makeStyles< + Theme, + Props & { + permissions: { + canEdit: boolean + canHideRedaction: boolean + canHideWatermark: boolean + } + } +>(() => + createStyles({ + root: { + top: ({ dimensions }) => dimensions.top, + left: ({ dimensions }) => dimensions.left, + width: ({ dimensions }) => dimensions.width, + height: ({ dimensions }) => dimensions.height, + position: 'absolute', + resize: ({ permissions, rotationDegree }) => + `${permissions.canEdit && rotationDegree === 0 ? 'both' : 'none'}` as any, + overflow: 'hidden', + backgroundColor: 'blanchedalmond', + lineHeight: ({ shape, zoomRatio }) => `${shape.lineHeight * zoomRatio}px`, + fontWeight: ({ shape }) => shape.fontBold, + color: ({ shape }) => shape.fontColor, + fontFamily: ({ shape }) => shape.fontFamily, + fontSize: ({ shape, zoomRatio }) => `${shape.fontSize * zoomRatio}px`, + fontStyle: ({ shape }) => (shape.fontItalic ? 'italic' : 'normal'), + boxShadow: ({ zoomRatio }) => `${5 * zoomRatio}px ${5 * zoomRatio}px ${15 * zoomRatio}px rgba(0,0,0,.3)`, + padding: ({ zoomRatio }) => `${10 * zoomRatio}pt`, + boxSizing: 'border-box', + }, + }), +) + +/** + * Return a styled annotation wrapper component + * @param permissions The permissions of the user + * @param shape The arguments of the annotation + * @param zoomRatio The ratio of the origina and virtual page + * @param dimensions The dimensions of the annotation + * @param onDragStart Function triggered on drag event + * @param onResized Function triggered on resize event + * @param onRightClick Function triggered on right click + * @param renderChildren Function what returns the wrapped components + * @returns styled annotation wrapper component + */ + +export const AnnotationWrapper: React.FC = (props) => { + const permissions = useDocumentPermissions() + + const classes = useStyles({ ...props, permissions }) + + return ( +
    + {props.children} +
    + ) +} diff --git a/packages/sn-document-viewer-react/src/components/shapes/comment-marker.tsx b/packages/sn-document-viewer-react/src/components/shapes/comment-marker.tsx new file mode 100644 index 000000000..abececf91 --- /dev/null +++ b/packages/sn-document-viewer-react/src/components/shapes/comment-marker.tsx @@ -0,0 +1,101 @@ +import { DraftCommentMarker } from '@sensenet/client-core' +import { Theme } from '@material-ui/core/styles/createMuiTheme' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' +import React from 'react' +import { useCommentState, useViewerState } from '../..' + +export const MARKER_SIZE = 10 + +type Props = { + marker: DraftCommentMarker + zoomRatio: number + isSelected: boolean + rotation: number +} + +const useStyles = makeStyles((theme) => + createStyles({ + root: { + position: 'absolute', + top: ({ rotation, marker, zoomRatio }) => { + switch (rotation) { + case 90: + return `${parseFloat(marker.x) * zoomRatio}px` + case 180: + return 'unset' + case 270: + return 'unset' + default: + return `${parseFloat(marker.y) * zoomRatio}px` + } + }, + right: ({ rotation, marker, zoomRatio }) => { + switch (rotation) { + case 90: + return `${parseFloat(marker.y) * zoomRatio}px` + case 180: + return `${parseFloat(marker.x) * zoomRatio}px` + case 270: + return 'unset' + default: + return 'unset' + } + }, + bottom: ({ rotation, marker, zoomRatio }) => { + switch (rotation) { + case 90: + return 'unset' + case 180: + return `${parseFloat(marker.y) * zoomRatio}px` + case 270: + return `${parseFloat(marker.x) * zoomRatio}px` + default: + return 'unset' + } + }, + left: ({ rotation, marker, zoomRatio }) => { + switch (rotation) { + case 90: + return 'unset' + case 180: + return 'unset' + case 270: + return `${parseFloat(marker.y) * zoomRatio}px` + default: + return `${parseFloat(marker.x) * zoomRatio}px` + } + }, + width: `${MARKER_SIZE}px`, + height: `${MARKER_SIZE}px`, + borderRadius: `${MARKER_SIZE}px`, + backgroundColor: ({ isSelected }) => (isSelected ? theme.palette.primary.light : theme.palette.primary.dark), + cursor: 'pointer', + }, + }), +) + +/** + * Return a styled comment marker component + * @param marker Attributes of the marker + * @param zoomRatio Zoom ratio + * @param isSelected Flag to store is marker is selected or not + * @param rotation Page rotation degree + * @returns styled comment marker component + */ +export function CommentMarker({ marker, zoomRatio, isSelected, rotation }: Props) { + const classes = useStyles({ marker, zoomRatio, isSelected, rotation }) + const viewerState = useViewerState() + const commentState = useCommentState() + + return ( +
    { + ev.stopPropagation() + ev.nativeEvent.stopImmediatePropagation() + !viewerState.isPlacingCommentMarker && commentState.setActiveComment(marker.id) + }} + /> + ) +} diff --git a/packages/sn-document-viewer-react/src/components/shapes/index.ts b/packages/sn-document-viewer-react/src/components/shapes/index.ts index ba35bbdcb..628d2f033 100644 --- a/packages/sn-document-viewer-react/src/components/shapes/index.ts +++ b/packages/sn-document-viewer-react/src/components/shapes/index.ts @@ -1,6 +1,8 @@ +export * from './annotation-wrapper' +export * from './comment-marker' export * from './shape-annotation' +export * from './shape-draft' export * from './shape-highlight' export * from './shape-redaction' export * from './shape-skeleton' export * from './shapes' -export * from './style' diff --git a/packages/sn-document-viewer-react/src/components/shapes/shape-annotation.tsx b/packages/sn-document-viewer-react/src/components/shapes/shape-annotation.tsx index c4ea1e216..80304bf91 100644 --- a/packages/sn-document-viewer-react/src/components/shapes/shape-annotation.tsx +++ b/packages/sn-document-viewer-react/src/components/shapes/shape-annotation.tsx @@ -1,8 +1,58 @@ import { Annotation, Shapes } from '@sensenet/client-core' -import { IconButton } from '@material-ui/core' -import { Delete } from '@material-ui/icons' -import React from 'react' -import { useDocumentPermissions } from '../..' +import Button from '@material-ui/core/Button/Button' +import Checkbox from '@material-ui/core/Checkbox/Checkbox' +import ClickAwayListener from '@material-ui/core/ClickAwayListener/ClickAwayListener' +import grey from '@material-ui/core/colors/grey' +import Paper from '@material-ui/core/Paper/Paper' +import Popper from '@material-ui/core/Popper/Popper' +import { Theme } from '@material-ui/core/styles/createMuiTheme' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' +import TextField from '@material-ui/core/TextField/TextField' +import Delete from '@material-ui/icons/Delete' +import React, { useState } from 'react' +import { AnnotationWrapper, useDocumentPermissions } from '../..' +import { useLocalization, useViewerState } from '../../hooks' + +type Props = { + rotationDegree: number +} + +const useStyles = makeStyles((theme: Theme) => { + return createStyles({ + annotationInput: { + width: '100%', + height: '100%', + overflow: 'auto', + '&:focus': { + outline: 'none', + }, + writingMode: ({ rotationDegree }) => (rotationDegree === 0 || rotationDegree === 180 ? 'unset' : 'vertical-rl'), + transform: ({ rotationDegree }) => (rotationDegree === 180 || rotationDegree === 270 ? 'rotate(180deg)' : 'none'), + }, + title: { + fontSize: '12px', + marginRight: '6px', + }, + textBox: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: '6px', + }, + textField: { + width: '55px', + }, + paper: { + padding: '10px', + marginLeft: '10px', + border: `solid ${grey[600]} 2px`, + }, + button: { + backgroundColor: theme.palette.error.light, + }, + }) +}) /** * Defined the component's own properties @@ -10,57 +60,148 @@ import { useDocumentPermissions } from '../..' export interface ShapeAnnotationProps { shape: Annotation zoomRatio: number - focused: boolean onDragStart: (ev: React.DragEvent) => void onResized: (ev: React.MouseEvent) => void getShapeDimensions: (shape: Annotation) => React.CSSProperties updateShapeData: (shapeType: keyof Shapes, guid: string, shape: Annotation) => void removeShape: (shapeType: keyof Shapes, guid: string) => void + rotationDegree: number } export const ShapeAnnotation: React.FC = (props) => { + const viewerState = useViewerState() + const rotationDegree = + viewerState.rotation?.find((rotation) => rotation.pageNum === props.shape.imageIndex)?.degree || 0 + const classes = useStyles({ rotationDegree }) + const localization = useLocalization() const permissions = useDocumentPermissions() + const [anchorEl, setAnchorEl] = useState(null) + const open = Boolean(anchorEl) + const id = open ? 'annotation-settings' : undefined + + const getDimensions = () => { + const dimensions = props.getShapeDimensions(props.shape) + return { top: dimensions.top, left: dimensions.left, width: dimensions.width, height: dimensions.height } + } + + const onRightClick = (event: React.MouseEvent) => { + event.preventDefault() + setAnchorEl(anchorEl ? null : event.currentTarget) + } return ( -
    -
    - {props.shape.text} -
    - {props.focused ? ( -
    - - props.removeShape('annotations', props.shape.guid)} - /> - + <> + +
    + {props.shape.text}
    - ) : null} -
    + + + setAnchorEl(null)}> + +
    +
    Line height:
    + + props.updateShapeData('annotations', props.shape.guid, { + ...(props.shape as any), + lineHeight: parseInt(event.target.value, 10), + }) + } + /> +
    px
    +
    +
    +
    Font size:
    + + props.updateShapeData('annotations', props.shape.guid, { + ...(props.shape as any), + fontSize: parseInt(event.target.value, 10), + }) + } + /> +
    px
    +
    +
    +
    Font bold:
    + + props.updateShapeData('annotations', props.shape.guid, { + ...(props.shape as any), + fontBold: parseInt(event.target.value, 10), + }) + } + /> +
    +
    +
    Font color:
    + + props.updateShapeData('annotations', props.shape.guid, { + ...(props.shape as any), + fontColor: event.target.value, + }) + } + /> +
    +
    +
    Font italic:
    + + props.updateShapeData('annotations', props.shape.guid, { + ...(props.shape as any), + fontItalic: event.target.checked, + }) + } + name="fontItalic" + color="primary" + /> +
    +
    + +
    +
    +
    +
    + ) } diff --git a/packages/sn-document-viewer-react/src/components/shapes/shape-draft.tsx b/packages/sn-document-viewer-react/src/components/shapes/shape-draft.tsx new file mode 100644 index 000000000..976e36ed2 --- /dev/null +++ b/packages/sn-document-viewer-react/src/components/shapes/shape-draft.tsx @@ -0,0 +1,39 @@ +import grey from '@material-ui/core/colors/grey' +import { Theme } from '@material-ui/core/styles/createMuiTheme' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' +import React from 'react' + +type Props = { + dimensions: { + top: string | number | (string & {}) | undefined + left: string | number | (string & {}) | undefined + width: string | number | (string & {}) | undefined + height: string | number | (string & {}) | undefined + } +} + +const useStyles = makeStyles(() => + createStyles({ + root: { + top: ({ dimensions }) => dimensions.top, + left: ({ dimensions }) => dimensions.left, + width: ({ dimensions }) => dimensions.width, + height: ({ dimensions }) => dimensions.height, + position: 'absolute', + backgroundColor: grey[600], + opacity: 0.2, + }, + }), +) + +/** + * Return a styled shape + * @param dimensions Shape dimensions + * @returns styled shape + */ +export function ShapeDraft({ dimensions }: Props) { + const classes = useStyles({ dimensions }) + + return
    +} diff --git a/packages/sn-document-viewer-react/src/components/shapes/shape-highlight.tsx b/packages/sn-document-viewer-react/src/components/shapes/shape-highlight.tsx index 3088d086d..e1915a6d1 100644 --- a/packages/sn-document-viewer-react/src/components/shapes/shape-highlight.tsx +++ b/packages/sn-document-viewer-react/src/components/shapes/shape-highlight.tsx @@ -1,34 +1,105 @@ -import { Highlight } from '@sensenet/client-core' -import React from 'react' -import { useDocumentPermissions } from '../..' +import { Highlight, Shapes } from '@sensenet/client-core' +import Button from '@material-ui/core/Button/Button' +import ClickAwayListener from '@material-ui/core/ClickAwayListener/ClickAwayListener' +import yellow from '@material-ui/core/colors/yellow' +import Popper from '@material-ui/core/Popper/Popper' +import { Theme } from '@material-ui/core/styles/createMuiTheme' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' +import Delete from '@material-ui/icons/Delete' +import React, { useState } from 'react' +import { useLocalization } from '../..' +import { useDocumentPermissions } from '../../hooks' -/** - * Defined the component's own properties - */ -export interface ShapeHighlightProps { +type Props = { shape: Highlight onDragStart: (ev: React.DragEvent) => void onResized: (ev: React.MouseEvent) => void - getShapeDimensions: (shape: Highlight) => React.CSSProperties + dimensions: { + top: string | number | (string & {}) | undefined + left: string | number | (string & {}) | undefined + width: string | number | (string & {}) | undefined + height: string | number | (string & {}) | undefined + } + zoomRatio: number + removeShape: (shapeType: keyof Shapes, guid: string) => void + rotationDegree: number } -export const ShapeHighlight: React.FC = (props) => { +const useStyles = makeStyles< + Theme, + Props & { + permissions: { + canEdit: boolean + canHideRedaction: boolean + canHideWatermark: boolean + } + } +>((theme: Theme) => + createStyles({ + root: { + top: ({ dimensions }) => dimensions.top, + left: ({ dimensions }) => dimensions.left, + width: ({ dimensions }) => dimensions.width, + height: ({ dimensions }) => dimensions.height, + position: 'absolute', + resize: ({ permissions, rotationDegree }) => (permissions.canEdit && rotationDegree === 0 ? 'both' : 'none'), + overflow: 'auto', + backgroundColor: yellow[600], + opacity: 0.5, + }, + button: { + backgroundColor: theme.palette.error.light, + }, + }), +) + +/** + * Return a styled highlight component + * @param shape Shape attributes + * @param permissions Permissions of the current user + * @param dimensions Shape dimensions + * @param zoomRatio Zoom ratio + * @param onDragStart Function triggered on drag event + * @param onResized Function triggered on resized event + * @param removeShape Function triggered on delete + * @returns styled highlight component + */ + +export const ShapeHighlight: React.FC = (props) => { const permissions = useDocumentPermissions() + const classes = useStyles({ ...props, permissions }) + const localization = useLocalization() + const [anchorEl, setAnchorEl] = useState(null) + const open = Boolean(anchorEl) + const id = open ? 'highlight-delete' : undefined + + const onRightClick = (event: React.MouseEvent) => { + event.preventDefault() + setAnchorEl(anchorEl ? null : event.currentTarget) + } return ( -
    + <> +
    + + setAnchorEl(null)}> + + + + ) } diff --git a/packages/sn-document-viewer-react/src/components/shapes/shape-redaction.tsx b/packages/sn-document-viewer-react/src/components/shapes/shape-redaction.tsx index 6b75c8e91..3e9eaa285 100644 --- a/packages/sn-document-viewer-react/src/components/shapes/shape-redaction.tsx +++ b/packages/sn-document-viewer-react/src/components/shapes/shape-redaction.tsx @@ -1,34 +1,115 @@ -import { Redaction } from '@sensenet/client-core' -import React from 'react' -import { useDocumentPermissions } from '../..' +import { Highlight, Shapes } from '@sensenet/client-core' +import Button from '@material-ui/core/Button/Button' +import ClickAwayListener from '@material-ui/core/ClickAwayListener/ClickAwayListener' +import Popper from '@material-ui/core/Popper/Popper' +import { Theme } from '@material-ui/core/styles/createMuiTheme' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' +import Delete from '@material-ui/icons/Delete' +import React, { useState } from 'react' +import { useLocalization } from '../../hooks' -/** - * Defined the component's own properties - */ -export interface ShapeRedactionProps { - shape: Redaction +type Props = { + shape: Highlight onDragStart: (ev: React.DragEvent) => void onResized: (ev: React.MouseEvent) => void - getShapeDimensions: (shape: Redaction) => React.CSSProperties + permissions: { + canEdit: boolean + canHideRedaction: boolean + canHideWatermark: boolean + } + dimensions: { + top: string | number | (string & {}) | undefined + left: string | number | (string & {}) | undefined + width: string | number | (string & {}) | undefined + height: string | number | (string & {}) | undefined + } + zoomRatio: number + removeShape: (shapeType: keyof Shapes, guid: string) => void + rotationDegree: number } -export const ShapeRedaction: React.FC = (props) => { - const permissions = useDocumentPermissions() +const useStyles = makeStyles((theme: Theme) => + createStyles({ + root: { + top: ({ dimensions }) => dimensions.top, + left: ({ dimensions }) => dimensions.left, + width: ({ dimensions }) => dimensions.width, + height: ({ dimensions }) => dimensions.height, + position: 'absolute', + resize: ({ permissions, rotationDegree }) => (permissions.canEdit && rotationDegree === 0 ? 'both' : 'none'), + overflow: 'auto', + backgroundColor: 'black', + }, + button: { + backgroundColor: theme.palette.error.light, + }, + }), +) + +/** + * Return a styled redaction component + * @param shape Shape attributes + * @param permissions Permissions of the current user + * @param dimensions Shape dimensions + * @param zoomRatio Zoom ratio + * @param onDragStart Function triggered on drag event + * @param onResized Function triggered on resized event + * @param removeShape Function triggered on delete + * @returns styled redaction component + */ +export function ShapeRedaction({ + shape, + permissions, + dimensions, + zoomRatio, + onDragStart, + onResized, + removeShape, + rotationDegree, +}: Props) { + const classes = useStyles({ + shape, + permissions, + dimensions, + zoomRatio, + onDragStart, + onResized, + removeShape, + rotationDegree, + }) + const localization = useLocalization() + const [anchorEl, setAnchorEl] = useState(null) + const open = Boolean(anchorEl) + const id = open ? 'redaction-delete' : undefined + + const onRightClick = (event: React.MouseEvent) => { + event.preventDefault() + setAnchorEl(anchorEl ? null : event.currentTarget) + } return ( -
    + <> +
    + + setAnchorEl(null)}> + + + + ) } diff --git a/packages/sn-document-viewer-react/src/components/shapes/shape-skeleton.tsx b/packages/sn-document-viewer-react/src/components/shapes/shape-skeleton.tsx index 3043ff9f7..1880efb85 100644 --- a/packages/sn-document-viewer-react/src/components/shapes/shape-skeleton.tsx +++ b/packages/sn-document-viewer-react/src/components/shapes/shape-skeleton.tsx @@ -11,6 +11,7 @@ export interface ShapeProps { zoomRatio: number updateShapeData: (shapeType: keyof Shapes, guid: string, shape: Redaction | Highlight | Annotation) => void removeShape: (shapeType: keyof Shapes, guid: string) => void + rotationDegree: number } export const ShapeSkeleton: React.FC = (props) => { @@ -99,33 +100,40 @@ export const ShapeSkeleton: React.FC = (props) => {
    ev.stopPropagation()} style={{ filter: focused ? 'contrast(.9) brightness(1.1)' : '' }} - onKeyUp={handleKeyPress} onFocus={onFocus} - onBlur={onBlur}> + onKeyUp={(ev) => props.shapeType !== 'annotations' && handleKeyPress(ev)} + onBlur={(ev) => props.rotationDegree === 0 && onBlur(ev)}> {props.shapeType === 'annotations' ? ( props.rotationDegree === 0 && onDragStart(ev)} + onResized={(ev) => props.rotationDegree === 0 && onResized(ev)} getShapeDimensions={getShapeDimensions} updateShapeData={props.updateShapeData} removeShape={props.removeShape} + rotationDegree={props.rotationDegree} /> ) : props.shapeType === 'redactions' ? ( props.rotationDegree === 0 && onDragStart(ev)} + onResized={(ev) => props.rotationDegree === 0 && onResized(ev)} + permissions={permissions} + dimensions={getShapeDimensions(props.shape) as any} + rotationDegree={props.rotationDegree} /> ) : ( props.rotationDegree === 0 && onDragStart(ev)} + onResized={(ev) => props.rotationDegree === 0 && onResized(ev)} + dimensions={getShapeDimensions(props.shape) as any} + rotationDegree={props.rotationDegree} /> )}
    diff --git a/packages/sn-document-viewer-react/src/components/shapes/shapes.tsx b/packages/sn-document-viewer-react/src/components/shapes/shapes.tsx index b55089123..89b16533d 100644 --- a/packages/sn-document-viewer-react/src/components/shapes/shapes.tsx +++ b/packages/sn-document-viewer-react/src/components/shapes/shapes.tsx @@ -1,10 +1,24 @@ import { Annotation, Highlight, PreviewImageData, Redaction, Shape, Shapes } from '@sensenet/client-core' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' import React, { useCallback } from 'react' import { useComments, useCommentState, useDocumentData, useDocumentPermissions, useViewerState } from '../../hooks' -import { Dimensions, ImageUtil } from '../../services' +import { applyShapeRotations, Dimensions, ImageUtil } from '../../services' import { ShapeSkeleton } from '../shapes' -import { CommentMarker } from './style' +import { CommentMarker } from './comment-marker' +const useStyles = makeStyles(() => { + return createStyles({ + shapesContainer: { + position: 'absolute', + top: 0, + left: 0, + width: '100%', + height: '100%', + zIndex: 1, + }, + }) +}) /** * Defined the component's own properties */ @@ -12,22 +26,40 @@ export interface ShapesWidgetProps { page: PreviewImageData zoomRatioStanding: number zoomRatioLying: number + imageRotation: number } /** * Page widget component for displaying shapes on a page */ export const ShapesWidget: React.FC = (props) => { + const classes = useStyles() const permissions = useDocumentPermissions() const viewerState = useViewerState() const { documentData, updateDocumentData } = useDocumentData() const comments = useComments() const commentState = useCommentState() + const zoomRatio = + props.imageRotation === 90 || props.imageRotation === 270 ? props.zoomRatioLying : props.zoomRatioStanding + + const rotationDegree = viewerState.rotation?.find((rotation) => rotation.pageNum === props.page.Index)?.degree || 0 const visibleShapes = { - redactions: documentData.shapes.redactions.filter((r) => r.imageIndex === props.page.Index) as Redaction[], - highlights: documentData.shapes.highlights.filter((r) => r.imageIndex === props.page.Index) as Highlight[], - annotations: documentData.shapes.annotations.filter((r) => r.imageIndex === props.page.Index) as Annotation[], + redactions: applyShapeRotations( + documentData.shapes.redactions.filter((r) => r.imageIndex === props.page.Index) as Redaction[], + rotationDegree, + props.page, + ), + highlights: applyShapeRotations( + documentData.shapes.highlights.filter((r) => r.imageIndex === props.page.Index) as Highlight[], + rotationDegree, + props.page, + ), + annotations: applyShapeRotations( + documentData.shapes.annotations.filter((r) => r.imageIndex === props.page.Index) as Annotation[], + rotationDegree, + props.page, + ), } const visibleComments = [ @@ -71,37 +103,21 @@ export const ShapesWidget: React.FC = (props) => { updateShapeData(shapeData.type, shapeData.shape.guid, { ...shapeData.shape, imageIndex: props.page.Index, - x: (ev.clientX - boundingBox.left - shapeData.offset.width) * (1 / props.zoomRatioStanding), - y: (ev.clientY - boundingBox.top - shapeData.offset.height) * (1 / props.zoomRatioStanding), + x: (ev.clientX - boundingBox.left - shapeData.offset.width) * (1 / zoomRatio), + y: (ev.clientY - boundingBox.top - shapeData.offset.height) * (1 / zoomRatio), }) } }, - [permissions.canEdit, props.page.Index, props.zoomRatioStanding, updateShapeData], + [permissions.canEdit, props.page.Index, updateShapeData, zoomRatio], ) return ( -
    ev.preventDefault()}> +
    ev.preventDefault()}> {viewerState.showComments && visibleComments.length > 0 && visibleComments.map((marker) => ( { - ev.stopPropagation() - ev.nativeEvent.stopImmediatePropagation() - !viewerState.isPlacingCommentMarker && commentState.setActiveComment(marker.id) - }} isSelected={marker.id === commentState.activeCommentId} - zoomRatioStanding={props.zoomRatioStanding} - zoomRatioLying={props.zoomRatioLying} + zoomRatio={zoomRatio} marker={marker} key={marker.id} rotation={ImageUtil.normalizeDegrees( @@ -109,7 +125,7 @@ export const ShapesWidget: React.FC = (props) => { )} /> ))} -
    + <> {permissions.canHideRedaction && viewerState.showRedaction && visibleShapes.redactions.map((redaction, index) => { @@ -118,9 +134,10 @@ export const ShapesWidget: React.FC = (props) => { key={index} shape={redaction} shapeType="redactions" - zoomRatio={props.zoomRatioStanding} + zoomRatio={zoomRatio} updateShapeData={updateShapeData} removeShape={removeShape} + rotationDegree={rotationDegree} /> ) })} @@ -132,9 +149,10 @@ export const ShapesWidget: React.FC = (props) => { key={index} shape={annotation} shapeType="annotations" - zoomRatio={props.zoomRatioStanding} + zoomRatio={zoomRatio} updateShapeData={updateShapeData} removeShape={removeShape} + rotationDegree={rotationDegree} /> ) })} @@ -146,13 +164,14 @@ export const ShapesWidget: React.FC = (props) => { key={index} shape={highlight} shapeType="highlights" - zoomRatio={props.zoomRatioStanding} + zoomRatio={zoomRatio} updateShapeData={updateShapeData} removeShape={removeShape} + rotationDegree={rotationDegree} /> ) })} -
    +
    ) } diff --git a/packages/sn-document-viewer-react/src/components/shapes/style.ts b/packages/sn-document-viewer-react/src/components/shapes/style.ts deleted file mode 100644 index 033bcacef..000000000 --- a/packages/sn-document-viewer-react/src/components/shapes/style.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { DraftCommentMarker } from '@sensenet/client-core' -import styled from 'styled-components' - -export const ShapesContainer = styled.div` - position: absolute; - top: 0px; - left: 0px; - width: 100%; - height: 100%; - z-index: 1; -` -export const MARKER_SIZE = 10 - -export const CommentMarker = styled('div')<{ - marker: DraftCommentMarker - zoomRatioStanding: number - zoomRatioLying: number - isSelected: boolean - rotation: number -}>` - position: absolute; - top: ${(props) => { - switch (props.rotation) { - case 90: - return `${parseFloat(props.marker.x) * props.zoomRatioLying}px` - case 180: - return 'unset' - case 270: - return 'unset' - default: - return `${parseFloat(props.marker.y) * props.zoomRatioStanding}px` - } - }}; - right: ${(props) => { - switch (props.rotation) { - case 90: - return `${parseFloat(props.marker.y) * props.zoomRatioLying}px` - case 180: - return `${parseFloat(props.marker.x) * props.zoomRatioStanding}px` - case 270: - return 'unset' - default: - return 'unset' - } - }}; - bottom: ${(props) => { - switch (props.rotation) { - case 90: - return 'unset' - case 180: - return `${parseFloat(props.marker.y) * props.zoomRatioStanding}px` - case 270: - return `${parseFloat(props.marker.x) * props.zoomRatioLying}px` - default: - return 'unset' - } - }}; - left: ${(props) => { - switch (props.rotation) { - case 90: - return 'unset' - case 180: - return 'unset' - case 270: - return `${parseFloat(props.marker.y) * props.zoomRatioLying}px` - default: - return `${parseFloat(props.marker.x) * props.zoomRatioStanding}px` - } - }}; - width: ${MARKER_SIZE}px; - height: ${MARKER_SIZE}px; - border-radius: ${MARKER_SIZE}px; - background-color: ${(props) => - props.isSelected ? props.theme.palette.primary.light : props.theme.palette.primary.dark}; - cursor: pointer; -` diff --git a/packages/sn-document-viewer-react/src/components/styles.ts b/packages/sn-document-viewer-react/src/components/styles.ts deleted file mode 100644 index 167419910..000000000 --- a/packages/sn-document-viewer-react/src/components/styles.ts +++ /dev/null @@ -1,26 +0,0 @@ -import styled from 'styled-components' - -/** - * Style variables for the DocViewer component - */ -export const styles = { - colors: { - background: '#f5f5f5', - sidebar: '#eaeaeb', - appBar: '#2a2a2c', - icon: { - inactive: '#ffffff', - active: '#ffffff', - }, - commentButton: '#ffffff', - }, -} - -export const CommentsContainer = styled.div` - display: flex; - padding: 15px; - justify-content: space-between; - align-items: center; - flex-wrap: wrap; - overflow: auto; -` diff --git a/packages/sn-document-viewer-react/src/components/thumbnail-page.tsx b/packages/sn-document-viewer-react/src/components/thumbnail-page.tsx index a6a686bfd..4bece8fe5 100644 --- a/packages/sn-document-viewer-react/src/components/thumbnail-page.tsx +++ b/packages/sn-document-viewer-react/src/components/thumbnail-page.tsx @@ -1,10 +1,29 @@ import { PreviewImageData } from '@sensenet/client-core' import CircularProgress from '@material-ui/core/CircularProgress' import Paper from '@material-ui/core/Paper' +import { Theme } from '@material-ui/core/styles/createMuiTheme' +import createStyles from '@material-ui/core/styles/createStyles' +import makeStyles from '@material-ui/core/styles/makeStyles' import React from 'react' -import { THUMBNAIL_NAME, THUMBNAIL_PADDING } from '..' +import { PageProps, THUMBNAIL_NAME, THUMBNAIL_PADDING } from '..' import { usePreviewImage, useViewerState } from '../hooks' +const useStyles = makeStyles(() => { + return createStyles({ + thumbnailPage: { + padding: 0, + overflow: 'hidden', + width: ({ page }) => page.Width - 2 * THUMBNAIL_PADDING, + height: ({ page }) => page.Height - 2 * THUMBNAIL_PADDING, + position: 'relative', + }, + image: { + display: 'flex', + justifyContent: 'center', + }, + }) +}) + /** * Defined the component's own properties */ @@ -16,6 +35,7 @@ export interface ThumbnailPageProps { } export const ThumbnailPage: React.FC = (props) => { + const classes = useStyles(props) const viewerState = useViewerState() const page = usePreviewImage(props.page.Index) @@ -26,17 +46,11 @@ export const ThumbnailPage: React.FC = (props) => { return (
    { props.onClick(ev) }}> - + {imgUrl ? ( { + return createStyles({ + grid: { + flexGrow: 1, + flexShrink: 1, + overflow: 'auto', + }, + thumbnailsWrapper: { + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + }, + }) +}) + /** * Defines the own properties for the PageList component */ @@ -14,6 +32,7 @@ export interface ThumbnailsProps { } export const Thumbnails: React.FC = (props) => { + const classes = useStyles() const [marginTop, setMarginTop] = useState(0) const [marginBottom, setMarginBottom] = useState(0) const [visiblePages, setVisiblePages] = useState([]) @@ -122,17 +141,10 @@ export const Thumbnails: React.FC = (props) => { }, [pages.imageData, scrollState, viewerState, viewport.height, viewport.width]) return ( - +
    diff --git a/packages/sn-document-viewer-react/src/context/api-settings.tsx b/packages/sn-document-viewer-react/src/context/api-settings.tsx index 2f56b6cbf..159ff588e 100644 --- a/packages/sn-document-viewer-react/src/context/api-settings.tsx +++ b/packages/sn-document-viewer-react/src/context/api-settings.tsx @@ -104,20 +104,20 @@ export const createDefaultApiSettings: (repo: Repository) => DocumentViewerApiSe isPreviewAvailable: async ({ document, version, page, abortController }) => { return await repo.preview.available({ document, version, page, abortController }) }, - canEditDocument: async ({ document, abortController }) => { - const response = await repo.security.hasPermission(document.idOrPath, ['Save'], undefined, { + canEditDocument: async ({ idOrPath, abortController }) => { + const response = await repo.security.hasPermission(idOrPath, ['Save'], undefined, { signal: abortController.signal, credentials: 'include', }) return response }, - canHideRedaction: async ({ document, abortController }) => - await repo.security.hasPermission(document.idOrPath, ['PreviewWithoutRedaction'], undefined, { + canHideRedaction: async ({ idOrPath, abortController }) => + await repo.security.hasPermission(idOrPath, ['PreviewWithoutRedaction'], undefined, { signal: abortController.signal, credentials: 'include', }), - canHideWatermark: async ({ document, abortController }) => - await repo.security.hasPermission(document.idOrPath, ['PreviewWithoutWatermark'], undefined, { + canHideWatermark: async ({ idOrPath, abortController }) => + await repo.security.hasPermission(idOrPath, ['PreviewWithoutWatermark'], undefined, { signal: abortController.signal, credentials: 'include', }), diff --git a/packages/sn-document-viewer-react/src/context/document-permissions.tsx b/packages/sn-document-viewer-react/src/context/document-permissions.tsx index 6026a5556..4638241df 100644 --- a/packages/sn-document-viewer-react/src/context/document-permissions.tsx +++ b/packages/sn-document-viewer-react/src/context/document-permissions.tsx @@ -14,13 +14,15 @@ export const DocumentPermissionsContextProvider: React.FC = ({ children }) => { const [canHideRedaction, setcanHideRedaction] = useState(false) const [canHideWatermark, setcanHideWatermark] = useState(false) + const documentIdOrPath = documentData.idOrPath + useEffect(() => { const abortController = new AbortController() ;(async () => { try { - const canEditPromise = api.canEditDocument({ document: documentData, abortController }) - const cancanHideRedactionPromise = api.canHideRedaction({ document: documentData, abortController }) - const canHideWatermarkPromise = api.canHideWatermark({ document: documentData, abortController }) + const canEditPromise = api.canEditDocument({ idOrPath: documentIdOrPath, abortController }) + const cancanHideRedactionPromise = api.canHideRedaction({ idOrPath: documentIdOrPath, abortController }) + const canHideWatermarkPromise = api.canHideWatermark({ idOrPath: documentIdOrPath, abortController }) const [canEditValue, canHideRedactionValue, canHideWatermarkValue] = await Promise.all([ canEditPromise, @@ -36,7 +38,7 @@ export const DocumentPermissionsContextProvider: React.FC = ({ children }) => { } } })() - }, [api, documentData]) + }, [api, documentIdOrPath]) return ( {}, diff --git a/packages/sn-document-viewer-react/src/models/document-viewer-api-settings.ts b/packages/sn-document-viewer-react/src/models/document-viewer-api-settings.ts index 4dbad9694..ab674838e 100644 --- a/packages/sn-document-viewer-react/src/models/document-viewer-api-settings.ts +++ b/packages/sn-document-viewer-react/src/models/document-viewer-api-settings.ts @@ -13,7 +13,7 @@ export interface DocumentViewerApiSettings { /** * Callback that will retrieve if the current user has permission for document editing */ - canEditDocument: (options: { document: DocumentData; abortController: AbortController }) => Promise + canEditDocument: (options: { idOrPath: string | number; abortController: AbortController }) => Promise /** * Callback for saving changes to the document @@ -27,12 +27,12 @@ export interface DocumentViewerApiSettings { /** * Callback for checking if the current user can hide the watermark */ - canHideWatermark: (options: { document: DocumentData; abortController: AbortController }) => Promise + canHideWatermark: (options: { idOrPath: string | number; abortController: AbortController }) => Promise /** * Callback for checking if the current user can hide the redaction */ - canHideRedaction: (options: { document: DocumentData; abortController: AbortController }) => Promise + canHideRedaction: (options: { idOrPath: string | number; abortController: AbortController }) => Promise /** * Callback that will return with the retrieved DocumentData (if available) diff --git a/packages/sn-document-viewer-react/src/models/viewer-state.ts b/packages/sn-document-viewer-react/src/models/viewer-state.ts index 987f9f732..e4d8d09be 100644 --- a/packages/sn-document-viewer-react/src/models/viewer-state.ts +++ b/packages/sn-document-viewer-react/src/models/viewer-state.ts @@ -1,5 +1,11 @@ import { ObservableValue } from '@sensenet/client-utils' +/** + * Active shape to draw + */ + +export type ActiveShapPlacingOptions = 'redaction' | 'highlight' | 'annotation' | 'none' + /** * Rotation model */ @@ -66,6 +72,11 @@ export interface ViewerState { */ isPlacingCommentMarker: boolean + /** + * Variable that indicates if a shape placing is in progress + */ + activeShapePlacing: ActiveShapPlacingOptions + /** * Indicates if the user is creating a comment at the moment */ diff --git a/packages/sn-document-viewer-react/src/services/apply-shape-rotations.ts b/packages/sn-document-viewer-react/src/services/apply-shape-rotations.ts index a77709fb1..80ad7e027 100644 --- a/packages/sn-document-viewer-react/src/services/apply-shape-rotations.ts +++ b/packages/sn-document-viewer-react/src/services/apply-shape-rotations.ts @@ -1,5 +1,4 @@ import { PreviewImageData, Shape } from '@sensenet/client-core' -import { ImageUtil } from './image-utils' /** * helper method to apply shape rotations @@ -8,17 +7,35 @@ import { ImageUtil } from './image-utils' * @param pages the page info */ export const applyShapeRotations = (shapes: T[], degree: number, page: PreviewImageData) => [ - ...shapes.map((s) => { - const angle = (Math.PI / 180) * ImageUtil.normalizeDegrees(degree) - const [sin, cos] = [Math.sin(angle), Math.cos(angle)] - const oldX = s.x - page.Height / 2 - const oldY = s.y - page.Width / 2 - const newX = oldX * cos - oldY * sin - const newY = oldY * cos + oldX * sin - return { - ...s, - x: newX + page.Height / 2, - y: newY + page.Width / 2, + ...shapes.map((shape) => { + const origShape = shape + switch (degree) { + case 90: + return { + ...origShape, + x: page.Height - (origShape.y + origShape.h), + y: origShape.x, + h: origShape.w, + w: origShape.h, + } + case 180: + return { + ...origShape, + x: page.Width - (origShape.x + origShape.w), + y: page.Height - (origShape.y + origShape.h), + } + case 270: + return { + ...origShape, + x: origShape.y, + y: page.Width - (origShape.x + origShape.w), + h: origShape.w, + w: origShape.h, + } + default: + return { + ...origShape, + } } }), ] diff --git a/packages/sn-document-viewer-react/test/__Mocks__/viewercontext.ts b/packages/sn-document-viewer-react/test/__Mocks__/viewercontext.ts index f723372cd..40a6afb5c 100644 --- a/packages/sn-document-viewer-react/test/__Mocks__/viewercontext.ts +++ b/packages/sn-document-viewer-react/test/__Mocks__/viewercontext.ts @@ -12,7 +12,6 @@ export const exampleDocumentData: DocumentData = { shapes: { annotations: [ { - index: 1, h: 100, w: 100, x: 10, @@ -20,12 +19,12 @@ export const exampleDocumentData: DocumentData = { text: 'Example Text', guid: '9a324f30-1423-11e9-bcb9-d719ddfb5f43', lineHeight: 15, - fontBold: '34', + fontBold: 34, imageIndex: 1, fontColor: 'red', fontFamily: 'arial', - fontItalic: 'false', - fontSize: '12pt', + fontItalic: false, + fontSize: 12, }, ], highlights: [ diff --git a/packages/sn-document-viewer-react/test/__snapshots__/document-title-pager.test.tsx.snap b/packages/sn-document-viewer-react/test/__snapshots__/document-title-pager.test.tsx.snap index b5233ac4d..43ecd9cf7 100644 --- a/packages/sn-document-viewer-react/test/__snapshots__/document-title-pager.test.tsx.snap +++ b/packages/sn-document-viewer-react/test/__snapshots__/document-title-pager.test.tsx.snap @@ -5,28 +5,14 @@ exports[`DocumentTitlePager component Should render the focused state without cr onClickAway={[Function]} >
     
    @@ -39,6 +25,7 @@ exports[`DocumentTitlePager component Should render the focused state without cr "shrink": true, } } + className="makeStyles-textField-3" defaultValue={1} inputProps={ Object { @@ -53,11 +40,6 @@ exports[`DocumentTitlePager component Should render the focused state without cr onBlur={[Function]} onChange={[Function]} required={true} - style={ - Object { - "flexShrink": 0, - } - } title="Goto page" type="number" /> @@ -71,37 +53,19 @@ exports[`DocumentTitlePager component Should render the unfocused state without onClickAway={[Function]} >
     
    1 / diff --git a/packages/sn-document-viewer-react/test/__snapshots__/document-viewer-error.test.tsx.snap b/packages/sn-document-viewer-react/test/__snapshots__/document-viewer-error.test.tsx.snap index 62c34cfba..95a9819cb 100644 --- a/packages/sn-document-viewer-react/test/__snapshots__/document-viewer-error.test.tsx.snap +++ b/packages/sn-document-viewer-react/test/__snapshots__/document-viewer-error.test.tsx.snap @@ -3,27 +3,10 @@ exports[`Document Viewer Error component matches snapshot with provided context 1`] = `
    Loader Preview image generation is in progress diff --git a/packages/sn-document-viewer-react/test/__snapshots__/document-viewer-regenerate-previews.test.tsx.snap b/packages/sn-document-viewer-react/test/__snapshots__/document-viewer-regenerate-previews.test.tsx.snap index 95af1c548..d6feaad89 100644 --- a/packages/sn-document-viewer-react/test/__snapshots__/document-viewer-regenerate-previews.test.tsx.snap +++ b/packages/sn-document-viewer-react/test/__snapshots__/document-viewer-regenerate-previews.test.tsx.snap @@ -3,27 +3,10 @@ exports[`Document Regenerate Previews component Should trigger regeneration on button click 1`] = `
    - - - -
    + + `; diff --git a/packages/sn-document-viewer-react/test/__snapshots__/layout-app-bar.test.tsx.snap b/packages/sn-document-viewer-react/test/__snapshots__/layout-app-bar.test.tsx.snap index 83df9711f..612147ca2 100644 --- a/packages/sn-document-viewer-react/test/__snapshots__/layout-app-bar.test.tsx.snap +++ b/packages/sn-document-viewer-react/test/__snapshots__/layout-app-bar.test.tsx.snap @@ -2,21 +2,11 @@ exports[`Layout AppBar component should match snapshot with children 1`] = ` test diff --git a/packages/sn-document-viewer-react/test/__snapshots__/page-list.test.tsx.snap b/packages/sn-document-viewer-react/test/__snapshots__/page-list.test.tsx.snap index 032b476e4..ff762017b 100644 --- a/packages/sn-document-viewer-react/test/__snapshots__/page-list.test.tsx.snap +++ b/packages/sn-document-viewer-react/test/__snapshots__/page-list.test.tsx.snap @@ -2,6 +2,7 @@ exports[`PageList component should match snapshot with one page 1`] = `
    - - - -
    + + `; diff --git a/packages/sn-document-viewer-react/test/__snapshots__/rotate-active-page.test.tsx.snap b/packages/sn-document-viewer-react/test/__snapshots__/rotate-active-page.test.tsx.snap index 2b8e3e572..160fc6356 100644 --- a/packages/sn-document-viewer-react/test/__snapshots__/rotate-active-page.test.tsx.snap +++ b/packages/sn-document-viewer-react/test/__snapshots__/rotate-active-page.test.tsx.snap @@ -6,278 +6,284 @@ exports[`RotateActivePage component Should render without crashing 1`] = ` pages="active" renderButton={[Function]} > -
    - - - - - - - - - - + + + + + + + + + + - - - - - - - - -
    + + + + + + + + + `; @@ -292,11 +298,13 @@ exports[`RotateActivePage component Should render without crashing with mode par renderButton={[Function]} > - - - - - + + + + + + + + + + - - - - - - - - -
    + +
    + + + + + + + `; diff --git a/packages/sn-document-viewer-react/test/__snapshots__/save-document-component.test.tsx.snap b/packages/sn-document-viewer-react/test/__snapshots__/save-document-component.test.tsx.snap index 2a3e6247e..8598b9612 100644 --- a/packages/sn-document-viewer-react/test/__snapshots__/save-document-component.test.tsx.snap +++ b/packages/sn-document-viewer-react/test/__snapshots__/save-document-component.test.tsx.snap @@ -1,142 +1,136 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`SaveDocumentComponent component Should render without crashing when has changes 1`] = ` -
    + + +`; + +exports[`SaveDocumentComponent component Should render without crashing when there are no changes 1`] = ` + - - -
    -`; - -exports[`SaveDocumentComponent component Should render without crashing when there are no changes 1`] = ` - -
    - - - - - - - - - -
    + + + + + + + + + + +
    `; diff --git a/packages/sn-document-viewer-react/test/__snapshots__/shape-skeleton.test.tsx.snap b/packages/sn-document-viewer-react/test/__snapshots__/shape-skeleton.test.tsx.snap index 602d65d4e..6886ef8b3 100644 --- a/packages/sn-document-viewer-react/test/__snapshots__/shape-skeleton.test.tsx.snap +++ b/packages/sn-document-viewer-react/test/__snapshots__/shape-skeleton.test.tsx.snap @@ -3,12 +3,13 @@ exports[`ShapesSkeleton component should render without crashing 1`] = `
    +
    diff --git a/packages/sn-document-viewer-react/test/__snapshots__/shapes.test.tsx.snap b/packages/sn-document-viewer-react/test/__snapshots__/shapes.test.tsx.snap new file mode 100644 index 000000000..a26f3967c --- /dev/null +++ b/packages/sn-document-viewer-react/test/__snapshots__/shapes.test.tsx.snap @@ -0,0 +1,9 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Shapes component should render ShapeDraft without crashing 1`] = ` +
    +`; diff --git a/packages/sn-document-viewer-react/test/__snapshots__/share-widget.test.tsx.snap b/packages/sn-document-viewer-react/test/__snapshots__/share-widget.test.tsx.snap index d61f0aa88..3990d4203 100644 --- a/packages/sn-document-viewer-react/test/__snapshots__/share-widget.test.tsx.snap +++ b/packages/sn-document-viewer-react/test/__snapshots__/share-widget.test.tsx.snap @@ -1,20 +1,15 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`DownloadWidget component Should render without crashing 1`] = ` -
    - - - -
    + + `; diff --git a/packages/sn-document-viewer-react/test/__snapshots__/thumbnails.test.tsx.snap b/packages/sn-document-viewer-react/test/__snapshots__/thumbnails.test.tsx.snap index 50da5cdfa..55c353ba9 100644 --- a/packages/sn-document-viewer-react/test/__snapshots__/thumbnails.test.tsx.snap +++ b/packages/sn-document-viewer-react/test/__snapshots__/thumbnails.test.tsx.snap @@ -2,6 +2,7 @@ exports[`Thumbnails component should match snapshot with one page 1`] = `
    - - - Some children - - -
    -`; - -exports[`Component ToggleComments should render without crashing 1`] = ` - - -
    - - - - - - - - - -
    -
    -
    -`; - -exports[`Component ToggleRedaction should render without crashing 1`] = ` - - - -`; - -exports[`Component ToggleShapes should render without crashing 1`] = ` - - - -`; - -exports[`Component ToggleThumbnails should render without crashing 1`] = ` - - -
    - - - - - - - - - -
    -
    -
    -`; - -exports[`Component ToggleWatermark should render without crashing 1`] = ` - - - -`; diff --git a/packages/sn-document-viewer-react/test/__snapshots__/zoom-in-out.test.tsx.snap b/packages/sn-document-viewer-react/test/__snapshots__/zoom-in-out.test.tsx.snap index 9d0151fd5..de0d6c07a 100644 --- a/packages/sn-document-viewer-react/test/__snapshots__/zoom-in-out.test.tsx.snap +++ b/packages/sn-document-viewer-react/test/__snapshots__/zoom-in-out.test.tsx.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`ZoomInOUt component should render without crashing 1`] = ` +exports[`ZoomInOut component should render without crashing 1`] = `
    + + + + + ) +} + +export default ChangePasswordDialog diff --git a/apps/sensenet/src/components/dialogs/dialog-provider.tsx b/apps/sensenet/src/components/dialogs/dialog-provider.tsx index 8efd147b9..1f72a4090 100644 --- a/apps/sensenet/src/components/dialogs/dialog-provider.tsx +++ b/apps/sensenet/src/components/dialogs/dialog-provider.tsx @@ -36,6 +36,7 @@ export type DialogWithProps = ( | { name: 'member-select'; props: MemberSelectProps } | { name: 'content-picker'; props: ContentPickerDialogProps } | { name: 'feedback' } + | { name: 'change-password' } ) & { dialogProps?: Partial } type Action = { type: 'PUSH_DIALOG'; dialog: DialogWithProps } | { type: 'POP_DIALOG' } | { type: 'CLOSE_ALL_DIALOGS' } diff --git a/apps/sensenet/src/components/dialogs/dialogs.tsx b/apps/sensenet/src/components/dialogs/dialogs.tsx index caae4586a..e4a7ff64b 100644 --- a/apps/sensenet/src/components/dialogs/dialogs.tsx +++ b/apps/sensenet/src/components/dialogs/dialogs.tsx @@ -20,6 +20,7 @@ const MemberSelect = React.lazy(() => import('./member-select-dialog')) const Restore = React.lazy(() => import('./restore')) const ContentPicker = React.lazy(() => import('./content-picker')) const Feedback = React.lazy(() => import('./feedback')) +const ChangePasswordDialog = React.lazy(() => import('./change-password')) function dialogRenderer(dialog: DialogWithProps) { switch (dialog.name) { @@ -57,6 +58,8 @@ function dialogRenderer(dialog: DialogWithProps) { return case 'feedback': return + case 'change-password': + return default: return null } diff --git a/apps/sensenet/src/localization/default.ts b/apps/sensenet/src/localization/default.ts index 5a71d75e9..a54b2cd22 100644 --- a/apps/sensenet/src/localization/default.ts +++ b/apps/sensenet/src/localization/default.ts @@ -279,6 +279,7 @@ const values = { topMenu: { personalSettings: 'Personal settings', logout: 'Log out', + changePassword: 'Change password', openUserMenu: 'Open user menu', openHelpMenu: 'Open help menu', documentation: 'Documentation', @@ -474,6 +475,16 @@ const values = { feedbackText4: 'Thanks for your feedback', cancel: 'Cancel', }, + changePassword: { + changeYourPassword: 'Change your password', + cancel: 'Cancel', + update: 'Update', + oldPassword: 'Old password', + newPassword: 'New password', + confirmNew: 'Confirm new password', + changePasswordSuccess: 'Password has changed successfully', + passwordsDontMatch: 'The passwords do not match', + }, } export default values diff --git a/apps/sensenet/src/localization/hungarian.ts b/apps/sensenet/src/localization/hungarian.ts index aa604b694..debc63432 100644 --- a/apps/sensenet/src/localization/hungarian.ts +++ b/apps/sensenet/src/localization/hungarian.ts @@ -136,6 +136,7 @@ const values: DeepPartial = { topMenu: { personalSettings: 'Személyes beállítások', logout: 'Kijelentkezés', + changePassword: 'Jelszó módosítása', openUserMenu: 'Felhasználói menü kinyitása', openHelpMenu: 'Segítség menü kinyitása', documentation: 'Dokumentáció', @@ -196,6 +197,16 @@ const values: DeepPartial = { feedbackText4: 'Köszönjük a visszajelzést!', cancel: 'Vissza', }, + changePassword: { + changeYourPassword: 'Jelszómódosítás', + cancel: 'Cancel', + update: 'Küldés', + oldPassword: 'Régi jelszó', + newPassword: 'Új jelszó', + confirmNew: 'Új jelszó megerősítése', + changePasswordSuccess: 'A jelszóváltoztatás sikeres', + passwordsDontMatch: 'A beírt jelszavak nem egyeznek!', + }, } export default values diff --git a/packages/sn-client-core/src/Repository/Repository.ts b/packages/sn-client-core/src/Repository/Repository.ts index 5a1496f1a..9549bbad4 100644 --- a/packages/sn-client-core/src/Repository/Repository.ts +++ b/packages/sn-client-core/src/Repository/Repository.ts @@ -221,6 +221,9 @@ export class Repository implements Disposable { if (!response.ok) { throw await this.getErrorFromResponse(response) } + if (response.status === 204) { + return Promise.resolve({ d: null as any }) + } return await response.json() } @@ -452,6 +455,9 @@ export class Repository implements Disposable { if (!response.ok) { throw await this.getErrorFromResponse(response) } + if (response.status === 204) { + return Promise.resolve({} as TReturns) + } return await response.json() } From 55fb1a36e9fca8822aff975383bc53edffa6d170 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20Tak=C3=A1cs?= Date: Fri, 22 Jan 2021 16:20:15 +0100 Subject: [PATCH 09/11] bump packages version --- apps/sensenet/package.json | 16 +++++++-------- examples/sn-dms-demo/package.json | 20 +++++++++---------- examples/sn-react-browser/package.json | 10 +++++----- examples/sn-react-calendar/package.json | 10 +++++----- examples/sn-react-component-docs/package.json | 16 +++++++-------- examples/sn-react-imagegallery/package.json | 6 +++--- examples/sn-react-imageupload/package.json | 6 +++--- examples/sn-react-memoapp/package.json | 6 +++--- examples/sn-react-tasklist/package.json | 6 +++--- .../package.json | 6 +++--- examples/sn-react-usersearch/package.json | 10 +++++----- package.json | 2 +- packages/sn-authentication-jwt/package.json | 4 ++-- packages/sn-client-auth-google/package.json | 4 ++-- packages/sn-client-core/package.json | 2 +- packages/sn-control-mapper/package.json | 4 ++-- packages/sn-controls-react/package.json | 12 +++++------ .../sn-document-viewer-react/package.json | 6 +++--- packages/sn-hooks-react/package.json | 6 +++--- packages/sn-list-controls-react/package.json | 2 +- packages/sn-pickers-react/package.json | 4 ++-- packages/sn-redux/package.json | 8 ++++---- packages/sn-repository-events/package.json | 4 ++-- packages/sn-search-react/package.json | 4 ++-- 24 files changed, 87 insertions(+), 87 deletions(-) diff --git a/apps/sensenet/package.json b/apps/sensenet/package.json index 2b5709071..d93a17cfc 100644 --- a/apps/sensenet/package.json +++ b/apps/sensenet/package.json @@ -1,6 +1,6 @@ { "name": "@sensenet/sn-app", - "version": "1.15.0", + "version": "1.16.0", "main": "dist/index.js", "files": [ "dist", @@ -83,17 +83,17 @@ "@material-ui/icons": "^4.11.2", "@material-ui/lab": "^4.0.0-alpha.57", "@sensenet/authentication-oidc-react": "^2.0.1", - "@sensenet/client-core": "^3.7.0", + "@sensenet/client-core": "^3.8.0", "@sensenet/client-utils": "^2.0.1", - "@sensenet/controls-react": "^6.0.1", + "@sensenet/controls-react": "^6.1.0", "@sensenet/default-content-types": "^3.1.1", - "@sensenet/document-viewer-react": "^3.0.0", - "@sensenet/hooks-react": "^1.4.2", + "@sensenet/document-viewer-react": "^4.0.0", + "@sensenet/hooks-react": "^1.4.3", "@sensenet/icons-react": "^1.2.19", - "@sensenet/list-controls-react": "^1.5.1", - "@sensenet/pickers-react": "^1.3.6", + "@sensenet/list-controls-react": "^1.6.0", + "@sensenet/pickers-react": "^2.0.0", "@sensenet/query": "^1.1.15", - "@sensenet/repository-events": "^2.0.2", + "@sensenet/repository-events": "^2.0.3", "autosuggest-highlight": "^3.1.1", "clsx": "^1.1.1", "filesize": "^6.1.0", diff --git a/examples/sn-dms-demo/package.json b/examples/sn-dms-demo/package.json index 74c5c4e18..cb2c66d4e 100644 --- a/examples/sn-dms-demo/package.json +++ b/examples/sn-dms-demo/package.json @@ -1,6 +1,6 @@ { "name": "sn-dms-demo", - "version": "3.4.0", + "version": "3.5.0", "description": "Document Management Demo upon sensenet", "private": true, "repository": { @@ -32,19 +32,19 @@ "@material-ui/core": "^4.11.2", "@material-ui/icons": "^4.11.2", "@sensenet/authentication-oidc-react": "^2.0.1", - "@sensenet/client-core": "^3.7.0", + "@sensenet/client-core": "^3.8.0", "@sensenet/client-utils": "^2.0.1", - "@sensenet/controls-react": "^6.0.1", + "@sensenet/controls-react": "^6.1.0", "@sensenet/default-content-types": "^3.1.1", - "@sensenet/document-viewer-react": "^3.0.0", - "@sensenet/hooks-react": "^1.4.2", + "@sensenet/document-viewer-react": "^4.0.0", + "@sensenet/hooks-react": "^1.4.3", "@sensenet/icons-react": "^1.2.19", - "@sensenet/list-controls-react": "^1.5.1", - "@sensenet/pickers-react": "^1.3.6", + "@sensenet/list-controls-react": "^1.6.0", + "@sensenet/pickers-react": "^2.0.0", "@sensenet/query": "^1.1.15", - "@sensenet/redux": "^5.6.6", - "@sensenet/repository-events": "^2.0.2", - "@sensenet/search-react": "^1.4.2", + "@sensenet/redux": "^5.6.7", + "@sensenet/repository-events": "^2.0.3", + "@sensenet/search-react": "^1.5.0", "history": "^5.0.0", "lodash.groupby": "^4.6.0", "moment": "^2.29.1", diff --git a/examples/sn-react-browser/package.json b/examples/sn-react-browser/package.json index d04711aeb..7cb4b97fa 100644 --- a/examples/sn-react-browser/package.json +++ b/examples/sn-react-browser/package.json @@ -1,6 +1,6 @@ { "name": "@sensenet/react-browser", - "version": "2.1.0", + "version": "2.1.1", "private": true, "author": "Sense/Net (http://sensenet.com/)", "contributors": [ @@ -36,11 +36,11 @@ "@material-ui/core": "^4.11.2", "@material-ui/icons": "^4.11.2", "@sensenet/authentication-oidc-react": "^2.0.1", - "@sensenet/client-core": "^3.7.0", + "@sensenet/client-core": "^3.8.0", "@sensenet/default-content-types": "^3.1.1", - "@sensenet/document-viewer-react": "^3.0.0", - "@sensenet/hooks-react": "^1.4.2", - "@sensenet/list-controls-react": "^1.5.1", + "@sensenet/document-viewer-react": "^4.0.0", + "@sensenet/hooks-react": "^1.4.3", + "@sensenet/list-controls-react": "^1.6.0", "clsx": "^1.1.1", "react-moment": "^1.0.0", "react-router": "^5.2.0", diff --git a/examples/sn-react-calendar/package.json b/examples/sn-react-calendar/package.json index 4bc6bec15..08ba5f6a5 100644 --- a/examples/sn-react-calendar/package.json +++ b/examples/sn-react-calendar/package.json @@ -1,6 +1,6 @@ { "name": "@sensenet/react-calendar", - "version": "2.0.7", + "version": "2.0.8", "private": true, "author": "Sense/Net (http://sensenet.com/)", "contributors": [ @@ -40,12 +40,12 @@ "@material-ui/core": "^4.11.2", "@material-ui/icons": "^4.11.2", "@sensenet/authentication-oidc-react": "^2.0.1", - "@sensenet/client-core": "^3.7.0", - "@sensenet/controls-react": "^6.0.1", + "@sensenet/client-core": "^3.8.0", + "@sensenet/controls-react": "^6.1.0", "@sensenet/default-content-types": "^3.1.1", - "@sensenet/hooks-react": "^1.4.2", + "@sensenet/hooks-react": "^1.4.3", "@sensenet/query": "^1.1.15", - "@sensenet/repository-events": "^2.0.2", + "@sensenet/repository-events": "^2.0.3", "clsx": "^1.1.1", "lodash.orderby": "^4.6.0", "moment": "^2.29.1", diff --git a/examples/sn-react-component-docs/package.json b/examples/sn-react-component-docs/package.json index e72272f9e..f1dc0890d 100644 --- a/examples/sn-react-component-docs/package.json +++ b/examples/sn-react-component-docs/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "sn-react-component-docs", - "version": "3.0.7", + "version": "3.0.8", "description": "UI components for building apps upon sensenet implemented in React", "main": "index.js", "scripts": { @@ -28,17 +28,17 @@ }, "homepage": "https://sensenet.com", "dependencies": { - "@sensenet/client-core": "^3.7.0", + "@sensenet/client-core": "^3.8.0", "@sensenet/client-utils": "^2.0.1", - "@sensenet/control-mapper": "^2.1.11", - "@sensenet/controls-react": "^6.0.1", + "@sensenet/control-mapper": "^2.1.12", + "@sensenet/controls-react": "^6.1.0", "@sensenet/default-content-types": "^3.1.1", - "@sensenet/document-viewer-react": "^3.0.0", + "@sensenet/document-viewer-react": "^4.0.0", "@sensenet/icons-react": "^1.2.19", - "@sensenet/list-controls-react": "^1.5.1", - "@sensenet/pickers-react": "^1.3.6", + "@sensenet/list-controls-react": "^1.6.0", + "@sensenet/pickers-react": "^2.0.0", "@sensenet/query": "^1.1.15", - "@sensenet/search-react": "^1.4.2", + "@sensenet/search-react": "^1.5.0", "react": "^16.13.0", "react-dom": "^16.13.0" }, diff --git a/examples/sn-react-imagegallery/package.json b/examples/sn-react-imagegallery/package.json index a22e7f512..424eca232 100644 --- a/examples/sn-react-imagegallery/package.json +++ b/examples/sn-react-imagegallery/package.json @@ -1,6 +1,6 @@ { "name": "@sensenet/react-imagegallery", - "version": "2.0.7", + "version": "2.0.8", "private": true, "author": "Sense/Net (http://sensenet.com/)", "contributors": [ @@ -38,9 +38,9 @@ "@material-ui/core": "^4.11.2", "@material-ui/icons": "^4.11.2", "@sensenet/authentication-oidc-react": "^2.0.1", - "@sensenet/client-core": "^3.7.0", + "@sensenet/client-core": "^3.8.0", "@sensenet/default-content-types": "^3.1.1", - "@sensenet/hooks-react": "^1.4.2", + "@sensenet/hooks-react": "^1.4.3", "moment": "^2.29.1" }, "browserslist": { diff --git a/examples/sn-react-imageupload/package.json b/examples/sn-react-imageupload/package.json index 5a35bfa8c..5898d1e76 100644 --- a/examples/sn-react-imageupload/package.json +++ b/examples/sn-react-imageupload/package.json @@ -1,6 +1,6 @@ { "name": "@sensenet/react-imageupload", - "version": "2.0.7", + "version": "2.0.8", "private": true, "author": "Sense/Net (http://sensenet.com/)", "contributors": [ @@ -38,9 +38,9 @@ "@material-ui/core": "^4.11.2", "@material-ui/icons": "^4.11.2", "@sensenet/authentication-oidc-react": "^2.0.1", - "@sensenet/client-core": "^3.7.0", + "@sensenet/client-core": "^3.8.0", "@sensenet/default-content-types": "^3.1.1", - "@sensenet/hooks-react": "^1.4.2", + "@sensenet/hooks-react": "^1.4.3", "react": "^16.13.0", "react-dom": "^16.13.0" }, diff --git a/examples/sn-react-memoapp/package.json b/examples/sn-react-memoapp/package.json index bce733285..385b1c7e7 100644 --- a/examples/sn-react-memoapp/package.json +++ b/examples/sn-react-memoapp/package.json @@ -1,6 +1,6 @@ { "name": "@sensenet/react-memoapp", - "version": "2.0.7", + "version": "2.0.8", "private": true, "author": "Sense/Net (http://sensenet.com/)", "contributors": [ @@ -38,9 +38,9 @@ "@material-ui/core": "^4.11.2", "@material-ui/icons": "^4.11.2", "@sensenet/authentication-oidc-react": "^2.0.1", - "@sensenet/client-core": "^3.7.0", + "@sensenet/client-core": "^3.8.0", "@sensenet/default-content-types": "^3.1.1", - "@sensenet/hooks-react": "^1.4.2", + "@sensenet/hooks-react": "^1.4.3", "moment": "^2.29.1", "react-markdown": "^5.0.3" }, diff --git a/examples/sn-react-tasklist/package.json b/examples/sn-react-tasklist/package.json index fc4a9fd0b..4422d549d 100644 --- a/examples/sn-react-tasklist/package.json +++ b/examples/sn-react-tasklist/package.json @@ -1,6 +1,6 @@ { "name": "@sensenet/react-tasklist", - "version": "2.0.7", + "version": "2.0.8", "private": true, "author": "Sense/Net (http://sensenet.com/)", "contributors": [ @@ -39,9 +39,9 @@ "@material-ui/core": "^4.11.2", "@material-ui/icons": "^4.11.2", "@sensenet/authentication-oidc-react": "^2.0.1", - "@sensenet/client-core": "^3.7.0", + "@sensenet/client-core": "^3.8.0", "@sensenet/default-content-types": "^3.1.1", - "@sensenet/hooks-react": "^1.4.2", + "@sensenet/hooks-react": "^1.4.3", "navbar": "^2.1.0" }, "browserslist": { diff --git a/examples/sn-react-typescript-boilerplate/package.json b/examples/sn-react-typescript-boilerplate/package.json index e2b5b2516..982cd532c 100644 --- a/examples/sn-react-typescript-boilerplate/package.json +++ b/examples/sn-react-typescript-boilerplate/package.json @@ -1,6 +1,6 @@ { "name": "@sensenet/react-typescript-boilerplate", - "version": "2.0.7", + "version": "2.0.8", "private": true, "author": "Sense/Net (http://sensenet.com/)", "license": "GPL-2.0", @@ -35,8 +35,8 @@ "dependencies": { "@material-ui/core": "^4.11.2", "@sensenet/authentication-oidc-react": "^2.0.1", - "@sensenet/client-core": "^3.7.0", - "@sensenet/hooks-react": "^1.4.2" + "@sensenet/client-core": "^3.8.0", + "@sensenet/hooks-react": "^1.4.3" }, "browserslist": { "production": [ diff --git a/examples/sn-react-usersearch/package.json b/examples/sn-react-usersearch/package.json index d990774bf..164e6cc38 100644 --- a/examples/sn-react-usersearch/package.json +++ b/examples/sn-react-usersearch/package.json @@ -1,6 +1,6 @@ { "name": "@sensenet/react-usersearch", - "version": "2.0.7", + "version": "2.0.8", "private": true, "author": "Sense/Net (http://sensenet.com/)", "contributors": [ @@ -39,13 +39,13 @@ "@material-ui/core": "^4.11.2", "@material-ui/icons": "^4.11.2", "@sensenet/authentication-oidc-react": "^2.0.1", - "@sensenet/client-core": "^3.7.0", - "@sensenet/controls-react": "^6.0.1", + "@sensenet/client-core": "^3.8.0", + "@sensenet/controls-react": "^6.1.0", "@sensenet/default-content-types": "^3.1.1", - "@sensenet/hooks-react": "^1.4.2", + "@sensenet/hooks-react": "^1.4.3", "@sensenet/icons-react": "^1.2.19", "@sensenet/query": "^1.1.15", - "@sensenet/search-react": "^1.4.2", + "@sensenet/search-react": "^1.5.0", "moment": "^2.29.1", "react": "^16.13.0", "react-dom": "^16.13.0" diff --git a/package.json b/package.json index d5705f76a..bb5590244 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "private": true, - "version": "2020.12.0", + "version": "2021.01.0", "workspaces": [ "packages/*", "examples/*", diff --git a/packages/sn-authentication-jwt/package.json b/packages/sn-authentication-jwt/package.json index 930fa6d9a..9a816041c 100644 --- a/packages/sn-authentication-jwt/package.json +++ b/packages/sn-authentication-jwt/package.json @@ -1,6 +1,6 @@ { "name": "@sensenet/authentication-jwt", - "version": "1.0.33", + "version": "1.0.34", "description": "JWT Authentication service for sensenet", "main": "dist/index.js", "typings": "./dist/index.d.ts", @@ -35,7 +35,7 @@ }, "homepage": "https://sensenet.com", "dependencies": { - "@sensenet/client-core": "^3.7.0", + "@sensenet/client-core": "^3.8.0", "@sensenet/client-utils": "^2.0.1", "@sensenet/default-content-types": "^3.1.1", "semaphore-async-await": "^1.5.1", diff --git a/packages/sn-client-auth-google/package.json b/packages/sn-client-auth-google/package.json index 322e8adbd..33106fdd9 100644 --- a/packages/sn-client-auth-google/package.json +++ b/packages/sn-client-auth-google/package.json @@ -1,6 +1,6 @@ { "name": "@sensenet/authentication-google", - "version": "2.0.29", + "version": "2.0.30", "description": "Client-side Google authentication provider for sensenet", "main": "dist/index.js", "typings": "./dist/index.d.ts", @@ -35,7 +35,7 @@ }, "homepage": "https://sensenet.com", "dependencies": { - "@sensenet/authentication-jwt": "^1.0.33", + "@sensenet/authentication-jwt": "^1.0.34", "@sensenet/client-utils": "^2.0.1", "tslib": "^2.0.3" }, diff --git a/packages/sn-client-core/package.json b/packages/sn-client-core/package.json index 811871bd5..d758d9092 100644 --- a/packages/sn-client-core/package.json +++ b/packages/sn-client-core/package.json @@ -1,6 +1,6 @@ { "name": "@sensenet/client-core", - "version": "3.7.0", + "version": "3.8.0", "description": "Core Client package for sensenet", "main": "./dist/index.js", "typings": "./dist/index.d.ts", diff --git a/packages/sn-control-mapper/package.json b/packages/sn-control-mapper/package.json index 23b98d84a..04b18fdbd 100644 --- a/packages/sn-control-mapper/package.json +++ b/packages/sn-control-mapper/package.json @@ -1,6 +1,6 @@ { "name": "@sensenet/control-mapper", - "version": "2.1.11", + "version": "2.1.12", "description": "Control mapping utility for sensenet", "main": "dist/index.js", "typings": "./dist/index.d.ts", @@ -35,7 +35,7 @@ }, "homepage": "https://sensenet.com", "dependencies": { - "@sensenet/client-core": "^3.7.0", + "@sensenet/client-core": "^3.8.0", "@sensenet/default-content-types": "^3.1.1", "tslib": "^2.0.3" }, diff --git a/packages/sn-controls-react/package.json b/packages/sn-controls-react/package.json index 198a7aacf..fd6fdc096 100644 --- a/packages/sn-controls-react/package.json +++ b/packages/sn-controls-react/package.json @@ -1,6 +1,6 @@ { "name": "@sensenet/controls-react", - "version": "6.0.1", + "version": "6.1.0", "description": "React controls for sensenet", "main": "dist/index.js", "typings": "./dist/index.d.ts", @@ -36,14 +36,14 @@ "@date-io/moment": "^1.3.13", "@material-ui/core": "^4.11.2", "@material-ui/pickers": "^3.2.10", - "@sensenet/client-core": "^3.7.0", + "@sensenet/client-core": "^3.8.0", "@sensenet/client-utils": "^2.0.1", - "@sensenet/control-mapper": "^2.1.11", + "@sensenet/control-mapper": "^2.1.12", "@sensenet/default-content-types": "^3.1.1", - "@sensenet/hooks-react": "^1.4.2", - "@sensenet/pickers-react": "^1.3.6", + "@sensenet/hooks-react": "^1.4.3", + "@sensenet/pickers-react": "^2.0.0", "@sensenet/query": "^1.1.15", - "@sensenet/search-react": "^1.4.2", + "@sensenet/search-react": "^1.5.0", "moment": "^2.29.1", "react": "^16.13.0", "react-color": "^2.18.1", diff --git a/packages/sn-document-viewer-react/package.json b/packages/sn-document-viewer-react/package.json index 5344da2c9..868c9be71 100644 --- a/packages/sn-document-viewer-react/package.json +++ b/packages/sn-document-viewer-react/package.json @@ -1,6 +1,6 @@ { "name": "@sensenet/document-viewer-react", - "version": "3.0.0", + "version": "4.0.0", "main": "dist/index.js", "typings": "./dist/index.d.ts", "files": [ @@ -28,10 +28,10 @@ "dependencies": { "@material-ui/core": "^4.11.2", "@material-ui/icons": "^4.11.2", - "@sensenet/client-core": "^3.7.0", + "@sensenet/client-core": "^3.8.0", "@sensenet/client-utils": "^2.0.1", "@sensenet/default-content-types": "^3.1.1", - "@sensenet/hooks-react": "^1.4.2", + "@sensenet/hooks-react": "^1.4.3", "react": "^16.13.0", "react-dom": "^16.13.0", "semaphore-async-await": "^1.5.1", diff --git a/packages/sn-hooks-react/package.json b/packages/sn-hooks-react/package.json index ed0c2a8e3..9a7103ae7 100644 --- a/packages/sn-hooks-react/package.json +++ b/packages/sn-hooks-react/package.json @@ -1,6 +1,6 @@ { "name": "@sensenet/hooks-react", - "version": "1.4.2", + "version": "1.4.3", "description": "", "main": "dist/index.js", "typings": "./dist/index.d.ts", @@ -26,10 +26,10 @@ "license": "GPL-2.0", "homepage": "https://sensenet.com", "dependencies": { - "@sensenet/client-core": "^3.7.0", + "@sensenet/client-core": "^3.8.0", "@sensenet/client-utils": "^2.0.1", "@sensenet/default-content-types": "^3.1.1", - "@sensenet/repository-events": "^2.0.2", + "@sensenet/repository-events": "^2.0.3", "react": "^16.13.0", "react-dom": "^16.13.0", "semaphore-async-await": "^1.5.1", diff --git a/packages/sn-list-controls-react/package.json b/packages/sn-list-controls-react/package.json index b7dc6f186..83ecfb7e3 100644 --- a/packages/sn-list-controls-react/package.json +++ b/packages/sn-list-controls-react/package.json @@ -1,6 +1,6 @@ { "name": "@sensenet/list-controls-react", - "version": "1.5.1", + "version": "1.6.0", "description": "", "main": "dist/index.js", "typings": "./dist/index.d.ts", diff --git a/packages/sn-pickers-react/package.json b/packages/sn-pickers-react/package.json index 8c2c1b5b6..8b0628183 100644 --- a/packages/sn-pickers-react/package.json +++ b/packages/sn-pickers-react/package.json @@ -1,6 +1,6 @@ { "name": "@sensenet/pickers-react", - "version": "1.3.6", + "version": "2.0.0", "description": "Content picker components in react with sensenet.", "keywords": [ "sensenet", @@ -33,7 +33,7 @@ }, "dependencies": { "@material-ui/core": "^4.11.2", - "@sensenet/client-core": "^3.7.0", + "@sensenet/client-core": "^3.8.0", "@sensenet/client-utils": "^2.0.1", "@sensenet/default-content-types": "^3.1.1", "@sensenet/icons-react": "^1.2.19", diff --git a/packages/sn-redux/package.json b/packages/sn-redux/package.json index eb48fc6b4..fb1476e5a 100644 --- a/packages/sn-redux/package.json +++ b/packages/sn-redux/package.json @@ -1,6 +1,6 @@ { "name": "@sensenet/redux", - "version": "5.6.6", + "version": "5.6.7", "description": "A set of redux actions, reducers and redux-ovbservable epics for sensenet", "main": "dist/index.js", "typings": "./dist/index.d.ts", @@ -33,9 +33,9 @@ }, "homepage": "https://sensenet.com", "dependencies": { - "@sensenet/authentication-google": "^2.0.29", - "@sensenet/authentication-jwt": "^1.0.33", - "@sensenet/client-core": "^3.7.0", + "@sensenet/authentication-google": "^2.0.30", + "@sensenet/authentication-jwt": "^1.0.34", + "@sensenet/client-core": "^3.8.0", "@sensenet/client-utils": "^2.0.1", "@sensenet/default-content-types": "^3.1.1", "@sensenet/redux-promise-middleware": "^2.2.1", diff --git a/packages/sn-repository-events/package.json b/packages/sn-repository-events/package.json index f169f83aa..fb0cac96a 100644 --- a/packages/sn-repository-events/package.json +++ b/packages/sn-repository-events/package.json @@ -1,6 +1,6 @@ { "name": "@sensenet/repository-events", - "version": "2.0.2", + "version": "2.0.3", "description": "Client side repository event observables for sensenet", "main": "dist/index.js", "typings": "./dist/index.d.ts", @@ -35,7 +35,7 @@ }, "homepage": "https://sensenet.com", "dependencies": { - "@sensenet/client-core": "^3.7.0", + "@sensenet/client-core": "^3.8.0", "@sensenet/client-utils": "^2.0.1", "@sensenet/default-content-types": "^3.1.1", "tslib": "^2.0.3" diff --git a/packages/sn-search-react/package.json b/packages/sn-search-react/package.json index f9182b091..9e17dea43 100644 --- a/packages/sn-search-react/package.json +++ b/packages/sn-search-react/package.json @@ -1,6 +1,6 @@ { "name": "@sensenet/search-react", - "version": "1.4.2", + "version": "1.5.0", "description": "Search component in react with sensenet", "main": "dist/index.js", "typings": "./dist/index.d.ts", @@ -29,7 +29,7 @@ "homepage": "https://sensenet.com", "dependencies": { "@material-ui/core": "^4.11.2", - "@sensenet/client-core": "^3.7.0", + "@sensenet/client-core": "^3.8.0", "@sensenet/client-utils": "^2.0.1", "@sensenet/default-content-types": "^3.1.1", "@sensenet/icons-react": "^1.2.19", From 7dcf23557f348710ff036dc4f32967cdc604be09 Mon Sep 17 00:00:00 2001 From: herflis Date: Fri, 22 Jan 2021 18:38:40 +0100 Subject: [PATCH 10/11] Add alt attribute to user avatar --- apps/sensenet/src/components/UserAvatar.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/sensenet/src/components/UserAvatar.tsx b/apps/sensenet/src/components/UserAvatar.tsx index 8c3c21441..e8620b331 100644 --- a/apps/sensenet/src/components/UserAvatar.tsx +++ b/apps/sensenet/src/components/UserAvatar.tsx @@ -12,7 +12,12 @@ export const UserAvatar: React.FC<{ const avatarUrl = props.user.Avatar?.Url if (avatarUrl) { return ( - + ) } return ( From 691608f9ea16713506b69865431dfa94a6406311 Mon Sep 17 00:00:00 2001 From: herflis Date: Fri, 22 Jan 2021 18:41:10 +0100 Subject: [PATCH 11/11] Exclude gz files from stats --- apps/sensenet/webpack.prod.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/sensenet/webpack.prod.js b/apps/sensenet/webpack.prod.js index 77347c79a..0e2e61aec 100644 --- a/apps/sensenet/webpack.prod.js +++ b/apps/sensenet/webpack.prod.js @@ -65,6 +65,9 @@ module.exports = merge(common, { }), new RelativeCiAgentWebpackPlugin({ enabled: process.env.GITHUB_ACTIONS, // Run this only under GitHub Actions + stats: { + excludeAssets: [(assetName) => assetName.endsWith('.gz')], + }, }), ], module: {