"use client"; import * as React from "react"; import dynamic from "next/dynamic"; import { Calendar as CalendarIcon, X } from "lucide-react"; import { cn } from "@/lib/utils"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover"; import { Skeleton } from "@/components/ui/skeleton"; import { useSearchDateRangePicker } from "@/lib/frontend/search/useSearchDateRangePicker"; function CalendarLoading() { return (

Kalender lädt…

); } const Calendar = dynamic( () => import("@/components/ui/calendar").then((m) => m.Calendar), { ssr: false, loading: CalendarLoading, }, ); // Preset chips: // - Light mode: black background + white text (high contrast) // - Dark mode: keep white pills (reads well on dark surfaces) const PRESET_BADGE_CLASS = [ "bg-black text-white border-black", "hover:bg-black/90", "dark:bg-white dark:text-black dark:border-border", "dark:hover:bg-white/90", ].join(" "); export default function SearchDateRangePicker({ from, to, onDateRangeChange, isSubmitting, className, }) { const { disabled, open, setOpen, activeField, setActiveField, fromRef, toRef, month, setMonth, summary, fromDisplay, toDisplay, presetsRow1, presetsRow2, calendarKey, calendarSelected, calendarModifiers, calendarModifiersClassNames, isRangeInvalid, handlePickDay, handleClearFrom, handleClearTo, handleReset, applyPreset, } = useSearchDateRangePicker({ from, to, onDateRangeChange, isSubmitting, }); const fromInputId = React.useId(); const toInputId = React.useId(); const activeInputClass = "border-blue-600 bg-blue-50 dark:border-blue-900 dark:bg-blue-950"; return (
setActiveField("from")} onClick={() => setActiveField("from")} /> {from ? ( ) : null}
setActiveField("to")} onClick={() => setActiveField("to")} /> {to ? ( ) : null}
{isRangeInvalid ? (

Das Startdatum darf nicht nach dem Enddatum liegen.

) : null}
Schnellwahl
{presetsRow1.map((p) => ( ))}
{presetsRow2.map((p) => ( ))}

Tipp: Für einen einzelnen Tag setzen Sie Von und Bis{" "} auf dasselbe Datum.

); }