snack-datepicker 0.0.2 → 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/README.md CHANGED
@@ -57,11 +57,13 @@ npm install react react-dom
57
57
  ### Basic
58
58
 
59
59
  ```tsx
60
- import { DatePicker } from "snack-datepicker";
60
+ import { DatePickerInput } from "snack-datepicker";
61
61
  import "snack-datepicker/dist/style.css";
62
62
 
63
63
  function App() {
64
- return <DatePicker mode="single" onChange={(date) => console.log(date)} />;
64
+ return (
65
+ <DatePickerInput mode="single" onChange={(date) => console.log(date)} />
66
+ );
65
67
  }
66
68
 
67
69
  export default App;
@@ -70,7 +72,7 @@ export default App;
70
72
  ### Date Range Example
71
73
 
72
74
  ```tsx
73
- import { DatePicker } from "snack-datepicker";
75
+ import { DatePickerInput } from "snack-datepicker";
74
76
  import { useState } from "react";
75
77
 
76
78
  function App() {
@@ -80,7 +82,7 @@ function App() {
80
82
  });
81
83
 
82
84
  return (
83
- <DatePicker
85
+ <DatePickerInput
84
86
  mode="range"
85
87
  value={range}
86
88
  onChange={(value) => setRange(value)}
@@ -93,7 +95,7 @@ function App() {
93
95
  ### Preset Range Example
94
96
 
95
97
  ```tsx
96
- import { DatePicker } from "snack-datepicker";
98
+ import { DatePickerInput } from "snack-datepicker";
97
99
 
98
100
  const presets = [
99
101
  {
@@ -117,7 +119,7 @@ const presets = [
117
119
  ];
118
120
 
119
121
  function App() {
120
- return <DatePicker mode="range" presets={presets} />;
122
+ return <DatePickerInput mode="range" presets={presets} />;
121
123
  }
122
124
  ```
123
125
 
@@ -155,7 +157,7 @@ export interface PresetRange {
155
157
  getValue: () => DateRange;
156
158
  }
157
159
 
158
- export interface DatePickerProps {
160
+ export interface DatePickerInputProps {
159
161
  mode?: DatePickerMode;
160
162
  value?: Date | DateRange;
161
163
  onChange?: (value: Date | DateRange) => void;
package/dist/index.js CHANGED
@@ -70,11 +70,11 @@ var MonthGrid = ({
70
70
  return disabledDates.some((d) => dateFns.isSameDay(d, date));
71
71
  };
72
72
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 min-w-[252px]", children: [
73
- showLabel && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-center mb-3", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-dp-text", children: dateFns.format(month, "MMMM yyyy") }) }),
73
+ showLabel && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-center mb-3", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-gray-900", children: dateFns.format(month, "MMMM yyyy") }) }),
74
74
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-7 mb-1.5", children: weekDays.map((d) => /* @__PURE__ */ jsxRuntime.jsx(
75
75
  "span",
76
76
  {
77
- className: "text-[11px] font-semibold text-dp-text-muted text-center uppercase tracking-wider py-1",
77
+ className: "text-[11px] font-semibold text-gray-400 text-center uppercase tracking-wider py-1",
78
78
  children: d
79
79
  },
80
80
  d
