{"version":3,"file":"index28.cjs","sources":["../src/components/input/daterangepicker/index.tsx"],"sourcesContent":["import {\n  FunctionComponent,\n  ReactNode,\n  useEffect,\n  useRef,\n  useState,\n} from \"react\";\nimport TextFieldAtom, { TextFieldMessagesType } from \"../../../atoms/textfield\";\nimport {\n  LabelPairedArrowLeftToLineSmBoldIcon,\n  LabelPairedArrowRightToLineSmBoldIcon,\n  LabelPairedCalendarSmBoldIcon,\n  LabelPairedChevronDownSmBoldIcon,\n  LabelPairedChevronLeftSmBoldIcon,\n  LabelPairedChevronRightSmBoldIcon,\n  LabelPairedCircleXmarkSmBoldIcon,\n} from \"@deriv/quill-icons\";\n\nimport { useClickOutside } from \"../../../../src/hooks/useClickOutside\";\nimport DropdownContainerAtom from \"../../../../src/atoms/dropdown/container\";\nimport \"react-calendar/dist/Calendar.css\";\nimport \"../datepicker/Datepicker.css\";\nimport Calendar from \"react-calendar\";\nimport { format, parse } from \"date-fns\";\nimport { createRoot } from \"react-dom/client\";\nimport IconButton from \"../../buttons/icon\";\nimport BasicButton from \"../../buttons/basic\";\nimport { useDevice } from \"../../../hooks/useDevice\";\nimport { ActionSheetType } from \"../../action-sheet\";\n\nexport type DateRangePickerType = {\n  className?: string;\n  showCharacterCounter?: boolean;\n  message?: string;\n  indicator?: \"neutral\" | \"fail\" | \"success\";\n  state?: \"default\" | \"disabled\";\n  type?: \"outline\" | \"fill\";\n  size?: \"lg\" | \"md\" | \"sm\";\n  textAlignment?: \"left\" | \"center\";\n  variant?: \"labelled\" | \"labelless\";\n  isRequired?: boolean;\n  optionalText?: string;\n  maxLength?: number;\n  value?: [string | number, string | number];\n  minDate?: string | Date;\n  maxDate?: string | Date;\n  onChange?: (value: [string, string]) => void;\n  actionSheet?: ActionSheetType;\n  dateFormat?:\n    | \"dd/mm/yyyy\"\n    | \"mm/dd/yyyy\"\n    | \"yyyy/mm/dd\"\n    | \"dd/mm/yy\"\n    | \"mm/dd/yy\"\n    | \"yyyy/mm/yy\"\n    | \"dd-mm-yyyy\"\n    | \"mm-dd-yyyy\"\n    | \"yyyy-mm-dd\"\n    | \"dd-mm-yy\"\n    | \"mm-dd-yy\";\n  messages?: {\n    text: string;\n    type: \"neutral\" | \"fail\" | \"success\";\n    icon?: ReactNode;\n  }[];\n  inputStartDate?: {\n    label?: string;\n    placeholder?: string;\n    message?: string,\n    messages?: TextFieldMessagesType[];\n    indicator?: \"neutral\" | \"fail\" | \"success\";\n  };\n  inputEndDate?: {\n    label?: string;\n    placeholder?: string;\n    message?: string,\n    messages?: TextFieldMessagesType[];\n    indicator?: \"neutral\" | \"fail\" | \"success\";\n  };\n};\n\nexport const DateRangePicker: FunctionComponent<DateRangePickerType> = ({\n  dateFormat = \"dd/mm/yyyy\",\n  size = \"md\",\n  minDate,\n  maxDate,\n  value: propValue,\n  onChange,\n  inputStartDate,\n  inputEndDate,\n  actionSheet,\n  ...props\n}) => {\n  const [range, setRange] = useState<[Date | null, Date | null]>([null, null]);\n  const [isOpen, setIsOpen] = useState(false);\n\n  const [startActiveMonth, setStartActiveMonth] = useState<Date | null>(null);\n  const [endActiveMonth, setEndActiveMonth] = useState<Date | null>(null);\n\n  const [activeInput, setActiveInput] = useState<\"start\" | \"end\">(\"start\");\n  const lastActiveInputRef = useRef<\"start\" | \"end\">(activeInput);\n  const endInputRef = useRef<HTMLInputElement>(null);\n  const startInputRef = useRef<HTMLInputElement>(null);\n\n  const { isMobile } = useDevice();\n\n  // Convert propValue to Date objects if provided\n  useEffect(() => {\n    if (propValue && Array.isArray(propValue)) {\n      const parseToDate = (date?: string | number) => {\n        if (!date) return null;\n        if (typeof date === \"number\") {\n          const d = new Date(date);\n          return isNaN(d.getTime()) ? null : d;\n        }\n        if (typeof date === \"string\") {\n          const formatString = mapFormatString(dateFormat);\n          const parsed = parse(date, formatString, new Date());\n          return !isNaN(parsed.getTime()) ? parsed : null;\n        }\n        return null;\n      };\n      setRange([parseToDate(propValue[0]), parseToDate(propValue[1])]);\n    }\n  }, [propValue, dateFormat]);\n\n  const datepickerContainerOffets = {\n    sm: 15,\n    md: 20,\n    lg: 35,\n  };\n\n  const mapFormatString = (dateFormat: string) => {\n    return dateFormat\n      .replace(/yyyy/g, \"yyyy\")\n      .replace(/yy/g, \"yy\")\n      .replace(/mm/g, \"MM\")\n      .replace(/dd/g, \"dd\");\n  };\n\n  const parseToDate = (date?: string | Date) => {\n    if (!date) return undefined;\n    if (date instanceof Date) return date;\n    const parsed = new Date(date);\n    return isNaN(parsed.getTime()) ? undefined : parsed;\n  };\n\n  const handleInputClick = (input: \"start\" | \"end\") => {\n    setActiveInput(input);\n    setIsOpen(true);\n  };\n\n  // Combined navigation for moving both calendars\n  const handleMonthNavigation = (direction: 1 | -1) => {\n    lastActiveInputRef.current = activeInput;\n    if (startActiveMonth && endActiveMonth) {\n      const newStart = new Date(startActiveMonth);\n      newStart.setMonth(newStart.getMonth() + 2 * direction);\n      const newEnd = new Date(endActiveMonth);\n      newEnd.setMonth(newEnd.getMonth() + 2 * direction);\n      setStartActiveMonth(newStart);\n      setEndActiveMonth(newEnd);\n\n      const inputToFocus = lastActiveInputRef.current;\n\n      setTimeout(() => {\n        setActiveInput(inputToFocus);\n      }, 100);\n\n      if (lastActiveInputRef.current === \"end\") {\n        endInputRef.current?.focus();\n      } else {\n        startInputRef.current?.focus();\n      }\n    }\n  };\n\n  // Custom navigation icons\n  useEffect(() => {\n    if (isOpen) {\n      const calendar = document.querySelector(\".quill-ui-next-calendar\");\n      const setNavIcon = (selector: string, icon: React.ReactNode) => {\n        const nav = calendar?.querySelector(selector);\n        if (nav) {\n          nav.innerHTML = \"\";\n          const container = document.createElement(\"span\");\n          nav.appendChild(container);\n          createRoot(container).render(icon);\n        }\n      };\n      setNavIcon(\n        \".react-calendar__navigation__prev-button\",\n        <IconButton\n          style=\"tertiary\"\n          size=\"sm\"\n          icon={<LabelPairedChevronLeftSmBoldIcon />}\n          color=\"blackWhite\"\n        />\n      );\n      setNavIcon(\n        \".react-calendar__navigation__next-button\",\n        <IconButton\n          size=\"sm\"\n          style=\"tertiary\"\n          icon={<LabelPairedChevronRightSmBoldIcon />}\n          color=\"blackWhite\"\n        />\n      );\n    }\n  }, [isOpen]);\n\n  useClickOutside(\n    startInputRef,\n    () => {\n      setIsOpen(false);\n    },\n    [\"quill-ui-next-calendar-daterange-container\", \"clear-btn\"]\n  );\n\n  // Display value as 'start - end'\n  const displayValue =\n    range[0] && range[1]\n      ? `${format(range[0], mapFormatString(dateFormat))} - ${format(\n          range[1],\n          mapFormatString(dateFormat)\n        )}`\n      : \"\";\n\n  useEffect(() => {\n    if (isOpen) {\n      // If not set, initialize to consecutive months\n      if (!startActiveMonth) {\n        const start = range[0] || new Date();\n        setStartActiveMonth(new Date(start.getFullYear(), start.getMonth(), 1));\n      }\n      if (!endActiveMonth) {\n        const start = range[0] || new Date();\n        const end = new Date(start.getFullYear(), start.getMonth() + 1, 1);\n        setEndActiveMonth(end);\n      }\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [isOpen]);\n\n  // Helper to check if a date is in the selected range\n  const isInRange = (date: Date) => {\n    if (range[0] && range[1] && !isSameDay(range[0], range[1])) {\n      const d = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n      const start = new Date(\n        range[0].getFullYear(),\n        range[0].getMonth(),\n        range[0].getDate()\n      );\n      const end = new Date(\n        range[1].getFullYear(),\n        range[1].getMonth(),\n        range[1].getDate()\n      );\n      return d > start && d < end;\n    }\n    return false;\n  };\n\n  // Helper to check if two dates are the same day\n  const isSameDay = (a: Date, b: Date) =>\n    a.getFullYear() === b.getFullYear() &&\n    a.getMonth() === b.getMonth() &&\n    a.getDate() === b.getDate();\n\n  const getRangeTileClassName = (date: Date, view: string) => {\n    if (view !== \"month\") return undefined;\n    if (\n      range[0] &&\n      range[1] &&\n      isSameDay(range[0], range[1]) &&\n      isSameDay(date, range[0])\n    ) {\n      // Both start and end are the same day, and this is that day\n      return \"quill-ui-next-calendar-range-single\";\n    }\n    if (range[0] && isSameDay(date, range[0])) {\n      return \"quill-ui-next-calendar-range-start\";\n    }\n    if (range[1] && isSameDay(date, range[1])) {\n      return \"quill-ui-next-calendar-range-end\";\n    }\n    if (isInRange(date)) {\n      return \"quill-ui-next-calendar-in-range\";\n    }\n    return undefined;\n  };\n\n  // Update handleCalendarChange to accept both single and range values\n  const handleCalendarChange = (\n    value: Date | Date[] | [Date | null, Date | null] | null\n  ) => {\n    let date: Date | null = null;\n    if (Array.isArray(value)) {\n      // Could be [Date, Date] or [Date | null, Date | null]\n      date = value[0] instanceof Date ? value[0] : null;\n    } else if (value instanceof Date) {\n      date = value;\n    }\n    if (!date) return;\n\n    if (activeInput === \"start\") {\n      let nextEnd = range[1];\n      if (range[1] && date > range[1]) {\n        nextEnd = null;\n      }\n      setRange([date, nextEnd]);\n      setActiveInput(\"end\");\n\n      startInputRef.current?.click();\n      startInputRef.current?.focus();\n\n      setTimeout(() => {\n        endInputRef.current?.click();\n        endInputRef.current?.focus();\n      }, 100);\n      return;\n    }\n\n    if (activeInput === \"end\") {\n      if (!range[0]) {\n        setRange([date, null]);\n        setActiveInput(\"end\");\n        setTimeout(() => {\n          endInputRef.current?.focus();\n        }, 0);\n        return;\n      }\n      if (range[0] && !range[1]) {\n        if (date < range[0]) {\n          setRange([date, null]);\n          setTimeout(() => {\n            setActiveInput(\"end\");\n            endInputRef.current?.focus();\n          }, 0);\n          return;\n        }\n        setRange([range[0], date]);\n        const formatString = mapFormatString(dateFormat);\n        const startStr = format(range[0], formatString);\n        const endStr = format(date, formatString);\n        onChange?.([startStr, endStr]);\n        if (!isMobile) setTimeout(() => setIsOpen(false), 100);\n        setTimeout(() => {\n          endInputRef.current?.focus();\n        }, 0);\n        return;\n      }\n      // fallback: both dates set, just update end\n      if (date < range[0]) {\n        setRange([date, null]);\n        setTimeout(() => {\n          setActiveInput(\"end\");\n          endInputRef.current?.focus();\n        }, 0);\n        return;\n      }\n      setRange([range[0], date]);\n      const formatString = mapFormatString(dateFormat);\n      const startStr = format(range[0], formatString);\n      const endStr = format(date, formatString);\n      onChange?.([startStr, endStr]);\n      if (!isMobile) setTimeout(() => setIsOpen(false), 100);\n      setTimeout(() => {\n        endInputRef.current?.focus();\n      }, 0);\n      return;\n    }\n  };\n\n  // Mobile-specific calendar change handler\n  const handleMobileCalendarChange = (value: Date | (Date | null)[] | null) => {\n    if (Array.isArray(value) && value[0] instanceof Date && value[1] instanceof Date) {\n      setRange([value[0], value[1]]);\n      const formatString = mapFormatString(dateFormat);\n      const startStr = format(value[0], formatString);\n      const endStr = format(value[1], formatString);\n      onChange?.([startStr, endStr]);\n    } else if (value instanceof Date) {\n      setRange([value, null]);\n    } else if (!value) {\n      setRange([null, null]);\n    }\n  };\n\n  const renderDateRangePicker = () => {\n    return (\n      <div className=\"quill-ui-next-calendar-daterange-container\">\n        <IconButton\n          className=\"quill-ui-next-calendar-daterange-prev-button quill-ui-next-calendar-daterange-button\"\n          style=\"tertiary\"\n          size=\"sm\"\n          icon={<LabelPairedChevronLeftSmBoldIcon />}\n          color=\"blackWhite\"\n          onClick={() => handleMonthNavigation(-1)}\n        />\n\n        <div className=\"quill-ui-next-daterange-picker-calendar-box\">\n          <Calendar\n            value={range[0]}\n            onChange={(value) => handleCalendarChange(value as Date)}\n            locale=\"en-GB\"\n            showNeighboringMonth={false}\n            className=\"quill-ui-next-calendar\"\n            minDate={parseToDate(minDate)}\n            maxDate={parseToDate(maxDate)}\n            onActiveStartDateChange={({ activeStartDate }) => {\n              setStartActiveMonth(activeStartDate);\n              // If end calendar is showing the same month, move it forward\n              if (\n                endActiveMonth &&\n                activeStartDate &&\n                endActiveMonth.getFullYear() ===\n                  activeStartDate.getFullYear() &&\n                endActiveMonth.getMonth() === activeStartDate.getMonth()\n              ) {\n                const nextMonth = new Date(activeStartDate);\n                nextMonth.setMonth(nextMonth.getMonth() + 1);\n                setEndActiveMonth(nextMonth);\n              }\n            }}\n            activeStartDate={startActiveMonth || undefined}\n            navigationLabel={undefined}\n            prevLabel={null}\n            nextLabel={null}\n            minDetail=\"month\"\n            maxDetail=\"month\"\n            tileClassName={({ date, view }) =>\n              getRangeTileClassName(date, view)\n            }\n          />\n\n          <Calendar\n            value={range[1]}\n            onChange={handleCalendarChange}\n            locale=\"en-GB\"\n            showNeighboringMonth={false}\n            className=\"quill-ui-next-calendar\"\n            minDate={parseToDate(minDate)}\n            maxDate={parseToDate(maxDate)}\n            activeStartDate={endActiveMonth || undefined}\n            navigationLabel={undefined}\n            prevLabel={null}\n            nextLabel={null}\n            minDetail=\"month\"\n            maxDetail=\"month\"\n            onActiveStartDateChange={({ activeStartDate }) =>\n              setEndActiveMonth(activeStartDate)\n            }\n            tileClassName={({ date, view }) =>\n              getRangeTileClassName(date, view)\n            }\n          />\n        </div>\n        <div className=\"quill-ui-next-daterange-picker-calendar-buttons\">\n          <BasicButton\n            style=\"secondary\"\n            size=\"lg\"\n            label=\"Today\"\n            color=\"blackWhite\"\n            iconLeft={<LabelPairedArrowLeftToLineSmBoldIcon />}\n            onClick={showCurrentAndNextMonth}\n          />\n        </div>\n\n        <IconButton\n          className=\"quill-ui-next-calendar-daterange-next-button quill-ui-next-calendar-daterange-button\"\n          style=\"tertiary\"\n          size=\"sm\"\n          icon={<LabelPairedChevronRightSmBoldIcon />}\n          color=\"blackWhite\"\n          onClick={() => handleMonthNavigation(1)}\n        />\n      </div>\n    );\n  };\n\n  const startValue = range[0]\n    ? format(range[0], mapFormatString(dateFormat))\n    : \"\";\n  const endValue = range[1]\n    ? format(range[1], mapFormatString(dateFormat))\n    : \"\";\n\n  const clearEndDate = () => setRange([range[0], null]);\n\n  // Clear range\n  const clearRange = () => {\n    setRange([null, null]);\n    onChange?.([\"\", \"\"]);\n  };\n\n  const showCurrentAndNextMonth = () => {\n    const now = new Date();\n    const startMonth = new Date(now.getFullYear(), now.getMonth(), 1);\n    const endMonth = new Date(now.getFullYear(), now.getMonth() + 1, 1);\n    setStartActiveMonth(startMonth);\n    setEndActiveMonth(endMonth);\n  };\n\n  useEffect(() => {\n    lastActiveInputRef.current = activeInput;\n  }, [activeInput]);\n\n  // Mobile render: one input, one calendar\n  const renderMobileDateRangePicker = () => {\n    return (\n      <div className=\"quill-ui-next-calendar-daterange-container\">\n        <Calendar\n          selectRange\n          value={range[0] && range[1] ? [range[0], range[1]] : range[0]}\n          onChange={handleMobileCalendarChange}\n          locale=\"en-GB\"\n          showNeighboringMonth={false}\n          className=\"quill-ui-next-calendar\"\n          minDate={parseToDate(minDate)}\n          maxDate={parseToDate(maxDate)}\n          navigationLabel={undefined}\n          prevLabel={\n            <IconButton\n              style=\"tertiary\"\n              size=\"sm\"\n              icon={<LabelPairedChevronLeftSmBoldIcon />}\n              color=\"blackWhite\"\n            />\n          }\n          nextLabel={\n            <IconButton\n              size=\"sm\"\n              style=\"tertiary\"\n              icon={<LabelPairedChevronRightSmBoldIcon />}\n              color=\"blackWhite\"\n            />\n          }\n          minDetail=\"decade\"\n          maxDetail=\"month\"\n          tileClassName={({ date, view }) => getRangeTileClassName(date, view)}\n        />\n      </div>\n    );\n  };\n\n  return (\n    <div className=\"quill-ui-next-daterange-picker-input-container\">\n      {isMobile ? (\n        <TextFieldAtom\n          {...props}\n          size={size}\n          allowTyping={false}\n          label={`${inputStartDate?.label || \"From\"} - ${\n            inputEndDate?.label || \"To\"\n          }`}\n          placeholder={dateFormat}\n          iconLeft={<LabelPairedCalendarSmBoldIcon />}\n          iconRight={\n            <LabelPairedChevronDownSmBoldIcon\n              className={`quill-ui-next-rotatable ${\n                isOpen && \"quill-ui-next-rotate\"\n              }`}\n            />\n          }\n          iconExtra={\n            isOpen && (range[0] || range[1]) ? (\n              <LabelPairedCircleXmarkSmBoldIcon\n                className=\"clear-btn\"\n                onClick={clearRange}\n              />\n            ) : undefined\n          }\n          onChange={() => {}}\n          onClick={() => setIsOpen(true)}\n          value={displayValue}\n          className={`${props.state !== \"disabled\" && \"quill-ui-next-pointer\"}`}\n          customContent={\n            <DropdownContainerAtom\n              width=\"fit-content\"\n              textAlignment={props.textAlignment}\n              className=\"quill-ui-next-daterange-picker-dropdown\"\n              parent={startInputRef}\n              isOpen={isOpen}\n              offsetTop={\n                props.variant === \"labelless\"\n                  ? datepickerContainerOffets[size]\n                  : 36\n              }\n              onActionSheetClose={() => setIsOpen(false)}\n              actionSheet={{\n                ...actionSheet,\n                buttonPrimary: {\n                  label: actionSheet?.buttonPrimary?.label || \"Done\",\n                  onClick: () => {\n                    setTimeout(() => {\n                      setIsOpen(false);\n                      actionSheet?.onClose?.();\n                    }, 100);\n                  },\n                },\n              }}\n              customContent={renderMobileDateRangePicker()}\n            />\n          }\n        />\n      ) : (\n        <>\n          <TextFieldAtom\n            ref={startInputRef as unknown as React.Ref<HTMLInputElement>}\n            {...props}\n            size={size}\n            allowTyping={false}\n            label={inputStartDate?.label || \"From\"}\n            placeholder={inputStartDate?.placeholder || dateFormat}\n            iconLeft={<LabelPairedArrowLeftToLineSmBoldIcon />}\n            iconRight={\n              <LabelPairedChevronDownSmBoldIcon\n                className={`quill-ui-next-rotatable ${\n                  isOpen && \"quill-ui-next-rotate\"\n                }`}\n              />\n            }\n            iconExtra={\n              isOpen && range[0] ? (\n                <LabelPairedCircleXmarkSmBoldIcon\n                  className=\"clear-btn\"\n                  onClick={clearRange}\n                />\n              ) : undefined\n            }\n            messages={inputStartDate?.messages}\n            message={inputStartDate?.message}\n            indicator={inputStartDate?.indicator}\n            onChange={() => {}}\n            onClick={() => handleInputClick(\"start\")}\n            value={startValue}\n            className={`${\n              props.state !== \"disabled\" && \"quill-ui-next-pointer\"\n            }`}\n            customContent={\n              <DropdownContainerAtom\n                width=\"fit-content\"\n                textAlignment={props.textAlignment}\n                className=\"quill-ui-next-daterange-picker-dropdown\"\n                parent={startInputRef}\n                isOpen={isOpen}\n                offsetTop={\n                  props.variant === \"labelless\"\n                    ? datepickerContainerOffets[size]\n                    : 36\n                }\n                onActionSheetClose={() => setIsOpen(false)}\n                customContent={renderDateRangePicker()}\n              />\n            }\n          />\n          <TextFieldAtom\n            ref={endInputRef as unknown as React.Ref<HTMLInputElement>}\n            {...props}\n            size={size}\n            allowTyping={false}\n            label={inputEndDate?.label || \"To\"}\n            placeholder={inputEndDate?.placeholder || dateFormat}\n            iconLeft={<LabelPairedArrowRightToLineSmBoldIcon />}\n            iconRight={\n              <LabelPairedChevronDownSmBoldIcon\n                className={`quill-ui-next-rotatable ${\n                  isOpen && \"quill-ui-next-rotate\"\n                }`}\n              />\n            }\n            iconExtra={\n              isOpen && range[1] ? (\n                <LabelPairedCircleXmarkSmBoldIcon\n                  className=\"clear-btn\"\n                  onClick={clearEndDate}\n                />\n              ) : undefined\n            }\n            messages={inputEndDate?.messages}\n            message={inputEndDate?.message}\n            indicator={inputEndDate?.indicator}\n            onChange={() => {}}\n            onClick={() => handleInputClick(\"end\")}\n            value={endValue}\n            className={`${\n              props.state !== \"disabled\" && \"quill-ui-next-pointer\"\n            }`}\n          />\n        </>\n      )}\n    </div>\n  );\n};\n\nexport default DateRangePicker;\n"],"names":["useState","useRef","useDevice","useEffect","parseToDate","parse","dateFormat","_a","createRoot","jsx","IconButton","LabelPairedChevronLeftSmBoldIcon","LabelPairedChevronRightSmBoldIcon","useClickOutside","format","_b","formatString","startStr","endStr","jsxs","BasicButton","LabelPairedArrowLeftToLineSmBoldIcon","TextFieldAtom","LabelPairedCalendarSmBoldIcon","LabelPairedChevronDownSmBoldIcon","LabelPairedCircleXmarkSmBoldIcon","DropdownContainerAtom","Fragment","LabelPairedArrowRightToLineSmBoldIcon"],"mappings":"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"}