From a64a8cf73a5f4fb9f7c9705740384a7e2da84895 Mon Sep 17 00:00:00 2001 From: BLoveless Date: Tue, 4 Aug 2020 15:31:00 -0400 Subject: [PATCH 1/3] stash --- src/components/App.jsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/App.jsx b/src/components/App.jsx index cc14409..ef3ee5f 100644 --- a/src/components/App.jsx +++ b/src/components/App.jsx @@ -12,12 +12,12 @@ class App extends Component { return(

My React App

- + {/* */} - + - +
) From 2398df34949c15f7f62e8b010b3d5b77120ee26c Mon Sep 17 00:00:00 2001 From: BLoveless Date: Tue, 4 Aug 2020 17:06:15 -0400 Subject: [PATCH 2/3] bones --- package-lock.json | 5 ----- src/components/RatingSummary/dynamicChart.js | 10 ++++++++++ src/components/RatingSummary/dynamicStars.js | 13 +++++++++++++ 3 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 src/components/RatingSummary/dynamicChart.js create mode 100644 src/components/RatingSummary/dynamicStars.js diff --git a/package-lock.json b/package-lock.json index 50931df..956c88a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3364,11 +3364,6 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, - "bootstrap": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.5.1.tgz", - "integrity": "sha512-bxUooHBSbvefnIZfjD0LE8nfdPKrtiFy2sgrxQwUZ0UpFzpjVbVMUxaGIoo9XWT4B2LG1HX6UQg0UMOakT0prQ==" - }, "bootstrap": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.5.0.tgz", diff --git a/src/components/RatingSummary/dynamicChart.js b/src/components/RatingSummary/dynamicChart.js new file mode 100644 index 0000000..6078fc3 --- /dev/null +++ b/src/components/RatingSummary/dynamicChart.js @@ -0,0 +1,10 @@ +import React, { Component } from "react"; +import "./chartMock.css"; + +export default class DynamicChart extends Component { + render() { +
+ {/* get the info from the server and show some stars expanded chart line by line */} +
; + } +} diff --git a/src/components/RatingSummary/dynamicStars.js b/src/components/RatingSummary/dynamicStars.js new file mode 100644 index 0000000..5709337 --- /dev/null +++ b/src/components/RatingSummary/dynamicStars.js @@ -0,0 +1,13 @@ +import React, { Component } from "react"; +import "./stars.css"; +import DynamicChart from "./dynamicChart"; + +export default class DynamicStars extends Component { + render() { +
+ {/* get the info from the server and show some stars the expanded chart appear on hover */} + + +
; + } +} From dd9253e30d7c40326f28643bd565963437aa54cd Mon Sep 17 00:00:00 2001 From: BLoveless Date: Thu, 13 Aug 2020 15:28:38 -0400 Subject: [PATCH 3/3] fixed old tests --- .gitignore | 3 +- package-lock.json | 3006 +++++++++++++++-- package.json | 7 + public/images/placement-holder.png | Bin 0 -> 19674 bytes public/images/preFoot.JPG | Bin 0 -> 86282 bytes public/index.html | 4 + src/Css/App.css | 9 + src/components/Answers.js | 49 +- src/components/App.jsx | 56 +- .../ComparisonGrid/ComparisonGrid.jsx | 128 +- .../ComparisonGrid/ComparisonItem.jsx | 5 - .../CustomerImageIndividual.jsx | 39 +- .../CustomerImageCmpnt/CustomerImagesAll.jsx | 31 +- .../CustomerReviews/CustomerImages.jsx | 5 +- .../CustomerReviews/CustomerReviews.css | 169 +- .../CustomerReviews/CustomerReviews.jsx | 232 +- .../CustomerReviews/ReviewMentions.jsx | 80 +- .../CustomerReviews/ReviewProduct.jsx | 16 +- src/components/CustomerReviews/StarRating.jsx | 8 +- .../CustomerWhoBoughtAlsoCmpnt/CWBA.css | 31 + .../CustomerWhoBoughtAlsoIndividual.jsx | 35 +- .../CustomersWhoBoughtAlsoAll.jsx | 121 +- src/components/Directory.js | 31 +- src/components/Footer/Bluefoot.js | 37 + src/components/Footer/BottomLine.js | 24 + src/components/Footer/Footer.js | 20 + src/components/Footer/Prefoot.js | 17 + src/components/Footer/footer.css | 44 + src/components/Manufacturer/Manufacturer.jsx | 12 + src/components/PhotoGallery/PhotoGallery.css | 82 + src/components/PhotoGallery/PhotoGallery.jsx | 32 + .../PhotoGalleryPhotoExpanded.css | 9 + .../PhotoGalleryPhotoExpanded.jsx | 56 + .../PhotoGallery/PhotoGalleryThumbnail.jsx | 28 + .../PhotoGallery/PhotoThumbnail.css | 20 + src/components/PrimaryPage.jsx | 85 +- src/components/QAcomponent.js | 34 +- src/components/QAitem.js | 120 +- src/components/RatingSummary/Appples.js | 17 +- src/components/RatingSummary/badChartmock.js | 22 +- src/components/RatingSummary/badStar.js | 4 +- src/components/RatingSummary/chartMock.css | 2 +- src/components/RatingSummary/dynamicStar.jsx | 106 + .../RatingSummary/dynamicStarChart.jsx | 71 + src/components/RatingSummary/goodChartMock.js | 22 +- src/components/RatingSummary/goodStar.js | 4 +- src/components/RatingSummary/highChartMock.js | 22 +- src/components/RatingSummary/highStar.js | 7 +- src/components/RatingSummary/lowChartMock.js | 22 +- src/components/RatingSummary/lowStar.js | 4 +- src/components/RatingSummary/midChartMock.js | 22 +- src/components/RatingSummary/midStar.js | 4 +- src/components/RatingSummary/stars.css | 2 +- src/components/SecondTopLine/BestSellers.js | 13 + .../SecondTopLine/BlueSecondTop.css | 23 + .../SecondTopLine/BlueSecondTopline.js | 34 + .../SecondTopLine/CustomerService.js | 13 + src/components/SecondTopLine/Deals.js | 13 + src/components/SecondTopLine/Foods.js | 13 + src/components/SecondTopLine/Gift.js | 13 + src/components/SecondTopLine/GiftCards.js | 13 + src/components/SecondTopLine/Location.js | 13 + src/components/SecondTopLine/NewReleases.js | 13 + src/components/SecondTopLine/Registry.js | 13 + src/components/SecondTopLine/School.js | 13 + src/components/SecondTopLine/Shipping.js | 13 + src/components/SingleAnswer.js | 11 - src/components/TopBar/Cart.js | 17 + src/components/TopBar/Flag.js | 18 + src/components/TopBar/Logo.js | 12 + src/components/TopBar/Menu.js | 17 + src/components/TopBar/Prime.js | 14 + src/components/TopBar/Returns.js | 11 + src/components/TopBar/SearchBar.jsx | 28 + src/components/TopBar/SignIn.js | 11 + src/components/TopBar/TopBar.js | 30 + src/components/TopBar/WorkinMenu.js | 52 + src/components/TopBar/flagUs.png | Bin 0 -> 5208 bytes src/components/TopBar/menu.css | 125 + src/components/TopBar/topbar.css | 88 + src/components/TopBar/usFlag.JPG | Bin 0 -> 13367 bytes src/components/Votes.js | 45 + src/components/primarypage.css | 32 + src/components/productVariant/Product.jsx | 591 ++-- src/components/productVariant/product.css | 215 +- .../variant-Components/AboutList.jsx | 4 +- .../variant-Components/Availability.jsx | 332 +- .../variant-Components/Details.jsx | 10 +- .../variant-Components/Header.jsx | 142 +- .../variant-Components/Ratings.jsx | 57 +- .../variant-Components/Sponsered.jsx | 19 - .../variant-Components/Sponsored.jsx | 16 + src/components/qacomponent.css | 97 + src/service/QAndADataService.js | 25 +- .../__snapshots__/comparisongrid.spec.js.snap | 292 -- .../customerReviews.spec.js.snap | 19 +- tests/blBlueTopBar.spec.js | 20 + tests/blStars3.spec.js | 7 +- tests/chartBad.spec.js | 2 +- tests/chartLow.spec.js | 2 +- tests/comparisongrid.spec.js | 9 +- tests/customerImagesAll.spec.js | 13 + tests/footertest.spec.js | 58 + tests/photogallery.spec.js | 0 tests/topbartest.spec.js | 20 + 105 files changed, 6269 insertions(+), 1408 deletions(-) create mode 100644 public/images/placement-holder.png create mode 100644 public/images/preFoot.JPG create mode 100644 src/Css/App.css delete mode 100644 src/components/ComparisonGrid/ComparisonItem.jsx create mode 100644 src/components/Footer/Bluefoot.js create mode 100644 src/components/Footer/BottomLine.js create mode 100644 src/components/Footer/Footer.js create mode 100644 src/components/Footer/Prefoot.js create mode 100644 src/components/Footer/footer.css create mode 100644 src/components/Manufacturer/Manufacturer.jsx create mode 100644 src/components/PhotoGallery/PhotoGallery.css create mode 100644 src/components/PhotoGallery/PhotoGallery.jsx create mode 100644 src/components/PhotoGallery/PhotoGalleryPhotoExpanded.css create mode 100644 src/components/PhotoGallery/PhotoGalleryPhotoExpanded.jsx create mode 100644 src/components/PhotoGallery/PhotoGalleryThumbnail.jsx create mode 100644 src/components/PhotoGallery/PhotoThumbnail.css create mode 100644 src/components/RatingSummary/dynamicStar.jsx create mode 100644 src/components/RatingSummary/dynamicStarChart.jsx create mode 100644 src/components/SecondTopLine/BestSellers.js create mode 100644 src/components/SecondTopLine/BlueSecondTop.css create mode 100644 src/components/SecondTopLine/BlueSecondTopline.js create mode 100644 src/components/SecondTopLine/CustomerService.js create mode 100644 src/components/SecondTopLine/Deals.js create mode 100644 src/components/SecondTopLine/Foods.js create mode 100644 src/components/SecondTopLine/Gift.js create mode 100644 src/components/SecondTopLine/GiftCards.js create mode 100644 src/components/SecondTopLine/Location.js create mode 100644 src/components/SecondTopLine/NewReleases.js create mode 100644 src/components/SecondTopLine/Registry.js create mode 100644 src/components/SecondTopLine/School.js create mode 100644 src/components/SecondTopLine/Shipping.js delete mode 100644 src/components/SingleAnswer.js create mode 100644 src/components/TopBar/Cart.js create mode 100644 src/components/TopBar/Flag.js create mode 100644 src/components/TopBar/Logo.js create mode 100644 src/components/TopBar/Menu.js create mode 100644 src/components/TopBar/Prime.js create mode 100644 src/components/TopBar/Returns.js create mode 100644 src/components/TopBar/SearchBar.jsx create mode 100644 src/components/TopBar/SignIn.js create mode 100644 src/components/TopBar/TopBar.js create mode 100644 src/components/TopBar/WorkinMenu.js create mode 100644 src/components/TopBar/flagUs.png create mode 100644 src/components/TopBar/menu.css create mode 100644 src/components/TopBar/topbar.css create mode 100644 src/components/TopBar/usFlag.JPG create mode 100644 src/components/Votes.js create mode 100644 src/components/primarypage.css delete mode 100644 src/components/productVariant/variant-Components/Sponsered.jsx create mode 100644 src/components/productVariant/variant-Components/Sponsored.jsx create mode 100644 src/components/qacomponent.css delete mode 100644 tests/__snapshots__/comparisongrid.spec.js.snap create mode 100644 tests/blBlueTopBar.spec.js create mode 100644 tests/customerImagesAll.spec.js create mode 100644 tests/footertest.spec.js create mode 100644 tests/photogallery.spec.js create mode 100644 tests/topbartest.spec.js diff --git a/.gitignore b/.gitignore index 6acc570..f3759b0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules dist -.DS_Store \ No newline at end of file +.DS_Store +yarn.lock \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 956c88a..36fbcc7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,15 +23,15 @@ } }, "@babel/core": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.0.tgz", - "integrity": "sha512-mkLq8nwaXmDtFmRkQ8ED/eA2CnVw4zr7dCztKalZXBvdK5EeNUAesrrwUqjQEzFgomJssayzB0aqlOsP1vGLqg==", + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.1.tgz", + "integrity": "sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ==", "requires": { "@babel/code-frame": "^7.10.4", "@babel/generator": "^7.11.0", "@babel/helper-module-transforms": "^7.11.0", "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.0", + "@babel/parser": "^7.11.1", "@babel/template": "^7.10.4", "@babel/traverse": "^7.11.0", "@babel/types": "^7.11.0", @@ -307,9 +307,9 @@ } }, "@babel/parser": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.0.tgz", - "integrity": "sha512-qvRvi4oI8xii8NllyEc4MDJjuZiNaRzyb7Y7lup1NqJV8TZHF4O27CcP+72WPn/k1zkgJ6WJfnIbk4jTsVAZHw==" + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.2.tgz", + "integrity": "sha512-Vuj/+7vLo6l1Vi7uuO+1ngCDNeVmNbTngcJFKCR/oEtz8tKz0CJxZEGmPt9KcIloZhOZ3Zit6xbpXT2MDlS9Vw==" }, "@babel/plugin-proposal-async-generator-functions": { "version": "7.10.5", @@ -587,9 +587,9 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.5.tgz", - "integrity": "sha512-6Ycw3hjpQti0qssQcA6AMSFDHeNJ++R6dIMnpRqUjFeBBTmTDPa8zgF90OVfTvAo11mXZTlVUViY1g8ffrURLg==", + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz", + "integrity": "sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -1022,17 +1022,17 @@ } }, "@babel/runtime": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.0.tgz", - "integrity": "sha512-qArkXsjJq7H+T86WrIFV0Fnu/tNOkZ4cgXmjkzAu3b/58D5mFIO8JH/y77t7C9q0OdDRdh9s7Ue5GasYssxtXw==", + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", + "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs3": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.11.0.tgz", - "integrity": "sha512-K0ioacsw8JgzDSPpUiGWokMvLzGvnZPXLrTsJfyHPrFsnp4yoKn+Ap/8NNZgWKZG9o5+qotH8tAa8AXn8gTN5A==", + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.11.2.tgz", + "integrity": "sha512-qh5IR+8VgFz83VBa6OkaET6uN/mJOhHONuy3m1sgF0CV6mXdPSEBdA7e1eUbVvyNtANjMbg22JUv71BaDXLY6A==", "requires": { "core-js-pure": "^3.0.0", "regenerator-runtime": "^0.13.4" @@ -1106,6 +1106,43 @@ "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" }, + "@fortawesome/fontawesome-common-types": { + "version": "0.2.30", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.30.tgz", + "integrity": "sha512-TsRwpTuKwFNiPhk1UfKgw7zNPeV5RhNp2Uw3pws+9gDAkPGKrtjR1y2lI3SYn7+YzyfuNknflpBA1LRKjt7hMg==" + }, + "@fortawesome/fontawesome-svg-core": { + "version": "1.2.30", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.30.tgz", + "integrity": "sha512-E3sAXATKCSVnT17HYmZjjbcmwihrNOCkoU7dVMlasrcwiJAHxSKeZ+4WN5O+ElgO/FaYgJmASl8p9N7/B/RttA==", + "requires": { + "@fortawesome/fontawesome-common-types": "^0.2.30" + } + }, + "@fortawesome/free-brands-svg-icons": { + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-5.14.0.tgz", + "integrity": "sha512-WsqPFTvJFI7MYkcy0jeFE2zY+blC4OrnB9MJOcn1NxRXT/sSfEEhrI7CwzIkiYajLiVDBKWeErYOvpsMeodmCQ==", + "requires": { + "@fortawesome/fontawesome-common-types": "^0.2.30" + } + }, + "@fortawesome/free-solid-svg-icons": { + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.14.0.tgz", + "integrity": "sha512-M933RDM8cecaKMWDSk3FRYdnzWGW7kBBlGNGfvqLVwcwhUPNj9gcw+xZMrqBdRqxnSXdl3zWzTCNNGEtFUq67Q==", + "requires": { + "@fortawesome/fontawesome-common-types": "^0.2.30" + } + }, + "@fortawesome/react-fontawesome": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.11.tgz", + "integrity": "sha512-sClfojasRifQKI0OPqTy8Ln8iIhnxR/Pv/hukBhWnBz9kQRmqi6JSH3nghlhAY7SUeIIM7B5/D2G8WjX0iepVg==", + "requires": { + "prop-types": "^15.7.2" + } + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -1919,6 +1956,32 @@ "react-is": "^16.8.0" } }, + "@nodelib/fs.scandir": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.3", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.3", + "fastq": "^1.6.0" + } + }, "@popperjs/core": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.4.4.tgz", @@ -1938,6 +2001,13 @@ "lodash-es": "^4.17.15" } }, + "@sindresorhus/is": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "dev": true, + "optional": true + }, "@sinonjs/commons": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz", @@ -1955,9 +2025,9 @@ } }, "@testing-library/dom": { - "version": "7.21.7", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-7.21.7.tgz", - "integrity": "sha512-GVNrLAt0yq7Squz1HrW8IiDVKP5jeWSv9cpgQJsfmXYXLFPpaFoRxn+H/NcUitVXyb0J62PkpVWjMe5b0fvYrQ==", + "version": "7.22.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-7.22.0.tgz", + "integrity": "sha512-soXVCM/F2WxMidqGlZsSvTkmLsmi72q5N2IrB7o1aTFpMCfEL+Kl0kzv+2Lk/dLxny/c7CWUDa+yjve5VEsjMg==", "dev": true, "requires": { "@babel/runtime": "^7.10.3", @@ -2031,9 +2101,9 @@ } }, "@testing-library/react": { - "version": "10.4.7", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-10.4.7.tgz", - "integrity": "sha512-hUYbum3X2f1ZKusKfPaooKNYqE/GtPiQ+D2HJaJ4pkxeNJQFVUEvAvEh9+3QuLdBeTWkDMNY5NSijc5+pGdM4Q==", + "version": "10.4.8", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-10.4.8.tgz", + "integrity": "sha512-clgpFR6QHiRRcdhFfAKDhH8UXpNASyfkkANhtCsCVBnai+O+mK1rGtMES+Apc7ql5Wyxu7j8dcLiC4pV5VblHA==", "dev": true, "requires": { "@babel/runtime": "^7.10.3", @@ -2151,9 +2221,9 @@ } }, "@types/jest": { - "version": "26.0.8", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.8.tgz", - "integrity": "sha512-eo3VX9jGASSuv680D4VQ89UmuLZneNxv2MCZjfwlInav05zXVJTzfc//lavdV0GPwSxsXJTy2jALscB7Acqg0g==", + "version": "26.0.9", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.9.tgz", + "integrity": "sha512-k4qFfJ5AUKrWok5KYXp2EPm89b0P/KZpl7Vg4XuOTVVQEhLDBDBU3iBFrjjdgd8fLw96aAtmnwhXHl63bWeBQQ==", "requires": { "jest-diff": "^25.2.1", "pretty-format": "^25.2.1" @@ -2191,6 +2261,13 @@ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" }, + "@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", + "dev": true, + "optional": true + }, "@types/react": { "version": "16.9.44", "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.44.tgz", @@ -2645,6 +2722,32 @@ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true }, + "arch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.2.tgz", + "integrity": "sha512-NTBIIbAfkJeIletyABbVtdPgeKfDafR+1mZV/AyyfC1UkVkp9iUjV+wwmqtUgphHYajbI86jejBJp5e+jkGTiQ==", + "dev": true, + "optional": true + }, + "archive-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", + "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", + "dev": true, + "optional": true, + "requires": { + "file-type": "^4.2.0" + }, + "dependencies": { + "file-type": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", + "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", + "dev": true, + "optional": true + } + } + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -2687,6 +2790,13 @@ "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=" }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true, + "optional": true + }, "array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", @@ -2731,6 +2841,11 @@ "es-abstract": "^1.17.0-next.1" } }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -3279,190 +3394,553 @@ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true }, - "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true, - "optional": true - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "bn.js": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz", - "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==", - "dev": true - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "bin-build": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz", + "integrity": "sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==", "dev": true, + "optional": true, "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "decompress": "^4.0.0", + "download": "^6.2.2", + "execa": "^0.7.0", + "p-map-series": "^1.0.0", + "tempfile": "^2.0.0" }, "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "optional": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, + "optional": true, "requires": { - "ms": "2.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true, + "optional": true }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "optional": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true, + "optional": true } } }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - }, - "bootstrap": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.5.0.tgz", - "integrity": "sha512-Z93QoXvodoVslA+PWNdk23Hze4RBYIkpb5h8I2HY2Tu2h7A0LpAgLcyrhrSUyo2/Oxm2l1fRZPs1e5hnxnliXA==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "bin-check": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz", + "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==", "dev": true, + "optional": true, "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "execa": "^0.7.0", + "executable": "^4.1.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "optional": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "optional": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true, + "optional": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "optional": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true, + "optional": true + } } }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "bin-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz", + "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==", "dev": true, + "optional": true, "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "execa": "^1.0.0", + "find-versions": "^3.0.0" } }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "bin-version-check": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz", + "integrity": "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==", "dev": true, + "optional": true, "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "bin-version": "^3.0.0", + "semver": "^5.6.0", + "semver-truncate": "^1.1.2" } }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "bin-wrapper": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz", + "integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==", "dev": true, + "optional": true, "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" + "bin-check": "^4.1.0", + "bin-version-check": "^4.0.0", + "download": "^7.1.0", + "import-lazy": "^3.1.0", + "os-filter-obj": "^2.0.0", + "pify": "^4.0.1" }, "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "download": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz", + "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==", + "dev": true, + "optional": true, + "requires": { + "archive-type": "^4.0.0", + "caw": "^2.0.1", + "content-disposition": "^0.5.2", + "decompress": "^4.2.0", + "ext-name": "^5.0.0", + "file-type": "^8.1.0", + "filenamify": "^2.0.0", + "get-stream": "^3.0.0", + "got": "^8.3.1", + "make-dir": "^1.2.0", + "p-event": "^2.1.0", + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "optional": true + } + } + }, + "file-type": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz", + "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==", + "dev": true, + "optional": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true, + "optional": true + }, + "got": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", + "dev": true, + "optional": true, + "requires": { + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "optional": true + } + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "optional": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "optional": true + } + } + }, + "p-cancelable": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", + "dev": true, + "optional": true + }, + "p-event": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", + "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", + "dev": true, + "optional": true, + "requires": { + "p-timeout": "^2.0.1" + } + }, + "p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "dev": true, + "optional": true, + "requires": { + "p-finally": "^1.0.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "optional": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, + "optional": true + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "optional": true, + "requires": { + "prepend-http": "^2.0.0" + } + } + } + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true, + "optional": true + }, + "bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "dev": true, + "optional": true, + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "bn.js": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz", + "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "bootstrap": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.5.2.tgz", + "integrity": "sha512-vlGn0bcySYl/iV+BGA544JkkZP5LB3jsmkeKLFQakCOwCM3AOk7VkldBz4jrzSe+Z0Ezn99NVXa1o45cQY4R6A==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", "dev": true } } }, "browserify-sign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz", - "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, "requires": { "bn.js": "^5.1.1", "browserify-rsa": "^4.0.1", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.2", + "elliptic": "^6.5.3", "inherits": "^2.0.4", "parse-asn1": "^5.1.5", "readable-stream": "^3.6.0", @@ -3516,6 +3994,38 @@ "isarray": "^1.0.0" } }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "optional": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true, + "optional": true + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true, + "optional": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true, + "optional": true + }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -3595,6 +4105,38 @@ "unset-value": "^1.0.0" } }, + "cacheable-request": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", + "dev": true, + "optional": true, + "requires": { + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true, + "optional": true + }, + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "dev": true, + "optional": true + } + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -3615,10 +4157,30 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true, + "optional": true + } + } + }, "caniuse-lite": { - "version": "1.0.30001110", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001110.tgz", - "integrity": "sha512-KqJWeat4rhSHF0ito4yz9q/JuZHkvn71SsBnxge4azjPDbowIjOUnS8i1xpKGxZxU6BFiPqO2hSV2eiCpFQVRw==" + "version": "1.0.30001111", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001111.tgz", + "integrity": "sha512-xnDje2wchd/8mlJu8sXvWxOGvMgv+uT3iZ3bkIAynKOzToCssWCmkz/ZIkQBs/2pUB4uwnJKVORWQ31UkbVjOg==" }, "canvg": { "version": "1.5.3", @@ -3744,6 +4306,19 @@ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, + "caw": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", + "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", + "dev": true, + "optional": true, + "requires": { + "get-proxy": "^2.0.0", + "isurl": "^1.0.0-alpha5", + "tunnel-agent": "^0.6.0", + "url-to-options": "^1.0.1" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -3773,9 +4348,9 @@ } }, "chokidar": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz", - "integrity": "sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", + "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", "dev": true, "optional": true, "requires": { @@ -3824,6 +4399,11 @@ "resolved": "https://registry.npmjs.org/circular-json-es6/-/circular-json-es6-2.0.2.tgz", "integrity": "sha512-ODYONMMNb3p658Zv+Pp+/XPa5s6q7afhz3Tzyvo+VRh9WIrJ64J76ZC4GQxnlye/NesTn09jvOiuE8+xxfpwhQ==" }, + "clamp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz", + "integrity": "sha1-ZqDmQBGBbjcZaCj9yMjBRzEshjQ=" + }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -3887,6 +4467,16 @@ } } }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "optional": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, "clsx": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", @@ -3897,6 +4487,18 @@ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "optional": true, + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, "collect-v8-coverage": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", @@ -4070,6 +4672,17 @@ } } }, + "config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "dev": true, + "optional": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, "connect-history-api-fallback": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", @@ -4082,6 +4695,13 @@ "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, + "console-stream": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz", + "integrity": "sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=", + "dev": true, + "optional": true + }, "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", @@ -4339,6 +4959,33 @@ "nth-check": "~1.0.1" } }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true, + "optional": true + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dev": true, + "optional": true, + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, "css-vendor": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz", @@ -4364,6 +5011,43 @@ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, + "csso": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", + "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", + "dev": true, + "optional": true, + "requires": { + "css-tree": "1.0.0-alpha.39" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", + "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", + "dev": true, + "optional": true, + "requires": { + "mdn-data": "2.0.6", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", + "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==", + "dev": true, + "optional": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, "cssom": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", @@ -4389,6 +5073,28 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.13.tgz", "integrity": "sha512-ul26pfSQTZW8dcOnD2iiJssfXw0gdNVX9IJDH/X3K5DGPfj+fUYe3kB+swUY6BF3oZDxaID3AJt+9/ojSAE05A==" }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "optional": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "cwebp-bin": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cwebp-bin/-/cwebp-bin-5.1.0.tgz", + "integrity": "sha512-BsPKStaNr98zfxwejWWLIGELbPERULJoD2v5ijvpeutSAGsegX7gmABgnkRK7MUucCPROXXfaPqkLAwI509JzA==", + "dev": true, + "optional": true, + "requires": { + "bin-build": "^3.0.0", + "bin-wrapper": "^4.0.1", + "logalot": "^2.1.0" + } + }, "cyclist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", @@ -4413,38 +5119,198 @@ "whatwg-url": "^8.0.0" } }, - "date-fns": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.15.0.tgz", - "integrity": "sha512-ZCPzAMJZn3rNUvvQIMlXhDr4A+Ar07eLeGsGREoWU19a3Pqf5oYa+ccd+B3F6XVtQY6HANMFdOQ8A+ipFnvJdQ==" - }, - "debounce": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz", - "integrity": "sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg==" - }, - "debug": { + "date-fns": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.15.0.tgz", + "integrity": "sha512-ZCPzAMJZn3rNUvvQIMlXhDr4A+Ar07eLeGsGREoWU19a3Pqf5oYa+ccd+B3F6XVtQY6HANMFdOQ8A+ipFnvJdQ==" + }, + "debounce": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz", + "integrity": "sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg==" + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decimal.js": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.0.tgz", + "integrity": "sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw==" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "decompress": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", + "dev": true, + "optional": true, + "requires": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + }, + "dependencies": { + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "optional": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "optional": true + } + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "optional": true + } + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "optional": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "dev": true, + "optional": true, + "requires": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + }, + "dependencies": { + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true, + "optional": true + } + } + }, + "decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "dev": true, + "optional": true, + "requires": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "dependencies": { + "file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "dev": true, + "optional": true + } + } + }, + "decompress-targz": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "dev": true, + "optional": true, "requires": { - "ms": "^2.1.1" + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + }, + "dependencies": { + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true, + "optional": true + } } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "decimal.js": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.0.tgz", - "integrity": "sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw==" - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + "decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "dev": true, + "optional": true, + "requires": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "dev": true, + "optional": true + }, + "get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "dev": true, + "optional": true, + "requires": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "optional": true + } + } }, "deep-equal": { "version": "1.1.1", @@ -4615,6 +5481,22 @@ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", "dev": true }, + "detect-hover": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/detect-hover/-/detect-hover-1.0.2.tgz", + "integrity": "sha1-WJ+wtGkiCJep7uP6NqkX4e2jeiE=" + }, + "detect-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/detect-it/-/detect-it-3.0.3.tgz", + "integrity": "sha1-jhPaoLYhJhUMv3bQg6HTTRsH0HE=", + "requires": { + "detect-hover": "^1.0.2", + "detect-passive-events": "^1.0.4", + "detect-pointer": "^1.0.2", + "detect-touch-events": "^2.0.1" + } + }, "detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -4626,6 +5508,21 @@ "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", "dev": true }, + "detect-passive-events": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/detect-passive-events/-/detect-passive-events-1.0.4.tgz", + "integrity": "sha1-btR35uW863kHlzXc01d4nTf5qRo=" + }, + "detect-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/detect-pointer/-/detect-pointer-1.0.2.tgz", + "integrity": "sha1-Hg5OJh2rRQVcUMdPtaT/Cc6xj70=" + }, + "detect-touch-events": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-touch-events/-/detect-touch-events-2.0.1.tgz", + "integrity": "sha1-NlgzzwxcQMQJCggJa4pojbAPozc=" + }, "detective": { "version": "4.7.1", "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", @@ -4668,6 +5565,23 @@ } } }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + }, + "dependencies": { + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + } + } + }, "discontinuous-range": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", @@ -4790,6 +5704,59 @@ "tslib": "^1.10.0" } }, + "download": { + "version": "6.2.5", + "resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz", + "integrity": "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==", + "dev": true, + "optional": true, + "requires": { + "caw": "^2.0.0", + "content-disposition": "^0.5.2", + "decompress": "^4.0.0", + "ext-name": "^5.0.0", + "file-type": "5.2.0", + "filenamify": "^2.0.0", + "get-stream": "^3.0.0", + "got": "^7.0.0", + "make-dir": "^1.0.0", + "p-event": "^1.0.0", + "pify": "^3.0.0" + }, + "dependencies": { + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true, + "optional": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true, + "optional": true + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "optional": true, + "requires": { + "pify": "^3.0.0" + } + } + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true, + "optional": true + }, "duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", @@ -4856,9 +5823,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.518", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.518.tgz", - "integrity": "sha512-IspiwXYDKZMxo+qc3Vof4WtwbG9BMDbJfati8PYj7uS4DJmJ67pwjCKZxlTBSAuCZSMcbRnj2Xz2H14uiKT7bQ==" + "version": "1.3.523", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.523.tgz", + "integrity": "sha512-D4/3l5DpciddD92IDRtpLearQSGzly8FwBJv+nITvLH8YJrFabpDFe4yuiOJh2MS4/EsXqyQTXyw1toeYPtshQ==" }, "elliptic": { "version": "6.5.3", @@ -4905,6 +5872,24 @@ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -5202,6 +6187,85 @@ "safe-buffer": "^5.1.1" } }, + "exec-buffer": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz", + "integrity": "sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==", + "dev": true, + "optional": true, + "requires": { + "execa": "^0.7.0", + "p-finally": "^1.0.0", + "pify": "^3.0.0", + "rimraf": "^2.5.4", + "tempfile": "^2.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "optional": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "optional": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true, + "optional": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "optional": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true, + "optional": true + } + } + }, "exec-sh": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", @@ -5221,6 +6285,25 @@ "strip-eof": "^1.0.0" } }, + "executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "optional": true, + "requires": { + "pify": "^2.2.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "optional": true + } + } + }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -5467,6 +6550,27 @@ } } }, + "ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "dev": true, + "optional": true, + "requires": { + "mime-db": "^1.28.0" + } + }, + "ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "dev": true, + "optional": true, + "requires": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -5560,6 +6664,20 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "fast-glob": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -5570,6 +6688,15 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, + "fastq": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", + "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, "faye-websocket": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", @@ -5587,20 +6714,110 @@ "bser": "2.1.1" } }, + "fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "requires": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + } + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "optional": true, + "requires": { + "pend": "~1.2.0" + } + }, "figgy-pudding": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", "dev": true }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "optional": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, + "file-loader": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.0.0.tgz", + "integrity": "sha512-/aMOAYEFXDdjG0wytpTL5YQLfZnnTmLNjn+AIrJ/6HVnTfDqLsVKUUwkDf4I4kgex36BvjuXEn/TX9B/1ESyqQ==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } + } + }, "file-saver": { "version": "github:eligrey/FileSaver.js#e865e37af9f9947ddcced76b549e27dc45c1cb2e", "from": "github:eligrey/FileSaver.js#1.3.8" }, - "filefy": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/filefy/-/filefy-0.1.10.tgz", - "integrity": "sha512-VgoRVOOY1WkTpWH+KBy8zcU1G7uQTVsXqhWEgzryB9A5hg2aqCyZ6aQ/5PSzlqM5+6cnVrX6oYV0XqD3HZSnmQ==" + "file-type": { + "version": "12.4.2", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", + "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==", + "dev": true + }, + "filefy": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/filefy/-/filefy-0.1.10.tgz", + "integrity": "sha512-VgoRVOOY1WkTpWH+KBy8zcU1G7uQTVsXqhWEgzryB9A5hg2aqCyZ6aQ/5PSzlqM5+6cnVrX6oYV0XqD3HZSnmQ==" + }, + "filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", + "dev": true, + "optional": true + }, + "filenamify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", + "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", + "dev": true, + "optional": true, + "requires": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" + } }, "fill-range": { "version": "7.0.1", @@ -5731,6 +6948,16 @@ "path-exists": "^4.0.0" } }, + "find-versions": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", + "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", + "dev": true, + "optional": true, + "requires": { + "semver-regex": "^2.0.0" + } + }, "findup-sync": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", @@ -5983,6 +7210,13 @@ } } }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "optional": true + }, "fs-write-stream-atomic": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", @@ -6067,6 +7301,23 @@ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" }, + "get-proxy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", + "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", + "dev": true, + "optional": true, + "requires": { + "npm-conf": "^1.1.0" + } + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true, + "optional": true + }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -6088,6 +7339,19 @@ "assert-plus": "^1.0.0" } }, + "gifsicle": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-4.0.1.tgz", + "integrity": "sha512-A/kiCLfDdV+ERV/UB+2O41mifd+RxH8jlRG8DMxZO84Bma/Fw0htqZ+hY2iaalLRNyUu7tYZQslqUBJxBggxbg==", + "dev": true, + "optional": true, + "requires": { + "bin-build": "^3.0.0", + "bin-wrapper": "^4.0.0", + "execa": "^1.0.0", + "logalot": "^2.0.0" + } + }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -6106,7 +7370,6 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "dev": true, - "optional": true, "requires": { "is-glob": "^4.0.1" } @@ -6182,6 +7445,38 @@ } } }, + "got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "dev": true, + "optional": true, + "requires": { + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true, + "optional": true + } + } + }, "graceful-fs": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", @@ -6246,11 +7541,28 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "dev": true, + "optional": true + }, "has-symbols": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dev": true, + "optional": true, + "requires": { + "has-symbol-support-x": "^1.4.1" + } + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -6417,6 +7729,13 @@ } } }, + "html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", + "dev": true, + "optional": true + }, "html-element-map": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.2.0.tgz", @@ -6517,6 +7836,13 @@ "readable-stream": "^3.1.1" } }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true, + "optional": true + }, "http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", @@ -6753,6 +8079,157 @@ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "image-webpack-loader": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/image-webpack-loader/-/image-webpack-loader-6.0.0.tgz", + "integrity": "sha512-H5qZ+DH88A4mW9CPJpa7VH8B2dxLbzqiMH+BQYtMw8v2jaFwZPQOS/NfkSaJMz76dsi/uw+0LY4uHR1iK6hq8g==", + "dev": true, + "requires": { + "imagemin": "^7.0.0", + "imagemin-gifsicle": "^6.0.1", + "imagemin-mozjpeg": "^8.0.0", + "imagemin-optipng": "^7.0.0", + "imagemin-pngquant": "^8.0.0", + "imagemin-svgo": "^7.0.0", + "imagemin-webp": "^5.1.0", + "loader-utils": "^1.2.3", + "object-assign": "^4.1.1" + } + }, + "imagemin": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-7.0.1.tgz", + "integrity": "sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==", + "dev": true, + "requires": { + "file-type": "^12.0.0", + "globby": "^10.0.0", + "graceful-fs": "^4.2.2", + "junk": "^3.1.0", + "make-dir": "^3.0.0", + "p-pipe": "^3.0.0", + "replace-ext": "^1.0.0" + }, + "dependencies": { + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + } + } + } + }, + "imagemin-gifsicle": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-6.0.1.tgz", + "integrity": "sha512-kuu47c6iKDQ6R9J10xCwL0lgs0+sMz3LRHqRcJ2CRBWdcNmo3T5hUaM8hSZfksptZXJLGKk8heSAvwtSdB1Fng==", + "dev": true, + "optional": true, + "requires": { + "exec-buffer": "^3.0.0", + "gifsicle": "^4.0.0", + "is-gif": "^3.0.0" + } + }, + "imagemin-mozjpeg": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.0.tgz", + "integrity": "sha512-+EciPiIjCb8JWjQNr1q8sYWYf7GDCNDxPYnkD11TNIjjWNzaV+oTg4DpOPQjl5ZX/KRCPMEgS79zLYAQzLitIA==", + "dev": true, + "optional": true, + "requires": { + "execa": "^1.0.0", + "is-jpg": "^2.0.0", + "mozjpeg": "^6.0.0" + } + }, + "imagemin-optipng": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-7.1.0.tgz", + "integrity": "sha512-JNORTZ6j6untH7e5gF4aWdhDCxe3ODsSLKs/f7Grewy3ebZpl1ZsU+VUTPY4rzeHgaFA8GSWOoA8V2M3OixWZQ==", + "dev": true, + "optional": true, + "requires": { + "exec-buffer": "^3.0.0", + "is-png": "^2.0.0", + "optipng-bin": "^6.0.0" + } + }, + "imagemin-pngquant": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/imagemin-pngquant/-/imagemin-pngquant-8.0.0.tgz", + "integrity": "sha512-PVq0diOxO+Zyq/zlMCz2Pfu6mVLHgiT1GpW702OwVlnej+NhS6ZQegYi3OFEDW8d7GxouyR5e8R+t53SMciOeg==", + "dev": true, + "optional": true, + "requires": { + "execa": "^1.0.0", + "is-png": "^2.0.0", + "is-stream": "^2.0.0", + "ow": "^0.13.2", + "pngquant-bin": "^5.0.0" + }, + "dependencies": { + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true, + "optional": true + } + } + }, + "imagemin-svgo": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-7.1.0.tgz", + "integrity": "sha512-0JlIZNWP0Luasn1HT82uB9nU9aa+vUj6kpT+MjPW11LbprXC+iC4HDwn1r4Q2/91qj4iy9tRZNsFySMlEpLdpg==", + "dev": true, + "optional": true, + "requires": { + "is-svg": "^4.2.1", + "svgo": "^1.3.2" + } + }, + "imagemin-webp": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/imagemin-webp/-/imagemin-webp-5.1.0.tgz", + "integrity": "sha512-BsPTpobgbDPFBBsI3UflnU/cpIVa15qInEDBcYBw16qI/6XiB4vDF/dGp9l4aM3pfFDDYqR0mANMcKpBD7wbCw==", + "dev": true, + "optional": true, + "requires": { + "cwebp-bin": "^5.0.0", + "exec-buffer": "^3.0.0", + "is-cwebp-readable": "^2.0.1" + } + }, + "import-lazy": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz", + "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==", + "dev": true, + "optional": true + }, "import-local": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", @@ -6820,6 +8297,17 @@ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true }, + "into-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", + "dev": true, + "optional": true, + "requires": { + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" + } + }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -6913,6 +8401,25 @@ "ci-info": "^2.0.0" } }, + "is-cwebp-readable": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-cwebp-readable/-/is-cwebp-readable-2.0.1.tgz", + "integrity": "sha1-r7k7DAq9CiUQEBauM66ort+SbSY=", + "dev": true, + "optional": true, + "requires": { + "file-type": "^4.3.0" + }, + "dependencies": { + "file-type": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", + "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", + "dev": true, + "optional": true + } + } + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -6970,6 +8477,13 @@ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, + "is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true, + "optional": true + }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -6980,6 +8494,25 @@ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" }, + "is-gif": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-gif/-/is-gif-3.0.0.tgz", + "integrity": "sha512-IqJ/jlbw5WJSNfwQ/lHEDXF8rxhRgF6ythk2oiEvhpG29F704eX9NO6TvPfMiq9DrbwgcEDnETYNcZDPewQoVw==", + "dev": true, + "optional": true, + "requires": { + "file-type": "^10.4.0" + }, + "dependencies": { + "file-type": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz", + "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==", + "dev": true, + "optional": true + } + } + }, "is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", @@ -6994,6 +8527,20 @@ "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", "integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=" }, + "is-jpg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-2.0.0.tgz", + "integrity": "sha1-LhmX+m6RZuqsAkLarkQ0A+TvHZc=", + "dev": true, + "optional": true + }, + "is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", + "dev": true, + "optional": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -7004,6 +8551,13 @@ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==" }, + "is-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", + "dev": true, + "optional": true + }, "is-path-cwd": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", @@ -7028,6 +8582,13 @@ "path-is-inside": "^1.0.2" } }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true, + "optional": true + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -7036,6 +8597,13 @@ "isobject": "^3.0.1" } }, + "is-png": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-png/-/is-png-2.0.0.tgz", + "integrity": "sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g==", + "dev": true, + "optional": true + }, "is-potential-custom-element-name": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz", @@ -7049,6 +8617,13 @@ "has-symbols": "^1.0.1" } }, + "is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "dev": true, + "optional": true + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -7064,6 +8639,16 @@ "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=" }, + "is-svg": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-4.2.1.tgz", + "integrity": "sha512-PHx3ANecKsKNl5y5+Jvt53Y4J7MfMpbNZkv384QNiswMKAWIbvcqbPz+sYbFKJI8Xv3be01GSFniPmoaP+Ai5A==", + "dev": true, + "optional": true, + "requires": { + "html-comment-regex": "^1.1.2" + } + }, "is-symbol": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", @@ -7077,6 +8662,13 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true, + "optional": true + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -7106,6 +8698,15 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -7185,6 +8786,17 @@ "istanbul-lib-report": "^3.0.0" } }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, + "optional": true, + "requires": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + } + }, "jest": { "version": "26.2.2", "resolved": "https://registry.npmjs.org/jest/-/jest-26.2.2.tgz", @@ -7758,9 +9370,9 @@ } }, "@types/yargs": { - "version": "13.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.9.tgz", - "integrity": "sha512-xrvhZ4DZewMDhoH1utLtOAwYQy60eYFoXeje30TzM3VOvQlBwQaEpKFq5m34k1wOw2AKIi2pwtiAjdmhvlBUzg==", + "version": "13.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.10.tgz", + "integrity": "sha512-MU10TSgzNABgdzKvQVW1nuuT+sgBMWeXNc3XOs5YXV5SDAK+PPja2eUuBNB9iqElu03xyEDqlnGw0jgl4nbqGQ==", "requires": { "@types/yargs-parser": "*" } @@ -9692,6 +11304,13 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true, + "optional": true + }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -9903,6 +11522,22 @@ } } }, + "junk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", + "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", + "dev": true + }, + "keyv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "dev": true, + "optional": true, + "requires": { + "json-buffer": "3.0.0" + } + }, "killable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", @@ -10089,12 +11724,30 @@ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" }, + "logalot": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz", + "integrity": "sha1-X46MkNME7fElMJUaVVSruMXj9VI=", + "dev": true, + "optional": true, + "requires": { + "figures": "^1.3.5", + "squeak": "^1.0.0" + } + }, "loglevel": { "version": "1.6.8", "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz", "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==", "dev": true }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true, + "optional": true + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -10103,6 +11756,17 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "optional": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, "lower-case": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz", @@ -10112,6 +11776,38 @@ "tslib": "^1.10.0" } }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "optional": true + }, + "lpad-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz", + "integrity": "sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=", + "dev": true, + "optional": true, + "requires": { + "get-stdin": "^4.0.1", + "indent-string": "^2.1.0", + "longest": "^1.0.0", + "meow": "^3.3.0" + }, + "dependencies": { + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "optional": true, + "requires": { + "repeating": "^2.0.0" + } + } + } + }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -10149,6 +11845,13 @@ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true, + "optional": true + }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", @@ -10194,6 +11897,13 @@ "safe-buffer": "^5.1.2" } }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true, + "optional": true + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -10241,6 +11951,155 @@ } } }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "optional": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "optional": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "optional": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "optional": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "optional": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "optional": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "optional": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "optional": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "optional": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "optional": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "optional": true, + "requires": { + "get-stdin": "^4.0.1" + } + } + } + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -10252,6 +12111,12 @@ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -10309,6 +12174,13 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "optional": true + }, "min-document": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", @@ -10432,6 +12304,18 @@ } } }, + "mozjpeg": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/mozjpeg/-/mozjpeg-6.0.1.tgz", + "integrity": "sha512-9Z59pJMi8ni+IUvSH5xQwK5tNLw7p3dwDNCZ3o1xE+of3G5Hc/yOz6Ue/YuLiBXU3ZB5oaHPURyPdqfBX/QYJA==", + "dev": true, + "optional": true, + "requires": { + "bin-build": "^3.0.0", + "bin-wrapper": "^4.0.0", + "logalot": "^2.1.0" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -10515,6 +12399,15 @@ "tslib": "^1.10.0" } }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, "node-forge": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", @@ -10648,6 +12541,48 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, + "normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "dev": true, + "optional": true, + "requires": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + }, + "dependencies": { + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, + "optional": true + }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "optional": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + } + } + }, + "npm-conf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "dev": true, + "optional": true, + "requires": { + "config-chain": "^1.1.11", + "pify": "^3.0.0" + } + }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -10780,6 +12715,24 @@ "es-abstract": "^1.17.0-next.1" } }, + "object.omit": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-3.0.0.tgz", + "integrity": "sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ==", + "requires": { + "is-extendable": "^1.0.0" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -10877,6 +12830,18 @@ "word-wrap": "~1.2.3" } }, + "optipng-bin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-6.0.0.tgz", + "integrity": "sha512-95bB4y8IaTsa/8x6QH4bLUuyvyOoGBCLDA7wOgDL8UFqJpSUh1Hob8JRJhit+wC1ZLN3tQ7mFt7KuBj0x8F2Wg==", + "dev": true, + "optional": true, + "requires": { + "bin-build": "^3.0.0", + "bin-wrapper": "^4.0.0", + "logalot": "^2.0.0" + } + }, "original": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", @@ -10892,16 +12857,69 @@ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, + "os-filter-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz", + "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==", + "dev": true, + "optional": true, + "requires": { + "arch": "^2.1.0" + } + }, + "ow": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/ow/-/ow-0.13.2.tgz", + "integrity": "sha512-9wvr+q+ZTDRvXDjL6eDOdFe5WUl/wa5sntf9kAolxqSpkBqaIObwLgFCGXSJASFw+YciXnOVtDWpxXa9cqV94A==", + "dev": true, + "optional": true, + "requires": { + "type-fest": "^0.5.1" + }, + "dependencies": { + "type-fest": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", + "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==", + "dev": true, + "optional": true + } + } + }, + "p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", + "dev": true, + "optional": true + }, "p-each-series": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.1.0.tgz", "integrity": "sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ==" }, + "p-event": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz", + "integrity": "sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=", + "dev": true, + "optional": true, + "requires": { + "p-timeout": "^1.1.1" + } + }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, + "p-is-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "dev": true, + "optional": true + }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -10924,6 +12942,29 @@ "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true }, + "p-map-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz", + "integrity": "sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=", + "dev": true, + "optional": true, + "requires": { + "p-reduce": "^1.0.0" + } + }, + "p-pipe": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", + "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", + "dev": true + }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "dev": true, + "optional": true + }, "p-retry": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", @@ -10933,6 +12974,16 @@ "retry": "^0.12.0" } }, + "p-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", + "dev": true, + "optional": true, + "requires": { + "p-finally": "^1.0.0" + } + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -11125,6 +13176,13 @@ "sha.js": "^2.4.8" } }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true, + "optional": true + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -11176,6 +13234,44 @@ "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" }, + "pngquant-bin": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/pngquant-bin/-/pngquant-bin-5.0.2.tgz", + "integrity": "sha512-OLdT+4JZx5BqE1CFJkrvomYV0aSsv6x2Bba+aWaVc0PMfWlE+ZByNKYAdKeIqsM4uvW1HOSEHnf8KcOnykPNxA==", + "dev": true, + "optional": true, + "requires": { + "bin-build": "^3.0.0", + "bin-wrapper": "^4.0.1", + "execa": "^0.10.0", + "logalot": "^2.0.0" + }, + "dependencies": { + "execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "dev": true, + "optional": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true, + "optional": true + } + } + }, "popper.js": { "version": "1.16.1-lts", "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1-lts.tgz", @@ -11299,6 +13395,13 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true, + "optional": true + }, "pretty-error": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", @@ -11362,6 +13465,14 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -11411,6 +13522,13 @@ "warning": "^4.0.0" } }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true, + "optional": true + }, "proxy-addr": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", @@ -11427,6 +13545,13 @@ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "dev": true }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true, + "optional": true + }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -11502,6 +13627,18 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "optional": true, + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -11641,6 +13778,16 @@ "warning": "^4.0.3" } }, + "react-cursor-position": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/react-cursor-position/-/react-cursor-position-2.5.3.tgz", + "integrity": "sha512-5eeHSK9QQcs4PromnmgVrlUtKTh2t22zEi4KXts1KmGNvNQgkBKqj/N0Jf+qzG0TVF2PevnCQMqgWzHQk2eFXA==", + "requires": { + "object-assign": "^4.1.1", + "object.omit": "^3.0.0", + "prop-types": "^15.6.0" + } + }, "react-dom": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz", @@ -11681,6 +13828,37 @@ } } }, + "react-image-magnify": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/react-image-magnify/-/react-image-magnify-2.7.4.tgz", + "integrity": "sha512-2sE7vr/xYJK7CxNaL6ZQ0OYwH542BBOuALD+lqgTOFQ4OfA1xmD+xyg7wQpO1mxzuyWSccxTgDayncdGfI2y6w==", + "requires": { + "clamp": "1.0.1", + "detect-it": "3.0.3", + "fast-deep-equal": "1.0.0", + "object-assign": "4.1.1", + "prop-types": "15.6.0", + "react-cursor-position": "2.5.3", + "react-required-if": "1.0.1" + }, + "dependencies": { + "fast-deep-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", + "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" + }, + "prop-types": { + "version": "15.6.0", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz", + "integrity": "sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY=", + "requires": { + "fbjs": "^0.8.16", + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + } + } + }, "react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -11718,6 +13896,11 @@ "react-is": "^16.9.0" } }, + "react-required-if": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/react-required-if/-/react-required-if-1.0.1.tgz", + "integrity": "sha1-9B0Gvrt1NGwgbNHejcDvW3yPmr0=" + }, "react-router": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", @@ -11992,6 +14175,22 @@ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "optional": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "dev": true + }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -12134,6 +14333,16 @@ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "optional": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -12145,6 +14354,12 @@ "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", "dev": true }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rgbcolor": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", @@ -12190,6 +14405,12 @@ "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" }, + "run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", + "dev": true + }, "run-queue": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", @@ -12386,6 +14607,16 @@ "integrity": "sha1-8aAymzCLIh+uN7mXTz1XjQypmeM=", "dev": true }, + "seek-bzip": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", + "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", + "dev": true, + "optional": true, + "requires": { + "commander": "^2.8.1" + } + }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -12406,6 +14637,23 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, + "semver-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", + "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", + "dev": true, + "optional": true + }, + "semver-truncate": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz", + "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=", + "dev": true, + "optional": true, + "requires": { + "semver": "^5.3.0" + } + }, "send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", @@ -12558,8 +14806,7 @@ "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, "setprototypeof": { "version": "1.1.1", @@ -12792,6 +15039,26 @@ } } }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "optional": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "dev": true, + "optional": true, + "requires": { + "sort-keys": "^1.0.0" + } + }, "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -12901,6 +15168,48 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, + "squeak": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz", + "integrity": "sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=", + "dev": true, + "optional": true, + "requires": { + "chalk": "^1.0.0", + "console-stream": "^0.1.1", + "lpad-align": "^1.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "optional": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "optional": true + } + } + }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", @@ -12926,6 +15235,13 @@ "figgy-pudding": "^3.5.1" } }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true, + "optional": true + }, "stack-utils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.2.tgz", @@ -13067,6 +15383,13 @@ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true, + "optional": true + }, "string-length": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", @@ -13169,6 +15492,16 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" }, + "strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "dev": true, + "optional": true, + "requires": { + "is-natural-number": "^4.0.1" + } + }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", @@ -13187,6 +15520,16 @@ "min-indent": "^1.0.0" } }, + "strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dev": true, + "optional": true, + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, "style-loader": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.2.1.tgz", @@ -13242,6 +15585,61 @@ } } }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "dev": true, + "optional": true, + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "dependencies": { + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dev": true, + "optional": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-what": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.3.0.tgz", + "integrity": "sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg==", + "dev": true, + "optional": true + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "optional": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + } + } + }, "symbol-observable": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", @@ -13258,6 +15656,77 @@ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true }, + "tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dev": true, + "optional": true, + "requires": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", + "dev": true, + "optional": true + }, + "tempfile": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz", + "integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=", + "dev": true, + "optional": true, + "requires": { + "temp-dir": "^1.0.0", + "uuid": "^3.0.1" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true, + "optional": true + } + } + }, "terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", @@ -13413,6 +15882,13 @@ "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==" }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true, + "optional": true + }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -13455,6 +15931,13 @@ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true, + "optional": true + }, "timers-browserify": { "version": "2.0.11", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", @@ -13485,6 +15968,13 @@ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", "dev": true }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "dev": true, + "optional": true + }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -13551,6 +16041,23 @@ "punycode": "^2.1.1" } }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true, + "optional": true + }, + "trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "dev": true, + "optional": true, + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, "tslib": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", @@ -13618,6 +16125,35 @@ "is-typedarray": "^1.0.0" } }, + "ua-parser-js": { + "version": "0.7.21", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz", + "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==" + }, + "unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "optional": true, + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + }, + "dependencies": { + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "dev": true, + "optional": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + } + } + }, "uncontrollable": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.1.1.tgz", @@ -13703,6 +16239,13 @@ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "dev": true }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true, + "optional": true + }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -13792,6 +16335,23 @@ "requires-port": "^1.0.0" } }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "optional": true, + "requires": { + "prepend-http": "^1.0.1" + } + }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", + "dev": true, + "optional": true + }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -15121,6 +17681,11 @@ "iconv-lite": "0.4.24" } }, + "whatwg-fetch": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.4.0.tgz", + "integrity": "sha512-rsum2ulz2iuZH08mJkT0Yi6JnKhwdw4oeyMjokgxd+mmqYSd9cPpOQf01TIWgjxG/U4+QR+AwKq6lSbXVxkyoQ==" + }, "whatwg-mimetype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", @@ -15291,6 +17856,17 @@ "camelcase": "^5.0.0", "decamelize": "^1.2.0" } + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "optional": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } } } } diff --git a/package.json b/package.json index 1257f12..f8baa87 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,10 @@ "@babel/core": "^7.10.5", "@babel/preset-env": "^7.10.4", "@babel/preset-react": "^7.10.4", + "@fortawesome/fontawesome-svg-core": "^1.2.30", + "@fortawesome/free-brands-svg-icons": "^5.14.0", + "@fortawesome/free-solid-svg-icons": "^5.14.0", + "@fortawesome/react-fontawesome": "^0.1.11", "@material-ui/core": "^4.11.0", "@testing-library/jest-dom": "^5.11.1", "axios": "^0.19.2", @@ -42,6 +46,7 @@ "react": "^16.13.1", "react-bootstrap": "^1.3.0", "react-dom": "^16.13.1", + "react-image-magnify": "^2.7.4", "react-router-dom": "^5.2.0", "react-test-renderer": "^16.13.1", "request": "^2.88.2" @@ -55,9 +60,11 @@ "css-loader": "^3.6.0", "enzyme": "^3.11.0", "enzyme-adapter-react-16": "^1.15.2", + "file-loader": "^6.0.0", "html-webpack-plugin": "^4.3.0", "http-server": "^0.12.3", "identity-obj-proxy": "^3.0.0", + "image-webpack-loader": "^6.0.0", "jest": "^26.1.0", "jest-cli": "^26.1.0", "jest-enzyme": "^7.1.2", diff --git a/public/images/placement-holder.png b/public/images/placement-holder.png new file mode 100644 index 0000000000000000000000000000000000000000..6018d197116e4e4afea7669a96e361164a571169 GIT binary patch literal 19674 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 CNHVSf literal 0 HcmV?d00001 diff --git a/public/images/preFoot.JPG b/public/images/preFoot.JPG new file mode 100644 index 0000000000000000000000000000000000000000..c2c69b4ffde09599844ccaa64a107bd398241d99 GIT binary patch literal 86282 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ªS>gggB&WLGkEUCQss^wk+$?~He0~MJV$ay4W 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

