@travories/frontend-sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api/http.ts","../src/api/packages.ts","../src/client/TravoriesClient.ts","../src/hooks/usePackageBySlug.ts","../src/hooks/useHomeSections.ts","../src/utils/format.ts","../src/components/Home/PackageCard.tsx","../src/components/Home/PackagesCarousel.tsx","../src/components/Home/HomeSections.tsx","../src/components/Home/HomeSectionsContext.tsx","../src/components/Home/PackagesSection.tsx","../src/components/PackageDetail/BookingCardLite.tsx","../src/components/PackageDetail/PackageMap.tsx","../src/components/PackageDetail/Itinerary.tsx","../src/components/PackageDetail/_checklistUtils.ts","../src/components/PackageDetail/PackageExcludedAndToPack.tsx","../src/components/PackageDetail/PackageIncluded.tsx","../src/components/PackageDetail/PackageOverview.tsx","../src/components/PackageDetail/DescriptionSection.tsx","../src/components/PackageDetail/HostAbout.tsx","../src/components/PackageDetail/HostCard.tsx","../src/components/PackageDetail/GallerySection.tsx","../src/components/PackageDetail/TopSection.tsx","../src/components/PackageDetail/_projectToLegacy.ts","../src/components/PackageDetail/PackageDetailView.tsx"],"names":["useState","useRef","useEffect","jsxs","jsx","Icon","DEFAULT_TITLES","SkeletonCarousel","useMemo","Fragment","iconMapping"],"mappings":"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","file":"index.mjs","sourcesContent":["export interface HttpRequestOptions {\n method?: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\n headers?: Record<string, string>;\n body?: unknown;\n signal?: AbortSignal;\n silent?: boolean;\n}\n\nexport interface HttpClientConfig {\n baseUrl: string;\n apiKey?: string;\n authToken?: string | (() => string | Promise<string | undefined> | undefined);\n defaultHeaders?: Record<string, string>;\n fetchImpl?: typeof fetch;\n}\n\nexport class TravoriesApiError extends Error {\n status: number;\n url: string;\n body: string;\n\n constructor(message: string, status: number, url: string, body: string) {\n super(message);\n this.name = \"TravoriesApiError\";\n this.status = status;\n this.url = url;\n this.body = body;\n }\n}\n\nexport class HttpClient {\n private baseUrl: string;\n private apiKey?: string;\n private authToken?: HttpClientConfig[\"authToken\"];\n private defaultHeaders: Record<string, string>;\n private fetchImpl: typeof fetch;\n\n constructor(config: HttpClientConfig) {\n if (!config.baseUrl) {\n throw new Error(\"[TravoriesClient] baseUrl is required\");\n }\n this.baseUrl = config.baseUrl.replace(/\\/$/, \"\");\n this.apiKey = config.apiKey;\n this.authToken = config.authToken;\n this.defaultHeaders = config.defaultHeaders ?? {};\n this.fetchImpl =\n config.fetchImpl ??\n (typeof fetch !== \"undefined\" ? fetch.bind(globalThis) : (undefined as unknown as typeof fetch));\n\n if (!this.fetchImpl) {\n throw new Error(\n \"[TravoriesClient] no `fetch` available. Pass `fetchImpl` (e.g. node-fetch) in the config.\",\n );\n }\n }\n\n private async resolveAuthToken(): Promise<string | undefined> {\n if (!this.authToken) return undefined;\n if (typeof this.authToken === \"function\") {\n const v = this.authToken();\n return v instanceof Promise ? await v : v;\n }\n return this.authToken;\n }\n\n async request<T>(path: string, options: HttpRequestOptions = {}): Promise<T | null> {\n const url = path.startsWith(\"http\")\n ? path\n : `${this.baseUrl}/${path.replace(/^\\//, \"\")}`;\n\n const token = await this.resolveAuthToken();\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n ...this.defaultHeaders,\n ...(options.headers ?? {}),\n ...(this.apiKey ? { \"x-api-key\": this.apiKey } : {}),\n ...(token ? { Authorization: `Bearer ${token}` } : {}),\n };\n\n const init: RequestInit = {\n method: options.method ?? \"GET\",\n headers,\n signal: options.signal,\n };\n\n if (options.body !== undefined) {\n init.body = typeof options.body === \"string\" ? options.body : JSON.stringify(options.body);\n }\n\n try {\n const res = await this.fetchImpl(url, init);\n\n if (!res.ok) {\n const text = await res.text().catch(() => \"\");\n if (options.silent) {\n // eslint-disable-next-line no-console\n console.error(`[TravoriesClient] ${res.status} ${url}`);\n return null;\n }\n throw new TravoriesApiError(\n `Travories API error ${res.status} for ${url}`,\n res.status,\n url,\n text,\n );\n }\n\n if (res.status === 204) return null;\n return (await res.json()) as T;\n } catch (err) {\n if (options.silent) {\n // eslint-disable-next-line no-console\n console.error(`[TravoriesClient] fetch failed for ${url}:`, err);\n return null;\n }\n throw err;\n }\n }\n}\n","import { HttpClient, HttpRequestOptions } from \"./http\";\nimport {\n HomePackageCard,\n HomeSectionsResponse,\n PackageHostResponse,\n MajorAttractionsResponse,\n PackageBundle,\n PackageRoutesResponse,\n TravoriesImage,\n TravoriesPackage,\n} from \"./types\";\n\ntype RawImage = Partial<TravoriesImage> & {\n url?: Partial<TravoriesImage[\"url\"]>;\n};\n\ntype RawPackage = Omit<TravoriesPackage, \"media\" | \"thumbnail\"> & {\n media?: RawImage[];\n thumbnail?: RawImage | null;\n};\n\nconst normalizeImage = (img: RawImage | null | undefined): TravoriesImage => ({\n id: img?.id ?? \"\",\n key: img?.key ?? \"\",\n type: img?.type ?? \"image\",\n alt: img?.alt ?? \"\",\n preview: img?.preview ?? null,\n url: {\n original: img?.url?.original ?? null,\n hero: img?.url?.hero ?? null,\n hero_fit: img?.url?.hero_fit ?? null,\n section: img?.url?.section ?? null,\n portrait: img?.url?.portrait ?? null,\n general: img?.url?.general ?? null,\n jpeg: img?.url?.jpeg ?? null,\n },\n});\n\nconst normalizeHomeCard = (raw: any): HomePackageCard => ({\n id: raw?.id ?? \"\",\n title: raw?.title ?? \"\",\n slug: raw?.slug ?? \"\",\n agencySlug: raw?.agencySlug ?? \"\",\n totalDays: Number(raw?.totalDays ?? 0),\n minPrice: Number(raw?.minPrice ?? 0),\n maxPrice: Number(raw?.maxPrice ?? 0),\n rating: Number(raw?.rating ?? 0),\n packageCategory: raw?.packageCategory ?? \"\",\n thumbnail: normalizeImage(raw?.thumbnail),\n});\n\nconst normalizePackage = (raw: RawPackage): TravoriesPackage => ({\n id: raw.id,\n title: raw.title,\n packageSlug: raw.packageSlug,\n slug: raw.slug,\n packageType: raw.packageType,\n description: raw.description,\n difficulty: raw.difficulty,\n packageFlexibility: raw.packageFlexibility,\n packageCategory: raw.packageCategory,\n totalDays: raw.totalDays,\n media: (raw.media ?? []).map(normalizeImage),\n thumbnail: raw.thumbnail ? normalizeImage(raw.thumbnail) : null,\n days: raw.days ?? [],\n prices: raw.prices ?? [],\n discounts: raw.discounts ?? [],\n thingsIncluded: (raw.thingsIncluded ?? []) as string[],\n thingsExcluded: (raw.thingsExcluded ?? []) as string[],\n thingsToPack: (raw.thingsToPack ?? []) as string[],\n rating: raw.rating ?? 0,\n maxAllowedPeople: raw.maxAllowedPeople ?? 10,\n minAllowedPeople: raw.minAllowedPeople ?? 1,\n});\n\nexport class PackagesResource {\n constructor(private http: HttpClient) {}\n\n /** Fetch a single package by its public slug. Returns null on 404 / network error in silent mode. */\n async getBySlug(slug: string, options?: HttpRequestOptions): Promise<TravoriesPackage | null> {\n if (!slug) throw new Error(\"[TravoriesClient] getBySlug requires a slug\");\n const raw = await this.http.request<RawPackage>(`/agency-package/by-slug/${slug}`, {\n silent: true,\n ...options,\n });\n if (!raw) return null;\n return normalizePackage(raw);\n }\n\n /** Fetch host (agency) information for the package. */\n async getHost(slug: string, options?: HttpRequestOptions): Promise<PackageHostResponse | null> {\n if (!slug) throw new Error(\"[TravoriesClient] getHost requires a slug\");\n return this.http.request<PackageHostResponse>(`/agency-info/by-package-slug/${slug}`, {\n silent: true,\n ...options,\n });\n }\n\n /** Fetch major attractions tied to the package. */\n async getMajorAttractions(\n slug: string,\n options?: HttpRequestOptions,\n ): Promise<MajorAttractionsResponse | null> {\n if (!slug) throw new Error(\"[TravoriesClient] getMajorAttractions requires a slug\");\n return this.http.request<MajorAttractionsResponse>(`/major-attractions/package/${slug}`, {\n silent: true,\n ...options,\n });\n }\n\n /**\n * Fetch the four home/landing sections in one request:\n * popular, topRated, trending, moreToExplore.\n * Each item is a compact card (id, title, slug, thumbnail, price range, rating).\n */\n async getHomeSections(\n options?: HttpRequestOptions,\n ): Promise<HomeSectionsResponse | null> {\n type RawCard = Omit<HomePackageCard, \"thumbnail\"> & {\n thumbnail?: Partial<TravoriesImage> & { url?: Partial<TravoriesImage[\"url\"]> };\n };\n type Raw = {\n success?: boolean;\n popular?: RawCard[];\n topRated?: RawCard[];\n trending?: RawCard[];\n moreToExplore?: RawCard[];\n };\n const raw = await this.http.request<Raw>(`/agency-package/home/sections`, {\n silent: true,\n ...options,\n });\n if (!raw) return null;\n return {\n popular: (raw.popular ?? []).map(normalizeHomeCard),\n topRated: (raw.topRated ?? []).map(normalizeHomeCard),\n trending: (raw.trending ?? []).map(normalizeHomeCard),\n moreToExplore: (raw.moreToExplore ?? []).map(normalizeHomeCard),\n };\n }\n\n /**\n * Fetch per-day GeoJSON routes for the package. Used by the map on the\n * itinerary section to draw actual road/trail paths between stops.\n */\n async getRoutes(\n slug: string,\n options?: HttpRequestOptions,\n ): Promise<PackageRoutesResponse | null> {\n if (!slug) throw new Error(\"[TravoriesClient] getRoutes requires a slug\");\n return this.http.request<PackageRoutesResponse>(`/agency-package/routes/${slug}`, {\n silent: true,\n ...options,\n });\n }\n\n /**\n * Convenience: fetch the package + host + attractions + per-day routes in\n * parallel. This is the payload `<PackageDetailView />` consumes.\n */\n async getBundle(slug: string, options?: HttpRequestOptions): Promise<PackageBundle | null> {\n const [pkg, hostRes, attractionsRes, routesRes] = await Promise.all([\n this.getBySlug(slug, options),\n this.getHost(slug, options),\n this.getMajorAttractions(slug, options),\n this.getRoutes(slug, options),\n ]);\n\n if (!pkg) return null;\n\n return {\n pkg,\n host: hostRes?.host ?? null,\n attractions: attractionsRes?.data ?? [],\n routes: routesRes?.days ?? [],\n };\n }\n}\n","import { HttpClient, HttpClientConfig } from \"../api/http\";\nimport { PackagesResource } from \"../api/packages\";\n\nexport interface TravoriesClientConfig extends HttpClientConfig {}\n\n/**\n * Main entry point for the Travories SDK.\n *\n * @example\n * ```ts\n * const travories = new TravoriesClient({\n * baseUrl: \"https://api.travories.com\",\n * });\n *\n * const pkg = await travories.packages.getBySlug(\"everest-base-camp\");\n * ```\n */\nexport class TravoriesClient {\n private http: HttpClient;\n packages: PackagesResource;\n\n constructor(config: TravoriesClientConfig) {\n this.http = new HttpClient(config);\n this.packages = new PackagesResource(this.http);\n }\n\n /** Shortcut for `client.packages.getBySlug(slug)`. */\n getPackageBySlug = (slug: string) => this.packages.getBySlug(slug);\n\n /** Shortcut for `client.packages.getBundle(slug)` — package + host + attractions in one call. */\n getPackageBundle = (slug: string) => this.packages.getBundle(slug);\n}\n\n/** Factory form, in case you prefer a function over `new`. */\nexport function createTravoriesClient(config: TravoriesClientConfig): TravoriesClient {\n return new TravoriesClient(config);\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport type { TravoriesClient } from \"../client/TravoriesClient\";\nimport type { PackageBundle, TravoriesPackage } from \"../api/types\";\n\nexport interface UsePackageBySlugResult {\n data: TravoriesPackage | null;\n loading: boolean;\n error: Error | null;\n refetch: () => void;\n}\n\nexport interface UsePackageBundleResult {\n data: PackageBundle | null;\n loading: boolean;\n error: Error | null;\n refetch: () => void;\n}\n\n/**\n * Fetch a single package by slug. Re-runs when `slug` or `client` changes.\n *\n * Aborts the in-flight request when the component unmounts or the inputs change,\n * so React strict-mode double-renders don't leak responses.\n */\nexport function usePackageBySlug(\n client: TravoriesClient,\n slug: string | null | undefined,\n): UsePackageBySlugResult {\n const [data, setData] = useState<TravoriesPackage | null>(null);\n const [loading, setLoading] = useState<boolean>(Boolean(slug));\n const [error, setError] = useState<Error | null>(null);\n const reqId = useRef(0);\n\n const run = () => {\n if (!slug) {\n setData(null);\n setLoading(false);\n setError(null);\n return;\n }\n const myReq = ++reqId.current;\n setLoading(true);\n setError(null);\n client.packages\n .getBySlug(slug)\n .then((res) => {\n if (myReq !== reqId.current) return;\n setData(res);\n })\n .catch((err: unknown) => {\n if (myReq !== reqId.current) return;\n setError(err instanceof Error ? err : new Error(String(err)));\n })\n .finally(() => {\n if (myReq !== reqId.current) return;\n setLoading(false);\n });\n };\n\n useEffect(() => {\n run();\n return () => {\n reqId.current++;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client, slug]);\n\n return { data, loading, error, refetch: run };\n}\n\n/**\n * Same as `usePackageBySlug` but fetches the full bundle (package + host + attractions).\n */\nexport function usePackageBundle(\n client: TravoriesClient,\n slug: string | null | undefined,\n): UsePackageBundleResult {\n const [data, setData] = useState<PackageBundle | null>(null);\n const [loading, setLoading] = useState<boolean>(Boolean(slug));\n const [error, setError] = useState<Error | null>(null);\n const reqId = useRef(0);\n\n const run = () => {\n if (!slug) {\n setData(null);\n setLoading(false);\n setError(null);\n return;\n }\n const myReq = ++reqId.current;\n setLoading(true);\n setError(null);\n client.packages\n .getBundle(slug)\n .then((res) => {\n if (myReq !== reqId.current) return;\n setData(res);\n })\n .catch((err: unknown) => {\n if (myReq !== reqId.current) return;\n setError(err instanceof Error ? err : new Error(String(err)));\n })\n .finally(() => {\n if (myReq !== reqId.current) return;\n setLoading(false);\n });\n };\n\n useEffect(() => {\n run();\n return () => {\n reqId.current++;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client, slug]);\n\n return { data, loading, error, refetch: run };\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport type { TravoriesClient } from \"../client/TravoriesClient\";\nimport type { HomeSectionsResponse } from \"../api/types\";\n\nexport interface UseHomeSectionsResult {\n data: HomeSectionsResponse | null;\n loading: boolean;\n error: Error | null;\n refetch: () => void;\n}\n\n/**\n * Fetch the four home/landing sections (popular, topRated, trending,\n * moreToExplore) in one request. Re-runs when `client` changes.\n *\n * Pass `null` to skip fetching (useful when the consumer already has the data\n * via SSR / `initialSections` and only needs to satisfy rules-of-hooks).\n */\nexport function useHomeSections(\n client: TravoriesClient | null,\n): UseHomeSectionsResult {\n const [data, setData] = useState<HomeSectionsResponse | null>(null);\n const [loading, setLoading] = useState<boolean>(Boolean(client));\n const [error, setError] = useState<Error | null>(null);\n const reqId = useRef(0);\n\n const run = () => {\n if (!client) {\n setData(null);\n setLoading(false);\n setError(null);\n return;\n }\n const myReq = ++reqId.current;\n setLoading(true);\n setError(null);\n client.packages\n .getHomeSections()\n .then((res) => {\n if (myReq !== reqId.current) return;\n setData(res);\n })\n .catch((err: unknown) => {\n if (myReq !== reqId.current) return;\n setError(err instanceof Error ? err : new Error(String(err)));\n })\n .finally(() => {\n if (myReq !== reqId.current) return;\n setLoading(false);\n });\n };\n\n useEffect(() => {\n run();\n return () => {\n reqId.current++;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client]);\n\n return { data, loading, error, refetch: run };\n}\n","import type {\n PackagePriceTier,\n TravoriesImage,\n} from \"../api/types\";\n\nexport function pickImageUrl(img: TravoriesImage | null | undefined): string {\n if (!img?.url) return \"\";\n return (\n img.url.hero ||\n img.url.general ||\n img.url.hero_fit ||\n img.url.section ||\n img.url.portrait ||\n img.url.original ||\n img.url.jpeg ||\n \"\"\n );\n}\n\nexport function startingPrice(prices: PackagePriceTier[] | undefined): number {\n if (!prices || prices.length === 0) return 0;\n return prices.reduce(\n (min, p) => (p.pricePerPerson > 0 && p.pricePerPerson < min ? p.pricePerPerson : min),\n prices[0].pricePerPerson,\n );\n}\n\nexport function formatCurrency(amount: number, currency = \"USD\"): string {\n try {\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency,\n maximumFractionDigits: 0,\n }).format(amount);\n } catch {\n return `${currency} ${amount}`;\n }\n}\n\nexport function formatRating(rating: number | undefined): string {\n if (!rating || rating <= 0) return \"New\";\n return rating.toFixed(1);\n}\n","import { Icon } from \"@iconify/react\";\nimport React, { useState } from \"react\";\nimport type { HomePackageCard } from \"../../api/types\";\nimport { formatCurrency, pickImageUrl } from \"../../utils/format\";\n\ninterface PackageCardProps {\n pkg: HomePackageCard;\n currency?: string;\n onSelect?: (pkg: HomePackageCard) => void;\n /** Renders as <a href> so cmd/ctrl-click opens the package in a new tab. */\n href?: string;\n /** When true, the anchor gets `target=\"_blank\"` so a plain click also opens\n * in a new tab. Requires `href`. `onSelect` is NOT called on a normal click\n * in this mode — the browser handles navigation. */\n openInNewTab?: boolean;\n /** When true, show the heart (wishlist) icon. Default true. */\n showHeart?: boolean;\n /** Initial wishlist state. */\n liked?: boolean;\n /** Called when the user toggles the heart. Receives the new state. */\n onLike?: (pkg: HomePackageCard, liked: boolean) => void;\n}\n\n/**\n * Ported from frontend `Tourist/Package/PackageCard.tsx`.\n * - Bordered image box with a frosted category badge top-left and an optional\n * wishlist heart top-right.\n * - Title, duration · stars, \"Starting from $X\" sit on the page background\n * (no surrounding card frame — same as the frontend).\n * - Card-level click handled via an absolutely-positioned anchor overlay so\n * browser open-in-new-tab works naturally.\n */\nconst PackageCard: React.FC<PackageCardProps> = ({\n pkg,\n currency = \"USD\",\n onSelect,\n href,\n openInNewTab = false,\n showHeart = true,\n liked,\n onLike,\n}) => {\n const img = pickImageUrl(pkg.thumbnail);\n const rating = Math.round(pkg.rating ?? 0);\n const price = pkg.minPrice || pkg.maxPrice || 0;\n\n // Local heart state when uncontrolled. If `onLike` is provided we treat\n // `liked` as the source of truth (controlled mode).\n const [localLiked, setLocalLiked] = useState<boolean>(Boolean(liked));\n const isLiked = liked ?? localLiked;\n\n const toggleLike = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n const next = !isLiked;\n if (onLike) onLike(pkg, next);\n else setLocalLiked(next);\n };\n\n const handleAnchorClick = (e: React.MouseEvent) => {\n // Honor cmd/ctrl/middle-click — let the browser open a new tab.\n if (e.metaKey || e.ctrlKey || e.button === 1) return;\n // When `openInNewTab` is set, the anchor already has `target=\"_blank\"` —\n // let the browser navigate, don't intercept.\n if (openInNewTab) return;\n if (onSelect) {\n e.preventDefault();\n onSelect(pkg);\n }\n };\n\n return (\n <div className=\"relative w-[300px] md:w-[320px] shrink-0 transition-all duration-300 ease-out hover:-translate-y-1 cursor-pointer\">\n {/* Click target — anchor when href given, button otherwise. Behind the\n * content so the heart still receives clicks via z-index/onClick. */}\n {href ? (\n <a\n href={href}\n target={openInNewTab ? \"_blank\" : undefined}\n rel={openInNewTab ? \"noopener noreferrer\" : undefined}\n onClick={handleAnchorClick}\n className=\"absolute inset-0 z-0 rounded-lg\"\n aria-label={\n openInNewTab ? `${pkg.title} (opens in a new tab)` : pkg.title\n }\n />\n ) : (\n <button\n type=\"button\"\n onClick={() => onSelect?.(pkg)}\n className=\"absolute inset-0 z-0 rounded-lg bg-transparent border-0 cursor-pointer p-0\"\n aria-label={pkg.title}\n />\n )}\n\n <div className=\"relative z-10 pointer-events-none\">\n {/* Image — fixed height, rounded, dark overlay for contrast */}\n <div className=\"relative border border-[#E0E4E8] overflow-hidden rounded-xl h-44 md:h-48 bg-[#F0EEF4]\">\n {img ? (\n <img\n src={img}\n alt={pkg.thumbnail?.alt || pkg.title}\n loading=\"lazy\"\n className=\"absolute inset-0 w-full h-full object-cover\"\n />\n ) : (\n <div className=\"absolute inset-0 flex items-center justify-center text-primary-normal/40 text-xs\">\n No image\n </div>\n )}\n\n <div\n className=\"absolute inset-0 rounded-xl\"\n style={{ background: \"rgba(0, 0, 0, 0.18)\" }}\n />\n\n {/* Category badge — frosted glass pill */}\n {pkg.packageCategory && (\n <div className=\"absolute top-3 left-3 z-10\">\n <div\n className=\"h-[26px] w-fit min-w-[70px] rounded-full flex items-center justify-center px-3 box-border text-white\"\n style={{\n background: \"rgba(0, 0, 0, 0.45)\",\n backdropFilter: \"blur(18px)\",\n WebkitBackdropFilter: \"blur(18px)\",\n }}\n >\n <span className=\"text-[11px] font-medium tracking-[-0.02em] whitespace-nowrap\">\n {pkg.packageCategory}\n </span>\n </div>\n </div>\n )}\n\n {/* Wishlist heart — frosted dark circle */}\n {showHeart && (\n <button\n type=\"button\"\n onClick={toggleLike}\n aria-pressed={isLiked}\n aria-label={isLiked ? \"Remove from wishlist\" : \"Save to wishlist\"}\n className=\"absolute top-3 right-3 z-10 w-9 h-9 rounded-full flex items-center justify-center pointer-events-auto transition-transform hover:scale-110\"\n style={{\n background: \"rgba(0, 0, 0, 0.45)\",\n backdropFilter: \"blur(18px)\",\n WebkitBackdropFilter: \"blur(18px)\",\n }}\n >\n <Icon\n icon={isLiked ? \"mdi:heart\" : \"mdi:heart-outline\"}\n className={`w-5 h-5 ${isLiked ? \"text-red-500\" : \"text-white\"}`}\n />\n </button>\n )}\n </div>\n\n {/* Text below the image */}\n <div className=\"mt-3 relative w-full\">\n <h3 className=\"text-primary-normal text-base md:text-lg font-semibold line-clamp-2 mr-2 w-auto sm:w-full leading-snug tracking-[-0.01em]\">\n {pkg.title || \"Unknown Destination\"}\n </h3>\n\n <div className=\"flex items-center gap-3 mt-1\">\n {pkg.totalDays > 0 && (\n <p className=\"text-secondary-normal-hover text-sm md:text-base font-light truncate\">\n {pkg.totalDays} {pkg.totalDays === 1 ? \"Day\" : \"Days\"}\n </p>\n )}\n <div className=\"w-1 h-1 rounded-full bg-gray-20\" />\n {rating > 0 ? (\n <div className=\"flex gap-x-0.5 flex-shrink-0\">\n {Array.from({ length: 5 }).map((_, i) => (\n <Icon\n key={i}\n icon=\"material-symbols:star\"\n className={`text-sm md:text-base ${\n i < rating ? \"text-primary-normal\" : \"text-gray-300\"\n }`}\n />\n ))}\n </div>\n ) : (\n <span className=\"text-xs md:text-sm text-primary-normal font-medium\">\n N/A\n </span>\n )}\n </div>\n\n <p className=\"text-secondary text-sm sm:text-base font-light truncate mt-1\">\n Starting from {formatCurrency(price, currency)}\n </p>\n </div>\n </div>\n </div>\n );\n};\n\nexport default PackageCard;\n","import { Icon } from \"@iconify/react\";\nimport React, { useRef } from \"react\";\nimport type { HomePackageCard } from \"../../api/types\";\nimport PackageCard from \"./PackageCard\";\n\ninterface PackagesCarouselProps {\n title: string;\n subtitle?: string;\n packages: HomePackageCard[];\n currency?: string;\n onSelect?: (pkg: HomePackageCard) => void;\n /** When a package is rendered as a link instead of a button. */\n hrefFor?: (pkg: HomePackageCard) => string;\n /** Open each card in a new tab. Requires `hrefFor` to be set. */\n openInNewTab?: boolean;\n /** Render nothing when the list is empty (default true). */\n hideWhenEmpty?: boolean;\n}\n\nconst PackagesCarousel: React.FC<PackagesCarouselProps> = ({\n title,\n subtitle,\n packages,\n currency = \"USD\",\n onSelect,\n hrefFor,\n openInNewTab,\n hideWhenEmpty = true,\n}) => {\n const scrollRef = useRef<HTMLDivElement>(null);\n\n if (hideWhenEmpty && (!packages || packages.length === 0)) return null;\n\n const scrollBy = (dir: -1 | 1) => {\n const node = scrollRef.current;\n if (!node) return;\n // ~card width + gap, scroll by ~3 cards for a comfortable page\n node.scrollBy({ left: dir * 320 * 2, behavior: \"smooth\" });\n };\n\n return (\n <section className=\"w-full py-6 md:py-8\">\n <div className=\"flex items-end justify-between gap-4 mb-4 md:mb-6 px-1\">\n <div className=\"flex flex-col\">\n <h2 className=\"text-primary-normal text-xl md:text-2xl font-semibold tracking-[-0.04em]\">\n {title}\n </h2>\n {subtitle && (\n <p className=\"text-secondary-normal-hover text-sm md:text-base mt-1\">\n {subtitle}\n </p>\n )}\n </div>\n <div className=\"hidden sm:flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => scrollBy(-1)}\n aria-label=\"Scroll left\"\n className=\"w-10 h-10 rounded-full bg-primary-background hover:bg-primary-light-hover flex items-center justify-center transition-colors\"\n >\n <Icon icon=\"lucide:arrow-left\" className=\"w-4 h-4 text-primary-normal\" />\n </button>\n <button\n type=\"button\"\n onClick={() => scrollBy(1)}\n aria-label=\"Scroll right\"\n className=\"w-10 h-10 rounded-full bg-primary-background hover:bg-primary-light-hover flex items-center justify-center transition-colors\"\n >\n <Icon icon=\"lucide:arrow-right\" className=\"w-4 h-4 text-primary-normal\" />\n </button>\n </div>\n </div>\n\n <div\n ref={scrollRef}\n className=\"flex gap-4 overflow-x-auto hide-scrollbar scroll-smooth -mx-1 px-1 pb-2 snap-x snap-mandatory\"\n >\n {packages.map((pkg) => (\n <div key={pkg.id} className=\"snap-start\">\n <PackageCard\n pkg={pkg}\n currency={currency}\n onSelect={onSelect}\n href={hrefFor?.(pkg)}\n openInNewTab={openInNewTab}\n />\n </div>\n ))}\n </div>\n </section>\n );\n};\n\nexport default PackagesCarousel;\n","import React from \"react\";\nimport type { TravoriesClient } from \"../../client/TravoriesClient\";\nimport type { HomePackageCard, HomeSectionsResponse } from \"../../api/types\";\nimport { useHomeSections } from \"../../hooks/useHomeSections\";\nimport PackagesCarousel from \"./PackagesCarousel\";\n\nexport interface HomeSectionsProps {\n /** Required when `initialSections` is not provided. */\n client?: TravoriesClient;\n /** Pre-fetched home sections (SSR pattern). When set, skips the client-side fetch. */\n initialSections?: HomeSectionsResponse | null;\n currency?: string;\n /** Called when the user clicks any package card across any section. */\n onSelect?: (pkg: HomePackageCard) => void;\n /** When set, cards render as <a href=hrefFor(pkg)> instead of buttons. */\n hrefFor?: (pkg: HomePackageCard) => string;\n /** Open each card in a new tab. Requires `hrefFor`. */\n openInNewTab?: boolean;\n /** Optional override for section titles (defaults match the frontend's labels). */\n titles?: {\n popular?: string;\n trending?: string;\n topRated?: string;\n moreToExplore?: string;\n };\n /** Section order (default: popular, trending, topRated, moreToExplore). */\n order?: Array<\"popular\" | \"trending\" | \"topRated\" | \"moreToExplore\">;\n className?: string;\n renderLoading?: () => React.ReactNode;\n renderError?: (err: Error) => React.ReactNode;\n}\n\nconst DEFAULT_TITLES = {\n popular: \"Popular Nepal Trekking Packages\",\n trending: \"Trending Right Now\",\n topRated: \"Top Rated Packages\",\n moreToExplore: \"More to Explore\",\n} as const;\n\nconst DEFAULT_ORDER = [\n \"popular\",\n \"trending\",\n \"topRated\",\n \"moreToExplore\",\n] as const;\n\n/**\n * Drop-in landing-page block that renders all four home sections. Same dual\n * usage as `<PackageDetailView />`: pass `client` to let the SDK fetch, OR pass\n * `initialSections` if you've already fetched (Next.js server component, etc.).\n */\nexport function HomeSections({\n client,\n initialSections,\n currency = \"USD\",\n onSelect,\n hrefFor,\n openInNewTab,\n titles,\n order,\n className,\n renderLoading,\n renderError,\n}: HomeSectionsProps) {\n const effectiveOrder = order ?? (DEFAULT_ORDER as unknown as NonNullable<HomeSectionsProps[\"order\"]>);\n if (!initialSections && !client) {\n throw new Error(\n \"[HomeSections] Provide either `initialSections` or `client`.\",\n );\n }\n\n // When `initialSections` is provided we don't need to fetch. Pass `null` to\n // the hook so it stays inert (respects rules-of-hooks while skipping the call).\n const remote = useHomeSections(initialSections ? null : client ?? null);\n const sections = initialSections ?? remote.data;\n const loading = !initialSections && Boolean(client) && remote.loading;\n const error = !initialSections && Boolean(client) ? remote.error : null;\n\n const mergedTitles = { ...DEFAULT_TITLES, ...(titles ?? {}) };\n\n if (loading) {\n return (\n <div className={`tvr-package-detail ${className ?? \"\"}`.trim()}>\n <div className=\"mx-auto max-w-[1440px] px-6 md:px-12 py-8\">\n {renderLoading ? renderLoading() : <SkeletonCarousel />}\n {renderLoading ? null : <SkeletonCarousel />}\n </div>\n </div>\n );\n }\n if (error) {\n return (\n <div className={`tvr-package-detail ${className ?? \"\"}`.trim()}>\n <div className=\"mx-auto max-w-[1440px] px-6 md:px-12 py-16 text-center text-red-600 text-sm\">\n {renderError ? renderError(error) : `Failed to load: ${error.message}`}\n </div>\n </div>\n );\n }\n if (!sections) {\n return null;\n }\n\n return (\n <div className={`tvr-package-detail ${className ?? \"\"}`.trim()}>\n <div className=\"mx-auto max-w-[1440px] px-6 md:px-12 py-4 md:py-6\">\n {effectiveOrder.map((key) => (\n <PackagesCarousel\n key={key}\n title={mergedTitles[key]}\n packages={sections[key] ?? []}\n currency={currency}\n onSelect={onSelect}\n hrefFor={hrefFor}\n openInNewTab={openInNewTab}\n />\n ))}\n </div>\n </div>\n );\n}\n\nfunction SkeletonCarousel() {\n return (\n <div className=\"py-6 md:py-8\">\n <div className=\"h-7 w-72 bg-gray-200 rounded mb-4 animate-pulse\" />\n <div className=\"flex gap-4 overflow-hidden\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div\n key={i}\n className=\"w-[300px] shrink-0 rounded-2xl bg-gray-100 animate-pulse\"\n style={{ height: 360 }}\n />\n ))}\n </div>\n </div>\n );\n}\n","import {\n createContext,\n useContext,\n type ReactNode,\n} from \"react\";\nimport type { TravoriesClient } from \"../../client/TravoriesClient\";\nimport type { HomeSectionsResponse } from \"../../api/types\";\nimport { useHomeSections } from \"../../hooks/useHomeSections\";\n\nexport interface HomeSectionsContextValue {\n data: HomeSectionsResponse | null;\n loading: boolean;\n error: Error | null;\n refetch: () => void;\n}\n\nconst HomeSectionsContext = createContext<HomeSectionsContextValue | null>(null);\n\nexport interface HomeSectionsProviderProps {\n /** Required if `initialSections` is not provided. */\n client?: TravoriesClient;\n /** Pre-fetched data (SSR). When set, no client-side fetch runs. */\n initialSections?: HomeSectionsResponse | null;\n children: ReactNode;\n}\n\n/**\n * One-shot data fetcher for the four home sections. Drop anywhere in your tree\n * and place any number of `<PackagesSection>` (or custom consumers via\n * `useHomeSectionsContext`) inside — they all share the same fetched payload.\n *\n * <HomeSectionsProvider client={client}>\n * <Hero />\n * <PackagesSection section=\"trending\" onSelect={goTo} />\n * <YourFAQ />\n * <PackagesSection section=\"moreToExplore\" onSelect={goTo} />\n * </HomeSectionsProvider>\n */\nexport function HomeSectionsProvider({\n client,\n initialSections,\n children,\n}: HomeSectionsProviderProps) {\n if (!initialSections && !client) {\n throw new Error(\n \"[HomeSectionsProvider] Provide either `initialSections` or `client`.\",\n );\n }\n\n // When `initialSections` is given, skip the network call entirely (pass null\n // to the hook so it stays inert).\n const remote = useHomeSections(initialSections ? null : client ?? null);\n\n const value: HomeSectionsContextValue = {\n data: initialSections ?? remote.data,\n loading: !initialSections && remote.loading,\n error: !initialSections ? remote.error : null,\n refetch: remote.refetch,\n };\n\n return (\n <HomeSectionsContext.Provider value={value}>\n {children}\n </HomeSectionsContext.Provider>\n );\n}\n\n/** Hook for any custom consumer (e.g., a stats badge) that wants the raw payload. */\nexport function useHomeSectionsContext(): HomeSectionsContextValue {\n const ctx = useContext(HomeSectionsContext);\n if (!ctx) {\n throw new Error(\n \"useHomeSectionsContext must be used inside <HomeSectionsProvider>.\",\n );\n }\n return ctx;\n}\n","import React from \"react\";\nimport type { HomePackageCard } from \"../../api/types\";\nimport PackagesCarousel from \"./PackagesCarousel\";\nimport { useHomeSectionsContext } from \"./HomeSectionsContext\";\n\nexport type HomeSectionKey =\n | \"popular\"\n | \"trending\"\n | \"topRated\"\n | \"moreToExplore\";\n\nconst DEFAULT_TITLES: Record<HomeSectionKey, string> = {\n popular: \"Popular Nepal Trekking Packages\",\n trending: \"Trending Right Now\",\n topRated: \"Top Rated Packages\",\n moreToExplore: \"More to Explore\",\n};\n\nexport interface PackagesSectionProps {\n /** Which section to render. */\n section: HomeSectionKey;\n /** Override the default title for this section. */\n title?: string;\n subtitle?: string;\n currency?: string;\n onSelect?: (pkg: HomePackageCard) => void;\n hrefFor?: (pkg: HomePackageCard) => string;\n /** Open each card in a new tab. Requires `hrefFor`. */\n openInNewTab?: boolean;\n /** Hide the whole block while loading (default: show a skeleton). */\n hideWhenLoading?: boolean;\n /** Hide when there are no packages for this section (default true). */\n hideWhenEmpty?: boolean;\n}\n\n/**\n * One independent home section, designed to live anywhere inside a\n * `<HomeSectionsProvider>`. Multiple of these share one fetch.\n *\n * <HomeSectionsProvider client={client}>\n * <PackagesSection section=\"popular\" onSelect={goTo} />\n * <YourCustomBlock />\n * <PackagesSection section=\"trending\" title=\"Hot picks\" onSelect={goTo} />\n * </HomeSectionsProvider>\n */\nconst PackagesSection: React.FC<PackagesSectionProps> = ({\n section,\n title,\n subtitle,\n currency,\n onSelect,\n hrefFor,\n openInNewTab,\n hideWhenLoading = false,\n hideWhenEmpty = true,\n}) => {\n const { data, loading, error } = useHomeSectionsContext();\n const packages = data?.[section] ?? [];\n\n if (loading) {\n if (hideWhenLoading) return null;\n return (\n <div className=\"tvr-package-detail\">\n <div className=\"mx-auto max-w-[1440px] px-6 md:px-12\">\n <SkeletonCarousel title={title ?? DEFAULT_TITLES[section]} />\n </div>\n </div>\n );\n }\n\n if (error) {\n // Stay quiet on inline sections — the user's page shouldn't crash because\n // one carousel failed. Log only.\n // eslint-disable-next-line no-console\n console.error(`[PackagesSection:${section}]`, error);\n return null;\n }\n\n if (hideWhenEmpty && packages.length === 0) return null;\n\n return (\n <div className=\"tvr-package-detail\">\n <div className=\"mx-auto max-w-[1440px] px-6 md:px-12\">\n <PackagesCarousel\n title={title ?? DEFAULT_TITLES[section]}\n subtitle={subtitle}\n packages={packages}\n currency={currency}\n onSelect={onSelect}\n hrefFor={hrefFor}\n openInNewTab={openInNewTab}\n hideWhenEmpty={hideWhenEmpty}\n />\n </div>\n </div>\n );\n};\n\nfunction SkeletonCarousel({ title }: { title: string }) {\n return (\n <div className=\"py-6 md:py-8\">\n <div className=\"text-primary-normal text-xl md:text-2xl font-semibold tracking-[-0.04em] mb-4\">\n {title}\n </div>\n <div className=\"flex gap-4 overflow-hidden\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div\n key={i}\n className=\"w-[300px] md:w-[320px] shrink-0 rounded-xl bg-gray-100 animate-pulse\"\n style={{ height: 280 }}\n />\n ))}\n </div>\n </div>\n );\n}\n\nexport default PackagesSection;\n","import { Icon } from \"@iconify/react\";\nimport React, { useMemo, useRef, useState, useEffect } from \"react\";\nimport { formatCurrency } from \"../../utils/format\";\nimport type { DescriptionData } from \"./_legacy-types\";\n\ntype TravelerOption = {\n id: \"Adult\" | \"Senior Citizen\" | \"Children\" | \"Infant\";\n name: string;\n count: number;\n ageRange?: { min: number; max: number };\n countInTotal: boolean;\n};\n\ninterface BookingCardLiteProps {\n DescriptionData: DescriptionData;\n currency?: string;\n /** Called when user clicks Book/Reserve. Receives the picked values so the\n * consumer can wire their own booking flow. */\n onReserve?: (payload: {\n arrival: string;\n departure: string;\n travelers: TravelerOption[];\n totalCost: number;\n pricePerPerson: number;\n }) => void;\n}\n\n// Default: 1 Adult selected so the price total and Book Now CTA are active on\n// first render. User can adjust via the +/− steppers.\nconst initialOptions: TravelerOption[] = [\n { id: \"Adult\", name: \"Adult\", count: 1, ageRange: { min: 18, max: 64 }, countInTotal: true },\n { id: \"Senior Citizen\", name: \"Senior Citizen\", count: 0, ageRange: { min: 65, max: 100 }, countInTotal: true },\n { id: \"Children\", name: \"Children\", count: 0, ageRange: { min: 4, max: 17 }, countInTotal: true },\n { id: \"Infant\", name: \"Infant\", count: 0, ageRange: { min: 0, max: 3 }, countInTotal: false },\n];\n\nconst getPluralizedName = (name: string, count: number) => {\n const map: Record<string, [string, string]> = {\n Adult: [\"Adult\", \"Adults\"],\n \"Senior Citizen\": [\"Senior Citizen\", \"Senior Citizens\"],\n Children: [\"Child\", \"Children\"],\n Infant: [\"Infant\", \"Infants\"],\n };\n const [s, p] = map[name] || [name, name];\n return count <= 1 ? s : p;\n};\n\n/**\n * High-fidelity port of frontend `BookingForm.tsx` — visual only.\n * Submission, validation, auth, and the booking API are intentionally left to\n * the consumer (called via `onReserve`) so the SDK stays auth/Redux-free.\n */\nconst BookingCardLite: React.FC<BookingCardLiteProps> = ({\n DescriptionData,\n currency = \"USD\",\n onReserve,\n}) => {\n const prices = DescriptionData.Price ?? [];\n const discounts = DescriptionData.Discounts ?? [];\n const totalDays = DescriptionData.TotalDays || 1;\n\n const [options, setOptions] = useState<TravelerOption[]>(initialOptions);\n const [arrival, setArrival] = useState<string>(\"\");\n const [isOpen, setIsOpen] = useState(false);\n const [isPriceDialogOpen, setIsPriceDialogOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n // Departure derived from arrival + totalDays\n const departure = useMemo(() => {\n if (!arrival) return \"\";\n const d = new Date(arrival);\n if (isNaN(d.getTime())) return \"\";\n d.setDate(d.getDate() + Math.max(0, totalDays - 1));\n return d.toISOString().split(\"T\")[0];\n }, [arrival, totalDays]);\n\n // Click-outside for traveler dropdown\n useEffect(() => {\n const onDocClick = (e: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) {\n setIsOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", onDocClick);\n return () => document.removeEventListener(\"mousedown\", onDocClick);\n }, []);\n\n const allPeopleCount = useMemo(\n () => options.filter((o) => o.countInTotal).reduce((s, o) => s + o.count, 0),\n [options],\n );\n const totalPeople = useMemo(() => options.reduce((s, o) => s + o.count, 0), [options]);\n\n // Match a price tier by group size\n const currentPriceGroup = useMemo(() => {\n if (prices.length === 0) return null;\n const sorted = [...prices].sort((a, b) => a.groupSizeMin - b.groupSizeMin);\n if (allPeopleCount === 0) return sorted[0];\n return (\n sorted.find(\n (p) => allPeopleCount >= p.groupSizeMin && allPeopleCount <= p.groupSizeMax,\n ) ?? sorted[sorted.length - 1]\n );\n }, [prices, allPeopleCount]);\n\n const minPriceGroup = useMemo(() => {\n if (prices.length === 0) return null;\n return [...prices].sort((a, b) => a.pricePerPerson - b.pricePerPerson)[0];\n }, [prices]);\n\n const currentPrice = currentPriceGroup?.pricePerPerson ?? 0;\n const maxPrice = useMemo(\n () => prices.reduce((m, p) => Math.max(m, p.pricePerPerson), 0),\n [prices],\n );\n const minPrice = minPriceGroup?.pricePerPerson ?? 0;\n\n // Per-category discounted prices\n const categoryPrices = useMemo(() => {\n const result: Record<string, number> = {};\n for (const opt of options) {\n if (!opt.ageRange) {\n result[opt.id] = currentPrice;\n continue;\n }\n const matched = discounts.find(\n (d) =>\n (opt.ageRange!.min >= d.ageMin && opt.ageRange!.min <= d.ageMax) ||\n (opt.ageRange!.max >= d.ageMin && opt.ageRange!.max <= d.ageMax),\n );\n const pct = matched?.discountPercentage ?? 0;\n result[opt.id] = Math.max(0, currentPrice * (1 - pct / 100));\n }\n return result;\n }, [options, currentPrice, discounts]);\n\n const costBreakdown = useMemo(\n () =>\n options\n .filter((o) => o.count > 0)\n .map((o) => {\n const discountedPrice = categoryPrices[o.id] ?? currentPrice;\n const discountPercentage =\n currentPrice > 0\n ? ((currentPrice - discountedPrice) / currentPrice) * 100\n : 0;\n return {\n category: o.name,\n count: o.count,\n discountedPrice,\n discountPercentage,\n };\n }),\n [options, categoryPrices, currentPrice],\n );\n\n const totalCost = useMemo(\n () => costBreakdown.reduce((s, x) => s + x.discountedPrice * x.count, 0),\n [costBreakdown],\n );\n\n const updateTraveler = (id: TravelerOption[\"id\"], inc: boolean) =>\n setOptions((prev) =>\n prev.map((o) =>\n o.id === id ? { ...o, count: Math.max(0, o.count + (inc ? 1 : -1)) } : o,\n ),\n );\n\n const handleReserve = () => {\n if (!onReserve) return;\n if (allPeopleCount === 0) return;\n onReserve({\n arrival,\n departure,\n travelers: options.filter((o) => o.count > 0),\n totalCost,\n pricePerPerson: currentPrice,\n });\n };\n\n return (\n <div className=\"w-full sm:w-full lg:w-[520px] h-fit border rounded-xl shadow-md px-4 sm:px-6 bg-white flex flex-col gap-6 py-8 sm:py-10\">\n <div className=\"flex flex-col\">\n {/* Price header */}\n <div className=\"flex flex-col gap-2 md:gap-3\">\n <div className=\"text-lg md:text-xl lg:text-2xl font-medium text-primary-normal flex flex-col gap-2 pb-2 border-b border-[#E0E4E8]\">\n <div className=\"flex items-center lg:justify-between justify-center gap-1\">\n <div className=\"flex items-center\">\n <p className=\"text-sm lg:text-base font-medium text-secondary-normal-hover tracking-[-0.02em] mr-2\">\n Price For Single Adult\n </p>\n {currentPriceGroup?.isNegotiable && (\n <span className=\"text-xs bg-green-100 text-green-800 px-2 py-1 rounded-full\">\n Negotiable\n </span>\n )}\n <button\n type=\"button\"\n onClick={() => setIsPriceDialogOpen(true)}\n className=\"ml-2 p-1 h-6 w-6 flex items-center justify-center rounded hover:bg-gray-100 transition-colors\"\n aria-label=\"Show pricing details\"\n >\n <Icon icon=\"lucide:info\" className=\"w-4 h-4 text-gray-500\" />\n </button>\n </div>\n <div className=\"text-right\">\n <p className=\"text-lg md:text-xl font-medium tracking-[-0.04em] text-primary-normal\">\n {formatCurrency(\n totalCost && totalPeople > 0\n ? categoryPrices[\"Adult\"] ?? currentPrice\n : currentPrice,\n currency,\n )}\n <span className=\"text-sm\">/-</span>\n </p>\n </div>\n </div>\n </div>\n\n <div className=\"w-full h-[2px] bg-primary-background/10\" />\n\n {/* Date + traveler picker */}\n <div className=\"grid lg:grid-cols-2 md:grid-cols-1 sm:grid-cols-1 gap-4 mt-4\">\n <div>\n <label\n htmlFor=\"tvr-arrival\"\n className=\"text-sm md:text-base text-secondary-normal-hover\"\n >\n Arrival Date\n </label>\n <input\n id=\"tvr-arrival\"\n type=\"date\"\n value={arrival}\n onChange={(e) => setArrival(e.target.value)}\n className=\"w-full max-h-10 h-10 mt-1 px-4 text-sm md:text-base rounded-xl border text-primary-normal focus:outline-none focus:ring-1 focus:ring-primary-normal-active\"\n />\n {departure && (\n <p className=\"text-xs text-secondary-normal-hover mt-1\">\n Returns: {departure}\n </p>\n )}\n </div>\n\n <div className=\"relative\" ref={dropdownRef}>\n <label className=\"text-sm md:text-base text-secondary-normal-hover\">\n Number of people\n </label>\n <button\n type=\"button\"\n onClick={() => setIsOpen((v) => !v)}\n className=\"w-full max-h-10 h-10 overflow-y-scroll mt-1 flex justify-between px-4 items-center text-sm md:text-base rounded-xl border text-primary-normal focus:outline-none focus:ring-1 focus:ring-primary-normal-active\"\n >\n {options.some((o) => o.count > 0)\n ? options\n .filter((o) => o.count > 0)\n .map((o) => `${o.count} ${getPluralizedName(o.name, o.count)}`)\n .join(\", \")\n : \"Eg : 2 Adults\"}\n <Icon\n icon={isOpen ? \"lucide:chevron-up\" : \"lucide:chevron-down\"}\n className=\"w-4 h-4\"\n />\n </button>\n\n {isOpen && (\n <div className=\"absolute z-10 sm:min-w-[360px] md:min-w-[400px] bg-white border rounded-xl shadow-lg mt-2 left-0 sm:left-auto sm:-ml-[200px]\">\n {options.map((option) => {\n const price = categoryPrices[option.id] ?? currentPrice;\n const discountPercentage =\n currentPrice > 0\n ? ((currentPrice - price) / currentPrice) * 100\n : 0;\n\n return (\n <div\n key={option.id}\n className=\"py-3 border-b last:border-b-0 hover:bg-primary-light/30 transition-colors flex justify-between items-center gap-3 px-4 sm:px-5\"\n >\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center justify-between gap-4\">\n <div className=\"flex flex-col\">\n <p className=\"text-xs md:text-lg font-medium text-secondary-normal-hover leading-tight\">\n {getPluralizedName(option.name, option.count || 1)}\n </p>\n <p className=\"text-xs md:text-sm text-gray-500 whitespace-nowrap leading-tight mt-0.5\">\n {option.ageRange &&\n `( Ages ${option.ageRange.min}-${option.ageRange.max} )`}\n </p>\n </div>\n <div className=\"flex flex-col items-start whitespace-nowrap\">\n {Math.round(discountPercentage) === 100 ? (\n <span className=\"text-green-600 text-xs font-medium text-start w-full\">\n (FREE)\n </span>\n ) : (\n <>\n {maxPrice !== price && (\n <span className=\"text-xs line-through text-gray-400\">\n {formatCurrency(maxPrice, currency)}\n <span className=\"text-[10px]\">pp</span>\n </span>\n )}\n <p className=\"text-sm md:text-base font-semibold text-primary-normal leading-tight\">\n {formatCurrency(price, currency)}\n <span className=\"text-[10px] md:text-xs\">pp</span>\n </p>\n {Math.round(discountPercentage) > 0 && (\n <span className=\"text-xs text-green-600\">\n ({discountPercentage.toFixed(0)}% off)\n </span>\n )}\n </>\n )}\n </div>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => updateTraveler(option.id, false)}\n className=\"w-8 h-8 md:w-9 md:h-9 border rounded-full text-primary-normal flex items-center justify-center hover:bg-primary-light/40 transition-colors\"\n aria-label={`Remove one ${option.name}`}\n >\n -\n </button>\n <h1 className=\"text-base text-primary-normal w-5 text-center\">\n {option.count}\n </h1>\n <button\n type=\"button\"\n onClick={() => updateTraveler(option.id, true)}\n className=\"w-8 h-8 md:w-9 md:h-9 border rounded-full text-primary-normal flex items-center justify-center hover:bg-primary-light/40 transition-colors\"\n aria-label={`Add one ${option.name}`}\n >\n +\n </button>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n </div>\n\n {allPeopleCount > 0 && (\n <div className=\"p-2 mt-4 mb-2 rounded-lg hidden lg:block text-sm md:text-base text-gray-600 border border-secondary/50\">\n {costBreakdown.map((item, idx) => (\n <span key={item.category}>\n {item.count} {getPluralizedName(item.category, item.count)} ×{\" \"}\n {formatCurrency(item.discountedPrice, currency)}\n {item.discountedPrice === 0 && (\n <span className=\"text-green-600 text-xs ml-1\">(FREE)</span>\n )}\n {item.discountPercentage > 0 && (\n <span className=\"text-xs text-green-600 ml-1\">\n {item.discountPercentage.toFixed(0)}% discount applied\n </span>\n )}\n {idx !== costBreakdown.length - 1 && \" + \"}\n </span>\n ))}\n <div className=\"pt-2 flex gap-4 items-center font-semibold text-primary-normal\">\n <span>Total :</span>\n <span className=\"text-primary-normal text-xl font-bold\">\n {formatCurrency(totalCost, currency)}\n </span>\n </div>\n </div>\n )}\n </div>\n\n <div className=\"mt-3\">\n <button\n type=\"button\"\n onClick={handleReserve}\n disabled={allPeopleCount === 0 || !onReserve}\n className=\"w-full py-2 md:py-3 bg-primary-normal text-white font-semibold rounded-lg hover:bg-primary-normal-hover transition text-sm md:text-base disabled:opacity-60 disabled:cursor-not-allowed\"\n >\n {allPeopleCount === 0 ? (\n \"Reserve Now\"\n ) : (\n <>Book Now - {formatCurrency(totalCost, currency)}</>\n )}\n </button>\n <p className=\"text-center text-xs md:text-sm text-secondary-normal-hover mt-2 md:mt-3 pb-4 tracking-[-0.02em]\">\n *Price Varies According to\n <span className=\"text-primary-normal text-sm md:text-sm\"> age group </span>\n and\n <span className=\"text-primary-normal text-sm md:text-sm\">\n {\" \"}\n number of people.{\" \"}\n </span>\n </p>\n </div>\n </div>\n\n <div className=\"flex flex-col gap-0 justify-center p-4 border-2 rounded-lg\">\n <div className=\"flex items-center gap-0 font-medium\">\n <span className=\"text-primary-normal text-lg md:text-lg tracking-[-0.02em]\">\n {formatCurrency(minPrice, currency)}\n </span>\n <span className=\"text-secondary-normal-hover text-sm md:text-sm ml-2\">\n Per Person\n </span>\n </div>\n <div className=\"flex flex-col sm:items-start md:items-center sm:flex-row whitespace-nowrap text-xs md:text-sm\">\n <span className=\"text-secondary-normal-hover\">\n Best Price for group of {minPriceGroup?.groupSizeMin} -{\" \"}\n {minPriceGroup?.groupSizeMax} people\n </span>\n <span className=\"text-primary-normal sm:ml-2\">(Lowest Price)</span>\n </div>\n </div>\n\n {/* Pricing details overlay */}\n {isPriceDialogOpen && (\n <div\n className=\"fixed inset-0 z-[1000] bg-black/50 flex items-center justify-center p-4\"\n onClick={() => setIsPriceDialogOpen(false)}\n >\n <div\n className=\"bg-white rounded-2xl border border-[#E0E4E8] max-w-md w-full p-6 max-h-[80vh] overflow-y-auto\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex items-start justify-between mb-4\">\n <div>\n <h3 className=\"text-primary-normal text-lg font-semibold\">\n Pricing Details\n </h3>\n <p className=\"text-secondary-normal-hover text-sm mt-1\">\n Prices vary based on group size and age. All prices are per person.\n </p>\n </div>\n <button\n type=\"button\"\n onClick={() => setIsPriceDialogOpen(false)}\n className=\"text-gray-500 hover:bg-gray-100 rounded p-1\"\n aria-label=\"Close\"\n >\n <Icon icon=\"lucide:x\" className=\"w-5 h-5\" />\n </button>\n </div>\n <div className=\"space-y-4\">\n <div>\n <h4 className=\"font-semibold mb-2 text-primary-normal\">\n Group Size Pricing\n </h4>\n <div className=\"space-y-2\">\n {prices.map((p, i) => (\n <div\n key={i}\n className=\"flex justify-between items-center p-2 bg-primary-background/10 rounded border border-primary-border/20\"\n >\n <span className=\"text-sm text-secondary-normal-hover\">\n Group of {p.groupSizeMin} - {p.groupSizeMax} people\n </span>\n <div className=\"font-medium text-primary-normal text-sm\">\n {formatCurrency(p.pricePerPerson, currency)}\n {p.isNegotiable && (\n <span className=\"text-xs text-green-600 ml-1\">\n (Negotiable)\n </span>\n )}\n </div>\n </div>\n ))}\n </div>\n </div>\n {discounts.length > 0 && (\n <div>\n <h4 className=\"font-semibold mb-2 text-primary-normal\">\n Age-Based Discounts\n </h4>\n <div className=\"space-y-1 text-sm text-secondary-normal-hover\">\n {discounts.map((d, i) => (\n <div key={i}>\n Ages {d.ageMin} - {d.ageMax}: {d.discountPercentage}% discount\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default BookingCardLite;\n","import { useEffect, useMemo, useState } from \"react\";\n\ninterface PackageMapLocation {\n coord: [number, number];\n displayName: string;\n sequence?: number;\n}\n\ninterface PackageMapProps {\n locations: PackageMapLocation[];\n dayNumber?: number;\n /** Real driving/trail polylines for this day, already flipped to [lat, lng]. */\n routes?: Array<[number, number][]>;\n className?: string;\n}\n\n// Pleasant per-day color palette mirroring the frontend's PackageMap palette\nconst DAY_COLORS = [\n \"#8b5cf6\", // violet\n \"#f59e0b\", // amber\n \"#14b8a6\", // teal\n \"#6366f1\", // indigo\n \"#f97316\", // orange\n \"#84cc16\", // lime\n \"#ec4899\", // pink\n \"#0ea5e9\", // sky\n];\n\nconst dayColor = (n?: number) => DAY_COLORS[((n ?? 1) - 1) % DAY_COLORS.length];\n\n/**\n * Lazy Leaflet wrapper. Renders nothing on the server. On the client, dynamically\n * imports react-leaflet + leaflet so consumers without SSR setup don't blow up.\n */\nexport default function PackageMap({\n locations,\n dayNumber,\n routes,\n className,\n}: PackageMapProps) {\n const [Leaflet, setLeaflet] = useState<null | {\n MapContainer: any;\n TileLayer: any;\n Marker: any;\n Popup: any;\n Polyline: any;\n useMap: any;\n L: any;\n }>(null);\n\n useEffect(() => {\n let cancelled = false;\n (async () => {\n const [rl, leaflet] = await Promise.all([\n import(\"react-leaflet\"),\n import(\"leaflet\"),\n ]);\n // Side-effect CSS import — bundler-resolved (Vite/webpack). Cast to any\n // since the file has no .d.ts.\n await (import(\"leaflet/dist/leaflet.css\" as any) as Promise<unknown>).catch(\n () => undefined,\n );\n if (cancelled) return;\n // Leaflet's default marker images expect bundler asset URLs that aren't\n // shipped with the JS module — point them at the public CDN instead so\n // markers actually show in every consumer.\n const Lns: any = (leaflet as any).default ?? leaflet;\n delete (Lns.Icon.Default.prototype as any)._getIconUrl;\n Lns.Icon.Default.mergeOptions({\n iconRetinaUrl:\n \"https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon-2x.png\",\n iconUrl:\n \"https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon.png\",\n shadowUrl:\n \"https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-shadow.png\",\n });\n setLeaflet({\n MapContainer: rl.MapContainer,\n TileLayer: rl.TileLayer,\n Marker: rl.Marker,\n Popup: rl.Popup,\n Polyline: rl.Polyline,\n useMap: rl.useMap,\n L: Lns,\n });\n })();\n return () => {\n cancelled = true;\n };\n }, []);\n\n const valid = useMemo(\n () =>\n (locations || []).filter(\n (l) =>\n l?.coord &&\n Number.isFinite(l.coord[0]) &&\n Number.isFinite(l.coord[1]),\n ),\n [locations],\n );\n\n if (valid.length === 0) {\n return (\n <div\n className={`h-full w-full flex items-center justify-center bg-slate-100 text-slate-500 rounded-lg border border-[#E0E4E8] text-sm ${className ?? \"\"}`}\n >\n No locations available\n </div>\n );\n }\n\n if (!Leaflet) {\n return (\n <div\n className={`h-full w-full flex items-center justify-center bg-slate-100 text-slate-500 rounded-lg border border-[#E0E4E8] text-sm animate-pulse ${className ?? \"\"}`}\n >\n Loading map…\n </div>\n );\n }\n\n const { MapContainer, TileLayer, Marker, Popup, Polyline, useMap, L } = Leaflet;\n const color = dayColor(dayNumber);\n\n const lats = valid.map((l) => l.coord[0]);\n const lngs = valid.map((l) => l.coord[1]);\n const center: [number, number] = [\n (Math.min(...lats) + Math.max(...lats)) / 2,\n (Math.min(...lngs) + Math.max(...lngs)) / 2,\n ];\n\n // When real routes are present we prefer them over a straight line. The\n // straight Polyline only acts as a fallback when the BE returned no GeoJSON\n // for this day.\n const hasRealRoutes = (routes?.length ?? 0) > 0;\n\n // Mirror the frontend's `MapBounds` — re-fit the view whenever the day's\n // location set changes. Bounds include the route geometry too, so the map\n // frames the actual path rather than just the stop markers.\n const FitBounds = () => {\n const map = useMap();\n useEffect(() => {\n const points: Array<[number, number]> = valid.map((l) => l.coord);\n if (hasRealRoutes) {\n for (const line of routes!) {\n for (const p of line) points.push(p);\n }\n }\n if (!points.length) return;\n const b = L.latLngBounds(points.map((p) => L.latLng(p[0], p[1])));\n const padding: [number, number] = [60, 60];\n map.flyToBounds(b, {\n paddingTopLeft: padding,\n paddingBottomRight: padding,\n duration: 1.2,\n easeLinearity: 0.5,\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n dayNumber,\n valid.length,\n valid.map((l) => `${l.coord[0]},${l.coord[1]}`).join(\"|\"),\n hasRealRoutes,\n routes?.length,\n ]);\n return null;\n };\n\n return (\n <div\n className={`h-full w-full overflow-hidden rounded-lg border border-[#E0E4E8] ${className ?? \"\"}`}\n style={{ minHeight: 500 }}\n >\n <MapContainer\n center={center}\n zoom={8}\n scrollWheelZoom={false}\n style={{ height: \"100%\", width: \"100%\" }}\n >\n <TileLayer\n attribution='&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors'\n url=\"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\"\n />\n <FitBounds />\n\n {hasRealRoutes\n ? routes!.map((line, i) => (\n <Polyline\n key={`route-${dayNumber}-${i}`}\n positions={line}\n pathOptions={{ color, weight: 4, opacity: 0.9 }}\n />\n ))\n : valid.length > 1 && (\n <Polyline\n positions={valid.map((l) => l.coord)}\n pathOptions={{\n color,\n weight: 3,\n opacity: 0.6,\n dashArray: \"6 8\", // dashed fallback so it reads as \"no real route\"\n }}\n />\n )}\n\n {valid.map((loc, i) => (\n <Marker key={`${dayNumber}-${i}-${loc.coord[0]}-${loc.coord[1]}`} position={loc.coord}>\n <Popup>\n <div style={{ fontFamily: \"inherit\" }}>\n <strong style={{ color }}>{loc.displayName}</strong>\n {dayNumber !== undefined && (\n <div style={{ fontSize: 11, color: \"#64748b\", marginTop: 4 }}>\n Day {dayNumber}\n </div>\n )}\n </div>\n </Popup>\n </Marker>\n ))}\n </MapContainer>\n </div>\n );\n}\n","import { Icon } from \"@iconify/react\";\nimport React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport type { DescriptionData } from \"./_legacy-types\";\nimport type { PackageRoutesDay } from \"../../api/types\";\nimport PackageMap from \"./PackageMap\";\nimport { formatCurrency, startingPrice } from \"../../utils/format\";\n\nconst DifficultyProgressBar = ({ level }: { level: string }) => {\n const normalizedLevel = (level || \"\").toLowerCase();\n let width = \"30%\";\n let colorClass = \"bg-green-500\";\n let label = \"Easy\";\n\n if (normalizedLevel.includes(\"moderate\") || normalizedLevel.includes(\"medium\")) {\n width = \"70%\";\n colorClass = \"bg-secondary\";\n label = \"Moderate\";\n } else if (\n normalizedLevel.includes(\"challenging\") ||\n normalizedLevel.includes(\"challenge\")\n ) {\n width = \"100%\";\n colorClass = \"bg-orange-500\";\n label = \"Challenging\";\n } else if (normalizedLevel.includes(\"extreme\") || normalizedLevel.includes(\"hard\")) {\n width = \"100%\";\n colorClass = \"bg-primary-dark\";\n label = \"Extreme\";\n } else {\n width = \"30%\";\n colorClass = \"bg-green-500\";\n label = level || \"Easy\";\n }\n\n return (\n <div className=\"flex items-center gap-3 w-full\">\n <div className=\"w-[80px] h-1.5 bg-gray-200 rounded-full overflow-hidden shrink-0\">\n <div\n className={`h-full ${colorClass} transition-all duration-500`}\n style={{ width }}\n />\n </div>\n <span className=\"text-sm md:text-base text-[#47586E] whitespace-nowrap\">\n Difficulty: {label}\n </span>\n </div>\n );\n};\n\nconst getStopStyles = (label: string) => {\n if (label === \"Start\") {\n return {\n labelClass: \"text-emerald-600\",\n dotClass: \"bg-emerald-500 border-emerald-500\",\n lineClass: \"bg-emerald-300\",\n };\n }\n if (label === \"End\") {\n return {\n labelClass: \"text-[#3b82f6]\",\n dotClass: \"bg-[#3b82f6] border-[#3b82f6]\",\n lineClass: \"bg-[#3b82f6] opacity-30\",\n };\n }\n return {\n labelClass: \"text-[#8b5cf6]\",\n dotClass: \"bg-[#8b5cf6] border-[#8b5cf6]\",\n lineClass: \"bg-[#8b5cf6] opacity-30\",\n };\n};\n\nconst Itinerary: React.FC<{\n Description: DescriptionData;\n routes?: PackageRoutesDay[];\n currency?: string;\n /** Called from the sticky bar's Reserve button. Typically scrolls to BookingCardLite. */\n onReserveClick?: () => void;\n}> = ({ Description, routes, currency = \"USD\", onReserveClick }) => {\n const [selectedDay, setSelectedDay] = useState<number>(1);\n const [descriptionExpanded, setDescriptionExpanded] = useState<boolean>(false);\n const scrollRef = useRef<HTMLDivElement>(null);\n const detailCardRef = useRef<HTMLDivElement>(null);\n const hasUserSelectedDayRef = useRef<boolean>(false);\n\n // Index routes by day for O(1) lookup. GeoJSON `geometry` may arrive as a\n // string from the BE — parse it once here so map render stays fast.\n const routesByDay = useMemo(() => {\n const map = new Map<number, Array<[number, number][]>>();\n for (const day of routes ?? []) {\n const lines: Array<[number, number][]> = [];\n for (const r of day.routes ?? []) {\n let geom: any = r.geometry;\n if (typeof geom === \"string\") {\n try {\n geom = JSON.parse(geom);\n } catch {\n continue;\n }\n }\n if (!geom?.coordinates || !Array.isArray(geom.coordinates)) continue;\n // GeoJSON is [lng, lat]; Leaflet needs [lat, lng].\n const flipped = geom.coordinates\n .map((c: any) =>\n Array.isArray(c) && Number.isFinite(c[0]) && Number.isFinite(c[1])\n ? ([c[1], c[0]] as [number, number])\n : null,\n )\n .filter(Boolean) as [number, number][];\n if (flipped.length >= 2) lines.push(flipped);\n }\n if (lines.length) map.set(day.dayNumber, lines);\n }\n return map;\n }, [routes]);\n\n const dayItems = useMemo(() => {\n if (!Description?.Days?.length) return [];\n return Description.Days.map((day, index) => {\n const actualDayNumber = day?.DayNumber ?? day?.dayNumber ?? index + 1;\n const flattenedLocs: any[] = [];\n (day?.locations || []).forEach((item: any) => {\n if (item?.locations && Array.isArray(item.locations)) {\n flattenedLocs.push(...item.locations);\n } else {\n flattenedLocs.push(item);\n }\n });\n\n const locationsData = flattenedLocs\n .map((loc: any, idx: number) => {\n const lat = Number(loc?.lat ?? loc?.coord?.[0]);\n const lng = Number(loc?.lng ?? loc?.coord?.[1]);\n if (isNaN(lat) || isNaN(lng)) return null;\n return {\n coord: [lat, lng] as [number, number],\n displayName:\n loc?.name ||\n loc?.displayName ||\n `Location ${loc?.Sequence || loc?.sequence || idx + 1}`,\n sequence: loc?.sequence || loc?.position || idx + 1,\n };\n })\n .filter(Boolean) as Array<{\n coord: [number, number];\n displayName: string;\n sequence: number;\n }>;\n\n const locationName =\n locationsData.length > 0\n ? locationsData.length > 1\n ? `${locationsData[0].displayName} - ${locationsData[locationsData.length - 1].displayName}`\n : locationsData[0].displayName\n : \"\";\n\n return {\n key: `Day ${actualDayNumber}`,\n data: {\n title: locationName || `Location ${actualDayNumber}`,\n locationsData,\n duration: `${day?.travelDuration || day?.travelDurationHours || \"N/A\"} hrs`,\n difficulty: day?.difficulty || \"N/A\",\n transportation: day?.transportation?.join(\", \") || \"N/A\",\n food: Array.isArray(day?.foodService)\n ? day.foodService.join(\", \")\n : (day as any)?.foodService || \"N/A\",\n accommodation: day?.accommodation || \"N/A\",\n content: day?.description || \"No description available\",\n activities: day?.activities || [],\n },\n };\n });\n }, [Description?.Days]);\n\n useEffect(() => {\n if (scrollRef.current) {\n const activeTab = scrollRef.current.children[selectedDay - 1] as HTMLElement;\n if (activeTab) {\n const containerWidth = scrollRef.current.offsetWidth;\n const tabWidth = activeTab.offsetWidth;\n const tabLeft = activeTab.offsetLeft;\n const scrollLeft = tabLeft - containerWidth / 2 + tabWidth / 2;\n scrollRef.current.scrollTo({ left: scrollLeft, behavior: \"smooth\" });\n }\n }\n }, [selectedDay]);\n\n // Mirrors frontend behavior: when the user picks a different day, scroll the\n // day-detail card back into view, accounting for the sticky day-tabs strip.\n // Skipped on first render (only fires on user-initiated change).\n useEffect(() => {\n if (!hasUserSelectedDayRef.current) return;\n if (!detailCardRef.current) return;\n const raf = window.requestAnimationFrame(() => {\n const stickyTabsHeight = 76; // tab strip (~60px) + py-2 buffer\n const safetyGap = 12;\n const elementPosition =\n detailCardRef.current?.getBoundingClientRect().top ?? 0;\n const offsetPosition =\n elementPosition + window.scrollY - (stickyTabsHeight + safetyGap);\n window.scrollTo({ top: offsetPosition, behavior: \"smooth\" });\n });\n return () => window.cancelAnimationFrame(raf);\n }, [selectedDay]);\n\n if (!dayItems.length) {\n return (\n <p className=\"text-secondary-normal-hover text-base mt-4\">\n No itinerary information available.\n </p>\n );\n }\n\n const selectedItem = dayItems[selectedDay - 1] ?? dayItems[0];\n\n const lowestPrice = startingPrice(Description.Price ?? []);\n\n return (\n <div className=\"mt-4 h-full w-full text-[#5B4D81]\">\n {/* Day Selector Tabs — sticky to top of viewport while scrolling. When\n * stuck, it doubles as a mini navbar by showing the price + Reserve CTA\n * on the right (md+ only — mobile keeps just the day tabs to save room). */}\n <div className=\"w-full sticky top-0 z-30 mb-6 bg-white py-2 -mx-4 px-4 sm:-mx-6 sm:px-6 border-b border-[#E0E4E8]/60\">\n <div className=\"flex items-center gap-3\">\n {/* Day tab pill — takes available space */}\n <div className=\"flex-1 flex items-center gap-2 p-1.5 rounded-full overflow-hidden bg-white\">\n <button\n type=\"button\"\n onClick={() => scrollRef.current?.scrollBy({ left: -151, behavior: \"smooth\" })}\n className=\"flex w-8 h-8 rounded-full bg-primary-background items-center justify-center hover:bg-[#65558F15] transition-all shrink-0\"\n >\n <Icon icon=\"lucide:arrow-left\" className=\"w-4 h-4 text-[#65558F]\" />\n </button>\n <div\n ref={scrollRef}\n className=\"flex items-center gap-2 overflow-x-auto hide-scrollbar scroll-smooth px-1 flex-1\"\n >\n {dayItems.map((_, index) => {\n const dayNum = index + 1;\n const isActive = selectedDay === dayNum;\n return (\n <button\n type=\"button\"\n key={index}\n onClick={() => {\n hasUserSelectedDayRef.current = true;\n setSelectedDay(dayNum);\n }}\n className={`cursor-pointer rounded-full px-4 py-2.5 text-sm font-medium tracking-[-0.02em] transition-all shrink-0 ${\n isActive\n ? \"bg-secondary text-white shadow-sm\"\n : \"bg-primary-background text-primary-normal hover:bg-primary-light-hover\"\n }`}\n >\n Day {dayNum}\n </button>\n );\n })}\n </div>\n <button\n type=\"button\"\n onClick={() => scrollRef.current?.scrollBy({ left: 151, behavior: \"smooth\" })}\n className=\"w-10 h-10 rounded-full bg-[#65558F0D] flex items-center justify-center hover:bg-[#65558F15] transition-all shrink-0\"\n >\n <Icon icon=\"lucide:arrow-right\" className=\"w-4 h-4 text-[#65558F]\" />\n </button>\n </div>\n\n {/* Right: price + Reserve — mirrors frontend's PackageStickyHeader\n * right section. Hidden on small screens because it would crowd the\n * day tabs out. */}\n {lowestPrice > 0 && (\n <div className=\"hidden md:flex items-center gap-3 shrink-0 pl-2\">\n <div className=\"flex flex-col items-end leading-tight\">\n <span className=\"text-[11px] text-secondary-normal-hover whitespace-nowrap\">\n 1x Adult Price\n </span>\n <span className=\"text-base font-semibold text-primary-normal whitespace-nowrap\">\n {formatCurrency(lowestPrice, currency)}\n </span>\n </div>\n <button\n type=\"button\"\n onClick={onReserveClick}\n disabled={!onReserveClick}\n className=\"bg-primary-normal text-white rounded-lg px-4 py-2 font-medium text-sm hover:bg-primary-normal-hover transition-colors whitespace-nowrap disabled:opacity-60 disabled:cursor-not-allowed\"\n >\n Reserve Now\n </button>\n </div>\n )}\n </div>\n </div>\n\n <div className=\"w-full\">\n <div className=\"grid grid-cols-1 lg:grid-cols-5 gap-6 lg:gap-10 w-full h-full\">\n {/* Left: itinerary day card (3 cols on lg) */}\n <div className=\"col-span-1 lg:col-span-3 flex flex-col gap-7\">\n <div ref={detailCardRef} className=\"self-stretch rounded-2xl bg-white border border-[#E0E4E8] p-4 sm:p-5 sm:px-7 shadow-sm gap-4 flex flex-col scroll-mt-[130px]\">\n <div className=\"self-stretch flex items-start flex-col md:flex-row md:justify-between gap-3 md:gap-5\">\n <h3 className=\"w-full md:w-[448px] font-medium tracking-[-0.04em] text-lg md:text-xl leading-snug\">\n {selectedItem.data.title}\n </h3>\n <div className=\"rounded-2xl bg-[#65558F1A] py-1 px-3 text-center text-[10px] md:text-xs text-[#65558F] font-medium shrink-0\">\n Duration: {selectedItem.data.duration}\n </div>\n </div>\n\n <div className=\"flex flex-col md:flex-row items-start md:items-center md:justify-between gap-6\">\n <div className=\"flex flex-col gap-4 flex-1 min-w-0\">\n <div className=\"flex items-start md:items-center flex-wrap gap-2 text-sm md:text-base text-secondary-normal-hover\">\n <div className=\"flex items-center gap-1.5 shrink-0\">\n <Icon icon=\"solar:bed-outline\" className=\"w-4 h-4 md:w-5 md:h-5\" />\n <span>{selectedItem.data.accommodation || \"Yes\"}</span>\n </div>\n <div className=\"w-1 h-1 rounded-full bg-[#B2BBC6]\" />\n <div className=\"flex items-center gap-1.5 shrink-0\">\n <Icon icon=\"solar:bus-outline\" className=\"w-4 h-4 md:w-5 md:h-5\" />\n <span className=\"max-w-[100px] md:max-w-none truncate\">\n {selectedItem.data.transportation || \"Car\"}\n </span>\n </div>\n {selectedItem.data.food && selectedItem.data.food !== \"N/A\" && (\n <>\n <div className=\"w-1 h-1 rounded-full bg-[#B2BBC6]\" />\n <div className=\"flex items-center gap-1.5 shrink-0\">\n <Icon icon=\"solar:cup-hot-outline\" className=\"w-4 h-4 md:w-5 md:h-5\" />\n <span className=\"max-w-[100px] md:max-w-none truncate\">\n {selectedItem.data.food}\n </span>\n </div>\n </>\n )}\n </div>\n <DifficultyProgressBar level={selectedItem.data.difficulty} />\n </div>\n </div>\n\n <div className=\"flex flex-col gap-4 md:gap-6 mt-2\">\n {selectedItem.data.locationsData.length > 0 && (\n <div className=\"flex flex-col gap-3\">\n <h4 className=\"text-primary-normal font-medium tracking-[-0.04em] text-lg\">\n Stops in a Day\n </h4>\n <div className=\"flex flex-col\">\n {selectedItem.data.locationsData.map((stop, idx, arr) => {\n const total = arr.length;\n const label =\n idx === 0 ? \"Start\" : idx === total - 1 ? \"End\" : `Stop ${idx}`;\n const stopStyles = getStopStyles(label);\n return (\n <div key={idx} className=\"flex gap-4\">\n <div className=\"flex flex-col items-start min-w-[50px] pt-1 shrink-0\">\n <span className={`text-sm font-medium ${stopStyles.labelClass}`}>\n {label}\n </span>\n </div>\n <div className=\"relative flex flex-col items-center shrink-0\">\n <div className={`w-4 h-4 rounded-full border-2 z-10 ${stopStyles.dotClass}`} />\n {idx !== total - 1 && (\n <div className={`absolute top-4 left-1/2 -ml-[1px] w-0.5 h-full z-0 ${stopStyles.lineClass}`} />\n )}\n </div>\n <div className=\"text-base text-secondary-normal-hover pt-px pb-6 min-w-0 flex-1\">\n {stop.displayName}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n )}\n\n <div className=\"flex flex-col gap-3\">\n <h4 className=\"text-primary-normal font-medium tracking-[-0.04em] text-lg\">\n Description\n </h4>\n <div className=\"relative\">\n <div\n className={`text-base text-secondary-normal-hover leading-relaxed ${\n !descriptionExpanded ? \"line-clamp-3 md:line-clamp-none\" : \"\"\n }`}\n dangerouslySetInnerHTML={{\n __html: (selectedItem.data.content || \"\").replace(/&nbsp;/g, \" \"),\n }}\n />\n {(selectedItem.data.content || \"\").length > 150 && (\n <button\n type=\"button\"\n onClick={() => setDescriptionExpanded((v) => !v)}\n className=\"text-secondary text-sm font-medium mt-2 hover:underline md:hidden\"\n >\n {descriptionExpanded ? \"See less\" : \"See more\"}\n </button>\n )}\n </div>\n </div>\n\n {selectedItem.data.activities?.length > 0 && (\n <div className=\"flex flex-wrap gap-4 mt-2\">\n {selectedItem.data.activities.map((activity: any, i: number) => (\n <div\n key={i}\n className=\"bg-[#F0EEF4CC] rounded-2xl py-1 px-3 text-xs text-[#65558F] font-medium\"\n >\n {activity.activityName}\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n\n {/* Right: per-day map (2 cols on lg, hidden on mobile to match frontend) */}\n <div className=\"col-span-1 lg:col-span-2 flex-shrink-0 rounded-lg lg:flex items-center justify-center min-h-[500px] hidden relative z-0\">\n <PackageMap\n locations={selectedItem.data.locationsData}\n dayNumber={selectedDay}\n routes={routesByDay.get(selectedDay) ?? []}\n />\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default Itinerary;\n","import type { ThingItem } from \"./_legacy-types\";\n\nexport type ChecklistGroup = {\n category: string;\n items: string[];\n};\n\nexport const normalizeChecklist = (\n data: ThingItem[] | Record<string, string[]> | unknown[] | null | undefined,\n): ChecklistGroup[] => {\n if (!data) return [];\n\n if (Array.isArray(data)) {\n return (data as ThingItem[])\n .map((group) => ({\n category: typeof group?.category === \"string\" ? group.category.trim() : \"\",\n items: Array.isArray(group?.items)\n ? group.items.filter(\n (item): item is string => typeof item === \"string\" && item.trim() !== \"\",\n )\n : [],\n }))\n .filter((group) => group.category !== \"\" && group.items.length > 0);\n }\n\n return Object.entries(data as Record<string, string[]>)\n .map(([category, items]) => ({\n category: category.trim(),\n items: Array.isArray(items)\n ? items.filter(\n (item): item is string => typeof item === \"string\" && item.trim() !== \"\",\n )\n : [],\n }))\n .filter((group) => group.category !== \"\" && group.items.length > 0);\n};\n\nexport const getChecklistPreviewCount = (isMobile: boolean) => (isMobile ? 1 : 2);\n","import { Icon } from \"@iconify/react\";\nimport React, { useEffect, useState } from \"react\";\nimport {\n ChecklistGroup,\n getChecklistPreviewCount,\n normalizeChecklist,\n} from \"./_checklistUtils\";\nimport type { ThingItem } from \"./_legacy-types\";\n\ninterface PackageExcludedAndToPackProps {\n thingsExcluded: ThingItem[] | Record<string, string[]> | unknown[];\n thingsToPack: ThingItem[] | Record<string, string[]> | unknown[];\n}\n\nconst iconMapping: Record<string, string> = {\n clothing: \"mdi:tshirt-crew-outline\",\n clothes: \"mdi:tshirt-crew-outline\",\n footwear: \"mdi:shoe-sneaker\",\n shoes: \"mdi:shoe-sneaker\",\n \"toiletries and personal items\": \"lucide:spray-can\",\n \"gadgets and extras\": \"lucide:smartphone\",\n \"optional but useful\": \"lucide:badge-help\",\n \"what not to carry\": \"material-symbols:do-not-disturb-on-outline-rounded\",\n general: \"material-symbols:check-circle-outline-rounded\",\n};\n\nconst getIconForCategory = (category: string) => {\n const normalizedCategory = category.trim().toLowerCase();\n return iconMapping[normalizedCategory] || \"material-symbols:check-circle-outline-rounded\";\n};\n\nconst getDisplayCategory = (category: string) => {\n const normalizedCategory = category.trim().toLowerCase();\n if (normalizedCategory === \"clothing\" || normalizedCategory === \"clothes\") {\n return \"Clothing and Backpack\";\n }\n return category;\n};\n\nconst PackageExcludedAndToPack: React.FC<PackageExcludedAndToPackProps> = ({\n thingsExcluded,\n thingsToPack,\n}) => {\n const excludedGroups = normalizeChecklist(thingsExcluded as ThingItem[]);\n const toPackGroups = normalizeChecklist(thingsToPack as ThingItem[]);\n const [isMobile, setIsMobile] = useState(false);\n const [expandedGroups, setExpandedGroups] = useState<Record<string, boolean>>({});\n\n const hasExcluded = excludedGroups.length > 0;\n const hasToPack = toPackGroups.length > 0;\n\n useEffect(() => {\n const checkScreenSize = () => setIsMobile(window.innerWidth < 768);\n checkScreenSize();\n window.addEventListener(\"resize\", checkScreenSize);\n return () => window.removeEventListener(\"resize\", checkScreenSize);\n }, []);\n\n if (!hasExcluded && !hasToPack) return null;\n\n const toggleGroup = (groupKey: string) =>\n setExpandedGroups((current) => ({ ...current, [groupKey]: !current[groupKey] }));\n\n const previewCount = getChecklistPreviewCount(isMobile);\n\n const renderGroups = (data: ChecklistGroup[], sectionKey: string) => (\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-x-4 md:gap-x-6 lg:gap-x-12 gap-y-4 md:gap-y-6 lg:gap-y-10 mt-2 md:mt-3 lg:mt-4\">\n {data.map((group, groupIndex) => (\n <div\n key={`${group.category}-${groupIndex}`}\n className=\"flex flex-col gap-2 md:gap-2.5 lg:gap-3\"\n >\n <div className=\"flex items-center gap-2 md:gap-2.5 lg:gap-3\">\n <div className=\"p-2 rounded-lg text-primary-normal\">\n <Icon icon={getIconForCategory(group.category)} className=\"w-6 h-6\" />\n </div>\n <h3 className=\"text-primary-normal text-lg font-semibold tracking-tight\">\n {getDisplayCategory(group.category)}\n </h3>\n </div>\n <ul className=\"flex flex-col gap-1.5 md:gap-2 pl-11\">\n {group.items\n .slice(\n 0,\n !expandedGroups[`${sectionKey}-${group.category}-${groupIndex}`]\n ? previewCount\n : group.items.length,\n )\n .map((item, index) => (\n <li\n key={`${group.category}-${index}`}\n className=\"flex items-start gap-2 text-secondary-normal-hover text-base leading-relaxed relative\"\n >\n <span className=\"absolute -left-4 top-2.5 w-1 h-1 bg-secondary-normal-hover rounded-full\"></span>\n {item}\n </li>\n ))}\n {group.items.length > previewCount && (\n <li>\n <button\n type=\"button\"\n onClick={() =>\n toggleGroup(`${sectionKey}-${group.category}-${groupIndex}`)\n }\n aria-expanded={Boolean(\n expandedGroups[`${sectionKey}-${group.category}-${groupIndex}`],\n )}\n className=\"text-secondary text-sm font-medium hover:underline\"\n >\n {expandedGroups[`${sectionKey}-${group.category}-${groupIndex}`]\n ? \"See less\"\n : \"See more\"}\n </button>\n </li>\n )}\n </ul>\n </div>\n ))}\n </div>\n );\n\n return (\n <div className=\"w-full py-2\">\n {hasExcluded && (\n <div className=\"flex flex-col gap-3 md:gap-3 lg:gap-4\">\n <h2 className=\"text-primary-normal text-xl md:text-2xl font-medium tracking-[-0.04em]\">\n Things Excluded\n </h2>\n {renderGroups(excludedGroups, \"excluded\")}\n </div>\n )}\n {hasToPack && (\n <div className=\"flex flex-col gap-3 md:gap-3 lg:gap-4 mt-6 md:mt-8 lg:mt-10\">\n <h2 className=\"text-primary-normal text-xl md:text-2xl font-medium tracking-[-0.04em]\">\n Things To Pack\n </h2>\n {renderGroups(toPackGroups, \"to-pack\")}\n </div>\n )}\n </div>\n );\n};\n\nexport default PackageExcludedAndToPack;\n","import { Icon } from \"@iconify/react\";\nimport React, { useEffect, useState } from \"react\";\nimport {\n getChecklistPreviewCount,\n normalizeChecklist,\n} from \"./_checklistUtils\";\nimport type { ThingItem } from \"./_legacy-types\";\n\ninterface PackageIncludedProps {\n thingsToDo: ThingItem[] | unknown[];\n}\n\nconst iconMapping: Record<string, string> = {\n \"Support Team\": \"lucide:headset\",\n Permits: \"lucide:file-text\",\n \"Pickup and Drop Service\": \"lucide:plane\",\n \"Airport Pickup & Drop Service\": \"lucide:plane\",\n \"Pickup and Drop\": \"lucide:plane\",\n \"Travel Insurance\": \"lucide:shield-check\",\n Accommodation: \"lucide:hotel\",\n Transport: \"lucide:bus\",\n Food: \"lucide:utensils-crossed\",\n \"Additional Perks\": \"lucide:plus-circle\",\n \"First Aid Services\": \"material-symbols:medical-services-outline\",\n};\n\nconst PackageIncluded: React.FC<PackageIncludedProps> = ({ thingsToDo }) => {\n const [isMobile, setIsMobile] = useState(false);\n const [expandedGroups, setExpandedGroups] = useState<Record<string, boolean>>({});\n\n const normalizedThingsToDo = normalizeChecklist(thingsToDo as ThingItem[]);\n\n useEffect(() => {\n const checkScreenSize = () => setIsMobile(window.innerWidth < 768);\n checkScreenSize();\n window.addEventListener(\"resize\", checkScreenSize);\n return () => window.removeEventListener(\"resize\", checkScreenSize);\n }, []);\n\n if (normalizedThingsToDo.length === 0) return null;\n\n const toggleGroup = (groupKey: string) =>\n setExpandedGroups((current) => ({ ...current, [groupKey]: !current[groupKey] }));\n\n const previewCount = getChecklistPreviewCount(isMobile);\n\n return (\n <div className=\"w-full py-2\">\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-x-4 md:gap-x-6 lg:gap-x-12 gap-y-4 md:gap-y-6 lg:gap-y-10\">\n {normalizedThingsToDo.map((category, index) => (\n <div key={index} className=\"flex flex-col gap-2 md:gap-2.5 lg:gap-3\">\n <div className=\"flex items-center gap-2 md:gap-2.5 lg:gap-3\">\n <div className=\"p-2 rounded-lg text-primary-normal\">\n <Icon\n icon={\n iconMapping[category.category] ||\n \"material-symbols:check-circle-outline-rounded\"\n }\n className=\"w-6 h-6\"\n />\n </div>\n <h3 className=\"text-primary-normal text-lg font-semibold tracking-tight\">\n {category.category}\n </h3>\n </div>\n <ul className=\"flex flex-col gap-1.5 md:gap-2 pl-11\">\n {category.items\n .slice(\n 0,\n !expandedGroups[`${category.category}-${index}`]\n ? previewCount\n : category.items.length,\n )\n .map((item, itemIndex) => (\n <li\n key={itemIndex}\n className=\"flex items-start gap-2 text-secondary-normal-hover text-base leading-relaxed relative\"\n >\n <span className=\"absolute -left-4 top-2.5 w-1 h-1 bg-secondary-normal-hover rounded-full\"></span>\n {item}\n </li>\n ))}\n {category.items.length > previewCount && (\n <li>\n <button\n type=\"button\"\n onClick={() => toggleGroup(`${category.category}-${index}`)}\n aria-expanded={Boolean(expandedGroups[`${category.category}-${index}`])}\n className=\"text-secondary text-sm font-medium hover:underline\"\n >\n {expandedGroups[`${category.category}-${index}`]\n ? \"See less\"\n : \"See more\"}\n </button>\n </li>\n )}\n </ul>\n </div>\n ))}\n </div>\n </div>\n );\n};\n\nexport default PackageIncluded;\n","import { Icon } from \"@iconify/react\";\nimport React, { useState } from \"react\";\nimport type { TopData } from \"./_legacy-types\";\n\ninterface PackageOverviewProps {\n description: string;\n isMobile: boolean;\n topData: TopData;\n}\n\nconst PackageOverview: React.FC<PackageOverviewProps> = ({\n description,\n isMobile,\n topData,\n}) => {\n const [expanded, setExpanded] = useState(false);\n const isLong = (description || \"\").length > 400;\n\n return (\n <div className=\"w-full pb-4\">\n <h2 className=\"text-primary-normal font-medium text-xl md:text-2xl tracking-[-0.04em]\">\n Overview\n </h2>\n\n <div className=\"mt-2 text-secondary-normal-hover lg:text-base text-sm font-light leading-relaxed\">\n <div\n className={`w-full break-words whitespace-pre-wrap overflow-hidden transition-[max-height] duration-300\n [&_ul]:list-disc [&_ul]:pl-5 [&_li]:mb-1\n [&_ol]:list-decimal [&_ol]:pl-5 [&_ol]:mb-1\n [&_p]:mb-2 [&_img]:max-w-full [&_img]:h-auto\n [&_table]:w-full [&_table]:overflow-x-auto\n [&_strong]:font-bold [&_underline]:underline\n ${isMobile && !expanded ? \"max-h-40\" : \"max-h-none\"}`}\n dangerouslySetInnerHTML={{\n __html:\n (description || \"\").replace(/&nbsp;/g, \" \") || \"No description available.\",\n }}\n />\n {isLong && (\n <button\n type=\"button\"\n onClick={() => setExpanded((p) => !p)}\n aria-expanded={expanded}\n className=\"text-secondary text-sm font-medium mt-1 hover:underline md:hidden\"\n >\n {expanded ? \"See less\" : \"See more\"}\n </button>\n )}\n </div>\n\n <div className=\"mt-5 mb-4 pt-5 border-t border-gray-100\">\n <h2 className=\"text-[#65558F] font-medium text-xl tracking-[-0.04em] mb-3\">\n Key Facts\n </h2>\n <div className=\"flex flex-col gap-2\">\n <KeyFact\n icon=\"solar:suitcase-tag-outline\"\n label=\"Trip Style\"\n value={topData?.PackageType || \"Sightseeing\"}\n />\n <KeyFact\n icon=\"icon-park-outline:level\"\n label=\"Difficulty\"\n value={topData?.Difficulty || \"Easy\"}\n />\n <KeyFact\n icon=\"iconoir:calendar\"\n label=\"Number Of Days\"\n value={\n topData?.TotalDays\n ? `${topData.TotalDays} Days & ${Math.max(0, topData.TotalDays - 1)} Nights`\n : \"Duration\"\n }\n />\n <KeyFact\n icon=\"iconoir:packages\"\n label=\"Package Category\"\n value={topData?.PackageCategory || \"Luxury\"}\n />\n </div>\n </div>\n </div>\n );\n};\n\nconst KeyFact = ({\n icon,\n label,\n value,\n}: {\n icon: string;\n label: string;\n value: string;\n}) => (\n <div className=\"flex items-center gap-4\">\n <Icon icon={icon} className=\"w-6 h-6 text-[#47586E] flex-shrink-0\" />\n <div className=\"flex-1 grid grid-cols-[110px_1fr] sm:grid-cols-[200px_1fr] gap-4 items-center\">\n <span className=\"text-sm sm:text-base text-[#47586E]\">{label}</span>\n <span className=\"text-base text-[#65558F] font-medium\">{value}</span>\n </div>\n </div>\n);\n\nexport default PackageOverview;\n","import React, { useEffect, useRef, useState } from \"react\";\nimport BookingCardLite from \"./BookingCardLite\";\nimport Itinerary from \"./Itinerary\";\nimport PackageExcludedAndToPack from \"./PackageExcludedAndToPack\";\nimport PackageIncluded from \"./PackageIncluded\";\nimport PackageOverview from \"./PackageOverview\";\nimport type { DescriptionData, TopData } from \"./_legacy-types\";\nimport type { PackageRoutesDay, TravoriesPackage } from \"../../api/types\";\n\ninterface DescriptionSectionProps {\n DescriptionData: DescriptionData;\n topData: TopData;\n currency?: string;\n onReserve?: (pkg: TravoriesPackage) => void;\n pkg: TravoriesPackage;\n routes?: PackageRoutesDay[];\n}\n\nconst DescriptionSection: React.FC<DescriptionSectionProps> = ({\n DescriptionData,\n topData,\n currency,\n onReserve,\n pkg,\n routes,\n}) => {\n const [isMobile, setIsMobile] = useState(false);\n const bookingRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const checkScreenSize = () => setIsMobile(window.innerWidth < 768);\n checkScreenSize();\n window.addEventListener(\"resize\", checkScreenSize);\n return () => window.removeEventListener(\"resize\", checkScreenSize);\n }, []);\n\n // Scrolls the page so the booking sidebar is visible. Called from the\n // Itinerary's sticky-bar \"Reserve Now\" button. Offset accounts for the\n // sticky day-tab strip (≈76px) so the booking card lands just below it.\n const scrollToBooking = () => {\n if (!bookingRef.current) return;\n const rect = bookingRef.current.getBoundingClientRect();\n const offset = 90;\n window.scrollTo({\n top: window.scrollY + rect.top - offset,\n behavior: \"smooth\",\n });\n };\n\n return (\n <div className=\"w-full flex flex-col items-center\">\n <div className=\"w-full relative border-gray-200 flex flex-col gap-8\">\n <div className=\"grid grid-cols-1 lg:grid-cols-12 gap-6 w-full justify-between\">\n <div className=\"lg:col-span-7 w-full flex flex-col gap-3 border-b-2 pb-6\">\n <PackageOverview\n description={DescriptionData.Description}\n isMobile={isMobile}\n topData={topData}\n />\n </div>\n\n <div\n ref={bookingRef}\n className=\"lg:col-span-5 flex justify-start items-end flex-col gap-2 scroll-mt-[100px]\"\n >\n <p className=\"md:hidden text-primary-normal text-start w-full flex justify-start text-xl md:text-2xl font-medium tracking-[-0.04em]\">\n Book Now\n </p>\n <div className=\"w-full\">\n <BookingCardLite\n DescriptionData={DescriptionData}\n currency={currency}\n onReserve={onReserve ? () => onReserve(pkg) : undefined}\n />\n </div>\n </div>\n </div>\n\n <div className=\"relative pb-7 border-b-2 border-gray-200\">\n <h2 className=\"text-primary-normal text-xl md:text-2xl font-medium tracking-[-0.04em]\">\n Itinerary\n </h2>\n <Itinerary\n Description={DescriptionData}\n routes={routes}\n currency={currency}\n onReserveClick={scrollToBooking}\n />\n </div>\n\n {DescriptionData?.thingsToDo && (DescriptionData.thingsToDo as any[]).length > 0 && (\n <div className=\"relative pt-5 pb-7 border-b-2 border-gray-200\">\n <h2 className=\"text-primary-normal text-xl md:text-2xl font-medium tracking-[-0.04em] mb-6\">\n Things Included\n </h2>\n <PackageIncluded thingsToDo={DescriptionData.thingsToDo} />\n </div>\n )}\n\n {((DescriptionData?.thingsExcluded && (DescriptionData.thingsExcluded as any[]).length > 0) ||\n (DescriptionData?.thingsToPack && (DescriptionData.thingsToPack as any[]).length > 0)) && (\n <div className=\"relative pb-7\">\n <PackageExcludedAndToPack\n thingsExcluded={DescriptionData?.thingsExcluded || []}\n thingsToPack={DescriptionData?.thingsToPack || []}\n />\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default DescriptionSection;\n","import React from \"react\";\n\ninterface HostAboutProps {\n hostName: string;\n description?: string;\n className?: string;\n}\n\nconst HostAbout: React.FC<HostAboutProps> = ({\n hostName,\n description,\n className = \"\",\n}) => (\n <div className={`flex flex-col gap-4 ${className}`}>\n <div className=\"flex flex-col gap-1\">\n <h3 className=\"text-xl md:text-2xl font-medium tracking-[-0.04em] text-primary-normal\">\n About {hostName}\n </h3>\n </div>\n <p className=\"text-secondary-normal-hover text-base md:text-lg leading-relaxed line-clamp-4\">\n {description ||\n \"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Praesentium, deleniti! Obcaecati atque, ex itaque voluptatem vel perferendis.\"}\n </p>\n </div>\n);\n\nexport default HostAbout;\n","import React from \"react\";\nimport type { PackageHost } from \"../../api/types\";\nimport { pickImageUrl } from \"../../utils/format\";\n\ninterface HostCardProps {\n hostData: PackageHost;\n className?: string;\n}\n\nconst getUserInitials = (name?: string) => name?.charAt(0)?.toUpperCase() || \"H\";\n\nconst getMonthsHosting = (createdDate?: string) => {\n if (!createdDate) return 1;\n const now = new Date();\n const created = new Date(createdDate);\n const monthsDiff = Math.floor(\n (now.getTime() - created.getTime()) / (1000 * 60 * 60 * 24 * 30),\n );\n return Math.max(1, monthsDiff);\n};\n\nconst HostCard: React.FC<HostCardProps> = ({ hostData, className = \"\" }) => {\n const logoUrl = pickImageUrl(hostData?.logo);\n return (\n <div\n className={`w-full sm:min-w-[320px] rounded-2xl border border-[#E0E4E8] bg-white flex flex-col gap-6 p-6 lg:p-8 shadow-md ${className}`}\n >\n <div className=\"flex items-center gap-4\">\n <div className=\"relative rounded-full h-20 w-20 bg-gray-200 flex items-center justify-center text-xl text-primary-normal overflow-hidden\">\n {logoUrl ? (\n <img\n src={logoUrl}\n alt={`${hostData?.username}'s logo`}\n className=\"object-cover w-full h-full\"\n />\n ) : (\n <span>{getUserInitials(hostData?.username)}</span>\n )}\n </div>\n <span className=\"text-[18px] tracking-[-0.02em] font-medium text-primary-normal whitespace-normal break-words\">\n {hostData?.username}\n </span>\n </div>\n\n <div className=\"flex justify-between text-center mt-2\">\n <div>\n <p className=\"text-base md:text-lg text-primary-normal tracking-[-0.02em] font-medium\">\n {hostData?.review ?? 0}\n </p>\n <p className=\"text-sm md:text-base text-secondary-normal-hover tracking-[-0.02em]\">\n Reviews\n </p>\n </div>\n <div>\n <p className=\"text-base md:text-lg text-primary-normal tracking-[-0.02em] font-medium\">\n {(hostData?.rating ?? 0).toFixed(2)}\n </p>\n <p className=\"text-sm md:text-base text-secondary-normal-hover tracking-[-0.02em]\">\n Rating\n </p>\n </div>\n <div>\n <p className=\"text-base md:text-lg text-primary-normal tracking-[-0.02em] font-medium\">\n {getMonthsHosting(hostData?.agencyCreatedDate)} mth\n </p>\n <p className=\"text-sm md:text-base text-secondary-normal-hover tracking-[-0.02em]\">\n Hosting\n </p>\n </div>\n </div>\n </div>\n );\n};\n\nexport default HostCard;\n","import { Icon } from \"@iconify/react\";\nimport React, { useState } from \"react\";\nimport type { MediaItem } from \"./_legacy-types\";\n\ninterface GallerySectionProps {\n media: MediaItem[];\n packageTitle: string;\n}\n\nconst GalleryImg = ({\n src,\n alt,\n onClick,\n className,\n}: {\n src: string | undefined;\n alt: string;\n onClick?: () => void;\n className?: string;\n}) =>\n src ? (\n <img\n src={src}\n alt={alt}\n onClick={onClick}\n className={className}\n loading=\"lazy\"\n />\n ) : (\n <div\n className={`${className ?? \"\"} bg-[#F0EEF4] flex items-center justify-center text-primary-normal/40 text-sm`}\n >\n No image\n </div>\n );\n\n/** Cell wrapper that pins the image absolutely to the cell, matching Next.js\n * Image `fill` behavior. `overflow-hidden` + `rounded-lg` on the wrapper\n * guarantees the image stays inside the rounded rectangle even on subpixel\n * rendering. `h-full` ensures the cell takes the full grid-row height. */\nconst GalleryCell = ({\n src,\n alt,\n onClick,\n colSpan = \"\",\n}: {\n src: string | undefined;\n alt: string;\n onClick?: () => void;\n colSpan?: string;\n}) => (\n <div\n onClick={onClick}\n className={`relative h-full w-full overflow-hidden rounded-lg ${colSpan}`.trim()}\n >\n <GalleryImg\n src={src}\n alt={alt}\n className=\"absolute inset-0 w-full h-full object-cover cursor-pointer transition duration-200\"\n />\n </div>\n);\n\nconst GallerySection: React.FC<GallerySectionProps> = ({ media, packageTitle }) => {\n const [overlayIndex, setOverlayIndex] = useState<number | null>(null);\n const images = media.map((m) => m.url);\n const imageAlts = media.map((m) => m.alt || packageTitle);\n\n const open = (i: number) => setOverlayIndex(i);\n const close = () => setOverlayIndex(null);\n\n return (\n <>\n {/* Desktop / tablet: 5-image gallery grid.\n * - `overflow-hidden` on the outer container clips any rounding artifact.\n * - Every cell uses `rounded-lg overflow-hidden` and has the image as\n * `position:absolute inset-0` so it always fills the cell precisely\n * (matches Next.js Image `fill` behavior the frontend relies on). */}\n <div className=\"md:grid lg:grid md:grid-cols-5 grid-cols-1 gap-2 mt-4 h-[546px] cursor-pointer relative hidden overflow-hidden\">\n <div\n onClick={() => open(0)}\n className=\"px-2 py-1 bg-white cursor-pointer flex justify-center items-center text-primary-normal absolute bottom-2 right-2 rounded-lg text-sm md:text-base lg:text-lg z-10\"\n >\n <Icon\n icon=\"material-symbols-light:space-dashboard-outline\"\n className=\"text-2xl text-gray-500\"\n />{\" \"}\n See all photos\n </div>\n\n <div className=\"grid grid-cols-12 col-span-3 gap-4 h-[546px]\">\n <GalleryCell src={images[0]} alt={imageAlts[0] || packageTitle} onClick={() => open(0)} colSpan=\"col-span-6\" />\n <GalleryCell src={images[1]} alt={imageAlts[1] || packageTitle} onClick={() => open(1)} colSpan=\"col-span-6\" />\n </div>\n\n <div className=\"col-span-2 h-[546px] lg:grid md:grid hidden grid-rows-2 gap-2\">\n <GalleryCell src={images[2]} alt={imageAlts[2] || packageTitle} onClick={() => open(2)} />\n\n <div className=\"hidden lg:grid md:grid grid-cols-2 gap-2 h-full\">\n <GalleryCell src={images[3]} alt={imageAlts[3] || packageTitle} onClick={() => open(3)} />\n <div className=\"relative hidden lg:grid md:grid grid-rows-2 gap-2 h-full\">\n <GalleryCell src={images[4]} alt={imageAlts[4] || packageTitle} onClick={() => open(4)} />\n <GalleryCell src={images[5]} alt={imageAlts[5] || packageTitle} onClick={() => open(5)} />\n </div>\n </div>\n </div>\n </div>\n\n {/* Mobile */}\n <div className=\"grid cursor-pointer gap-3 pt-2 md:pt-5 lg:hidden md:hidden\">\n <div className=\"col-span-2 relative h-[320px] md:h-[350px]\">\n <GalleryImg\n src={images[0]}\n alt={imageAlts[0] || packageTitle}\n className=\"w-full h-full rounded-lg object-cover\"\n onClick={() => open(0)}\n />\n <button\n className=\"absolute bottom-2 right-2 bg-white text-primary-normal px-3 py-2 rounded-lg z-10 text-sm md:text-base font-medium\"\n onClick={() => open(0)}\n >\n See All Photos\n </button>\n </div>\n </div>\n\n {overlayIndex !== null && (\n <LightboxOverlay\n images={images}\n alts={imageAlts}\n startIndex={overlayIndex}\n onClose={close}\n />\n )}\n </>\n );\n};\n\nfunction LightboxOverlay({\n images,\n alts,\n startIndex,\n onClose,\n}: {\n images: string[];\n alts: string[];\n startIndex: number;\n onClose: () => void;\n}) {\n const [i, setI] = useState(startIndex);\n const prev = () => setI((v) => (v - 1 + images.length) % images.length);\n const next = () => setI((v) => (v + 1) % images.length);\n return (\n <div\n className=\"fixed inset-0 z-[1000] bg-black/90 flex items-center justify-center\"\n onClick={onClose}\n >\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onClose();\n }}\n className=\"absolute top-4 right-4 text-white p-2 rounded-full hover:bg-white/10\"\n aria-label=\"Close gallery\"\n >\n <Icon icon=\"lucide:x\" className=\"w-6 h-6\" />\n </button>\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n prev();\n }}\n className=\"absolute left-4 text-white p-3 rounded-full hover:bg-white/10\"\n aria-label=\"Previous\"\n >\n <Icon icon=\"lucide:chevron-left\" className=\"w-7 h-7\" />\n </button>\n <img\n src={images[i]}\n alt={alts[i] || \"\"}\n className=\"max-w-[92vw] max-h-[88vh] object-contain rounded-lg\"\n onClick={(e) => e.stopPropagation()}\n />\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n next();\n }}\n className=\"absolute right-4 text-white p-3 rounded-full hover:bg-white/10\"\n aria-label=\"Next\"\n >\n <Icon icon=\"lucide:chevron-right\" className=\"w-7 h-7\" />\n </button>\n <div className=\"absolute bottom-4 left-1/2 -translate-x-1/2 text-white text-sm bg-black/40 px-3 py-1 rounded-full\">\n {i + 1} / {images.length}\n </div>\n </div>\n );\n}\n\nexport default GallerySection;\n","import { Icon } from \"@iconify/react\";\nimport React from \"react\";\nimport GallerySection from \"./GallerySection\";\nimport type { TopData } from \"./_legacy-types\";\n\nconst renderStars = (rating: number) => {\n const fullStars = Math.floor(rating);\n const hasHalfStar = rating % 1 >= 0.5;\n return (\n <div className=\"flex items-center\">\n {[1, 2, 3, 4, 5].map((star) => {\n let icon = \"mdi-light:star\";\n if (star <= fullStars) {\n icon = \"material-symbols:star\";\n } else if (star === fullStars + 1 && hasHalfStar) {\n icon = \"material-symbols:star-half\";\n }\n return <Icon key={star} icon={icon} className=\"w-4 h-4 text-secondary\" />;\n })}\n </div>\n );\n};\n\nconst TopSection = ({ topData }: { topData: TopData }) => {\n const galleryMedia = topData.AgencyPackageMedias.map((item) => ({\n url: item.url,\n previewUrl: item.previewUrl,\n alt: item.alt || topData.PackageTitle,\n }));\n\n return (\n <div className=\"lg:px-4 px-0 py-2 md:py-4 lg:py-6\">\n {/* Breadcrumb */}\n <nav aria-label=\"Breadcrumb\" className=\"flex items-center gap-2 text-sm\">\n <a href=\"/\" className=\"text-primary-normal hover:underline\">\n Home\n </a>\n <span aria-hidden className=\"text-primary-normal\">›</span>\n <span className=\"text-primary-normal underline truncate w-[70vw] md:w-full\">\n {topData.PackageTitle}\n </span>\n </nav>\n\n <div className=\"w-full flex justify-between items-center mt-2 py-0 md:py-4\">\n <h1 className=\"text-xl md:text-2xl lg:text-3xl font-semibold tracking-[-0.04em] text-primary-normal leading-tight\">\n {topData.PackageTitle}\n </h1>\n </div>\n\n <div className=\"text-sm py-0 md:py-2\">\n {topData.Rating ? (\n <div className=\"flex items-center gap-2\">\n <p className=\"text-primary-normal font-medium\">{topData.Rating.toFixed(1)}</p>\n <div className=\"flex items-center gap-1\">\n {renderStars(topData.Rating)}\n <p className=\"text-secondary-normal-hover underline text-xs\">\n {topData.ReviewCount ? `(${topData.ReviewCount})` : null}\n </p>\n </div>\n </div>\n ) : (\n <p className=\"text-secondary-normal-hover\">Not yet rated</p>\n )}\n </div>\n\n <GallerySection media={galleryMedia} packageTitle={topData.PackageTitle} />\n </div>\n );\n};\n\nexport default TopSection;\n","import type { PackageHost, TravoriesImage, TravoriesPackage } from \"../../api/types\";\nimport { pickImageUrl } from \"../../utils/format\";\nimport type { DescriptionData, MediaItem, ThingItem, TopData } from \"./_legacy-types\";\n\nconst mediaFromImage = (\n img: TravoriesImage | null,\n fallbackAlt: string,\n): MediaItem | null => {\n const u = pickImageUrl(img);\n if (!u) return null;\n return {\n url: u,\n previewUrl: img?.preview ?? \"\",\n alt: img?.alt || fallbackAlt,\n };\n};\n\nexport const buildGalleryMedia = (pkg: TravoriesPackage): MediaItem[] => {\n const list = (pkg.media ?? [])\n .map((m) => mediaFromImage(m, pkg.title))\n .filter((m): m is MediaItem => Boolean(m));\n if (list.length > 0) return list;\n const thumb = mediaFromImage(pkg.thumbnail, pkg.title);\n return thumb ? [thumb] : [];\n};\n\nexport const buildTopData = (\n pkg: TravoriesPackage,\n host: PackageHost | null,\n): TopData => ({\n id: pkg.id,\n slug: pkg.slug,\n PackageTitle: pkg.title,\n AgencyName: host?.username ?? \"\",\n AgencySlug: host?.slug ?? \"\",\n AgencyPackageMedias: buildGalleryMedia(pkg),\n Rating: pkg.rating ?? 0,\n ReviewCount: host?.review ?? 0,\n PackageType: pkg.packageType || \"N/A\",\n TotalDays: pkg.totalDays || 0,\n MaxAllowedPeople: pkg.maxAllowedPeople ?? 10,\n thingsToDo: pkg.thingsIncluded as unknown as ThingItem[],\n thingsExcluded: pkg.thingsExcluded as unknown as ThingItem[],\n thingsToPack: pkg.thingsToPack as unknown as ThingItem[],\n PackageCategory: pkg.packageCategory || \"Standard\",\n Difficulty: pkg.difficulty || \"Easy\",\n});\n\nexport const buildDescriptionData = (pkg: TravoriesPackage): DescriptionData => ({\n id: pkg.id,\n Description: pkg.description ?? \"\",\n Price: pkg.prices ?? [],\n Discounts: pkg.discounts ?? [],\n TotalDays: pkg.totalDays ?? 0,\n MaxAllowedPeople: pkg.maxAllowedPeople ?? 10,\n MinAllowedPeople: pkg.minAllowedPeople ?? 1,\n Days: (pkg.days ?? []).map((d) => ({\n id: d.id,\n dayNumber: d.dayNumber,\n description: d.description,\n activities: d.activities,\n locations: d.locations,\n travelDuration: d.travelDuration,\n difficulty: d.difficulty,\n foodService: d.foodService,\n transportation: d.transportation,\n accommodation: d.accommodation,\n })),\n thingsToDo: pkg.thingsIncluded as unknown as ThingItem[],\n thingsExcluded: pkg.thingsExcluded as unknown as ThingItem[],\n thingsToPack: pkg.thingsToPack as unknown as ThingItem[],\n});\n","import React from \"react\";\nimport type { TravoriesClient } from \"../../client/TravoriesClient\";\nimport { usePackageBundle } from \"../../hooks/usePackageBySlug\";\nimport type {\n PackageBundle,\n PackageHost,\n PackageRoutesDay,\n TravoriesPackage,\n} from \"../../api/types\";\nimport DescriptionSection from \"./DescriptionSection\";\nimport HostAbout from \"./HostAbout\";\nimport HostCard from \"./HostCard\";\nimport TopSection from \"./TopSection\";\nimport { buildDescriptionData, buildTopData } from \"./_projectToLegacy\";\n\nexport interface PackageDetailViewProps {\n /** Travories SDK client. Required when using `slug`. */\n client?: TravoriesClient;\n /** Public package slug. */\n slug?: string;\n /** Pre-fetched bundle. When provided, no fetch runs. Use for SSR. */\n initialBundle?: PackageBundle | null;\n /** Currency code for prices (default \"USD\"). */\n currency?: string;\n /** Called when the user hits Reserve. If omitted, the button shows a disabled state. */\n onReserve?: (pkg: TravoriesPackage) => void;\n /** Optional extra class on the root wrapper. */\n className?: string;\n /** Loading state override. */\n renderLoading?: () => React.ReactNode;\n /** Not-found state override. */\n renderNotFound?: () => React.ReactNode;\n}\n\nexport function PackageDetailView({\n client,\n slug,\n initialBundle,\n currency = \"USD\",\n onReserve,\n className,\n renderLoading,\n renderNotFound,\n}: PackageDetailViewProps) {\n if (!initialBundle && (!client || !slug)) {\n throw new Error(\n \"[PackageDetailView] Provide either `initialBundle` or both `client` and `slug`.\",\n );\n }\n\n const remote = usePackageBundle(client!, initialBundle ? null : slug);\n\n const bundle = initialBundle ?? remote.data;\n const loading = !initialBundle && remote.loading;\n const error = !initialBundle && remote.error;\n\n if (loading) {\n return (\n <div className={`tvr-package-detail ${className ?? \"\"}`.trim()}>\n <div className=\"mx-auto max-w-[1440px]\">\n {renderLoading ? renderLoading() : <DefaultLoading />}\n </div>\n </div>\n );\n }\n if (error) {\n return (\n <div className={`tvr-package-detail ${className ?? \"\"}`.trim()}>\n <div className=\"max-w-screen-xl mx-auto px-6 py-16 text-center text-red-600 text-sm\">\n Failed to load package: {error.message}\n </div>\n </div>\n );\n }\n if (!bundle?.pkg) {\n return (\n <div className={`tvr-package-detail ${className ?? \"\"}`.trim()}>\n {renderNotFound ? (\n renderNotFound()\n ) : (\n <div className=\"max-w-screen-xl mx-auto px-6 py-16 text-center text-secondary-normal-hover text-sm\">\n Package not found.\n </div>\n )}\n </div>\n );\n }\n\n return (\n <DetailContent\n pkg={bundle.pkg}\n host={bundle.host}\n routes={bundle.routes ?? []}\n currency={currency}\n onReserve={onReserve}\n className={className}\n />\n );\n}\n\nfunction DetailContent({\n pkg,\n host,\n routes,\n currency,\n onReserve,\n className,\n}: {\n pkg: TravoriesPackage;\n host: PackageHost | null;\n routes: PackageRoutesDay[];\n currency: string;\n onReserve?: (pkg: TravoriesPackage) => void;\n className?: string;\n}) {\n const topData = buildTopData(pkg, host);\n const descriptionData = buildDescriptionData(pkg);\n\n // IMPORTANT: tailwind.config.cjs uses `important: \".tvr-package-detail\"` to\n // scope SDK utilities. That scope is a *descendant* selector, so any layout\n // classes must live on a CHILD of the wrapper, not the wrapper itself.\n return (\n <div className={`tvr-package-detail ${className ?? \"\"}`.trim()}>\n <article className=\"mx-auto max-w-[1440px] flex flex-col gap-5 md:px-12 px-6 lg:py-12 mt-4\">\n <TopSection topData={topData} />\n\n <DescriptionSection\n DescriptionData={descriptionData}\n topData={topData}\n currency={currency}\n onReserve={onReserve}\n pkg={pkg}\n routes={routes}\n />\n\n {host && (\n <div className=\"py-6 sm:py-8 border-b-2 border-gray-200 flex flex-col gap-6\">\n <h2 className=\"text-primary-normal text-xl md:text-2xl font-medium tracking-[-0.04em]\">\n Host Details\n </h2>\n <div className=\"flex flex-col lg:flex-row gap-8 lg:gap-10 h-full items-start lg:items-center\">\n <div className=\"flex flex-col gap-6 sm:gap-8 w-full sm:w-[320px]\">\n <HostCard hostData={host} className=\"w-full\" />\n </div>\n <div className=\"w-full lg:w-4/5 h-full flex flex-col justify-center\">\n <HostAbout\n hostName={host.username}\n description={host.description}\n className=\"pr-0 lg:pr-10\"\n />\n </div>\n </div>\n </div>\n )}\n </article>\n </div>\n );\n}\n\nfunction DefaultLoading() {\n return (\n <div className=\"max-w-screen-xl mx-auto px-6 py-8 animate-pulse\">\n <div className=\"h-8 w-1/2 bg-gray-200 rounded mb-4\" />\n <div className=\"h-[546px] bg-gray-100 rounded-lg mb-6\" />\n <div className=\"grid grid-cols-1 lg:grid-cols-12 gap-6\">\n <div className=\"lg:col-span-7 space-y-3\">\n <div className=\"h-5 w-1/3 bg-gray-200 rounded\" />\n <div className=\"h-4 w-full bg-gray-100 rounded\" />\n <div className=\"h-4 w-5/6 bg-gray-100 rounded\" />\n <div className=\"h-4 w-4/6 bg-gray-100 rounded\" />\n </div>\n <div className=\"lg:col-span-5 h-64 bg-gray-100 rounded-2xl\" />\n </div>\n </div>\n );\n}\n"]}