diff --git a/.changeset/cool-dolls-cheat.md b/.changeset/cool-dolls-cheat.md
new file mode 100644
index 0000000000..17c176f587
--- /dev/null
+++ b/.changeset/cool-dolls-cheat.md
@@ -0,0 +1,5 @@
+---
+"@nextui-org/date-picker": patch
+---
+
+Add support for apply styles to DateInput (#2770, #2895, #2998)
diff --git a/apps/docs/content/docs/components/date-picker.mdx b/apps/docs/content/docs/components/date-picker.mdx
index 139b6d809f..9bfd9cc04a 100644
--- a/apps/docs/content/docs/components/date-picker.mdx
+++ b/apps/docs/content/docs/components/date-picker.mdx
@@ -342,6 +342,7 @@ import {I18nProvider} from "@react-aria/i18n";
| timeInputProps | `TimeInputProps` | Props to be passed to the time input component. | `{ size: "sm", variant: "light", radius: "full", isIconOnly: true }` |
| disableAnimation | `boolean` | Whether to disable all animations in the date picker. Including the DateInput, Button, Calendar, and Popover. | `false` |
| classNames | `Record<"base" \| "selectorButton" \| "selectorIcon" \| "popoverContent" \| "calendar" \| "calendarContent" \| "timeInputLabel" \| "timeInput", string>` | Allows to set custom class names for the date-picker slots. | - |
+| dateInputClassNames | `Record<"base"| "label"| "inputWrapper"| "innerWrapper"| "input"| "helperWrapper"| "description"| "errorMessage", string>` | Allows to set custom class names for the [date input slots](/docs/components/date-input#slots). | - |
### DatePicker Events
diff --git a/packages/components/date-picker/__tests__/date-picker.test.tsx b/packages/components/date-picker/__tests__/date-picker.test.tsx
index 3bb62626a0..fbdad01e89 100644
--- a/packages/components/date-picker/__tests__/date-picker.test.tsx
+++ b/packages/components/date-picker/__tests__/date-picker.test.tsx
@@ -172,6 +172,26 @@ describe("DatePicker", () => {
expect(getByTestId("foo")).toHaveAttribute("role", "group");
});
+
+ it("should apply custom dateInput classNames", function () {
+ const {getByRole, getByText} = render(
+ ,
+ );
+
+ const label = getByText("Date");
+
+ expect(label).toHaveClass("text-green-500");
+
+ const inputWrapper = getByRole("group");
+
+ expect(inputWrapper).toHaveClass("border-green-500");
+ });
});
describe("Events", () => {
diff --git a/packages/components/date-picker/src/use-date-picker.ts b/packages/components/date-picker/src/use-date-picker.ts
index 8d4957bdf2..ecf229dc9b 100644
--- a/packages/components/date-picker/src/use-date-picker.ts
+++ b/packages/components/date-picker/src/use-date-picker.ts
@@ -49,7 +49,13 @@ interface Props
classNames?: SlotsToClasses & DateInputProps["classNames"];
}
-export type UseDatePickerProps = Props & AriaDatePickerProps;
+export type UseDatePickerProps = Props &
+ AriaDatePickerProps & {
+ /**
+ * Classname or List of classes to change the classNames of the date input element.
+ */
+ dateInputClassNames?: DateInputProps["classNames"];
+ };
export function useDatePicker({
className,
@@ -129,6 +135,7 @@ export function useDatePicker({
const getDateInputProps = () => {
return {
...dateInputProps,
+ classNames: {...originalProps?.dateInputClassNames},
groupProps,
labelProps,
createCalendar,
diff --git a/packages/components/date-picker/stories/date-picker.stories.tsx b/packages/components/date-picker/stories/date-picker.stories.tsx
index 1dac4ee286..f121153be2 100644
--- a/packages/components/date-picker/stories/date-picker.stories.tsx
+++ b/packages/components/date-picker/stories/date-picker.stories.tsx
@@ -537,3 +537,18 @@ export const WithValidation = {
label: "Date (Year 2024 or later)",
},
};
+
+export const WithDateInputClassNames = {
+ render: Template,
+ args: {
+ ...defaultProps,
+ dateInputClassNames: {
+ base: "bg-gray-200 p-2 rounded-md",
+ label: "text-blue-400 font-semibold",
+ inputWrapper: "border-3 border-solid border-blue-400 p-2 rounded-md",
+ description: "text-black",
+ },
+ isRequired: true,
+ description: "Please enter your birth date",
+ },
+};