%o@Km>U4DSXS7#sITw(sJ5NaPX>AUiJwzpv&bXu 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 nb7O@BwEw43!+-Dn=b8Ltm7qVmhJQc** + + + +

diff --git a/src/Css/App.css b/src/Css/App.css new file mode 100644 index 0000000..1edddb6 --- /dev/null +++ b/src/Css/App.css @@ -0,0 +1,9 @@ +.app > * { + background: #eee; + /* padding: 1em; */ + box-sizing: border-box; +} + +.app > *:nth-child(odd) { + background: #ddd; +} diff --git a/src/components/Answers.js b/src/components/Answers.js index c493484..3eec1ce 100644 --- a/src/components/Answers.js +++ b/src/components/Answers.js @@ -1,14 +1,53 @@ import React, { Component } from 'react' -import SingleAnswer from './SingleAnswer' +import QAndADataService from '../service/QAndADataService' + export default class Answers extends Component { + constructor(props){ + super(props) + console.log("Hey! Props.") + console.log(props) + } + + state = { + answers:[], + allAnswers:[], + sortedAnswers:[], + } + + refreshAnswers = this.refreshAnswers.bind(this) + + componentDidMount() { + this.refreshAnswers(); + } + + refreshAnswers() { + QAndADataService.retrieveAllAnswers() + .then( + answers => { + this.setState({ answers: answers.data }) + console.log("1") + console.log(answers.data) + console.log("2") + console.log(this.state.allAnswers) + console.log("3") + console.log(this.state.answers) + this.state.sortedAnswers = this.state.allAnswers.map((a) => a.questionid) + console.log("Hello!") + console.log(this.state.allAnswers) + } + ) + } + render() { return (
-

Answer:

-
    - -
+ {this.state.answers.map((a) => +
+

Answer:

+

{a.answer}

+
+ )}
) } diff --git a/src/components/App.jsx b/src/components/App.jsx index 47ddee9..48dd097 100644 --- a/src/components/App.jsx +++ b/src/components/App.jsx @@ -1,25 +1,41 @@ -import React, { Component } from 'react'; -import CustomerReviewsContainer from './CustomerReviews/CustomerReviews'; -import CWBA from './CustomerWhoBoughtAlsoCmpnt/CustomersWhoBoughtAlsoAll' -import QAcomponent from './QAcomponent'; -import ComparisonGrid from './ComparisonGrid/ComparisonGrid.jsx'; -import CImagesAll from './CustomerImageCmpnt/CustomerImagesAll'; -import Appples from './RatingSummary/Appples'; +import React, { Component } from "react"; +import Product from "./productVariant/Product.jsx"; +import CustomerReviewsContainer from "./CustomerReviews/CustomerReviews"; +import CWBA from "./CustomerWhoBoughtAlsoCmpnt/CustomersWhoBoughtAlsoAll"; +import QAcomponent from "./QAcomponent"; +import ComparisonGrid from "./ComparisonGrid/ComparisonGrid.jsx"; +import CImagesAll from "./CustomerImageCmpnt/CustomerImagesAll"; +import Appples from "./RatingSummary/Appples"; +import PhotoGallery from "./PhotoGallery/PhotoGallery"; +import TopBar from "./TopBar/TopBar"; +import BlueSecondTopLine from "./SecondTopLine/BlueSecondTopline"; +import Footer from "./Footer/Footer"; + +// import "../Css/App.css"; class App extends Component { - render(){ - return( -
- - - - - - -
- ) - } + render() { + return ( +
+
+ +
+ + + +
+ {/*place holder: replace when ready*/} +
+ + + + + + +
+
+ ); + } } export default App; - diff --git a/src/components/ComparisonGrid/ComparisonGrid.jsx b/src/components/ComparisonGrid/ComparisonGrid.jsx index f96d5c4..3a8b2ea 100644 --- a/src/components/ComparisonGrid/ComparisonGrid.jsx +++ b/src/components/ComparisonGrid/ComparisonGrid.jsx @@ -1,5 +1,4 @@ -import React from 'react'; -import { makeStyles } from "@material-ui/core/styles"; +import React from "react"; import Table from "@material-ui/core/Table"; import TableBody from "@material-ui/core/TableBody"; import TableCell from "@material-ui/core/TableCell"; @@ -7,59 +6,88 @@ import TableContainer from "@material-ui/core/TableContainer"; import TableHead from "@material-ui/core/TableHead"; import TableRow from "@material-ui/core/TableRow"; import Paper from "@material-ui/core/Paper"; -import ComparisonItem from "./ComparisonItem.jsx"; +import axios from "axios"; +import { withStyles } from "@material-ui/core/styles"; -const useStyles = makeStyles({ - table: { - minWidth: 650, - }, +const styles = theme => ({ + root: { + backgroundColor: "red" + } }); -function createData(name, power, autoPrograms, manPrograms, crushing) { - return { name, power, autoPrograms, manPrograms, crushing }; -} +class ComparisonGrid extends React.Component { + + _isMounted = false; + + constructor(props) { + super(props); + this.state = { + items: [], + }; + } + componentDidMount() { -const rows = [ - createData("Power", 1100, 1000, 1200, 1300), - createData("Automatic Modes", 0, 4, 4, 0), - createData("Manual Modes", 4, 1, 0, 4), - createData("Price ($USD)", 305, 307, 607, 403), - createData("Rating", 2, 3, 5, 3), - createData("Hello", 2, 3, 5, 3), -]; + this._isMounted = true; -export default function ComparisonGrid() { - const classes = useStyles(); + axios.get("http://localhost:8080/all/products/").then((response) => { + if (this._isMounted) { + this.setState({ + items: response.data, + }); + } + }); + } - return ( -
- - - - - - Category - Product #1 - Product #2 - Product #3 - Product #4 - - - - {rows.map((row) => ( - - - {row.name} - - {row.power} - {row.autoPrograms} - {row.manPrograms} - {row.crushing} + componentWillUnmount() { + this._isMounted = false; + } + + render() { + console.log(this.state.items); + const { comparisonGrid } = this.props; + return ( +
+ +
+ + + Product + {this.state.items.map((item) => ( + {item.itemName} + ))} + + + + + ID + {this.state.items.map((item) => { + return {item.itemId} + })} - ))} - -
-
-
- ); + + About + {this.state.items.map((item) => { + return {item.itemAbout} + })} + + + Title + {this.state.items.map((item) => { + return {item.itemTitle} + })} + + + Price + {this.state.items.map((item) => { + return {item.itemPrice} + })} + + + + + + ); + } } + +export default withStyles(styles, { withTheme: true })(ComparisonGrid); diff --git a/src/components/ComparisonGrid/ComparisonItem.jsx b/src/components/ComparisonGrid/ComparisonItem.jsx deleted file mode 100644 index 78521e1..0000000 --- a/src/components/ComparisonGrid/ComparisonItem.jsx +++ /dev/null @@ -1,5 +0,0 @@ -import React, { Component } from 'react'; - -export default function ComparisonItem() { - return

Hello

; -} \ No newline at end of file diff --git a/src/components/CustomerImageCmpnt/CustomerImageIndividual.jsx b/src/components/CustomerImageCmpnt/CustomerImageIndividual.jsx index 92eb60b..91501b1 100644 --- a/src/components/CustomerImageCmpnt/CustomerImageIndividual.jsx +++ b/src/components/CustomerImageCmpnt/CustomerImageIndividual.jsx @@ -1,43 +1,12 @@ import React, { Component } from 'react'; -import CustomerImageDataService from '../../service/CustomerImageDataService' - - - class CImage extends Component { - - constructor(props) { - super(props) - this.state = { - response: null, - } - this.refreshCourses = this.refreshCourses.bind(this) - } - - componentDidMount() { - this.refreshCourses(); - } - - refreshCourses() { //retrieve data currently set to one id. not dynamic - CustomerImageDataService.retrieveCustomerImage(1) - .then( - response => { - this.setState({ response: response.data }) - } - ) - } - render(){ return( -
- test + customer provided image -
) } } diff --git a/src/components/CustomerImageCmpnt/CustomerImagesAll.jsx b/src/components/CustomerImageCmpnt/CustomerImagesAll.jsx index 5e383e7..7b0724f 100644 --- a/src/components/CustomerImageCmpnt/CustomerImagesAll.jsx +++ b/src/components/CustomerImageCmpnt/CustomerImagesAll.jsx @@ -1,15 +1,44 @@ import React, { Component } from 'react'; import CImage from "./CustomerImageIndividual" import '../CustomerWhoBoughtAlsoCmpnt/CWBA.css'; +import CustomerImageDataService from '../../service/CustomerImageDataService' class CImagesAll extends Component { + constructor(props) { + super(props) + this.state = { + imageArray: [], + itemId: null, + } + this.refreshCourses = this.refreshCourses.bind(this) + } + componentDidMount() { + this.refreshCourses(); + } + + refreshCourses() { + CustomerImageDataService.retrieveCustomerImage(1) + .then( + response => { + this.setState({ itemId: response.data.id, + imageArray: response.data.imageLinks.split(',') + }) + } + )} render(){ + const listImageArray = this.state.imageArray.slice(0, 4).map((item)=> + + ); return(

Customer Images

- +
{listImageArray}
diff --git a/src/components/CustomerReviews/CustomerImages.jsx b/src/components/CustomerReviews/CustomerImages.jsx index a285428..4d898cc 100644 --- a/src/components/CustomerReviews/CustomerImages.jsx +++ b/src/components/CustomerReviews/CustomerImages.jsx @@ -1,13 +1,12 @@ import React, { Component } from 'react'; +import CImagesAll from '../CustomerImageCmpnt/CustomerImagesAll'; class CustomerImages extends Component { render() { return (
-

Customer Images

-
- +
); } diff --git a/src/components/CustomerReviews/CustomerReviews.css b/src/components/CustomerReviews/CustomerReviews.css index bb6134b..41d1870 100644 --- a/src/components/CustomerReviews/CustomerReviews.css +++ b/src/components/CustomerReviews/CustomerReviews.css @@ -1,17 +1,110 @@ -/* img { - border: 4px solid red; -} */ - /* .review-mention { margin-bottom: 26px!important; } */ -.button { - padding: 10px; - color: #111111; - background: #D7E8EA; +/* #rating-icon { + border-color: #d8650d; +} */ + +.review-product { + margin-top: 50px; + +} + +#review-feature { + margin-top: 450px; +} + +.vp { + color: #c45500!important; + font-size: 12px!important; + line-height: 16px!important; + font-weight: 700!important; +} + +.review-date { + color: #565959!important; + font-size: 14px!important; + line-height: 20px!important; +} + +.review-title { + color: #0F1111!important; + font-size: 14px!important; + line-height: 20px!important; + font-weight: 700!important; +} + +.star-icon { + background-position: -53px -368px; + width: 80px; + height: 18px; + position: relative; + vertical-align: text-top; + background-image: url(https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIIcon-sprite_1x-e943461…._V2_.png); + background-size: 400px 900px; + background-repeat: no-repeat; + /* display: inline-block; */ +} + +#button { + padding: 10px; + color: #111111; + background: #D7E8EA; + width: 100px; + height:50px; +} + +#review-button { + padding: 5px; + background-color: transparent; + color: #111111; + /* width: 200px; + height:30px; */ + width: 100%; + height: 100%; + border: 1px solid gray; + font-size: 13px; + line-height: 20px; + margin: 0; + outline: 0; + text-align: center; + white-space: nowrap; +} + +#count-btn { + color: #767676!important; + font-size: 13px!important; + line-height: 19px!important; +} + +#helpful-button { + padding: 10px; + color: #111111; + background: #E7E9EC; + width: 77px; + /* height:50px; */ + display: block; + box-sizing: border-box; + font-size: 13px; + text-align: center; + border: 1px solid gray; + /* line-height: 29px; */ +} + +#right-grid { + padding: 100px; + position: relative; + bottom: 100px; +} + +#left-grid { + padding: 50px; + position: relative; + bottom: 50px; } + /* .profile-avatar-img { border-radius: 34px; border: 2px solid #FFF; @@ -28,6 +121,7 @@ unicode-bidi: isolate; line-height: 19px; font-size: 15px; + margin-left: 5px; } .dropdown { @@ -35,21 +129,23 @@ display: inline-block; } - .dropbtn { + #dropbtn { background-color: transparent; border: 1px solid gray; font: 14px "Amazon Ember", Arial, sans-serif; margin: 0px 0px 10px; - padding: 0px 20px 0px 7px; + padding: 0px 7px 0px 7px; color: #0F1111; cursor: pointer; + height: 30px; + width: 115px; } .dropdown-content { display: none; position: absolute; - background-color: #dad6d6; - min-width: 160px; + background-color: transparent; + min-width: 115px; box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); z-index: 1; } @@ -69,4 +165,51 @@ .dropdown:hover .dropbtn { background-color: #d6ddd7; - } \ No newline at end of file + } + + +#drop { + border: 1px solid gray; + overflow: hidden; + height: 36px; + position: absolute; + width: 200px; + display: flex; +} + +#down { + border: 1px solid gray; + overflow: hidden; + height: 72px; + position: absolute; + width: 200px; + display: flex; +} + +#drop:hover { + +} + +#down:hover { + +} + +#top { + width: 200px; +} +#most { + width:200px; +} + +.arrow { + border: solid black; + border-width: 0 3px 3px 0; + display: inline-block; + padding: 3px; + float: right; +} + +.down { + transform: rotate(45deg); + -webkit-transform: rotate(45deg); +} \ No newline at end of file diff --git a/src/components/CustomerReviews/CustomerReviews.jsx b/src/components/CustomerReviews/CustomerReviews.jsx index 84ac794..1b1b28a 100644 --- a/src/components/CustomerReviews/CustomerReviews.jsx +++ b/src/components/CustomerReviews/CustomerReviews.jsx @@ -1,56 +1,198 @@ -import React, { Component } from 'react'; -import ReviewProduct from "./ReviewProduct" -import CustomerImages from './CustomerImages'; -import ReviewMentions from './ReviewMentions'; -import StarRating from './StarRating'; -import Grid from '@material-ui/core/Grid'; -import CustomerReviewsDataService from '../../service/CustomerReviewsDataService' - +import React, { Component } from "react"; +import ReviewProduct from "./ReviewProduct"; +import CustomerImages from "./CustomerImages"; +import ReviewMentions from "./ReviewMentions"; +import StarRating from "./StarRating"; +import Grid from "@material-ui/core/Grid"; +import CustomerReviewsDataService from "../../service/CustomerReviewsDataService"; +import GoodChartMock from "../RatingSummary/goodChartmock"; +import Ratings from "../productVariant/variant-Components/Ratings"; class CustomerReviews extends Component { - - constructor(props) { - super(props) - this.state = { - response:null, - } - this.refreshCustomerReviews = this.refreshCustomerReviews.bind(this) + constructor(props) { + super(props); + this.refreshCustomerReviews = this.refreshCustomerReviews.bind(this); + } + + state = { + review: [], + dropmenu: "drop", + menuitem: "top", + }; + + componentDidMount() { + this.refreshCustomerReviews(); + } + + refreshCustomerReviews() { + CustomerReviewsDataService.retrieveAllCustomerReviews().then((response) => { + this.setState({ review: response.data }); + // const filteredArray = response.data.filter( item => item.itemId == this.props.params) + //this.setState({ review: filteredArray}) + }); + } + + menu = () => { + if (this.state.menuitem == "top") { + return ( +
+ + +
+ ); + } else if (this.state.menuitem == "most") { + return ( +
+ + +
+ ); } + }; + top = () => { + this.setState({ menuitem: "top" }); + this.menu(this.state.menuitem); + }; - componentDidMount() { - this.refreshCustomerReviews(); + most = () => { + this.setState({ menuitem: "most" }); + this.menu(this.state.menuitem); + }; + + mapping = () => { + console.log(this.state.review); + return ( +
+ {this.state.review.map((resp) => ( +
+ +
+ ))} +
+ ); + }; + + drop = () => { + if (this.state.dropmenu === "drop") { + this.setState({ dropmenu: "down" }); + } else { + this.setState({ dropmenu: "drop" }); } + }; - refreshCustomerReviews() { - CustomerReviewsDataService.retrieveCustomerReviews(1) - .then( - response => { - this.setState({ response: response.data }) - } - ) + menu = () => { + if (this.state.menuitem == "top") { + return ( +
+ + +
+ ); + } else if (this.state.menuitem == "most") { + return ( +
+ + +
+ ); } - - render() { - return ( + top = () => { + this.setState({ menuitem: "top" }); + this.menu(this.state.menuitem); + }; + most = () => { + this.setState({ menuitem: "most" }); + this.menu(this.state.menuitem); + }; + }; + + render() { + return ( +
+

Customer Reviews

+ +
-

Customer Reviews

- - -
-
-
-
- - -
-
-
-
-
+
- ); - } +
+ {" "} +
{" "} +

+ By feature +

+ +
+ See more +
+
+ +
+
+ + +
+ +
+
+
+

Read reviews that mention

+ + + +
+
+
+
+
this.drop()}> + {this.menu()} +
+
+ {this.state.review.map((resp) => ( +
+ +
+ ))} +
+
+
+ ); + } } - -export default CustomerReviews; +export default CustomerReviews; diff --git a/src/components/CustomerReviews/ReviewMentions.jsx b/src/components/CustomerReviews/ReviewMentions.jsx index 3da135f..2d51758 100644 --- a/src/components/CustomerReviews/ReviewMentions.jsx +++ b/src/components/CustomerReviews/ReviewMentions.jsx @@ -1,50 +1,80 @@ import React, { Component } from 'react'; -import "./CustomerReviews.css" +import "./CustomerReviews.css"; +import BadStar from "../RatingSummary/badStar"; +import LowStar from "../RatingSummary/lowStar"; +import MidStar from "../RatingSummary/midStar"; +import GoodStar from "../RatingSummary/goodStar"; +import HighStar from "../RatingSummary/highStar"; class ReviewMentions extends Component { + constructor(props) { + super(props) + } + + state = { + count: 0 + }; + + handleClick = ()=> { + this.setState(({count}) => ({ + count: count + 1 + })); + }; + + starLogic = (rate) =>{ + if (rate <= 1){ + return() + } else if (rate <=2){ + console.log(rate, "lowstar") + return() + } else if (rate <=3){ + console.log(rate, "midstar") + return() + } else if (rate <= 4){ + return() + } else if (rate <=5){ + console.log(rate, "hightstar") + return() + } + } render() { return (
-
-

Read reviews that mention

- -
- {/* */} -
-
-
- - -
+

-
- Customer Name
+
+ + + {this.props.name}
- *Star rating icon* Review title! + {this.starLogic(this.props.rate)} {this.props.title} -
Review Date
-
Verified Purchase
+
Review Date
+ Verified Purchase -

Submitted review form goes here

- - {/*
- Comment -
*/} +
+ {this.props.body} +
+
+
+ +

{this.state.count} people found this helpful

+
+
- +
Comment
diff --git a/src/components/CustomerReviews/ReviewProduct.jsx b/src/components/CustomerReviews/ReviewProduct.jsx index d610074..9540c50 100644 --- a/src/components/CustomerReviews/ReviewProduct.jsx +++ b/src/components/CustomerReviews/ReviewProduct.jsx @@ -1,13 +1,27 @@ import React, { Component } from 'react'; +import './CustomerReviews.css' class ReviewProduct extends Component { + constructor(){ + super() + this.state = { + + } + + this.handleReview = this.handleReview.bind(this); + } + + handleReview(e) { + alert("My product review!") + e.preventDefault(e); + } render() { return (

Review this product

Share your thoughts with other customers
- +
); } diff --git a/src/components/CustomerReviews/StarRating.jsx b/src/components/CustomerReviews/StarRating.jsx index 680a15c..14beb27 100644 --- a/src/components/CustomerReviews/StarRating.jsx +++ b/src/components/CustomerReviews/StarRating.jsx @@ -1,4 +1,7 @@ import React, { Component } from 'react'; +import GoodChartMock from '../RatingSummary/goodChartmock'; +import "./CustomerReviews.css" + class StarRating extends Component { @@ -6,9 +9,8 @@ class StarRating extends Component { render() { return (
-

Star Ratings

-
-
+ +
); } diff --git a/src/components/CustomerWhoBoughtAlsoCmpnt/CWBA.css b/src/components/CustomerWhoBoughtAlsoCmpnt/CWBA.css index ef8a1cb..bac644b 100644 --- a/src/components/CustomerWhoBoughtAlsoCmpnt/CWBA.css +++ b/src/components/CustomerWhoBoughtAlsoCmpnt/CWBA.css @@ -3,6 +3,7 @@ flex-direction: row; justify-content: space-between; align-items: center; + width: 100%; } .CWBAPagination button { height: 40px; @@ -17,6 +18,13 @@ border-width: 1px; } .CWBASet{ + display: flex; + flex-direction: row; + justify-content: space-evenly; + width: 100%; + margin: 0px 0px 0px 0px; +} +.individualCWBA{ margin: 0px 0px 0px 20px; } .CWBAHeading{ @@ -61,4 +69,27 @@ h3{ } .PageOf{ font-size: 13px; +} +.imageArrayList{ + display: flex; + flex-direction: row; +} +.CImage{ + margin: 0px 0px 0px 10px; + height: 153px; + width: 153px; + object-fit: cover; + background-color: grey; +} +.leftButton{ + padding-left: 3px; + left: 0; +} +.rightButton{ + padding-right: 3px; + right: 0; +} +button{ + height: 36px; + width: 39px; } \ No newline at end of file diff --git a/src/components/CustomerWhoBoughtAlsoCmpnt/CustomerWhoBoughtAlsoIndividual.jsx b/src/components/CustomerWhoBoughtAlsoCmpnt/CustomerWhoBoughtAlsoIndividual.jsx index f1f011e..bb4de39 100644 --- a/src/components/CustomerWhoBoughtAlsoCmpnt/CustomerWhoBoughtAlsoIndividual.jsx +++ b/src/components/CustomerWhoBoughtAlsoCmpnt/CustomerWhoBoughtAlsoIndividual.jsx @@ -1,48 +1,29 @@ import React, { Component } from 'react'; -import CustomerWhoBoughtAlsoDataService from '../../service/CustomerWhoBoughtAlsoDataService' import './CWBA.css'; +import GoodStar from "../RatingSummary/goodStar"; class CWBAIndividual extends Component { - constructor(props) { - super(props) - this.state = { - response: null, - } - this.refreshCourses = this.refreshCourses.bind(this) - } - - componentDidMount() { - this.refreshCourses(); - } - - refreshCourses() { //retrieve data currently set to one id. not dynamic - CustomerWhoBoughtAlsoDataService.retrieveCustomerWhoBoughtAlso(1) - .then( - response => { - this.setState({ response: response.data }) - } - ) - } render(){ return( -
+
test + }}>
- Stars***** 18,742 +
- $Price and Prime Checkmark + $Price and Prime Check
) diff --git a/src/components/CustomerWhoBoughtAlsoCmpnt/CustomersWhoBoughtAlsoAll.jsx b/src/components/CustomerWhoBoughtAlsoCmpnt/CustomersWhoBoughtAlsoAll.jsx index 67e5929..40eb1b8 100644 --- a/src/components/CustomerWhoBoughtAlsoCmpnt/CustomersWhoBoughtAlsoAll.jsx +++ b/src/components/CustomerWhoBoughtAlsoCmpnt/CustomersWhoBoughtAlsoAll.jsx @@ -1,27 +1,134 @@ import React, { Component } from 'react'; import CWBAIndividual from './CustomerWhoBoughtAlsoIndividual' +import CustomerWhoBoughtAlsoDataService from '../../service/CustomerWhoBoughtAlsoDataService' +import ReactDOM from "react-dom"; + import './CWBA.css'; class CWBA extends Component { + constructor(props) { + super(props) + this.state = { + otherIdArray: [], + itemId: null, + containerWidth: 0, + position: 0 + } + this.refreshCourses = this.refreshCourses.bind(this) + this._handleWindowResize = this._handleWindowResize.bind(this) + this._pageOf = this._pageOf.bind(this) + this._isMounted = false; + } + + componentDidMount() { + this._isMounted = true; + this.refreshCourses(); + window.addEventListener('resize', this._handleWindowResize); + } + + componentWillUnmount() { + this._isMounted = false; + window.removeEventListener('resize', this._handleWindowResize); + } + + _handleWindowResize () { + // if(this._isMounted){ + this.setState({ + containerWidth: ReactDOM.findDOMNode(this._containerTarget).offsetWidth + // + });} + + _truncateItems (items) { + let containerWidth = this.state.containerWidth; + let position = this.state.position; + let maxItemsToShow = this.maximumItemsToShow(containerWidth); + let itemStart = position + let truncatedItems = items.slice(itemStart, maxItemsToShow ); + return truncatedItems; + } + + _pageOf(items){ + let containerWidth = this.state.containerWidth; + let maxItemsToShow = this.maximumItemsToShow(containerWidth); + let numberOfRemainingItems = this.numberOfRemainingItems(items, maxItemsToShow) + let pagesLeft = "Page X of " + let displayNumberHtml = ( +

+ {pagesLeft}{numberOfRemainingItems} +

+ ); + return displayNumberHtml + } + + itemArea = (whereAlreadyAt)=>{ + whereEndUp = whereAlreadyAt + return whereEndUp + } + + maximumItemsToShow = (cW) =>{ + return Math.floor(cW / 173) + this.state.position + } + + numberOfRemainingItems = (items, maxItemsToShow) => { + return Math.ceil(items.length / (maxItemsToShow )) + } + + refreshCourses() { //retrieve data currently set to one id. not dynamic + CustomerWhoBoughtAlsoDataService.retrieveCustomerWhoBoughtAlso(1) + .then( + response => { + this.setState({ itemId: response.data.id, + otherIdArray: response.data.otherIds.split(",") + }) + } + )} + + goRight(){ + containerWidth = this.state.containerWidth; + movement = 0 + maximumItemsToShow(containerWidth) + console.log(movement) + this.setState({position: movement}) + } + goLeft(){ + console.log("go left") + } + render(){ + const items = this.state.otherIdArray.map((otherItems)=> + + ) return(

Customers who bought also...

-

- Page X of Y -

+ {this._pageOf(items)}
- -
- + +
{ + // this callback executes before componentDidMount + if (node !== null) { + this._containerTarget = node; + if (!this._isMounted) { + this._isMounted = true; + this._handleWindowResize(); + } + } + }} + > + {this._truncateItems(items)}
- +
+
) } diff --git a/src/components/Directory.js b/src/components/Directory.js index dc46ad3..8d26165 100644 --- a/src/components/Directory.js +++ b/src/components/Directory.js @@ -1,22 +1,19 @@ -import { BrowserRouter as Router, Route, Switch } from "react-router-dom"; -import App from './App.jsx'; -import React, { Component } from 'react'; -import PrimaryPage from './PrimaryPage'; - - - +import { BrowserRouter as Router, Route, Switch } from "react-router-dom"; +import App from "./App.jsx"; +import React, { Component } from "react"; +import PrimaryPage from "./PrimaryPage"; class Directory extends Component { - render(){ - return( - - - - - - - ) - } + render() { + return ( + + + + + + + ); + } } export default Directory; diff --git a/src/components/Footer/Bluefoot.js b/src/components/Footer/Bluefoot.js new file mode 100644 index 0000000..27736e1 --- /dev/null +++ b/src/components/Footer/Bluefoot.js @@ -0,0 +1,37 @@ +// will hold the get to know us +// make money +// all that stuff in blue above footer + +import React, { Component } from "react"; + +export default class Bluefoot extends Component { + render() { + return ( +
+
stuff here with blue ish background
+

+ These are the voyages of the Starship Enterprise. Its continuing + mission, to explore strange new worlds, to seek out new life and new + civilizations, to boldly go where no one has gone before. We need to + neutralize the homing signal. Each unit has total environmental + control, gravity, temperature, atmosphere, light, in a protective + field. Sensors show energy readings in your area. We had a forced + chamber explosion in the resonator coil. Field strength has increased + by 3,000 percent. +

+ +

+ Shields up. I recommend we transfer power to phasers and arm the + photon torpedoes. Something strange on the detector circuit. The + weapons must have disrupted our communicators. You saw something as + tasty as meat, but inorganically materialized out of patterns used by + our transporters. Captain, the most elementary and valuable statement + in science, the beginning of wisdom, is 'I do not know.' All + transporters off. +

+ +

Resistance is futile.

+
+ ); + } +} diff --git a/src/components/Footer/BottomLine.js b/src/components/Footer/BottomLine.js new file mode 100644 index 0000000..240dddd --- /dev/null +++ b/src/components/Footer/BottomLine.js @@ -0,0 +1,24 @@ +import React, { Component } from "react"; +import "./footer.css"; + +export default class BottomLine extends Component { + render() { + return ( + + ); + } +} diff --git a/src/components/Footer/Footer.js b/src/components/Footer/Footer.js new file mode 100644 index 0000000..2837af4 --- /dev/null +++ b/src/components/Footer/Footer.js @@ -0,0 +1,20 @@ +// this is gonna be the one to rule them all + +import React, { Component } from "react"; +import "./footer.css"; + +import Bluefoot from "./Bluefoot"; +import Prefoot from "./Prefoot"; +import BottomLine from "./BottomLine"; + +export default class Footer extends Component { + render() { + return ( +
+ + + +
+ ); + } +} diff --git a/src/components/Footer/Prefoot.js b/src/components/Footer/Prefoot.js new file mode 100644 index 0000000..da6e1ff --- /dev/null +++ b/src/components/Footer/Prefoot.js @@ -0,0 +1,17 @@ +import React, { Component } from "react"; + +// will move to footer + +export default class Prefoot extends Component { + render() { + return ( +
+ a table of Amazin features +
+ ); + } +} diff --git a/src/components/Footer/footer.css b/src/components/Footer/footer.css new file mode 100644 index 0000000..7525236 --- /dev/null +++ b/src/components/Footer/footer.css @@ -0,0 +1,44 @@ +.bottomline { + display: inline-flex; + background-color: rgb(19, 26, 34); + color: rgb(252, 252, 253); + width: 100%; + align-content: center; + text-align: center; + align-items: center; + align-self: center; + justify-content: center; +} + +.bottomlinks { + text-decoration: none; + color: rgb(252, 252, 253); + padding: 10px; +} + +.bottomlinks:hover { + text-decoration: underline white; +} + +.notalink { + text-decoration: none; + color: rgb(173, 173, 175); + cursor: default; +} + +.bluefoot { + background-color: rgb(35, 47, 62); + color: aliceblue; + padding: 13px; +} + +.bluefoot, +.prefoot, +.bottomline { + margin: -3px; + max-width: 100%; +} + +.lowfootertable { + max-width: 100%; +} diff --git a/src/components/Manufacturer/Manufacturer.jsx b/src/components/Manufacturer/Manufacturer.jsx new file mode 100644 index 0000000..d76037e --- /dev/null +++ b/src/components/Manufacturer/Manufacturer.jsx @@ -0,0 +1,12 @@ +import React from 'react'; + +function Manufacturer() { + + return( +
+ placeholder +
+ ) +} + +export default Manufacturer; diff --git a/src/components/PhotoGallery/PhotoGallery.css b/src/components/PhotoGallery/PhotoGallery.css new file mode 100644 index 0000000..72e5ee6 --- /dev/null +++ b/src/components/PhotoGallery/PhotoGallery.css @@ -0,0 +1,82 @@ +.photo-gallery-container { + display: inline-grid; + /* grid-template-columns: 0.83fr 1.5fr 1fr 1fr; */ + /* grid-template-columns: repeat(auto-fit, minmax(auto, 1fr)); */ + gap: 0.5em; + position: sticky; + top: 20px; +} + +.photo-gallery-container > * { + background: #eee; + padding: 0.1em; + box-sizing: border-box; + max-height: 100%; +} + +.photo-gallery-container .pg_expanded.fluid { + background: #eee; + padding: 0.5em; + box-sizing: border-box; + overflow: visible; + grid-column: 2; + max-width: 1200px; + margin: 0 auto; + display: flex; + flex-direction: column; + font-family: Arial; + line-height: 1.3; + font-size: 16px; +} + +.pg_expanded.fluid .photo-expanded.fluid__image-container { + margin: 0.5em 0 auto 0.5em; +} + +/*these parts below for thumbnail are from the grid portion of the photogallery container*/ +.photo-gallery-container .pg_thumbnails { + display: grid; + grid-template-columns: 1fr; + overflow: hidden; + overflow-y: scroll; +} + +.photo-gallery-container .pg_thumbnails::-webkit-scrollbar { + display: none; +} + +/* Hide scrollbar for IE, Edge and Firefox */ +.photo-gallery-container .pg_thumbnails { + scrollbar-width: none; /* Firefox */ +} + +.photo-gallery-container .pg_thumbnails .photo-thumbnail { + display: inline-grid; + grid-template-columns: 1fr; + gap: 0.1em; +} + +.photo-gallery-container > * > img { + position: relative; + box-sizing: content-box; + padding: 0.3em; +} + +/* .photo-gallery-container > *:nth-child(odd) { + background: #ddd; +} */ + +@media (min-width: 480px) { + .pg_expanded.fluid { + flex-direction: row; + } + .pg_expanded.fluid .photo-expanded.fluid__image-container { + flex: 0 0 30%; + margin: 20px 0 20px 20px; + } + .portal { + position: absolute; + top: 40px; + left: -30px; + } +} diff --git a/src/components/PhotoGallery/PhotoGallery.jsx b/src/components/PhotoGallery/PhotoGallery.jsx new file mode 100644 index 0000000..b1b1b9f --- /dev/null +++ b/src/components/PhotoGallery/PhotoGallery.jsx @@ -0,0 +1,32 @@ +import React, { Component } from "react"; +import { default as PG_PhotoExpanded } from "./PhotoGalleryPhotoExpanded"; +import { default as PG_Thumbnails } from "./PhotoGalleryThumbnail"; +import "./PhotoGallery.css"; + +export default class PhotoGallery extends Component { + constructor(props) { + super(props); + this.state = { + id: 0, + }; + } + + updateHoverState = (i) => { + this.setState({ id: i }); + console.log(`imageId: ${i}`); + }; + render() { + return ( +
+
+ +
+
+ +
+
+ ); + } +} diff --git a/src/components/PhotoGallery/PhotoGalleryPhotoExpanded.css b/src/components/PhotoGallery/PhotoGalleryPhotoExpanded.css new file mode 100644 index 0000000..a2c9b8d --- /dev/null +++ b/src/components/PhotoGallery/PhotoGalleryPhotoExpanded.css @@ -0,0 +1,9 @@ +.photo-expanded.fluid__image-container { + margin: 0.5em 0 auto 0.5em; +} + +.photo-expanded.fluid__image-container .smallImg { + object-fit: cover; + width: auto; + height: 100%; +} diff --git a/src/components/PhotoGallery/PhotoGalleryPhotoExpanded.jsx b/src/components/PhotoGallery/PhotoGalleryPhotoExpanded.jsx new file mode 100644 index 0000000..5544520 --- /dev/null +++ b/src/components/PhotoGallery/PhotoGalleryPhotoExpanded.jsx @@ -0,0 +1,56 @@ +import React, { Component } from "react"; +import ReactImageMagnify from "react-image-magnify"; +import "./PhotoGalleryPhotoExpanded.css"; + +export class PhotoGalleryPhotoExpanded extends Component { + // constructor(props) { + // super(props); + // } + render() { + const width = 420; + const height = 360; + const widthLarge = width * 2.5; + const heightLarge = height * 2.5; + + const smallerImg = `http://picsum.photos/id/${this.props.imgId.toString()}/${width.toString()}/${height.toString()}`; + const largerImg = `http://picsum.photos/id/${this.props.imgId.toString()}/${widthLarge.toString()}/${heightLarge.toString()}`; + return ( +
+ +
+ ); + } +} + +export default PhotoGalleryPhotoExpanded; diff --git a/src/components/PhotoGallery/PhotoGalleryThumbnail.jsx b/src/components/PhotoGallery/PhotoGalleryThumbnail.jsx new file mode 100644 index 0000000..48baf62 --- /dev/null +++ b/src/components/PhotoGallery/PhotoGalleryThumbnail.jsx @@ -0,0 +1,28 @@ +import React, { Component } from "react"; +import "./PhotoThumbnail.css"; +export class PhotoGalleryThumbnail extends Component { + constructor(props) { + super(props); + } + render() { + const width = 40; + const height = 30; + const imgCount = 10; + var ids = []; + for (let i = 0; i < imgCount; i++) { + ids.push(i); + } + var imgs = ids.map((id, i) => { + return ( + this.props.updateHoverState(id)} + key={i} + src={`http://picsum.photos/id/${id.toString()}/${width.toString()}/${height.toString()}`} + /> + ); + }); + return
{imgs}
; + } +} + +export default PhotoGalleryThumbnail; diff --git a/src/components/PhotoGallery/PhotoThumbnail.css b/src/components/PhotoGallery/PhotoThumbnail.css new file mode 100644 index 0000000..c6e5019 --- /dev/null +++ b/src/components/PhotoGallery/PhotoThumbnail.css @@ -0,0 +1,20 @@ +.photo-thumbnail { + max-height: 400px; + object-fit: cover; + width: 100%; + max-height: 100%; +} +.photo-thumbnail > img { + box-sizing: border-box; + border: 3px solid transparent; + + object-fit: cover; + width: 100%; + max-height: 100%; +} + +.photo-thumbnail > img:hover { + opacity: 0.7; + box-sizing: border-box; + border: 3px solid #c79a05; +} diff --git a/src/components/PrimaryPage.jsx b/src/components/PrimaryPage.jsx index 2096f42..fc696e9 100644 --- a/src/components/PrimaryPage.jsx +++ b/src/components/PrimaryPage.jsx @@ -1,20 +1,75 @@ -import React, { Component } from 'react'; -import Product from './productVariant/Product.jsx'; - +import React, { Component } from "react"; +import Product from "./productVariant/Product.jsx"; +import CustomerReviewsContainer from "./CustomerReviews/CustomerReviews"; +import CWBA from "./CustomerWhoBoughtAlsoCmpnt/CustomersWhoBoughtAlsoAll"; +import QAcomponent from "./QAcomponent"; +import ComparisonGrid from "./ComparisonGrid/ComparisonGrid.jsx"; +import CImagesAll from "./CustomerImageCmpnt/CustomerImagesAll"; +import Appples from "./RatingSummary/Appples"; +import Grid from "@material-ui/core/Grid"; +import TopBar from "./TopBar/TopBar"; +import PhotoGallery from "./PhotoGallery/PhotoGallery"; +import BlueSecondTopLine from "./SecondTopLine/BlueSecondTopline"; +import Footer from "./Footer/Footer"; +import "./primarypage.css"; class PrimaryPage extends Component { - - - render(){ - return( -
- {/* */} + render() { + return ( +
+ + + + +
+
+ +
+
+ +
+
- ) - } +
+ + + + + + + + + + + + + + + + +
+
+
+ ); + } } -export default PrimaryPage; \ No newline at end of file +export default PrimaryPage; diff --git a/src/components/QAcomponent.js b/src/components/QAcomponent.js index 655bc34..5a10fa0 100644 --- a/src/components/QAcomponent.js +++ b/src/components/QAcomponent.js @@ -1,17 +1,25 @@ -import React, { Component } from 'react' -import QAitem from './QAitem' +import React, { Component } from "react"; +import QAitem from "./QAitem"; +import "./qacomponent.css"; class QAcomponent extends Component { - render() { - return ( -
-

Customer questions & answers

-
    - -
-
- ) - } + constructor(props) { + super(props); + } + + render() { + return ( +
+

Customer questions & answers

+
+
    + {/* pass down item id to child component */} + +
+
+
+ ); + } } -export default QAcomponent; \ No newline at end of file +export default QAcomponent; diff --git a/src/components/QAitem.js b/src/components/QAitem.js index f42d938..88ac767 100644 --- a/src/components/QAitem.js +++ b/src/components/QAitem.js @@ -1,37 +1,91 @@ -import React, { Component } from 'react' -import Answers from './Answers' -import QAndADataService from '../service/QAndADataService' - +import React, { Component } from "react"; +import QAndADataService from "../service/QAndADataService"; +import Votes from "./Votes" +import "./qacomponent.css"; export default class QAitem extends Component { + constructor(props) { + super(props); + } + + state = { + response: [], + allAnswers: [], + sortedAnswers: [], + itemId: null, + }; + + refreshQAndA = this.refreshQAndA.bind(this); + refreshAnswers = this.refreshAnswers.bind(this); + + componentDidMount() { + this.refreshQAndA(); + this.refreshAnswers(); + } + + componentWillUnmount() { + this.setState = (state,callback)=>{ + return; + }; + } - constructor(props) { - super(props) - this.state = { - response:null, - } - this.refreshQAndA = this.refreshQAndA.bind(this) - } - - componentDidMount() { - this.refreshQAndA(); - } - - refreshQAndA() { - QAndADataService.retrieveAllQAndAs() - .then( - response => { - this.setState({ response: response.data }) - } - ) - } - - render() { - return ( -
-

Question:

-

+ refreshQAndA() { + QAndADataService.retrieveAllQAndAs().then((response) => { + this.setState({ response: response.data }); + }); + } + + refreshAnswers() { + QAndADataService.retrieveAllAnswers().then((allAnswers) => { + this.setState({ allAnswers: allAnswers.data }); + }); + } + + sortQuestions = (id) => { + //using item id, filter through questions where item id equals question.itemid + const filterQuestionsArray = this.state.response.filter( + (question) => question.itemid == id + ); + return ( +
+ {/* map through the filtered questions */} + {filterQuestionsArray.map((q) => ( +
+ +
+
+

Question:

+

{q.question}

+
+ {/* do the same thing with the answers */} +
{this.sortAnswers(q.id)}
- ) - } -} \ No newline at end of file +
+ ))} +
+ ); + }; + + sortAnswers = (id) => { + const filterAnswersArray = this.state.allAnswers.filter( + (answer) => answer.questionid == id + ); + return ( +
+ {filterAnswersArray.map((a) => ( +
+

Answer:

+

+ {a.answer} +

+
+ ))} +
+ ); + }; + + render() { + //sort through questions by item id. + return
{this.sortQuestions(this.props.id)}
; + } +} diff --git a/src/components/RatingSummary/Appples.js b/src/components/RatingSummary/Appples.js index 93526bd..a835c76 100644 --- a/src/components/RatingSummary/Appples.js +++ b/src/components/RatingSummary/Appples.js @@ -7,8 +7,15 @@ import GoodStar from "./goodStar"; import HighStar from "./highStar"; import BadChartMock from "./badChartmock"; +import DynamicStar from "./dynamicStar"; export default class Appples extends Component { + constructor(props){ + super(props) + + } + + render() { return (
@@ -41,7 +48,15 @@ export default class Appples extends Component {

lorem at the end a chart below for the id click jump

- + +
+
above is from hardcoded data static to client
+
below is dynamic
+ +
); } diff --git a/src/components/RatingSummary/badChartmock.js b/src/components/RatingSummary/badChartmock.js index 14dd37b..af2c79d 100644 --- a/src/components/RatingSummary/badChartmock.js +++ b/src/components/RatingSummary/badChartmock.js @@ -14,27 +14,27 @@ export default class BadChartMock extends Component {
66,847 customer ratings
- 5 Star {" "} - 5%{" "} + 5 Star {" "} + 5%{" "}
- 4 Star {" "} - 7%{" "} + 4 Star {" "} + 7%{" "}
- 3 Star {" "} - 9%{" "} + 3 Star {" "} + 9%{" "}
- 2 Star {" "} - 15%{" "} + 2 Star {" "} + 15%{" "}
- 1 Star {" "} - 64%{" "} + 1 Star {" "} + 64%{" "}

- See all customer reviews > + See all customer reviews >
); } diff --git a/src/components/RatingSummary/badStar.js b/src/components/RatingSummary/badStar.js index 943d389..f4d06a0 100644 --- a/src/components/RatingSummary/badStar.js +++ b/src/components/RatingSummary/badStar.js @@ -53,10 +53,10 @@ export default class BadStar extends Component {
{/* */}
{this.state.isHovering && ( diff --git a/src/components/RatingSummary/chartMock.css b/src/components/RatingSummary/chartMock.css index 093f25c..7c4fca7 100644 --- a/src/components/RatingSummary/chartMock.css +++ b/src/components/RatingSummary/chartMock.css @@ -9,7 +9,7 @@ border: rgb(216, 201, 201) 2px solid; } -a { +.chartLink { text-decoration: none; } diff --git a/src/components/RatingSummary/dynamicStar.jsx b/src/components/RatingSummary/dynamicStar.jsx new file mode 100644 index 0000000..f226db9 --- /dev/null +++ b/src/components/RatingSummary/dynamicStar.jsx @@ -0,0 +1,106 @@ +import React, { Component } from "react"; +import "./stars.css"; +import Axios from "axios"; +import DynamicStarChart from "./dynamicStarChart"; + +export default class DynamicStar extends Component { + constructor(props) { + super(props); + } + state = { + ratingId: "", + overallRating: "", + totalFiveStarRating: "", + totalFourStarRating: "", + totalThreeStarRating: "", + totalTwoStarRating: "", + totalOneStarRating: "", + }; + + componentDidMount() { + this.loadItem(this.props.params); + } +/// load it + loadItem = (params) => { + //calls the product by id + Axios({ + method: "GET", + url: `http://localhost:8080/api/v1/totalstars/${params}`, + }).then((res) => { + console.log(res.data); + //all the properties of the product are saved in state - these do not change upon selection. + this.setState({ + ratingId: res.data.ratingid, + overallRating: res.data.overallRating, + totalFiveStarRating: res.data.totalFiveStarRating, + totalFourStarRating: res.data.totalFourStarRating, + totalThreeStarRating: res.data.totalThreeStarRating, + totalTwoStarRating: res.data.totalTwoStarRating, + totalOneStarRating: res.data.totalOneStarRating, + }); + + }); + }; + + // this.handleMouseHover = this.handleMouseHover.bind(this); + // this.state = { + // isHovering: false, + // }; + // } + + // handleMouseHover() { + // this.setState(this.toggleHoverState); + // } + + // toggleHoverState(state) { + // return { + // isHovering: !state.isHovering, + // }; + // } + + render() { + return ( +
+
+
+ + {/* need to update class names to make stars based off of response from server */} + + + + + + + + + + + v +
+ + +
+ {/* {this.state.isHovering && ( +
+ {" "} + {" "} +
+ )} */} +
+ ); + } +} diff --git a/src/components/RatingSummary/dynamicStarChart.jsx b/src/components/RatingSummary/dynamicStarChart.jsx new file mode 100644 index 0000000..437797a --- /dev/null +++ b/src/components/RatingSummary/dynamicStarChart.jsx @@ -0,0 +1,71 @@ +import React, { Component } from "react"; +import "./chartMock.css"; + +/// get the info from dynamic star axios call + +export default class DynamicStarChart extends Component { + render() { + return ( +
+

+ + + + + +

x out of 5

+ +
nn,nnn customer ratings
+
+ + 5 Star{" "} + {" "} + {" "} + + X% + {" "} +
+
+ + 4 Star{" "} + {" "} + {" "} + + X% + {" "} +
+
+ + 3 Star{" "} + {" "} + {" "} + + X% + {" "} +
+
+ + 2 Star{" "} + {" "} + {" "} + + X% + {" "} +
+
+ + 1 Star{" "} + {" "} + {" "} + + X% + {" "} +
+
+ + See all customer reviews >{" "} + +
+ ); + } +} diff --git a/src/components/RatingSummary/goodChartMock.js b/src/components/RatingSummary/goodChartMock.js index 2dd2a9e..a5d9736 100644 --- a/src/components/RatingSummary/goodChartMock.js +++ b/src/components/RatingSummary/goodChartMock.js @@ -15,27 +15,27 @@ export default class GoodChartMock extends Component {
26,547 customer ratings
- 5 Star {" "} - 15%{" "} + 5 Star {" "} + 15%{" "}
- 4 Star {" "} - 64%{" "} + 4 Star {" "} + 64%{" "}
- 3 Star {" "} - 7%{" "} + 3 Star {" "} + 7%{" "}
- 2 Star {" "} - 9%{" "} + 2 Star {" "} + 9%{" "}
- 1 Star {" "} - 5%{" "} + 1 Star {" "} + 5%{" "}

- See all customer reviews > + See all customer reviews >
); } diff --git a/src/components/RatingSummary/goodStar.js b/src/components/RatingSummary/goodStar.js index b61b1ad..26d232c 100644 --- a/src/components/RatingSummary/goodStar.js +++ b/src/components/RatingSummary/goodStar.js @@ -46,10 +46,10 @@ export default class GoodStar extends Component {
{/* */} {this.state.isHovering && ( diff --git a/src/components/RatingSummary/highChartMock.js b/src/components/RatingSummary/highChartMock.js index 0a36b7c..e2a3975 100644 --- a/src/components/RatingSummary/highChartMock.js +++ b/src/components/RatingSummary/highChartMock.js @@ -15,27 +15,27 @@ export default class HighChartMock extends Component {
9,548 customer ratings
- 5 Star {" "} - 64%{" "} + 5 Star {" "} + 64%{" "}
- 4 Star {" "} - 15%{" "} + 4 Star {" "} + 15%{" "}
- 3 Star {" "} - 9%{" "} + 3 Star {" "} + 9%{" "}
- 2 Star {" "} - 7%{" "} + 2 Star {" "} + 7%{" "}
- 1 Star {" "} - 5%{" "} + 1 Star {" "} + 5%{" "}

- See all customer reviews > + See all customer reviews > ); } diff --git a/src/components/RatingSummary/highStar.js b/src/components/RatingSummary/highStar.js index 14c9059..ab9f743 100644 --- a/src/components/RatingSummary/highStar.js +++ b/src/components/RatingSummary/highStar.js @@ -46,18 +46,19 @@ export default class HighStar extends Component { {/* */} - + {this.state.isHovering && (
{" "} {" "}
)} + ); } diff --git a/src/components/RatingSummary/lowChartMock.js b/src/components/RatingSummary/lowChartMock.js index 8845c42..382a69c 100644 --- a/src/components/RatingSummary/lowChartMock.js +++ b/src/components/RatingSummary/lowChartMock.js @@ -15,27 +15,27 @@ export default class LowChartMock extends Component {
9,548 customer ratings
- 5 Star {" "} - 5%{" "} + 5 Star {" "} + 5%{" "}
- 4 Star {" "} - 7%{" "} + 4 Star {" "} + 7%{" "}
- 3 Star {" "} - 9%{" "} + 3 Star {" "} + 9%{" "}
- 2 Star {" "} - 64%{" "} + 2 Star {" "} + 64%{" "}
- 1 Star {" "} - 15%{" "} + 1 Star {" "} + 15%{" "}

- See all customer reviews > + See all customer reviews > ); } diff --git a/src/components/RatingSummary/lowStar.js b/src/components/RatingSummary/lowStar.js index 561b94f..b906001 100644 --- a/src/components/RatingSummary/lowStar.js +++ b/src/components/RatingSummary/lowStar.js @@ -45,10 +45,10 @@ export default class LowStar extends Component { {/* */} {this.state.isHovering && ( diff --git a/src/components/RatingSummary/midChartMock.js b/src/components/RatingSummary/midChartMock.js index 271d217..ab1b177 100644 --- a/src/components/RatingSummary/midChartMock.js +++ b/src/components/RatingSummary/midChartMock.js @@ -15,27 +15,27 @@ export default class MidChartMock extends Component {
548 customer ratings
- 5 Star {" "} - 5%{" "} + 5 Star {" "} + 5%{" "}
- 4 Star {" "} - 15%{" "} + 4 Star {" "} + 15%{" "}
- 3 Star {" "} - 64%{" "} + 3 Star {" "} + 64%{" "}
- 2 Star {" "} - 9%{" "} + 2 Star {" "} + 9%{" "}
- 1 Star {" "} - 7%{" "} + 1 Star {" "} + 7%{" "}

- See all customer reviews > + See all customer reviews > ); } diff --git a/src/components/RatingSummary/midStar.js b/src/components/RatingSummary/midStar.js index 072b9ab..8a262c1 100644 --- a/src/components/RatingSummary/midStar.js +++ b/src/components/RatingSummary/midStar.js @@ -50,10 +50,10 @@ export default class MidStar extends Component { {/* */} {this.state.isHovering && ( diff --git a/src/components/RatingSummary/stars.css b/src/components/RatingSummary/stars.css index d804d51..fd9c189 100644 --- a/src/components/RatingSummary/stars.css +++ b/src/components/RatingSummary/stars.css @@ -35,7 +35,7 @@ padding: 10px; } -a { +.starLink { font-size: 13px; text-decoration: none; } diff --git a/src/components/SecondTopLine/BestSellers.js b/src/components/SecondTopLine/BestSellers.js new file mode 100644 index 0000000..3fed365 --- /dev/null +++ b/src/components/SecondTopLine/BestSellers.js @@ -0,0 +1,13 @@ +import React, { Component } from "react"; + +export default class BestSellers extends Component { + render() { + return ( +
+

+ Best Sellers +

+
+ ); + } +} diff --git a/src/components/SecondTopLine/BlueSecondTop.css b/src/components/SecondTopLine/BlueSecondTop.css new file mode 100644 index 0000000..dbd21a9 --- /dev/null +++ b/src/components/SecondTopLine/BlueSecondTop.css @@ -0,0 +1,23 @@ +.bluesecondtopline { + display:flex; + flex-direction: row; + background-color: rgb(35, 47, 62); + color: aliceblue; + width:100%; + height:50px; + align-items: center; + justify-content: space-evenly; + flex-wrap: nowrap; +} + +.bluetoprow { + text-decoration: none; + color: aliceblue; + border:1px solid rgb(35, 47, 62); + padding:5px; +} + +.bluetoprow:hover{ + border:1px solid white; + cursor: pointer; +} diff --git a/src/components/SecondTopLine/BlueSecondTopline.js b/src/components/SecondTopLine/BlueSecondTopline.js new file mode 100644 index 0000000..0408d29 --- /dev/null +++ b/src/components/SecondTopLine/BlueSecondTopline.js @@ -0,0 +1,34 @@ +import React, { Component } from "react"; +import Location from "./Location"; +import BestSellers from "./BestSellers"; +import CustomerService from "./CustomerService"; +import Deals from "./Deals"; +import NewReleases from "./NewReleases"; +import Gift from "./Gift"; +import Foods from "./Foods"; +import GiftCards from "./GiftCards"; +import Shipping from "./Shipping"; +import Registry from "./Registry"; +import School from "./School"; + +import "./BlueSecondTop.css"; + +export default class BlueSecondTopLine extends Component { + render() { + return ( +
+ + + + + + + + + + + +
+ ); + } +} diff --git a/src/components/SecondTopLine/CustomerService.js b/src/components/SecondTopLine/CustomerService.js new file mode 100644 index 0000000..ee477da --- /dev/null +++ b/src/components/SecondTopLine/CustomerService.js @@ -0,0 +1,13 @@ +import React, { Component } from "react"; + +export default class CustomerService extends Component { + render() { + return ( + + ); + } +} diff --git a/src/components/SecondTopLine/Deals.js b/src/components/SecondTopLine/Deals.js new file mode 100644 index 0000000..d3a71d4 --- /dev/null +++ b/src/components/SecondTopLine/Deals.js @@ -0,0 +1,13 @@ +import React, { Component } from "react"; + +export default class Deals extends Component { + render() { + return ( +
+

+ Today's Deals +

+
+ ); + } +} diff --git a/src/components/SecondTopLine/Foods.js b/src/components/SecondTopLine/Foods.js new file mode 100644 index 0000000..b46ebb3 --- /dev/null +++ b/src/components/SecondTopLine/Foods.js @@ -0,0 +1,13 @@ +import React, { Component } from "react"; + +export default class Foods extends Component { + render() { + return ( +
+

+ Hole Foodz +

+
+ ); + } +} diff --git a/src/components/SecondTopLine/Gift.js b/src/components/SecondTopLine/Gift.js new file mode 100644 index 0000000..7153e0d --- /dev/null +++ b/src/components/SecondTopLine/Gift.js @@ -0,0 +1,13 @@ +import React, { Component } from "react"; + +export default class Gift extends Component { + render() { + return ( +
+

+ Find a Gift +

+
+ ); + } +} diff --git a/src/components/SecondTopLine/GiftCards.js b/src/components/SecondTopLine/GiftCards.js new file mode 100644 index 0000000..05afc0e --- /dev/null +++ b/src/components/SecondTopLine/GiftCards.js @@ -0,0 +1,13 @@ +import React, { Component } from "react"; + +export default class GiftCards extends Component { + render() { + return ( +
+

+ Gift Cards +

+
+ ); + } +} diff --git a/src/components/SecondTopLine/Location.js b/src/components/SecondTopLine/Location.js new file mode 100644 index 0000000..3c99b76 --- /dev/null +++ b/src/components/SecondTopLine/Location.js @@ -0,0 +1,13 @@ +import React, { Component } from "react"; + +export default class Location extends Component { + render() { + return ( +
+

+ Where are You? +

+
+ ); + } +} diff --git a/src/components/SecondTopLine/NewReleases.js b/src/components/SecondTopLine/NewReleases.js new file mode 100644 index 0000000..34cece8 --- /dev/null +++ b/src/components/SecondTopLine/NewReleases.js @@ -0,0 +1,13 @@ +import React, { Component } from "react"; + +export default class NewReleases extends Component { + render() { + return ( +
+

+ New Releases +

+
+ ); + } +} diff --git a/src/components/SecondTopLine/Registry.js b/src/components/SecondTopLine/Registry.js new file mode 100644 index 0000000..9a82088 --- /dev/null +++ b/src/components/SecondTopLine/Registry.js @@ -0,0 +1,13 @@ +import React, { Component } from "react"; + +export default class Registry extends Component { + render() { + return ( +
+

+ Registry +

+
+ ); + } +} diff --git a/src/components/SecondTopLine/School.js b/src/components/SecondTopLine/School.js new file mode 100644 index 0000000..2691afc --- /dev/null +++ b/src/components/SecondTopLine/School.js @@ -0,0 +1,13 @@ +import React, { Component } from "react"; + +export default class School extends Component { + render() { + return ( + + ); + } +} diff --git a/src/components/SecondTopLine/Shipping.js b/src/components/SecondTopLine/Shipping.js new file mode 100644 index 0000000..aa7668d --- /dev/null +++ b/src/components/SecondTopLine/Shipping.js @@ -0,0 +1,13 @@ +import React, { Component } from "react"; + +export default class Shipping extends Component { + render() { + return ( +
+

+ Free Shipping +

+
+ ); + } +} diff --git a/src/components/SingleAnswer.js b/src/components/SingleAnswer.js deleted file mode 100644 index e96370d..0000000 --- a/src/components/SingleAnswer.js +++ /dev/null @@ -1,11 +0,0 @@ -import React, { Component } from 'react' - -export default class SingleAnswer extends Component { - render() { - return ( -
-

I'm loving it!

-
- ) - } -} \ No newline at end of file diff --git a/src/components/TopBar/Cart.js b/src/components/TopBar/Cart.js new file mode 100644 index 0000000..fb5448c --- /dev/null +++ b/src/components/TopBar/Cart.js @@ -0,0 +1,17 @@ +import React, { Component } from "react"; + +export default class Cart extends Component { + render() { + return ( +
+ + shopping cart icon + + + +
+ ); + } +} diff --git a/src/components/TopBar/Flag.js b/src/components/TopBar/Flag.js new file mode 100644 index 0000000..da2be6f --- /dev/null +++ b/src/components/TopBar/Flag.js @@ -0,0 +1,18 @@ +import React, { Component } from "react"; +// import flag from "./usFlag.JPG"; + +export default class Flag extends Component { + render() { + return ( + + ); + } +} diff --git a/src/components/TopBar/Logo.js b/src/components/TopBar/Logo.js new file mode 100644 index 0000000..2be85c4 --- /dev/null +++ b/src/components/TopBar/Logo.js @@ -0,0 +1,12 @@ +import React, { Component } from "react"; + +export default class Logo extends Component { + render() { + return ( + + ); + } +} + diff --git a/src/components/TopBar/Menu.js b/src/components/TopBar/Menu.js new file mode 100644 index 0000000..cd1939b --- /dev/null +++ b/src/components/TopBar/Menu.js @@ -0,0 +1,17 @@ +import React, { Component } from "react"; + +export default class Menu extends Component { + render() { + return ( +
+ + fake hamburger menu + +
+ ); + } +} diff --git a/src/components/TopBar/Prime.js b/src/components/TopBar/Prime.js new file mode 100644 index 0000000..4553173 --- /dev/null +++ b/src/components/TopBar/Prime.js @@ -0,0 +1,14 @@ +import React, { Component } from "react"; + +export default class Prime extends Component { + render() { + return ( +
+

+ Try Grime + +

+
+ ); + } +} diff --git a/src/components/TopBar/Returns.js b/src/components/TopBar/Returns.js new file mode 100644 index 0000000..8240d9d --- /dev/null +++ b/src/components/TopBar/Returns.js @@ -0,0 +1,11 @@ +import React, { Component } from "react"; + +export default class Returns extends Component { + render() { + return ( + + ); + } +} \ No newline at end of file diff --git a/src/components/TopBar/SearchBar.jsx b/src/components/TopBar/SearchBar.jsx new file mode 100644 index 0000000..27e2bde --- /dev/null +++ b/src/components/TopBar/SearchBar.jsx @@ -0,0 +1,28 @@ +import React, { Component } from "react"; + +export default class SearchBar extends Component { + constructor(){ + super() + this.state = { + + } + + this.handleSearch = this.handleSearch.bind(this); +} + +handleSearch(e){ + alert("You are searching for something") + e.preventDefault(e); +} + + render() { + return ( +
+
All v
+ + +
+ ); + } +} diff --git a/src/components/TopBar/SignIn.js b/src/components/TopBar/SignIn.js new file mode 100644 index 0000000..fa0308c --- /dev/null +++ b/src/components/TopBar/SignIn.js @@ -0,0 +1,11 @@ +import React, { Component } from "react"; + +export default class SignIn extends Component { + render() { + return ( + + ); + } +} \ No newline at end of file diff --git a/src/components/TopBar/TopBar.js b/src/components/TopBar/TopBar.js new file mode 100644 index 0000000..4b294f9 --- /dev/null +++ b/src/components/TopBar/TopBar.js @@ -0,0 +1,30 @@ +import React, { Component } from "react"; +import Logo from "./logo"; +import SearchBar from "./SearchBar"; +import Flag from "./Flag"; +import SignIn from "./SignIn"; +import Returns from "./Returns"; +import Prime from "./Prime"; +import Cart from "./Cart"; +import WorkinMenu from "./WorkinMenu"; +import './topbar.css'; +import Menu from "./Menu"; + +export default class TopBar extends Component { + render() { + return ( +
+ + {/* */} + + + + + + + +
+
+ ); + } +} \ No newline at end of file diff --git a/src/components/TopBar/WorkinMenu.js b/src/components/TopBar/WorkinMenu.js new file mode 100644 index 0000000..6fe022e --- /dev/null +++ b/src/components/TopBar/WorkinMenu.js @@ -0,0 +1,52 @@ +import React, { Component } from "react"; +import './menu.css'; + +export default class WorkinMenu extends Component { + render() { + return ( + + ); + } +} diff --git a/src/components/TopBar/flagUs.png b/src/components/TopBar/flagUs.png new file mode 100644 index 0000000000000000000000000000000000000000..1a518fbc539fe996ad016320366ccf2a53db5128 GIT binary patch literal 5208 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 ma^K8D4&K + + + + + ); + } +} diff --git a/src/components/primarypage.css b/src/components/primarypage.css new file mode 100644 index 0000000..b56a654 --- /dev/null +++ b/src/components/primarypage.css @@ -0,0 +1,32 @@ +* { + margin: 0; + box-sizing: border-box; +} + +.productgrid-container { + display: grid; + grid-template-columns: repeat(12, 1fr); +} + +.photogallery-grid { + float: left; +} +.photogallery-grid-container { + grid-column: 1/7; +} + +.productvariant-grid { + float: right; +} +.productvariant-grid-container { + grid-column: 7/13; +} + +.app { + font-family: "Lato", sans-serif; +} + +.productgrid-container { + display: grid; + grid-template-columns: repeat(12, 1fr); +} diff --git a/src/components/productVariant/Product.jsx b/src/components/productVariant/Product.jsx index 47efc89..1c06d7a 100644 --- a/src/components/productVariant/Product.jsx +++ b/src/components/productVariant/Product.jsx @@ -1,291 +1,344 @@ -import React, {Component} from 'react'; -import Header from './variant-Components/Header'; -import Availability from './variant-Components/Availability.jsx'; -import Details from './variant-Components/Details.jsx'; -import Sponsered from './variant-Components/Sponsered.jsx'; -import './product.css' +import React, { Component } from "react"; +import Header from "./variant-Components/Header"; +import Availability from "./variant-Components/Availability.jsx"; +import Details from "./variant-Components/Details.jsx"; +import Sponsored from "./variant-Components/Sponsored.jsx"; +import "./product.css"; import Ratings from "./variant-Components/Ratings"; -import Axios from 'axios'; -import AboutList from './variant-Components/AboutList'; -import { Dropdown } from 'react-bootstrap' - +import Axios from "axios"; +import AboutList from "./variant-Components/AboutList"; +import { Dropdown } from "react-bootstrap"; +import Grid from "@material-ui/core/Grid"; +//import PhotoGallery from "../PhotoGallery/PhotoGallery"; class Product extends Component { - constructor(props){ - super(props) - } - - state = { - prodID: "", - seller: "", - user_rating: "", - tag: "", - tag_title : "", - similar_item : "", - rating: "", - category : "", - category_link : "", - optionDropdown: [], - optionImage:[], - optionCustomBtn:[], - title: "", - about_item: "", - discount: "", - price: "", - list_price: "", - shipping: "", - ship_price: "", - type_selector: "", - selector_img: "", - selector_text: "", - message: "", - inStock: 0, - shipping_message: "", - banner: "", - lowstock_message: "", - type_title: "", - type: [], - selection:0 - } - - componentDidMount() { - this.loadItem(this.props.params); - } - - loadItem = (params) => { - //calls the product by id - Axios({ - method: 'GET', - url: `http://localhost:8080/variant/product/${params}` - }).then (res => { - //all the properties of the product are saved in state - these do not change upon selection. - this.setState({ - prodID: res.data.id, - seller: res.data.seller, - tag : res.data.tag, - tag_title : res.data.tag_title, - similar_item : res.data.similar_item, - rating : res.data.rating, - category: res.data.category, - category_link : res.data.category_link, - user_rating: res.data.user_rating - }) - this.loadSelector(); - }) - } - - //this is all to figure out what the selection of the user is. - //the work here reverts everything to default which is a boolean in the data. - loadSelector = () => { - //this pulls all the selections in - Axios({ - method: 'GET', - url: `http://localhost:8080/variant/selector` - }).then (res => { - //filters out the selections based on the product - const trueSelections = res.data.filter( select => select.productID === this.state.prodID) - //filters out the selection to the default selection of the product - const defaultTrueSelection = trueSelections.filter( defaulting => defaulting.default === true) + constructor(props) { + super(props); + this.myRef = React.createRef() + console.log(this.myRef) + } - //the default options have been separated out into this function which goes through how everything is - //displayed after selecting default options. - this.optionLogic(trueSelections) - - //catches the id of the selection - this.setState({ - options : trueSelections, - selection : defaultTrueSelection[0].id, - title : defaultTrueSelection[0].title, - about_item: defaultTrueSelection[0].about_item, - discount: defaultTrueSelection[0].discount, - list_price: defaultTrueSelection[0].list_price, - shipping: defaultTrueSelection[0].shipping, - ship_price: defaultTrueSelection[0].ship_price, - type_selector: defaultTrueSelection[0].type_selector, - selector_img: defaultTrueSelection[0].selector_img, - selector_text: defaultTrueSelection[0].selector_text, - inStock: defaultTrueSelection[0].inStock, - message: defaultTrueSelection[0].message, - price: defaultTrueSelection[0].price, - lowstock_message: defaultTrueSelection[0].lowstock_message, - shipping_message: defaultTrueSelection[0].shipping_message, - type_title: defaultTrueSelection[0].type_title - }) - }) - } + state = { + dropmenu: 'drop', + menuitem: 'top', + prodID: "", + seller: "", + user_rating: "", + tag: "", + tag_title: "", + similar_item: "", + rating: "", + category: "", + category_link: "", + optionDropdown: [], + optionImage: [], + optionCustomBtn: [], + title: "", + about_item: "", + discount: "", + price: "", + list_price: "", + shipping: "", + ship_price: "", + type_selector: "", + selector_img: "", + selector_text: "", + message: "", + inStock: 0, + shipping_message: "", + banner: "", + lowstock_message: "", + type_title: "", + type: [], + selection: 0, + height: 0, + }; + componentDidMount() { + this.loadItem(this.props.params); + } - optionLogic = (options) => { - //function global variables initialized - let dropdownOption = []; - let imageOption = []; - let custombtnOption =[]; + loadItem = (params) => { + //calls the product by id + Axios({ + method: "GET", + url: `http://localhost:8080/variant/product/${params}`, + }).then((res) => { + //all the properties of the product are saved in state - these do not change upon selection. + this.setState({ + prodID: res.data.id, + seller: res.data.seller, + tag: res.data.tag, + tag_title: res.data.tag_title, + similar_item: res.data.similar_item, + rating: res.data.rating, + category: res.data.category, + category_link: res.data.category_link, + user_rating: res.data.user_rating, + }); + this.loadSelector(); + }); + }; - //this goes through the options and sorts them based on the type. - //in the future this would be more useful if there were multiple options available ie. images and dropdown selections - options.map( option => { - switch(option.type_selector){ - case 1: - dropdownOption.push(option) - break; - case 2: - imageOption.push(option) - break; - case 3: - custombtnOption.push(option) - break; - default: - "No options found" - } - }) + //this is all to figure out what the selection of the user is. + //the work here reverts everything to default which is a boolean in the data. + loadSelector = () => { + //this pulls all the selections in + Axios({ + method: "GET", + url: `http://localhost:8080/variant/selector/`, + }).then((res) => { + //filters out the selections based on the product + const trueSelections = res.data.filter( + (select) => select.productID === this.state.prodID + ); + //filters out the selection to the default selection of the product + const defaultTrueSelection = trueSelections.filter( + (defaulting) => defaulting.isdefault === true + ); + //the default options have been separated out into this function which goes through how everything is + //displayed after selecting default options. + this.optionLogic(trueSelections); + //catches the id of the selection + this.setState({ + options: trueSelections, + selection: defaultTrueSelection[0].id, + title: defaultTrueSelection[0].title, + about_item: defaultTrueSelection[0].about_item, + discount: defaultTrueSelection[0].discount, + list_price: defaultTrueSelection[0].list_price, + shipping: defaultTrueSelection[0].shipping, + ship_price: defaultTrueSelection[0].ship_price, + type_selector: defaultTrueSelection[0].type_selector, + selector_img: defaultTrueSelection[0].selector_img, + selector_text: defaultTrueSelection[0].selector_text, + inStock: defaultTrueSelection[0].instock, + message: defaultTrueSelection[0].message, + price: defaultTrueSelection[0].price, + lowstock_message: defaultTrueSelection[0].lowstock_message, + shipping_message: defaultTrueSelection[0].shipping_message, + type_title: defaultTrueSelection[0].type_title, + }); + }); + }; + optionLogic = (options) => { + //function global variables initialized + let dropdownOption = []; + let imageOption = []; + let custombtnOption = []; - if (dropdownOption.length > 0) { - this.setState({ - optionDropdown : dropdownOption - }) - } - if (imageOption.length > 0) { - this.setState({ - optionImage : imageOption - }) - } - if (custombtnOption.length > 0) { - this.setState({ - optionCustomBtn : custombtnOption - }) - } - } + //this goes through the options and sorts them based on the type. + //in the future this would be more useful if there were multiple options available ie. images and dropdown selections + options.map((option) => { + switch (option.type_selector) { + case 1: + dropdownOption.push(option); + break; + case 2: + imageOption.push(option); + break; + case 3: + custombtnOption.push(option); + break; + default: + console.log("No options found"); + } + }); - dropdownOption = () => { + if (dropdownOption.length > 0) { + this.setState({ + optionDropdown: dropdownOption, + }); + } + if (imageOption.length > 0) { + this.setState({ + optionImage: imageOption, + }); + } + if (custombtnOption.length > 0) { + this.setState({ + optionCustomBtn: custombtnOption, + }); + } + }; - if (this.state.optionDropdown.length > 0 ){ - return( - - - {this.state.optionDropdown[0].type_title} - - - {this.state.optionDropdown.map( option => this.changeOption(option.id)} >
{option.selector_text}
)} -
-
- )} - } + dropdownOption = () => { + if (this.state.optionDropdown.length > 0) { + return ( + + + {this.state.optionDropdown[0].type_title} + + + {this.state.optionDropdown.map((option) => ( + this.changeOption(option.id)} + > +
{option.selector_text}
+
+ ))} +
+
+ ); + } + }; - custombtnOption = () => { - if (this.state.optionCustomBtn.length > 0){ - return( -
-
{option.type_title}
- {this.state.optionCustomBtn.map( option =>
this.changeOption(option.id)}>
)} -
- ) - } - } + custombtnOption = () => { + if (this.state.optionCustomBtn.length > 0) { + return ( +
+
+ {this.state.optionCustomBtn[0].type_title}: +
+ {this.state.optionCustomBtn.map((option) => ( +
this.changeOption(option.id)} + > + {" "} + {" "} +
+ ))} +
+ ); + } + }; - imageOption = () => { - if (this.state.optionImage.length > 0){ - return( -
-
{option.type_title}
- {this.state.optionImage.map( option =>
{option.type_title}
{option.selector_text}this.changeOption(option.id)}/>
)} -
- ) - } - } + imageOption = () => { + if (this.state.optionImage.length > 0) { + return ( +
+
+ {this.state.optionImage[0].type_title}: +
+ {this.state.optionImage.map((option) => ( +
+
+ {option.selector_text} +
{" "} + {option.selector_text} this.changeOption(option.id)} + />{" "} +
+ ))} +
+ ); + } + }; - changeOption = (newID) => { - this.state.options.map( userpick => { - if(userpick.id == newID){ - this.setState({ - title : userpick.title, - about_item: userpick.about_item, - discount: userpick.discount, - list_price: userpick.list_price, - shipping: userpick.shipping, - ship_price: userpick.ship_price, - type_selector: userpick.type_selector, - selector_img: userpick.selector_img, - selector_text: userpick.selector_text, - inStock: userpick.inStock, - message: userpick.message, - price: userpick.price, - lowstock_message: userpick.lowstock_message, - shipping_message: userpick.shipping_message, - type_title: userpick.type_title - }) - } - }) - } + changeOption = (newID) => { + this.state.options.map((userpick) => { + if (userpick.id == newID) { + this.setState({ + selection: userpick.id, + title: userpick.title, + about_item: userpick.about_item, + discount: userpick.discount, + list_price: userpick.list_price, + shipping: userpick.shipping, + ship_price: userpick.ship_price, + type_selector: userpick.type_selector, + selector_img: userpick.selector_img, + selector_text: userpick.selector_text, + inStock: userpick.inStock, + message: userpick.message, + price: userpick.price, + lowstock_message: userpick.lowstock_message, + shipping_message: userpick.shipping_message, + type_title: userpick.type_title, + }); + } + }); + }; - render(){ - return( -
-
-
- -
-
- {this.dropdownOption()} -
-
- {this.imageOption()} -
-
- {this.custombtnOption()} -
-
- -
+ render() { -
- + return ( +
+ + +
+
+
+
+ +
+
+ {this.dropdownOption()} +
+
+ {this.imageOption()} +
+
+ {this.custombtnOption()} +
+
+
+
+
+
+ - + +
+ +

+ Customer ratings by feature +

+ +
+
-
- {/* */} -
- ) - } + + +
+
+ +
+ ); + } } -export default Product; \ No newline at end of file +export default Product; diff --git a/src/components/productVariant/product.css b/src/components/productVariant/product.css index 9c0a98f..597b5c2 100644 --- a/src/components/productVariant/product.css +++ b/src/components/productVariant/product.css @@ -1,11 +1,208 @@ -#ad-feedback-sprite-hero-quick-promo{ - display: inline-block; - vertical-align: top; - margin: 1px 0px; - width: 14px; - height: 12px; - background: url("https://images-na.ssl-images-amazon.com/images/G/01/ad-feedback/info_icon_1Xsprite._CB431021510_.png") 0px 0px no-repeat scroll transparent } +/* Product Variant Main Page */ +.productVariant-grid { + margin-left: 1em; +} + +.addcart-grid { + float: left; + padding: 20px; +} + +.addcart-component { + width: 100%; + height: 500px; + border-radius: 10%; + border: 2px solid gray; +} + +/* Header Component */ + +.a-spacing-none { + color: black; +} + +#bylineInfo_feature_div { + color: rgb(0, 102, 200); +} + +#ad-feedback-sprite-hero-quick-promo { + display: inline-block; + vertical-align: top; + margin: 1px 0px; + width: 14px; + height: 12px; + background: url("https://images-na.ssl-images-amazon.com/images/G/01/ad-feedback/info_icon_1Xsprite._CB431021510_.png") + 0px 0px no-repeat scroll transparent; +} .best { - background-color: hotpink; -} \ No newline at end of file + width: 130px; + color: white; + height: 0; + margin: 3px auto; + border-top: 11px solid rgb(228, 121, 17); + border-bottom: 11px solid rgb(228, 121, 17); + border-left: 11px solid rgb(228, 121, 17); + border-right: 11px solid transparent; + border-bottom-left-radius: 5px; + border-top-left-radius: 5px; + float: left; +} + +.choice { + float: left; + + width: 100px; + + color: white; + padding: 3px; + border-top: 20px solid black; + border-right: 20px solid transparent; + text-align: center; +} +#word-choice { + color: rgb(228, 121, 17); +} + +#best-wordplacement { + margin-top: -15px; + color: white; +} +#choice-wordplacement { + margin-top: -22px; +} + +/* Availability Component */ + +.availability { + font-size: 14px; +} +.maple-banner__text { + margin-top: 3px; + color: rgb(0, 102, 200); + cursor: pointer; +} + +.a-lineitem { + display: flex; +} + +.a-col { + width: 100px; + padding: 3px; + justify-content: start; + align-items: flex-start; +} + +/* Option Section (in the function for rendering images in options) -NOT A COMPONENT */ + +.options { + width: 300px; + font-size: 14px; + margin-top: 20px; +} + +.small-div-btn { + float: left; + font-size: 10px; + padding: 2px; + margin: 3px; + border-radius: 5%; + border: 1px solid gray; +} +#image-option-variant { + max-width: 70px; + cursor: pointer; +} +#custbtn-btn { + width: 70px; + border: none; +} + +/* Detail Component */ + +.detail-table { + margin-top: 20px; + padding-top: 30px; + width: 100%; +} +#custbtn-btn { + width: 70px; + border: none; +} + +/* Detail Component */ + +/* About-List Component */ + +.about-list-container { + font-size: 14px; + line-height: 20px; +} +.list-about-items { + margin-top: 7px; +} + +/* Sponsored Component */ + +#hero-quick-promo { + width: 100%; + overflow: hidden; + padding: 5px; + display: flex; + justify-content: center; + align-items: center; + border: 1px solid lightgray; + border-radius: 2%; +} +#promo-image { + max-width: 70%; +} +#sponsered-logo { + font-size: 10px; + color: gray; +} + +/* Ratings */ + +.star-rating-table { + margin: 0 auto; + text-align: center; + border-collapse: collapse; + font-size: 14px; + background: #fff; + font-weight: bolder; +} + +.star-rating-table th, +.star-rating-table td { + padding: 10px 30px; +} + +.star-rating-table th { + border-bottom: 1px solid #d4d4d4; +} + +.stars-outer { + display: inline-block; + position: relative; + font-family: FontAwesome; + color: #b3940b; +} + +.stars-outer::before { + content: "\f006 \f006 \f006 \f006 \f006"; +} + +.stars-inner { + position: absolute; + top: 0; + left: 0; + white-space: nowrap; + overflow: hidden; +} + +.stars-inner::before { + content: "\f005 \f005 \f005 \f005 \f005"; + color: #f8ce0b; +} diff --git a/src/components/productVariant/variant-Components/AboutList.jsx b/src/components/productVariant/variant-Components/AboutList.jsx index 90b37ca..2f724d5 100644 --- a/src/components/productVariant/variant-Components/AboutList.jsx +++ b/src/components/productVariant/variant-Components/AboutList.jsx @@ -8,9 +8,9 @@ function AboutList(props) { splittingItems.pop(); return( -
+
    - {splittingItems.map(point =>
  • {point}
  • )} + {splittingItems.map(point =>
  • {point}
  • )}
) diff --git a/src/components/productVariant/variant-Components/Availability.jsx b/src/components/productVariant/variant-Components/Availability.jsx index 52071f2..e560ddf 100644 --- a/src/components/productVariant/variant-Components/Availability.jsx +++ b/src/components/productVariant/variant-Components/Availability.jsx @@ -1,119 +1,237 @@ -import React, {Component} from 'react'; +import React, { Component } from "react"; class Availability extends Component { - constructor(props) { - super(props) - } + constructor(props) { + super(props); + } - //main pricing set-up for this section is called here - pricingLogic = (list_price, price, shipping, ship_price, discount, inStock, message, lowstock_message) => { - //derived values needed for discount - const saving_price = parseFloat(list_price) - parseFloat(price); - const saving_price_rounded = saving_price.toFixed(2); - const saving_percent = (parseFloat(saving_price)/parseFloat(list_price))*100 - const saving_percent_rounded = saving_percent.toFixed(0); + //main pricing set-up for this section is called here + pricingLogic = ( + list_price, + price, + shipping, + ship_price, + discount, + inStock, + message, + lowstock_message, + shipping_message + ) => { + //derived values needed for discount + const saving_price = parseFloat(list_price) - parseFloat(price); + const saving_price_rounded = saving_price.toFixed(2); + const saving_percent = + (parseFloat(saving_price) / parseFloat(list_price)) * 100; + const saving_percent_rounded = saving_percent.toFixed(0); + //tailored specifically for the formatting of a discount being added + //if there is a discount on the item listed + if (discount == true && inStock > 10) { + return ( +
+
+ + + + + + + + + + + + + + + +
+ List Price: + + + $ {list_price.toFixed(2)} + +
+ Price: + + + ${price.toFixed(2)}{" "} + + {this.shippingLogic( + shipping, + ship_price, + shipping_message + )} +
+ You Save: + + $ + + {saving_price_rounded}{" "} + + ( + + {saving_percent_rounded} + {" "} + %) +
+
+
this.outOfOrder()} + > + {message}. +
+
- //tailored specifically for the formatting of a discount being added - //if there is a discount on the item listed - if (discount == true && inStock > 10) { - return( -
-
-
- List Price: - - {list_price} -
- Price: - - ${price} - - { this.shippingLogic(shipping, ship_price)} -
- You Save: - - $ - - {saving_price_rounded} - - ( - {saving_percent_rounded} - %) -
- {message} -
-
+ //this is if the stock supply is running low + ); + } else if (inStock <= 10 && inStock > 0) { + return ( +
+
+

