diff --git a/.changeset/cyan-emus-swim.md b/.changeset/cyan-emus-swim.md new file mode 100644 index 0000000000..48ef694f26 --- /dev/null +++ b/.changeset/cyan-emus-swim.md @@ -0,0 +1,5 @@ +--- +"@nextui-org/date-picker": patch +--- + +Fix calendar props on date-range-picker diff --git a/apps/docs/content/components/date-range-picker/custom-styles.ts b/apps/docs/content/components/date-range-picker/custom-styles.ts new file mode 100644 index 0000000000..6c11daf883 --- /dev/null +++ b/apps/docs/content/components/date-range-picker/custom-styles.ts @@ -0,0 +1,41 @@ +const App = `import {DateRangePicker} from "@nextui-org/react"; + +export default function App() { + return ( + + ); +}`; + +const react = { + "/App.jsx": App, +}; + +export default { + ...react, +}; diff --git a/apps/docs/content/components/date-range-picker/index.ts b/apps/docs/content/components/date-range-picker/index.ts index 27759f8408..313789ff29 100644 --- a/apps/docs/content/components/date-range-picker/index.ts +++ b/apps/docs/content/components/date-range-picker/index.ts @@ -19,6 +19,7 @@ import visibleMonth from "./visible-month"; import pageBehavior from "./page-behavior"; import nonContigous from "./non-contiguous"; import presets from "./presets"; +import customStyles from "./custom-styles"; export const dateRangePickerContent = { usage, @@ -42,4 +43,5 @@ export const dateRangePickerContent = { pageBehavior, nonContigous, presets, + customStyles, }; diff --git a/apps/docs/content/docs/components/date-range-picker.mdx b/apps/docs/content/docs/components/date-range-picker.mdx index b03e2d6245..cfabdb5d15 100644 --- a/apps/docs/content/docs/components/date-range-picker.mdx +++ b/apps/docs/content/docs/components/date-range-picker.mdx @@ -302,6 +302,12 @@ import {useLocale, useDateFormatter} from "@react-aria/i18n"; - **description**: The description of the date-input. - **errorMessage**: The error message of the date-input. +### Custom Styles + +You can customize the `DateRangePicker` component by passing custom Tailwind CSS classes to the component slots. + + + ## Data Attributes diff --git a/packages/components/date-picker/src/use-date-range-picker.ts b/packages/components/date-picker/src/use-date-range-picker.ts index 42df170d40..5bd728a169 100644 --- a/packages/components/date-picker/src/use-date-range-picker.ts +++ b/packages/components/date-picker/src/use-date-range-picker.ts @@ -20,7 +20,7 @@ import {useDateRangePickerState} from "@react-stately/datepicker"; import {useDateRangePicker as useAriaDateRangePicker} from "@react-aria/datepicker"; import {clsx, dataAttr, objectToDeps} from "@nextui-org/shared-utils"; import {mergeProps} from "@react-aria/utils"; -import {dateRangePicker, dateInput} from "@nextui-org/theme"; +import {dateRangePicker, dateInput, cn} from "@nextui-org/theme"; import {ariaShouldCloseOnInteractOutside} from "@nextui-org/aria-utils"; import {useDatePickerBase} from "./use-date-picker-base"; @@ -227,8 +227,11 @@ export function useDateRangePicker({ ...ariaCalendarProps, ...calendarProps, classNames: { - base: slots.calendar({class: classNames?.calendar}), - content: slots.calendarContent({class: classNames?.calendarContent}), + ...calendarProps.classNames, + base: slots.calendar({class: cn(calendarProps?.classNames?.base, classNames?.calendar)}), + content: slots.calendarContent({ + class: cn(calendarProps?.classNames?.content, classNames?.calendarContent), + }), }, } as RangeCalendarProps; }; diff --git a/packages/components/date-picker/stories/date-range-picker.stories.tsx b/packages/components/date-picker/stories/date-range-picker.stories.tsx index 25df66ab0c..ac5b3103ea 100644 --- a/packages/components/date-picker/stories/date-range-picker.stories.tsx +++ b/packages/components/date-picker/stories/date-range-picker.stories.tsx @@ -636,3 +636,38 @@ export const WithValidation = { label: "Date Range (Year 2024 or later)", }, }; + +export const CustomStyles = { + render: Template, + + args: { + ...defaultProps, + variant: "bordered", + className: "max-w-xs", + calendarProps: { + classNames: { + base: "bg-background", + headerWrapper: "pt-4 bg-background", + prevButton: "border-1 border-default-200 rounded-small", + nextButton: "border-1 border-default-200 rounded-small", + gridHeader: "bg-background shadow-none border-b-1 border-default-100", + cellButton: [ + "data-[today=true]:bg-default-100 data-[selected=true]:bg-transparent rounded-small", + // start (pseudo) + "data-[range-start=true]:before:rounded-l-small", + "data-[selection-start=true]:before:rounded-l-small", + + // end (pseudo) + "data-[range-end=true]:before:rounded-r-small", + "data-[selection-end=true]:before:rounded-r-small", + + // start (selected) + "data-[selected=true]:data-[selection-start=true]:data-[range-selection=true]:rounded-small", + + // end (selected) + "data-[selected=true]:data-[selection-end=true]:data-[range-selection=true]:rounded-small", + ], + }, + }, + }, +};