diff --git a/.browserlistrc b/.browserlistrc new file mode 100644 index 000000000..2a7c49a56 --- /dev/null +++ b/.browserlistrc @@ -0,0 +1,12 @@ + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 8197e6f22..78f2c84e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,9 +8,15 @@ "name": "react-hotel", "version": "0.1.0", "dependencies": { + "js-datepicker": "^5.18.2", + "moment": "^2.29.4", "react": "^18.2.0", + "react-chatbot-kit": "^2.1.2", "react-dom": "^18.2.0", - "react-scripts": "^5.0.1" + "react-moment": "^1.1.3", + "react-scripts": "^5.0.1", + "react-spinners": "^0.13.8", + "Validate": "^1.0.1" }, "devDependencies": { "husky": "^8.0.3", @@ -11138,6 +11144,11 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/js-datepicker": { + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/js-datepicker/-/js-datepicker-5.18.2.tgz", + "integrity": "sha512-lBh5tIwb1ewDVlNHuwczoLiMhTFWnGYuHSA7ONAPKyMeofIFZDFGeOZ71UTY/Mk2evJJt+L66ec/RiXUy8XzEg==" + }, "node_modules/js-sdsl": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", @@ -11681,6 +11692,14 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } + }, "node_modules/mri": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", @@ -13850,6 +13869,19 @@ "node": ">=14" } }, + "node_modules/react-chatbot-kit": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/react-chatbot-kit/-/react-chatbot-kit-2.1.2.tgz", + "integrity": "sha512-N9bhg7/YnVz3TcNaV19szfBqCLHfVevisdqg38QowOI1hxgebwejrkggGz+T04yJK2j7dhwNqHpx5nWMfugzZw==", + "dependencies": { + "react-conditionally-render": "^1.0.2" + } + }, + "node_modules/react-conditionally-render": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/react-conditionally-render/-/react-conditionally-render-1.0.2.tgz", + "integrity": "sha512-CtjIgaLHVDSgHis3gv/PT/8EnD6GPUL8PrhUjh7DP6S5Y3p56dGu7y2nVg6pYv1kv+fGznRhRmX3assr/vRw3A==" + }, "node_modules/react-dev-utils": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", @@ -14046,6 +14078,16 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, + "node_modules/react-moment": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/react-moment/-/react-moment-1.1.3.tgz", + "integrity": "sha512-8EPvlUL8u6EknPp1ISF5MQ3wx2OHJVXIP/iZc4wRh3iV3XozftZERDv9ANZeAtMlhNNQHdFoqcZHFUkBSTONfA==", + "peerDependencies": { + "moment": "^2.29.0", + "prop-types": "^15.7.0", + "react": "^16.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-refresh": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", @@ -14126,6 +14168,15 @@ } } }, + "node_modules/react-spinners": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/react-spinners/-/react-spinners-0.13.8.tgz", + "integrity": "sha512-3e+k56lUkPj0vb5NDXPVFAOkPC//XyhKPJjvcGjyMNPWsBKpplfeyialP74G7H7+It7KzhtET+MvGqbKgAqpZA==", + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -15937,6 +15988,11 @@ "node": ">=10.12.0" } }, + "node_modules/Validate": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/Validate/-/Validate-1.0.1.tgz", + "integrity": "sha512-EFGsCN0U31+Lq+ivPMEbMgEcIM6Z+3n5vRRMWmascakaTFcHUAA05FvU4mcR7NtJpGrDO0QJCO5HUWBUUPjKsw==" + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/package.json b/package.json index e3e1562a7..554e7f5d6 100644 --- a/package.json +++ b/package.json @@ -3,9 +3,15 @@ "version": "0.1.0", "private": true, "dependencies": { + "js-datepicker": "^5.18.2", + "moment": "^2.29.4", "react": "^18.2.0", + "react-chatbot-kit": "^2.1.2", "react-dom": "^18.2.0", - "react-scripts": "^5.0.1" + "react-moment": "^1.1.3", + "react-scripts": "^5.0.1", + "react-spinners": "^0.13.8", + "Validate": "^1.0.1" }, "scripts": { "start": "react-scripts start", diff --git a/public/images/glasgow.jpg b/public/images/glasgow.jpg new file mode 100644 index 000000000..54db4c996 Binary files /dev/null and b/public/images/glasgow.jpg differ diff --git a/public/images/hotel.png b/public/images/hotel.png new file mode 100644 index 000000000..952bbc478 Binary files /dev/null and b/public/images/hotel.png differ diff --git a/public/images/hotelfront.jpg b/public/images/hotelfront.jpg new file mode 100644 index 000000000..010e16ee6 Binary files /dev/null and b/public/images/hotelfront.jpg differ diff --git a/public/images/london.jpg b/public/images/london.jpg new file mode 100644 index 000000000..4a8ccca6b Binary files /dev/null and b/public/images/london.jpg differ diff --git a/public/images/manchester.jpg b/public/images/manchester.jpg new file mode 100644 index 000000000..62a383399 Binary files /dev/null and b/public/images/manchester.jpg differ diff --git a/src/App.css b/src/App.css index 05fe2d52e..b379312f1 100644 --- a/src/App.css +++ b/src/App.css @@ -2,13 +2,14 @@ text-align: left; } -.App-logo { - animation: App-logo-spin infinite 20s linear; - height: 80px; +.Top-header img { + width: 100%; + height: 150px; + object-fit: cover; } .App-header { - background-color: #222; + background-color: #382b21; height: 50px; padding: 20px; color: white; @@ -16,6 +17,19 @@ font-family: Arial, Helvetica, sans-serif; font-size: 1em; font-weight: bold; + display: flex; + align-items: center; + gap: 0.5rem; +} + +.logo-title { + text-align: center; + font-size: 1.5rem; + margin-top: 20px; +} +.logo-hotel { + width: 40px; + height: 40px; } .App-title { @@ -40,18 +54,68 @@ } tr { - color: #5b5757; + color: #3b3131; } .results { padding-top: 15px; } -.footer { +.list-group { + display: flex; + flex-direction: row; + justify-content: space-evenly; padding-top: 20px; + padding-bottom: 20px; +} + +.footer { + padding: 2rem; + color: white; text-align: center; } +.footer-contact { + display: flex; + flex-direction: row; + justify-content: space-evenly; + list-style: none; + padding-top: 20px; + padding-bottom: 20px; + background-color: #382b21; + color: white; +} + .card { width: 18rem; } + +.cards { + display: flex; + justify-content: center; + gap: 0.5rem; + flex-wrap: wrap; +} + +.card-img-top { + width: 100%; + height: 200px; +} + +.card-body { + display: flex; + flex-direction: column; + justify-content: space-between; +} + +.customer-profile-container { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.loader { + display: flex; + justify-content: center; +} diff --git a/src/App.js b/src/App.js index 953c98560..d3f344a95 100644 --- a/src/App.js +++ b/src/App.js @@ -1,15 +1,42 @@ import React from "react"; - +import Top from "./Top"; +import Heading from "./Heading"; import Bookings from "./Bookings"; +import InfoCard from "./InfoCard"; import "./App.css"; +import Footer from "./Footer"; +import Restaurant from "./Restaurant"; const App = () => { + const contactDetails = [ + "123 Fake Street, London, E1 4UD", + "hello@fakehotel.com", + "0123 456789", + ]; + return (
-
CYF Hotel
+ + + + +
); }; export default App; + +// Pseudocode: React component called "App". It imports several other components, such as "Top", "Heading", "Bookings", +// "TouristInfoCards", "Footer", and "Restaurant". It also imports a CSS file called "App.css" for styling. The App +// component is a functional component written using arrow function syntax. It returns JSX (JavaScript XML), which +// represents the structure and content of the component's rendered output. + +// Inside the App component, there is a constant variable contactDetails that holds an array of contact information. +// The array contains a street address, email address, and phone number. The JSX code returned by the App component +// represents the structure of the web page. It consists of a
element with the class name "App". Inside the
, +// the imported components are rendered in order: , , , , , and +//