@@ -114,12 +114,12 @@ var MonthGrid = ({
114
114
  "aria-selected": !!isSelected,
115
115
  className: cn(
116
116
  "relative h-9 w-9 text-sm flex items-center justify-center transition-all tabular-nums",
117
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1",
117
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-1",
118
118
  "active:scale-[0.96]",
119
119
  // Default
120
- !isSelected && !inRange && "text-dp-text hover:bg-dp-surface-hover rounded-lg",
120
+ !isSelected && !inRange && "text-gray-900 hover:bg-gray-100 rounded-lg",
121
121
  // Selected (start/end/single)
122
- isSelected && "bg-dp-surface-active text-dp-text-selected z-10 shadow-sm font-semibold",
122
+ isSelected && "bg-primary text-primary-foreground z-10 shadow-sm font-semibold",
123
123
  // Single mode selected
124
124
  mode === "single" && isSelected && "rounded-lg",
125
125
  // Range endpoints
@@ -127,9 +127,9 @@ var MonthGrid = ({
127
127
  isEnd && !isStart && "rounded-r-lg rounded-l-none",
128
128
  isStart && isEnd && "rounded-lg",
129
129
  // In range but not selected
130
- inRange && !isSelected && "bg-[hsl(var(--dp-range-tint)/0.08)] text-primary rounded-none",
130
+ inRange && !isSelected && "bg-primary/10 text-primary rounded-none",
131
131
  // Disabled
132
- disabled && "text-dp-text-muted/40 cursor-not-allowed hover:bg-transparent"
132
+ disabled && "text-primary/40 cursor-not-allowed hover:bg-transparent"
133
133
  ),
134
134
  children: renderDay ? renderDay(day) : dateFns.format(day, "d")
135
135
  },
@@ -160,7 +160,7 @@ var MonthSelector = ({
160
160
  onClick: () => onSelect(i),
161
161
  className: cn(
162
162
  "py-3 text-sm font-medium rounded-lg transition-all active:scale-[0.97]",
163
- current === i ? "bg-dp-surface-active text-dp-text-selected shadow-sm" : "hover:bg-dp-surface-hover text-dp-text"
163
+ current === i ? "bg-primary text-primary-foreground shadow-sm" : "hover:bg-gray-100 text-gray-900"
164
164
  ),
165
165
  children: dateFns.format(new Date(2024, i, 1), "MMM")
166
166
  },
@@ -196,7 +196,7 @@ var YearSelector = ({
196
196
  onClick: () => !disabled && onSelect(y),
197
197
  className: cn(
198
198
  "py-3 text-sm font-medium rounded-lg transition-all active:scale-[0.97]",
199
- currentYear === y ? "bg-dp-surface-active text-dp-text-selected shadow-sm" : "hover:bg-dp-surface-hover text-dp-text",
199
+ currentYear === y ? "bg-primary text-primary-foreground shadow-sm" : "hover:bg-gray-100 text-gray-900",
200
200
  disabled && "opacity-30 cursor-not-allowed"
201
201
  ),
202
202
  children: y
@@ -274,21 +274,21 @@ var DatePicker = React__namespace.default.forwardRef(
274
274
  {
275
275
  ref,
276
276
  className: cn(
277
- "inline-flex flex-col rounded-xl border border-dp-border bg-dp-surface select-none antialiased",
278
- "shadow-[var(--dp-shadow)]",
277
+ "inline-flex flex-col rounded-xl border border-gray-200 bg-white select-none antialiased",
278
+ "shadow-md",
279
279
  className
280
280
  ),
281
281
  onKeyDown: handleKeyDown,
282
282
  role: "application",
283
283
  "aria-label": "Date picker",
284
284
  children: [
285
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between px-4 py-3 border-b border-dp-border", children: [
285
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between px-4 py-3 border-b border-gray-200", children: [
286
286
  /* @__PURE__ */ jsxRuntime.jsx(
287
287
  "button",
288
288
  {
289
289
  type: "button",
290
290
  onClick: () => setViewDate(dateFns.subMonths(viewDate, 1)),
291
- className: "p-1.5 rounded-md hover:bg-dp-surface-hover text-dp-text-muted hover:text-dp-text transition-colors",
291
+ className: "p-1.5 rounded-md hover:bg-gray-100 text-gray-400 hover:text-gray-900 transition-colors",
292
292
  "aria-label": "Previous month",
293
293
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeft, { size: 16 })
294
294
  }
@@ -301,7 +301,7 @@ var DatePicker = React__namespace.default.forwardRef(
301
301
  onClick: () => setViewMode(viewMode === "month" ? "calendar" : "month"),
302
302
  className: cn(
303
303
  "text-sm font-semibold px-2 py-1 rounded-md transition-colors",
304
- viewMode === "month" ? "bg-dp-surface-hover text-dp-text" : "hover:bg-dp-surface-hover text-dp-text"
304
+ viewMode === "month" ? "bg-gray-100 text-gray-900" : "hover:bg-gray-100 text-gray-900"
305
305
  ),
306
306
  children: dateFns.format(viewDate, "MMMM")
307
307
  }
@@ -313,7 +313,7 @@ var DatePicker = React__namespace.default.forwardRef(
313
313
  onClick: () => setViewMode(viewMode === "year" ? "calendar" : "year"),
314
314
  className: cn(
315
315
  "text-sm font-semibold px-2 py-1 rounded-md transition-colors",
316
- viewMode === "year" ? "bg-dp-surface-hover text-dp-text" : "hover:bg-dp-surface-hover text-dp-text"
316
+ viewMode === "year" ? "bg-gray-100 text-gray-900" : "hover:bg-gray-100 text-gray-900"
317
317
  ),
318
318
  children: dateFns.format(viewDate, "yyyy")
319
319
  }
@@ -324,19 +324,19 @@ var DatePicker = React__namespace.default.forwardRef(
324
324
  {
325
325
  type: "button",
326
326
  onClick: () => setViewDate(dateFns.addMonths(viewDate, 1)),
327
- className: "p-1.5 rounded-md hover:bg-dp-surface-hover text-dp-text-muted hover:text-dp-text transition-colors",
327
+ className: "p-1.5 rounded-md hover:bg-gray-100 text-gray-400 hover:text-gray-900 transition-colors",
328
328
  "aria-label": "Next month",
329
329
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { size: 16 })
330
330
  }
331
331
  )
332
332
  ] }),
333
333
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex", children: [
334
- presets && presets.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-r border-dp-border p-3 min-w-[140px] flex flex-col gap-0.5", children: presets.map((preset) => /* @__PURE__ */ jsxRuntime.jsx(
334
+ presets && presets.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-r border-gray-200 p-3 min-w-[140px] flex flex-col gap-0.5", children: presets.map((preset) => /* @__PURE__ */ jsxRuntime.jsx(
335
335
  "button",
336
336
  {
337
337
  type: "button",
338
338
  onClick: () => handlePresetClick(preset),
339
- 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",
339
+ 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",
340
340
  children: preset.label
341
341
  },
342
342
  preset.label
@@ -396,13 +396,13 @@ var DatePicker = React__namespace.default.forwardRef(
396
396
  )
397
397
  ] }) })
398
398
  ] }),
