@telsho/react-google-flight-datepicker 1.1.4 → 1.1.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.js +1385 -651
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1360 -652
- package/dist/index.mjs.map +1 -1
- package/dist/styles.scss +779 -0
- package/package.json +46 -40
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/index.ts","../src/lib/components/DatePicker/BaseDatePicker.tsx","../src/lib/helpers/index.ts","../src/lib/components/DatePicker/DatePickerProvider.tsx","../src/lib/assets/svg/calendar.svg","../src/lib/components/DatePicker/DateInput.tsx","../src/lib/assets/svg/prev.svg","../src/lib/assets/svg/next.svg","../src/lib/components/DatePicker/DateInputGroup.tsx","../src/lib/components/DatePicker/DialogWrapper.tsx","../src/lib/hooks/useClientSide.ts","../src/lib/components/DatePicker/Dialog.tsx","../src/lib/assets/svg/back.svg","../src/lib/components/DatePicker/DialogContentMobile.tsx","../src/lib/components/DatePicker/MonthCalendar.tsx","../src/lib/components/DatePicker/Week.tsx","../src/lib/components/DatePicker/Day.tsx","../src/lib/components/DatePicker/DialogContentDesktop.tsx","../src/lib/components/DatePicker/styles.scss","../src/lib/components/DatePicker/ClientOnly.tsx","../src/lib/components/DatePicker/RangeDatePicker.tsx","../src/lib/components/DatePicker/SingleDatePicker.tsx"],"sourcesContent":["export type { RangeDatePickerProps } from './components/DatePicker/RangeDatePicker';\r\nexport type { SingleDatePickerProps } from './components/DatePicker/SingleDatePicker';\r\nexport { RangeDatePicker } from './components/DatePicker/RangeDatePicker';\r\nexport { SingleDatePicker } from './components/DatePicker/SingleDatePicker';","import React, { useState, useRef, useEffect, useLayoutEffect, useCallback } from \"react\";\r\nimport dayjs, { Dayjs } from \"dayjs\";\r\nimport cx from \"classnames\";\r\nimport localeData from \"dayjs/plugin/localeData\";\r\nimport { debounce } from \"../../helpers\";\r\n\r\nimport { DateInputGroup } from \"./DateInputGroup\";\r\nimport DialogWrapper from \"./DialogWrapper\";\r\nimport { Dialog } from \"./Dialog\";\r\nimport \"./styles.scss\";\r\nimport {\r\n DatePickerConfig,\r\n DatePickerProvider,\r\n DateState,\r\n DisplayCustomization,\r\n UIState,\r\n} from \"./DatePickerProvider\";\r\n\r\ndayjs.extend(localeData);\r\n\r\nexport interface SubTextDict {\r\n [key: string]: string;\r\n}\r\n\r\n// Base shared props\r\nexport interface BaseDatePickerProps {\r\n className?: string;\r\n disabled?: boolean;\r\n startWeekDay?: \"monday\" | \"sunday\";\r\n minDate?: Date | null;\r\n maxDate?: Date | null;\r\n weekDayFormat?: string;\r\n dateFormat?: string;\r\n monthFormat?: string;\r\n highlightToday?: boolean;\r\n isOpen?: boolean;\r\n tooltip?: string | React.ReactNode | ((date: Date) => React.ReactNode);\r\n subTextDict?: SubTextDict | null;\r\n expandDirection?: string;\r\n locale?: string;\r\n onFocus?: (input: string) => void;\r\n}\r\n\r\n// Internal props for the base component\r\ninterface BaseDatePickerInternalProps extends BaseDatePickerProps {\r\n isSingle: boolean;\r\n startDate: Date | null;\r\n endDate: Date | null;\r\n startDatePlaceholder: string;\r\n endDatePlaceholder?: string;\r\n onChange: (startDate: Date | null, endDate: Date | null) => void;\r\n onCloseCalendar: (startDate: Date | null, endDate: Date | null) => void;\r\n dateInputSeperator?: React.ReactNode;\r\n hideDialogHeader?: boolean;\r\n hideDialogFooter?: boolean;\r\n hideDialogAfterSelectEndDate?: boolean;\r\n singleCalendar?: boolean;\r\n}\r\n\r\nconst BaseDatePicker: React.FC<BaseDatePickerInternalProps> = ({\r\n startDate = null,\r\n endDate = null,\r\n className = \"\",\r\n disabled = false,\r\n startDatePlaceholder,\r\n endDatePlaceholder,\r\n onChange,\r\n onFocus = () => {},\r\n startWeekDay = \"monday\",\r\n minDate = null,\r\n maxDate = null,\r\n weekDayFormat = \"dd\",\r\n dateFormat = \"\",\r\n monthFormat = \"\",\r\n highlightToday = false,\r\n dateInputSeperator = null,\r\n hideDialogHeader = false,\r\n hideDialogFooter = false,\r\n hideDialogAfterSelectEndDate = false,\r\n isOpen = false,\r\n onCloseCalendar,\r\n tooltip = \"\",\r\n subTextDict = null,\r\n expandDirection = \"right\",\r\n locale = \"en\",\r\n isSingle = false,\r\n singleCalendar = false,\r\n}) => {\r\n // State\r\n const [complsOpen, setComplsOpen] = useState<boolean>(isOpen);\r\n const [inputFocus, setInputFocus] = useState<\"from\" | \"to\" | null>(\r\n isSingle ? \"from\" : null\r\n );\r\n const [fromDate, setFromDate] = useState<Dayjs | undefined>(\r\n startDate ? dayjs(startDate) : undefined\r\n );\r\n const [toDate, setToDate] = useState<Dayjs | undefined>(\r\n endDate ? dayjs(endDate) : undefined\r\n );\r\n const [hoverDate, setHoverDate] = useState<Dayjs | undefined>();\r\n const [isMobile, setIsMobile] = useState<boolean>(false);\r\n const [isFirstTime, setIsFirstTime] = useState<boolean>(false);\r\n\r\n\r\n const useClientSide = () => {\r\n const [isClient, setIsClient] = useState(false);\r\n useEffect(() => { setIsClient(true); }, []);\r\n return isClient;\r\n };\r\n const isClient = useClientSide();\r\n\r\n // Refs\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const fromDateRef = useRef<Dayjs | null>(null);\r\n const toDateRef = useRef<Dayjs | null>(null);\r\n\r\n // Handle resize for mobile detection\r\n const handleResize = useCallback((): void => {\r\n if (!isClient) return;\r\n setIsMobile(window.innerWidth < 768);\r\n }, [isClient]);\r\n\r\n // Notify change handlers\r\n const notifyChange = (): void => {\r\n const _startDate = fromDateRef.current\r\n ? fromDateRef.current.toDate()\r\n : null;\r\n const _endDate =\r\n !isSingle && toDateRef.current ? toDateRef.current.toDate() : null;\r\n\r\n if (isSingle) {\r\n onChange(_startDate, null);\r\n } else {\r\n onChange(_startDate, _endDate);\r\n }\r\n };\r\n\r\n const debounceNotifyChange = debounce(notifyChange, 20);\r\n\r\n // Update date handlers\r\n const updateFromDate = (\r\n dateValue: Dayjs | null | undefined,\r\n shouldNotifyChange = false\r\n ): void => {\r\n setFromDate(dateValue || undefined);\r\n fromDateRef.current = dateValue || null;\r\n if (shouldNotifyChange) {\r\n debounceNotifyChange();\r\n }\r\n };\r\n\r\n const updateToDate = (\r\n dateValue: Dayjs | null | undefined,\r\n shouldNotifyChange = false\r\n ): void => {\r\n if (!isSingle) {\r\n setToDate(dateValue || undefined);\r\n toDateRef.current = dateValue || null;\r\n if (shouldNotifyChange) {\r\n debounceNotifyChange();\r\n }\r\n }\r\n };\r\n\r\n useLayoutEffect(() => {\r\n if (!isClient) return;\r\n handleResize();\r\n window.addEventListener(\"resize\", handleResize);\r\n return () => window.removeEventListener(\"resize\", handleResize);\r\n }, [isClient, handleResize]);\r\n useEffect(() => {\r\n setIsFirstTime(true);\r\n const handleDocumentClick = (e: MouseEvent): void => {\r\n if (\r\n containerRef.current &&\r\n e.target instanceof Node &&\r\n !containerRef.current.contains(e.target) &&\r\n window.innerWidth >= 768\r\n ) {\r\n setComplsOpen(false);\r\n }\r\n };\r\n\r\n document.addEventListener(\"click\", handleDocumentClick);\r\n return () => document.removeEventListener(\"click\", handleDocumentClick);\r\n }, []);\r\n\r\n useEffect(() => {\r\n const _startDateJs = startDate ? dayjs(startDate) : null;\r\n fromDateRef.current = _startDateJs;\r\n updateFromDate(_startDateJs, false);\r\n }, [startDate]);\r\n\r\n useEffect(() => {\r\n if (!isSingle) {\r\n const _endDateJs = endDate ? dayjs(endDate) : null;\r\n toDateRef.current = _endDateJs;\r\n updateToDate(_endDateJs, false);\r\n }\r\n }, [endDate, isSingle]);\r\n\r\n useEffect(() => {\r\n if (!complsOpen && isFirstTime) {\r\n const _startDate = fromDateRef.current?.toDate() || null;\r\n const _endDate = toDateRef.current?.toDate() || null;\r\n if (isSingle) {\r\n onCloseCalendar(_startDate, null);\r\n } else {\r\n onCloseCalendar(_startDate, _endDate);\r\n }\r\n }\r\n }, [complsOpen, isFirstTime, isSingle, onCloseCalendar]);\r\n\r\n useEffect(() => {\r\n setComplsOpen(isOpen);\r\n }, [isOpen]);\r\n\r\n useEffect(() => {\r\n if (isFirstTime) {\r\n const input =\r\n inputFocus === \"from\"\r\n ? \"Start Date\"\r\n : inputFocus === \"to\"\r\n ? \"End Date\"\r\n : \"\";\r\n onFocus(input);\r\n }\r\n }, [inputFocus, isFirstTime, onFocus]);\r\n\r\n // Event handlers\r\n const toggleDialog = (): void => {\r\n setComplsOpen(!complsOpen);\r\n };\r\n\r\n const handleClickDateInput = (focusInput: \"from\" | \"to\"): void => {\r\n if (disabled || (!isSingle && focusInput === \"to\" && !fromDate)) {\r\n return;\r\n }\r\n\r\n if (!complsOpen) {\r\n setComplsOpen(true);\r\n }\r\n\r\n setInputFocus(focusInput);\r\n };\r\n\r\n const onSelectDate = useCallback((date: Dayjs): void => {\r\n const minDayjs = minDate ? dayjs(minDate) : null;\r\n const maxDayjs = maxDate ? dayjs(maxDate) : null;\r\n\r\n if (\r\n (minDayjs && minDayjs.isAfter(date, \"date\")) ||\r\n (maxDayjs && maxDayjs.isBefore(date, \"date\"))\r\n ) {\r\n return;\r\n }\r\n\r\n if (isSingle) {\r\n updateFromDate(date, true);\r\n if (hideDialogAfterSelectEndDate) {\r\n setTimeout(() => setComplsOpen(false), 50);\r\n }\r\n } else if (\r\n inputFocus === \"from\" ||\r\n (fromDate && date.isBefore(fromDate, \"date\"))\r\n ) {\r\n updateFromDate(date, true);\r\n if (toDate && date.isAfter(toDate, \"date\")) {\r\n updateToDate(null, true);\r\n }\r\n setInputFocus(\"to\");\r\n } else {\r\n updateToDate(date, true);\r\n setInputFocus(null);\r\n if (hideDialogAfterSelectEndDate) {\r\n setTimeout(() => setComplsOpen(false), 50);\r\n }\r\n }}, [minDate, maxDate, isSingle, hideDialogAfterSelectEndDate, inputFocus, fromDate, toDate]);\r\n\r\n\r\n const onHoverDate = (date: Dayjs): void => {\r\n setHoverDate(date);\r\n };\r\n\r\n const handleReset = (): void => {\r\n setHoverDate(undefined);\r\n updateFromDate(null, true);\r\n if (!isSingle) {\r\n updateToDate(null, true);\r\n }\r\n setInputFocus(\"from\");\r\n };\r\n\r\n const handleChangeDate = useCallback((date: Dayjs, type: \"from\" | \"to\"): void => {\r\n const minDayjs = minDate ? dayjs(minDate) : null;\r\n const maxDayjs = maxDate ? dayjs(maxDate) : null;\r\n\r\n if (\r\n (minDayjs && minDayjs.isAfter(date, \"date\")) ||\r\n (maxDayjs && maxDayjs.isBefore(date, \"date\"))\r\n ) {\r\n return;\r\n }\r\n\r\n if (type === \"from\" || isSingle) {\r\n setInputFocus(\"from\");\r\n updateFromDate(date, true);\r\n if (!isSingle && toDate && date.isAfter(toDate, \"date\")) {\r\n updateToDate(null, true);\r\n }\r\n } else {\r\n setInputFocus(\"to\");\r\n updateToDate(date, true);\r\n }\r\n }, [minDate, maxDate, isSingle, toDate, inputFocus]);\r\n\r\n // Create context values\r\n const dateState: DateState = {\r\n fromDate,\r\n toDate,\r\n hoverDate,\r\n inputFocus,\r\n onSelectDate,\r\n onHoverDate,\r\n handleChangeDate,\r\n handleReset,\r\n handleClickDateInput,\r\n };\r\n\r\n const config: DatePickerConfig = {\r\n isSingle,\r\n startWeekDay,\r\n minDate: minDate ? dayjs(minDate).toDate() : null,\r\n maxDate: maxDate ? dayjs(maxDate).toDate() : null,\r\n weekDayFormat,\r\n dateFormat,\r\n monthFormat,\r\n highlightToday,\r\n singleCalendar,\r\n expandDirection,\r\n locale,\r\n };\r\n\r\n const uiState: UIState = {\r\n complsOpen,\r\n isMobile,\r\n disabled,\r\n toggleDialog,\r\n };\r\n\r\n const display: DisplayCustomization = {\r\n startDatePlaceholder,\r\n endDatePlaceholder,\r\n dateInputSeperator,\r\n hideDialogHeader,\r\n hideDialogFooter,\r\n hideDialogAfterSelectEndDate,\r\n tooltip,\r\n subTextDict,\r\n };\r\n\r\n return (\r\n <div className=\"react-google-flight-datepicker\">\r\n <div\r\n className={cx(\"date-picker\", className, {\r\n disabled,\r\n })}\r\n ref={containerRef}\r\n >\r\n <DatePickerProvider\r\n dateState={dateState}\r\n config={config}\r\n uiState={uiState}\r\n display={display}\r\n locale={locale}\r\n >\r\n <DateInputGroup />\r\n <DialogWrapper>\r\n <Dialog />\r\n </DialogWrapper>\r\n </DatePickerProvider>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default BaseDatePicker;\r\n","import dayjs from \"dayjs\";\r\n\r\ninterface Week {\r\n start: number;\r\n days: number;\r\n}\r\n\r\ninterface MonthInfo {\r\n totalWeek: Week[];\r\n totalDay: number;\r\n}\r\n\r\ntype WeekDayFormat = 'dd' | 'ddd' | 'dddd';\r\ntype StartWeekDay = 'sunday' | 'monday';\r\n\r\nexport function getMonthInfo(\r\n year: number,\r\n month: number,\r\n startDay: StartWeekDay\r\n): MonthInfo {\r\n const weeks: Week[] = [];\r\n const firstDate = new Date(year, month, 1);\r\n const lastDate = new Date(year, month + 1, 0);\r\n const numDays = lastDate.getDate();\r\n\r\n let start = 1;\r\n let end = firstDate.getDay() === 0 ? 1 : 7 - firstDate.getDay() + 1;\r\n if (startDay === 'sunday') {\r\n end = 7 - firstDate.getDay();\r\n }\r\n \r\n while (start <= numDays) {\r\n weeks.push({ start, days: end - start + 1 });\r\n start = end + 1;\r\n end += 7;\r\n end = start === 1 && end === 8 ? 1 : end;\r\n if (end > numDays) {\r\n end = numDays;\r\n }\r\n }\r\n\r\n return { totalWeek: weeks, totalDay: numDays };\r\n}\r\n\r\nexport function getWeekDay(\r\n startWeekDay: StartWeekDay | null,\r\n weekDayFormat: WeekDayFormat | string\r\n): string[] {\r\n const days = [...Array(7)].map((_, i) => \r\n dayjs().day(i).format(weekDayFormat === 'dd' ? 'dd' : \r\n weekDayFormat === 'ddd' ? 'ddd' : 'dddd')\r\n );\r\n\r\n if (startWeekDay === 'sunday') {\r\n const last = days.pop();\r\n if (last) {\r\n days.unshift(last);\r\n }\r\n }\r\n \r\n return days;\r\n}\r\n\r\ntype DebouncedFunction<T extends (...args: any[]) => any> = (\r\n ...args: Parameters<T>\r\n) => void;\r\n\r\nexport function debounce<T extends (...args: any[]) => any>(\r\n func: T,\r\n wait: number\r\n): DebouncedFunction<T> {\r\n let timeout: NodeJS.Timeout | null;\r\n\r\n return function executedFunction(\r\n this: any,\r\n ...args: Parameters<T>\r\n ): void {\r\n const later = () => {\r\n timeout = null;\r\n func.apply(this, args);\r\n };\r\n\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n }\r\n\r\n timeout = setTimeout(later, wait);\r\n };\r\n}\r\n\r\n\r\nexport const loadLocale = async (locale: string) => {\r\n try {\r\n if (locale === 'en') return true;\r\n await import(`dayjs/locale/${locale}.js`);\r\n return true;\r\n } catch (error) {\r\n console.error(`Failed to load locale ${locale}:`, error);\r\n return false;\r\n }\r\n};","import React, { createContext, useContext, useState, useCallback, useEffect } from 'react';\r\nimport dayjs, { Dayjs } from 'dayjs';\r\nimport { SubTextDict } from './BaseDatePicker';\r\n\r\n// Core date state and handlers\r\nexport interface DateState {\r\n fromDate?: Dayjs;\r\n toDate?: Dayjs;\r\n hoverDate?: Dayjs;\r\n inputFocus: 'from' | 'to' | null;\r\n onSelectDate: (date: Dayjs) => void;\r\n onHoverDate: (date: Dayjs) => void;\r\n handleChangeDate: (date: Dayjs, type: 'from' | 'to') => void;\r\n handleReset: () => void;\r\n handleClickDateInput: (type: 'from' | 'to') => void;\r\n}\r\n\r\n// Configuration that rarely changes\r\nexport interface DatePickerConfig {\r\n isSingle: boolean;\r\n startWeekDay: 'monday' | 'sunday';\r\n minDate: Date | null;\r\n maxDate: Date | null;\r\n weekDayFormat: string;\r\n dateFormat: string;\r\n monthFormat: string;\r\n highlightToday: boolean;\r\n singleCalendar?: boolean;\r\n expandDirection: string;\r\n locale: string;\r\n}\r\n\r\n// UI-specific state\r\nexport interface UIState {\r\n complsOpen: boolean;\r\n isMobile: boolean;\r\n disabled: boolean;\r\n toggleDialog: () => void;\r\n}\r\n\r\n// Display customization\r\nexport interface DisplayCustomization {\r\n startDatePlaceholder: string;\r\n endDatePlaceholder?: string;\r\n dateInputSeperator?: React.ReactNode;\r\n hideDialogHeader: boolean;\r\n hideDialogFooter: boolean;\r\n hideDialogAfterSelectEndDate: boolean;\r\n tooltip?: string | React.ReactNode | ((date: Date) => React.ReactNode);\r\n subTextDict?: SubTextDict | null;\r\n}\r\n\r\n// Locale state interface\r\nexport interface LocaleState {\r\n currentLocale: string;\r\n isLocaleReady: boolean;\r\n}\r\n\r\n// Create contexts\r\nconst DateStateContext = createContext<DateState | null>(null);\r\nconst DatePickerConfigContext = createContext<DatePickerConfig | null>(null);\r\nconst UIStateContext = createContext<UIState | null>(null);\r\nconst DisplayContext = createContext<DisplayCustomization | null>(null);\r\nconst LocaleContext = createContext<LocaleState | null>(null);\r\n\r\n// Custom hooks\r\nexport const useDateState = () => {\r\n const context = useContext(DateStateContext);\r\n if (!context) throw new Error('useDateState must be used within DatePickerProvider');\r\n return context;\r\n};\r\n\r\nexport const useDatePickerConfig = () => {\r\n const context = useContext(DatePickerConfigContext);\r\n if (!context) throw new Error('useDatePickerConfig must be used within DatePickerProvider');\r\n return context;\r\n};\r\n\r\nexport const useUIState = () => {\r\n const context = useContext(UIStateContext);\r\n if (!context) throw new Error('useUIState must be used within DatePickerProvider');\r\n return context;\r\n};\r\n\r\nexport const useDisplayCustomization = () => {\r\n const context = useContext(DisplayContext);\r\n if (!context) throw new Error('useDisplayCustomization must be used within DatePickerProvider');\r\n return context;\r\n};\r\n\r\nexport const useLocale = () => {\r\n const context = useContext(LocaleContext);\r\n if (!context) throw new Error('useLocale must be used within DatePickerProvider');\r\n return context;\r\n};\r\n\r\n// Locale loader utility\r\nconst loadLocale = async (locale: string): Promise<boolean> => {\r\n if (locale === 'en') return true;\r\n try {\r\n await import(`dayjs/locale/${locale}.js`);\r\n return true;\r\n } catch (error) {\r\n console.error(`Failed to load locale ${locale}:`, error);\r\n return false;\r\n }\r\n};\r\n\r\n// Provider Props interface\r\nexport interface DatePickerProviderProps {\r\n children: React.ReactNode;\r\n dateState: DateState;\r\n config: DatePickerConfig;\r\n uiState: UIState;\r\n display: DisplayCustomization;\r\n locale?: string;\r\n}\r\n\r\n// Provider component\r\nexport const DatePickerProvider: React.FC<DatePickerProviderProps> = ({\r\n children,\r\n dateState,\r\n config,\r\n uiState,\r\n display,\r\n locale = \"en\"\r\n}) => {\r\n // Locale state\r\n const [localeState, setLocaleState] = useState<LocaleState>({\r\n currentLocale: \"en\",\r\n isLocaleReady: locale === \"en\"\r\n });\r\n\r\n // Load and set locale\r\n useEffect(() => {\r\n if (locale !== \"en\") {\r\n setLocaleState(prev => ({ ...prev, isLocaleReady: false }));\r\n loadLocale(locale)\r\n .then(success => {\r\n if (success) {\r\n dayjs.locale(locale);\r\n setLocaleState({\r\n currentLocale: locale,\r\n isLocaleReady: true\r\n });\r\n } else {\r\n dayjs.locale(\"en\");\r\n setLocaleState({\r\n currentLocale: \"en\",\r\n isLocaleReady: true\r\n });\r\n }\r\n });\r\n } else {\r\n dayjs.locale(\"en\");\r\n setLocaleState({\r\n currentLocale: \"en\",\r\n isLocaleReady: true\r\n });\r\n }\r\n }, [locale]);\r\n\r\n // Don't render until locale is ready\r\n if (!localeState.isLocaleReady) {\r\n return null; // Or a loading component\r\n }\r\n\r\n // Provide all contexts\r\n return (\r\n <LocaleContext.Provider value={localeState}>\r\n <DateStateContext.Provider value={dateState}>\r\n <DatePickerConfigContext.Provider value={config}>\r\n <UIStateContext.Provider value={uiState}>\r\n <DisplayContext.Provider value={display}>\r\n {children}\r\n </DisplayContext.Provider>\r\n </UIStateContext.Provider>\r\n </DatePickerConfigContext.Provider>\r\n </DateStateContext.Provider>\r\n </LocaleContext.Provider>\r\n );\r\n};\r\n\r\nexport default DatePickerProvider;","import * as React from \"react\";\nconst SvgCalendar = props => <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" {...props}><path d=\"M9 11H7v2h2v-2zm4 0h-2v2h2v-2zm4 0h-2v2h2v-2zm2-7h-1V2h-2v2H8V2H6v2H5c-1.11 0-1.99.9-1.99 2L3 20a2 2 0 002 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 16H5V9h14v11z\" /></svg>;\nexport default SvgCalendar;","import React, { useEffect, useState } from 'react';\r\nimport cx from 'classnames';\r\nimport dayjs from 'dayjs';\r\nimport { \r\n useDateState, \r\n useDatePickerConfig, \r\n useDisplayCustomization \r\n} from './DatePickerProvider';\r\nimport CalendarIcon from '../../assets/svg/calendar.svg';\r\nimport PrevIcon from '../../assets/svg/prev.svg';\r\nimport NextIcon from '../../assets/svg/next.svg';\r\n\r\ninterface DateInputProps {\r\n type: 'from' | 'to';\r\n showIcon?: boolean;\r\n tabIndex?: number;\r\n nonFocusable?: boolean;\r\n}\r\n\r\nexport const DateInput: React.FC<DateInputProps> = ({\r\n type,\r\n showIcon = false,\r\n tabIndex = 0,\r\n nonFocusable = false,\r\n}) => {\r\n const [formattedDate, setFormattedDate] = useState<string | null>(null);\r\n const [disablePrev, setDisablePrev] = useState(false);\r\n const [disableNext, setDisableNext] = useState(false);\r\n\r\n const {\r\n fromDate,\r\n toDate,\r\n inputFocus,\r\n handleClickDateInput,\r\n handleChangeDate\r\n } = useDateState();\r\n\r\n const {\r\n isSingle,\r\n minDate,\r\n maxDate,\r\n dateFormat\r\n } = useDatePickerConfig();\r\n\r\n const {\r\n startDatePlaceholder,\r\n endDatePlaceholder\r\n } = useDisplayCustomization();\r\n\r\n const value = type === 'from' ? fromDate : toDate;\r\n const placeholder = type === 'from' ? startDatePlaceholder : endDatePlaceholder;\r\n\r\n useEffect(() => {\r\n if (value) {\r\n let formattedValue = value.clone().locale(dayjs.locale());\r\n let text = formattedValue.format('ddd, DD MMM');\r\n if (dateFormat) {\r\n text = value.format(dateFormat);\r\n }\r\n setFormattedDate(text);\r\n\r\n const minDateDayjs = minDate ? dayjs(minDate) : null;\r\n const maxDateDayjs = maxDate ? dayjs(maxDate) : null;\r\n\r\n if ((minDateDayjs?.add(1, 'day').isAfter(value, 'date'))\r\n || (type === 'to' && fromDate && value.isBefore(fromDate.add(1, 'day'), 'date'))\r\n ) {\r\n setDisablePrev(true);\r\n } else {\r\n setDisablePrev(false);\r\n }\r\n\r\n if (maxDateDayjs?.subtract(1, 'day').isBefore(value, 'date')) {\r\n setDisableNext(true);\r\n } else {\r\n setDisableNext(false);\r\n }\r\n } else {\r\n setFormattedDate(null);\r\n }\r\n }, [value, fromDate, minDate, maxDate, dateFormat, type]);\r\n\r\n const prevDate = (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n if (value) {\r\n handleChangeDate(value.subtract(1, 'day'), type);\r\n }\r\n };\r\n\r\n const nextDate = (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n if (value) {\r\n handleChangeDate(value.add(1, 'day'), type);\r\n }\r\n };\r\n\r\n const handleClick = () => {\r\n handleClickDateInput(type);\r\n };\r\n\r\n return (\r\n <div\r\n className={cx('date', { \r\n 'is-focus': inputFocus === type && !isSingle, \r\n 'is-single': isSingle \r\n })}\r\n role=\"button\"\r\n tabIndex={nonFocusable ? -1 : tabIndex}\r\n onClick={handleClick}\r\n id={`${type}-date-input-button`}\r\n >\r\n {showIcon && (\r\n <CalendarIcon className=\"icon-calendar\" viewBox=\"0 0 24 24\" />\r\n )}\r\n\r\n <div className=\"selected-date\">\r\n {formattedDate ?? <div className=\"date-placeholder\">{placeholder}</div>}\r\n </div>\r\n \r\n {formattedDate && (\r\n <div className=\"change-date-group\">\r\n <button\r\n type=\"button\"\r\n className=\"btn-outline change-date-button\"\r\n onClick={prevDate}\r\n tabIndex={nonFocusable ? -1 : 0}\r\n disabled={disablePrev}\r\n >\r\n <PrevIcon viewBox=\"0 0 24 24\" className=\"icon-arrow\" />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"btn-outline change-date-button\"\r\n onClick={nextDate}\r\n tabIndex={nonFocusable ? -1 : 0}\r\n disabled={disableNext}\r\n >\r\n <NextIcon viewBox=\"0 0 24 24\" className=\"icon-arrow\" />\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};","import * as React from \"react\";\nconst SvgPrev = props => <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" {...props}><path d=\"M15.41 16.59L10.83 12l4.58-4.59L14 6l-6 6 6 6 1.41-1.41z\" /></svg>;\nexport default SvgPrev;","import * as React from \"react\";\nconst SvgNext = props => <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" {...props}><path d=\"M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z\" /></svg>;\nexport default SvgNext;","import React from \"react\";\r\nimport {\r\n useDatePickerConfig,\r\n useDisplayCustomization,\r\n} from \"./DatePickerProvider\";\r\nimport CalendarIcon from \"../../assets/svg/calendar.svg\";\r\nimport { DateInput } from \"./DateInput\";\r\n\r\ninterface DateInputGroupProps {\r\n showIcon?: boolean;\r\n nonFocusable?: boolean;\r\n}\r\n\r\nexport const DateInputGroup: React.FC<DateInputGroupProps> = ({\r\n showIcon = false,\r\n nonFocusable = false,\r\n}) => {\r\n const { isSingle } = useDatePickerConfig();\r\n const { dateInputSeperator } = useDisplayCustomization();\r\n\r\n return (\r\n <div className=\"date-picker-input\">\r\n {showIcon && (\r\n <CalendarIcon className=\"icon-calendar mobile\" viewBox=\"0 0 24 24\" />\r\n )}\r\n <div className=\"date-picker-date-group\">\r\n <DateInput\r\n type=\"from\"\r\n tabIndex={nonFocusable ? -1 : 0}\r\n showIcon={true}\r\n nonFocusable={nonFocusable}\r\n />\r\n {!isSingle && dateInputSeperator && (\r\n <div className=\"date-input-separator\">{dateInputSeperator}</div>\r\n )}\r\n {!isSingle && (\r\n <DateInput\r\n type=\"to\"\r\n tabIndex={nonFocusable ? -1 : 0}\r\n showIcon={false}\r\n nonFocusable={nonFocusable}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n","// DialogWrapper.tsx\r\nimport React from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport { useClientSide } from '../../hooks/useClientSide';\r\n\r\ninterface DialogWrapperProps {\r\n children?: React.ReactNode;\r\n isMobile?: boolean;\r\n}\r\n\r\n\r\nconst DialogWrapper: React.FC<DialogWrapperProps> = ({ \r\n children = null, \r\n isMobile = false \r\n}) => {\r\n const isClient = useClientSide();\r\n \r\n if (!isClient) return null;\r\n \r\n return isMobile\r\n ? createPortal(<div>{children}</div>, document.body)\r\n : children;\r\n};\r\n\r\nexport default DialogWrapper;\r\n","// hooks/useClientSide.ts\r\nimport { useEffect, useState } from 'react';\r\n\r\nexport const useClientSide = () => {\r\n const [isClient, setIsClient] = useState(false);\r\n\r\n useEffect(() => {\r\n setIsClient(true);\r\n }, []);\r\n\r\n return isClient;\r\n};\r\n\r\n","import React, { useEffect, useState, useRef } from 'react';\r\nimport cx from 'classnames';\r\nimport { \r\n useDateState, \r\n useDatePickerConfig, \r\n useUIState,\r\n useDisplayCustomization\r\n} from './DatePickerProvider';\r\nimport BackIcon from '../../assets/svg/back.svg';\r\nimport {DateInputGroup} from './DateInputGroup';\r\nimport {DialogContentMobile} from './DialogContentMobile';\r\nimport {DialogContentDesktop} from './DialogContentDesktop';\r\nimport { Dayjs } from 'dayjs';\r\n\r\ninterface DialogContainerProps {\r\n containerRef?: React.RefObject<HTMLDivElement>;\r\n}\r\n\r\nexport const Dialog: React.FC<DialogContainerProps> = ({ \r\n containerRef: externalRef \r\n}) => {\r\n const [hideAnimation, setHideAnimation] = useState(false);\r\n const [dateChanged, setDateChanged] = useState<Dayjs | null>(null);\r\n const defaultRef = useRef<HTMLDivElement>(null);\r\n const containerRef = externalRef || defaultRef;\r\n\r\n const {\r\n handleChangeDate,\r\n handleReset,\r\n } = useDateState();\r\n\r\n const {\r\n singleCalendar,\r\n expandDirection\r\n } = useDatePickerConfig();\r\n\r\n const {\r\n complsOpen,\r\n isMobile,\r\n toggleDialog\r\n } = useUIState();\r\n\r\n const {\r\n hideDialogHeader,\r\n hideDialogFooter,\r\n } = useDisplayCustomization();\r\n\r\n const onChangeDate = (date: Dayjs, type: 'from' | 'to') => {\r\n setDateChanged(date);\r\n handleChangeDate(date, type);\r\n };\r\n\r\n useEffect(() => {\r\n if (complsOpen && !hideAnimation) {\r\n setHideAnimation(true);\r\n }\r\n if (complsOpen) {\r\n setTimeout(() => {\r\n const startDateInput = containerRef.current?.querySelector(\r\n '#start-date-input-button'\r\n ) as HTMLElement;\r\n if (startDateInput) {\r\n startDateInput.focus();\r\n }\r\n }, 50);\r\n }\r\n }, [complsOpen, containerRef, hideAnimation]);\r\n\r\n return (\r\n <div\r\n className={cx('dialog-date-picker', {\r\n 'open': complsOpen,\r\n 'hide': !complsOpen && hideAnimation,\r\n 'single': singleCalendar && !isMobile,\r\n 'expand-left': expandDirection === 'left',\r\n 'expand-right': expandDirection === 'right',\r\n })}\r\n ref={containerRef}\r\n >\r\n {!hideDialogHeader && (\r\n <div className=\"dialog-header\">\r\n <button\r\n type=\"button\"\r\n className=\"btn-outline back-button\"\r\n onClick={toggleDialog}\r\n >\r\n <BackIcon viewBox=\"0 0 492 492\" />\r\n </button>\r\n \r\n <DateInputGroup\r\n showIcon={true}\r\n nonFocusable={!complsOpen}\r\n />\r\n \r\n <button\r\n type=\"button\"\r\n className=\"btn-outline reset-button\"\r\n onClick={handleReset}\r\n >\r\n Reset\r\n </button>\r\n </div>\r\n )}\r\n\r\n <div className=\"dialog-content\">\r\n {isMobile ? (\r\n <DialogContentMobile />\r\n ) : (\r\n <DialogContentDesktop\r\n dateChanged={dateChanged}\r\n />\r\n )}\r\n </div>\r\n\r\n {!hideDialogFooter && (\r\n <div className=\"dialog-footer\">\r\n <button\r\n type=\"button\"\r\n className=\"submit-button\"\r\n onClick={toggleDialog}\r\n tabIndex={0}\r\n >\r\n Done\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"btn-outline reset-button mobile\"\r\n onClick={handleReset}\r\n >\r\n Reset\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};","import * as React from \"react\";\nconst SvgBack = props => <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 492 492\" {...props}><path d=\"M464.3 207.4l.8.2H136l103.5-103.7c5-5.1 7.8-12 7.8-19.2 0-7.2-2.7-14-7.8-19l-16.1-16.2c-5-5-11.8-7.8-19-7.8-7.2 0-14 2.8-19 7.8L7.8 227C2.8 232 0 238.8 0 246c0 7.3 2.8 14 7.8 19.2l177.5 177.4c5 5 11.8 7.8 19 7.8 7.2 0 14-2.8 19-7.8l16-16.1a26.6 26.6 0 000-37.7L134.8 284.4h330a27.9 27.9 0 0027.3-27.6V234a27.3 27.3 0 00-27.7-26.6z\" /></svg>;\nexport default SvgBack;","import React, { useEffect, useState, useRef } from 'react';\r\nimport dayjs from 'dayjs';\r\nimport { VariableSizeList as List } from 'react-window';\r\nimport AutoSizer from 'react-virtualized-auto-sizer';\r\nimport { \r\n useDateState, \r\n useDatePickerConfig,\r\n useDisplayCustomization, \r\n useUIState\r\n} from './DatePickerProvider';\r\nimport {MonthCalendar} from './MonthCalendar';\r\nimport { getMonthInfo, getWeekDay } from '../../helpers';\r\n\r\ninterface RowProps {\r\n index: number;\r\n style: React.CSSProperties;\r\n}\r\n\r\nexport const DialogContentMobile: React.FC = () => {\r\n const [rowCount, setRowCount] = useState(2400);\r\n const listRef = useRef<List>(null);\r\n\r\n const {\r\n fromDate,\r\n } = useDateState();\r\n\r\n const {\r\n startWeekDay,\r\n minDate,\r\n maxDate,\r\n weekDayFormat\r\n } = useDatePickerConfig();\r\n\r\n const {\r\n complsOpen\r\n } = useUIState()\r\n\r\n const {\r\n tooltip,\r\n subTextDict\r\n } = useDisplayCustomization();\r\n\r\n const minYear = minDate ? dayjs(minDate).year() : 1900;\r\n const minMonth = minDate ? dayjs(minDate).month() : 0;\r\n\r\n useEffect(() => {\r\n if (maxDate) {\r\n const _minDate = minDate ? dayjs(minDate) : dayjs('1900-01-01');\r\n setRowCount(dayjs(maxDate).diff(_minDate, 'month') + 1);\r\n }\r\n }, [maxDate, minDate]);\r\n\r\n useEffect(() => {\r\n if (listRef.current && complsOpen) {\r\n const date = fromDate ? dayjs(fromDate) : dayjs();\r\n let monthDiff = date.diff(dayjs('1900-01-01'), 'month');\r\n\r\n if (minDate) {\r\n monthDiff = date.diff(dayjs(minDate), 'month');\r\n }\r\n\r\n listRef.current.scrollToItem(monthDiff + 1, 'smart');\r\n }\r\n }, [complsOpen, fromDate, minDate]);\r\n\r\n const getMonthYearFromIndex = (index: number) => {\r\n const _index = index + minMonth;\r\n const year = minYear + Math.floor(_index / 12);\r\n const month = _index % 12;\r\n\r\n return { year, month };\r\n };\r\n\r\n const Row = React.memo(({ index, style }: RowProps) => {\r\n const { year, month } = getMonthYearFromIndex(index);\r\n\r\n return (\r\n <div style={style}>\r\n <MonthCalendar\r\n month={month}\r\n year={year}\r\n hidden={false}\r\n isAnimating={false}\r\n handleHoverDay={() => {}} // Mobile doesn't use hover\r\n />\r\n </div>\r\n );\r\n });\r\n Row.displayName = 'CalendarRow';\r\n\r\n const getItemSize = (index: number) => {\r\n const { year, month } = getMonthYearFromIndex(index);\r\n const { totalWeek } = getMonthInfo(year, month, startWeekDay || 'monday');\r\n\r\n return totalWeek.length * 48 + 34;\r\n };\r\n\r\n const renderMonthCalendars = () => {\r\n return (\r\n <AutoSizer>\r\n {({ height, width }: { height: number; width: number }) => (\r\n <List\r\n ref={listRef}\r\n width={width}\r\n height={height - 36}\r\n itemCount={rowCount}\r\n itemSize={getItemSize}\r\n >\r\n {Row}\r\n </List>\r\n )}\r\n </AutoSizer>\r\n );\r\n };\r\n\r\n const generateWeekDay = () => {\r\n const arrWeekDay = getWeekDay(startWeekDay || 'monday', weekDayFormat);\r\n\r\n return arrWeekDay.map((day, index) => (\r\n <div className=\"weekday\" key={index}>\r\n {day}\r\n </div>\r\n ));\r\n };\r\n\r\n return (\r\n <div className=\"calendar-wrapper\">\r\n <div className=\"calendar-content\">\r\n <div className=\"weekdays mobile\">\r\n {generateWeekDay()}\r\n </div>\r\n {renderMonthCalendars()}\r\n </div>\r\n </div>\r\n );\r\n};","import React, { forwardRef } from 'react';\r\nimport cx from 'classnames';\r\nimport dayjs, { Dayjs } from 'dayjs';\r\nimport { useDatePickerConfig } from './DatePickerProvider';\r\nimport {Week} from './Week';\r\nimport { getMonthInfo, getWeekDay } from '../../helpers';\r\n\r\ninterface MonthCalendarProps {\r\n month: number;\r\n year: number;\r\n hidden: boolean;\r\n isAnimating: boolean;\r\n handleHoverDay: (date: Dayjs) => void;\r\n className?: string; // Add support for additional classes\r\n}\r\n\r\ninterface WeekInfo {\r\n totalWeek: number[][];\r\n totalDay: number;\r\n}\r\n\r\nexport const MonthCalendar = forwardRef<HTMLDivElement, MonthCalendarProps>(({\r\n month,\r\n year,\r\n hidden = false,\r\n isAnimating = false,\r\n handleHoverDay,\r\n className\r\n}, ref) => {\r\n\r\n const {\r\n startWeekDay,\r\n weekDayFormat,\r\n monthFormat,\r\n singleCalendar\r\n } = useDatePickerConfig();\r\n\r\n const generateWeek = (): JSX.Element[] => {\r\n const { totalWeek, totalDay } = getMonthInfo(year, month, startWeekDay);\r\n \r\n return totalWeek.map((week) => {\r\n const weekKey = `${year}-${month}-${week.start}`; // Using first day of week for key\r\n \r\n return (\r\n <Week\r\n key={weekKey}\r\n week={week}\r\n month={month}\r\n year={year}\r\n isFirst={week === totalWeek[0]}\r\n totalDay={totalDay}\r\n weekIndex={totalWeek.indexOf(week)}\r\n handleHoverDay={handleHoverDay}\r\n ref={ref}\r\n />\r\n );\r\n });\r\n };\r\n\r\n const generateWeekDay = (): JSX.Element[] => {\r\n const arrWeekDay: string[] = getWeekDay(startWeekDay, weekDayFormat);\r\n \r\n return arrWeekDay.map((day) => {\r\n return (\r\n <div className=\"weekday\" key={`weekday-${day.toLowerCase()}`}>\r\n {day}\r\n </div>\r\n );\r\n });\r\n };\r\n\r\n const getMonthDisplay = (): string => {\r\n const date = dayjs(`${year}-${month + 1}-1`);\r\n return monthFormat \r\n ? date.format(monthFormat)\r\n : date.format('MMMM - YYYY');\r\n };\r\n\r\n return (\r\n <div\r\n className={cx('month-calendar', {\r\n isAnimating,\r\n hidden,\r\n single: singleCalendar,\r\n }, className)} // Add the className to the classnames\r\n data-month-index={month + 1}\r\n >\r\n <div className=\"month-name\">\r\n {getMonthDisplay()}\r\n </div>\r\n <div className=\"weekdays\">{generateWeekDay()}</div>\r\n <div className=\"week-container\">\r\n {generateWeek()}\r\n </div>\r\n </div>\r\n );\r\n});\r\n\r\nMonthCalendar.displayName = 'MonthCalendar';","import React, { forwardRef } from 'react';\r\nimport cx from 'classnames';\r\nimport dayjs from 'dayjs';\r\nimport { \r\n useDateState, \r\n useDatePickerConfig,\r\n useDisplayCustomization \r\n} from './DatePickerProvider';\r\nimport { Day } from './Day';\r\n\r\ninterface WeekProps {\r\n isFirst: boolean;\r\n week: {\r\n days: number;\r\n start: number;\r\n };\r\n month: number;\r\n year: number;\r\n totalDay: number;\r\n weekIndex: number;\r\n handleHoverDay: (date: dayjs.Dayjs) => void;\r\n}\r\n\r\nexport const Week = forwardRef<HTMLDivElement, WeekProps>(({\r\n isFirst,\r\n week,\r\n month,\r\n year,\r\n totalDay,\r\n weekIndex,\r\n handleHoverDay,\r\n}, ref) => {\r\n const {\r\n fromDate,\r\n toDate,\r\n hoverDate\r\n } = useDateState();\r\n\r\n const {\r\n minDate,\r\n maxDate,\r\n isSingle,\r\n highlightToday\r\n } = useDatePickerConfig();\r\n\r\n const { subTextDict } = useDisplayCustomization();\r\n\r\n const generateDay = () => {\r\n return Array.from({ length: week.days }, (_, index) => {\r\n const dateIndex = index + week.start;\r\n const dateValue = dayjs(`${year}-${month + 1}-${dateIndex}`);\r\n const disabled =\r\n (minDate && dateValue.isBefore(minDate, 'date')) ||\r\n (maxDate && dateValue.isAfter(maxDate, 'date'));\r\n const selected =\r\n (fromDate && dateValue.isSame(fromDate, 'date')) ||\r\n (toDate && dateValue.isSame(toDate, 'date'));\r\n let hovered = false;\r\n const highlight =\r\n highlightToday && dateValue.isSame(new Date(), 'date');\r\n\r\n if (fromDate && !fromDate.isSame(toDate, 'date') && !isSingle) {\r\n if (\r\n toDate &&\r\n !fromDate.isAfter(dateValue, 'date') &&\r\n !toDate.isBefore(dateValue, 'date')\r\n ) {\r\n hovered = true;\r\n }\r\n if (\r\n !toDate &&\r\n !dateValue.isBefore(fromDate, 'date') &&\r\n !(hoverDate && hoverDate.isBefore(dateValue, 'date')) &&\r\n fromDate.isBefore(hoverDate, 'date')\r\n ) {\r\n hovered = true;\r\n }\r\n }\r\n\r\n const isEndDate =\r\n (toDate && dateValue.isSame(toDate, 'date')) ||\r\n (!toDate && hoverDate && dateValue.isSame(hoverDate, 'date'));\r\n\r\n const subText =\r\n !subTextDict\r\n ? ''\r\n : subTextDict[dateValue.format('YYYY-MM-DD')] ?? '\\u00A0';\r\n\r\n return (\r\n <Day\r\n key={index}\r\n dateIndex={dateIndex}\r\n dateValue={dateValue}\r\n selected={selected}\r\n hovered={hovered}\r\n highlight={highlight}\r\n disabled={disabled}\r\n isEndDay={isEndDate}\r\n totalDay={totalDay}\r\n handleHoverDay={handleHoverDay}\r\n subText={subText}\r\n ref={ref}\r\n />\r\n );\r\n });\r\n };\r\n\r\n return (\r\n <div className={cx('week', { first: isFirst })}>\r\n {generateDay()}\r\n </div>\r\n );\r\n});\r\n\r\nWeek.displayName = 'Week';","import React, { forwardRef, useCallback, useEffect, useRef } from 'react';\r\nimport cx from 'classnames';\r\nimport { Dayjs } from 'dayjs';\r\nimport { useDateState } from './DatePickerProvider';\r\n\r\ninterface DayProps {\r\n dateIndex: number;\r\n dateValue: Dayjs;\r\n isEndDay?: boolean;\r\n selected?: boolean;\r\n hovered: boolean;\r\n disabled: boolean | null;\r\n totalDay: number;\r\n highlight: boolean;\r\n handleHoverDay: (date: Dayjs) => void;\r\n subText: string;\r\n}\r\n\r\nexport const Day = forwardRef<HTMLDivElement, DayProps>(({\r\n dateIndex,\r\n dateValue,\r\n isEndDay,\r\n selected,\r\n hovered,\r\n disabled,\r\n totalDay,\r\n highlight,\r\n handleHoverDay,\r\n subText,\r\n}, ref) => {\r\n const dayRef = useRef<HTMLDivElement>(null);\r\n const { onSelectDate, onHoverDate } = useDateState();\r\n\r\n const selectDate = (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n if (disabled) return;\r\n onSelectDate(dateValue);\r\n };\r\n\r\n const handleHoverDate = () => {\r\n if (disabled) return;\r\n onHoverDate(dateValue);\r\n handleHoverDay(dateValue);\r\n };\r\n\r\n const handleTooltipPosition = useCallback(() => {\r\n // Check if ref exists and is a RefObject\r\n if (!ref || typeof ref === 'function') return;\r\n const element = ref.current;\r\n if (element && dayRef.current) {\r\n element.style.left = `${\r\n dayRef.current.offsetLeft - element.offsetWidth + 135\r\n }px`;\r\n element.style.top = `${\r\n dayRef.current.offsetTop - element.offsetHeight - 15\r\n }px`;\r\n element.style.visibility = 'visible';\r\n }\r\n }, [ref]);\r\n\r\n const handleTooltipHidden = useCallback(() => {\r\n if (!ref || typeof ref === 'function') return;\r\n const element = ref.current;\r\n if (element) {\r\n element.style.visibility = 'hidden';\r\n }\r\n }, [ref]);\r\n\r\n useEffect(() => {\r\n const currentRef = dayRef.current;\r\n if (currentRef) {\r\n currentRef.addEventListener('mouseover', handleTooltipPosition);\r\n currentRef.addEventListener('mouseleave', handleTooltipHidden);\r\n }\r\n return () => {\r\n if (currentRef) {\r\n currentRef.removeEventListener('mouseover', handleTooltipPosition);\r\n currentRef.removeEventListener('mouseleave', handleTooltipHidden);\r\n }\r\n };\r\n }, [handleTooltipPosition, handleTooltipHidden]);\r\n\r\n return (\r\n <div\r\n className={cx('day', {\r\n selected,\r\n hovered,\r\n disabled,\r\n highlight,\r\n end: isEndDay,\r\n 'has-subtext': !!subText,\r\n })}\r\n onClick={selectDate}\r\n onMouseEnter={handleHoverDate}\r\n role=\"button\"\r\n tabIndex={-1}\r\n data-day-index={dateIndex}\r\n data-date-value={dateValue.valueOf()}\r\n ref={dayRef}\r\n >\r\n {hovered &&\r\n !(isEndDay && dateIndex === totalDay) &&\r\n !(dateIndex === 1 && selected && !isEndDay) && (\r\n <div\r\n className={cx('background-day', {\r\n 'first-day': dateIndex === 1,\r\n 'last-day': dateIndex === totalDay,\r\n })}\r\n />\r\n )}\r\n <div className=\"day-content\">\r\n <div className=\"text-day\">{dateIndex}</div>\r\n {subText && (\r\n <div\r\n className=\"sub-text\"\r\n style={{\r\n position: 'relative',\r\n zIndex: 3,\r\n color: (selected && !hovered) ? '#fff' : '#666',\r\n }}\r\n >\r\n {subText}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n});\r\n\r\nDay.displayName = 'Day';","import React, {\r\n useEffect,\r\n useState,\r\n useRef,\r\n useCallback,\r\n useMemo,\r\n} from \"react\";\r\nimport cx from \"classnames\";\r\nimport dayjs, { Dayjs } from \"dayjs\";\r\nimport {\r\n useDateState,\r\n useDatePickerConfig,\r\n useDisplayCustomization,\r\n useUIState,\r\n} from \"./DatePickerProvider\";\r\nimport PrevIcon from \"../../assets/svg/prev.svg\";\r\nimport NextIcon from \"../../assets/svg/next.svg\";\r\nimport { MonthCalendar } from \"./MonthCalendar\";\r\n\r\ninterface DialogContentDesktopProps {\r\n dateChanged?: Dayjs | null;\r\n}\r\n\r\n// Client-side check hook\r\nconst useClientSide = () => {\r\n const [isClient, setIsClient] = useState(false);\r\n useEffect(() => { setIsClient(true); }, []);\r\n return isClient;\r\n};\r\n\r\nexport const DialogContentDesktop: React.FC<DialogContentDesktopProps> = ({\r\n dateChanged = null,\r\n}) => {\r\n const isClient = useClientSide();\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const tooltipRef = useRef<HTMLDivElement>(null);\r\n const [translateAmount, setTranslateAmount] = useState(0);\r\n const [monthArray, setMonthArray] = useState<Dayjs[]>([]);\r\n const [focusDate, setFocusDate] = useState<Dayjs | null>(null);\r\n const [disablePrev, setDisablePrev] = useState(false);\r\n const [disableNext, setDisableNext] = useState(false);\r\n const [wrapperWidth, setWrapperWidth] = useState(0);\r\n const [dayValue, setDayValue] = useState<Dayjs | null>(null);\r\n const [isAnimating, setIsAnimating] = useState(false);\r\n\r\n const { fromDate } = useDateState();\r\n const { minDate, maxDate, singleCalendar } = useDatePickerConfig();\r\n const { complsOpen } = useUIState();\r\n const { tooltip } = useDisplayCustomization();\r\n\r\n const getArrayMonth = useCallback((date: Dayjs): Dayjs[] => [\r\n date.subtract(1, \"month\"),\r\n date,\r\n date.add(1, \"month\"),\r\n date.add(2, \"month\"),\r\n ], []);\r\n\r\n // Width calculation with resize observer\r\n useEffect(() => {\r\n if (!isClient || !containerRef.current) return;\r\n\r\n const updateDimensions = () => {\r\n const width = containerRef.current!.offsetWidth;\r\n const style = window.getComputedStyle(containerRef.current!);\r\n const translateValue = singleCalendar\r\n ? width + parseInt(style.marginLeft) - 8\r\n : width / 2;\r\n setWrapperWidth(translateValue);\r\n };\r\n\r\n updateDimensions();\r\n const resizeObserver = new ResizeObserver(updateDimensions);\r\n resizeObserver.observe(containerRef.current);\r\n\r\n return () => resizeObserver.disconnect();\r\n }, [isClient, singleCalendar]);\r\n\r\n // Focus date initialization\r\n useEffect(() => {\r\n setFocusDate(fromDate ?? dayjs());\r\n }, [complsOpen, fromDate]);\r\n\r\n // Month array and navigation controls\r\n useEffect(() => {\r\n if (!focusDate) return;\r\n\r\n // Convert Date to Dayjs before using date math\r\n const minDayjs = minDate ? dayjs(minDate) : null;\r\n const maxDayjs = maxDate ? dayjs(maxDate) : null;\r\n\r\n setDisablePrev(\r\n Boolean(\r\n minDayjs && \r\n focusDate.isBefore(minDayjs.add(1, \"month\"), \"month\")\r\n )\r\n );\r\n \r\n setDisableNext(\r\n Boolean(\r\n maxDayjs &&\r\n focusDate.isAfter(maxDayjs.subtract(2, \"month\"), \"month\")\r\n )\r\n );\r\n\r\n setMonthArray(getArrayMonth(focusDate));\r\n }, [focusDate, minDate, maxDate, getArrayMonth]);\r\n\r\n // Date change handler\r\n useEffect(() => {\r\n if (!dateChanged || !focusDate) return;\r\n\r\n const monthDiff = dateChanged.diff(focusDate, \"month\");\r\n if (monthDiff < -1) decreaseCurrentMonth();\r\n if (monthDiff > 1) increaseCurrentMonth();\r\n }, [dateChanged, focusDate]);\r\n\r\n // Animation handlers\r\n const handleMonthChange = useCallback((direction: \"next\" | \"prev\") => () => {\r\n if ((direction === \"next\" && disableNext) || \r\n (direction === \"prev\" && disablePrev) || \r\n isAnimating) return;\r\n\r\n setIsAnimating(true);\r\n setTranslateAmount(direction === \"next\" ? -wrapperWidth : wrapperWidth);\r\n\r\n const timer = setTimeout(() => {\r\n setFocusDate(prev => {\r\n const newDate = direction === \"next\" \r\n ? prev!.add(1, \"month\") \r\n : prev!.subtract(1, \"month\");\r\n setMonthArray(getArrayMonth(newDate));\r\n return newDate;\r\n });\r\n setTranslateAmount(0);\r\n setIsAnimating(false);\r\n }, 200);\r\n\r\n return () => clearTimeout(timer);\r\n }, [disableNext, disablePrev, isAnimating, wrapperWidth, getArrayMonth]);\r\n\r\n const [increaseCurrentMonth, decreaseCurrentMonth] = useMemo(\r\n () => [handleMonthChange(\"next\"), handleMonthChange(\"prev\")],\r\n [handleMonthChange]\r\n );\r\n\r\n // Focus management\r\n const focusOnCalendar = useCallback(() => {\r\n if (!isClient || !containerRef.current) return;\r\n\r\n const selector = \".day.selected, .month-calendar:not(.hidden) .day:not(.disabled)\";\r\n const focusTarget = containerRef.current.querySelector<HTMLElement>(selector);\r\n focusTarget?.focus();\r\n }, [isClient]);\r\n\r\n // Keyboard navigation\r\n const handleKeyDown = useCallback((e: React.KeyboardEvent<HTMLDivElement>) => {\r\n const target = e.target as HTMLElement;\r\n const dayIndex = target.getAttribute(\"data-day-index\");\r\n if (!dayIndex) return;\r\n\r\n e.preventDefault();\r\n \r\n const calendarContainer = target.closest(\".calendar-wrapper\");\r\n const dateValue = parseInt(target.dataset.dateValue ?? \"0\");\r\n const date = dayjs(dateValue);\r\n const lastDate = date.endOf(\"month\").date();\r\n\r\n let newIndex = parseInt(dayIndex);\r\n switch (e.key) {\r\n case \"ArrowLeft\": newIndex--; break;\r\n case \"ArrowUp\": newIndex -= 7; break;\r\n case \"ArrowRight\": newIndex++; break;\r\n case \"ArrowDown\": newIndex += 7; break;\r\n case \" \": target.click(); return;\r\n default: return;\r\n }\r\n\r\n if (newIndex > 0 && newIndex <= lastDate) {\r\n calendarContainer?.querySelector<HTMLElement>(`[data-day-index=\"${newIndex}\"]`)?.focus();\r\n } else {\r\n const newDate = date.add(newIndex - parseInt(dayIndex), \"day\");\r\n const monthDiff = newDate.diff(focusDate, \"month\");\r\n \r\n if (monthDiff > 1 && !disableNext) increaseCurrentMonth();\r\n if (monthDiff < 0 && !disablePrev) decreaseCurrentMonth();\r\n\r\n setTimeout(() => {\r\n calendarContainer?.querySelector<HTMLElement>(\r\n `[data-month-index=\"${newDate.month() + 1}\"] [data-day-index=\"${newDate.date()}\"]`\r\n )?.focus();\r\n }, 200);\r\n }\r\n }, [focusDate, disableNext, disablePrev, increaseCurrentMonth, decreaseCurrentMonth]);\r\n\r\n // Tooltip rendering\r\n const renderTooltip = useMemo(() => {\r\n if (!tooltip || !isClient) return null;\r\n \r\n const content = typeof tooltip === \"function\" \r\n ? tooltip(dayValue?.toDate() ?? new Date()) \r\n : tooltip;\r\n\r\n return (\r\n <div id=\"day-tooltip\" className=\"tooltip-text\" ref={tooltipRef}>\r\n {content}\r\n </div>\r\n );\r\n }, [tooltip, dayValue, isClient]);\r\n\r\n // Calendar rendering\r\n const calendarMonths = useMemo(() => \r\n monthArray.map((date, index) => {\r\n const isVisible = index === 1 || index === 2;\r\n const isSlidingNext = isAnimating && translateAmount < 0 && index === 3;\r\n const isSlidingPrev = isAnimating && translateAmount > 0 && index === 0;\r\n\r\n return (\r\n <MonthCalendar\r\n key={`${date.year()}-${date.month()}`}\r\n hidden={!isVisible && !isSlidingNext && !isSlidingPrev}\r\n isAnimating={isSlidingNext || isSlidingPrev}\r\n month={date.month()}\r\n year={date.year()}\r\n handleHoverDay={setDayValue}\r\n ref={tooltipRef}\r\n className={cx({ 'slide-next': isSlidingNext, 'slide-prev': isSlidingPrev })}\r\n />\r\n );\r\n }), \r\n [monthArray, isAnimating, translateAmount]);\r\n\r\n return (\r\n <div className=\"relative\">\r\n {renderTooltip}\r\n <div \r\n className={cx(\"calendar-wrapper\", { single: singleCalendar })} \r\n ref={containerRef}\r\n onKeyDown={handleKeyDown}\r\n role=\"grid\"\r\n aria-label=\"Calendar\"\r\n >\r\n <div\r\n className={cx(\"calendar-content\", { isAnimating })}\r\n style={{ transform: `translateX(${translateAmount}px)` }}\r\n >\r\n {calendarMonths}\r\n </div>\r\n \r\n <div className=\"calendar-flippers\">\r\n <button\r\n className={cx(\"flipper-button\", { disabled: disablePrev })}\r\n onClick={decreaseCurrentMonth}\r\n onKeyDown={(e) => e.key === \" \" && decreaseCurrentMonth()}\r\n disabled={disablePrev}\r\n aria-label=\"Previous month\"\r\n >\r\n <PrevIcon viewBox=\"0 0 24 24\" />\r\n </button>\r\n <button\r\n className={cx(\"flipper-button\", { disabled: disableNext })}\r\n onClick={increaseCurrentMonth}\r\n onKeyDown={(e) => e.key === \" \" && increaseCurrentMonth()}\r\n disabled={disableNext}\r\n aria-label=\"Next month\"\r\n onBlur={focusOnCalendar}\r\n >\r\n <NextIcon viewBox=\"0 0 24 24\" />\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};","const css = `.react-google-flight-datepicker {\n font-size: 1rem;\n display: contents;\n /** RESPONSIVE MOBILE */\n}\n.react-google-flight-datepicker > * {\n box-sizing: border-box;\n}\n.react-google-flight-datepicker .date-picker-demo {\n width: 400px;\n}\n.react-google-flight-datepicker .btn-outline {\n background-color: transparent;\n background-repeat: no-repeat;\n border: none;\n cursor: pointer;\n overflow: hidden;\n}\n.react-google-flight-datepicker .date-picker {\n position: relative;\n border-radius: 4px;\n background: white;\n padding: 6px;\n}\n.react-google-flight-datepicker .date-picker.disabled {\n opacity: 0.6;\n cursor: default;\n}\n.react-google-flight-datepicker .date-picker-input {\n width: 100%;\n display: flex;\n justify-content: space-between;\n border: 1px solid #dadce0;\n border-radius: 4px;\n color: #3c4043;\n height: 56px;\n letter-spacing: 0.2px;\n font-size: 1rem;\n align-items: center;\n overflow: visible;\n}\n.react-google-flight-datepicker .date-picker-input svg {\n min-width: 24px;\n min-height: 24px;\n}\n.react-google-flight-datepicker .date-picker-date-group {\n position: relative;\n display: flex;\n justify-content: space-between;\n height: 100%;\n flex-grow: 1;\n}\n.react-google-flight-datepicker .date {\n display: flex;\n align-items: center;\n height: 100%;\n position: relative;\n border-radius: 2px 0 0 2px;\n padding: 0 13px;\n flex-grow: 1;\n width: 50%;\n background: white;\n border-radius: 4px;\n}\n.react-google-flight-datepicker .date.is-single::before {\n display: none;\n}\n.react-google-flight-datepicker .date:first-child::before {\n content: \"\";\n position: absolute;\n right: 0;\n top: 50%;\n transform: translate(0, -50%);\n width: 1px;\n height: 70%;\n background: #dadce0;\n}\n.react-google-flight-datepicker .selected-date {\n display: flex;\n flex: 1 1 0px;\n align-items: center;\n height: 100%;\n font-size: 0.9rem;\n line-height: normal;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.react-google-flight-datepicker .date-placeholder {\n color: rgba(0, 0, 0, 0.56);\n}\n.react-google-flight-datepicker .change-date-group {\n width: 48px;\n display: flex;\n}\n.react-google-flight-datepicker .change-date-group .change-date-button {\n height: 40px;\n color: #5f6368;\n cursor: pointer;\n padding: 8px 0;\n flex-grow: 1;\n}\n.react-google-flight-datepicker .change-date-group .change-date-button:disabled {\n cursor: default;\n}\n.react-google-flight-datepicker .change-date-group .change-date-button:disabled .icon-arrow {\n fill: #93989e;\n}\n.react-google-flight-datepicker .icon-calendar {\n width: 24px;\n height: 24px;\n fill: #1a73e8;\n margin-right: 12px;\n}\n.react-google-flight-datepicker .icon-calendar.mobile {\n display: none;\n}\n.react-google-flight-datepicker .icon-arrow {\n width: 24px;\n height: 24px;\n fill: #5f6368;\n}\n@keyframes showPopup {\n 0% {\n transform: scale(0.7);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n@keyframes hidePopup {\n 0% {\n transform: scale(1);\n opacity: 1;\n }\n 100% {\n transform: scale(0.7);\n opacity: 0;\n visibility: hidden;\n }\n}\n.react-google-flight-datepicker .dialog-date-picker {\n background: #fff;\n border-radius: 5px;\n box-shadow: 0 1px 3px rgba(60, 64, 67, 0.3), 0 4px 8px 3px rgba(60, 64, 67, 0.15);\n min-width: 200px;\n position: absolute;\n top: -2px;\n left: -2px;\n z-index: 120;\n height: max-content;\n width: 770px;\n margin-bottom: 50px;\n transform-origin: top left;\n opacity: 0;\n transform: scale(0);\n}\n.react-google-flight-datepicker .dialog-date-picker.single {\n width: 385px;\n}\n.react-google-flight-datepicker .dialog-date-picker.open {\n animation: showPopup 0.2s forwards;\n}\n.react-google-flight-datepicker .dialog-date-picker.hide {\n animation: hidePopup 0.2s forwards;\n}\n.react-google-flight-datepicker .dialog-date-picker.expand-right {\n left: -2px;\n right: auto;\n transform-origin: top left;\n}\n.react-google-flight-datepicker .dialog-date-picker.expand-left {\n left: auto;\n right: -2px;\n transform-origin: top right;\n}\n.react-google-flight-datepicker .dialog-header {\n padding: 8px 8px 8px 24px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.react-google-flight-datepicker .dialog-header .date-picker-input {\n height: 48px;\n width: 50%;\n}\n.react-google-flight-datepicker .date:focus,\n.react-google-flight-datepicker .date.is-focus {\n background-color: #f4f8ff;\n}\n.react-google-flight-datepicker .date:focus::after,\n.react-google-flight-datepicker .date.is-focus::after {\n content: \"\";\n margin: -1px;\n border: 2px solid #1a73e8;\n border-radius: 4px;\n position: absolute;\n pointer-events: none;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 5;\n}\n.react-google-flight-datepicker .back-button {\n display: none;\n}\n.react-google-flight-datepicker .dialog-content {\n border-bottom: 1px solid #dadce0;\n border-top: 1px solid #dadce0;\n position: relative;\n}\n.react-google-flight-datepicker .reset-button {\n font-size: 0.9rem;\n padding: 0 8px;\n height: 36px;\n border-radius: 4px;\n border: none;\n color: #5f6368;\n min-width: 64px;\n}\n.react-google-flight-datepicker .reset-button:hover {\n background-color: #fafafa;\n}\n.react-google-flight-datepicker .reset-button.mobile {\n display: none;\n}\n.react-google-flight-datepicker .calendar-wrapper {\n margin: 12px 38px 8px;\n overflow: hidden;\n min-height: 353px;\n}\n.react-google-flight-datepicker .calendar-wrapper.single {\n margin-left: 36px;\n margin-right: 36px;\n}\n.react-google-flight-datepicker .tooltip-text {\n position: absolute;\n background-color: #4285f4;\n color: #fff;\n text-align: center;\n border-radius: 6px;\n padding: 5px 15px;\n z-index: 999;\n width: 120px;\n max-width: 120px;\n word-break: break-word;\n visibility: hidden;\n}\n.react-google-flight-datepicker .tooltip-text::before {\n z-index: 1001;\n border: 6px solid transparent;\n background: transparent;\n content: \"\";\n margin-left: -6px;\n margin-bottom: -12px;\n border-top-color: #4285f4;\n position: absolute;\n bottom: 0;\n left: 50%;\n}\n.react-google-flight-datepicker .calendar-content {\n display: flex;\n padding: 0 2px;\n position: relative;\n overflow: hidden;\n}\n.react-google-flight-datepicker .calendar-content.isAnimating {\n transition: transform 0.2s ease;\n overflow: initial;\n}\n.react-google-flight-datepicker .month-calendar {\n width: 308px;\n color: #3c4043;\n margin-right: 43px;\n}\n.react-google-flight-datepicker .month-calendar.hidden {\n position: absolute;\n visibility: hidden;\n z-index: -1;\n opacity: 0;\n}\n.react-google-flight-datepicker .month-calendar.isAnimating {\n position: absolute;\n left: -350px;\n}\n.react-google-flight-datepicker .month-calendar .month-calendar.slide-next {\n position: absolute;\n left: 350px;\n}\n.react-google-flight-datepicker .month-calendar .month-calendar.slide-prev {\n position: absolute;\n left: -350px;\n}\n.react-google-flight-datepicker .month-name {\n text-align: center;\n font-size: 1rem;\n margin-bottom: 10px;\n}\n.react-google-flight-datepicker .weekdays {\n width: 100%;\n font-size: 0.9rem;\n color: rgba(0, 0, 0, 0.54);\n display: flex;\n}\n.react-google-flight-datepicker .weekdays .weekday {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 36px;\n margin: 0;\n flex-grow: 1;\n}\n.react-google-flight-datepicker .week {\n display: flex;\n justify-content: flex-start;\n}\n.react-google-flight-datepicker .week.first {\n justify-content: flex-end;\n}\n.react-google-flight-datepicker .day {\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n height: 44px;\n margin: 2px 0;\n text-align: center;\n width: 44px;\n vertical-align: top;\n position: relative;\n border-radius: 50%;\n}\n.react-google-flight-datepicker .day .background-day {\n bottom: 0;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n top: 0;\n width: 10px;\n z-index: 1;\n}\n.react-google-flight-datepicker .day .background-day.first-day {\n background: linear-gradient(to right, #fff, #daedfd);\n left: -10px;\n}\n.react-google-flight-datepicker .day .background-day.last-day {\n background: linear-gradient(to left, #fff, #daedfd);\n right: -10px;\n}\n.react-google-flight-datepicker .day::after {\n border-radius: 100%;\n bottom: 0;\n content: \"\";\n height: 44px;\n left: 0;\n margin: auto;\n position: absolute;\n right: 0;\n top: 0;\n width: 44px;\n z-index: 2;\n}\n.react-google-flight-datepicker .day:hover::after {\n background-color: #fff;\n border: 2px solid #4285f4;\n bottom: -2px;\n left: -2px;\n right: -2px;\n top: -2px;\n}\n.react-google-flight-datepicker .day.selected {\n color: white;\n}\n.react-google-flight-datepicker .day.selected:hover {\n color: #000;\n}\n.react-google-flight-datepicker .day.selected::after {\n background-color: #4285f4;\n border-radius: 100%;\n}\n.react-google-flight-datepicker .day.selected:hover::after {\n background-color: #fff;\n}\n.react-google-flight-datepicker .day.highlight::before {\n content: \"\";\n width: 44px;\n height: 44px;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n background-color: rgba(247, 237, 122, 0.8196078431);\n border-radius: 50%;\n}\n.react-google-flight-datepicker .day.hovered {\n background-color: #d9edfd;\n position: relative;\n border-radius: unset;\n}\n.react-google-flight-datepicker .day.hovered .background-day {\n opacity: 1;\n}\n.react-google-flight-datepicker .day.hovered.end {\n background: linear-gradient(90deg, #d9edfd 50%, #fff 50%);\n}\n.react-google-flight-datepicker .day.hovered:hover {\n background-color: #d9edfd;\n}\n.react-google-flight-datepicker .day.hovered:hover::after {\n border-radius: 100%;\n background-color: #fff;\n}\n.react-google-flight-datepicker .day.selected.hovered {\n background: linear-gradient(90deg, #fff 50%, #d9edfd 50%);\n color: #fff;\n}\n.react-google-flight-datepicker .day.selected.hovered.end {\n background: linear-gradient(90deg, #d9edfd 50%, #fff 50%);\n}\n.react-google-flight-datepicker .day.selected.hovered:hover {\n color: #000;\n}\n.react-google-flight-datepicker .day.selected.hovered::after {\n border-radius: 100%;\n background-color: #4285f4;\n}\n.react-google-flight-datepicker .day.selected.hovered:hover::after {\n background-color: #fff;\n}\n.react-google-flight-datepicker .day.disabled {\n pointer-events: none;\n color: rgba(0, 0, 0, 0.26);\n}\n.react-google-flight-datepicker .day.disabled.selected {\n color: #fff;\n}\n.react-google-flight-datepicker .day .text-day {\n position: relative;\n z-index: 3;\n}\n.react-google-flight-datepicker .day-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 2px;\n}\n.react-google-flight-datepicker .sub-text {\n font-size: 0.75em;\n color: #666;\n text-align: center;\n}\n.react-google-flight-datepicker .day.has-subtext {\n padding-bottom: 4px;\n}\n.react-google-flight-datepicker .calendar-flippers {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n pointer-events: none;\n}\n.react-google-flight-datepicker .flipper-button {\n background-color: #fff;\n border-radius: 100%;\n box-shadow: 0 0 4px rgba(0, 0, 0, 0.12), 0 4px 4px rgba(0, 0, 0, 0.24);\n cursor: pointer;\n height: 40px;\n width: 40px;\n display: flex;\n justify-content: center;\n align-items: center;\n margin: 0 -20px;\n pointer-events: all;\n border: none;\n outline: none;\n}\n.react-google-flight-datepicker .flipper-button:focus:hover {\n outline: none;\n box-shadow: 0 0 4px rgba(0, 0, 0, 0.12), 0 4px 4px rgba(0, 0, 0, 0.24), 0 0 0 2px rgba(0, 0, 0, 0.1);\n}\n.react-google-flight-datepicker .flipper-button svg {\n width: 24px;\n height: 24px;\n}\n.react-google-flight-datepicker .flipper-button.disabled {\n cursor: default;\n}\n.react-google-flight-datepicker .flipper-button.disabled svg {\n fill: #93989e;\n}\n.react-google-flight-datepicker .dialog-footer {\n align-items: center;\n display: flex;\n flex-direction: row-reverse;\n padding: 8px;\n}\n.react-google-flight-datepicker .dialog-footer .submit-button {\n border-radius: 8px;\n padding: 10px 8px;\n border: none;\n line-height: 16px;\n text-transform: uppercase;\n color: #fff;\n background: #4285f4;\n height: 36px;\n min-width: 88px;\n font-weight: 500;\n font-size: 0.9rem;\n cursor: pointer;\n}\n@media screen and (max-width: 768px) {\n .react-google-flight-datepicker .date-picker-demo {\n width: 100%;\n }\n .react-google-flight-datepicker .date-picker-input {\n height: 40px;\n border: none;\n border-radius: 0;\n position: relative;\n }\n .react-google-flight-datepicker .date {\n border: 1px solid #dadce0;\n border-radius: 5px;\n padding: 0 10px;\n flex-grow: 1;\n }\n .react-google-flight-datepicker .date:nth-child(2) {\n margin-left: 10px;\n }\n .react-google-flight-datepicker .date.is-focus {\n height: 40px;\n }\n .react-google-flight-datepicker .date:first-child::before {\n display: none;\n }\n .react-google-flight-datepicker .icon-calendar {\n display: none;\n }\n .react-google-flight-datepicker .icon-calendar.mobile {\n display: block;\n }\n .react-google-flight-datepicker .reset-button {\n display: none;\n }\n .react-google-flight-datepicker .reset-button.mobile {\n display: block;\n color: rgba(0, 0, 0, 0.87);\n min-width: 88px;\n font-weight: 500;\n }\n .react-google-flight-datepicker .change-date-group,\n .react-google-flight-datepicker .divider,\n .react-google-flight-datepicker .calendar-flippers,\n .react-google-flight-datepicker .weekdays {\n display: none;\n }\n .react-google-flight-datepicker .back-button {\n display: block;\n width: 56px;\n height: 100%;\n margin-right: 16px;\n padding: 0;\n }\n .react-google-flight-datepicker .back-button svg {\n width: 20px;\n height: 20px;\n fill: rgba(0, 0, 0, 0.7);\n }\n .react-google-flight-datepicker .dialog-date-picker {\n border-radius: 0;\n width: 100%;\n height: 100%;\n max-height: 100%;\n position: fixed;\n left: 0;\n right: 0;\n bottom: 10px;\n top: 100%;\n display: flex;\n flex-direction: column;\n opacity: 1;\n transform: none;\n z-index: 999999999;\n }\n .react-google-flight-datepicker .dialog-date-picker.open {\n transition: all 0.2s ease-out;\n transform: translate(0, -100%);\n animation: none;\n }\n .react-google-flight-datepicker .dialog-date-picker.hide {\n transition: all 0.2s ease-in;\n transform: translate(0, 0);\n animation: none;\n }\n .react-google-flight-datepicker .dialog-header {\n padding: 8px;\n box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.24);\n z-index: 50;\n }\n .react-google-flight-datepicker .dialog-header .date-picker-input {\n height: 40px;\n width: 100%;\n }\n .react-google-flight-datepicker .dialog-content {\n border: none;\n overflow: hidden;\n height: 100%;\n }\n .react-google-flight-datepicker .calendar-wrapper {\n margin: 0;\n height: 100%;\n display: flex;\n }\n .react-google-flight-datepicker .calendar-content {\n padding: 0;\n width: 100%;\n height: 100%;\n flex-direction: column;\n flex-grow: 1;\n }\n .react-google-flight-datepicker .weekdays.mobile {\n display: flex;\n background-color: #f3f3f3;\n }\n .react-google-flight-datepicker .month-calendar {\n width: 100%;\n display: flex;\n flex-direction: column;\n }\n .react-google-flight-datepicker .day {\n width: 14.2857142857%;\n max-width: 14.2857142857%;\n }\n .react-google-flight-datepicker .day.selected:hover, .react-google-flight-datepicker .day.hovered:hover {\n color: #fff !important;\n }\n .react-google-flight-datepicker .day.selected:hover::after, .react-google-flight-datepicker .day.hovered:hover::after {\n background-color: #4285f4 !important;\n }\n .react-google-flight-datepicker .month-name {\n text-align: left;\n margin-left: 10px;\n margin-bottom: 0px;\n margin-top: 25px;\n font-weight: bold;\n }\n .react-google-flight-datepicker .dialog-footer {\n box-shadow: 0 0 4px rgba(0, 0, 0, 0.12), 0 4px 4px rgba(0, 0, 0, 0.24);\n padding: 15px 8px;\n }\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiQzpcXFVzZXJzXFxFbGlhc1xcRG9jdW1lbnRzXFxyZWFjdC1nb29nbGUtZmxpZ2h0LWRhdGVwaWNrZXJcXHNyY1xcbGliXFxjb21wb25lbnRzXFxEYXRlUGlja2VyIiwic291cmNlcyI6WyJzdHlsZXMuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFO0VBQ0E7QUE2bEJBOztBQTNsQkE7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTs7QUFJSjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBR0E7RUFDRTtFQUNBOztBQUlKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7O0FBSUo7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTtFQUNBOztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFOztBQUVBO0VBQ0U7O0FBS047RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFOztBQUlKO0VBQ0U7RUFDQTtFQUNBOztBQUdGO0VBQ0U7SUFDRTtJQUNBOztFQUVGO0lBQ0U7SUFDQTs7O0FBSUo7RUFDRTtJQUNFO0lBQ0E7O0VBR0Y7SUFDRTtJQUNBO0lBQ0E7OztBQUlKO0VBQ0U7RUFDQTtFQUNBO0VBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7QUFFRjtFQUNFO0VBQ0E7RUFDQTs7QUFJSjtFQUNFO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBQ0U7RUFDQTs7QUFHRjtBQUFBO0VBRUU7O0FBRUE7QUFBQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBSUo7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7O0FBR0Y7RUFDRTs7QUFJSjtFQUNFO0VBQ0E7RUFDQTs7QUFFQTtFQUNFO0VBQ0E7O0FBSUo7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFO0VBQ0E7O0FBSUo7RUFDRTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7O0FBSUE7RUFDRTtFQUNBOztBQUdGO0VBQ0U7RUFDQTs7QUFLTjtFQUNFO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUlKO0VBQ0U7RUFDQTs7QUFFQTtFQUNFOztBQUlKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7O0FBSUo7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBQ0U7O0FBRUE7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7O0FBR0Y7RUFDRTs7QUFJSjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7QUFFQTtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFFQTtFQUNFO0VBQ0E7O0FBS047RUFDRTtFQUNBOztBQUVBO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7O0FBR0Y7RUFDRTs7QUFJSjtFQUNFO0VBQ0E7O0FBRUE7RUFDRTs7QUFJSjtFQUNFO0VBQ0E7O0FBSUo7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDSTtFQUNBOztBQUlKO0VBQ0k7RUFDQTs7QUFHSjtFQUNJOztBQUVBO0VBQ0k7O0FBSVY7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFLSjtFQUNFO0lBQ0U7O0VBR0Y7SUFDRTtJQUNBO0lBQ0E7SUFDQTs7RUFHRjtJQUNFO0lBQ0E7SUFDQTtJQUNBOztFQUVBO0lBQ0U7O0VBR0Y7SUFDRTs7RUFJSjtJQUNFOztFQUdGO0lBQ0U7O0VBRUE7SUFDRTs7RUFJSjtJQUNFOztFQUVBO0lBQ0U7SUFDQTtJQUNBO0lBQ0E7O0VBSUo7QUFBQTtBQUFBO0FBQUE7SUFJRTs7RUFHRjtJQUNFO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7O0VBRUE7SUFDRTtJQUNBO0lBQ0E7O0VBSUo7SUFDRTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBOztFQUVBO0lBQ0U7SUFDQTtJQUNBOztFQUdGO0lBQ0U7SUFDQTtJQUNBOztFQUlKO0lBQ0U7SUFDQTtJQUNBOztFQUVBO0lBQ0U7SUFDQTs7RUFJSjtJQUNFO0lBQ0E7SUFDQTs7RUFHRjtJQUNFO0lBQ0E7SUFDQTs7RUFHRjtJQUNFO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7O0VBSUY7SUFDRTtJQUNBOztFQUdGO0lBQ0U7SUFDQTtJQUNBOztFQUdGO0lBQ0U7SUFDQTs7RUFFQTtJQUVFOztFQUVBO0lBQ0U7O0VBS047SUFDRTtJQUNBO0lBQ0E7SUFDQTtJQUNBOztFQUdGO0lBQ0U7SUFDQSIsInNvdXJjZXNDb250ZW50IjpbIi5yZWFjdC1nb29nbGUtZmxpZ2h0LWRhdGVwaWNrZXIge1xyXG4gIGZvbnQtc2l6ZTogMXJlbTtcclxuICBkaXNwbGF5OiBjb250ZW50cztcclxuXHJcbiAgJiA+ICoge1xyXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICB9XHJcblxyXG4gIC5kYXRlLXBpY2tlci1kZW1vIHtcclxuICAgIHdpZHRoOiA0MDBweDtcclxuICB9XHJcblxyXG4gIC5idG4tb3V0bGluZSB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcclxuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XHJcbiAgICBib3JkZXI6IG5vbmU7XHJcbiAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIH1cclxuXHJcbiAgLmRhdGUtcGlja2VyIHtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcclxuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xyXG4gICAgcGFkZGluZzogNnB4O1xyXG5cclxuICAgICYuZGlzYWJsZWQge1xyXG4gICAgICBvcGFjaXR5OiAwLjY7XHJcbiAgICAgIGN1cnNvcjogZGVmYXVsdDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5kYXRlLXBpY2tlci1pbnB1dCB7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZGFkY2UwO1xyXG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xyXG4gICAgY29sb3I6ICMzYzQwNDM7XHJcbiAgICBoZWlnaHQ6IDU2cHg7XHJcbiAgICBsZXR0ZXItc3BhY2luZzogMC4ycHg7XHJcbiAgICBmb250LXNpemU6IDFyZW07XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XHJcblxyXG5cclxuICAgIHN2ZyB7XHJcbiAgICAgIG1pbi13aWR0aDogMjRweDtcclxuICAgICAgbWluLWhlaWdodDogMjRweDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5kYXRlLXBpY2tlci1kYXRlLWdyb3VwIHtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICBmbGV4LWdyb3c6IDE7XHJcbiAgfVxyXG5cclxuICAuZGF0ZSB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGhlaWdodDogMTAwJTtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIGJvcmRlci1yYWRpdXM6IDJweCAwIDAgMnB4O1xyXG4gICAgcGFkZGluZzogMCAxM3B4O1xyXG4gICAgZmxleC1ncm93OiAxO1xyXG4gICAgd2lkdGg6IDUwJTtcclxuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xyXG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xyXG5cclxuICAgICYuaXMtc2luZ2xlOjpiZWZvcmUge1xyXG4gICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmRhdGU6Zmlyc3QtY2hpbGQ6OmJlZm9yZSB7XHJcbiAgICBjb250ZW50OiAnJztcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHJpZ2h0OiAwO1xyXG4gICAgdG9wOiA1MCU7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtNTAlKTtcclxuICAgIHdpZHRoOiAxcHg7XHJcbiAgICBoZWlnaHQ6IDcwJTtcclxuICAgIGJhY2tncm91bmQ6ICNkYWRjZTA7XHJcbiAgfVxyXG5cclxuICAuc2VsZWN0ZWQtZGF0ZSB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleDogMSAxIDBweDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICBmb250LXNpemU6IDAuOXJlbTtcclxuICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XHJcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gIH1cclxuXHJcbiAgLmRhdGUtcGxhY2Vob2xkZXIge1xyXG4gICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41Nik7XHJcbiAgfVxyXG5cclxuICAuY2hhbmdlLWRhdGUtZ3JvdXAge1xyXG4gICAgd2lkdGg6IDQ4cHg7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gIH1cclxuXHJcbiAgLmNoYW5nZS1kYXRlLWdyb3VwIC5jaGFuZ2UtZGF0ZS1idXR0b24ge1xyXG4gICAgaGVpZ2h0OiA0MHB4O1xyXG4gICAgY29sb3I6ICM1ZjYzNjg7XHJcbiAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICBwYWRkaW5nOiA4cHggMDtcclxuICAgIGZsZXgtZ3JvdzogMTtcclxuXHJcbiAgICAmOmRpc2FibGVkIHtcclxuICAgICAgY3Vyc29yOiBkZWZhdWx0O1xyXG5cclxuICAgICAgLmljb24tYXJyb3cge1xyXG4gICAgICAgIGZpbGw6ICM5Mzk4OWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5pY29uLWNhbGVuZGFyIHtcclxuICAgIHdpZHRoOiAyNHB4O1xyXG4gICAgaGVpZ2h0OiAyNHB4O1xyXG4gICAgZmlsbDogIzFhNzNlODtcclxuICAgIG1hcmdpbi1yaWdodDogMTJweDtcclxuXHJcbiAgICAmLm1vYmlsZSB7XHJcbiAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAuaWNvbi1hcnJvdyB7XHJcbiAgICB3aWR0aDogMjRweDtcclxuICAgIGhlaWdodDogMjRweDtcclxuICAgIGZpbGw6ICM1ZjYzNjg7XHJcbiAgfVxyXG5cclxuICBAa2V5ZnJhbWVzIHNob3dQb3B1cCB7XHJcbiAgICAwJSB7XHJcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC43KTtcclxuICAgICAgb3BhY2l0eTogMDtcclxuICAgIH1cclxuICAgIDEwMCUge1xyXG4gICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xyXG4gICAgICBvcGFjaXR5OiAxO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQGtleWZyYW1lcyBoaWRlUG9wdXAge1xyXG4gICAgMCUge1xyXG4gICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xyXG4gICAgICBvcGFjaXR5OiAxO1xyXG4gICAgfVxyXG5cclxuICAgIDEwMCUge1xyXG4gICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNyk7XHJcbiAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5kaWFsb2ctZGF0ZS1waWNrZXIge1xyXG4gICAgYmFja2dyb3VuZDogI2ZmZjtcclxuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcclxuICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDYwLCA2NCwgNjcsIDAuMyksXHJcbiAgICAgIDAgNHB4IDhweCAzcHggcmdiYSg2MCwgNjQsIDY3LCAwLjE1KTtcclxuICAgIG1pbi13aWR0aDogMjAwcHg7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IC0ycHg7XHJcbiAgICBsZWZ0OiAtMnB4O1xyXG4gICAgei1pbmRleDogMTIwO1xyXG4gICAgaGVpZ2h0OiBtYXgtY29udGVudDtcclxuICAgIHdpZHRoOiA3NzBweDtcclxuICAgIG1hcmdpbi1ib3R0b206IDUwcHg7XHJcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgbGVmdDtcclxuICAgIG9wYWNpdHk6IDA7XHJcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDApO1xyXG4gICAgXHJcbiAgICAmLnNpbmdsZSB7XHJcbiAgICAgIHdpZHRoOiAzODVweDtcclxuICAgIH1cclxuXHJcbiAgICAmLm9wZW4ge1xyXG4gICAgICBhbmltYXRpb246IHNob3dQb3B1cCAwLjJzIGZvcndhcmRzO1xyXG4gICAgfVxyXG5cclxuICAgICYuaGlkZSB7XHJcbiAgICAgIGFuaW1hdGlvbjogaGlkZVBvcHVwIDAuMnMgZm9yd2FyZHM7XHJcbiAgICB9XHJcblxyXG4gICAgJi5leHBhbmQtcmlnaHQge1xyXG4gICAgICBsZWZ0OiAtMnB4O1xyXG4gICAgICByaWdodDogYXV0bztcclxuICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIGxlZnQ7XHJcbiAgICB9XHJcbiAgICAmLmV4cGFuZC1sZWZ0IHtcclxuICAgICAgbGVmdDogYXV0bztcclxuICAgICAgcmlnaHQ6IC0ycHg7XHJcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcCByaWdodDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5kaWFsb2ctaGVhZGVyIHtcclxuICAgIHBhZGRpbmc6IDhweCA4cHggOHB4IDI0cHg7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICB9XHJcblxyXG4gIC5kaWFsb2ctaGVhZGVyIC5kYXRlLXBpY2tlci1pbnB1dCB7XHJcbiAgICBoZWlnaHQ6IDQ4cHg7XHJcbiAgICB3aWR0aDogNTAlO1xyXG4gIH1cclxuXHJcbiAgLmRhdGU6Zm9jdXMsXHJcbiAgLmRhdGUuaXMtZm9jdXMge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2Y0ZjhmZjtcclxuXHJcbiAgICAmOjphZnRlciB7XHJcbiAgICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgICBtYXJnaW46IC0xcHg7XHJcbiAgICAgIGJvcmRlcjogMnB4IHNvbGlkICMxYTczZTg7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcclxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcclxuICAgICAgdG9wOiAwO1xyXG4gICAgICBib3R0b206IDA7XHJcbiAgICAgIGxlZnQ6IDA7XHJcbiAgICAgIHJpZ2h0OiAwO1xyXG4gICAgICB6LWluZGV4OiA1O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmJhY2stYnV0dG9uIHtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgfVxyXG5cclxuICAuZGlhbG9nLWNvbnRlbnQge1xyXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkYWRjZTA7XHJcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2RhZGNlMDtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICB9XHJcblxyXG4gIC5yZXNldC1idXR0b24ge1xyXG4gICAgZm9udC1zaXplOiAwLjlyZW07XHJcbiAgICBwYWRkaW5nOiAwIDhweDtcclxuICAgIGhlaWdodDogMzZweDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcclxuICAgIGJvcmRlcjogbm9uZTtcclxuICAgIGNvbG9yOiAjNWY2MzY4O1xyXG4gICAgbWluLXdpZHRoOiA2NHB4O1xyXG5cclxuICAgICY6aG92ZXIge1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhO1xyXG4gICAgfVxyXG5cclxuICAgICYubW9iaWxlIHtcclxuICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5jYWxlbmRhci13cmFwcGVyIHtcclxuICAgIG1hcmdpbjogMTJweCAzOHB4IDhweDtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICBtaW4taGVpZ2h0OiAzNTNweDtcclxuICAgIFxyXG4gICAgJi5zaW5nbGUge1xyXG4gICAgICBtYXJnaW4tbGVmdDogMzZweDtcclxuICAgICAgbWFyZ2luLXJpZ2h0OiAzNnB4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLnRvb2x0aXAtdGV4dCB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDI4NWY0O1xyXG4gICAgY29sb3I6ICNmZmY7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBib3JkZXItcmFkaXVzOiA2cHg7XHJcbiAgICBwYWRkaW5nOiA1cHggMTVweDtcclxuICAgIHotaW5kZXg6IDk5OTtcclxuICAgIHdpZHRoOiAxMjBweDtcclxuICAgIG1heC13aWR0aDogMTIwcHg7XHJcbiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xyXG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xyXG4gIH1cclxuXHJcbiAgLnRvb2x0aXAtdGV4dDo6YmVmb3JlIHtcclxuICAgIHotaW5kZXg6IDEwMDE7XHJcbiAgICBib3JkZXI6IDZweCBzb2xpZCB0cmFuc3BhcmVudDtcclxuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xyXG4gICAgY29udGVudDogXCJcIjtcclxuICAgIG1hcmdpbi1sZWZ0OiAtNnB4O1xyXG4gICAgbWFyZ2luLWJvdHRvbTogLTEycHg7XHJcbiAgICBib3JkZXItdG9wLWNvbG9yOiAjNDI4NWY0O1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgYm90dG9tOiAwO1xyXG4gICAgbGVmdDogNTAlO1xyXG4gIH1cclxuXHJcbiAgLmNhbGVuZGFyLWNvbnRlbnQge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIHBhZGRpbmc6IDAgMnB4O1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICBcclxuICAgICYuaXNBbmltYXRpbmcge1xyXG4gICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBlYXNlO1xyXG4gICAgICBvdmVyZmxvdzogaW5pdGlhbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5tb250aC1jYWxlbmRhciB7XHJcbiAgICB3aWR0aDogMzA4cHg7XHJcbiAgICBjb2xvcjogIzNjNDA0MztcclxuICAgIG1hcmdpbi1yaWdodDogNDNweDtcclxuICBcclxuICAgICYuaGlkZGVuIHtcclxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XHJcbiAgICAgIHotaW5kZXg6IC0xO1xyXG4gICAgICBvcGFjaXR5OiAwO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgJi5pc0FuaW1hdGluZyB7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgbGVmdDogLTM1MHB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5tb250aC1jYWxlbmRhciB7XHJcbiAgICAgICYuc2xpZGUtbmV4dCB7XHJcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgIGxlZnQ6IDM1MHB4O1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAmLnNsaWRlLXByZXYge1xyXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICBsZWZ0OiAtMzUwcHg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5tb250aC1uYW1lIHtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIGZvbnQtc2l6ZTogMXJlbTtcclxuICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XHJcbiAgfVxyXG5cclxuICAud2Vla2RheXMge1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBmb250LXNpemU6IDAuOXJlbTtcclxuICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNTQpO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuXHJcbiAgICAud2Vla2RheSB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICBoZWlnaHQ6IDM2cHg7XHJcbiAgICAgIG1hcmdpbjogMDtcclxuICAgICAgZmxleC1ncm93OiAxO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLndlZWsge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcclxuXHJcbiAgICAmLmZpcnN0IHtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5kYXkge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgIGhlaWdodDogNDRweDtcclxuICAgIG1hcmdpbjogMnB4IDA7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICB3aWR0aDogNDRweDtcclxuICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XHJcblxyXG4gICAgLmJhY2tncm91bmQtZGF5IHtcclxuICAgICAgYm90dG9tOiAwO1xyXG4gICAgICBvcGFjaXR5OiAwO1xyXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcclxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICB0b3A6IDA7XHJcbiAgICAgIHdpZHRoOiAxMHB4O1xyXG4gICAgICB6LWluZGV4OiAxO1xyXG5cclxuICAgICAgJi5maXJzdC1kYXkge1xyXG4gICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI2ZmZiwgI2RhZWRmZCk7XHJcbiAgICAgICAgbGVmdDogLTEwcHg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICYubGFzdC1kYXkge1xyXG4gICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCAjZmZmLCAjZGFlZGZkKTtcclxuICAgICAgICByaWdodDogLTEwcHg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAmOjphZnRlciB7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7XHJcbiAgICAgIGJvdHRvbTogMDtcclxuICAgICAgY29udGVudDogJyc7XHJcbiAgICAgIGhlaWdodDogNDRweDtcclxuICAgICAgbGVmdDogMDtcclxuICAgICAgbWFyZ2luOiBhdXRvO1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIHJpZ2h0OiAwO1xyXG4gICAgICB0b3A6IDA7XHJcbiAgICAgIHdpZHRoOiA0NHB4O1xyXG4gICAgICB6LWluZGV4OiAyO1xyXG4gICAgfVxyXG5cclxuICAgICY6aG92ZXI6OmFmdGVyIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICAgICAgYm9yZGVyOiAycHggc29saWQgIzQyODVmNDtcclxuICAgICAgYm90dG9tOiAtMnB4O1xyXG4gICAgICBsZWZ0OiAtMnB4O1xyXG4gICAgICByaWdodDogLTJweDtcclxuICAgICAgdG9wOiAtMnB4O1xyXG4gICAgfVxyXG5cclxuICAgICYuc2VsZWN0ZWQge1xyXG4gICAgICBjb2xvcjogd2hpdGU7XHJcblxyXG4gICAgICAmOmhvdmVyIHtcclxuICAgICAgICBjb2xvcjogIzAwMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgJjo6YWZ0ZXIge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM0Mjg1ZjQ7XHJcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTtcclxuICAgICAgfVxyXG5cclxuICAgICAgJjpob3Zlcjo6YWZ0ZXIge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAmLmhpZ2hsaWdodDo6YmVmb3JlIHtcclxuICAgICAgY29udGVudDogJyc7XHJcbiAgICAgIHdpZHRoOiA0NHB4O1xyXG4gICAgICBoZWlnaHQ6IDQ0cHg7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgbGVmdDogNTAlO1xyXG4gICAgICB0b3A6IDUwJTtcclxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2VkN2FkMTtcclxuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xyXG4gICAgfVxyXG5cclxuICAgICYuaG92ZXJlZCB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkOWVkZmQ7XHJcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgYm9yZGVyLXJhZGl1czogdW5zZXQ7XHJcblxyXG4gICAgICAuYmFja2dyb3VuZC1kYXkge1xyXG4gICAgICAgIG9wYWNpdHk6IDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICYuZW5kIHtcclxuICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsICNkOWVkZmQgNTAlLCAjZmZmIDUwJSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICY6aG92ZXIge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkOWVkZmQ7XHJcblxyXG4gICAgICAgICY6OmFmdGVyIHtcclxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgICYuc2VsZWN0ZWQuaG92ZXJlZCB7XHJcbiAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgI2ZmZiA1MCUsICNkOWVkZmQgNTAlKTtcclxuICAgICAgY29sb3I6ICNmZmY7XHJcblxyXG4gICAgICAmLmVuZCB7XHJcbiAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCAjZDllZGZkIDUwJSwgI2ZmZiA1MCUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmOmhvdmVyIHtcclxuICAgICAgICBjb2xvcjogIzAwMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgJjo6YWZ0ZXIge1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzQyODVmNDtcclxuICAgICAgfVxyXG5cclxuICAgICAgJjpob3Zlcjo6YWZ0ZXIge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAmLmRpc2FibGVkIHtcclxuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XHJcbiAgICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjYpO1xyXG5cclxuICAgICAgJi5zZWxlY3RlZCB7XHJcbiAgICAgICAgY29sb3I6ICNmZmY7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAudGV4dC1kYXkge1xyXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgIHotaW5kZXg6IDM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAuZGF5LWNvbnRlbnQge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgZ2FwOiAycHg7XHJcbiAgfVxyXG4gIFxyXG4gIC5zdWItdGV4dCB7XHJcbiAgICBmb250LXNpemU6IDAuNzVlbTtcclxuICAgIGNvbG9yOiAjNjY2O1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIH1cclxuICBcclxuICAuZGF5Lmhhcy1zdWJ0ZXh0IHtcclxuICAgIHBhZGRpbmctYm90dG9tOiA0cHg7XHJcbiAgfVxyXG5cclxuICAuY2FsZW5kYXItZmxpcHBlcnMge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiAwO1xyXG4gICAgbGVmdDogMDtcclxuICAgIGJvdHRvbTogMDtcclxuICAgIHJpZ2h0OiAwO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcclxuICB9XHJcblxyXG4gIC5mbGlwcGVyLWJ1dHRvbiB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gICAgYm9yZGVyLXJhZGl1czogMTAwJTtcclxuICAgIGJveC1zaGFkb3c6IDAgMCA0cHggcmdiYSgwLCAwLCAwLCAwLjEyKSwgMCA0cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4yNCk7XHJcbiAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICBoZWlnaHQ6IDQwcHg7XHJcbiAgICB3aWR0aDogNDBweDtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBtYXJnaW46IDAgLTIwcHg7XHJcbiAgICBwb2ludGVyLWV2ZW50czogYWxsO1xyXG4gICAgYm9yZGVyOiBub25lOyBcclxuICAgIG91dGxpbmU6IG5vbmU7IFxyXG5cclxuICAgICY6Zm9jdXM6aG92ZXIge1xyXG4gICAgICAgIG91dGxpbmU6IG5vbmU7XHJcbiAgICAgICAgYm94LXNoYWRvdzogMCAwIDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDRweCA0cHggcmdiYSgwLCAwLCAwLCAwLjI0KSxcclxuICAgICAgICAgICAgICAgICAgICAwIDAgMCAycHggcmdiYSgwLCAwLCAwLCAwLjEpOyBcclxuICAgIH1cclxuXHJcbiAgICBzdmcge1xyXG4gICAgICAgIHdpZHRoOiAyNHB4O1xyXG4gICAgICAgIGhlaWdodDogMjRweDtcclxuICAgIH1cclxuXHJcbiAgICAmLmRpc2FibGVkIHtcclxuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XHJcblxyXG4gICAgICAgIHN2ZyB7XHJcbiAgICAgICAgICAgIGZpbGw6ICM5Mzk4OWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiAgLmRpYWxvZy1mb290ZXIge1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XHJcbiAgICBwYWRkaW5nOiA4cHg7XHJcblxyXG4gICAgLnN1Ym1pdC1idXR0b24ge1xyXG4gICAgICBib3JkZXItcmFkaXVzOiA4cHg7XHJcbiAgICAgIHBhZGRpbmc6IDEwcHggOHB4O1xyXG4gICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiAxNnB4O1xyXG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xyXG4gICAgICBjb2xvcjogI2ZmZjtcclxuICAgICAgYmFja2dyb3VuZDogIzQyODVmNDtcclxuICAgICAgaGVpZ2h0OiAzNnB4O1xyXG4gICAgICBtaW4td2lkdGg6IDg4cHg7XHJcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XHJcbiAgICAgIGZvbnQtc2l6ZTogMC45cmVtO1xyXG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogUkVTUE9OU0lWRSBNT0JJTEUgKi9cclxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkge1xyXG4gICAgLmRhdGUtcGlja2VyLWRlbW8ge1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuICAgIH1cclxuXHJcbiAgICAuZGF0ZS1waWNrZXItaW5wdXQge1xyXG4gICAgICBoZWlnaHQ6IDQwcHg7XHJcbiAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgYm9yZGVyLXJhZGl1czogMDtcclxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgfVxyXG5cclxuICAgIC5kYXRlIHtcclxuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RhZGNlMDtcclxuICAgICAgYm9yZGVyLXJhZGl1czogNXB4O1xyXG4gICAgICBwYWRkaW5nOiAwIDEwcHg7XHJcbiAgICAgIGZsZXgtZ3JvdzogMTtcclxuXHJcbiAgICAgICY6bnRoLWNoaWxkKDIpIHtcclxuICAgICAgICBtYXJnaW4tbGVmdDogMTBweDtcclxuICAgICAgfVxyXG5cclxuICAgICAgJi5pcy1mb2N1cyB7XHJcbiAgICAgICAgaGVpZ2h0OiA0MHB4O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLmRhdGU6Zmlyc3QtY2hpbGQ6OmJlZm9yZSB7XHJcbiAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICB9XHJcblxyXG4gICAgLmljb24tY2FsZW5kYXIge1xyXG4gICAgICBkaXNwbGF5OiBub25lO1xyXG5cclxuICAgICAgJi5tb2JpbGUge1xyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLnJlc2V0LWJ1dHRvbiB7XHJcbiAgICAgIGRpc3BsYXk6IG5vbmU7XHJcblxyXG4gICAgICAmLm1vYmlsZSB7XHJcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44Nyk7XHJcbiAgICAgICAgbWluLXdpZHRoOiA4OHB4O1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAuY2hhbmdlLWRhdGUtZ3JvdXAsXHJcbiAgICAuZGl2aWRlcixcclxuICAgIC5jYWxlbmRhci1mbGlwcGVycyxcclxuICAgIC53ZWVrZGF5cyB7XHJcbiAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICB9XHJcblxyXG4gICAgLmJhY2stYnV0dG9uIHtcclxuICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgIHdpZHRoOiA1NnB4O1xyXG4gICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgIG1hcmdpbi1yaWdodDogMTZweDtcclxuICAgICAgcGFkZGluZzogMDtcclxuXHJcbiAgICAgIHN2ZyB7XHJcbiAgICAgICAgd2lkdGg6IDIwcHg7XHJcbiAgICAgICAgaGVpZ2h0OiAyMHB4O1xyXG4gICAgICAgIGZpbGw6IHJnYmEoMCwgMCwgMCwgMC43KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5kaWFsb2ctZGF0ZS1waWNrZXIge1xyXG4gICAgICBib3JkZXItcmFkaXVzOiAwO1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICBtYXgtaGVpZ2h0OiAxMDAlO1xyXG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgICAgIGxlZnQ6IDA7XHJcbiAgICAgIHJpZ2h0OiAwO1xyXG4gICAgICBib3R0b206IDEwcHg7XHJcbiAgICAgIHRvcDogMTAwJTtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAgb3BhY2l0eTogMTtcclxuICAgICAgdHJhbnNmb3JtOiBub25lO1xyXG4gICAgICB6LWluZGV4OiA5OTk5OTk5OTk7XHJcblxyXG4gICAgICAmLm9wZW4ge1xyXG4gICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2Utb3V0O1xyXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0xMDAlKTtcclxuICAgICAgICBhbmltYXRpb246IG5vbmU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICYuaGlkZSB7XHJcbiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbjtcclxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcclxuICAgICAgICBhbmltYXRpb246IG5vbmU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAuZGlhbG9nLWhlYWRlciB7XHJcbiAgICAgIHBhZGRpbmc6IDhweDtcclxuICAgICAgYm94LXNoYWRvdzogMCAwIDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDJweCAycHggcmdiYSgwLCAwLCAwLCAwLjI0KTtcclxuICAgICAgei1pbmRleDogNTA7XHJcblxyXG4gICAgICAuZGF0ZS1waWNrZXItaW5wdXQge1xyXG4gICAgICAgIGhlaWdodDogNDBweDtcclxuICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5kaWFsb2ctY29udGVudCB7XHJcbiAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgfVxyXG5cclxuICAgIC5jYWxlbmRhci13cmFwcGVyIHtcclxuICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICB9XHJcblxyXG4gICAgLmNhbGVuZGFyLWNvbnRlbnQge1xyXG4gICAgICBwYWRkaW5nOiAwO1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICBmbGV4LWdyb3c6IDE7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC53ZWVrZGF5cy5tb2JpbGUge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmM2YzO1xyXG4gICAgfVxyXG5cclxuICAgIC5tb250aC1jYWxlbmRhciB7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgfVxyXG5cclxuICAgIC5kYXkge1xyXG4gICAgICB3aWR0aDogY2FsYygxMDAlIC8gNyk7XHJcbiAgICAgIG1heC13aWR0aDogY2FsYygxMDAlIC8gNyk7XHJcblxyXG4gICAgICAmLnNlbGVjdGVkOmhvdmVyLFxyXG4gICAgICAmLmhvdmVyZWQ6aG92ZXIge1xyXG4gICAgICAgIGNvbG9yOiAjZmZmICFpbXBvcnRhbnQ7XHJcblxyXG4gICAgICAgICY6OmFmdGVyIHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM0Mjg1ZjQgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAubW9udGgtbmFtZSB7XHJcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xyXG4gICAgICBtYXJnaW4tYm90dG9tOiAwcHg7XHJcbiAgICAgIG1hcmdpbi10b3A6IDI1cHg7XHJcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgfVxyXG5cclxuICAgIC5kaWFsb2ctZm9vdGVyIHtcclxuICAgICAgYm94LXNoYWRvdzogMCAwIDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDRweCA0cHggcmdiYSgwLCAwLCAwLCAwLjI0KTtcclxuICAgICAgcGFkZGluZzogMTVweCA4cHg7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ== */`;\ndocument.head\n .appendChild(document.createElement(\"style\"))\n .appendChild(document.createTextNode(css));\nexport {css};\n","import { useState, useEffect } from 'react';\r\n\r\nexport const ClientOnly = ({ children }: { children: React.ReactNode }) => {\r\n const [hasMounted, setHasMounted] = useState(false);\r\n\r\n useEffect(() => {\r\n setHasMounted(true);\r\n }, []);\r\n\r\n if (!hasMounted) return null;\r\n\r\n return <>{children}</>;\r\n};","import React from \"react\";\r\nimport BaseDatePicker, { BaseDatePickerProps } from \"./BaseDatePicker\";\r\nimport \"./styles.scss\";\r\nimport { ClientOnly } from \"./ClientOnly\";\r\n\r\nexport interface RangeDatePickerProps extends BaseDatePickerProps {\r\n startDate: Date | null;\r\n endDate: Date | null;\r\n startDatePlaceholder?: string;\r\n endDatePlaceholder?: string;\r\n onChange?: (startDate: Date | null, endDate: Date | null) => void;\r\n onCloseCalendar?: (startDate: Date | null, endDate: Date | null) => void;\r\n dateInputSeperator?: React.ReactNode;\r\n hideDialogHeader?: boolean;\r\n hideDialogFooter?: boolean;\r\n hideDialogAfterSelectEndDate?: boolean;\r\n}\r\n\r\nexport const RangeDatePicker: React.FC<RangeDatePickerProps> = ({\r\n onChange = () => {},\r\n onCloseCalendar = () => {},\r\n startDatePlaceholder = \"Start date\",\r\n endDatePlaceholder = \"End date\",\r\n ...props\r\n}) => (\r\n <ClientOnly>\r\n <BaseDatePicker\r\n {...props}\r\n isSingle={false}\r\n startDate={props.startDate}\r\n endDate={props.endDate}\r\n startDatePlaceholder={startDatePlaceholder}\r\n endDatePlaceholder={endDatePlaceholder}\r\n onChange={onChange}\r\n onCloseCalendar={onCloseCalendar}\r\n />\r\n </ClientOnly>\r\n);\r\n","import React from \"react\";\r\nimport BaseDatePicker, { BaseDatePickerProps } from \"./BaseDatePicker\";\r\nimport \"./styles.scss\";\r\nimport { ClientOnly } from \"./ClientOnly\";\r\n\r\nexport interface SingleDatePickerProps\r\n extends Omit<BaseDatePickerProps, \"onChange\"> {\r\n startDate: Date | null;\r\n startDatePlaceholder?: string;\r\n onChange?: (date: Date | null) => void;\r\n onCloseCalendar?: (date: Date | null) => void;\r\n singleCalendar?: boolean;\r\n}\r\n\r\nexport const SingleDatePicker: React.FC<SingleDatePickerProps> = ({\r\n onChange = () => {},\r\n onCloseCalendar = () => {},\r\n startDatePlaceholder = \"Date\",\r\n ...props\r\n}) => (\r\n <ClientOnly>\r\n <BaseDatePicker\r\n {...props}\r\n endDate={null}\r\n isSingle={true}\r\n startDate={props.startDate}\r\n startDatePlaceholder={startDatePlaceholder}\r\n onChange={(date) => onChange(date)}\r\n onCloseCalendar={(date) => onCloseCalendar(date)}\r\n />\r\n </ClientOnly>\r\n);\r\n"],"mappings":"0lCAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,qBAAAE,GAAA,qBAAAC,KAAA,eAAAC,GAAAJ,ICAA,IAAAK,EAAiF,iBACjFC,EAA6B,oBAC7BC,GAAe,yBACfC,GAAuB,sCCHvB,IAAAC,GAAkB,oBAeX,SAASC,GACdC,EACAC,EACAC,EACW,CACX,IAAMC,EAAgB,CAAC,EACjBC,EAAY,IAAI,KAAKJ,EAAMC,EAAO,CAAC,EAEnCI,EADW,IAAI,KAAKL,EAAMC,EAAQ,EAAG,CAAC,EACnB,QAAQ,EAE7BK,EAAQ,EACRC,EAAMH,EAAU,OAAO,IAAM,EAAI,EAAI,EAAIA,EAAU,OAAO,EAAI,EAKlE,IAJIF,IAAa,WACfK,EAAM,EAAIH,EAAU,OAAO,GAGtBE,GAASD,GACdF,EAAM,KAAK,CAAE,MAAAG,EAAO,KAAMC,EAAMD,EAAQ,CAAE,CAAC,EAC3CA,EAAQC,EAAM,EACdA,GAAO,EACPA,EAAMD,IAAU,GAAKC,IAAQ,EAAI,EAAIA,EACjCA,EAAMF,IACRE,EAAMF,GAIV,MAAO,CAAE,UAAWF,EAAO,SAAUE,CAAQ,CAC/C,CAEO,SAASG,GACdC,EACAC,EACU,CACV,IAAMC,EAAO,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,IAAI,CAACC,EAAG,OACjC,GAAAC,SAAM,EAAE,IAAI,CAAC,EAAE,OAAOH,IAAkB,KAAO,KAC1BA,IAAkB,MAAQ,MAAQ,MAAM,CAC/D,EAEA,GAAID,IAAiB,SAAU,CAC7B,IAAMK,EAAOH,EAAK,IAAI,EAClBG,GACFH,EAAK,QAAQG,CAAI,CAErB,CAEA,OAAOH,CACT,CAMO,SAASI,GACdC,EACAC,EACsB,CACtB,IAAIC,EAEJ,OAAO,YAEFC,EACG,CACN,IAAMC,EAAQ,IAAM,CAClBF,EAAU,KACVF,EAAK,MAAM,KAAMG,CAAI,CACvB,EAEID,GACF,aAAaA,CAAO,EAGtBA,EAAU,WAAWE,EAAOH,CAAI,CAClC,CACF,CCxFA,IAAAI,EAAmF,iBACnFC,GAA6B,oBA4KjB,IAAAC,GAAA,6BAlHNC,MAAmB,iBAAgC,IAAI,EACvDC,MAA0B,iBAAuC,IAAI,EACrEC,MAAiB,iBAA8B,IAAI,EACnDC,MAAiB,iBAA2C,IAAI,EAChEC,MAAgB,iBAAkC,IAAI,EAG/CC,EAAe,IAAM,CAChC,IAAMC,KAAU,cAAWN,EAAgB,EAC3C,GAAI,CAACM,EAAS,MAAM,IAAI,MAAM,qDAAqD,EACnF,OAAOA,CACT,EAEaC,EAAsB,IAAM,CACvC,IAAMD,KAAU,cAAWL,EAAuB,EAClD,GAAI,CAACK,EAAS,MAAM,IAAI,MAAM,4DAA4D,EAC1F,OAAOA,CACT,EAEaE,GAAa,IAAM,CAC9B,IAAMF,KAAU,cAAWJ,EAAc,EACzC,GAAI,CAACI,EAAS,MAAM,IAAI,MAAM,mDAAmD,EACjF,OAAOA,CACT,EAEaG,EAA0B,IAAM,CAC3C,IAAMH,KAAU,cAAWH,EAAc,EACzC,GAAI,CAACG,EAAS,MAAM,IAAI,MAAM,gEAAgE,EAC9F,OAAOA,CACT,EASA,IAAMI,GAAa,MAAOC,GAAqC,CAC7D,GAAIA,IAAW,KAAM,MAAO,GAC5B,GAAI,CACF,aAAM,OAAO,gBAAgBA,CAAM,OAC5B,EACT,OAASC,EAAO,CACd,eAAQ,MAAM,yBAAyBD,CAAM,IAAKC,CAAK,EAChD,EACT,CACF,EAaaC,GAAwD,CAAC,CACpE,SAAAC,EACA,UAAAC,EACA,OAAAC,EACA,QAAAC,EACA,QAAAC,EACA,OAAAP,EAAS,IACX,IAAM,CAEJ,GAAM,CAACQ,EAAaC,CAAc,KAAI,YAAsB,CAC1D,cAAe,KACf,cAAeT,IAAW,IAC5B,CAAC,EAgCD,SA7BA,aAAU,IAAM,CACVA,IAAW,MACbS,EAAeC,GAASC,EAAAC,EAAA,GAAKF,GAAL,CAAW,cAAe,EAAM,EAAE,EAC1DX,GAAWC,CAAM,EACd,KAAKa,GAAW,CACXA,GACF,GAAAC,QAAM,OAAOd,CAAM,EACnBS,EAAe,CACb,cAAeT,EACf,cAAe,EACjB,CAAC,IAED,GAAAc,QAAM,OAAO,IAAI,EACjBL,EAAe,CACb,cAAe,KACf,cAAe,EACjB,CAAC,EAEL,CAAC,IAEH,GAAAK,QAAM,OAAO,IAAI,EACjBL,EAAe,CACb,cAAe,KACf,cAAe,EACjB,CAAC,EAEL,EAAG,CAACT,CAAM,CAAC,EAGNQ,EAAY,iBAMf,QAACO,GAAc,SAAd,CAAuB,MAAOP,EAC7B,oBAACQ,GAAiB,SAAjB,CAA0B,MAAOZ,EAChC,oBAACa,GAAwB,SAAxB,CAAiC,MAAOZ,EACvC,oBAACa,GAAe,SAAf,CAAwB,MAAOZ,EAC9B,oBAACa,GAAe,SAAf,CAAwB,MAAOZ,EAC7B,SAAAJ,EACH,EACF,EACF,EACF,EACF,EAfO,IAiBX,ECrLA,IAAAiB,GAAuB,iBAC6E,IAAAC,GAAA,6BAA9FC,GAAcC,MAAS,QAAC,MAAAC,EAAAC,EAAA,CAAI,MAAM,6BAA6B,QAAQ,aAAgBF,GAA/D,CAAsE,oBAAC,QAAK,EAAE,mKAAmK,GAAE,EAC1QG,GAAQJ,GCFf,IAAAK,GAA2C,iBAC3CC,GAAe,yBACfC,GAAkB,oBCFlB,IAAAC,GAAuB,iBACyE,IAAAC,GAAA,6BAA1FC,GAAUC,MAAS,QAAC,MAAAC,EAAAC,EAAA,CAAI,MAAM,6BAA6B,QAAQ,aAAgBF,GAA/D,CAAsE,oBAAC,QAAK,EAAE,2DAA2D,GAAE,EAC9JG,GAAQJ,GCFf,IAAAK,GAAuB,iBACyE,IAAAC,GAAA,6BAA1FC,GAAUC,MAAS,QAAC,MAAAC,EAAAC,EAAA,CAAI,MAAM,6BAA6B,QAAQ,aAAgBF,GAA/D,CAAsE,oBAAC,QAAK,EAAE,yDAAyD,GAAE,EAC5JG,GAAQJ,GF8GP,IAAAK,EAAA,6BA7FKC,GAAsC,CAAC,CAClD,KAAAC,EACA,SAAAC,EAAW,GACX,SAAAC,EAAW,EACX,aAAAC,EAAe,EACjB,IAAM,CACJ,GAAM,CAACC,EAAeC,CAAgB,KAAI,aAAwB,IAAI,EAChE,CAACC,EAAaC,CAAc,KAAI,aAAS,EAAK,EAC9C,CAACC,EAAaC,CAAc,KAAI,aAAS,EAAK,EAE9C,CACJ,SAAAC,EACA,OAAAC,EACA,WAAAC,EACA,qBAAAC,EACA,iBAAAC,CACF,EAAIC,EAAa,EAEX,CACJ,SAAAC,EACA,QAAAC,EACA,QAAAC,EACA,WAAAC,CACF,EAAIC,EAAoB,EAElB,CACJ,qBAAAC,EACA,mBAAAC,CACF,EAAIC,EAAwB,EAEtBC,EAAQxB,IAAS,OAASU,EAAWC,EACrCc,EAAczB,IAAS,OAASqB,EAAuBC,KAE7D,cAAU,IAAM,CACd,GAAIE,EAAO,CAET,IAAIE,EADiBF,EAAM,MAAM,EAAE,OAAO,GAAAG,QAAM,OAAO,CAAC,EAC9B,OAAO,aAAa,EAC1CR,IACFO,EAAOF,EAAM,OAAOL,CAAU,GAEhCd,EAAiBqB,CAAI,EAErB,IAAME,EAAeX,KAAU,GAAAU,SAAMV,CAAO,EAAI,KAC1CY,EAAeX,KAAU,GAAAS,SAAMT,CAAO,EAAI,KAE3CU,GAAA,MAAAA,EAAc,IAAI,EAAG,OAAO,QAAQJ,EAAO,SAC1CxB,IAAS,MAAQU,GAAYc,EAAM,SAASd,EAAS,IAAI,EAAG,KAAK,EAAG,MAAM,EAE9EH,EAAe,EAAI,EAEnBA,EAAe,EAAK,EAGlBsB,GAAA,MAAAA,EAAc,SAAS,EAAG,OAAO,SAASL,EAAO,QACnDf,EAAe,EAAI,EAEnBA,EAAe,EAAK,CAExB,MACEJ,EAAiB,IAAI,CAEzB,EAAG,CAACmB,EAAOd,EAAUO,EAASC,EAASC,EAAYnB,CAAI,CAAC,EAExD,IAAM8B,EAAYC,GAAwB,CACxCA,EAAE,gBAAgB,EACdP,GACFV,EAAiBU,EAAM,SAAS,EAAG,KAAK,EAAGxB,CAAI,CAEnD,EAEMgC,GAAYD,GAAwB,CACxCA,EAAE,gBAAgB,EACdP,GACFV,EAAiBU,EAAM,IAAI,EAAG,KAAK,EAAGxB,CAAI,CAE9C,EAEMiC,EAAc,IAAM,CACxBpB,EAAqBb,CAAI,CAC3B,EAEA,SACE,QAAC,OACC,aAAW,GAAAkC,SAAG,OAAQ,CACpB,WAAYtB,IAAeZ,GAAQ,CAACgB,EACpC,YAAaA,CACf,CAAC,EACD,KAAK,SACL,SAAUb,EAAe,GAAKD,EAC9B,QAAS+B,EACT,GAAI,GAAGjC,CAAI,qBAEV,UAAAC,MACC,OAACkC,GAAA,CAAa,UAAU,gBAAgB,QAAQ,YAAY,KAG9D,OAAC,OAAI,UAAU,gBACZ,SAAA/B,GAAA,KAAAA,KAAiB,OAAC,OAAI,UAAU,mBAAoB,SAAAqB,EAAY,EACnE,EAECrB,MACC,QAAC,OAAI,UAAU,oBACb,oBAAC,UACC,KAAK,SACL,UAAU,iCACV,QAAS0B,EACT,SAAU3B,EAAe,GAAK,EAC9B,SAAUG,EAEV,mBAAC8B,GAAA,CAAS,QAAQ,YAAY,UAAU,aAAa,EACvD,KACA,OAAC,UACC,KAAK,SACL,UAAU,iCACV,QAASJ,GACT,SAAU7B,EAAe,GAAK,EAC9B,SAAUK,EAEV,mBAAC6B,GAAA,CAAS,QAAQ,YAAY,UAAU,aAAa,EACvD,GACF,GAEJ,CAEJ,EGxHQ,IAAAC,GAAA,6BAVKC,GAAgD,CAAC,CAC5D,SAAAC,EAAW,GACX,aAAAC,EAAe,EACjB,IAAM,CACJ,GAAM,CAAE,SAAAC,CAAS,EAAIC,EAAoB,EACnC,CAAE,mBAAAC,CAAmB,EAAIC,EAAwB,EAEvD,SACE,SAAC,OAAI,UAAU,oBACZ,UAAAL,MACC,QAACM,GAAA,CAAa,UAAU,uBAAuB,QAAQ,YAAY,KAErE,SAAC,OAAI,UAAU,yBACb,qBAACC,GAAA,CACC,KAAK,OACL,SAAUN,EAAe,GAAK,EAC9B,SAAU,GACV,aAAcA,EAChB,EACC,CAACC,GAAYE,MACZ,QAAC,OAAI,UAAU,uBAAwB,SAAAA,EAAmB,EAE3D,CAACF,MACA,QAACK,GAAA,CACC,KAAK,KACL,SAAUN,EAAe,GAAK,EAC9B,SAAU,GACV,aAAcA,EAChB,GAEJ,GACF,CAEJ,EC5CA,IAAAO,GAA6B,qBCD7B,IAAAC,GAAoC,iBAEvBC,GAAgB,IAAM,CACjC,GAAM,CAACC,EAAUC,CAAW,KAAI,aAAS,EAAK,EAE9C,uBAAU,IAAM,CACdA,EAAY,EAAI,CAClB,EAAG,CAAC,CAAC,EAEED,CACT,EDSmB,IAAAE,GAAA,6BATbC,GAA8C,CAAC,CACnD,SAAAC,EAAW,KACX,SAAAC,EAAW,EACb,IACmBC,GAAc,EAIxBD,KACH,oBAAa,QAAC,OAAK,SAAAD,EAAS,EAAQ,SAAS,IAAI,EACjDA,EAJkB,KAOjBG,GAAQJ,GExBf,IAAAK,GAAmD,iBACnDC,GAAe,yBCDf,IAAAC,GAAuB,iBAC2E,IAAAC,GAAA,6BAA5FC,GAAUC,MAAS,QAAC,MAAAC,EAAAC,EAAA,CAAI,MAAM,6BAA6B,QAAQ,eAAkBF,GAAjE,CAAwE,oBAAC,QAAK,EAAE,6UAA6U,GAAE,EAClbG,GAAQJ,GCFf,IAAAK,GAAmD,oBACnDC,EAAkB,oBAClBC,GAAyC,wBACzCC,GAAsB,2CCHtB,IAAAC,GAAkC,iBAClCC,GAAe,yBACfC,GAA6B,oBCF7B,IAAAC,GAAkC,iBAClCC,GAAe,yBACfC,GAAkB,oBCFlB,IAAAC,GAAkE,iBAClEC,GAAe,yBAuGL,IAAAC,GAAA,6BAtFGC,MAAM,eAAqC,CAAC,CACvD,UAAAC,EACA,UAAAC,EACA,SAAAC,EACA,SAAAC,EACA,QAAAC,EACA,SAAAC,EACA,SAAAC,EACA,UAAAC,EACA,eAAAC,EACA,QAAAC,CACF,EAAGC,IAAQ,CACT,IAAMC,KAAS,WAAuB,IAAI,EACpC,CAAE,aAAAC,EAAc,YAAAC,CAAY,EAAIC,EAAa,EAE7CC,EAAcC,GAAwB,CAC1CA,EAAE,gBAAgB,EAClBA,EAAE,eAAe,EACb,CAAAX,GACJO,EAAaX,CAAS,CACxB,EAEMgB,EAAkB,IAAM,CACxBZ,IACJQ,EAAYZ,CAAS,EACrBO,EAAeP,CAAS,EAC1B,EAEMiB,KAAwB,gBAAY,IAAM,CAE9C,GAAI,CAACR,GAAO,OAAOA,GAAQ,WAAY,OACvC,IAAMS,EAAUT,EAAI,QAChBS,GAAWR,EAAO,UACpBQ,EAAQ,MAAM,KAAO,GACnBR,EAAO,QAAQ,WAAaQ,EAAQ,YAAc,GACpD,KACAA,EAAQ,MAAM,IAAM,GAClBR,EAAO,QAAQ,UAAYQ,EAAQ,aAAe,EACpD,KACAA,EAAQ,MAAM,WAAa,UAE/B,EAAG,CAACT,CAAG,CAAC,EAEFU,KAAsB,gBAAY,IAAM,CAC5C,GAAI,CAACV,GAAO,OAAOA,GAAQ,WAAY,OACvC,IAAMS,EAAUT,EAAI,QAChBS,IACFA,EAAQ,MAAM,WAAa,SAE/B,EAAG,CAACT,CAAG,CAAC,EAER,uBAAU,IAAM,CACd,IAAMW,EAAaV,EAAO,QAC1B,OAAIU,IACFA,EAAW,iBAAiB,YAAaH,CAAqB,EAC9DG,EAAW,iBAAiB,aAAcD,CAAmB,GAExD,IAAM,CACPC,IACFA,EAAW,oBAAoB,YAAaH,CAAqB,EACjEG,EAAW,oBAAoB,aAAcD,CAAmB,EAEpE,CACF,EAAG,CAACF,EAAuBE,CAAmB,CAAC,KAG7C,SAAC,OACC,aAAW,GAAAE,SAAG,MAAO,CACnB,SAAAnB,EACA,QAAAC,EACA,SAAAC,EACA,UAAAE,EACA,IAAKL,EACL,cAAe,CAAC,CAACO,CACnB,CAAC,EACD,QAASM,EACT,aAAcE,EACd,KAAK,SACL,SAAU,GACV,iBAAgBjB,EAChB,kBAAiBC,EAAU,QAAQ,EACnC,IAAKU,EAEJ,UAAAP,GACC,EAAEF,GAAYF,IAAcM,IAC5B,EAAEN,IAAc,GAAKG,GAAY,CAACD,OAChC,QAAC,OACC,aAAW,GAAAoB,SAAG,iBAAkB,CAC9B,YAAatB,IAAc,EAC3B,WAAYA,IAAcM,CAC5B,CAAC,EACH,KAEJ,SAAC,OAAI,UAAU,cACb,qBAAC,OAAI,UAAU,WAAY,SAAAN,EAAU,EACpCS,MACC,QAAC,OACC,UAAU,WACV,MAAO,CACL,SAAU,WACV,OAAQ,EACR,MAAQN,GAAY,CAACC,EAAW,OAAS,MAC3C,EAEC,SAAAK,EACH,GAEJ,GACF,CAEJ,CAAC,EAEDV,GAAI,YAAc,MDzCV,IAAAwB,GAAA,6BAlEKC,MAAO,eAAsC,CAAC,CACzD,QAAAC,EACA,KAAAC,EACA,MAAAC,EACA,KAAAC,EACA,SAAAC,EACA,UAAAC,EACA,eAAAC,CACF,EAAGC,IAAQ,CACT,GAAM,CACJ,SAAAC,EACA,OAAAC,EACA,UAAAC,CACF,EAAIC,EAAa,EAEX,CACJ,QAAAC,EACA,QAAAC,EACA,SAAAC,EACA,eAAAC,CACF,EAAIC,EAAoB,EAElB,CAAE,YAAAC,CAAY,EAAIC,EAAwB,EAE1CC,EAAc,IACX,MAAM,KAAK,CAAE,OAAQlB,EAAK,IAAK,EAAG,CAACmB,EAAGC,IAAU,CAhD3D,IAAAC,EAiDM,IAAMC,EAAYF,EAAQpB,EAAK,MACzBuB,KAAY,GAAAC,SAAM,GAAGtB,CAAI,IAAID,EAAQ,CAAC,IAAIqB,CAAS,EAAE,EACrDG,EACHd,GAAWY,EAAU,SAASZ,EAAS,MAAM,GAC7CC,GAAWW,EAAU,QAAQX,EAAS,MAAM,EACzCc,EACHnB,GAAYgB,EAAU,OAAOhB,EAAU,MAAM,GAC7CC,GAAUe,EAAU,OAAOf,EAAQ,MAAM,EACxCmB,EAAU,GACRC,GACJd,GAAkBS,EAAU,OAAO,IAAI,KAAQ,MAAM,EAEnDhB,GAAY,CAACA,EAAS,OAAOC,EAAQ,MAAM,GAAK,CAACK,IAEjDL,GACA,CAACD,EAAS,QAAQgB,EAAW,MAAM,GACnC,CAACf,EAAO,SAASe,EAAW,MAAM,IAElCI,EAAU,IAGV,CAACnB,GACD,CAACe,EAAU,SAAShB,EAAU,MAAM,GACpC,EAAEE,GAAaA,EAAU,SAASc,EAAW,MAAM,IACnDhB,EAAS,SAASE,EAAW,MAAM,IAEnCkB,EAAU,KAId,IAAME,EACHrB,GAAUe,EAAU,OAAOf,EAAQ,MAAM,GACzC,CAACA,GAAUC,GAAac,EAAU,OAAOd,EAAW,MAAM,EAEvDqB,EACHd,GAEGK,EAAAL,EAAYO,EAAU,OAAO,YAAY,CAAC,IAA1C,KAAAF,EAA+C,OAD/C,GAGN,SACE,QAACU,GAAA,CAEC,UAAWT,EACX,UAAWC,EACX,SAAUG,EACV,QAASC,EACT,UAAWC,GACX,SAAUH,EACV,SAAUI,EACV,SAAU1B,EACV,eAAgBE,EAChB,QAASyB,EACT,IAAKxB,GAXAc,CAYP,CAEJ,CAAC,EAGH,SACE,QAAC,OAAI,aAAW,GAAAY,SAAG,OAAQ,CAAE,MAAOjC,CAAQ,CAAC,EAC1C,SAAAmB,EAAY,EACf,CAEJ,CAAC,EAEDpB,GAAK,YAAc,ODtEX,IAAAmC,GAAA,6BAvBKC,MAAgB,eAA+C,CAAC,CAC3E,MAAAC,EACA,KAAAC,EACA,OAAAC,EAAS,GACT,YAAAC,EAAc,GACd,eAAAC,EACA,UAAAC,CACF,EAAGC,IAAQ,CAET,GAAM,CACJ,aAAAC,EACA,cAAAC,EACA,YAAAC,EACA,eAAAC,CACF,EAAIC,EAAoB,EAElBC,EAAe,IAAqB,CACxC,GAAM,CAAE,UAAAC,EAAW,SAAAC,CAAS,EAAIC,GAAad,EAAMD,EAAOO,CAAY,EAEtE,OAAOM,EAAU,IAAKG,GAAS,CAC7B,IAAMC,EAAU,GAAGhB,CAAI,IAAID,CAAK,IAAIgB,EAAK,KAAK,GAE9C,SACE,QAACE,GAAA,CAEC,KAAMF,EACN,MAAOhB,EACP,KAAMC,EACN,QAASe,IAASH,EAAU,CAAC,EAC7B,SAAUC,EACV,UAAWD,EAAU,QAAQG,CAAI,EACjC,eAAgBZ,EAChB,IAAKE,GARAW,CASP,CAEJ,CAAC,CACH,EAEME,EAAkB,IACOC,GAAWb,EAAcC,CAAa,EAEjD,IAAKa,MAEnB,QAAC,OAAI,UAAU,UACZ,SAAAA,GAD2B,WAAWA,EAAI,YAAY,CAAC,EAE1D,CAEH,EAGGC,EAAkB,IAAc,CACpC,IAAMC,KAAO,GAAAC,SAAM,GAAGvB,CAAI,IAAID,EAAQ,CAAC,IAAI,EAC3C,OAAOS,EACHc,EAAK,OAAOd,CAAW,EACvBc,EAAK,OAAO,aAAa,CAC/B,EAEA,SACE,SAAC,OACC,aAAW,GAAAE,SAAG,iBAAkB,CAC9B,YAAAtB,EACA,OAAAD,EACA,OAAQQ,CACV,EAAGL,CAAS,EACZ,mBAAkBL,EAAQ,EAE1B,qBAAC,OAAI,UAAU,aACZ,SAAAsB,EAAgB,EACnB,KACA,QAAC,OAAI,UAAU,WAAY,SAAAH,EAAgB,EAAE,KAC7C,QAAC,OAAI,UAAU,iBACZ,SAAAP,EAAa,EAChB,GACF,CAEJ,CAAC,EAEDb,GAAc,YAAc,gBDpBpB,IAAA2B,EAAA,6BA5DKC,GAAgC,IAAM,CACjD,GAAM,CAACC,EAAUC,CAAW,KAAI,aAAS,IAAI,EACvCC,KAAU,WAAa,IAAI,EAE3B,CACJ,SAAAC,CACF,EAAIC,EAAa,EAEX,CACJ,aAAAC,EACA,QAAAC,EACA,QAAAC,EACA,cAAAC,CACF,EAAIC,EAAoB,EAElB,CACJ,WAAAC,CACF,EAAIC,GAAW,EAET,CACJ,QAAAC,EACA,YAAAC,CACF,EAAIC,EAAwB,EAEtBC,EAAUT,KAAU,EAAAU,SAAMV,CAAO,EAAE,KAAK,EAAI,KAC5CW,EAAWX,KAAU,EAAAU,SAAMV,CAAO,EAAE,MAAM,EAAI,KAEpD,cAAU,IAAM,CACd,GAAIC,EAAS,CACX,IAAMW,EAAWZ,KAAU,EAAAU,SAAMV,CAAO,KAAI,EAAAU,SAAM,YAAY,EAC9Df,KAAY,EAAAe,SAAMT,CAAO,EAAE,KAAKW,EAAU,OAAO,EAAI,CAAC,CACxD,CACF,EAAG,CAACX,EAASD,CAAO,CAAC,KAErB,cAAU,IAAM,CACd,GAAIJ,EAAQ,SAAWQ,EAAY,CACjC,IAAMS,EAAOhB,KAAW,EAAAa,SAAMb,CAAQ,KAAI,EAAAa,SAAM,EAC5CI,EAAYD,EAAK,QAAK,EAAAH,SAAM,YAAY,EAAG,OAAO,EAElDV,IACFc,EAAYD,EAAK,QAAK,EAAAH,SAAMV,CAAO,EAAG,OAAO,GAG/CJ,EAAQ,QAAQ,aAAakB,EAAY,EAAG,OAAO,CACrD,CACF,EAAG,CAACV,EAAYP,EAAUG,CAAO,CAAC,EAElC,IAAMe,EAAyBC,GAAkB,CAC/C,IAAMC,EAASD,EAAQL,EACjBO,EAAOT,EAAU,KAAK,MAAMQ,EAAS,EAAE,EACvCE,EAAQF,EAAS,GAEvB,MAAO,CAAE,KAAAC,EAAM,MAAAC,CAAM,CACvB,EAEMC,EAAM,GAAAC,QAAM,KAAK,CAAC,CAAE,MAAAL,EAAO,MAAAM,CAAM,IAAgB,CACrD,GAAM,CAAE,KAAAJ,EAAM,MAAAC,CAAM,EAAIJ,EAAsBC,CAAK,EAEnD,SACE,OAAC,OAAI,MAAOM,EACV,mBAACC,GAAA,CACC,MAAOJ,EACP,KAAMD,EACN,OAAQ,GACR,YAAa,GACb,eAAgB,IAAM,CAAC,EACzB,EACF,CAEJ,CAAC,EACDE,EAAI,YAAc,cAElB,IAAMI,EAAeR,GAAkB,CACrC,GAAM,CAAE,KAAAE,EAAM,MAAAC,CAAM,EAAIJ,EAAsBC,CAAK,EAC7C,CAAE,UAAAS,CAAU,EAAIC,GAAaR,EAAMC,EAAOpB,GAAgB,QAAQ,EAExE,OAAO0B,EAAU,OAAS,GAAK,EACjC,EAEME,EAAuB,OAEzB,OAAC,GAAAC,QAAA,CACE,UAAC,CAAE,OAAAC,EAAQ,MAAAC,CAAM,OAChB,OAAC,GAAAC,iBAAA,CACC,IAAKnC,EACL,MAAOkC,EACP,OAAQD,EAAS,GACjB,UAAWnC,EACX,SAAU8B,EAET,SAAAJ,EACH,EAEJ,EAcJ,SACE,OAAC,OAAI,UAAU,mBACb,oBAAC,OAAI,UAAU,mBACb,oBAAC,OAAI,UAAU,kBACZ,SAbYY,GAAWjC,GAAgB,SAAUG,CAAa,EAEnD,IAAI,CAAC+B,EAAKjB,OAC1B,OAAC,OAAI,UAAU,UACZ,SAAAiB,GAD2BjB,CAE9B,CACD,EAQG,EACCW,EAAqB,GACxB,EACF,CAEJ,EIvIA,IAAAO,EAMO,iBACPC,GAAe,yBACfC,GAA6B,oBAmMvB,IAAAC,EAAA,6BAnLAC,GAAgB,IAAM,CAC1B,GAAM,CAACC,EAAUC,CAAW,KAAI,YAAS,EAAK,EAC9C,sBAAU,IAAM,CAAEA,EAAY,EAAI,CAAG,EAAG,CAAC,CAAC,EACnCD,CACT,EAEaE,GAA4D,CAAC,CACxE,YAAAC,EAAc,IAChB,IAAM,CACJ,IAAMH,EAAWD,GAAc,EACzBK,KAAe,UAAuB,IAAI,EAC1CC,KAAa,UAAuB,IAAI,EACxC,CAACC,EAAiBC,CAAkB,KAAI,YAAS,CAAC,EAClD,CAACC,EAAYC,CAAa,KAAI,YAAkB,CAAC,CAAC,EAClD,CAACC,EAAWC,CAAY,KAAI,YAAuB,IAAI,EACvD,CAACC,EAAaC,CAAc,KAAI,YAAS,EAAK,EAC9C,CAACC,EAAaC,CAAc,KAAI,YAAS,EAAK,EAC9C,CAACC,EAAcC,CAAe,KAAI,YAAS,CAAC,EAC5C,CAACC,EAAUC,CAAW,KAAI,YAAuB,IAAI,EACrD,CAACC,EAAaC,CAAc,KAAI,YAAS,EAAK,EAE9C,CAAE,SAAAC,CAAS,EAAIC,EAAa,EAC5B,CAAE,QAAAC,EAAS,QAAAC,EAAS,eAAAC,CAAe,EAAIC,EAAoB,EAC3D,CAAE,WAAAC,EAAW,EAAIC,GAAW,EAC5B,CAAE,QAAAC,CAAQ,EAAIC,EAAwB,EAEtCC,KAAgB,eAAaC,GAAyB,CAC1DA,EAAK,SAAS,EAAG,OAAO,EACxBA,EACAA,EAAK,IAAI,EAAG,OAAO,EACnBA,EAAK,IAAI,EAAG,OAAO,CACrB,EAAG,CAAC,CAAC,KAGL,aAAU,IAAM,CACd,GAAI,CAACjC,GAAY,CAACI,EAAa,QAAS,OAExC,IAAM8B,EAAmB,IAAM,CAC7B,IAAMC,EAAQ/B,EAAa,QAAS,YAC9BgC,EAAQ,OAAO,iBAAiBhC,EAAa,OAAQ,EACrDiC,EAAiBX,EACnBS,EAAQ,SAASC,EAAM,UAAU,EAAI,EACrCD,EAAQ,EACZlB,EAAgBoB,CAAc,CAChC,EAEAH,EAAiB,EACjB,IAAMI,EAAiB,IAAI,eAAeJ,CAAgB,EAC1D,OAAAI,EAAe,QAAQlC,EAAa,OAAO,EAEpC,IAAMkC,EAAe,WAAW,CACzC,EAAG,CAACtC,EAAU0B,CAAc,CAAC,KAG7B,aAAU,IAAM,CACdf,EAAaW,GAAA,KAAAA,KAAY,GAAAiB,SAAM,CAAC,CAClC,EAAG,CAACX,GAAYN,CAAQ,CAAC,KAGzB,aAAU,IAAM,CACd,GAAI,CAACZ,EAAW,OAGhB,IAAM8B,EAAWhB,KAAU,GAAAe,SAAMf,CAAO,EAAI,KACtCiB,EAAWhB,KAAU,GAAAc,SAAMd,CAAO,EAAI,KAE5CZ,EACE,GACE2B,GACA9B,EAAU,SAAS8B,EAAS,IAAI,EAAG,OAAO,EAAG,OAAO,EAExD,EAEAzB,EACE,GACE0B,GACA/B,EAAU,QAAQ+B,EAAS,SAAS,EAAG,OAAO,EAAG,OAAO,EAE5D,EAEAhC,EAAcuB,EAActB,CAAS,CAAC,CACxC,EAAG,CAACA,EAAWc,EAASC,EAASO,CAAa,CAAC,KAG/C,aAAU,IAAM,CACd,GAAI,CAAC7B,GAAe,CAACO,EAAW,OAEhC,IAAMgC,EAAYvC,EAAY,KAAKO,EAAW,OAAO,EACjDgC,EAAY,IAAIC,EAAqB,EACrCD,EAAY,GAAGE,EAAqB,CAC1C,EAAG,CAACzC,EAAaO,CAAS,CAAC,EAG3B,IAAMmC,KAAoB,eAAaC,GAA+B,IAAM,CAC1E,GAAKA,IAAc,QAAUhC,GACxBgC,IAAc,QAAUlC,GACzBQ,EAAa,OAEjBC,EAAe,EAAI,EACnBd,EAAmBuC,IAAc,OAAS,CAAC9B,EAAeA,CAAY,EAEtE,IAAM+B,EAAQ,WAAW,IAAM,CAC7BpC,EAAaqC,GAAQ,CACnB,IAAMC,EAAUH,IAAc,OAC1BE,EAAM,IAAI,EAAG,OAAO,EACpBA,EAAM,SAAS,EAAG,OAAO,EAC7B,OAAAvC,EAAcuB,EAAciB,CAAO,CAAC,EAC7BA,CACT,CAAC,EACD1C,EAAmB,CAAC,EACpBc,EAAe,EAAK,CACtB,EAAG,GAAG,EAEN,MAAO,IAAM,aAAa0B,CAAK,CACjC,EAAG,CAACjC,EAAaF,EAAaQ,EAAaJ,EAAcgB,CAAa,CAAC,EAEjE,CAACY,EAAsBD,CAAoB,KAAI,WACnD,IAAM,CAACE,EAAkB,MAAM,EAAGA,EAAkB,MAAM,CAAC,EAC3D,CAACA,CAAiB,CACpB,EAGMK,MAAkB,eAAY,IAAM,CACxC,GAAI,CAAClD,GAAY,CAACI,EAAa,QAAS,OAGxC,IAAM+C,EAAc/C,EAAa,QAAQ,cADxB,iEAC2D,EAC5E+C,GAAA,MAAAA,EAAa,OACf,EAAG,CAACnD,CAAQ,CAAC,EAGPoD,MAAgB,eAAaC,GAA2C,CA3JhF,IAAAC,GAAAC,GA4JI,IAAMC,EAASH,EAAE,OACXI,EAAWD,EAAO,aAAa,gBAAgB,EACrD,GAAI,CAACC,EAAU,OAEfJ,EAAE,eAAe,EAEjB,IAAMK,EAAoBF,EAAO,QAAQ,mBAAmB,EACtDG,EAAY,UAASL,GAAAE,EAAO,QAAQ,YAAf,KAAAF,GAA4B,GAAG,EACpDrB,MAAO,GAAAM,SAAMoB,CAAS,EACtBC,GAAW3B,GAAK,MAAM,OAAO,EAAE,KAAK,EAEtC4B,EAAW,SAASJ,CAAQ,EAChC,OAAQJ,EAAE,IAAK,CACb,IAAK,YAAaQ,IAAY,MAC9B,IAAK,UAAWA,GAAY,EAAG,MAC/B,IAAK,aAAcA,IAAY,MAC/B,IAAK,YAAaA,GAAY,EAAG,MACjC,IAAK,IAAKL,EAAO,MAAM,EAAG,OAC1B,QAAS,MACX,CAEA,GAAIK,EAAW,GAAKA,GAAYD,IAC9BL,GAAAG,GAAA,YAAAA,EAAmB,cAA2B,oBAAoBG,CAAQ,QAA1E,MAAAN,GAAiF,YAC5E,CACL,IAAMN,EAAUhB,GAAK,IAAI4B,EAAW,SAASJ,CAAQ,EAAG,KAAK,EACvDf,GAAYO,EAAQ,KAAKvC,EAAW,OAAO,EAE7CgC,GAAY,GAAK,CAAC5B,GAAa8B,EAAqB,EACpDF,GAAY,GAAK,CAAC9B,GAAa+B,EAAqB,EAExD,WAAW,IAAM,CA1LvB,IAAAW,IA2LQA,GAAAI,GAAA,YAAAA,EAAmB,cACjB,sBAAsBT,EAAQ,MAAM,EAAI,CAAC,uBAAuBA,EAAQ,KAAK,CAAC,QADhF,MAAAK,GAEG,OACL,EAAG,GAAG,CACR,CACF,EAAG,CAAC5C,EAAWI,EAAaF,EAAagC,EAAsBD,CAAoB,CAAC,EAG9EmB,MAAgB,WAAQ,IAAM,CAnMtC,IAAAR,EAoMI,GAAI,CAACxB,GAAW,CAAC9B,EAAU,OAAO,KAElC,IAAM+D,EAAU,OAAOjC,GAAY,WAC/BA,GAAQwB,EAAApC,GAAA,YAAAA,EAAU,WAAV,KAAAoC,EAAsB,IAAI,IAAM,EACxCxB,EAEJ,SACE,OAAC,OAAI,GAAG,cAAc,UAAU,eAAe,IAAKzB,EACjD,SAAA0D,EACH,CAEJ,EAAG,CAACjC,EAASZ,EAAUlB,CAAQ,CAAC,EAG1BgE,KAAiB,WAAQ,IAC7BxD,EAAW,IAAI,CAACyB,EAAMgC,IAAU,CAC9B,IAAMC,EAAYD,IAAU,GAAKA,IAAU,EACrCE,EAAgB/C,GAAed,EAAkB,GAAK2D,IAAU,EAChEG,EAAgBhD,GAAed,EAAkB,GAAK2D,IAAU,EAEtE,SACE,OAACI,GAAA,CAEC,OAAQ,CAACH,GAAa,CAACC,GAAiB,CAACC,EACzC,YAAaD,GAAiBC,EAC9B,MAAOnC,EAAK,MAAM,EAClB,KAAMA,EAAK,KAAK,EAChB,eAAgBd,EAChB,IAAKd,EACL,aAAW,GAAAiE,SAAG,CAAE,aAAcH,EAAe,aAAcC,CAAc,CAAC,GAPrE,GAAGnC,EAAK,KAAK,CAAC,IAAIA,EAAK,MAAM,CAAC,EAQrC,CAEJ,CAAC,EACH,CAACzB,EAAYY,EAAad,CAAe,CAAC,EAE1C,SACE,QAAC,OAAI,UAAU,WACZ,UAAAwD,MACD,QAAC,OACC,aAAW,GAAAQ,SAAG,mBAAoB,CAAE,OAAQ5C,CAAe,CAAC,EAC5D,IAAKtB,EACL,UAAWgD,GACX,KAAK,OACL,aAAW,WAEX,oBAAC,OACC,aAAW,GAAAkB,SAAG,mBAAoB,CAAE,YAAAlD,CAAY,CAAC,EACjD,MAAO,CAAE,UAAW,cAAcd,CAAe,KAAM,EAEtD,SAAA0D,EACH,KAEA,QAAC,OAAI,UAAU,oBACb,oBAAC,UACC,aAAW,GAAAM,SAAG,iBAAkB,CAAE,SAAU1D,CAAY,CAAC,EACzD,QAAS+B,EACT,UAAYU,GAAMA,EAAE,MAAQ,KAAOV,EAAqB,EACxD,SAAU/B,EACV,aAAW,iBAEX,mBAAC2D,GAAA,CAAS,QAAQ,YAAY,EAChC,KACA,OAAC,UACC,aAAW,GAAAD,SAAG,iBAAkB,CAAE,SAAUxD,CAAY,CAAC,EACzD,QAAS8B,EACT,UAAYS,GAAMA,EAAE,MAAQ,KAAOT,EAAqB,EACxD,SAAU9B,EACV,aAAW,aACX,OAAQoC,GAER,mBAACsB,GAAA,CAAS,QAAQ,YAAY,EAChC,GACF,GACF,GACF,CAEJ,ENhMQ,IAAAC,EAAA,6BA9DKC,GAAyC,CAAC,CACrD,aAAcC,CAChB,IAAM,CACJ,GAAM,CAACC,EAAeC,CAAgB,KAAI,aAAS,EAAK,EAClD,CAACC,EAAaC,CAAc,KAAI,aAAuB,IAAI,EAC3DC,KAAa,WAAuB,IAAI,EACxCC,EAAeN,GAAeK,EAE9B,CACJ,iBAAAE,EACA,YAAAC,CACF,EAAIC,EAAa,EAEX,CACJ,eAAAC,EACA,gBAAAC,CACF,EAAIC,EAAoB,EAElB,CACJ,WAAAC,EACA,SAAAC,EACA,aAAAC,CACF,EAAIC,GAAW,EAET,CACJ,iBAAAC,EACA,iBAAAC,CACF,EAAIC,EAAwB,EAEtBC,EAAe,CAACC,EAAaC,IAAwB,CACzDlB,EAAeiB,CAAI,EACnBd,EAAiBc,EAAMC,CAAI,CAC7B,EAEA,uBAAU,IAAM,CACVT,GAAc,CAACZ,GACjBC,EAAiB,EAAI,EAEnBW,GACF,WAAW,IAAM,CAzDvB,IAAAU,EA0DQ,IAAMC,GAAiBD,EAAAjB,EAAa,UAAb,YAAAiB,EAAsB,cAC3C,4BAEEC,GACFA,EAAe,MAAM,CAEzB,EAAG,EAAE,CAET,EAAG,CAACX,EAAYP,EAAcL,CAAa,CAAC,KAG1C,QAAC,OACC,aAAW,GAAAwB,SAAG,qBAAsB,CAClC,KAAQZ,EACR,KAAQ,CAACA,GAAcZ,EACvB,OAAUS,GAAkB,CAACI,EAC7B,cAAeH,IAAoB,OACnC,eAAgBA,IAAoB,OACtC,CAAC,EACD,IAAKL,EAEJ,WAACW,MACA,QAAC,OAAI,UAAU,gBACb,oBAAC,UACC,KAAK,SACL,UAAU,0BACV,QAASF,EAET,mBAACW,GAAA,CAAS,QAAQ,cAAc,EAClC,KAEA,OAACC,GAAA,CACC,SAAU,GACV,aAAc,CAACd,EACjB,KAEA,OAAC,UACC,KAAK,SACL,UAAU,2BACV,QAASL,EACV,iBAED,GACF,KAGF,OAAC,OAAI,UAAU,iBACZ,SAAAM,KACC,OAACc,GAAA,EAAoB,KAErB,OAACC,GAAA,CACC,YAAa1B,EACf,EAEJ,EAEC,CAACe,MACA,QAAC,OAAI,UAAU,gBACb,oBAAC,UACC,KAAK,SACL,UAAU,gBACV,QAASH,EACT,SAAU,EACX,gBAED,KACA,OAAC,UACC,KAAK,SACL,UAAU,kCACV,QAASP,EACV,iBAED,GACF,GAEJ,CAEJ,EOvIA,IAAMsB,GAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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","names":["index_exports","__export","RangeDatePicker","SingleDatePicker","__toCommonJS","import_react","import_dayjs","import_classnames","import_localeData","import_dayjs","getMonthInfo","year","month","startDay","weeks","firstDate","numDays","start","end","getWeekDay","startWeekDay","weekDayFormat","days","_","dayjs","last","debounce","func","wait","timeout","args","later","import_react","import_dayjs","import_jsx_runtime","DateStateContext","DatePickerConfigContext","UIStateContext","DisplayContext","LocaleContext","useDateState","context","useDatePickerConfig","useUIState","useDisplayCustomization","loadLocale","locale","error","DatePickerProvider","children","dateState","config","uiState","display","localeState","setLocaleState","prev","__spreadProps","__spreadValues","success","dayjs","LocaleContext","DateStateContext","DatePickerConfigContext","UIStateContext","DisplayContext","React","import_jsx_runtime","SvgCalendar","props","__spreadProps","__spreadValues","calendar_default","import_react","import_classnames","import_dayjs","React","import_jsx_runtime","SvgPrev","props","__spreadProps","__spreadValues","prev_default","React","import_jsx_runtime","SvgNext","props","__spreadProps","__spreadValues","next_default","import_jsx_runtime","DateInput","type","showIcon","tabIndex","nonFocusable","formattedDate","setFormattedDate","disablePrev","setDisablePrev","disableNext","setDisableNext","fromDate","toDate","inputFocus","handleClickDateInput","handleChangeDate","useDateState","isSingle","minDate","maxDate","dateFormat","useDatePickerConfig","startDatePlaceholder","endDatePlaceholder","useDisplayCustomization","value","placeholder","text","dayjs","minDateDayjs","maxDateDayjs","prevDate","e","nextDate","handleClick","cx","calendar_default","prev_default","next_default","import_jsx_runtime","DateInputGroup","showIcon","nonFocusable","isSingle","useDatePickerConfig","dateInputSeperator","useDisplayCustomization","calendar_default","DateInput","import_react_dom","import_react","useClientSide","isClient","setIsClient","import_jsx_runtime","DialogWrapper","children","isMobile","useClientSide","DialogWrapper_default","import_react","import_classnames","React","import_jsx_runtime","SvgBack","props","__spreadProps","__spreadValues","back_default","import_react","import_dayjs","import_react_window","import_react_virtualized_auto_sizer","import_react","import_classnames","import_dayjs","import_react","import_classnames","import_dayjs","import_react","import_classnames","import_jsx_runtime","Day","dateIndex","dateValue","isEndDay","selected","hovered","disabled","totalDay","highlight","handleHoverDay","subText","ref","dayRef","onSelectDate","onHoverDate","useDateState","selectDate","e","handleHoverDate","handleTooltipPosition","element","handleTooltipHidden","currentRef","cx","import_jsx_runtime","Week","isFirst","week","month","year","totalDay","weekIndex","handleHoverDay","ref","fromDate","toDate","hoverDate","useDateState","minDate","maxDate","isSingle","highlightToday","useDatePickerConfig","subTextDict","useDisplayCustomization","generateDay","_","index","_a","dateIndex","dateValue","dayjs","disabled","selected","hovered","highlight","isEndDate","subText","Day","cx","import_jsx_runtime","MonthCalendar","month","year","hidden","isAnimating","handleHoverDay","className","ref","startWeekDay","weekDayFormat","monthFormat","singleCalendar","useDatePickerConfig","generateWeek","totalWeek","totalDay","getMonthInfo","week","weekKey","Week","generateWeekDay","getWeekDay","day","getMonthDisplay","date","dayjs","cx","import_jsx_runtime","DialogContentMobile","rowCount","setRowCount","listRef","fromDate","useDateState","startWeekDay","minDate","maxDate","weekDayFormat","useDatePickerConfig","complsOpen","useUIState","tooltip","subTextDict","useDisplayCustomization","minYear","dayjs","minMonth","_minDate","date","monthDiff","getMonthYearFromIndex","index","_index","year","month","Row","React","style","MonthCalendar","getItemSize","totalWeek","getMonthInfo","renderMonthCalendars","AutoSizer","height","width","List","getWeekDay","day","import_react","import_classnames","import_dayjs","import_jsx_runtime","useClientSide","isClient","setIsClient","DialogContentDesktop","dateChanged","containerRef","tooltipRef","translateAmount","setTranslateAmount","monthArray","setMonthArray","focusDate","setFocusDate","disablePrev","setDisablePrev","disableNext","setDisableNext","wrapperWidth","setWrapperWidth","dayValue","setDayValue","isAnimating","setIsAnimating","fromDate","useDateState","minDate","maxDate","singleCalendar","useDatePickerConfig","complsOpen","useUIState","tooltip","useDisplayCustomization","getArrayMonth","date","updateDimensions","width","style","translateValue","resizeObserver","dayjs","minDayjs","maxDayjs","monthDiff","decreaseCurrentMonth","increaseCurrentMonth","handleMonthChange","direction","timer","prev","newDate","focusOnCalendar","focusTarget","handleKeyDown","e","_a","_b","target","dayIndex","calendarContainer","dateValue","lastDate","newIndex","renderTooltip","content","calendarMonths","index","isVisible","isSlidingNext","isSlidingPrev","MonthCalendar","cx","prev_default","next_default","import_jsx_runtime","Dialog","externalRef","hideAnimation","setHideAnimation","dateChanged","setDateChanged","defaultRef","containerRef","handleChangeDate","handleReset","useDateState","singleCalendar","expandDirection","useDatePickerConfig","complsOpen","isMobile","toggleDialog","useUIState","hideDialogHeader","hideDialogFooter","useDisplayCustomization","onChangeDate","date","type","_a","startDateInput","cx","back_default","DateInputGroup","DialogContentMobile","DialogContentDesktop","css","import_jsx_runtime","dayjs","localeData","BaseDatePicker","startDate","endDate","className","disabled","startDatePlaceholder","endDatePlaceholder","onChange","onFocus","startWeekDay","minDate","maxDate","weekDayFormat","dateFormat","monthFormat","highlightToday","dateInputSeperator","hideDialogHeader","hideDialogFooter","hideDialogAfterSelectEndDate","isOpen","onCloseCalendar","tooltip","subTextDict","expandDirection","locale","isSingle","singleCalendar","complsOpen","setComplsOpen","inputFocus","setInputFocus","fromDate","setFromDate","toDate","setToDate","hoverDate","setHoverDate","isMobile","setIsMobile","isFirstTime","setIsFirstTime","isClient","setIsClient","containerRef","fromDateRef","toDateRef","handleResize","debounceNotifyChange","debounce","_startDate","_endDate","updateFromDate","dateValue","shouldNotifyChange","updateToDate","handleDocumentClick","e","_startDateJs","_endDateJs","_a","_b","toggleDialog","handleClickDateInput","focusInput","onSelectDate","date","minDayjs","maxDayjs","onHoverDate","handleReset","handleChangeDate","type","dateState","config","uiState","display","cx","DatePickerProvider","DateInputGroup","DialogWrapper_default","Dialog","BaseDatePicker_default","import_react","import_jsx_runtime","ClientOnly","children","hasMounted","setHasMounted","import_jsx_runtime","RangeDatePicker","_a","_b","onChange","onCloseCalendar","startDatePlaceholder","endDatePlaceholder","props","__objRest","ClientOnly","BaseDatePicker_default","__spreadProps","__spreadValues","import_jsx_runtime","SingleDatePicker","_a","_b","onChange","onCloseCalendar","startDatePlaceholder","props","__objRest","ClientOnly","BaseDatePicker_default","__spreadProps","__spreadValues","date"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/index.ts","../src/lib/components/DatePicker/BaseDatePicker.tsx","../src/lib/helpers/index.ts","../src/lib/components/DatePicker/DatePickerProvider.tsx","../src/lib/assets/svg/calendar.svg","../src/lib/components/DatePicker/DateInput.tsx","../src/lib/assets/svg/prev.svg","../src/lib/assets/svg/next.svg","../src/lib/components/DatePicker/DateInputGroup.tsx","../src/lib/components/DatePicker/DialogWrapper.tsx","../src/lib/hooks/useClientSide.ts","../src/lib/components/DatePicker/Dialog.tsx","../src/lib/assets/svg/back.svg","../src/lib/components/DatePicker/DialogContentMobile.tsx","../src/lib/components/DatePicker/MonthCalendar.tsx","../src/lib/components/DatePicker/Week.tsx","../src/lib/components/DatePicker/Day.tsx","../src/lib/components/DatePicker/DialogContentDesktop.tsx","../src/lib/components/DatePicker/ClientOnly.tsx","../src/lib/components/DatePicker/RangeDatePicker.tsx","../src/lib/components/DatePicker/SingleDatePicker.tsx"],"sourcesContent":["export type { RangeDatePickerProps } from './components/DatePicker/RangeDatePicker';\r\nexport type { SingleDatePickerProps } from './components/DatePicker/SingleDatePicker';\r\nexport { RangeDatePicker } from './components/DatePicker/RangeDatePicker';\r\nexport { SingleDatePicker } from './components/DatePicker/SingleDatePicker';","import React, {\r\n useState,\r\n useRef,\r\n useEffect,\r\n useLayoutEffect,\r\n useCallback,\r\n} from \"react\";\r\nimport dayjs, { Dayjs } from \"dayjs\";\r\nimport cx from \"classnames\";\r\nimport localeData from \"dayjs/plugin/localeData\";\r\nimport { debounce } from \"../../helpers\";\r\n\r\nimport { DateInputGroup } from \"./DateInputGroup\";\r\nimport DialogWrapper from \"./DialogWrapper\";\r\nimport { Dialog } from \"./Dialog\";\r\n\r\nimport {\r\n DatePickerConfig,\r\n DatePickerProvider,\r\n DateState,\r\n DisplayCustomization,\r\n UIState,\r\n} from \"./DatePickerProvider\";\r\nimport { useClientSide } from \"@lib/hooks/useClientSide\";\r\n\r\ndayjs.extend(localeData);\r\n\r\nexport interface SubTextDict {\r\n [key: string]: string;\r\n}\r\n\r\n// Base shared props\r\nexport interface BaseDatePickerProps {\r\n className?: string;\r\n disabled?: boolean;\r\n startWeekDay?: \"monday\" | \"sunday\";\r\n minDate?: Date | null;\r\n maxDate?: Date | null;\r\n weekDayFormat?: string;\r\n dateFormat?: string;\r\n monthFormat?: string;\r\n highlightToday?: boolean;\r\n isOpen?: boolean;\r\n tooltip?: string | React.ReactNode | ((date: Date) => React.ReactNode);\r\n subTextDict?: SubTextDict | null;\r\n expandDirection?: string;\r\n locale?: string;\r\n onFocus?: (input: string) => void;\r\n}\r\n\r\n// Internal props for the base component\r\ninterface BaseDatePickerInternalProps extends BaseDatePickerProps {\r\n isSingle: boolean;\r\n startDate: Date | null;\r\n endDate: Date | null;\r\n startDatePlaceholder: string;\r\n endDatePlaceholder?: string;\r\n onChange: (startDate: Date | null, endDate: Date | null) => void;\r\n onCloseCalendar: (startDate: Date | null, endDate: Date | null) => void;\r\n dateInputSeperator?: React.ReactNode;\r\n hideDialogHeader?: boolean;\r\n hideDialogFooter?: boolean;\r\n hideDialogAfterSelectEndDate?: boolean;\r\n singleCalendar?: boolean;\r\n}\r\n\r\nconst BaseDatePicker: React.FC<BaseDatePickerInternalProps> = ({\r\n startDate = null,\r\n endDate = null,\r\n className = \"\",\r\n disabled = false,\r\n startDatePlaceholder,\r\n endDatePlaceholder,\r\n onChange,\r\n onFocus = () => {},\r\n startWeekDay = \"monday\",\r\n minDate = null,\r\n maxDate = null,\r\n weekDayFormat = \"dd\",\r\n dateFormat = \"\",\r\n monthFormat = \"\",\r\n highlightToday = false,\r\n dateInputSeperator = null,\r\n hideDialogHeader = false,\r\n hideDialogFooter = false,\r\n hideDialogAfterSelectEndDate = false,\r\n isOpen = false,\r\n onCloseCalendar,\r\n tooltip = \"\",\r\n subTextDict = null,\r\n expandDirection = \"right\",\r\n locale = \"en\",\r\n isSingle = false,\r\n singleCalendar = false,\r\n}) => {\r\n // State\r\n const [complsOpen, setComplsOpen] = useState<boolean>(isOpen);\r\n const [inputFocus, setInputFocus] = useState<\"from\" | \"to\" | null>(\r\n isSingle ? \"from\" : null\r\n );\r\n const [fromDate, setFromDate] = useState<Dayjs | undefined>(\r\n startDate ? dayjs(startDate) : undefined\r\n );\r\n const [toDate, setToDate] = useState<Dayjs | undefined>(\r\n endDate ? dayjs(endDate) : undefined\r\n );\r\n const [hoverDate, setHoverDate] = useState<Dayjs | undefined>();\r\n const [isMobile, setIsMobile] = useState<boolean>(false);\r\n const [isFirstTime, setIsFirstTime] = useState<boolean>(false);\r\n\r\n\r\n const isClient = useClientSide();\r\n\r\n // Refs\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const fromDateRef = useRef<Dayjs | null>(null);\r\n const toDateRef = useRef<Dayjs | null>(null);\r\n\r\n // Handle resize for mobile detection\r\n const handleResize = useCallback((): void => {\r\n if (!isClient) return;\r\n setIsMobile(window.innerWidth < 768);\r\n }, [isClient]);\r\n\r\n // Notify change handlers\r\n const notifyChange = (): void => {\r\n const _startDate = fromDateRef.current\r\n ? fromDateRef.current.toDate()\r\n : null;\r\n const _endDate =\r\n !isSingle && toDateRef.current ? toDateRef.current.toDate() : null;\r\n\r\n if (isSingle) {\r\n onChange(_startDate, null);\r\n } else {\r\n onChange(_startDate, _endDate);\r\n }\r\n };\r\n\r\n const debounceNotifyChange = debounce(notifyChange, 20);\r\n\r\n // Update date handlers\r\n const updateFromDate = (\r\n dateValue: Dayjs | null | undefined,\r\n shouldNotifyChange = false\r\n ): void => {\r\n setFromDate(dateValue || undefined);\r\n fromDateRef.current = dateValue || null;\r\n if (shouldNotifyChange) {\r\n debounceNotifyChange();\r\n }\r\n };\r\n\r\n const updateToDate = (\r\n dateValue: Dayjs | null | undefined,\r\n shouldNotifyChange = false\r\n ): void => {\r\n if (!isSingle) {\r\n setToDate(dateValue || undefined);\r\n toDateRef.current = dateValue || null;\r\n if (shouldNotifyChange) {\r\n debounceNotifyChange();\r\n }\r\n }\r\n };\r\n\r\n useLayoutEffect(() => {\r\n if (!isClient) return;\r\n handleResize();\r\n window.addEventListener(\"resize\", handleResize);\r\n return () => window.removeEventListener(\"resize\", handleResize);\r\n }, [isClient, handleResize]);\r\n\r\n useEffect(() => {\r\n if (!isClient) return;\r\n\r\n setIsFirstTime(true);\r\n const handleDocumentClick = (e: MouseEvent): void => {\r\n if (\r\n containerRef.current &&\r\n e.target instanceof Node &&\r\n !containerRef.current.contains(e.target) &&\r\n window.innerWidth >= 768\r\n ) {\r\n setComplsOpen(false);\r\n }\r\n };\r\n\r\n document.addEventListener(\"click\", handleDocumentClick);\r\n return () => document.removeEventListener(\"click\", handleDocumentClick);\r\n }, [isClient]); // Add isClient to dependencies\r\n\r\n useEffect(() => {\r\n const _startDateJs = startDate ? dayjs(startDate) : null;\r\n fromDateRef.current = _startDateJs;\r\n updateFromDate(_startDateJs, false);\r\n }, [startDate]);\r\n\r\n useEffect(() => {\r\n if (!isSingle) {\r\n const _endDateJs = endDate ? dayjs(endDate) : null;\r\n toDateRef.current = _endDateJs;\r\n updateToDate(_endDateJs, false);\r\n }\r\n }, [endDate, isSingle]);\r\n\r\n useEffect(() => {\r\n if (!complsOpen && isFirstTime) {\r\n const _startDate = fromDateRef.current?.toDate() || null;\r\n const _endDate = toDateRef.current?.toDate() || null;\r\n if (isSingle) {\r\n onCloseCalendar(_startDate, null);\r\n } else {\r\n onCloseCalendar(_startDate, _endDate);\r\n }\r\n }\r\n }, [complsOpen, isFirstTime, isSingle, onCloseCalendar]);\r\n\r\n useEffect(() => {\r\n setComplsOpen(isOpen);\r\n }, [isOpen]);\r\n\r\n useEffect(() => {\r\n if (isFirstTime) {\r\n const input =\r\n inputFocus === \"from\"\r\n ? \"Start Date\"\r\n : inputFocus === \"to\"\r\n ? \"End Date\"\r\n : \"\";\r\n onFocus(input);\r\n }\r\n }, [inputFocus, isFirstTime, onFocus]);\r\n\r\n // Event handlers\r\n const toggleDialog = (): void => {\r\n setComplsOpen(!complsOpen);\r\n };\r\n\r\n const handleClickDateInput = (focusInput: \"from\" | \"to\"): void => {\r\n if (disabled || (!isSingle && focusInput === \"to\" && !fromDate)) {\r\n return;\r\n }\r\n\r\n if (!complsOpen) {\r\n setComplsOpen(true);\r\n }\r\n\r\n setInputFocus(focusInput);\r\n };\r\n\r\n const onSelectDate = useCallback(\r\n (date: Dayjs): void => {\r\n const minDayjs = minDate ? dayjs(minDate) : null;\r\n const maxDayjs = maxDate ? dayjs(maxDate) : null;\r\n\r\n if (\r\n (minDayjs && minDayjs.isAfter(date, \"date\")) ||\r\n (maxDayjs && maxDayjs.isBefore(date, \"date\"))\r\n ) {\r\n return;\r\n }\r\n\r\n if (isSingle) {\r\n updateFromDate(date, true);\r\n if (hideDialogAfterSelectEndDate) {\r\n setTimeout(() => setComplsOpen(false), 50);\r\n }\r\n } else if (\r\n inputFocus === \"from\" ||\r\n (fromDate && date.isBefore(fromDate, \"date\"))\r\n ) {\r\n updateFromDate(date, true);\r\n if (toDate && date.isAfter(toDate, \"date\")) {\r\n updateToDate(null, true);\r\n }\r\n setInputFocus(\"to\");\r\n } else {\r\n updateToDate(date, true);\r\n setInputFocus(null);\r\n if (hideDialogAfterSelectEndDate) {\r\n setTimeout(() => setComplsOpen(false), 50);\r\n }\r\n }\r\n },\r\n [\r\n minDate,\r\n maxDate,\r\n isSingle,\r\n hideDialogAfterSelectEndDate,\r\n inputFocus,\r\n fromDate,\r\n toDate,\r\n ]\r\n );\r\n\r\n const onHoverDate = (date: Dayjs): void => {\r\n setHoverDate(date);\r\n };\r\n\r\n const handleReset = (): void => {\r\n setHoverDate(undefined);\r\n updateFromDate(null, true);\r\n if (!isSingle) {\r\n updateToDate(null, true);\r\n }\r\n setInputFocus(\"from\");\r\n };\r\n\r\n const handleChangeDate = useCallback(\r\n (date: Dayjs, type: \"from\" | \"to\"): void => {\r\n const minDayjs = minDate ? dayjs(minDate) : null;\r\n const maxDayjs = maxDate ? dayjs(maxDate) : null;\r\n\r\n if (\r\n (minDayjs && minDayjs.isAfter(date, \"date\")) ||\r\n (maxDayjs && maxDayjs.isBefore(date, \"date\"))\r\n ) {\r\n return;\r\n }\r\n\r\n if (type === \"from\" || isSingle) {\r\n setInputFocus(\"from\");\r\n updateFromDate(date, true);\r\n if (!isSingle && toDate && date.isAfter(toDate, \"date\")) {\r\n updateToDate(null, true);\r\n }\r\n } else {\r\n setInputFocus(\"to\");\r\n updateToDate(date, true);\r\n }\r\n },\r\n [minDate, maxDate, isSingle, toDate, inputFocus]\r\n );\r\n\r\n // Create context values\r\n const dateState: DateState = {\r\n fromDate,\r\n toDate,\r\n hoverDate,\r\n inputFocus,\r\n onSelectDate,\r\n onHoverDate,\r\n handleChangeDate,\r\n handleReset,\r\n handleClickDateInput,\r\n };\r\n\r\n const config: DatePickerConfig = {\r\n isSingle,\r\n startWeekDay,\r\n minDate: minDate ? dayjs(minDate).toDate() : null,\r\n maxDate: maxDate ? dayjs(maxDate).toDate() : null,\r\n weekDayFormat,\r\n dateFormat,\r\n monthFormat,\r\n highlightToday,\r\n singleCalendar,\r\n expandDirection,\r\n locale,\r\n };\r\n\r\n const uiState: UIState = {\r\n complsOpen,\r\n isMobile,\r\n disabled,\r\n toggleDialog,\r\n };\r\n\r\n const display: DisplayCustomization = {\r\n startDatePlaceholder,\r\n endDatePlaceholder,\r\n dateInputSeperator,\r\n hideDialogHeader,\r\n hideDialogFooter,\r\n hideDialogAfterSelectEndDate,\r\n tooltip,\r\n subTextDict,\r\n };\r\n\r\n return (\r\n <div className=\"react-google-flight-datepicker\">\r\n <div\r\n className={cx(\"date-picker\", className, {\r\n disabled,\r\n })}\r\n ref={containerRef}\r\n >\r\n <DatePickerProvider\r\n dateState={dateState}\r\n config={config}\r\n uiState={uiState}\r\n display={display}\r\n locale={locale}\r\n >\r\n <DateInputGroup />\r\n <DialogWrapper>\r\n <Dialog />\r\n </DialogWrapper>\r\n </DatePickerProvider>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default BaseDatePicker;\r\n","import dayjs from \"dayjs\";\r\n\r\ninterface Week {\r\n start: number;\r\n days: number;\r\n}\r\n\r\ninterface MonthInfo {\r\n totalWeek: Week[];\r\n totalDay: number;\r\n}\r\n\r\ntype WeekDayFormat = 'dd' | 'ddd' | 'dddd';\r\ntype StartWeekDay = 'sunday' | 'monday';\r\n\r\nexport function getMonthInfo(\r\n year: number,\r\n month: number,\r\n startDay: StartWeekDay\r\n): MonthInfo {\r\n const weeks: Week[] = [];\r\n const firstDate = new Date(year, month, 1);\r\n const lastDate = new Date(year, month + 1, 0);\r\n const numDays = lastDate.getDate();\r\n\r\n let start = 1;\r\n let end = firstDate.getDay() === 0 ? 1 : 7 - firstDate.getDay() + 1;\r\n if (startDay === 'sunday') {\r\n end = 7 - firstDate.getDay();\r\n }\r\n \r\n while (start <= numDays) {\r\n weeks.push({ start, days: end - start + 1 });\r\n start = end + 1;\r\n end += 7;\r\n end = start === 1 && end === 8 ? 1 : end;\r\n if (end > numDays) {\r\n end = numDays;\r\n }\r\n }\r\n\r\n return { totalWeek: weeks, totalDay: numDays };\r\n}\r\n\r\nexport function getWeekDay(\r\n startWeekDay: StartWeekDay | null,\r\n weekDayFormat: WeekDayFormat | string\r\n): string[] {\r\n const days = [...Array(7)].map((_, i) => \r\n dayjs().day(i).format(weekDayFormat === 'dd' ? 'dd' : \r\n weekDayFormat === 'ddd' ? 'ddd' : 'dddd')\r\n );\r\n\r\n if (startWeekDay === 'sunday') {\r\n const last = days.pop();\r\n if (last) {\r\n days.unshift(last);\r\n }\r\n }\r\n \r\n return days;\r\n}\r\n\r\ntype DebouncedFunction<T extends (...args: any[]) => any> = (\r\n ...args: Parameters<T>\r\n) => void;\r\n\r\nexport function debounce<T extends (...args: any[]) => any>(\r\n func: T,\r\n wait: number\r\n): DebouncedFunction<T> {\r\n let timeout: NodeJS.Timeout | null;\r\n\r\n return function executedFunction(\r\n this: any,\r\n ...args: Parameters<T>\r\n ): void {\r\n const later = () => {\r\n timeout = null;\r\n func.apply(this, args);\r\n };\r\n\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n }\r\n\r\n timeout = setTimeout(later, wait);\r\n };\r\n}\r\n\r\n\r\nexport const loadLocale = async (locale: string) => {\r\n try {\r\n if (locale === 'en') return true;\r\n await import(`dayjs/locale/${locale}.js`);\r\n return true;\r\n } catch (error) {\r\n console.error(`Failed to load locale ${locale}:`, error);\r\n return false;\r\n }\r\n};","import React, { createContext, useContext, useState, useCallback, useEffect } from 'react';\r\nimport dayjs, { Dayjs } from 'dayjs';\r\nimport { SubTextDict } from './BaseDatePicker';\r\n\r\n// Core date state and handlers\r\nexport interface DateState {\r\n fromDate?: Dayjs;\r\n toDate?: Dayjs;\r\n hoverDate?: Dayjs;\r\n inputFocus: 'from' | 'to' | null;\r\n onSelectDate: (date: Dayjs) => void;\r\n onHoverDate: (date: Dayjs) => void;\r\n handleChangeDate: (date: Dayjs, type: 'from' | 'to') => void;\r\n handleReset: () => void;\r\n handleClickDateInput: (type: 'from' | 'to') => void;\r\n}\r\n\r\n// Configuration that rarely changes\r\nexport interface DatePickerConfig {\r\n isSingle: boolean;\r\n startWeekDay: 'monday' | 'sunday';\r\n minDate: Date | null;\r\n maxDate: Date | null;\r\n weekDayFormat: string;\r\n dateFormat: string;\r\n monthFormat: string;\r\n highlightToday: boolean;\r\n singleCalendar?: boolean;\r\n expandDirection: string;\r\n locale: string;\r\n}\r\n\r\n// UI-specific state\r\nexport interface UIState {\r\n complsOpen: boolean;\r\n isMobile: boolean;\r\n disabled: boolean;\r\n toggleDialog: () => void;\r\n}\r\n\r\n// Display customization\r\nexport interface DisplayCustomization {\r\n startDatePlaceholder: string;\r\n endDatePlaceholder?: string;\r\n dateInputSeperator?: React.ReactNode;\r\n hideDialogHeader: boolean;\r\n hideDialogFooter: boolean;\r\n hideDialogAfterSelectEndDate: boolean;\r\n tooltip?: string | React.ReactNode | ((date: Date) => React.ReactNode);\r\n subTextDict?: SubTextDict | null;\r\n}\r\n\r\n// Locale state interface\r\nexport interface LocaleState {\r\n currentLocale: string;\r\n isLocaleReady: boolean;\r\n}\r\n\r\n// Create contexts\r\nconst DateStateContext = createContext<DateState | null>(null);\r\nconst DatePickerConfigContext = createContext<DatePickerConfig | null>(null);\r\nconst UIStateContext = createContext<UIState | null>(null);\r\nconst DisplayContext = createContext<DisplayCustomization | null>(null);\r\nconst LocaleContext = createContext<LocaleState | null>(null);\r\n\r\n// Custom hooks\r\nexport const useDateState = () => {\r\n const context = useContext(DateStateContext);\r\n if (!context) throw new Error('useDateState must be used within DatePickerProvider');\r\n return context;\r\n};\r\n\r\nexport const useDatePickerConfig = () => {\r\n const context = useContext(DatePickerConfigContext);\r\n if (!context) throw new Error('useDatePickerConfig must be used within DatePickerProvider');\r\n return context;\r\n};\r\n\r\nexport const useUIState = () => {\r\n const context = useContext(UIStateContext);\r\n if (!context) throw new Error('useUIState must be used within DatePickerProvider');\r\n return context;\r\n};\r\n\r\nexport const useDisplayCustomization = () => {\r\n const context = useContext(DisplayContext);\r\n if (!context) throw new Error('useDisplayCustomization must be used within DatePickerProvider');\r\n return context;\r\n};\r\n\r\nexport const useLocale = () => {\r\n const context = useContext(LocaleContext);\r\n if (!context) throw new Error('useLocale must be used within DatePickerProvider');\r\n return context;\r\n};\r\n\r\n// Locale loader utility\r\nconst loadLocale = async (locale: string): Promise<boolean> => {\r\n if (locale === 'en') return true;\r\n try {\r\n await import(`dayjs/locale/${locale}.js`);\r\n return true;\r\n } catch (error) {\r\n console.error(`Failed to load locale ${locale}:`, error);\r\n return false;\r\n }\r\n};\r\n\r\n// Provider Props interface\r\nexport interface DatePickerProviderProps {\r\n children: React.ReactNode;\r\n dateState: DateState;\r\n config: DatePickerConfig;\r\n uiState: UIState;\r\n display: DisplayCustomization;\r\n locale?: string;\r\n}\r\n\r\n// Provider component\r\nexport const DatePickerProvider: React.FC<DatePickerProviderProps> = ({\r\n children,\r\n dateState,\r\n config,\r\n uiState,\r\n display,\r\n locale = \"en\"\r\n}) => {\r\n // Locale state\r\n const [localeState, setLocaleState] = useState<LocaleState>({\r\n currentLocale: \"en\",\r\n isLocaleReady: locale === \"en\"\r\n });\r\n\r\n // Load and set locale\r\n useEffect(() => {\r\n if (locale !== \"en\") {\r\n setLocaleState(prev => ({ ...prev, isLocaleReady: false }));\r\n loadLocale(locale)\r\n .then(success => {\r\n if (success) {\r\n dayjs.locale(locale);\r\n setLocaleState({\r\n currentLocale: locale,\r\n isLocaleReady: true\r\n });\r\n } else {\r\n dayjs.locale(\"en\");\r\n setLocaleState({\r\n currentLocale: \"en\",\r\n isLocaleReady: true\r\n });\r\n }\r\n });\r\n } else {\r\n dayjs.locale(\"en\");\r\n setLocaleState({\r\n currentLocale: \"en\",\r\n isLocaleReady: true\r\n });\r\n }\r\n }, [locale]);\r\n\r\n // Don't render until locale is ready\r\n if (!localeState.isLocaleReady) {\r\n return null; // Or a loading component\r\n }\r\n\r\n // Provide all contexts\r\n return (\r\n <LocaleContext.Provider value={localeState}>\r\n <DateStateContext.Provider value={dateState}>\r\n <DatePickerConfigContext.Provider value={config}>\r\n <UIStateContext.Provider value={uiState}>\r\n <DisplayContext.Provider value={display}>\r\n {children}\r\n </DisplayContext.Provider>\r\n </UIStateContext.Provider>\r\n </DatePickerConfigContext.Provider>\r\n </DateStateContext.Provider>\r\n </LocaleContext.Provider>\r\n );\r\n};\r\n\r\nexport default DatePickerProvider;","import * as React from \"react\";\nconst SvgCalendar = props => <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" {...props}><path d=\"M9 11H7v2h2v-2zm4 0h-2v2h2v-2zm4 0h-2v2h2v-2zm2-7h-1V2h-2v2H8V2H6v2H5c-1.11 0-1.99.9-1.99 2L3 20a2 2 0 002 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 16H5V9h14v11z\" /></svg>;\nexport default SvgCalendar;","import React, { useEffect, useState } from 'react';\r\nimport cx from 'classnames';\r\nimport dayjs from 'dayjs';\r\nimport { \r\n useDateState, \r\n useDatePickerConfig, \r\n useDisplayCustomization \r\n} from './DatePickerProvider';\r\nimport CalendarIcon from '../../assets/svg/calendar.svg';\r\nimport PrevIcon from '../../assets/svg/prev.svg';\r\nimport NextIcon from '../../assets/svg/next.svg';\r\n\r\ninterface DateInputProps {\r\n type: 'from' | 'to';\r\n showIcon?: boolean;\r\n tabIndex?: number;\r\n nonFocusable?: boolean;\r\n}\r\n\r\nexport const DateInput: React.FC<DateInputProps> = ({\r\n type,\r\n showIcon = false,\r\n tabIndex = 0,\r\n nonFocusable = false,\r\n}) => {\r\n const [formattedDate, setFormattedDate] = useState<string | null>(null);\r\n const [disablePrev, setDisablePrev] = useState(false);\r\n const [disableNext, setDisableNext] = useState(false);\r\n\r\n const {\r\n fromDate,\r\n toDate,\r\n inputFocus,\r\n handleClickDateInput,\r\n handleChangeDate\r\n } = useDateState();\r\n\r\n const {\r\n isSingle,\r\n minDate,\r\n maxDate,\r\n dateFormat\r\n } = useDatePickerConfig();\r\n\r\n const {\r\n startDatePlaceholder,\r\n endDatePlaceholder\r\n } = useDisplayCustomization();\r\n\r\n const value = type === 'from' ? fromDate : toDate;\r\n const placeholder = type === 'from' ? startDatePlaceholder : endDatePlaceholder;\r\n\r\n useEffect(() => {\r\n if (value) {\r\n let formattedValue = value.clone().locale(dayjs.locale());\r\n let text = formattedValue.format('ddd, DD MMM');\r\n if (dateFormat) {\r\n text = value.format(dateFormat);\r\n }\r\n setFormattedDate(text);\r\n\r\n const minDateDayjs = minDate ? dayjs(minDate) : null;\r\n const maxDateDayjs = maxDate ? dayjs(maxDate) : null;\r\n\r\n if ((minDateDayjs?.add(1, 'day').isAfter(value, 'date'))\r\n || (type === 'to' && fromDate && value.isBefore(fromDate.add(1, 'day'), 'date'))\r\n ) {\r\n setDisablePrev(true);\r\n } else {\r\n setDisablePrev(false);\r\n }\r\n\r\n if (maxDateDayjs?.subtract(1, 'day').isBefore(value, 'date')) {\r\n setDisableNext(true);\r\n } else {\r\n setDisableNext(false);\r\n }\r\n } else {\r\n setFormattedDate(null);\r\n }\r\n }, [value, fromDate, minDate, maxDate, dateFormat, type]);\r\n\r\n const prevDate = (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n if (value) {\r\n handleChangeDate(value.subtract(1, 'day'), type);\r\n }\r\n };\r\n\r\n const nextDate = (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n if (value) {\r\n handleChangeDate(value.add(1, 'day'), type);\r\n }\r\n };\r\n\r\n const handleClick = () => {\r\n handleClickDateInput(type);\r\n };\r\n\r\n return (\r\n <div\r\n className={cx('date', { \r\n 'is-focus': inputFocus === type && !isSingle, \r\n 'is-single': isSingle \r\n })}\r\n role=\"button\"\r\n tabIndex={nonFocusable ? -1 : tabIndex}\r\n onClick={handleClick}\r\n id={`${type}-date-input-button`}\r\n >\r\n {showIcon && (\r\n <CalendarIcon className=\"icon-calendar\" viewBox=\"0 0 24 24\" />\r\n )}\r\n\r\n <div className=\"selected-date\">\r\n {formattedDate ?? <div className=\"date-placeholder\">{placeholder}</div>}\r\n </div>\r\n \r\n {formattedDate && (\r\n <div className=\"change-date-group\">\r\n <button\r\n type=\"button\"\r\n className=\"btn-outline change-date-button\"\r\n onClick={prevDate}\r\n tabIndex={nonFocusable ? -1 : 0}\r\n disabled={disablePrev}\r\n >\r\n <PrevIcon viewBox=\"0 0 24 24\" className=\"icon-arrow\" />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"btn-outline change-date-button\"\r\n onClick={nextDate}\r\n tabIndex={nonFocusable ? -1 : 0}\r\n disabled={disableNext}\r\n >\r\n <NextIcon viewBox=\"0 0 24 24\" className=\"icon-arrow\" />\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};","import * as React from \"react\";\nconst SvgPrev = props => <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" {...props}><path d=\"M15.41 16.59L10.83 12l4.58-4.59L14 6l-6 6 6 6 1.41-1.41z\" /></svg>;\nexport default SvgPrev;","import * as React from \"react\";\nconst SvgNext = props => <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" {...props}><path d=\"M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z\" /></svg>;\nexport default SvgNext;","import React from \"react\";\r\nimport {\r\n useDatePickerConfig,\r\n useDisplayCustomization,\r\n} from \"./DatePickerProvider\";\r\nimport CalendarIcon from \"../../assets/svg/calendar.svg\";\r\nimport { DateInput } from \"./DateInput\";\r\n\r\ninterface DateInputGroupProps {\r\n showIcon?: boolean;\r\n nonFocusable?: boolean;\r\n}\r\n\r\nexport const DateInputGroup: React.FC<DateInputGroupProps> = ({\r\n showIcon = false,\r\n nonFocusable = false,\r\n}) => {\r\n const { isSingle } = useDatePickerConfig();\r\n const { dateInputSeperator } = useDisplayCustomization();\r\n\r\n return (\r\n <div className=\"date-picker-input\">\r\n {showIcon && (\r\n <CalendarIcon className=\"icon-calendar mobile\" viewBox=\"0 0 24 24\" />\r\n )}\r\n <div className=\"date-picker-date-group\">\r\n <DateInput\r\n type=\"from\"\r\n tabIndex={nonFocusable ? -1 : 0}\r\n showIcon={true}\r\n nonFocusable={nonFocusable}\r\n />\r\n {!isSingle && dateInputSeperator && (\r\n <div className=\"date-input-separator\">{dateInputSeperator}</div>\r\n )}\r\n {!isSingle && (\r\n <DateInput\r\n type=\"to\"\r\n tabIndex={nonFocusable ? -1 : 0}\r\n showIcon={false}\r\n nonFocusable={nonFocusable}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n","// DialogWrapper.tsx\r\nimport React from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport { useClientSide } from '../../hooks/useClientSide';\r\n\r\ninterface DialogWrapperProps {\r\n children?: React.ReactNode;\r\n isMobile?: boolean;\r\n}\r\n\r\n\r\nconst DialogWrapper: React.FC<DialogWrapperProps> = ({ \r\n children = null, \r\n isMobile = false \r\n}) => {\r\n const isClient = useClientSide();\r\n \r\n if (!isClient) return null;\r\n \r\n return isMobile\r\n ? createPortal(<div>{children}</div>, document.body)\r\n : children;\r\n};\r\n\r\nexport default DialogWrapper;\r\n","// hooks/useClientSide.ts\r\nimport { useEffect, useState } from 'react';\r\n\r\nexport const useClientSide = () => {\r\n const [isClient, setIsClient] = useState(false);\r\n \r\n useEffect(() => {\r\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\r\n setIsClient(true);\r\n } else {\r\n console.warn('Client-side context not available');\r\n }\r\n }, []);\r\n \r\n return isClient;\r\n };\r\n\r\n","import React, { useEffect, useState, useRef } from 'react';\r\nimport cx from 'classnames';\r\nimport { \r\n useDateState, \r\n useDatePickerConfig, \r\n useUIState,\r\n useDisplayCustomization\r\n} from './DatePickerProvider';\r\nimport BackIcon from '../../assets/svg/back.svg';\r\nimport {DateInputGroup} from './DateInputGroup';\r\nimport {DialogContentMobile} from './DialogContentMobile';\r\nimport {DialogContentDesktop} from './DialogContentDesktop';\r\nimport { Dayjs } from 'dayjs';\r\n\r\ninterface DialogContainerProps {\r\n containerRef?: React.RefObject<HTMLDivElement>;\r\n}\r\n\r\nexport const Dialog: React.FC<DialogContainerProps> = ({ \r\n containerRef: externalRef \r\n}) => {\r\n const [hideAnimation, setHideAnimation] = useState(false);\r\n const [dateChanged, setDateChanged] = useState<Dayjs | null>(null);\r\n const defaultRef = useRef<HTMLDivElement>(null);\r\n const containerRef = externalRef || defaultRef;\r\n\r\n const {\r\n handleChangeDate,\r\n handleReset,\r\n } = useDateState();\r\n\r\n const {\r\n singleCalendar,\r\n expandDirection\r\n } = useDatePickerConfig();\r\n\r\n const {\r\n complsOpen,\r\n isMobile,\r\n toggleDialog\r\n } = useUIState();\r\n\r\n const {\r\n hideDialogHeader,\r\n hideDialogFooter,\r\n } = useDisplayCustomization();\r\n\r\n const onChangeDate = (date: Dayjs, type: 'from' | 'to') => {\r\n setDateChanged(date);\r\n handleChangeDate(date, type);\r\n };\r\n\r\n useEffect(() => {\r\n if (complsOpen && !hideAnimation) {\r\n setHideAnimation(true);\r\n }\r\n if (complsOpen) {\r\n setTimeout(() => {\r\n const startDateInput = containerRef.current?.querySelector(\r\n '#start-date-input-button'\r\n ) as HTMLElement;\r\n if (startDateInput) {\r\n startDateInput.focus();\r\n }\r\n }, 50);\r\n }\r\n }, [complsOpen, containerRef, hideAnimation]);\r\n\r\n return (\r\n <div\r\n className={cx('dialog-date-picker', {\r\n 'open': complsOpen,\r\n 'hide': !complsOpen && hideAnimation,\r\n 'single': singleCalendar && !isMobile,\r\n 'expand-left': expandDirection === 'left',\r\n 'expand-right': expandDirection === 'right',\r\n })}\r\n ref={containerRef}\r\n >\r\n {!hideDialogHeader && (\r\n <div className=\"dialog-header\">\r\n <button\r\n type=\"button\"\r\n className=\"btn-outline back-button\"\r\n onClick={toggleDialog}\r\n >\r\n <BackIcon viewBox=\"0 0 492 492\" />\r\n </button>\r\n \r\n <DateInputGroup\r\n showIcon={true}\r\n nonFocusable={!complsOpen}\r\n />\r\n \r\n <button\r\n type=\"button\"\r\n className=\"btn-outline reset-button\"\r\n onClick={handleReset}\r\n >\r\n Reset\r\n </button>\r\n </div>\r\n )}\r\n\r\n <div className=\"dialog-content\">\r\n {isMobile ? (\r\n <DialogContentMobile />\r\n ) : (\r\n <DialogContentDesktop\r\n dateChanged={dateChanged}\r\n />\r\n )}\r\n </div>\r\n\r\n {!hideDialogFooter && (\r\n <div className=\"dialog-footer\">\r\n <button\r\n type=\"button\"\r\n className=\"submit-button\"\r\n onClick={toggleDialog}\r\n tabIndex={0}\r\n >\r\n Done\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"btn-outline reset-button mobile\"\r\n onClick={handleReset}\r\n >\r\n Reset\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};","import * as React from \"react\";\nconst SvgBack = props => <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 492 492\" {...props}><path d=\"M464.3 207.4l.8.2H136l103.5-103.7c5-5.1 7.8-12 7.8-19.2 0-7.2-2.7-14-7.8-19l-16.1-16.2c-5-5-11.8-7.8-19-7.8-7.2 0-14 2.8-19 7.8L7.8 227C2.8 232 0 238.8 0 246c0 7.3 2.8 14 7.8 19.2l177.5 177.4c5 5 11.8 7.8 19 7.8 7.2 0 14-2.8 19-7.8l16-16.1a26.6 26.6 0 000-37.7L134.8 284.4h330a27.9 27.9 0 0027.3-27.6V234a27.3 27.3 0 00-27.7-26.6z\" /></svg>;\nexport default SvgBack;","import React, { useEffect, useState, useRef } from 'react';\r\nimport dayjs from 'dayjs';\r\nimport { VariableSizeList as List } from 'react-window';\r\nimport AutoSizer from 'react-virtualized-auto-sizer';\r\nimport { \r\n useDateState, \r\n useDatePickerConfig,\r\n useDisplayCustomization, \r\n useUIState\r\n} from './DatePickerProvider';\r\nimport {MonthCalendar} from './MonthCalendar';\r\nimport { getMonthInfo, getWeekDay } from '../../helpers';\r\n\r\ninterface RowProps {\r\n index: number;\r\n style: React.CSSProperties;\r\n}\r\n\r\nexport const DialogContentMobile: React.FC = () => {\r\n const [rowCount, setRowCount] = useState(2400);\r\n const listRef = useRef<List>(null);\r\n\r\n const {\r\n fromDate,\r\n } = useDateState();\r\n\r\n const {\r\n startWeekDay,\r\n minDate,\r\n maxDate,\r\n weekDayFormat\r\n } = useDatePickerConfig();\r\n\r\n const {\r\n complsOpen\r\n } = useUIState()\r\n\r\n const {\r\n tooltip,\r\n subTextDict\r\n } = useDisplayCustomization();\r\n\r\n const minYear = minDate ? dayjs(minDate).year() : 1900;\r\n const minMonth = minDate ? dayjs(minDate).month() : 0;\r\n\r\n useEffect(() => {\r\n if (maxDate) {\r\n const _minDate = minDate ? dayjs(minDate) : dayjs('1900-01-01');\r\n setRowCount(dayjs(maxDate).diff(_minDate, 'month') + 1);\r\n }\r\n }, [maxDate, minDate]);\r\n\r\n useEffect(() => {\r\n if (listRef.current && complsOpen) {\r\n const date = fromDate ? dayjs(fromDate) : dayjs();\r\n let monthDiff = date.diff(dayjs('1900-01-01'), 'month');\r\n\r\n if (minDate) {\r\n monthDiff = date.diff(dayjs(minDate), 'month');\r\n }\r\n\r\n listRef.current.scrollToItem(monthDiff + 1, 'smart');\r\n }\r\n }, [complsOpen, fromDate, minDate]);\r\n\r\n const getMonthYearFromIndex = (index: number) => {\r\n const _index = index + minMonth;\r\n const year = minYear + Math.floor(_index / 12);\r\n const month = _index % 12;\r\n\r\n return { year, month };\r\n };\r\n\r\n const Row = React.memo(({ index, style }: RowProps) => {\r\n const { year, month } = getMonthYearFromIndex(index);\r\n\r\n return (\r\n <div style={style}>\r\n <MonthCalendar\r\n month={month}\r\n year={year}\r\n hidden={false}\r\n isAnimating={false}\r\n handleHoverDay={() => {}} // Mobile doesn't use hover\r\n />\r\n </div>\r\n );\r\n });\r\n Row.displayName = 'CalendarRow';\r\n\r\n const getItemSize = (index: number) => {\r\n const { year, month } = getMonthYearFromIndex(index);\r\n const { totalWeek } = getMonthInfo(year, month, startWeekDay || 'monday');\r\n\r\n return totalWeek.length * 48 + 34;\r\n };\r\n\r\n const renderMonthCalendars = () => {\r\n return (\r\n <AutoSizer>\r\n {({ height, width }: { height: number; width: number }) => (\r\n <List\r\n ref={listRef}\r\n width={width}\r\n height={height - 36}\r\n itemCount={rowCount}\r\n itemSize={getItemSize}\r\n >\r\n {Row}\r\n </List>\r\n )}\r\n </AutoSizer>\r\n );\r\n };\r\n\r\n const generateWeekDay = () => {\r\n const arrWeekDay = getWeekDay(startWeekDay || 'monday', weekDayFormat);\r\n\r\n return arrWeekDay.map((day, index) => (\r\n <div className=\"weekday\" key={index}>\r\n {day}\r\n </div>\r\n ));\r\n };\r\n\r\n return (\r\n <div className=\"calendar-wrapper\">\r\n <div className=\"calendar-content\">\r\n <div className=\"weekdays mobile\">\r\n {generateWeekDay()}\r\n </div>\r\n {renderMonthCalendars()}\r\n </div>\r\n </div>\r\n );\r\n};","import React, { forwardRef, ReactElement } from 'react';\r\nimport cx from 'classnames';\r\nimport dayjs, { Dayjs } from 'dayjs';\r\nimport { useDatePickerConfig } from './DatePickerProvider';\r\nimport {Week} from './Week';\r\nimport { getMonthInfo, getWeekDay } from '../../helpers';\r\n\r\ninterface MonthCalendarProps {\r\n month: number;\r\n year: number;\r\n hidden: boolean;\r\n isAnimating: boolean;\r\n handleHoverDay: (date: Dayjs) => void;\r\n className?: string; // Add support for additional classes\r\n}\r\n\r\ninterface WeekInfo {\r\n totalWeek: number[][];\r\n totalDay: number;\r\n}\r\n\r\nexport const MonthCalendar = forwardRef<HTMLDivElement, MonthCalendarProps>(({\r\n month,\r\n year,\r\n hidden = false,\r\n isAnimating = false,\r\n handleHoverDay,\r\n className\r\n}, ref) => {\r\n\r\n const {\r\n startWeekDay,\r\n weekDayFormat,\r\n monthFormat,\r\n singleCalendar\r\n } = useDatePickerConfig();\r\n\r\n const generateWeek = (): ReactElement[] => {\r\n const { totalWeek, totalDay } = getMonthInfo(year, month, startWeekDay);\r\n \r\n return totalWeek.map((week) => {\r\n const weekKey = `${year}-${month}-${week.start}`; // Using first day of week for key\r\n \r\n return (\r\n <Week\r\n key={weekKey}\r\n week={week}\r\n month={month}\r\n year={year}\r\n isFirst={week === totalWeek[0]}\r\n totalDay={totalDay}\r\n weekIndex={totalWeek.indexOf(week)}\r\n handleHoverDay={handleHoverDay}\r\n ref={ref}\r\n />\r\n );\r\n });\r\n };\r\n\r\n const generateWeekDay = (): ReactElement[] => {\r\n const arrWeekDay: string[] = getWeekDay(startWeekDay, weekDayFormat);\r\n \r\n return arrWeekDay.map((day) => {\r\n return (\r\n <div className=\"weekday\" key={`weekday-${day.toLowerCase()}`}>\r\n {day}\r\n </div>\r\n );\r\n });\r\n };\r\n\r\n const getMonthDisplay = (): string => {\r\n const date = dayjs(`${year}-${month + 1}-1`);\r\n return monthFormat \r\n ? date.format(monthFormat)\r\n : date.format('MMMM - YYYY');\r\n };\r\n\r\n return (\r\n <div\r\n className={cx('month-calendar', {\r\n isAnimating,\r\n hidden,\r\n single: singleCalendar,\r\n }, className)} // Add the className to the classnames\r\n data-month-index={month + 1}\r\n >\r\n <div className=\"month-name\">\r\n {getMonthDisplay()}\r\n </div>\r\n <div className=\"weekdays\">{generateWeekDay()}</div>\r\n <div className=\"week-container\">\r\n {generateWeek()}\r\n </div>\r\n </div>\r\n );\r\n});\r\n\r\nMonthCalendar.displayName = 'MonthCalendar';","import React, { forwardRef } from 'react';\r\nimport cx from 'classnames';\r\nimport dayjs from 'dayjs';\r\nimport { \r\n useDateState, \r\n useDatePickerConfig,\r\n useDisplayCustomization \r\n} from './DatePickerProvider';\r\nimport { Day } from './Day';\r\n\r\ninterface WeekProps {\r\n isFirst: boolean;\r\n week: {\r\n days: number;\r\n start: number;\r\n };\r\n month: number;\r\n year: number;\r\n totalDay: number;\r\n weekIndex: number;\r\n handleHoverDay: (date: dayjs.Dayjs) => void;\r\n}\r\n\r\nexport const Week = forwardRef<HTMLDivElement, WeekProps>(({\r\n isFirst,\r\n week,\r\n month,\r\n year,\r\n totalDay,\r\n weekIndex,\r\n handleHoverDay,\r\n}, ref) => {\r\n const {\r\n fromDate,\r\n toDate,\r\n hoverDate\r\n } = useDateState();\r\n\r\n const {\r\n minDate,\r\n maxDate,\r\n isSingle,\r\n highlightToday\r\n } = useDatePickerConfig();\r\n\r\n const { subTextDict } = useDisplayCustomization();\r\n\r\n const generateDay = () => {\r\n return Array.from({ length: week.days }, (_, index) => {\r\n const dateIndex = index + week.start;\r\n const dateValue = dayjs(`${year}-${month + 1}-${dateIndex}`);\r\n const disabled =\r\n (minDate && dateValue.isBefore(minDate, 'date')) ||\r\n (maxDate && dateValue.isAfter(maxDate, 'date'));\r\n const selected =\r\n (fromDate && dateValue.isSame(fromDate, 'date')) ||\r\n (toDate && dateValue.isSame(toDate, 'date'));\r\n let hovered = false;\r\n const highlight =\r\n highlightToday && dateValue.isSame(dayjs(), 'date');\r\n\r\n if (fromDate && !fromDate.isSame(toDate, 'date') && !isSingle) {\r\n if (\r\n toDate &&\r\n !fromDate.isAfter(dateValue, 'date') &&\r\n !toDate.isBefore(dateValue, 'date')\r\n ) {\r\n hovered = true;\r\n }\r\n if (\r\n !toDate &&\r\n !dateValue.isBefore(fromDate, 'date') &&\r\n !(hoverDate && hoverDate.isBefore(dateValue, 'date')) &&\r\n fromDate.isBefore(hoverDate, 'date')\r\n ) {\r\n hovered = true;\r\n }\r\n }\r\n\r\n const isEndDate =\r\n (toDate && dateValue.isSame(toDate, 'date')) ||\r\n (!toDate && hoverDate && dateValue.isSame(hoverDate, 'date'));\r\n\r\n const subText =\r\n !subTextDict\r\n ? ''\r\n : subTextDict[dateValue.format('YYYY-MM-DD')] ?? '\\u00A0';\r\n\r\n return (\r\n <Day\r\n key={index}\r\n dateIndex={dateIndex}\r\n dateValue={dateValue}\r\n selected={selected}\r\n hovered={hovered}\r\n highlight={highlight}\r\n disabled={disabled}\r\n isEndDay={isEndDate}\r\n totalDay={totalDay}\r\n handleHoverDay={handleHoverDay}\r\n subText={subText}\r\n ref={ref}\r\n />\r\n );\r\n });\r\n };\r\n\r\n return (\r\n <div className={cx('week', { first: isFirst })}>\r\n {generateDay()}\r\n </div>\r\n );\r\n});\r\n\r\nWeek.displayName = 'Week';","import React, { forwardRef, useCallback, useEffect, useRef } from 'react';\r\nimport cx from 'classnames';\r\nimport { Dayjs } from 'dayjs';\r\nimport { useDateState } from './DatePickerProvider';\r\n\r\ninterface DayProps {\r\n dateIndex: number;\r\n dateValue: Dayjs;\r\n isEndDay?: boolean;\r\n selected?: boolean;\r\n hovered: boolean;\r\n disabled: boolean | null;\r\n totalDay: number;\r\n highlight: boolean;\r\n handleHoverDay: (date: Dayjs) => void;\r\n subText: string;\r\n}\r\n\r\nexport const Day = forwardRef<HTMLDivElement, DayProps>(({\r\n dateIndex,\r\n dateValue,\r\n isEndDay,\r\n selected,\r\n hovered,\r\n disabled,\r\n totalDay,\r\n highlight,\r\n handleHoverDay,\r\n subText,\r\n}, ref) => {\r\n const dayRef = useRef<HTMLDivElement>(null);\r\n const { onSelectDate, onHoverDate } = useDateState();\r\n\r\n const selectDate = (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n if (disabled) return;\r\n onSelectDate(dateValue);\r\n };\r\n\r\n const handleHoverDate = () => {\r\n if (disabled) return;\r\n onHoverDate(dateValue);\r\n handleHoverDay(dateValue);\r\n };\r\n\r\n const handleTooltipPosition = useCallback(() => {\r\n // Check if ref exists and is a RefObject\r\n if (!ref || typeof ref === 'function') return;\r\n const element = ref.current;\r\n if (element && dayRef.current) {\r\n element.style.left = `${\r\n dayRef.current.offsetLeft - element.offsetWidth + 135\r\n }px`;\r\n element.style.top = `${\r\n dayRef.current.offsetTop - element.offsetHeight - 15\r\n }px`;\r\n element.style.visibility = 'visible';\r\n }\r\n }, [ref]);\r\n\r\n const handleTooltipHidden = useCallback(() => {\r\n if (!ref || typeof ref === 'function') return;\r\n const element = ref.current;\r\n if (element) {\r\n element.style.visibility = 'hidden';\r\n }\r\n }, [ref]);\r\n\r\n useEffect(() => {\r\n const currentRef = dayRef.current;\r\n if (currentRef) {\r\n currentRef.addEventListener('mouseover', handleTooltipPosition);\r\n currentRef.addEventListener('mouseleave', handleTooltipHidden);\r\n }\r\n return () => {\r\n if (currentRef) {\r\n currentRef.removeEventListener('mouseover', handleTooltipPosition);\r\n currentRef.removeEventListener('mouseleave', handleTooltipHidden);\r\n }\r\n };\r\n }, [handleTooltipPosition, handleTooltipHidden]);\r\n\r\n return (\r\n <div\r\n className={cx('day', {\r\n selected,\r\n hovered,\r\n disabled,\r\n highlight,\r\n end: isEndDay,\r\n 'has-subtext': !!subText,\r\n })}\r\n onClick={selectDate}\r\n onMouseEnter={handleHoverDate}\r\n role=\"button\"\r\n tabIndex={-1}\r\n data-day-index={dateIndex}\r\n data-date-value={dateValue.valueOf()}\r\n ref={dayRef}\r\n >\r\n {hovered &&\r\n !(isEndDay && dateIndex === totalDay) &&\r\n !(dateIndex === 1 && selected && !isEndDay) && (\r\n <div\r\n className={cx('background-day', {\r\n 'first-day': dateIndex === 1,\r\n 'last-day': dateIndex === totalDay,\r\n })}\r\n />\r\n )}\r\n <div className=\"day-content\">\r\n <div className=\"text-day\">{dateIndex}</div>\r\n {subText && (\r\n <div\r\n className=\"sub-text\"\r\n style={{\r\n position: 'relative',\r\n zIndex: 3,\r\n color: (selected && !hovered) ? '#fff' : '#666',\r\n }}\r\n >\r\n {subText}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n});\r\n\r\nDay.displayName = 'Day';","import React, {\r\n useEffect,\r\n useState,\r\n useRef,\r\n useCallback,\r\n useMemo,\r\n} from \"react\";\r\nimport cx from \"classnames\";\r\nimport dayjs, { Dayjs } from \"dayjs\";\r\nimport {\r\n useDateState,\r\n useDatePickerConfig,\r\n useDisplayCustomization,\r\n useUIState,\r\n} from \"./DatePickerProvider\";\r\nimport PrevIcon from \"../../assets/svg/prev.svg\";\r\nimport NextIcon from \"../../assets/svg/next.svg\";\r\nimport { MonthCalendar } from \"./MonthCalendar\";\r\n\r\ninterface DialogContentDesktopProps {\r\n dateChanged?: Dayjs | null;\r\n}\r\n\r\n// Client-side check hook\r\nconst useClientSide = () => {\r\n const [isClient, setIsClient] = useState(false);\r\n useEffect(() => { setIsClient(true); }, []);\r\n return isClient;\r\n};\r\n\r\nexport const DialogContentDesktop: React.FC<DialogContentDesktopProps> = ({\r\n dateChanged = null,\r\n}) => {\r\n const isClient = useClientSide();\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const tooltipRef = useRef<HTMLDivElement>(null);\r\n const [translateAmount, setTranslateAmount] = useState(0);\r\n const [monthArray, setMonthArray] = useState<Dayjs[]>([]);\r\n const [focusDate, setFocusDate] = useState<Dayjs | null>(null);\r\n const [disablePrev, setDisablePrev] = useState(false);\r\n const [disableNext, setDisableNext] = useState(false);\r\n const [wrapperWidth, setWrapperWidth] = useState(0);\r\n const [dayValue, setDayValue] = useState<Dayjs | null>(null);\r\n const [isAnimating, setIsAnimating] = useState(false);\r\n\r\n const { fromDate } = useDateState();\r\n const { minDate, maxDate, singleCalendar } = useDatePickerConfig();\r\n const { complsOpen } = useUIState();\r\n const { tooltip } = useDisplayCustomization();\r\n\r\n const getArrayMonth = useCallback((date: Dayjs): Dayjs[] => [\r\n date.subtract(1, \"month\"),\r\n date,\r\n date.add(1, \"month\"),\r\n date.add(2, \"month\"),\r\n ], []);\r\n\r\n // Width calculation with resize observer\r\n useEffect(() => {\r\n if (!isClient || !containerRef.current) return;\r\n\r\n const updateDimensions = () => {\r\n const width = containerRef.current!.offsetWidth;\r\n const style = window.getComputedStyle(containerRef.current!);\r\n const translateValue = singleCalendar\r\n ? width + parseInt(style.marginLeft) - 8\r\n : width / 2;\r\n setWrapperWidth(translateValue);\r\n };\r\n\r\n updateDimensions();\r\n const resizeObserver = new ResizeObserver(updateDimensions);\r\n resizeObserver.observe(containerRef.current);\r\n\r\n return () => resizeObserver.disconnect();\r\n }, [isClient, singleCalendar]);\r\n\r\n // Focus date initialization\r\n useEffect(() => {\r\n setFocusDate(fromDate ?? dayjs());\r\n }, [complsOpen, fromDate]);\r\n\r\n // Month array and navigation controls\r\n useEffect(() => {\r\n if (!focusDate) return;\r\n\r\n // Convert Date to Dayjs before using date math\r\n const minDayjs = minDate ? dayjs(minDate) : null;\r\n const maxDayjs = maxDate ? dayjs(maxDate) : null;\r\n\r\n setDisablePrev(\r\n Boolean(\r\n minDayjs && \r\n focusDate.isBefore(minDayjs.add(1, \"month\"), \"month\")\r\n )\r\n );\r\n \r\n setDisableNext(\r\n Boolean(\r\n maxDayjs &&\r\n focusDate.isAfter(maxDayjs.subtract(2, \"month\"), \"month\")\r\n )\r\n );\r\n\r\n setMonthArray(getArrayMonth(focusDate));\r\n }, [focusDate, minDate, maxDate, getArrayMonth]);\r\n\r\n // Date change handler\r\n useEffect(() => {\r\n if (!dateChanged || !focusDate) return;\r\n\r\n const monthDiff = dateChanged.diff(focusDate, \"month\");\r\n if (monthDiff < -1) decreaseCurrentMonth();\r\n if (monthDiff > 1) increaseCurrentMonth();\r\n }, [dateChanged, focusDate]);\r\n\r\n // Animation handlers\r\n const handleMonthChange = useCallback((direction: \"next\" | \"prev\") => () => {\r\n if ((direction === \"next\" && disableNext) || \r\n (direction === \"prev\" && disablePrev) || \r\n isAnimating) return;\r\n\r\n setIsAnimating(true);\r\n setTranslateAmount(direction === \"next\" ? -wrapperWidth : wrapperWidth);\r\n\r\n const timer = setTimeout(() => {\r\n setFocusDate(prev => {\r\n const newDate = direction === \"next\" \r\n ? prev!.add(1, \"month\") \r\n : prev!.subtract(1, \"month\");\r\n setMonthArray(getArrayMonth(newDate));\r\n return newDate;\r\n });\r\n setTranslateAmount(0);\r\n setIsAnimating(false);\r\n }, 200);\r\n\r\n return () => clearTimeout(timer);\r\n }, [disableNext, disablePrev, isAnimating, wrapperWidth, getArrayMonth]);\r\n\r\n const [increaseCurrentMonth, decreaseCurrentMonth] = useMemo(\r\n () => [handleMonthChange(\"next\"), handleMonthChange(\"prev\")],\r\n [handleMonthChange]\r\n );\r\n\r\n // Focus management\r\n const focusOnCalendar = useCallback(() => {\r\n if (!isClient || !containerRef.current) return;\r\n\r\n const selector = \".day.selected, .month-calendar:not(.hidden) .day:not(.disabled)\";\r\n const focusTarget = containerRef.current.querySelector<HTMLElement>(selector);\r\n focusTarget?.focus();\r\n }, [isClient]);\r\n\r\n // Keyboard navigation\r\n const handleKeyDown = useCallback((e: React.KeyboardEvent<HTMLDivElement>) => {\r\n const target = e.target as HTMLElement;\r\n const dayIndex = target.getAttribute(\"data-day-index\");\r\n if (!dayIndex) return;\r\n\r\n e.preventDefault();\r\n \r\n const calendarContainer = target.closest(\".calendar-wrapper\");\r\n const dateValue = parseInt(target.dataset.dateValue ?? \"0\");\r\n const date = dayjs(dateValue);\r\n const lastDate = date.endOf(\"month\").date();\r\n\r\n let newIndex = parseInt(dayIndex);\r\n switch (e.key) {\r\n case \"ArrowLeft\": newIndex--; break;\r\n case \"ArrowUp\": newIndex -= 7; break;\r\n case \"ArrowRight\": newIndex++; break;\r\n case \"ArrowDown\": newIndex += 7; break;\r\n case \" \": target.click(); return;\r\n default: return;\r\n }\r\n\r\n if (newIndex > 0 && newIndex <= lastDate) {\r\n calendarContainer?.querySelector<HTMLElement>(`[data-day-index=\"${newIndex}\"]`)?.focus();\r\n } else {\r\n const newDate = date.add(newIndex - parseInt(dayIndex), \"day\");\r\n const monthDiff = newDate.diff(focusDate, \"month\");\r\n \r\n if (monthDiff > 1 && !disableNext) increaseCurrentMonth();\r\n if (monthDiff < 0 && !disablePrev) decreaseCurrentMonth();\r\n\r\n setTimeout(() => {\r\n calendarContainer?.querySelector<HTMLElement>(\r\n `[data-month-index=\"${newDate.month() + 1}\"] [data-day-index=\"${newDate.date()}\"]`\r\n )?.focus();\r\n }, 200);\r\n }\r\n }, [focusDate, disableNext, disablePrev, increaseCurrentMonth, decreaseCurrentMonth]);\r\n\r\n // Tooltip rendering\r\n const renderTooltip = useMemo(() => {\r\n if (!tooltip || !isClient) return null;\r\n \r\n const content = typeof tooltip === \"function\" \r\n ? tooltip(dayValue?.toDate() ?? new Date()) \r\n : tooltip;\r\n\r\n return (\r\n <div id=\"day-tooltip\" className=\"tooltip-text\" ref={tooltipRef}>\r\n {content}\r\n </div>\r\n );\r\n }, [tooltip, dayValue, isClient]);\r\n\r\n // Calendar rendering\r\n const calendarMonths = useMemo(() => \r\n monthArray.map((date, index) => {\r\n const isVisible = index === 1 || index === 2;\r\n const isSlidingNext = isAnimating && translateAmount < 0 && index === 3;\r\n const isSlidingPrev = isAnimating && translateAmount > 0 && index === 0;\r\n\r\n return (\r\n <MonthCalendar\r\n key={`${date.year()}-${date.month()}`}\r\n hidden={!isVisible && !isSlidingNext && !isSlidingPrev}\r\n isAnimating={isSlidingNext || isSlidingPrev}\r\n month={date.month()}\r\n year={date.year()}\r\n handleHoverDay={setDayValue}\r\n ref={tooltipRef}\r\n className={cx({ 'slide-next': isSlidingNext, 'slide-prev': isSlidingPrev })}\r\n />\r\n );\r\n }), \r\n [monthArray, isAnimating, translateAmount]);\r\n\r\n return (\r\n <div className=\"relative\">\r\n {renderTooltip}\r\n <div \r\n className={cx(\"calendar-wrapper\", { single: singleCalendar })} \r\n ref={containerRef}\r\n onKeyDown={handleKeyDown}\r\n role=\"grid\"\r\n aria-label=\"Calendar\"\r\n >\r\n <div\r\n className={cx(\"calendar-content\", { isAnimating })}\r\n style={{ transform: `translateX(${translateAmount}px)` }}\r\n >\r\n {calendarMonths}\r\n </div>\r\n \r\n <div className=\"calendar-flippers\">\r\n <button\r\n className={cx(\"flipper-button\", { disabled: disablePrev })}\r\n onClick={decreaseCurrentMonth}\r\n onKeyDown={(e) => e.key === \" \" && decreaseCurrentMonth()}\r\n disabled={disablePrev}\r\n aria-label=\"Previous month\"\r\n >\r\n <PrevIcon viewBox=\"0 0 24 24\" />\r\n </button>\r\n <button\r\n className={cx(\"flipper-button\", { disabled: disableNext })}\r\n onClick={increaseCurrentMonth}\r\n onKeyDown={(e) => e.key === \" \" && increaseCurrentMonth()}\r\n disabled={disableNext}\r\n aria-label=\"Next month\"\r\n onBlur={focusOnCalendar}\r\n >\r\n <NextIcon viewBox=\"0 0 24 24\" />\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};","import { useState, useEffect } from 'react';\r\n\r\nexport const ClientOnly = ({ children }: { children: React.ReactNode }) => {\r\n const [hasMounted, setHasMounted] = useState(false);\r\n\r\n useEffect(() => {\r\n setHasMounted(true);\r\n }, []);\r\n\r\n if (!hasMounted) return null;\r\n\r\n return <>{children}</>;\r\n};","import React from \"react\";\r\nimport BaseDatePicker, { BaseDatePickerProps } from \"./BaseDatePicker\";\r\n\r\nimport { ClientOnly } from \"./ClientOnly\";\r\n\r\nexport interface RangeDatePickerProps extends BaseDatePickerProps {\r\n startDate: Date | null;\r\n endDate: Date | null;\r\n startDatePlaceholder?: string;\r\n endDatePlaceholder?: string;\r\n onChange?: (startDate: Date | null, endDate: Date | null) => void;\r\n onCloseCalendar?: (startDate: Date | null, endDate: Date | null) => void;\r\n dateInputSeperator?: React.ReactNode;\r\n hideDialogHeader?: boolean;\r\n hideDialogFooter?: boolean;\r\n hideDialogAfterSelectEndDate?: boolean;\r\n}\r\n\r\nexport const RangeDatePicker: React.FC<RangeDatePickerProps> = ({\r\n onChange = () => {},\r\n onCloseCalendar = () => {},\r\n startDatePlaceholder = \"Start date\",\r\n endDatePlaceholder = \"End date\",\r\n ...props\r\n}) => (\r\n <ClientOnly>\r\n <BaseDatePicker\r\n {...props}\r\n isSingle={false}\r\n startDate={props.startDate}\r\n endDate={props.endDate}\r\n startDatePlaceholder={startDatePlaceholder}\r\n endDatePlaceholder={endDatePlaceholder}\r\n onChange={onChange}\r\n onCloseCalendar={onCloseCalendar}\r\n />\r\n </ClientOnly>\r\n);\r\n","import React from \"react\";\r\nimport BaseDatePicker, { BaseDatePickerProps } from \"./BaseDatePicker\";\r\nimport { ClientOnly } from \"./ClientOnly\";\r\n\r\nexport interface SingleDatePickerProps\r\n extends Omit<BaseDatePickerProps, \"onChange\"> {\r\n startDate: Date | null;\r\n startDatePlaceholder?: string;\r\n onChange?: (date: Date | null) => void;\r\n onCloseCalendar?: (date: Date | null) => void;\r\n singleCalendar?: boolean;\r\n}\r\n\r\nexport const SingleDatePicker: React.FC<SingleDatePickerProps> = ({\r\n onChange = () => {},\r\n onCloseCalendar = () => {},\r\n startDatePlaceholder = \"Date\",\r\n ...props\r\n}) => (\r\n <ClientOnly>\r\n <BaseDatePicker\r\n {...props}\r\n endDate={null}\r\n isSingle={true}\r\n startDate={props.startDate}\r\n startDatePlaceholder={startDatePlaceholder}\r\n onChange={(date) => onChange(date)}\r\n onCloseCalendar={(date) => onCloseCalendar(date)}\r\n />\r\n </ClientOnly>\r\n);\r\n"],"mappings":"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","names":["import_react","import_dayjs","import_classnames","dayjs","import_dayjs","dayjs","React","import_jsx_runtime","import_react","import_dayjs","React","import_jsx_runtime","React","import_jsx_runtime","import_jsx_runtime","dayjs","cx","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_classnames","React","import_jsx_runtime","import_react","import_dayjs","import_react","import_classnames","import_dayjs","import_react","import_classnames","import_dayjs","import_react","import_classnames","import_jsx_runtime","cx","import_jsx_runtime","dayjs","cx","import_jsx_runtime","dayjs","cx","import_jsx_runtime","dayjs","React","AutoSizer","List","import_react","import_classnames","import_dayjs","import_jsx_runtime","useClientSide","dayjs","cx","import_jsx_runtime","cx","import_jsx_runtime","dayjs","localeData","cx","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}
|