@telsho/react-google-flight-datepicker 1.1.3 → 1.1.5

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../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":["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};","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":"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","names":["useState","useRef","useEffect","useLayoutEffect","useCallback","dayjs","cx","localeData","dayjs","getMonthInfo","year","month","startDay","weeks","firstDate","numDays","start","end","getWeekDay","startWeekDay","weekDayFormat","days","_","i","last","debounce","func","wait","timeout","args","later","createContext","useContext","useState","useEffect","dayjs","jsx","DateStateContext","createContext","DatePickerConfigContext","UIStateContext","DisplayContext","LocaleContext","useDateState","context","useContext","useDatePickerConfig","useUIState","useDisplayCustomization","loadLocale","locale","error","DatePickerProvider","children","dateState","config","uiState","display","localeState","setLocaleState","useState","useEffect","prev","__spreadProps","__spreadValues","success","dayjs","jsx","LocaleContext","DateStateContext","DatePickerConfigContext","UIStateContext","DisplayContext","jsx","SvgCalendar","props","__spreadProps","__spreadValues","calendar_default","useEffect","useState","cx","dayjs","jsx","SvgPrev","props","__spreadProps","__spreadValues","prev_default","jsx","SvgNext","props","__spreadProps","__spreadValues","next_default","jsx","jsxs","DateInput","type","showIcon","tabIndex","nonFocusable","formattedDate","setFormattedDate","useState","disablePrev","setDisablePrev","disableNext","setDisableNext","fromDate","toDate","inputFocus","handleClickDateInput","handleChangeDate","useDateState","isSingle","minDate","maxDate","dateFormat","useDatePickerConfig","startDatePlaceholder","endDatePlaceholder","useDisplayCustomization","value","placeholder","useEffect","text","dayjs","minDateDayjs","maxDateDayjs","prevDate","e","nextDate","handleClick","cx","calendar_default","prev_default","next_default","jsx","jsxs","DateInputGroup","showIcon","nonFocusable","isSingle","useDatePickerConfig","dateInputSeperator","useDisplayCustomization","calendar_default","DateInput","createPortal","useEffect","useState","useClientSide","isClient","setIsClient","jsx","DialogWrapper","children","isMobile","useClientSide","createPortal","DialogWrapper_default","useEffect","useState","useRef","cx","jsx","SvgBack","props","__spreadProps","__spreadValues","back_default","React","useEffect","useState","useRef","dayjs","List","AutoSizer","forwardRef","cx","dayjs","forwardRef","cx","dayjs","forwardRef","useCallback","useEffect","useRef","cx","jsx","jsxs","Day","forwardRef","dateIndex","dateValue","isEndDay","selected","hovered","disabled","totalDay","highlight","handleHoverDay","subText","ref","dayRef","useRef","onSelectDate","onHoverDate","useDateState","selectDate","e","handleHoverDate","handleTooltipPosition","useCallback","element","handleTooltipHidden","useEffect","currentRef","cx","jsx","Week","forwardRef","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","jsx","jsxs","MonthCalendar","forwardRef","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","jsx","jsxs","DialogContentMobile","rowCount","setRowCount","useState","listRef","useRef","fromDate","useDateState","startWeekDay","minDate","maxDate","weekDayFormat","useDatePickerConfig","complsOpen","useUIState","tooltip","subTextDict","useDisplayCustomization","minYear","dayjs","minMonth","useEffect","_minDate","date","monthDiff","getMonthYearFromIndex","index","_index","year","month","Row","React","style","MonthCalendar","getItemSize","totalWeek","getMonthInfo","renderMonthCalendars","AutoSizer","height","width","List","getWeekDay","day","useEffect","useState","useRef","useCallback","useMemo","cx","dayjs","jsx","jsxs","useClientSide","isClient","setIsClient","useState","useEffect","DialogContentDesktop","dateChanged","containerRef","useRef","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","useCallback","date","updateDimensions","width","style","translateValue","resizeObserver","dayjs","minDayjs","maxDayjs","monthDiff","decreaseCurrentMonth","increaseCurrentMonth","handleMonthChange","direction","timer","prev","newDate","useMemo","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","jsx","jsxs","Dialog","externalRef","hideAnimation","setHideAnimation","useState","dateChanged","setDateChanged","defaultRef","useRef","containerRef","handleChangeDate","handleReset","useDateState","singleCalendar","expandDirection","useDatePickerConfig","complsOpen","isMobile","toggleDialog","useUIState","hideDialogHeader","hideDialogFooter","useDisplayCustomization","onChangeDate","date","type","useEffect","_a","startDateInput","cx","back_default","DateInputGroup","DialogContentMobile","DialogContentDesktop","jsx","jsxs","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","useState","inputFocus","setInputFocus","fromDate","setFromDate","toDate","setToDate","hoverDate","setHoverDate","isMobile","setIsMobile","isFirstTime","setIsFirstTime","isClient","setIsClient","useEffect","containerRef","useRef","fromDateRef","toDateRef","handleResize","useCallback","debounceNotifyChange","debounce","_startDate","_endDate","updateFromDate","dateValue","shouldNotifyChange","updateToDate","useLayoutEffect","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","useState","useEffect","Fragment","jsx","ClientOnly","children","hasMounted","setHasMounted","jsx","RangeDatePicker","_a","_b","onChange","onCloseCalendar","startDatePlaceholder","endDatePlaceholder","props","__objRest","ClientOnly","BaseDatePicker_default","__spreadProps","__spreadValues","jsx","SingleDatePicker","_a","_b","onChange","onCloseCalendar","startDatePlaceholder","props","__objRest","ClientOnly","BaseDatePicker_default","__spreadProps","__spreadValues","date"]}
1
+ {"version":3,"sources":["../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":["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 } 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};","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":";AAAA;AAAA,EACE,YAAAA;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA;AAAA,EACA,eAAAC;AAAA,OACK;AACP,OAAOC,YAAsB;AAC7B,OAAOC,SAAQ;AACf,OAAO,gBAAgB;;;ACTvB,OAAO,WAAW;AAeX,SAAS,aACd,MACA,OACA,UACW;AACX,QAAM,QAAgB,CAAC;AACvB,QAAM,YAAY,IAAI,KAAK,MAAM,OAAO,CAAC;AACzC,QAAM,WAAW,IAAI,KAAK,MAAM,QAAQ,GAAG,CAAC;AAC5C,QAAM,UAAU,SAAS,QAAQ;AAEjC,MAAI,QAAQ;AACZ,MAAI,MAAM,UAAU,OAAO,MAAM,IAAI,IAAI,IAAI,UAAU,OAAO,IAAI;AAClE,MAAI,aAAa,UAAU;AACzB,UAAM,IAAI,UAAU,OAAO;AAAA,EAC7B;AAEA,SAAO,SAAS,SAAS;AACvB,UAAM,KAAK,EAAE,OAAO,MAAM,MAAM,QAAQ,EAAE,CAAC;AAC3C,YAAQ,MAAM;AACd,WAAO;AACP,UAAM,UAAU,KAAK,QAAQ,IAAI,IAAI;AACrC,QAAI,MAAM,SAAS;AACjB,YAAM;AAAA,IACR;AAAA,EACF;AAEA,SAAO,EAAE,WAAW,OAAO,UAAU,QAAQ;AAC/C;AAEO,SAAS,WACd,cACA,eACU;AACV,QAAM,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE;AAAA,IAAI,CAAC,GAAG,MACjC,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,kBAAkB,OAAO,OAC1B,kBAAkB,QAAQ,QAAQ,MAAM;AAAA,EAC/D;AAEA,MAAI,iBAAiB,UAAU;AAC7B,UAAM,OAAO,KAAK,IAAI;AACtB,QAAI,MAAM;AACR,WAAK,QAAQ,IAAI;AAAA,IACnB;AAAA,EACF;AAEA,SAAO;AACT;AAMO,SAAS,SACd,MACA,MACsB;AACtB,MAAI;AAEJ,SAAO,SAAS,oBAEX,MACG;AACN,UAAM,QAAQ,MAAM;AAClB,gBAAU;AACV,WAAK,MAAM,MAAM,IAAI;AAAA,IACvB;AAEA,QAAI,SAAS;AACX,mBAAa,OAAO;AAAA,IACtB;AAEA,cAAU,WAAW,OAAO,IAAI;AAAA,EAClC;AACF;;;ACxFA,SAAgB,eAAe,YAAY,UAAuB,iBAAiB;AACnF,OAAOC,YAAsB;AA4KjB;AAlHZ,IAAM,mBAAmB,cAAgC,IAAI;AAC7D,IAAM,0BAA0B,cAAuC,IAAI;AAC3E,IAAM,iBAAiB,cAA8B,IAAI;AACzD,IAAM,iBAAiB,cAA2C,IAAI;AACtE,IAAM,gBAAgB,cAAkC,IAAI;AAGrD,IAAM,eAAe,MAAM;AAChC,QAAM,UAAU,WAAW,gBAAgB;AAC3C,MAAI,CAAC,QAAS,OAAM,IAAI,MAAM,qDAAqD;AACnF,SAAO;AACT;AAEO,IAAM,sBAAsB,MAAM;AACvC,QAAM,UAAU,WAAW,uBAAuB;AAClD,MAAI,CAAC,QAAS,OAAM,IAAI,MAAM,4DAA4D;AAC1F,SAAO;AACT;AAEO,IAAM,aAAa,MAAM;AAC9B,QAAM,UAAU,WAAW,cAAc;AACzC,MAAI,CAAC,QAAS,OAAM,IAAI,MAAM,mDAAmD;AACjF,SAAO;AACT;AAEO,IAAM,0BAA0B,MAAM;AAC3C,QAAM,UAAU,WAAW,cAAc;AACzC,MAAI,CAAC,QAAS,OAAM,IAAI,MAAM,gEAAgE;AAC9F,SAAO;AACT;AASA,IAAM,aAAa,OAAO,WAAqC;AAC7D,MAAI,WAAW,KAAM,QAAO;AAC5B,MAAI;AACF,UAAM,OAAO,gBAAgB,MAAM;AACnC,WAAO;AAAA,EACT,SAAS,OAAO;AACd,YAAQ,MAAM,yBAAyB,MAAM,KAAK,KAAK;AACvD,WAAO;AAAA,EACT;AACF;AAaO,IAAM,qBAAwD,CAAC;AAAA,EACpE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AACX,MAAM;AAEJ,QAAM,CAAC,aAAa,cAAc,IAAI,SAAsB;AAAA,IAC1D,eAAe;AAAA,IACf,eAAe,WAAW;AAAA,EAC5B,CAAC;AAGD,YAAU,MAAM;AACd,QAAI,WAAW,MAAM;AACnB,qBAAe,WAAS,EAAE,GAAG,MAAM,eAAe,MAAM,EAAE;AAC1D,iBAAW,MAAM,EACd,KAAK,aAAW;AACf,YAAI,SAAS;AACX,UAAAC,OAAM,OAAO,MAAM;AACnB,yBAAe;AAAA,YACb,eAAe;AAAA,YACf,eAAe;AAAA,UACjB,CAAC;AAAA,QACH,OAAO;AACL,UAAAA,OAAM,OAAO,IAAI;AACjB,yBAAe;AAAA,YACb,eAAe;AAAA,YACf,eAAe;AAAA,UACjB,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACL,OAAO;AACL,MAAAA,OAAM,OAAO,IAAI;AACjB,qBAAe;AAAA,QACb,eAAe;AAAA,QACf,eAAe;AAAA,MACjB,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAGX,MAAI,CAAC,YAAY,eAAe;AAC9B,WAAO;AAAA,EACT;AAGA,SACE,oBAAC,cAAc,UAAd,EAAuB,OAAO,aAC7B,8BAAC,iBAAiB,UAAjB,EAA0B,OAAO,WAChC,8BAAC,wBAAwB,UAAxB,EAAiC,OAAO,QACvC,8BAAC,eAAe,UAAf,EAAwB,OAAO,SAC9B,8BAAC,eAAe,UAAf,EAAwB,OAAO,SAC7B,UACH,GACF,GACF,GACF,GACF;AAEJ;;;ACrLA,YAAYC,YAAW;AAC6E,gBAAAC,YAAA;AAApG,IAAM,cAAc,WAAS,gBAAAA,KAAC,SAAI,OAAM,8BAA6B,SAAQ,aAAa,GAAG,OAAO,0BAAAA,KAAC,UAAK,GAAE,oKAAmK,GAAE;AACjR,IAAO,mBAAQ;;;ACFf,SAAgB,aAAAC,YAAW,YAAAC,iBAAgB;AAC3C,OAAO,QAAQ;AACf,OAAOC,YAAW;;;ACFlB,YAAYC,YAAW;AACyE,gBAAAC,YAAA;AAAhG,IAAM,UAAU,WAAS,gBAAAA,KAAC,SAAI,OAAM,8BAA6B,SAAQ,aAAa,GAAG,OAAO,0BAAAA,KAAC,UAAK,GAAE,4DAA2D,GAAE;AACrK,IAAO,eAAQ;;;ACFf,YAAYC,YAAW;AACyE,gBAAAC,YAAA;AAAhG,IAAM,UAAU,WAAS,gBAAAA,KAAC,SAAI,OAAM,8BAA6B,SAAQ,aAAa,GAAG,OAAO,0BAAAA,KAAC,UAAK,GAAE,0DAAyD,GAAE;AACnK,IAAO,eAAQ;;;AF8GP,gBAAAC,MAQA,YARA;AA7FD,IAAM,YAAsC,CAAC;AAAA,EAClD;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EACX,eAAe;AACjB,MAAM;AACJ,QAAM,CAAC,eAAe,gBAAgB,IAAIC,UAAwB,IAAI;AACtE,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAS,KAAK;AACpD,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAS,KAAK;AAEpD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,aAAa;AAEjB,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,oBAAoB;AAExB,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,EACF,IAAI,wBAAwB;AAE5B,QAAM,QAAQ,SAAS,SAAS,WAAW;AAC3C,QAAM,cAAc,SAAS,SAAS,uBAAuB;AAE7D,EAAAC,WAAU,MAAM;AACd,QAAI,OAAO;AACT,UAAI,iBAAiB,MAAM,MAAM,EAAE,OAAOC,OAAM,OAAO,CAAC;AACxD,UAAI,OAAO,eAAe,OAAO,aAAa;AAC9C,UAAI,YAAY;AACd,eAAO,MAAM,OAAO,UAAU;AAAA,MAChC;AACA,uBAAiB,IAAI;AAErB,YAAM,eAAe,UAAUA,OAAM,OAAO,IAAI;AAChD,YAAM,eAAe,UAAUA,OAAM,OAAO,IAAI;AAEhD,UAAK,cAAc,IAAI,GAAG,KAAK,EAAE,QAAQ,OAAO,MAAM,KAChD,SAAS,QAAQ,YAAY,MAAM,SAAS,SAAS,IAAI,GAAG,KAAK,GAAG,MAAM,GAC9E;AACA,uBAAe,IAAI;AAAA,MACrB,OAAO;AACL,uBAAe,KAAK;AAAA,MACtB;AAEA,UAAI,cAAc,SAAS,GAAG,KAAK,EAAE,SAAS,OAAO,MAAM,GAAG;AAC5D,uBAAe,IAAI;AAAA,MACrB,OAAO;AACL,uBAAe,KAAK;AAAA,MACtB;AAAA,IACF,OAAO;AACL,uBAAiB,IAAI;AAAA,IACvB;AAAA,EACF,GAAG,CAAC,OAAO,UAAU,SAAS,SAAS,YAAY,IAAI,CAAC;AAExD,QAAM,WAAW,CAAC,MAAwB;AACxC,MAAE,gBAAgB;AAClB,QAAI,OAAO;AACT,uBAAiB,MAAM,SAAS,GAAG,KAAK,GAAG,IAAI;AAAA,IACjD;AAAA,EACF;AAEA,QAAM,WAAW,CAAC,MAAwB;AACxC,MAAE,gBAAgB;AAClB,QAAI,OAAO;AACT,uBAAiB,MAAM,IAAI,GAAG,KAAK,GAAG,IAAI;AAAA,IAC5C;AAAA,EACF;AAEA,QAAM,cAAc,MAAM;AACxB,yBAAqB,IAAI;AAAA,EAC3B;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,QAAQ;AAAA,QACpB,YAAY,eAAe,QAAQ,CAAC;AAAA,QACpC,aAAa;AAAA,MACf,CAAC;AAAA,MACD,MAAK;AAAA,MACL,UAAU,eAAe,KAAK;AAAA,MAC9B,SAAS;AAAA,MACT,IAAI,GAAG,IAAI;AAAA,MAEV;AAAA,oBACC,gBAAAH,KAAC,oBAAa,WAAU,iBAAgB,SAAQ,aAAY;AAAA,QAG9D,gBAAAA,KAAC,SAAI,WAAU,iBACZ,2BAAiB,gBAAAA,KAAC,SAAI,WAAU,oBAAoB,uBAAY,GACnE;AAAA,QAEC,iBACC,qBAAC,SAAI,WAAU,qBACb;AAAA,0BAAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAU;AAAA,cACV,SAAS;AAAA,cACT,UAAU,eAAe,KAAK;AAAA,cAC9B,UAAU;AAAA,cAEV,0BAAAA,KAAC,gBAAS,SAAQ,aAAY,WAAU,cAAa;AAAA;AAAA,UACvD;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAU;AAAA,cACV,SAAS;AAAA,cACT,UAAU,eAAe,KAAK;AAAA,cAC9B,UAAU;AAAA,cAEV,0BAAAA,KAAC,gBAAS,SAAQ,aAAY,WAAU,cAAa;AAAA;AAAA,UACvD;AAAA,WACF;AAAA;AAAA;AAAA,EAEJ;AAEJ;;;AGxHQ,gBAAAI,MAEF,QAAAC,aAFE;AAVD,IAAM,iBAAgD,CAAC;AAAA,EAC5D,WAAW;AAAA,EACX,eAAe;AACjB,MAAM;AACJ,QAAM,EAAE,SAAS,IAAI,oBAAoB;AACzC,QAAM,EAAE,mBAAmB,IAAI,wBAAwB;AAEvD,SACE,gBAAAA,MAAC,SAAI,WAAU,qBACZ;AAAA,gBACC,gBAAAD,KAAC,oBAAa,WAAU,wBAAuB,SAAQ,aAAY;AAAA,IAErE,gBAAAC,MAAC,SAAI,WAAU,0BACb;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,UAAU,eAAe,KAAK;AAAA,UAC9B,UAAU;AAAA,UACV;AAAA;AAAA,MACF;AAAA,MACC,CAAC,YAAY,sBACZ,gBAAAA,KAAC,SAAI,WAAU,wBAAwB,8BAAmB;AAAA,MAE3D,CAAC,YACA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,UAAU,eAAe,KAAK;AAAA,UAC9B,UAAU;AAAA,UACV;AAAA;AAAA,MACF;AAAA,OAEJ;AAAA,KACF;AAEJ;;;AC5CA,SAAS,oBAAoB;;;ACD7B,SAAS,aAAAE,YAAW,YAAAC,iBAAgB;AAE7B,IAAM,gBAAgB,MAAM;AAC/B,QAAM,CAAC,UAAU,WAAW,IAAIA,UAAS,KAAK;AAE9C,EAAAD,WAAU,MAAM;AACd,QAAI,OAAO,WAAW,eAAe,OAAO,aAAa,aAAa;AACpE,kBAAY,IAAI;AAAA,IAClB,OAAO;AACL,cAAQ,KAAK,mCAAmC;AAAA,IAClD;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AACT;;;ADKiB,gBAAAE,YAAA;AATnB,IAAM,gBAA8C,CAAC;AAAA,EACnD,WAAW;AAAA,EACX,WAAW;AACb,MAAM;AACJ,QAAM,WAAW,cAAc;AAE/B,MAAI,CAAC,SAAU,QAAO;AAEtB,SAAO,WACH,aAAa,gBAAAA,KAAC,SAAK,UAAS,GAAQ,SAAS,IAAI,IACjD;AACN;AAEA,IAAO,wBAAQ;;;AExBf,SAAgB,aAAAC,YAAW,YAAAC,WAAU,UAAAC,eAAc;AACnD,OAAOC,SAAQ;;;ACDf,YAAYC,YAAW;AAC2E,gBAAAC,YAAA;AAAlG,IAAM,UAAU,WAAS,gBAAAA,KAAC,SAAI,OAAM,8BAA6B,SAAQ,eAAe,GAAG,OAAO,0BAAAA,KAAC,UAAK,GAAE,8UAA6U,GAAE;AACzb,IAAO,eAAQ;;;ACFf,OAAOC,WAAS,aAAAC,YAAW,YAAAC,WAAU,UAAAC,eAAc;AACnD,OAAOC,YAAW;AAClB,SAAS,oBAAoB,YAAY;AACzC,OAAO,eAAe;;;ACHtB,SAAgB,cAAAC,mBAAkB;AAClC,OAAOC,SAAQ;AACf,OAAOC,YAAsB;;;ACF7B,SAAgB,cAAAC,mBAAkB;AAClC,OAAOC,SAAQ;AACf,OAAOC,YAAW;;;ACFlB,SAAgB,YAAY,eAAAC,cAAa,aAAAC,YAAW,cAAc;AAClE,OAAOC,SAAQ;AAuGL,gBAAAC,MAOJ,QAAAC,aAPI;AAtFH,IAAM,MAAM,WAAqC,CAAC;AAAA,EACvD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAG,QAAQ;AACT,QAAM,SAAS,OAAuB,IAAI;AAC1C,QAAM,EAAE,cAAc,YAAY,IAAI,aAAa;AAEnD,QAAM,aAAa,CAAC,MAAwB;AAC1C,MAAE,gBAAgB;AAClB,MAAE,eAAe;AACjB,QAAI,SAAU;AACd,iBAAa,SAAS;AAAA,EACxB;AAEA,QAAM,kBAAkB,MAAM;AAC5B,QAAI,SAAU;AACd,gBAAY,SAAS;AACrB,mBAAe,SAAS;AAAA,EAC1B;AAEA,QAAM,wBAAwBC,aAAY,MAAM;AAE9C,QAAI,CAAC,OAAO,OAAO,QAAQ,WAAY;AACvC,UAAM,UAAU,IAAI;AACpB,QAAI,WAAW,OAAO,SAAS;AAC7B,cAAQ,MAAM,OAAO,GACnB,OAAO,QAAQ,aAAa,QAAQ,cAAc,GACpD;AACA,cAAQ,MAAM,MAAM,GAClB,OAAO,QAAQ,YAAY,QAAQ,eAAe,EACpD;AACA,cAAQ,MAAM,aAAa;AAAA,IAC7B;AAAA,EACF,GAAG,CAAC,GAAG,CAAC;AAER,QAAM,sBAAsBA,aAAY,MAAM;AAC5C,QAAI,CAAC,OAAO,OAAO,QAAQ,WAAY;AACvC,UAAM,UAAU,IAAI;AACpB,QAAI,SAAS;AACX,cAAQ,MAAM,aAAa;AAAA,IAC7B;AAAA,EACF,GAAG,CAAC,GAAG,CAAC;AAER,EAAAC,WAAU,MAAM;AACd,UAAM,aAAa,OAAO;AAC1B,QAAI,YAAY;AACd,iBAAW,iBAAiB,aAAa,qBAAqB;AAC9D,iBAAW,iBAAiB,cAAc,mBAAmB;AAAA,IAC/D;AACA,WAAO,MAAM;AACX,UAAI,YAAY;AACd,mBAAW,oBAAoB,aAAa,qBAAqB;AACjE,mBAAW,oBAAoB,cAAc,mBAAmB;AAAA,MAClE;AAAA,IACF;AAAA,EACF,GAAG,CAAC,uBAAuB,mBAAmB,CAAC;AAE/C,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,WAAWG,IAAG,OAAO;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,KAAK;AAAA,QACL,eAAe,CAAC,CAAC;AAAA,MACnB,CAAC;AAAA,MACD,SAAS;AAAA,MACT,cAAc;AAAA,MACd,MAAK;AAAA,MACL,UAAU;AAAA,MACV,kBAAgB;AAAA,MAChB,mBAAiB,UAAU,QAAQ;AAAA,MACnC,KAAK;AAAA,MAEJ;AAAA,mBACC,EAAE,YAAY,cAAc,aAC5B,EAAE,cAAc,KAAK,YAAY,CAAC,aAChC,gBAAAJ;AAAA,UAAC;AAAA;AAAA,YACC,WAAWI,IAAG,kBAAkB;AAAA,cAC9B,aAAa,cAAc;AAAA,cAC3B,YAAY,cAAc;AAAA,YAC5B,CAAC;AAAA;AAAA,QACH;AAAA,QAEJ,gBAAAH,MAAC,SAAI,WAAU,eACb;AAAA,0BAAAD,KAAC,SAAI,WAAU,YAAY,qBAAU;AAAA,UACpC,WACC,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO;AAAA,gBACL,UAAU;AAAA,gBACV,QAAQ;AAAA,gBACR,OAAQ,YAAY,CAAC,UAAW,SAAS;AAAA,cAC3C;AAAA,cAEC;AAAA;AAAA,UACH;AAAA,WAEJ;AAAA;AAAA;AAAA,EACF;AAEJ,CAAC;AAED,IAAI,cAAc;;;ADzCV,gBAAAK,aAAA;AAlED,IAAM,OAAOC,YAAsC,CAAC;AAAA,EACzD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAG,QAAQ;AACT,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,aAAa;AAEjB,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,oBAAoB;AAExB,QAAM,EAAE,YAAY,IAAI,wBAAwB;AAEhD,QAAM,cAAc,MAAM;AACxB,WAAO,MAAM,KAAK,EAAE,QAAQ,KAAK,KAAK,GAAG,CAAC,GAAG,UAAU;AACrD,YAAM,YAAY,QAAQ,KAAK;AAC/B,YAAM,YAAYC,OAAM,GAAG,IAAI,IAAI,QAAQ,CAAC,IAAI,SAAS,EAAE;AAC3D,YAAM,WACH,WAAW,UAAU,SAAS,SAAS,MAAM,KAC7C,WAAW,UAAU,QAAQ,SAAS,MAAM;AAC/C,YAAM,WACH,YAAY,UAAU,OAAO,UAAU,MAAM,KAC7C,UAAU,UAAU,OAAO,QAAQ,MAAM;AAC5C,UAAI,UAAU;AACd,YAAM,YACJ,kBAAkB,UAAU,OAAO,oBAAI,KAAK,GAAG,MAAM;AAEvD,UAAI,YAAY,CAAC,SAAS,OAAO,QAAQ,MAAM,KAAK,CAAC,UAAU;AAC7D,YACE,UACA,CAAC,SAAS,QAAQ,WAAW,MAAM,KACnC,CAAC,OAAO,SAAS,WAAW,MAAM,GAClC;AACA,oBAAU;AAAA,QACZ;AACA,YACE,CAAC,UACD,CAAC,UAAU,SAAS,UAAU,MAAM,KACpC,EAAE,aAAa,UAAU,SAAS,WAAW,MAAM,MACnD,SAAS,SAAS,WAAW,MAAM,GACnC;AACA,oBAAU;AAAA,QACZ;AAAA,MACF;AAEA,YAAM,YACH,UAAU,UAAU,OAAO,QAAQ,MAAM,KACzC,CAAC,UAAU,aAAa,UAAU,OAAO,WAAW,MAAM;AAE7D,YAAM,UACJ,CAAC,cACG,KACA,YAAY,UAAU,OAAO,YAAY,CAAC,KAAK;AAErD,aACE,gBAAAF;AAAA,QAAC;AAAA;AAAA,UAEC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,UAAU;AAAA,UACV;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA;AAAA,QAXK;AAAA,MAYP;AAAA,IAEJ,CAAC;AAAA,EACH;AAEA,SACE,gBAAAA,MAAC,SAAI,WAAWG,IAAG,QAAQ,EAAE,OAAO,QAAQ,CAAC,GAC1C,sBAAY,GACf;AAEJ,CAAC;AAED,KAAK,cAAc;;;ADtEX,gBAAAC,OAmCJ,QAAAC,aAnCI;AAvBD,IAAM,gBAAgBC,YAA+C,CAAC;AAAA,EAC3E;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,cAAc;AAAA,EACd;AAAA,EACA;AACF,GAAG,QAAQ;AAET,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,oBAAoB;AAExB,QAAM,eAAe,MAAqB;AACxC,UAAM,EAAE,WAAW,SAAS,IAAI,aAAa,MAAM,OAAO,YAAY;AAEtE,WAAO,UAAU,IAAI,CAAC,SAAS;AAC7B,YAAM,UAAU,GAAG,IAAI,IAAI,KAAK,IAAI,KAAK,KAAK;AAE9C,aACE,gBAAAF;AAAA,QAAC;AAAA;AAAA,UAEC;AAAA,UACA;AAAA,UACA;AAAA,UACA,SAAS,SAAS,UAAU,CAAC;AAAA,UAC7B;AAAA,UACA,WAAW,UAAU,QAAQ,IAAI;AAAA,UACjC;AAAA,UACA;AAAA;AAAA,QARK;AAAA,MASP;AAAA,IAEJ,CAAC;AAAA,EACH;AAEA,QAAM,kBAAkB,MAAqB;AAC3C,UAAM,aAAuB,WAAW,cAAc,aAAa;AAEnE,WAAO,WAAW,IAAI,CAAC,QAAQ;AAC7B,aACE,gBAAAA,MAAC,SAAI,WAAU,WACZ,iBAD2B,WAAW,IAAI,YAAY,CAAC,EAE1D;AAAA,IAEJ,CAAC;AAAA,EACH;AAEA,QAAM,kBAAkB,MAAc;AACpC,UAAM,OAAOG,OAAM,GAAG,IAAI,IAAI,QAAQ,CAAC,IAAI;AAC3C,WAAO,cACH,KAAK,OAAO,WAAW,IACvB,KAAK,OAAO,aAAa;AAAA,EAC/B;AAEA,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,WAAWG,IAAG,kBAAkB;AAAA,QAC9B;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,MACV,GAAG,SAAS;AAAA,MACZ,oBAAkB,QAAQ;AAAA,MAE1B;AAAA,wBAAAJ,MAAC,SAAI,WAAU,cACZ,0BAAgB,GACnB;AAAA,QACA,gBAAAA,MAAC,SAAI,WAAU,YAAY,0BAAgB,GAAE;AAAA,QAC7C,gBAAAA,MAAC,SAAI,WAAU,kBACZ,uBAAa,GAChB;AAAA;AAAA;AAAA,EACF;AAEJ,CAAC;AAED,cAAc,cAAc;;;ADpBpB,gBAAAK,OAiDF,QAAAC,aAjDE;AA5DD,IAAM,sBAAgC,MAAM;AACjD,QAAM,CAAC,UAAU,WAAW,IAAIC,UAAS,IAAI;AAC7C,QAAM,UAAUC,QAAa,IAAI;AAEjC,QAAM;AAAA,IACJ;AAAA,EACF,IAAI,aAAa;AAEjB,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,oBAAoB;AAExB,QAAM;AAAA,IACJ;AAAA,EACF,IAAI,WAAW;AAEf,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,EACF,IAAI,wBAAwB;AAE5B,QAAM,UAAU,UAAUC,OAAM,OAAO,EAAE,KAAK,IAAI;AAClD,QAAM,WAAW,UAAUA,OAAM,OAAO,EAAE,MAAM,IAAI;AAEpD,EAAAC,WAAU,MAAM;AACd,QAAI,SAAS;AACX,YAAM,WAAW,UAAUD,OAAM,OAAO,IAAIA,OAAM,YAAY;AAC9D,kBAAYA,OAAM,OAAO,EAAE,KAAK,UAAU,OAAO,IAAI,CAAC;AAAA,IACxD;AAAA,EACF,GAAG,CAAC,SAAS,OAAO,CAAC;AAErB,EAAAC,WAAU,MAAM;AACd,QAAI,QAAQ,WAAW,YAAY;AACjC,YAAM,OAAO,WAAWD,OAAM,QAAQ,IAAIA,OAAM;AAChD,UAAI,YAAY,KAAK,KAAKA,OAAM,YAAY,GAAG,OAAO;AAEtD,UAAI,SAAS;AACX,oBAAY,KAAK,KAAKA,OAAM,OAAO,GAAG,OAAO;AAAA,MAC/C;AAEA,cAAQ,QAAQ,aAAa,YAAY,GAAG,OAAO;AAAA,IACrD;AAAA,EACF,GAAG,CAAC,YAAY,UAAU,OAAO,CAAC;AAElC,QAAM,wBAAwB,CAAC,UAAkB;AAC/C,UAAM,SAAS,QAAQ;AACvB,UAAM,OAAO,UAAU,KAAK,MAAM,SAAS,EAAE;AAC7C,UAAM,QAAQ,SAAS;AAEvB,WAAO,EAAE,MAAM,MAAM;AAAA,EACvB;AAEA,QAAM,MAAME,QAAM,KAAK,CAAC,EAAE,OAAO,MAAM,MAAgB;AACrD,UAAM,EAAE,MAAM,MAAM,IAAI,sBAAsB,KAAK;AAEnD,WACE,gBAAAN,MAAC,SAAI,OACH,0BAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,gBAAgB,MAAM;AAAA,QAAC;AAAA;AAAA,IACzB,GACF;AAAA,EAEJ,CAAC;AACD,MAAI,cAAc;AAElB,QAAM,cAAc,CAAC,UAAkB;AACrC,UAAM,EAAE,MAAM,MAAM,IAAI,sBAAsB,KAAK;AACnD,UAAM,EAAE,UAAU,IAAI,aAAa,MAAM,OAAO,gBAAgB,QAAQ;AAExE,WAAO,UAAU,SAAS,KAAK;AAAA,EACjC;AAEA,QAAM,uBAAuB,MAAM;AACjC,WACE,gBAAAA,MAAC,aACE,WAAC,EAAE,QAAQ,MAAM,MAChB,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL;AAAA,QACA,QAAQ,SAAS;AAAA,QACjB,WAAW;AAAA,QACX,UAAU;AAAA,QAET;AAAA;AAAA,IACH,GAEJ;AAAA,EAEJ;AAEA,QAAM,kBAAkB,MAAM;AAC5B,UAAM,aAAa,WAAW,gBAAgB,UAAU,aAAa;AAErE,WAAO,WAAW,IAAI,CAAC,KAAK,UAC1B,gBAAAA,MAAC,SAAI,WAAU,WACZ,iBAD2B,KAE9B,CACD;AAAA,EACH;AAEA,SACE,gBAAAA,MAAC,SAAI,WAAU,oBACb,0BAAAC,MAAC,SAAI,WAAU,oBACb;AAAA,oBAAAD,MAAC,SAAI,WAAU,mBACZ,0BAAgB,GACnB;AAAA,IACC,qBAAqB;AAAA,KACxB,GACF;AAEJ;;;AIvIA;AAAA,EACE,aAAAO;AAAA,EACA,YAAAC;AAAA,EACA,UAAAC;AAAA,EACA,eAAAC;AAAA,EACA;AAAA,OACK;AACP,OAAOC,SAAQ;AACf,OAAOC,YAAsB;AAmMvB,gBAAAC,OA6CE,QAAAC,aA7CF;AAnLN,IAAMC,iBAAgB,MAAM;AAC1B,QAAM,CAAC,UAAU,WAAW,IAAIC,UAAS,KAAK;AAC9C,EAAAC,WAAU,MAAM;AAAE,gBAAY,IAAI;AAAA,EAAG,GAAG,CAAC,CAAC;AAC1C,SAAO;AACT;AAEO,IAAM,uBAA4D,CAAC;AAAA,EACxE,cAAc;AAChB,MAAM;AACJ,QAAM,WAAWF,eAAc;AAC/B,QAAM,eAAeG,QAAuB,IAAI;AAChD,QAAM,aAAaA,QAAuB,IAAI;AAC9C,QAAM,CAAC,iBAAiB,kBAAkB,IAAIF,UAAS,CAAC;AACxD,QAAM,CAAC,YAAY,aAAa,IAAIA,UAAkB,CAAC,CAAC;AACxD,QAAM,CAAC,WAAW,YAAY,IAAIA,UAAuB,IAAI;AAC7D,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAS,KAAK;AACpD,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAS,KAAK;AACpD,QAAM,CAAC,cAAc,eAAe,IAAIA,UAAS,CAAC;AAClD,QAAM,CAAC,UAAU,WAAW,IAAIA,UAAuB,IAAI;AAC3D,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAS,KAAK;AAEpD,QAAM,EAAE,SAAS,IAAI,aAAa;AAClC,QAAM,EAAE,SAAS,SAAS,eAAe,IAAI,oBAAoB;AACjE,QAAM,EAAE,WAAW,IAAI,WAAW;AAClC,QAAM,EAAE,QAAQ,IAAI,wBAAwB;AAE5C,QAAM,gBAAgBG,aAAY,CAAC,SAAyB;AAAA,IAC1D,KAAK,SAAS,GAAG,OAAO;AAAA,IACxB;AAAA,IACA,KAAK,IAAI,GAAG,OAAO;AAAA,IACnB,KAAK,IAAI,GAAG,OAAO;AAAA,EACrB,GAAG,CAAC,CAAC;AAGL,EAAAF,WAAU,MAAM;AACd,QAAI,CAAC,YAAY,CAAC,aAAa,QAAS;AAExC,UAAM,mBAAmB,MAAM;AAC7B,YAAM,QAAQ,aAAa,QAAS;AACpC,YAAM,QAAQ,OAAO,iBAAiB,aAAa,OAAQ;AAC3D,YAAM,iBAAiB,iBACnB,QAAQ,SAAS,MAAM,UAAU,IAAI,IACrC,QAAQ;AACZ,sBAAgB,cAAc;AAAA,IAChC;AAEA,qBAAiB;AACjB,UAAM,iBAAiB,IAAI,eAAe,gBAAgB;AAC1D,mBAAe,QAAQ,aAAa,OAAO;AAE3C,WAAO,MAAM,eAAe,WAAW;AAAA,EACzC,GAAG,CAAC,UAAU,cAAc,CAAC;AAG7B,EAAAA,WAAU,MAAM;AACd,iBAAa,YAAYG,OAAM,CAAC;AAAA,EAClC,GAAG,CAAC,YAAY,QAAQ,CAAC;AAGzB,EAAAH,WAAU,MAAM;AACd,QAAI,CAAC,UAAW;AAGhB,UAAM,WAAW,UAAUG,OAAM,OAAO,IAAI;AAC5C,UAAM,WAAW,UAAUA,OAAM,OAAO,IAAI;AAE5C;AAAA,MACE;AAAA,QACE,YACA,UAAU,SAAS,SAAS,IAAI,GAAG,OAAO,GAAG,OAAO;AAAA,MACtD;AAAA,IACF;AAEA;AAAA,MACE;AAAA,QACE,YACA,UAAU,QAAQ,SAAS,SAAS,GAAG,OAAO,GAAG,OAAO;AAAA,MAC1D;AAAA,IACF;AAEA,kBAAc,cAAc,SAAS,CAAC;AAAA,EACxC,GAAG,CAAC,WAAW,SAAS,SAAS,aAAa,CAAC;AAG/C,EAAAH,WAAU,MAAM;AACd,QAAI,CAAC,eAAe,CAAC,UAAW;AAEhC,UAAM,YAAY,YAAY,KAAK,WAAW,OAAO;AACrD,QAAI,YAAY,GAAI,sBAAqB;AACzC,QAAI,YAAY,EAAG,sBAAqB;AAAA,EAC1C,GAAG,CAAC,aAAa,SAAS,CAAC;AAG3B,QAAM,oBAAoBE,aAAY,CAAC,cAA+B,MAAM;AAC1E,QAAK,cAAc,UAAU,eACxB,cAAc,UAAU,eACzB,YAAa;AAEjB,mBAAe,IAAI;AACnB,uBAAmB,cAAc,SAAS,CAAC,eAAe,YAAY;AAEtE,UAAM,QAAQ,WAAW,MAAM;AAC7B,mBAAa,UAAQ;AACnB,cAAM,UAAU,cAAc,SAC1B,KAAM,IAAI,GAAG,OAAO,IACpB,KAAM,SAAS,GAAG,OAAO;AAC7B,sBAAc,cAAc,OAAO,CAAC;AACpC,eAAO;AAAA,MACT,CAAC;AACD,yBAAmB,CAAC;AACpB,qBAAe,KAAK;AAAA,IACtB,GAAG,GAAG;AAEN,WAAO,MAAM,aAAa,KAAK;AAAA,EACjC,GAAG,CAAC,aAAa,aAAa,aAAa,cAAc,aAAa,CAAC;AAEvE,QAAM,CAAC,sBAAsB,oBAAoB,IAAI;AAAA,IACnD,MAAM,CAAC,kBAAkB,MAAM,GAAG,kBAAkB,MAAM,CAAC;AAAA,IAC3D,CAAC,iBAAiB;AAAA,EACpB;AAGA,QAAM,kBAAkBA,aAAY,MAAM;AACxC,QAAI,CAAC,YAAY,CAAC,aAAa,QAAS;AAExC,UAAM,WAAW;AACjB,UAAM,cAAc,aAAa,QAAQ,cAA2B,QAAQ;AAC5E,iBAAa,MAAM;AAAA,EACrB,GAAG,CAAC,QAAQ,CAAC;AAGb,QAAM,gBAAgBA,aAAY,CAAC,MAA2C;AAC5E,UAAM,SAAS,EAAE;AACjB,UAAM,WAAW,OAAO,aAAa,gBAAgB;AACrD,QAAI,CAAC,SAAU;AAEf,MAAE,eAAe;AAEjB,UAAM,oBAAoB,OAAO,QAAQ,mBAAmB;AAC5D,UAAM,YAAY,SAAS,OAAO,QAAQ,aAAa,GAAG;AAC1D,UAAM,OAAOC,OAAM,SAAS;AAC5B,UAAM,WAAW,KAAK,MAAM,OAAO,EAAE,KAAK;AAE1C,QAAI,WAAW,SAAS,QAAQ;AAChC,YAAQ,EAAE,KAAK;AAAA,MACb,KAAK;AAAa;AAAY;AAAA,MAC9B,KAAK;AAAW,oBAAY;AAAG;AAAA,MAC/B,KAAK;AAAc;AAAY;AAAA,MAC/B,KAAK;AAAa,oBAAY;AAAG;AAAA,MACjC,KAAK;AAAK,eAAO,MAAM;AAAG;AAAA,MAC1B;AAAS;AAAA,IACX;AAEA,QAAI,WAAW,KAAK,YAAY,UAAU;AACxC,yBAAmB,cAA2B,oBAAoB,QAAQ,IAAI,GAAG,MAAM;AAAA,IACzF,OAAO;AACL,YAAM,UAAU,KAAK,IAAI,WAAW,SAAS,QAAQ,GAAG,KAAK;AAC7D,YAAM,YAAY,QAAQ,KAAK,WAAW,OAAO;AAEjD,UAAI,YAAY,KAAK,CAAC,YAAa,sBAAqB;AACxD,UAAI,YAAY,KAAK,CAAC,YAAa,sBAAqB;AAExD,iBAAW,MAAM;AACf,2BAAmB;AAAA,UACjB,sBAAsB,QAAQ,MAAM,IAAI,CAAC,uBAAuB,QAAQ,KAAK,CAAC;AAAA,QAChF,GAAG,MAAM;AAAA,MACX,GAAG,GAAG;AAAA,IACR;AAAA,EACF,GAAG,CAAC,WAAW,aAAa,aAAa,sBAAsB,oBAAoB,CAAC;AAGpF,QAAM,gBAAgB,QAAQ,MAAM;AAClC,QAAI,CAAC,WAAW,CAAC,SAAU,QAAO;AAElC,UAAM,UAAU,OAAO,YAAY,aAC/B,QAAQ,UAAU,OAAO,KAAK,oBAAI,KAAK,CAAC,IACxC;AAEJ,WACE,gBAAAP,MAAC,SAAI,IAAG,eAAc,WAAU,gBAAe,KAAK,YACjD,mBACH;AAAA,EAEJ,GAAG,CAAC,SAAS,UAAU,QAAQ,CAAC;AAGhC,QAAM,iBAAiB;AAAA,IAAQ,MAC7B,WAAW,IAAI,CAAC,MAAM,UAAU;AAC9B,YAAM,YAAY,UAAU,KAAK,UAAU;AAC3C,YAAM,gBAAgB,eAAe,kBAAkB,KAAK,UAAU;AACtE,YAAM,gBAAgB,eAAe,kBAAkB,KAAK,UAAU;AAEtE,aACE,gBAAAA;AAAA,QAAC;AAAA;AAAA,UAEC,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC;AAAA,UACzC,aAAa,iBAAiB;AAAA,UAC9B,OAAO,KAAK,MAAM;AAAA,UAClB,MAAM,KAAK,KAAK;AAAA,UAChB,gBAAgB;AAAA,UAChB,KAAK;AAAA,UACL,WAAWQ,IAAG,EAAE,cAAc,eAAe,cAAc,cAAc,CAAC;AAAA;AAAA,QAPrE,GAAG,KAAK,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;AAAA,MAQrC;AAAA,IAEJ,CAAC;AAAA,IACH,CAAC,YAAY,aAAa,eAAe;AAAA,EAAC;AAE1C,SACE,gBAAAP,MAAC,SAAI,WAAU,YACZ;AAAA;AAAA,IACD,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAWO,IAAG,oBAAoB,EAAE,QAAQ,eAAe,CAAC;AAAA,QAC5D,KAAK;AAAA,QACL,WAAW;AAAA,QACX,MAAK;AAAA,QACL,cAAW;AAAA,QAEX;AAAA,0BAAAR;AAAA,YAAC;AAAA;AAAA,cACC,WAAWQ,IAAG,oBAAoB,EAAE,YAAY,CAAC;AAAA,cACjD,OAAO,EAAE,WAAW,cAAc,eAAe,MAAM;AAAA,cAEtD;AAAA;AAAA,UACH;AAAA,UAEA,gBAAAP,MAAC,SAAI,WAAU,qBACb;AAAA,4BAAAD;AAAA,cAAC;AAAA;AAAA,gBACC,WAAWQ,IAAG,kBAAkB,EAAE,UAAU,YAAY,CAAC;AAAA,gBACzD,SAAS;AAAA,gBACT,WAAW,CAAC,MAAM,EAAE,QAAQ,OAAO,qBAAqB;AAAA,gBACxD,UAAU;AAAA,gBACV,cAAW;AAAA,gBAEX,0BAAAR,MAAC,gBAAS,SAAQ,aAAY;AAAA;AAAA,YAChC;AAAA,YACA,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAWQ,IAAG,kBAAkB,EAAE,UAAU,YAAY,CAAC;AAAA,gBACzD,SAAS;AAAA,gBACT,WAAW,CAAC,MAAM,EAAE,QAAQ,OAAO,qBAAqB;AAAA,gBACxD,UAAU;AAAA,gBACV,cAAW;AAAA,gBACX,QAAQ;AAAA,gBAER,0BAAAR,MAAC,gBAAS,SAAQ,aAAY;AAAA;AAAA,YAChC;AAAA,aACF;AAAA;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;;;ANhMQ,SAMI,OAAAS,OANJ,QAAAC,aAAA;AA9DD,IAAM,SAAyC,CAAC;AAAA,EACrD,cAAc;AAChB,MAAM;AACJ,QAAM,CAAC,eAAe,gBAAgB,IAAIC,UAAS,KAAK;AACxD,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAuB,IAAI;AACjE,QAAM,aAAaC,QAAuB,IAAI;AAC9C,QAAM,eAAe,eAAe;AAEpC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,EACF,IAAI,aAAa;AAEjB,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,EACF,IAAI,oBAAoB;AAExB,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,WAAW;AAEf,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,EACF,IAAI,wBAAwB;AAE5B,QAAM,eAAe,CAAC,MAAa,SAAwB;AACzD,mBAAe,IAAI;AACnB,qBAAiB,MAAM,IAAI;AAAA,EAC7B;AAEA,EAAAC,WAAU,MAAM;AACd,QAAI,cAAc,CAAC,eAAe;AAChC,uBAAiB,IAAI;AAAA,IACvB;AACA,QAAI,YAAY;AACd,iBAAW,MAAM;AACf,cAAM,iBAAiB,aAAa,SAAS;AAAA,UAC3C;AAAA,QACF;AACA,YAAI,gBAAgB;AAClB,yBAAe,MAAM;AAAA,QACvB;AAAA,MACF,GAAG,EAAE;AAAA,IACP;AAAA,EACF,GAAG,CAAC,YAAY,cAAc,aAAa,CAAC;AAE5C,SACE,gBAAAH;AAAA,IAAC;AAAA;AAAA,MACC,WAAWI,IAAG,sBAAsB;AAAA,QAClC,QAAQ;AAAA,QACR,QAAQ,CAAC,cAAc;AAAA,QACvB,UAAU,kBAAkB,CAAC;AAAA,QAC7B,eAAe,oBAAoB;AAAA,QACnC,gBAAgB,oBAAoB;AAAA,MACtC,CAAC;AAAA,MACD,KAAK;AAAA,MAEJ;AAAA,SAAC,oBACA,gBAAAJ,MAAC,SAAI,WAAU,iBACb;AAAA,0BAAAD;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAU;AAAA,cACV,SAAS;AAAA,cAET,0BAAAA,MAAC,gBAAS,SAAQ,eAAc;AAAA;AAAA,UAClC;AAAA,UAEA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,UAAU;AAAA,cACV,cAAc,CAAC;AAAA;AAAA,UACjB;AAAA,UAEA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAU;AAAA,cACV,SAAS;AAAA,cACV;AAAA;AAAA,UAED;AAAA,WACF;AAAA,QAGF,gBAAAA,MAAC,SAAI,WAAU,kBACZ,qBACC,gBAAAA,MAAC,uBAAoB,IAErB,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA;AAAA,QACF,GAEJ;AAAA,QAEC,CAAC,oBACA,gBAAAC,MAAC,SAAI,WAAU,iBACb;AAAA,0BAAAD;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAU;AAAA,cACV,SAAS;AAAA,cACT,UAAU;AAAA,cACX;AAAA;AAAA,UAED;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAU;AAAA,cACV,SAAS;AAAA,cACV;AAAA;AAAA,UAED;AAAA,WACF;AAAA;AAAA;AAAA,EAEJ;AAEJ;;;AV6PQ,SAOE,OAAAM,OAPF,QAAAC,aAAA;AA3WRC,OAAM,OAAO,UAAU;AAyCvB,IAAM,iBAAwD,CAAC;AAAA,EAC7D,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU,MAAM;AAAA,EAAC;AAAA,EACjB,eAAe;AAAA,EACf,UAAU;AAAA,EACV,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,+BAA+B;AAAA,EAC/B,SAAS;AAAA,EACT;AAAA,EACA,UAAU;AAAA,EACV,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,SAAS;AAAA,EACT,WAAW;AAAA,EACX,iBAAiB;AACnB,MAAM;AAEJ,QAAM,CAAC,YAAY,aAAa,IAAIC,UAAkB,MAAM;AAC5D,QAAM,CAAC,YAAY,aAAa,IAAIA;AAAA,IAClC,WAAW,SAAS;AAAA,EACtB;AACA,QAAM,CAAC,UAAU,WAAW,IAAIA;AAAA,IAC9B,YAAYD,OAAM,SAAS,IAAI;AAAA,EACjC;AACA,QAAM,CAAC,QAAQ,SAAS,IAAIC;AAAA,IAC1B,UAAUD,OAAM,OAAO,IAAI;AAAA,EAC7B;AACA,QAAM,CAAC,WAAW,YAAY,IAAIC,UAA4B;AAC9D,QAAM,CAAC,UAAU,WAAW,IAAIA,UAAkB,KAAK;AACvD,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAkB,KAAK;AAG7D,QAAM,WAAW,cAAc;AAG/B,QAAM,eAAeC,QAAuB,IAAI;AAChD,QAAM,cAAcA,QAAqB,IAAI;AAC7C,QAAM,YAAYA,QAAqB,IAAI;AAG3C,QAAM,eAAeC,aAAY,MAAY;AAC3C,QAAI,CAAC,SAAU;AACf,gBAAY,OAAO,aAAa,GAAG;AAAA,EACrC,GAAG,CAAC,QAAQ,CAAC;AAGb,QAAM,eAAe,MAAY;AAC/B,UAAM,aAAa,YAAY,UAC3B,YAAY,QAAQ,OAAO,IAC3B;AACJ,UAAM,WACJ,CAAC,YAAY,UAAU,UAAU,UAAU,QAAQ,OAAO,IAAI;AAEhE,QAAI,UAAU;AACZ,eAAS,YAAY,IAAI;AAAA,IAC3B,OAAO;AACL,eAAS,YAAY,QAAQ;AAAA,IAC/B;AAAA,EACF;AAEA,QAAM,uBAAuB,SAAS,cAAc,EAAE;AAGtD,QAAM,iBAAiB,CACrB,WACA,qBAAqB,UACZ;AACT,gBAAY,aAAa,MAAS;AAClC,gBAAY,UAAU,aAAa;AACnC,QAAI,oBAAoB;AACtB,2BAAqB;AAAA,IACvB;AAAA,EACF;AAEA,QAAM,eAAe,CACnB,WACA,qBAAqB,UACZ;AACT,QAAI,CAAC,UAAU;AACb,gBAAU,aAAa,MAAS;AAChC,gBAAU,UAAU,aAAa;AACjC,UAAI,oBAAoB;AACtB,6BAAqB;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AAEA,kBAAgB,MAAM;AACpB,QAAI,CAAC,SAAU;AACf,iBAAa;AACb,WAAO,iBAAiB,UAAU,YAAY;AAC9C,WAAO,MAAM,OAAO,oBAAoB,UAAU,YAAY;AAAA,EAChE,GAAG,CAAC,UAAU,YAAY,CAAC;AAE3B,EAAAC,WAAU,MAAM;AACd,QAAI,CAAC,SAAU;AAEf,mBAAe,IAAI;AACnB,UAAM,sBAAsB,CAAC,MAAwB;AACnD,UACE,aAAa,WACb,EAAE,kBAAkB,QACpB,CAAC,aAAa,QAAQ,SAAS,EAAE,MAAM,KACvC,OAAO,cAAc,KACrB;AACA,sBAAc,KAAK;AAAA,MACrB;AAAA,IACF;AAEA,aAAS,iBAAiB,SAAS,mBAAmB;AACtD,WAAO,MAAM,SAAS,oBAAoB,SAAS,mBAAmB;AAAA,EACxE,GAAG,CAAC,QAAQ,CAAC;AAEb,EAAAA,WAAU,MAAM;AACd,UAAM,eAAe,YAAYJ,OAAM,SAAS,IAAI;AACpD,gBAAY,UAAU;AACtB,mBAAe,cAAc,KAAK;AAAA,EACpC,GAAG,CAAC,SAAS,CAAC;AAEd,EAAAI,WAAU,MAAM;AACd,QAAI,CAAC,UAAU;AACb,YAAM,aAAa,UAAUJ,OAAM,OAAO,IAAI;AAC9C,gBAAU,UAAU;AACpB,mBAAa,YAAY,KAAK;AAAA,IAChC;AAAA,EACF,GAAG,CAAC,SAAS,QAAQ,CAAC;AAEtB,EAAAI,WAAU,MAAM;AACd,QAAI,CAAC,cAAc,aAAa;AAC9B,YAAM,aAAa,YAAY,SAAS,OAAO,KAAK;AACpD,YAAM,WAAW,UAAU,SAAS,OAAO,KAAK;AAChD,UAAI,UAAU;AACZ,wBAAgB,YAAY,IAAI;AAAA,MAClC,OAAO;AACL,wBAAgB,YAAY,QAAQ;AAAA,MACtC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,YAAY,aAAa,UAAU,eAAe,CAAC;AAEvD,EAAAA,WAAU,MAAM;AACd,kBAAc,MAAM;AAAA,EACtB,GAAG,CAAC,MAAM,CAAC;AAEX,EAAAA,WAAU,MAAM;AACd,QAAI,aAAa;AACf,YAAM,QACJ,eAAe,SACX,eACA,eAAe,OACf,aACA;AACN,cAAQ,KAAK;AAAA,IACf;AAAA,EACF,GAAG,CAAC,YAAY,aAAa,OAAO,CAAC;AAGrC,QAAM,eAAe,MAAY;AAC/B,kBAAc,CAAC,UAAU;AAAA,EAC3B;AAEA,QAAM,uBAAuB,CAAC,eAAoC;AAChE,QAAI,YAAa,CAAC,YAAY,eAAe,QAAQ,CAAC,UAAW;AAC/D;AAAA,IACF;AAEA,QAAI,CAAC,YAAY;AACf,oBAAc,IAAI;AAAA,IACpB;AAEA,kBAAc,UAAU;AAAA,EAC1B;AAEA,QAAM,eAAeD;AAAA,IACnB,CAAC,SAAsB;AACrB,YAAM,WAAW,UAAUH,OAAM,OAAO,IAAI;AAC5C,YAAM,WAAW,UAAUA,OAAM,OAAO,IAAI;AAE5C,UACG,YAAY,SAAS,QAAQ,MAAM,MAAM,KACzC,YAAY,SAAS,SAAS,MAAM,MAAM,GAC3C;AACA;AAAA,MACF;AAEA,UAAI,UAAU;AACZ,uBAAe,MAAM,IAAI;AACzB,YAAI,8BAA8B;AAChC,qBAAW,MAAM,cAAc,KAAK,GAAG,EAAE;AAAA,QAC3C;AAAA,MACF,WACE,eAAe,UACd,YAAY,KAAK,SAAS,UAAU,MAAM,GAC3C;AACA,uBAAe,MAAM,IAAI;AACzB,YAAI,UAAU,KAAK,QAAQ,QAAQ,MAAM,GAAG;AAC1C,uBAAa,MAAM,IAAI;AAAA,QACzB;AACA,sBAAc,IAAI;AAAA,MACpB,OAAO;AACL,qBAAa,MAAM,IAAI;AACvB,sBAAc,IAAI;AAClB,YAAI,8BAA8B;AAChC,qBAAW,MAAM,cAAc,KAAK,GAAG,EAAE;AAAA,QAC3C;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,cAAc,CAAC,SAAsB;AACzC,iBAAa,IAAI;AAAA,EACnB;AAEA,QAAM,cAAc,MAAY;AAC9B,iBAAa,MAAS;AACtB,mBAAe,MAAM,IAAI;AACzB,QAAI,CAAC,UAAU;AACb,mBAAa,MAAM,IAAI;AAAA,IACzB;AACA,kBAAc,MAAM;AAAA,EACtB;AAEA,QAAM,mBAAmBG;AAAA,IACvB,CAAC,MAAa,SAA8B;AAC1C,YAAM,WAAW,UAAUH,OAAM,OAAO,IAAI;AAC5C,YAAM,WAAW,UAAUA,OAAM,OAAO,IAAI;AAE5C,UACG,YAAY,SAAS,QAAQ,MAAM,MAAM,KACzC,YAAY,SAAS,SAAS,MAAM,MAAM,GAC3C;AACA;AAAA,MACF;AAEA,UAAI,SAAS,UAAU,UAAU;AAC/B,sBAAc,MAAM;AACpB,uBAAe,MAAM,IAAI;AACzB,YAAI,CAAC,YAAY,UAAU,KAAK,QAAQ,QAAQ,MAAM,GAAG;AACvD,uBAAa,MAAM,IAAI;AAAA,QACzB;AAAA,MACF,OAAO;AACL,sBAAc,IAAI;AAClB,qBAAa,MAAM,IAAI;AAAA,MACzB;AAAA,IACF;AAAA,IACA,CAAC,SAAS,SAAS,UAAU,QAAQ,UAAU;AAAA,EACjD;AAGA,QAAM,YAAuB;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,SAA2B;AAAA,IAC/B;AAAA,IACA;AAAA,IACA,SAAS,UAAUA,OAAM,OAAO,EAAE,OAAO,IAAI;AAAA,IAC7C,SAAS,UAAUA,OAAM,OAAO,EAAE,OAAO,IAAI;AAAA,IAC7C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,UAAmB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,UAAgC;AAAA,IACpC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,SACE,gBAAAF,MAAC,SAAI,WAAU,kCACb,0BAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAWO,IAAG,eAAe,WAAW;AAAA,QACtC;AAAA,MACF,CAAC;AAAA,MACD,KAAK;AAAA,MAEL,0BAAAN;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UAEA;AAAA,4BAAAD,MAAC,kBAAe;AAAA,YAChB,gBAAAA,MAAC,yBACC,0BAAAA,MAAC,UAAO,GACV;AAAA;AAAA;AAAA,MACF;AAAA;AAAA,EACF,GACF;AAEJ;AAEA,IAAO,yBAAQ;;;AiBrZf,SAAS,YAAAQ,WAAU,aAAAC,kBAAiB;AAW3B,0BAAAC,aAAA;AATF,IAAM,aAAa,CAAC,EAAE,SAAS,MAAqC;AACzE,QAAM,CAAC,YAAY,aAAa,IAAIF,UAAS,KAAK;AAElD,EAAAC,WAAU,MAAM;AACd,kBAAc,IAAI;AAAA,EACpB,GAAG,CAAC,CAAC;AAEL,MAAI,CAAC,WAAY,QAAO;AAExB,SAAO,gBAAAC,MAAA,YAAG,UAAS;AACrB;;;ACcI,gBAAAC,aAAA;AARG,IAAM,kBAAkD,CAAC;AAAA,EAC9D,WAAW,MAAM;AAAA,EAAC;AAAA,EAClB,kBAAkB,MAAM;AAAA,EAAC;AAAA,EACzB,uBAAuB;AAAA,EACvB,qBAAqB;AAAA,EACrB,GAAG;AACL,MACE,gBAAAA,MAAC,cACC,0BAAAA;AAAA,EAAC;AAAA;AAAA,IACE,GAAG;AAAA,IACJ,UAAU;AAAA,IACV,WAAW,MAAM;AAAA,IACjB,SAAS,MAAM;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AACF,GACF;;;AChBE,gBAAAC,aAAA;AAPG,IAAM,mBAAoD,CAAC;AAAA,EAChE,WAAW,MAAM;AAAA,EAAC;AAAA,EAClB,kBAAkB,MAAM;AAAA,EAAC;AAAA,EACzB,uBAAuB;AAAA,EACvB,GAAG;AACL,MACE,gBAAAA,MAAC,cACC,0BAAAA;AAAA,EAAC;AAAA;AAAA,IACE,GAAG;AAAA,IACJ,SAAS;AAAA,IACT,UAAU;AAAA,IACV,WAAW,MAAM;AAAA,IACjB;AAAA,IACA,UAAU,CAAC,SAAS,SAAS,IAAI;AAAA,IACjC,iBAAiB,CAAC,SAAS,gBAAgB,IAAI;AAAA;AACjD,GACF;","names":["useState","useRef","useEffect","useCallback","dayjs","cx","dayjs","dayjs","React","jsx","useEffect","useState","dayjs","React","jsx","React","jsx","jsx","useState","useEffect","dayjs","jsx","jsxs","useEffect","useState","jsx","useEffect","useState","useRef","cx","React","jsx","React","useEffect","useState","useRef","dayjs","forwardRef","cx","dayjs","forwardRef","cx","dayjs","useCallback","useEffect","cx","jsx","jsxs","useCallback","useEffect","cx","jsx","forwardRef","dayjs","cx","jsx","jsxs","forwardRef","dayjs","cx","jsx","jsxs","useState","useRef","dayjs","useEffect","React","useEffect","useState","useRef","useCallback","cx","dayjs","jsx","jsxs","useClientSide","useState","useEffect","useRef","useCallback","dayjs","cx","jsx","jsxs","useState","useRef","useEffect","cx","jsx","jsxs","dayjs","useState","useRef","useCallback","useEffect","cx","useState","useEffect","jsx","jsx","jsx"]}