# Date Picker
Select dates from a calendar interface.
```svelte
Label
{#snippet children(datePicker)}
{#each datePicker().weekDays as weekDay, id (id)}
{weekDay.short}
{/each}
{#each datePicker().weeks as week, id (id)}
{#each week as day, id (id)}
{day.day}
{/each}
{/each}
{/snippet}
{#snippet children(datePicker)}
{#each datePicker().getMonthsGrid({ columns: 4, format: 'short' }) as months, id (id)}
{#each months as month, id (id)}
{month.label}
{/each}
{/each}
{/snippet}
{#snippet children(datePicker)}
{#each datePicker().getYearsGrid({ columns: 4 }) as years, id (id)}
{#each years as year, id (id)}
{year.label}
{/each}
{/each}
{/snippet}
```
## Controlled
Manage the selected date value with Svelte state.
```svelte
(value = e.value)}>
Picked date: {value.at(0)?.toString()}
{#snippet children(datePicker)}
{#each datePicker().weekDays as weekDay, id (id)}
{weekDay.short}
{/each}
{#each datePicker().weeks as week, id (id)}
{#each week as day, id (id)}
{day.day}
{/each}
{/each}
{/snippet}
{#snippet children(datePicker)}
{#each datePicker().getMonthsGrid({ columns: 4, format: 'short' }) as months, id (id)}
{#each months as month, id (id)}
{month.label}
{/each}
{/each}
{/snippet}
{#snippet children(datePicker)}
{#each datePicker().getYearsGrid({ columns: 4 }) as years, id (id)}
{#each years as year, id (id)}
{year.label}
{/each}
{/each}
{/snippet}
```
## Disabled
Disable the date picker to prevent user interaction.
```svelte
Label
{#snippet children(datePicker)}
{#each datePicker().weekDays as weekDay, id (id)}
{weekDay.short}
{/each}
{#each datePicker().weeks as week, id (id)}
{#each week as day, id (id)}
{day.day}
{/each}
{/each}
{/snippet}
{#snippet children(datePicker)}
{#each datePicker().getMonthsGrid({ columns: 4, format: 'short' }) as months, id (id)}
{#each months as month, id (id)}
{month.label}
{/each}
{/each}
{/snippet}
{#snippet children(datePicker)}
{#each datePicker().getYearsGrid({ columns: 4 }) as years, id (id)}
{#each years as year, id (id)}
{year.label}
{/each}
{/each}
{/snippet}
```
## Minimum and Maximum
Restrict date selection to a specific range using the `min` and `max` props with the `parseDate` helper function.
```svelte
Label
{#snippet children(datePicker)}
{#each datePicker().weekDays as weekDay, id (id)}
{weekDay.short}
{/each}
{#each datePicker().weeks as week, id (id)}
{#each week as day, id (id)}
{day.day}
{/each}
{/each}
{/snippet}
{#snippet children(datePicker)}
{#each datePicker().getMonthsGrid({ columns: 4, format: 'short' }) as months, id (id)}
{#each months as month, id (id)}
{month.label}
{/each}
{/each}
{/snippet}
{#snippet children(datePicker)}
{#each datePicker().getYearsGrid({ columns: 4 }) as years, id (id)}
{#each years as year, id (id)}
{year.label}
{/each}
{/each}
{/snippet}
```
## Range Selection
Enable range selection by setting `selectionMode="range"` on the root component. Use two input fields with `index={0}` and `index={1}` to represent the start and end dates.
```svelte
Select Date Range
{#snippet children(datePicker)}
{#each datePicker().weekDays as weekDay, id (id)}
{weekDay.short}
{/each}
{#each datePicker().weeks as week, id (id)}
{#each week as day, id (id)}
{day.day}
{/each}
{/each}
{/snippet}
{#snippet children(datePicker)}
{#each datePicker().getMonthsGrid({ columns: 4, format: 'short' }) as months, id (id)}
{#each months as month, id (id)}
{month.label}
{/each}
{/each}
{/snippet}
{#snippet children(datePicker)}
{#each datePicker().getYearsGrid({ columns: 4 }) as years, id (id)}
{#each years as year, id (id)}
{year.label}
{/each}
{/each}
{/snippet}
```
## Inline calendar
Display the calendar inline without a popover by adding the `inline` prop to the root component. When using inline mode, omit the `Portal` and `Positioner` components.
```svelte
Label
{#snippet children(datePicker)}
{#each datePicker().weekDays as weekDay, id (id)}
{weekDay.short}
{/each}
{#each datePicker().weeks as week, id (id)}
{#each week as day, id (id)}
{day.day}
{/each}
{/each}
{/snippet}
{#snippet children(datePicker)}
{#each datePicker().getMonthsGrid({ columns: 4, format: 'short' }) as months, id (id)}
{#each months as month, id (id)}
{month.label}
{/each}
{/each}
{/snippet}
{#snippet children(datePicker)}
{#each datePicker().getYearsGrid({ columns: 4 }) as years, id (id)}
{#each years as year, id (id)}
{year.label}
{/each}
{/each}
{/snippet}
```
## Month and Year Selection
Optionally add `` and `` components to provide dropdown selectors for quickly changing the month and year.
```svelte
Label
{#snippet children(datePicker)}
{#each datePicker().weekDays as weekDay, id (id)}
{weekDay.short}
{/each}
{#each datePicker().weeks as week, id (id)}
{#each week as day, id (id)}
{day.day}
{/each}
{/each}
{/snippet}
{#snippet children(datePicker)}
{#each datePicker().getMonthsGrid({ columns: 4, format: 'short' }) as months, id (id)}
{#each months as month, id (id)}
{month.label}
{/each}
{/each}
{/snippet}
{#snippet children(datePicker)}
{#each datePicker().getYearsGrid({ columns: 4 }) as years, id (id)}
{#each years as year, id (id)}
{year.label}
{/each}
{/each}
{/snippet}
```
## Guidelines
### Portal
The Date Picker content is rendered inside a [Portal](/docs/components/portal) component by default to avoid z-index stacking issues. The Portal renders the content at the end of the document body.
### Views
The Date Picker supports three different views:
* **Day view** - Select a specific day from the calendar
* **Month view** - Select a month by clicking the view trigger when in day view
* **Year view** - Select a year by clicking the view trigger when in month view
Use the `` component with the `view` prop to define each view's layout.
### Context
The `` component provides access to the date picker API for rendering dynamic content like weeks, months, and years grids. Use the children snippet pattern to access the API.
### Parse Date
Use the `parseDate` helper function to convert strings or Date objects to the appropriate date format. Zag.js adjusts this using [@internationalized/date](https://github.com/adobe/react-spectrum/tree/main/packages/@internationalized/date) under the hood.
```svelte
```
## API Reference
### DatePickerRootProps
| Property | Default | Type | Description |
| --------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| locale? | "en-US" | string \| undefined | The locale (BCP 47 language tag) to use when formatting the date. |
| translations? | - | IntlTranslations \| undefined | The localized messages to use. |
| ids? | - | Partial\<\{ root: string; label: (index: number) => string; table: (id: string) => string; tableHeader: (id: string) => string; tableBody: (id: string) => string; tableRow: (id: string) => string; ... 11 more ...; positioner: string; }> \| undefined | The ids of the elements in the date picker. Useful for composition. |
| name? | - | string \| undefined | The \`name\` attribute of the input element. |
| timeZone? | "UTC" | string \| undefined | The time zone to use |
| disabled? | - | boolean \| undefined | Whether the calendar is disabled. |
| readOnly? | - | boolean \| undefined | Whether the calendar is read-only. |
| outsideDaySelectable? | false | boolean \| undefined | Whether day outside the visible range can be selected. |
| min? | - | DateValue \| undefined | The minimum date that can be selected. |
| max? | - | DateValue \| undefined | The maximum date that can be selected. |
| closeOnSelect? | true | boolean \| undefined | Whether the calendar should close after the date selection is complete.
This is ignored when the selection mode is \`multiple\`. |
| value? | - | DateValue\[] \| undefined | The controlled selected date(s). |
| defaultValue? | - | DateValue\[] \| undefined | The initial selected date(s) when rendered.
Use when you don't need to control the selected date(s) of the date picker. |
| focusedValue? | - | DateValue \| undefined | The controlled focused date. |
| defaultFocusedValue? | - | DateValue \| undefined | The initial focused date when rendered.
Use when you don't need to control the focused date of the date picker. |
| numOfMonths? | - | number \| undefined | The number of months to display. |
| startOfWeek? | - | number \| undefined | The first day of the week.
\`0\` - Sunday
\`1\` - Monday
\`2\` - Tuesday
\`3\` - Wednesday
\`4\` - Thursday
\`5\` - Friday
\`6\` - Saturday |
| fixedWeeks? | - | boolean \| undefined | Whether the calendar should have a fixed number of weeks.
This renders the calendar with 6 weeks instead of 5 or 6. |
| onValueChange? | - | ((details: ValueChangeDetails) => void) \| undefined | Function called when the value changes. |
| onFocusChange? | - | ((details: FocusChangeDetails) => void) \| undefined | Function called when the focused date changes. |
| onViewChange? | - | ((details: ViewChangeDetails) => void) \| undefined | Function called when the view changes. |
| onOpenChange? | - | ((details: OpenChangeDetails) => void) \| undefined | Function called when the calendar opens or closes. |
| isDateUnavailable? | - | ((date: DateValue, locale: string) => boolean) \| undefined | Returns whether a date of the calendar is available. |
| selectionMode? | "single" | SelectionMode \| undefined | The selection mode of the calendar.
- \`single\` - only one date can be selected
- \`multiple\` - multiple dates can be selected
- \`range\` - a range of dates can be selected |
| format? | - | ((date: DateValue, details: LocaleDetails) => string) \| undefined | The format of the date to display in the input. |
| parse? | - | ((value: string, details: LocaleDetails) => DateValue \| undefined) \| undefined | Function to parse the date from the input back to a DateValue. |
| placeholder? | - | string \| undefined | The placeholder text to display in the input. |
| view? | - | DateView \| undefined | The view of the calendar |
| defaultView? | "day" | DateView \| undefined | The default view of the calendar |
| minView? | "day" | DateView \| undefined | The minimum view of the calendar |
| maxView? | "year" | DateView \| undefined | The maximum view of the calendar |
| positioning? | - | PositioningOptions \| undefined | The user provided options used to position the date picker content |
| open? | - | boolean \| undefined | The controlled open state of the date picker |
| defaultOpen? | - | boolean \| undefined | The initial open state of the date picker when rendered.
Use when you don't need to control the open state of the date picker. |
| inline? | - | boolean \| undefined | Whether to render the date picker inline |
| dir? | "ltr" | "ltr" \| "rtl" \| undefined | The document's text/writing direction. |
| getRootNode? | - | (() => ShadowRoot \| Node \| Document) \| undefined | A root node to correctly resolve document in custom environments. E.x.: Iframes, Electron. |
| element? | - | Snippet\<\[HTMLAttributes\<"div">]> \| undefined | Render the element yourself |
### DatePickerRootProviderProps
| Property | Default | Type | Description |
| -------- | ------- | ------------------------------------------------ | --------------------------- |
| value | - | () => DatePickerApi\ | - |
| element? | - | Snippet\<\[HTMLAttributes\<"div">]> \| undefined | Render the element yourself |
### DatePickerRootContextProps
| Property | Default | Type | Description |
| -------- | ------- | -------------------------------------------- | ----------- |
| children | - | Snippet\<\[() => DatePickerApi\]> | - |
### DatePickerLabelProps
| Property | Default | Type | Description |
| -------- | ------- | -------------------------------------------------- | --------------------------- |
| element? | - | Snippet\<\[HTMLAttributes\<"label">]> \| undefined | Render the element yourself |
### DatePickerControlProps
| Property | Default | Type | Description |
| -------- | ------- | ------------------------------------------------ | --------------------------- |
| element? | - | Snippet\<\[HTMLAttributes\<"div">]> \| undefined | Render the element yourself |
### DatePickerPresetTriggerProps
| Property | Default | Type | Description |
| -------- | ------- | --------------------------------------------------- | --------------------------- |
| value | - | PresetTriggerValue | - |
| element? | - | Snippet\<\[HTMLAttributes\<"button">]> \| undefined | Render the element yourself |
### DatePickerInputProps
| Property | Default | Type | Description |
| ---------- | ------- | -------------------------------------------------- | --------------------------------------- |
| index? | - | number \| undefined | The index of the input to focus. |
| fixOnBlur? | true | boolean \| undefined | Whether to fix the input value on blur. |
| element? | - | Snippet\<\[HTMLAttributes\<"input">]> \| undefined | Render the element yourself |
### DatePickerTriggerProps
| Property | Default | Type | Description |
| -------- | ------- | --------------------------------------------------- | --------------------------- |
| element? | - | Snippet\<\[HTMLAttributes\<"button">]> \| undefined | Render the element yourself |
### DatePickerPositionerProps
| Property | Default | Type | Description |
| -------- | ------- | ------------------------------------------------ | --------------------------- |
| element? | - | Snippet\<\[HTMLAttributes\<"div">]> \| undefined | Render the element yourself |
### DatePickerContentProps
| Property | Default | Type | Description |
| -------- | ------- | ------------------------------------------------ | --------------------------- |
| element? | - | Snippet\<\[HTMLAttributes\<"div">]> \| undefined | Render the element yourself |
### DatePickerYearSelectProps
| Property | Default | Type | Description |
| -------- | ------- | --------------------------------------------------- | --------------------------- |
| element? | - | Snippet\<\[HTMLAttributes\<"select">]> \| undefined | Render the element yourself |
### DatePickerMonthSelectProps
| Property | Default | Type | Description |
| -------- | ------- | --------------------------------------------------- | --------------------------- |
| element? | - | Snippet\<\[HTMLAttributes\<"select">]> \| undefined | Render the element yourself |
### DatePickerViewProps
| Property | Default | Type | Description |
| -------- | ------- | ------------------------------------------------ | --------------------------- |
| view? | - | DateView \| undefined | - |
| element? | - | Snippet\<\[HTMLAttributes\<"div">]> \| undefined | Render the element yourself |
### DatePickerViewControlProps
| Property | Default | Type | Description |
| -------- | ------- | ------------------------------------------------ | --------------------------- |
| element? | - | Snippet\<\[HTMLAttributes\<"div">]> \| undefined | Render the element yourself |
### DatePickerPrevTriggerProps
| Property | Default | Type | Description |
| -------- | ------- | --------------------------------------------------- | --------------------------- |
| element? | - | Snippet\<\[HTMLAttributes\<"button">]> \| undefined | Render the element yourself |
### DatePickerViewTriggerProps
| Property | Default | Type | Description |
| -------- | ------- | --------------------------------------------------- | --------------------------- |
| element? | - | Snippet\<\[HTMLAttributes\<"button">]> \| undefined | Render the element yourself |
### DatePickerRangeTextProps
| Property | Default | Type | Description |
| -------- | ------- | ------------------------------------------------ | --------------------------- |
| element? | - | Snippet\<\[HTMLAttributes\<"div">]> \| undefined | Render the element yourself |
### DatePickerNextTriggerProps
| Property | Default | Type | Description |
| -------- | ------- | --------------------------------------------------- | --------------------------- |
| element? | - | Snippet\<\[HTMLAttributes\<"button">]> \| undefined | Render the element yourself |
### DatePickerTableProps
| Property | Default | Type | Description |
| -------- | ------- | -------------------------------------------------- | --------------------------- |
| element? | - | Snippet\<\[HTMLAttributes\<"table">]> \| undefined | Render the element yourself |
### DatePickerTableHeadProps
| Property | Default | Type | Description |
| -------- | ------- | -------------------------------------------------- | --------------------------- |
| element? | - | Snippet\<\[HTMLAttributes\<"thead">]> \| undefined | Render the element yourself |
### DatePickerTableRowProps
| Property | Default | Type | Description |
| -------- | ------- | ----------------------------------------------- | --------------------------- |
| element? | - | Snippet\<\[HTMLAttributes\<"tr">]> \| undefined | Render the element yourself |
### DatePickerTableHeaderProps
| Property | Default | Type | Description |
| -------- | ------- | ----------------------------------------------- | --------------------------- |
| element? | - | Snippet\<\[HTMLAttributes\<"th">]> \| undefined | Render the element yourself |
### DatePickerTableBodyProps
| Property | Default | Type | Description |
| -------- | ------- | -------------------------------------------------- | --------------------------- |
| element? | - | Snippet\<\[HTMLAttributes\<"tbody">]> \| undefined | Render the element yourself |
### DatePickerTableCellProps
| Property | Default | Type | Description |
| ------------- | ------- | ----------------------------------------------- | --------------------------- |
| disabled? | - | boolean \| undefined | - |
| value | - | number \| DateValue | - |
| columns? | - | number \| undefined | - |
| visibleRange? | - | VisibleRange \| undefined | - |
| element? | - | Snippet\<\[HTMLAttributes\<"td">]> \| undefined | Render the element yourself |
### DatePickerTableCellTriggerProps
| Property | Default | Type | Description |
| -------- | ------- | ------------------------------------------------ | --------------------------- |
| element? | - | Snippet\<\[HTMLAttributes\<"div">]> \| undefined | Render the element yourself |