diff --git a/awx/ui_next/package-lock.json b/awx/ui_next/package-lock.json index 06e97c8d50..61d4f34c32 100644 --- a/awx/ui_next/package-lock.json +++ b/awx/ui_next/package-lock.json @@ -27248,6 +27248,11 @@ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" }, + "@emotion/stylis": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", + "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" + }, "@emotion/unitless": { "version": "0.7.5", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", @@ -28340,6 +28345,12 @@ "source-map": "^0.7.3" }, "dependencies": { + "html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", + "dev": true + }, "source-map": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", @@ -29255,9 +29266,9 @@ "dev": true }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "ansi-styles": { "version": "3.2.1", @@ -29268,11 +29279,11 @@ } }, "ansi-to-html": { - "version": "0.6.14", - "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.14.tgz", - "integrity": "sha512-7ZslfB1+EnFSDO5Ju+ue5Y6It19DRnZXWv8jrGHgIlPna5Mh4jz7BV5jCbQneXNFurQcKoolaaAjHtgSBfOIuA==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.7.0.tgz", + "integrity": "sha512-XYAN+0+3Bi+nmTQBq717bGToQVpzq2AoukAaDnQQvpmqIbedjsdSDuGD7+YLYOPBh7rjc7A6ko5cLLDp06QNjw==", "requires": { - "entities": "^1.1.2" + "entities": "^2.2.0" } }, "anymatch": { @@ -29864,9 +29875,9 @@ } }, "babel-plugin-styled-components": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-1.12.0.tgz", - "integrity": "sha512-FEiD7l5ZABdJPpLssKXjBUJMYqzbcNzBowfXDCdJhOpbhWiewapUaY+LZGT8R4Jg2TwOjGjG4RKeyrO5p9sBkA==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-1.13.2.tgz", + "integrity": "sha512-Vb1R3d4g+MUfPQPVDMCGjm3cDocJEUTR7Xq7QS95JWWeksN1wdFRYpD2kulDgI3Huuaf1CZd+NK4KQmqUFh5dA==", "requires": { "@babel/helper-annotate-as-pure": "^7.0.0", "@babel/helper-module-imports": "^7.0.0", @@ -31643,13 +31654,20 @@ "dev": true }, "css-to-react-native": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-2.3.2.tgz", - "integrity": "sha512-VOFaeZA053BqvvvqIA8c9n0+9vFppVBAHCp6JgFTtTMU3Mzi+XnelJ9XC9ul3BqFzZyQ5N+H0SnwsWT2Ebchxw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz", + "integrity": "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==", "requires": { "camelize": "^1.0.0", "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^3.3.0" + "postcss-value-parser": "^4.0.2" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + } } }, "css-tree": { @@ -31933,110 +31951,114 @@ } }, "d3": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/d3/-/d3-5.16.0.tgz", - "integrity": "sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-6.7.0.tgz", + "integrity": "sha512-hNHRhe+yCDLUG6Q2LwvR/WdNFPOJQ5VWqsJcwIYVeI401+d2/rrCjxSXkiAdIlpx7/73eApFB4Olsmh3YN7a6g==", "requires": { - "d3-array": "1", - "d3-axis": "1", - "d3-brush": "1", - "d3-chord": "1", - "d3-collection": "1", - "d3-color": "1", - "d3-contour": "1", - "d3-dispatch": "1", - "d3-drag": "1", - "d3-dsv": "1", - "d3-ease": "1", - "d3-fetch": "1", - "d3-force": "1", - "d3-format": "1", - "d3-geo": "1", - "d3-hierarchy": "1", - "d3-interpolate": "1", - "d3-path": "1", - "d3-polygon": "1", - "d3-quadtree": "1", - "d3-random": "1", - "d3-scale": "2", - "d3-scale-chromatic": "1", - "d3-selection": "1", - "d3-shape": "1", - "d3-time": "1", - "d3-time-format": "2", - "d3-timer": "1", - "d3-transition": "1", - "d3-voronoi": "1", - "d3-zoom": "1" + "d3-array": "2", + "d3-axis": "2", + "d3-brush": "2", + "d3-chord": "2", + "d3-color": "2", + "d3-contour": "2", + "d3-delaunay": "5", + "d3-dispatch": "2", + "d3-drag": "2", + "d3-dsv": "2", + "d3-ease": "2", + "d3-fetch": "2", + "d3-force": "2", + "d3-format": "2", + "d3-geo": "2", + "d3-hierarchy": "2", + "d3-interpolate": "2", + "d3-path": "2", + "d3-polygon": "2", + "d3-quadtree": "2", + "d3-random": "2", + "d3-scale": "3", + "d3-scale-chromatic": "2", + "d3-selection": "2", + "d3-shape": "2", + "d3-time": "2", + "d3-time-format": "3", + "d3-timer": "2", + "d3-transition": "2", + "d3-zoom": "2" } }, "d3-array": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", - "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "requires": { + "internmap": "^1.0.0" + } }, "d3-axis": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz", - "integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-2.1.0.tgz", + "integrity": "sha512-z/G2TQMyuf0X3qP+Mh+2PimoJD41VOCjViJzT0BHeL/+JQAofkiWZbWxlwFGb1N8EN+Cl/CW+MUKbVzr1689Cw==" }, "d3-brush": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.1.6.tgz", - "integrity": "sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-2.1.0.tgz", + "integrity": "sha512-cHLLAFatBATyIKqZOkk/mDHUbzne2B3ZwxkzMHvFTCZCmLaXDpZRihQSn8UNXTkGD/3lb/W2sQz0etAftmHMJQ==", "requires": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" + "d3-dispatch": "1 - 2", + "d3-drag": "2", + "d3-interpolate": "1 - 2", + "d3-selection": "2", + "d3-transition": "2" } }, "d3-chord": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz", - "integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-2.0.0.tgz", + "integrity": "sha512-D5PZb7EDsRNdGU4SsjQyKhja8Zgu+SHZfUSO5Ls8Wsn+jsAKUUGkcshLxMg9HDFxG3KqavGWaWkJ8EpU8ojuig==", "requires": { - "d3-array": "1", - "d3-path": "1" + "d3-path": "1 - 2" } }, - "d3-collection": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", - "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" - }, "d3-color": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", - "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-2.0.0.tgz", + "integrity": "sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==" }, "d3-contour": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz", - "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-2.0.0.tgz", + "integrity": "sha512-9unAtvIaNk06UwqBmvsdHX7CZ+NPDZnn8TtNH1myW93pWJkhsV25JcgnYAu0Ck5Veb1DHiCv++Ic5uvJ+h50JA==", "requires": { - "d3-array": "^1.1.1" + "d3-array": "2" + } + }, + "d3-delaunay": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-5.3.0.tgz", + "integrity": "sha512-amALSrOllWVLaHTnDLHwMIiz0d1bBu9gZXd1FiLfXf8sHcX9jrcj81TVZOqD4UX7MgBZZ07c8GxzEgBpJqc74w==", + "requires": { + "delaunator": "4" } }, "d3-dispatch": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", - "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-2.0.0.tgz", + "integrity": "sha512-S/m2VsXI7gAti2pBoLClFFTMOO1HTtT0j99AuXLoGFKO6deHDdnv6ZGTxSTTUTgO1zVcv82fCOtDjYK4EECmWA==" }, "d3-drag": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz", - "integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-2.0.0.tgz", + "integrity": "sha512-g9y9WbMnF5uqB9qKqwIIa/921RYWzlUDv9Jl1/yONQwxbOfszAWTCm8u7HOTgJgRDXiRZN56cHT9pd24dmXs8w==", "requires": { - "d3-dispatch": "1", - "d3-selection": "1" + "d3-dispatch": "1 - 2", + "d3-selection": "2" } }, "d3-dsv": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.2.0.tgz", - "integrity": "sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-2.0.0.tgz", + "integrity": "sha512-E+Pn8UJYx9mViuIUkoc93gJGGYut6mSDKy2+XaPwccwkRGlR+LO97L2VCCRjQivTwLHkSnAJG7yo00BWY6QM+w==", "requires": { "commander": "2", "iconv-lite": "0.4", @@ -32044,156 +32066,151 @@ } }, "d3-ease": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz", - "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-2.0.0.tgz", + "integrity": "sha512-68/n9JWarxXkOWMshcT5IcjbB+agblQUaIsbnXmrzejn2O82n3p2A9R2zEB9HIEFWKFwPAEDDN8gR0VdSAyyAQ==" }, "d3-fetch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.2.0.tgz", - "integrity": "sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-2.0.0.tgz", + "integrity": "sha512-TkYv/hjXgCryBeNKiclrwqZH7Nb+GaOwo3Neg24ZVWA3MKB+Rd+BY84Nh6tmNEMcjUik1CSUWjXYndmeO6F7sw==", "requires": { - "d3-dsv": "1" + "d3-dsv": "1 - 2" } }, "d3-force": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", - "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-2.1.1.tgz", + "integrity": "sha512-nAuHEzBqMvpFVMf9OX75d00OxvOXdxY+xECIXjW6Gv8BRrXu6gAWbv/9XKrvfJ5i5DCokDW7RYE50LRoK092ew==", "requires": { - "d3-collection": "1", - "d3-dispatch": "1", - "d3-quadtree": "1", - "d3-timer": "1" + "d3-dispatch": "1 - 2", + "d3-quadtree": "1 - 2", + "d3-timer": "1 - 2" } }, "d3-format": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", - "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-2.0.0.tgz", + "integrity": "sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA==" }, "d3-geo": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz", - "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-2.0.2.tgz", + "integrity": "sha512-8pM1WGMLGFuhq9S+FpPURxic+gKzjluCD/CHTuUF3mXMeiCo0i6R0tO1s4+GArRFde96SLcW/kOFRjoAosPsFA==", "requires": { - "d3-array": "1" + "d3-array": "^2.5.0" } }, "d3-hierarchy": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", - "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-2.0.0.tgz", + "integrity": "sha512-SwIdqM3HxQX2214EG9GTjgmCc/mbSx4mQBn+DuEETubhOw6/U3fmnji4uCVrmzOydMHSO1nZle5gh6HB/wdOzw==" }, "d3-interpolate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", - "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-2.0.1.tgz", + "integrity": "sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==", "requires": { - "d3-color": "1" + "d3-color": "1 - 2" } }, "d3-path": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", - "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-2.0.0.tgz", + "integrity": "sha512-ZwZQxKhBnv9yHaiWd6ZU4x5BtCQ7pXszEV9CU6kRgwIQVQGLMv1oiL4M+MK/n79sYzsj+gcgpPQSctJUsLN7fA==" }, "d3-polygon": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.6.tgz", - "integrity": "sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-2.0.0.tgz", + "integrity": "sha512-MsexrCK38cTGermELs0cO1d79DcTsQRN7IWMJKczD/2kBjzNXxLUWP33qRF6VDpiLV/4EI4r6Gs0DAWQkE8pSQ==" }, "d3-quadtree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz", - "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-2.0.0.tgz", + "integrity": "sha512-b0Ed2t1UUalJpc3qXzKi+cPGxeXRr4KU9YSlocN74aTzp6R/Ud43t79yLLqxHRWZfsvWXmbDWPpoENK1K539xw==" }, "d3-random": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.2.tgz", - "integrity": "sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==" + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-2.2.2.tgz", + "integrity": "sha512-0D9P8TRj6qDAtHhRQn6EfdOtHMfsUWanl3yb/84C4DqpZ+VsgfI5iTVRNRbELCfNvRfpMr8OrqqUTQ6ANGCijw==" }, "d3-scale": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz", - "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.3.0.tgz", + "integrity": "sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ==", "requires": { - "d3-array": "^1.2.0", - "d3-collection": "1", - "d3-format": "1", - "d3-interpolate": "1", - "d3-time": "1", - "d3-time-format": "2" + "d3-array": "^2.3.0", + "d3-format": "1 - 2", + "d3-interpolate": "1.2.0 - 2", + "d3-time": "^2.1.1", + "d3-time-format": "2 - 3" } }, "d3-scale-chromatic": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz", - "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-2.0.0.tgz", + "integrity": "sha512-LLqy7dJSL8yDy7NRmf6xSlsFZ6zYvJ4BcWFE4zBrOPnQERv9zj24ohnXKRbyi9YHnYV+HN1oEO3iFK971/gkzA==", "requires": { - "d3-color": "1", - "d3-interpolate": "1" + "d3-color": "1 - 2", + "d3-interpolate": "1 - 2" } }, "d3-selection": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", - "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-2.0.0.tgz", + "integrity": "sha512-XoGGqhLUN/W14NmaqcO/bb1nqjDAw5WtSYb2X8wiuQWvSZUsUVYsOSkOybUrNvcBjaywBdYPy03eXHMXjk9nZA==" }, "d3-shape": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", - "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-2.1.0.tgz", + "integrity": "sha512-PnjUqfM2PpskbSLTJvAzp2Wv4CZsnAgTfcVRTwW03QR3MkXF8Uo7B1y/lWkAsmbKwuecto++4NlsYcvYpXpTHA==", "requires": { - "d3-path": "1" + "d3-path": "1 - 2" } }, "d3-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", - "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.1.1.tgz", + "integrity": "sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==", + "requires": { + "d3-array": "2" + } }, "d3-time-format": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", - "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-3.0.0.tgz", + "integrity": "sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==", "requires": { - "d3-time": "1" + "d3-time": "1 - 2" } }, "d3-timer": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", - "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-2.0.0.tgz", + "integrity": "sha512-TO4VLh0/420Y/9dO3+f9abDEFYeCUr2WZRlxJvbp4HPTQcSylXNiL6yZa9FIUvV1yRiFufl1bszTCLDqv9PWNA==" }, "d3-transition": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz", - "integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-2.0.0.tgz", + "integrity": "sha512-42ltAGgJesfQE3u9LuuBHNbGrI/AJjNL2OAUdclE70UE6Vy239GCBEYD38uBPoLeNsOhFStGpPI0BAOV+HMxog==", "requires": { - "d3-color": "1", - "d3-dispatch": "1", - "d3-ease": "1", - "d3-interpolate": "1", - "d3-selection": "^1.1.0", - "d3-timer": "1" + "d3-color": "1 - 2", + "d3-dispatch": "1 - 2", + "d3-ease": "1 - 2", + "d3-interpolate": "1 - 2", + "d3-timer": "1 - 2" } }, - "d3-voronoi": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz", - "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==" - }, "d3-zoom": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.8.3.tgz", - "integrity": "sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-2.0.0.tgz", + "integrity": "sha512-fFg7aoaEm9/jf+qfstak0IYpnesZLiMX6GZvXtUSdv8RH2o4E2qeelgdU09eKS6wGuiGMfcnMI0nTIqWzRHGpw==", "requires": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" + "d3-dispatch": "1 - 2", + "d3-drag": "2", + "d3-interpolate": "1 - 2", + "d3-selection": "2", + "d3-transition": "2" } }, "dagre": { @@ -32431,6 +32448,11 @@ } } }, + "delaunator": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-4.0.1.tgz", + "integrity": "sha512-WNPWi1IRKZfCt/qIDMfERkDp93+iZEmOxN2yy4Jg+Xhv8SLk2UTqqbe1sfiipn0and9QrE914/ihdx82Y/Giag==" + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -32858,9 +32880,9 @@ } }, "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" }, "enzyme": { "version": "3.11.0", @@ -35072,11 +35094,11 @@ } }, "has-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-3.0.0.tgz", - "integrity": "sha1-Ngd+8dFfMzSEqn+neihgbxxlWzc=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-4.0.0.tgz", + "integrity": "sha512-VvDupLMvFX9yyed3h1DajPUYQZv82EL2h9I9Jy0ays9gYRJ30hbmGapTiam5cISr42ZCuC3nRgyVBM/YZbpi9A==", "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" } }, "has-bigints": { @@ -35309,9 +35331,9 @@ } }, "html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", + "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==" }, "html-escaper": { "version": "2.0.2", @@ -35762,6 +35784,11 @@ "side-channel": "^1.0.4" } }, + "internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + }, "interpret": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", @@ -36149,11 +36176,6 @@ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, - "is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==" - }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -38453,25 +38475,12 @@ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, - "memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" - }, "memory-fs": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz", "integrity": "sha1-8rslNovBIeORwlIN6Slpyu4KApA=", "dev": true }, - "merge-anything": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-2.4.4.tgz", - "integrity": "sha512-l5XlriUDJKQT12bH+rVhAHjwIuXWdAIecGwsYjv2LJo+dA1AeRTmeQS+3QBpO6lEthBMDi2IUMpLC1yyRvGlwQ==", - "requires": { - "is-what": "^3.3.1" - } - }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -42293,7 +42302,8 @@ "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true }, "postcss-values-parser": { "version": "2.0.1", @@ -43932,9 +43942,9 @@ } }, "sanitize-html": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.3.3.tgz", - "integrity": "sha512-DCFXPt7Di0c6JUnlT90eIgrjs6TsJl/8HYU3KLdmrVclFN4O0heTcVbJiMa23OKVr6aR051XYtsgd8EWwEBwUA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.4.0.tgz", + "integrity": "sha512-Y1OgkUiTPMqwZNRLPERSEi39iOebn2XJLbeiGOBhaJD/yLqtLGu6GE5w7evx177LeGgSE+4p4e107LMiydOf6A==", "requires": { "deepmerge": "^4.2.2", "escape-string-regexp": "^4.0.0", @@ -44237,6 +44247,11 @@ "safe-buffer": "^5.0.1" } }, + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -45024,22 +45039,19 @@ } }, "styled-components": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-4.4.1.tgz", - "integrity": "sha512-RNqj14kYzw++6Sr38n7197xG33ipEOktGElty4I70IKzQF1jzaD1U4xQ+Ny/i03UUhHlC5NWEO+d8olRCDji6g==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.0.tgz", + "integrity": "sha512-bPJKwZCHjJPf/hwTJl6TbkSZg/3evha+XPEizrZUGb535jLImwDUdjTNxXqjjaASt2M4qO4AVfoHJNe3XB/tpQ==", "requires": { "@babel/helper-module-imports": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@emotion/is-prop-valid": "^0.8.1", - "@emotion/unitless": "^0.7.0", - "babel-plugin-styled-components": ">= 1", - "css-to-react-native": "^2.2.2", - "memoize-one": "^5.0.0", - "merge-anything": "^2.2.4", - "prop-types": "^15.5.4", - "react-is": "^16.6.0", - "stylis": "^3.5.0", - "stylis-rule-sheet": "^0.0.10", + "@babel/traverse": "^7.4.5", + "@emotion/is-prop-valid": "^0.8.8", + "@emotion/stylis": "^0.8.4", + "@emotion/unitless": "^0.7.4", + "babel-plugin-styled-components": ">= 1.12.0", + "css-to-react-native": "^3.0.0", + "hoist-non-react-statics": "^3.0.0", + "shallowequal": "^1.1.0", "supports-color": "^5.5.0" } }, @@ -45087,16 +45099,6 @@ } } }, - "stylis": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz", - "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==" - }, - "stylis-rule-sheet": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz", - "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==" - }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -47119,6 +47121,12 @@ } } }, + "html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", + "dev": true + }, "http-proxy-middleware": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", diff --git a/awx/ui_next/package.json b/awx/ui_next/package.json index 0916e383c4..583781ef39 100644 --- a/awx/ui_next/package.json +++ b/awx/ui_next/package.json @@ -12,15 +12,15 @@ "@patternfly/react-icons": "4.7.22", "@patternfly/react-table": "^4.19.15", "ace-builds": "^1.4.12", - "ansi-to-html": "^0.6.11", + "ansi-to-html": "0.7.0", "axios": "^0.21.1", "babel-plugin-macros": "^3.0.1", "codemirror": "^5.47.0", - "d3": "^5.12.0", + "d3": "6.7.0", "dagre": "^0.8.4", "formik": "^2.1.2", - "has-ansi": "^3.0.0", - "html-entities": "^1.2.1", + "has-ansi": "4.0.0", + "html-entities": "2.3.2", "js-yaml": "^3.13.1", "prop-types": "^15.6.2", "react": "^16.13.1", @@ -30,8 +30,8 @@ "react-router-dom": "^5.1.2", "react-virtualized": "^9.21.1", "rrule": "^2.6.4", - "sanitize-html": "^2.3.2", - "styled-components": "^4.2.0" + "sanitize-html": "2.4.0", + "styled-components": "5.3.0" }, "devDependencies": { "@babel/polyfill": "^7.8.7", diff --git a/awx/ui_next/src/screens/Dashboard/shared/ChartTooltip.js b/awx/ui_next/src/screens/Dashboard/shared/ChartTooltip.js index 007c9ff1d5..d9205fe46e 100644 --- a/awx/ui_next/src/screens/Dashboard/shared/ChartTooltip.js +++ b/awx/ui_next/src/screens/Dashboard/shared/ChartTooltip.js @@ -106,20 +106,15 @@ class Tooltip { .text(t`Never`); } - handleMouseOver = (d) => { + handleMouseOver = (event, data) => { let success = 0; let fail = 0; let total = 0; - const x = - d3.event.pageX - - d3.select(this.svg).node().getBoundingClientRect().x + - 10; - const y = - d3.event.pageY - - d3.select(this.svg).node().getBoundingClientRect().y - - 10; + const [x, y] = d3.pointer(event); + const tooltipPointerX = x + 75; + const formatTooltipDate = d3.timeFormat('%m/%d'); - if (!d) { + if (!event) { return; } @@ -129,19 +124,19 @@ class Tooltip { .node() .getBoundingClientRect().width; const overflow = 100 - (toolTipWidth / chartWidth) * 100; - const flipped = overflow < (x / chartWidth) * 100; - if (d) { - success = d.RAN || 0; - fail = d.FAIL || 0; - total = d.TOTAL || 0; - this.date.text(formatTooltipDate(d.DATE || null)); + const flipped = overflow < (tooltipPointerX / chartWidth) * 100; + if (data) { + success = data.RAN || 0; + fail = data.FAIL || 0; + total = data.TOTAL || 0; + this.date.text(formatTooltipDate(data.DATE || null)); } - if (d && d.data) { - success = d.data.RAN || 0; - fail = d.data.FAIL || 0; - total = d.data.TOTAL || 0; - this.date.text(formatTooltipDate(d.data.DATE || null)); + if (data) { + success = data.RAN || 0; + fail = data.FAIL || 0; + total = data.TOTAL || 0; + this.date.text(formatTooltipDate(data.DATE || null)); } this.jobs.text(`${total} ${this.label}`); @@ -162,7 +157,7 @@ class Tooltip { } this.boundingBox.attr('width', adjustedWidth); - this.toolTipBase.attr('transform', `translate(${x}, ${y})`); + this.toolTipBase.attr('transform', `translate(${tooltipPointerX}, ${y})`); if (flipped) { this.toolTipPoint.attr('transform', 'translate(-20, -10) rotate(45)'); this.boundingBox.attr('x', -adjustedWidth - 20); diff --git a/awx/ui_next/src/screens/Dashboard/shared/LineChart.js b/awx/ui_next/src/screens/Dashboard/shared/LineChart.js index 3e0d838e02..066157d52f 100644 --- a/awx/ui_next/src/screens/Dashboard/shared/LineChart.js +++ b/awx/ui_next/src/screens/Dashboard/shared/LineChart.js @@ -2,9 +2,7 @@ import React, { useEffect, useCallback } from 'react'; import { string, number, shape, arrayOf } from 'prop-types'; import * as d3 from 'd3'; import { t } from '@lingui/macro'; - import { PageContextConsumer } from '@patternfly/react-core'; - import ChartTooltip from './ChartTooltip'; function LineChart({ id, data, height, pageContext, jobStatus }) { @@ -35,13 +33,16 @@ function LineChart({ id, data, height, pageContext, jobStatus }) { const width = getWidth(); function transition(path) { - path.transition().duration(1000).attrTween('stroke-dasharray', tweenDash); + path + .transition() + .duration(1000) + .attrTween('stroke-dasharray', tweenDash); } function tweenDash(...params) { const l = params[2][params[1]].getTotalLength(); const i = d3.interpolateString(`0,${l}`, `${l},${l}`); - return (val) => i(val); + return val => i(val); } const x = d3.scaleTime().rangeRound([0, width]); @@ -82,7 +83,7 @@ function LineChart({ id, data, height, pageContext, jobStatus }) { const b_max = Math.max(b.RAN > b.FAIL ? b.RAN : b.FAIL); return a_max > b_max ? a_max : b_max; }, 0); - x.domain(d3.extent(formattedData, (d) => d.DATE)); + x.domain(d3.extent(formattedData, d => d.DATE)); y.domain([ 0, largestY > 4 ? largestY + Math.max(largestY / 10, 1) : 5, @@ -91,15 +92,15 @@ function LineChart({ id, data, height, pageContext, jobStatus }) { const successLine = d3 .line() .curve(d3.curveMonotoneX) - .x((d) => x(d.DATE)) - .y((d) => y(d.RAN)); + .x(d => x(d.DATE)) + .y(d => y(d.RAN)); const failLine = d3 .line() - .defined((d) => typeof d.FAIL === 'number') + .defined(d => typeof d.FAIL === 'number') .curve(d3.curveMonotoneX) - .x((d) => x(d.DATE)) - .y((d) => y(d.FAIL)); + .x(d => x(d.DATE)) + .y(d => y(d.FAIL)); // Add the Y Axis svg .append('g') @@ -134,11 +135,11 @@ function LineChart({ id, data, height, pageContext, jobStatus }) { const maxTicks = Math.round( formattedData.length / (formattedData.length / 2) ); - ticks = formattedData.map((d) => d.DATE); + ticks = formattedData.map(d => d.DATE); if (formattedData.length === 31) { ticks = formattedData .map((d, i) => (i % maxTicks === 0 ? d.DATE : undefined)) - .filter((item) => item); + .filter(item => item); } svg.select('.domain').attr('stroke', '#d7d7d7'); @@ -176,15 +177,14 @@ function LineChart({ id, data, height, pageContext, jobStatus }) { .style('stroke-dasharray', '3, 3') .style('opacity', '0'); - const handleMouseOver = (d) => { - tooltip.handleMouseOver(d); + const handleMouseOver = (event, d) => { + tooltip.handleMouseOver(event, d); // show vertical line vertical.transition().style('opacity', '1'); }; - - const handleMouseMove = function mouseMove(...params) { - const intersectX = params[2][params[1]].cx.baseVal.value; - vertical.attr('d', () => `M${intersectX},${height} ${intersectX},${0}`); + const handleMouseMove = function mouseMove(event) { + const [pointerX] = d3.pointer(event); + vertical.attr('d', () => `M${pointerX},${height} ${pointerX},${0}`); }; const handleMouseOut = () => { @@ -218,10 +218,10 @@ function LineChart({ id, data, height, pageContext, jobStatus }) { .attr('r', 3) .style('stroke', () => colors(1)) .style('fill', () => colors(1)) - .attr('cx', (d) => x(d.DATE)) - .attr('cy', (d) => y(d.RAN)) - .attr('id', (d) => `success-dot-${dateFormat(d.DATE)}`) - .on('mouseover', handleMouseOver) + .attr('cx', d => x(d.DATE)) + .attr('cy', d => y(d.RAN)) + .attr('id', d => `success-dot-${dateFormat(d.DATE)}`) + .on('mouseover', (event, d) => handleMouseOver(event, d)) .on('mousemove', handleMouseMove) .on('mouseout', handleMouseOut); } @@ -248,9 +248,9 @@ function LineChart({ id, data, height, pageContext, jobStatus }) { .attr('r', 3) .style('stroke', () => colors(0)) .style('fill', () => colors(0)) - .attr('cx', (d) => x(d.DATE)) - .attr('cy', (d) => y(d.FAIL)) - .attr('id', (d) => `fail-dot-${dateFormat(d.DATE)}`) + .attr('cx', d => x(d.DATE)) + .attr('cy', d => y(d.FAIL)) + .attr('id', d => `fail-dot-${dateFormat(d.DATE)}`) .on('mouseover', handleMouseOver) .on('mousemove', handleMouseMove) .on('mouseout', handleMouseOut); @@ -282,11 +282,11 @@ LineChart.propTypes = { height: number.isRequired, }; -const withPageContext = (Component) => +const withPageContext = Component => function contextComponent(props) { return ( - {(pageContext) => } + {pageContext => } ); }; diff --git a/awx/ui_next/src/screens/Job/JobOutput/HostEventModal.js b/awx/ui_next/src/screens/Job/JobOutput/HostEventModal.js index 6809848014..b81e3418a2 100644 --- a/awx/ui_next/src/screens/Job/JobOutput/HostEventModal.js +++ b/awx/ui_next/src/screens/Job/JobOutput/HostEventModal.js @@ -4,13 +4,11 @@ import PropTypes from 'prop-types'; import { t } from '@lingui/macro'; import styled from 'styled-components'; -import { AllHtmlEntities } from 'html-entities'; -import StatusIcon from 'components/StatusIcon'; -import { DetailList, Detail } from 'components/DetailList'; -import ContentEmpty from 'components/ContentEmpty'; -import CodeEditor from 'components/CodeEditor'; - -const entities = new AllHtmlEntities(); +import { encode } from 'html-entities'; +import StatusIcon from '../../../components/StatusIcon'; +import { DetailList, Detail } from '../../../components/DetailList'; +import ContentEmpty from '../../../components/ContentEmpty'; +import CodeEditor from '../../../components/CodeEditor'; const HostNameDetailValue = styled.div` align-items: center; @@ -52,7 +50,7 @@ const processCodeEditorValue = (value) => { } else if (value === '') { codeEditorValue = ' '; } else if (typeof value === 'string') { - codeEditorValue = entities.encode(value); + codeEditorValue = encode(value); } else { codeEditorValue = value; } diff --git a/awx/ui_next/src/screens/Job/JobOutput/JobOutput.js b/awx/ui_next/src/screens/Job/JobOutput/JobOutput.js index 642481660d..47f4fddd3f 100644 --- a/awx/ui_next/src/screens/Job/JobOutput/JobOutput.js +++ b/awx/ui_next/src/screens/Job/JobOutput/JobOutput.js @@ -11,7 +11,7 @@ import { } from 'react-virtualized'; import Ansi from 'ansi-to-html'; import hasAnsi from 'has-ansi'; -import { AllHtmlEntities } from 'html-entities'; +import { encode } from 'html-entities'; import { Button, Toolbar, @@ -78,7 +78,6 @@ const ansi = new Ansi({ 15: '#FFF', }, }); -const entities = new AllHtmlEntities(); function getTimestamp({ created }) { const date = new Date(created); @@ -121,7 +120,7 @@ function replaceStyleAttrs(html) { } function getLineTextHtml({ created, event, start_line, stdout }) { - const sanitized = entities.encode(stdout); + const sanitized = encode(stdout); let lineCssMap = {}; const lineTextHtml = []; diff --git a/awx/ui_next/src/screens/Job/WorkflowOutput/WorkflowOutputGraph.js b/awx/ui_next/src/screens/Job/WorkflowOutput/WorkflowOutputGraph.js index d5eb058166..202f765380 100644 --- a/awx/ui_next/src/screens/Job/WorkflowOutput/WorkflowOutputGraph.js +++ b/awx/ui_next/src/screens/Job/WorkflowOutput/WorkflowOutputGraph.js @@ -24,26 +24,24 @@ function WorkflowOutputGraph() { const svgRef = useRef(null); const gRef = useRef(null); - const { links, nodePositions, nodes, showLegend, showTools } = - useContext(WorkflowStateContext); + const { links, nodePositions, nodes, showLegend, showTools } = useContext( + WorkflowStateContext + ); // This is the zoom function called by using the mousewheel/click and drag - const zoom = () => { - const translation = [d3.event.transform.x, d3.event.transform.y]; + const zoom = event => { + const translation = [event.transform.x, event.transform.y]; d3.select(gRef.current).attr( 'transform', - `translate(${translation}) scale(${d3.event.transform.k})` + `translate(${translation}) scale(${event.transform.k})` ); - - setZoomPercentage(d3.event.transform.k * 100); + setZoomPercentage(event.transform.k * 100); }; - const handlePan = (direction) => { + const handlePan = direction => { const transform = d3.zoomTransform(d3.select(svgRef.current).node()); - let { x: xPos, y: yPos } = transform; const { k: currentScale } = transform; - switch (direction) { case 'up': yPos -= 50; @@ -61,13 +59,11 @@ function WorkflowOutputGraph() { // Throw an error? break; } - d3.select(svgRef.current).call( zoomRef.transform, d3.zoomIdentity.translate(xPos, yPos).scale(currentScale) ); }; - const handlePanToMiddle = () => { const svgBoundingClientRect = svgRef.current.getBoundingClientRect(); d3.select(svgRef.current).call( @@ -76,29 +72,25 @@ function WorkflowOutputGraph() { .translate(0, svgBoundingClientRect.height / 2 - 30) .scale(1) ); - setZoomPercentage(100); }; - const handleZoomChange = (newScale) => { + const handleZoomChange = newScale => { const svgBoundingClientRect = svgRef.current.getBoundingClientRect(); const currentScaleAndOffset = d3.zoomTransform( d3.select(svgRef.current).node() ); - const [translateX, translateY] = getTranslatePointsForZoom( svgBoundingClientRect, currentScaleAndOffset, newScale ); - d3.select(svgRef.current).call( zoomRef.transform, d3.zoomIdentity.translate(translateX, translateY).scale(newScale) ); setZoomPercentage(newScale * 100); }; - const handleFitGraph = () => { const { k: currentScale } = d3.zoomTransform( d3.select(svgRef.current).node() @@ -108,32 +100,34 @@ function WorkflowOutputGraph() { .node() .getBoundingClientRect(); - const gBBoxDimensions = d3.select(gRef.current).node().getBBox(); + const gBBoxDimensions = d3 + .select(gRef.current) + .node() + .getBBox(); const svgBoundingClientRect = svgRef.current.getBoundingClientRect(); - const [scaleToFit, yTranslate] = getScaleAndOffsetToFit( gBoundingClientRect, svgBoundingClientRect, gBBoxDimensions, currentScale ); - d3.select(svgRef.current).call( zoomRef.transform, d3.zoomIdentity.translate(0, yTranslate).scale(scaleToFit) ); - setZoomPercentage(scaleToFit * 100); }; - const zoomRef = d3.zoom().scaleExtent([0.1, 2]).on('zoom', zoom); + const zoomRef = d3 + .zoom() + .scaleExtent([0.1, 2]) + .on('zoom', zoom); // Initialize the zoom useEffect(() => { d3.select(svgRef.current).call(zoomRef); }, [zoomRef]); - // Attempt to zoom the graph to fit the available screen space useEffect(() => { handleFitGraph(); @@ -144,7 +138,6 @@ function WorkflowOutputGraph() { // and https://github.com/facebook/react/issues/15865 amongst others // eslint-disable-next-line react-hooks/exhaustive-deps }, []); - return ( <> {(nodeHelp || linkHelp) && ( @@ -156,12 +149,12 @@ function WorkflowOutputGraph() { {nodePositions && [ , - links.map((link) => ( + links.map(link => ( setLinkHelp(null)} /> )), - nodes.map((node) => { + nodes.map(node => { if (node.id > 1) { return ( -
+
{showTools && ( ); } - export default WorkflowOutputGraph; diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/VisualizerGraph.js b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/VisualizerGraph.js index 0005a8354c..0150cdb9ec 100644 --- a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/VisualizerGraph.js +++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/VisualizerGraph.js @@ -1,6 +1,5 @@ import 'styled-components/macro'; import React, { useContext, useEffect, useRef, useState } from 'react'; - import { t } from '@lingui/macro'; import styled from 'styled-components'; import { bool } from 'prop-types'; @@ -28,13 +27,11 @@ import VisualizerNode from './VisualizerNode'; const PotentialLink = styled.polyline` pointer-events: none; `; - const WorkflowSVG = styled.svg` background-color: #f6f6f6; display: flex; height: 100%; `; - function VisualizerGraph({ readOnly }) { const [helpText, setHelpText] = useState(null); const [linkHelp, setLinkHelp] = useState(); @@ -42,7 +39,6 @@ function VisualizerGraph({ readOnly }) { const [zoomPercentage, setZoomPercentage] = useState(100); const svgRef = useRef(null); const gRef = useRef(null); - const { addLinkSourceNode, addingLink, @@ -52,10 +48,9 @@ function VisualizerGraph({ readOnly }) { showLegend, showTools, } = useContext(WorkflowStateContext); - const dispatch = useContext(WorkflowDispatchContext); - const drawPotentialLinkToNode = (node) => { + const drawPotentialLinkToNode = node => { if (node.id !== addLinkSourceNode.id) { const sourceNodeX = nodePositions[addLinkSourceNode.id].x; const sourceNodeY = @@ -66,19 +61,17 @@ function VisualizerGraph({ readOnly }) { const startY = sourceNodeY + wfConstants.nodeH / 2; const finishX = targetNodeX; const finishY = targetNodeY + wfConstants.nodeH / 2; - d3.select('#workflow-potentialLink') .attr('points', `${startX},${startY} ${finishX},${finishY}`) .raise(); } }; - const handleBackgroundClick = () => { setHelpText(null); dispatch({ type: 'CANCEL_LINK' }); }; - const drawPotentialLinkToCursor = (e) => { + const drawPotentialLinkToCursor = e => { const currentTransform = d3.zoomTransform(d3.select(gRef.current).node()); const rect = e.target.getBoundingClientRect(); const mouseX = e.clientX - rect.left; @@ -88,36 +81,30 @@ function VisualizerGraph({ readOnly }) { nodePositions[addLinkSourceNode.id].y - nodePositions[1].y; const startX = sourceNodeX + wfConstants.nodeW; const startY = sourceNodeY + wfConstants.nodeH / 2; - d3.select('#workflow-potentialLink') .attr( 'points', - `${startX},${startY} ${ - mouseX / currentTransform.k - currentTransform.x / currentTransform.k - },${ - mouseY / currentTransform.k - currentTransform.y / currentTransform.k - }` + `${startX},${startY} ${mouseX / currentTransform.k - + currentTransform.x / currentTransform.k},${mouseY / + currentTransform.k - + currentTransform.y / currentTransform.k}` ) .raise(); }; - // This is the zoom function called by using the mousewheel/click and drag - const zoom = () => { - const translation = [d3.event.transform.x, d3.event.transform.y]; + const zoom = event => { + const translation = [event.transform.x, event.transform.y]; d3.select(gRef.current).attr( 'transform', - `translate(${translation}) scale(${d3.event.transform.k})` + `translate(${translation}) scale(${event.transform.k})` ); - - setZoomPercentage(d3.event.transform.k * 100); + setZoomPercentage(event.transform.k * 100); }; - const handlePan = (direction) => { + const handlePan = direction => { const transform = d3.zoomTransform(d3.select(svgRef.current).node()); - let { x: xPos, y: yPos } = transform; const { k: currentScale } = transform; - switch (direction) { case 'up': yPos -= 50; @@ -135,13 +122,11 @@ function VisualizerGraph({ readOnly }) { // Throw an error? break; } - d3.select(svgRef.current).call( zoomRef.transform, d3.zoomIdentity.translate(xPos, yPos).scale(currentScale) ); }; - const handlePanToMiddle = () => { const svgBoundingClientRect = svgRef.current.getBoundingClientRect(); d3.select(svgRef.current).call( @@ -150,29 +135,25 @@ function VisualizerGraph({ readOnly }) { .translate(0, svgBoundingClientRect.height / 2 - 30) .scale(1) ); - setZoomPercentage(100); }; - const handleZoomChange = (newScale) => { + const handleZoomChange = newScale => { const svgBoundingClientRect = svgRef.current.getBoundingClientRect(); const currentScaleAndOffset = d3.zoomTransform( d3.select(svgRef.current).node() ); - const [translateX, translateY] = getTranslatePointsForZoom( svgBoundingClientRect, currentScaleAndOffset, newScale ); - d3.select(svgRef.current).call( zoomRef.transform, d3.zoomIdentity.translate(translateX, translateY).scale(newScale) ); setZoomPercentage(newScale * 100); }; - const handleFitGraph = () => { const { k: currentScale } = d3.zoomTransform( d3.select(svgRef.current).node() @@ -182,32 +163,34 @@ function VisualizerGraph({ readOnly }) { .node() .getBoundingClientRect(); - const gBBoxDimensions = d3.select(gRef.current).node().getBBox(); + const gBBoxDimensions = d3 + .select(gRef.current) + .node() + .getBBox(); const svgBoundingClientRect = svgRef.current.getBoundingClientRect(); - const [scaleToFit, yTranslate] = getScaleAndOffsetToFit( gBoundingClientRect, svgBoundingClientRect, gBBoxDimensions, currentScale ); - d3.select(svgRef.current).call( zoomRef.transform, d3.zoomIdentity.translate(0, yTranslate).scale(scaleToFit) ); - setZoomPercentage(scaleToFit * 100); }; - const zoomRef = d3.zoom().scaleExtent([0.1, 2]).on('zoom', zoom); + const zoomRef = d3 + .zoom() + .scaleExtent([0.1, 2]) + .on('zoom', zoom); // Initialize the zoom useEffect(() => { d3.select(svgRef.current).call(zoomRef); }, [zoomRef]); - // Attempt to zoom the graph to fit the available screen space useEffect(() => { handleFitGraph(); @@ -218,7 +201,6 @@ function VisualizerGraph({ readOnly }) { // and https://github.com/facebook/react/issues/15865 amongst others // eslint-disable-next-line react-hooks/exhaustive-deps }, []); - return ( <> {(helpText || nodeHelp || linkHelp) && ( @@ -249,7 +231,7 @@ function VisualizerGraph({ readOnly }) { opacity="0" width="100%" {...(addingLink && { - onMouseMove: (e) => drawPotentialLinkToCursor(e), + onMouseMove: e => drawPotentialLinkToCursor(e), onMouseOver: () => setHelpText( t`Click an available node to create a new link. Click outside the graph to cancel.` @@ -260,7 +242,7 @@ function VisualizerGraph({ readOnly }) { /> {nodePositions && [ - links.map((link) => { + links.map(link => { if ( nodePositions[link.source.id] && nodePositions[link.target.id] @@ -270,22 +252,22 @@ function VisualizerGraph({ readOnly }) { key={`link-${link.source.id}-${link.target.id}`} link={link} readOnly={readOnly} - updateLinkHelp={(newLinkHelp) => setLinkHelp(newLinkHelp)} - updateHelpText={(newHelpText) => setHelpText(newHelpText)} + updateLinkHelp={newLinkHelp => setLinkHelp(newLinkHelp)} + updateHelpText={newHelpText => setHelpText(newHelpText)} /> ); } return null; }), - nodes.map((node) => { + nodes.map(node => { if (node.id > 1 && nodePositions[node.id] && !node.isDeleted) { return ( setHelpText(newHelpText)} - updateNodeHelp={(newNodeHelp) => setNodeHelp(newNodeHelp)} + updateHelpText={newHelpText => setHelpText(newHelpText)} + updateNodeHelp={newNodeHelp => setNodeHelp(newNodeHelp)} {...(addingLink && { onMouseOver: () => drawPotentialLinkToNode(node), })} @@ -327,9 +309,7 @@ function VisualizerGraph({ readOnly }) { ); } - VisualizerGraph.propTypes = { readOnly: bool.isRequired, }; - export default VisualizerGraph;