From d887d0d750205fff3c80264a95cf51c8050fec21 Mon Sep 17 00:00:00 2001 From: Karan Zala Date: Tue, 14 Apr 2026 14:06:26 +0530 Subject: [PATCH 1/4] feat(datepicker): add showOutsideDays prop and css fixes --- apps/storybook/src/Datepicker.stories.tsx | 7 +++++++ packages/ui/src/components/Datepicker/Datepicker.tsx | 5 ++++- .../src/components/Datepicker/DatepickerContext.tsx | 1 + packages/ui/src/components/Datepicker/Views/Days.tsx | 12 ++++++++++-- packages/ui/src/components/Datepicker/theme.ts | 4 +++- 5 files changed, 25 insertions(+), 4 deletions(-) diff --git a/apps/storybook/src/Datepicker.stories.tsx b/apps/storybook/src/Datepicker.stories.tsx index 231e7f0cd..0345e4460 100644 --- a/apps/storybook/src/Datepicker.stories.tsx +++ b/apps/storybook/src/Datepicker.stories.tsx @@ -86,6 +86,7 @@ ControlledDefaultEmpty.args = { autoHide: true, showClearButton: true, showTodayButton: true, + showOutsideDays: true, value: null, minDate: undefined, maxDate: undefined, @@ -100,6 +101,7 @@ Default.args = { autoHide: true, showClearButton: true, showTodayButton: true, + showOutsideDays: true, value: undefined, minDate: undefined, maxDate: undefined, @@ -113,6 +115,7 @@ NullDateValue.args = { autoHide: true, showClearButton: true, showTodayButton: true, + showOutsideDays: true, minDate: undefined, maxDate: undefined, language: "en", @@ -125,6 +128,7 @@ DateValueSet.args = { autoHide: true, showClearButton: true, showTodayButton: true, + showOutsideDays: true, minDate: undefined, maxDate: undefined, language: "en", @@ -138,6 +142,7 @@ EmptyDates.args = { autoHide: true, showClearButton: true, showTodayButton: true, + showOutsideDays: true, defaultValue: undefined, value: undefined, minDate: undefined, @@ -154,6 +159,7 @@ FilterWeekdaysOnly.args = { autoHide: false, showClearButton: true, showTodayButton: true, + showOutsideDays: true, defaultValue: undefined, value: undefined, minDate: undefined, @@ -177,6 +183,7 @@ FilterEvenDatesOnly.args = { autoHide: false, showClearButton: true, showTodayButton: true, + showOutsideDays: true, defaultValue: undefined, value: undefined, minDate: undefined, diff --git a/packages/ui/src/components/Datepicker/Datepicker.tsx b/packages/ui/src/components/Datepicker/Datepicker.tsx index 7267a3e0f..2c7a7abfe 100644 --- a/packages/ui/src/components/Datepicker/Datepicker.tsx +++ b/packages/ui/src/components/Datepicker/Datepicker.tsx @@ -99,6 +99,7 @@ export interface DatepickerProps labelClearButton?: string; showTodayButton?: boolean; labelTodayButton?: string; + showOutsideDays?: boolean; minDate?: Date; maxDate?: Date; filterDate?: (date: Date, view: Views) => boolean; @@ -126,6 +127,7 @@ export const Datepicker = forwardRef((props, ref labelClearButton = "Clear", showTodayButton = true, labelTodayButton = "Today", + showOutsideDays = true, defaultValue, minDate, maxDate, @@ -158,7 +160,7 @@ export const Datepicker = forwardRef((props, ref // Triggers when user select the date function changeSelectedDate(date: Date | null, useAutohide: boolean) { setSelectedDate(date); - + if (date) setViewDate(date); if ((date === null || date) && onChange) { onChange(date); } @@ -282,6 +284,7 @@ export const Datepicker = forwardRef((props, ref maxDate, filterDate, weekStart, + showOutsideDays, isOpen, setIsOpen, view, diff --git a/packages/ui/src/components/Datepicker/DatepickerContext.tsx b/packages/ui/src/components/Datepicker/DatepickerContext.tsx index d00a88ed9..51b3d352f 100644 --- a/packages/ui/src/components/Datepicker/DatepickerContext.tsx +++ b/packages/ui/src/components/Datepicker/DatepickerContext.tsx @@ -8,6 +8,7 @@ export interface DatepickerContextValue { theme: DatepickerTheme; language: string; weekStart: WeekStart; + showOutsideDays: boolean; minDate?: Date; maxDate?: Date; filterDate?: (date: Date, view: Views) => boolean; diff --git a/packages/ui/src/components/Datepicker/Views/Days.tsx b/packages/ui/src/components/Datepicker/Views/Days.tsx index f91a0843f..5d056da69 100644 --- a/packages/ui/src/components/Datepicker/Views/Days.tsx +++ b/packages/ui/src/components/Datepicker/Views/Days.tsx @@ -10,6 +10,7 @@ import { isDateEqual, isDateInRange, isDateToday, + isMonthEqual, Views, } from "../helpers"; @@ -24,6 +25,8 @@ export interface DatepickerViewsDaysTheme { base: string; selected: string; disabled: string; + outside: string; + hidden: string; today: string; }; }; @@ -35,6 +38,7 @@ export function DatepickerViewsDays() { weekStart, minDate, maxDate, + showOutsideDays, filterDate, viewDate, selectedDate, @@ -65,10 +69,12 @@ export function DatepickerViewsDays() { const isDisabled = !isDateInRange(currentDate, minDate, maxDate) || (filterDate && !filterDate(currentDate, Views.Days)); const isToday = isDateToday(currentDate); + const isOutsideDay = !isMonthEqual(currentDate, viewDate); + const isHidden = isOutsideDay && !showOutsideDays; return (