{"version":3,"file":"calendar.mjs","sources":["../../../../src/lib/nextGenComponents/components/ui/calendar.tsx"],"sourcesContent":["import * as React from 'react'\nimport type { DateRange } from 'react-day-picker'\nimport { DayButton as DayButtonImport, DayPicker, getDefaultClassNames } from 'react-day-picker'\n\nimport CalendarChevronSvg from '../../../images/calendar-chevron.svg?react'\nimport { Button } from '@/components/ui/button'\nimport { cn } from '@/lib/utils'\nimport { getSupportedLocale } from '@/utils/date.utils'\n\ntype CalendarProps = React.ComponentProps<typeof DayPicker> & {\n  buttonVariant?: React.ComponentProps<typeof Button>['variant']\n  singleDate?: boolean\n  /**\n   * If provided, Calendar will paint the range (middle) and optionally an \"active\" endpoint.\n   */\n  range?: DateRange\n  /**\n   * Which endpoint should be shown as the active circle in this calendar.\n   * - \"start\" paints range.from as a filled circle\n   * - \"end\" paints range.to as a filled circle\n   */\n  activeRangeSide?: 'start' | 'end'\n  /**\n   * Caption prefix like \"From:\" / \"To:\" (used when captionLayout=\"label\")\n   */\n  captionPrefix?: string\n  /**\n   * When true, forces weekday to be a single letter (like the screenshot).\n   */\n  weekdaySingleLetter?: boolean\n}\n\nconst Calendar = ({\n  className,\n  classNames,\n  showOutsideDays = true,\n  captionLayout = 'label',\n  formatters,\n  components,\n  range,\n  activeRangeSide,\n  captionPrefix,\n  weekdaySingleLetter = true,\n  singleDate = false,\n  modifiers,\n  modifiersClassNames,\n  ...props\n}: CalendarProps) => {\n  const defaultClassNames = getDefaultClassNames()\n\n  const computedModifiers = React.useMemo(() => {\n    const from = range?.from\n    const to = range?.to\n\n    const rangeModifiers: Record<string, Date | ((day: Date) => boolean) | undefined> = {}\n\n    if (from && to) {\n      rangeModifiers.range_middle = (day: Date) => day > from && day < to\n      rangeModifiers.range_from = from\n      rangeModifiers.range_to = to\n    }\n\n    let active: Record<string, Date | undefined> = {}\n\n    if (activeRangeSide === 'start') {\n      active = { active_start: from }\n    } else if (activeRangeSide === 'end') {\n      active = { active_end: to }\n    }\n\n    return {\n      ...modifiers,\n      ...rangeModifiers,\n      ...active\n    }\n  }, [activeRangeSide, modifiers, range?.from, range?.to])\n\n  const computedModifiersClassNames = React.useMemo(() => {\n    return {\n      ...modifiersClassNames,\n      range_middle: 'rounded-none text-[#869CFF]'\n    }\n  }, [modifiersClassNames])\n\n  const computedFormatters = React.useMemo(() => {\n    const locale = getSupportedLocale()\n    return {\n      formatMonthDropdown: (date: Date) => date.toLocaleString(locale, { month: 'short' }),\n      ...(weekdaySingleLetter\n        ? { formatWeekdayName: (d: Date) => d.toLocaleDateString(locale, { weekday: 'narrow' }) }\n        : {}),\n      ...(captionPrefix\n        ? {\n            formatCaption: (m: Date) =>\n              `${captionPrefix} ${m.toLocaleDateString(locale, { month: 'short', year: 'numeric' })}`\n          }\n        : {}),\n      ...formatters\n    }\n  }, [captionPrefix, formatters, weekdaySingleLetter])\n\n  return (\n    <DayPicker\n      showOutsideDays={showOutsideDays}\n      captionLayout={captionLayout}\n      modifiers={computedModifiers}\n      modifiersClassNames={computedModifiersClassNames}\n      formatters={computedFormatters}\n      className={cn(\n        'bg-background group/calendar p-0 [--cell-size:2rem] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent',\n        String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n        String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n        className\n      )}\n      classNames={{\n        root: cn(defaultClassNames.root),\n        months: cn('relative flex flex-col gap-4 md:flex-row', defaultClassNames.months),\n        month: cn('flex w-full flex-col gap-4', defaultClassNames.month),\n        nav: cn(\n          'absolute inset-x-0 top-0 flex w-full items-start justify-between z-20',\n          defaultClassNames.nav\n        ),\n        button_previous: cn(\n          'flex items-center justify-center h-[var(--cell-size)] w-[var(--cell-size)]',\n          defaultClassNames.button_previous\n        ),\n        button_next: cn(\n          'flex items-center justify-center h-[var(--cell-size)] w-[var(--cell-size)]',\n          defaultClassNames.button_next\n        ),\n        month_caption: cn(\n          'flex h-[var(--cell-size)] w-full items-center justify-center px-5',\n          defaultClassNames.month_caption\n        ),\n        dropdowns: cn(\n          'flex h-[var(--cell-size)] w-full items-center justify-center gap-1.5 text-sm font-medium',\n          defaultClassNames.dropdowns\n        ),\n        dropdown: cn('bg-popover absolute inset-0 opacity-0', defaultClassNames.dropdown),\n        table: 'w-full border-collapse',\n        weekdays: cn('flex border-b border-slate-100 pb-2', defaultClassNames.weekdays),\n        weekday: cn(\n          'text-muted-foreground flex-1 select-none rounded-md text-[0.8rem] font-normal',\n          defaultClassNames.weekday\n        ),\n        day: cn(\n          'group/day relative aspect-square flex-1 select-none p-0 text-center flex items-center justify-center',\n          !singleDate &&\n            'has-[button[data-range-start]]:bg-[#869CFF33] has-[button[data-range-end]]:bg-[#869CFF33] has-[button[data-range-middle]]:bg-[#869CFF33]',\n          !singleDate &&\n            'has-[button[data-range-start]]:rounded-l-full has-[button[data-range-end]]:rounded-r-full',\n          !singleDate && 'has-[button[data-selected-single]]:bg-transparent',\n          defaultClassNames.day\n        ),\n        week: cn('flex w-full mt-1', defaultClassNames.week),\n        range_start: 'bg-transparent',\n        range_middle: 'bg-transparent',\n        range_end: 'bg-transparent',\n        outside: cn(\n          'text-muted-foreground aria-selected:text-muted-foreground',\n          defaultClassNames.outside\n        ),\n        disabled: cn('text-muted-foreground opacity-50', defaultClassNames.disabled),\n        hidden: cn('invisible', defaultClassNames.hidden),\n        ...classNames\n      }}\n      components={{\n        Root: CalendarRoot,\n        DayButton: CalendarDayButton,\n        Chevron: CalendarChevron,\n        ...components\n      }}\n      {...props}\n    />\n  )\n}\n\nconst CalendarDayButton = ({\n  className: btnClassName,\n  modifiers: dayModifiers,\n  ...rest\n}: React.ComponentProps<typeof DayButtonImport>) => {\n  const isSelected = dayModifiers.active_start || dayModifiers.active_end || dayModifiers.selected\n  const isInRange =\n    dayModifiers.range_from ||\n    dayModifiers.range_to ||\n    dayModifiers.range_middle ||\n    dayModifiers.active_start ||\n    dayModifiers.active_end\n\n  return (\n    <Button\n      variant=\"ghost\"\n      size=\"icon\"\n      data-range-start={dayModifiers.range_from || dayModifiers.active_start || undefined}\n      data-range-end={dayModifiers.range_to || dayModifiers.active_end || undefined}\n      data-range-middle={dayModifiers.range_middle || undefined}\n      data-selected-single={(dayModifiers.selected && !isInRange) || undefined}\n      disabled={dayModifiers.outside}\n      className={cn(\n        'relative flex aspect-square h-8 w-full items-center justify-center p-0 font-normal transition-none z-10 hover:bg-igz-accent-hover',\n        isSelected && '!bg-[#869CFF] !text-white rounded-full z-20 hover:!bg-[#869CFF]',\n        btnClassName,\n        dayModifiers.range_middle && '!text-[#869CFF]'\n      )}\n      {...rest}\n    />\n  )\n}\n\ntype CalendarRootProps = React.HTMLAttributes<HTMLDivElement> & {\n  rootRef?: React.Ref<HTMLDivElement>\n}\n\nconst CalendarChevron = ({\n  orientation,\n  className\n}: {\n  className?: string\n  orientation?: 'up' | 'down' | 'left' | 'right'\n}) => (\n  <CalendarChevronSvg\n    className={cn('text-[#7F7989]', orientation === 'left' && 'rotate-180', className)}\n  />\n)\n\nconst CalendarRoot = ({ className, rootRef, ...rest }: CalendarRootProps) => {\n  return <div data-slot=\"calendar\" ref={rootRef} className={cn(className)} {...rest} />\n}\n\nexport { Calendar }\n"],"names":["Calendar","className","classNames","showOutsideDays","captionLayout","formatters","components","range","activeRangeSide","captionPrefix","weekdaySingleLetter","singleDate","modifiers","modifiersClassNames","props","defaultClassNames","getDefaultClassNames","computedModifiers","React","from","to","rangeModifiers","day","active","computedModifiersClassNames","computedFormatters","locale","getSupportedLocale","date","d","m","jsx","DayPicker","cn","CalendarRoot","CalendarDayButton","CalendarChevron","btnClassName","dayModifiers","rest","isSelected","isInRange","Button","orientation","CalendarChevronSvg","rootRef"],"mappings":"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"}