├── jest.setup.ts
├── src
├── vite-env.d.ts
├── types
│ ├── MapProp.ts
│ ├── HistorySkeletonType.ts
│ ├── ErrorObject.ts
│ ├── ProtectedRouteProps.ts
│ ├── BlogPageProps.ts
│ ├── AccordionProps.ts
│ ├── CardProps.ts
│ ├── LoadingContext.ts
│ ├── SignInProps.ts
│ ├── BlogCardProps.ts
│ ├── ModalProps.ts
│ ├── BlogGridProps.ts
│ ├── BlogPost.ts
│ ├── OverviewType.ts
│ ├── CitySuggestion.ts
│ ├── SidebarTypes.ts
│ ├── DayFragmentTypes.ts
│ ├── ItineraryContextTypes.ts
│ ├── ItineraryTypes.ts
│ ├── AuthContextTypes.ts
│ ├── GeneralProps.ts
│ ├── CostBreakdownTypes.ts
│ └── ResponseTypes.ts
├── assets
│ ├── ai.webp
│ ├── map.webp
│ └── passport.webp
├── lib
│ └── utils.ts
├── pages
│ ├── 404
│ │ └── index.tsx
│ ├── auth
│ │ ├── account
│ │ │ ├── AccountBug.tsx
│ │ │ ├── AccountHelp.tsx
│ │ │ ├── AccountSubscription.tsx
│ │ │ ├── HistorySkeleton.tsx
│ │ │ ├── AccountSidebar.tsx
│ │ │ └── History.tsx
│ │ ├── index.tsx
│ │ └── auth
│ │ │ ├── AuthWrapper.tsx
│ │ │ ├── SignIn.tsx
│ │ │ └── SignUp.tsx
│ ├── home
│ │ ├── index.tsx
│ │ ├── Accordion.tsx
│ │ ├── CtaSection.tsx
│ │ ├── Hero.tsx
│ │ ├── AccordionItem.tsx
│ │ ├── TypeEffect.tsx
│ │ └── About.tsx
│ ├── blog
│ │ ├── BlogGrid.tsx
│ │ ├── index.tsx
│ │ ├── __tests__
│ │ │ └── Blogcard.test.tsx
│ │ ├── Modal.tsx
│ │ └── Blogcard.tsx
│ └── planner
│ │ ├── Overview.tsx
│ │ ├── index.tsx
│ │ ├── __tests__
│ │ ├── Overview.test.tsx
│ │ └── General.test.tsx
│ │ ├── DayFragment.tsx
│ │ ├── General.tsx
│ │ ├── Map.tsx
│ │ ├── CostBreakdown.tsx
│ │ ├── ItineraryDisplay.tsx
│ │ └── Itinerary.tsx
├── helpers
│ └── truncate.ts
├── styles
│ ├── animations.css
│ ├── blog.css
│ └── index.css
├── main.tsx
├── components
│ ├── ui
│ │ ├── Navbar.tsx
│ │ ├── Loading.tsx
│ │ ├── Footer.tsx
│ │ ├── popover.tsx
│ │ ├── card.tsx
│ │ ├── button.tsx
│ │ ├── DesktopNav.tsx
│ │ ├── calendar.tsx
│ │ ├── MobileNav.tsx
│ │ ├── select.tsx
│ │ └── calendar-date-picker.tsx
│ └── protected-routes
│ │ ├── ProtectedRoute.tsx
│ │ └── UserProtectedRoute.tsx
├── hooks
│ ├── useResetForm.ts
│ ├── __tests__
│ │ ├── useresetForm.test.ts
│ │ └── useInputChange.test.ts
│ ├── useCityAutocomplete.ts
│ ├── useInputChange.ts
│ ├── useSubmitItinerary.ts
│ └── useItineraryFormValidation.ts
├── context
│ ├── LoadingContext.tsx
│ ├── ItineraryContext.tsx
│ └── AuthContext.tsx
├── services
│ ├── placesAPI.ts
│ └── gptService.ts
├── utils
│ ├── firebaseConfig.ts
│ └── firestoreFunctions.ts
├── App.tsx
└── data
│ ├── faqData.ts
│ ├── buttonData.ts
│ └── exampleResponse.json
├── public
├── icon16.png
├── logo_1.png
├── icon114.png
├── logo.svg
└── logo_1.svg
├── vercel.json
├── postcss.config.js
├── .prettierrc
├── vite.config.ts
├── tsconfig.node.json
├── jest.config.ts
├── .gitignore
├── .swcrc
├── .eslintrc.cjs
├── tsconfig.json
├── index.html
├── tailwind.config.js
├── package.json
├── README.md
└── LICENSE.md
/jest.setup.ts:
--------------------------------------------------------------------------------
1 | import '@testing-library/jest-dom';
--------------------------------------------------------------------------------
/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
(Currently our services are free of charge for anyone to use)
11 |{dots}
24 |{info.shortDescription}
15 |{info.shortHistory}
17 |{answer}
17 |Sample content
", 13 | preview: "This is a test preview text for the blog post.", 14 | date: "2024-01-01", 15 | }; 16 | it("renders the blog card", () => { 17 | render({trimStringToCharLimit(post.preview, 100)}
25 |{activity.id}
25 |{activity.shortDescriptionOfProgram}
27 |
28 |
{content}
10 |68 | {displayedText} 69 | {isVisible ? "|" : ""} 70 |
71 |{item.par}
56 | 59 |{detail.cost ? `${detail.cost}$` : "N/A"}
17 |No itineraries found
114 |122 | {itinerary.destination.numberOfDays} {dayOrDays(itinerary.destination.numberOfDays)} 123 | {itinerary.destination.destinationCity}, {itinerary.destination.destinationCountry} 124 |
125 |126 | {itinerary.destination.startDate} - {itinerary.destination.endDate} 127 |
128 |