snack-datepicker 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/utils.ts","../src/components/date-picker/MonthGrid.tsx","../src/components/date-picker/MonthSelector.tsx","../src/components/date-picker/YearSelector.tsx","../src/components/date-picker/DatePicker.tsx"],"names":["twMerge","clsx","useMemo","eachDayOfInterval","startOfMonth","endOfMonth","isBefore","isAfter","isSameDay","jsxs","jsx","format","isWithinInterval","React","getMonth","motion","useState","useCallback","subMonths","ChevronLeft","addMonths","ChevronRight","AnimatePresence","setMonth","getYear","setYear","RotateCcw"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","import React, { useMemo } from \"react\";\r\nimport {\r\n format,\r\n startOfMonth,\r\n endOfMonth,\r\n eachDayOfInterval,\r\n isSameDay,\r\n isWithinInterval,\r\n isBefore,\r\n isAfter,\r\n} from \"date-fns\";\r\nimport type { DatePickerMode, DateRange } from \"./types\";\r\nimport { cn } from \"../../lib/utils\";\r\n\r\ninterface MonthGridProps {\r\n month: Date;\r\n mode: DatePickerMode;\r\n selectedDate: Date | null;\r\n selectedRange: DateRange | null;\r\n hoverDate: Date | null;\r\n onDateClick: (date: Date) => void;\r\n onDateHover: (date: Date | null) => void;\r\n minDate?: Date;\r\n maxDate?: Date;\r\n disabledDates?: Date[];\r\n weekStart?: 0 | 1;\r\n renderDay?: (date: Date) => React.ReactNode;\r\n showLabel?: boolean;\r\n}\r\n\r\nconst WEEK_DAYS_SUN = [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"];\r\nconst WEEK_DAYS_MON = [\"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\", \"Su\"];\r\n\r\nconst MonthGrid: React.FC<MonthGridProps> = ({\r\n month,\r\n mode,\r\n selectedDate,\r\n selectedRange,\r\n hoverDate,\r\n onDateClick,\r\n onDateHover,\r\n minDate,\r\n maxDate,\r\n disabledDates = [],\r\n weekStart = 0,\r\n renderDay,\r\n showLabel = true,\r\n}) => {\r\n const days = useMemo(() => {\r\n return eachDayOfInterval({\r\n start: startOfMonth(month),\r\n end: endOfMonth(month),\r\n });\r\n }, [month]);\r\n\r\n const weekDays = weekStart === 1 ? WEEK_DAYS_MON : WEEK_DAYS_SUN;\r\n\r\n const startPad = useMemo(() => {\r\n const dayOfWeek = days[0].getDay();\r\n return weekStart === 1 ? (dayOfWeek === 0 ? 6 : dayOfWeek - 1) : dayOfWeek;\r\n }, [days, weekStart]);\r\n\r\n const isDisabled = (date: Date) => {\r\n if (minDate && isBefore(date, minDate)) return true;\r\n if (maxDate && isAfter(date, maxDate)) return true;\r\n return disabledDates.some((d) => isSameDay(d, date));\r\n };\r\n\r\n return (\r\n <div className=\"flex-1 min-w-[252px]\">\r\n {showLabel && (\r\n <div className=\"text-center mb-3\">\r\n <span className=\"text-sm font-medium text-dp-text\">\r\n {format(month, \"MMMM yyyy\")}\r\n </span>\r\n </div>\r\n )}\r\n <div className=\"grid grid-cols-7 mb-1.5\">\r\n {weekDays.map((d) => (\r\n <span\r\n key={d}\r\n className=\"text-[11px] font-semibold text-dp-text-muted text-center uppercase tracking-wider py-1\"\r\n >\r\n {d}\r\n </span>\r\n ))}\r\n </div>\r\n <div className=\"grid grid-cols-7\">\r\n {[...Array(startPad)].map((_, i) => (\r\n <div key={`pad-${i}`} className=\"h-9 w-9\" />\r\n ))}\r\n {days.map((day) => {\r\n const disabled = isDisabled(day);\r\n const isSelected =\r\n mode === \"single\"\r\n ? selectedDate && isSameDay(day, selectedDate)\r\n : selectedRange &&\r\n ((selectedRange.start && isSameDay(day, selectedRange.start)) ||\r\n (selectedRange.end && isSameDay(day, selectedRange.end)));\r\n\r\n const isStart =\r\n mode === \"range\" &&\r\n selectedRange?.start &&\r\n isSameDay(day, selectedRange.start);\r\n const isEnd =\r\n mode === \"range\" &&\r\n selectedRange?.end &&\r\n isSameDay(day, selectedRange.end);\r\n\r\n let inRange = false;\r\n if (mode === \"range\" && selectedRange?.start) {\r\n if (selectedRange.end) {\r\n inRange = isWithinInterval(day, {\r\n start: selectedRange.start,\r\n end: selectedRange.end,\r\n });\r\n } else if (hoverDate) {\r\n const rangeStart = isBefore(hoverDate, selectedRange.start)\r\n ? hoverDate\r\n : selectedRange.start;\r\n const rangeEnd = isBefore(hoverDate, selectedRange.start)\r\n ? selectedRange.start\r\n : hoverDate;\r\n inRange = isWithinInterval(day, {\r\n start: rangeStart,\r\n end: rangeEnd,\r\n });\r\n }\r\n }\r\n\r\n return (\r\n <button\r\n key={day.toISOString()}\r\n type=\"button\"\r\n disabled={disabled}\r\n onClick={() => !disabled && onDateClick(day)}\r\n onMouseEnter={() => !disabled && onDateHover(day)}\r\n onMouseLeave={() => onDateHover(null)}\r\n aria-label={format(day, \"PPPP\")}\r\n aria-selected={!!isSelected}\r\n className={cn(\r\n \"relative h-9 w-9 text-sm flex items-center justify-center transition-all tabular-nums\",\r\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\r\n \"active:scale-[0.96]\",\r\n // Default\r\n !isSelected &&\r\n !inRange &&\r\n \"text-dp-text hover:bg-dp-surface-hover rounded-lg\",\r\n // Selected (start/end/single)\r\n isSelected &&\r\n \"bg-dp-surface-active text-dp-text-selected z-10 shadow-sm font-semibold\",\r\n // Single mode selected\r\n mode === \"single\" && isSelected && \"rounded-lg\",\r\n // Range endpoints\r\n isStart && !isEnd && \"rounded-l-lg rounded-r-none\",\r\n isEnd && !isStart && \"rounded-r-lg rounded-l-none\",\r\n isStart && isEnd && \"rounded-lg\",\r\n // In range but not selected\r\n inRange &&\r\n !isSelected &&\r\n \"bg-[hsl(var(--dp-range-tint)/0.08)] text-primary rounded-none\",\r\n // Disabled\r\n disabled &&\r\n \"text-dp-text-muted/40 cursor-not-allowed hover:bg-transparent\",\r\n )}\r\n >\r\n {renderDay ? renderDay(day) : format(day, \"d\")}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default React.memo(MonthGrid);\r\n","import React from \"react\";\r\nimport { format, getMonth } from \"date-fns\";\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../../lib/utils\";\r\n\r\ninterface MonthSelectorProps {\r\n currentMonth: Date;\r\n onSelect: (month: number) => void;\r\n}\r\n\r\nconst MonthSelector: React.FC<MonthSelectorProps> = ({\r\n currentMonth,\r\n onSelect,\r\n}) => {\r\n const current = getMonth(currentMonth);\r\n\r\n return (\r\n <motion.div\r\n key=\"month-selector\"\r\n initial={{ opacity: 0, y: 4 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n exit={{ opacity: 0, y: -4 }}\r\n transition={{ duration: 0.15, ease: [0.25, 0.1, 0.25, 1] }}\r\n className=\"grid grid-cols-3 gap-2 w-full max-w-[320px] mx-auto\"\r\n >\r\n {Array.from({ length: 12 }).map((_, i) => (\r\n <button\r\n key={i}\r\n type=\"button\"\r\n onClick={() => onSelect(i)}\r\n className={cn(\r\n \"py-3 text-sm font-medium rounded-lg transition-all active:scale-[0.97]\",\r\n current === i\r\n ? \"bg-dp-surface-active text-dp-text-selected shadow-sm\"\r\n : \"hover:bg-dp-surface-hover text-dp-text\",\r\n )}\r\n >\r\n {format(new Date(2024, i, 1), \"MMM\")}\r\n </button>\r\n ))}\r\n </motion.div>\r\n );\r\n};\r\n\r\nexport default MonthSelector;\r\n","import React from \"react\";\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../../lib/utils\";\r\n\r\ninterface YearSelectorProps {\r\n currentYear: number;\r\n onSelect: (year: number) => void;\r\n minDate?: Date;\r\n maxDate?: Date;\r\n}\r\n\r\nconst YearSelector: React.FC<YearSelectorProps> = ({\r\n currentYear,\r\n onSelect,\r\n minDate,\r\n maxDate,\r\n}) => {\r\n const years = Array.from({ length: 12 }, (_, i) => currentYear - 5 + i);\r\n\r\n return (\r\n <motion.div\r\n key=\"year-selector\"\r\n initial={{ opacity: 0, y: 4 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n exit={{ opacity: 0, y: -4 }}\r\n transition={{ duration: 0.15, ease: [0.25, 0.1, 0.25, 1] }}\r\n className=\"grid grid-cols-3 gap-2 w-full max-w-[320px] mx-auto\"\r\n >\r\n {years.map((y) => {\r\n const disabled =\r\n (minDate && y < minDate.getFullYear()) ||\r\n (maxDate && y > maxDate.getFullYear());\r\n return (\r\n <button\r\n key={y}\r\n type=\"button\"\r\n disabled={!!disabled}\r\n onClick={() => !disabled && onSelect(y)}\r\n className={cn(\r\n \"py-3 text-sm font-medium rounded-lg transition-all active:scale-[0.97]\",\r\n currentYear === y\r\n ? \"bg-dp-surface-active text-dp-text-selected shadow-sm\"\r\n : \"hover:bg-dp-surface-hover text-dp-text\",\r\n disabled && \"opacity-30 cursor-not-allowed\",\r\n )}\r\n >\r\n {y}\r\n </button>\r\n );\r\n })}\r\n </motion.div>\r\n );\r\n};\r\n\r\nexport default YearSelector;\r\n","import React, { useState, useCallback, useEffect } from \"react\";\r\nimport {\r\n format,\r\n addMonths,\r\n subMonths,\r\n setMonth,\r\n setYear,\r\n getYear,\r\n isBefore,\r\n isSameDay,\r\n} from \"date-fns\";\r\nimport { ChevronLeft, ChevronRight, RotateCcw } from \"lucide-react\";\r\nimport { AnimatePresence, motion } from \"framer-motion\";\r\nimport MonthGrid from \"./MonthGrid\";\r\nimport MonthSelector from \"./MonthSelector\";\r\nimport YearSelector from \"./YearSelector\";\r\nimport type { DatePickerProps, DateRange } from \"./types\";\r\nimport { cn } from \"../../lib/utils\";\r\n\r\ntype ViewMode = \"calendar\" | \"month\" | \"year\";\r\n\r\nexport const DatePicker = React.forwardRef<HTMLDivElement, DatePickerProps>(\r\n (\r\n {\r\n mode = \"single\",\r\n value,\r\n onChange,\r\n onApply,\r\n onReset,\r\n minDate,\r\n maxDate,\r\n disabledDates,\r\n weekStart = 0,\r\n numberOfMonths = 2,\r\n showFooter = true,\r\n className,\r\n renderDay,\r\n presets,\r\n },\r\n ref,\r\n ) => {\r\n const [viewDate, setViewDate] = useState(() => {\r\n if (mode === \"single\" && value instanceof Date) return value;\r\n if (mode === \"range\" && value && \"start\" in value && value.start)\r\n return value.start;\r\n return new Date();\r\n });\r\n const [viewMode, setViewMode] = useState<ViewMode>(\"calendar\");\r\n const [hoverDate, setHoverDate] = useState<Date | null>(null);\r\n\r\n const selectedRange =\r\n mode === \"range\" ? ((value as DateRange | undefined) ?? null) : null;\r\n const selectedDate =\r\n mode === \"single\" ? ((value as Date | undefined) ?? null) : null;\r\n\r\n const handleDateClick = useCallback(\r\n (date: Date) => {\r\n if (mode === \"single\") {\r\n onChange?.(date);\r\n } else {\r\n const range = selectedRange || { start: null, end: null };\r\n if (!range.start || (range.start && range.end)) {\r\n onChange?.({ start: date, end: null });\r\n } else {\r\n if (isBefore(date, range.start)) {\r\n onChange?.({ start: date, end: range.start });\r\n } else if (isSameDay(date, range.start)) {\r\n onChange?.({ start: date, end: date });\r\n } else {\r\n onChange?.({ start: range.start, end: date });\r\n }\r\n }\r\n }\r\n },\r\n [mode, selectedRange, onChange],\r\n );\r\n\r\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\r\n if (e.key === \"Escape\") {\r\n setViewMode(\"calendar\");\r\n }\r\n }, []);\r\n\r\n const handlePresetClick = useCallback(\r\n (preset: { getValue: () => DateRange }) => {\r\n const range = preset.getValue();\r\n onChange?.(range);\r\n },\r\n [onChange],\r\n );\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\r\n \"inline-flex flex-col rounded-xl border border-dp-border bg-dp-surface select-none antialiased\",\r\n \"shadow-[var(--dp-shadow)]\",\r\n className,\r\n )}\r\n onKeyDown={handleKeyDown}\r\n role=\"application\"\r\n aria-label=\"Date picker\"\r\n >\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-dp-border\">\r\n <button\r\n type=\"button\"\r\n onClick={() => setViewDate(subMonths(viewDate, 1))}\r\n className=\"p-1.5 rounded-md hover:bg-dp-surface-hover text-dp-text-muted hover:text-dp-text transition-colors\"\r\n aria-label=\"Previous month\"\r\n >\r\n <ChevronLeft size={16} />\r\n </button>\r\n\r\n <div className=\"flex items-center gap-1\">\r\n <button\r\n type=\"button\"\r\n onClick={() =>\r\n setViewMode(viewMode === \"month\" ? \"calendar\" : \"month\")\r\n }\r\n className={cn(\r\n \"text-sm font-semibold px-2 py-1 rounded-md transition-colors\",\r\n viewMode === \"month\"\r\n ? \"bg-dp-surface-hover text-dp-text\"\r\n : \"hover:bg-dp-surface-hover text-dp-text\",\r\n )}\r\n >\r\n {format(viewDate, \"MMMM\")}\r\n </button>\r\n <button\r\n type=\"button\"\r\n onClick={() =>\r\n setViewMode(viewMode === \"year\" ? \"calendar\" : \"year\")\r\n }\r\n className={cn(\r\n \"text-sm font-semibold px-2 py-1 rounded-md transition-colors\",\r\n viewMode === \"year\"\r\n ? \"bg-dp-surface-hover text-dp-text\"\r\n : \"hover:bg-dp-surface-hover text-dp-text\",\r\n )}\r\n >\r\n {format(viewDate, \"yyyy\")}\r\n </button>\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n onClick={() => setViewDate(addMonths(viewDate, 1))}\r\n className=\"p-1.5 rounded-md hover:bg-dp-surface-hover text-dp-text-muted hover:text-dp-text transition-colors\"\r\n aria-label=\"Next month\"\r\n >\r\n <ChevronRight size={16} />\r\n </button>\r\n </div>\r\n\r\n {/* Body */}\r\n <div className=\"flex\">\r\n {/* Presets sidebar */}\r\n {presets && presets.length > 0 && (\r\n <div className=\"border-r border-dp-border p-3 min-w-[140px] flex flex-col gap-0.5\">\r\n {presets.map((preset) => (\r\n <button\r\n key={preset.label}\r\n type=\"button\"\r\n onClick={() => handlePresetClick(preset)}\r\n className=\"text-left text-xs font-medium px-2.5 py-1.5 rounded-md text-dp-text-muted hover:text-dp-text hover:bg-dp-surface-hover transition-colors\"\r\n >\r\n {preset.label}\r\n </button>\r\n ))}\r\n </div>\r\n )}\r\n\r\n <div className=\"p-4 flex-1\">\r\n <AnimatePresence mode=\"wait\">\r\n {viewMode === \"calendar\" && (\r\n <motion.div\r\n key=\"calendar\"\r\n initial={{ opacity: 0, y: 4 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n exit={{ opacity: 0, y: -4 }}\r\n transition={{ duration: 0.15, ease: [0.25, 0.1, 0.25, 1] }}\r\n className=\"flex flex-col md:flex-row gap-6\"\r\n >\r\n {[...Array(numberOfMonths)].map((_, i) => (\r\n <MonthGrid\r\n key={i}\r\n month={addMonths(viewDate, i)}\r\n mode={mode}\r\n selectedDate={selectedDate}\r\n selectedRange={selectedRange}\r\n hoverDate={hoverDate}\r\n onDateClick={handleDateClick}\r\n onDateHover={setHoverDate}\r\n minDate={minDate}\r\n maxDate={maxDate}\r\n disabledDates={disabledDates}\r\n weekStart={weekStart}\r\n renderDay={renderDay}\r\n showLabel={numberOfMonths > 1}\r\n />\r\n ))}\r\n </motion.div>\r\n )}\r\n\r\n {viewMode === \"month\" && (\r\n <MonthSelector\r\n currentMonth={viewDate}\r\n onSelect={(m) => {\r\n setViewDate(setMonth(viewDate, m));\r\n setViewMode(\"calendar\");\r\n }}\r\n />\r\n )}\r\n\r\n {viewMode === \"year\" && (\r\n <YearSelector\r\n currentYear={getYear(viewDate)}\r\n onSelect={(y) => {\r\n setViewDate(setYear(viewDate, y));\r\n setViewMode(\"calendar\");\r\n }}\r\n minDate={minDate}\r\n maxDate={maxDate}\r\n />\r\n )}\r\n </AnimatePresence>\r\n </div>\r\n </div>\r\n\r\n {/* Footer */}\r\n {showFooter && (\r\n <div className=\"flex items-center justify-between px-4 py-3 bg-dp-footer border-t border-dp-border rounded-b-xl\">\r\n <button\r\n type=\"button\"\r\n onClick={onReset}\r\n className=\"flex items-center gap-1.5 text-xs font-medium text-dp-text-muted hover:text-dp-text transition-colors\"\r\n >\r\n <RotateCcw size={13} />\r\n Reset\r\n </button>\r\n <button\r\n type=\"button\"\r\n onClick={() => onApply?.(value)}\r\n className=\"px-5 py-1.5 bg-primary text-primary-foreground text-xs font-semibold rounded hover:opacity-90 shadow-sm transition-all active:scale-[0.98]\"\r\n >\r\n Apply\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n },\r\n);\r\n\r\nDatePicker.displayName = \"DatePicker\";\r\n\r\nexport default DatePicker;\r\n"]}
1
+ {"version":3,"sources":["../src/lib/utils.ts","../src/components/date-picker/MonthGrid.tsx","../src/components/date-picker/MonthSelector.tsx","../src/components/date-picker/YearSelector.tsx","../src/components/date-picker/DatePicker.tsx","../src/components/ui/popover.tsx","../src/components/date-picker/DatePickerInput.tsx"],"names":["twMerge","clsx","useMemo","eachDayOfInterval","startOfMonth","endOfMonth","isBefore","isAfter","isSameDay","jsxs","jsx","format","isWithinInterval","React","getMonth","motion","useState","useCallback","subMonths","ChevronLeft","addMonths","ChevronRight","AnimatePresence","setMonth","getYear","setYear","RotateCcw","PopoverPrimitive","React3","CalendarIcon","X"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","import React, { useMemo } from \"react\";\r\nimport {\r\n format,\r\n startOfMonth,\r\n endOfMonth,\r\n eachDayOfInterval,\r\n isSameDay,\r\n isWithinInterval,\r\n isBefore,\r\n isAfter,\r\n} from \"date-fns\";\r\nimport type { DatePickerMode, DateRange } from \"./types\";\r\nimport { cn } from \"../../lib/utils\";\r\n\r\ninterface MonthGridProps {\r\n month: Date;\r\n mode: DatePickerMode;\r\n selectedDate: Date | null;\r\n selectedRange: DateRange | null;\r\n hoverDate: Date | null;\r\n onDateClick: (date: Date) => void;\r\n onDateHover: (date: Date | null) => void;\r\n minDate?: Date;\r\n maxDate?: Date;\r\n disabledDates?: Date[];\r\n weekStart?: 0 | 1;\r\n renderDay?: (date: Date) => React.ReactNode;\r\n showLabel?: boolean;\r\n}\r\n\r\nconst WEEK_DAYS_SUN = [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"];\r\nconst WEEK_DAYS_MON = [\"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\", \"Su\"];\r\n\r\nconst MonthGrid: React.FC<MonthGridProps> = ({\r\n month,\r\n mode,\r\n selectedDate,\r\n selectedRange,\r\n hoverDate,\r\n onDateClick,\r\n onDateHover,\r\n minDate,\r\n maxDate,\r\n disabledDates = [],\r\n weekStart = 0,\r\n renderDay,\r\n showLabel = true,\r\n}) => {\r\n const days = useMemo(() => {\r\n return eachDayOfInterval({\r\n start: startOfMonth(month),\r\n end: endOfMonth(month),\r\n });\r\n }, [month]);\r\n\r\n const weekDays = weekStart === 1 ? WEEK_DAYS_MON : WEEK_DAYS_SUN;\r\n\r\n const startPad = useMemo(() => {\r\n const dayOfWeek = days[0].getDay();\r\n return weekStart === 1 ? (dayOfWeek === 0 ? 6 : dayOfWeek - 1) : dayOfWeek;\r\n }, [days, weekStart]);\r\n\r\n const isDisabled = (date: Date) => {\r\n if (minDate && isBefore(date, minDate)) return true;\r\n if (maxDate && isAfter(date, maxDate)) return true;\r\n return disabledDates.some((d) => isSameDay(d, date));\r\n };\r\n\r\n return (\r\n <div className=\"flex-1 min-w-[252px]\">\r\n {showLabel && (\r\n <div className=\"text-center mb-3\">\r\n <span className=\"text-sm font-medium text-gray-900\">\r\n {format(month, \"MMMM yyyy\")}\r\n </span>\r\n </div>\r\n )}\r\n <div className=\"grid grid-cols-7 mb-1.5\">\r\n {weekDays.map((d) => (\r\n <span\r\n key={d}\r\n className=\"text-[11px] font-semibold text-gray-400 text-center uppercase tracking-wider py-1\"\r\n >\r\n {d}\r\n </span>\r\n ))}\r\n </div>\r\n <div className=\"grid grid-cols-7\">\r\n {[...Array(startPad)].map((_, i) => (\r\n <div key={`pad-${i}`} className=\"h-9 w-9\" />\r\n ))}\r\n {days.map((day) => {\r\n const disabled = isDisabled(day);\r\n const isSelected =\r\n mode === \"single\"\r\n ? selectedDate && isSameDay(day, selectedDate)\r\n : selectedRange &&\r\n ((selectedRange.start && isSameDay(day, selectedRange.start)) ||\r\n (selectedRange.end && isSameDay(day, selectedRange.end)));\r\n\r\n const isStart =\r\n mode === \"range\" &&\r\n selectedRange?.start &&\r\n isSameDay(day, selectedRange.start);\r\n const isEnd =\r\n mode === \"range\" &&\r\n selectedRange?.end &&\r\n isSameDay(day, selectedRange.end);\r\n\r\n let inRange = false;\r\n if (mode === \"range\" && selectedRange?.start) {\r\n if (selectedRange.end) {\r\n inRange = isWithinInterval(day, {\r\n start: selectedRange.start,\r\n end: selectedRange.end,\r\n });\r\n } else if (hoverDate) {\r\n const rangeStart = isBefore(hoverDate, selectedRange.start)\r\n ? hoverDate\r\n : selectedRange.start;\r\n const rangeEnd = isBefore(hoverDate, selectedRange.start)\r\n ? selectedRange.start\r\n : hoverDate;\r\n inRange = isWithinInterval(day, {\r\n start: rangeStart,\r\n end: rangeEnd,\r\n });\r\n }\r\n }\r\n\r\n return (\r\n <button\r\n key={day.toISOString()}\r\n type=\"button\"\r\n disabled={disabled}\r\n onClick={() => !disabled && onDateClick(day)}\r\n onMouseEnter={() => !disabled && onDateHover(day)}\r\n onMouseLeave={() => onDateHover(null)}\r\n aria-label={format(day, \"PPPP\")}\r\n aria-selected={!!isSelected}\r\n className={cn(\r\n \"relative h-9 w-9 text-sm flex items-center justify-center transition-all tabular-nums\",\r\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-1\",\r\n \"active:scale-[0.96]\",\r\n // Default\r\n !isSelected &&\r\n !inRange &&\r\n \"text-gray-900 hover:bg-gray-100 rounded-lg\",\r\n // Selected (start/end/single)\r\n isSelected &&\r\n \"bg-primary text-primary-foreground z-10 shadow-sm font-semibold\",\r\n // Single mode selected\r\n mode === \"single\" && isSelected && \"rounded-lg\",\r\n // Range endpoints\r\n isStart && !isEnd && \"rounded-l-lg rounded-r-none\",\r\n isEnd && !isStart && \"rounded-r-lg rounded-l-none\",\r\n isStart && isEnd && \"rounded-lg\",\r\n // In range but not selected\r\n inRange &&\r\n !isSelected &&\r\n \"bg-primary/10 text-primary rounded-none\",\r\n // Disabled\r\n disabled &&\r\n \"text-primary/40 cursor-not-allowed hover:bg-transparent\",\r\n )}\r\n >\r\n {renderDay ? renderDay(day) : format(day, \"d\")}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default React.memo(MonthGrid);\r\n","import React from \"react\";\r\nimport { format, getMonth } from \"date-fns\";\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../../lib/utils\";\r\n\r\ninterface MonthSelectorProps {\r\n currentMonth: Date;\r\n onSelect: (month: number) => void;\r\n}\r\n\r\nconst MonthSelector: React.FC<MonthSelectorProps> = ({\r\n currentMonth,\r\n onSelect,\r\n}) => {\r\n const current = getMonth(currentMonth);\r\n\r\n return (\r\n <motion.div\r\n key=\"month-selector\"\r\n initial={{ opacity: 0, y: 4 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n exit={{ opacity: 0, y: -4 }}\r\n transition={{ duration: 0.15, ease: [0.25, 0.1, 0.25, 1] }}\r\n className=\"grid grid-cols-3 gap-2 w-full max-w-[320px] mx-auto\"\r\n >\r\n {Array.from({ length: 12 }).map((_, i) => (\r\n <button\r\n key={i}\r\n type=\"button\"\r\n onClick={() => onSelect(i)}\r\n className={cn(\r\n \"py-3 text-sm font-medium rounded-lg transition-all active:scale-[0.97]\",\r\n current === i\r\n ? \"bg-primary text-primary-foreground shadow-sm\"\r\n : \"hover:bg-gray-100 text-gray-900\",\r\n )}\r\n >\r\n {format(new Date(2024, i, 1), \"MMM\")}\r\n </button>\r\n ))}\r\n </motion.div>\r\n );\r\n};\r\n\r\nexport default MonthSelector;\r\n","import React from \"react\";\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../../lib/utils\";\r\n\r\ninterface YearSelectorProps {\r\n currentYear: number;\r\n onSelect: (year: number) => void;\r\n minDate?: Date;\r\n maxDate?: Date;\r\n}\r\n\r\nconst YearSelector: React.FC<YearSelectorProps> = ({\r\n currentYear,\r\n onSelect,\r\n minDate,\r\n maxDate,\r\n}) => {\r\n const years = Array.from({ length: 12 }, (_, i) => currentYear - 5 + i);\r\n\r\n return (\r\n <motion.div\r\n key=\"year-selector\"\r\n initial={{ opacity: 0, y: 4 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n exit={{ opacity: 0, y: -4 }}\r\n transition={{ duration: 0.15, ease: [0.25, 0.1, 0.25, 1] }}\r\n className=\"grid grid-cols-3 gap-2 w-full max-w-[320px] mx-auto\"\r\n >\r\n {years.map((y) => {\r\n const disabled =\r\n (minDate && y < minDate.getFullYear()) ||\r\n (maxDate && y > maxDate.getFullYear());\r\n return (\r\n <button\r\n key={y}\r\n type=\"button\"\r\n disabled={!!disabled}\r\n onClick={() => !disabled && onSelect(y)}\r\n className={cn(\r\n \"py-3 text-sm font-medium rounded-lg transition-all active:scale-[0.97]\",\r\n currentYear === y\r\n ? \"bg-primary text-primary-foreground shadow-sm\"\r\n : \"hover:bg-gray-100 text-gray-900\",\r\n disabled && \"opacity-30 cursor-not-allowed\",\r\n )}\r\n >\r\n {y}\r\n </button>\r\n );\r\n })}\r\n </motion.div>\r\n );\r\n};\r\n\r\nexport default YearSelector;\r\n","import React, { useState, useCallback, useEffect } from \"react\";\r\nimport {\r\n format,\r\n addMonths,\r\n subMonths,\r\n setMonth,\r\n setYear,\r\n getYear,\r\n isBefore,\r\n isSameDay,\r\n} from \"date-fns\";\r\nimport { ChevronLeft, ChevronRight, RotateCcw } from \"lucide-react\";\r\nimport { AnimatePresence, motion } from \"framer-motion\";\r\nimport MonthGrid from \"./MonthGrid\";\r\nimport MonthSelector from \"./MonthSelector\";\r\nimport YearSelector from \"./YearSelector\";\r\nimport type { DatePickerProps, DateRange } from \"./types\";\r\nimport { cn } from \"../../lib/utils\";\r\n\r\ntype ViewMode = \"calendar\" | \"month\" | \"year\";\r\n\r\nexport const DatePicker = React.forwardRef<HTMLDivElement, DatePickerProps>(\r\n (\r\n {\r\n mode = \"single\",\r\n value,\r\n onChange,\r\n onApply,\r\n onReset,\r\n minDate,\r\n maxDate,\r\n disabledDates,\r\n weekStart = 0,\r\n numberOfMonths = 2,\r\n showFooter = true,\r\n className,\r\n renderDay,\r\n presets,\r\n },\r\n ref,\r\n ) => {\r\n const [viewDate, setViewDate] = useState(() => {\r\n if (mode === \"single\" && value instanceof Date) return value;\r\n if (mode === \"range\" && value && \"start\" in value && value.start)\r\n return value.start;\r\n return new Date();\r\n });\r\n const [viewMode, setViewMode] = useState<ViewMode>(\"calendar\");\r\n const [hoverDate, setHoverDate] = useState<Date | null>(null);\r\n\r\n const selectedRange =\r\n mode === \"range\" ? ((value as DateRange | undefined) ?? null) : null;\r\n const selectedDate =\r\n mode === \"single\" ? ((value as Date | undefined) ?? null) : null;\r\n\r\n const handleDateClick = useCallback(\r\n (date: Date) => {\r\n if (mode === \"single\") {\r\n onChange?.(date);\r\n } else {\r\n const range = selectedRange || { start: null, end: null };\r\n if (!range.start || (range.start && range.end)) {\r\n onChange?.({ start: date, end: null });\r\n } else {\r\n if (isBefore(date, range.start)) {\r\n onChange?.({ start: date, end: range.start });\r\n } else if (isSameDay(date, range.start)) {\r\n onChange?.({ start: date, end: date });\r\n } else {\r\n onChange?.({ start: range.start, end: date });\r\n }\r\n }\r\n }\r\n },\r\n [mode, selectedRange, onChange],\r\n );\r\n\r\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\r\n if (e.key === \"Escape\") {\r\n setViewMode(\"calendar\");\r\n }\r\n }, []);\r\n\r\n const handlePresetClick = useCallback(\r\n (preset: { getValue: () => DateRange }) => {\r\n const range = preset.getValue();\r\n onChange?.(range);\r\n },\r\n [onChange],\r\n );\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\r\n \"inline-flex flex-col rounded-xl border border-gray-200 bg-white select-none antialiased\",\r\n \"shadow-md\",\r\n className,\r\n )}\r\n onKeyDown={handleKeyDown}\r\n role=\"application\"\r\n aria-label=\"Date picker\"\r\n >\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-gray-200\">\r\n <button\r\n type=\"button\"\r\n onClick={() => setViewDate(subMonths(viewDate, 1))}\r\n className=\"p-1.5 rounded-md hover:bg-gray-100 text-gray-400 hover:text-gray-900 transition-colors\"\r\n aria-label=\"Previous month\"\r\n >\r\n <ChevronLeft size={16} />\r\n </button>\r\n\r\n <div className=\"flex items-center gap-1\">\r\n <button\r\n type=\"button\"\r\n onClick={() =>\r\n setViewMode(viewMode === \"month\" ? \"calendar\" : \"month\")\r\n }\r\n className={cn(\r\n \"text-sm font-semibold px-2 py-1 rounded-md transition-colors\",\r\n viewMode === \"month\"\r\n ? \"bg-gray-100 text-gray-900\"\r\n : \"hover:bg-gray-100 text-gray-900\",\r\n )}\r\n >\r\n {format(viewDate, \"MMMM\")}\r\n </button>\r\n <button\r\n type=\"button\"\r\n onClick={() =>\r\n setViewMode(viewMode === \"year\" ? \"calendar\" : \"year\")\r\n }\r\n className={cn(\r\n \"text-sm font-semibold px-2 py-1 rounded-md transition-colors\",\r\n viewMode === \"year\"\r\n ? \"bg-gray-100 text-gray-900\"\r\n : \"hover:bg-gray-100 text-gray-900\",\r\n )}\r\n >\r\n {format(viewDate, \"yyyy\")}\r\n </button>\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n onClick={() => setViewDate(addMonths(viewDate, 1))}\r\n className=\"p-1.5 rounded-md hover:bg-gray-100 text-gray-400 hover:text-gray-900 transition-colors\"\r\n aria-label=\"Next month\"\r\n >\r\n <ChevronRight size={16} />\r\n </button>\r\n </div>\r\n\r\n {/* Body */}\r\n <div className=\"flex\">\r\n {/* Presets sidebar */}\r\n {presets && presets.length > 0 && (\r\n <div className=\"border-r border-gray-200 p-3 min-w-[140px] flex flex-col gap-0.5\">\r\n {presets.map((preset) => (\r\n <button\r\n key={preset.label}\r\n type=\"button\"\r\n onClick={() => handlePresetClick(preset)}\r\n className=\"text-left text-xs font-medium px-2.5 py-1.5 rounded-md text-gray-400 hover:text-gray-900 hover:bg-gray-100 transition-colors\"\r\n >\r\n {preset.label}\r\n </button>\r\n ))}\r\n </div>\r\n )}\r\n\r\n <div className=\"p-4 flex-1\">\r\n <AnimatePresence mode=\"wait\">\r\n {viewMode === \"calendar\" && (\r\n <motion.div\r\n key=\"calendar\"\r\n initial={{ opacity: 0, y: 4 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n exit={{ opacity: 0, y: -4 }}\r\n transition={{ duration: 0.15, ease: [0.25, 0.1, 0.25, 1] }}\r\n className=\"flex flex-col md:flex-row gap-6\"\r\n >\r\n {[...Array(numberOfMonths)].map((_, i) => (\r\n <MonthGrid\r\n key={i}\r\n month={addMonths(viewDate, i)}\r\n mode={mode}\r\n selectedDate={selectedDate}\r\n selectedRange={selectedRange}\r\n hoverDate={hoverDate}\r\n onDateClick={handleDateClick}\r\n onDateHover={setHoverDate}\r\n minDate={minDate}\r\n maxDate={maxDate}\r\n disabledDates={disabledDates}\r\n weekStart={weekStart}\r\n renderDay={renderDay}\r\n showLabel={numberOfMonths > 1}\r\n />\r\n ))}\r\n </motion.div>\r\n )}\r\n\r\n {viewMode === \"month\" && (\r\n <MonthSelector\r\n currentMonth={viewDate}\r\n onSelect={(m) => {\r\n setViewDate(setMonth(viewDate, m));\r\n setViewMode(\"calendar\");\r\n }}\r\n />\r\n )}\r\n\r\n {viewMode === \"year\" && (\r\n <YearSelector\r\n currentYear={getYear(viewDate)}\r\n onSelect={(y) => {\r\n setViewDate(setYear(viewDate, y));\r\n setViewMode(\"calendar\");\r\n }}\r\n minDate={minDate}\r\n maxDate={maxDate}\r\n />\r\n )}\r\n </AnimatePresence>\r\n </div>\r\n </div>\r\n\r\n {/* Footer */}\r\n {showFooter && (\r\n <div className=\"flex items-center justify-between px-4 py-3 bg-gray-50 border-t border-gray-200 rounded-b-xl\">\r\n <button\r\n type=\"button\"\r\n onClick={onReset}\r\n className=\"flex items-center gap-1.5 text-xs font-medium text-gray-400 hover:text-gray-900 transition-colors\"\r\n >\r\n <RotateCcw size={13} />\r\n Reset\r\n </button>\r\n <button\r\n type=\"button\"\r\n onClick={() => onApply?.(value)}\r\n className=\"px-5 py-1.5 bg-primary text-primary-foreground text-xs font-semibold rounded hover:opacity-90 shadow-sm transition-all active:scale-[0.98]\"\r\n >\r\n Apply\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n },\r\n);\r\n\r\nDatePicker.displayName = \"DatePicker\";\r\n\r\nexport default DatePicker;\r\n","import * as React from \"react\";\r\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\r\nimport { cn } from \"../../lib/utils\";\r\n\r\nconst Popover = PopoverPrimitive.Root;\r\n\r\nconst PopoverTrigger = PopoverPrimitive.Trigger;\r\n\r\nconst PopoverContent = React.forwardRef<\r\n React.ElementRef<typeof PopoverPrimitive.Content>,\r\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\r\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\r\n <PopoverPrimitive.Portal>\r\n <PopoverPrimitive.Content\r\n ref={ref}\r\n align={align}\r\n sideOffset={sideOffset}\r\n className={cn(\r\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n </PopoverPrimitive.Portal>\r\n));\r\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\r\n\r\nexport { Popover, PopoverTrigger, PopoverContent };\r\n","import React, { useState, useCallback } from \"react\";\r\nimport { format } from \"date-fns\";\r\nimport { CalendarIcon, X } from \"lucide-react\";\r\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/popover\";\r\nimport { DatePicker } from \"./DatePicker\";\r\nimport type { DatePickerProps, DateRange } from \"./types\";\r\nimport { cn } from \"../../lib/utils\";\r\n\r\nexport interface DatePickerInputProps extends Omit<\r\n DatePickerProps,\r\n \"showFooter\" | \"className\"\r\n> {\r\n /** Placeholder text when no date is selected */\r\n placeholder?: string;\r\n /** Date display format string (date-fns format) */\r\n displayFormat?: string;\r\n /** Width class for the input trigger */\r\n triggerClassName?: string;\r\n /** Class for the popover content */\r\n popoverClassName?: string;\r\n /** Class for the calendar inside the popover */\r\n calendarClassName?: string;\r\n /** Whether the input is disabled */\r\n disabled?: boolean;\r\n /** Whether to show a clear button */\r\n clearable?: boolean;\r\n /** Popover alignment */\r\n align?: \"start\" | \"center\" | \"end\";\r\n /** Label text above the input */\r\n label?: string;\r\n}\r\n\r\nexport const DatePickerInput: React.FC<DatePickerInputProps> = ({\r\n mode = \"single\",\r\n value,\r\n onChange,\r\n onApply,\r\n onReset,\r\n placeholder,\r\n displayFormat = \"MMM d, yyyy\",\r\n triggerClassName,\r\n popoverClassName,\r\n calendarClassName,\r\n disabled = false,\r\n clearable = true,\r\n align = \"start\",\r\n label,\r\n numberOfMonths,\r\n presets,\r\n minDate,\r\n maxDate,\r\n disabledDates,\r\n weekStart,\r\n renderDay,\r\n}) => {\r\n const [open, setOpen] = useState(false);\r\n\r\n const defaultPlaceholder =\r\n mode === \"range\" ? \"Select date range...\" : \"Select a date...\";\r\n\r\n const displayValue = (() => {\r\n if (mode === \"single\" && value instanceof Date) {\r\n return format(value, displayFormat);\r\n }\r\n if (mode === \"range\" && value && \"start\" in value) {\r\n const range = value as DateRange;\r\n if (range.start && range.end) {\r\n return `${format(range.start, displayFormat)} – ${format(range.end, displayFormat)}`;\r\n }\r\n if (range.start) {\r\n return `${format(range.start, displayFormat)} – ...`;\r\n }\r\n }\r\n return \"\";\r\n })();\r\n\r\n const handleApply = useCallback(\r\n (val: Date | DateRange | undefined) => {\r\n onApply?.(val);\r\n setOpen(false);\r\n },\r\n [onApply],\r\n );\r\n\r\n const handleClear = useCallback(\r\n (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n onReset?.();\r\n },\r\n [onReset],\r\n );\r\n\r\n const handleChange = useCallback(\r\n (val: Date | DateRange) => {\r\n onChange?.(val);\r\n // Auto-close on single date selection (no footer)\r\n if (mode === \"single\") {\r\n setOpen(false);\r\n }\r\n },\r\n [onChange, mode],\r\n );\r\n\r\n return (\r\n <div className=\"flex flex-col gap-1.5\">\r\n {label && (\r\n <label className=\"text-sm font-medium text-foreground\">{label}</label>\r\n )}\r\n <Popover open={open} onOpenChange={setOpen}>\r\n <PopoverTrigger asChild>\r\n <button\r\n type=\"button\"\r\n disabled={disabled}\r\n className={cn(\r\n \"inline-flex items-center gap-2 h-10 px-3 rounded-lg border border-input bg-background text-sm\",\r\n \"ring-offset-background transition-colors\",\r\n \"hover:bg-accent/5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\r\n \"disabled:cursor-not-allowed disabled:opacity-50\",\r\n !displayValue && \"text-muted-foreground\",\r\n displayValue && \"text-foreground\",\r\n triggerClassName,\r\n )}\r\n >\r\n <CalendarIcon className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\r\n <span className=\"flex-1 text-left truncate\">\r\n {displayValue || placeholder || defaultPlaceholder}\r\n </span>\r\n {clearable && displayValue && (\r\n <span\r\n role=\"button\"\r\n tabIndex={0}\r\n onClick={handleClear}\r\n onKeyDown={(e) => e.key === \"Enter\" && handleClear(e as any)}\r\n className=\"shrink-0 p-0.5 rounded hover:bg-muted transition-colors\"\r\n aria-label=\"Clear selection\"\r\n >\r\n <X className=\"h-3.5 w-3.5 text-muted-foreground\" />\r\n </span>\r\n )}\r\n </button>\r\n </PopoverTrigger>\r\n <PopoverContent\r\n className={cn(\"w-auto p-0 pointer-events-auto\", popoverClassName)}\r\n align={align}\r\n sideOffset={8}\r\n >\r\n <DatePicker\r\n mode={mode}\r\n value={value}\r\n onChange={handleChange}\r\n onApply={mode === \"range\" ? handleApply : undefined}\r\n onReset={onReset}\r\n numberOfMonths={numberOfMonths ?? (mode === \"range\" ? 2 : 1)}\r\n showFooter={mode === \"range\"}\r\n presets={presets}\r\n minDate={minDate}\r\n maxDate={maxDate}\r\n disabledDates={disabledDates}\r\n weekStart={weekStart}\r\n renderDay={renderDay}\r\n className={cn(\"border-0 shadow-none\", calendarClassName)}\r\n />\r\n </PopoverContent>\r\n </Popover>\r\n </div>\r\n );\r\n};\r\n\r\nexport default DatePickerInput;\r\n"]}
package/dist/index.mjs CHANGED
@@ -1,10 +1,12 @@
1
- import React, { useState, useCallback, useMemo } from 'react';
1
+ import * as React from 'react';
2
+ import React__default, { useState, useCallback, useMemo } from 'react';
2
3
  import { isBefore, isSameDay, subMonths, format, addMonths, setMonth, setYear, getYear, eachDayOfInterval, endOfMonth, startOfMonth, isWithinInterval, getMonth, isAfter } from 'date-fns';
