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", + }, +};