UNPKG

@undp/design-system-react

Version:

React based design system for UNDP

1 lines 8.71 kB
{"version":3,"file":"date-range-picker-BmxdqrRq.cjs","names":["addDays"],"sources":["../node_modules/date-fns/subDays.js","../src/components/ui/date-range-picker.tsx"],"sourcesContent":["import { addDays } from \"./addDays.js\";\n\n/**\n * The {@link subDays} function options.\n */\n\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of days to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the days subtracted\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * const result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\nexport function subDays(date, amount, options) {\n return addDays(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subDays;\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport { format, subDays } from 'date-fns';\nimport { ArrowRight, CalendarIcon } from 'lucide-react';\nimport { useEffect, useState } from 'react';\nimport type { PropsSingle } from 'react-day-picker';\nimport { cn } from '@/lib/utils';\nimport { Calendar } from './calendar-card';\nimport { Popover, PopoverContent, PopoverTrigger } from './popover';\n\ntype SingleCalendarProps = Omit<PropsSingle, 'mode' | 'onSelect'>;\n\nconst datePickerVariants = cva(\n 'w-full h-auto bg-background rounded-base text-content-primary text-base transition-colors focus-visible:outline-hidden focus-visible:ring-1 disabled:cursor-not-allowed disabled:opacity-disabled placeholder:text-content-placeholder',\n {\n variants: {\n variant: {\n light: 'border border-stroke',\n normal: 'border-2 border-foreground',\n },\n rounded: {\n base: 'rounded',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n '2xl': 'rounded-2xl',\n full: 'rounded-full',\n },\n inputSize: {\n sm: 'px-2.5 py-1',\n base: 'p-2.5',\n },\n },\n defaultVariants: {\n inputSize: 'base',\n variant: 'normal',\n rounded: 'base',\n },\n },\n);\n\nexport function DateRangePicker({\n onValueChange,\n value,\n defaultValue,\n disablePopover,\n classNames,\n variant,\n inputSize,\n numberOfMonths = 2,\n ...props\n}: SingleCalendarProps &\n VariantProps<typeof datePickerVariants> & {\n numberOfMonths?: number;\n disablePopover?: boolean;\n classNames?: {\n popOverTrigger?: string;\n popOverContent?: string;\n popOverTriggerIcon?: string;\n popOverTriggerButton?: string;\n };\n onValueChange?: (range: { from: Date | undefined; to: Date | undefined }) => void;\n value?: {\n from: Date | undefined;\n to: Date | undefined;\n };\n defaultValue?: {\n from: Date | undefined;\n to: Date | undefined;\n };\n }) {\n const [range, setRange] = useState<{\n from: Date | undefined;\n to: Date | undefined;\n }>({\n from: value?.from || defaultValue?.from || undefined,\n to: value?.to || defaultValue?.to || undefined,\n });\n const [selectingStart, setSelectingStart] = useState(true);\n const [open, setOpen] = useState(false);\n const handleSelect = (date: Date | undefined) => {\n if (!date) return;\n\n if (selectingStart) {\n setRange({ from: date, to: undefined });\n setSelectingStart(false);\n } else {\n if (range.from && date < range.from) {\n setRange({ from: date, to: range.from });\n } else {\n setRange((prev) => ({ ...prev, to: date }));\n }\n setSelectingStart(true);\n setOpen(false);\n }\n };\n useEffect(() => {\n onValueChange?.({ from: range.from, to: range.to });\n }, [range.from, range.to, onValueChange]);\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger\n className={cn(datePickerVariants({ inputSize, variant }), classNames?.popOverTrigger)}\n >\n <CalendarIcon\n className={cn('size-4 text-content-placeholder', classNames?.popOverTriggerIcon)}\n />\n {range.from ? (\n <div className='flex grow items-center gap-4'>\n <p className='mt-1 grow p-0 text-left font-body text-content-primary'>\n {format(range.from, 'MMM d, yyyy')}\n </p>\n <ArrowRight size={14} className='text-content-primary' />\n {range.to ? (\n <p className='mt-1 grow p-0 text-left font-body text-content-primary'>\n {format(range.to, 'MMM d, yyyy')}\n </p>\n ) : (\n <div className='grow text-left text-content-placeholder'>\n {selectingStart ? 'Start date' : 'End date'}\n </div>\n )}\n </div>\n ) : (\n <div className='flex grow items-center gap-4'>\n <p className='mt-1 grow p-0 text-left font-body text-content-placeholder'>Start date</p>\n <ArrowRight size={14} className='text-content-primary' />\n <p className='mt-1 grow p-0 text-left font-body text-content-placeholder'>End date</p>\n </div>\n )}\n </PopoverTrigger>\n <PopoverContent className={cn('w-auto p-0', classNames?.popOverContent)} align='start'>\n <Calendar\n mode='single'\n numberOfMonths={numberOfMonths}\n selected={selectingStart ? range.from : range.to}\n modifiers={{\n range_start: range.from ? [range.from] : [],\n range_middle:\n range.from && range.to ? { from: range.from, to: subDays(range.to, 1) } : undefined,\n range_end: range.to ? [range.to] : [],\n }}\n onSelect={(date) => {\n handleSelect(date);\n }}\n {...props}\n />\n </PopoverContent>\n </Popover>\n );\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}