diff --git a/README.md b/README.md index c7ca6a7..a24c747 100644 --- a/README.md +++ b/README.md @@ -18,8 +18,10 @@ Start: zola serve ``` -To update the .bundle.js and .jsx file: +To build the .bundle.js from .jsx files: ``` - nix-shell -p nodejs --run "npm run build" + nix-shell -p nodejs + npm install + npm run build ``` diff --git a/package-lock.json b/package-lock.json index d5090d5..0fa1a6d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,8 +12,8 @@ "@babel/core": "^7.23.2", "@babel/preset-env": "^7.23.2", "@babel/preset-react": "^7.22.15", + "@hello-pangea/dnd": "^16.5.0", "@uidotdev/usehooks": "^2.4.1", - "axios": "^1.6.0", "babel-loader": "^9.1.3", "babel-preset-minify": "^0.5.2", "bootstrap": "^5.3.0", @@ -21,12 +21,13 @@ "json-logic-js": "^2.0.2", "prop-types": "^15.8.1", "react": "^18.2.0", - "react-beautiful-dnd": "^13.1.1", "react-bootstrap": "^2.9.1", "react-dom": "^18.2.0", "uuid": "^9.0.1", "webpack": "^5.89.0", - "webpack-cli": "^5.1.4" + "webpack-cli": "^5.1.4", + "webpack-preprocessor-loader": "^1.3.0", + "zustand": "^4.4.7" } }, "node_modules/@ampproject/remapping": { @@ -1785,12 +1786,12 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", - "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.7.tgz", + "integrity": "sha512-w06OXVOFso7LcbzMiDGt+3X7Rh7Ho8MmgPoWU3rarH+8upf+wSU/grlGbWzQyr3DkdN6ZeuMFjpdwW0Q+HxobA==", "dev": true, "dependencies": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" @@ -1854,6 +1855,76 @@ "node": ">=10.0.0" } }, + "node_modules/@hello-pangea/dnd": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/@hello-pangea/dnd/-/dnd-16.5.0.tgz", + "integrity": "sha512-n+am6O32jo/CFXciCysz83lPM3I3F58FJw4uS44TceieymcyxQSfzK5OhzPAKrVBZktmuOI6Zim9WABTMtXv4A==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.23.2", + "css-box-model": "^1.2.1", + "memoize-one": "^6.0.0", + "raf-schd": "^4.0.3", + "react-redux": "^8.1.3", + "redux": "^4.2.1", + "use-memo-one": "^1.1.3" + }, + "peerDependencies": { + "react": "^16.8.5 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.5 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@hello-pangea/dnd/node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "dev": true + }, + "node_modules/@hello-pangea/dnd/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/@hello-pangea/dnd/node_modules/react-redux": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.1.3.tgz", + "integrity": "sha512-n0ZrutD7DaX/j9VscF+uTALI3oUPa/pO4Z3soOBIjuRn/FzVu6aehhysxZCLi6y7duMf52WNZGMl7CtuK5EnRw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.1", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/use-sync-external-store": "^0.0.3", + "hoist-non-react-statics": "^3.3.2", + "react-is": "^18.0.0", + "use-sync-external-store": "^1.0.0" + }, + "peerDependencies": { + "@types/react": "^16.8 || ^17.0 || ^18.0", + "@types/react-dom": "^16.8 || ^17.0 || ^18.0", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0", + "react-native": ">=0.59", + "redux": "^4 || ^5.0.0-beta.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", @@ -2075,18 +2146,6 @@ "csstype": "^3.0.2" } }, - "node_modules/@types/react-redux": { - "version": "7.1.25", - "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.25.tgz", - "integrity": "sha512-bAGh4e+w5D8dajd6InASVIyCo4pZLJ66oLb80F9OBLO1gKESbZcRCJpTT6uLXX+HAB57zw1WTdwJdAsewuTweg==", - "dev": true, - "dependencies": { - "@types/hoist-non-react-statics": "^3.3.0", - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0", - "redux": "^4.0.0" - } - }, "node_modules/@types/react-transition-group": { "version": "4.4.6", "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz", @@ -2102,6 +2161,12 @@ "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", "dev": true }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==", + "dev": true + }, "node_modules/@types/warning": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.0.tgz", @@ -2415,23 +2480,6 @@ "node": ">= 8" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/axios": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz", - "integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==", - "dev": true, - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, "node_modules/babel-helper-evaluate-path": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz", @@ -2944,18 +2992,6 @@ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -3042,15 +3078,6 @@ } } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -3252,40 +3279,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/fs-readdir-recursive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", @@ -3799,12 +3792,6 @@ "node": ">=6" } }, - "node_modules/memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", - "dev": true - }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -4041,12 +4028,6 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, "node_modules/punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", @@ -4083,25 +4064,6 @@ "node": ">=0.10.0" } }, - "node_modules/react-beautiful-dnd": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/react-beautiful-dnd/-/react-beautiful-dnd-13.1.1.tgz", - "integrity": "sha512-0Lvs4tq2VcrEjEgDXHjT98r+63drkKEgqyxdA7qD3mvKwga6a5SscbdLPO2IExotU1jW8L0Ksdl0Cj2AF67nPQ==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.9.2", - "css-box-model": "^1.2.0", - "memoize-one": "^5.1.1", - "raf-schd": "^4.0.2", - "react-redux": "^7.2.0", - "redux": "^4.0.4", - "use-memo-one": "^1.1.1" - }, - "peerDependencies": { - "react": "^16.8.5 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.5 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/react-bootstrap": { "version": "2.9.1", "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.9.1.tgz", @@ -4145,43 +4107,12 @@ "react": "^18.2.0" } }, - "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, "node_modules/react-lifecycles-compat": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", "dev": true }, - "node_modules/react-redux": { - "version": "7.2.9", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.9.tgz", - "integrity": "sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.15.4", - "@types/react-redux": "^7.1.20", - "hoist-non-react-statics": "^3.3.2", - "loose-envify": "^1.4.0", - "prop-types": "^15.7.2", - "react-is": "^17.0.2" - }, - "peerDependencies": { - "react": "^16.8.3 || ^17 || ^18" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } - } - }, "node_modules/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", @@ -4251,9 +4182,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", "dev": true }, "node_modules/regenerator-transform": { @@ -4385,9 +4316,9 @@ } }, "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -4740,6 +4671,15 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "dev": true, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/uuid": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", @@ -4889,6 +4829,15 @@ "node": ">=10.0.0" } }, + "node_modules/webpack-preprocessor-loader": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/webpack-preprocessor-loader/-/webpack-preprocessor-loader-1.3.0.tgz", + "integrity": "sha512-wvHkDvgU9lhKQ1OWIJsawPBT/0wr+J7dwC7DHy0KtmXR/thGOAWbKEErGeJ2aXGSpwgqQTolIRoETlwMzocK1g==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, "node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", @@ -4991,6 +4940,34 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zustand": { + "version": "4.4.7", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.4.7.tgz", + "integrity": "sha512-QFJWJMdlETcI69paJwhSMJz7PPWjVP8Sjhclxmxmxv/RYI7ZOvR5BHX+ktH0we9gTWQMxcne8q1OY8xxz604gw==", + "dev": true, + "dependencies": { + "use-sync-external-store": "1.2.0" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "immer": ">=9.0", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } } } } diff --git a/package.json b/package.json index 7755edf..1584bb1 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,6 @@ { "name": "m-labs-zola", + "sideEffects": false, "version": "1.0.0", "description": "These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. For deployment, see the nix-scripts repository. Commits to https://git.m-labs.hk/M-Labs/web2019.git are automatically deployed to m-labs.hk through Hydra.", "scripts": { @@ -23,13 +24,15 @@ "prop-types": "^15.8.1", "react": "^18.2.0", "react-bootstrap": "^2.9.1", - "react-beautiful-dnd": "^13.1.1", + "@hello-pangea/dnd": "^16.5.0", "react-dom": "^18.2.0", "uuid": "^9.0.1", "webpack": "^5.89.0", "webpack-cli": "^5.1.4", "json-logic-js": "^2.0.2", - "@uidotdev/usehooks": "^2.4.1" + "zustand": "^4.4.7", + "@uidotdev/usehooks":"^2.4.1", + "webpack-preprocessor-loader": "^1.3.0" }, "babel": { "presets": [ diff --git a/sass/css/_base.scss b/sass/css/_base.scss index d284f72..4c9679f 100644 --- a/sass/css/_base.scss +++ b/sass/css/_base.scss @@ -149,7 +149,7 @@ a { border: 1px solid $btn-primary-2 !important; text-decoration: none; - &:hover { + &:hover, &:disabled { background-color: $btn-secondary-2; border: 1px solid $btn-secondary-2 !important; } diff --git a/sass/css/_shop.scss b/sass/css/_shop.scss index 02dfa5d..48fd8a6 100644 --- a/sass/css/_shop.scss +++ b/sass/css/_shop.scss @@ -8,50 +8,61 @@ button { outline: none!important; } -#root-shop { +.rfqFeedback { + /* -webkit-box-shadow: 0px 0px 33px -7px rgba(0,0,0,0.75); + -moz-box-shadow: 0px 0px 33px -7px rgba(0,0,0,0.75); + box-shadow: 0px 0px 33px -7px rgba(0,0,0,0.75);*/ + border: 1px solid $brand-color; + .modal-body, .modal-content, .modal { + border-radius: 0; + } + .form-group { + display: flex; + align-items: center; + padding: 0.5rem 0.75rem; + text-align: center; - .layout { + /*position: absolute; + width: 350px;*/ + background: white; + /*left: calc(100%/2 - 350px/2);*/ - .rfqFeedback { - display: flex; - align-items: center; - padding: 2rem 3rem; - text-align: center; - /*position: absolute; - width: 350px;*/ - background: white; - /*left: calc(100%/2 - 350px/2);*/ - -webkit-box-shadow: 0px 0px 33px -7px rgba(0,0,0,0.75); - -moz-box-shadow: 0px 0px 33px -7px rgba(0,0,0,0.75); - box-shadow: 0px 0px 33px -7px rgba(0,0,0,0.75); - /*top: calc(50% - 50px);*/ - border: 1px solid $brand-color; - font-size: .9rem; + /*top: calc(50% - 50px);*/ - button { - background-color: inherit; - align-self: center; - border: 0; - position: absolute; - right: 10px; - top: 10px; + font-size: .9rem; + } - img { - width: 15px; - } - } + button { + background-color: inherit; + align-self: center; + border: 0; + position: absolute; + right: 10px; + top: 10px; - .btn.btn-primary.disabled { - background-color: gray; - } - - .btn-outline-primary, - .btn-outline-primary:hover { - color: $btn-primary-2; - border-color: $btn-primary-2; - background-color: inherit; - } + img { + width: 15px; } + } + + .btn.btn-primary.disabled { + background-color: gray; + } + + .btn-outline-primary { + color: $btn-primary-2; + border-color: $btn-primary-2; + background-color: inherit; + &:hover { + background-color: inherit; + color: $btn-secondary-2; + border-color: $btn-secondary-2; + } + } +} + +#root-shop { + .layout { display: flex; @@ -186,37 +197,25 @@ button { padding-bottom: .5rem; } - .btn-outline-primary, - .btn-outline-primary:hover { + .btn-outline-primary { color: $btn-primary-2; border-color: $btn-primary-2; background-color: inherit; + &:hover { + background-color: inherit; + color: $btn-secondary-2; + border-color: $btn-secondary-2; + } } .control { display: flex; font-size: .8rem; - > p { - width: 50%; + > .description { + width: 80%; padding-right: 30px; } - .crate-mode { - text-align: right; - width: 50%; - - a { - cursor: pointer; - margin-right: 1rem; - color: inherit; - text-decoration: none; - padding-bottom: 5px; - } - a.active { - font-weight: 700; - border-bottom: 3px solid $btn-primary-2; - } - } } .summary { @@ -316,13 +315,19 @@ button { button { background-color: inherit; border: 0; - margin-left: 20px; + margin-left: 16px; img { width: 20px; height: auto; } } + span { + width: 28px; + } + .span-with-margin { + margin-left: 16px; + } } > .summary-form { @@ -347,7 +352,7 @@ button { outline: none; } - input[type="submit"], + .order-form-submit, .btn-cla { /*background-color: $btn-primary-2;*/ font-weight: 700; @@ -366,11 +371,14 @@ button { border: 1px solid #e53e3e !important; } - .btn-outline-primary, - .btn-outline-primary:hover { + .btn-outline-primary { color: $btn-primary-2; border-color: $btn-primary-2; background-color: inherit; + &:hover { + background-color: inherit; + color: $btn-secondary-2; + } } } } @@ -555,6 +563,43 @@ button { .crate-info { padding: 1rem 0 0; } + + .crate-bar { + width: 100%; + font-size: 0.9rem; + + .crate-mode { + text-align: left; + width: 75%; + display: inline; + + a { + cursor: pointer; + margin-right: 1rem; + color: inherit; + text-decoration: none; + padding-bottom: 5px; + display: inline-block; + } + a.active { + font-weight: 700; + border-bottom: 3px solid $btn-primary-2; + } + } + .delete-crate { + text-decoration: none; + cursor: pointer; + text-align: right; + display: inline-flex; + width: 25%; + color: inherit; + img { + margin-left: 1rem; + align-self: center; + } + } + } + } } @@ -587,6 +632,37 @@ button { margin-left: -10px; } + #accordion_crates { + background-color: inherit; + .accordion_crates_item { + .accordion-header { + padding-bottom: 0; + + } + .accordion-button { + background-color: inherit; + font-weight: bold; + &:hover { + background-color: $color-highlight; + } + } + } + #accordion_crates_add { + .accordion-header { + padding-bottom: 0; + } + .accordion-button { + font-weight: bold; + &:hover { + background-color: $color-highlight; + } + } + + .accordion-button:after { + background-image: url("/images/shop/icon-add.svg"); + } + } + } } .k-popup-connectors, @@ -595,17 +671,13 @@ button { color: white; font-weight: 700; font-size: .6rem; - padding: .8rem 1rem; + padding: .5rem .8rem; box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15); text-align: left; p { margin-bottom: 0; } - - p + p { - padding-bottom: 8px; - } } .k-popup-connectors { diff --git a/sass/css/styles.scss b/sass/css/styles.scss index 4f6ddc2..cd62f5f 100644 --- a/sass/css/styles.scss +++ b/sass/css/styles.scss @@ -24,7 +24,8 @@ $btn-secondary-2: #a88cfd !default; $link-primary-dark: #c2affd !default; $link-secondary-dark: #cec2ea !default; -$color-hover: #eae7f7 !default; +$color-hover: #eae7f7 !default; +$color-highlight: #dfe9ff !default; // Import partials. @import diff --git a/static/css/order-hardware.css b/static/css/order-hardware.css index 433172d..6d7952e 100644 --- a/static/css/order-hardware.css +++ b/static/css/order-hardware.css @@ -11,6 +11,18 @@ .feedback-add-success { display: none; } +.feedback-add-failure { + background-color: #c75e5e; + display: block; + position: fixed; + top: 20px; + right: 20px; + padding: 1em; + z-index: 100000; + color: white; + border-radius: 10px; + box-shadow: 0 0 5px 3px; +} #accordion_categories, #accordion_categories .accordion-header, @@ -108,11 +120,11 @@ } #root-shop .panel .control > .description, - #root-shop .panel .control > .crate-mode { + #root-shop .crate-mode { width: 100%; } - #root-shop .panel .control > .crate-mode { + #root-shop .crate-mode { text-align: left; } @@ -243,7 +255,7 @@ ##Screen = B/w 481px to 767px */ @media (min-width: 481px) and (max-width: 767px) { - .feedback-add-success { + .feedback-add-success, .feedback-add-failure { background-color: green; display: block; position: fixed; @@ -255,6 +267,9 @@ border-radius: 10px; box-shadow: 0 0 5px 3px; } + .feedback-add-failure { + background-color: #c75e5e; + } .dropdown-item { font-size: .75em; @@ -307,13 +322,16 @@ margin-bottom: 1.5rem; } - #root-shop .panel .control > .description, - #root-shop .panel .control > .crate-mode { + #root-shop .panel .control > .description { width: 100%; } - #root-shop .panel .control > .crate-mode { + #root-shop .panel .crate .crate-bar .crate-mode { text-align: left; + width: 50%; + } + #root-shop .panel .crate .crate-bar .crate-mode a { + display: block; } #root-shop .panel .summary { @@ -448,7 +466,7 @@ ##Screen = B/w 320px to 479px */ @media (min-width: 320px) and (max-width: 480px) { - .feedback-add-success { + .feedback-add-success, .feedback-add-failure { background-color: green; display: block; position: fixed; @@ -460,6 +478,9 @@ border-radius: 10px; box-shadow: 0 0 5px 3px; } + .feedback-add-failure { + background-color: #c75e5e; + } .dropdown-item { font-size: .75em; @@ -570,13 +591,16 @@ font-size: 1.5rem; } - #root-shop .panel .control > .description, - #root-shop .panel .control > .crate-mode { + #root-shop .panel .control > .description { width: 100%; } - #root-shop .panel .control > .crate-mode { + #root-shop .panel .crate .crate-bar .crate-mode { text-align: left; + width: 50%; + } + #root-shop .panel .crate .crate-bar .crate-mode a { + display: block; } #root-shop .panel .summary { diff --git a/static/images/shop/icon-clear.svg b/static/images/shop/icon-clear.svg new file mode 100644 index 0000000..bbe5026 --- /dev/null +++ b/static/images/shop/icon-clear.svg @@ -0,0 +1 @@ + diff --git a/static/images/shop/icon-notification.svg b/static/images/shop/icon-notification.svg new file mode 100644 index 0000000..a8091ff --- /dev/null +++ b/static/images/shop/icon-notification.svg @@ -0,0 +1 @@ + diff --git a/static/js/shop.bundle.js b/static/js/shop.bundle.js index 888fb54..53fb743 100644 --- a/static/js/shop.bundle.js +++ b/static/js/shop.bundle.js @@ -1,2 +1,2 @@ /*! For license information please see shop.bundle.js.LICENSE.txt */ -(()=>{var e={184:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function a(){for(var e=[],t=0;t{"use strict";var r=n(296),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function u(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var s=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=p(n);a&&a!==m&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=u(t),h=u(n),g=0;g{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,a=n?Symbol.for("react.portal"):60106,o=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,l=n?Symbol.for("react.profiler"):60114,u=n?Symbol.for("react.provider"):60109,s=n?Symbol.for("react.context"):60110,c=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,f=n?Symbol.for("react.forward_ref"):60112,p=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,h=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,v=n?Symbol.for("react.block"):60121,b=n?Symbol.for("react.fundamental"):60117,y=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function E(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case c:case d:case o:case l:case i:case p:return e;default:switch(e=e&&e.$$typeof){case s:case f:case g:case h:case u:return e;default:return t}}case a:return t}}}function x(e){return E(e)===d}t.AsyncMode=c,t.ConcurrentMode=d,t.ContextConsumer=s,t.ContextProvider=u,t.Element=r,t.ForwardRef=f,t.Fragment=o,t.Lazy=g,t.Memo=h,t.Portal=a,t.Profiler=l,t.StrictMode=i,t.Suspense=p,t.isAsyncMode=function(e){return x(e)||E(e)===c},t.isConcurrentMode=x,t.isContextConsumer=function(e){return E(e)===s},t.isContextProvider=function(e){return E(e)===u},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return E(e)===f},t.isFragment=function(e){return E(e)===o},t.isLazy=function(e){return E(e)===g},t.isMemo=function(e){return E(e)===h},t.isPortal=function(e){return E(e)===a},t.isProfiler=function(e){return E(e)===l},t.isStrictMode=function(e){return E(e)===i},t.isSuspense=function(e){return E(e)===p},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===o||e===d||e===l||e===i||e===p||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===h||e.$$typeof===u||e.$$typeof===s||e.$$typeof===f||e.$$typeof===b||e.$$typeof===y||e.$$typeof===w||e.$$typeof===v)},t.typeOf=E},296:(e,t,n)=>{"use strict";e.exports=n(103)},143:e=>{"use strict";e.exports=function(e,t,n,r,a,o,i,l){if(!e){var u;if(void 0===t)u=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var s=[n,r,a,o,i,l],c=0;(u=new Error(t.replace(/%s/g,(function(){return s[c++]})))).name="Invariant Violation"}throw u.framesToPop=1,u}}},962:function(e,t,n){var r,a;r=function(){"use strict";Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)});var e={},t={"==":function(e,t){return e==t},"===":function(e,t){return e===t},"!=":function(e,t){return e!=t},"!==":function(e,t){return e!==t},">":function(e,t){return e>t},">=":function(e,t){return e>=t},"<":function(e,t,n){return void 0===n?e=t?[]:r}};return e.is_logic=function(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)&&1===Object.keys(e).length},e.truthy=function(e){return!(Array.isArray(e)&&0===e.length||!e)},e.get_operator=function(e){return Object.keys(e)[0]},e.get_values=function(t){return t[e.get_operator(t)]},e.apply=function(n,r){if(Array.isArray(n))return n.map((function(t){return e.apply(t,r)}));if(!e.is_logic(n))return n;var a,o,i,l,u,s=e.get_operator(n),c=n[s];if(Array.isArray(c)||(c=[c]),"if"===s||"?:"==s){for(a=0;a0){var d=String(s).split("."),f=t;for(a=0;a{"use strict";var r=n(414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},697:(e,t,n)=>{e.exports=n(703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},448:(e,t,n)=>{"use strict";var r=n(294),a=n(840);function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n