├── .gitignore
├── README.md
├── package.json
└── public
├── .eslintrc.json
├── .gitignore
├── README.md
├── next.config.js
├── package.json
├── postcss.config.js
├── public
├── empty-profile.png
├── home.mp4
├── home2.mp4
├── home3.mp4
├── overview1.webp
├── overview2.webp
└── overview3.webp
├── src
├── app
│ ├── favicon.ico
│ ├── globals.css
│ ├── layout.jsx
│ ├── listing
│ │ └── [listing]
│ │ │ ├── components
│ │ │ ├── ListingAmenties.jsx
│ │ │ ├── ListingMap.jsx
│ │ │ ├── ListingPhotos.jsx
│ │ │ └── TripScheduler.jsx
│ │ │ ├── loading.jsx
│ │ │ └── page.jsx
│ ├── loading.jsx
│ ├── my-listings
│ │ ├── loading.jsx
│ │ └── page.jsx
│ ├── new-listing
│ │ ├── loading.jsx
│ │ └── page.jsx
│ ├── page.jsx
│ ├── search
│ │ ├── components
│ │ │ └── SearchMap.jsx
│ │ ├── loading.jsx
│ │ └── page.jsx
│ ├── trips
│ │ └── page.jsx
│ └── wishlist
│ │ └── page.jsx
├── components
│ ├── SearchScheduler
│ │ ├── SearchAddress.jsx
│ │ ├── SearchBeds.jsx
│ │ └── SearchDates.jsx
│ ├── auth
│ │ └── AuthModal.jsx
│ ├── common
│ │ ├── Calender.jsx
│ │ ├── ContextMenu.jsx
│ │ ├── FormInput.jsx
│ │ ├── ImageUpload.jsx
│ │ ├── NavigationEvents.jsx
│ │ ├── Pin.jsx
│ │ ├── Schedule.jsx
│ │ ├── ScheduleBar.jsx
│ │ └── Spinner.jsx
│ ├── footer
│ │ ├── CompactFooter.jsx
│ │ └── Footer.jsx
│ ├── listingCard.jsx
│ ├── navbar
│ │ └── Navbar.jsx
│ ├── process
│ │ ├── Description.jsx
│ │ ├── FinishSetup.jsx
│ │ ├── FloorPlan.jsx
│ │ ├── ListingCreated.jsx
│ │ ├── ListingPlaceType.jsx
│ │ ├── ListingTypeSelector.jsx
│ │ ├── Overview.jsx
│ │ ├── Photos.jsx
│ │ ├── PlaceDetails.jsx
│ │ ├── PlaceLocation.jsx
│ │ ├── Price.jsx
│ │ ├── ProcessAmeneties.jsx
│ │ ├── Review.jsx
│ │ ├── StepOneStarter.jsx
│ │ ├── StepThreeStarter.jsx
│ │ ├── StepTwoStarter.jsx
│ │ ├── Title.jsx
│ │ └── geocoder-control.jsx
│ └── views
│ │ ├── ListView.jsx
│ │ ├── MapView.jsx
│ │ └── ViewSwitchBadge.jsx
├── data
│ ├── Amenities.jsx
│ └── listingTypes.jsx
├── hooks
│ └── useClickOutside.jsx
├── lib
│ ├── auth.js
│ ├── http.js
│ └── lisitng.js
├── store
│ ├── slices
│ │ ├── AuthSlice.js
│ │ ├── ListingsSlice.js
│ │ ├── ProcessSlice.js
│ │ └── SearchSlice.js
│ └── store.js
└── svg
│ ├── airbnb-logo-short.jsx
│ ├── airbnb-logo.jsx
│ ├── ameneties
│ ├── ac.jsx
│ ├── bbq.jsx
│ ├── beach.jsx
│ ├── carbon-monoxide-alarm.jsx
│ ├── fire-ext.jsx
│ ├── fire-pit.jsx
│ ├── first-aid.jsx
│ ├── gym.jsx
│ ├── hot-tub.jsx
│ ├── indoor-firplace.jsx
│ ├── kitchen.jsx
│ ├── lake.jsx
│ ├── outdoor-dining.jsx
│ ├── outdoor-shower.jsx
│ ├── paid-parking.jsx
│ ├── parking.jsx
│ ├── patio.jsx
│ ├── piano.jsx
│ ├── pool-table.jsx
│ ├── pool.jsx
│ ├── ski.jsx
│ ├── smoke-alarm.jsx
│ ├── tv.jsx
│ ├── washing-machine.jsx
│ ├── wifi.jsx
│ └── workplace.jsx
│ ├── daimond.jsx
│ └── lisitngTypes
│ ├── barn.jsx
│ ├── bed-breakfast.jsx
│ ├── boat.jsx
│ ├── cabin.jsx
│ ├── campervan.jsx
│ ├── casa-particular.jsx
│ ├── castle.jsx
│ ├── cave.jsx
│ ├── container.jsx
│ ├── cycladic-home.jsx
│ ├── dammuso.jsx
│ ├── dome.jsx
│ ├── earth-home.jsx
│ ├── farm.jsx
│ ├── flat.jsx
│ ├── guest-house.jsx
│ ├── hotel.jsx
│ ├── house.jsx
│ ├── houseboat.jsx
│ ├── kezhan.jsx
│ ├── minsu.jsx
│ ├── riad.jsx
│ ├── room.jsx
│ ├── ryokan.jsx
│ ├── shared-room.jsx
│ ├── shepherd-hut.jsx
│ ├── tent.jsx
│ ├── tiny-home.jsx
│ ├── tower.jsx
│ ├── tree-house.jsx
│ ├── trullo.jsx
│ ├── windmill.jsx
│ └── yurt.jsx
├── tailwind.config.js
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | /node_modules
2 | package-lock.json
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | # nextjs-airbnb-clone
3 |
4 | # App Screenshots
5 |
6 | ## Home Page List View
7 |
8 | 
9 |
10 | ## Home Page Map View
11 |
12 | 
13 |
14 | ## Login Modal
15 |
16 | 
17 |
18 | ## Scheduler UI
19 |
20 | 
21 |
22 | ## Search Listings
23 |
24 | 
25 |
26 | ## Add New Listings
27 |
28 | 
29 |
30 | 
31 |
32 | 
33 |
34 | 
35 |
36 | 
37 |
38 | 
39 |
40 | 
41 |
42 | 
43 |
44 | ## My Listings
45 |
46 | 
47 |
48 | ## Wishlists
49 |
50 | 
51 |
52 | ## Listing Info Page
53 |
54 | 
55 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "airbnb-clone",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "start": "npm-run-all -p start:frontend start:backend",
8 | "start:frontend": "cross-env PORT=5000 npm --prefix public run dev",
9 | "start:admin": "npm --prefix admin-ui start",
10 | "start:backend": "npm --prefix server start",
11 | "postinstall": "npm i --prefix public && npm i --prefix admin-ui && npm i --prefix server"
12 | },
13 | "devDependencies": {
14 | "cross-env": "^7.0.3",
15 | "npm-run-all": "^4.1.5"
16 | },
17 | "repository": {
18 | "type": "git",
19 | "url": "git+https://github.com/koolkishan/nextjs-airbnb-clone.git"
20 | },
21 | "author": "",
22 | "license": "ISC",
23 | "bugs": {
24 | "url": "https://github.com/koolkishan/nextjs-airbnb-clone/issues"
25 | },
26 | "homepage": "https://github.com/koolkishan/nextjs-airbnb-clone#readme",
27 | "dependencies": {
28 | "qs": "^6.11.2"
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/public/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "next/core-web-vitals"
3 | }
4 |
--------------------------------------------------------------------------------
/public/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # next.js
12 | /.next/
13 | /out/
14 |
15 | # production
16 | /build
17 |
18 | # misc
19 | .DS_Store
20 | *.pem
21 |
22 | # debug
23 | npm-debug.log*
24 | yarn-debug.log*
25 | yarn-error.log*
26 |
27 | # local env files
28 | .env*.local
29 |
30 | # vercel
31 | .vercel
32 |
33 | # typescript
34 | *.tsbuildinfo
35 | next-env.d.ts
36 |
--------------------------------------------------------------------------------
/public/README.md:
--------------------------------------------------------------------------------
1 | This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
2 |
3 | ## Getting Started
4 |
5 | First, run the development server:
6 |
7 | ```bash
8 | npm run dev
9 | # or
10 | yarn dev
11 | # or
12 | pnpm dev
13 | ```
14 |
15 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
16 |
17 | You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
18 |
19 | This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
20 |
21 | ## Learn More
22 |
23 | To learn more about Next.js, take a look at the following resources:
24 |
25 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
26 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
27 |
28 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
29 |
30 | ## Deploy on Vercel
31 |
32 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
33 |
34 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
35 |
--------------------------------------------------------------------------------
/public/next.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {
3 | reactStrictMode: false,
4 | env: {
5 | NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME: "dctahvizk",
6 | },
7 | images: {
8 | domains: ["res.cloudinary.com"],
9 | },
10 | };
11 |
12 | module.exports = nextConfig;
13 |
--------------------------------------------------------------------------------
/public/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "public",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start",
9 | "lint": "next lint"
10 | },
11 | "dependencies": {
12 | "@mapbox/mapbox-gl-geocoder": "^5.0.1",
13 | "@types/mapbox__mapbox-gl-geocoder": "^4.7.3",
14 | "@types/node": "20.3.1",
15 | "@types/react": "18.2.12",
16 | "@types/react-date-range": "^1.4.4",
17 | "@types/react-dom": "18.2.5",
18 | "ag-grid-community": "^30.0.3",
19 | "ag-grid-react": "^30.0.4",
20 | "autoprefixer": "10.4.14",
21 | "axios": "^1.4.0",
22 | "eslint": "8.43.0",
23 | "eslint-config-next": "13.4.6",
24 | "mapbox-gl": "^2.15.0",
25 | "next": "13.4.6",
26 | "next-cloudinary": "^4.13.0",
27 | "postcss": "8.4.24",
28 | "react": "18.2.0",
29 | "react-confetti": "^6.1.0",
30 | "react-date-range": "^1.4.0",
31 | "react-datepicker": "^4.15.0",
32 | "react-dom": "18.2.0",
33 | "react-icons": "^4.10.1",
34 | "react-map-gl": "^7.1.0",
35 | "tailwindcss": "3.3.2",
36 | "typescript": "5.1.3",
37 | "zustand": "^4.3.8"
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/public/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/public/public/empty-profile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/public/empty-profile.png
--------------------------------------------------------------------------------
/public/public/home.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/public/home.mp4
--------------------------------------------------------------------------------
/public/public/home2.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/public/home2.mp4
--------------------------------------------------------------------------------
/public/public/home3.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/public/home3.mp4
--------------------------------------------------------------------------------
/public/public/overview1.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/public/overview1.webp
--------------------------------------------------------------------------------
/public/public/overview2.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/public/overview2.webp
--------------------------------------------------------------------------------
/public/public/overview3.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/public/overview3.webp
--------------------------------------------------------------------------------
/public/src/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/src/app/favicon.ico
--------------------------------------------------------------------------------
/public/src/app/globals.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | /* Hide scrollbar for Chrome, Safari and Opera */
6 | .no-scrollbar::-webkit-scrollbar {
7 | display: none;
8 | }
9 |
10 | /* Hide scrollbar for IE, Edge and Firefox */
11 | .no-scrollbar {
12 | -ms-overflow-style: none; /* IE and Edge */
13 | scrollbar-width: none; /* Firefox */
14 | }
15 |
16 | .control-panel {
17 | position: absolute;
18 | top: 0;
19 | right: 0;
20 | max-width: 320px;
21 | background: #fff;
22 | box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
23 | padding: 12px 24px;
24 | margin: 20px;
25 | font-size: 13px;
26 | line-height: 2;
27 | color: #6b6b76;
28 | text-transform: uppercase;
29 | outline: none;
30 | }
31 |
32 | .mapboxgl-popup-content {
33 | width: 18rem !important;
34 | }
35 |
36 | .mapboxgl-popup-close-button {
37 | font-size: 1rem !important;
38 | margin-right: 0.2rem;
39 | }
40 |
41 | .mapboxgl-popup {
42 | width: 18rem !important;
43 | }
44 |
45 | div.mapboxgl-popup.mapboxgl-popup-anchor-top {
46 | width: 18rem !important;
47 | max-width: 18rem !important;
48 | font-size: 1rem;
49 | }
50 |
--------------------------------------------------------------------------------
/public/src/app/layout.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const layout = () => {
4 | return
layout
;
5 | };
6 |
7 | export default layout;
8 |
--------------------------------------------------------------------------------
/public/src/app/listing/[listing]/components/ListingAmenties.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const ListingAmenties = () => {
4 | return ListingAmenties
;
5 | };
6 |
7 | export default ListingAmenties;
8 |
--------------------------------------------------------------------------------
/public/src/app/listing/[listing]/components/ListingMap.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const ListingMap = () => {
4 | return ListingMap
;
5 | };
6 |
7 | export default ListingMap;
8 |
--------------------------------------------------------------------------------
/public/src/app/listing/[listing]/components/ListingPhotos.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const ListingPhotos = () => {
4 | return ListingPhotos
;
5 | };
6 |
7 | export default ListingPhotos;
8 |
--------------------------------------------------------------------------------
/public/src/app/listing/[listing]/components/TripScheduler.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const TripScheduler = () => {
4 | return TripScheduler
;
5 | };
6 |
7 | export default TripScheduler;
8 |
--------------------------------------------------------------------------------
/public/src/app/listing/[listing]/loading.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const loading = () => {
4 | return loading
;
5 | };
6 |
7 | export default loading;
8 |
--------------------------------------------------------------------------------
/public/src/app/listing/[listing]/page.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const page = () => {
4 | return page
;
5 | };
6 |
7 | export default page;
8 |
--------------------------------------------------------------------------------
/public/src/app/loading.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const loading = () => {
4 | return loading
;
5 | };
6 |
7 | export default loading;
8 |
--------------------------------------------------------------------------------
/public/src/app/my-listings/loading.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const loading = () => {
4 | return loading
;
5 | };
6 |
7 | export default loading;
8 |
--------------------------------------------------------------------------------
/public/src/app/my-listings/page.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const page = () => {
4 | return page
;
5 | };
6 |
7 | export default page;
8 |
--------------------------------------------------------------------------------
/public/src/app/new-listing/loading.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const loading = () => {
4 | return loading
;
5 | };
6 |
7 | export default loading;
8 |
--------------------------------------------------------------------------------
/public/src/app/new-listing/page.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const page = () => {
4 | return page
;
5 | };
6 |
7 | export default page;
8 |
--------------------------------------------------------------------------------
/public/src/app/page.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const page = () => {
4 | return page
;
5 | };
6 |
7 | export default page;
8 |
--------------------------------------------------------------------------------
/public/src/app/search/components/SearchMap.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const SearchMap = () => {
4 | return SearchMap
;
5 | };
6 |
7 | export default SearchMap;
8 |
--------------------------------------------------------------------------------
/public/src/app/search/loading.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const loading = () => {
4 | return loading
;
5 | };
6 |
7 | export default loading;
8 |
--------------------------------------------------------------------------------
/public/src/app/search/page.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const page = () => {
4 | return page
;
5 | };
6 |
7 | export default page;
8 |
--------------------------------------------------------------------------------
/public/src/app/trips/page.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const page = () => {
4 | return page
;
5 | };
6 |
7 | export default page;
8 |
--------------------------------------------------------------------------------
/public/src/app/wishlist/page.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const page = () => {
4 | return page
;
5 | };
6 |
7 | export default page;
8 |
--------------------------------------------------------------------------------
/public/src/components/SearchScheduler/SearchAddress.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const SearchAddress = () => {
4 | return SearchAddress
;
5 | };
6 |
7 | export default SearchAddress;
8 |
--------------------------------------------------------------------------------
/public/src/components/SearchScheduler/SearchBeds.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const SearchBeds = () => {
4 | return SearchBeds
;
5 | };
6 |
7 | export default SearchBeds;
8 |
--------------------------------------------------------------------------------
/public/src/components/SearchScheduler/SearchDates.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const SearchDates = () => {
4 | return SearchDates
;
5 | };
6 |
7 | export default SearchDates;
8 |
--------------------------------------------------------------------------------
/public/src/components/auth/AuthModal.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const AuthModal = () => {
4 | return AuthModal
;
5 | };
6 |
7 | export default AuthModal;
8 |
--------------------------------------------------------------------------------
/public/src/components/common/Calender.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const Calender = () => {
4 | return Calender
;
5 | };
6 |
7 | export default Calender;
8 |
--------------------------------------------------------------------------------
/public/src/components/common/ContextMenu.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const ContextMenu = () => {
4 | return ContextMenu
;
5 | };
6 |
7 | export default ContextMenu;
8 |
--------------------------------------------------------------------------------
/public/src/components/common/FormInput.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const FormInput = () => {
4 | return FormInput
;
5 | };
6 |
7 | export default FormInput;
8 |
--------------------------------------------------------------------------------
/public/src/components/common/ImageUpload.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const ImageUpload = () => {
4 | return ImageUpload
;
5 | };
6 |
7 | export default ImageUpload;
8 |
--------------------------------------------------------------------------------
/public/src/components/common/NavigationEvents.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const NavigationEvents = () => {
4 | return NavigationEvents
;
5 | };
6 |
7 | export default NavigationEvents;
8 |
--------------------------------------------------------------------------------
/public/src/components/common/Pin.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const Pin = () => {
4 | return Pin
;
5 | };
6 |
7 | export default Pin;
8 |
--------------------------------------------------------------------------------
/public/src/components/common/Schedule.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const Schedule = () => {
4 | return Schedule
;
5 | };
6 |
7 | export default Schedule;
8 |
--------------------------------------------------------------------------------
/public/src/components/common/ScheduleBar.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const ScheduleBar = () => {
4 | return ScheduleBar
;
5 | };
6 |
7 | export default ScheduleBar;
8 |
--------------------------------------------------------------------------------
/public/src/components/common/Spinner.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const Spinner = () => {
4 | return Spinner
;
5 | };
6 |
7 | export default Spinner;
8 |
--------------------------------------------------------------------------------
/public/src/components/footer/CompactFooter.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const CompactFooter = () => {
4 | return CompactFooter
;
5 | };
6 |
7 | export default CompactFooter;
8 |
--------------------------------------------------------------------------------
/public/src/components/footer/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function Footer() {
4 | return Footer
;
5 | }
6 |
--------------------------------------------------------------------------------
/public/src/components/listingCard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const listingCard = () => {
4 | return listingCard
;
5 | };
6 |
7 | export default listingCard;
8 |
--------------------------------------------------------------------------------
/public/src/components/navbar/Navbar.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const Navbar = () => {
4 | return Navbar
;
5 | };
6 |
7 | export default Navbar;
8 |
--------------------------------------------------------------------------------
/public/src/components/process/Description.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const Description = () => {
4 | return Description
;
5 | };
6 |
7 | export default Description;
8 |
--------------------------------------------------------------------------------
/public/src/components/process/FinishSetup.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const FinishSetup = () => {
4 | return FinishSetup
;
5 | };
6 |
7 | export default FinishSetup;
8 |
--------------------------------------------------------------------------------
/public/src/components/process/FloorPlan.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const FloorPlan = () => {
4 | return FloorPlan
;
5 | };
6 |
7 | export default FloorPlan;
8 |
--------------------------------------------------------------------------------
/public/src/components/process/ListingCreated.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const ListingCreated = () => {
4 | return ListingCreated
;
5 | };
6 |
7 | export default ListingCreated;
8 |
--------------------------------------------------------------------------------
/public/src/components/process/ListingPlaceType.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const ListingPlaceType = () => {
4 | return ListingPlaceType
;
5 | };
6 |
7 | export default ListingPlaceType;
8 |
--------------------------------------------------------------------------------
/public/src/components/process/ListingTypeSelector.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const ListingTypeSelector = () => {
4 | return ListingTypeSelector
;
5 | };
6 |
7 | export default ListingTypeSelector;
8 |
--------------------------------------------------------------------------------
/public/src/components/process/Overview.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const Overview = () => {
4 | return Overview
;
5 | };
6 |
7 | export default Overview;
8 |
--------------------------------------------------------------------------------
/public/src/components/process/Photos.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const Photos = () => {
4 | return Photos
;
5 | };
6 |
7 | export default Photos;
8 |
--------------------------------------------------------------------------------
/public/src/components/process/PlaceDetails.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const PlaceDetails = () => {
4 | return PlaceDetails
;
5 | };
6 |
7 | export default PlaceDetails;
8 |
--------------------------------------------------------------------------------
/public/src/components/process/PlaceLocation.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const PlaceLocation = () => {
4 | return PlaceLocation
;
5 | };
6 |
7 | export default PlaceLocation;
8 |
--------------------------------------------------------------------------------
/public/src/components/process/Price.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const Price = () => {
4 | return Price
;
5 | };
6 |
7 | export default Price;
8 |
--------------------------------------------------------------------------------
/public/src/components/process/ProcessAmeneties.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const ProcessAmeneties = () => {
4 | return ProcessAmeneties
;
5 | };
6 |
7 | export default ProcessAmeneties;
8 |
--------------------------------------------------------------------------------
/public/src/components/process/Review.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function Review() {
4 | return Review
;
5 | }
6 |
--------------------------------------------------------------------------------
/public/src/components/process/StepOneStarter.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const StepOneStarter = () => {
4 | return StepOneStarter
;
5 | };
6 |
7 | export default StepOneStarter;
8 |
--------------------------------------------------------------------------------
/public/src/components/process/StepThreeStarter.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const StepThreeStarter = () => {
4 | return StepThreeStarter
;
5 | };
6 |
7 | export default StepThreeStarter;
8 |
--------------------------------------------------------------------------------
/public/src/components/process/StepTwoStarter.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const StepTwoStarter = () => {
4 | return StepTwoStarter
;
5 | };
6 |
7 | export default StepTwoStarter;
8 |
--------------------------------------------------------------------------------
/public/src/components/process/Title.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const Title = () => {
4 | return Title
;
5 | };
6 |
7 | export default Title;
8 |
--------------------------------------------------------------------------------
/public/src/components/process/geocoder-control.jsx:
--------------------------------------------------------------------------------
1 | "use client";
2 | import * as React from "react";
3 | import { useState } from "react";
4 |
5 | import { useControl, Marker, MarkerProps, ControlPosition } from "react-map-gl";
6 | import MapboxGeocoder, { GeocoderOptions } from "@mapbox/mapbox-gl-geocoder";
7 |
8 | /* eslint-disable complexity,max-statements */
9 | export default function GeocoderControl(props) {
10 | const [marker, setMarker] = useState(null);
11 |
12 | const geocoder =
13 | useControl <
14 | MapboxGeocoder >
15 | (() => {
16 | const ctrl = new MapboxGeocoder({
17 | ...props,
18 | marker: false,
19 | accessToken: props.mapboxAccessToken,
20 | });
21 | ctrl.on("loading", props.onLoading);
22 | ctrl.on("results", props.onResults);
23 | ctrl.on("result", (evt) => {
24 | props.onResult(evt);
25 |
26 | const { result } = evt;
27 | const location =
28 | result &&
29 | (result.center ||
30 | (result.geometry?.type === "Point" && result.geometry.coordinates));
31 | if (location && props.marker) {
32 | setMarker(
33 |
38 | );
39 | } else {
40 | setMarker(null);
41 | }
42 | });
43 | ctrl.on("error", props.onError);
44 | return ctrl;
45 | },
46 | {
47 | position: props.position,
48 | });
49 |
50 | // @ts-ignore (TS2339) private member
51 | if (geocoder._map) {
52 | if (
53 | geocoder.getProximity() !== props.proximity &&
54 | props.proximity !== undefined
55 | ) {
56 | geocoder.setProximity(props.proximity);
57 | }
58 | if (
59 | geocoder.getRenderFunction() !== props.render &&
60 | props.render !== undefined
61 | ) {
62 | geocoder.setRenderFunction(props.render);
63 | }
64 | if (
65 | geocoder.getLanguage() !== props.language &&
66 | props.language !== undefined
67 | ) {
68 | geocoder.setLanguage(props.language);
69 | }
70 | if (geocoder.getZoom() !== props.zoom && props.zoom !== undefined) {
71 | geocoder.setZoom(props.zoom);
72 | }
73 | if (geocoder.getFlyTo() !== props.flyTo && props.flyTo !== undefined) {
74 | geocoder.setFlyTo(props.flyTo);
75 | }
76 | if (
77 | geocoder.getPlaceholder() !== props.placeholder &&
78 | props.placeholder !== undefined
79 | ) {
80 | geocoder.setPlaceholder(props.placeholder);
81 | }
82 | if (
83 | geocoder.getCountries() !== props.countries &&
84 | props.countries !== undefined
85 | ) {
86 | geocoder.setCountries(props.countries);
87 | }
88 | if (geocoder.getTypes() !== props.types && props.types !== undefined) {
89 | geocoder.setTypes(props.types);
90 | }
91 | if (
92 | geocoder.getMinLength() !== props.minLength &&
93 | props.minLength !== undefined
94 | ) {
95 | geocoder.setMinLength(props.minLength);
96 | }
97 | if (geocoder.getLimit() !== props.limit && props.limit !== undefined) {
98 | geocoder.setLimit(props.limit);
99 | }
100 | if (geocoder.getFilter() !== props.filter && props.filter !== undefined) {
101 | geocoder.setFilter(props.filter);
102 | }
103 | if (geocoder.getOrigin() !== props.origin && props.origin !== undefined) {
104 | geocoder.setOrigin(props.origin);
105 | }
106 | // Types missing from @types/mapbox__mapbox-gl-geocoder
107 | // if (geocoder.getAutocomplete() !== props.autocomplete && props.autocomplete !== undefined) {
108 | // geocoder.setAutocomplete(props.autocomplete);
109 | // }
110 | // if (geocoder.getFuzzyMatch() !== props.fuzzyMatch && props.fuzzyMatch !== undefined) {
111 | // geocoder.setFuzzyMatch(props.fuzzyMatch);
112 | // }
113 | // if (geocoder.getRouting() !== props.routing && props.routing !== undefined) {
114 | // geocoder.setRouting(props.routing);
115 | // }
116 | // if (geocoder.getWorldview() !== props.worldview && props.worldview !== undefined) {
117 | // geocoder.setWorldview(props.worldview);
118 | // }
119 | }
120 | return marker;
121 | }
122 |
123 | const noop = () => {};
124 |
125 | // GeocoderControl.defaultProps = {
126 | // marker: true,
127 | // onLoading: noop,
128 | // onResults: noop,
129 | // onResult: noop,
130 | // onError: noop,
131 | // };
132 |
--------------------------------------------------------------------------------
/public/src/components/views/ListView.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const ListView = () => {
4 | return ListView
;
5 | };
6 |
7 | export default ListView;
8 |
--------------------------------------------------------------------------------
/public/src/components/views/MapView.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const MapView = () => {
4 | return MapView
;
5 | };
6 |
7 | export default MapView;
8 |
--------------------------------------------------------------------------------
/public/src/components/views/ViewSwitchBadge.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const ViewSwitchBadge = () => {
4 | return ViewSwitchBadge
;
5 | };
6 |
7 | export default ViewSwitchBadge;
8 |
--------------------------------------------------------------------------------
/public/src/data/Amenities.jsx:
--------------------------------------------------------------------------------
1 | import Ac from "airbnb/svg/ameneties/ac";
2 | import Bbq from "airbnb/svg/ameneties/bbq";
3 | import Beach from "airbnb/svg/ameneties/beach";
4 | import CarbonMonoxideAlarm from "airbnb/svg/ameneties/carbon-monoxide-alarm";
5 | import FireExt from "airbnb/svg/ameneties/fire-ext";
6 | import FirePit from "airbnb/svg/ameneties/fire-pit";
7 | import FirstAid from "airbnb/svg/ameneties/first-aid";
8 | import Gym from "airbnb/svg/ameneties/gym";
9 | import HotTub from "airbnb/svg/ameneties/hot-tub";
10 | import IndoorFirplace from "airbnb/svg/ameneties/indoor-firplace";
11 | import Kitchen from "airbnb/svg/ameneties/kitchen";
12 | import Lake from "airbnb/svg/ameneties/lake";
13 | import OutdoorDining from "airbnb/svg/ameneties/outdoor-dining";
14 | import OutdoorShower from "airbnb/svg/ameneties/outdoor-shower";
15 | import PaidParking from "airbnb/svg/ameneties/paid-parking";
16 | import Parking from "airbnb/svg/ameneties/parking";
17 | import Patio from "airbnb/svg/ameneties/patio";
18 | import Piano from "airbnb/svg/ameneties/piano";
19 | import Pool from "airbnb/svg/ameneties/pool";
20 | import PoolTable from "airbnb/svg/ameneties/pool-table";
21 | import Ski from "airbnb/svg/ameneties/ski";
22 | import SmokeAlarm from "airbnb/svg/ameneties/smoke-alarm";
23 | import Tv from "airbnb/svg/ameneties/tv";
24 | import WashingMachine from "airbnb/svg/ameneties/washing-machine";
25 | import Wifi from "airbnb/svg/ameneties/wifi";
26 | import Workplace from "airbnb/svg/ameneties/workplace";
27 |
28 | export const AmenetiesType = [
29 | {
30 | type: "basic",
31 | data: [
32 | { name: "Wifi", svgPath: },
33 | { name: "TV", svgPath: },
34 | { name: "Kitchen", svgPath: },
35 | { name: "Washing Machine", svgPath: },
36 | { name: "Free parking on premises", svgPath: },
37 | { name: "Paid parking on premises", svgPath: },
38 | { name: "Air conditioning", svgPath: },
39 | { name: "Dedicated workplace", svgPath: },
40 | ],
41 | },
42 | {
43 | type: "advanced",
44 | data: [
45 | { name: "Pool", svgPath: },
46 | { name: "Hot tub", svgPath: },
47 | { name: "Patio", svgPath: },
48 | { name: "BBQ grill", svgPath: },
49 | { name: "Outdoor dining area", svgPath: },
50 | { name: "Fire pit", svgPath: },
51 | { name: "Pool table", svgPath: },
52 | { name: "Indoor fireplace", svgPath: },
53 | { name: "Piano", svgPath: },
54 | { name: "Exercise equipment", svgPath: },
55 | { name: "Lake access", svgPath: },
56 | { name: "Beach access", svgPath: },
57 | { name: "Ski-in/Ski-out", svgPath: },
58 | { name: "Outdoor shower", svgPath: },
59 | ],
60 | },
61 | {
62 | type: "safety",
63 | data: [
64 | { name: "Smoke alarm", svgPath: },
65 | { name: "First aid kit", svgPath: },
66 | { name: "Fire extinguisher", svgPath: },
67 | { name: "Carbon monoxide alarm", svgPath: },
68 | ],
69 | },
70 | ];
71 |
--------------------------------------------------------------------------------
/public/src/data/listingTypes.jsx:
--------------------------------------------------------------------------------
1 | import Barn from "airbnb/svg/lisitngTypes/barn";
2 | import BedBreakfast from "airbnb/svg/lisitngTypes/bed-breakfast";
3 | import Boat from "airbnb/svg/lisitngTypes/boat";
4 | import Cabin from "airbnb/svg/lisitngTypes/cabin";
5 | import Campervan from "airbnb/svg/lisitngTypes/campervan";
6 | import CasaParticular from "airbnb/svg/lisitngTypes/casa-particular";
7 | import Castle from "airbnb/svg/lisitngTypes/castle";
8 | import Cave from "airbnb/svg/lisitngTypes/cave";
9 | import Container from "airbnb/svg/lisitngTypes/container";
10 | import CycladicHome from "airbnb/svg/lisitngTypes/cycladic-home";
11 | import Dammuso from "airbnb/svg/lisitngTypes/dammuso";
12 | import Dome from "airbnb/svg/lisitngTypes/dome";
13 | import EarthHome from "airbnb/svg/lisitngTypes/earth-home";
14 | import Farm from "airbnb/svg/lisitngTypes/farm";
15 | import Flat from "airbnb/svg/lisitngTypes/flat";
16 | import GuestHouse from "airbnb/svg/lisitngTypes/guest-house";
17 | import Hotel from "airbnb/svg/lisitngTypes/hotel";
18 | import House from "airbnb/svg/lisitngTypes/house";
19 | import Houseboat from "airbnb/svg/lisitngTypes/houseboat";
20 | import Kezhan from "airbnb/svg/lisitngTypes/kezhan";
21 | import Minsu from "airbnb/svg/lisitngTypes/minsu";
22 | import Riad from "airbnb/svg/lisitngTypes/riad";
23 | import Ryokan from "airbnb/svg/lisitngTypes/ryokan";
24 | import ShepherdHut from "airbnb/svg/lisitngTypes/shepherd-hut";
25 | import Tent from "airbnb/svg/lisitngTypes/tent";
26 | import TinyHome from "airbnb/svg/lisitngTypes/tiny-home";
27 | import Tower from "airbnb/svg/lisitngTypes/tower";
28 | import TreeHouse from "airbnb/svg/lisitngTypes/tree-house";
29 | import Trullo from "airbnb/svg/lisitngTypes/trullo";
30 | import Windmill from "airbnb/svg/lisitngTypes/windmill";
31 | import Yurt from "airbnb/svg/lisitngTypes/yurt";
32 |
33 | export const listingTypes = [
34 | { name: "House", svgPath: },
35 | { name: "Flat/apartment", svgPath: },
36 | { name: "Barn", svgPath: },
37 | { name: "Bed & breakfast", svgPath: },
38 | { name: "Boat", svgPath: },
39 | { name: "Cabin", svgPath: },
40 | { name: "Campervan/motorhouse", svgPath: },
41 | { name: "Casa particular", svgPath: },
42 | { name: "Castle", svgPath: },
43 | { name: "Cave", svgPath: },
44 | { name: "Container", svgPath: },
45 | { name: "Cycladic home", svgPath: },
46 | { name: "Dammuso", svgPath: },
47 | { name: "Dome", svgPath: },
48 | { name: "Earth home", svgPath: },
49 | { name: "Farm", svgPath: },
50 | { name: "Guest house", svgPath: },
51 | { name: "Hotel", svgPath: },
52 | { name: "Houseboat", svgPath: },
53 | { name: "Kezhan", svgPath: },
54 | { name: "Minsu", svgPath: },
55 | { name: "Riad", svgPath: },
56 | { name: "Ryokan", svgPath: },
57 | { name: "Shepherd's hut", svgPath: },
58 | { name: "Tent", svgPath: },
59 | { name: "Tiny home", svgPath: },
60 | { name: "Tower", svgPath: },
61 | { name: "Tree house", svgPath: },
62 | { name: "Trullo", svgPath: },
63 | { name: "Windmill", svgPath: },
64 | { name: "Yurt", svgPath: },
65 | ];
66 |
--------------------------------------------------------------------------------
/public/src/hooks/useClickOutside.jsx:
--------------------------------------------------------------------------------
1 | import { userAppStore } from "airbnb/store/store";
2 | import { useEffect, RefObject, useRef } from "react";
3 |
4 | function useClickOutside(isScheduleBar = false) {
5 | const { setSelectionType, setShowScheduleBar } = userAppStore();
6 | const containerRef = useRef(null);
7 | useEffect(() => {
8 | function handleClickOutside(event) {
9 | if (
10 | containerRef.current &&
11 | !containerRef.current.contains(event.target)
12 | ) {
13 | if (!isScheduleBar) {
14 | setSelectionType(undefined);
15 | } else {
16 | setShowScheduleBar();
17 | }
18 | }
19 | }
20 |
21 | document.addEventListener("mousedown", handleClickOutside);
22 |
23 | return () => {
24 | document.removeEventListener("mousedown", handleClickOutside);
25 | };
26 | }, [containerRef, setSelectionType]);
27 | return [containerRef];
28 | }
29 |
30 | export default useClickOutside;
31 |
--------------------------------------------------------------------------------
/public/src/lib/auth.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/src/lib/auth.js
--------------------------------------------------------------------------------
/public/src/lib/http.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/src/lib/http.js
--------------------------------------------------------------------------------
/public/src/lib/lisitng.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/src/lib/lisitng.js
--------------------------------------------------------------------------------
/public/src/store/slices/AuthSlice.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/src/store/slices/AuthSlice.js
--------------------------------------------------------------------------------
/public/src/store/slices/ListingsSlice.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/src/store/slices/ListingsSlice.js
--------------------------------------------------------------------------------
/public/src/store/slices/ProcessSlice.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/src/store/slices/ProcessSlice.js
--------------------------------------------------------------------------------
/public/src/store/slices/SearchSlice.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/src/store/slices/SearchSlice.js
--------------------------------------------------------------------------------
/public/src/store/store.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/src/store/store.js
--------------------------------------------------------------------------------
/public/src/svg/airbnb-logo-short.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | function AirBnbLogoShort() {
4 | return (
5 |
11 | );
12 | }
13 |
14 | export default AirBnbLogoShort;
15 |
--------------------------------------------------------------------------------
/public/src/svg/airbnb-logo.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | function AirBnbLogo() {
4 | return (
5 |
11 | );
12 | }
13 |
14 | export default AirBnbLogo;
15 |
--------------------------------------------------------------------------------
/public/src/svg/ameneties/ac.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function Ac() {
4 | return (
5 |
43 | );
44 | }
45 |
--------------------------------------------------------------------------------
/public/src/svg/ameneties/carbon-monoxide-alarm.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function CarbonMonoxideAlarm() {
4 | return (
5 |
131 | );
132 | }
133 |
--------------------------------------------------------------------------------
/public/src/svg/ameneties/fire-ext.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function FireExt() {
4 | return (
5 |
152 | );
153 | }
154 |
--------------------------------------------------------------------------------
/public/src/svg/ameneties/first-aid.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function FirstAid() {
4 | return (
5 |
145 | );
146 | }
147 |
--------------------------------------------------------------------------------
/public/src/svg/ameneties/gym.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function Gym() {
4 | return (
5 |
126 | );
127 | }
128 |
--------------------------------------------------------------------------------
/public/src/svg/ameneties/indoor-firplace.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function IndoorFirplace() {
4 | return (
5 |
135 | );
136 | }
137 |
--------------------------------------------------------------------------------
/public/src/svg/ameneties/outdoor-dining.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function OutdoorDining() {
4 | return (
5 |
139 | );
140 | }
141 |
--------------------------------------------------------------------------------
/public/src/svg/ameneties/paid-parking.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function PaidParking() {
4 | return (
5 |
156 | );
157 | }
158 |
--------------------------------------------------------------------------------
/public/src/svg/ameneties/patio.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function Patio() {
4 | return (
5 |
207 | );
208 | }
209 |
--------------------------------------------------------------------------------
/public/src/svg/ameneties/pool-table.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function PoolTable() {
4 | return PoolTable
;
5 | }
6 |
--------------------------------------------------------------------------------
/public/src/svg/ameneties/smoke-alarm.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function SmokeAlarm() {
4 | return (
5 |
130 | );
131 | }
132 |
--------------------------------------------------------------------------------
/public/src/svg/ameneties/tv.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function Tv() {
4 | return (
5 |
68 | );
69 | }
70 |
--------------------------------------------------------------------------------
/public/src/svg/ameneties/washing-machine.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function WashingMachine() {
4 | return (
5 |
103 | );
104 | }
105 |
--------------------------------------------------------------------------------
/public/src/svg/ameneties/wifi.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function Wifi() {
4 | return (
5 |
6 |
104 |
105 | );
106 | }
107 |
--------------------------------------------------------------------------------
/public/src/svg/ameneties/workplace.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function Workplace() {
4 | return (
5 |
137 | );
138 | }
139 |
--------------------------------------------------------------------------------
/public/src/svg/daimond.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function Daimond() {
4 | return (
5 |
27 | );
28 | }
29 |
--------------------------------------------------------------------------------
/public/src/svg/lisitngTypes/casa-particular.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function CasaParticular() {
4 | return (
5 |
6 |
7 |
8 |
49 |
50 |
51 |
52 | );
53 | }
54 |
--------------------------------------------------------------------------------
/public/src/svg/lisitngTypes/cave.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function Cave() {
4 | return (
5 |
6 |
7 |
8 |
49 |
50 |
51 |
52 | );
53 | }
54 |
--------------------------------------------------------------------------------
/public/src/svg/lisitngTypes/container.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function Container() {
4 | return (
5 |
6 |
7 |
8 |
49 |
50 |
51 |
52 | );
53 | }
54 |
--------------------------------------------------------------------------------
/public/src/svg/lisitngTypes/cycladic-home.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function CycladicHome() {
4 | return (
5 |
6 |
7 |
8 |
49 |
50 |
51 |
52 | );
53 | }
54 |
--------------------------------------------------------------------------------
/public/src/svg/lisitngTypes/dome.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function Dome() {
4 | return (
5 |
6 |
7 |
8 |
49 |
50 |
51 |
52 | );
53 | }
54 |
--------------------------------------------------------------------------------
/public/src/svg/lisitngTypes/guest-house.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function GuestHouse() {
4 | return (
5 |
6 |
7 |
8 |
49 |
50 |
51 |
52 | );
53 | }
54 |
--------------------------------------------------------------------------------
/public/src/svg/lisitngTypes/hotel.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function Hotel() {
4 | return (
5 |
6 |
7 |
8 |
49 |
50 |
51 |
52 | );
53 | }
54 |
--------------------------------------------------------------------------------
/public/src/svg/lisitngTypes/house.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function House() {
4 | return (
5 |
6 |
7 |
8 |
49 |
50 |
51 |
52 | );
53 | }
54 |
--------------------------------------------------------------------------------
/public/src/svg/lisitngTypes/kezhan.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function Kezhan() {
4 | return (
5 |
6 |
7 |
8 |
46 |
47 |
48 |
49 | );
50 | }
51 |
--------------------------------------------------------------------------------
/public/src/svg/lisitngTypes/minsu.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function Minsu() {
4 | return (
5 |
6 |
7 |
8 |
53 |
54 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/public/src/svg/lisitngTypes/ryokan.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function Ryokan() {
4 | return (
5 |
6 |
7 |
8 |
49 |
50 |
51 |
52 | );
53 | }
54 |
--------------------------------------------------------------------------------
/public/src/svg/lisitngTypes/shepherd-hut.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function ShepherdHut() {
4 | return (
5 |
6 |
7 |
8 |
49 |
50 |
51 |
52 | );
53 | }
54 |
--------------------------------------------------------------------------------
/public/src/svg/lisitngTypes/tiny-home.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function TinyHome() {
4 | return (
5 |
6 |
7 |
8 |
53 |
54 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/public/src/svg/lisitngTypes/tower.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function Tower() {
4 | return (
5 |
6 |
7 |
8 |
49 |
50 |
51 |
52 | );
53 | }
54 |
--------------------------------------------------------------------------------
/public/src/svg/lisitngTypes/tree-house.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function TreeHouse() {
4 | return (
5 |
6 |
7 |
8 |
49 |
50 |
51 |
52 | );
53 | }
54 |
--------------------------------------------------------------------------------
/public/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | module.exports = {
3 | content: [
4 | "./src/pages/**/*.{js,ts,jsx,tsx,mdx}",
5 | "./src/components/**/*.{js,ts,jsx,tsx,mdx}",
6 | "./src/app/**/*.{js,ts,jsx,tsx,mdx}",
7 | ],
8 | theme: {
9 | extend: {
10 | backgroundImage: {
11 | "airbnb-gradient":
12 | "linear-gradient(to right,#E61E4D 0%,#E31C5F 50%,#D70466 100%)",
13 | },
14 | colors: {
15 | "airbnb-theme-color": "#FF385C",
16 | "airbnb-light-black": "#222222",
17 | "airbnb-light-gray": "#717171",
18 | },
19 | gridTemplateRows: {
20 | "new-listing": "10vh 80vh 10vh",
21 | },
22 | },
23 | },
24 | plugins: [],
25 | };
26 |
--------------------------------------------------------------------------------