{"version":3,"file":"index41.mjs","sources":["../src/components/input/wheelpicker/date/index.tsx"],"sourcesContent":["import { FunctionComponent, useMemo, useState, useEffect } from \"react\";\nimport GenericWheelpicker, { GenericWheelpickerType } from \"../generic\";\nimport { DropdownItemType } from \"../../../../atoms/dropdown/container\";\n\ninterface DateWheelpickerProps extends GenericWheelpickerType {\n  minDate?: Date;\n  maxDate?: Date;\n  monthsList?: string[]; // Custom month names\n  daysList?: string[]; // Custom day labels (1-indexed)\n}\n\nconst defaultMonthNames = [\n  \"January\",\n  \"February\",\n  \"March\",\n  \"April\",\n  \"May\",\n  \"June\",\n  \"July\",\n  \"August\",\n  \"September\",\n  \"October\",\n  \"November\",\n  \"December\",\n];\n\nconst defaultDayLabels = Array.from({ length: 31 }, (_, i) => String(i + 1));\n\nconst getDaysInMonth = (year: number, month: number) => {\n  return new Date(year, month + 1, 0).getDate();\n};\n\nconst getYearRange = (min: Date, max: Date) => {\n  const years = [];\n  for (let y = min.getFullYear(); y <= max.getFullYear(); y++) {\n    years.push(y);\n  }\n  return years;\n};\n\nexport const DateWheelpicker: FunctionComponent<\n  Omit<DateWheelpickerProps, \"itemWidth\">\n> = ({ minDate, maxDate, selected, monthsList, daysList, ...props }) => {\n  // Defaults\n  const today = new Date();\n  const min = minDate\n    ? new Date(minDate)\n    : new Date(today.getFullYear() - 100, 0, 1);\n  const max = maxDate\n    ? new Date(maxDate)\n    : new Date(today.getFullYear() + 10, 11, 31);\n\n  // State for selected values\n  const [value, setValue] = useState<DropdownItemType[]>(() => {\n    if (selected && selected.length === 3) return selected;\n    // Default: today\n    return [\n      { label: String(today.getDate()), value: String(today.getDate()) },\n      {\n        label: defaultMonthNames[today.getMonth()],\n        value: String(today.getMonth()),\n      },\n      {\n        label: String(today.getFullYear()),\n        value: String(today.getFullYear()),\n      },\n    ];\n  });\n\n  // Compute year, month, day selections\n  const selectedMonth =\n    value[1]?.value !== undefined ? Number(value[1].value) : today.getMonth();\n  const selectedYear =\n    value[2]?.value !== undefined\n      ? Number(value[2].value)\n      : today.getFullYear();\n\n  // Use custom or default months/days\n  const monthNames =\n    monthsList && monthsList.length === 12 ? monthsList : defaultMonthNames;\n  const dayLabels =\n    daysList && daysList.length >= 28 ? daysList : defaultDayLabels;\n\n  // Generate years, months, and days based on min/max and selection\n  const years = useMemo(\n    () =>\n      getYearRange(min, max).map((y) => ({\n        label: String(y),\n        value: String(y),\n      })),\n    [min, max]\n  );\n  const months = useMemo(() => {\n    let start = 0,\n      end = 11;\n    if (selectedYear === min.getFullYear()) start = min.getMonth();\n    if (selectedYear === max.getFullYear()) end = max.getMonth();\n    return monthNames\n      .slice(start, end + 1)\n      .map((m, i) => ({ label: m, value: String(i + start) }));\n  }, [selectedYear, min, max, monthNames]);\n  const days = useMemo(() => {\n    let daysInMonth = getDaysInMonth(selectedYear, selectedMonth);\n    let start = 1,\n      end = daysInMonth;\n    // If min/max restricts days for the selected year/month\n    if (\n      selectedYear === min.getFullYear() &&\n      selectedMonth === min.getMonth()\n    ) {\n      start = min.getDate();\n    }\n    if (selectedYear === max.getFullYear() && selectedMonth === max.getMonth())\n      end = max.getDate();\n\n    return Array.from({ length: end - start + 1 }, (_, i) => ({\n      label: dayLabels[i + start - 1] || String(i + start),\n      value: String(i + start),\n    }));\n  }, [selectedYear, selectedMonth, min, max, dayLabels]);\n\n  // Wheelpicker expects: days, months, years\n  const data = useMemo(\n    () => [{ items: days }, { items: months }, { items: years }],\n    [days, months, years]\n  );\n\n  // Custom value for display\n  const selectedDayObj = days.find((d) => d.value === value[0]?.value);\n  const selectedMonthObj = months.find((m) => m.value === value[1]?.value);\n  const selectedYearObj = years.find((y) => y.value === value[2]?.value);\n  const customValue = `${selectedDayObj?.label || \"--\"} ${\n    selectedMonthObj?.label || \"--\"\n  } ${selectedYearObj?.label || \"--\"}`;\n\n  useEffect(() => {\n    const daysInMonth = getDaysInMonth(selectedYear, selectedMonth);\n    let start = 1,\n      end = daysInMonth;\n    if (\n      selectedYear === min.getFullYear() &&\n      selectedMonth === min.getMonth()\n    ) {\n      start = min.getDate();\n    }\n    if (\n      selectedYear === max.getFullYear() &&\n      selectedMonth === max.getMonth()\n    ) {\n      end = max.getDate();\n    }\n    const selectedDay = Number(value[0]?.value);\n    if (selectedDay < start || selectedDay > end) {\n      // Clamp to end\n      setValue([\n        { label: String(end), value: String(end) },\n        value[1],\n        value[2],\n      ]);\n    }\n    // eslint-disable-next-line\n  }, [selectedYear, selectedMonth, min, max]);\n\n  return (\n    <GenericWheelpicker\n      {...props}\n      data={data}\n      selected={value}\n      customValue={customValue}\n      onChange={(e: DropdownItemType | DropdownItemType[]) =>\n        setValue(e as DropdownItemType[])\n      }\n      itemWidth=\"fill\"\n      textAlignment=\"center\"\n    />\n  );\n};\n\nDateWheelpicker.displayName = \"DateWheelpicker\";\n\nexport default DateWheelpicker;\n"],"names":["_a"],"mappings":"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"}