diff --git a/conventions/README.md b/conventions/README.md index eae8032e0f3..a1e65d836b1 100644 --- a/conventions/README.md +++ b/conventions/README.md @@ -427,7 +427,7 @@ import { guid } from "../../utils/guid"; @Component({ tag: "calcite-example", styleUrl: "calcite-example.scss", - shadow: true, + shadow: true }) export class CalciteExample { // ... @@ -466,9 +466,7 @@ if (Build.isBrowser) { Checking if the necessary APIs are present is also acceptable: ```ts -const elements = this.el.shadowRoot - ? this.el.shadowRoot.querySelector("slot").assignedElements() - : []; +const elements = this.el.shadowRoot ? this.el.shadowRoot.querySelector("slot").assignedElements() : []; ``` To ensure that all components are compatible for prerendering a prerender build is done as part of `npm test`. diff --git a/package-lock.json b/package-lock.json index 73c87776c62..8c28b737390 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,9 +28,9 @@ } }, "@babel/compat-data": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.10.4.tgz", - "integrity": "sha512-t+rjExOrSVvjQQXNp5zAIYDp00KjdvGl/TpDX5REPr0S9IAIPQMTilcfG6q8c0QFmj9lSTVySV2VTsyggvtNIw==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.10.5.tgz", + "integrity": "sha512-mPVoWNzIpYJHbWje0if7Ck36bpbtTvIxOi9+6WSK9wjGEXearAqlwBoTQvVjsAY2VIwgcs8V940geY3okzRCEw==", "dev": true, "requires": { "browserslist": "^4.12.0", @@ -99,15 +99,21 @@ }, "dependencies": { "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true } } }, @@ -122,15 +128,21 @@ }, "dependencies": { "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true } } }, @@ -154,6 +166,12 @@ "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true } } }, @@ -178,6 +196,12 @@ "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true } } }, @@ -203,13 +227,13 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.4.tgz", - "integrity": "sha512-9raUiOsXPxzzLjCXeosApJItoMnX3uyT4QdM2UldffuGApNrF8e938MwNpDCK9CPoyxrEoCgT+hObJc3mZa6lQ==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz", + "integrity": "sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==", "dev": true, "requires": { "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.10.5", "@babel/helper-optimise-call-expression": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4", "@babel/helper-replace-supers": "^7.10.4", @@ -285,9 +309,9 @@ } }, "@babel/parser": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", - "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==", "dev": true }, "@babel/template": { @@ -302,15 +326,21 @@ } }, "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true } } }, @@ -326,14 +356,14 @@ } }, "@babel/helper-define-map": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.4.tgz", - "integrity": "sha512-nIij0oKErfCnLUCWaCaHW0Bmtl2RO9cN7+u2QT8yqTywgALKlyUVOvHDElh+b5DwVC6YB1FOYFOTWcN/+41EDA==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", + "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", "dev": true, "requires": { "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.4", - "lodash": "^4.17.13" + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" }, "dependencies": { "@babel/code-frame": { @@ -390,9 +420,9 @@ } }, "@babel/parser": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", - "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==", "dev": true }, "@babel/template": { @@ -407,15 +437,21 @@ } }, "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true } } }, @@ -439,14 +475,13 @@ } }, "@babel/generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", - "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", + "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", "dev": true, "requires": { - "@babel/types": "^7.10.4", + "@babel/types": "^7.10.5", "jsesc": "^2.5.1", - "lodash": "^4.17.13", "source-map": "^0.5.0" } }, @@ -504,9 +539,9 @@ } }, "@babel/parser": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", - "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==", "dev": true }, "@babel/template": { @@ -521,32 +556,38 @@ } }, "@babel/traverse": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", - "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", + "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.4", + "@babel/generator": "^7.10.5", "@babel/helper-function-name": "^7.10.4", "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/types": "^7.10.5", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.13" + "lodash": "^4.17.19" } }, "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true } } }, @@ -580,37 +621,49 @@ }, "dependencies": { "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true } } }, "@babel/helper-member-expression-to-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.4.tgz", - "integrity": "sha512-m5j85pK/KZhuSdM/8cHUABQTAslV47OjfIB9Cc7P+PvlAoBzdb79BGNfw8RhT5Mq3p+xGd0ZfAKixbrUZx0C7A==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz", + "integrity": "sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.10.5" }, "dependencies": { "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true } } }, @@ -624,22 +677,28 @@ }, "dependencies": { "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true } } }, "@babel/helper-module-transforms": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.4.tgz", - "integrity": "sha512-Er2FQX0oa3nV7eM1o0tNCTx7izmQtwAQsIiaLRWtavAAEcskb0XJ5OjJbVrYXWOTr8om921Scabn4/tzlx7j1Q==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.5.tgz", + "integrity": "sha512-4P+CWMJ6/j1W915ITJaUkadLObmCRRSC234uctJfn/vHrsLNxsR8dwlcXv9ZhJWzl77awf+mWXSZEKt5t0OnlA==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.10.4", @@ -647,8 +706,8 @@ "@babel/helper-simple-access": "^7.10.4", "@babel/helper-split-export-declaration": "^7.10.4", "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4", - "lodash": "^4.17.13" + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" }, "dependencies": { "@babel/code-frame": { @@ -694,9 +753,9 @@ } }, "@babel/parser": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", - "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==", "dev": true }, "@babel/template": { @@ -711,15 +770,21 @@ } }, "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true } } }, @@ -733,15 +798,21 @@ }, "dependencies": { "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true } } }, @@ -752,12 +823,20 @@ "dev": true }, "@babel/helper-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.4.tgz", - "integrity": "sha512-inWpnHGgtg5NOF0eyHlC0/74/VkdRITY9dtTpB2PrxKKn+AkVMRiZz/Adrx+Ssg+MLDesi2zohBW6MVq6b4pOQ==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", + "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", "dev": true, "requires": { - "lodash": "^4.17.13" + "lodash": "^4.17.19" + }, + "dependencies": { + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true + } } }, "@babel/helper-remap-async-to-generator": { @@ -783,14 +862,13 @@ } }, "@babel/generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", - "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", + "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", "dev": true, "requires": { - "@babel/types": "^7.10.4", + "@babel/types": "^7.10.5", "jsesc": "^2.5.1", - "lodash": "^4.17.13", "source-map": "^0.5.0" } }, @@ -848,9 +926,9 @@ } }, "@babel/parser": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", - "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==", "dev": true }, "@babel/template": { @@ -865,32 +943,38 @@ } }, "@babel/traverse": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", - "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", + "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.4", + "@babel/generator": "^7.10.5", "@babel/helper-function-name": "^7.10.4", "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/types": "^7.10.5", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.13" + "lodash": "^4.17.19" } }, "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true } } }, @@ -916,14 +1000,13 @@ } }, "@babel/generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", - "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", + "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", "dev": true, "requires": { - "@babel/types": "^7.10.4", + "@babel/types": "^7.10.5", "jsesc": "^2.5.1", - "lodash": "^4.17.13", "source-map": "^0.5.0" } }, @@ -981,9 +1064,9 @@ } }, "@babel/parser": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", - "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==", "dev": true }, "@babel/template": { @@ -998,32 +1081,38 @@ } }, "@babel/traverse": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", - "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", + "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.4", + "@babel/generator": "^7.10.5", "@babel/helper-function-name": "^7.10.4", "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/types": "^7.10.5", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.13" + "lodash": "^4.17.19" } }, "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true } } }, @@ -1071,9 +1160,9 @@ } }, "@babel/parser": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", - "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==", "dev": true }, "@babel/template": { @@ -1088,15 +1177,21 @@ } }, "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true } } }, @@ -1137,14 +1232,13 @@ } }, "@babel/generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", - "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", + "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", "dev": true, "requires": { - "@babel/types": "^7.10.4", + "@babel/types": "^7.10.5", "jsesc": "^2.5.1", - "lodash": "^4.17.13", "source-map": "^0.5.0" } }, @@ -1202,9 +1296,9 @@ } }, "@babel/parser": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", - "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==", "dev": true }, "@babel/template": { @@ -1219,32 +1313,38 @@ } }, "@babel/traverse": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", - "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", + "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.4", + "@babel/generator": "^7.10.5", "@babel/helper-function-name": "^7.10.4", "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/types": "^7.10.5", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.13" + "lodash": "^4.17.19" } }, "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true } } }, @@ -1290,9 +1390,9 @@ "dev": true }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.4.tgz", - "integrity": "sha512-MJbxGSmejEFVOANAezdO39SObkURO5o/8b6fSH6D1pi9RZQt+ldppKPXfqgUWpSQ9asM6xaSaSJIaeWMDRP0Zg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz", + "integrity": "sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -1551,12 +1651,20 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz", - "integrity": "sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", + "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true + } } }, "@babel/plugin-syntax-nullish-coalescing-operator": { @@ -1700,13 +1808,12 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.4.tgz", - "integrity": "sha512-J3b5CluMg3hPUii2onJDRiaVbPtKFPLEaV5dOPY5OeAbDi1iU/UbbFFTgwb7WnanaDy7bjU35kc26W3eM5Qa0A==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.5.tgz", + "integrity": "sha512-6Ycw3hjpQti0qssQcA6AMSFDHeNJ++R6dIMnpRqUjFeBBTmTDPa8zgF90OVfTvAo11mXZTlVUViY1g8ffrURLg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "lodash": "^4.17.13" + "@babel/helper-plugin-utils": "^7.10.4" }, "dependencies": { "@babel/helper-plugin-utils": { @@ -1802,9 +1909,9 @@ } }, "@babel/parser": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", - "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==", "dev": true }, "@babel/template": { @@ -1819,15 +1926,21 @@ } }, "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true } } }, @@ -2023,9 +2136,9 @@ } }, "@babel/parser": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", - "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==", "dev": true }, "@babel/template": { @@ -2040,15 +2153,21 @@ } }, "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true } } }, @@ -2087,12 +2206,12 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.4.tgz", - "integrity": "sha512-3Fw+H3WLUrTlzi3zMiZWp3AR4xadAEMv6XRCYnd5jAlLM61Rn+CRJaZMaNvIpcJpQ3vs1kyifYvEVPFfoSkKOA==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz", + "integrity": "sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-module-transforms": "^7.10.5", "@babel/helper-plugin-utils": "^7.10.4", "babel-plugin-dynamic-import-node": "^2.3.3" }, @@ -2126,13 +2245,13 @@ } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.4.tgz", - "integrity": "sha512-Tb28LlfxrTiOTGtZFsvkjpyjCl9IoaRI52AEU/VIwOwvDQWtbNJsAqTXzh+5R7i74e/OZHH2c2w2fsOqAfnQYQ==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz", + "integrity": "sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==", "dev": true, "requires": { "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-module-transforms": "^7.10.5", "@babel/helper-plugin-utils": "^7.10.4", "babel-plugin-dynamic-import-node": "^2.3.3" }, @@ -2208,9 +2327,9 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.4.tgz", - "integrity": "sha512-RurVtZ/D5nYfEg0iVERXYKEgDFeesHrHfx8RT05Sq57ucj2eOYAP6eu5fynL4Adju4I/mP/I6SO0DqNWAXjfLQ==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz", + "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==", "dev": true, "requires": { "@babel/helper-get-function-arity": "^7.10.4", @@ -2233,15 +2352,21 @@ "dev": true }, "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true } } }, @@ -2387,9 +2512,9 @@ } }, "@babel/plugin-transform-template-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.4.tgz", - "integrity": "sha512-4NErciJkAYe+xI5cqfS8pV/0ntlY5N5Ske/4ImxAVX7mk9Rxt2bwDTGv1Msc2BRJvWQcmYEC+yoMLdX22aE4VQ==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz", + "integrity": "sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.10.4", @@ -2422,12 +2547,12 @@ } }, "@babel/plugin-transform-typescript": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.10.4.tgz", - "integrity": "sha512-3WpXIKDJl/MHoAN0fNkSr7iHdUMHZoppXjf2HJ9/ed5Xht5wNIsXllJXdityKOxeA3Z8heYRb1D3p2H5rfCdPw==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.10.5.tgz", + "integrity": "sha512-YCyYsFrrRMZ3qR7wRwtSSJovPG5vGyG4ZdcSAivGwTfoasMp3VOB/AKhohu3dFtmB4cCDcsndCSxGtrdliCsZQ==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-create-class-features-plugin": "^7.10.5", "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-typescript": "^7.10.4" }, @@ -2554,16 +2679,22 @@ "dev": true }, "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -2622,16 +2753,24 @@ } }, "@babel/register": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.10.4.tgz", - "integrity": "sha512-whHmgGiWNVyTVnYTSawtDWhaeYsc+noeU8Rmi+MPnbGhDYmr5QpEDMrQcIA07D2RUv0BlThPcN89XcHCqq/O4g==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.10.5.tgz", + "integrity": "sha512-eYHdLv43nyvmPn9bfNfrcC4+iYNwdQ8Pxk1MFJuU/U5LpSYl/PH4dFMazCYZDFVi8ueG3shvO+AQfLrxpYulQw==", "dev": true, "requires": { "find-cache-dir": "^2.0.0", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "make-dir": "^2.1.0", "pirates": "^4.0.0", "source-map-support": "^0.5.16" + }, + "dependencies": { + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true + } } }, "@babel/runtime": { @@ -3883,6 +4022,12 @@ "json5": "^2.1.2" } }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true + }, "parse-entities": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", @@ -3969,65 +4114,73 @@ } }, "@mdx-js/mdx": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.6.tgz", - "integrity": "sha512-Q1j/RtjNbRZRC/ciaOqQLplsJ9lb0jJhDSvkusmzCsCX+NZH7YTUvccWf7l6zKW1CAiofJfqZdZtXkeJUDZiMw==", + "version": "1.6.14", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.14.tgz", + "integrity": "sha512-VLGd52mFL091mkFTNZkGPMJxLvb382DqYDZfiZcqYBnbZPpFIbW3GnjXiHjLxT2v9zEKWD11+wcZLKNaWt8WPQ==", "dev": true, "requires": { - "@babel/core": "7.9.6", - "@babel/plugin-syntax-jsx": "7.8.3", + "@babel/core": "7.10.5", + "@babel/plugin-syntax-jsx": "7.10.4", "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "^1.6.6", - "babel-plugin-apply-mdx-type-prop": "^1.6.6", - "babel-plugin-extract-import-names": "^1.6.6", + "@mdx-js/util": "1.6.14", + "babel-plugin-apply-mdx-type-prop": "1.6.14", + "babel-plugin-extract-import-names": "1.6.14", "camelcase-css": "2.0.1", "detab": "2.0.3", - "hast-util-raw": "5.0.2", + "hast-util-raw": "6.0.0", "lodash.uniq": "4.5.0", "mdast-util-to-hast": "9.1.0", "remark-footnotes": "1.0.0", - "remark-mdx": "^1.6.6", - "remark-parse": "8.0.2", + "remark-mdx": "1.6.14", + "remark-parse": "8.0.3", "remark-squeeze-paragraphs": "4.0.0", "style-to-object": "0.3.0", "unified": "9.0.0", "unist-builder": "2.0.3", - "unist-util-visit": "2.0.2" + "unist-util-visit": "2.0.3" }, "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/core": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.6.tgz", - "integrity": "sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.6", - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helpers": "^7.9.6", - "@babel/parser": "^7.9.6", - "@babel/template": "^7.8.6", - "@babel/traverse": "^7.9.6", - "@babel/types": "^7.9.6", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.5.tgz", + "integrity": "sha512-O34LQooYVDXPl7QWCdW9p4NR+QlzOr7xShPPJz8GsuCU3/8ua/wqTr7gmnxXv+WBESiGU/G5s16i6tUvHkNb+w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.5", + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.5", + "@babel/types": "^7.10.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", "json5": "^2.1.2", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" } }, "@babel/generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", - "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", + "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", "dev": true, "requires": { - "@babel/types": "^7.10.4", + "@babel/types": "^7.10.5", "jsesc": "^2.5.1", - "lodash": "^4.17.13", "source-map": "^0.5.0" } }, @@ -4051,6 +4204,12 @@ "@babel/types": "^7.10.4" } }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true + }, "@babel/helper-split-export-declaration": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", @@ -4096,9 +4255,9 @@ } }, "@babel/parser": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", - "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==", "dev": true }, "@babel/template": { @@ -4110,58 +4269,55 @@ "@babel/code-frame": "^7.10.4", "@babel/parser": "^7.10.4", "@babel/types": "^7.10.4" - }, - "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/traverse": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", - "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", + "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.4", + "@babel/generator": "^7.10.5", "@babel/helper-function-name": "^7.10.4", "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/types": "^7.10.5", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.13" - }, - "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" - } - } + "lodash": "^4.17.19" } }, "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } }, + "babel-plugin-apply-mdx-type-prop": { + "version": "1.6.14", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.14.tgz", + "integrity": "sha512-qOnIfczK7yxDpBUeT21WIVmGPpSyzPv61FS9/Ql5J/PIEVw0c6aS2a53/tL5rQWKlJwNdb2RkhG+fpT5WGvYaQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.14" + } + }, + "babel-plugin-extract-import-names": { + "version": "1.6.14", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.14.tgz", + "integrity": "sha512-pCyalU0WzbFPEb3E/ALerXzL/OMGH9M1mbWPR4QuSRo6BAfLL/j0QcLRRYojYQpCCS7pys9JpN/HI2+GcsbEhg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, "json5": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", @@ -4171,6 +4327,12 @@ "minimist": "^1.2.5" } }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -4186,9 +4348,9 @@ "dev": true }, "@mdx-js/util": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.6.tgz", - "integrity": "sha512-PKTHVgMHnK5p+kcMWWNnZuoR7O19VmHiOujmVcyN50hya7qIdDb5vvsYC+dwLxApEXiABhLozq0dlIwFeS3yjg==", + "version": "1.6.14", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.14.tgz", + "integrity": "sha512-JyhjH3ffP4KQuqnUSBSSF28mToGGSc2jFI0XIXSEqiN+FaPlgzOSd3U350gXi8FYQxXzEygHCOtzOIfTjFf+4w==", "dev": true }, "@mrmlnc/readdir-enhanced": { @@ -5900,6 +6062,12 @@ "minimist": "^1.2.5" } }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -7916,16 +8084,6 @@ "integrity": "sha1-M51M3be2X9YtHfnbn+BN4TQSK9U=", "dev": true }, - "babel-plugin-apply-mdx-type-prop": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.6.tgz", - "integrity": "sha512-rUzVvkQa8/9M63OZT6qQQ1bS8P0ozhXp9e5uJ3RwRJF5Me7s4nZK5SYhyNHYc0BkAflWnCOGMP3oPQUfuyB8tg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.8.3", - "@mdx-js/util": "^1.6.6" - } - }, "babel-plugin-dynamic-import-node": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", @@ -7953,15 +8111,6 @@ "source-map": "^0.5.7" } }, - "babel-plugin-extract-import-names": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.6.tgz", - "integrity": "sha512-UtMuiQJnhVPAGE2+pDe7Nc9NVEmDdqGTN74BtRALgH+7oag88RpxFLOSiA+u5mFkFg741wW9Ut5KiyJpksEj/g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.8.3" - } - }, "babel-plugin-istanbul": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", @@ -11431,18 +11580,18 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.4.tgz", - "integrity": "sha512-UpTN5yUJr9b4EX2CnGNWIvER7Ab83ibv0pcvvHc4UOdrBI5jb8bj+32cCwPX6xu0mt2daFNjYhoi+X7beH0RSw==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.5.tgz", + "integrity": "sha512-otddXKhdNn7d0ptoFRHtMLa8LqDxLYwTjB4nYgM1yy5N6gU/MUf8zqyyLltCH3yAVitBzmwK4us+DD0l/MauAg==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", "dev": true } } @@ -11669,9 +11818,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.497", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.497.tgz", - "integrity": "sha512-sPdW5bUDZwiFtoonuZCUwRGzsZmKzcLM0bMVhp6SMCfUG+B3faENLx3cE+o+K0Jl+MPuNA9s9cScyFjOlixZpQ==", + "version": "1.3.509", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.509.tgz", + "integrity": "sha512-cN4lkjNRuTG8rtAqTOVgwpecEC2kbKA04PG6YijcKGHK/kD0xLjiqExcAOmLUwtXZRF8cBeam2I0VZcih919Ug==", "dev": true }, "element-resize-detector": { @@ -11765,9 +11914,9 @@ } }, "enhanced-resolve": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.2.0.tgz", - "integrity": "sha512-S7eiFb/erugyd1rLb6mQ3Vuq+EXHv5cpCkNqqIkYkBgN2QdFnyCZzFBleqwGEx4lgNGYij81BWnCrFNK7vxvjQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", + "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -11811,9 +11960,9 @@ "dev": true }, "envinfo": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.5.1.tgz", - "integrity": "sha512-hQBkDf2iO4Nv0CNHpCuSBeaSrveU6nThVxFGTrq/eDlV716UQk09zChaJae4mZRsos1x4YLY2TaH3LHUae3ZmQ==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.2.tgz", + "integrity": "sha512-k3Eh5bKuQnZjm49/L7H4cHzs2FlL5QjbTB3JrPxoTI8aJG7hVMe4uKyJxSYH4ahseby2waUwk5OaKX/nAsaYgg==", "dev": true }, "err-code": { @@ -12137,6 +12286,12 @@ "type-check": "~0.4.0" } }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true + }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -12375,9 +12530,9 @@ "dev": true }, "events": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", - "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", "dev": true }, "eventsource": { @@ -13155,9 +13310,9 @@ "dev": true }, "flow-parser": { - "version": "0.129.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.129.0.tgz", - "integrity": "sha512-kzxyoEl8vG0JF0/h/u0UjALXmsGvwU2NBfKczCSNO/It2fKb8hz1gMt05OuZAlMLYXcvgjntWJadIABeKGPK4g==", + "version": "0.130.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.130.0.tgz", + "integrity": "sha512-h9NATB7QsKhj2ucgEH2XzB7p+5ubk8IZX5u/qHkN+oyQoECi1diq6mYfIuYBOyL35f3AhJf/YDkBYQBTqqYK+w==", "dev": true }, "flush-write-stream": { @@ -15617,41 +15772,32 @@ } }, "hast-to-hyperscript": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-7.0.4.tgz", - "integrity": "sha512-vmwriQ2H0RPS9ho4Kkbf3n3lY436QKLq6VaGA1pzBh36hBi3tm1DO9bR+kaJIbpT10UqaANDkMjxvjVfr+cnOA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.0.tgz", + "integrity": "sha512-NJvMYU3GlMLs7hN3CRbsNlMzusVNkYBogVWDGybsuuVQ336gFLiD+q9qtFZT2meSHzln3pNISZWTASWothMSMg==", "dev": true, "requires": { + "@types/unist": "^2.0.3", "comma-separated-tokens": "^1.0.0", "property-information": "^5.3.0", "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.2.1", - "unist-util-is": "^3.0.0", - "web-namespaces": "^1.1.2" - }, - "dependencies": { - "style-to-object": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.2.3.tgz", - "integrity": "sha512-1d/k4EY2N7jVLOqf2j04dTc37TPOv/hHxZmvpg8Pdh8UYydxeu/C1W1U4vD8alzf5V2Gt7rLsmkr4dxAlDm9ng==", - "dev": true, - "requires": { - "inline-style-parser": "0.1.1" - } - } + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" } }, "hast-util-from-parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz", - "integrity": "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.0.tgz", + "integrity": "sha512-3ZYnfKenbbkhhNdmOQqgH10vnvPivTdsOJCri+APn0Kty+nRkDHArnaX9Hiaf8H+Ig+vkNptL+SRY/6RwWJk1Q==", "dev": true, "requires": { - "ccount": "^1.0.3", + "@types/parse5": "^5.0.0", + "ccount": "^1.0.0", "hastscript": "^5.0.0", "property-information": "^5.0.0", - "web-namespaces": "^1.1.2", - "xtend": "^4.0.1" + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0" } }, "hast-util-parse-selector": { @@ -15661,28 +15807,30 @@ "dev": true }, "hast-util-raw": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-5.0.2.tgz", - "integrity": "sha512-3ReYQcIHmzSgMq8UrDZHFL0oGlbuVGdLKs8s/Fe8BfHFAyZDrdv1fy/AGn+Fim8ZuvAHcJ61NQhVMtyfHviT/g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.0.tgz", + "integrity": "sha512-IQo6tv3bMMKxk53DljswliucCJOQxaZFCuKEJ7X80249dmJ1nA9LtOnnylsLlqTG98NjQ+iGcoLAYo9q5FRhRg==", "dev": true, "requires": { - "hast-util-from-parse5": "^5.0.0", - "hast-util-to-parse5": "^5.0.0", + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", "html-void-elements": "^1.0.0", - "parse5": "^5.0.0", + "parse5": "^6.0.0", "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", "web-namespaces": "^1.0.0", "xtend": "^4.0.0", "zwitch": "^1.0.0" } }, "hast-util-to-parse5": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-5.1.2.tgz", - "integrity": "sha512-ZgYLJu9lYknMfsBY0rBV4TJn2xiwF1fXFFjbP6EE7S0s5mS8LIKBVWzhA1MeIs1SWW6GnnE4In6c3kPb+CWhog==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", + "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", "dev": true, "requires": { - "hast-to-hyperscript": "^7.0.0", + "hast-to-hyperscript": "^9.0.0", "property-information": "^5.0.0", "web-namespaces": "^1.0.0", "xtend": "^4.0.0", @@ -16321,9 +16469,9 @@ "dev": true }, "inquirer": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.2.tgz", - "integrity": "sha512-DF4osh1FM6l0RJc5YWYhSDB6TawiBRlbV9Cox8MWlidU218Tb7fm3lQTULyUJDfJ0tjbzl0W4q651mrCCEM55w==", + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", "dev": true, "requires": { "ansi-escapes": "^4.2.1", @@ -16332,7 +16480,7 @@ "cli-width": "^3.0.0", "external-editor": "^3.0.3", "figures": "^3.0.0", - "lodash": "^4.17.16", + "lodash": "^4.17.19", "mute-stream": "0.0.8", "run-async": "^2.4.0", "rxjs": "^6.6.0", @@ -19210,18 +19358,18 @@ } }, "listr2": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-2.2.0.tgz", - "integrity": "sha512-Q8qbd7rgmEwDo1nSyHaWQeztfGsdL6rb4uh7BA+Q80AZiDET5rVntiU1+13mu2ZTDVaBVbvAD1Db11rnu3l9sg==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-2.3.6.tgz", + "integrity": "sha512-znchYUj4fahw/SxxJ2SOEytA7enDinu0HFeIS+Z+2o8h4sMyl6cUm6J9GBvF7ICwLjQJy7lDcphwYbjEDgJgcQ==", "dev": true, "requires": { - "chalk": "^4.0.0", + "chalk": "^4.1.0", "cli-truncate": "^2.1.0", "figures": "^3.2.0", "indent-string": "^4.0.0", "log-update": "^4.0.0", "p-map": "^4.0.0", - "rxjs": "^6.5.5", + "rxjs": "^6.6.0", "through": "^2.3.8" }, "dependencies": { @@ -19363,9 +19511,9 @@ } }, "lock-verify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/lock-verify/-/lock-verify-2.2.0.tgz", - "integrity": "sha512-BhM1Vqsu7x0s+EalTifNjdDPks+ZjdAhComvnA6VcCIlDOI5ouELXqAe1BYuEIP4zGN0W08xVm6byJV1LnCiJg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lock-verify/-/lock-verify-2.2.1.tgz", + "integrity": "sha512-n0Zw2DVupKfZMazy/HIFVNohJ1z8fIoZ77WBnyyBGG6ixw83uJNyrbiJvvHWe1QKkGiBCjj8RCPlymltliqEww==", "dev": true, "requires": { "@iarna/cli": "^1.2.0", @@ -19382,9 +19530,9 @@ } }, "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, "lodash-es": { @@ -20649,9 +20797,9 @@ } }, "node-releases": { - "version": "1.1.59", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.59.tgz", - "integrity": "sha512-H3JrdUczbdiwxN5FuJPyCHnGHIFqQ0wWxo+9j1kAXAzqNMAHlo+4I/sYYxpyK0irQ73HgdiyzD32oqQDcU2Osw==", + "version": "1.1.60", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", + "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==", "dev": true }, "nopt": { @@ -21370,9 +21518,9 @@ } }, "open": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/open/-/open-7.0.4.tgz", - "integrity": "sha512-brSA+/yq+b08Hsr4c8fsEW2CRzk1BmfN3SAK/5VCHQ9bdoZJ4qa/+AfR0xHjlbbZUyPkUHs1b8x1RqdyZdkVqQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-7.1.0.tgz", + "integrity": "sha512-lLPI5KgOwEYCDKXf4np7y1PBEkj7HYIyP2DY8mVDRnx0VIIu6bNrRB0R66TuO7Mack6EnTNLm4uvcl1UoklTpA==", "dev": true, "requires": { "is-docker": "^2.0.0", @@ -21776,9 +21924,9 @@ "dev": true }, "parse-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", - "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz", + "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -21824,9 +21972,9 @@ } }, "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, "parseurl": { @@ -22092,18 +22240,18 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.4.tgz", - "integrity": "sha512-UpTN5yUJr9b4EX2CnGNWIvER7Ab83ibv0pcvvHc4UOdrBI5jb8bj+32cCwPX6xu0mt2daFNjYhoi+X7beH0RSw==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.5.tgz", + "integrity": "sha512-otddXKhdNn7d0ptoFRHtMLa8LqDxLYwTjB4nYgM1yy5N6gU/MUf8zqyyLltCH3yAVitBzmwK4us+DD0l/MauAg==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", "dev": true } } @@ -22275,15 +22423,15 @@ } }, "postcss-modules-local-by-default": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz", - "integrity": "sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", "dev": true, "requires": { "icss-utils": "^4.1.1", - "postcss": "^7.0.16", + "postcss": "^7.0.32", "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.0" + "postcss-value-parser": "^4.1.0" } }, "postcss-modules-scope": { @@ -23726,9 +23874,9 @@ "dev": true }, "react-focus-lock": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.4.0.tgz", - "integrity": "sha512-mue/boxdfNhfxnQcZtEBvqwZ5XQxk0uRoAMwLGl8j6XolFV3UIlt6iGFBGqRdJsvVHhtyKC5i8fkLnBidxCTbA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.4.1.tgz", + "integrity": "sha512-c5ZP56KSpj9EAxzScTqQO7bQQNPltf/W1ZEBDqNDOV1XOIwvAyHX0O7db9ekiAtxyKgnqZjQlLppVg94fUeL9w==", "dev": true, "requires": { "@babel/runtime": "^7.0.0", @@ -23753,18 +23901,18 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.4.tgz", - "integrity": "sha512-UpTN5yUJr9b4EX2CnGNWIvER7Ab83ibv0pcvvHc4UOdrBI5jb8bj+32cCwPX6xu0mt2daFNjYhoi+X7beH0RSw==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.5.tgz", + "integrity": "sha512-otddXKhdNn7d0ptoFRHtMLa8LqDxLYwTjB4nYgM1yy5N6gU/MUf8zqyyLltCH3yAVitBzmwK4us+DD0l/MauAg==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", "dev": true } } @@ -23825,18 +23973,18 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.4.tgz", - "integrity": "sha512-UpTN5yUJr9b4EX2CnGNWIvER7Ab83ibv0pcvvHc4UOdrBI5jb8bj+32cCwPX6xu0mt2daFNjYhoi+X7beH0RSw==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.5.tgz", + "integrity": "sha512-otddXKhdNn7d0ptoFRHtMLa8LqDxLYwTjB4nYgM1yy5N6gU/MUf8zqyyLltCH3yAVitBzmwK4us+DD0l/MauAg==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", "dev": true } } @@ -24328,6 +24476,12 @@ "unist-util-visit": "^1.0.0" } }, + "unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "dev": true + }, "unist-util-visit": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", @@ -24355,54 +24509,62 @@ "dev": true }, "remark-mdx": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.6.tgz", - "integrity": "sha512-BkR7SjP+3OvrCsWGlYy1tWEsZ8aQ86x+i7XWbW79g73Ws/cCaeVsEn0ZxAzzoTRH+PJWVU7Mbe64GdejEyKr2g==", + "version": "1.6.14", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.14.tgz", + "integrity": "sha512-90nKwpyhrTPD9tJoOFYhspcG3jinNp5Gwck14jcNuAzqS8e2cyOkIt11+KIsbC9M4KJQ/n3wTtb6xMh3dFgKuA==", "dev": true, "requires": { - "@babel/core": "7.9.6", - "@babel/helper-plugin-utils": "7.8.3", - "@babel/plugin-proposal-object-rest-spread": "7.9.6", - "@babel/plugin-syntax-jsx": "7.8.3", - "@mdx-js/util": "^1.6.6", + "@babel/core": "7.10.5", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.10.4", + "@babel/plugin-syntax-jsx": "7.10.4", + "@mdx-js/util": "1.6.14", "is-alphabetical": "1.0.4", - "remark-parse": "8.0.2", + "remark-parse": "8.0.3", "unified": "9.0.0" }, "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/core": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.6.tgz", - "integrity": "sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.6", - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helpers": "^7.9.6", - "@babel/parser": "^7.9.6", - "@babel/template": "^7.8.6", - "@babel/traverse": "^7.9.6", - "@babel/types": "^7.9.6", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.5.tgz", + "integrity": "sha512-O34LQooYVDXPl7QWCdW9p4NR+QlzOr7xShPPJz8GsuCU3/8ua/wqTr7gmnxXv+WBESiGU/G5s16i6tUvHkNb+w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.5", + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.5", + "@babel/types": "^7.10.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", "json5": "^2.1.2", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" } }, "@babel/generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", - "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", + "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", "dev": true, "requires": { - "@babel/types": "^7.10.4", + "@babel/types": "^7.10.5", "jsesc": "^2.5.1", - "lodash": "^4.17.13", "source-map": "^0.5.0" } }, @@ -24426,6 +24588,12 @@ "@babel/types": "^7.10.4" } }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true + }, "@babel/helper-split-export-declaration": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", @@ -24471,22 +24639,11 @@ } }, "@babel/parser": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", - "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==", "dev": true }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.6.tgz", - "integrity": "sha512-Ga6/fhGqA9Hj+y6whNpPv8psyaK5xzrQwSPsGPloVkvmH+PqW1ixdnfJ9uIO06OjQNYol3PMnfmJ8vfZtkzF+A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.9.5" - } - }, "@babel/template": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", @@ -24496,55 +24653,33 @@ "@babel/code-frame": "^7.10.4", "@babel/parser": "^7.10.4", "@babel/types": "^7.10.4" - }, - "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/traverse": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", - "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", + "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.4", + "@babel/generator": "^7.10.5", "@babel/helper-function-name": "^7.10.4", "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/types": "^7.10.5", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.13" - }, - "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" - } - } + "lodash": "^4.17.19" } }, "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } }, @@ -24557,6 +24692,12 @@ "minimist": "^1.2.5" } }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -24566,9 +24707,9 @@ } }, "remark-parse": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.2.tgz", - "integrity": "sha512-eMI6kMRjsAGpMXXBAywJwiwAse+KNpmt+BK55Oofy4KvBZEqUDj6mWbGLJZrujoPIPPxDXzn3T9baRlpsm2jnQ==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", "dev": true, "requires": { "ccount": "^1.0.0", @@ -24616,6 +24757,12 @@ "unist-util-visit": "^1.0.0" }, "dependencies": { + "unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "dev": true + }, "unist-util-visit": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", @@ -28164,9 +28311,9 @@ "dev": true }, "unist-util-is": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", - "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", + "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==", "dev": true }, "unist-util-position": { @@ -28182,14 +28329,6 @@ "dev": true, "requires": { "unist-util-is": "^4.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==", - "dev": true - } } }, "unist-util-remove-position": { @@ -28211,22 +28350,14 @@ } }, "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", "dev": true, "requires": { "@types/unist": "^2.0.0", "unist-util-is": "^4.0.0", "unist-util-visit-parents": "^3.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==", - "dev": true - } } }, "unist-util-visit-parents": { @@ -28237,14 +28368,6 @@ "requires": { "@types/unist": "^2.0.0", "unist-util-is": "^4.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==", - "dev": true - } } }, "universal-user-agent": { @@ -29384,12 +29507,12 @@ } }, "watchpack": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.2.tgz", - "integrity": "sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", + "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", "dev": true, "requires": { - "chokidar": "^3.4.0", + "chokidar": "^3.4.1", "graceful-fs": "^4.1.2", "neo-async": "^2.5.0", "watchpack-chokidar2": "^2.0.0" @@ -29642,9 +29765,9 @@ "dev": true }, "webpack": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.43.0.tgz", - "integrity": "sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==", + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.0.tgz", + "integrity": "sha512-wAuJxK123sqAw31SpkPiPW3iKHgFUiKvO7E7UZjtdExcsRe3fgav4mvoMM7vvpjLHVoJ6a0Mtp2fzkoA13e0Zw==", "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", @@ -29655,7 +29778,7 @@ "ajv": "^6.10.2", "ajv-keywords": "^3.4.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", + "enhanced-resolve": "^4.3.0", "eslint-scope": "^4.0.3", "json-parse-better-errors": "^1.0.2", "loader-runner": "^2.4.0", @@ -29668,7 +29791,7 @@ "schema-utils": "^1.0.0", "tapable": "^1.1.3", "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.6.1", + "watchpack": "^1.7.4", "webpack-sources": "^1.4.1" }, "dependencies": { @@ -30518,9 +30641,9 @@ } }, "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", "dev": true, "requires": { "camelcase": "^5.0.0", diff --git a/src/components/calcite-accordion-item/calcite-accordion-item.scss b/src/components/calcite-accordion-item/calcite-accordion-item.scss index 9d65ed1522d..a967a70c79e 100644 --- a/src/components/calcite-accordion-item/calcite-accordion-item.scss +++ b/src/components/calcite-accordion-item/calcite-accordion-item.scss @@ -33,9 +33,7 @@ --calcite-accordion-item-icon-rotation-rtl: -90deg; --calcite-accordion-item-active-icon-rotation-rtl: -180deg; --calcite-accordion-item-icon-spacing-start: 0; - --calcite-accordion-item-icon-spacing-end: var( - --calcite-accordion-item-spacing-unit - ); + --calcite-accordion-item-icon-spacing-end: var(--calcite-accordion-item-spacing-unit); } :host([icon-position="end"]) { --calcite-accordion-item-flex-direction: row; @@ -43,9 +41,7 @@ --calcite-accordion-item-active-icon-rotation: 0deg; --calcite-accordion-item-icon-rotation-rtl: 90deg; --calcite-accordion-item-active-icon-rotation-rtl: 0deg; - --calcite-accordion-item-icon-spacing-start: var( - --calcite-accordion-item-spacing-unit - ); + --calcite-accordion-item-icon-spacing-start: var(--calcite-accordion-item-spacing-unit); --calcite-accordion-item-icon-spacing-end: 0; } :host([icon-position="end"]:not([icon-type="plus-minus"])) { diff --git a/src/components/calcite-accordion/calcite-accordion.e2e.ts b/src/components/calcite-accordion/calcite-accordion.e2e.ts index 89800a31426..7d120865612 100644 --- a/src/components/calcite-accordion/calcite-accordion.e2e.ts +++ b/src/components/calcite-accordion/calcite-accordion.e2e.ts @@ -73,15 +73,9 @@ describe("calcite-accordion", () => { Accordion Item Content `); - const icon1 = await page.find( - "calcite-accordion-item[id='1'] >>> .accordion-item-icon" - ); - const icon2 = await page.find( - "calcite-accordion-item[id='2'] >>> .accordion-item-icon" - ); - const icon3 = await page.find( - "calcite-accordion-item[id='3'] >>> .accordion-item-icon" - ); + const icon1 = await page.find("calcite-accordion-item[id='1'] >>> .accordion-item-icon"); + const icon2 = await page.find("calcite-accordion-item[id='2'] >>> .accordion-item-icon"); + const icon3 = await page.find("calcite-accordion-item[id='3'] >>> .accordion-item-icon"); expect(icon1).not.toBe(null); expect(icon2).toBe(null); expect(icon3).not.toBe(null); @@ -102,15 +96,9 @@ describe("calcite-accordion", () => { const item1 = await element.find("calcite-accordion-item[id='1']"); const item2 = await element.find("calcite-accordion-item[id='2']"); const item3 = await element.find("calcite-accordion-item[id='3']"); - const item1Content = await element.find( - "calcite-accordion-item[id='1'] >>> .accordion-item-content" - ); - const item2Content = await element.find( - "calcite-accordion-item[id='2'] >>> .accordion-item-content" - ); - const item3Content = await element.find( - "calcite-accordion-item[id='3'] >>> .accordion-item-content" - ); + const item1Content = await element.find("calcite-accordion-item[id='1'] >>> .accordion-item-content"); + const item2Content = await element.find("calcite-accordion-item[id='2'] >>> .accordion-item-content"); + const item3Content = await element.find("calcite-accordion-item[id='3'] >>> .accordion-item-content"); expect(item1).not.toHaveAttribute("active"); expect(item2).toHaveAttribute("active"); expect(item3).not.toHaveAttribute("active"); @@ -135,15 +123,9 @@ describe("calcite-accordion", () => { const item1 = await element.find("calcite-accordion-item[id='1']"); const item2 = await element.find("calcite-accordion-item[id='2']"); const item3 = await element.find("calcite-accordion-item[id='3']"); - const item1Content = await element.find( - "calcite-accordion-item[id='1'] >>> .accordion-item-content" - ); - const item2Content = await element.find( - "calcite-accordion-item[id='2'] >>> .accordion-item-content" - ); - const item3Content = await element.find( - "calcite-accordion-item[id='3'] >>> .accordion-item-content" - ); + const item1Content = await element.find("calcite-accordion-item[id='1'] >>> .accordion-item-content"); + const item2Content = await element.find("calcite-accordion-item[id='2'] >>> .accordion-item-content"); + const item3Content = await element.find("calcite-accordion-item[id='3'] >>> .accordion-item-content"); await item1.click(); await item3.click(); expect(item1).toHaveAttribute("active"); @@ -170,15 +152,9 @@ describe("calcite-accordion", () => { const item1 = await element.find("calcite-accordion-item[id='1']"); const item2 = await element.find("calcite-accordion-item[id='2']"); const item3 = await element.find("calcite-accordion-item[id='3']"); - const item1Content = await element.find( - "calcite-accordion-item[id='1'] >>> .accordion-item-content" - ); - const item2Content = await element.find( - "calcite-accordion-item[id='2'] >>> .accordion-item-content" - ); - const item3Content = await element.find( - "calcite-accordion-item[id='3'] >>> .accordion-item-content" - ); + const item1Content = await element.find("calcite-accordion-item[id='1'] >>> .accordion-item-content"); + const item2Content = await element.find("calcite-accordion-item[id='2'] >>> .accordion-item-content"); + const item3Content = await element.find("calcite-accordion-item[id='3'] >>> .accordion-item-content"); await item1.click(); await item3.click(); expect(item1).not.toHaveAttribute("active"); @@ -206,15 +182,9 @@ describe("calcite-accordion", () => { const item1 = await element.find("calcite-accordion-item[id='1']"); const item2 = await element.find("calcite-accordion-item[id='2']"); const item3 = await element.find("calcite-accordion-item[id='3']"); - const item1Content = await element.find( - "calcite-accordion-item[id='1'] >>> .accordion-item-content" - ); - const item2Content = await element.find( - "calcite-accordion-item[id='2'] >>> .accordion-item-content" - ); - const item3Content = await element.find( - "calcite-accordion-item[id='3'] >>> .accordion-item-content" - ); + const item1Content = await element.find("calcite-accordion-item[id='1'] >>> .accordion-item-content"); + const item2Content = await element.find("calcite-accordion-item[id='2'] >>> .accordion-item-content"); + const item3Content = await element.find("calcite-accordion-item[id='3'] >>> .accordion-item-content"); await item2.click(); expect(item1).not.toHaveAttribute("active"); expect(item2).toHaveAttribute("active"); diff --git a/src/components/calcite-button/calcite-button.e2e.ts b/src/components/calcite-button/calcite-button.e2e.ts index 9f7df2587cf..3b1e09c5d0d 100644 --- a/src/components/calcite-button/calcite-button.e2e.ts +++ b/src/components/calcite-button/calcite-button.e2e.ts @@ -9,15 +9,9 @@ describe("calcite-button", () => { const element = await page.find("calcite-button"); const elementAsButton = await page.find("calcite-button >>> button"); const elementAsLink = await page.find("calcite-button >>> a"); - const iconStart = await page.find( - "calcite-button >>> .calcite-button--icon.icon-start" - ); - const iconEnd = await page.find( - "calcite-button >>> .calcite-button--icon.icon-end" - ); - const loader = await page.find( - "calcite-button >>> .calcite-button--loader" - ); + const iconStart = await page.find("calcite-button >>> .calcite-button--icon.icon-start"); + const iconEnd = await page.find("calcite-button >>> .calcite-button--icon.icon-end"); + const loader = await page.find("calcite-button >>> .calcite-button--loader"); expect(element).toHaveAttribute(HYDRATED_ATTR); expect(element).toEqualAttribute("color", "blue"); @@ -37,15 +31,9 @@ describe("calcite-button", () => { const element = await page.find("calcite-button"); const elementAsButton = await page.find("calcite-button >>> button"); const elementAsLink = await page.find("calcite-button >>> a"); - const iconStart = await page.find( - "calcite-button >>> .calcite-button--icon.icon-start" - ); - const iconEnd = await page.find( - "calcite-button >>> .calcite-button--icon.icon-end" - ); - const loader = await page.find( - "calcite-button >>> .calcite-button--loader" - ); + const iconStart = await page.find("calcite-button >>> .calcite-button--icon.icon-start"); + const iconEnd = await page.find("calcite-button >>> .calcite-button--icon.icon-end"); + const loader = await page.find("calcite-button >>> .calcite-button--loader"); expect(element).toHaveAttribute(HYDRATED_ATTR); expect(element).toEqualAttribute("color", "blue"); @@ -67,15 +55,9 @@ describe("calcite-button", () => { const element = await page.find("calcite-button"); const elementAsButton = await page.find("calcite-button >>> button"); const elementAsLink = await page.find("calcite-button >>> a"); - const iconStart = await page.find( - "calcite-button >>> .calcite-button--icon.icon-start" - ); - const iconEnd = await page.find( - "calcite-button >>> .calcite-button--icon.icon-end" - ); - const loader = await page.find( - "calcite-button >>> .calcite-button--loader" - ); + const iconStart = await page.find("calcite-button >>> .calcite-button--icon.icon-start"); + const iconEnd = await page.find("calcite-button >>> .calcite-button--icon.icon-end"); + const loader = await page.find("calcite-button >>> .calcite-button--loader"); expect(element).toHaveAttribute(HYDRATED_ATTR); expect(element).toEqualAttribute("color", "red"); @@ -97,15 +79,9 @@ describe("calcite-button", () => { const element = await page.find("calcite-button"); const elementAsButton = await page.find("calcite-button >>> button"); const elementAsLink = await page.find("calcite-button >>> a"); - const iconStart = await page.find( - "calcite-button >>> .calcite-button--icon.icon-start" - ); - const iconEnd = await page.find( - "calcite-button >>> .calcite-button--icon.icon-end" - ); - const loader = await page.find( - "calcite-button >>> .calcite-button--loader" - ); + const iconStart = await page.find("calcite-button >>> .calcite-button--icon.icon-start"); + const iconEnd = await page.find("calcite-button >>> .calcite-button--icon.icon-end"); + const loader = await page.find("calcite-button >>> .calcite-button--loader"); expect(element).toHaveAttribute(HYDRATED_ATTR); expect(element).toEqualAttribute("color", "red"); @@ -127,15 +103,9 @@ describe("calcite-button", () => { const element = await page.find("calcite-button"); const elementAsButton = await page.find("calcite-button >>> button"); const elementAsLink = await page.find("calcite-button >>> a"); - const iconStart = await page.find( - "calcite-button >>> .calcite-button--icon.icon-start" - ); - const iconEnd = await page.find( - "calcite-button >>> .calcite-button--icon.icon-end" - ); - const loader = await page.find( - "calcite-button >>> .calcite-button--loader" - ); + const iconStart = await page.find("calcite-button >>> .calcite-button--icon.icon-start"); + const iconEnd = await page.find("calcite-button >>> .calcite-button--icon.icon-end"); + const loader = await page.find("calcite-button >>> .calcite-button--loader"); expect(element).toHaveAttribute(HYDRATED_ATTR); expect(elementAsLink).not.toBeNull(); expect(elementAsButton).toBeNull(); @@ -150,21 +120,13 @@ describe("calcite-button", () => { it("passes attributes to rendered child button", async () => { const page = await newE2EPage(); - await page.setContent( - `Continue` - ); + await page.setContent(`Continue`); const element = await page.find("calcite-button"); const elementAsButton = await page.find("calcite-button >>> button"); const elementAsLink = await page.find("calcite-button >>> a"); - const iconStart = await page.find( - "calcite-button >>> .calcite-button--icon.icon-start" - ); - const iconEnd = await page.find( - "calcite-button >>> .calcite-button--icon.icon-end" - ); - const loader = await page.find( - "calcite-button >>> .calcite-button--loader" - ); + const iconStart = await page.find("calcite-button >>> .calcite-button--icon.icon-start"); + const iconEnd = await page.find("calcite-button >>> .calcite-button--icon.icon-end"); + const loader = await page.find("calcite-button >>> .calcite-button--loader"); expect(element).toHaveAttribute(HYDRATED_ATTR); expect(elementAsLink).toBeNull(); expect(elementAsButton).not.toBeNull(); @@ -184,15 +146,9 @@ describe("calcite-button", () => { const element = await page.find("calcite-button"); const elementAsButton = await page.find("calcite-button >>> button"); const elementAsLink = await page.find("calcite-button >>> a"); - const iconStart = await page.find( - "calcite-button >>> .calcite-button--icon.icon-start" - ); - const iconEnd = await page.find( - "calcite-button >>> .calcite-button--icon.icon-end" - ); - const loader = await page.find( - "calcite-button >>> .calcite-button--loader" - ); + const iconStart = await page.find("calcite-button >>> .calcite-button--icon.icon-start"); + const iconEnd = await page.find("calcite-button >>> .calcite-button--icon.icon-end"); + const loader = await page.find("calcite-button >>> .calcite-button--loader"); expect(element).toHaveAttribute(HYDRATED_ATTR); expect(element).toEqualAttribute("color", "blue"); expect(element).toEqualAttribute("appearance", "solid"); @@ -207,21 +163,13 @@ describe("calcite-button", () => { it("renders with an icon-start", async () => { const page = await newE2EPage(); - await page.setContent( - `Continue` - ); + await page.setContent(`Continue`); const element = await page.find("calcite-button"); const elementAsButton = await page.find("calcite-button >>> button"); const elementAsLink = await page.find("calcite-button >>> a"); - const iconStart = await page.find( - "calcite-button >>> .calcite-button--icon.icon-start" - ); - const iconEnd = await page.find( - "calcite-button >>> .calcite-button--icon.icon-end" - ); - const loader = await page.find( - "calcite-button >>> .calcite-button--loader" - ); + const iconStart = await page.find("calcite-button >>> .calcite-button--icon.icon-start"); + const iconEnd = await page.find("calcite-button >>> .calcite-button--icon.icon-end"); + const loader = await page.find("calcite-button >>> .calcite-button--loader"); expect(element).toHaveAttribute(HYDRATED_ATTR); expect(elementAsLink).toBeNull(); expect(elementAsButton).not.toBeNull(); @@ -232,21 +180,13 @@ describe("calcite-button", () => { it("renders with an icon-end", async () => { const page = await newE2EPage(); - await page.setContent( - `Continue` - ); + await page.setContent(`Continue`); const element = await page.find("calcite-button"); const elementAsButton = await page.find("calcite-button >>> button"); const elementAsLink = await page.find("calcite-button >>> a"); - const iconStart = await page.find( - "calcite-button >>> .calcite-button--icon.icon-start" - ); - const iconEnd = await page.find( - "calcite-button >>> .calcite-button--icon.icon-end" - ); - const loader = await page.find( - "calcite-button >>> .calcite-button--loader" - ); + const iconStart = await page.find("calcite-button >>> .calcite-button--icon.icon-start"); + const iconEnd = await page.find("calcite-button >>> .calcite-button--icon.icon-end"); + const loader = await page.find("calcite-button >>> .calcite-button--loader"); expect(element).toHaveAttribute(HYDRATED_ATTR); expect(elementAsLink).toBeNull(); expect(elementAsButton).not.toBeNull(); @@ -257,21 +197,13 @@ describe("calcite-button", () => { it("renders with an icon-start and icon-end", async () => { const page = await newE2EPage(); - await page.setContent( - `Continue` - ); + await page.setContent(`Continue`); const element = await page.find("calcite-button"); const elementAsButton = await page.find("calcite-button >>> button"); const elementAsLink = await page.find("calcite-button >>> a"); - const iconStart = await page.find( - "calcite-button >>> .calcite-button--icon.icon-start" - ); - const iconEnd = await page.find( - "calcite-button >>> .calcite-button--icon.icon-end" - ); - const loader = await page.find( - "calcite-button >>> .calcite-button--loader" - ); + const iconStart = await page.find("calcite-button >>> .calcite-button--icon.icon-start"); + const iconEnd = await page.find("calcite-button >>> .calcite-button--icon.icon-end"); + const loader = await page.find("calcite-button >>> .calcite-button--loader"); expect(element).toHaveAttribute(HYDRATED_ATTR); expect(elementAsLink).toBeNull(); expect(elementAsButton).not.toBeNull(); @@ -282,21 +214,13 @@ describe("calcite-button", () => { it("renders with a loader and an icon-start when both icon-start and loader are requested", async () => { const page = await newE2EPage(); - await page.setContent( - `Continue` - ); + await page.setContent(`Continue`); const element = await page.find("calcite-button"); const elementAsButton = await page.find("calcite-button >>> button"); const elementAsLink = await page.find("calcite-button >>> a"); - const iconStart = await page.find( - "calcite-button >>> .calcite-button--icon.icon-start" - ); - const iconEnd = await page.find( - "calcite-button >>> .calcite-button--icon.icon-end" - ); - const loader = await page.find( - "calcite-button >>> .calcite-button--loader" - ); + const iconStart = await page.find("calcite-button >>> .calcite-button--icon.icon-start"); + const iconEnd = await page.find("calcite-button >>> .calcite-button--icon.icon-end"); + const loader = await page.find("calcite-button >>> .calcite-button--loader"); expect(element).toHaveAttribute(HYDRATED_ATTR); expect(elementAsLink).toBeNull(); expect(elementAsButton).not.toBeNull(); @@ -307,21 +231,13 @@ describe("calcite-button", () => { it("renders with a loader and an icon-end when both icon-end and loader are requested", async () => { const page = await newE2EPage(); - await page.setContent( - `Continue` - ); + await page.setContent(`Continue`); const element = await page.find("calcite-button"); const elementAsButton = await page.find("calcite-button >>> button"); const elementAsLink = await page.find("calcite-button >>> a"); - const iconStart = await page.find( - "calcite-button >>> .calcite-button--icon.icon-start" - ); - const iconEnd = await page.find( - "calcite-button >>> .calcite-button--icon.icon-end" - ); - const loader = await page.find( - "calcite-button >>> .calcite-button--loader" - ); + const iconStart = await page.find("calcite-button >>> .calcite-button--icon.icon-start"); + const iconEnd = await page.find("calcite-button >>> .calcite-button--icon.icon-end"); + const loader = await page.find("calcite-button >>> .calcite-button--loader"); expect(element).toHaveAttribute(HYDRATED_ATTR); expect(elementAsLink).toBeNull(); expect(elementAsButton).not.toBeNull(); @@ -332,21 +248,13 @@ describe("calcite-button", () => { it("renders with a loader and an icon-start and icon-end when all are requested", async () => { const page = await newE2EPage(); - await page.setContent( - `Continue` - ); + await page.setContent(`Continue`); const element = await page.find("calcite-button"); const elementAsButton = await page.find("calcite-button >>> button"); const elementAsLink = await page.find("calcite-button >>> a"); - const iconStart = await page.find( - "calcite-button >>> .calcite-button--icon.icon-start" - ); - const iconEnd = await page.find( - "calcite-button >>> .calcite-button--icon.icon-end" - ); - const loader = await page.find( - "calcite-button >>> .calcite-button--loader" - ); + const iconStart = await page.find("calcite-button >>> .calcite-button--icon.icon-start"); + const iconEnd = await page.find("calcite-button >>> .calcite-button--icon.icon-end"); + const loader = await page.find("calcite-button >>> .calcite-button--loader"); expect(element).toHaveAttribute(HYDRATED_ATTR); expect(elementAsLink).toBeNull(); expect(elementAsButton).not.toBeNull(); @@ -364,9 +272,7 @@ describe("calcite-button", () => { it("hastext is false when text is not present", async () => { const page = await newE2EPage(); - await page.setContent( - `` - ); + await page.setContent(``); const element = await page.find("calcite-button"); expect(element).not.toHaveAttribute("hastext"); }); diff --git a/src/components/calcite-button/calcite-button.scss b/src/components/calcite-button/calcite-button.scss index ea04e0a4b7e..45885ee0c77 100644 --- a/src/components/calcite-button/calcite-button.scss +++ b/src/components/calcite-button/calcite-button.scss @@ -75,9 +75,8 @@ text-align: center; box-sizing: border-box; // include transition from focus - transition: background-color 0.15s ease-in-out, border 0.15s ease-in-out, - box-shadow 0.15s ease-in-out, outline-offset 100ms ease-in-out, - outline-color 100ms ease-in-out; + transition: background-color 0.15s ease-in-out, border 0.15s ease-in-out, box-shadow 0.15s ease-in-out, + outline-offset 100ms ease-in-out, outline-color 100ms ease-in-out; &:hover { text-decoration: none; } @@ -258,14 +257,7 @@ } // outline and clear -@mixin btn-outline-clear( - $bg-color, - $border-color, - $border-color-hover, - $border-color-press, - $color, - $color-press -) { +@mixin btn-outline-clear($bg-color, $border-color, $border-color-hover, $border-color-press, $color, $color-press) { color: $color; background-color: $bg-color; border: 1px solid $border-color; @@ -418,14 +410,7 @@ :host([appearance="clear"][color="dark"]:not([floating])) { button, a { - @include btn-outline-clear( - transparent, - $blk-180, - $blk-190, - $blk-170, - $blk-220, - $blk-220 - ); + @include btn-outline-clear(transparent, $blk-180, $blk-190, $blk-170, $blk-220, $blk-220); } } // floating variants @@ -523,14 +508,7 @@ :host([appearance="clear"][color="dark"]) { button, a { - @include btn-outline-clear-floating( - transparent, - $blk-180, - $blk-190, - $blk-170, - $blk-220, - $blk-220 - ); + @include btn-outline-clear-floating(transparent, $blk-180, $blk-190, $blk-170, $blk-220, $blk-220); } } @@ -574,8 +552,7 @@ } // generate button scales -$btnScales: "s" 12px 16px 7px 12px, "m" 16px 16px 13px 20px, - "l" 20px 24px 15px 24px; +$btnScales: "s" 12px 16px 7px 12px, "m" 16px 16px 13px 20px, "l" 20px 24px 15px 24px; @each $btnScale in $btnScales { $name: nth($btnScale, 1); $font-size: nth($btnScale, 2); @@ -591,12 +568,7 @@ $btnScales: "s" 12px 16px 7px 12px, "m" 16px 16px 13px 20px, :host([scale="#{$name}"][hastext][appearance="transparent"]) button, :host([scale="#{$name}"][hastext][appearance="transparent"]) a { $compensated-padding-y: $padding-y + 1px; - @include btn-scale( - $font-size, - $line-height, - $compensated-padding-y, - $padding-x - ); + @include btn-scale($font-size, $line-height, $compensated-padding-y, $padding-x); } } diff --git a/src/components/calcite-checkbox/calcite-checkbox.e2e.ts b/src/components/calcite-checkbox/calcite-checkbox.e2e.ts index 9565d60737e..507e4100c12 100644 --- a/src/components/calcite-checkbox/calcite-checkbox.e2e.ts +++ b/src/components/calcite-checkbox/calcite-checkbox.e2e.ts @@ -14,13 +14,11 @@ describe("calcite-checkbox", () => { expect(calciteCheckbox).not.toHaveAttribute("indeterminate"); }); - it("correctly creates a proxy checkbox if none is provided", async () => { + it("correctly creates a hidden checkbox input", async () => { const testName = "test-name"; const testValue = "test-value"; const page = await newE2EPage(); - await page.setContent( - `` - ); + await page.setContent(``); const input = await page.find("input"); @@ -30,31 +28,6 @@ describe("calcite-checkbox", () => { expect(input).toHaveAttribute("checked"); }); - it("overrides the switch attributes with user-provided checkbox if it exists", async () => { - const inputName = "input-name"; - const inputValue = "input-value"; - const inputID = "input-id"; - - const page = await newE2EPage(); - await page.setContent(` - - - `); - - const calciteCheckbox = await page.find("calcite-checkbox"); - const input = await page.find("input"); - - expect(input).toEqualAttribute("id", inputID); - expect(input).not.toHaveAttribute("checked"); - expect(calciteCheckbox).toEqualAttribute("name", inputName); - expect(calciteCheckbox).toEqualAttribute("value", inputValue); - }); - it("toggles the checked attributes appropriately when clicked", async () => { const page = await newE2EPage(); await page.setContent(""); @@ -79,9 +52,7 @@ describe("calcite-checkbox", () => { const calciteCheckbox = await page.find("calcite-checkbox"); - const changeEvent = await calciteCheckbox.spyOnEvent( - "calciteCheckboxChange" - ); + const changeEvent = await calciteCheckbox.spyOnEvent("calciteCheckboxChange"); expect(changeEvent).toHaveReceivedEventTimes(0); @@ -110,9 +81,7 @@ describe("calcite-checkbox", () => { it("removes the indeterminate attribute when clicked", async () => { const page = await newE2EPage(); - await page.setContent( - "" - ); + await page.setContent(""); const calciteCheckbox = await page.find("calcite-checkbox"); @@ -123,30 +92,6 @@ describe("calcite-checkbox", () => { expect(calciteCheckbox).not.toHaveAttribute("indeterminate"); }); - // Not sure why this is failing; it works in real life - it("toggles the checked attributes when the inner checkbox is toggled", async () => { - const page = await newE2EPage(); - await page.setContent(` - - - `); - - const calciteCheckbox = await page.find("calcite-checkbox"); - const input = await page.find("input"); - - expect(calciteCheckbox).not.toHaveAttribute("checked"); - expect(input).not.toHaveAttribute("checked"); - - await page.$eval("input", (element) => { - element.setAttribute("checked", ""); - }); - - await page.waitForChanges(); - - expect(calciteCheckbox).toHaveAttribute("checked"); - expect(input).toHaveAttribute("checked"); - }); - it("toggles when the wrapping label is clicked", async () => { const page = await newE2EPage(); await page.setContent(` diff --git a/src/components/calcite-checkbox/calcite-checkbox.scss b/src/components/calcite-checkbox/calcite-checkbox.scss index 9f7f49838d3..1911ef61e6e 100644 --- a/src/components/calcite-checkbox/calcite-checkbox.scss +++ b/src/components/calcite-checkbox/calcite-checkbox.scss @@ -9,7 +9,9 @@ --calcite-checkbox-size: 20px; } ::slotted(input) { - display: none; + opacity: 0; + position: absolute; + z-index: -1; } :host { display: inline-flex; @@ -19,27 +21,19 @@ -webkit-tap-highlight-color: transparent; width: var(--calcite-checkbox-size); height: var(--calcite-checkbox-size); -} - -//focus -:host .check-svg { - @include focus-style-base(); -} -:host(:focus) .check-svg { - @include focus-style-outset(); -} - -:host .check-svg { - width: var(--calcite-checkbox-size); - height: var(--calcite-checkbox-size); - overflow: hidden; - display: inline-block; - background-color: var(--calcite-ui-background); - border: 1px solid var(--calcite-ui-border-1); - fill: var(--calcite-ui-background); - pointer-events: none; - transition: $transition; - box-sizing: border-box; + .check-svg { + @include focus-style-base(); + width: var(--calcite-checkbox-size); + height: var(--calcite-checkbox-size); + overflow: hidden; + display: inline-block; + background-color: var(--calcite-ui-background); + border: 1px solid var(--calcite-ui-border-1); + fill: var(--calcite-ui-background); + pointer-events: none; + transition: $transition; + box-sizing: border-box; + } } :host([disabled]) { @@ -66,8 +60,17 @@ } } +:host(:focus), +:host([focused]) { + .check-svg { + @include focus-style-outset(); + } +} + :host(:hover), -:host(:focus) { +:host([hovered]), +:host(:focus), +:host([focused]) { outline: none; .check-svg { border-color: var(--calcite-ui-blue-1); diff --git a/src/components/calcite-checkbox/calcite-checkbox.tsx b/src/components/calcite-checkbox/calcite-checkbox.tsx index b49a563f721..3b0f2c0a25e 100644 --- a/src/components/calcite-checkbox/calcite-checkbox.tsx +++ b/src/components/calcite-checkbox/calcite-checkbox.tsx @@ -7,8 +7,7 @@ import { Host, EventEmitter, Listen, - Watch, - Build + Watch } from "@stencil/core"; import { getKey } from "../../utils/key"; import { hasLabel } from "../../utils/dom"; @@ -19,10 +18,40 @@ import { hasLabel } from "../../utils/dom"; shadow: true }) export class CalciteCheckbox { - @Element() el: HTMLCalciteCheckboxElement; + //-------------------------------------------------------------------------- + // + // Element + // + //-------------------------------------------------------------------------- - /** True if the checkbox is initially checked */ + @Element() el: HTMLElement; + + //-------------------------------------------------------------------------- + // + // Properties + // + //-------------------------------------------------------------------------- + + /** The checked state of the checkbox. */ @Prop({ reflect: true, mutable: true }) checked?: boolean = false; + @Watch("checked") checkedWatcher(newChecked: boolean) { + newChecked ? this.input.setAttribute("checked", "") : this.input.removeAttribute("checked"); + this.calciteCheckboxChange.emit(); + } + + /** The hovered state of the checkbox. */ + @Prop({ reflect: true, mutable: true }) hovered: boolean = false; + + /** The focused state of the checkbox. */ + @Prop({ mutable: true, reflect: true }) focused: boolean = false; + @Watch("focused") focusedChanged(focused: boolean) { + if (focused && !this.el.hasAttribute("hidden")) { + this.input.focus(); + } else { + this.input.blur(); + } + this.calciteCheckboxFocusedChange.emit(); + } /** * True if the checkbox is initially indeterminate, @@ -35,7 +64,7 @@ export class CalciteCheckbox { @Prop({ reflect: true, mutable: true }) name?: string = ""; /** The value of the checkbox input */ - @Prop({ reflect: true, mutable: true }) value?: string = ""; + @Prop({ reflect: true, mutable: true }) value?: string; /** specify the scale of the checkbox, defaults to m */ @Prop({ reflect: true, mutable: true }) scale: "s" | "m" | "l" = "m"; @@ -46,18 +75,51 @@ export class CalciteCheckbox { /** Determines what theme to use */ @Prop({ reflect: true }) theme: "light" | "dark"; - /** Emitted when the checkbox checked status changes */ - @Event() calciteCheckboxChange: EventEmitter; + //-------------------------------------------------------------------------- + // + // Private Properties + // + //-------------------------------------------------------------------------- - private observer: MutationObserver; + private readonly checkedPath = "M12.753 3l-7.319 7.497L3.252 8.31 2 9.373l3.434 3.434L14 4.24z"; + private readonly indeterminatePath = "M4 7h8v2H4z"; + private input: HTMLInputElement; + + //-------------------------------------------------------------------------- + // + // Private Methods + // + //-------------------------------------------------------------------------- + + private getPath = (): string => + this.indeterminate ? this.indeterminatePath : this.checked ? this.checkedPath : ""; private toggle = () => { if (!this.disabled) { this.checked = !this.checked; + this.focused = true; this.indeterminate = false; } }; + //-------------------------------------------------------------------------- + // + // Events + // + //-------------------------------------------------------------------------- + + /** Emitted when the checkbox checked status changes */ + @Event() calciteCheckboxChange: EventEmitter; + + /** Emitted when the checkbox focused state changes */ + @Event() calciteCheckboxFocusedChange: EventEmitter; + + //-------------------------------------------------------------------------- + // + // Event Listeners + // + //-------------------------------------------------------------------------- + @Listen("calciteLabelFocus", { target: "window" }) handleLabelFocus(e) { if (!this.el.contains(e.detail.interactedEl) && hasLabel(e.detail.labelEl, this.el)) { this.toggle(); @@ -65,12 +127,12 @@ export class CalciteCheckbox { } } - @Listen("click") onClick({ target }: MouseEvent) { + @Listen("click") onClick({ currentTarget, target }: MouseEvent) { // prevent duplicate click events that occur // when the component is wrapped in a label and checkbox is clicked if ( - (this.el.closest("label") && target === this.inputProxy) || - (!this.el.closest("label") && target === this.el) + (this.el.closest("label") && target === this.input) || + (!this.el.closest("label") && currentTarget === this.el) ) { this.toggle(); } @@ -78,49 +140,57 @@ export class CalciteCheckbox { @Listen("keydown") keyDownHandler(e: KeyboardEvent) { const key = getKey(e.key); - if (key === " " || key === "Enter") { + if (key === " ") { e.preventDefault(); this.toggle(); } } - @Watch("checked") checkedWatcher() { - this.calciteCheckboxChange.emit(); - this.checked - ? this.inputProxy.setAttribute("checked", "") - : this.inputProxy.removeAttribute("checked"); + @Listen("mouseenter") + mouseenter() { + this.hovered = true; } - private inputProxy: HTMLInputElement; + @Listen("mouseleave") + mouseleave() { + this.hovered = false; + } + + //-------------------------------------------------------------------------- + // + // Lifecycle + // + //-------------------------------------------------------------------------- connectedCallback() { - this.setupProxyInput(); - const scale = ["s", "m", "l"]; + this.renderHiddenCheckboxInput(); + let scale = ["s", "m", "l"]; if (!scale.includes(this.scale)) this.scale = "m"; } - disconnectedCallback() { - this.observer.disconnect(); - } - - componentWillRender() { - this.syncProxyInputToThis(); + // -------------------------------------------------------------------------- + // + // Render Methods + // + // -------------------------------------------------------------------------- + + private renderHiddenCheckboxInput() { + this.input = document.createElement("input"); + this.checked && this.input.setAttribute("checked", ""); + this.input.disabled = this.disabled; + this.input.onblur = () => (this.focused = false); + this.input.onfocus = () => (this.focused = true); + this.input.name = this.name; + this.input.type = "checkbox"; + if (this.value) { + this.input.value = this.value; + } + this.el.appendChild(this.input); } - private readonly indeterminatePath = "M4 7h8v2H4z"; - - private readonly checkedPath = "M12.753 3l-7.319 7.497L3.252 8.31 2 9.373l3.434 3.434L14 4.24z"; - - private getPath = (): string => - this.indeterminate ? this.indeterminatePath : this.checked ? this.checkedPath : ""; - render() { return ( - + @@ -128,37 +198,4 @@ export class CalciteCheckbox { ); } - - private setupProxyInput() { - // check for a proxy input - this.inputProxy = this.el.querySelector("input"); - - // if the user didn't pass a proxy input create one for them - if (!this.inputProxy) { - this.inputProxy = document.createElement("input"); - this.inputProxy.type = "checkbox"; - this.syncProxyInputToThis(); - this.el.appendChild(this.inputProxy); - } - - this.syncThisToProxyInput(); - if (Build.isBrowser) { - this.observer = new MutationObserver(this.syncThisToProxyInput); - this.observer.observe(this.inputProxy, { attributes: true }); - } - } - - private syncThisToProxyInput = () => { - this.checked = this.inputProxy.hasAttribute("checked"); - this.name = this.inputProxy.name; - this.value = this.inputProxy.value; - }; - - private syncProxyInputToThis = () => { - this.checked - ? this.inputProxy.setAttribute("checked", "") - : this.inputProxy.removeAttribute("checked"); - this.inputProxy.name = this.name; - this.inputProxy.value = this.value; - }; } diff --git a/src/components/calcite-checkbox/readme.md b/src/components/calcite-checkbox/readme.md index bd902e80ee7..7739d81d9ac 100644 --- a/src/components/calcite-checkbox/readme.md +++ b/src/components/calcite-checkbox/readme.md @@ -20,8 +20,10 @@ If you don't pass in an input, calcite-checkbox will act as the source of truth: | Property | Attribute | Description | Type | Default | | --------------- | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ----------- | -| `checked` | `checked` | True if the checkbox is initially checked | `boolean` | `false` | +| `checked` | `checked` | The checked state of the checkbox. | `boolean` | `false` | | `disabled` | `disabled` | True if the checkbox is disabled | `boolean` | `false` | +| `focused` | `focused` | The focused state of the checkbox. | `boolean` | `false` | +| `hovered` | `hovered` | The hovered state of the checkbox. | `boolean` | `false` | | `indeterminate` | `indeterminate` | True if the checkbox is initially indeterminate, which is independent from its checked state https://css-tricks.com/indeterminate-checkboxes/ | `boolean` | `false` | | `name` | `name` | The name of the checkbox input | `string` | `""` | | `scale` | `scale` | specify the scale of the checkbox, defaults to m | `"l" \| "m" \| "s"` | `"m"` | diff --git a/src/components/calcite-date/calcite-date-resources.ts b/src/components/calcite-date/calcite-date-resources.ts index af8443b8c73..c821ea1b793 100644 --- a/src/components/calcite-date/calcite-date-resources.ts +++ b/src/components/calcite-date/calcite-date-resources.ts @@ -1,4 +1,4 @@ export const TEXT = { nextMonth: "next month", - prevMonth: "previous month", + prevMonth: "previous month" }; diff --git a/src/components/calcite-dropdown/calcite-dropdown.scss b/src/components/calcite-dropdown/calcite-dropdown.scss index 25ee78d4214..dde3f4f28dc 100644 --- a/src/components/calcite-dropdown/calcite-dropdown.scss +++ b/src/components/calcite-dropdown/calcite-dropdown.scss @@ -18,35 +18,29 @@ // scale :host([scale="s"]) { --calcite-dropdown-group-padding: #{$baseline/3 0}; - --calcite-dropdown-item-padding: #{$baseline/5 $baseline/1.5 $baseline/5 - $baseline * 1.5}; + --calcite-dropdown-item-padding: #{$baseline/5 $baseline/1.5 $baseline/5 $baseline * 1.5}; } :host([scale="m"]) { --calcite-dropdown-group-padding: #{$baseline/2 0}; - --calcite-dropdown-item-padding: #{$baseline/3 $baseline/1.5 $baseline/3 - $baseline * 1.5}; + --calcite-dropdown-item-padding: #{$baseline/3 $baseline/1.5 $baseline/3 $baseline * 1.5}; } :host([scale="l"]) { --calcite-dropdown-group-padding: #{$baseline/1.5 0}; - --calcite-dropdown-item-padding: #{$baseline/2 $baseline/1.5 $baseline/2 - $baseline * 1.5}; + --calcite-dropdown-item-padding: #{$baseline/2 $baseline/1.5 $baseline/2 $baseline * 1.5}; } :host([dir="rtl"][scale="s"]) { - --calcite-dropdown-item-padding: #{$baseline/5 $baseline * 1.5 $baseline/5 - $baseline/1.5}; + --calcite-dropdown-item-padding: #{$baseline/5 $baseline * 1.5 $baseline/5 $baseline/1.5}; } :host([dir="rtl"][scale="m"]) { - --calcite-dropdown-item-padding: #{$baseline/3 $baseline * 1.5 $baseline/3 - $baseline / 1.5}; + --calcite-dropdown-item-padding: #{$baseline/3 $baseline * 1.5 $baseline/3 $baseline / 1.5}; } :host([dir="rtl"][scale="l"]) { - --calcite-dropdown-item-padding: #{$baseline/2 $baseline * 1.5 $baseline/2 - $baseline / 1.5}; + --calcite-dropdown-item-padding: #{$baseline/2 $baseline * 1.5 $baseline/2 $baseline / 1.5}; } :host { diff --git a/src/components/calcite-icon/calcite-icon.e2e.ts b/src/components/calcite-icon/calcite-icon.e2e.ts index 56c6e1f0804..04462c412e9 100644 --- a/src/components/calcite-icon/calcite-icon.e2e.ts +++ b/src/components/calcite-icon/calcite-icon.e2e.ts @@ -82,11 +82,15 @@ describe("calcite-icon", () => { it(`${scale} scale`, async () => { const page = await newE2EPage(); await page.setContent(``); + const calciteIcon = await page.find(`calcite-icon`); + const calciteIconComputedStyle = await calciteIcon.getComputedStyle(); const svg = await page.find(`calcite-icon >>> svg`); const sizeInPx = scaleToPx[scale]; - expect(await svg.getAttribute("width")).toBe(`${sizeInPx}`); - expect(await svg.getAttribute("height")).toBe(`${sizeInPx}`); + expect(calciteIconComputedStyle.height).toBe(`${sizeInPx}px`); + expect(calciteIconComputedStyle.width).toBe(`${sizeInPx}px`); + expect(await svg.getAttribute("width")).toBe("100%"); + expect(await svg.getAttribute("height")).toBe("100%"); expect(await svg.getAttribute("viewBox")).toBe(`0 0 ${sizeInPx} ${sizeInPx}`); }) ); diff --git a/src/components/calcite-icon/calcite-icon.scss b/src/components/calcite-icon/calcite-icon.scss index 6594826c8d5..03f8203b01d 100644 --- a/src/components/calcite-icon/calcite-icon.scss +++ b/src/components/calcite-icon/calcite-icon.scss @@ -1,6 +1,18 @@ :host { display: inline-flex; } +:host([scale="s"]) { + height: 16px; + width: 16px; +} +:host([scale="m"]) { + height: 24px; + width: 24px; +} +:host([scale="l"]) { + height: 32px; + width: 32px; +} .mirrored { transform: scaleX(-1); diff --git a/src/components/calcite-icon/calcite-icon.tsx b/src/components/calcite-icon/calcite-icon.tsx index ae93aa9a1f9..ab9a987c42e 100644 --- a/src/components/calcite-icon/calcite-icon.tsx +++ b/src/components/calcite-icon/calcite-icon.tsx @@ -107,8 +107,8 @@ export class CalciteIcon { }} xmlns="http://www.w3.org/2000/svg" fill="currentColor" - height={size} - width={size} + height="100%" + width="100%" viewBox={`0 0 ${size} ${size}`} > {paths.map((path: string | CalciteMultiPathEntry) => diff --git a/src/components/calcite-icon/readme.md b/src/components/calcite-icon/readme.md index eff8ddaec1e..2e674c6c209 100644 --- a/src/components/calcite-icon/readme.md +++ b/src/components/calcite-icon/readme.md @@ -44,6 +44,7 @@ To use a custom color for the icon fill, you can add a class to the `calcite-ico - [calcite-popover](../calcite-popover) - [calcite-radio-group-item](../calcite-radio-group-item) - [calcite-stepper-item](../calcite-stepper-item) +- [calcite-tile](../calcite-tile) - [calcite-tree-item](../calcite-tree-item) ### Graph @@ -66,6 +67,7 @@ graph TD; calcite-popover --> calcite-icon calcite-radio-group-item --> calcite-icon calcite-stepper-item --> calcite-icon + calcite-tile --> calcite-icon calcite-tree-item --> calcite-icon style calcite-icon fill:#f9f,stroke:#333,stroke-width:4px ``` diff --git a/src/components/calcite-input-message/calcite-input-message.e2e.ts b/src/components/calcite-input-message/calcite-input-message.e2e.ts index 7c0f9515cf9..fa9e0d11b2d 100644 --- a/src/components/calcite-input-message/calcite-input-message.e2e.ts +++ b/src/components/calcite-input-message/calcite-input-message.e2e.ts @@ -62,9 +62,7 @@ describe("calcite-input-message", () => { `); - const icon = await page.find( - "calcite-input-message >>> .calcite-input-message-icon" - ); + const icon = await page.find("calcite-input-message >>> .calcite-input-message-icon"); expect(icon).toBeNull(); }); @@ -74,9 +72,7 @@ describe("calcite-input-message", () => { `); - const icon = await page.find( - "calcite-input-message >>> .calcite-input-message-icon" - ); + const icon = await page.find("calcite-input-message >>> .calcite-input-message-icon"); expect(icon).not.toBeNull(); }); }); diff --git a/src/components/calcite-input/calcite-input.e2e.ts b/src/components/calcite-input/calcite-input.e2e.ts index e80e1a00975..6b025912c0f 100644 --- a/src/components/calcite-input/calcite-input.e2e.ts +++ b/src/components/calcite-input/calcite-input.e2e.ts @@ -112,9 +112,7 @@ describe("calcite-input", () => { `); - const numberVerticalWrapper = await page.find( - "calcite-input .calcite-input-number-button-wrapper" - ); + const numberVerticalWrapper = await page.find("calcite-input .calcite-input-number-button-wrapper"); const numberHorizontalItemDown = await page.find( "calcite-input .number-button-item-horizontal[data-adjustment='down']" ); @@ -133,9 +131,7 @@ describe("calcite-input", () => { `); - const numberVerticalWrapper = await page.find( - "calcite-input .calcite-input-number-button-wrapper" - ); + const numberVerticalWrapper = await page.find("calcite-input .calcite-input-number-button-wrapper"); const numberHorizontalItemDown = await page.find( "calcite-input .number-button-item-horizontal[data-adjustment='down']" ); @@ -154,9 +150,7 @@ describe("calcite-input", () => { `); - const numberVerticalWrapper = await page.find( - "calcite-input .calcite-input-number-button-wrapper" - ); + const numberVerticalWrapper = await page.find("calcite-input .calcite-input-number-button-wrapper"); const numberHorizontalItemDown = await page.find( "calcite-input .number-button-item-horizontal[data-adjustment='down']" ); @@ -326,9 +320,7 @@ describe("calcite-input", () => { await page.setContent(` `); - const clearButton = await page.find( - "calcite-input .calcite-input-clear-button" - ); + const clearButton = await page.find("calcite-input .calcite-input-clear-button"); expect(clearButton).not.toBe(null); }); @@ -338,9 +330,7 @@ describe("calcite-input", () => { `); - const clearButton = await page.find( - "calcite-input .calcite-input-clear-button" - ); + const clearButton = await page.find("calcite-input .calcite-input-clear-button"); expect(clearButton).toBe(null); }); @@ -350,9 +340,7 @@ describe("calcite-input", () => { `); - const clearButton = await page.find( - "calcite-input .calcite-input-clear-button" - ); + const clearButton = await page.find("calcite-input .calcite-input-clear-button"); expect(clearButton).toBe(null); }); diff --git a/src/components/calcite-input/calcite-input.scss b/src/components/calcite-input/calcite-input.scss index eb9036fa0aa..1f556066f7b 100755 --- a/src/components/calcite-input/calcite-input.scss +++ b/src/components/calcite-input/calcite-input.scss @@ -406,8 +406,7 @@ calcite-input[dir="rtl"] { } } -calcite-input[number-button-type="vertical"] - .calcite-input-number-button-item[data-adjustment="down"] { +calcite-input[number-button-type="vertical"] .calcite-input-number-button-item[data-adjustment="down"] { border-top: 0; } @@ -518,8 +517,8 @@ calcite-input[type="file"] textarea { } // status -$inputStatusColors: "invalid" var(--calcite-ui-red-1), - "valid" var(--calcite-ui-green-1), "idle" var(--calcite-ui-text-2); +$inputStatusColors: "invalid" var(--calcite-ui-red-1), "valid" var(--calcite-ui-green-1), + "idle" var(--calcite-ui-text-2); @each $statusColor in $inputStatusColors { $name: nth($statusColor, 1); diff --git a/src/components/calcite-label/calcite-label.e2e.ts b/src/components/calcite-label/calcite-label.e2e.ts index 52e3c31c942..396e09587e6 100644 --- a/src/components/calcite-label/calcite-label.e2e.ts +++ b/src/components/calcite-label/calcite-label.e2e.ts @@ -105,7 +105,7 @@ describe("calcite-label", () => { `); const label = await page.find("calcite-label"); - const checkbox = await page.find("calcite-checkbox"); + const checkbox = await page.find("input"); const checkboxClass = checkbox["_elmHandle"]["_remoteObject"].description; await label.click(); const activeEl = await page.evaluateHandle(() => document.activeElement); @@ -122,7 +122,7 @@ describe("calcite-label", () => { `); - const checkbox = await page.find("calcite-checkbox"); + const checkbox = await page.find("input"); const checkboxClass = checkbox["_elmHandle"]["_remoteObject"].description; await page.keyboard.press("Tab"); const activeEl = await page.evaluateHandle(() => document.activeElement); @@ -213,8 +213,7 @@ describe("calcite-label", () => { `); const label = await page.find("calcite-label"); const radioGroupItem = await page.find("calcite-radio-group-item[checked]"); - const radioGroupItemClass = - radioGroupItem["_elmHandle"]["_remoteObject"].description; + const radioGroupItemClass = radioGroupItem["_elmHandle"]["_remoteObject"].description; await label.click(); const activeEl = await page.evaluateHandle(() => document.activeElement); const activeElClass = activeEl["_remoteObject"].description; @@ -234,8 +233,7 @@ describe("calcite-label", () => { `); const radioGroupItem = await page.find("calcite-radio-group-item[checked]"); - const radioGroupItemClass = - radioGroupItem["_elmHandle"]["_remoteObject"].description; + const radioGroupItemClass = radioGroupItem["_elmHandle"]["_remoteObject"].description; await page.keyboard.press("Tab"); const activeEl = await page.evaluateHandle(() => document.activeElement); const activeElClass = activeEl["_remoteObject"].description; diff --git a/src/components/calcite-link/calcite-link.e2e.ts b/src/components/calcite-link/calcite-link.e2e.ts index 43558a558f7..011a2725a31 100644 --- a/src/components/calcite-link/calcite-link.e2e.ts +++ b/src/components/calcite-link/calcite-link.e2e.ts @@ -9,12 +9,8 @@ describe("calcite-link", () => { const element = await page.find("calcite-link"); const elementAsSpan = await page.find("calcite-link >>> span"); const elementAsLink = await page.find("calcite-link >>> a"); - const iconStart = await page.find( - "calcite-link >>> .calcite-link--icon.icon-start" - ); - const iconEnd = await page.find( - "calcite-link >>> .calcite-link--icon.icon-end" - ); + const iconStart = await page.find("calcite-link >>> .calcite-link--icon.icon-start"); + const iconEnd = await page.find("calcite-link >>> .calcite-link--icon.icon-end"); expect(element).toHaveAttribute(HYDRATED_ATTR); expect(element).toEqualAttribute("color", "blue"); @@ -30,12 +26,8 @@ describe("calcite-link", () => { const element = await page.find("calcite-link"); const elementAsSpan = await page.find("calcite-link >>> span"); const elementAsLink = await page.find("calcite-link >>> a"); - const iconStart = await page.find( - "calcite-link >>> .calcite-link--icon.icon-start" - ); - const iconEnd = await page.find( - "calcite-link >>> .calcite-link--icon.icon-end" - ); + const iconStart = await page.find("calcite-link >>> .calcite-link--icon.icon-start"); + const iconEnd = await page.find("calcite-link >>> .calcite-link--icon.icon-end"); expect(element).toHaveAttribute(HYDRATED_ATTR); expect(element).toEqualAttribute("color", "blue"); @@ -51,12 +43,8 @@ describe("calcite-link", () => { const element = await page.find("calcite-link"); const elementAsSpan = await page.find("calcite-link >>> span"); const elementAsLink = await page.find("calcite-link >>> a"); - const iconStart = await page.find( - "calcite-link >>> .calcite-link--icon.icon-start" - ); - const iconEnd = await page.find( - "calcite-link >>> .calcite-link--icon.icon-end" - ); + const iconStart = await page.find("calcite-link >>> .calcite-link--icon.icon-start"); + const iconEnd = await page.find("calcite-link >>> .calcite-link--icon.icon-end"); expect(element).toHaveAttribute(HYDRATED_ATTR); expect(element).toEqualAttribute("color", "red"); @@ -68,18 +56,12 @@ describe("calcite-link", () => { it("renders as a link with requested props", async () => { const page = await newE2EPage(); - await page.setContent( - `Continue` - ); + await page.setContent(`Continue`); const element = await page.find("calcite-link"); const elementAsSpan = await page.find("calcite-link >>> span"); const elementAsLink = await page.find("calcite-link >>> a"); - const iconStart = await page.find( - "calcite-link >>> .calcite-link--icon.icon-start" - ); - const iconEnd = await page.find( - "calcite-link >>> .calcite-link--icon.icon-end" - ); + const iconStart = await page.find("calcite-link >>> .calcite-link--icon.icon-start"); + const iconEnd = await page.find("calcite-link >>> .calcite-link--icon.icon-end"); expect(element).toHaveAttribute(HYDRATED_ATTR); expect(element).toEqualAttribute("color", "red"); @@ -97,12 +79,8 @@ describe("calcite-link", () => { const element = await page.find("calcite-link"); const elementAsSpan = await page.find("calcite-link >>> span"); const elementAsLink = await page.find("calcite-link >>> a"); - const iconStart = await page.find( - "calcite-link >>> .calcite-link--icon.icon-start" - ); - const iconEnd = await page.find( - "calcite-link >>> .calcite-link--icon.icon-end" - ); + const iconStart = await page.find("calcite-link >>> .calcite-link--icon.icon-start"); + const iconEnd = await page.find("calcite-link >>> .calcite-link--icon.icon-end"); expect(element).toHaveAttribute(HYDRATED_ATTR); expect(elementAsLink).not.toBeNull(); @@ -117,18 +95,12 @@ describe("calcite-link", () => { it("passes attributes to rendered child span", async () => { const page = await newE2EPage(); - await page.setContent( - `Continue` - ); + await page.setContent(`Continue`); const element = await page.find("calcite-link"); const elementAsSpan = await page.find("calcite-link >>> span"); const elementAsLink = await page.find("calcite-link >>> a"); - const iconStart = await page.find( - "calcite-link >>> .calcite-link--icon.icon-start" - ); - const iconEnd = await page.find( - "calcite-link >>> .calcite-link--icon.icon-end" - ); + const iconStart = await page.find("calcite-link >>> .calcite-link--icon.icon-start"); + const iconEnd = await page.find("calcite-link >>> .calcite-link--icon.icon-end"); expect(element).toHaveAttribute(HYDRATED_ATTR); expect(elementAsLink).toBeNull(); @@ -145,12 +117,8 @@ describe("calcite-link", () => { const element = await page.find("calcite-link"); const elementAsSpan = await page.find("calcite-link >>> span"); const elementAsLink = await page.find("calcite-link >>> a"); - const iconStart = await page.find( - "calcite-link >>> .calcite-link--icon.icon-start" - ); - const iconEnd = await page.find( - "calcite-link >>> .calcite-link--icon.icon-end" - ); + const iconStart = await page.find("calcite-link >>> .calcite-link--icon.icon-start"); + const iconEnd = await page.find("calcite-link >>> .calcite-link--icon.icon-end"); expect(element).toHaveAttribute(HYDRATED_ATTR); expect(element).toEqualAttribute("color", "blue"); expect(elementAsLink).toBeNull(); @@ -161,18 +129,12 @@ describe("calcite-link", () => { it("renders with an icon-start", async () => { const page = await newE2EPage(); - await page.setContent( - `Continue` - ); + await page.setContent(`Continue`); const element = await page.find("calcite-link"); const elementAsSpan = await page.find("calcite-link >>> span"); const elementAsLink = await page.find("calcite-link >>> a"); - const iconStart = await page.find( - "calcite-link >>> .calcite-link--icon.icon-start" - ); - const iconEnd = await page.find( - "calcite-link >>> .calcite-link--icon.icon-end" - ); + const iconStart = await page.find("calcite-link >>> .calcite-link--icon.icon-start"); + const iconEnd = await page.find("calcite-link >>> .calcite-link--icon.icon-end"); expect(element).toHaveAttribute(HYDRATED_ATTR); expect(elementAsLink).toBeNull(); expect(elementAsSpan).not.toBeNull(); @@ -181,18 +143,12 @@ describe("calcite-link", () => { }); it("renders with an icon-end", async () => { const page = await newE2EPage(); - await page.setContent( - `Continue` - ); + await page.setContent(`Continue`); const element = await page.find("calcite-link"); const elementAsSpan = await page.find("calcite-link >>> span"); const elementAsLink = await page.find("calcite-link >>> a"); - const iconStart = await page.find( - "calcite-link >>> .calcite-link--icon.icon-start" - ); - const iconEnd = await page.find( - "calcite-link >>> .calcite-link--icon.icon-end" - ); + const iconStart = await page.find("calcite-link >>> .calcite-link--icon.icon-start"); + const iconEnd = await page.find("calcite-link >>> .calcite-link--icon.icon-end"); expect(element).toHaveAttribute(HYDRATED_ATTR); expect(elementAsLink).toBeNull(); expect(elementAsSpan).not.toBeNull(); @@ -202,18 +158,12 @@ describe("calcite-link", () => { it("renders with an icon-start and icon-end", async () => { const page = await newE2EPage(); - await page.setContent( - `Continue` - ); + await page.setContent(`Continue`); const element = await page.find("calcite-link"); const elementAsSpan = await page.find("calcite-link >>> span"); const elementAsLink = await page.find("calcite-link >>> a"); - const iconStart = await page.find( - "calcite-link >>> .calcite-link--icon.icon-start" - ); - const iconEnd = await page.find( - "calcite-link >>> .calcite-link--icon.icon-end" - ); + const iconStart = await page.find("calcite-link >>> .calcite-link--icon.icon-start"); + const iconEnd = await page.find("calcite-link >>> .calcite-link--icon.icon-end"); expect(element).toHaveAttribute(HYDRATED_ATTR); expect(elementAsLink).toBeNull(); expect(elementAsSpan).not.toBeNull(); diff --git a/src/components/calcite-link/calcite-link.scss b/src/components/calcite-link/calcite-link.scss index c9dcdec2b8b..c9b205cd7fd 100644 --- a/src/components/calcite-link/calcite-link.scss +++ b/src/components/calcite-link/calcite-link.scss @@ -31,7 +31,6 @@ font-family: inherit; -webkit-appearance: none; cursor: pointer; - text-align: center; transition: $transition; &:hover { text-decoration: none; @@ -87,11 +86,9 @@ color: $color; line-height: inherit; white-space: initial; - user-select: text; background-color: transparent; position: relative; - background-image: linear-gradient(currentColor, currentColor), - linear-gradient($border-color, $border-color); + background-image: linear-gradient(currentColor, currentColor), linear-gradient($border-color, $border-color); background-position: 0% 100%, 100% 100%; background-repeat: no-repeat, no-repeat; background-size: 0% 1px, 100% 1px; @@ -111,25 +108,24 @@ } } +:host([user-select]) { + span, + a { + user-select: text; + } +} + :host([color="blue"]) { span, a { - @include link-style( - var(--calcite-blue-accessible), - var(--calcite-ui-blue-1), - var(--calcite-link-blue-underline) - ); + @include link-style(var(--calcite-blue-accessible), var(--calcite-ui-blue-1), var(--calcite-link-blue-underline)); } } :host([color="red"]) { span, a { - @include link-style( - var(--calcite-red-accessible), - var(--calcite-ui-red-1), - var(--calcite-link-red-underline) - ); + @include link-style(var(--calcite-red-accessible), var(--calcite-ui-red-1), var(--calcite-link-red-underline)); } } :host([color="light"]) { diff --git a/src/components/calcite-link/calcite-link.tsx b/src/components/calcite-link/calcite-link.tsx index 206dde36d8e..8c4eae8c459 100644 --- a/src/components/calcite-link/calcite-link.tsx +++ b/src/components/calcite-link/calcite-link.tsx @@ -45,6 +45,9 @@ export class CalciteLink { /** is the link disabled */ @Prop({ reflect: true }) disabled?: boolean; + /** Allows the text to be selectable */ + @Prop({ reflect: true }) userSelect = true; + //-------------------------------------------------------------------------- // // Lifecycle @@ -77,7 +80,13 @@ export class CalciteLink { return ( - (this.childEl = el)}> + (this.childEl = el)} + > {this.iconStart ? iconStartEl : null} {this.iconEnd ? iconEndEl : null} @@ -111,7 +120,7 @@ export class CalciteLink { private getAttributes() { // spread attributes from the component to rendered child, filtering out props - const props = ["color", "dir", "icon", "iconPosition", "id", "theme"]; + const props = ["color", "dir", "icon", "icon-position", "id", "theme"]; return Array.from(this.el.attributes) .filter((a) => a && !props.includes(a.name)) .reduce((acc, { name, value }) => ({ ...acc, [name]: value }), {}); diff --git a/src/components/calcite-link/readme.md b/src/components/calcite-link/readme.md index 8a49522f795..3bcb0d76e91 100644 --- a/src/components/calcite-link/readme.md +++ b/src/components/calcite-link/readme.md @@ -27,6 +27,10 @@ Type: `Promise` ## Dependencies +### Used by + +- [calcite-tile](../calcite-tile) + ### Depends on - [calcite-icon](../calcite-icon) @@ -36,6 +40,7 @@ Type: `Promise` ```mermaid graph TD; calcite-link --> calcite-icon + calcite-tile --> calcite-link style calcite-link fill:#f9f,stroke:#333,stroke-width:4px ``` diff --git a/src/components/calcite-loader/calcite-loader.e2e.ts b/src/components/calcite-loader/calcite-loader.e2e.ts index d7bc7082937..ee8b12e870d 100644 --- a/src/components/calcite-loader/calcite-loader.e2e.ts +++ b/src/components/calcite-loader/calcite-loader.e2e.ts @@ -21,9 +21,7 @@ describe("calcite-loader", () => { it("displays label from text prop", async () => { const page = await newE2EPage(); - await page.setContent( - `` - ); + await page.setContent(``); const elm = await page.find("calcite-loader >>> .loader__text"); expect(elm).toEqualText("testing"); }); @@ -40,9 +38,7 @@ describe("calcite-loader", () => { it("sets aria attributes properly for determinate loader", async () => { const page = await newE2EPage(); - await page.setContent( - `` - ); + await page.setContent(``); const loader = await page.find("calcite-loader"); expect(loader).toHaveAttribute("aria-valuenow"); expect(loader).toEqualAttribute("aria-valuenow", 0); @@ -62,9 +58,7 @@ describe("calcite-loader", () => { it("validates scale and type properties", async () => { const page = await newE2EPage(); - await page.setContent( - `` - ); + await page.setContent(``); const loader = await page.find("calcite-loader"); expect(loader).toEqualAttribute("scale", "m"); expect(loader).toEqualAttribute("type", "indeterminate"); diff --git a/src/components/calcite-loader/calcite-loader.scss b/src/components/calcite-loader/calcite-loader.scss index 47304f56094..f797866ead8 100644 --- a/src/components/calcite-loader/calcite-loader.scss +++ b/src/components/calcite-loader/calcite-loader.scss @@ -234,24 +234,9 @@ $segment-3-duration: 1.16s; } } -@include generateSegment( - 1, - $segment-1-size, - $segment-1-growth, - $segment-1-duration -); -@include generateSegment( - 2, - $segment-2-size, - $segment-2-growth, - $segment-2-duration -); -@include generateSegment( - 3, - $segment-3-size, - $segment-3-growth, - $segment-3-duration -); +@include generateSegment(1, $segment-1-size, $segment-1-growth, $segment-1-duration); +@include generateSegment(2, $segment-2-size, $segment-2-growth, $segment-2-duration); +@include generateSegment(3, $segment-3-size, $segment-3-growth, $segment-3-duration); @keyframes loader-color-shift { 0% { diff --git a/src/components/calcite-modal/calcite-modal.e2e.ts b/src/components/calcite-modal/calcite-modal.e2e.ts index 7341fcfe6cd..9a299be9b53 100644 --- a/src/components/calcite-modal/calcite-modal.e2e.ts +++ b/src/components/calcite-modal/calcite-modal.e2e.ts @@ -142,9 +142,7 @@ describe("calcite-modal accessibility checks", () => { it("restores focus to previously focused element when closed", async () => { const page = await newE2EPage(); - await page.setContent( - `` - ); + await page.setContent(``); const modal = await page.find("calcite-modal"); let $button; await page.$eval("button", (elm: any) => { diff --git a/src/components/calcite-popover-manager/calcite-popover-manager.e2e.ts b/src/components/calcite-popover-manager/calcite-popover-manager.e2e.ts index d1ec80e8d58..68d7e6442ac 100644 --- a/src/components/calcite-popover-manager/calcite-popover-manager.e2e.ts +++ b/src/components/calcite-popover-manager/calcite-popover-manager.e2e.ts @@ -3,8 +3,7 @@ import { POPOVER_REFERENCE } from "../calcite-popover/resources"; import { defaults, hidden, renders } from "../../tests/commonTests"; describe("calcite-popover-manager", () => { - it("renders", async () => - renders(``)); + it("renders", async () => renders(``)); it("honors hidden attribute", async () => hidden("calcite-popover-manager")); @@ -12,12 +11,12 @@ describe("calcite-popover-manager", () => { defaults("calcite-popover-manager", [ { propertyName: "selector", - defaultValue: `[${POPOVER_REFERENCE}]`, + defaultValue: `[${POPOVER_REFERENCE}]` }, { propertyName: "autoClose", - defaultValue: undefined, - }, + defaultValue: undefined + } ])); it("should open popovers", async () => { diff --git a/src/components/calcite-popover-manager/calcite-popover-manager.tsx b/src/components/calcite-popover-manager/calcite-popover-manager.tsx index dbcbd309fe7..d9117a6a0c7 100644 --- a/src/components/calcite-popover-manager/calcite-popover-manager.tsx +++ b/src/components/calcite-popover-manager/calcite-popover-manager.tsx @@ -3,7 +3,7 @@ import { POPOVER_REFERENCE } from "../calcite-popover/resources"; import { getDescribedByElement } from "../../utils/dom"; @Component({ - tag: "calcite-popover-manager", + tag: "calcite-popover-manager" }) export class CalcitePopoverManager { // -------------------------------------------------------------------------- @@ -46,9 +46,7 @@ export class CalcitePopoverManager { // //-------------------------------------------------------------------------- - @Listen("click", { target: "window", capture: true }) closeOpenPopovers( - event: Event - ) { + @Listen("click", { target: "window", capture: true }) closeOpenPopovers(event: Event) { const target = event.target as HTMLElement; const { autoClose, el, selector } = this; const popoverSelector = "calcite-popover"; diff --git a/src/components/calcite-radio-button/calcite-radio-button.e2e.ts b/src/components/calcite-radio-button/calcite-radio-button.e2e.ts index 7f5ef3fd6ad..ec66a466362 100644 --- a/src/components/calcite-radio-button/calcite-radio-button.e2e.ts +++ b/src/components/calcite-radio-button/calcite-radio-button.e2e.ts @@ -12,9 +12,9 @@ describe("calcite-radio-button", () => { { propertyName: "theme", defaultValue: "light" } ])); - it("honors hidden attribute", async () => { - hidden("calcite-radio-button"); + it("honors hidden attribute", async () => hidden("calcite-radio-button")); + it("focusing skips over hidden radio-buttons", async () => { const page = await newE2EPage(); await page.setContent(` @@ -334,14 +334,6 @@ describe("calcite-radio-button", () => { expect(value).toBe("test-value"); }); - it("uses value as fallback label", async () => { - const page = await newE2EPage(); - await page.setContent(""); - - const label = await page.find("calcite-radio-button >>> calcite-label"); - expect(label).toEqualText("test-value"); - }); - it("updates 'aria-checked' based on 'checked' property", async () => { const page = await newE2EPage(); await page.setContent(""); diff --git a/src/components/calcite-radio-button/calcite-radio-button.scss b/src/components/calcite-radio-button/calcite-radio-button.scss index f30486c8ff1..f4fa65ed76d 100644 --- a/src/components/calcite-radio-button/calcite-radio-button.scss +++ b/src/components/calcite-radio-button/calcite-radio-button.scss @@ -2,9 +2,6 @@ @include calcite-theme-dark(); } :host { - display: grid; - grid-gap: 8px; - align-items: center; cursor: pointer; .radio { border-radius: 100%; @@ -12,9 +9,14 @@ cursor: pointer; transition: all 0.15s ease-in-out; } +} +:host(.hasLabel) { + display: grid; + grid-gap: 8px; + align-items: center; --calcite-label-margin-bottom: 0; } -:host(:hover) { +:host([hovered]) { .radio { box-shadow: inset 0 0 0 2px var(--calcite-ui-blue-1); } @@ -27,78 +29,84 @@ cursor: default; } } -:host(:hover[disabled]) { +:host([hovered][disabled]) { .radio { box-shadow: inset 0 0 0 1px var(--calcite-ui-border-1); } } :host([scale="s"]) { - grid-template-columns: 12px 1fr 4px; - grid-template-rows: 16px 1fr; .radio { height: 12px; min-width: 12px; max-width: 12px; } } +:host([scale="s"].hasLabel) { + grid-template-columns: 12px 1fr 4px; + grid-template-rows: 16px 1fr; +} :host([scale="s"][checked]), -:host(:hover[scale="s"][checked][disabled]) { +:host([hovered][scale="s"][checked][disabled]) { .radio { box-shadow: inset 0 0 0 4px var(--calcite-ui-blue-1); } } :host([scale="s"][focused]) { .radio { - box-shadow: inset 0 0 0 4px var(--calcite-ui-blue-1), - 0 0 0 2px var(--calcite-ui-foreground-1), + box-shadow: inset 0 0 0 4px var(--calcite-ui-blue-1), 0 0 0 2px var(--calcite-ui-foreground-1), 0 0 0 4px var(--calcite-ui-blue-1); } } :host([scale="m"]) { - grid-template-columns: 16px 1fr 4px; - grid-template-rows: 20px 1fr; .radio { height: 16px; min-width: 16px; max-width: 16px; } } +:host([scale="m"].hasLabel) { + grid-template-columns: 16px 1fr 4px; + grid-template-rows: 20px 1fr; +} :host([scale="m"][checked]), -:host(:hover[scale="m"][checked][disabled]) { +:host([hovered][scale="m"][checked][disabled]) { .radio { box-shadow: inset 0 0 0 5px var(--calcite-ui-blue-1); } } :host([scale="m"][focused]) { .radio { - box-shadow: inset 0 0 0 5px var(--calcite-ui-blue-1), - 0 0 0 2px var(--calcite-ui-foreground-1), + box-shadow: inset 0 0 0 5px var(--calcite-ui-blue-1), 0 0 0 2px var(--calcite-ui-foreground-1), 0 0 0 4px var(--calcite-ui-blue-1); } } :host([scale="l"]) { - grid-gap: 12px; - grid-template-columns: 20px 1fr 4px; - grid-template-rows: 24px 1fr; .radio { height: 20px; min-width: 20px; max-width: 20px; } } +:host([scale="l"].hasLabel) { + grid-gap: 12px; + grid-template-columns: 20px 1fr 4px; + grid-template-rows: 24px 1fr; +} :host([scale="l"][checked]), -:host(:hover[scale="l"][checked][disabled]) { +:host([hovered][scale="l"][checked][disabled]) { .radio { box-shadow: inset 0 0 0 6px var(--calcite-ui-blue-1); } } :host([scale="l"][focused]) { .radio { - box-shadow: inset 0 0 0 6px var(--calcite-ui-blue-1), - 0 0 0 2px var(--calcite-ui-foreground-1), + box-shadow: inset 0 0 0 6px var(--calcite-ui-blue-1), 0 0 0 2px var(--calcite-ui-foreground-1), 0 0 0 4px var(--calcite-ui-blue-1); } } +:host([hidden]) { + display: none; +} diff --git a/src/components/calcite-radio-button/calcite-radio-button.tsx b/src/components/calcite-radio-button/calcite-radio-button.tsx index 8bac8ef3b85..95bbd988116 100644 --- a/src/components/calcite-radio-button/calcite-radio-button.tsx +++ b/src/components/calcite-radio-button/calcite-radio-button.tsx @@ -61,6 +61,7 @@ export class CalciteRadioButton { } else { this.input.blur(); } + this.calciteRadioButtonFocusedChange.emit(); } /** The id attribute of the radio button. When omitted, a globally unique identifier is used. */ @@ -75,6 +76,9 @@ export class CalciteRadioButton { this.input.hidden = newHidden; } + /** The hovered state of the radio button. */ + @Prop({ reflect: true, mutable: true }) hovered = false; + /** The name of the radio button. name is passed as a property automatically from calcite-radio-button-group. */ @Prop({ reflect: true }) name!: string; @@ -110,7 +114,7 @@ export class CalciteRadioButton { } /** The value of the radio button. */ - @Prop() value!: string; + @Prop({ reflect: true }) value!: string; //-------------------------------------------------------------------------- // @@ -173,6 +177,9 @@ export class CalciteRadioButton { @Event() calciteRadioButtonChange: EventEmitter; + @Event() + calciteRadioButtonFocusedChange: EventEmitter; + //-------------------------------------------------------------------------- // // Event Listeners @@ -188,6 +195,16 @@ export class CalciteRadioButton { } } + @Listen("mouseenter") + mouseenter() { + this.hovered = true; + } + + @Listen("mouseleave") + mouseleave() { + this.hovered = false; + } + onInputBlur() { this.focused = false; } @@ -211,6 +228,12 @@ export class CalciteRadioButton { } } + componentDidLoad() { + if (this.name) { + this.checkFirstRadioButton(); + } + } + disconnectedCallback() { this.input.parentNode.removeChild(this.input); this.titleAttributeObserver.disconnect(); @@ -259,20 +282,25 @@ export class CalciteRadioButton { } this.input.type = "radio"; - - // This renders the input as a sibling of calcite-radio-button because as it turns out - // doing appendChild as hjorthhansen suggests doesn't really keep it out of the - // shadow DOM as far as slot behavior goes. This is required to render {this.value} as fallback slot content. - this.el.insertAdjacentElement("afterend", this.input); + this.el.insertAdjacentElement("beforeend", this.input); } render() { + const hasLabel = this.el.textContent ? true : false; return ( - +
- - {this.value} - + {hasLabel ? ( + + + + ) : ( + + )}
); } diff --git a/src/components/calcite-radio-button/readme.md b/src/components/calcite-radio-button/readme.md index d447f4ab7e9..196b1dacc99 100644 --- a/src/components/calcite-radio-button/readme.md +++ b/src/components/calcite-radio-button/readme.md @@ -11,6 +11,7 @@ | `focused` | `focused` | The focused state of the radio button. | `boolean` | `false` | | `guid` | `guid` | The id attribute of the radio button. When omitted, a globally unique identifier is used. | `string` | `this.el.id \|\|`calcite-radio-button-\${guid()}`` | | `hidden` | `hidden` | The radio button's hidden status. When a radio button is hidden it is not focusable or checkable. | `boolean` | `false` | +| `hovered` | `hovered` | The hovered state of the radio button. | `boolean` | `false` | | `name` _(required)_ | `name` | The name of the radio button. name is passed as a property automatically from calcite-radio-button-group. | `string` | `undefined` | | `required` | `required` | Requires that a value is selected for the radio button group before the parent form will submit. | `boolean` | `false` | | `scale` | `scale` | The scale (size) of the radio button. scale is passed as a property automatically from calcite-radio-button-group. | `"l" \| "m" \| "s"` | `"m"` | @@ -19,9 +20,10 @@ ## Events -| Event | Description | Type | -| -------------------------- | ----------- | ------------------ | -| `calciteRadioButtonChange` | | `CustomEvent` | +| Event | Description | Type | +| --------------------------------- | ----------- | ------------------ | +| `calciteRadioButtonChange` | | `CustomEvent` | +| `calciteRadioButtonFocusedChange` | | `CustomEvent` | ## Dependencies diff --git a/src/components/calcite-scrim/calcite-scrim.tsx b/src/components/calcite-scrim/calcite-scrim.tsx index 37028f6de59..48e4fed3b01 100644 --- a/src/components/calcite-scrim/calcite-scrim.tsx +++ b/src/components/calcite-scrim/calcite-scrim.tsx @@ -5,7 +5,7 @@ import { CSS } from "./resources"; @Component({ tag: "calcite-scrim", styleUrl: "calcite-scrim.scss", - shadow: true, + shadow: true }) /** @@ -34,9 +34,7 @@ export class CalciteScrim { // -------------------------------------------------------------------------- render() { - const loaderNode = this.loading ? ( - - ) : null; + const loaderNode = this.loading ? : null; const scrimNode =
{loaderNode}
; diff --git a/src/components/calcite-split-button/calcite-split-button.e2e.ts b/src/components/calcite-split-button/calcite-split-button.e2e.ts index 6298f0db477..02c1c9fcb66 100644 --- a/src/components/calcite-split-button/calcite-split-button.e2e.ts +++ b/src/components/calcite-split-button/calcite-split-button.e2e.ts @@ -47,12 +47,8 @@ describe("calcite-split-button", () => { primary-label="primary action"> `); const element = await page.find("calcite-split-button"); - const primaryButton = await page.find( - "calcite-split-button >>> calcite-button" - ); - const dropdownButton = await page.find( - "calcite-split-button >>> calcite-dropdown calcite-button" - ); + const primaryButton = await page.find("calcite-split-button >>> calcite-button"); + const dropdownButton = await page.find("calcite-split-button >>> calcite-dropdown calcite-button"); expect(element).toEqualAttribute("scale", "s"); expect(element).toEqualAttribute("color", "red"); expect(element).toEqualAttribute("theme", "dark"); @@ -68,9 +64,7 @@ describe("calcite-split-button", () => { await page.setContent(` `); - const primaryButton = await page.find( - "calcite-split-button >>> calcite-button" - ); + const primaryButton = await page.find("calcite-split-button >>> calcite-button"); expect(primaryButton).toEqualText("primary action"); expect(primaryButton).not.toHaveAttribute("icon-start"); @@ -82,9 +76,7 @@ describe("calcite-split-button", () => { await page.setContent(` `); - const primaryButton = await page.find( - "calcite-split-button >>> calcite-button" - ); + const primaryButton = await page.find("calcite-split-button >>> calcite-button"); expect(primaryButton).toEqualText("primary action"); expect(primaryButton).toEqualAttribute("icon-start", "save"); @@ -96,9 +88,7 @@ describe("calcite-split-button", () => { await page.setContent(` `); - const primaryButton = await page.find( - "calcite-split-button >>> calcite-button" - ); + const primaryButton = await page.find("calcite-split-button >>> calcite-button"); expect(primaryButton).toEqualText("primary action"); expect(primaryButton).not.toHaveAttribute("icon-start"); expect(primaryButton).toEqualAttribute("icon-end", "save"); @@ -108,9 +98,7 @@ describe("calcite-split-button", () => { await page.setContent(` `); - const primaryButton = await page.find( - "calcite-split-button >>> calcite-button" - ); + const primaryButton = await page.find("calcite-split-button >>> calcite-button"); expect(primaryButton).toEqualText("primary action"); expect(primaryButton).toEqualAttribute("icon-start", "save"); expect(primaryButton).toEqualAttribute("icon-end", "save"); @@ -120,34 +108,27 @@ describe("calcite-split-button", () => { const elementScaleToDropdownScale = { s: "s", m: "m", - l: "l", + l: "l" }; const elementScaleToButtonScale = { s: "s", m: "m", - l: "l", + l: "l" }; const page = await newE2EPage(); await page.setContent(` `); const element = await page.find("calcite-split-button"); - const primaryButton = await page.find( - "calcite-split-button >>> calcite-button" - ); - const dropdown = await page.find( - "calcite-split-button >>> calcite-dropdown" - ); + const primaryButton = await page.find("calcite-split-button >>> calcite-button"); + const dropdown = await page.find("calcite-split-button >>> calcite-dropdown"); for (const elementScale of Object.keys(elementScaleToDropdownScale)) { element.setProperty("scale", elementScale); await page.waitForChanges(); const dropdownScale = elementScaleToDropdownScale[elementScale]; expect(dropdown).toEqualAttribute("width", dropdownScale); expect(dropdown).toEqualAttribute("scale", dropdownScale); - expect(primaryButton).toEqualAttribute( - "scale", - elementScaleToButtonScale[elementScale] - ); + expect(primaryButton).toEqualAttribute("scale", elementScaleToButtonScale[elementScale]); } }); }); diff --git a/src/components/calcite-switch/calcite-switch.e2e.ts b/src/components/calcite-switch/calcite-switch.e2e.ts index e20f6413e6f..8ab73f3b1f0 100644 --- a/src/components/calcite-switch/calcite-switch.e2e.ts +++ b/src/components/calcite-switch/calcite-switch.e2e.ts @@ -17,9 +17,7 @@ describe("calcite-switch", () => { const testName = "test-name"; const testValue = "test-value"; const page = await newE2EPage(); - await page.setContent( - `` - ); + await page.setContent(``); const input = await page.find("input"); @@ -143,9 +141,7 @@ describe("calcite-switch", () => { it("renders requested props", async () => { const page = await newE2EPage(); - await page.setContent( - `` - ); + await page.setContent(``); const element = await page.find("calcite-switch"); expect(element).toEqualAttribute("theme", "dark"); @@ -155,9 +151,7 @@ describe("calcite-switch", () => { it("validates incorrect props", async () => { const page = await newE2EPage(); - await page.setContent( - `` - ); + await page.setContent(``); const element = await page.find("calcite-switch"); expect(element).toEqualAttribute("scale", "m"); diff --git a/src/components/calcite-switch/calcite-switch.scss b/src/components/calcite-switch/calcite-switch.scss index 5ead51d303e..1eb2cde6a32 100644 --- a/src/components/calcite-switch/calcite-switch.scss +++ b/src/components/calcite-switch/calcite-switch.scss @@ -128,8 +128,7 @@ } .handle { border-color: var(--calcite-switch-switched-hover-handle-border); - box-shadow: inset 0 0 0 1px - var(--calcite-switch-switched-hover-handle-border); + box-shadow: inset 0 0 0 1px var(--calcite-switch-switched-hover-handle-border); } } diff --git a/src/components/calcite-tile-select-group/calcite-tile-select-group.scss b/src/components/calcite-tile-select-group/calcite-tile-select-group.scss new file mode 100644 index 00000000000..3198927f2ab --- /dev/null +++ b/src/components/calcite-tile-select-group/calcite-tile-select-group.scss @@ -0,0 +1,8 @@ +:host { + display: flex; + flex-wrap: wrap; + ::slotted(calcite-tile-select) { + margin-right: 1px; + margin-bottom: 1px; + } +} diff --git a/src/components/calcite-tile-select-group/calcite-tile-select-group.stories.ts b/src/components/calcite-tile-select-group/calcite-tile-select-group.stories.ts new file mode 100644 index 00000000000..4e382c64897 --- /dev/null +++ b/src/components/calcite-tile-select-group/calcite-tile-select-group.stories.ts @@ -0,0 +1,108 @@ +import { storiesOf } from "@storybook/html"; +import { withKnobs, select } from "@storybook/addon-knobs"; +import { darkBackground } from "../../../.storybook/helpers"; + +storiesOf("components|Tile Select Group", module) + .addDecorator(withKnobs) + .add( + "Light", + () => ` + + + + + + + + + + + ` + ) + .add( + "Dark", + () => ` + + + + + + + + + + `, + { backgrounds: darkBackground } + ); diff --git a/src/components/calcite-tile-select-group/calcite-tile-select-group.tsx b/src/components/calcite-tile-select-group/calcite-tile-select-group.tsx new file mode 100644 index 00000000000..8da8797ba88 --- /dev/null +++ b/src/components/calcite-tile-select-group/calcite-tile-select-group.tsx @@ -0,0 +1,16 @@ +import { Component, Host, h } from "@stencil/core"; + +@Component({ + tag: "calcite-tile-select-group", + styleUrl: "calcite-tile-select-group.scss", + shadow: true, +}) +export class CalciteTileSelectGroup { + render() { + return ( + + + + ); + } +} diff --git a/src/components/calcite-tile-select-group/readme.md b/src/components/calcite-tile-select-group/readme.md new file mode 100644 index 00000000000..0c6f7dc07f3 --- /dev/null +++ b/src/components/calcite-tile-select-group/readme.md @@ -0,0 +1,7 @@ +# calcite-tile-select-group + + + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/src/components/calcite-tile-select/calcite-tile-select.e2e.ts b/src/components/calcite-tile-select/calcite-tile-select.e2e.ts new file mode 100644 index 00000000000..a8660a5f471 --- /dev/null +++ b/src/components/calcite-tile-select/calcite-tile-select.e2e.ts @@ -0,0 +1,124 @@ +import { newE2EPage } from "@stencil/core/testing"; +import { + accessible, + defaults, + hidden, + reflects, + renders, +} from "../../tests/commonTests"; + +describe("calcite-tile-select", () => { + it("renders", async () => renders("calcite-tile-select")); + + it("is accessible", async () => + accessible(``)); + + it("has defaults", async () => + defaults("calcite-tile-select", [ + { propertyName: "checked", defaultValue: false }, + { propertyName: "disabled", defaultValue: false }, + { propertyName: "focused", defaultValue: false }, + { propertyName: "hidden", defaultValue: false }, + { propertyName: "theme", defaultValue: "light" }, + ])); + + it("reflects", async () => + reflects("calcite-tile-select", [ + { propertyName: "checked", value: true }, + { propertyName: "description", value: "My Tile Select Description." }, + { propertyName: "disabled", value: true }, + { propertyName: "focused", value: true }, + { propertyName: "heading", value: "My Tile Select Heading" }, + { propertyName: "hidden", value: true }, + { propertyName: "icon", value: "layers" }, + { propertyName: "name", value: "my-tile-select" }, + { propertyName: "show-input", value: "left" }, + { propertyName: "show-input", value: "right" }, + { propertyName: "show-input", value: "none" }, + { propertyName: "theme", value: "light" }, + { propertyName: "theme", value: "dark" }, + { propertyName: "type", value: "radio" }, + { propertyName: "type", value: "checkbox" }, + { propertyName: "value", value: "option one" }, + ])); + + it("honors hidden attribute", async () => hidden("calcite-tile-select")); + + it("renders a calcite-tile", async () => { + const page = await newE2EPage(); + await page.setContent(""); + + const tile = await page.find("calcite-tile-select >>> calcite-tile"); + expect(tile).toBeDefined(); + }); + + it("renders a calcite-radio-button when in radio mode", async () => { + const page = await newE2EPage(); + await page.setContent( + "" + ); + + const calciteRadio = await page.find("calcite-radio-button"); + const calciteCheckbox = await page.find("calcite-checkbox"); + const radio = await page.find("input[type='radio']"); + expect(calciteRadio).toBeDefined(); + expect(calciteCheckbox).toBeNull(); + expect(radio).toEqualAttribute("name", "radio"); + expect(radio).toEqualAttribute("value", "one"); + }); + + it("renders a calcite-checkbox when in checkbox mode", async () => { + const page = await newE2EPage(); + await page.setContent( + "" + ); + + const calciteRadio = await page.find("calcite-radio-button"); + const calciteCheckbox = await page.find("calcite-checkbox"); + const checkbox = await page.find("input[type='checkbox']"); + expect(calciteRadio).toBeNull(); + expect(calciteCheckbox).toBeDefined(); + expect(checkbox).toEqualAttribute("name", "checkbox-tile-select"); + expect(checkbox).toEqualAttribute("value", "one"); + }); + + it("removing a tile-select also removes its corresponding calcite-radio-button", async () => { + const page = await newE2EPage(); + await page.setContent(` + + `); + + let firstRadioButton = await page.find("calcite-radio-button"); + expect(firstRadioButton).toEqualAttribute("name", "radio"); + expect(firstRadioButton).toEqualAttribute("value", "first"); + + await page.evaluate(() => { + const firstTileSelect = document.querySelector("calcite-tile-select"); + firstTileSelect.parentNode.removeChild(firstTileSelect); + }); + await page.waitForChanges(); + + firstRadioButton = await page.find("calcite-radio-button"); + expect(firstRadioButton).toBeNull(); + }); + + it("removing a tile-select also removes its corresponding calcite-checkbox", async () => { + const page = await newE2EPage(); + await page.setContent(` + + `); + + let firstRadioButton = await page.find("calcite-checkbox"); + expect(firstRadioButton).toEqualAttribute("name", "checky"); + expect(firstRadioButton).toEqualAttribute("value", "first"); + + await page.evaluate(() => { + const firstTileSelect = document.querySelector("calcite-tile-select"); + firstTileSelect.parentNode.removeChild(firstTileSelect); + }); + await page.waitForChanges(); + + firstRadioButton = await page.find("calcite-checkbox"); + expect(firstRadioButton).toBeNull(); + }); +}); diff --git a/src/components/calcite-tile-select/calcite-tile-select.scss b/src/components/calcite-tile-select/calcite-tile-select.scss new file mode 100644 index 00000000000..ea611a645d9 --- /dev/null +++ b/src/components/calcite-tile-select/calcite-tile-select.scss @@ -0,0 +1,103 @@ +:host-context([theme="dark"]) { + @include calcite-theme-dark(); +} +$spacing: $baseline/2; + +:host { + background-color: var(--calcite-ui-foreground-1); + box-shadow: 0 0 0 1px var(--calcite-ui-border-2); + box-sizing: border-box; + cursor: pointer; + display: inline-block; + margin-bottom: 1px; + margin-right: -3px; + max-width: 300px; + padding: $spacing; + position: relative; + transition: $transition; + vertical-align: top; +} +:host([checked]) { + box-shadow: 0 0 0 1px var(--calcite-ui-blue-1); + z-index: 1; +} +:host([checked]:focus), +:host([checked][focused]) { + z-index: 2; +} + +:host([show-input="none"]) { + box-shadow: 0 0 0 2px var(--calcite-ui-foreground-1), 0 0 0 3px var(--calcite-ui-border-2); + margin-right: 1px; + margin-bottom: 5px; + ::slotted(calcite-checkbox), + ::slotted(calcite-radio-button) { + opacity: 0; + position: absolute; + } +} +:host([show-input="none"]:hover) { + box-shadow: 0 0 0 2px var(--calcite-ui-foreground-1), 0 0 0 4px var(--calcite-ui-blue-1); + z-index: 3; +} +:host([show-input="none"][checked]) { + box-shadow: 0 0 0 1px var(--calcite-ui-foreground-1), 0 0 0 4px var(--calcite-ui-blue-1); +} +:host([show-input="none"]:focus), +:host([show-input="none"][focused]) { + box-shadow: 0 0 0 2px var(--calcite-ui-foreground-1), 0 0 0 4px var(--calcite-ui-blue-1), + 0 0 0 6px var(--calcite-ui-foreground-1), 0 0 0 9px var(--calcite-ui-blue-1); + z-index: 2; +} +:host([show-input="none"][checked]:focus), +:host([show-input="none"][checked][focused]) { + box-shadow: 0 0 0 1px var(--calcite-ui-foreground-1), 0 0 0 4px var(--calcite-ui-blue-1), + 0 0 0 6px var(--calcite-ui-foreground-1), 0 0 0 9px var(--calcite-ui-blue-1); +} + +:host([heading]:not([icon]):not([description])) { + align-items: center; +} + +:host([show-input="left"][icon][heading][description]), +:host([show-input="left"]:not([icon])[heading]:not([description])) { + display: inline-grid; + grid-gap: $spacing; + grid-template-columns: max-content 1fr; + ::slotted(calcite-checkbox), + ::slotted(calcite-radio-button) { + order: 0; + } + calcite-tile { + order: 1; + } +} +:host([show-input="left"][icon][heading]:not([description])) { + ::slotted(calcite-checkbox), + ::slotted(calcite-radio-button) { + position: absolute; + top: $spacing; + left: $spacing; + } +} +:host([show-input="right"][icon][heading]) { + ::slotted(calcite-checkbox), + ::slotted(calcite-radio-button) { + position: absolute; + top: $spacing; + right: $spacing; + } +} +:host([show-input="right"][heading]:not([icon]):not([description])) { + display: inline-grid; + grid-gap: $spacing; + grid-template-columns: max-content 1fr; + ::slotted(calcite-checkbox), + ::slotted(calcite-radio-button) { + justify-self: flex-end; + } +} + +:host([hidden]) { + display: none; +} diff --git a/src/components/calcite-tile-select/calcite-tile-select.stories.ts b/src/components/calcite-tile-select/calcite-tile-select.stories.ts new file mode 100644 index 00000000000..921aa29419a --- /dev/null +++ b/src/components/calcite-tile-select/calcite-tile-select.stories.ts @@ -0,0 +1,56 @@ +import { storiesOf } from "@storybook/html"; +import { withKnobs, select, text } from "@storybook/addon-knobs"; +import { darkBackground, iconNames, parseReadme, boolean } from "../../../.storybook/helpers"; +import readme from "./readme.md"; + +const notes = parseReadme(readme); + +storiesOf("components|Tile Select", module) + .addDecorator(withKnobs) + .add( + "Light", + () => ` + + + `, + { notes } + ) + .add( + "Dark", + () => ` + + + `, + { notes, backgrounds: darkBackground } + ); diff --git a/src/components/calcite-tile-select/calcite-tile-select.tsx b/src/components/calcite-tile-select/calcite-tile-select.tsx new file mode 100644 index 00000000000..1997228031d --- /dev/null +++ b/src/components/calcite-tile-select/calcite-tile-select.tsx @@ -0,0 +1,185 @@ +import { Component, Element, Host, h, Prop, Listen } from "@stencil/core"; + +@Component({ + tag: "calcite-tile-select", + styleUrl: "calcite-tile-select.scss", + shadow: true +}) +export class CalciteTileSelect { + //-------------------------------------------------------------------------- + // + // Element + // + //-------------------------------------------------------------------------- + + @Element() el: HTMLElement; + + //-------------------------------------------------------------------------- + // + // Properties + // + //-------------------------------------------------------------------------- + + /** The checked state of the tile select. */ + @Prop({ reflect: true, mutable: true }) checked: boolean = false; + + /** The description text that appears beneath the heading of the tile. */ + @Prop({ reflect: true }) description?: string; + + /** The disabled state of the tile select. */ + @Prop({ reflect: true }) disabled: boolean = false; + + /** The focused state of the tile select. */ + @Prop({ reflect: true, mutable: true }) focused: boolean = false; + + /** The heading text that appears between the icon and description of the tile. */ + @Prop({ reflect: true }) heading?: string; + + /** The hidden state of the tile select. */ + @Prop({ reflect: true }) hidden: boolean = false; + + /** The icon that appears at the top of the tile. */ + @Prop({ reflect: true }) icon?: string; + + /** The name of the tile select. This name will appear in form submissions as either a radio or checkbox identifier based on the `type` property. */ + @Prop({ reflect: true }) name: string = ""; + + /** The side of the tile that the radio or checkbox appears. */ + @Prop({ reflect: true }) showInput: "left" | "right" | "none" = "left"; + + /** The theme of the tile select. */ + @Prop({ reflect: true }) theme: "light" | "dark" = "light"; + + /** The selection mode of the tile select: radio (single) or checkbox (multiple). */ + @Prop({ reflect: true }) type: "radio" | "checkbox" = "radio"; + + /** The value of the tile select. This value will appear in form submissions when this tile select is checked. */ + @Prop({ reflect: true }) value?: string; + + //-------------------------------------------------------------------------- + // + // Private Properties + // + //-------------------------------------------------------------------------- + + private input: HTMLCalciteCheckboxElement | HTMLCalciteRadioButtonElement; + + //-------------------------------------------------------------------------- + // + // Event Listeners + // + //-------------------------------------------------------------------------- + + @Listen("calciteCheckboxChange") + calciteCheckboxChangeEvent(event: CustomEvent) { + const checkbox = event.target as HTMLCalciteCheckboxElement; + if (checkbox === this.input) { + this.checked = checkbox.checked; + } + } + + @Listen("calciteCheckboxFocusedChange") + calciteCheckboxFocusedChangeEvent(event: CustomEvent) { + const checkbox = event.target as HTMLCalciteCheckboxElement; + if (checkbox === this.input) { + this.focused = checkbox.focused; + } + } + + @Listen("calciteRadioButtonChange") + calciteRadioButtonChangeEvent(event: CustomEvent) { + const radioButton = event.target as HTMLCalciteRadioButtonElement; + if (radioButton === this.input) { + this.checked = radioButton.checked; + } + } + + @Listen("calciteRadioButtonFocusedChange") + calciteRadioButtonFocusedChangeEvent(event: CustomEvent) { + const radioButton = event.target as HTMLCalciteRadioButtonElement; + if (radioButton === this.input) { + this.focused = radioButton.focused; + } + } + + @Listen("click") + click(event: MouseEvent) { + if ((event.target as HTMLElement).localName === "calcite-tile-select") { + this.input.click(); + this.input.focus(); + } + } + + @Listen("mouseenter") + mouseenter() { + if (this.input.localName === "calcite-radio-button") { + (this.input as HTMLCalciteRadioButtonElement).hovered = true; + } + if (this.input.localName === "calcite-checkbox") { + (this.input as HTMLCalciteCheckboxElement).hovered = true; + } + } + + @Listen("mouseleave") + mouseleave() { + if (this.input.localName === "calcite-radio-button") { + (this.input as HTMLCalciteRadioButtonElement).hovered = false; + } + if (this.input.localName === "calcite-checkbox") { + (this.input as HTMLCalciteCheckboxElement).hovered = false; + } + } + + //-------------------------------------------------------------------------- + // + // Lifecycle + // + //-------------------------------------------------------------------------- + + connectedCallback() { + this.renderInput(); + } + + disconnectedCallback() { + this.input.parentNode.removeChild(this.input); + } + + // -------------------------------------------------------------------------- + // + // Render Methods + // + // -------------------------------------------------------------------------- + + private renderInput() { + this.input = this.el.ownerDocument.createElement( + this.type === "radio" ? "calcite-radio-button" : "calcite-checkbox" + ); + this.input.checked = this.checked; + this.input.disabled = this.disabled; + this.input.hidden = this.hidden; + this.input.id = this.el.id; + if (this.name) { + this.input.name = this.name; + } + this.input.theme = this.theme; + if (this.value) { + this.input.value = this.value; + } + this.el.insertAdjacentElement("beforeend", this.input); + } + + render() { + return ( + + + + + ); + } +} diff --git a/src/components/calcite-tile-select/readme.md b/src/components/calcite-tile-select/readme.md new file mode 100644 index 00000000000..47593a1cd5d --- /dev/null +++ b/src/components/calcite-tile-select/readme.md @@ -0,0 +1,41 @@ +# calcite-tile-select + + + +## Properties + +| Property | Attribute | Description | Type | Default | +| ------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- | ----------- | +| `checked` | `checked` | The checked state of the tile select. | `boolean` | `false` | +| `description` | `description` | The description text that appears beneath the heading of the tile. | `string` | `undefined` | +| `disabled` | `disabled` | The disabled state of the tile select. | `boolean` | `false` | +| `focused` | `focused` | The focused state of the tile select. | `boolean` | `false` | +| `heading` | `heading` | The heading text that appears between the icon and description of the tile. | `string` | `undefined` | +| `hidden` | `hidden` | The hidden state of the tile select. | `boolean` | `false` | +| `icon` | `icon` | The icon that appears at the top of the tile. | `string` | `undefined` | +| `name` | `name` | The name of the tile select. This name will appear in form submissions as either a radio or checkbox identifier based on the `type` property. | `string` | `""` | +| `showInput` | `show-input` | The side of the tile that the radio or checkbox appears. | `"left" \| "none" \| "right"` | `"left"` | +| `theme` | `theme` | The theme of the tile select. | `"dark" \| "light"` | `"light"` | +| `type` | `type` | The selection mode of the tile select: radio (single) or checkbox (multiple). | `"checkbox" \| "radio"` | `"radio"` | +| `value` | `value` | The value of the tile select. This value will appear in form submissions when this tile select is checked. | `string` | `undefined` | + +## Dependencies + +### Depends on + +- [calcite-tile](../calcite-tile) + +### Graph + +```mermaid +graph TD; + calcite-tile-select --> calcite-tile + calcite-tile --> calcite-icon + calcite-tile --> calcite-link + calcite-link --> calcite-icon + style calcite-tile-select fill:#f9f,stroke:#333,stroke-width:4px +``` + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/src/components/calcite-tile/calcite-tile.e2e.ts b/src/components/calcite-tile/calcite-tile.e2e.ts new file mode 100644 index 00000000000..1fc028b4712 --- /dev/null +++ b/src/components/calcite-tile/calcite-tile.e2e.ts @@ -0,0 +1,94 @@ +import { newE2EPage } from "@stencil/core/testing"; +import { accessible, defaults, hidden, reflects, renders } from "../../tests/commonTests"; + +describe("calcite-tile", () => { + it("renders", async () => renders("calcite-tile")); + + it("is accessible", async () => accessible(``)); + + it("has defaults", async () => + defaults("calcite-tile", [ + { propertyName: "embed", defaultValue: false }, + { propertyName: "focused", defaultValue: false }, + { propertyName: "hidden", defaultValue: false }, + { propertyName: "theme", defaultValue: "light" } + ])); + + it("reflects", async () => + reflects("calcite-tile", [ + { propertyName: "active", value: true }, + { propertyName: "embed", value: true }, + { propertyName: "focused", value: true }, + { propertyName: "href", value: "http://www.esri.com" }, + { propertyName: "icon", value: "layers" }, + { propertyName: "theme", value: "light" } + ])); + + it("honors hidden attribute", async () => hidden("calcite-tile")); + + it("renders without a link by default", async () => { + const page = await newE2EPage(); + await page.setContent(""); + const link = await page.find("calcite-tile >>> calcite-link"); + expect(link).toBeNull(); + }); + + it("renders a link when href attribute is supplied", async () => { + const page = await newE2EPage(); + await page.setContent(""); + + const link = await page.find("calcite-tile >>> calcite-link"); + const anchor = await page.find("calcite-tile >>> calcite-link >>> a"); + expect(link).toEqualAttribute("href", "http://www.esri.com"); + expect(anchor).toEqualAttribute("href", "http://www.esri.com"); + }); + + it("renders heading only when supplied", async () => { + const page = await newE2EPage(); + await page.setContent(""); + + const icon = await page.find("calcite-tile >>> .icon"); + const heading = await page.find("calcite-tile >>> .heading"); + const description = await page.find("calcite-tile >>> .description"); + expect(icon).toBeNull; + expect(heading).toEqualText("My Calcite Tile"); + expect(description).toBeNull; + }); + + it("renders icon only when supplied", async () => { + const page = await newE2EPage(); + await page.setContent(""); + + const icon = await page.find("calcite-tile >>> .icon"); + const heading = await page.find("calcite-tile >>> .heading"); + const description = await page.find("calcite-tile >>> .description"); + expect(icon).toBeDefined(); + expect(heading).toBeNull(); + expect(description).toBeNull; + }); + + it("renders description only when supplied", async () => { + const page = await newE2EPage(); + await page.setContent(""); + + const icon = await page.find("calcite-tile >>> .icon"); + const heading = await page.find("calcite-tile >>> .heading"); + const description = await page.find("calcite-tile >>> .description"); + expect(icon).toBeNull(); + expect(heading).toBeNull(); + expect(description).toEqualText("My Calcite Tile Description."); + }); + + it("renders large icon when only icon and heading are supplied", async () => { + const page = await newE2EPage(); + await page.setContent(''); + + const icon = await page.find("calcite-tile >>> calcite-icon"); + const heading = await page.find("calcite-tile >>> .heading"); + const description = await page.find("calcite-tile >>> .description"); + expect(icon).toEqualAttribute("icon", "layers"); + expect(icon).toEqualAttribute("scale", "l"); + expect(heading).toEqualText("My Large Visual Calcite Tile"); + expect(description).toBeNull(); + }); +}); diff --git a/src/components/calcite-tile/calcite-tile.scss b/src/components/calcite-tile/calcite-tile.scss new file mode 100644 index 00000000000..7711bba7383 --- /dev/null +++ b/src/components/calcite-tile/calcite-tile.scss @@ -0,0 +1,52 @@ +:host-context([theme="dark"]) { + @include calcite-theme-dark(); +} +$spacing: $baseline/2; + +:host { + background-color: var(--calcite-ui-foreground-1); + box-sizing: border-box; + color: var(--calcite-ui-text-3); + display: inline-block; + transition: $transition; + user-select: none; +} +:host(:not([embed])) { + box-shadow: 0 0 0 1px var(--calcite-ui-border-2); + max-width: 300px; + padding: $spacing; +} +:host(:not([embed])[href]:hover) { + box-shadow: 0 0 0 2px var(--calcite-ui-blue-1); + cursor: pointer; +} +:host(:not([embed])[href]:active) { + box-shadow: 0 0 0 3px var(--calcite-ui-blue-1); +} +:host([icon][heading]:not([description]):not([embed])) { + padding: unset; +} +.tile { + display: grid; + grid-template-columns: 1fr; + grid-gap: $spacing; +} +.heading { + @include font-size(0); + color: var(--calcite-ui-text-1); + font-weight: 500; +} +.large-visual { + justify-items: center; + min-height: 200px; + .icon { + align-self: self-end; + } + .heading { + align-self: center; + } +} +.description { + @include font-size(-1); + color: var(--calcite-ui-text-2); +} diff --git a/src/components/calcite-tile/calcite-tile.stories.ts b/src/components/calcite-tile/calcite-tile.stories.ts new file mode 100644 index 00000000000..0e4ca4f48e7 --- /dev/null +++ b/src/components/calcite-tile/calcite-tile.stories.ts @@ -0,0 +1,48 @@ +import { storiesOf } from "@storybook/html"; +import { withKnobs, select, text } from "@storybook/addon-knobs"; +import { darkBackground, iconNames, parseReadme, boolean } from "../../../.storybook/helpers"; +import readme from "./readme.md"; + +const notes = parseReadme(readme); + +storiesOf("components|Tile", module) + .addDecorator(withKnobs) + .add( + "Light", + () => ` + + + `, + { notes } + ) + .add( + "Dark", + () => ` + + + `, + { notes, backgrounds: darkBackground } + ); diff --git a/src/components/calcite-tile/calcite-tile.tsx b/src/components/calcite-tile/calcite-tile.tsx new file mode 100644 index 00000000000..0cc9ab3bad8 --- /dev/null +++ b/src/components/calcite-tile/calcite-tile.tsx @@ -0,0 +1,81 @@ +import { Component, Host, h, Prop } from "@stencil/core"; + +@Component({ + tag: "calcite-tile", + styleUrl: "calcite-tile.scss", + shadow: true +}) +export class CalciteTile { + //-------------------------------------------------------------------------- + // + // Properties + // + //-------------------------------------------------------------------------- + + /** The active state of the tile. */ + @Prop({ reflect: true }) active?: boolean; + + /** The description text that appears beneath the heading of the tile. */ + @Prop({ reflect: true }) description?: string; + + /** The embed mode of the tile. When true, renders without a border and padding for use by other components. */ + @Prop({ reflect: true }) embed: boolean = false; + + /** The focused state of the tile. */ + @Prop({ reflect: true }) focused: boolean = false; + + /** The heading text that appears between the icon and description of the tile. */ + @Prop({ reflect: true }) heading?: string; + + /** The hidden state of the tile. */ + @Prop({ reflect: true }) hidden: boolean = false; + + /** The (optional) url for the tile. (Only applies when embed is set to false) */ + @Prop({ reflect: true }) href?: string; + + /** The icon that appears at the top of the tile. */ + @Prop({ reflect: true }) icon?: string; + + /** The theme of the tile. */ + @Prop({ reflect: true }) theme: "light" | "dark" = "light"; + + // -------------------------------------------------------------------------- + // + // Render Methods + // + // -------------------------------------------------------------------------- + + renderTile() { + const isLargeVisual = this.heading && this.icon && !this.description; + const iconStyle = isLargeVisual + ? { + height: "64px", + width: "64px" + } + : undefined; + return ( +
+ {this.icon && ( +
+ +
+ )} + {this.heading &&
{this.heading}
} + {this.description &&
{this.description}
} +
+ ); + } + render() { + return ( + + {this.href ? ( + + {this.renderTile()} + + ) : ( + this.renderTile() + )} + + ); + } +} diff --git a/src/components/calcite-tile/readme.md b/src/components/calcite-tile/readme.md new file mode 100644 index 00000000000..54ebfe25920 --- /dev/null +++ b/src/components/calcite-tile/readme.md @@ -0,0 +1,43 @@ +# calcite-tile + + + +## Properties + +| Property | Attribute | Description | Type | Default | +| ------------- | ------------- | -------------------------------------------------------------------------------------------------------- | ------------------- | ----------- | +| `active` | `active` | The active state of the tile. | `boolean` | `undefined` | +| `description` | `description` | The description text that appears beneath the heading of the tile. | `string` | `undefined` | +| `embed` | `embed` | The embed mode of the tile. When true, renders without a border and padding for use by other components. | `boolean` | `false` | +| `focused` | `focused` | The focused state of the tile. | `boolean` | `false` | +| `heading` | `heading` | The heading text that appears between the icon and description of the tile. | `string` | `undefined` | +| `hidden` | `hidden` | The hidden state of the tile. | `boolean` | `false` | +| `href` | `href` | The (optional) url for the tile. (Only applies when embed is set to false) | `string` | `undefined` | +| `icon` | `icon` | The icon that appears at the top of the tile. | `string` | `undefined` | +| `theme` | `theme` | The theme of the tile. | `"dark" \| "light"` | `"light"` | + +## Dependencies + +### Used by + +- [calcite-tile-select](../calcite-tile-select) + +### Depends on + +- [calcite-icon](../calcite-icon) +- [calcite-link](../calcite-link) + +### Graph + +```mermaid +graph TD; + calcite-tile --> calcite-icon + calcite-tile --> calcite-link + calcite-link --> calcite-icon + calcite-tile-select --> calcite-tile + style calcite-tile fill:#f9f,stroke:#333,stroke-width:4px +``` + +--- + +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/src/components/calcite-tooltip-manager/calcite-tooltip-manager.tsx b/src/components/calcite-tooltip-manager/calcite-tooltip-manager.tsx index b0249425f09..2140548c52f 100644 --- a/src/components/calcite-tooltip-manager/calcite-tooltip-manager.tsx +++ b/src/components/calcite-tooltip-manager/calcite-tooltip-manager.tsx @@ -3,7 +3,7 @@ import { TOOLTIP_REFERENCE } from "../calcite-tooltip/resources"; import { getDescribedByElement } from "../../utils/dom"; @Component({ - tag: "calcite-tooltip-manager", + tag: "calcite-tooltip-manager" }) export class CalciteTooltipManager { // -------------------------------------------------------------------------- diff --git a/src/components/calcite-tooltip/calcite-tooltip.e2e.ts b/src/components/calcite-tooltip/calcite-tooltip.e2e.ts index 37b8002f724..8bdeb327a6e 100644 --- a/src/components/calcite-tooltip/calcite-tooltip.e2e.ts +++ b/src/components/calcite-tooltip/calcite-tooltip.e2e.ts @@ -4,9 +4,7 @@ import { defaults, hidden, renders } from "../../tests/commonTests"; describe("calcite-tooltip", () => { it("renders", async () => - renders( - `
😄
` - )); + renders(`
😄
`)); it("honors hidden attribute", async () => hidden("calcite-tooltip")); @@ -14,32 +12,30 @@ describe("calcite-tooltip", () => { defaults("calcite-tooltip", [ { propertyName: "open", - defaultValue: false, + defaultValue: false }, { propertyName: "placement", - defaultValue: "auto", + defaultValue: "auto" }, { propertyName: "offsetDistance", - defaultValue: 6, + defaultValue: 6 }, { propertyName: "offsetSkidding", - defaultValue: 0, + defaultValue: 0 }, { propertyName: "referenceElement", - defaultValue: undefined, - }, + defaultValue: undefined + } ])); it("tooltip positions when referenceElement is set", async () => { const page = await newE2EPage(); - await page.setContent( - `
referenceElement
` - ); + await page.setContent(`
referenceElement
`); const element = await page.find("calcite-tooltip"); @@ -59,9 +55,7 @@ describe("calcite-tooltip", () => { it("open tooltip should be visible", async () => { const page = await newE2EPage(); - await page.setContent( - `
referenceElement
` - ); + await page.setContent(`
referenceElement
`); const element = await page.find("calcite-tooltip"); @@ -192,9 +186,7 @@ describe("calcite-tooltip", () => { const userDefinedId = "user-defined-id"; - await page.setContent( - `` - ); + await page.setContent(``); await page.waitForChanges(); diff --git a/src/components/calcite-tooltip/calcite-tooltip.tsx b/src/components/calcite-tooltip/calcite-tooltip.tsx index 5fc5a700f3d..6ec1eae34cd 100644 --- a/src/components/calcite-tooltip/calcite-tooltip.tsx +++ b/src/components/calcite-tooltip/calcite-tooltip.tsx @@ -1,13 +1,4 @@ -import { - Component, - Element, - Host, - Method, - Prop, - State, - Watch, - h, -} from "@stencil/core"; +import { Component, Element, Host, Method, Prop, State, Watch, h } from "@stencil/core"; import { CSS, TOOLTIP_REFERENCE, ARIA_DESCRIBED_BY } from "./resources"; import { StrictModifiers, Instance as Popper } from "@popperjs/core"; import { guid } from "../../utils/guid"; @@ -15,13 +6,13 @@ import { CalcitePlacement, defaultOffsetDistance, createPopper, - updatePopper, + updatePopper } from "../../utils/popper"; @Component({ tag: "calcite-tooltip", styleUrl: "calcite-tooltip.scss", - shadow: true, + shadow: true }) export class CalciteTooltip { // -------------------------------------------------------------------------- @@ -137,7 +128,7 @@ export class CalciteTooltip { el, modifiers, placement, - popper, + popper }) : this.createPopper(); } @@ -202,16 +193,16 @@ export class CalciteTooltip { name: "arrow", enabled: true, options: { - element: arrowEl, - }, + element: arrowEl + } }; const offsetModifier: Partial = { name: "offset", enabled: true, options: { - offset: [offsetSkidding, offsetDistance], - }, + offset: [offsetSkidding, offsetDistance] + } }; return [arrowModifier, offsetModifier]; @@ -228,7 +219,7 @@ export class CalciteTooltip { modifiers, open, placement, - referenceEl, + referenceEl }); } @@ -253,15 +244,8 @@ export class CalciteTooltip { const displayed = _referenceElement && open; return ( - -
(this.arrowEl = arrowEl)} - >
+ +
(this.arrowEl = arrowEl)}>
diff --git a/src/components/calcite-tree-item/calcite-tree-item.e2e.ts b/src/components/calcite-tree-item/calcite-tree-item.e2e.ts index e64d96b9eee..a3aa013f3b3 100644 --- a/src/components/calcite-tree-item/calcite-tree-item.e2e.ts +++ b/src/components/calcite-tree-item/calcite-tree-item.e2e.ts @@ -29,9 +29,7 @@ describe("calcite-tree", () => { const icon = await page.find('#firstItem >>> [data-test-id="icon"]'); await icon.click(); - const childContainer = await page.find( - '#firstItem >>> [data-test-id="calcite-tree-children"]' - ); + const childContainer = await page.find('#firstItem >>> [data-test-id="calcite-tree-children"]'); const isVisible = await childContainer.isVisible(); expect(isVisible).toBe(true); }); diff --git a/src/demos/calcite-checkbox.html b/src/demos/calcite-checkbox.html index 93ab9471ec8..8529cccec0d 100644 --- a/src/demos/calcite-checkbox.html +++ b/src/demos/calcite-checkbox.html @@ -22,25 +22,6 @@ Home

Calcite Checkbox

- - - - - - With a proxy input element and changes on click. - -
@@ -108,25 +89,6 @@

Calcite Checkbox

-
- - - Without a proxy input element. - - -
- diff --git a/src/demos/calcite-link.html b/src/demos/calcite-link.html index dfb0822cced..e6c17a05eb8 100644 --- a/src/demos/calcite-link.html +++ b/src/demos/calcite-link.html @@ -5,7 +5,7 @@ - Calcite Button + Calcite Link + + + + + + + + + + + + + < Home +

Calcite Tile Select

+ +
+ +
+
+ + +

Left Radio

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

Left Radio Large Visual

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

Left Radio Heading Only

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

Right Radio

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

Right Radio Large Visual

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

Right Radio Heading Only

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

Basic Radio

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

Basic Large Visual Radio

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

Basic Heading Only Radio

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

Left Checkbox

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

Left Checkbox Large Visual

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

Left Checkbox Heading Only

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

Right Checkbox

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

Right Checkbox Large Visual

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

Right Checkbox Heading Only

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

Basic Checkbox

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

Basic Large Visual Checkbox

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

Basic Heading Only Checkbox

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

Left Radio

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

Left Radio Large Visual

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

Left Radio Heading Only

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

Right Radio

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

Right Radio Large Visual

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

Right Radio Heading Only

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

Basic Radio

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

Basic Large Visual Radio

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

Basic Heading Only Radio

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

Left Checkbox

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

Left Checkbox Large Visual

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

Left Checkbox Heading Only

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

Right Checkbox

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

Right Checkbox Large Visual

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

Right Checkbox Heading Only

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

Basic Checkbox

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

Basic Large Visual Checkbox

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

Basic Heading Only Checkbox

+
+ + + + + + + + + + + + + + + + +
+ +
+
+
+ Submit + +
+
+
+
+ + + \ No newline at end of file diff --git a/src/demos/calcite-tile.html b/src/demos/calcite-tile.html new file mode 100644 index 00000000000..d70b915d376 --- /dev/null +++ b/src/demos/calcite-tile.html @@ -0,0 +1,96 @@ + + + + + + + + Calcite Tile + + + + + + + + + + + + < Home +

Calcite Tile

+ +
+
+ +

Basic

+ + +

Link

+ + +

Heading Only

+ +

Heading Only Link

+ +

Large Visual

+ +

Large Visual Link

+ +
+
+
+ +

Basic

+ + +

Link

+ + +

Heading Only

+ +

Heading Only Link

+ +

Large Visual

+ +

Large Visual Link

+ +
+
+
+
+
+ + + \ No newline at end of file diff --git a/src/demos/helpers/demo-spacer.js b/src/demos/helpers/demo-spacer.js index 5c19e43fbb0..1c1405322c7 100644 --- a/src/demos/helpers/demo-spacer.js +++ b/src/demos/helpers/demo-spacer.js @@ -7,7 +7,7 @@ class DemoSpacer extends HTMLElement { :host { display: grid; grid-template-columns: 1fr; - grid-gap: 12px; + grid-gap: ${this.getAttribute("gap") || "12px"}; } diff --git a/src/index.html b/src/index.html index 7eb113428af..3313fac520d 100644 --- a/src/index.html +++ b/src/index.html @@ -2,8 +2,11 @@ - - Calcite Component Starter + + Calcite Component Demos