"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 (
);
}
const Calendar = dynamic(
() => import("@/components/ui/calendar").then((m) => m.Calendar),
{
ssr: false,
loading: CalendarLoading,
},
);
// Preset chips should look identical in light/dark.
// We intentionally keep them "white pill" style in both modes (consistent + readable).
const PRESET_BADGE_CLASS = [
"bg-white text-black border-border",
"hover:bg-white/90",
"dark:bg-white dark:text-black",
].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 (
{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.
);
}