diff --git a/_redirects b/_redirects new file mode 100644 index 0000000..78f7f20 --- /dev/null +++ b/_redirects @@ -0,0 +1 @@ +/* /index.html 200 \ No newline at end of file diff --git a/asset-manifest.json b/asset-manifest.json new file mode 100644 index 0000000..59d9052 --- /dev/null +++ b/asset-manifest.json @@ -0,0 +1,13 @@ +{ + "files": { + "main.css": "/shopping-cart-react-redux/static/css/main.d3986863.css", + "main.js": "/shopping-cart-react-redux/static/js/main.dc260abc.js", + "index.html": "/shopping-cart-react-redux/index.html", + "main.d3986863.css.map": "/shopping-cart-react-redux/static/css/main.d3986863.css.map", + "main.dc260abc.js.map": "/shopping-cart-react-redux/static/js/main.dc260abc.js.map" + }, + "entrypoints": [ + "static/css/main.d3986863.css", + "static/js/main.dc260abc.js" + ] +} \ No newline at end of file diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..a11777c Binary files /dev/null and b/favicon.ico differ diff --git a/images/bag-icon.svg b/images/bag-icon.svg new file mode 100644 index 0000000..c5d2fa6 --- /dev/null +++ b/images/bag-icon.svg @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/images/prod1.png b/images/prod1.png new file mode 100644 index 0000000..3eae83d Binary files /dev/null and b/images/prod1.png differ diff --git a/images/prod2.png b/images/prod2.png new file mode 100644 index 0000000..fa2cc7a Binary files /dev/null and b/images/prod2.png differ diff --git a/images/prod3.png b/images/prod3.png new file mode 100644 index 0000000..fcf0c2a Binary files /dev/null and b/images/prod3.png differ diff --git a/images/prod4.png b/images/prod4.png new file mode 100644 index 0000000..9f333e2 Binary files /dev/null and b/images/prod4.png differ diff --git a/images/prod5.png b/images/prod5.png new file mode 100644 index 0000000..e3eef29 Binary files /dev/null and b/images/prod5.png differ diff --git a/images/prod6.png b/images/prod6.png new file mode 100644 index 0000000..133ee59 Binary files /dev/null and b/images/prod6.png differ diff --git a/images/prod7.png b/images/prod7.png new file mode 100644 index 0000000..8336bf1 Binary files /dev/null and b/images/prod7.png differ diff --git a/images/prod8.png b/images/prod8.png new file mode 100644 index 0000000..1e522f0 Binary files /dev/null and b/images/prod8.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..87b2d56 --- /dev/null +++ b/index.html @@ -0,0 +1 @@ +Redux Shopping Cart
\ No newline at end of file diff --git a/logo192.png b/logo192.png new file mode 100644 index 0000000..fc44b0a Binary files /dev/null and b/logo192.png differ diff --git a/logo512.png b/logo512.png new file mode 100644 index 0000000..a4e47a6 Binary files /dev/null and b/logo512.png differ diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..080d6c7 --- /dev/null +++ b/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..e9e57dc --- /dev/null +++ b/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/static/css/main.d3986863.css b/static/css/main.d3986863.css new file mode 100644 index 0000000..d35ae3c --- /dev/null +++ b/static/css/main.d3986863.css @@ -0,0 +1,2 @@ +@import url(https://fonts.googleapis.com/css2?family=Roboto&display=swap);*,:after,:before{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;scroll-behavior:smooth}body{background-color:#f5f9fc;font-family:Roboto,sans-serif}button,input,textarea{border:none;color:inherit;font-family:inherit;outline:none}button{cursor:pointer}textarea{resize:vertical}h1,h2,h3,h4,h5,h6{font-weight:500}ul{list-style-type:none}a{color:inherit;text-decoration:none}img{height:auto;max-width:100%}img,svg{-webkit-user-select:none;user-select:none;vertical-align:middle}.overflow_hide{overflow:hidden}.container{margin-left:auto;margin-right:auto;max-width:1320px;padding-left:.75rem;padding-right:.75rem}#footer,#header,.cart_foot,.cart_head{background-color:#593d88;color:#fff}#header{left:0;padding:1rem 0;position:fixed;top:0;width:100%}.navbar{align-items:center;display:flex;justify-content:space-between}.cart_icon{cursor:pointer;position:relative}.cart_icon .badge{background-color:#242526;border-radius:50%;color:#fff;display:inline-block;font-size:.8rem;line-height:1;padding:.35rem .55rem}#home{padding:6rem 0 4rem}.home_content{grid-gap:2rem;display:grid;gap:2rem;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));text-align:center}@media(max-width:399px){.home_content{grid-template-columns:1fr}}.product_card{background-color:inherit;box-shadow:0 5px 15px rgba(0,0,0,.35);overflow:hidden;padding-top:1rem}.product_card img{max-width:200px;width:50%}.product_card .rating{color:#593d88;font-size:.8rem}.product_card .title{font-size:1.1rem;margin:.6rem 0}.product_card .price{font-weight:700}.product_card .btn{background-color:#593d88;color:#ddd;font-size:1rem;margin-top:1rem;padding:.6rem 0;transition:all .2s ease;width:100%}.product_card .btn.added,.product_card .btn:hover{color:#fff}#footer{padding:1.4rem 0;text-align:center}#footer p{letter-spacing:1px;margin-top:.8rem;text-transform:uppercase}#footer p a{opacity:.8}#footer p a:hover{opacity:1}#footer .repo_link{opacity:.8}#footer .repo_link:hover{opacity:1}#cart{background-color:rgba(0,0,0,.3);left:0;position:fixed;z-index:999}#cart,.cart_content{height:100%;top:0;width:100%}.cart_content{background-color:#f5f9fc;max-width:600px;position:absolute;right:0}.cart_head{box-shadow:0 5px 15px rgba(0,0,0,.5);padding:1rem;text-align:center}.cart_head .close_btn{background-color:#ebedf0;color:#000;cursor:pointer;left:0;opacity:.8;padding:.2rem .6rem;position:absolute;top:0;transition:opacity .2s ease}.cart_head .close_btn:hover{opacity:1}.cart_head .close_btn span{font-size:2.2rem;line-height:.8}.cart_body{max-height:85%;overflow-x:hidden;overflow-y:auto;padding:1.8rem 1.5rem}.cart_items{grid-gap:2.2rem;align-items:center;display:grid;gap:2.2rem;grid-template-columns:.5fr .7fr .2fr .1fr;margin-bottom:2rem}.cart_items_info .price{font-weight:600;margin-top:.8rem}.cart_items_quantity{align-items:center;background-color:#593d88;color:#fff;display:flex;flex-direction:column;gap:.8rem;padding:.5rem 0}.cart_items_quantity span{background-color:#ebedf0;color:#000;cursor:pointer;font-size:1.2rem;line-height:.5;opacity:.875;padding:.2rem;-webkit-user-select:none;user-select:none}.cart_items_quantity span:hover{opacity:1}.cart_items_delete{cursor:pointer;font-size:2rem;line-height:.5;opacity:.7;text-align:center;transition:opacity .2s ease}.cart_items_delete:hover{opacity:1}.cart_foot{align-items:center;bottom:0;box-shadow:0 -5px 15px rgba(0,0,0,.5);display:flex;justify-content:space-between;left:0;padding:1rem;position:absolute;width:100%}.cart_foot h3 b{font-size:1.4rem;margin-left:.6rem}.cart_foot .checkout_btn{background-color:#ebedf0;color:#000;font-size:1rem;padding:.4rem .8rem}.cart_foot .checkout_btn[disabled]{cursor:not-allowed;opacity:.5} +/*# sourceMappingURL=main.d3986863.css.map*/ \ No newline at end of file diff --git a/static/css/main.d3986863.css.map b/static/css/main.d3986863.css.map new file mode 100644 index 0000000..7e44232 --- /dev/null +++ b/static/css/main.d3986863.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/main.d3986863.css","mappings":"0EAwBA,iBAKI,sBAFA,SACA,SACA,CAIJ,KACI,eACA,uBAGJ,KAEI,yBADA,6BAlCS,CAsCb,sBAII,YADA,cAGA,oBADA,YACA,CAGJ,OACI,eAGJ,SACI,gBAGJ,kBAMI,gBAGJ,GACI,qBAGJ,EAEI,cADA,oBACA,CAGJ,IAEI,YADA,cACA,CAGJ,QAGI,0CADA,qBACA,CAKJ,eACI,gBAGJ,WAEI,iBACA,kBAFA,iBAGA,oBACA,qBAGJ,sCAII,wBAnGY,CAoGZ,WAKJ,QAGI,OAEA,eAJA,eACA,MAEA,UACA,CAGJ,QAtGI,mBAFA,aACA,6BAwG6B,CAGjC,WAEI,eADA,iBACA,CAEA,kBAEI,wBA5HI,CAiIJ,kBAJA,WAFA,qBAIA,gBADA,cAEA,qBACA,CAMR,MACI,oBAGJ,cAGI,cAFA,aAEA,SADA,yDAEA,kBAEA,wBANJ,cAOQ,2BAIR,cACI,yBACA,qCApJU,CAsJV,gBADA,gBACA,CAEA,kBAEI,gBADA,SACA,CAGJ,sBACI,aAjKQ,CAkKR,gBAGJ,qBACI,iBACA,eAGJ,qBACI,gBAGJ,mBACI,wBA/KQ,CAgLR,WAIA,eAFA,gBACA,gBAEA,wBAJA,UAIA,CAEA,kDAEI,WAOZ,QAEI,iBADA,iBACA,CAEA,UACI,mBAEA,iBADA,wBACA,CAEA,YACI,WAEA,kBACI,UAKZ,mBACI,WAEA,yBACI,UAOZ,MAOI,gCAJA,OAFA,eAGA,WAGA,CAGJ,oBAJI,YAJA,MAGA,UAYA,CAPJ,cACI,wBA3OS,CA+OT,gBAHA,kBAEA,OAGA,CAGJ,WAGI,qCAFA,aACA,iBAlPU,CAqPV,sBAII,wBA5PK,CA6PL,WAEA,eAJA,OAKA,WAFA,oBALA,kBACA,MAOA,4BAEA,4BACI,UAGJ,2BACI,iBACA,eAMZ,WAEI,eACA,kBACA,gBAHA,qBAGA,CAGJ,YAII,gBADA,mBAFA,aAGA,WAFA,0CAGA,mBAIA,wBACI,gBACA,iBAIR,qBAEI,mBAGA,wBAxSY,CAySZ,WALA,aAEA,sBACA,UAGA,gBAEA,0BAEI,wBAhTK,CAiTL,WAGA,eALA,iBAGA,eAIA,aAHA,cAEA,yCACA,CAEA,gCACI,UAKZ,mBAII,eAHA,eACA,eAGA,WAFA,kBAGA,4BAEA,yBACI,UAIR,WA9TI,kBA+T6B,CAE7B,SAIA,sCAvUA,aACA,6BAgUc,CAGd,OAEA,aAJA,kBAGA,UA5UU,CAiVN,gBAEI,iBADA,iBACA,CAIR,yBACI,wBA5VK,CA6VL,WACA,eACA,oBAEA,mCAEI,mBADA,UACA","sources":["index.scss"],"sourcesContent":["@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');\n\n\n/*--====== Variables ======--*/\n$main-font: 'Roboto', sans-serif;\n$body-color: #f5f9fc;\n$text-light: #ebedf0;\n$text-dark: #242526;\n$primary-color: #593D88;\n$head-shadow: 0px 5px 15px rgba(0, 0, 0, 0.5);\n$foot-shadow: 0px -5px 15px rgba(0, 0, 0, 0.5);\n$card-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;\n\n\n/*--====== Mixins ======--*/\n\n@mixin flex($justify, $align) {\n display: flex;\n justify-content: $justify;\n align-items: $align;\n}\n\n\n/*--====== CSS Reset ======--*/\n*,\n*::before,\n*::after {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n\n\nhtml {\n font-size: 16px;\n scroll-behavior: smooth;\n}\n\nbody {\n font-family: $main-font;\n background-color: $body-color;\n}\n\ninput,\nbutton,\ntextarea {\n color: inherit;\n border: none;\n outline: none;\n font-family: inherit;\n}\n\nbutton {\n cursor: pointer;\n}\n\ntextarea {\n resize: vertical;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-weight: 500;\n}\n\nul {\n list-style-type: none;\n}\n\na {\n text-decoration: none;\n color: inherit;\n}\n\nimg {\n max-width: 100%;\n height: auto;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n user-select: none;\n}\n\n\n/*--====== Common Styles ======--*/\n.overflow_hide {\n overflow: hidden;\n}\n\n.container {\n max-width: 1320px;\n margin-left: auto;\n margin-right: auto;\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n\n#header,\n#footer,\n.cart_head,\n.cart_foot {\n background-color: $primary-color;\n color: #fff;\n}\n\n\n/*--====== Header Section ======--*/\n#header {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n padding: 1rem 0;\n}\n\n.navbar {\n @include flex(space-between, center);\n}\n\n.cart_icon {\n position: relative;\n cursor: pointer;\n\n .badge {\n display: inline-block;\n background-color: $text-dark;\n color: #fff;\n line-height: 1;\n font-size: 0.8rem;\n padding: 0.35rem 0.55rem;\n border-radius: 50%;\n }\n}\n\n\n/*--====== Home / Products Section ======--*/\n#home {\n padding: 6rem 0 4rem;\n}\n\n.home_content {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));\n gap: 2rem;\n text-align: center;\n\n @media(max-width: 399px) {\n grid-template-columns: 1fr;\n }\n}\n\n.product_card {\n background-color: inherit;\n box-shadow: $card-shadow;\n padding-top: 1rem;\n overflow: hidden;\n\n img {\n width: 50%;\n max-width: 200px;\n }\n\n .rating {\n color: $primary-color;\n font-size: 0.8rem;\n }\n\n .title {\n font-size: 1.1rem;\n margin: 0.6rem 0;\n }\n\n .price {\n font-weight: bold;\n }\n\n .btn {\n background-color: $primary-color;\n color: #ddd;\n width: 100%;\n margin-top: 1rem;\n padding: 0.6rem 0;\n font-size: 1rem;\n transition: all 0.2s ease;\n\n &:hover,\n &.added {\n color: #fff;\n }\n }\n}\n\n\n/*--====== Footer Section ======--*/\n#footer {\n text-align: center;\n padding: 1.4rem 0;\n\n p {\n letter-spacing: 1px;\n text-transform: uppercase;\n margin-top: 0.8rem;\n\n a {\n opacity: 0.8;\n\n &:hover {\n opacity: 1;\n }\n }\n }\n\n .repo_link {\n opacity: 0.8;\n\n &:hover {\n opacity: 1;\n }\n }\n}\n\n\n/*--====== Cart Section ======--*/\n#cart {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 999;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.3);\n}\n\n.cart_content {\n background-color: $body-color;\n position: absolute;\n top: 0;\n right: 0;\n max-width: 600px;\n width: 100%;\n height: 100%;\n}\n\n.cart_head {\n padding: 1rem;\n text-align: center;\n box-shadow: $head-shadow;\n\n .close_btn {\n position: absolute;\n top: 0;\n left: 0;\n background-color: $text-light;\n color: #000;\n padding: 0.2rem 0.6rem;\n cursor: pointer;\n opacity: 0.8;\n transition: opacity 0.2s ease;\n\n &:hover {\n opacity: 1;\n }\n\n span {\n font-size: 2.2rem;\n line-height: 0.8;\n }\n }\n\n}\n\n.cart_body {\n padding: 1.8rem 1.5rem;\n max-height: 85%;\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n.cart_items {\n display: grid;\n grid-template-columns: 0.5fr 0.7fr 0.2fr 0.1fr;\n align-items: center;\n gap: 2.2rem;\n margin-bottom: 2rem;\n}\n\n.cart_items_info {\n .price {\n font-weight: 600;\n margin-top: 0.8rem;\n }\n}\n\n.cart_items_quantity {\n display: flex;\n align-items: center;\n flex-direction: column;\n gap: 0.8rem;\n background-color: $primary-color;\n color: #fff;\n padding: 0.5rem 0;\n\n span {\n font-size: 1.2rem;\n background-color: $text-light;\n color: #000;\n line-height: 0.5;\n padding: 0.2rem;\n cursor: pointer;\n user-select: none;\n opacity: 0.875;\n\n &:hover {\n opacity: 1;\n }\n }\n}\n\n.cart_items_delete {\n font-size: 2rem;\n line-height: 0.5;\n text-align: center;\n cursor: pointer;\n opacity: 0.7;\n transition: opacity 0.2s ease;\n\n &:hover {\n opacity: 1;\n }\n}\n\n.cart_foot {\n @include flex(space-between, center);\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n padding: 1rem;\n box-shadow: $foot-shadow;\n\n h3 {\n b {\n margin-left: 0.6rem;\n font-size: 1.4rem;\n }\n }\n\n .checkout_btn {\n background-color: $text-light;\n color: #000;\n font-size: 1rem;\n padding: 0.4rem 0.8rem;\n\n &[disabled] {\n opacity: 0.5;\n cursor: not-allowed;\n }\n }\n}"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/static/js/main.dc260abc.js b/static/js/main.dc260abc.js new file mode 100644 index 0000000..770e335 --- /dev/null +++ b/static/js/main.dc260abc.js @@ -0,0 +1,3 @@ +/*! For license information please see main.dc260abc.js.LICENSE.txt */ +!function(){"use strict";var e={110:function(e,t,n){var r=n(309),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},l={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},o={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},i={};function u(e){return r.isMemo(e)?o:i[e.$$typeof]||a}i[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},i[r.Memo]=o;var c=Object.defineProperty,s=Object.getOwnPropertyNames,f=Object.getOwnPropertySymbols,d=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,h=Object.prototype;e.exports=function e(t,n,r){if("string"!==typeof n){if(h){var a=p(n);a&&a!==h&&e(t,a,r)}var o=s(n);f&&(o=o.concat(f(n)));for(var i=u(t),m=u(n),v=0;v