Date Range Field
Allows users to input a range of dates within a designated field.
	<script lang="ts">
  import { DateRangeField } from "$lib";
  import { CalendarDate } from "@internationalized/date";
 
  let value = {
    start: new CalendarDate(2022, 1, 1),
    end: new CalendarDate(2022, 3, 1)
  };
</script>
 
<DateRangeField.Root bind:value>
  <div class="flex w-full max-w-[300px] flex-col gap-1.5">
    <DateRangeField.Label class="block select-none text-sm font-medium"
      >Hotel dates</DateRangeField.Label
    >
    <DateRangeField.Input
      let:segments
      class="flex h-input w-full max-w-[300px] select-none items-center rounded-input border border-border-input bg-background p-3 text-sm tracking-[0.01em] text-muted-foreground focus-within:border-border-input-hover focus-within:shadow-date-field-focus hover:border-border-input-hover"
    >
      {#each segments.start as { part, value }}
        <div class="inline-block select-none">
          {#if part === "literal"}
            <DateRangeField.Segment type="start" {part} class="p-1">
              {value}
            </DateRangeField.Segment>
          {:else}
            <DateRangeField.Segment
              type="start"
              {part}
              class="rounded-5px px-2 py-1 hover:bg-muted focus:bg-muted focus:text-foreground focus-visible:!ring-0 focus-visible:!ring-offset-0"
            >
              {value}
            </DateRangeField.Segment>
          {/if}
        </div>
      {/each}
      <div aria-hidden class="px-1">-</div>
      {#each segments.end as { part, value }}
        <div class="inline-block select-none">
          {#if part === "literal"}
            <DateRangeField.Segment type="end" {part} class="p-1">
              {value}
            </DateRangeField.Segment>
          {:else}
            <DateRangeField.Segment
              type="end"
              {part}
              class="rounded-5px px-2 py-1 hover:bg-muted focus:bg-muted focus:text-foreground focus-visible:!ring-0 focus-visible:!ring-offset-0"
            >
              {value}
            </DateRangeField.Segment>
          {/if}
        </div>
      {/each}
    </DateRangeField.Input>
  </div>
</DateRangeField.Root>
	
	<script lang="ts">
  import { DateRangeField } from "$lib";
  import { CalendarDate } from "@internationalized/date";
 
  let value = {
    start: new CalendarDate(2022, 1, 1),
    end: new CalendarDate(2022, 3, 1)
  };
</script>
 
<DateRangeField.Root bind:value>
  <div class="flex w-full max-w-[300px] flex-col gap-1.5">
    <DateRangeField.Label class="block select-none text-sm font-medium"
      >Hotel dates</DateRangeField.Label
    >
    <DateRangeField.Input
      let:segments
      class="flex h-input w-full max-w-[300px] select-none items-center rounded-input border border-border-input bg-background p-3 text-sm tracking-[0.01em] text-muted-foreground focus-within:border-border-input-hover focus-within:shadow-date-field-focus hover:border-border-input-hover"
    >
      {#each segments.start as { part, value }}
        <div class="inline-block select-none">
          {#if part === "literal"}
            <DateRangeField.Segment type="start" {part} class="p-1">
              {value}
            </DateRangeField.Segment>
          {:else}
            <DateRangeField.Segment
              type="start"
              {part}
              class="rounded-5px px-2 py-1 hover:bg-muted focus:bg-muted focus:text-foreground focus-visible:!ring-0 focus-visible:!ring-offset-0"
            >
              {value}
            </DateRangeField.Segment>
          {/if}
        </div>
      {/each}
      <div aria-hidden class="px-1">-</div>
      {#each segments.end as { part, value }}
        <div class="inline-block select-none">
          {#if part === "literal"}
            <DateRangeField.Segment type="end" {part} class="p-1">
              {value}
            </DateRangeField.Segment>
          {:else}
            <DateRangeField.Segment
              type="end"
              {part}
              class="rounded-5px px-2 py-1 hover:bg-muted focus:bg-muted focus:text-foreground focus-visible:!ring-0 focus-visible:!ring-offset-0"
            >
              {value}
            </DateRangeField.Segment>
          {/if}
        </div>
      {/each}
    </DateRangeField.Input>
  </div>
</DateRangeField.Root>
	
Structure
	<script lang="ts">
  import { DateField } from "$lib";
</script>
 
<DateField.Root>
  <DateField.Label>Check-in date</DateField.Label>
  <DateField.Input let:segments>
    {#each segments as { part, value }}
      <DateField.Segment {part}>
        {value}
      </DateField.Segment>
    {/each}
  </DateField.Input>
</DateField.Root>
	
	<script lang="ts">
  import { DateField } from "$lib";
</script>
 
<DateField.Root>
  <DateField.Label>Check-in date</DateField.Label>
  <DateField.Input let:segments>
    {#each segments as { part, value }}
      <DateField.Segment {part}>
        {value}
      </DateField.Segment>
    {/each}
  </DateField.Input>
</DateField.Root>
	
Component API
The root date field component.
| Property | Type | Description | 
|---|---|---|
value   |  DateRange   |  The selected date range. Default:
								 —— undefined    |  
onValueChange   |  function   |  A function that is called when the selected date changes. Default:
								 —— undefined    |  
placeholder   |  DateValue |  The placeholder date, which is used to determine what date to start the segments from when no value exists. Default:
								 —— undefined    |  
onPlaceholderChange   |  function   |  A function that is called when the placeholder date changes. Default:
								 —— undefined    |  
isDateUnavailable   |  function   |  A function that returns whether or not a date is unavailable. Default:
								 —— undefined    |  
hourCycle   |  enum   |  The hour cycle to use for formatting times. Defaults to the locale preference Default:
								 —— undefined    |  
granularity   |  enum   |  The granularity to use for formatting the field. Defaults to  Default:
								 —— undefined    |  
hideTimeZone   |  boolean |  Whether or not to hide the time zone segment of the field. Default:
								 false   |  
validationId   |  string |  The id of your validation message element, if any, which will be applied to the  Default:
								 —— undefined    |  
descriptionId   |  string |  The id of your description element, if any, which will be applied to the  Default:
								 —— undefined    |  
maxValue   |  DateValue |  The maximum valid date that can be entered. Default:
								 —— undefined    |  
minValue   |  DateValue |  The minimum valid date that can be entered. Default:
								 —— undefined    |  
locale   |  string |  The locale to use for formatting dates. Default:
								 —— undefined    |  
disabled   |  boolean |  Whether or not the accordion is disabled. Default:
								 false   |  
readonly   |  boolean |  Whether or not the field is readonly. Default:
								 false   |  
readonlySegments   |  object   |  The segments for the start and end fields that should be readonly, meaning users cannot edit them. This is useful for prepopulating fixed segments like years, months, or days. Default:
								 —— undefined    |  
| Slot Property | Type | Description | 
|---|---|---|
ids   |  object   |  The ids of the elements within the component, useful when you don't necessarily want to provide a custom ID, but still want access to the ID being assigned (if any).  |  
isInvalid   |  boolean |  Whether or not the field is invalid.  |  
The container for the segments of the date field.
| Property | Type | Description | 
|---|---|---|
asChild   |  boolean |  Whether to use render delegation with this component or not. Default:
								 false   |  
el   |  HTMLDivElement |  The underlying DOM element being rendered. You can bind to this to programatically interact with the element. Default:
								 —— undefined    |  
| Slot Property | Type | Description | 
|---|---|---|
builder   |  object   |  The builder attributes and actions to apply to the element if using the   |  
segments   |  array   |  An array of objects used to render the segments of the date field.  |  
| Data Attribute | Value | Description | 
|---|---|---|
data-invalid  |  —— |  Present on the element when the field is invalid.  |  
data-disabled  |  —— |  Present on the element when the field is disabled.  |  
data-date-field-input  |  —— |  Present on the element.  |  
A segment of the date field.
| Property | Type | Description | 
|---|---|---|
part *  Required  |  SegmentPart   |  The part of the date to render. Default:
								 —— undefined    |  
type *  Required  |  enum   |  The type of field to render (start or end). Default:
								 —— undefined    |  
asChild   |  boolean |  Whether to use render delegation with this component or not. Default:
								 false   |  
el   |  HTMLDivElement |  The underlying DOM element being rendered. You can bind to this to programatically interact with the element. Default:
								 —— undefined    |  
| Slot Property | Type | Description | 
|---|---|---|
builder   |  object   |  The builder attributes and actions to apply to the element if using the   |  
| Data Attribute | Value | Description | 
|---|---|---|
data-invalid  |  —— |  Present on the element when the field is invalid  |  
data-disabled  |  —— |  Present on the element when the field is disabled  |  
data-segment  |  enum   |  The type of segment the element represents.  |  
data-date-field-segment  |  —— |  Present on the element.  |  
The label for the date field.
| Property | Type | Description | 
|---|---|---|
asChild   |  boolean |  Whether to use render delegation with this component or not. Default:
								 false   |  
el   |  HTMLSpanElement |  The underlying DOM element being rendered. You can bind to this to programatically interact with the element. Default:
								 —— undefined    |  
| Slot Property | Type | Description | 
|---|---|---|
builder   |  object   |  The builder attributes and actions to apply to the element if using the   |  
| Data Attribute | Value | Description | 
|---|---|---|
data-invalid  |  —— |  Present on the element when the field is invalid  |  
data-date-field-label  |  —— |  Present on the element.  |