Only {inStock} are left!

+
+ + + + + + + +
+ Price: + + + ${price.toFixed(2)}{" "} + + {this.shippingLogic( + shipping, + ship_price, + shipping_message + )} +
+ +
+ {lowstock_message} +
+
+
- //this is if the stock supply is running low - )} else if ( inStock <= 10 && inStock > 0) { - return( -
-

- Only {inStock} are left! -

- -
- Price: - - {price} - - { this.shippingLogic(shipping, ship_price)} -
- {lowstock_message} -
+ //this is if the stock supply is empty + ); + } else if (parseInt(inStock) === 0) { + return ( +
+

Sorry, this item is out of Stock!

+
+ ); - //this is if the stock supply is empty - )} else if ( parseInt(inStock) === 0){ -

- Sorry, this item is out of Stock! -

- - // this is the default scenario - } else { - return( -
-
- Price: - - {price} - - { this.shippingLogic(shipping, ship_price)} -
- {lowstock_message} -
- )} - } + // this is the default scenario + } else { + return ( +
+ + + + + + + +
+ Price: + + + ${price.toFixed(2)} + + {this.shippingLogic( + shipping, + ship_price, + shipping_message + )} +
+ +
+ {lowstock_message} +
+
+
+ ); + } + }; - //shipping logic - above equation calls on this function. - shippingLogic = (shipping, ship_price) => { - if(shipping === true || parseFloat(ship_price) === 0){ - return ( - - + $ - - {ship_price} - - shipping - - )} else { - return ( - - + - - FREE - - shipping - - )} - } + //shipping logic - above equation calls on this function. + shippingLogic = (shipping, ship_price, message) => { + if (shipping === true || parseFloat(ship_price) === 0) { + return ( + + + $ + + {ship_price.toFixed(2)} + {" "} + shipping. {message} + + ); + } else { + return ( + + +{" "} + FREE + shipping . {message} + + ); + } + }; -render() { - return( -
- {this.pricingLogic(this.props.list_price, this.props.price, this.props.shipping, this.props.ship_price, this.props.discount, this.props.inStock, this.props.message, this.props.lowstock_message )} -
- )} + //any logic that has not been handled can call this. + outOfOrder = () => { + alert("This feature is temporarily out of order."); + }; + + render() { + return ( +
+ {this.pricingLogic( + this.props.list_price, + this.props.price, + this.props.shipping, + this.props.ship_price, + this.props.discount, + this.props.inStock, + this.props.message, + this.props.lowstock_message, + this.props.shipping_message + )} +
+ ); + } } export default Availability; diff --git a/src/components/productVariant/variant-Components/Details.jsx b/src/components/productVariant/variant-Components/Details.jsx index ecbc837..fff0fd1 100644 --- a/src/components/productVariant/variant-Components/Details.jsx +++ b/src/components/productVariant/variant-Components/Details.jsx @@ -8,7 +8,7 @@ class Details extends Component { } state = { - detail_state: [] + detail_state: [], } //mount detail loader @@ -21,7 +21,7 @@ class Details extends Component { //calls the all of the details Axios({ method: 'GET', - url: `http://localhost:8080/variant/detail` + url: `http://localhost:8080/variant/detail/` }).then (res => { this.setState({ detail_state : res.data @@ -30,9 +30,9 @@ class Details extends Component { } - tableDetailLogic= (id) => { + tableDetailLogic= () => { //filter through details for the correct "selection ID," not product ID - const filterDetails = this.state.detail_state.filter( detail => detail.selectorID === id) + const filterDetails = this.state.detail_state.filter( detail => detail.selectorid == this.props.id) //send table with updated values to be rendered return( @@ -60,7 +60,7 @@ class Details extends Component { render() { return(
- {this.tableDetailLogic(this.props.id)} + {this.tableDetailLogic()}
)} } diff --git a/src/components/productVariant/variant-Components/Header.jsx b/src/components/productVariant/variant-Components/Header.jsx index 3404dde..81995a0 100644 --- a/src/components/productVariant/variant-Components/Header.jsx +++ b/src/components/productVariant/variant-Components/Header.jsx @@ -1,67 +1,87 @@ -import React, { Component } from 'react'; -import Axios from 'axios'; +import React, { Component } from "react"; +import Axios from "axios"; class Header extends Component { - constructor (props){ - super(props) - this.state = { - id : props.id - } - } + constructor(props) { + super(props); + this.state = { + id: props.id, + }; + } - hasTag = (tag, tag_title) => { - if (tag === true) { - switch(tag_title) { - case "#1 Best Seller": - break; - case "Amazin's Choice": - return
Amazin's Choice
- break; - default: "" - } - }else { -
- } - } + hasTag = (tag, tag_title) => { + if (tag === true) { + console.log(tag, tag_title); + switch (tag_title) { + case "#1 Best Seller": + return
#1 Best Seller
; + break; + case "Amazin's Choice": + return
Amazin's Choice
; + //break; //<--- not needed as return will break out of switch + default: + break; + } + } else { + return
; + } + }; - render(){ - return( -
-
-

- - {this.props.title} - -

-
-
-
- by -
- {this.props.seller} -
-
-
- - - - {this.props.rating} - - {this.props.user_rating} - - -
-
- -
- ) - } + render() { + return ( +
+
+

+ + {this.props.title} + +

+
+ +
+
+ + + + {this.props.rating} + + + {this.props.user_rating} + + + +
+
+ +
+ ); + } } export default Header; diff --git a/src/components/productVariant/variant-Components/Ratings.jsx b/src/components/productVariant/variant-Components/Ratings.jsx index 896b387..5d54927 100644 --- a/src/components/productVariant/variant-Components/Ratings.jsx +++ b/src/components/productVariant/variant-Components/Ratings.jsx @@ -1,10 +1,61 @@ -import React from 'react'; +import React, { Component } from 'react'; +import Axios from 'axios'; -function Ratings() { +class Ratings extends Component{ + constructor(props){ + super(props) + } + state= { + features: [] + } + + componentDidMount() { + this.loadFeatures(); + } + + //load all details + loadFeatures = () => { + //calls the all of the details + Axios({ + method: 'GET', + url: `http://localhost:8080/variant/feature/` + }).then (res => { + const featureArray = res.data.filter( feature => feature.productvid == this.props.id) + this.setState({ + features : featureArray + }) + }) + } + + innerStar = (rating) => { + let percent = Math.round((rating/5)*100); + let percentage=percent+"%"; + return ( +
+ ) + } + + +render(){ return(
+ + {this.state.features.map( feature => + + + + + + )} + +
{feature.title} +
+ {this.innerStar(feature.rating)} +
+
{parseFloat(feature.rating).toFixed(1)}
) } +} export default Ratings; \ No newline at end of file diff --git a/src/components/productVariant/variant-Components/Sponsered.jsx b/src/components/productVariant/variant-Components/Sponsered.jsx deleted file mode 100644 index afecb9d..0000000 --- a/src/components/productVariant/variant-Components/Sponsered.jsx +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react'; - -function Sponsered(props) { - const sponseredBadge = "./images/" + props.category; - return( - - ) -} - -export default Sponsered; \ No newline at end of file diff --git a/src/components/productVariant/variant-Components/Sponsored.jsx b/src/components/productVariant/variant-Components/Sponsored.jsx new file mode 100644 index 0000000..550540f --- /dev/null +++ b/src/components/productVariant/variant-Components/Sponsored.jsx @@ -0,0 +1,16 @@ +import React from 'react'; + +function Sponsored(props) { + return( + +
+ {props.category}/ +
+ +
+ ) +} + +export default Sponsored; \ No newline at end of file diff --git a/src/components/qacomponent.css b/src/components/qacomponent.css new file mode 100644 index 0000000..057111e --- /dev/null +++ b/src/components/qacomponent.css @@ -0,0 +1,97 @@ +/* Chrome, Safari, Edge, Opera */ +input::-webkit-outer-spin-button, +input::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} + +/* Firefox */ +input[type=number] { + -moz-appearance: textfield; +} + +.QAitem { + font-family: "Lato", sans-serif; +} + +h4 { + font: bold; + margin: 5px; +} + +.section { + display: flex; + padding-left: 10px; +} + +.qAndA { + display: block; + font-size: 14px; +} + +.question { + display: flex; + padding-top: 10px; +} + +#individual { + margin-left: 20px; + margin-top: 5px; +} + +#list { + padding: 0; +} + +.arrow { + border: solid black; + border-width: 0 3px 3px 0; + display: inline-block; + padding: 3px; +} + +.up { + transform: rotate(-135deg); + -webkit-transform: rotate(-135deg); +} + +.down { + transform: rotate(45deg); + -webkit-transform: rotate(45deg); +} + +.answer { + padding-left: 10px; +} + +.votes { + display: grid; + position: relative; + margin-top: 15px; + border-right: 1px solid rgb(212, 209, 209); +} + +.qanda { + display: flex; +} + +input { + width: 30px; + border: 0ex; +} + +#votes { + text-align: center; + padding-left: 5px; + padding-right: 10px; +} + +#add { + width: 25px; + border-width: 0; +} + +#subtract { + width: 25px; + border-width: 0; +} diff --git a/src/service/QAndADataService.js b/src/service/QAndADataService.js index 88b10b4..d16f479 100644 --- a/src/service/QAndADataService.js +++ b/src/service/QAndADataService.js @@ -1,18 +1,21 @@ -import axios from 'axios' - -const Q_AND_A_API_URL = 'http://localhost:8080/qAndAs/' +import axios from "axios"; +//connect to server +const Q_AND_A_API_URL = "http://localhost:8080/qAndAs/"; +const ANSWERS_API_URL = "http://localhost:8080/answers/"; class QAndADataService { + retrieveAllQAndAs() { + return axios.get(`${Q_AND_A_API_URL}/`); + } - retrieveAllQAndAs() { - return axios.get(`${Q_AND_A_API_URL}/`); - } - - retrieveQAndA(id) { - return axios.get(`${Q_AND_A_API_URL}/${id}`); - } + retrieveQAndA(id) { + return axios.get(`${Q_AND_A_API_URL}/${id}`); + } + retrieveAllAnswers() { + return axios.get(`${ANSWERS_API_URL}/`); + } } -export default new QAndADataService() \ No newline at end of file +export default new QAndADataService(); diff --git a/tests/__snapshots__/comparisongrid.spec.js.snap b/tests/__snapshots__/comparisongrid.spec.js.snap deleted file mode 100644 index 5844656..0000000 --- a/tests/__snapshots__/comparisongrid.spec.js.snap +++ /dev/null @@ -1,292 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`matches snapshot 1`] = ` -
-

