diff --git a/.changeset/flat-spoons-double.md b/.changeset/flat-spoons-double.md
new file mode 100644
index 0000000000..a242ecc20a
--- /dev/null
+++ b/.changeset/flat-spoons-double.md
@@ -0,0 +1,7 @@
+---
+"@/storybook": patch
+"@/web": patch
+"flowbite-react": patch
+---
+
+feat(datepicker): add showOutsideDays prop and css fixes
diff --git a/apps/storybook/src/Datepicker.stories.tsx b/apps/storybook/src/Datepicker.stories.tsx
index 231e7f0cde..0345e4460e 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/apps/web/content/docs/components/datepicker.mdx b/apps/web/content/docs/components/datepicker.mdx
index 7e3e317019..ff34e1fb4e 100644
--- a/apps/web/content/docs/components/datepicker.mdx
+++ b/apps/web/content/docs/components/datepicker.mdx
@@ -83,6 +83,12 @@ Use ``. Pass `null`
+## Outside days
+
+Use the `showOutsideDays` prop to show or hide the days falling into other months.
+
+
+
## Theme
To learn more about how to customize the appearance of components, please see the [Theme docs](/docs/customize/theme).
diff --git a/apps/web/examples/datepicker/datepicker.showOutsideDays.tsx b/apps/web/examples/datepicker/datepicker.showOutsideDays.tsx
new file mode 100644
index 0000000000..74dd23b040
--- /dev/null
+++ b/apps/web/examples/datepicker/datepicker.showOutsideDays.tsx
@@ -0,0 +1,25 @@
+import { Datepicker } from "flowbite-react";
+import type { CodeData } from "~/components/code-demo";
+
+const code = `
+import { Datepicker } from "flowbite-react";
+
+export function Component() {
+ return ;
+}
+`;
+
+export function Component() {
+ return ;
+}
+
+export const showOutsideDays: CodeData = {
+ type: "single",
+ code: {
+ fileName: "index",
+ language: "tsx",
+ code,
+ },
+ githubSlug: "datepicker/datepicker.showOutsideDays.tsx",
+ component: ,
+};
diff --git a/apps/web/examples/datepicker/index.ts b/apps/web/examples/datepicker/index.ts
index f477842dc4..fe4ee29994 100644
--- a/apps/web/examples/datepicker/index.ts
+++ b/apps/web/examples/datepicker/index.ts
@@ -6,4 +6,5 @@ export { range } from "./datepicker.range";
export { root } from "./datepicker.root";
export { title } from "./datepicker.title";
export { value } from "./datepicker.value";
+export { showOutsideDays } from "./datepicker.showOutsideDays";
export { weekStart } from "./datepicker.weekStart";
diff --git a/packages/ui/src/components/Datepicker/Datepicker.tsx b/packages/ui/src/components/Datepicker/Datepicker.tsx
index 7267a3e0f5..2c7a7abfef 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 d00a88ed94..51b3d352f4 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 f91a0843fa..5d056da69d 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 (