@travelswitchhq/flight-search-react 1.0.4 → 1.0.6
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.
- package/dist/index.cjs +44 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.mjs +44 -10
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/Flight.tsx","../src/flight-search-widget.styles.ts"],"sourcesContent":["export { FlightSearchWidget } from \"./Flight\";\nexport type {\n FlightSearchWidgetProps,\n FlightSearchSegment,\n FlightSearchFormState,\n AirportModel,\n FlightSearchSsoUser,\n} from \"./Flight\";\n","\"use client\";\r\n\r\nimport { useState, useRef, useEffect, useMemo, useCallback, type Ref } from \"react\";\r\nimport { Calendar } from \"primereact/calendar\";\r\nimport { Accordion, AccordionTab } from \"primereact/accordion\";\r\nimport { AutoComplete } from \"primereact/autocomplete\";\r\nimport { PrimeReactProvider } from \"primereact/api\";\r\nimport { JSEncrypt } from \"jsencrypt\";\r\nimport { flightSearchWidgetStyles } from \"./flight-search-widget.styles\";\r\nimport \"./Flight.css\";\r\n/** Airport from search API - matches response: ac, an, cc, cn, ct, etc. */\r\nexport interface AirportModel {\r\n id?: string;\r\n /** Airport code e.g. \"DUB\" */\r\n ac?: string;\r\n /** Airport name e.g. \"Dublin Airport\" */\r\n an?: string;\r\n /** Country code e.g. \"IE\" */\r\n cc?: string;\r\n /** Country name e.g. \"Ireland\" */\r\n cn?: string;\r\n /** City e.g. \"Dublin\" */\r\n ct?: string;\r\n pr?: number;\r\n tp?: number;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface FlightSearchSsoUser {\r\n /** Mandatory: user email */\r\n email: string;\r\n /** Optional: first name */\r\n firstName?: string;\r\n /** Optional: last name */\r\n lastName?: string;\r\n /** Optional: country code / dialing code */\r\n cc?: string;\r\n /** Optional: phone number without country code */\r\n phone?: string;\r\n /** Optional: timestamp – if omitted, widget will inject current time */\r\n ts?: string;\r\n}\r\n\r\nexport type FlightSearchWidgetProps = {\r\n config?: {\r\n theme?: {\r\n primary?: string;\r\n secondary?: string;\r\n primaryLight?: string;\r\n };\r\n redirectionDomain?: string;\r\n fontName?: string;\r\n };\r\n ssoUser?: FlightSearchSsoUser;\r\n};\r\n/** Single segment in the flight search form (round-trip, one-way, or one leg of multi-city) */\r\nexport interface FlightSearchSegment {\r\n origin: string;\r\n destination: string;\r\n departureDate: Date | null;\r\n returnDate: Date | null;\r\n dateRange: (Date | null)[] | null;\r\n travelerClass: string;\r\n adultCount: number;\r\n childCount: number;\r\n infantCount: number;\r\n}\r\n\r\n/** Main form state: array of segments; works for round-trip, one-way, multi-city, custom-search */\r\nexport interface FlightSearchFormState {\r\n tripType: \"round-trip\" | \"one-way\" | \"multi-city\" | \"custom-search\";\r\n segments: FlightSearchSegment[];\r\n}\r\n\r\ninterface AdvancedOptions {\r\n isDirectFlights: boolean;\r\n isRefundable: boolean;\r\n isBaggage: boolean;\r\n preferredAirlineList: string[];\r\n isFlexiDate: boolean;\r\n isUmrah: boolean;\r\n}\r\n\r\ninterface ItineraryReq {\r\n departureCode: string;\r\n returnCode: string;\r\n departureDate: string;\r\n class: string;\r\n}\r\n\r\ntype DropdownType = \"origin\" | \"destination\";\r\n\r\ninterface PredictiveSearchState {\r\n fromAirport: AirportModel[];\r\n toAirport: AirportModel[];\r\n selectedFromIndex: number;\r\n selectedToIndex: number;\r\n}\r\n\r\ninterface AirlineOption {\r\n airline_code: string;\r\n airline_name: string;\r\n}\r\n\r\nconst normalizeDomainName = (domainName: string): string => {\r\n const trimmed = domainName.trim();\r\n if (!trimmed) return \"\";\r\n if (trimmed.startsWith(\"http://\") || trimmed.startsWith(\"https://\")) {\r\n try {\r\n return new URL(trimmed).hostname;\r\n } catch {\r\n return trimmed.replace(/^https?:\\/\\//, \"\").split(\"/\")[0] ?? \"\";\r\n }\r\n }\r\n return trimmed.split(\"/\")[0] ?? \"\";\r\n};\r\n\r\nconst buildEncryptedToken = (domainName: string): string | null => {\r\n const normalizedDomain = normalizeDomainName(domainName);\r\n if (!normalizedDomain) return null;\r\n const encryptor = new JSEncrypt();\r\n encryptor.setPublicKey(RSA_PUBLIC_KEY);\r\n const payload = `${normalizedDomain}~${new Date().getTime()}`;\r\n const encrypted = encryptor.encrypt(payload);\r\n return typeof encrypted === \"string\" ? encrypted : null;\r\n};\r\n\r\nconst STYLE_ELEMENT_ID = \"tfsw-flight-styles\";\r\nconst PRIMEICONS_LINK_ID = \"tfsw-primeicons\";\r\nconst RSA_PUBLIC_KEY = `-----BEGIN PUBLIC KEY-----\r\nMIICITANBgkqhkiG9w0BAQEFAAOCAg4AMIICCQKCAgB0rRSHGZK/FtK15IRfQxtl\r\ndN5ToPtfXGzTNBe1vGhow5xqp6BLubMKKPwCj3zOJiAm1Ip1VNqqYxWnaL8ZErBF\r\nrErtE0r7kn50QgGgJCpdrWJ4unhaoe1su207d9oY6D6OBH90v1aXA6ZjN7zTJmiq\r\nFJZOOTQE6t/XwNAOphq/B6Lcr1iQSQmSqaMozy4OQ4NvIzNTQn5tcs9qJBMsKFeU\r\ncSp8VK76JBNEqSuEHNmbV2d/IQ5XAqVUiAs34kH2xWRSbBmy0WK3c3QKGzC1MRWM\r\n9JauLN56TKUFOmUSjfWY3caJru6HxsiMTGKnvflXHfgA2aLAPxu72pIHoCTy5Hxj\r\nAUoKM7qXUn/kQj4Ci0M/0LRF4boqd37wpbyVNeXNvqm+dLjxklf/+NHMfNL2Wvb4\r\nekHUVI8nMVPgswIcQ7q/Njf9DC+LA+/duf8m9JDjI3J6r9y1gQugdkLETGzF2Gj1\r\nToU0Pocrg6CFHImqq2z+cOeWnURrV0f0I1UWWGCb79OZxZ5oDjM9uCLRsoe8+Npg\r\nACZNf4AbnM7OUNj5TEYs6t/tUYouvTB7gH452I3EH6KWBl+ZTgCg0RFkOMazNOjn\r\n4J0yfbaPvpVgKzF2WRyn63mTO2tdLRl5s9uqMFhXmCs6IzEqBpxMKL1aS6ONZLDG\r\n5qPtpCPJnUFQEBTVlSO15QIDAQAB\r\n-----END PUBLIC KEY-----`;\r\n\r\n// Public key used exclusively for encrypting SSO user payloads.\r\n// Replace this placeholder with the actual SSO RSA public key.\r\nconst SSO_RSA_PUBLIC_KEY = `-----BEGIN PUBLIC KEY-----\r\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAv+PThexweK9V8axQRaB3\r\nJrhYm/y2JAhED2o7V4Kpi4PpwdkcsVuACwxPt8M51idar/lBNnm12yJAvMnSRAYP\r\nGv+iYCE5VV+XPzUZuu/ho3sARxO3bCSRx9Xk0JZkd0Q7Muvy3Z74N9lML+g4DAHH\r\n1SA+tQnvk2hLwna7vd6pHfmVDROEkTTqv0EF+0cVCUhwrXcEZ7NLrs3BPWLbxzus\r\njlYsutTU0oaCeeag+xX6vbb+LFjDBvxngdlPzApUU0z9T4r/Mqbdb73e2FMrPSHO\r\nrJo+bRQ1+GE0EoFxYTyYVyOrd9bpfUhcc/ziK8Bu2M8lQk9pFs+1DGb1wC1TWklf\r\nZCHX79BPP+tyLFugqmCLm+WprtNl+Cv93VQuwue6m9UATeiWHYrA9uZ0mWHvRPuD\r\nEaXCAvT3JUDqTnuV/mTu8cAr+HWMfB7wQ+XWyi6TVAfQovMawV89Gtk5q7Ep2L89\r\nMShfennamuIRODd7IuDLN24h8laBEKz0lPATsvyS3ITHG+DdwUjU+ptGYGzGI+ps\r\nYadkX8g5DSjQs8JZvCN22ktjGRLCudvS8e0IfgzRe6QQ90NmQ3dmtC4AsatHBeM5\r\nS7wetGyB9NHx52liu+AwZqiiLk8Yf/Y2/4394Z+kE/CYVFnCMEOxRhx/Fs3QRCm2\r\npiJcd0xNaTlQZ4IcB08NBMECAwEAAQ==\r\n-----END PUBLIC KEY-----`;\r\n\r\nconst buildEncryptedSsoUserToken = (user: FlightSearchSsoUser | undefined): string | null => {\r\n if (!user) return null;\r\n\r\n const email = (user.email ?? \"\").trim();\r\n if (!email) return null;\r\n\r\n const encryptor = new JSEncrypt();\r\n encryptor.setPublicKey(SSO_RSA_PUBLIC_KEY);\r\n\r\n const payloadUser: FlightSearchSsoUser = {\r\n ...user,\r\n email,\r\n ts: user.ts ?? new Date().toISOString(),\r\n };\r\n\r\n const payload = JSON.stringify(payloadUser);\r\n const encrypted = encryptor.encrypt(payload);\r\n return typeof encrypted === \"string\" ? encrypted : null;\r\n};\r\n\r\nconst ensureStylesInjected = () => {\r\n if (typeof document === \"undefined\") {\r\n return;\r\n }\r\n\r\n if (document.getElementById(STYLE_ELEMENT_ID)) {\r\n return;\r\n }\r\n\r\n const style = document.createElement(\"style\");\r\n style.id = STYLE_ELEMENT_ID;\r\n style.textContent = flightSearchWidgetStyles;\r\n document.head.appendChild(style);\r\n};\r\n\r\nconst ensurePrimeIconsLoaded = () => {\r\n if (typeof document === \"undefined\") {\r\n return;\r\n }\r\n\r\n if (document.getElementById(PRIMEICONS_LINK_ID)) {\r\n return;\r\n }\r\n\r\n const link = document.createElement(\"link\");\r\n link.id = PRIMEICONS_LINK_ID;\r\n link.rel = \"stylesheet\";\r\n link.href = \"https://unpkg.com/primeicons@7.0.0/primeicons.css\";\r\n document.head.appendChild(link);\r\n};\r\n\r\n/** Default/popular airports (sequence: AUH, CAI, DXB, RUH, LOS, LON, PAR, NYC) */\r\nconst DEFAULT_AIRPORTS: AirportModel[] = [\r\n { ac: \"AUH\", an: \"Abu Dhabi International Airport\", cc: \"AE\", cn: \"United Arab Emirates\", ct: \"Abu Dhabi\" },\r\n { ac: \"CAI\", an: \"Cairo International Airport\", cc: \"EG\", cn: \"Egypt\", ct: \"Cairo\" },\r\n { ac: \"DXB\", an: \"Dubai International Airport\", cc: \"AE\", cn: \"United Arab Emirates\", ct: \"Dubai\" },\r\n { ac: \"RUH\", an: \"King Khalid International Airport\", cc: \"SA\", cn: \"Saudi Arabia\", ct: \"Riyadh\" },\r\n { ac: \"LOS\", an: \"Murtala Muhammed International Airport\", cc: \"NG\", cn: \"Nigeria\", ct: \"Lagos\" },\r\n { ac: \"LON\", an: \"London All Airports\", cc: \"GB\", cn: \"United Kingdom\", ct: \"London\" },\r\n { ac: \"PAR\", an: \"All Airports\", cc: \"FR\", cn: \"France\", ct: \"Paris\" },\r\n { ac: \"NYC\", an: \"All airports\", cc: \"US\", cn: \"United States Of America\", ct: \"New York\" },\r\n];\r\n\r\n/** Display string for input/selected value e.g. \"Dublin Airport (DUB)\" */\r\nfunction formatAirportDisplay(airport: AirportModel): string {\r\n const code = airport.ac ?? \"\";\r\n const name = airport.an ?? airport.ct ?? \"\";\r\n return name ? `${name} (${code})` : code;\r\n}\r\n\r\n/** Airport code for badge and query e.g. \"DUB\" */\r\nfunction getAirportCode(airport: AirportModel): string {\r\n return airport.ac ?? \"\";\r\n}\r\n\r\n/** Format date for display (e.g. \"31 Jan 2026\") or \"Select date\" */\r\nfunction formatDisplayDate(date: Date | null | undefined): string {\r\n if (!date || !(date instanceof Date) || isNaN(date.getTime())) return \"Select date\";\r\n return date.toLocaleDateString(\"en-GB\", { day: \"2-digit\", month: \"short\", year: \"numeric\" });\r\n}\r\n\r\nconst isEmptyLocationValue = (value: string | null | undefined, placeholder: string): boolean => {\r\n const trimmed = (value ?? \"\").trim();\r\n return trimmed.length === 0 || trimmed === placeholder;\r\n};\r\n\r\nexport function FlightSearchWidget({\r\n config,\r\n ssoUser,\r\n}: FlightSearchWidgetProps) {\r\n const theme = config?.theme;\r\n const primaryColor = theme?.primary ?? \"#2c0a82\";\r\n const secondaryColor = theme?.secondary ?? \"#2c0a82\";\r\n const primaryLightColor = theme?.primaryLight ?? \"#f3e2ff\";\r\n const fontName = config?.fontName;\r\n const redirectionDomain = config?.redirectionDomain;\r\n const airportSearchApiBaseUrl = \"https://adminapi-go.dev.futuretravelplatform.com/api\";\r\n const airlineSearchApiBaseUrl = \"https://adminapi.dev.futuretravelplatform.com/api\";\r\n const langCode = \"en\";\r\n const [airlineQuery, setAirlineQuery] = useState(\"\");\r\n const [airlineSuggestions, setAirlineSuggestions] = useState<AirlineOption[]>([]);\r\n const [selectedAirlines, setSelectedAirlines] = useState<AirlineOption[]>([]);\r\n const [airlineLimitError, setAirlineLimitError] = useState<string | null>(null);\r\n const [validationErrors, setValidationErrors] = useState<Record<number, { origin?: boolean; destination?: boolean }>>({});\r\n\r\n const createDefaultSegment = (): FlightSearchSegment => ({\r\n origin: \"\",\r\n destination: \"\",\r\n departureDate: new Date(),\r\n returnDate: new Date(new Date().setDate(new Date().getDate() + 1)),\r\n dateRange: [new Date(), new Date(new Date().setDate(new Date().getDate() + 1))],\r\n travelerClass: \"Economy\",\r\n adultCount: 1,\r\n childCount: 0,\r\n infantCount: 0,\r\n });\r\n\r\n const [formState, setFormState] = useState<FlightSearchFormState>(() => ({\r\n tripType: \"round-trip\",\r\n segments: [{\r\n origin: \"\",\r\n destination: \"\",\r\n departureDate: new Date(),\r\n returnDate: new Date(new Date().setDate(new Date().getDate() + 1)),\r\n dateRange: [new Date(), new Date(new Date().setDate(new Date().getDate() + 1))],\r\n travelerClass: \"Economy\",\r\n adultCount: 1,\r\n childCount: 0,\r\n infantCount: 0,\r\n }],\r\n }));\r\n\r\n const { tripType, segments } = formState;\r\n const setTripType = (value: string) =>\r\n setFormState((prev) => ({ ...prev, tripType: value as FlightSearchFormState[\"tripType\"] }));\r\n const setSegments = (updater: (prev: FlightSearchSegment[]) => FlightSearchSegment[]) =>\r\n setFormState((prev) => ({ ...prev, segments: updater(prev.segments) }));\r\n\r\n const [advancedOptions, setAdvancedOptions] = useState<AdvancedOptions>({\r\n isDirectFlights: false,\r\n isRefundable: false,\r\n isBaggage: false,\r\n preferredAirlineList: [],\r\n isFlexiDate: false,\r\n isUmrah: false\r\n });\r\n const [isOriginDropdownOpen, setIsOriginDropdownOpen] = useState(false);\r\n const [isDestinationDropdownOpen, setIsDestinationDropdownOpen] = useState(false);\r\n const [isRoomsGuestsMenuOpen, setIsRoomsGuestsMenuOpen] = useState(false);\r\n const originDropdownRef = useRef<HTMLDivElement>(null);\r\n const destinationDropdownRef = useRef<HTMLDivElement>(null);\r\n const roomsGuestsMenuRef = useRef<HTMLDivElement>(null);\r\n const dateRangeCalendarRef = useRef<any>(null);\r\n const mobileDateRangeCalendarRef = useRef<any>(null);\r\n const segmentCalendarRefs = useRef<Record<number, any>>({});\r\n\r\n // Get max segments based on trip type\r\n const getMaxSegments = (): number => {\r\n if (tripType === 'custom-search') return 3;\r\n if (tripType === 'multi-city') return 6;\r\n return 1;\r\n };\r\n const [segmentDropdowns, setSegmentDropdowns] = useState<{\r\n [key: number]: { origin: boolean; destination: boolean };\r\n }>({});\r\n const segmentRefs = useRef<{\r\n [key: number]: { origin: HTMLDivElement | null; destination: HTMLDivElement | null };\r\n }>({});\r\n\r\n const [predictiveSearchList, setPredictiveSearchList] = useState<Record<number, PredictiveSearchState>>({});\r\n const searchDebounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n const airlineSearchDebounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\r\n const getPredictiveState = (segmentIndex: number): PredictiveSearchState => {\r\n return predictiveSearchList[segmentIndex] ?? {\r\n fromAirport: [],\r\n toAirport: [],\r\n selectedFromIndex: -1,\r\n selectedToIndex: -1,\r\n };\r\n };\r\n\r\n const getAirportListBySearch = useCallback(async (searchKeyword: string): Promise<AirportModel[]> => {\r\n if (!searchKeyword.trim()) return [];\r\n const url = `${airportSearchApiBaseUrl.replace(/\\/$/, \"\")}/Airport/GetList/${encodeURIComponent(langCode)}/${encodeURIComponent(searchKeyword.trim())}`;\r\n try {\r\n const res = await fetch(url);\r\n if (!res.ok) return [];\r\n const data = await res.json();\r\n if (Array.isArray(data)) return data;\r\n if (data && Array.isArray((data as { data?: unknown }).data)) return (data as { data: AirportModel[] }).data;\r\n if (data && Array.isArray((data as { result?: unknown }).result)) return (data as { result: AirportModel[] }).result;\r\n return [];\r\n } catch {\r\n return [];\r\n }\r\n }, [airportSearchApiBaseUrl, langCode]);\r\n\r\n const getAirlineListBySearch = useCallback(async (searchKeyword: string): Promise<AirlineOption[]> => {\r\n if (!searchKeyword.trim()) return [];\r\n const lang = (langCode ?? \"en\").toUpperCase();\r\n const url = `${airlineSearchApiBaseUrl.replace(/\\/$/, \"\")}/MasterSearch/GetAllAirline/${encodeURIComponent(lang)}/${encodeURIComponent(searchKeyword.trim())}`;\r\n try {\r\n const token = buildEncryptedToken(redirectionDomain ?? \"\");\r\n const res = await fetch(url, {\r\n headers: token ? { token } : undefined\r\n });\r\n if (!res.ok) return [];\r\n const data = await res.json();\r\n if (Array.isArray(data)) return data as AirlineOption[];\r\n if (data && Array.isArray((data as { data?: unknown }).data)) return (data as { data: AirlineOption[] }).data;\r\n if (data && Array.isArray((data as { result?: unknown }).result)) return (data as { result: AirlineOption[] }).result;\r\n return [];\r\n } catch {\r\n return [];\r\n }\r\n }, [airlineSearchApiBaseUrl, langCode, redirectionDomain]);\r\n\r\n const searchAirport = useCallback((segmentIndex: number, dropdownType: DropdownType, value: string) => {\r\n if (value.length < 3) {\r\n setPredictiveSearchList((prev) => ({\r\n ...prev,\r\n [segmentIndex]: {\r\n ...(prev[segmentIndex] ?? { fromAirport: [], toAirport: [], selectedFromIndex: -1, selectedToIndex: -1 }),\r\n [dropdownType === \"origin\" ? \"fromAirport\" : \"toAirport\"]: [],\r\n [dropdownType === \"origin\" ? \"selectedFromIndex\" : \"selectedToIndex\"]: -1,\r\n },\r\n }));\r\n return;\r\n }\r\n getAirportListBySearch(value).then((res) => {\r\n setPredictiveSearchList((prev) => ({\r\n ...prev,\r\n [segmentIndex]: {\r\n ...(prev[segmentIndex] ?? { fromAirport: [], toAirport: [], selectedFromIndex: -1, selectedToIndex: -1 }),\r\n [dropdownType === \"origin\" ? \"fromAirport\" : \"toAirport\"]: res,\r\n [dropdownType === \"origin\" ? \"selectedFromIndex\" : \"selectedToIndex\"]: res?.length === 0 ? -1 : 0,\r\n },\r\n }));\r\n });\r\n }, [getAirportListBySearch]);\r\n\r\n const closeAirportDropdown = useCallback((dropdownType: DropdownType, segmentIndex: number) => {\r\n if (dropdownType === \"origin\") {\r\n setIsOriginDropdownOpen(false);\r\n } else {\r\n setIsDestinationDropdownOpen(false);\r\n }\r\n setSegmentDropdowns((prev) => ({\r\n ...prev,\r\n [segmentIndex]: { ...(prev[segmentIndex] || { origin: false, destination: false }), [dropdownType]: false },\r\n }));\r\n }, []);\r\n\r\n const selectAirport = useCallback((airport: AirportModel, dropdownType: DropdownType, segmentIndex: number) => {\r\n const display = formatAirportDisplay(airport);\r\n setSegments((prev) => {\r\n const updated = [...prev];\r\n if (!updated[segmentIndex]) return prev;\r\n if (dropdownType === \"origin\") updated[segmentIndex] = { ...updated[segmentIndex], origin: display };\r\n else {\r\n updated[segmentIndex] = { ...updated[segmentIndex], destination: display };\r\n if (tripType === \"multi-city\" || tripType === \"custom-search\") {\r\n const nextIndex = segmentIndex + 1;\r\n const nextSeg = updated[nextIndex];\r\n if (nextSeg ) {\r\n updated[nextIndex] = { ...nextSeg, origin: display };\r\n }\r\n }\r\n }\r\n return updated;\r\n });\r\n closeAirportDropdown(dropdownType, segmentIndex);\r\n }, [closeAirportDropdown]);\r\n\r\n const updateSelectedIndex = useCallback((segmentIndex: number, dropdownType: DropdownType, newIndex: number) => {\r\n setPredictiveSearchList((prev) => {\r\n const state = prev[segmentIndex] ?? { fromAirport: [], toAirport: [], selectedFromIndex: -1, selectedToIndex: -1 };\r\n const list = dropdownType === \"origin\" ? state.fromAirport : state.toAirport;\r\n const len = list.length;\r\n if (len === 0) return prev;\r\n const clamped = ((newIndex % len) + len) % len;\r\n return {\r\n ...prev,\r\n [segmentIndex]: {\r\n ...state,\r\n [dropdownType === \"origin\" ? \"selectedFromIndex\" : \"selectedToIndex\"]: clamped,\r\n },\r\n };\r\n });\r\n }, []);\r\n\r\n const handleKeyDown = useCallback((\r\n event: React.KeyboardEvent<HTMLInputElement>,\r\n dropdownType: DropdownType,\r\n segmentIndex: number\r\n ) => {\r\n const state = getPredictiveState(segmentIndex);\r\n const options = dropdownType === \"origin\" ? state.fromAirport : state.toAirport;\r\n const selectedIndex = dropdownType === \"origin\" ? state.selectedFromIndex : state.selectedToIndex;\r\n const isOpen = segmentIndex === 0\r\n ? (dropdownType === \"origin\" ? isOriginDropdownOpen : isDestinationDropdownOpen)\r\n : segmentDropdowns[segmentIndex]?.[dropdownType];\r\n\r\n switch (event.key) {\r\n case \"ArrowDown\":\r\n if (isOpen && options.length) {\r\n event.preventDefault();\r\n updateSelectedIndex(segmentIndex, dropdownType, selectedIndex + 1);\r\n }\r\n break;\r\n case \"ArrowUp\":\r\n if (isOpen && options.length) {\r\n event.preventDefault();\r\n updateSelectedIndex(segmentIndex, dropdownType, selectedIndex - 1);\r\n }\r\n break;\r\n case \"Enter\":\r\n if (isOpen && options.length && selectedIndex >= 0 && options[selectedIndex]) {\r\n event.preventDefault();\r\n selectAirport(options[selectedIndex], dropdownType, segmentIndex);\r\n }\r\n break;\r\n case \"Escape\":\r\n if (isOpen) {\r\n event.preventDefault();\r\n closeAirportDropdown(dropdownType, segmentIndex);\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }, [isOriginDropdownOpen, isDestinationDropdownOpen, segmentDropdowns, getPredictiveState, updateSelectedIndex, selectAirport, closeAirportDropdown]);\r\n\r\n const DEBOUNCE_MS = 300;\r\n const triggerSearchAirport = useCallback((segmentIndex: number, dropdownType: DropdownType, value: string) => {\r\n if (searchDebounceRef.current) clearTimeout(searchDebounceRef.current);\r\n if (value.length < 3) {\r\n searchAirport(segmentIndex, dropdownType, value);\r\n return;\r\n }\r\n searchDebounceRef.current = setTimeout(() => {\r\n searchDebounceRef.current = null;\r\n searchAirport(segmentIndex, dropdownType, value);\r\n }, DEBOUNCE_MS);\r\n }, [searchAirport]);\r\n\r\n const triggerSearchAirline = useCallback((value: string) => {\r\n if (airlineSearchDebounceRef.current) clearTimeout(airlineSearchDebounceRef.current);\r\n if (value.length < 2) {\r\n setAirlineSuggestions([]);\r\n return;\r\n }\r\n airlineSearchDebounceRef.current = setTimeout(() => {\r\n airlineSearchDebounceRef.current = null;\r\n getAirlineListBySearch(value).then(setAirlineSuggestions);\r\n }, DEBOUNCE_MS);\r\n }, [getAirlineListBySearch]);\r\n\r\n useEffect(() => () => {\r\n if (searchDebounceRef.current) clearTimeout(searchDebounceRef.current);\r\n if (airlineSearchDebounceRef.current) clearTimeout(airlineSearchDebounceRef.current);\r\n }, []);\r\n\r\n const themeStyle = useMemo(\r\n () => {\r\n const style: React.CSSProperties = {\r\n [\"--primary\" as string]: primaryColor,\r\n [\"--secondary\" as string]: secondaryColor,\r\n [\"--primary-light\" as string]: primaryLightColor\r\n };\r\n\r\n if (fontName) {\r\n (style as Record<string, string>)[\"--font-family\"] = fontName;\r\n }\r\n\r\n return style;\r\n },\r\n [primaryColor, secondaryColor, primaryLightColor]\r\n );\r\n\r\n useEffect(() => {\r\n ensureStylesInjected();\r\n ensurePrimeIconsLoaded();\r\n }, []);\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (event: MouseEvent) => {\r\n const target = event.target as HTMLElement;\r\n\r\n const isInsidePrimeDropdown =\r\n target.closest(\".p-dropdown-panel\") !== null ||\r\n target.closest(\".p-dropdown-items-wrapper\") !== null ||\r\n target.closest(\".p-dropdown-item\") !== null ||\r\n target.closest(\".p-component\")?.classList.contains(\"p-dropdown\") !== false ||\r\n target.closest('[data-pc-section=\"panel\"]') !== null ||\r\n target.closest('[data-pc-name=\"dropdown\"]') !== null;\r\n\r\n if (originDropdownRef.current && !originDropdownRef.current.contains(target)) {\r\n setIsOriginDropdownOpen(false);\r\n }\r\n if (destinationDropdownRef.current && !destinationDropdownRef.current.contains(target)) {\r\n setIsDestinationDropdownOpen(false);\r\n }\r\n\r\n if (\r\n !isInsidePrimeDropdown &&\r\n roomsGuestsMenuRef.current &&\r\n !roomsGuestsMenuRef.current.contains(target)\r\n ) {\r\n setIsRoomsGuestsMenuOpen(false);\r\n }\r\n\r\n const isInsideCustomDropdown = target.closest(\".sw-custom-dropdown\") !== null;\r\n const isInsideCalendar = target.closest(\".p-datepicker\") !== null || target.closest(\".p-calendar\") !== null;\r\n if (!isInsideCustomDropdown && !isInsideCalendar) {\r\n setSegmentDropdowns({});\r\n return;\r\n }\r\n\r\n Object.keys(segmentRefs.current).forEach((key) => {\r\n const index = Number.parseInt(key, 10);\r\n const refs = segmentRefs.current[index];\r\n if (refs) {\r\n if (refs.origin && !refs.origin.contains(target)) {\r\n setSegmentDropdowns((prev) => ({\r\n ...prev,\r\n [index]: { ...(prev[index] || { origin: false, destination: false }), origin: false }\r\n }));\r\n }\r\n if (refs.destination && !refs.destination.contains(target)) {\r\n setSegmentDropdowns((prev) => ({\r\n ...prev,\r\n [index]: {\r\n ...(prev[index] || { origin: false, destination: false }),\r\n destination: false\r\n }\r\n }));\r\n }\r\n }\r\n });\r\n };\r\n\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n }, []);\r\n\r\n // Reset flight segments when trip type changes (multi-city/custom-search = at least 2 segments)\r\n useEffect(() => {\r\n if (tripType === 'multi-city' || tripType === 'custom-search') {\r\n setSegments((prev) => {\r\n const maxSegments = getMaxSegments();\r\n const baseDate = prev[0]?.departureDate;\r\n const fallbackDate = baseDate instanceof Date && !isNaN(baseDate.getTime()) ? baseDate : new Date();\r\n if (prev.length === 0) {\r\n const first = createDefaultSegment();\r\n const second: FlightSearchSegment = {\r\n origin: \"\",\r\n destination: \"\",\r\n departureDate: fallbackDate,\r\n returnDate: null,\r\n dateRange: null,\r\n travelerClass: first.travelerClass,\r\n adultCount: first.adultCount,\r\n childCount: first.childCount,\r\n infantCount: first.infantCount,\r\n };\r\n return [first, second];\r\n }\r\n if (prev.length === 1) {\r\n const first = prev[0];\r\n const second: FlightSearchSegment = {\r\n origin: \"\",\r\n destination: \"\",\r\n departureDate: fallbackDate,\r\n returnDate: null,\r\n dateRange: null,\r\n travelerClass: first.travelerClass,\r\n adultCount: first.adultCount,\r\n childCount: first.childCount,\r\n infantCount: first.infantCount,\r\n };\r\n return [first, second];\r\n }\r\n if (prev.length > maxSegments) return prev.slice(0, maxSegments);\r\n return prev;\r\n });\r\n } else {\r\n // round-trip / one-way: ensure single segment\r\n setSegments((prev) => {\r\n if (prev.length === 0) return [createDefaultSegment()];\r\n if (prev.length > 1) return [prev[0]];\r\n return prev;\r\n });\r\n }\r\n }, [tripType]);\r\n\r\n type SegmentField = keyof FlightSearchSegment;\r\n type SegmentValue = string | Date | null | (Date | null)[];\r\n\r\n const isValidLocationValue = (value: SegmentValue, placeholder: string): boolean => {\r\n if (typeof value !== \"string\") return false;\r\n const trimmed = value.trim();\r\n return trimmed.length > 0 && trimmed !== placeholder;\r\n };\r\n\r\n const normalizeMultiCityDates = (list: FlightSearchSegment[]): FlightSearchSegment[] => {\r\n let prevDate: Date | null = null;\r\n return list.map((segment, idx) => {\r\n const current = segment.departureDate;\r\n let nextDate = current;\r\n const currentValid = current instanceof Date && !isNaN(current.getTime());\r\n const prevValid = prevDate instanceof Date && !isNaN(prevDate.getTime());\r\n if (prevValid && (!currentValid || (current as Date).getTime() < (prevDate as Date).getTime())) {\r\n nextDate = prevDate;\r\n }\r\n const nextSegment = nextDate === segment.departureDate ? segment : { ...segment, departureDate: nextDate };\r\n if (nextDate instanceof Date && !isNaN(nextDate.getTime())) {\r\n prevDate = nextDate;\r\n } else if (idx === 0) {\r\n prevDate = null;\r\n }\r\n return nextSegment;\r\n });\r\n };\r\n\r\n const getLastValidDepartureDate = (list: FlightSearchSegment[]): Date | null => {\r\n for (let i = list.length - 1; i >= 0; i -= 1) {\r\n const date = list[i]?.departureDate;\r\n if (date instanceof Date && !isNaN(date.getTime())) {\r\n return date;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n const handleSegmentFieldChange = (\r\n index: number,\r\n field: SegmentField,\r\n value: SegmentValue\r\n ): void => {\r\n setSegments((prev) => {\r\n const updated = [...prev];\r\n if (!updated[index]) return prev;\r\n updated[index] = { ...updated[index], [field]: value };\r\n if (field === \"departureDate\" && (tripType === \"multi-city\" || tripType === \"custom-search\")) {\r\n return normalizeMultiCityDates(updated);\r\n }\r\n return updated;\r\n });\r\n if (field === \"origin\" || field === \"destination\") {\r\n setSegmentDropdowns((prev) => ({\r\n ...prev,\r\n [index]: { ...prev[index], [field]: false }\r\n }));\r\n const placeholder = field === \"origin\" ? \"Origin\" : \"Destination\";\r\n if (isValidLocationValue(value, placeholder)) {\r\n setValidationErrors((prev) => ({\r\n ...prev,\r\n [index]: { ...(prev[index] ?? {}), [field]: false }\r\n }));\r\n }\r\n }\r\n };\r\n\r\n const handleTravellerChange = (field: \"travelerClass\" | \"adultCount\" | \"childCount\" | \"infantCount\", value: string | number): void => {\r\n setSegments((prev) => {\r\n const updated = prev.map((seg, i) =>\r\n i === 0 ? { ...seg, [field]: value } : seg\r\n );\r\n return updated;\r\n });\r\n };\r\n\r\n const toggleSegmentDropdown = (index: number, field: \"origin\" | \"destination\"): void => {\r\n setSegmentDropdowns((prev) => ({\r\n ...prev,\r\n [index]: {\r\n ...(prev[index] || { origin: false, destination: false }),\r\n [field]: !prev[index]?.[field]\r\n }\r\n }));\r\n };\r\n\r\n const swapSegmentLocations = (index: number): void => {\r\n setSegments((prev) => {\r\n const updated = [...prev];\r\n const current = updated[index];\r\n if (!current) return prev;\r\n updated[index] = { ...current, origin: current.destination, destination: current.origin };\r\n return updated;\r\n });\r\n };\r\n\r\n const addFlightSegment = (): void => {\r\n const maxSegments = getMaxSegments();\r\n if (segments.length < maxSegments) {\r\n const template = segments[0] ?? createDefaultSegment();\r\n const lastDeparture = getLastValidDepartureDate(segments) ?? new Date();\r\n setSegments((prev) => [\r\n ...prev,\r\n {\r\n origin: \"\",\r\n destination: \"\",\r\n departureDate: lastDeparture,\r\n returnDate: null,\r\n dateRange: null,\r\n travelerClass: template.travelerClass,\r\n adultCount: template.adultCount,\r\n childCount: template.childCount,\r\n infantCount: template.infantCount,\r\n }\r\n ]);\r\n }\r\n };\r\n\r\n const removeFlightSegment = (index: number): void => {\r\n if (segments.length > 1) {\r\n setSegments((prev) => prev.filter((_, i) => i !== index));\r\n }\r\n };\r\n\r\n // Helper function to extract airport code from string like \"Dubai (DXB)\"\r\n const extractAirportCode = (location: string): string => {\r\n const match = location.match(/\\(([A-Z]{3})\\)/);\r\n return match ? match[1] : location;\r\n };\r\n\r\n // Helper: format date for URL as DD-MMM-YYYY (e.g. 31-Jan-2026)\r\n const MONTH_NAMES = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\r\n const formatDate = (date: Date | null): string => {\r\n if (!date) return '';\r\n const day = String(date.getDate()).padStart(2, '0');\r\n const month = MONTH_NAMES[date.getMonth()];\r\n const year = date.getFullYear();\r\n return `${day}-${month}-${year}`;\r\n };\r\n\r\n /** Trip type number for URL triptype param: 1=one-way, 2=round-trip, 3=multi-city, 4=custom-search */\r\n const getTripTypeNumber = (): number => {\r\n switch (tripType) {\r\n case 'one-way': return 1;\r\n case 'round-trip': return 2;\r\n case 'multi-city': return 3;\r\n case 'custom-search': return 4;\r\n default: return 2;\r\n }\r\n };\r\n\r\n\r\n // Map class name to class code (adjust based on your requirements)\r\n const getClassCode = (className: string): string => {\r\n const classMap: Record<string, string> = {\r\n 'Economy': 'Y',\r\n 'Business': 'C',\r\n 'First Class': 'F',\r\n 'Premium Economy': 'W'\r\n };\r\n return classMap[className] || 'Y';\r\n };\r\n\r\n // Build itinerary requests (new Angular: round-trip = 2 legs: outbound + return)\r\n const buildItineraryRequests = (): ItineraryReq[] => {\r\n const itineraryReqs: ItineraryReq[] = [];\r\n const firstSegment = segments[0];\r\n if (!firstSegment) return itineraryReqs;\r\n\r\n if (tripType === 'one-way') {\r\n itineraryReqs.push({\r\n departureCode: extractAirportCode(firstSegment.origin),\r\n returnCode: extractAirportCode(firstSegment.destination),\r\n departureDate: formatDate(firstSegment.departureDate),\r\n class: getClassCode(firstSegment.travelerClass)\r\n });\r\n } else if (tripType === 'round-trip') {\r\n // Leg 1: outbound dep1/ret1/dtt1/cl1\r\n itineraryReqs.push({\r\n departureCode: extractAirportCode(firstSegment.origin),\r\n returnCode: extractAirportCode(firstSegment.destination),\r\n departureDate: formatDate(firstSegment.departureDate),\r\n class: getClassCode(firstSegment.travelerClass)\r\n });\r\n // Leg 2: return dep2=ret1, ret2=dep1, dtt2=returnDate, cl2\r\n const returnDate = firstSegment.dateRange?.[1] ?? firstSegment.returnDate ?? firstSegment.departureDate;\r\n itineraryReqs.push({\r\n departureCode: extractAirportCode(firstSegment.destination),\r\n returnCode: extractAirportCode(firstSegment.origin),\r\n departureDate: formatDate(returnDate),\r\n class: getClassCode(firstSegment.travelerClass)\r\n });\r\n } else if (tripType === 'multi-city' || tripType === 'custom-search') {\r\n segments.forEach((segment) => {\r\n itineraryReqs.push({\r\n departureCode: extractAirportCode(segment.origin),\r\n returnCode: extractAirportCode(segment.destination),\r\n departureDate: formatDate(segment.departureDate),\r\n class: getClassCode(segment.travelerClass)\r\n });\r\n });\r\n }\r\n\r\n return itineraryReqs;\r\n };\r\n\r\n // Check if baggage option is selected\r\n const isBaggageOption = (): boolean => {\r\n return advancedOptions.isBaggage;\r\n };\r\n\r\n /** Trip type number for URL triptype param: 1=one-way, 2=round-trip, 3=multi-city, 4=custom-search */\r\n const getTripKey = (): string => {\r\n switch (tripType) {\r\n case 'one-way': return \"OW\";\r\n case 'round-trip': return \"IRT\";\r\n case 'multi-city': return \"NMC\";\r\n case 'custom-search': return \"MC\";\r\n default: return \"OW\";\r\n }\r\n };\r\n\r\n // Check if flexi date option is selected\r\n const isFlexiDateOption = (): boolean => {\r\n return advancedOptions.isFlexiDate;\r\n };\r\n\r\n // Check if umrah fare option is selected\r\n const isUmrahFareOption = (): boolean => {\r\n return advancedOptions.isUmrah;\r\n };\r\n\r\n // Create query string function similar to Angular implementation\r\n const createQueryString = (): Record<string, any> => {\r\n const queryStringObj: Record<string, any> = {};\r\n const itineraryReqs = buildItineraryRequests();\r\n let trip_index = 1;\r\n\r\n itineraryReqs.forEach((itineraryReqObj: ItineraryReq) => {\r\n queryStringObj[`dep${trip_index}`] = itineraryReqObj.departureCode;\r\n queryStringObj[`ret${trip_index}`] = itineraryReqObj.returnCode;\r\n queryStringObj[`dtt${trip_index}`] = itineraryReqObj.departureDate;\r\n queryStringObj[`cl${trip_index}`] = itineraryReqObj.class;\r\n trip_index++;\r\n });\r\n\r\n queryStringObj[`triptype`] = getTripTypeNumber();\r\n const firstSeg = segments[0];\r\n queryStringObj[`adult`] = firstSeg?.adultCount ?? 1;\r\n queryStringObj[`child`] = firstSeg?.childCount ?? 0;\r\n queryStringObj[`infant`] = firstSeg?.infantCount ?? 0;\r\n queryStringObj[`direct`] = advancedOptions.isDirectFlights;\r\n queryStringObj[`baggage`] = isBaggageOption();\r\n queryStringObj[`key`] = getTripKey();\r\n queryStringObj[`airlines`] = advancedOptions.preferredAirlineList.join(',') || '';\r\n queryStringObj[`ref`] = advancedOptions.isRefundable;\r\n queryStringObj[`lc`] = (langCode ?? 'en').toUpperCase();\r\n queryStringObj[`curr`] = 'AED';\r\n queryStringObj[`mgcc`] = 'AE';\r\n queryStringObj['ipc'] = isFlexiDateOption();\r\n queryStringObj[`umrah`] = isUmrahFareOption();\r\n\r\n return queryStringObj;\r\n };\r\n\r\n const handleSearch = (): void => {\r\n const queryStringObj = createQueryString();\r\n console.log(\"Query String Object:\", queryStringObj);\r\n console.log(\"Searching with:\", formState, \"domain:\", redirectionDomain);\r\n \r\n // Build query string for URL\r\n const queryParams = new URLSearchParams();\r\n Object.keys(queryStringObj).forEach((key) => {\r\n const value = queryStringObj[key];\r\n if (key === 'airlines' || key === 'mgcc') {\r\n queryParams.append(key, value !== null && value !== undefined ? String(value) : '');\r\n } else if (value !== null && value !== undefined && value !== '') {\r\n queryParams.append(key, String(value));\r\n }\r\n });\r\n\r\n const ssoToken = buildEncryptedSsoUserToken(ssoUser);\r\n if (ssoToken) {\r\n queryParams.append(\"to\", ssoToken);\r\n }\r\n \r\n const queryString = queryParams.toString();\r\n console.log(\"Query String:\", queryString);\r\n \r\n // If redirection domain is provided, open results in a new tab\r\n if (redirectionDomain) {\r\n const url = `${redirectionDomain}/flight/listing?${queryString}`;\r\n window.open(url, \"_blank\");\r\n }\r\n };\r\n\r\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>): void => {\r\n e.preventDefault();\r\n const isMultiCityOrCustom = tripType === \"multi-city\" || tripType === \"custom-search\";\r\n const segmentsToValidate = isMultiCityOrCustom ? segments : segments.slice(0, 1);\r\n const nextErrors: Record<number, { origin?: boolean; destination?: boolean }> = {};\r\n segmentsToValidate.forEach((segment, index) => {\r\n const originInvalid = !isValidLocationValue(segment.origin, \"Origin\");\r\n const destinationInvalid = !isValidLocationValue(segment.destination, \"Destination\");\r\n if (originInvalid || destinationInvalid) {\r\n nextErrors[index] = {\r\n origin: originInvalid,\r\n destination: destinationInvalid\r\n };\r\n }\r\n });\r\n if (Object.keys(nextErrors).length > 0) {\r\n setValidationErrors(nextErrors);\r\n return;\r\n }\r\n handleSearch();\r\n };\r\n \r\n const renderAirportDropdown = (\r\n segmentIndex: number,\r\n dropdownType: DropdownType,\r\n dropdownRef: Ref<HTMLDivElement>,\r\n isOpen: boolean,\r\n onOpen: () => void\r\n ) => {\r\n const isOrigin = dropdownType === \"origin\";\r\n const value = segments[segmentIndex]?.[dropdownType];\r\n const placeholder = isOrigin ? \"Origin\" : \"Destination\";\r\n const label = isOrigin ? \"From\" : \"To\";\r\n const list = isOrigin ? getPredictiveState(segmentIndex).fromAirport : getPredictiveState(segmentIndex).toAirport;\r\n const selectedIndex = isOrigin ? getPredictiveState(segmentIndex).selectedFromIndex : getPredictiveState(segmentIndex).selectedToIndex;\r\n\r\n return (\r\n <div className={`sw-form-field sw-pos-rel${isOrigin ? \" br-left\" : \"\"} ${validationErrors[segmentIndex]?.[dropdownType] ? \"sw-is-invalid\" : \"\"}`}>\r\n <label htmlFor={`${dropdownType}-${segmentIndex}`}>{label}</label>\r\n <div className={`sw-custom-dropdown ${((validationErrors[segmentIndex]?.[dropdownType]) ? \"sw-has-error\" : \"\")}`} ref={dropdownRef}>\r\n <input\r\n type=\"text\"\r\n id={`${dropdownType}-${segmentIndex}`}\r\n className={`sw-custom-dropdown-trigger ${(value === placeholder || !value) ? 'sw-placeholder' : ''}`}\r\n value={value === placeholder ? '' : (value ?? '')}\r\n placeholder={placeholder}\r\n onFocus={(e) => {\r\n onOpen();\r\n e.currentTarget.select();\r\n }}\r\n onClick={(e) => e.currentTarget.select()}\r\n onChange={(e) => {\r\n const val = e.target.value;\r\n handleSegmentFieldChange(segmentIndex, dropdownType, val);\r\n triggerSearchAirport(segmentIndex, dropdownType, val);\r\n }}\r\n onKeyDown={(e) => handleKeyDown(e, dropdownType, segmentIndex)}\r\n />\r\n {isOpen && (\r\n <div className=\"sw-dropdown\">\r\n <div className=\"mobileHead mobileShow\">\r\n <a type=\"button\" onClick={() => closeAirportDropdown(dropdownType, segmentIndex)}>\r\n <svg width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M19 5L5 19\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path d=\"M5 5L19 19\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg>\r\n </a>\r\n <h4>{isOrigin ? \"Origin\" : \"Destination\"}</h4>\r\n </div>\r\n <div className=\"mobileSrgInput mobileShow\">\r\n <input type=\"text\" placeholder={`Search ${isOrigin ? \"Origin\" : \"Destination\"}`} value={value ?? ''} onChange={(e) => {\r\n const val = e.target.value;\r\n handleSegmentFieldChange(segmentIndex, dropdownType, val);\r\n triggerSearchAirport(segmentIndex, dropdownType, val);\r\n }} />\r\n </div>\r\n <ul className=\"sw-dropdown-list\">\r\n {(list.length > 0\r\n ? list.map((airport, i) => (\r\n <li key={airport.id ?? airport.ac ?? i} className={`sw-dropdown-list-item ${selectedIndex === i ? \"highlight\" : \"\"}`} onClick={() => selectAirport(airport, dropdownType, segmentIndex)}>\r\n <div className=\"sw-dropdown-list-card\"><h6 className=\"sw-dropdown-item-badge sw-en-font\">{getAirportCode(airport)}</h6><div><h5 className=\"sw-fw500 sw-text-ellipsis\">{formatAirportDisplay(airport)}</h5><h6 className=\"sw-text-label sw-text-ellipsis\">{airport.ct}{airport.cn ? `, ${airport.cn}` : \"\"}</h6></div></div>\r\n </li>\r\n ))\r\n : DEFAULT_AIRPORTS.map((airport, i) => (\r\n <li key={airport.ac ?? i} className=\"sw-dropdown-list-item \" onClick={() => selectAirport(airport, dropdownType, segmentIndex)}>\r\n <div className=\"sw-dropdown-list-card\"><h6 className=\"sw-dropdown-item-badge sw-en-font\">{getAirportCode(airport)}</h6><div><h5 className=\"sw-fw500 sw-text-ellipsis\">{formatAirportDisplay(airport)}</h5><h6 className=\"sw-text-label sw-text-ellipsis\">{airport.ct}{airport.cn ? `, ${airport.cn}` : \"\"}</h6></div></div>\r\n </li>\r\n ))\r\n )}\r\n </ul>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const getMinDateForSegment = (index: number): Date => {\r\n const today = new Date();\r\n if (index <= 0) return today;\r\n const prev = segments[index - 1]?.departureDate;\r\n if (prev instanceof Date && !isNaN(prev.getTime())) return prev;\r\n return today;\r\n };\r\n\r\n const renderFlightSegment = (index: number, segment: FlightSearchSegment, isMultiCityOrCustom: boolean) => {\r\n const canRemove = segments.length > 2 && index > 0 && isMultiCityOrCustom;\r\n\r\n const originRef = (el: HTMLDivElement | null) => {\r\n if (!segmentRefs.current[index]) segmentRefs.current[index] = { origin: null, destination: null };\r\n segmentRefs.current[index].origin = el;\r\n };\r\n const destinationRef = (el: HTMLDivElement | null) => {\r\n if (!segmentRefs.current[index]) segmentRefs.current[index] = { origin: null, destination: null };\r\n segmentRefs.current[index].destination = el;\r\n };\r\n\r\n const isOriginOpen = segmentDropdowns[index]?.origin ?? false;\r\n const isDestOpen = segmentDropdowns[index]?.destination ?? false;\r\n\r\n return (\r\n <>\r\n <div key={index} className=\"sw-srh-wrap sw-srh-box sw-pos-rel\">\r\n {renderAirportDropdown(index, \"origin\", originDropdownRef || originRef, isOriginOpen, () => toggleSegmentDropdown(index, \"origin\"))}\r\n <div className=\"sw-form-swap\" aria-label=\"Swap origin and destination\" onClick={() => swapSegmentLocations(index)}>\r\n <svg width=\"30px\" height=\"30px\" fill=\"var(--sw-body-text)\" viewBox=\"0 0 24 24\"><path fillRule=\"evenodd\" d=\"M14.6403 5.2477a.7483.7483 0 0 1 1.0612.0084l4.0871 4.1684a.7555.7555 0 0 1 .1573.8195.7502.7502 0 0 1-.6921.4623H6.8305c-.4145 0-.7504-.3373-.7504-.7533 0-.4161.336-.7534.7504-.7534h10.6317L14.632 6.3131a.7556.7556 0 0 1 .0083-1.0654ZM9.368 18.8148a.7483.7483 0 0 1-1.0611-.0084l-4.087-4.1684a.7555.7555 0 0 1-.1574-.8195.7503.7503 0 0 1 .6921-.4623H17.178c.4144 0 .7503.3373.7503.7533 0 .4161-.3359.7534-.7503.7534H6.5463l2.8301 2.8865a.7555.7555 0 0 1-.0083 1.0654Z\" clipRule=\"evenodd\"></path></svg>\r\n </div>\r\n {renderAirportDropdown(index, \"destination\", destinationDropdownRef || destinationRef, isDestOpen, () => toggleSegmentDropdown(index, \"destination\"))}\r\n </div>\r\n {isMultiCityOrCustom && (\r\n <div className=\"sw-srh-wrap sw-pos-rel\">\r\n <div className=\"sw-form-field sw-com-cal\">\r\n <label htmlFor={`departure-${index}`}>Departure</label>\r\n <Calendar\r\n numberOfMonths={2}\r\n id={`departure-${index}`}\r\n appendTo=\"self\"\r\n value={segment.departureDate ?? null}\r\n onChange={(e) => {\r\n const raw = e.value as Date | string | null;\r\n const nextDate = raw instanceof Date ? raw : (typeof raw === \"string\" ? new Date(raw) : null);\r\n handleSegmentFieldChange(\r\n index,\r\n \"departureDate\",\r\n nextDate && !isNaN(nextDate.getTime()) ? nextDate : null\r\n );\r\n }}\r\n dateFormat=\"dd M yy\"\r\n placeholder=\"29 Jan 2026\"\r\n className=\"p-inputtext-sm MobileHide\"\r\n minDate={getMinDateForSegment(index)}\r\n />\r\n <Calendar\r\n numberOfMonths={10}\r\n id={`departure-${index}`}\r\n appendTo=\"self\"\r\n value={segment.departureDate ?? null}\r\n onChange={(e) => {\r\n const raw = e.value as Date | string | null;\r\n const nextDate = raw instanceof Date ? raw : (typeof raw === \"string\" ? new Date(raw) : null);\r\n handleSegmentFieldChange(\r\n index,\r\n \"departureDate\",\r\n nextDate && !isNaN(nextDate.getTime()) ? nextDate : null\r\n );\r\n }}\r\n dateFormat=\"dd M yy\"\r\n placeholder=\"29 Jan 2026\"\r\n className=\"p-inputtext-sm MobileShow\"\r\n minDate={getMinDateForSegment(index)}\r\n />\r\n </div>\r\n {canRemove && (\r\n <div className=\"sw-srh-wrap\">\r\n <a\r\n type=\"button\"\r\n className=\"sw-remove-segment\"\r\n onClick={() => removeFlightSegment(index)}>\r\n <svg viewBox=\"0 0 200 200\" width=\"35\" height=\"35\" xmlns=\"http://www.w3.org/2000/svg\" role=\"presentation\"><path d=\"M124.697 135.303L100 110.606l-24.697 24.697l-10.606-10.606L89.393 100L64.697 75.303l10.606-10.606L100 89.394l24.697-24.697l10.606 10.606L110.607 100l24.696 24.697z\"></path></svg>\r\n </a>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </>\r\n )\r\n }\r\n\r\n return (\r\n <PrimeReactProvider value={{ hideOverlaysOnDocumentScrolling: false }}>\r\n <div className=\"tfsw-root sw-container\" style={themeStyle}>\r\n <div className=\"sw-card-box\">\r\n <div className=\"sw-srh-main-head\">\r\n <div className=\"sw-srh-head\">\r\n <div className=\"sw-srh-round-text\" >\r\n {([\r\n { value: \"round-trip\", label: \"Round-trip\" },\r\n { value: \"one-way\", label: \"One-way\" },\r\n { value: \"custom-search\", label: \"Custom Search\" },\r\n { value: \"multi-city\", label: \"Multi-city\" },\r\n ] as const).map((option) => (\r\n <label key={option.value} className=\"sw-tab-checkbox\">\r\n <input\r\n type=\"radio\"\r\n name=\"trip\"\r\n value={option.value}\r\n checked={tripType === option.value}\r\n onChange={(e) => setTripType(e.target.value)}\r\n />\r\n <h5 className=\"sw-tab-content\">{option.label}</h5>\r\n </label>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n <form className={`sw-srh-grid ${tripType === 'multi-city' || tripType === 'custom-search' ? 'sw-srh-mc' : ''}`} onSubmit={handleSubmit}>\r\n {tripType === 'multi-city' || tripType === 'custom-search' ? (\r\n segments.map((segment, index) => renderFlightSegment(index, segment, true))\r\n ) : (\r\n <div className=\"sw-srh-wrap sw-srh-box sw-pos-rel br-left\">\r\n {renderAirportDropdown(0, \"origin\", originDropdownRef, isOriginDropdownOpen, () => setIsOriginDropdownOpen(true))}\r\n <div\r\n className=\"sw-form-swap\"\r\n aria-label=\"Swap origin and destination\"\r\n onClick={() => swapSegmentLocations(0)}\r\n >\r\n <svg width=\"30px\" height=\"30px\" fill=\"var(--body-text)\" viewBox=\"0 0 24 24\"><path fill-rule=\"evenodd\" d=\"M14.6403 5.2477a.7483.7483 0 0 1 1.0612.0084l4.0871 4.1684a.7555.7555 0 0 1 .1573.8195.7502.7502 0 0 1-.6921.4623H6.8305c-.4145 0-.7504-.3373-.7504-.7533 0-.4161.336-.7534.7504-.7534h10.6317L14.632 6.3131a.7556.7556 0 0 1 .0083-1.0654ZM9.368 18.8148a.7483.7483 0 0 1-1.0611-.0084l-4.087-4.1684a.7555.7555 0 0 1-.1574-.8195.7503.7503 0 0 1 .6921-.4623H17.178c.4144 0 .7503.3373.7503.7533 0 .4161-.3359.7534-.7503.7534H6.5463l2.8301 2.8865a.7555.7555 0 0 1-.0083 1.0654Z\" clip-rule=\"evenodd\"></path></svg>\r\n </div>\r\n {renderAirportDropdown(0, \"destination\", destinationDropdownRef, isDestinationDropdownOpen, () => setIsDestinationDropdownOpen(true))}\r\n </div>\r\n )}\r\n {(tripType === 'round-trip' || tripType === 'one-way') && (\r\n <div className=\"sw-srh-wrap sw-pos-rel \">\r\n {tripType === 'round-trip' ? (\r\n <>\r\n <div style={{ cursor: 'pointer' }} onClick={() => { dateRangeCalendarRef.current?.show?.(); mobileDateRangeCalendarRef.current?.show?.(); }} className=\"sw-form-field sw-com-cal\">\r\n <div><label>Departure</label><p>{segments[0]?.dateRange?.[0]?.toLocaleDateString('en-GB', { day: '2-digit', month: 'short', year: 'numeric' })}</p></div>\r\n <Calendar\r\n numberOfMonths={2}\r\n ref={dateRangeCalendarRef}\r\n id=\"dateRange\"\r\n appendTo=\"self\"\r\n selectionMode=\"range\"\r\n value={segments[0]?.dateRange ?? null}\r\n minDate={new Date()}\r\n onChange={(e) => {\r\n const range = e.value as (Date | null)[] | null;\r\n setSegments(prev => {\r\n const u = [...prev];\r\n if (!u[0]) return prev;\r\n u[0] = {\r\n ...u[0],\r\n dateRange: range,\r\n departureDate: range?.[0] ?? new Date(),\r\n returnDate: range?.[1] ?? new Date()\r\n };\r\n return u;\r\n });\r\n if (range?.[0] && range?.[1]) setTimeout(() => { dateRangeCalendarRef.current?.hide?.(); }, 150);\r\n }}\r\n dateFormat=\"dd M yy\"\r\n placeholder=\"Select date range\"\r\n className=\"p-inputtext-sm tfsw-calendar-input MobileHide\"\r\n />\r\n <Calendar\r\n numberOfMonths={10}\r\n ref={mobileDateRangeCalendarRef}\r\n id=\"dateRangeMobile\"\r\n appendTo=\"self\"\r\n selectionMode=\"range\"\r\n value={segments[0]?.dateRange ?? null}\r\n minDate={new Date()}\r\n onChange={(e) => {\r\n const range = e.value as (Date | null)[] | null;\r\n setSegments(prev => {\r\n const u = [...prev];\r\n if (!u[0]) return prev;\r\n u[0] = {\r\n ...u[0],\r\n dateRange: range,\r\n departureDate: range?.[0] ?? new Date(),\r\n returnDate: range?.[1] ?? new Date()\r\n };\r\n return u;\r\n });\r\n }}\r\n dateFormat=\"dd M yy\"\r\n placeholder=\"Select date range\"\r\n className=\"p-inputtext-sm tfsw-calendar-input MobileShow\"\r\n headerTemplate={() => (\r\n <div className=\"mobileHead MobileShow\">\r\n <a type=\"button\" onClick={(e) => { e.stopPropagation(); mobileDateRangeCalendarRef.current?.hide?.(); }}>\r\n <svg width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M19 5L5 19\" stroke=\"black\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"></path><path d=\"M5 5L19 19\" stroke=\"black\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"></path></svg>\r\n </a>\r\n <h4>Departure</h4>\r\n </div>\r\n )}\r\n footerTemplate={() => (\r\n <div className=\"mobileFooter MobileShow\">\r\n <button\r\n type=\"button\"\r\n className=\"sw-confirm-btn\"\r\n onClick={(e) => { e.stopPropagation(); mobileDateRangeCalendarRef.current?.hide?.(); }}\r\n >\r\n Confirm\r\n </button>\r\n </div>\r\n )}\r\n />\r\n </div>\r\n <div style={{ cursor: 'pointer' }} className=\"sw-form-field sw-com-cal\" onClick={() => { dateRangeCalendarRef.current?.show?.(); mobileDateRangeCalendarRef.current?.show?.(); }}>\r\n <div><label>Return</label><p>{(segments[0]?.dateRange?.[1] ?? segments[0]?.dateRange?.[0])?.toLocaleDateString('en-GB', { day: '2-digit', month: 'short', year: 'numeric' })}</p></div>\r\n </div>\r\n </>\r\n ) : (\r\n <>\r\n <div\r\n className=\"sw-form-field sw-pos-rel sw-com-cal\"\r\n style={{ cursor: 'pointer' }}\r\n onClick={() => segmentCalendarRefs.current[0]?.show?.()}\r\n >\r\n <label>Departure</label>\r\n <p>{formatDisplayDate(segments[0]?.departureDate)}</p>\r\n <Calendar\r\n numberOfMonths={2}\r\n ref={(el) => { segmentCalendarRefs.current[0] = el; }}\r\n value={segments[0]?.departureDate ?? null}\r\n onChange={(e) => {\r\n const raw = e.value as Date | string | null;\r\n const nextDate = raw instanceof Date ? raw : (typeof raw === \"string\" ? new Date(raw) : null);\r\n handleSegmentFieldChange(\r\n 0,\r\n \"departureDate\",\r\n nextDate && !isNaN(nextDate.getTime()) ? nextDate : null\r\n );\r\n }}\r\n appendTo=\"self\"\r\n minDate={new Date()}\r\n dateFormat=\"dd M yy\"\r\n className=\"p-inputtext-sm tfsw-calendar-input MobileHide\"\r\n />\r\n <Calendar\r\n numberOfMonths={10}\r\n ref={(el) => { segmentCalendarRefs.current[0] = el; }}\r\n value={segments[0]?.departureDate ?? null}\r\n onChange={(e) => {\r\n const raw = e.value as Date | string | null;\r\n const nextDate = raw instanceof Date ? raw : (typeof raw === \"string\" ? new Date(raw) : null);\r\n handleSegmentFieldChange(\r\n 0,\r\n \"departureDate\",\r\n nextDate && !isNaN(nextDate.getTime()) ? nextDate : null\r\n );\r\n }}\r\n appendTo=\"self\"\r\n minDate={new Date()}\r\n dateFormat=\"dd M yy\"\r\n className=\"p-inputtext-sm tfsw-calendar-input MobileShow\"\r\n headerTemplate={() => (\r\n <div className=\"mobileHead MobileShow\">\r\n <a type=\"button\" onClick={(e) => { e.stopPropagation(); segmentCalendarRefs.current[0]?.hide?.(); }}>\r\n <svg width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M19 5L5 19\" stroke=\"black\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"></path><path d=\"M5 5L19 19\" stroke=\"black\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"></path></svg>\r\n </a>\r\n <h4>Departure</h4>\r\n </div>\r\n )}\r\n footerTemplate={() => (\r\n <div className=\"mobileFooter MobileShow\">\r\n <button\r\n type=\"button\"\r\n className=\"sw-confirm-btn\"\r\n onClick={(e) => { e.stopPropagation(); segmentCalendarRefs.current[0]?.hide?.(); }}\r\n >\r\n Confirm\r\n </button>\r\n </div>\r\n )}\r\n />\r\n </div>\r\n <div className=\"sw-form-field sw-pos-rel sw-com-cal sw-add-return-label\" style={{ cursor: 'pointer' }} onClick={() => { setTripType('round-trip'); setTimeout(() => document.getElementById('dateRange')?.querySelector('input')?.focus?.(), 100); }}>\r\n <label>Add return</label>\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n )}\r\n {(tripType === 'multi-city' || tripType === 'custom-search') && (\r\n <div className=\"sw-srh-mc-foot\">\r\n {segments.length < getMaxSegments() && (\r\n <button type=\"button\" className=\"sw-srh-add-btn\" onClick={addFlightSegment}>\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path fill=\"none\" d=\"M0 0h16v16H0z\"></path><path d=\"M15 7H9V1H7v6H1v2h6v6h2V9h6z\"></path>\r\n </svg>\r\n Add Another Flight\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n <div className=\"sw-form-field sw-traveller sw-pos-rel\">\r\n <label htmlFor=\"rooms\">Travellers and Class</label>\r\n <div className=\"sw-custom-dropdown\" ref={roomsGuestsMenuRef}>\r\n <div\r\n className=\"sw-custom-dropdown-trigger\"\r\n onClick={() => setIsRoomsGuestsMenuOpen(!isRoomsGuestsMenuOpen)}\r\n >\r\n <span>\r\n {(segments[0]?.adultCount ?? 0) + (segments[0]?.childCount ?? 0) + (segments[0]?.infantCount ?? 0)} Traveller{((segments[0]?.adultCount ?? 0) + (segments[0]?.childCount ?? 0) + (segments[0]?.infantCount ?? 0)) !== 1 ? 's' : ''}, {segments[0]?.travelerClass ?? 'Economy'}\r\n </span>\r\n </div>\r\n {isRoomsGuestsMenuOpen && (\r\n <div className=\"sw-rooms-guests-menu\">\r\n <div className=\"mobileHead MobileShow\">\r\n <a type=\"button\" onClick={(e) => { e.stopPropagation(); setIsRoomsGuestsMenuOpen(false); }}>\r\n <svg width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M19 5L5 19\" stroke=\"black\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"></path><path d=\"M5 5L19 19\" stroke=\"black\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"></path></svg>\r\n </a>\r\n <h4>Number of Travellers</h4>\r\n </div>\r\n <h3 className=\"sw-rooms-guests-title\">Number of Travellers\r\n </h3>\r\n <div className=\"sw-rooms-guests-content\">\r\n <div className=\"sw-srh-pax\">\r\n <div className=\"sw-srh-common-adult\"><h3>Adults</h3><p>Age (12+)</p></div>\r\n <div className=\"sw-srh-button-wrapper\">\r\n {[1, 2, 3, 4, 5, 6, 7, 8, 9].map((count) => {\r\n const childCount = segments[0]?.childCount ?? 0;\r\n const infantCount = segments[0]?.infantCount ?? 0;\r\n const isDisabled = (count + childCount) > 9;\r\n \r\n return (\r\n <button \r\n key={count}\r\n type=\"button\"\r\n className={`sw-en-font ${(segments[0]?.adultCount ?? 0) === count ? 'sw-active-button' : ''} ${isDisabled ? 'disabled' : ''}`}\r\n disabled={isDisabled}\r\n onClick={() => {\r\n const newChildCount = Math.min(childCount, 9 - count);\r\n setSegments(prev => {\r\n const updated = [...prev];\r\n if (!updated[0]) return prev;\r\n updated[0] = {\r\n ...updated[0],\r\n adultCount: count,\r\n childCount: newChildCount,\r\n infantCount: Math.min(infantCount, count)\r\n };\r\n return updated;\r\n });\r\n }}\r\n >\r\n {count}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n <div className=\"sw-srh-pax\">\r\n <div className=\"sw-srh-common-adult\"><h3>Child</h3><p>Age (2-11)</p></div>\r\n <div className=\"sw-srh-button-wrapper\">\r\n {[0, 1, 2, 3, 4, 5, 6, 7, 8].map((count) => {\r\n const adultCount = segments[0]?.adultCount ?? 0;\r\n const isDisabled = (adultCount + count) > 9;\r\n \r\n return (\r\n <button \r\n key={count}\r\n type=\"button\"\r\n className={`sw-en-font ${(segments[0]?.childCount ?? 0) === count ? 'sw-active-button' : ''} ${isDisabled ? 'disabled' : ''}`}\r\n disabled={isDisabled}\r\n onClick={() => handleTravellerChange(\"childCount\", count)}\r\n >\r\n {count}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n <div className=\"sw-srh-pax\">\r\n <div className=\"sw-srh-common-adult\"><h3>Infant</h3><p>Under 2 years</p></div>\r\n <div className=\"sw-srh-button-wrapper\">\r\n {[0, 1, 2, 3, 4, 5, 6, 7, 8, 9].map((count) => {\r\n const adultCount = segments[0]?.adultCount ?? 0;\r\n const isDisabled = count > adultCount;\r\n \r\n return (\r\n <button \r\n key={count}\r\n type=\"button\"\r\n className={`sw-en-font ${(segments[0]?.infantCount ?? 0) === count ? 'sw-active-button' : ''} ${isDisabled ? 'disabled' : ''}`}\r\n disabled={isDisabled}\r\n onClick={() => handleTravellerChange(\"infantCount\", count)}\r\n >\r\n {count}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n <h3 className=\"sw-rooms-guests-title\">Travel Class\r\n </h3>\r\n <div className=\"sw-srh-class\">\r\n {['Economy', 'Business', 'First Class', 'Premium Economy'].map((classOption) => (\r\n <label key={classOption} className=\"sw-tab-checkbox\">\r\n <input \r\n type=\"radio\" \r\n name=\"travel-class\" \r\n checked={(segments[0]?.travelerClass ?? 'Economy') === classOption}\r\n onChange={() => handleTravellerChange(\"travelerClass\", classOption)}\r\n />\r\n <span className=\"sw-tab-content\">\r\n {classOption}\r\n </span>\r\n </label>\r\n ))}\r\n </div>\r\n <div className=\"sw-rooms-guests-footer\">\r\n <div></div>\r\n <div className=\"sw-rooms-guests-cta\">\r\n <button\r\n type=\"button\"\r\n className=\"sw-reset-button\"\r\n onClick={() => {\r\n setSegments(prev => {\r\n const updated = [...prev];\r\n if (!updated[0]) return prev;\r\n updated[0] = { ...updated[0], adultCount: 1, childCount: 0, infantCount: 0, travelerClass: 'Economy' };\r\n return updated;\r\n });\r\n }}\r\n >\r\n Reset\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"sw-apply-button\"\r\n onClick={() => setIsRoomsGuestsMenuOpen(false)}\r\n >\r\n Apply\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n <button type=\"submit\" className=\"sw-search-button br-right\">\r\n <span className=\"pi pi-search\" aria-hidden=\"true\" />\r\n Search\r\n </button>\r\n </form>\r\n <div className=\"sw-advanced-search-options\">\r\n <Accordion>\r\n <AccordionTab header=\"Advanced Search options\">\r\n <div className=\"sw-fsrh-adv-cont\">\r\n <AutoComplete\r\n value={selectedAirlines}\r\n suggestions={airlineSuggestions}\r\n completeMethod={(e) => {\r\n const query = e.query ?? \"\";\r\n setAirlineQuery(query);\r\n triggerSearchAirline(query);\r\n }}\r\n onChange={(e) => {\r\n const next = (e.value ?? []) as AirlineOption[];\r\n if (next.length > 3) {\r\n setAirlineLimitError(\"You can select up to 3 airlines.\");\r\n return;\r\n }\r\n setAirlineLimitError(null);\r\n setSelectedAirlines(next);\r\n setAdvancedOptions(prev => ({\r\n ...prev,\r\n preferredAirlineList: next.map((item) => item.airline_code)\r\n }));\r\n }}\r\n field=\"airline_name\"\r\n multiple\r\n forceSelection\r\n placeholder=\"Preferred airline\"\r\n />\r\n {airlineLimitError && (\r\n <small style={{ color: \"var(--sw-error)\" }}>\r\n {airlineLimitError}\r\n </small>\r\n )}\r\n <div className=\"sw-fsrh-chk-main\">\r\n <label className=\"sw-material-checkbox\">\r\n <input \r\n type=\"checkbox\" \r\n checked={advancedOptions.isRefundable}\r\n onChange={(e) => setAdvancedOptions(prev => ({ ...prev, isRefundable: e.target.checked }))}\r\n />\r\n <span className=\"sw-checkmark\"></span> \r\n Refundable\r\n </label>\r\n <label className=\"sw-material-checkbox\">\r\n <input \r\n type=\"checkbox\" \r\n checked={advancedOptions.isBaggage}\r\n onChange={(e) => setAdvancedOptions(prev => ({ ...prev, isBaggage: e.target.checked }))}\r\n />\r\n <span className=\"sw-checkmark\"></span> \r\n Baggage only \r\n </label>\r\n <label className=\"sw-material-checkbox\">\r\n <input \r\n type=\"checkbox\" \r\n checked={advancedOptions.isDirectFlights}\r\n onChange={(e) => setAdvancedOptions(prev => ({ ...prev, isDirectFlights: e.target.checked }))}\r\n />\r\n <span className=\"sw-checkmark\"></span> \r\n Direct Flights \r\n </label>\r\n </div>\r\n </div>\r\n </AccordionTab>\r\n </Accordion>\r\n </div>\r\n </div>\r\n </div>\r\n </PrimeReactProvider>\r\n )\r\n}\r\n\r\n","export const flightSearchWidgetStyles = `\r\n.sw-container {\r\n --sw-font-family: Montserrat, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\r\n --sw-en-font-family: Arial, sans-serif;\r\n --sw-label-color: #66797F;\r\n --sw-body-text: #0B1215;\r\n --sw-btn-radius: 8px;\r\n --sw-radius: var(--sw-size-md-1);\r\n --sw-primary-btn: var(--primary);\r\n --sw-primary-button-text: #ffffff;\r\n --sw-button-primary-border: var(--primary);\r\n --sw-form-border: #d8dcde;\r\n --sw-white: #ffffff;\r\n --sw-gray: #999;\r\n --sw-error: #f60b0b;\r\n --sw-widget-bg: #f5f5f8;\r\n --sw-widget-font-size: 1.4rem;\r\n --sw-widget-z-index-base: 1000;\r\n --sw-widget-transition: all 0.2s ease;\r\n --sw-widget-shadow: 0 var(--sw-size-sm) 8px rgba(0, 0, 0, 0.1);\r\n --sw-widget-shadow-hover: 0 4px var(--sw-size-md-1) rgba(0, 0, 0, 0.15);\r\n --sw-space-sm: 2px;\r\n --sw-space-md: 10px;\r\n --sw-space-lg: 20px;\r\n --sw-size-sm: 2px;\r\n --sw-size-md: 10px;\r\n --sw-size-md-1: 12px;\r\n --sw-size-md-2: 14px;\r\n --sw-size-md-3: 16px;\r\n --sw-size-md-4: 18px;\r\n --sw-size-lg: 20px;\r\n}\r\n.sw-container {\r\n contain: layout;\r\n position: relative;\r\n display: block;\r\n width: 100%;\r\n min-width: 1240px;\r\n margin: 0;\r\n padding: 0;\r\n box-sizing: border-box;\r\n color: var(--sw-body-text);\r\n font-family: var(--sw-font-family);\r\n font-size: var(--sw-widget-font-size);\r\n font-weight: 400;\r\n line-height: 1.5;\r\n -webkit-font-smoothing: antialiased;\r\n -moz-osx-font-smoothing: grayscale;\r\n -webkit-tap-highlight-color: transparent;\r\n background: var(--sw-widget-bg);\r\n *,\r\n *::before,\r\n *::after {\r\n box-sizing: border-box;\r\n }\r\n}\r\n.sw-container button,\r\n.sw-container input {\r\n font-family: var(--sw-font-family);\r\n}\r\n.sw-container h1,\r\n.sw-container h2,\r\n.sw-container h3,\r\n.sw-container h4,\r\n.sw-container h5,\r\n.sw-container h6,\r\n.sw-container p {\r\n display: block;\r\n margin: 0;\r\n color: inherit;\r\n font-family: var(--sw-font-family);\r\n font-weight: normal;\r\n line-height: 1.4;\r\n}\r\n.sw-container h1 {\r\n font-size: 22px;\r\n}\r\n.sw-container h2 {\r\n font-size: 20px;\r\n}\r\n.sw-container h3 {\r\n font-size: 18px;\r\n}\r\n.sw-container h4 {\r\n font-size: 16px;\r\n}\r\n.sw-container h5 {\r\n font-size: 14px;\r\n}\r\n.sw-container h6,\r\n.sw-container small {\r\n font-size: 12px;\r\n}\r\n.sw-container .sw-fw500 {\r\n font-weight: 500;\r\n}\r\n.sw-container .sw-flex {\r\n display: flex;\r\n}\r\n.sw-container .sw-align-center {\r\n display: flex;\r\n align-items: center;\r\n}\r\n.sw-container .sw-gap-5 {\r\n gap: 5px;\r\n}\r\n.sw-container .sw-gap-15 {\r\n gap: 15px;\r\n}\r\n.sw-container .sw-justify-between {\r\n justify-content: space-between;\r\n}\r\n.sw-container .enFont{\r\n font-family: var(--sw-en-font-family);\r\n}\r\n.sw-container .sw-text-ellipsis {\r\n display: -webkit-box;\r\n overflow: hidden;\r\n -webkit-box-orient: vertical;\r\n text-overflow: ellipsis;\r\n}\r\n.sw-container .sw-text-label {\r\n color: var(--sw-label-color);\r\n}\r\n.sw-booking-form {\r\n position: relative;\r\n display: grid;\r\n grid-template-columns: 1fr repeat(4, minmax(0, 1fr)) minmax(80px, 0.8fr);\r\n gap: var(--sw-space-sm);\r\n min-height: 55px;\r\n min-width: 0; \r\n border-radius: var(--sw-radius);\r\n overflow: visible; \r\n}\r\n.sw-card-box {\r\n position: relative;\r\n display: block;\r\n padding: 20px;\r\n background-color: var(--sw-white);\r\n border-radius: var(--sw-radius);\r\n}\r\n.sw-card-box .br-right{\r\n border-top-right-radius: var(--sw-radius);\r\n border-bottom-right-radius: var(--sw-radius);\r\n}\r\n.sw-card-box .br-left{\r\n border-top-left-radius: var(--sw-radius);\r\n border-bottom-left-radius: var(--sw-radius);\r\n}\r\n.sw-com-cal .p-disabled{\r\n opacity: 0.3;\r\n}\r\n.sw-form-field {\r\n display: flex;\r\n flex-direction: column;\r\n flex: 1 1 auto; \r\n gap: 3px;\r\n padding: 10px 15px;\r\n background-color: #f8f8f8;\r\n min-width: 0; \r\n overflow: visible; \r\n}\r\n.sw-form-field label {\r\n display: block;\r\n width: 100%;\r\n margin: 0;\r\n padding: 0;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n color: var(--sw-label-color);\r\n font-size: 12px;\r\n font-weight: 500;\r\n -webkit-box-orient: vertical;\r\n text-overflow: ellipsis;\r\n text-align: initial;\r\n}\r\n.p-button-label {\r\n flex: unset;\r\n}\r\n.sw-form-field input,\r\n.sw-form-field .p-inputtext {\r\n display: block;\r\n width: 100%;\r\n margin: 0;\r\n padding: 0;\r\n border: 0;\r\n border-radius: 0;\r\n outline: none;\r\n background: transparent;\r\n box-shadow: none;\r\n color: var(--sw-body-text);\r\n font-size: 14px;\r\n font-weight: 500;\r\n}\r\n.sw-form-field input::placeholder,\r\n.sw-form-field .p-inputtext::placeholder {\r\n color: var(--sw-label-color) !important;\r\n}\r\n.sw-form-swap {\r\n position: absolute;\r\n top: 50%;\r\n inset-inline-end: 50%;\r\n z-index: 2;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 3px;\r\n border: 1px solid var(--sw-form-border);\r\n border-radius: 50%;\r\n background-color: #fff;\r\n cursor: pointer;\r\n transform: translate(-50%, -50%);\r\n}\r\n.sw-srh-wrap.sw-srh-box.sw-pos-rel .sw-form-field.sw-pos-rel:last-child {\r\npadding-inline-start: 25px;\r\n}\r\n.sw-custom-dropdown {\r\n display: block;\r\n width: 100%;\r\n}\r\n.sw-custom-dropdown-trigger {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n flex: 1 1 auto; \r\n width: 100%;\r\n min-width: 0; \r\n margin: 0;\r\n padding: 0;\r\n border: 0;\r\n outline: none;\r\n background: transparent;\r\n cursor: pointer;\r\n color: var(--sw-body-text);\r\n font-size: 14px;\r\n font-weight: 500;\r\n}\r\n.sw-custom-dropdown-trigger .sw-placeholder {\r\n color: var(--sw-label-color);\r\n}\r\n.sw-dropdown-arrow {\r\n margin-left: 8px;\r\n color: var(--sw-label-color);\r\n font-size: 10px;\r\n transition: transform 0.2s ease;\r\n}\r\n.sw-dropdown{\r\n position: absolute;\r\n top: calc(100% + 5px);\r\n left: 0;\r\n right: 0;\r\n z-index: calc(var(--sw-widget-z-index-base) + 5);\r\n display: block; \r\n visibility: visible; \r\n opacity: 1; \r\n}\r\n.sw-dropdown,\r\n.p-autocomplete-panel {\r\n width: 380px;\r\n max-height: 310px;\r\n margin: 0;\r\n padding: 0;\r\n overflow: auto;\r\n overflow-x: hidden;\r\n background: var(--sw-white);\r\n border: 1px solid var(--sw-form-border);\r\n border-radius: var(--sw-radius);\r\n box-shadow: var(--sw-widget-shadow);\r\n}\r\n.sw-dropdown::-webkit-scrollbar {\r\n display: none;\r\n}\r\n.sw-dropdown-list-card,\r\n.sw-dropdown-list-box,\r\n.p-autocomplete-item {\r\n display: flex;\r\n align-items: center;\r\n gap: 15px;\r\n margin: 0 20px;\r\n padding: 10px 0;\r\n cursor: pointer;\r\n font-family: var(--sw-font-family);\r\n}\r\n.p-autocomplete-item{\r\n font-size: 14px;\r\n font-weight: 400;\r\n}\r\n.p-autocomplete-item:hover{\r\n background-color: var(--primary-light);\r\n}\r\n.sw-dropdown-list-box {\r\n display: flex;\r\n justify-content: space-between;\r\n}\r\n.sw-dropdown-list-card {\r\n display: grid;\r\n grid-template-columns: 45px auto;\r\n}\r\n.sw-dropdown-item-badge {\r\n display: grid;\r\n place-items: center;\r\n width: fit-content;\r\n height: unset;\r\n margin: 0;\r\n padding: 4px 8px;\r\n background-color: #f4f5f5;\r\n border-radius: 4px;\r\n font-weight: 500;\r\n}\r\n.sw-dropdown-list {\r\n display: block;\r\n margin: 0;\r\n padding: 0;\r\n list-style: none;\r\n}\r\n.sw-dropdown-list-item {\r\n display: block;\r\n margin: 0;\r\n padding: 0;\r\n cursor: pointer;\r\n color: var(--sw-body-text);\r\n font-size: 14px;\r\n transition: background-color 0.2s ease;\r\n}\r\n.sw-current {\r\n font-weight: 500;\r\n}\r\n.sw-en-font {\r\n font-family: Arial, sans-serif; \r\n}\r\n.sw-bg-color-loc {\r\n color: var(--primary);\r\n}\r\n.sw-scale-rotate {\r\n transition: transform 0.2s ease;\r\n}\r\n.sw-custom-dropdown-item:hover {\r\n background-color: var(--secondary-light);\r\n}\r\n.sw-custom-dropdown-item:first-child {\r\n border-top-left-radius: var(--sw-btn-radius);\r\n border-top-right-radius: var(--sw-btn-radius);\r\n}\r\n.sw-custom-dropdown-item:last-child {\r\n border-bottom-left-radius: var(--sw-btn-radius);\r\n border-bottom-right-radius: var(--sw-btn-radius);\r\n}\r\n.sw-rooms-guests-menu {\r\n position: absolute;\r\n top: 100%;\r\n right: 0;\r\n z-index: var(--sw-widget-z-index-base);\r\n display: block;\r\n width: 75%;\r\n margin-top: 4px;\r\n padding: 20px;\r\n background: var(--sw-white);\r\n border: 1px solid var(--sw-form-border);\r\n border-radius: var(--sw-radius);\r\n box-shadow: var(--sw-widget-shadow);\r\n}\r\n.sw-pos-rel {\r\n position: relative;\r\n}\r\n.sw-rooms-guests-title {\r\n margin: 0 0 15px 0 !important;\r\n font-size: 16px !important;\r\n font-weight: 500 !important;\r\n}\r\n.sw-room-section {\r\n display: grid;\r\n grid-template-columns: 1.2fr 3fr 4fr 50px;\r\n align-items: center;\r\n padding: 10px 0;\r\n}\r\n.sw-pb0 {\r\n padding-bottom: 0;\r\n}\r\n.sw-room-section:last-of-type {\r\n margin-bottom: 15px;\r\n}\r\n.sw-room-header {\r\n display: flex;\r\n align-items: center;\r\n gap: 5px;\r\n color: var(--primary);\r\n font-size: 14px;\r\n font-weight: 500;\r\n}\r\n.sw-room-controls-child {\r\n display: grid;\r\n grid-template-columns: repeat(4, minmax(0, 1fr));\r\n gap: var(--sw-space-lg);\r\n min-width: 0; \r\n}\r\n.sw-room-controls-child .p-dropdown {\r\n padding: 10px;\r\n border: 1px solid var(--sw-form-border);\r\n border-radius: var(--sw-radius);\r\n}\r\n.sw-room-controls-child .p-dropdown-item {\r\n padding: 10px;\r\n font-size: 14px;\r\n}\r\n.sw-room-controls-child .p-dropdown-panel {\r\n background: var(--sw-white);\r\n border: 1px solid var(--sw-form-border);\r\n border-radius: var(--sw-btn-radius);\r\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\r\n}\r\n.sw-room-controls-group {\r\n display: grid;\r\n grid-template-columns: repeat(2, minmax(0, 1fr));\r\n justify-content: center;\r\n gap: var(--sw-space-md);\r\n min-width: 0; \r\n}\r\n.sw-room-control-item {\r\n display: flex;\r\n flex-direction: column;\r\n flex: 1 1 auto; \r\n justify-content: space-between;\r\n gap: var(--sw-space-sm);\r\n min-width: 0; \r\n}\r\n.sw-room-control-label {\r\n color: var(--sw-body-text);\r\n font-size: 14px;\r\n font-weight: 400;\r\n}\r\n.sw-room-control-buttons {\r\n display: grid;\r\n grid-template-columns: 36px 40px 36px;\r\n align-items: center;\r\n overflow: hidden;\r\n}\r\n.sw-count-button {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 36px;\r\n height: 36px;\r\n margin: 0;\r\n padding: 0;\r\n border: none;\r\n border-radius: 50%;\r\n background: var(--primary);\r\n cursor: pointer;\r\n color: var(--sw-white);\r\n font-size: 20px;\r\n font-weight: 500;\r\n transition: var(--sw-widget-transition);\r\n}\r\n.sw-count-button:focus-visible {\r\n outline: none;\r\n}\r\n.sw-count-button.sw-disabled {\r\n opacity: 0.6;\r\n cursor: not-allowed;\r\n}\r\n.sw-count-button:disabled {\r\n cursor: not-allowed;\r\n}\r\n.sw-count-value {\r\n min-width: 30px;\r\n text-align: center;\r\n color: var(--sw-body-text);\r\n font-size: 16px;\r\n font-weight: 500;\r\n}\r\n.sw-add-room-button {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n width: auto;\r\n height: 40px;\r\n margin: 0 !important;\r\n padding: 1rem;\r\n border: 1px solid var(--primary);\r\n border-radius: var(--sw-radius);\r\n background-color: transparent;\r\n cursor: pointer;\r\n color: var(--primary);\r\n font-size: 14px;\r\n font-weight: 500;\r\n}\r\n.sw-rooms-guests-cta {\r\n display: flex;\r\n gap: 10px;\r\n}\r\n.sw-rooms-guests-footer {\r\n display: flex;\r\n justify-content: space-between;\r\n gap: 10px;\r\n margin-top: 15px;\r\n padding-top: 15px;\r\n border-top: 1px solid var(--sw-form-border);\r\n}\r\n.sw-reset-button {\r\n padding: 10px 20px;\r\n border: 1px solid var(--primary);\r\n border-radius: var(--sw-btn-radius);\r\n background: transparent;\r\n cursor: pointer;\r\n color: var(--primary);\r\n font-size: 14px;\r\n font-weight: 500;\r\n transition: all 0.2s ease;\r\n}\r\n.sw-apply-button {\r\n padding: 10px 20px;\r\n border: 1px solid var(--sw-button-primary-border);\r\n border-radius: var(--sw-btn-radius);\r\n background: var(--sw-primary-btn);\r\n cursor: pointer;\r\n color: var(--sw-primary-button-text);\r\n font-size: 14px;\r\n font-weight: 500;\r\n transition: all 0.2s ease;\r\n}\r\n.sw-search-button,\r\n.sw-search-button.p-button {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 10px;\r\n width: auto;\r\n height: 100%;\r\n min-height: 56px;\r\n margin: 0;\r\n padding: 0 15px;\r\n border: 1px solid var(--sw-button-primary-border);\r\n background-color: var(--sw-primary-btn);\r\n cursor: pointer;\r\n color: var(--sw-primary-button-text);\r\n font-size: 16px;\r\n font-weight: 400;\r\n transition: var(--sw-widget-transition);\r\n}\r\n.sw-search-button:focus-visible,\r\n.sw-search-button.p-button:focus-visible {\r\n outline: 2px solid var(--primary);\r\n outline-offset: 2px;\r\n}\r\n.sw-search-button .p-button-icon-left {\r\n margin: 0;\r\n}\r\n.sw-search-button svg,\r\n.sw-search-button .p-button-icon {\r\n flex-shrink: 0;\r\n}\r\n.sw-com-cal .p-calendar .p-datepicker { \r\n top: 100%;\r\n display: block;\r\n min-width: 100%;\r\n margin-top: 5px;\r\n padding: 15px;\r\n background-color: var(--sw-white);\r\n border: 1px solid var(--sw-form-border);\r\n border-radius: var(--sw-radius);\r\n box-shadow: var(--sw-widget-shadow);\r\n}\r\n.sw-srh-wrap {\r\n display: flex;\r\n gap: 2px;\r\n}\r\n.sw-com-cal p{\r\n color: var(--sw-body-text);\r\n font-size: 14px;\r\n font-weight: 500;\r\n}\r\n.sw-com-cal .p-inputtext{\r\n visibility: hidden;\r\n height: 0;\r\n width: 0;\r\n ;\r\n}\r\n.p-datepicker-header {\r\n padding-bottom: 15px;\r\n}\r\n.p-datepicker-prev[style=\"visibility: hidden;\"]::after,\r\n.p-datepicker-next[style=\"visibility: hidden;\"]::after {\r\n visibility: hidden !important;\r\n}\r\n.p-datepicker-prev,\r\n.p-datepicker-next {\r\n cursor: pointer;\r\n\r\n}\r\n.p-datepicker-prev::after,\r\n.p-datepicker-next::after {\r\n content: \"\";\r\n display: block;\r\n width: 14px;\r\n height: 14px;\r\n visibility: visible;\r\n background-image: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'><path fill='%231b1a1f' d='m222.927 580.115 301.354 328.512c24.354 28.708 20.825 71.724-7.883 96.078s-71.724 20.825-96.078-7.883L19.576 559.963a67.9 67.9 0 0 1-13.784-20.022 68 68 0 0 1-5.977-29.488l.001-.063a68.34 68.34 0 0 1 7.265-29.134 68 68 0 0 1 1.384-2.6 67.6 67.6 0 0 1 10.102-13.687L429.966 21.113c25.592-27.611 68.721-29.247 96.331-3.656s29.247 68.721 3.656 96.331L224.088 443.784h730.46c37.647 0 68.166 30.519 68.166 68.166s-30.519 68.166-68.166 68.166z'/></svg>\");\r\n}\r\n.p-datepicker-header button {\r\n margin: 0;\r\n padding: 0 5px;\r\n border: 0;\r\n border-color: var(--sw-white);\r\n outline: none;\r\n background: transparent;\r\n color: var(--sw-body-text);\r\n font-size: 16px;\r\n font-weight: 500;\r\n line-height: 20px;\r\n}\r\n.p-datepicker-header button .p-icon {\r\n display: none;\r\n}\r\n.p-datepicker .p-datepicker-next {\r\n transform: rotate(180deg);\r\n}\r\n.p-datepicker .p-datepicker-header button {\r\n border: 0;\r\n border-color: var(--sw-white);\r\n outline: none;\r\n box-shadow: none !important;\r\n background: transparent;\r\n color: var(--sw-body-text);\r\n font-size: 16px;\r\n font-weight: 500;\r\n line-height: 20px;\r\n}\r\n.p-datepicker .p-datepicker-calendar-container th {\r\n padding: 10px 0;\r\n color: var(--sw-body-text);\r\n font-size: 14px;\r\n font-weight: 400;\r\n line-height: 1.4;\r\n}\r\n.p-datepicker .p-datepicker-calendar-container td {\r\n padding: 0;\r\n}\r\n.p-datepicker .p-datepicker-calendar-container td span {\r\n padding: 10px 0;\r\n border-radius: 0;\r\n font-size: 14px;\r\n width: 45px;\r\n height: 45px;\r\n}\r\n.p-datepicker-group-container .p-datepicker-group:not(:last-child) {\r\n border-inline-end: 1px solid var(--sw-form-border);\r\n padding-inline-end: 10px;\r\n margin-inline-end: 10px;\r\n}\r\n.p-datepicker-other-month span{\r\n opacity: 0;\r\n}\r\n.p-datepicker .p-highlight {\r\n position: relative;\r\n background: var(--primary-light) !important;\r\n color: var(--sw-white) !important;\r\n}\r\n.sw-product-tabs {\r\n position: relative;\r\n z-index: 1;\r\n}\r\n.sw-product-tabs .p-tabview-nav {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 10px;\r\n margin: 0;\r\n padding: 0;\r\n list-style: none;\r\n}\r\n.sw-product-tabs .sw-product-list {\r\n position: relative;\r\n gap: 10px;\r\n padding: 0 10px 10px;\r\n border: 0 !important;\r\n border-radius: 0;\r\n cursor: pointer;\r\n}\r\n.p-tabview-selected .sw-product-list:before {\r\n content: \"\";\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n inset-inline-start: 0;\r\n width: 100%;\r\n border: 2px solid var(--primary) !important;\r\n border-radius: 40px;\r\n}\r\n.p-tabview-ink-bar {\r\n display: none;\r\n}\r\n.sw-advanced-search-options .p-accordion-header-link {\r\n display: flex;\r\n flex-direction: row-reverse;\r\n gap: 10px;\r\n width: fit-content;\r\n margin-top: 15px;\r\n color: var(--sw-body-text);\r\n font-size: 14px;\r\n}\r\n.sw-advanced-search-options .p-toggleable-content {\r\n margin-top: 20px;\r\n}\r\n.sw-advanced-search-options .p-accordion-content .sw-hsrh-advan-cont:not(:last-child) {\r\n margin-bottom: 16px;\r\n}\r\n.sw-advanced-search-options .p-accordion-header-link svg {\r\n transform: rotate(90deg);\r\n}\r\n.sw-advanced-search-options .p-accordion-header-link[aria-expanded=\"true\"] svg {\r\n transform: scale(-1);\r\n}\r\n.sw-material-checkbox {\r\n position: relative;\r\n display: inline-flex;\r\n gap: 10px;\r\n cursor: pointer;\r\n user-select: none;\r\n color: var(--sw-body-text);\r\n font-size: 14px;\r\n}\r\n.sw-material-checkbox input {\r\n display: none;\r\n}\r\n.sw-material-checkbox input:checked + .sw-checkmark {\r\n background-color: var(--primary);\r\n border-color: var(--primary);\r\n}\r\n.sw-material-checkbox input:checked + .sw-checkmark::after {\r\n content: \"\";\r\n position: absolute;\r\n top: 2px;\r\n left: 6px;\r\n display: block;\r\n width: 6px;\r\n height: 11px;\r\n border: solid #fff;\r\n border-width: 0 2px 2px 0;\r\n transform: rotate(45deg);\r\n}\r\n.sw-material-checkbox .sw-checkmark {\r\n position: relative;\r\n display: inline-block;\r\n width: 20px;\r\n min-width: 20px;\r\n height: 20px;\r\n background-color: #fff;\r\n border: 1px solid var(--sw-form-border);\r\n border-radius: 4px;\r\n transition: background-color 0.3s, border-color 0.3s;\r\n}\r\n.sw-material-checkbox .sw-checkmark::after {\r\n content: \"\";\r\n position: absolute;\r\n display: none;\r\n}\r\n.sw-tab-checkbox {\r\n display: flex;\r\n cursor: pointer;\r\n -webkit-user-select: none;\r\n user-select: none;\r\n}\r\n.sw-tab-checkbox input {\r\n display: none;\r\n}\r\n.sw-tab-checkbox input:checked + .sw-tab-content,\r\n.sw-tab-checkbox input[type=radio]:checked + .sw-tab-content {\r\n border: 1px solid var(--primary);\r\n background-color: var(--primary-light);\r\n color: var(--primary);\r\n}\r\n.sw-tab-content {\r\n height: 40px;\r\n padding: 6px 15px;\r\n border: 1px solid var(--sw-form-border);\r\n border-radius: var(--sw-radius);\r\n align-content: center;\r\n}\r\n@media print {\r\n .sw-container {\r\n display: none;\r\n }\r\n}\r\n.sw-dropdown,\r\n.sw-rooms-guests-menu,\r\n.sw-com-cal .p-calendar .p-datepicker {\r\n will-change: transform, opacity;\r\n transform: translateZ(0);\r\n}\r\n.tfsw-calendar-input{\r\n position: absolute;\r\n top: 100%;\r\n inset-inline-start: 0;\r\n}\r\n.sw-dropdown {\r\n -webkit-overflow-scrolling: touch;\r\n scroll-behavior: smooth;\r\n}\r\n.sw-container img {\r\n max-width: 100%;\r\n height: auto;\r\n}\r\n.sw-container svg {\r\n max-width: 100%;\r\n height: auto;\r\n}\r\n.sw-container {\r\n isolation: isolate;\r\n}\r\n.sw-srh-grid {\r\n display: grid;\r\n grid-template-columns: minmax(200px, 2fr) minmax(100px, 1fr) minmax(80px, 0.6fr) minmax(60px, 0.4fr);\r\n gap: var(--sw-space-sm, 2px);\r\n margin-top: 15px;\r\n border-radius: var(--sw-radius);\r\n min-width: 0; \r\n overflow: visible; \r\n}\r\n.sw-srh-wrap .sw-form-field {\r\n flex: 1 1 50%; \r\n min-width: 0; \r\n justify-content: center;\r\n}\r\n.sw-add-return-label label {\r\n color: var(--primary) !important;\r\n}\r\n.sw-srh-main-head {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n margin-bottom: 15px;\r\n}\r\n.sw-srh-head {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n}\r\n.sw-srh-round-text {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n height: 40px;\r\n}\r\n.sw-remove-segment{\r\n fill: var(--primary);\r\n cursor: pointer;\r\n display: grid;\r\n place-content: center;\r\n position: absolute;\r\n z-index: 2;\r\n border-radius: 50%;\r\n inset-inline-end: 12px;\r\n border: 1px solid var(--primary);\r\n width: 22px;\r\n height: 22px;\r\n top: 19px;\r\n svg{\r\n width: 22px;\r\n height: 22px;\r\n }\r\n}\r\n.sw-srh-mc .sw-srh-wrap.sw-srh-box{\r\n position: relative;\r\n}\r\n.sw-srh-mc {\r\n grid-template-columns: 43% 20% 25% 11.5% !important;\r\n min-width: 0; \r\n}\r\n.sw-srh-mc .sw-com-cal .p-inputtext{\r\n visibility: visible !important;\r\n height: auto !important;\r\n width: auto !important;\r\n}\r\n.sw-srh-mc .sw-srh-wrap.sw-pos-rel:nth-child(3){\r\n flex-basis: 30%;\r\n}\r\n.sw-srh-mc .sw-srh-mc-foot {\r\n display: flex;\r\n align-items: flex-end;\r\n width: fit-content;\r\n grid-column-start: 3;\r\n}\r\n.sw-srh-mc .sw-srh-mc-foot button {\r\n display: flex;\r\n align-items: center;\r\n gap: 7px;\r\n margin-inline-start: 5px;\r\n padding: 8px 10px;\r\n border: 1px solid var(--primary);\r\n border-radius: 30px;\r\n background-color: transparent;\r\n color: var(--primary);\r\n font-size: 14px;\r\n}\r\n.sw-srh-mc .sw-srh-mc-foot button svg {\r\n fill: var(--primary);\r\n}\r\n.sw-srh-mc .sw-srh-add-btn {\r\n display: flex;\r\n align-items: center;\r\n gap: 7px;\r\n margin-inline-start: 5px;\r\n padding: 0.8rem 1rem;\r\n border-radius: 30px;\r\n color: var(--primary);\r\n font-size: 1.4rem;\r\n}\r\n.sw-srh-mc .sw-traveller {\r\n grid-row-start: 1;\r\n grid-column-start: 3;\r\n}\r\n.sw-srh-mc button {\r\n grid-row-start: 1;\r\n grid-column-start: 4;\r\n}\r\n.sw-srh-box {\r\n grid-column-start: 1;\r\n}\r\n.p-autocomplete-multiple-container {\r\n width: 100%;\r\n min-width: 270px;\r\n padding: 10px;\r\n padding-inline-end: 2rem;\r\n border: 1px solid var(--sw-form-border);\r\n border-radius: var(--sw-radius);\r\n gap: 0.5rem;\r\n font-size: 14px;\r\n}\r\n.p-autocomplete-multiple-container .p-autocomplete-token {\r\n padding: 5px 8px;\r\n border-radius: 5px;\r\n background: var(--primary-light);\r\n gap: 5px;\r\n color: var(--primary);\r\n}\r\n.p-autocomplete-token .p-autocomplete-token-label{\r\n font-size: 12px;\r\n font-weight: 400;\r\n}\r\n.sw-fsrh-adv-cont {\r\n display: flex;\r\n align-items: center;\r\n gap: 20px;\r\n}\r\n.sw-fsrh-chk-main {\r\n display: flex;\r\n gap: 20px;\r\n font-size: 1.4rem;\r\n font-weight: 400;\r\n}\r\n.sw-srh-pax {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n}\r\n.sw-srh-pax:not(:last-child) {\r\n margin-bottom: 15px;\r\n}\r\n.sw-srh-common-adult {\r\n width: 92px;\r\n}\r\n.sw-srh-pax h3 {\r\n font-size: 14px;\r\n}\r\n.sw-srh-pax p {\r\n color: var(--sw-label-color);\r\n font-size: 12px;\r\n}\r\n.sw-srh-button-wrapper button {\r\n width: 32px;\r\n height: 30px;\r\n margin: 0;\r\n padding: 0;\r\n border: 0;\r\n border-radius: 8px;\r\n background-color: transparent;\r\n font-size: 14px;\r\n font-weight: 400;\r\n}\r\n.sw-srh-button-wrapper button.sw-active-button {\r\n background-color: var(--secondary);\r\n color: var(--sw-white);\r\n}\r\n.sw-traveller .sw-rooms-guests-menu {\r\n width: 500px;\r\n}\r\n.sw-srh-class {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: var(--sw-space-md, 10px);\r\n align-items: stretch; \r\n}\r\n.sw-srh-class .sw-tab-content {\r\n min-width: fit-content; \r\n display: block;\r\n}\r\n.sw-srh-class label {\r\n width: fit-content !important;\r\n}\r\n.sw-srh-class .sw-tab-checkbox input:checked + .sw-tab-content,\r\n.sw-srh-class .sw-tab-checkbox input[type=radio]:checked + .sw-tab-content {\r\n background-color: var(--primary);\r\n color: var(--sw-white);\r\n}\r\n.sw-srh-h-grid {\r\n position: relative;\r\n display: grid;\r\n grid-template-columns: 2.2fr 1.8fr 3fr 1.8fr 1.15fr;\r\n gap: var(--sw-space-sm, 2px);\r\n min-height: 55px;\r\n min-width: 0; \r\n overflow: visible; \r\n border-radius: var(--sw-radius);\r\n}\r\n.sw-srh-loc {\r\n display: block !important;\r\n padding: 15px 0 12px;\r\n border-bottom: 1px solid var(--sw-form-border);\r\n}\r\n.sw-srh-count-wrapper,\r\n.sw-srh-loc {\r\n display: flex;\r\n align-items: center;\r\n gap: 15px;\r\n margin: 0 20px;\r\n cursor: pointer;\r\n}\r\n.sw-hotel-search-form-icon {\r\n display: grid;\r\n place-content: center;\r\n width: 40px;\r\n height: 40px;\r\n background: #f4f5f5;\r\n border-radius: var(--sw-radius);\r\n}\r\n.sw-hotel-search-form-icon.sw-fill {\r\n background: var(--primary-light);\r\n}\r\n.sw-hsrh-advan-cont {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n}\r\n.sw-checkbox-wrap {\r\n cursor: pointer;\r\n}\r\n.sw-checkbox-wrap input {\r\n display: none;\r\n}\r\n.sw-checkbox-wrap input:checked + .sw-star-checkbox {\r\n padding: 8px 12px;\r\n border: 1px solid var(--primary-light);\r\n border-radius: 20px;\r\n background: var(--primary-light);\r\n gap: 5px;\r\n color: var(--primary);\r\n font-size: 14px;\r\n line-height: 1;\r\n}\r\n.sw-checkbox-wrap .sw-star-checkbox {\r\n display: flex;\r\n align-items: center;\r\n gap: 5px;\r\n padding: 8px 12px;\r\n border: 1px solid var(--sw-form-border);\r\n border-radius: 20px;\r\n font-size: 14px;\r\n line-height: 1;\r\n}\r\n.sw-star-checkbox-wrap input:checked + .sw-star-checkbox {\r\n padding: 7px 12px;\r\n border: 1px solid #fcf2e8;\r\n border-radius: 20px;\r\n background: #fcf2e8;\r\n color: #ffae43;\r\n}\r\n.sw-star-checkbox-wrap input:checked + .sw-star-checkbox svg path {\r\n fill: #ffae43;\r\n}\r\n.sw-hsrh-chk-main {\r\n display: flex;\r\n gap: var(--sw-space-md, 10px);\r\n font-size: 1.4rem;\r\n font-weight: 400;\r\n flex-wrap: wrap; \r\n}\r\n.sw-srh-class {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: var(--sw-space-md, 10px);\r\n align-items: stretch; \r\n}\r\n.sw-srh-class .sw-tab-content {\r\n flex: 0 1 auto; \r\n min-width: fit-content; \r\n}\r\n .MobileShow{\r\n display: none;\r\n}\r\n.MobileHide{\r\n display: block;\r\n}\r\n@media screen and (max-width: 768px) {\r\n .MobileShow{\r\n display: block;\r\n }\r\n .MobileHide{\r\n display: none;\r\n }\r\n .sw-container{\r\n min-width: 100% !important;\r\n }\r\n .sw-srh-grid {\r\n grid-template-columns: 100% !important;\r\n }\r\n .sw-srh-wrap{\r\n flex-direction: column;\r\n }\r\n .sw-tab-content{\r\n white-space: nowrap;\r\n }\r\n .sw-srh-main-head{\r\n overflow: auto;\r\n scrollbar-width: none;\r\n -ms-overflow-style: none;\r\n &::-webkit-scrollbar {\r\n display: none;\r\n }\r\n }\r\n .sw-container .sw-form-field {\r\n border-radius: var(--sw-radius);\r\n }\r\n .sw-fsrh-adv-cont{\r\n flex-wrap: wrap;\r\n }\r\n .sw-container .sw-dropdown{\r\n position: fixed;\r\n inset: 0;\r\n height: 100vh;\r\n width: 100%;\r\n max-height: 100vh;\r\n border-radius: 0;\r\n z-index: calc(var(--sw-widget-z-index-base) + 10);\r\n }\r\n .sw-container .mobileHead{\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n border-bottom: 1px;\r\n padding: 15px 10px;\r\n border-bottom: 1px solid var(--sw-form-border);\r\n a{\r\n display: flex;\r\n align-items: center;\r\n }\r\n h4{\r\n font-weight: 500;\r\n line-height: 1;\r\n }\r\n }\r\n .sw-container .sw-srh-wrap.sw-srh-box.sw-pos-rel .sw-form-field.sw-pos-rel:last-child{\r\n padding-inline-start: 15px;\r\n }\r\n .sw-container .p-datepicker-group + .p-datepicker-group .mobileHead {\r\n display: none;\r\n }\r\n .sw-container .sw-form-swap{\r\n inset-inline-end: 0;\r\n width: 45px;\r\n height: 45px;\r\n transform: translate(-50%, -50%) rotate(-90deg);\r\n }\r\n .sw-dropdown .mobileSrgInput{\r\n padding: 15px;\r\n input{\r\n width: 100%;\r\n padding: 15px;\r\n border: 1px solid var(--sw-form-border);\r\n border-radius: var(--sw-btn-radius);\r\n outline: none;\r\n background: var(--sw-white);\r\n box-shadow: none;\r\n font-size: 14px;\r\n font-family: var(--sw-font-family);\r\n color: var(--sw-body-text);\r\n height: 50px;\r\n }\r\n }\r\n .sw-container .sw-dropdown-list-card h5{\r\n font-weight: 400;\r\n }\r\n .sw-container .p-calendar .p-datepicker{\r\n position: fixed !important;\r\n inset: 0 !important;\r\n height: 100vh;\r\n width: 100%;\r\n max-height: 100vh;\r\n overflow: auto;\r\n -webkit-overflow-scrolling: touch;\r\n scroll-behavior: smooth;\r\n padding: 0 !important;\r\n margin-top: 0 !important;\r\n border-radius: 0 !important;\r\n .p-datepicker-group-container{\r\n flex-direction: column;\r\n }\r\n }\r\n .sw-container .p-datepicker-group-container .p-datepicker-group:not(:last-child) {\r\n border-inline-end: 0 ;\r\n padding-inline-end: 0;\r\n margin-inline-end: 0;\r\n }\r\n .sw-com-cal{\r\n .p-datepicker-header{\r\n flex-wrap: wrap;\r\n .mobileHead {\r\n width: 100%;\r\n margin-bottom: 10px;\r\n }\r\n }\r\n .p-datepicker-footer{\r\n position: sticky;\r\n bottom: 0;\r\n z-index: 100;\r\n }\r\n }\r\n .sw-container .mobileFooter{\r\n position: sticky;\r\n bottom: 0;\r\n display: flex;\r\n padding: 15px;\r\n background: var(--sw-white);\r\n border-top: 1px solid var(--sw-form-border);\r\n z-index: 1;\r\n }\r\n .sw-container .mobileFooter .sw-confirm-btn{\r\n width: 100%;\r\n padding: 14px;\r\n background: var(--sw-primary-btn);\r\n color: var(--sw-primary-button-text);\r\n border: 1px solid var(--sw-button-primary-border);\r\n border-radius: var(--sw-btn-radius);\r\n font-size: var(--sw-size-md-3);\r\n font-family: var(--sw-font-family);\r\n font-weight: 600;\r\n cursor: pointer;\r\n text-align: center;\r\n }\r\n .sw-container .p-datepicker .p-datepicker-calendar-container td span{\r\n width: 100%;\r\n margin: 0;\r\n }\r\n .sw-container .sw-traveller .sw-rooms-guests-menu{\r\n width: 100%;\r\n position: fixed;\r\n bottom: 0;\r\n top: 0;\r\n height: 100vh;\r\n padding: 0;\r\n }\r\n .sw-rooms-guests-title{\r\n display: none !important;\r\n }\r\n .sw-rooms-guests-content{\r\n padding: 15px;\r\n }\r\n .sw-rooms-guests-footer{\r\n position: fixed;\r\n bottom: 0;\r\n padding: 15px;\r\n width: 100%;\r\n right: 0;\r\n }\r\n .sw-container .sw-srh-mc{\r\n display: flex;\r\n flex-direction: column;\r\n }\r\n .sw-srh-mc .sw-srh-mc-foot{\r\n margin: 10px 0;\r\n }\r\n .sw-srh-mc .sw-srh-wrap:nth-child(3){\r\n flex-direction: row;\r\n }\r\n .sw-container .sw-search-button{\r\n border-radius: var(--sw-btn-radius);\r\n }\r\n}\r\n`;\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEA,mBAA4E;AAC5E,sBAAyB;AACzB,uBAAwC;AACxC,0BAA6B;AAC7B,iBAAmC;AACnC,uBAA0B;;;ACPnB,IAAM,2BAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/Flight.tsx","../src/flight-search-widget.styles.ts"],"sourcesContent":["export { FlightSearchWidget } from \"./Flight\";\nexport type {\n FlightSearchWidgetProps,\n FlightSearchSegment,\n FlightSearchFormState,\n AirportModel,\n FlightSearchSsoUser,\n FlightSearchEnv,\n} from \"./Flight\";\n","\"use client\";\r\n\r\nimport { useState, useRef, useEffect, useMemo, useCallback, type Ref } from \"react\";\r\nimport { Calendar } from \"primereact/calendar\";\r\nimport { Accordion, AccordionTab } from \"primereact/accordion\";\r\nimport { AutoComplete } from \"primereact/autocomplete\";\r\nimport { PrimeReactProvider } from \"primereact/api\";\r\nimport { JSEncrypt } from \"jsencrypt\";\r\nimport { flightSearchWidgetStyles } from \"./flight-search-widget.styles\";\r\nimport \"./Flight.css\";\r\n/** Airport from search API - matches response: ac, an, cc, cn, ct, etc. */\r\nexport interface AirportModel {\r\n id?: string;\r\n /** Airport code e.g. \"DUB\" */\r\n ac?: string;\r\n /** Airport name e.g. \"Dublin Airport\" */\r\n an?: string;\r\n /** Country code e.g. \"IE\" */\r\n cc?: string;\r\n /** Country name e.g. \"Ireland\" */\r\n cn?: string;\r\n /** City e.g. \"Dublin\" */\r\n ct?: string;\r\n pr?: number;\r\n tp?: number;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface FlightSearchSsoUser {\r\n /** Mandatory: user email */\r\n email: string;\r\n /** Optional: first name */\r\n firstName?: string;\r\n /** Optional: last name */\r\n lastName?: string;\r\n /** Optional: country code / dialing code */\r\n cc?: string;\r\n /** Optional: phone number without country code */\r\n phone?: string;\r\n /** Optional: timestamp – if omitted, widget will inject current time */\r\n ts?: string;\r\n}\r\n\r\n/** Environment for API base URLs. \"dev\" = dev APIs, \"prod\" = production APIs. Defaults to \"dev\". */\r\nexport type FlightSearchEnv = \"dev\" | \"prod\";\r\n\r\nconst API_URLS = {\r\n dev: {\r\n airport: \"https://adminapi-go.dev.futuretravelplatform.com/api\",\r\n airline: \"https://adminapi.dev.futuretravelplatform.com/api\",\r\n },\r\n prod: {\r\n airport: \"https://adminapi-go.futuretravelplatform.com/api\",\r\n airline: \"https://adminapi.futuretravelplatform.com/api\",\r\n },\r\n} as const;\r\n\r\nexport type FlightSearchWidgetProps = {\r\n config?: {\r\n theme?: {\r\n primary?: string;\r\n secondary?: string;\r\n primaryLight?: string;\r\n };\r\n redirectionDomain?: string;\r\n fontName?: string;\r\n /** \"dev\" | \"prod\" – selects API base URLs. Defaults to \"dev\". */\r\n env?: FlightSearchEnv;\r\n };\r\n ssoUser?: FlightSearchSsoUser;\r\n};\r\n/** Single segment in the flight search form (round-trip, one-way, or one leg of multi-city) */\r\nexport interface FlightSearchSegment {\r\n origin: string;\r\n destination: string;\r\n departureDate: Date | null;\r\n returnDate: Date | null;\r\n dateRange: (Date | null)[] | null;\r\n travelerClass: string;\r\n adultCount: number;\r\n childCount: number;\r\n infantCount: number;\r\n}\r\n\r\n/** Main form state: array of segments; works for round-trip, one-way, multi-city, custom-search */\r\nexport interface FlightSearchFormState {\r\n tripType: \"round-trip\" | \"one-way\" | \"multi-city\" | \"custom-search\";\r\n segments: FlightSearchSegment[];\r\n}\r\n\r\ninterface AdvancedOptions {\r\n isDirectFlights: boolean;\r\n isRefundable: boolean;\r\n isBaggage: boolean;\r\n preferredAirlineList: string[];\r\n isFlexiDate: boolean;\r\n isUmrah: boolean;\r\n}\r\n\r\ninterface ItineraryReq {\r\n departureCode: string;\r\n returnCode: string;\r\n departureDate: string;\r\n class: string;\r\n}\r\n\r\ntype DropdownType = \"origin\" | \"destination\";\r\n\r\ninterface PredictiveSearchState {\r\n fromAirport: AirportModel[];\r\n toAirport: AirportModel[];\r\n selectedFromIndex: number;\r\n selectedToIndex: number;\r\n}\r\n\r\ninterface AirlineOption {\r\n airline_code: string;\r\n airline_name: string;\r\n}\r\n\r\nconst normalizeDomainName = (domainName: string): string => {\r\n const trimmed = domainName.trim();\r\n if (!trimmed) return \"\";\r\n if (trimmed.startsWith(\"http://\") || trimmed.startsWith(\"https://\")) {\r\n try {\r\n return new URL(trimmed).hostname;\r\n } catch {\r\n return trimmed.replace(/^https?:\\/\\//, \"\").split(\"/\")[0] ?? \"\";\r\n }\r\n }\r\n return trimmed.split(\"/\")[0] ?? \"\";\r\n};\r\n\r\nconst buildEncryptedToken = (domainName: string): string | null => {\r\n const normalizedDomain = normalizeDomainName(domainName);\r\n if (!normalizedDomain) return null;\r\n const encryptor = new JSEncrypt();\r\n encryptor.setPublicKey(RSA_PUBLIC_KEY);\r\n const payload = `${normalizedDomain}~${new Date().getTime()}`;\r\n const encrypted = encryptor.encrypt(payload);\r\n return typeof encrypted === \"string\" ? encrypted : null;\r\n};\r\n\r\nconst STYLE_ELEMENT_ID = \"tfsw-flight-styles\";\r\nconst PRIMEICONS_LINK_ID = \"tfsw-primeicons\";\r\nconst RSA_PUBLIC_KEY = `-----BEGIN PUBLIC KEY-----\r\nMIICITANBgkqhkiG9w0BAQEFAAOCAg4AMIICCQKCAgB0rRSHGZK/FtK15IRfQxtl\r\ndN5ToPtfXGzTNBe1vGhow5xqp6BLubMKKPwCj3zOJiAm1Ip1VNqqYxWnaL8ZErBF\r\nrErtE0r7kn50QgGgJCpdrWJ4unhaoe1su207d9oY6D6OBH90v1aXA6ZjN7zTJmiq\r\nFJZOOTQE6t/XwNAOphq/B6Lcr1iQSQmSqaMozy4OQ4NvIzNTQn5tcs9qJBMsKFeU\r\ncSp8VK76JBNEqSuEHNmbV2d/IQ5XAqVUiAs34kH2xWRSbBmy0WK3c3QKGzC1MRWM\r\n9JauLN56TKUFOmUSjfWY3caJru6HxsiMTGKnvflXHfgA2aLAPxu72pIHoCTy5Hxj\r\nAUoKM7qXUn/kQj4Ci0M/0LRF4boqd37wpbyVNeXNvqm+dLjxklf/+NHMfNL2Wvb4\r\nekHUVI8nMVPgswIcQ7q/Njf9DC+LA+/duf8m9JDjI3J6r9y1gQugdkLETGzF2Gj1\r\nToU0Pocrg6CFHImqq2z+cOeWnURrV0f0I1UWWGCb79OZxZ5oDjM9uCLRsoe8+Npg\r\nACZNf4AbnM7OUNj5TEYs6t/tUYouvTB7gH452I3EH6KWBl+ZTgCg0RFkOMazNOjn\r\n4J0yfbaPvpVgKzF2WRyn63mTO2tdLRl5s9uqMFhXmCs6IzEqBpxMKL1aS6ONZLDG\r\n5qPtpCPJnUFQEBTVlSO15QIDAQAB\r\n-----END PUBLIC KEY-----`;\r\n\r\n// Public key used exclusively for encrypting SSO user payloads.\r\n// Replace this placeholder with the actual SSO RSA public key.\r\nconst SSO_RSA_PUBLIC_KEY = `-----BEGIN PUBLIC KEY-----\r\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAv+PThexweK9V8axQRaB3\r\nJrhYm/y2JAhED2o7V4Kpi4PpwdkcsVuACwxPt8M51idar/lBNnm12yJAvMnSRAYP\r\nGv+iYCE5VV+XPzUZuu/ho3sARxO3bCSRx9Xk0JZkd0Q7Muvy3Z74N9lML+g4DAHH\r\n1SA+tQnvk2hLwna7vd6pHfmVDROEkTTqv0EF+0cVCUhwrXcEZ7NLrs3BPWLbxzus\r\njlYsutTU0oaCeeag+xX6vbb+LFjDBvxngdlPzApUU0z9T4r/Mqbdb73e2FMrPSHO\r\nrJo+bRQ1+GE0EoFxYTyYVyOrd9bpfUhcc/ziK8Bu2M8lQk9pFs+1DGb1wC1TWklf\r\nZCHX79BPP+tyLFugqmCLm+WprtNl+Cv93VQuwue6m9UATeiWHYrA9uZ0mWHvRPuD\r\nEaXCAvT3JUDqTnuV/mTu8cAr+HWMfB7wQ+XWyi6TVAfQovMawV89Gtk5q7Ep2L89\r\nMShfennamuIRODd7IuDLN24h8laBEKz0lPATsvyS3ITHG+DdwUjU+ptGYGzGI+ps\r\nYadkX8g5DSjQs8JZvCN22ktjGRLCudvS8e0IfgzRe6QQ90NmQ3dmtC4AsatHBeM5\r\nS7wetGyB9NHx52liu+AwZqiiLk8Yf/Y2/4394Z+kE/CYVFnCMEOxRhx/Fs3QRCm2\r\npiJcd0xNaTlQZ4IcB08NBMECAwEAAQ==\r\n-----END PUBLIC KEY-----`;\r\n\r\nconst buildEncryptedSsoUserToken = (user: FlightSearchSsoUser | undefined): string | null => {\r\n if (!user) return null;\r\n\r\n const email = (user.email ?? \"\").trim();\r\n if (!email) return null;\r\n\r\n const encryptor = new JSEncrypt();\r\n encryptor.setPublicKey(SSO_RSA_PUBLIC_KEY);\r\n\r\n const payloadUser: FlightSearchSsoUser = {\r\n ...user,\r\n email,\r\n ts: user.ts ?? new Date().toISOString(),\r\n };\r\n\r\n const payload = JSON.stringify(payloadUser);\r\n const encrypted = encryptor.encrypt(payload);\r\n return typeof encrypted === \"string\" ? encrypted : null;\r\n};\r\n\r\nconst ensureStylesInjected = () => {\r\n if (typeof document === \"undefined\") {\r\n return;\r\n }\r\n\r\n if (document.getElementById(STYLE_ELEMENT_ID)) {\r\n return;\r\n }\r\n\r\n const style = document.createElement(\"style\");\r\n style.id = STYLE_ELEMENT_ID;\r\n style.textContent = flightSearchWidgetStyles;\r\n document.head.appendChild(style);\r\n};\r\n\r\nconst ensurePrimeIconsLoaded = () => {\r\n if (typeof document === \"undefined\") {\r\n return;\r\n }\r\n\r\n if (document.getElementById(PRIMEICONS_LINK_ID)) {\r\n return;\r\n }\r\n\r\n const link = document.createElement(\"link\");\r\n link.id = PRIMEICONS_LINK_ID;\r\n link.rel = \"stylesheet\";\r\n link.href = \"https://unpkg.com/primeicons@7.0.0/primeicons.css\";\r\n document.head.appendChild(link);\r\n};\r\n\r\n/** Default/popular airports (sequence: AUH, CAI, DXB, RUH, LOS, LON, PAR, NYC) */\r\nconst DEFAULT_AIRPORTS: AirportModel[] = [\r\n { ac: \"AUH\", an: \"Abu Dhabi International Airport\", cc: \"AE\", cn: \"United Arab Emirates\", ct: \"Abu Dhabi\" },\r\n { ac: \"CAI\", an: \"Cairo International Airport\", cc: \"EG\", cn: \"Egypt\", ct: \"Cairo\" },\r\n { ac: \"DXB\", an: \"Dubai International Airport\", cc: \"AE\", cn: \"United Arab Emirates\", ct: \"Dubai\" },\r\n { ac: \"RUH\", an: \"King Khalid International Airport\", cc: \"SA\", cn: \"Saudi Arabia\", ct: \"Riyadh\" },\r\n { ac: \"LOS\", an: \"Murtala Muhammed International Airport\", cc: \"NG\", cn: \"Nigeria\", ct: \"Lagos\" },\r\n { ac: \"LON\", an: \"London All Airports\", cc: \"GB\", cn: \"United Kingdom\", ct: \"London\" },\r\n { ac: \"PAR\", an: \"All Airports\", cc: \"FR\", cn: \"France\", ct: \"Paris\" },\r\n { ac: \"NYC\", an: \"All airports\", cc: \"US\", cn: \"United States Of America\", ct: \"New York\" },\r\n];\r\n\r\n/** Display string for input/selected value e.g. \"Dublin Airport (DUB)\" */\r\nfunction formatAirportDisplay(airport: AirportModel): string {\r\n const code = airport.ac ?? \"\";\r\n const name = airport.an ?? airport.ct ?? \"\";\r\n return name ? `${name} (${code})` : code;\r\n}\r\n\r\n/** Airport code for badge and query e.g. \"DUB\" */\r\nfunction getAirportCode(airport: AirportModel): string {\r\n return airport.ac ?? \"\";\r\n}\r\n\r\n/** Format date for display (e.g. \"31 Jan 2026\") or \"Select date\" */\r\nfunction formatDisplayDate(date: Date | null | undefined): string {\r\n if (!date || !(date instanceof Date) || isNaN(date.getTime())) return \"Select date\";\r\n return date.toLocaleDateString(\"en-GB\", { day: \"2-digit\", month: \"short\", year: \"numeric\" });\r\n}\r\n\r\nconst isEmptyLocationValue = (value: string | null | undefined, placeholder: string): boolean => {\r\n const trimmed = (value ?? \"\").trim();\r\n return trimmed.length === 0 || trimmed === placeholder;\r\n};\r\n\r\nexport function FlightSearchWidget({\r\n config,\r\n ssoUser,\r\n}: FlightSearchWidgetProps) {\r\n const theme = config?.theme;\r\n const primaryColor = theme?.primary ?? \"#2c0a82\";\r\n const secondaryColor = theme?.secondary ?? \"#2c0a82\";\r\n const primaryLightColor = theme?.primaryLight ?? \"#f3e2ff\";\r\n const fontName = config?.fontName;\r\n const redirectionDomain = config?.redirectionDomain;\r\n const env = config?.env ?? \"dev\";\r\n const urls = API_URLS[env];\r\n const airportSearchApiBaseUrl = urls.airport;\r\n const airlineSearchApiBaseUrl = urls.airline;\r\n const langCode = \"en\";\r\n const [airlineQuery, setAirlineQuery] = useState(\"\");\r\n const [airlineSuggestions, setAirlineSuggestions] = useState<AirlineOption[]>([]);\r\n const [selectedAirlines, setSelectedAirlines] = useState<AirlineOption[]>([]);\r\n const [airlineLimitError, setAirlineLimitError] = useState<string | null>(null);\r\n const [validationErrors, setValidationErrors] = useState<Record<number, { origin?: boolean; destination?: boolean }>>({});\r\n\r\n const createDefaultSegment = (): FlightSearchSegment => ({\r\n origin: \"\",\r\n destination: \"\",\r\n departureDate: new Date(),\r\n returnDate: new Date(new Date().setDate(new Date().getDate() + 1)),\r\n dateRange: [new Date(), new Date(new Date().setDate(new Date().getDate() + 1))],\r\n travelerClass: \"Economy\",\r\n adultCount: 1,\r\n childCount: 0,\r\n infantCount: 0,\r\n });\r\n\r\n const [formState, setFormState] = useState<FlightSearchFormState>(() => ({\r\n tripType: \"round-trip\",\r\n segments: [{\r\n origin: \"\",\r\n destination: \"\",\r\n departureDate: new Date(),\r\n returnDate: new Date(new Date().setDate(new Date().getDate() + 1)),\r\n dateRange: [new Date(), new Date(new Date().setDate(new Date().getDate() + 1))],\r\n travelerClass: \"Economy\",\r\n adultCount: 1,\r\n childCount: 0,\r\n infantCount: 0,\r\n }],\r\n }));\r\n\r\n const { tripType, segments } = formState;\r\n const setTripType = (value: string) =>\r\n setFormState((prev) => ({ ...prev, tripType: value as FlightSearchFormState[\"tripType\"] }));\r\n const setSegments = (updater: (prev: FlightSearchSegment[]) => FlightSearchSegment[]) =>\r\n setFormState((prev) => ({ ...prev, segments: updater(prev.segments) }));\r\n\r\n const [advancedOptions, setAdvancedOptions] = useState<AdvancedOptions>({\r\n isDirectFlights: false,\r\n isRefundable: false,\r\n isBaggage: false,\r\n preferredAirlineList: [],\r\n isFlexiDate: false,\r\n isUmrah: false\r\n });\r\n const [isOriginDropdownOpen, setIsOriginDropdownOpen] = useState(false);\r\n const [isDestinationDropdownOpen, setIsDestinationDropdownOpen] = useState(false);\r\n const [isRoomsGuestsMenuOpen, setIsRoomsGuestsMenuOpen] = useState(false);\r\n const originDropdownRef = useRef<HTMLDivElement>(null);\r\n const destinationDropdownRef = useRef<HTMLDivElement>(null);\r\n const roomsGuestsMenuRef = useRef<HTMLDivElement>(null);\r\n const dateRangeCalendarRef = useRef<any>(null);\r\n const mobileDateRangeCalendarRef = useRef<any>(null);\r\n const segmentCalendarRefs = useRef<Record<number, any>>({});\r\n\r\n // Get max segments based on trip type\r\n const getMaxSegments = (): number => {\r\n if (tripType === 'custom-search') return 3;\r\n if (tripType === 'multi-city') return 6;\r\n return 1;\r\n };\r\n const [segmentDropdowns, setSegmentDropdowns] = useState<{\r\n [key: number]: { origin: boolean; destination: boolean };\r\n }>({});\r\n const segmentRefs = useRef<{\r\n [key: number]: { origin: HTMLDivElement | null; destination: HTMLDivElement | null };\r\n }>({});\r\n\r\n const [predictiveSearchList, setPredictiveSearchList] = useState<Record<number, PredictiveSearchState>>({});\r\n const searchDebounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n const airlineSearchDebounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\r\n const getPredictiveState = (segmentIndex: number): PredictiveSearchState => {\r\n return predictiveSearchList[segmentIndex] ?? {\r\n fromAirport: [],\r\n toAirport: [],\r\n selectedFromIndex: -1,\r\n selectedToIndex: -1,\r\n };\r\n };\r\n\r\n const getAirportListBySearch = useCallback(async (searchKeyword: string): Promise<AirportModel[]> => {\r\n if (!searchKeyword.trim()) return [];\r\n const url = `${airportSearchApiBaseUrl.replace(/\\/$/, \"\")}/Airport/GetList/${encodeURIComponent(langCode)}/${encodeURIComponent(searchKeyword.trim())}`;\r\n try {\r\n const res = await fetch(url);\r\n if (!res.ok) return [];\r\n const data = await res.json();\r\n if (Array.isArray(data)) return data;\r\n if (data && Array.isArray((data as { data?: unknown }).data)) return (data as { data: AirportModel[] }).data;\r\n if (data && Array.isArray((data as { result?: unknown }).result)) return (data as { result: AirportModel[] }).result;\r\n return [];\r\n } catch {\r\n return [];\r\n }\r\n }, [airportSearchApiBaseUrl, langCode]);\r\n\r\n const getAirlineListBySearch = useCallback(async (searchKeyword: string): Promise<AirlineOption[]> => {\r\n if (!searchKeyword.trim()) return [];\r\n const lang = (langCode ?? \"en\").toUpperCase();\r\n const url = `${airlineSearchApiBaseUrl.replace(/\\/$/, \"\")}/MasterSearch/GetAllAirline/${encodeURIComponent(lang)}/${encodeURIComponent(searchKeyword.trim())}`;\r\n try {\r\n const token = buildEncryptedToken(redirectionDomain ?? \"\");\r\n const res = await fetch(url, {\r\n headers: token ? { token } : undefined\r\n });\r\n if (!res.ok) return [];\r\n const data = await res.json();\r\n if (Array.isArray(data)) return data as AirlineOption[];\r\n if (data && Array.isArray((data as { data?: unknown }).data)) return (data as { data: AirlineOption[] }).data;\r\n if (data && Array.isArray((data as { result?: unknown }).result)) return (data as { result: AirlineOption[] }).result;\r\n return [];\r\n } catch {\r\n return [];\r\n }\r\n }, [airlineSearchApiBaseUrl, langCode, redirectionDomain]);\r\n\r\n const searchAirport = useCallback((segmentIndex: number, dropdownType: DropdownType, value: string) => {\r\n if (value.length < 3) {\r\n setPredictiveSearchList((prev) => ({\r\n ...prev,\r\n [segmentIndex]: {\r\n ...(prev[segmentIndex] ?? { fromAirport: [], toAirport: [], selectedFromIndex: -1, selectedToIndex: -1 }),\r\n [dropdownType === \"origin\" ? \"fromAirport\" : \"toAirport\"]: [],\r\n [dropdownType === \"origin\" ? \"selectedFromIndex\" : \"selectedToIndex\"]: -1,\r\n },\r\n }));\r\n return;\r\n }\r\n getAirportListBySearch(value).then((res) => {\r\n setPredictiveSearchList((prev) => ({\r\n ...prev,\r\n [segmentIndex]: {\r\n ...(prev[segmentIndex] ?? { fromAirport: [], toAirport: [], selectedFromIndex: -1, selectedToIndex: -1 }),\r\n [dropdownType === \"origin\" ? \"fromAirport\" : \"toAirport\"]: res,\r\n [dropdownType === \"origin\" ? \"selectedFromIndex\" : \"selectedToIndex\"]: res?.length === 0 ? -1 : 0,\r\n },\r\n }));\r\n });\r\n }, [getAirportListBySearch]);\r\n\r\n const closeAirportDropdown = useCallback((dropdownType: DropdownType, segmentIndex: number) => {\r\n if (dropdownType === \"origin\") {\r\n setIsOriginDropdownOpen(false);\r\n } else {\r\n setIsDestinationDropdownOpen(false);\r\n }\r\n setSegmentDropdowns((prev) => ({\r\n ...prev,\r\n [segmentIndex]: { ...(prev[segmentIndex] || { origin: false, destination: false }), [dropdownType]: false },\r\n }));\r\n }, []);\r\n\r\n const selectAirport = useCallback((airport: AirportModel, dropdownType: DropdownType, segmentIndex: number) => {\r\n const display = formatAirportDisplay(airport);\r\n setSegments((prev) => {\r\n const updated = [...prev];\r\n if (!updated[segmentIndex]) return prev;\r\n if (dropdownType === \"origin\") updated[segmentIndex] = { ...updated[segmentIndex], origin: display };\r\n else {\r\n updated[segmentIndex] = { ...updated[segmentIndex], destination: display };\r\n if (tripType === \"multi-city\" || tripType === \"custom-search\") {\r\n const nextIndex = segmentIndex + 1;\r\n const nextSeg = updated[nextIndex];\r\n if (nextSeg ) {\r\n updated[nextIndex] = { ...nextSeg, origin: display };\r\n }\r\n }\r\n }\r\n return updated;\r\n });\r\n closeAirportDropdown(dropdownType, segmentIndex);\r\n }, [closeAirportDropdown]);\r\n\r\n const updateSelectedIndex = useCallback((segmentIndex: number, dropdownType: DropdownType, newIndex: number) => {\r\n setPredictiveSearchList((prev) => {\r\n const state = prev[segmentIndex] ?? { fromAirport: [], toAirport: [], selectedFromIndex: -1, selectedToIndex: -1 };\r\n const list = dropdownType === \"origin\" ? state.fromAirport : state.toAirport;\r\n const len = list.length;\r\n if (len === 0) return prev;\r\n const clamped = ((newIndex % len) + len) % len;\r\n return {\r\n ...prev,\r\n [segmentIndex]: {\r\n ...state,\r\n [dropdownType === \"origin\" ? \"selectedFromIndex\" : \"selectedToIndex\"]: clamped,\r\n },\r\n };\r\n });\r\n }, []);\r\n\r\n const handleKeyDown = useCallback((\r\n event: React.KeyboardEvent<HTMLInputElement>,\r\n dropdownType: DropdownType,\r\n segmentIndex: number\r\n ) => {\r\n const state = getPredictiveState(segmentIndex);\r\n const options = dropdownType === \"origin\" ? state.fromAirport : state.toAirport;\r\n const selectedIndex = dropdownType === \"origin\" ? state.selectedFromIndex : state.selectedToIndex;\r\n const isOpen = segmentIndex === 0\r\n ? (dropdownType === \"origin\" ? isOriginDropdownOpen : isDestinationDropdownOpen)\r\n : segmentDropdowns[segmentIndex]?.[dropdownType];\r\n\r\n switch (event.key) {\r\n case \"ArrowDown\":\r\n if (isOpen && options.length) {\r\n event.preventDefault();\r\n updateSelectedIndex(segmentIndex, dropdownType, selectedIndex + 1);\r\n }\r\n break;\r\n case \"ArrowUp\":\r\n if (isOpen && options.length) {\r\n event.preventDefault();\r\n updateSelectedIndex(segmentIndex, dropdownType, selectedIndex - 1);\r\n }\r\n break;\r\n case \"Enter\":\r\n if (isOpen && options.length && selectedIndex >= 0 && options[selectedIndex]) {\r\n event.preventDefault();\r\n selectAirport(options[selectedIndex], dropdownType, segmentIndex);\r\n }\r\n break;\r\n case \"Escape\":\r\n if (isOpen) {\r\n event.preventDefault();\r\n closeAirportDropdown(dropdownType, segmentIndex);\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }, [isOriginDropdownOpen, isDestinationDropdownOpen, segmentDropdowns, getPredictiveState, updateSelectedIndex, selectAirport, closeAirportDropdown]);\r\n\r\n const DEBOUNCE_MS = 300;\r\n const triggerSearchAirport = useCallback((segmentIndex: number, dropdownType: DropdownType, value: string) => {\r\n if (searchDebounceRef.current) clearTimeout(searchDebounceRef.current);\r\n if (value.length < 3) {\r\n searchAirport(segmentIndex, dropdownType, value);\r\n return;\r\n }\r\n searchDebounceRef.current = setTimeout(() => {\r\n searchDebounceRef.current = null;\r\n searchAirport(segmentIndex, dropdownType, value);\r\n }, DEBOUNCE_MS);\r\n }, [searchAirport]);\r\n\r\n const triggerSearchAirline = useCallback((value: string) => {\r\n if (airlineSearchDebounceRef.current) clearTimeout(airlineSearchDebounceRef.current);\r\n if (value.length < 2) {\r\n setAirlineSuggestions([]);\r\n return;\r\n }\r\n airlineSearchDebounceRef.current = setTimeout(() => {\r\n airlineSearchDebounceRef.current = null;\r\n getAirlineListBySearch(value).then(setAirlineSuggestions);\r\n }, DEBOUNCE_MS);\r\n }, [getAirlineListBySearch]);\r\n\r\n useEffect(() => () => {\r\n if (searchDebounceRef.current) clearTimeout(searchDebounceRef.current);\r\n if (airlineSearchDebounceRef.current) clearTimeout(airlineSearchDebounceRef.current);\r\n }, []);\r\n\r\n const themeStyle = useMemo(\r\n () => {\r\n const style: React.CSSProperties = {\r\n [\"--primary\" as string]: primaryColor,\r\n [\"--secondary\" as string]: secondaryColor,\r\n [\"--primary-light\" as string]: primaryLightColor\r\n };\r\n\r\n if (fontName) {\r\n (style as Record<string, string>)[\"--font-family\"] = fontName;\r\n }\r\n\r\n return style;\r\n },\r\n [primaryColor, secondaryColor, primaryLightColor]\r\n );\r\n\r\n useEffect(() => {\r\n ensureStylesInjected();\r\n ensurePrimeIconsLoaded();\r\n }, []);\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (event: MouseEvent) => {\r\n const target = event.target as HTMLElement;\r\n\r\n const isInsidePrimeDropdown =\r\n target.closest(\".p-dropdown-panel\") !== null ||\r\n target.closest(\".p-dropdown-items-wrapper\") !== null ||\r\n target.closest(\".p-dropdown-item\") !== null ||\r\n target.closest(\".p-component\")?.classList.contains(\"p-dropdown\") !== false ||\r\n target.closest('[data-pc-section=\"panel\"]') !== null ||\r\n target.closest('[data-pc-name=\"dropdown\"]') !== null;\r\n\r\n if (originDropdownRef.current && !originDropdownRef.current.contains(target)) {\r\n setIsOriginDropdownOpen(false);\r\n }\r\n if (destinationDropdownRef.current && !destinationDropdownRef.current.contains(target)) {\r\n setIsDestinationDropdownOpen(false);\r\n }\r\n\r\n if (\r\n !isInsidePrimeDropdown &&\r\n roomsGuestsMenuRef.current &&\r\n !roomsGuestsMenuRef.current.contains(target)\r\n ) {\r\n setIsRoomsGuestsMenuOpen(false);\r\n }\r\n\r\n const isInsideCustomDropdown = target.closest(\".sw-custom-dropdown\") !== null;\r\n const isInsideCalendar = target.closest(\".p-datepicker\") !== null || target.closest(\".p-calendar\") !== null;\r\n if (!isInsideCustomDropdown && !isInsideCalendar) {\r\n setSegmentDropdowns({});\r\n return;\r\n }\r\n\r\n Object.keys(segmentRefs.current).forEach((key) => {\r\n const index = Number.parseInt(key, 10);\r\n const refs = segmentRefs.current[index];\r\n if (refs) {\r\n if (refs.origin && !refs.origin.contains(target)) {\r\n setSegmentDropdowns((prev) => ({\r\n ...prev,\r\n [index]: { ...(prev[index] || { origin: false, destination: false }), origin: false }\r\n }));\r\n }\r\n if (refs.destination && !refs.destination.contains(target)) {\r\n setSegmentDropdowns((prev) => ({\r\n ...prev,\r\n [index]: {\r\n ...(prev[index] || { origin: false, destination: false }),\r\n destination: false\r\n }\r\n }));\r\n }\r\n }\r\n });\r\n };\r\n\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n }, []);\r\n\r\n // Reset flight segments when trip type changes (multi-city/custom-search = at least 2 segments)\r\n useEffect(() => {\r\n if (tripType === 'multi-city' || tripType === 'custom-search') {\r\n setSegments((prev) => {\r\n const maxSegments = getMaxSegments();\r\n const baseDate = prev[0]?.departureDate;\r\n const fallbackDate = baseDate instanceof Date && !isNaN(baseDate.getTime()) ? baseDate : new Date();\r\n if (prev.length === 0) {\r\n const first = createDefaultSegment();\r\n const second: FlightSearchSegment = {\r\n origin: \"\",\r\n destination: \"\",\r\n departureDate: fallbackDate,\r\n returnDate: null,\r\n dateRange: null,\r\n travelerClass: first.travelerClass,\r\n adultCount: first.adultCount,\r\n childCount: first.childCount,\r\n infantCount: first.infantCount,\r\n };\r\n return [first, second];\r\n }\r\n if (prev.length === 1) {\r\n const first = prev[0];\r\n const second: FlightSearchSegment = {\r\n origin: \"\",\r\n destination: \"\",\r\n departureDate: fallbackDate,\r\n returnDate: null,\r\n dateRange: null,\r\n travelerClass: first.travelerClass,\r\n adultCount: first.adultCount,\r\n childCount: first.childCount,\r\n infantCount: first.infantCount,\r\n };\r\n return [first, second];\r\n }\r\n if (prev.length > maxSegments) return prev.slice(0, maxSegments);\r\n return prev;\r\n });\r\n } else {\r\n // round-trip / one-way: ensure single segment\r\n setSegments((prev) => {\r\n if (prev.length === 0) return [createDefaultSegment()];\r\n if (prev.length > 1) return [prev[0]];\r\n return prev;\r\n });\r\n }\r\n }, [tripType]);\r\n\r\n type SegmentField = keyof FlightSearchSegment;\r\n type SegmentValue = string | Date | null | (Date | null)[];\r\n\r\n const isValidLocationValue = (value: SegmentValue, placeholder: string): boolean => {\r\n if (typeof value !== \"string\") return false;\r\n const trimmed = value.trim();\r\n return trimmed.length > 0 && trimmed !== placeholder;\r\n };\r\n\r\n const normalizeMultiCityDates = (list: FlightSearchSegment[]): FlightSearchSegment[] => {\r\n let prevDate: Date | null = null;\r\n return list.map((segment, idx) => {\r\n const current = segment.departureDate;\r\n let nextDate = current;\r\n const currentValid = current instanceof Date && !isNaN(current.getTime());\r\n const prevValid = prevDate instanceof Date && !isNaN(prevDate.getTime());\r\n if (prevValid && (!currentValid || (current as Date).getTime() < (prevDate as Date).getTime())) {\r\n nextDate = prevDate;\r\n }\r\n const nextSegment = nextDate === segment.departureDate ? segment : { ...segment, departureDate: nextDate };\r\n if (nextDate instanceof Date && !isNaN(nextDate.getTime())) {\r\n prevDate = nextDate;\r\n } else if (idx === 0) {\r\n prevDate = null;\r\n }\r\n return nextSegment;\r\n });\r\n };\r\n\r\n const getLastValidDepartureDate = (list: FlightSearchSegment[]): Date | null => {\r\n for (let i = list.length - 1; i >= 0; i -= 1) {\r\n const date = list[i]?.departureDate;\r\n if (date instanceof Date && !isNaN(date.getTime())) {\r\n return date;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n const handleSegmentFieldChange = (\r\n index: number,\r\n field: SegmentField,\r\n value: SegmentValue\r\n ): void => {\r\n setSegments((prev) => {\r\n const updated = [...prev];\r\n if (!updated[index]) return prev;\r\n updated[index] = { ...updated[index], [field]: value };\r\n if (field === \"departureDate\" && (tripType === \"multi-city\" || tripType === \"custom-search\")) {\r\n return normalizeMultiCityDates(updated);\r\n }\r\n return updated;\r\n });\r\n if (field === \"origin\" || field === \"destination\") {\r\n setSegmentDropdowns((prev) => ({\r\n ...prev,\r\n [index]: { ...prev[index], [field]: false }\r\n }));\r\n const placeholder = field === \"origin\" ? \"Origin\" : \"Destination\";\r\n if (isValidLocationValue(value, placeholder)) {\r\n setValidationErrors((prev) => ({\r\n ...prev,\r\n [index]: { ...(prev[index] ?? {}), [field]: false }\r\n }));\r\n }\r\n }\r\n };\r\n\r\n const handleTravellerChange = (field: \"travelerClass\" | \"adultCount\" | \"childCount\" | \"infantCount\", value: string | number): void => {\r\n setSegments((prev) => {\r\n const updated = prev.map((seg, i) =>\r\n i === 0 ? { ...seg, [field]: value } : seg\r\n );\r\n return updated;\r\n });\r\n };\r\n\r\n const toggleSegmentDropdown = (index: number, field: \"origin\" | \"destination\"): void => {\r\n setSegmentDropdowns((prev) => ({\r\n ...prev,\r\n [index]: {\r\n ...(prev[index] || { origin: false, destination: false }),\r\n [field]: !prev[index]?.[field]\r\n }\r\n }));\r\n };\r\n\r\n const swapSegmentLocations = (index: number): void => {\r\n setSegments((prev) => {\r\n const updated = [...prev];\r\n const current = updated[index];\r\n if (!current) return prev;\r\n updated[index] = { ...current, origin: current.destination, destination: current.origin };\r\n return updated;\r\n });\r\n };\r\n\r\n const addFlightSegment = (): void => {\r\n const maxSegments = getMaxSegments();\r\n if (segments.length < maxSegments) {\r\n const template = segments[0] ?? createDefaultSegment();\r\n const lastDeparture = getLastValidDepartureDate(segments) ?? new Date();\r\n setSegments((prev) => [\r\n ...prev,\r\n {\r\n origin: \"\",\r\n destination: \"\",\r\n departureDate: lastDeparture,\r\n returnDate: null,\r\n dateRange: null,\r\n travelerClass: template.travelerClass,\r\n adultCount: template.adultCount,\r\n childCount: template.childCount,\r\n infantCount: template.infantCount,\r\n }\r\n ]);\r\n }\r\n };\r\n\r\n const removeFlightSegment = (index: number): void => {\r\n if (segments.length > 1) {\r\n setSegments((prev) => prev.filter((_, i) => i !== index));\r\n }\r\n };\r\n\r\n // Helper function to extract airport code from string like \"Dubai (DXB)\"\r\n const extractAirportCode = (location: string): string => {\r\n const match = location.match(/\\(([A-Z]{3})\\)/);\r\n return match ? match[1] : location;\r\n };\r\n\r\n // Helper: format date for URL as DD-MMM-YYYY (e.g. 31-Jan-2026)\r\n const MONTH_NAMES = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\r\n const formatDate = (date: Date | null): string => {\r\n if (!date) return '';\r\n const day = String(date.getDate()).padStart(2, '0');\r\n const month = MONTH_NAMES[date.getMonth()];\r\n const year = date.getFullYear();\r\n return `${day}-${month}-${year}`;\r\n };\r\n\r\n /** Trip type number for URL triptype param: 1=one-way, 2=round-trip, 3=multi-city, 4=custom-search */\r\n const getTripTypeNumber = (): number => {\r\n switch (tripType) {\r\n case 'one-way': return 1;\r\n case 'round-trip': return 2;\r\n case 'multi-city': return 3;\r\n case 'custom-search': return 4;\r\n default: return 2;\r\n }\r\n };\r\n\r\n\r\n // Map class name to class code (adjust based on your requirements)\r\n const getClassCode = (className: string): string => {\r\n const classMap: Record<string, string> = {\r\n 'Economy': 'Y',\r\n 'Business': 'C',\r\n 'First Class': 'F',\r\n 'Premium Economy': 'W'\r\n };\r\n return classMap[className] || 'Y';\r\n };\r\n\r\n // Build itinerary requests (new Angular: round-trip = 2 legs: outbound + return)\r\n const buildItineraryRequests = (): ItineraryReq[] => {\r\n const itineraryReqs: ItineraryReq[] = [];\r\n const firstSegment = segments[0];\r\n if (!firstSegment) return itineraryReqs;\r\n\r\n if (tripType === 'one-way') {\r\n itineraryReqs.push({\r\n departureCode: extractAirportCode(firstSegment.origin),\r\n returnCode: extractAirportCode(firstSegment.destination),\r\n departureDate: formatDate(firstSegment.departureDate),\r\n class: getClassCode(firstSegment.travelerClass)\r\n });\r\n } else if (tripType === 'round-trip') {\r\n // Leg 1: outbound dep1/ret1/dtt1/cl1\r\n itineraryReqs.push({\r\n departureCode: extractAirportCode(firstSegment.origin),\r\n returnCode: extractAirportCode(firstSegment.destination),\r\n departureDate: formatDate(firstSegment.departureDate),\r\n class: getClassCode(firstSegment.travelerClass)\r\n });\r\n // Leg 2: return dep2=ret1, ret2=dep1, dtt2=returnDate, cl2\r\n const returnDate = firstSegment.dateRange?.[1] ?? firstSegment.returnDate ?? firstSegment.departureDate;\r\n itineraryReqs.push({\r\n departureCode: extractAirportCode(firstSegment.destination),\r\n returnCode: extractAirportCode(firstSegment.origin),\r\n departureDate: formatDate(returnDate),\r\n class: getClassCode(firstSegment.travelerClass)\r\n });\r\n } else if (tripType === 'multi-city' || tripType === 'custom-search') {\r\n segments.forEach((segment) => {\r\n itineraryReqs.push({\r\n departureCode: extractAirportCode(segment.origin),\r\n returnCode: extractAirportCode(segment.destination),\r\n departureDate: formatDate(segment.departureDate),\r\n class: getClassCode(segment.travelerClass)\r\n });\r\n });\r\n }\r\n\r\n return itineraryReqs;\r\n };\r\n\r\n // Check if baggage option is selected\r\n const isBaggageOption = (): boolean => {\r\n return advancedOptions.isBaggage;\r\n };\r\n\r\n /** Trip type number for URL triptype param: 1=one-way, 2=round-trip, 3=multi-city, 4=custom-search */\r\n const getTripKey = (): string => {\r\n switch (tripType) {\r\n case 'one-way': return \"OW\";\r\n case 'round-trip': return \"IRT\";\r\n case 'multi-city': return \"NMC\";\r\n case 'custom-search': return \"MC\";\r\n default: return \"OW\";\r\n }\r\n };\r\n\r\n // Check if flexi date option is selected\r\n const isFlexiDateOption = (): boolean => {\r\n return advancedOptions.isFlexiDate;\r\n };\r\n\r\n // Check if umrah fare option is selected\r\n const isUmrahFareOption = (): boolean => {\r\n return advancedOptions.isUmrah;\r\n };\r\n\r\n // Create query string function similar to Angular implementation\r\n const createQueryString = (): Record<string, any> => {\r\n const queryStringObj: Record<string, any> = {};\r\n const itineraryReqs = buildItineraryRequests();\r\n let trip_index = 1;\r\n\r\n itineraryReqs.forEach((itineraryReqObj: ItineraryReq) => {\r\n queryStringObj[`dep${trip_index}`] = itineraryReqObj.departureCode;\r\n queryStringObj[`ret${trip_index}`] = itineraryReqObj.returnCode;\r\n queryStringObj[`dtt${trip_index}`] = itineraryReqObj.departureDate;\r\n queryStringObj[`cl${trip_index}`] = itineraryReqObj.class;\r\n trip_index++;\r\n });\r\n\r\n queryStringObj[`triptype`] = getTripTypeNumber();\r\n const firstSeg = segments[0];\r\n queryStringObj[`adult`] = firstSeg?.adultCount ?? 1;\r\n queryStringObj[`child`] = firstSeg?.childCount ?? 0;\r\n queryStringObj[`infant`] = firstSeg?.infantCount ?? 0;\r\n queryStringObj[`direct`] = advancedOptions.isDirectFlights;\r\n queryStringObj[`baggage`] = isBaggageOption();\r\n queryStringObj[`key`] = getTripKey();\r\n queryStringObj[`airlines`] = advancedOptions.preferredAirlineList.join(',') || '';\r\n queryStringObj[`ref`] = advancedOptions.isRefundable;\r\n queryStringObj[`lc`] = (langCode ?? 'en').toUpperCase();\r\n queryStringObj[`curr`] = 'AED';\r\n queryStringObj[`mgcc`] = 'AE';\r\n queryStringObj['ipc'] = isFlexiDateOption();\r\n queryStringObj[`umrah`] = isUmrahFareOption();\r\n\r\n return queryStringObj;\r\n };\r\n\r\n const handleSearch = (): void => {\r\n const queryStringObj = createQueryString();\r\n console.log(\"Query String Object:\", queryStringObj);\r\n console.log(\"Searching with:\", formState, \"domain:\", redirectionDomain);\r\n \r\n // Build query string for URL\r\n const queryParams = new URLSearchParams();\r\n Object.keys(queryStringObj).forEach((key) => {\r\n const value = queryStringObj[key];\r\n if (key === 'airlines' || key === 'mgcc') {\r\n queryParams.append(key, value !== null && value !== undefined ? String(value) : '');\r\n } else if (value !== null && value !== undefined && value !== '') {\r\n queryParams.append(key, String(value));\r\n }\r\n });\r\n\r\n const ssoToken = buildEncryptedSsoUserToken(ssoUser);\r\n if (ssoToken) {\r\n queryParams.append(\"to\", ssoToken);\r\n }\r\n \r\n const queryString = queryParams.toString();\r\n console.log(\"Query String:\", queryString);\r\n \r\n // If redirection domain is provided, open results in a new tab\r\n if (redirectionDomain) {\r\n const url = `${redirectionDomain}/flight/listing?${queryString}`;\r\n window.location.href = url\r\n }\r\n };\r\n\r\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>): void => {\r\n e.preventDefault();\r\n const isMultiCityOrCustom = tripType === \"multi-city\" || tripType === \"custom-search\";\r\n const segmentsToValidate = isMultiCityOrCustom ? segments : segments.slice(0, 1);\r\n const nextErrors: Record<number, { origin?: boolean; destination?: boolean }> = {};\r\n segmentsToValidate.forEach((segment, index) => {\r\n const originInvalid = !isValidLocationValue(segment.origin, \"Origin\");\r\n const destinationInvalid = !isValidLocationValue(segment.destination, \"Destination\");\r\n if (originInvalid || destinationInvalid) {\r\n nextErrors[index] = {\r\n origin: originInvalid,\r\n destination: destinationInvalid\r\n };\r\n }\r\n });\r\n if (Object.keys(nextErrors).length > 0) {\r\n setValidationErrors(nextErrors);\r\n return;\r\n }\r\n handleSearch();\r\n };\r\n \r\n const renderAirportDropdown = (\r\n segmentIndex: number,\r\n dropdownType: DropdownType,\r\n dropdownRef: Ref<HTMLDivElement>,\r\n isOpen: boolean,\r\n onOpen: () => void\r\n ) => {\r\n const isOrigin = dropdownType === \"origin\";\r\n const value = segments[segmentIndex]?.[dropdownType];\r\n const placeholder = isOrigin ? \"Origin\" : \"Destination\";\r\n const label = isOrigin ? \"From\" : \"To\";\r\n const list = isOrigin ? getPredictiveState(segmentIndex).fromAirport : getPredictiveState(segmentIndex).toAirport;\r\n const selectedIndex = isOrigin ? getPredictiveState(segmentIndex).selectedFromIndex : getPredictiveState(segmentIndex).selectedToIndex;\r\n\r\n return (\r\n <div className={`sw-form-field sw-pos-rel${isOrigin ? \" br-left\" : \"\"} ${validationErrors[segmentIndex]?.[dropdownType] ? \"sw-is-invalid\" : \"\"}`}>\r\n <label htmlFor={`${dropdownType}-${segmentIndex}`}>{label}</label>\r\n <div className={`sw-custom-dropdown ${((validationErrors[segmentIndex]?.[dropdownType]) ? \"sw-has-error\" : \"\")}`} ref={dropdownRef}>\r\n <input\r\n type=\"text\"\r\n id={`${dropdownType}-${segmentIndex}`}\r\n className={`sw-custom-dropdown-trigger ${(value === placeholder || !value) ? 'sw-placeholder' : ''}`}\r\n value={value === placeholder ? '' : (value ?? '')}\r\n placeholder={placeholder}\r\n onFocus={(e) => {\r\n onOpen();\r\n e.currentTarget.select();\r\n }}\r\n onClick={(e) => e.currentTarget.select()}\r\n onChange={(e) => {\r\n const val = e.target.value;\r\n handleSegmentFieldChange(segmentIndex, dropdownType, val);\r\n triggerSearchAirport(segmentIndex, dropdownType, val);\r\n }}\r\n onKeyDown={(e) => handleKeyDown(e, dropdownType, segmentIndex)}\r\n />\r\n {isOpen && (\r\n <div className=\"sw-dropdown\">\r\n <div className=\"mobileHead MobileShow\">\r\n <a type=\"button\" onClick={() => closeAirportDropdown(dropdownType, segmentIndex)}>\r\n <svg width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M19 5L5 19\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path d=\"M5 5L19 19\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg>\r\n </a>\r\n <h4>{isOrigin ? \"Origin\" : \"Destination\"}</h4>\r\n </div>\r\n <div className=\"mobileSrgInput MobileShow\">\r\n <input type=\"text\" placeholder={`Search ${isOrigin ? \"Origin\" : \"Destination\"}`} value={value ?? ''} onChange={(e) => {\r\n const val = e.target.value;\r\n handleSegmentFieldChange(segmentIndex, dropdownType, val);\r\n triggerSearchAirport(segmentIndex, dropdownType, val);\r\n }} />\r\n </div>\r\n <ul className=\"sw-dropdown-list\">\r\n {(list.length > 0\r\n ? list.map((airport, i) => (\r\n <li key={airport.id ?? airport.ac ?? i} className={`sw-dropdown-list-item ${selectedIndex === i ? \"highlight\" : \"\"}`} onClick={() => selectAirport(airport, dropdownType, segmentIndex)}>\r\n <div className=\"sw-dropdown-list-card\"><h6 className=\"sw-dropdown-item-badge sw-en-font\">{getAirportCode(airport)}</h6><div><h5 className=\"sw-fw500 sw-text-ellipsis\">{formatAirportDisplay(airport)}</h5><h6 className=\"sw-text-label sw-text-ellipsis\">{airport.ct}{airport.cn ? `, ${airport.cn}` : \"\"}</h6></div></div>\r\n </li>\r\n ))\r\n : DEFAULT_AIRPORTS.map((airport, i) => (\r\n <li key={airport.ac ?? i} className=\"sw-dropdown-list-item \" onClick={() => selectAirport(airport, dropdownType, segmentIndex)}>\r\n <div className=\"sw-dropdown-list-card\"><h6 className=\"sw-dropdown-item-badge sw-en-font\">{getAirportCode(airport)}</h6><div><h5 className=\"sw-fw500 sw-text-ellipsis\">{formatAirportDisplay(airport)}</h5><h6 className=\"sw-text-label sw-text-ellipsis\">{airport.ct}{airport.cn ? `, ${airport.cn}` : \"\"}</h6></div></div>\r\n </li>\r\n ))\r\n )}\r\n </ul>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const getMinDateForSegment = (index: number): Date => {\r\n const today = new Date();\r\n if (index <= 0) return today;\r\n const prev = segments[index - 1]?.departureDate;\r\n if (prev instanceof Date && !isNaN(prev.getTime())) return prev;\r\n return today;\r\n };\r\n\r\n const renderFlightSegment = (index: number, segment: FlightSearchSegment, isMultiCityOrCustom: boolean) => {\r\n const canRemove = segments.length > 2 && index > 0 && isMultiCityOrCustom;\r\n\r\n const originRef = (el: HTMLDivElement | null) => {\r\n if (!segmentRefs.current[index]) segmentRefs.current[index] = { origin: null, destination: null };\r\n segmentRefs.current[index].origin = el;\r\n };\r\n const destinationRef = (el: HTMLDivElement | null) => {\r\n if (!segmentRefs.current[index]) segmentRefs.current[index] = { origin: null, destination: null };\r\n segmentRefs.current[index].destination = el;\r\n };\r\n\r\n const isOriginOpen = segmentDropdowns[index]?.origin ?? false;\r\n const isDestOpen = segmentDropdowns[index]?.destination ?? false;\r\n\r\n return (\r\n <>\r\n <div key={index} className=\"sw-srh-wrap sw-srh-box sw-pos-rel\">\r\n {renderAirportDropdown(index, \"origin\", originDropdownRef || originRef, isOriginOpen, () => toggleSegmentDropdown(index, \"origin\"))}\r\n <div className=\"sw-form-swap\" aria-label=\"Swap origin and destination\" onClick={() => swapSegmentLocations(index)}>\r\n <svg width=\"30px\" height=\"30px\" fill=\"var(--sw-body-text)\" viewBox=\"0 0 24 24\"><path fillRule=\"evenodd\" d=\"M14.6403 5.2477a.7483.7483 0 0 1 1.0612.0084l4.0871 4.1684a.7555.7555 0 0 1 .1573.8195.7502.7502 0 0 1-.6921.4623H6.8305c-.4145 0-.7504-.3373-.7504-.7533 0-.4161.336-.7534.7504-.7534h10.6317L14.632 6.3131a.7556.7556 0 0 1 .0083-1.0654ZM9.368 18.8148a.7483.7483 0 0 1-1.0611-.0084l-4.087-4.1684a.7555.7555 0 0 1-.1574-.8195.7503.7503 0 0 1 .6921-.4623H17.178c.4144 0 .7503.3373.7503.7533 0 .4161-.3359.7534-.7503.7534H6.5463l2.8301 2.8865a.7555.7555 0 0 1-.0083 1.0654Z\" clipRule=\"evenodd\"></path></svg>\r\n </div>\r\n {renderAirportDropdown(index, \"destination\", destinationDropdownRef || destinationRef, isDestOpen, () => toggleSegmentDropdown(index, \"destination\"))}\r\n </div>\r\n {isMultiCityOrCustom && (\r\n <div className=\"sw-srh-wrap sw-pos-rel\">\r\n <div className=\"sw-form-field sw-com-cal\">\r\n <label htmlFor={`departure-${index}`}>Departure</label>\r\n <Calendar\r\n numberOfMonths={2}\r\n id={`departure-${index}`}\r\n appendTo=\"self\"\r\n value={segment.departureDate ?? null}\r\n onChange={(e) => {\r\n const raw = e.value as Date | string | null;\r\n const nextDate = raw instanceof Date ? raw : (typeof raw === \"string\" ? new Date(raw) : null);\r\n handleSegmentFieldChange(\r\n index,\r\n \"departureDate\",\r\n nextDate && !isNaN(nextDate.getTime()) ? nextDate : null\r\n );\r\n }}\r\n dateFormat=\"dd M yy\"\r\n placeholder=\"29 Jan 2026\"\r\n className=\"p-inputtext-sm MobileHide\"\r\n minDate={getMinDateForSegment(index)}\r\n />\r\n <Calendar\r\n numberOfMonths={10}\r\n id={`departure-${index}`}\r\n appendTo=\"self\"\r\n value={segment.departureDate ?? null}\r\n onChange={(e) => {\r\n const raw = e.value as Date | string | null;\r\n const nextDate = raw instanceof Date ? raw : (typeof raw === \"string\" ? new Date(raw) : null);\r\n handleSegmentFieldChange(\r\n index,\r\n \"departureDate\",\r\n nextDate && !isNaN(nextDate.getTime()) ? nextDate : null\r\n );\r\n }}\r\n dateFormat=\"dd M yy\"\r\n placeholder=\"29 Jan 2026\"\r\n className=\"p-inputtext-sm MobileShow\"\r\n minDate={getMinDateForSegment(index)}\r\n headerTemplate={() => (\r\n <div className=\"mobileHead MobileShow\">\r\n <a type=\"button\" onClick={(e) => { e.stopPropagation(); mobileDateRangeCalendarRef.current?.hide?.(); }}>\r\n <svg width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M19 5L5 19\" stroke=\"black\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"></path><path d=\"M5 5L19 19\" stroke=\"black\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"></path></svg>\r\n </a>\r\n <h4>Departure</h4>\r\n </div>\r\n )}\r\n footerTemplate={() => (\r\n <div className=\"mobileFooter MobileShow\">\r\n <button\r\n type=\"button\"\r\n className=\"sw-confirm-btn\"\r\n onClick={(e) => { e.stopPropagation(); mobileDateRangeCalendarRef.current?.hide?.(); }}\r\n >\r\n Confirm\r\n </button>\r\n </div>\r\n )}\r\n />\r\n </div>\r\n {canRemove && (\r\n <div className=\"sw-srh-wrap\">\r\n <a\r\n type=\"button\"\r\n className=\"sw-remove-segment\"\r\n onClick={() => removeFlightSegment(index)}>\r\n <svg viewBox=\"0 0 200 200\" width=\"35\" height=\"35\" xmlns=\"http://www.w3.org/2000/svg\" role=\"presentation\"><path d=\"M124.697 135.303L100 110.606l-24.697 24.697l-10.606-10.606L89.393 100L64.697 75.303l10.606-10.606L100 89.394l24.697-24.697l10.606 10.606L110.607 100l24.696 24.697z\"></path></svg>\r\n </a>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </>\r\n )\r\n }\r\n\r\n return (\r\n <PrimeReactProvider value={{ hideOverlaysOnDocumentScrolling: false }}>\r\n <div className=\"tfsw-root sw-container\" style={themeStyle}>\r\n <div className=\"sw-card-box\">\r\n <div className=\"sw-srh-main-head\">\r\n <div className=\"sw-srh-head\">\r\n <div className=\"sw-srh-round-text\" >\r\n {([\r\n { value: \"round-trip\", label: \"Round-trip\" },\r\n { value: \"one-way\", label: \"One-way\" },\r\n { value: \"custom-search\", label: \"Custom Search\" },\r\n { value: \"multi-city\", label: \"Multi-city\" },\r\n ] as const).map((option) => (\r\n <label key={option.value} className=\"sw-tab-checkbox\">\r\n <input\r\n type=\"radio\"\r\n name=\"trip\"\r\n value={option.value}\r\n checked={tripType === option.value}\r\n onChange={(e) => setTripType(e.target.value)}\r\n />\r\n <h5 className=\"sw-tab-content\">{option.label}</h5>\r\n </label>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n <form className={`sw-srh-grid ${tripType === 'multi-city' || tripType === 'custom-search' ? 'sw-srh-mc' : ''}`} onSubmit={handleSubmit}>\r\n {tripType === 'multi-city' || tripType === 'custom-search' ? (\r\n segments.map((segment, index) => renderFlightSegment(index, segment, true))\r\n ) : (\r\n <div className=\"sw-srh-wrap sw-srh-box sw-pos-rel br-left\">\r\n {renderAirportDropdown(0, \"origin\", originDropdownRef, isOriginDropdownOpen, () => setIsOriginDropdownOpen(true))}\r\n <div\r\n className=\"sw-form-swap\"\r\n aria-label=\"Swap origin and destination\"\r\n onClick={() => swapSegmentLocations(0)}\r\n >\r\n <svg width=\"30px\" height=\"30px\" fill=\"var(--body-text)\" viewBox=\"0 0 24 24\"><path fill-rule=\"evenodd\" d=\"M14.6403 5.2477a.7483.7483 0 0 1 1.0612.0084l4.0871 4.1684a.7555.7555 0 0 1 .1573.8195.7502.7502 0 0 1-.6921.4623H6.8305c-.4145 0-.7504-.3373-.7504-.7533 0-.4161.336-.7534.7504-.7534h10.6317L14.632 6.3131a.7556.7556 0 0 1 .0083-1.0654ZM9.368 18.8148a.7483.7483 0 0 1-1.0611-.0084l-4.087-4.1684a.7555.7555 0 0 1-.1574-.8195.7503.7503 0 0 1 .6921-.4623H17.178c.4144 0 .7503.3373.7503.7533 0 .4161-.3359.7534-.7503.7534H6.5463l2.8301 2.8865a.7555.7555 0 0 1-.0083 1.0654Z\" clip-rule=\"evenodd\"></path></svg>\r\n </div>\r\n {renderAirportDropdown(0, \"destination\", destinationDropdownRef, isDestinationDropdownOpen, () => setIsDestinationDropdownOpen(true))}\r\n </div>\r\n )}\r\n {(tripType === 'round-trip' || tripType === 'one-way') && (\r\n <div className=\"sw-srh-wrap sw-pos-rel \">\r\n {tripType === 'round-trip' ? (\r\n <>\r\n <div style={{ cursor: 'pointer' }} onClick={() => { dateRangeCalendarRef.current?.show?.(); mobileDateRangeCalendarRef.current?.show?.(); }} className=\"sw-form-field sw-com-cal\">\r\n <div><label>Departure</label><p>{segments[0]?.dateRange?.[0]?.toLocaleDateString('en-GB', { day: '2-digit', month: 'short', year: 'numeric' })}</p></div>\r\n <Calendar\r\n numberOfMonths={2}\r\n ref={dateRangeCalendarRef}\r\n id=\"dateRange\"\r\n appendTo=\"self\"\r\n selectionMode=\"range\"\r\n value={segments[0]?.dateRange ?? null}\r\n minDate={new Date()}\r\n onChange={(e) => {\r\n const range = e.value as (Date | null)[] | null;\r\n setSegments(prev => {\r\n const u = [...prev];\r\n if (!u[0]) return prev;\r\n u[0] = {\r\n ...u[0],\r\n dateRange: range,\r\n departureDate: range?.[0] ?? new Date(),\r\n returnDate: range?.[1] ?? new Date()\r\n };\r\n return u;\r\n });\r\n if (range?.[0] && range?.[1]) setTimeout(() => { dateRangeCalendarRef.current?.hide?.(); }, 150);\r\n }}\r\n dateFormat=\"dd M yy\"\r\n placeholder=\"Select date range\"\r\n className=\"p-inputtext-sm tfsw-calendar-input MobileHide\"\r\n />\r\n <Calendar\r\n numberOfMonths={10}\r\n ref={mobileDateRangeCalendarRef}\r\n id=\"dateRangeMobile\"\r\n appendTo=\"self\"\r\n selectionMode=\"range\"\r\n value={segments[0]?.dateRange ?? null}\r\n minDate={new Date()}\r\n onChange={(e) => {\r\n const range = e.value as (Date | null)[] | null;\r\n setSegments(prev => {\r\n const u = [...prev];\r\n if (!u[0]) return prev;\r\n u[0] = {\r\n ...u[0],\r\n dateRange: range,\r\n departureDate: range?.[0] ?? new Date(),\r\n returnDate: range?.[1] ?? new Date()\r\n };\r\n return u;\r\n });\r\n }}\r\n dateFormat=\"dd M yy\"\r\n placeholder=\"Select date range\"\r\n className=\"p-inputtext-sm tfsw-calendar-input MobileShow\"\r\n headerTemplate={() => (\r\n <div className=\"mobileHead MobileShow\">\r\n <a type=\"button\" onClick={(e) => { e.stopPropagation(); mobileDateRangeCalendarRef.current?.hide?.(); }}>\r\n <svg width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M19 5L5 19\" stroke=\"black\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"></path><path d=\"M5 5L19 19\" stroke=\"black\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"></path></svg>\r\n </a>\r\n <h4>Departure</h4>\r\n </div>\r\n )}\r\n footerTemplate={() => (\r\n <div className=\"mobileFooter MobileShow\">\r\n <button\r\n type=\"button\"\r\n className=\"sw-confirm-btn\"\r\n onClick={(e) => { e.stopPropagation(); mobileDateRangeCalendarRef.current?.hide?.(); }}\r\n >\r\n Confirm\r\n </button>\r\n </div>\r\n )}\r\n />\r\n </div>\r\n <div style={{ cursor: 'pointer' }} className=\"sw-form-field sw-com-cal\" onClick={() => { dateRangeCalendarRef.current?.show?.(); mobileDateRangeCalendarRef.current?.show?.(); }}>\r\n <div><label>Return</label><p>{(segments[0]?.dateRange?.[1] ?? segments[0]?.dateRange?.[0])?.toLocaleDateString('en-GB', { day: '2-digit', month: 'short', year: 'numeric' })}</p></div>\r\n </div>\r\n </>\r\n ) : (\r\n <>\r\n <div\r\n className=\"sw-form-field sw-pos-rel sw-com-cal\"\r\n style={{ cursor: 'pointer' }}\r\n onClick={() => segmentCalendarRefs.current[0]?.show?.()}\r\n >\r\n <label>Departure</label>\r\n <p>{formatDisplayDate(segments[0]?.departureDate)}</p>\r\n <Calendar\r\n numberOfMonths={2}\r\n ref={(el) => { segmentCalendarRefs.current[0] = el; }}\r\n value={segments[0]?.departureDate ?? null}\r\n onChange={(e) => {\r\n const raw = e.value as Date | string | null;\r\n const nextDate = raw instanceof Date ? raw : (typeof raw === \"string\" ? new Date(raw) : null);\r\n handleSegmentFieldChange(\r\n 0,\r\n \"departureDate\",\r\n nextDate && !isNaN(nextDate.getTime()) ? nextDate : null\r\n );\r\n }}\r\n appendTo=\"self\"\r\n minDate={new Date()}\r\n dateFormat=\"dd M yy\"\r\n className=\"p-inputtext-sm tfsw-calendar-input MobileHide\"\r\n />\r\n <Calendar\r\n numberOfMonths={10}\r\n ref={(el) => { segmentCalendarRefs.current[0] = el; }}\r\n value={segments[0]?.departureDate ?? null}\r\n onChange={(e) => {\r\n const raw = e.value as Date | string | null;\r\n const nextDate = raw instanceof Date ? raw : (typeof raw === \"string\" ? new Date(raw) : null);\r\n handleSegmentFieldChange(\r\n 0,\r\n \"departureDate\",\r\n nextDate && !isNaN(nextDate.getTime()) ? nextDate : null\r\n );\r\n }}\r\n appendTo=\"self\"\r\n minDate={new Date()}\r\n dateFormat=\"dd M yy\"\r\n className=\"p-inputtext-sm tfsw-calendar-input MobileShow\"\r\n headerTemplate={() => (\r\n <div className=\"mobileHead MobileShow\">\r\n <a type=\"button\" onClick={(e) => { e.stopPropagation(); segmentCalendarRefs.current[0]?.hide?.(); }}>\r\n <svg width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M19 5L5 19\" stroke=\"black\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"></path><path d=\"M5 5L19 19\" stroke=\"black\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"></path></svg>\r\n </a>\r\n <h4>Departure</h4>\r\n </div>\r\n )}\r\n footerTemplate={() => (\r\n <div className=\"mobileFooter MobileShow\">\r\n <button\r\n type=\"button\"\r\n className=\"sw-confirm-btn\"\r\n onClick={(e) => { e.stopPropagation(); segmentCalendarRefs.current[0]?.hide?.(); }}\r\n >\r\n Confirm\r\n </button>\r\n </div>\r\n )}\r\n />\r\n </div>\r\n <div className=\"sw-form-field sw-pos-rel sw-com-cal sw-add-return-label\" style={{ cursor: 'pointer' }} onClick={() => { setTripType('round-trip'); setTimeout(() => document.getElementById('dateRange')?.querySelector('input')?.focus?.(), 100); }}>\r\n <label>Add return</label>\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n )}\r\n {(tripType === 'multi-city' || tripType === 'custom-search') && (\r\n <div className=\"sw-srh-mc-foot\">\r\n {segments.length < getMaxSegments() && (\r\n <button type=\"button\" className=\"sw-srh-add-btn\" onClick={addFlightSegment}>\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path fill=\"none\" d=\"M0 0h16v16H0z\"></path><path d=\"M15 7H9V1H7v6H1v2h6v6h2V9h6z\"></path>\r\n </svg>\r\n Add Another Flight\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n <div className=\"sw-form-field sw-traveller sw-pos-rel\">\r\n <label htmlFor=\"rooms\">Travellers and Class</label>\r\n <div className=\"sw-custom-dropdown\" ref={roomsGuestsMenuRef}>\r\n <div\r\n className=\"sw-custom-dropdown-trigger\"\r\n onClick={() => setIsRoomsGuestsMenuOpen(!isRoomsGuestsMenuOpen)}\r\n >\r\n <span>\r\n {(segments[0]?.adultCount ?? 0) + (segments[0]?.childCount ?? 0) + (segments[0]?.infantCount ?? 0)} Traveller{((segments[0]?.adultCount ?? 0) + (segments[0]?.childCount ?? 0) + (segments[0]?.infantCount ?? 0)) !== 1 ? 's' : ''}, {segments[0]?.travelerClass ?? 'Economy'}\r\n </span>\r\n </div>\r\n {isRoomsGuestsMenuOpen && (\r\n <div className=\"sw-rooms-guests-menu\">\r\n <div className=\"mobileHead MobileShow\">\r\n <a type=\"button\" onClick={(e) => { e.stopPropagation(); setIsRoomsGuestsMenuOpen(false); }}>\r\n <svg width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M19 5L5 19\" stroke=\"black\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"></path><path d=\"M5 5L19 19\" stroke=\"black\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"></path></svg>\r\n </a>\r\n <h4>Number of Travellers</h4>\r\n </div>\r\n <h3 className=\"sw-rooms-guests-title\">Number of Travellers\r\n </h3>\r\n <div className=\"sw-rooms-gst-content\">\r\n <div className=\"sw-srh-pax\">\r\n <div className=\"sw-srh-common-adult\"><h3>Adults</h3><p>Age (12+)</p></div>\r\n <div className=\"sw-srh-button-wrapper\">\r\n {[1, 2, 3, 4, 5, 6, 7, 8, 9].map((count) => {\r\n const childCount = segments[0]?.childCount ?? 0;\r\n const infantCount = segments[0]?.infantCount ?? 0;\r\n const isDisabled = (count + childCount) > 9;\r\n \r\n return (\r\n <button \r\n key={count}\r\n type=\"button\"\r\n className={`sw-en-font ${(segments[0]?.adultCount ?? 0) === count ? 'sw-active-button' : ''} ${isDisabled ? 'disabled' : ''}`}\r\n disabled={isDisabled}\r\n onClick={() => {\r\n const newChildCount = Math.min(childCount, 9 - count);\r\n setSegments(prev => {\r\n const updated = [...prev];\r\n if (!updated[0]) return prev;\r\n updated[0] = {\r\n ...updated[0],\r\n adultCount: count,\r\n childCount: newChildCount,\r\n infantCount: Math.min(infantCount, count)\r\n };\r\n return updated;\r\n });\r\n }}\r\n >\r\n {count}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n <div className=\"sw-srh-pax\">\r\n <div className=\"sw-srh-common-adult\"><h3>Child</h3><p>Age (2-11)</p></div>\r\n <div className=\"sw-srh-button-wrapper\">\r\n {[0, 1, 2, 3, 4, 5, 6, 7, 8].map((count) => {\r\n const adultCount = segments[0]?.adultCount ?? 0;\r\n const isDisabled = (adultCount + count) > 9;\r\n \r\n return (\r\n <button \r\n key={count}\r\n type=\"button\"\r\n className={`sw-en-font ${(segments[0]?.childCount ?? 0) === count ? 'sw-active-button' : ''} ${isDisabled ? 'disabled' : ''}`}\r\n disabled={isDisabled}\r\n onClick={() => handleTravellerChange(\"childCount\", count)}\r\n >\r\n {count}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n <div className=\"sw-srh-pax\">\r\n <div className=\"sw-srh-common-adult\"><h3>Infant</h3><p>Under 2 years</p></div>\r\n <div className=\"sw-srh-button-wrapper\">\r\n {[0, 1, 2, 3, 4, 5, 6, 7, 8, 9].map((count) => {\r\n const adultCount = segments[0]?.adultCount ?? 0;\r\n const isDisabled = count > adultCount;\r\n \r\n return (\r\n <button \r\n key={count}\r\n type=\"button\"\r\n className={`sw-en-font ${(segments[0]?.infantCount ?? 0) === count ? 'sw-active-button' : ''} ${isDisabled ? 'disabled' : ''}`}\r\n disabled={isDisabled}\r\n onClick={() => handleTravellerChange(\"infantCount\", count)}\r\n >\r\n {count}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n <h3 className=\"sw-rooms-guests-title\">Travel Class\r\n </h3>\r\n <div className=\"sw-srh-class\">\r\n {['Economy', 'Business', 'First Class', 'Premium Economy'].map((classOption) => (\r\n <label key={classOption} className=\"sw-tab-checkbox\">\r\n <input \r\n type=\"radio\" \r\n name=\"travel-class\" \r\n checked={(segments[0]?.travelerClass ?? 'Economy') === classOption}\r\n onChange={() => handleTravellerChange(\"travelerClass\", classOption)}\r\n />\r\n <span className=\"sw-tab-content\">\r\n {classOption}\r\n </span>\r\n </label>\r\n ))}\r\n </div>\r\n <div className=\"sw-rooms-guests-footer\">\r\n <div></div>\r\n <div className=\"sw-rooms-guests-cta\">\r\n <button\r\n type=\"button\"\r\n className=\"sw-reset-button\"\r\n onClick={() => {\r\n setSegments(prev => {\r\n const updated = [...prev];\r\n if (!updated[0]) return prev;\r\n updated[0] = { ...updated[0], adultCount: 1, childCount: 0, infantCount: 0, travelerClass: 'Economy' };\r\n return updated;\r\n });\r\n }}\r\n >\r\n Reset\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"sw-apply-button\"\r\n onClick={() => setIsRoomsGuestsMenuOpen(false)}\r\n >\r\n Apply\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n <button type=\"submit\" className=\"sw-search-button br-right\">\r\n <span className=\"pi pi-search\" aria-hidden=\"true\" />\r\n Search\r\n </button>\r\n </form>\r\n <div className=\"sw-advanced-search-options\">\r\n <Accordion>\r\n <AccordionTab header=\"Advanced Search options\">\r\n <div className=\"sw-fsrh-adv-cont\">\r\n <AutoComplete\r\n value={selectedAirlines}\r\n suggestions={airlineSuggestions}\r\n completeMethod={(e) => {\r\n const query = e.query ?? \"\";\r\n setAirlineQuery(query);\r\n triggerSearchAirline(query);\r\n }}\r\n onChange={(e) => {\r\n const next = (e.value ?? []) as AirlineOption[];\r\n if (next.length > 3) {\r\n setAirlineLimitError(\"You can select up to 3 airlines.\");\r\n return;\r\n }\r\n setAirlineLimitError(null);\r\n setSelectedAirlines(next);\r\n setAdvancedOptions(prev => ({\r\n ...prev,\r\n preferredAirlineList: next.map((item) => item.airline_code)\r\n }));\r\n }}\r\n field=\"airline_name\"\r\n multiple\r\n forceSelection\r\n placeholder=\"Preferred airline\"\r\n />\r\n {airlineLimitError && (\r\n <small style={{ color: \"var(--sw-error)\" }}>\r\n {airlineLimitError}\r\n </small>\r\n )}\r\n <div className=\"sw-fsrh-chk-main\">\r\n <label className=\"sw-material-checkbox\">\r\n <input \r\n type=\"checkbox\" \r\n checked={advancedOptions.isRefundable}\r\n onChange={(e) => setAdvancedOptions(prev => ({ ...prev, isRefundable: e.target.checked }))}\r\n />\r\n <span className=\"sw-checkmark\"></span> \r\n Refundable\r\n </label>\r\n <label className=\"sw-material-checkbox\">\r\n <input \r\n type=\"checkbox\" \r\n checked={advancedOptions.isBaggage}\r\n onChange={(e) => setAdvancedOptions(prev => ({ ...prev, isBaggage: e.target.checked }))}\r\n />\r\n <span className=\"sw-checkmark\"></span> \r\n Baggage only \r\n </label>\r\n <label className=\"sw-material-checkbox\">\r\n <input \r\n type=\"checkbox\" \r\n checked={advancedOptions.isDirectFlights}\r\n onChange={(e) => setAdvancedOptions(prev => ({ ...prev, isDirectFlights: e.target.checked }))}\r\n />\r\n <span className=\"sw-checkmark\"></span> \r\n Direct Flights \r\n </label>\r\n </div>\r\n </div>\r\n </AccordionTab>\r\n </Accordion>\r\n </div>\r\n </div>\r\n </div>\r\n </PrimeReactProvider>\r\n )\r\n}\r\n\r\n","export const flightSearchWidgetStyles = `\r\n.sw-container {\r\n --sw-font-family: Montserrat, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\r\n --sw-en-font-family: Arial, sans-serif;\r\n --sw-label-color: #66797F;\r\n --sw-body-text: #0B1215;\r\n --sw-btn-radius: 8px;\r\n --sw-radius: var(--sw-size-md-1);\r\n --sw-primary-btn: var(--primary);\r\n --sw-primary-button-text: #ffffff;\r\n --sw-button-primary-border: var(--primary);\r\n --sw-form-border: #d8dcde;\r\n --sw-white: #ffffff;\r\n --sw-gray: #999;\r\n --sw-error: #f60b0b;\r\n --sw-widget-bg: #f5f5f8;\r\n --sw-widget-font-size: 1.4rem;\r\n --sw-widget-z-index-base: 1000;\r\n --sw-widget-transition: all 0.2s ease;\r\n --sw-widget-shadow: 0 var(--sw-size-sm) 8px rgba(0, 0, 0, 0.1);\r\n --sw-widget-shadow-hover: 0 4px var(--sw-size-md-1) rgba(0, 0, 0, 0.15);\r\n --sw-space-sm: 2px;\r\n --sw-space-md: 10px;\r\n --sw-space-lg: 20px;\r\n --sw-size-sm: 2px;\r\n --sw-size-md: 10px;\r\n --sw-size-md-1: 12px;\r\n --sw-size-md-2: 14px;\r\n --sw-size-md-3: 16px;\r\n --sw-size-md-4: 18px;\r\n --sw-size-lg: 20px;\r\n}\r\n.sw-container {\r\n contain: layout;\r\n position: relative;\r\n display: block;\r\n width: 100%;\r\n min-width: 1240px;\r\n margin: 0;\r\n padding: 0;\r\n box-sizing: border-box;\r\n color: var(--sw-body-text);\r\n font-family: var(--sw-font-family);\r\n font-size: var(--sw-widget-font-size);\r\n font-weight: 400;\r\n line-height: 1.5;\r\n -webkit-font-smoothing: antialiased;\r\n -moz-osx-font-smoothing: grayscale;\r\n -webkit-tap-highlight-color: transparent;\r\n background: var(--sw-widget-bg);\r\n *,\r\n *::before,\r\n *::after {\r\n box-sizing: border-box;\r\n }\r\n}\r\n.sw-container button,\r\n.sw-container input {\r\n font-family: var(--sw-font-family);\r\n}\r\n.sw-container h1,\r\n.sw-container h2,\r\n.sw-container h3,\r\n.sw-container h4,\r\n.sw-container h5,\r\n.sw-container h6,\r\n.sw-container p {\r\n display: block;\r\n margin: 0;\r\n color: inherit;\r\n font-family: var(--sw-font-family);\r\n font-weight: normal;\r\n line-height: 1.4;\r\n}\r\n.sw-container h1 {\r\n font-size: 22px;\r\n}\r\n.sw-container h2 {\r\n font-size: 20px;\r\n}\r\n.sw-container h3 {\r\n font-size: 18px;\r\n}\r\n.sw-container h4 {\r\n font-size: 16px;\r\n}\r\n.sw-container h5 {\r\n font-size: 14px;\r\n}\r\n.sw-container h6,\r\n.sw-container small {\r\n font-size: 12px;\r\n}\r\n.sw-container .sw-fw500 {\r\n font-weight: 500;\r\n}\r\n.sw-container .sw-flex {\r\n display: flex;\r\n}\r\n.sw-container .sw-align-center {\r\n display: flex;\r\n align-items: center;\r\n}\r\n.sw-container .sw-gap-5 {\r\n gap: 5px;\r\n}\r\n.sw-container .sw-gap-15 {\r\n gap: 15px;\r\n}\r\n.sw-container .sw-justify-between {\r\n justify-content: space-between;\r\n}\r\n.sw-container .enFont{\r\n font-family: var(--sw-en-font-family);\r\n}\r\n.sw-container .sw-text-ellipsis {\r\n display: -webkit-box;\r\n overflow: hidden;\r\n -webkit-box-orient: vertical;\r\n text-overflow: ellipsis;\r\n}\r\n.sw-container .sw-text-label {\r\n color: var(--sw-label-color);\r\n}\r\n.sw-booking-form {\r\n position: relative;\r\n display: grid;\r\n grid-template-columns: 1fr repeat(4, minmax(0, 1fr)) minmax(80px, 0.8fr);\r\n gap: var(--sw-space-sm);\r\n min-height: 55px;\r\n min-width: 0; \r\n border-radius: var(--sw-radius);\r\n overflow: visible; \r\n}\r\n.sw-card-box {\r\n position: relative;\r\n display: block;\r\n padding: 20px;\r\n background-color: var(--sw-white);\r\n border-radius: var(--sw-radius);\r\n}\r\n.sw-card-box .br-right{\r\n border-top-right-radius: var(--sw-radius);\r\n border-bottom-right-radius: var(--sw-radius);\r\n}\r\n.sw-card-box .br-left{\r\n border-top-left-radius: var(--sw-radius);\r\n border-bottom-left-radius: var(--sw-radius);\r\n}\r\n.sw-com-cal .p-disabled{\r\n opacity: 0.3;\r\n}\r\n.sw-form-field {\r\n display: flex;\r\n flex-direction: column;\r\n flex: 1 1 auto; \r\n gap: 3px;\r\n padding: 10px 15px;\r\n background-color: #f8f8f8;\r\n min-width: 0; \r\n overflow: visible; \r\n}\r\n.sw-form-field label {\r\n display: block;\r\n width: 100%;\r\n margin: 0;\r\n padding: 0;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n color: var(--sw-label-color);\r\n font-size: 12px;\r\n font-weight: 500;\r\n -webkit-box-orient: vertical;\r\n text-overflow: ellipsis;\r\n text-align: initial;\r\n}\r\n.p-button-label {\r\n flex: unset;\r\n}\r\n.sw-form-field input,\r\n.sw-form-field .p-inputtext {\r\n display: block;\r\n width: 100%;\r\n margin: 0;\r\n padding: 0;\r\n border: 0;\r\n border-radius: 0;\r\n outline: none;\r\n background: transparent;\r\n box-shadow: none;\r\n color: var(--sw-body-text);\r\n font-size: 14px;\r\n font-weight: 500;\r\n}\r\n.sw-form-field input::placeholder,\r\n.sw-form-field .p-inputtext::placeholder {\r\n color: var(--sw-label-color) !important;\r\n}\r\n.sw-form-swap {\r\n position: absolute;\r\n top: 50%;\r\n inset-inline-end: 50%;\r\n z-index: 2;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 3px;\r\n border: 1px solid var(--sw-form-border);\r\n border-radius: 50%;\r\n background-color: #fff;\r\n cursor: pointer;\r\n transform: translate(50%, -50%);\r\n}\r\n.sw-srh-wrap.sw-srh-box.sw-pos-rel .sw-form-field.sw-pos-rel:last-child {\r\npadding-inline-start: 25px;\r\n}\r\n.sw-custom-dropdown {\r\n display: block;\r\n width: 100%;\r\n}\r\n.sw-custom-dropdown-trigger {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n flex: 1 1 auto; \r\n width: 100%;\r\n min-width: 0; \r\n margin: 0;\r\n padding: 0;\r\n border: 0;\r\n outline: none;\r\n background: transparent;\r\n cursor: pointer;\r\n color: var(--sw-body-text);\r\n font-size: 14px;\r\n font-weight: 500;\r\n}\r\n.sw-custom-dropdown-trigger .sw-placeholder {\r\n color: var(--sw-label-color);\r\n}\r\n.sw-dropdown-arrow {\r\n margin-left: 8px;\r\n color: var(--sw-label-color);\r\n font-size: 10px;\r\n transition: transform 0.2s ease;\r\n}\r\n.sw-dropdown{\r\n position: absolute;\r\n top: calc(100% + 5px);\r\n left: 0;\r\n right: 0;\r\n z-index: calc(var(--sw-widget-z-index-base) + 5);\r\n display: block; \r\n visibility: visible; \r\n opacity: 1; \r\n}\r\n.sw-dropdown,\r\n.p-autocomplete-panel {\r\n width: 380px;\r\n max-height: 310px;\r\n margin: 0;\r\n padding: 0;\r\n overflow: auto;\r\n overflow-x: hidden;\r\n background: var(--sw-white);\r\n border: 1px solid var(--sw-form-border);\r\n border-radius: var(--sw-radius);\r\n box-shadow: var(--sw-widget-shadow);\r\n}\r\n.sw-dropdown::-webkit-scrollbar {\r\n display: none;\r\n}\r\n.sw-dropdown-list-card,\r\n.sw-dropdown-list-box,\r\n.p-autocomplete-item {\r\n display: flex;\r\n align-items: center;\r\n gap: 15px;\r\n margin: 0 20px;\r\n padding: 10px 0;\r\n cursor: pointer;\r\n font-family: var(--sw-font-family);\r\n}\r\n.p-autocomplete-item{\r\n font-size: 14px;\r\n font-weight: 400;\r\n}\r\n.p-autocomplete-item:hover{\r\n background-color: var(--primary-light);\r\n}\r\n.sw-dropdown-list-box {\r\n display: flex;\r\n justify-content: space-between;\r\n}\r\n.sw-dropdown-list-card {\r\n display: grid;\r\n grid-template-columns: 45px auto;\r\n}\r\n.sw-dropdown-item-badge {\r\n display: grid;\r\n place-items: center;\r\n width: fit-content;\r\n height: unset;\r\n margin: 0;\r\n padding: 4px 8px;\r\n background-color: #f4f5f5;\r\n border-radius: 4px;\r\n font-weight: 500;\r\n}\r\n.sw-dropdown-list {\r\n display: block;\r\n margin: 0;\r\n padding: 0;\r\n list-style: none;\r\n}\r\n.sw-dropdown-list-item {\r\n display: block;\r\n margin: 0;\r\n padding: 0;\r\n cursor: pointer;\r\n color: var(--sw-body-text);\r\n font-size: 14px;\r\n transition: background-color 0.2s ease;\r\n}\r\n.sw-current {\r\n font-weight: 500;\r\n}\r\n.sw-en-font {\r\n font-family: Arial, sans-serif; \r\n}\r\n.sw-bg-color-loc {\r\n color: var(--primary);\r\n}\r\n.sw-scale-rotate {\r\n transition: transform 0.2s ease;\r\n}\r\n.sw-custom-dropdown-item:hover {\r\n background-color: var(--secondary-light);\r\n}\r\n.sw-custom-dropdown-item:first-child {\r\n border-top-left-radius: var(--sw-btn-radius);\r\n border-top-right-radius: var(--sw-btn-radius);\r\n}\r\n.sw-custom-dropdown-item:last-child {\r\n border-bottom-left-radius: var(--sw-btn-radius);\r\n border-bottom-right-radius: var(--sw-btn-radius);\r\n}\r\n.sw-rooms-guests-menu {\r\n position: absolute;\r\n top: 100%;\r\n right: 0;\r\n z-index: var(--sw-widget-z-index-base);\r\n display: block;\r\n width: 75%;\r\n margin-top: 4px;\r\n padding: 20px;\r\n background: var(--sw-white);\r\n border: 1px solid var(--sw-form-border);\r\n border-radius: var(--sw-radius);\r\n box-shadow: var(--sw-widget-shadow);\r\n}\r\n.sw-pos-rel {\r\n position: relative;\r\n}\r\n.sw-rooms-guests-title {\r\n margin: 0 0 15px 0 !important;\r\n font-size: 16px !important;\r\n font-weight: 500 !important;\r\n}\r\n.sw-room-section {\r\n display: grid;\r\n grid-template-columns: 1.2fr 3fr 4fr 50px;\r\n align-items: center;\r\n padding: 10px 0;\r\n}\r\n.sw-pb0 {\r\n padding-bottom: 0;\r\n}\r\n.sw-room-section:last-of-type {\r\n margin-bottom: 15px;\r\n}\r\n.sw-room-header {\r\n display: flex;\r\n align-items: center;\r\n gap: 5px;\r\n color: var(--primary);\r\n font-size: 14px;\r\n font-weight: 500;\r\n}\r\n.sw-room-controls-child {\r\n display: grid;\r\n grid-template-columns: repeat(4, minmax(0, 1fr));\r\n gap: var(--sw-space-lg);\r\n min-width: 0; \r\n}\r\n.sw-room-controls-child .p-dropdown {\r\n padding: 10px;\r\n border: 1px solid var(--sw-form-border);\r\n border-radius: var(--sw-radius);\r\n}\r\n.sw-room-controls-child .p-dropdown-item {\r\n padding: 10px;\r\n font-size: 14px;\r\n}\r\n.sw-room-controls-child .p-dropdown-panel {\r\n background: var(--sw-white);\r\n border: 1px solid var(--sw-form-border);\r\n border-radius: var(--sw-btn-radius);\r\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\r\n}\r\n.sw-room-controls-group {\r\n display: grid;\r\n grid-template-columns: repeat(2, minmax(0, 1fr));\r\n justify-content: center;\r\n gap: var(--sw-space-md);\r\n min-width: 0; \r\n}\r\n.sw-room-control-item {\r\n display: flex;\r\n flex-direction: column;\r\n flex: 1 1 auto; \r\n justify-content: space-between;\r\n gap: var(--sw-space-sm);\r\n min-width: 0; \r\n}\r\n.sw-room-control-label {\r\n color: var(--sw-body-text);\r\n font-size: 14px;\r\n font-weight: 400;\r\n}\r\n.sw-room-control-buttons {\r\n display: grid;\r\n grid-template-columns: 36px 40px 36px;\r\n align-items: center;\r\n overflow: hidden;\r\n}\r\n.sw-count-button {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 36px;\r\n height: 36px;\r\n margin: 0;\r\n padding: 0;\r\n border: none;\r\n border-radius: 50%;\r\n background: var(--primary);\r\n cursor: pointer;\r\n color: var(--sw-white);\r\n font-size: 20px;\r\n font-weight: 500;\r\n transition: var(--sw-widget-transition);\r\n}\r\n.sw-count-button:focus-visible {\r\n outline: none;\r\n}\r\n.sw-count-button.sw-disabled {\r\n opacity: 0.6;\r\n cursor: not-allowed;\r\n}\r\n.sw-count-button:disabled {\r\n cursor: not-allowed;\r\n}\r\n.sw-count-value {\r\n min-width: 30px;\r\n text-align: center;\r\n color: var(--sw-body-text);\r\n font-size: 16px;\r\n font-weight: 500;\r\n}\r\n.sw-add-room-button {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n width: auto;\r\n height: 40px;\r\n margin: 0 !important;\r\n padding: 1rem;\r\n border: 1px solid var(--primary);\r\n border-radius: var(--sw-radius);\r\n background-color: transparent;\r\n cursor: pointer;\r\n color: var(--primary);\r\n font-size: 14px;\r\n font-weight: 500;\r\n}\r\n.sw-rooms-guests-cta {\r\n display: flex;\r\n gap: 10px;\r\n}\r\n.sw-rooms-guests-footer {\r\n display: flex;\r\n justify-content: space-between;\r\n gap: 10px;\r\n margin-top: 15px;\r\n padding-top: 15px;\r\n border-top: 1px solid var(--sw-form-border);\r\n}\r\n.sw-reset-button {\r\n padding: 10px 20px;\r\n border: 1px solid var(--primary);\r\n border-radius: var(--sw-btn-radius);\r\n background: transparent;\r\n cursor: pointer;\r\n color: var(--primary);\r\n font-size: 14px;\r\n font-weight: 500;\r\n transition: all 0.2s ease;\r\n}\r\n.sw-apply-button {\r\n padding: 10px 20px;\r\n border: 1px solid var(--sw-button-primary-border);\r\n border-radius: var(--sw-btn-radius);\r\n background: var(--sw-primary-btn);\r\n cursor: pointer;\r\n color: var(--sw-primary-button-text);\r\n font-size: 14px;\r\n font-weight: 500;\r\n transition: all 0.2s ease;\r\n}\r\n.sw-search-button,\r\n.sw-search-button.p-button {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 10px;\r\n width: auto;\r\n height: 100%;\r\n min-height: 56px;\r\n margin: 0;\r\n padding: 0 15px;\r\n border: 1px solid var(--sw-button-primary-border);\r\n background-color: var(--sw-primary-btn);\r\n cursor: pointer;\r\n color: var(--sw-primary-button-text);\r\n font-size: 16px;\r\n font-weight: 400;\r\n transition: var(--sw-widget-transition);\r\n}\r\n.sw-search-button:focus-visible,\r\n.sw-search-button.p-button:focus-visible {\r\n outline: 2px solid var(--primary);\r\n outline-offset: 2px;\r\n}\r\n.sw-search-button .p-button-icon-left {\r\n margin: 0;\r\n}\r\n.sw-search-button svg,\r\n.sw-search-button .p-button-icon {\r\n flex-shrink: 0;\r\n}\r\n.sw-com-cal .p-calendar .p-datepicker { \r\n top: 100%;\r\n display: block;\r\n min-width: 100%;\r\n margin-top: 5px;\r\n padding: 15px;\r\n background-color: var(--sw-white);\r\n border: 1px solid var(--sw-form-border);\r\n border-radius: var(--sw-radius);\r\n box-shadow: var(--sw-widget-shadow);\r\n}\r\n.sw-srh-wrap {\r\n display: flex;\r\n gap: 2px;\r\n}\r\n.sw-com-cal p{\r\n color: var(--sw-body-text);\r\n font-size: 14px;\r\n font-weight: 500;\r\n}\r\n.sw-com-cal .p-inputtext{\r\n visibility: hidden;\r\n height: 0;\r\n width: 0;\r\n ;\r\n}\r\n.p-datepicker-header {\r\n padding-bottom: 15px;\r\n}\r\n.p-datepicker-prev[style=\"visibility: hidden;\"]::after,\r\n.p-datepicker-next[style=\"visibility: hidden;\"]::after {\r\n visibility: hidden !important;\r\n}\r\n.p-datepicker-prev,\r\n.p-datepicker-next {\r\n cursor: pointer;\r\n\r\n}\r\n.p-datepicker-prev::after,\r\n.p-datepicker-next::after {\r\n content: \"\";\r\n display: block;\r\n width: 14px;\r\n height: 14px;\r\n visibility: visible;\r\n background-image: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'><path fill='%231b1a1f' d='m222.927 580.115 301.354 328.512c24.354 28.708 20.825 71.724-7.883 96.078s-71.724 20.825-96.078-7.883L19.576 559.963a67.9 67.9 0 0 1-13.784-20.022 68 68 0 0 1-5.977-29.488l.001-.063a68.34 68.34 0 0 1 7.265-29.134 68 68 0 0 1 1.384-2.6 67.6 67.6 0 0 1 10.102-13.687L429.966 21.113c25.592-27.611 68.721-29.247 96.331-3.656s29.247 68.721 3.656 96.331L224.088 443.784h730.46c37.647 0 68.166 30.519 68.166 68.166s-30.519 68.166-68.166 68.166z'/></svg>\");\r\n}\r\n.p-datepicker-header button {\r\n margin: 0;\r\n padding: 0 5px;\r\n border: 0;\r\n border-color: var(--sw-white);\r\n outline: none;\r\n background: transparent;\r\n color: var(--sw-body-text);\r\n font-size: 16px;\r\n font-weight: 500;\r\n line-height: 20px;\r\n}\r\n.p-datepicker-header button .p-icon {\r\n display: none;\r\n}\r\n.p-datepicker .p-datepicker-next {\r\n transform: rotate(180deg);\r\n}\r\n.p-datepicker .p-datepicker-header button {\r\n border: 0;\r\n border-color: var(--sw-white);\r\n outline: none;\r\n box-shadow: none !important;\r\n background: transparent;\r\n color: var(--sw-body-text);\r\n font-size: 16px;\r\n font-weight: 500;\r\n line-height: 20px;\r\n}\r\n.p-datepicker .p-datepicker-calendar-container th {\r\n padding: 10px 0;\r\n color: var(--sw-body-text);\r\n font-size: 14px;\r\n font-weight: 400;\r\n line-height: 1.4;\r\n}\r\n.p-datepicker .p-datepicker-calendar-container td {\r\n padding: 0;\r\n}\r\n.p-datepicker .p-datepicker-calendar-container td span {\r\n padding: 10px 0;\r\n border-radius: 0;\r\n font-size: 14px;\r\n width: 45px;\r\n height: 45px;\r\n}\r\n.p-datepicker-group-container .p-datepicker-group:not(:last-child) {\r\n border-inline-end: 1px solid var(--sw-form-border);\r\n padding-inline-end: 10px;\r\n margin-inline-end: 10px;\r\n}\r\n.p-datepicker-other-month span{\r\n opacity: 0;\r\n}\r\n.p-datepicker .p-highlight {\r\n position: relative;\r\n background: var(--primary-light) !important;\r\n color: var(--sw-white) !important;\r\n}\r\n.sw-product-tabs {\r\n position: relative;\r\n z-index: 1;\r\n}\r\n.sw-product-tabs .p-tabview-nav {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 10px;\r\n margin: 0;\r\n padding: 0;\r\n list-style: none;\r\n}\r\n.sw-product-tabs .sw-product-list {\r\n position: relative;\r\n gap: 10px;\r\n padding: 0 10px 10px;\r\n border: 0 !important;\r\n border-radius: 0;\r\n cursor: pointer;\r\n}\r\n.p-tabview-selected .sw-product-list:before {\r\n content: \"\";\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n inset-inline-start: 0;\r\n width: 100%;\r\n border: 2px solid var(--primary) !important;\r\n border-radius: 40px;\r\n}\r\n.p-tabview-ink-bar {\r\n display: none;\r\n}\r\n.sw-advanced-search-options .p-accordion-header-link {\r\n display: flex;\r\n flex-direction: row-reverse;\r\n gap: 10px;\r\n width: fit-content;\r\n margin-top: 15px;\r\n color: var(--sw-body-text);\r\n font-size: 14px;\r\n}\r\n.sw-advanced-search-options .p-toggleable-content {\r\n margin-top: 20px;\r\n}\r\n.sw-advanced-search-options .p-accordion-content .sw-hsrh-advan-cont:not(:last-child) {\r\n margin-bottom: 16px;\r\n}\r\n.sw-advanced-search-options .p-accordion-header-link svg {\r\n transform: rotate(90deg);\r\n}\r\n.sw-advanced-search-options .p-accordion-header-link[aria-expanded=\"true\"] svg {\r\n transform: scale(-1);\r\n}\r\n.sw-material-checkbox {\r\n position: relative;\r\n display: inline-flex;\r\n gap: 10px;\r\n cursor: pointer;\r\n user-select: none;\r\n color: var(--sw-body-text);\r\n font-size: 14px;\r\n}\r\n.sw-material-checkbox input {\r\n display: none;\r\n}\r\n.sw-material-checkbox input:checked + .sw-checkmark {\r\n background-color: var(--primary);\r\n border-color: var(--primary);\r\n}\r\n.sw-material-checkbox input:checked + .sw-checkmark::after {\r\n content: \"\";\r\n position: absolute;\r\n top: 2px;\r\n left: 6px;\r\n display: block;\r\n width: 6px;\r\n height: 11px;\r\n border: solid #fff;\r\n border-width: 0 2px 2px 0;\r\n transform: rotate(45deg);\r\n}\r\n.sw-material-checkbox .sw-checkmark {\r\n position: relative;\r\n display: inline-block;\r\n width: 20px;\r\n min-width: 20px;\r\n height: 20px;\r\n background-color: #fff;\r\n border: 1px solid var(--sw-form-border);\r\n border-radius: 4px;\r\n transition: background-color 0.3s, border-color 0.3s;\r\n}\r\n.sw-material-checkbox .sw-checkmark::after {\r\n content: \"\";\r\n position: absolute;\r\n display: none;\r\n}\r\n.sw-tab-checkbox {\r\n display: flex;\r\n cursor: pointer;\r\n -webkit-user-select: none;\r\n user-select: none;\r\n}\r\n.sw-container .sw-tab-checkbox input {\r\n display: none;\r\n}\r\n.sw-tab-checkbox input:checked + .sw-tab-content,\r\n.sw-tab-checkbox input[type=radio]:checked + .sw-tab-content {\r\n border: 1px solid var(--primary);\r\n background-color: var(--primary-light);\r\n color: var(--primary);\r\n}\r\n.sw-tab-content {\r\n height: 40px;\r\n padding: 6px 15px;\r\n border: 1px solid var(--sw-form-border);\r\n border-radius: var(--sw-radius);\r\n align-content: center;\r\n}\r\n@media print {\r\n .sw-container {\r\n display: none;\r\n }\r\n}\r\n.sw-dropdown,\r\n.sw-rooms-guests-menu,\r\n.sw-com-cal .p-calendar .p-datepicker {\r\n will-change: transform, opacity;\r\n transform: translateZ(0);\r\n}\r\n.tfsw-calendar-input{\r\n position: absolute;\r\n top: 100%;\r\n inset-inline-start: 0;\r\n}\r\n.sw-dropdown {\r\n -webkit-overflow-scrolling: touch;\r\n scroll-behavior: smooth;\r\n}\r\n.sw-container img {\r\n max-width: 100%;\r\n height: auto;\r\n}\r\n.sw-container svg {\r\n max-width: 100%;\r\n height: auto;\r\n}\r\n.sw-container {\r\n isolation: isolate;\r\n}\r\n.sw-srh-grid {\r\n display: grid;\r\n grid-template-columns: minmax(200px, 2fr) minmax(100px, 1fr) minmax(80px, 0.6fr) minmax(60px, 0.4fr);\r\n gap: var(--sw-space-sm, 2px);\r\n margin-top: 15px;\r\n border-radius: var(--sw-radius);\r\n min-width: 0; \r\n overflow: visible; \r\n}\r\n.sw-srh-wrap .sw-form-field {\r\n flex: 1 1 50%; \r\n min-width: 0; \r\n justify-content: center;\r\n}\r\n.sw-add-return-label label {\r\n color: var(--primary) !important;\r\n}\r\n.sw-srh-main-head {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n margin-bottom: 15px;\r\n}\r\n.sw-srh-head {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n}\r\n.sw-srh-round-text {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n height: 40px;\r\n}\r\n.sw-remove-segment{\r\n fill: var(--primary);\r\n cursor: pointer;\r\n display: grid;\r\n place-content: center;\r\n position: absolute;\r\n z-index: 2;\r\n border-radius: 50%;\r\n inset-inline-end: 12px;\r\n border: 1px solid var(--primary);\r\n width: 22px;\r\n height: 22px;\r\n top: 19px;\r\n svg{\r\n width: 22px;\r\n height: 22px;\r\n }\r\n}\r\n.sw-srh-mc .sw-srh-wrap.sw-srh-box{\r\n position: relative;\r\n}\r\n.sw-srh-mc {\r\n grid-template-columns: 43% 20% 25% 11.5% !important;\r\n min-width: 0; \r\n}\r\n.sw-srh-mc .sw-com-cal .p-inputtext{\r\n visibility: visible !important;\r\n height: auto !important;\r\n width: auto !important;\r\n}\r\n.sw-srh-mc .sw-srh-wrap.sw-pos-rel:nth-child(3){\r\n flex-basis: 30%;\r\n}\r\n.sw-srh-mc .sw-srh-mc-foot {\r\n display: flex;\r\n align-items: flex-end;\r\n width: fit-content;\r\n grid-column-start: 3;\r\n}\r\n.sw-srh-mc .sw-srh-mc-foot button {\r\n display: flex;\r\n align-items: center;\r\n gap: 7px;\r\n margin-inline-start: 5px;\r\n padding: 8px 10px;\r\n border: 1px solid var(--primary);\r\n border-radius: 30px;\r\n background-color: transparent;\r\n color: var(--primary);\r\n font-size: 14px;\r\n}\r\n.sw-srh-mc .sw-srh-mc-foot button svg {\r\n fill: var(--primary);\r\n}\r\n.sw-srh-mc .sw-srh-add-btn {\r\n display: flex;\r\n align-items: center;\r\n gap: 7px;\r\n margin-inline-start: 5px;\r\n padding: 0.8rem 1rem;\r\n border-radius: 30px;\r\n color: var(--primary);\r\n font-size: 1.4rem;\r\n}\r\n.sw-srh-mc .sw-traveller {\r\n grid-row-start: 1;\r\n grid-column-start: 3;\r\n}\r\n.sw-srh-mc button {\r\n grid-row-start: 1;\r\n grid-column-start: 4;\r\n}\r\n.sw-srh-box {\r\n grid-column-start: 1;\r\n}\r\n.p-autocomplete-multiple-container {\r\n width: 100%;\r\n min-width: 270px;\r\n padding: 10px;\r\n padding-inline-end: 2rem;\r\n border: 1px solid var(--sw-form-border);\r\n border-radius: var(--sw-radius);\r\n gap: 0.5rem;\r\n font-size: 14px;\r\n}\r\n.p-autocomplete-multiple-container .p-autocomplete-token {\r\n padding: 5px 8px;\r\n border-radius: 5px;\r\n background: var(--primary-light);\r\n gap: 5px;\r\n color: var(--primary);\r\n}\r\n.p-autocomplete-token .p-autocomplete-token-label{\r\n font-size: 12px;\r\n font-weight: 400;\r\n}\r\n.sw-fsrh-adv-cont {\r\n display: flex;\r\n align-items: center;\r\n gap: 20px;\r\n}\r\n.sw-fsrh-chk-main {\r\n display: flex;\r\n gap: 20px;\r\n font-size: 1.4rem;\r\n font-weight: 400;\r\n}\r\n.sw-srh-pax {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n}\r\n.sw-srh-pax:not(:last-child) {\r\n margin-bottom: 15px;\r\n}\r\n.sw-srh-common-adult {\r\n width: 92px;\r\n}\r\n.sw-srh-pax h3 {\r\n font-size: 14px;\r\n}\r\n.sw-srh-pax p {\r\n color: var(--sw-label-color);\r\n font-size: 12px;\r\n}\r\n.sw-srh-button-wrapper button {\r\n width: 32px;\r\n height: 30px;\r\n margin: 0;\r\n padding: 0;\r\n border: 0;\r\n border-radius: 8px;\r\n background-color: transparent;\r\n font-size: 14px;\r\n font-weight: 400;\r\n}\r\n.sw-srh-button-wrapper button.sw-active-button {\r\n background-color: var(--secondary);\r\n color: var(--sw-white);\r\n}\r\n.sw-traveller .sw-rooms-guests-menu {\r\n width: 500px;\r\n}\r\n.sw-srh-class {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: var(--sw-space-md, 10px);\r\n align-items: stretch; \r\n}\r\n.sw-srh-class .sw-tab-content {\r\n min-width: fit-content; \r\n display: block;\r\n}\r\n.sw-srh-class label {\r\n width: fit-content !important;\r\n}\r\n.sw-srh-class .sw-tab-checkbox input:checked + .sw-tab-content,\r\n.sw-srh-class .sw-tab-checkbox input[type=radio]:checked + .sw-tab-content {\r\n background-color: var(--primary);\r\n color: var(--sw-white);\r\n}\r\n.sw-srh-h-grid {\r\n position: relative;\r\n display: grid;\r\n grid-template-columns: 2.2fr 1.8fr 3fr 1.8fr 1.15fr;\r\n gap: var(--sw-space-sm, 2px);\r\n min-height: 55px;\r\n min-width: 0; \r\n overflow: visible; \r\n border-radius: var(--sw-radius);\r\n}\r\n.sw-srh-loc {\r\n display: block !important;\r\n padding: 15px 0 12px;\r\n border-bottom: 1px solid var(--sw-form-border);\r\n}\r\n.sw-srh-count-wrapper,\r\n.sw-srh-loc {\r\n display: flex;\r\n align-items: center;\r\n gap: 15px;\r\n margin: 0 20px;\r\n cursor: pointer;\r\n}\r\n.sw-hotel-search-form-icon {\r\n display: grid;\r\n place-content: center;\r\n width: 40px;\r\n height: 40px;\r\n background: #f4f5f5;\r\n border-radius: var(--sw-radius);\r\n}\r\n.sw-hotel-search-form-icon.sw-fill {\r\n background: var(--primary-light);\r\n}\r\n.sw-hsrh-advan-cont {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n}\r\n.sw-checkbox-wrap {\r\n cursor: pointer;\r\n}\r\n.sw-checkbox-wrap input {\r\n display: none;\r\n}\r\n.sw-checkbox-wrap input:checked + .sw-star-checkbox {\r\n padding: 8px 12px;\r\n border: 1px solid var(--primary-light);\r\n border-radius: 20px;\r\n background: var(--primary-light);\r\n gap: 5px;\r\n color: var(--primary);\r\n font-size: 14px;\r\n line-height: 1;\r\n}\r\n.sw-checkbox-wrap .sw-star-checkbox {\r\n display: flex;\r\n align-items: center;\r\n gap: 5px;\r\n padding: 8px 12px;\r\n border: 1px solid var(--sw-form-border);\r\n border-radius: 20px;\r\n font-size: 14px;\r\n line-height: 1;\r\n}\r\n.sw-star-checkbox-wrap input:checked + .sw-star-checkbox {\r\n padding: 7px 12px;\r\n border: 1px solid #fcf2e8;\r\n border-radius: 20px;\r\n background: #fcf2e8;\r\n color: #ffae43;\r\n}\r\n.sw-star-checkbox-wrap input:checked + .sw-star-checkbox svg path {\r\n fill: #ffae43;\r\n}\r\n.sw-hsrh-chk-main {\r\n display: flex;\r\n gap: var(--sw-space-md, 10px);\r\n font-size: 1.4rem;\r\n font-weight: 400;\r\n flex-wrap: wrap; \r\n}\r\n.sw-srh-class {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: var(--sw-space-md, 10px);\r\n align-items: stretch; \r\n}\r\n.sw-srh-class .sw-tab-content {\r\n flex: 0 1 auto; \r\n min-width: fit-content; \r\n}\r\n .MobileShow{\r\n display: none;\r\n}\r\n.MobileHide{\r\n display: block;\r\n}\r\n@media screen and (max-width: 768px) {\r\n .MobileShow{\r\n display: block;\r\n }\r\n .MobileHide{\r\n display: none;\r\n }\r\n .sw-container{\r\n min-width: 100% !important;\r\n }\r\n .sw-srh-grid {\r\n grid-template-columns: 100% !important;\r\n }\r\n .sw-srh-wrap{\r\n flex-direction: column;\r\n }\r\n .sw-tab-content{\r\n white-space: nowrap;\r\n }\r\n .sw-srh-main-head{\r\n overflow: auto;\r\n scrollbar-width: none;\r\n -ms-overflow-style: none;\r\n &::-webkit-scrollbar {\r\n display: none;\r\n }\r\n }\r\n .sw-container .sw-form-field {\r\n border-radius: var(--sw-radius);\r\n }\r\n .sw-fsrh-adv-cont{\r\n flex-wrap: wrap;\r\n }\r\n .sw-container .sw-dropdown{\r\n position: fixed;\r\n inset: 0;\r\n height: 100vh;\r\n width: 100%;\r\n max-height: 100vh;\r\n border-radius: 0;\r\n z-index: calc(var(--sw-widget-z-index-base) + 10);\r\n }\r\n .sw-container .mobileHead{\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n border-bottom: 1px;\r\n padding: 15px 10px;\r\n border-bottom: 1px solid var(--sw-form-border);\r\n a{\r\n display: flex;\r\n align-items: center;\r\n }\r\n h4{\r\n font-weight: 500;\r\n line-height: 1;\r\n }\r\n }\r\n .sw-container .sw-srh-wrap.sw-srh-box.sw-pos-rel .sw-form-field.sw-pos-rel:last-child{\r\n padding-inline-start: 15px;\r\n }\r\n .sw-container .p-datepicker-group + .p-datepicker-group .mobileHead {\r\n display: none;\r\n }\r\n .sw-container .sw-form-swap{\r\n inset-inline-end: 0;\r\n width: 45px;\r\n height: 45px;\r\n transform: translate(-50%, -50%) rotate(-90deg);\r\n }\r\n .sw-dropdown .mobileSrgInput{\r\n padding: 15px;\r\n input{\r\n width: 100%;\r\n padding: 15px;\r\n border: 1px solid var(--sw-form-border);\r\n border-radius: var(--sw-btn-radius);\r\n outline: none;\r\n background: var(--sw-white);\r\n box-shadow: none;\r\n font-size: 14px;\r\n font-family: var(--sw-font-family);\r\n color: var(--sw-body-text);\r\n height: 50px;\r\n }\r\n }\r\n .sw-container .sw-dropdown-list-card h5{\r\n font-weight: 400;\r\n }\r\n .sw-container .p-calendar .p-datepicker{\r\n position: fixed !important;\r\n inset: 0 !important;\r\n height: 100vh;\r\n width: 100%;\r\n max-height: 100vh;\r\n overflow: auto;\r\n -webkit-overflow-scrolling: touch;\r\n scroll-behavior: smooth;\r\n padding: 0 !important;\r\n margin-top: 0 !important;\r\n border-radius: 0 !important;\r\n .p-datepicker-group-container{\r\n flex-direction: column;\r\n }\r\n }\r\n .sw-container .p-datepicker-group-container .p-datepicker-group:not(:last-child) {\r\n border-inline-end: 0 ;\r\n padding-inline-end: 0;\r\n margin-inline-end: 0;\r\n }\r\n .sw-com-cal{\r\n .p-datepicker-header{\r\n flex-wrap: wrap;\r\n .mobileHead {\r\n width: 100%;\r\n margin-bottom: 10px;\r\n }\r\n }\r\n .p-datepicker-footer{\r\n position: sticky;\r\n bottom: 0;\r\n z-index: 100;\r\n }\r\n }\r\n .sw-container .mobileFooter{\r\n position: sticky;\r\n bottom: 0;\r\n display: flex;\r\n padding: 15px;\r\n background: var(--sw-white);\r\n border-top: 1px solid var(--sw-form-border);\r\n z-index: 1;\r\n }\r\n .sw-container .mobileFooter .sw-confirm-btn{\r\n width: 100%;\r\n padding: 14px;\r\n background: var(--sw-primary-btn);\r\n color: var(--sw-primary-button-text);\r\n border: 1px solid var(--sw-button-primary-border);\r\n border-radius: var(--sw-btn-radius);\r\n font-size: var(--sw-size-md-3);\r\n font-family: var(--sw-font-family);\r\n font-weight: 600;\r\n cursor: pointer;\r\n text-align: center;\r\n }\r\n .sw-container .p-datepicker .p-datepicker-calendar-container td span{\r\n width: 100%;\r\n margin: 0;\r\n }\r\n .sw-container .sw-traveller .sw-rooms-guests-menu{\r\n width: 100%;\r\n position: fixed;\r\n bottom: 0;\r\n top: 0;\r\n height: 100vh;\r\n padding: 0;\r\n }\r\n .sw-rooms-guests-title{\r\n display: none !important;\r\n }\r\n .sw-rooms-gst-content{\r\n padding: 15px;\r\n }\r\n .sw-rooms-guests-footer{\r\n position: fixed;\r\n bottom: 0;\r\n padding: 15px;\r\n width: 100%;\r\n right: 0;\r\n }\r\n .sw-container .sw-srh-mc{\r\n display: flex;\r\n flex-direction: column;\r\n }\r\n .sw-srh-mc .sw-srh-mc-foot{\r\n margin: 10px 0;\r\n }\r\n .sw-srh-mc .sw-srh-wrap:nth-child(3){\r\n flex-direction: row;\r\n }\r\n .sw-container .sw-search-button{\r\n border-radius: var(--sw-btn-radius);\r\n }\r\n}\r\n`;\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEA,mBAA4E;AAC5E,sBAAyB;AACzB,uBAAwC;AACxC,0BAA6B;AAC7B,iBAAmC;AACnC,uBAA0B;;;ACPnB,IAAM,2BAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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","names":[]}
|