diff --git a/frontend/src/components/ui/date-picker.tsx b/frontend/src/components/ui/date-picker.tsx index cf20a6b..a8756ed 100644 --- a/frontend/src/components/ui/date-picker.tsx +++ b/frontend/src/components/ui/date-picker.tsx @@ -3,6 +3,10 @@ import { createPortal } from 'react-dom'; import { Calendar, ChevronLeft, ChevronRight, Clock } from 'lucide-react'; import { cn } from '@/lib/utils'; +// ── Browser detection (stable — checked once at module load) ── + +const isFirefox = typeof navigator !== 'undefined' && /Firefox\//i.test(navigator.userAgent); + // ── Helpers ── function getDaysInMonth(year: number, month: number): number { @@ -429,18 +433,35 @@ const DatePicker = React.forwardRef( ) : null; - // ── Input variant: native date/datetime-local + calendar icon for custom popup ── + // ── Input variant ── + // Firefox: use type="text" to avoid the native calendar icon that cannot be + // hidden via CSS (Firefox has no ::-webkit-calendar-picker-indicator equivalent). + // Chromium: use native type="date"/"datetime-local" for segmented editing UX, + // with the native icon hidden via CSS in index.css (.datepicker-wrapper rule). if (variant === 'input') { + const nativeType = isFirefox + ? 'text' + : mode === 'datetime' + ? 'datetime-local' + : 'date'; + + const textPlaceholder = isFirefox + ? mode === 'datetime' + ? 'YYYY-MM-DDThh:mm' + : 'YYYY-MM-DD' + : undefined; + return ( <>
onChange(e.target.value)} onBlur={handleInputBlur} onKeyDown={(e) => { @@ -452,8 +473,8 @@ const DatePicker = React.forwardRef( }} required={required} disabled={disabled} - min={min} - max={max} + min={isFirefox ? undefined : min} + max={isFirefox ? undefined : max} className={cn( 'flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 pr-9 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50', className