{"version":3,"sources":["../../../components/form/date-range-picker.tsx"],"sourcesContent":["\"use client\";\nimport React, { HTMLAttributes, useEffect, useState } from 'react';\nimport { addDays, format, isEqual } from 'date-fns';\nimport { CalendarIcon } from 'lucide-react';\nimport { DateRange } from 'react-day-picker';\nimport _kebabCase from 'lodash-es/kebabCase';\nimport _isNil from 'lodash-es/isNil';\n\nimport { isEqualDates } from '../../utils/date';\nimport { cn } from '../../utils/ui';\nimport { Button } from '../ui/button';\nimport { Label } from '../ui/label';\nimport { Calendar } from '../ui/calendar';\nimport { Popover, PopoverContent, PopoverTrigger } from '../ui/popover';\n\nfunction formatDate(date: Date) {\n  return format(date, 'LLL dd, y');\n}\n\nexport interface FormDateRangePickerProps {\n  id?: string;\n  name: string;\n  label?: string;\n  required?: boolean;\n  value?: DateRange;\n  onChange: (value: DateRange | undefined) => void;\n  classNames?: {\n    wrapper?: string;\n    label?: string;\n    button?: string;\n  };\n}\n\nexport function FormDateRangePicker({\n  id,\n  name,\n  label,\n  required = false,\n  value: initialValue,\n  onChange,\n  classNames,\n}: FormDateRangePickerProps) {\n  let initialFrom!: Date;\n  let initialTo!: Date;\n\n  if (initialValue) {\n    const from = initialValue.from ?? new Date();\n    const to = initialValue.to ?? new Date();\n    initialFrom = new Date(from.getFullYear(), from.getMonth(), from.getDate());\n    initialTo = new Date(to.getFullYear(), to.getMonth(), to.getDate());\n  } else {\n    const now = new Date();\n    const startOfDay = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n    initialFrom = startOfDay;\n    initialTo = startOfDay;\n  }\n\n  const [value, setValue] = useState<DateRange | undefined>({\n    from: initialFrom,\n    to: initialTo,\n  });\n\n  useEffect(() => {\n    onChange(value);\n  }, [value]);\n\n  if (!id) id = _kebabCase(name);\n\n  return (\n    <div className={cn('$form-date-range-picker space-y-1', classNames?.wrapper)}>\n      {label && (\n        <Label htmlFor={id} className={classNames?.label} required={required}>\n          {label}\n        </Label>\n      )}\n\n      <div className={cn('grid gap-2')}>\n        <Popover>\n          <PopoverTrigger asChild>\n            <Button\n              variant={value ? 'secondary' : 'muted'}\n              appearance=\"outline\"\n              className={cn('min-w-[240px] justify-start text-left font-normal', classNames?.button)}\n            >\n              <CalendarIcon />\n\n              {value?.from ? (\n                value.to ? (\n                  <>\n                    {formatDate(value.from)} - {formatDate(value.to)}\n                  </>\n                ) : (\n                  formatDate(value.from)\n                )\n              ) : (\n                <span>Pick a date</span>\n              )}\n            </Button>\n          </PopoverTrigger>\n\n          <PopoverContent className=\"w-auto p-0\" align=\"start\">\n            <Calendar\n              mode=\"range\"\n              defaultMonth={value?.from}\n              selected={value}\n              onSelect={(dateRange) => {\n                if (!isEqualDates([value?.from, value?.to], [dateRange?.from, dateRange?.to])) {\n                  setValue(dateRange);\n                }\n              }}\n              numberOfMonths={2}\n            />\n          </PopoverContent>\n        </Popover>\n      </div>\n    </div>\n  );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAO,SAAyB,WAAW,gBAAgB;AAC3D,SAAkB,cAAuB;AACzC,SAAS,oBAAoB;AAE7B,OAAO,gBAAgB;AAUvB,SAAS,WAAW,MAAY;AAC9B,SAAO,OAAO,MAAM,WAAW;AACjC;AAgBO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,OAAO;AAAA,EACP;AAAA,EACA;AACF,GAA6B;AAzC7B;AA0CE,MAAI;AACJ,MAAI;AAEJ,MAAI,cAAc;AAChB,UAAM,QAAO,kBAAa,SAAb,YAAqB,oBAAI,KAAK;AAC3C,UAAM,MAAK,kBAAa,OAAb,YAAmB,oBAAI,KAAK;AACvC,kBAAc,IAAI,KAAK,KAAK,YAAY,GAAG,KAAK,SAAS,GAAG,KAAK,QAAQ,CAAC;AAC1E,gBAAY,IAAI,KAAK,GAAG,YAAY,GAAG,GAAG,SAAS,GAAG,GAAG,QAAQ,CAAC;AAAA,EACpE,OAAO;AACL,UAAM,MAAM,oBAAI,KAAK;AACrB,UAAM,aAAa,IAAI,KAAK,IAAI,YAAY,GAAG,IAAI,SAAS,GAAG,IAAI,QAAQ,CAAC;AAC5E,kBAAc;AACd,gBAAY;AAAA,EACd;AAEA,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAgC;AAAA,IACxD,MAAM;AAAA,IACN,IAAI;AAAA,EACN,CAAC;AAED,YAAU,MAAM;AACd,aAAS,KAAK;AAAA,EAChB,GAAG,CAAC,KAAK,CAAC;AAEV,MAAI,CAAC,GAAI,MAAK,WAAW,IAAI;AAE7B,SACE,oCAAC,SAAI,WAAW,GAAG,qCAAqC,yCAAY,OAAO,KACxE,SACC,oCAAC,SAAM,SAAS,IAAI,WAAW,yCAAY,OAAO,YAC/C,KACH,GAGF,oCAAC,SAAI,WAAW,GAAG,YAAY,KAC7B,oCAAC,eACC,oCAAC,kBAAe,SAAO,QACrB;AAAA,IAAC;AAAA;AAAA,MACC,SAAS,QAAQ,cAAc;AAAA,MAC/B,YAAW;AAAA,MACX,WAAW,GAAG,qDAAqD,yCAAY,MAAM;AAAA;AAAA,IAErF,oCAAC,kBAAa;AAAA,KAEb,+BAAO,QACN,MAAM,KACJ,0DACG,WAAW,MAAM,IAAI,GAAE,OAAI,WAAW,MAAM,EAAE,CACjD,IAEA,WAAW,MAAM,IAAI,IAGvB,oCAAC,cAAK,aAAW;AAAA,EAErB,CACF,GAEA,oCAAC,kBAAe,WAAU,cAAa,OAAM,WAC3C;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAc,+BAAO;AAAA,MACrB,UAAU;AAAA,MACV,UAAU,CAAC,cAAc;AACvB,YAAI,CAAC,aAAa,CAAC,+BAAO,MAAM,+BAAO,EAAE,GAAG,CAAC,uCAAW,MAAM,uCAAW,EAAE,CAAC,GAAG;AAC7E,mBAAS,SAAS;AAAA,QACpB;AAAA,MACF;AAAA,MACA,gBAAgB;AAAA;AAAA,EAClB,CACF,CACF,CACF,CACF;AAEJ;","names":[]}