registry:component
Calendar
v1.0.0ga
Date picker calendar primitive based on DayPicker.
Registry Endpoint
Open JSONhttps://registry.aavya.com/r/ui-calendar.json
npx shadcn@latest add https://registry.aavya.com/r/ui-calendar.json
Live Preview
Usage Snippet
import Calendar from '@/components/ui/calendar.tsx'
export default function Example() {
return (
<div className="p-6">
<Calendar />
</div>
)
}
Source Preview
'use client'
import * as React from 'react'
import { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon } from 'lucide-react'
import type { DayButton } from 'react-day-picker'
import { DayPicker, getDefaultClassNames } from 'react-day-picker'
import { cn } from '@/lib/utils'
import { Button, buttonVariants } from '@/components/ui/button'
function Calendar({
className,
classNames,
showOutsideDays = true,
captionLayout = 'label',
buttonVariant = 'ghost',
formatters,
components,
...props
}: React.ComponentProps<typeof DayPicker> & {
buttonVariant?: React.ComponentProps<typeof Button>['variant']
}) {
const defaultClassNames = getDefaultClassNames()
return (
<DayPicker
showOutsideDays={showOutsideDays}
className={cn(
'bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent',
String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,
String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,
className
)}
captionLayout={captionLayout}
formatters={{
formatMonthDropdown: date => date.toLocaleString('default', { month: 'short' }),
...formatters
}}
classNames={{
root: cn('w-fit', defaultClassNames.root),
months: cn('flex gap-4 flex-col md:flex-row relative', defaul