# 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 |