mirror of
https://github.com/ansible/awx.git
synced 2026-01-12 10:30:03 -03:30
updates d3, ansi-t0-html, has-ansi, httml-entities, sanitize-html, styled-components
This commit is contained in:
parent
57fa2c03f7
commit
0a64f3274e
486
awx/ui_next/package-lock.json
generated
486
awx/ui_next/package-lock.json
generated
@ -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",
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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 (
|
||||
<PageContextConsumer>
|
||||
{(pageContext) => <Component {...props} pageContext={pageContext} />}
|
||||
{pageContext => <Component {...props} pageContext={pageContext} />}
|
||||
</PageContextConsumer>
|
||||
);
|
||||
};
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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 = [];
|
||||
|
||||
|
||||
@ -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() {
|
||||
<svg
|
||||
id="workflow-svg"
|
||||
ref={svgRef}
|
||||
css="display: flex; height: 100%; background-color: #f6f6f6;"
|
||||
css="display: flex; height: 100%; background-color: #F6F6F6"
|
||||
>
|
||||
<g id="workflow-g" ref={gRef}>
|
||||
{nodePositions && [
|
||||
<WorkflowStartNode key="start" showActionTooltip={false} />,
|
||||
links.map((link) => (
|
||||
links.map(link => (
|
||||
<WorkflowOutputLink
|
||||
key={`link-${link.source.id}-${link.target.id}`}
|
||||
link={link}
|
||||
@ -169,7 +162,7 @@ function WorkflowOutputGraph() {
|
||||
mouseLeave={() => setLinkHelp(null)}
|
||||
/>
|
||||
)),
|
||||
nodes.map((node) => {
|
||||
nodes.map(node => {
|
||||
if (node.id > 1) {
|
||||
return (
|
||||
<WorkflowOutputNode
|
||||
@ -185,7 +178,7 @@ function WorkflowOutputGraph() {
|
||||
]}
|
||||
</g>
|
||||
</svg>
|
||||
<div css="position: absolute; top: 75px;right: 20px;display: flex;">
|
||||
<div css="position: absolute; top: 75px;right: 20px;display: flex">
|
||||
{showTools && (
|
||||
<WorkflowTools
|
||||
onFitGraph={handleFitGraph}
|
||||
@ -200,5 +193,4 @@ function WorkflowOutputGraph() {
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default WorkflowOutputGraph;
|
||||
|
||||
@ -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 }) {
|
||||
/>
|
||||
<g id="workflow-g" ref={gRef}>
|
||||
{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 (
|
||||
<VisualizerNode
|
||||
key={`node-${node.id}`}
|
||||
node={node}
|
||||
readOnly={readOnly}
|
||||
updateHelpText={(newHelpText) => 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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user