DateRangeField

A segmented date range input with start and end date segments. Each part of both dates is individually editable.

Example

Date range

Range: 2026-04-03 to 2026-04-10

Root Props

PropTypeDefaultDescription
value{ start: DateValue; end: DateValue }Selected date range, bindable
onValueChange(value) => voidCalled when range changes
placeholderDateValuePlaceholder date, bindable
minValueDateValueMinimum allowed date
maxValueDateValueMaximum allowed date
disabledbooleanfalseDisable the field
readonlybooleanfalseMake the field read-only
localestring'en'Locale for segment formatting
granularity'day' | 'month' | 'year' | 'hour' | 'minute' | 'second'Finest unit to display
hourCycle12 | 2412 or 24-hour time format
hideTimeZonebooleanfalseHide time zone segment
requiredbooleanfalseMark as required
onStartValueChange(value) => voidCalled when start date changes
onEndValueChange(value) => voidCalled when end date changes

Sub-components

ComponentKey PropsDescription
DateRangeField.LabelclassLabel for the field
DateRangeField.Inputtype, name, classSegmented date input for start or end (type="start" | "end")
DateRangeField.Segmentpart, classIndividual date segment

Usage

<script>
  import { DateRangeField } from '@chrissnell/chonky-ui';
  import { CalendarDate } from '@internationalized/date';

  let value = $state({
    start: new CalendarDate(2026, 4, 3),
    end: new CalendarDate(2026, 4, 10)
  });
</script>

<DateRangeField.Root bind:value>
  <DateRangeField.Label>Date range</DateRangeField.Label>
  <div style="display: flex; align-items: center; gap: 0.25rem;">
    <DateRangeField.Input type="start" />
    <span class="date-range-field-separator">–</span>
    <DateRangeField.Input type="end" />
  </div>
</DateRangeField.Root>