{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "calendar",
  "title": "Calendar",
  "description": "A polished single, multiple or range date selection surface.",
  "dependencies": [
    "lucide-react",
    "react-day-picker"
  ],
  "registryDependencies": [
    "@rivelle/utils",
    "@rivelle/button"
  ],
  "files": [
    {
      "path": "registry/nova/ui/calendar.tsx",
      "content": "\"use client\";\n\nimport * as React from \"react\";\nimport {\n  ChevronDown,\n  ChevronLeft,\n  ChevronRight,\n  ChevronUp,\n} from \"lucide-react\";\nimport { DayPicker, type ChevronProps } from \"react-day-picker\";\n\nimport { cn } from \"@/lib/utils\";\nimport { buttonVariants } from \"@/components/ui/button\";\n\nfunction Calendar({\n  className,\n  classNames,\n  showOutsideDays = true,\n  ...props\n}: React.ComponentProps<typeof DayPicker>) {\n  return (\n    <DayPicker\n      showOutsideDays={showOutsideDays}\n      className={cn(\n        \"w-fit rounded-2xl border border-foreground/10 bg-background/80 p-3 shadow-[inset_0_1px_0_color-mix(in_oklch,var(--background)_75%,transparent)]\",\n        className,\n      )}\n      classNames={{\n        months: \"relative flex flex-col gap-5 sm:flex-row\",\n        month: \"flex w-full flex-col gap-4\",\n        nav: \"absolute inset-x-0 top-0 flex items-center justify-between\",\n        button_previous: cn(\n          buttonVariants({ variant: \"ghost\", size: \"icon-sm\" }),\n          \"size-8 hover:-translate-y-0\",\n        ),\n        button_next: cn(\n          buttonVariants({ variant: \"ghost\", size: \"icon-sm\" }),\n          \"size-8 hover:-translate-y-0\",\n        ),\n        month_caption: \"flex h-8 items-center justify-center px-9\",\n        caption_label: \"text-sm font-semibold tracking-[-0.02em]\",\n        dropdowns:\n          \"flex h-8 items-center justify-center gap-1 text-sm font-semibold\",\n        dropdown_root:\n          \"relative rounded-lg border border-foreground/10 bg-foreground/[.035] px-2 py-1\",\n        dropdown: \"absolute inset-0 cursor-pointer opacity-0\",\n        month_grid: \"w-full border-collapse\",\n        weekdays: \"flex\",\n        weekday:\n          \"w-9 rounded-md text-center text-[0.68rem] font-semibold uppercase tracking-[0.06em] text-muted-foreground\",\n        week: \"mt-1 flex w-full\",\n        day: \"relative size-9 p-0 text-center text-sm [&:has([aria-selected].range-end)]:rounded-r-xl [&:has([aria-selected].range-start)]:rounded-l-xl [&:has([aria-selected])]:bg-primary/10\",\n        day_button: cn(\n          buttonVariants({ variant: \"ghost\", size: \"icon-sm\" }),\n          \"size-9 rounded-xl p-0 font-medium hover:-translate-y-0\",\n        ),\n        range_start: \"range-start\",\n        range_middle:\n          \"aria-selected:bg-primary/10 aria-selected:text-foreground aria-selected:rounded-none\",\n        range_end: \"range-end\",\n        selected:\n          \"[&>button]:bg-primary [&>button]:text-primary-foreground [&>button]:shadow-[0_8px_20px_-12px_var(--primary)]\",\n        today:\n          \"[&>button]:border [&>button]:border-primary/35 [&>button]:text-primary\",\n        outside: \"text-muted-foreground/45 opacity-60\",\n        disabled: \"text-muted-foreground/35 opacity-40\",\n        hidden: \"invisible\",\n        ...classNames,\n      }}\n      components={{ Chevron: CalendarChevron, ...props.components }}\n      {...props}\n    />\n  );\n}\n\nfunction CalendarChevron({ orientation, className, ...props }: ChevronProps) {\n  const Icon =\n    orientation === \"left\"\n      ? ChevronLeft\n      : orientation === \"right\"\n        ? ChevronRight\n        : orientation === \"up\"\n          ? ChevronUp\n          : ChevronDown;\n  return <Icon className={cn(\"size-4\", className)} {...props} />;\n}\n\nexport { Calendar };\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}