3
- import { ChevronLeft, ChevronRight, RotateCcw } from 'lucide-react';
4
+ import { ChevronLeft, ChevronRight, RotateCcw, CalendarIcon, X } from 'lucide-react';
4
5
  import { AnimatePresence, motion } from 'framer-motion';
5
6
  import { clsx } from 'clsx';
6
7
  import { twMerge } from 'tailwind-merge';
7
8
  import { jsxs, jsx } from 'react/jsx-runtime';
9
+ import * as PopoverPrimitive from '@radix-ui/react-popover';
8
10
 
9
11
  // src/components/date-picker/DatePicker.tsx
10
12
  function cn(...inputs) {
@@ -44,11 +46,11 @@ var MonthGrid = ({
44
46
  return disabledDates.some((d) => isSameDay(d, date));
45
47
  };
46
48
  return /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-[252px]", children: [
47
- showLabel && /* @__PURE__ */ jsx("div", { className: "text-center mb-3", children: /* @__PURE__ */ jsx("span", { className: "text-sm font-medium text-dp-text", children: format(month, "MMMM yyyy") }) }),
49
+ showLabel && /* @__PURE__ */ jsx("div", { className: "text-center mb-3", children: /* @__PURE__ */ jsx("span", { className: "text-sm font-medium text-gray-900", children: format(month, "MMMM yyyy") }) }),
48
50
  /* @__PURE__ */ jsx("div", { className: "grid grid-cols-7 mb-1.5", children: weekDays.map((d) => /* @__PURE__ */ jsx(
49
51
  "span",
50
52
  {
51
- className: "text-[11px] font-semibold text-dp-text-muted text-center uppercase tracking-wider py-1",
53
+ className: "text-[11px] font-semibold text-gray-400 text-center uppercase tracking-wider py-1",
52
54
  children: d
53
55
  },
54
56
  d
@@ -88,12 +90,12 @@ var MonthGrid = ({
88
90
  "aria-selected": !!isSelected,
89
91
  className: cn(
90
92
  "relative h-9 w-9 text-sm flex items-center justify-center transition-all tabular-nums",
91
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1",
93
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-1",
92
94
  "active:scale-[0.96]",
93
95
  // Default
94
- !isSelected && !inRange && "text-dp-text hover:bg-dp-surface-hover rounded-lg",
96
+ !isSelected && !inRange && "text-gray-900 hover:bg-gray-100 rounded-lg",
95
97
  // Selected (start/end/single)
96
- isSelected && "bg-dp-surface-active text-dp-text-selected z-10 shadow-sm font-semibold",
98
+ isSelected && "bg-primary text-primary-foreground z-10 shadow-sm font-semibold",
97
99
  // Single mode selected
98
100
  mode === "single" && isSelected && "rounded-lg",
99
101
  // Range endpoints
@@ -101,9 +103,9 @@ var MonthGrid = ({
101
103
  isEnd && !isStart && "rounded-r-lg rounded-l-none",
102
104
  isStart && isEnd && "rounded-lg",
103
105
  // In range but not selected
104
- inRange && !isSelected && "bg-[hsl(var(--dp-range-tint)/0.08)] text-primary rounded-none",
106
+ inRange && !isSelected && "bg-primary/10 text-primary rounded-none",
105
107
  // Disabled
106
- disabled && "text-dp-text-muted/40 cursor-not-allowed hover:bg-transparent"
108
+ disabled && "text-primary/40 cursor-not-allowed hover:bg-transparent"
107
109
  ),
108
110
  children: renderDay ? renderDay(day) : format(day, "d")
109
111
  },
@@ -113,7 +115,7 @@ var MonthGrid = ({
113
115
  ] })
114
116
  ] });
115
117
  };
116
- var MonthGrid_default = React.memo(MonthGrid);
118
+ var MonthGrid_default = React__default.memo(MonthGrid);
117
119
  var MonthSelector = ({
118
120
  currentMonth,
119
121
  onSelect
@@ -134,7 +136,7 @@ var MonthSelector = ({
134
136
  onClick: () => onSelect(i),
135
137
  className: cn(
136
138
  "py-3 text-sm font-medium rounded-lg transition-all active:scale-[0.97]",
137
- current === i ? "bg-dp-surface-active text-dp-text-selected shadow-sm" : "hover:bg-dp-surface-hover text-dp-text"
139
+ current === i ? "bg-primary text-primary-foreground shadow-sm" : "hover:bg-gray-100 text-gray-900"
138
140
  ),
139
141
  children: format(new Date(2024, i, 1), "MMM")
140
142
  },
@@ -170,7 +172,7 @@ var YearSelector = ({
170
172
  onClick: () => !disabled && onSelect(y),
171
173
  className: cn(
172
174
  "py-3 text-sm font-medium rounded-lg transition-all active:scale-[0.97]",
173
- currentYear === y ? "bg-dp-surface-active text-dp-text-selected shadow-sm" : "hover:bg-dp-surface-hover text-dp-text",
175
+ currentYear === y ? "bg-primary text-primary-foreground shadow-sm" : "hover:bg-gray-100 text-gray-900",
174
176
  disabled && "opacity-30 cursor-not-allowed"
175
177
  ),
176
178
  children: y
@@ -183,7 +185,7 @@ var YearSelector = ({
183
185
  );
184
186
  };
185
187
  var YearSelector_default = YearSelector;
186
- var DatePicker = React.forwardRef(
188
+ var DatePicker = React__default.forwardRef(
187
189
  ({
188
190
  mode = "single",
189
191
  value,
@@ -248,21 +250,21 @@ var DatePicker = React.forwardRef(
248
250
  {
249
251
  ref,
250
252
  className: cn(
251
- "inline-flex flex-col rounded-xl border border-dp-border bg-dp-surface select-none antialiased",
252
- "shadow-[var(--dp-shadow)]",
253
+ "inline-flex flex-col rounded-xl border border-gray-200 bg-white select-none antialiased",
254
+ "shadow-md",
253
255
  className
254
256
  ),
255
257
  onKeyDown: handleKeyDown,
256
258
  role: "application",
257
259
  "aria-label": "Date picker",
258
260
  children: [
259
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-4 py-3 border-b border-dp-border", children: [
261
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-4 py-3 border-b border-gray-200", children: [
260
262
  /* @__PURE__ */ jsx(
261
263
  "button",
262
264
  {
263
265
  type: "button",
264
266
  onClick: () => setViewDate(subMonths(viewDate, 1)),
265
- className: "p-1.5 rounded-md hover:bg-dp-surface-hover text-dp-text-muted hover:text-dp-text transition-colors",
267
+ className: "p-1.5 rounded-md hover:bg-gray-100 text-gray-400 hover:text-gray-900 transition-colors",
266
268
  "aria-label": "Previous month",
267
269
  children: /* @__PURE__ */ jsx(ChevronLeft, { size: 16 })
268
270
  }
@@ -275,7 +277,7 @@ var DatePicker = React.forwardRef(
275
277
  onClick: () => setViewMode(viewMode === "month" ? "calendar" : "month"),
276
278
  className: cn(
277
279
  "text-sm font-semibold px-2 py-1 rounded-md transition-colors",
278
- viewMode === "month" ? "bg-dp-surface-hover text-dp-text" : "hover:bg-dp-surface-hover text-dp-text"
280
+ viewMode === "month" ? "bg-gray-100 text-gray-900" : "hover:bg-gray-100 text-gray-900"
279
281
  ),
280
282
  children: format(viewDate, "MMMM")
281
283
  }
@@ -287,7 +289,7 @@ var DatePicker = React.forwardRef(
287
289
  onClick: () => setViewMode(viewMode === "year" ? "calendar" : "year"),
288
290
  className: cn(
289
291
  "text-sm font-semibold px-2 py-1 rounded-md transition-colors",
290
- viewMode === "year" ? "bg-dp-surface-hover text-dp-text" : "hover:bg-dp-surface-hover text-dp-text"
292
+ viewMode === "year" ? "bg-gray-100 text-gray-900" : "hover:bg-gray-100 text-gray-900"
291
293
  ),
292
294
  children: format(viewDate, "yyyy")
293
295
  }
@@ -298,19 +300,19 @@ var DatePicker = React.forwardRef(
298
300
  {
299
301
  type: "button",
300
302
  onClick: () => setViewDate(addMonths(viewDate, 1)),
301
- className: "p-1.5 rounded-md hover:bg-dp-surface-hover text-dp-text-muted hover:text-dp-text transition-colors",
303
+ className: "p-1.5 rounded-md hover:bg-gray-100 text-gray-400 hover:text-gray-900 transition-colors",
302
304
  "aria-label": "Next month",
303
305
  children: /* @__PURE__ */ jsx(ChevronRight, { size: 16 })
304
306
  }
305
307
  )
306
308
  ] }),
307
309
  /* @__PURE__ */ jsxs("div", { className: "flex", children: [
308
- presets && presets.length > 0 && /* @__PURE__ */ jsx("div", { className: "border-r border-dp-border p-3 min-w-[140px] flex flex-col gap-0.5", children: presets.map((preset) => /* @__PURE__ */ jsx(
310
+ presets && presets.length > 0 && /* @__PURE__ */ jsx("div", { className: "border-r border-gray-200 p-3 min-w-[140px] flex flex-col gap-0.5", children: presets.map((preset) => /* @__PURE__ */ jsx(
309
311
  "button",
310
312
  {
311
313
  type: "button",
312
314
  onClick: () => handlePresetClick(preset),
313
- className: "text-left text-xs font-medium px-2.5 py-1.5 rounded-md text-dp-text-muted hover:text-dp-text hover:bg-dp-surface-hover transition-colors",
315
+ className: "text-left text-xs font-medium px-2.5 py-1.5 rounded-md text-gray-400 hover:text-gray-900 hover:bg-gray-100 transition-colors",
314
316
  children: preset.label
315
317
  },
316
318
  preset.label
@@ -370,13 +372,13 @@ var DatePicker = React.forwardRef(
370
372
  )
371
373
  ] }) })
372
374
  ] }),
373
- showFooter && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-4 py-3 bg-dp-footer border-t border-dp-border rounded-b-xl", children: [
375
+ showFooter && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-4 py-3 bg-gray-50 border-t border-gray-200 rounded-b-xl", children: [
374
376
  /* @__PURE__ */ jsxs(
375
377
  "button",
376
378
  {
377
379
  type: "button",
378
380
  onClick: onReset,
379
- className: "flex items-center gap-1.5 text-xs font-medium text-dp-text-muted hover:text-dp-text transition-colors",
381
+ className: "flex items-center gap-1.5 text-xs font-medium text-gray-400 hover:text-gray-900 transition-colors",
380
382
  children: [
381
383
  /* @__PURE__ */ jsx(RotateCcw, { size: 13 }),
382
384
  "Reset"
@@ -388,7 +390,7 @@ var DatePicker = React.forwardRef(
388
390
  {
389
391
  type: "button",
390
392
  onClick: () => onApply == null ? void 0 : onApply(value),
391
- className: "px-5 py-1.5 bg-primary text-primary-foreground text-xs font-semibold rounded hover:opacity-90 shadow-sm transition-all active:scale-[0.98]",
393
+ className: "px-5 py-1.5 bg-primary text-primary-foreground text-xs font-semibold rounded hover:opacity-90 shadow-sm transition-all active:scale-[0.98]",
392
394
  children: "Apply"
393
395
  }
394
396
  )
@@ -399,7 +401,152 @@ var DatePicker = React.forwardRef(
399
401
  }
400
402
  );
401
403
  DatePicker.displayName = "DatePicker";
404
+ var DatePicker_default = DatePicker;
405
+ var Popover = PopoverPrimitive.Root;
406
+ var PopoverTrigger = PopoverPrimitive.Trigger;
407
+ var PopoverContent = React.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(
408
+ PopoverPrimitive.Content,
409
+ {
410
+ ref,
411
+ align,
412
+ sideOffset,
413
+ className: cn(
414
+ "z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
415
+ className
416
+ ),
417
+ ...props
418
+ }
419
+ ) }));
420
+ PopoverContent.displayName = PopoverPrimitive.Content.displayName;
421
+ var DatePickerInput = ({
422
+ mode = "single",
423
+ value,
424
+ onChange,
425
+ onApply,
426
+ onReset,
427
+ placeholder,
428
+ displayFormat = "MMM d, yyyy",
429
+ triggerClassName,
430
+ popoverClassName,
431
+ calendarClassName,
432
+ disabled = false,
433
+ clearable = true,
434
+ align = "start",
435
+ label,
436
+ numberOfMonths,
437
+ presets,
438
+ minDate,
439
+ maxDate,
440
+ disabledDates,
441
+ weekStart,
442
+ renderDay
443
+ }) => {
444
+ const [open, setOpen] = useState(false);
445
+ const defaultPlaceholder = mode === "range" ? "Select date range..." : "Select a date...";
446
+ const displayValue = (() => {
447
+ if (mode === "single" && value instanceof Date) {
448
+ return format(value, displayFormat);
449
+ }
450
+ if (mode === "range" && value && "start" in value) {
451
+ const range = value;
452
+ if (range.start && range.end) {
453
+ return `${format(range.start, displayFormat)} \u2013 ${format(range.end, displayFormat)}`;
454
+ }
455
+ if (range.start) {
456
+ return `${format(range.start, displayFormat)} \u2013 ...`;
457
+ }
458
+ }
459
+ return "";
460
+ })();
461
+ const handleApply = useCallback(
462
+ (val) => {
463
+ onApply == null ? void 0 : onApply(val);
464
+ setOpen(false);
465
+ },
466
+ [onApply]
467
+ );
468
+ const handleClear = useCallback(
469
+ (e) => {
470
+ e.stopPropagation();
471
+ onReset == null ? void 0 : onReset();
472
+ },
473
+ [onReset]
474
+ );
475
+ const handleChange = useCallback(
476
+ (val) => {
477
+ onChange == null ? void 0 : onChange(val);
478
+ if (mode === "single") {
479
+ setOpen(false);
480
+ }
481
+ },
482
+ [onChange, mode]
483
+ );
484
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1.5", children: [
485
+ label && /* @__PURE__ */ jsx("label", { className: "text-sm font-medium text-foreground", children: label }),
486
+ /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: setOpen, children: [
487
+ /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
488
+ "button",
489
+ {
490
+ type: "button",
491
+ disabled,
492
+ className: cn(
493
+ "inline-flex items-center gap-2 h-10 px-3 rounded-lg border border-input bg-background text-sm",
494
+ "ring-offset-background transition-colors",
495
+ "hover:bg-accent/5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
496
+ "disabled:cursor-not-allowed disabled:opacity-50",
497
+ !displayValue && "text-muted-foreground",
498
+ displayValue && "text-foreground",
499
+ triggerClassName
500
+ ),
501
+ children: [
502
+ /* @__PURE__ */ jsx(CalendarIcon, { className: "h-4 w-4 shrink-0 text-muted-foreground" }),
503
+ /* @__PURE__ */ jsx("span", { className: "flex-1 text-left truncate", children: displayValue || placeholder || defaultPlaceholder }),
504
+ clearable && displayValue && /* @__PURE__ */ jsx(
505
+ "span",
506
+ {
507
+ role: "button",
508
+ tabIndex: 0,
509
+ onClick: handleClear,
510
+ onKeyDown: (e) => e.key === "Enter" && handleClear(e),
511
+ className: "shrink-0 p-0.5 rounded hover:bg-muted transition-colors",
512
+ "aria-label": "Clear selection",
513
+ children: /* @__PURE__ */ jsx(X, { className: "h-3.5 w-3.5 text-muted-foreground" })
514
+ }
515
+ )
516
+ ]
517
+ }
518
+ ) }),
519
+ /* @__PURE__ */ jsx(
520
+ PopoverContent,
521
+ {
522
+ className: cn("w-auto p-0 pointer-events-auto", popoverClassName),
523
+ align,
524
+ sideOffset: 8,
525
+ children: /* @__PURE__ */ jsx(
526
+ DatePicker,
527
+ {
528
+ mode,
529
+ value,
530
+ onChange: handleChange,
531
+ onApply: mode === "range" ? handleApply : void 0,
532
+ onReset,
533
+ numberOfMonths: numberOfMonths != null ? numberOfMonths : mode === "range" ? 2 : 1,
534
+ showFooter: mode === "range",
535
+ presets,
536
+ minDate,
537
+ maxDate,
538
+ disabledDates,
539
+ weekStart,
540
+ renderDay,
541
+ className: cn("border-0 shadow-none", calendarClassName)
542
+ }
543
+ )
544
+ }
545
+ )
546
+ ] })
547
+ ] });
548
+ };
402
549
 
403
- export { DatePicker };
550
+ export { DatePicker, DatePickerInput, DatePicker_default as default };
404
551
  //# sourceMappingURL=index.mjs.map
405
552
  //# sourceMappingURL=index.mjs.map