399
- showFooter && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between px-4 py-3 bg-dp-footer border-t border-dp-border rounded-b-xl", children: [
399
+ showFooter && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between px-4 py-3 bg-gray-50 border-t border-gray-200 rounded-b-xl", children: [
400
400
  /* @__PURE__ */ jsxRuntime.jsxs(
401
401
  "button",
402
402
  {
403
403
  type: "button",
404
404
  onClick: onReset,
405
- className: "flex items-center gap-1.5 text-xs font-medium text-dp-text-muted hover:text-dp-text transition-colors",
405
+ className: "flex items-center gap-1.5 text-xs font-medium text-gray-400 hover:text-gray-900 transition-colors",
406
406
  children: [
407
407
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RotateCcw, { size: 13 }),
408
408
  "Reset"
@@ -414,7 +414,7 @@ var DatePicker = React__namespace.default.forwardRef(
414
414
  {
415
415
  type: "button",
416
416
  onClick: () => onApply == null ? void 0 : onApply(value),
417
- 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]",
417
+ 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]",
418
418
  children: "Apply"
419
419
  }
420
420
  )
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","../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-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","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"]}
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
@@ -46,11 +46,11 @@ var MonthGrid = ({
46
46
  return disabledDates.some((d) => isSameDay(d, date));
47
47
  };
48
48
  return /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-[252px]", children: [
49
- 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") }) }),
50
50
  /* @__PURE__ */ jsx("div", { className: "grid grid-cols-7 mb-1.5", children: weekDays.map((d) => /* @__PURE__ */ jsx(
51
51
  "span",
52
52
  {
53
- 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",
54
54
  children: d
55
55
  },
56
56
  d
@@ -90,12 +90,12 @@ var MonthGrid = ({
90
90
  "aria-selected": !!isSelected,
91
91
  className: cn(
92
92
  "relative h-9 w-9 text-sm flex items-center justify-center transition-all tabular-nums",
93
- "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",
94
94
  "active:scale-[0.96]",
95
95
  // Default
96
- !isSelected && !inRange && "text-dp-text hover:bg-dp-surface-hover rounded-lg",
96
+ !isSelected && !inRange && "text-gray-900 hover:bg-gray-100 rounded-lg",
97
97
  // Selected (start/end/single)
98
- 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",
99
99
  // Single mode selected
100
100
  mode === "single" && isSelected && "rounded-lg",
101
101
  // Range endpoints
@@ -103,9 +103,9 @@ var MonthGrid = ({
103
103
  isEnd && !isStart && "rounded-r-lg rounded-l-none",
104
104
  isStart && isEnd && "rounded-lg",
105
105
  // In range but not selected
106
- inRange && !isSelected && "bg-[hsl(var(--dp-range-tint)/0.08)] text-primary rounded-none",
106
+ inRange && !isSelected && "bg-primary/10 text-primary rounded-none",
107
107
  // Disabled
108
- disabled && "text-dp-text-muted/40 cursor-not-allowed hover:bg-transparent"
108
+ disabled && "text-primary/40 cursor-not-allowed hover:bg-transparent"
109
109
  ),
110
110
  children: renderDay ? renderDay(day) : format(day, "d")
111
111
  },
@@ -136,7 +136,7 @@ var MonthSelector = ({
136
136
  onClick: () => onSelect(i),
137
137
  className: cn(
138
138
  "py-3 text-sm font-medium rounded-lg transition-all active:scale-[0.97]",
139
- 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"
140
140
  ),
141
141
  children: format(new Date(2024, i, 1), "MMM")
142
142
  },
@@ -172,7 +172,7 @@ var YearSelector = ({
172
172
  onClick: () => !disabled && onSelect(y),
173
173
  className: cn(
174
174
  "py-3 text-sm font-medium rounded-lg transition-all active:scale-[0.97]",
175
- 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",
176
176
  disabled && "opacity-30 cursor-not-allowed"
177
177
  ),
178
178
  children: y
@@ -250,21 +250,21 @@ var DatePicker = React__default.forwardRef(
250
250
  {
251
251
  ref,
252
252
  className: cn(
253
- "inline-flex flex-col rounded-xl border border-dp-border bg-dp-surface select-none antialiased",
254
- "shadow-[var(--dp-shadow)]",
253
+ "inline-flex flex-col rounded-xl border border-gray-200 bg-white select-none antialiased",
254
+ "shadow-md",
255
255
  className
256
256
  ),
257
257
  onKeyDown: handleKeyDown,
258
258
  role: "application",
259
259
  "aria-label": "Date picker",
260
260
  children: [
261
- /* @__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: [
262
262
  /* @__PURE__ */ jsx(
263
263
  "button",
264
264
  {
265
265
  type: "button",
266
266
  onClick: () => setViewDate(subMonths(viewDate, 1)),
267
- 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",
268
268
  "aria-label": "Previous month",
269
269
  children: /* @__PURE__ */ jsx(ChevronLeft, { size: 16 })
270
270
  }
@@ -277,7 +277,7 @@ var DatePicker = React__default.forwardRef(
277
277
  onClick: () => setViewMode(viewMode === "month" ? "calendar" : "month"),
278
278
  className: cn(
279
279
  "text-sm font-semibold px-2 py-1 rounded-md transition-colors",
280
- 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"
281
281
  ),
282
282
  children: format(viewDate, "MMMM")
283
283
  }
@@ -289,7 +289,7 @@ var DatePicker = React__default.forwardRef(
289
289
  onClick: () => setViewMode(viewMode === "year" ? "calendar" : "year"),
290
290
  className: cn(
291
291
  "text-sm font-semibold px-2 py-1 rounded-md transition-colors",
292
- 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"
293
293
  ),
294
294
  children: format(viewDate, "yyyy")
295
295
  }
@@ -300,19 +300,19 @@ var DatePicker = React__default.forwardRef(
300
300
  {
301
301
  type: "button",
302
302
  onClick: () => setViewDate(addMonths(viewDate, 1)),
303
- 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",
304
304
  "aria-label": "Next month",
305
305
  children: /* @__PURE__ */ jsx(ChevronRight, { size: 16 })
306
306
  }
307
307
  )
308
308
  ] }),
309
309
  /* @__PURE__ */ jsxs("div", { className: "flex", children: [
310
- 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(
311
311
  "button",
312
312
  {
313
313
  type: "button",
314
314
  onClick: () => handlePresetClick(preset),
315
- 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",
316
316
  children: preset.label
317
317
  },
318
318
  preset.label
@@ -372,13 +372,13 @@ var DatePicker = React__default.forwardRef(
372
372
  )
373
373
  ] }) })
374
374
  ] }),
375
- 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: [
376
376
  /* @__PURE__ */ jsxs(
377
377
  "button",
378
378
  {
379
379
  type: "button",
380
380
  onClick: onReset,
381
- 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",
382
382
  children: [
383
383
  /* @__PURE__ */ jsx(RotateCcw, { size: 13 }),
384
384
  "Reset"
@@ -390,7 +390,7 @@ var DatePicker = React__default.forwardRef(
390
390
  {
391
391
  type: "button",
392
392
  onClick: () => onApply == null ? void 0 : onApply(value),
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]",
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]",
394
394
  children: "Apply"
395
395
  }
396
396
  )
@@ -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","../src/components/ui/popover.tsx","../src/components/date-picker/DatePickerInput.tsx"],"names":["React","jsx","format","motion","isBefore","isSameDay","jsxs","React3","useState","useCallback"],"mappings":"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","file":"index.mjs","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","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"]}
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":["React","jsx","format","motion","isBefore","isSameDay","jsxs","React3","useState","useCallback"],"mappings":";;;;;;;;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACyBA,IAAM,aAAA,GAAgB,CAAC,IAAA,EAAM,IAAA,EAAM,MAAM,IAAA,EAAM,IAAA,EAAM,MAAM,IAAI,CAAA;AAC/D,IAAM,aAAA,GAAgB,CAAC,IAAA,EAAM,IAAA,EAAM,MAAM,IAAA,EAAM,IAAA,EAAM,MAAM,IAAI,CAAA;AAE/D,IAAM,YAAsC,CAAC;AAAA,EAC3C,KAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,gBAAgB,EAAC;AAAA,EACjB,SAAA,GAAY,CAAA;AAAA,EACZ,SAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,KAAM;AACJ,EAAA,MAAM,IAAA,GAAO,QAAQ,MAAM;AACzB,IAAA,OAAO,iBAAA,CAAkB;AAAA,MACvB,KAAA,EAAO,aAAa,KAAK,CAAA;AAAA,MACzB,GAAA,EAAK,WAAW,KAAK;AAAA,KACtB,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,QAAA,GAAW,SAAA,KAAc,CAAA,GAAI,aAAA,GAAgB,aAAA;AAEnD,EAAA,MAAM,QAAA,GAAW,QAAQ,MAAM;AAC7B,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,CAAC,CAAA,CAAE,MAAA,EAAO;AACjC,IAAA,OAAO,cAAc,CAAA,GAAK,SAAA,KAAc,CAAA,GAAI,CAAA,GAAI,YAAY,CAAA,GAAK,SAAA;AAAA,EACnE,CAAA,EAAG,CAAC,IAAA,EAAM,SAAS,CAAC,CAAA;AAEpB,EAAA,MAAM,UAAA,GAAa,CAAC,IAAA,KAAe;AACjC,IAAA,IAAI,OAAA,IAAW,QAAA,CAAS,IAAA,EAAM,OAAO,GAAG,OAAO,IAAA;AAC/C,IAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,IAAA,EAAM,OAAO,GAAG,OAAO,IAAA;AAC9C,IAAA,OAAO,cAAc,IAAA,CAAK,CAAC,MAAM,SAAA,CAAU,CAAA,EAAG,IAAI,CAAC,CAAA;AAAA,EACrD,CAAA;AAEA,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACZ,QAAA,EAAA;AAAA,IAAA,SAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACb,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA,MAAA,CAAO,KAAA,EAAO,WAAW,CAAA,EAC5B,CAAA,EACF,CAAA;AAAA,wBAED,KAAA,EAAA,EAAI,SAAA,EAAU,2BACZ,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,qBACb,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QAEC,SAAA,EAAU,mFAAA;AAAA,QAET,QAAA,EAAA;AAAA,OAAA;AAAA,MAHI;AAAA,KAKR,CAAA,EACH,CAAA;AAAA,oBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACZ,QAAA,EAAA;AAAA,MAAA,CAAC,GAAG,KAAA,CAAM,QAAQ,CAAC,CAAA,CAAE,IAAI,CAAC,CAAA,EAAG,CAAA,qBAC5B,GAAA,CAAC,SAAqB,SAAA,EAAU,SAAA,EAAA,EAAtB,CAAA,IAAA,EAAO,CAAC,EAAwB,CAC3C,CAAA;AAAA,MACA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ;AACjB,QAAA,MAAM,QAAA,GAAW,WAAW,GAAG,CAAA;AAC/B,QAAA,MAAM,UAAA,GACJ,SAAS,QAAA,GACL,YAAA,IAAgB,UAAU,GAAA,EAAK,YAAY,IAC3C,aAAA,KACE,aAAA,CAAc,SAAS,SAAA,CAAU,GAAA,EAAK,cAAc,KAAK,CAAA,IACxD,cAAc,GAAA,IAAO,SAAA,CAAU,GAAA,EAAK,aAAA,CAAc,GAAG,CAAA,CAAA;AAE9D,QAAA,MAAM,OAAA,GACJ,SAAS,OAAA,KACT,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAe,UACf,SAAA,CAAU,GAAA,EAAK,cAAc,KAAK,CAAA;AACpC,QAAA,MAAM,KAAA,GACJ,SAAS,OAAA,KACT,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAe,QACf,SAAA,CAAU,GAAA,EAAK,cAAc,GAAG,CAAA;AAElC,QAAA,IAAI,OAAA,GAAU,KAAA;AACd,QAAA,IAAI,IAAA,KAAS,OAAA,KAAW,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAe,KAAA,CAAA,EAAO;AAC5C,UAAA,IAAI,cAAc,GAAA,EAAK;AACrB,YAAA,OAAA,GAAU,iBAAiB,GAAA,EAAK;AAAA,cAC9B,OAAO,aAAA,CAAc,KAAA;AAAA,cACrB,KAAK,aAAA,CAAc;AAAA,aACpB,CAAA;AAAA,UACH,WAAW,SAAA,EAAW;AACpB,YAAA,MAAM,aAAa,QAAA,CAAS,SAAA,EAAW,cAAc,KAAK,CAAA,GACtD,YACA,aAAA,CAAc,KAAA;AAClB,YAAA,MAAM,WAAW,QAAA,CAAS,SAAA,EAAW,cAAc,KAAK,CAAA,GACpD,cAAc,KAAA,GACd,SAAA;AACJ,YAAA,OAAA,GAAU,iBAAiB,GAAA,EAAK;AAAA,cAC9B,KAAA,EAAO,UAAA;AAAA,cACP,GAAA,EAAK;AAAA,aACN,CAAA;AAAA,UACH;AAAA,QACF;AAEA,QAAA,uBACE,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAEC,IAAA,EAAK,QAAA;AAAA,YACL,QAAA;AAAA,YACA,OAAA,EAAS,MAAM,CAAC,QAAA,IAAY,YAAY,GAAG,CAAA;AAAA,YAC3C,YAAA,EAAc,MAAM,CAAC,QAAA,IAAY,YAAY,GAAG,CAAA;AAAA,YAChD,YAAA,EAAc,MAAM,WAAA,CAAY,IAAI,CAAA;AAAA,YACpC,YAAA,EAAY,MAAA,CAAO,GAAA,EAAK,MAAM,CAAA;AAAA,YAC9B,eAAA,EAAe,CAAC,CAAC,UAAA;AAAA,YACjB,SAAA,EAAW,EAAA;AAAA,cACT,uFAAA;AAAA,cACA,wGAAA;AAAA,cACA,qBAAA;AAAA;AAAA,cAEA,CAAC,UAAA,IACC,CAAC,OAAA,IACD,4CAAA;AAAA;AAAA,cAEF,UAAA,IACE,iEAAA;AAAA;AAAA,cAEF,IAAA,KAAS,YAAY,UAAA,IAAc,YAAA;AAAA;AAAA,cAEnC,OAAA,IAAW,CAAC,KAAA,IAAS,6BAAA;AAAA,cACrB,KAAA,IAAS,CAAC,OAAA,IAAW,6BAAA;AAAA,cACrB,WAAW,KAAA,IAAS,YAAA;AAAA;AAAA,cAEpB,OAAA,IACE,CAAC,UAAA,IACD,yCAAA;AAAA;AAAA,cAEF,QAAA,IACE;AAAA,aACJ;AAAA,YAEC,sBAAY,SAAA,CAAU,GAAG,CAAA,GAAI,MAAA,CAAO,KAAK,GAAG;AAAA,WAAA;AAAA,UAlCxC,IAAI,WAAA;AAAY,SAmCvB;AAAA,MAEJ,CAAC;AAAA,KAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;AAEA,IAAO,iBAAA,GAAQA,cAAA,CAAM,IAAA,CAAK,SAAS,CAAA;ACrKnC,IAAM,gBAA8C,CAAC;AAAA,EACnD,YAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAU,SAAS,YAAY,CAAA;AAErC,EAAA,uBACEC,GAAAA;AAAA,IAAC,MAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MAEC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,MAC5B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,MAC5B,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,MAC1B,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,CAAC,IAAA,EAAM,GAAA,EAAK,IAAA,EAAM,CAAC,CAAA,EAAE;AAAA,MACzD,SAAA,EAAU,qDAAA;AAAA,MAET,QAAA,EAAA,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,EAAA,EAAI,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBAClCA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,MAAM,QAAA,CAAS,CAAC,CAAA;AAAA,UACzB,SAAA,EAAW,EAAA;AAAA,YACT,wEAAA;AAAA,YACA,OAAA,KAAY,IACR,8CAAA,GACA;AAAA,WACN;AAAA,UAEC,QAAA,EAAAC,OAAO,IAAI,IAAA,CAAK,MAAM,CAAA,EAAG,CAAC,GAAG,KAAK;AAAA,SAAA;AAAA,QAV9B;AAAA,OAYR;AAAA,KAAA;AAAA,IArBG;AAAA,GAsBN;AAEJ,CAAA;AAEA,IAAO,qBAAA,GAAQ,aAAA;ACjCf,IAAM,eAA4C,CAAC;AAAA,EACjD,WAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,EAAA,EAAG,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,WAAA,GAAc,CAAA,GAAI,CAAC,CAAA;AAEtE,EAAA,uBACED,GAAAA;AAAA,IAACE,MAAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MAEC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,MAC5B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,MAC5B,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,MAC1B,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,CAAC,IAAA,EAAM,GAAA,EAAK,IAAA,EAAM,CAAC,CAAA,EAAE;AAAA,MACzD,SAAA,EAAU,qDAAA;AAAA,MAET,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM;AAChB,QAAA,MAAM,QAAA,GACH,WAAW,CAAA,GAAI,OAAA,CAAQ,aAAY,IACnC,OAAA,IAAW,CAAA,GAAI,OAAA,CAAQ,WAAA,EAAY;AACtC,QAAA,uBACEF,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAEC,IAAA,EAAK,QAAA;AAAA,YACL,QAAA,EAAU,CAAC,CAAC,QAAA;AAAA,YACZ,OAAA,EAAS,MAAM,CAAC,QAAA,IAAY,SAAS,CAAC,CAAA;AAAA,YACtC,SAAA,EAAW,EAAA;AAAA,cACT,wEAAA;AAAA,cACA,WAAA,KAAgB,IACZ,8CAAA,GACA,iCAAA;AAAA,cACJ,QAAA,IAAY;AAAA,aACd;AAAA,YAEC,QAAA,EAAA;AAAA,WAAA;AAAA,UAZI;AAAA,SAaP;AAAA,MAEJ,CAAC;AAAA,KAAA;AAAA,IA5BG;AAAA,GA6BN;AAEJ,CAAA;AAEA,IAAO,oBAAA,GAAQ,YAAA;ACjCR,IAAM,aAAaD,cAAAA,CAAM,UAAA;AAAA,EAC9B,CACE;AAAA,IACE,IAAA,GAAO,QAAA;AAAA,IACP,KAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA;AAAA,IACA,SAAA,GAAY,CAAA;AAAA,IACZ,cAAA,GAAiB,CAAA;AAAA,IACjB,UAAA,GAAa,IAAA;AAAA,IACb,SAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,KAEF,GAAA,KACG;AACH,IAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,MAAM;AAC7C,MAAA,IAAI,IAAA,KAAS,QAAA,IAAY,KAAA,YAAiB,IAAA,EAAM,OAAO,KAAA;AACvD,MAAA,IAAI,IAAA,KAAS,OAAA,IAAW,KAAA,IAAS,OAAA,IAAW,SAAS,KAAA,CAAM,KAAA;AACzD,QAAA,OAAO,KAAA,CAAM,KAAA;AACf,MAAA,2BAAW,IAAA,EAAK;AAAA,IAClB,CAAC,CAAA;AACD,IAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAmB,UAAU,CAAA;AAC7D,IAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAsB,IAAI,CAAA;AAE5D,IAAA,MAAM,aAAA,GACJ,IAAA,KAAS,OAAA,GAAY,KAAA,IAAA,IAAA,GAAA,KAAA,GAAmC,IAAA,GAAQ,IAAA;AAClE,IAAA,MAAM,YAAA,GACJ,IAAA,KAAS,QAAA,GAAa,KAAA,IAAA,IAAA,GAAA,KAAA,GAA8B,IAAA,GAAQ,IAAA;AAE9D,IAAA,MAAM,eAAA,GAAkB,WAAA;AAAA,MACtB,CAAC,IAAA,KAAe;AACd,QAAA,IAAI,SAAS,QAAA,EAAU;AACrB,UAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,IAAA,CAAA;AAAA,QACb,CAAA,MAAO;AACL,UAAA,MAAM,QAAQ,aAAA,IAAiB,EAAE,KAAA,EAAO,IAAA,EAAM,KAAK,IAAA,EAAK;AACxD,UAAA,IAAI,CAAC,KAAA,CAAM,KAAA,IAAU,KAAA,CAAM,KAAA,IAAS,MAAM,GAAA,EAAM;AAC9C,YAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,EAAE,KAAA,EAAO,IAAA,EAAM,GAAA,EAAK,IAAA,EAAK,CAAA;AAAA,UACtC,CAAA,MAAO;AACL,YAAA,IAAII,QAAAA,CAAS,IAAA,EAAM,KAAA,CAAM,KAAK,CAAA,EAAG;AAC/B,cAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,EAAE,KAAA,EAAO,IAAA,EAAM,GAAA,EAAK,MAAM,KAAA,EAAM,CAAA;AAAA,YAC7C,CAAA,MAAA,IAAWC,SAAAA,CAAU,IAAA,EAAM,KAAA,CAAM,KAAK,CAAA,EAAG;AACvC,cAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,EAAE,KAAA,EAAO,IAAA,EAAM,GAAA,EAAK,IAAA,EAAK,CAAA;AAAA,YACtC,CAAA,MAAO;AACL,cAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,EAAE,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,KAAK,IAAA,EAAK,CAAA;AAAA,YAC7C;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAA;AAAA,MACA,CAAC,IAAA,EAAM,aAAA,EAAe,QAAQ;AAAA,KAChC;AAEA,IAAA,MAAM,aAAA,GAAgB,WAAA,CAAY,CAAC,CAAA,KAA2B;AAC5D,MAAA,IAAI,CAAA,CAAE,QAAQ,QAAA,EAAU;AACtB,QAAA,WAAA,CAAY,UAAU,CAAA;AAAA,MACxB;AAAA,IACF,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,MAAM,iBAAA,GAAoB,WAAA;AAAA,MACxB,CAAC,MAAA,KAA0C;AACzC,QAAA,MAAM,KAAA,GAAQ,OAAO,QAAA,EAAS;AAC9B,QAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,KAAA,CAAA;AAAA,MACb,CAAA;AAAA,MACA,CAAC,QAAQ;AAAA,KACX;AAEA,IAAA,uBACEC,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,yFAAA;AAAA,UACA,WAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,SAAA,EAAW,aAAA;AAAA,QACX,IAAA,EAAK,aAAA;AAAA,QACL,YAAA,EAAW,aAAA;AAAA,QAGX,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sEAAA,EACb,QAAA,EAAA;AAAA,4BAAAL,GAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,SAAS,MAAM,WAAA,CAAY,SAAA,CAAU,QAAA,EAAU,CAAC,CAAC,CAAA;AAAA,gBACjD,SAAA,EAAU,wFAAA;AAAA,gBACV,YAAA,EAAW,gBAAA;AAAA,gBAEX,QAAA,kBAAAA,GAAAA,CAAC,WAAA,EAAA,EAAY,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,aACzB;AAAA,4BAEAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,8BAAAL,GAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,SAAS,MACP,WAAA,CAAY,QAAA,KAAa,OAAA,GAAU,aAAa,OAAO,CAAA;AAAA,kBAEzD,SAAA,EAAW,EAAA;AAAA,oBACT,8DAAA;AAAA,oBACA,QAAA,KAAa,UACT,2BAAA,GACA;AAAA,mBACN;AAAA,kBAEC,QAAA,EAAAC,MAAAA,CAAO,QAAA,EAAU,MAAM;AAAA;AAAA,eAC1B;AAAA,8BACAD,GAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,SAAS,MACP,WAAA,CAAY,QAAA,KAAa,MAAA,GAAS,aAAa,MAAM,CAAA;AAAA,kBAEvD,SAAA,EAAW,EAAA;AAAA,oBACT,8DAAA;AAAA,oBACA,QAAA,KAAa,SACT,2BAAA,GACA;AAAA,mBACN;AAAA,kBAEC,QAAA,EAAAC,MAAAA,CAAO,QAAA,EAAU,MAAM;AAAA;AAAA;AAC1B,aAAA,EACF,CAAA;AAAA,4BAEAD,GAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,SAAS,MAAM,WAAA,CAAY,SAAA,CAAU,QAAA,EAAU,CAAC,CAAC,CAAA;AAAA,gBACjD,SAAA,EAAU,wFAAA;AAAA,gBACV,YAAA,EAAW,YAAA;AAAA,gBAEX,QAAA,kBAAAA,GAAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA;AAC1B,WAAA,EACF,CAAA;AAAA,0BAGAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EAEZ,QAAA,EAAA;AAAA,YAAA,OAAA,IAAW,OAAA,CAAQ,MAAA,GAAS,CAAA,oBAC3BL,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kEAAA,EACZ,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACZA,GAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBAEC,IAAA,EAAK,QAAA;AAAA,gBACL,OAAA,EAAS,MAAM,iBAAA,CAAkB,MAAM,CAAA;AAAA,gBACvC,SAAA,EAAU,8HAAA;AAAA,gBAET,QAAA,EAAA,MAAA,CAAO;AAAA,eAAA;AAAA,cALH,MAAA,CAAO;AAAA,aAOf,CAAA,EACH,CAAA;AAAA,4BAGFA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cACb,QAAA,kBAAAK,IAAAA,CAAC,eAAA,EAAA,EAAgB,IAAA,EAAK,MAAA,EACnB,QAAA,EAAA;AAAA,cAAA,QAAA,KAAa,8BACZL,GAAAA;AAAA,gBAACE,MAAAA,CAAO,GAAA;AAAA,gBAAP;AAAA,kBAEC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,kBAC5B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,kBAC5B,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,kBAC1B,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,CAAC,IAAA,EAAM,GAAA,EAAK,IAAA,EAAM,CAAC,CAAA,EAAE;AAAA,kBACzD,SAAA,EAAU,iCAAA;AAAA,kBAET,QAAA,EAAA,CAAC,GAAG,KAAA,CAAM,cAAc,CAAC,EAAE,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBAClCF,GAAAA;AAAA,oBAAC,iBAAA;AAAA,oBAAA;AAAA,sBAEC,KAAA,EAAO,SAAA,CAAU,QAAA,EAAU,CAAC,CAAA;AAAA,sBAC5B,IAAA;AAAA,sBACA,YAAA;AAAA,sBACA,aAAA;AAAA,sBACA,SAAA;AAAA,sBACA,WAAA,EAAa,eAAA;AAAA,sBACb,WAAA,EAAa,YAAA;AAAA,sBACb,OAAA;AAAA,sBACA,OAAA;AAAA,sBACA,aAAA;AAAA,sBACA,SAAA;AAAA,sBACA,SAAA;AAAA,sBACA,WAAW,cAAA,GAAiB;AAAA,qBAAA;AAAA,oBAbvB;AAAA,mBAeR;AAAA,iBAAA;AAAA,gBAxBG;AAAA,eAyBN;AAAA,cAGD,QAAA,KAAa,2BACZA,GAAAA;AAAA,gBAAC,qBAAA;AAAA,gBAAA;AAAA,kBACC,YAAA,EAAc,QAAA;AAAA,kBACd,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,oBAAA,WAAA,CAAY,QAAA,CAAS,QAAA,EAAU,CAAC,CAAC,CAAA;AACjC,oBAAA,WAAA,CAAY,UAAU,CAAA;AAAA,kBACxB;AAAA;AAAA,eACF;AAAA,cAGD,QAAA,KAAa,0BACZA,GAAAA;AAAA,gBAAC,oBAAA;AAAA,gBAAA;AAAA,kBACC,WAAA,EAAa,QAAQ,QAAQ,CAAA;AAAA,kBAC7B,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,oBAAA,WAAA,CAAY,OAAA,CAAQ,QAAA,EAAU,CAAC,CAAC,CAAA;AAChC,oBAAA,WAAA,CAAY,UAAU,CAAA;AAAA,kBACxB,CAAA;AAAA,kBACA,OAAA;AAAA,kBACA;AAAA;AAAA;AACF,aAAA,EAEJ,CAAA,EACF;AAAA,WAAA,EACF,CAAA;AAAA,UAGC,UAAA,oBACCK,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,8FAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,IAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,OAAA,EAAS,OAAA;AAAA,gBACT,SAAA,EAAU,mGAAA;AAAA,gBAEV,QAAA,EAAA;AAAA,kCAAAL,GAAAA,CAAC,SAAA,EAAA,EAAU,IAAA,EAAM,EAAA,EAAI,CAAA;AAAA,kBAAE;AAAA;AAAA;AAAA,aAEzB;AAAA,4BACAA,GAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,OAAA,EAAS,MAAM,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAU,KAAA,CAAA;AAAA,gBACzB,SAAA,EAAU,4IAAA;AAAA,gBACX,QAAA,EAAA;AAAA;AAAA;AAED,WAAA,EACF;AAAA;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF;AAEA,UAAA,CAAW,WAAA,GAAc,YAAA;AAEzB,IAAO,kBAAA,GAAQ;AC7Pf,IAAM,OAAA,GAA2B,gBAAA,CAAA,IAAA;AAEjC,IAAM,cAAA,GAAkC,gBAAA,CAAA,OAAA;AAExC,IAAM,iBAAuBM,KAAA,CAAA,UAAA,CAG3B,CAAC,EAAE,SAAA,EAAW,QAAQ,QAAA,EAAU,UAAA,GAAa,CAAA,EAAG,GAAG,OAAM,EAAG,GAAA,qBAC5DN,GAAAA,CAAkB,gBAAA,CAAA,MAAA,EAAjB,EACC,QAAA,kBAAAA,GAAAA;AAAA,EAAkB,gBAAA,CAAA,OAAA;AAAA,EAAjB;AAAA,IACC,GAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,4aAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CAAA,EACF,CACD,CAAA;AACD,cAAA,CAAe,cAA+B,gBAAA,CAAA,OAAA,CAAQ,WAAA;ACO/C,IAAM,kBAAkD,CAAC;AAAA,EAC9D,IAAA,GAAO,QAAA;AAAA,EACP,KAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA,GAAgB,aAAA;AAAA,EAChB,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,SAAA,GAAY,IAAA;AAAA,EACZ,KAAA,GAAQ,OAAA;AAAA,EACR,KAAA;AAAA,EACA,cAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIO,SAAS,KAAK,CAAA;AAEtC,EAAA,MAAM,kBAAA,GACJ,IAAA,KAAS,OAAA,GAAU,sBAAA,GAAyB,kBAAA;AAE9C,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,IAAI,IAAA,KAAS,QAAA,IAAY,KAAA,YAAiB,IAAA,EAAM;AAC9C,MAAA,OAAON,MAAAA,CAAO,OAAO,aAAa,CAAA;AAAA,IACpC;AACA,IAAA,IAAI,IAAA,KAAS,OAAA,IAAW,KAAA,IAAS,OAAA,IAAW,KAAA,EAAO;AACjD,MAAA,MAAM,KAAA,GAAQ,KAAA;AACd,MAAA,IAAI,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,GAAA,EAAK;AAC5B,QAAA,OAAO,CAAA,EAAGA,MAAAA,CAAO,KAAA,CAAM,KAAA,EAAO,aAAa,CAAC,CAAA,QAAA,EAAMA,MAAAA,CAAO,KAAA,CAAM,GAAA,EAAK,aAAa,CAAC,CAAA,CAAA;AAAA,MACpF;AACA,MAAA,IAAI,MAAM,KAAA,EAAO;AACf,QAAA,OAAO,CAAA,EAAGA,MAAAA,CAAO,KAAA,CAAM,KAAA,EAAO,aAAa,CAAC,CAAA,WAAA,CAAA;AAAA,MAC9C;AAAA,IACF;AACA,IAAA,OAAO,EAAA;AAAA,EACT,CAAA,GAAG;AAEH,EAAA,MAAM,WAAA,GAAcO,WAAAA;AAAA,IAClB,CAAC,GAAA,KAAsC;AACrC,MAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAU,GAAA,CAAA;AACV,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,MAAM,WAAA,GAAcA,WAAAA;AAAA,IAClB,CAAC,CAAA,KAAwB;AACvB,MAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,MAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,EAAA;AAAA,IACF,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,MAAM,YAAA,GAAeA,WAAAA;AAAA,IACnB,CAAC,GAAA,KAA0B;AACzB,MAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,GAAA,CAAA;AAEX,MAAA,IAAI,SAAS,QAAA,EAAU;AACrB,QAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,MACf;AAAA,IACF,CAAA;AAAA,IACA,CAAC,UAAU,IAAI;AAAA,GACjB;AAEA,EAAA,uBACEH,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EACZ,QAAA,EAAA;AAAA,IAAA,KAAA,oBACCL,GAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,uCAAuC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBAEhEK,IAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAY,cAAc,OAAA,EACjC,QAAA,EAAA;AAAA,sBAAAL,GAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,QAAA,kBAAAK,IAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,QAAA;AAAA,UACA,SAAA,EAAW,EAAA;AAAA,YACT,+FAAA;AAAA,YACA,0CAAA;AAAA,YACA,uHAAA;AAAA,YACA,iDAAA;AAAA,YACA,CAAC,YAAA,IAAgB,uBAAA;AAAA,YACjB,YAAA,IAAgB,iBAAA;AAAA,YAChB;AAAA,WACF;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAAL,GAAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,wCAAA,EAAyC,CAAA;AAAA,4BACjEA,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,2BAAA,EACb,QAAA,EAAA,YAAA,IAAgB,eAAe,kBAAA,EAClC,CAAA;AAAA,YACC,SAAA,IAAa,gCACZA,GAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,QAAA,EAAU,CAAA;AAAA,gBACV,OAAA,EAAS,WAAA;AAAA,gBACT,WAAW,CAAC,CAAA,KAAM,EAAE,GAAA,KAAQ,OAAA,IAAW,YAAY,CAAQ,CAAA;AAAA,gBAC3D,SAAA,EAAU,yDAAA;AAAA,gBACV,YAAA,EAAW,iBAAA;AAAA,gBAEX,QAAA,kBAAAA,GAAAA,CAAC,CAAA,EAAA,EAAE,SAAA,EAAU,mCAAA,EAAoC;AAAA;AAAA;AACnD;AAAA;AAAA,OAEJ,EACF,CAAA;AAAA,sBACAA,GAAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,EAAA,CAAG,gCAAA,EAAkC,gBAAgB,CAAA;AAAA,UAChE,KAAA;AAAA,UACA,UAAA,EAAY,CAAA;AAAA,UAEZ,QAAA,kBAAAA,GAAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,IAAA;AAAA,cACA,KAAA;AAAA,cACA,QAAA,EAAU,YAAA;AAAA,cACV,OAAA,EAAS,IAAA,KAAS,OAAA,GAAU,WAAA,GAAc,MAAA;AAAA,cAC1C,OAAA;AAAA,cACA,cAAA,EAAgB,cAAA,IAAA,IAAA,GAAA,cAAA,GAAmB,IAAA,KAAS,OAAA,GAAU,CAAA,GAAI,CAAA;AAAA,cAC1D,YAAY,IAAA,KAAS,OAAA;AAAA,cACrB,OAAA;AAAA,cACA,OAAA;AAAA,cACA,OAAA;AAAA,cACA,aAAA;AAAA,cACA,SAAA;AAAA,cACA,SAAA;AAAA,cACA,SAAA,EAAW,EAAA,CAAG,sBAAA,EAAwB,iBAAiB;AAAA;AAAA;AACzD;AAAA;AACF,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ","file":"index.mjs","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/style.css CHANGED
@@ -4,6 +4,12 @@
4
4
  "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
5
5
  --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
6
6
  "Courier New", monospace;
7
+ --color-gray-50: oklch(98.5% 0.002 247.839);
8
+ --color-gray-100: oklch(96.7% 0.003 264.542);
9
+ --color-gray-200: oklch(92.8% 0.006 264.531);
10
+ --color-gray-400: oklch(70.7% 0.022 261.325);
11
+ --color-gray-900: oklch(21% 0.034 264.665);
12
+ --color-white: #fff;
7
13
  --spacing: 0.25rem;
8
14
  --text-xs: 0.75rem;
9
15
  --text-xs--line-height: calc(1 / 0.75);
@@ -359,8 +365,17 @@ button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-se
359
365
  border-bottom-style: var(--tw-border-style);
360
366
  border-bottom-width: 1px;
361
367
  }
362
- .bg-\[hsl\(var\(--dp-range-tint\)\/0\.08\)\] {
363
- background-color: hsl(var(--dp-range-tint)/0.08);
368
+ .border-gray-200 {
369
+ border-color: var(--color-gray-200);
370
+ }
371
+ .bg-gray-50 {
372
+ background-color: var(--color-gray-50);
373
+ }
374
+ .bg-gray-100 {
375
+ background-color: var(--color-gray-100);
376
+ }
377
+ .bg-white {
378
+ background-color: var(--color-white);
364
379
  }
365
380
  .p-0 {
366
381
  padding: calc(var(--spacing) * 0);
@@ -430,6 +445,12 @@ button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-se
430
445
  --tw-tracking: var(--tracking-wider);
431
446
  letter-spacing: var(--tracking-wider);
432
447
  }
448
+ .text-gray-400 {
449
+ color: var(--color-gray-400);
450
+ }
451
+ .text-gray-900 {
452
+ color: var(--color-gray-900);
453
+ }
433
454
  .uppercase {
434
455
  text-transform: uppercase;
435
456
  }
@@ -444,10 +465,6 @@ button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-se
444
465
  .opacity-30 {
445
466
  opacity: 30%;
446
467
  }
447
- .shadow-\[var\(--dp-shadow\)\] {
448
- --tw-shadow: var(--dp-shadow);
449
- box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
450
- }
451
468
  .shadow-md {
452
469
  --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
453
470
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
@@ -484,6 +501,13 @@ button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-se
484
501
  -moz-user-select: none;
485
502
  user-select: none;
486
503
  }
504
+ .hover\:bg-gray-100 {
505
+ &:hover {
506
+ @media (hover: hover) {
507
+ background-color: var(--color-gray-100);
508
+ }
509
+ }
510
+ }
487
511
  .hover\:bg-transparent {
488
512
  &:hover {
489
513
  @media (hover: hover) {
@@ -491,6 +515,13 @@ button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-se
491
515
  }
492
516
  }
493
517
  }
518
+ .hover\:text-gray-900 {
519
+ &:hover {
520
+ @media (hover: hover) {
521
+ color: var(--color-gray-900);
522
+ }
523
+ }
524
+ }
494
525
  .hover\:opacity-90 {
495
526
  &:hover {
496
527
  @media (hover: hover) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "snack-datepicker",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "description": "A modern, lightweight and customizable React DatePicker and Date Range Picker with presets, multi-month view and flexible configuration.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",