- Hello -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Category - - Product #1 - - Product #2 - - Product #3 - - Product #4 -
- Power - - 1100 - - 1000 - - 1200 - - 1300 -
- Automatic Modes - - 0 - - 4 - - 4 - - 0 -
- Manual Modes - - 4 - - 1 - - 0 - - 4 -
- Price ($USD) - - 305 - - 307 - - 607 - - 403 -
- Rating - - 2 - - 3 - - 5 - - 3 -
- Hello - - 2 - - 3 - - 5 - - 3 -
-
-
-`; diff --git a/tests/__snapshots__/customerReviews.spec.js.snap b/tests/__snapshots__/customerReviews.spec.js.snap index 61b602b..e4a46b7 100644 --- a/tests/__snapshots__/customerReviews.spec.js.snap +++ b/tests/__snapshots__/customerReviews.spec.js.snap @@ -32,7 +32,9 @@ exports[`matches snapshot 1`] = ` - @@ -110,9 +112,12 @@ exports[`matches snapshot 1`] = ` - + *Star rating icon* Review title! @@ -120,12 +125,16 @@ exports[`matches snapshot 1`] = ` -
+
Review Date
-
+ Verified Purchase -
+

Submitted review form goes here diff --git a/tests/blBlueTopBar.spec.js b/tests/blBlueTopBar.spec.js new file mode 100644 index 0000000..3f56525 --- /dev/null +++ b/tests/blBlueTopBar.spec.js @@ -0,0 +1,20 @@ +import React from "react"; +import BlueSecondTopLine from "../src/components/SecondTopLine/BlueSecondTopline"; +import ReactDom from "react-dom"; +import { cleanup } from "@testing-library/react"; +import { shallow, configure } from "enzyme"; +import Adapter from "enzyme-adapter-react-16"; +configure({ adapter: new Adapter() }); + +// this here is gold +afterEach(cleanup); +// it kills anything after each test so need to unmount + +// basic crash test 1 star + +describe("This component test should render 2nd blue top bar without crashing", () => { + it("Should render as expected!", () => { + const div = document.createElement("div"); + ReactDom.render(, div); + }); +}); diff --git a/tests/blStars3.spec.js b/tests/blStars3.spec.js index 99ee377..ac86961 100644 --- a/tests/blStars3.spec.js +++ b/tests/blStars3.spec.js @@ -28,4 +28,9 @@ describe("it should have a/an ratings a tag", () => { const magicWords = 72 answered questions; expect(wrapper.contains(magicWords)).toEqual(true); }); -}); \ No newline at end of file +}); + + + + +/////red hooded sweatshirt \ No newline at end of file diff --git a/tests/chartBad.spec.js b/tests/chartBad.spec.js index 3ae9724..90a031d 100644 --- a/tests/chartBad.spec.js +++ b/tests/chartBad.spec.js @@ -25,7 +25,7 @@ describe("This component test should render for 1 star mock chart without crashi // test to see if component contains h5 ratings - +// comment describe("it should say customer ratings ", () => { it('contains the string "66,847 customer ratings" in an h5 element', () => { diff --git a/tests/chartLow.spec.js b/tests/chartLow.spec.js index 668370f..9c4183c 100644 --- a/tests/chartLow.spec.js +++ b/tests/chartLow.spec.js @@ -25,7 +25,7 @@ describe("it should show some customer ratings ", () => { expect(wrapper.contains(magicWords)).toEqual(true); }); }); - +//// y describe("it should have an a tag for 5 star ratings ", () => { it('containsan a tag "5 star" in the component', () => { diff --git a/tests/comparisongrid.spec.js b/tests/comparisongrid.spec.js index d720b64..b9161c0 100644 --- a/tests/comparisongrid.spec.js +++ b/tests/comparisongrid.spec.js @@ -16,13 +16,6 @@ it("renders without crashing", () => { it("renders component correctly", () => { const { getByTestId } = render(); - expect(getByTestId('comparisonGrid')).toHaveTextContent("Category"); + expect(getByTestId('comparisonGrid')).toHaveTextContent("Product"); }) -it("matches snapshot", () => { - const tree = renderer.create().toJSON(); - expect(tree).toMatchSnapshot(); -}) - -//don't forget to update the snapshot so that tests pass - diff --git a/tests/customerImagesAll.spec.js b/tests/customerImagesAll.spec.js new file mode 100644 index 0000000..f27e733 --- /dev/null +++ b/tests/customerImagesAll.spec.js @@ -0,0 +1,13 @@ +import {CImage} from '../src/components/CustomerImageCmpnt/CustomerImageIndividual' + + +describe('My Test q', () => { + it('My Test a', () => { + expect(true).toEqual(true); + }); + }); + + +test('Cimage',()=>{ + expect(styled.width).toBe(153) +}) \ No newline at end of file diff --git a/tests/footertest.spec.js b/tests/footertest.spec.js new file mode 100644 index 0000000..8619baa --- /dev/null +++ b/tests/footertest.spec.js @@ -0,0 +1,58 @@ +import React from "react"; +import Footer from "../src/components/Footer/Footer"; +import BottomLine from "../src/components/Footer/BottomLine"; +import ReactDom from "react-dom"; +import { cleanup } from "@testing-library/react"; +import { shallow, configure } from "enzyme"; +import Adapter from "enzyme-adapter-react-16"; +configure({ adapter: new Adapter() }); + +// this here is gold +afterEach(cleanup); +// it kills anything after each test so need to unmount + +// basic crash test + +describe("This component test should render the footer without crashing", () => { + it("Should render as expected!", () => { + const div = document.createElement("div"); + ReactDom.render(